ProffieOS v6.7 is now LIVE

I read it, then while running tests this past week I ignored it because you need a fresh clean plate when testing a change or else you risk something that was saved tainting the result(s).

Both @NoSloppy and you’ve reminded me about that bit a year or so ago. :smiley: I just screwed up and forgot to remove the //'s when I got things working right and began building stuff out is all. Rookie mistake.

1 Like

If you saved a backup copy of your .ini files with the changes you just apply them to the new .ini files yo reinstate your edits.

So basically go ahead and copy out all the ini files, run the flash on the board and SD, then go in and remove the new ones and sub in the old ones which makes sense.

Thanks

1 Like

With the caveats covered in the article linked above.

1 Like

First of all: Wavlen is supposed to work with postoff, so if it doesn’t that is a bug and we need to fix it, not avoid it.

Second; I took at the Omen config file (named .cpp for some reason?) and I found one instance where Wavlen<EFFECT_POSTOFF> is used in a TransitionEffectL<...., EFFECT_RETRACTION> That won’t work since the length of the postoff isn’t known until it starts playing.

Maybe that’s what’s causing the problem here? If that’s not it (or not all of it) please let me know and I’ll check again.

I’ve added a save directory to the example on the blade detect wiki page.

1 Like

Thanks Prof. Just checked the Wiki. Only thing I have left to answer is does adding a new save directory for noblade only affect the Presets.ini for the noblade state?

It won’t overwrite my “with blade” state Presets.ini in the root directory, right?

1 Like

That is correct, it will not change your presets.ini in the root directory.

Each entry in the blades[] array can have it’s own save directory. If none is specified. then the root directory is used. Generally, entries that have the same presets can also share save directories.

1 Like

Thank you, Prof. This is helpful and “ties it all together”.

MTFBWY

Thanks, not sure why it’s .cpp, maybe that’s a pastebin thing? It’s definitely .h on my computer lol.

As for the retraction effect, maybe that’s why sometimes it doesn’t work and sometimes it does? Like if I retract 4 times and go through all 4 pstoffs, it should then know then length of each of the pstoffs, so then from that point on it works? Otherwise I’m not sure why it seems to randomly start working. It also looks like that’s how they’re handled in the os6 library as well, here’s a “pstoff” effect I pulled that’s actually a retraction effect, it waits for the in.wav to finish then uses the pstoff.wav in the middle of the EFFECT_RETRACTION, is that not the same thing?

TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<>>,TrInstant>,AlphaL<White,SmoothStep<IntArg<EMITTER_SIZE_ARG,2000>,Int<-4000>>>,TrFadeX<Mult<Scale<IsLessThan<WavLen<EFFECT_POSTOFF>,Int<200>>,WavLen<EFFECT_POSTOFF>,Int<4000>>,Int<10923>>>,AlphaL<Orange,SmoothStep<IntArg<EMITTER_SIZE_ARG,2000>,Int<-4000>>>,TrFadeX<Mult<Scale<IsLessThan<WavLen<EFFECT_POSTOFF>,Int<200>>,WavLen<EFFECT_POSTOFF>,Int<4000>>,Int<10923>>>,AlphaL<Red,SmoothStep<IntArg<EMITTER_SIZE_ARG,2000>,Int<-2000>>>,TrFadeX<Mult<Scale<IsLessThan<WavLen<EFFECT_POSTOFF>,Int<200>>,WavLen<EFFECT_POSTOFF>,Int<4000>>,Int<10923>>>>,EFFECT_RETRACTION>

I also used something similar for the lockup, if you look at that you’ll see I actually have 4 lockups, selected based on the endlock.wav. Each lockup has a different endlock effect, to match the endlock.wavs, and it works perfectly, so I guess somehow when bgnlock>lock starts, the saber already knows which endlock.wav will play? Because the effects match up perfectly. Maybe something similar is going on with the retraction/pstoff? (edit: to be fair, the endlock still uses ms and not wavlen)

I guess I could always split it up into two layers, the first half being an EFFECT_RETRACTION and the second half being an EFFECT_POSTOFF and then only reference the applicable wavs in each effect

I’m also wondering if in>pstoff is linked in the config.ini if it could use that to know what pstoff.wav will play? Sorry for the wall of text lol I’m just kind of going through all my thoughts on this

I think what will happen is that it will use the length of the last played pstoff sound. Also, the value can suddenly change in the middle if a new pstoff is played while the effect is running.

I think it will work if RetractionTime is greater than the length of the retraction sound.

Uhm, no. Not only does it not know which endlock sound it will play, but it also won’t copy the number to where the styles can read it until EFFECT_ENDLOCK occurs.

Yes, that should work better.

Yes, if they are linked, then you can use WavNum<EFFECT_RETRACTION> to know which pstoff will play. However, you can’t use WavLen the same way since it won’t know the length of the pstoff until it plays it.

2 Likes

Testing using #define PROFFIEOS_MOTION_FREQUENCY 800 and leaving my clash and volume alone for this. Nothing bad to report, so far it works and I see less False Clash but I want to test this some more and then retest elsewhere rather than jinxing things.

If anyone else still working against the issue could please test at the same time I would appreciate it. The single best font pack I found so far for repeatability is the Jedi Knight Dark Forces Free font. Set your board up for BATTLE_MODE and use repeated triggered clash if you don’t get an accidental clash. With quick repeated manually triggered clash if the issue exists the same will go into either a lockup or melt showing up. Don’t mess with your Clash or Volume thresholds until you see if the 800 define solves it first. This is where BATTLE_MODE will help because it will make anything false show as something easier to catch than a quick blip since it’s a held effect.

Ultimately please report back what your results are.

Thanks again for the reply, I still have a few questions though if you don’t mind:

So does this mean if I have a 4 second pstoff.wav and am using WavLen, and ignite/retract 3 times within 4 seconds, do they just stack and they just keep “resetting”? Or that if I have 2 pstoffs, one 6 seconds and one 3 seconds and I ignite/retract two times it auto-adjusts to the new one?

What do you mean by this? If we’re using WavLen, ReatractionTime should equal the length of the retraction sound, right? Unless you mean the EFFECT_RETRACTION layer, in which case mine uses a trigger for the effect to start once EFFECT_POSTOFF starts, so that whole retraction transition should always last the length of the retraction sound + pstoff sound.

Really not sure how my endlock selection is working then lol, but it does work. Here’s the code from that same config for specifically selecting the lockup based on endlock.wav. Each lockup effect has its own endlock to match whatever endlock.wav plays. It also works with bgnlock selection, so theoretically with bgnlock>lock paired in the config.ini, you could actually pair a lockup effect to a lock “state”, because it’s picking the whole lockup (begin, state, end) based on bgnlock. I’ve tested it out and not really sure what’s going on behind the scenes but it’s all working:

  //OS6 Fett263 Responsive Intensity Lockup Effect with Sizzle Endlock Selection
  ColorSelect<WavNum<EFFECT_LOCKUP_END>,TrInstant,  
  LockupTrL<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>>,TrConcat<TrExtend<50,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrExtend<3000,TrFade<300>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<3000>>,
  TrConcat<TrInstant,White,TrFade<320>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<240>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<127>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<188>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<438>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<100>>,SaberBase::LOCKUP_NORMAL>,

  LockupTrL<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>>,TrConcat<TrExtend<50,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrExtend<3000,TrFade<300>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<3000>>,
  TrConcat<TrInstant,White,TrFade<315>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,DeepPink>,Black,300>,TrFade<263>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<110>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<313>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<188>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<100>>,SaberBase::LOCKUP_NORMAL>,

  LockupTrL<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>>,TrConcat<TrExtend<50,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrExtend<3000,TrFade<300>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<3000>>,
  TrConcat<TrInstant,White,TrFade<250>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Red>,Black,300>,TrFade<312>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,DeepPink>,Black,300>,TrFade<125>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,DeepPink>,Black,300>,TrFade<375>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,DeepPink>,Black,300>,TrFade<312>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,DeepPink>,Black,300>,TrFade<100>>,SaberBase::LOCKUP_NORMAL>,

  LockupTrL<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>>,TrConcat<TrExtend<50,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrExtend<3000,TrFade<300>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,187,108>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<3000>>,
  TrConcat<TrInstant,White,TrFade<250>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Magenta>,Black,300>,TrFade<312>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<125>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<312>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<250>,AudioFlicker<RotateColorsX<Variation,Rgb<125,0,205>>,RotateColorsX<Variation,Rgb<53,0,101>>>,TrInstant,BrownNoiseFlicker<RotateColorsX<Variation,Rgb16<64971,17247,59477>>,Black,300>,TrFade<100>>,SaberBase::LOCKUP_NORMAL>>,

Since the WavNum<> is running all the time, it will get updated each time lockup ends.
When a new lockup starts, it will use the number from the previous lockup to select the effect.

I would also expect your lockup to suddenly change from one effect to another right when lockup ends, but that might not be visible depending on where this ColorSelect is located.

If I remember correctly, you can also set RetractionTime using edit mode.

Generally WavLen updates to the new length as soon as a sound is played. (Unless you use WavLen with no argument in a MuliTransitionEffectL, because then the Wavlen only gets updated when a new transition occurs.)

Awesome makes sense, thanks for explaining all that! I still have a lot of learning to do lol

I think you’re only the second person to play with this in actual use, so pass on what you learn.

2 Likes