6969// ========================================================================================================================
7070
7171
72- static const char _data_FX_mode_Module_Experiment10[] PROGMEM = " Y💡Module_Experiment10 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
72+ // Combined effects with custom parameters (effects that share a _base method in ANIMartRIX)
73+ static const char _data_FX_mode_Module_Experiment810[] PROGMEM = " Y💡Module_Experiment810 ☾@Speed,,W,,, HSV Color,Gamma Correction;;1;2;c1=128,o1=0,o2=0" ; // c1: w 0.3-1.0, o1: use_hsv
7374static const char _data_FX_mode_Module_Experiment9[] PROGMEM = " Y💡Module_Experiment9 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
74- static const char _data_FX_mode_Module_Experiment8[] PROGMEM = " Y💡Module_Experiment8 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
7575static const char _data_FX_mode_Module_Experiment7[] PROGMEM = " Y💡Module_Experiment7 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
7676static const char _data_FX_mode_Module_Experiment6[] PROGMEM = " Y💡Module_Experiment6 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
7777static const char _data_FX_mode_Module_Experiment5[] PROGMEM = " Y💡Module_Experiment5 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
7878static const char _data_FX_mode_Module_Experiment4[] PROGMEM = " Y💡Module_Experiment4 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
7979static const char _data_FX_mode_Zoom2[] PROGMEM = " Y💡Zoom2 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
80- static const char _data_FX_mode_Module_Experiment3[] PROGMEM = " Y💡Module_Experiment3 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
81- static const char _data_FX_mode_Module_Experiment2[] PROGMEM = " Y💡Module_Experiment2 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
80+ static const char _data_FX_mode_Module_Experiment23[] PROGMEM = " Y💡Module_Experiment23 ☾@Speed,,Dist Offset,Dist Scale,,,Gamma Correction;;1;2;c1=128,c2=128,o2=0" ; // c1: dist_offset, c2: dist_scale
8281static const char _data_FX_mode_Module_Experiment1[] PROGMEM = " Y💡Module_Experiment1 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
8382static const char _data_FX_mode_Parametric_Water[] PROGMEM = " Y💡Parametric_Water ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
8483static const char _data_FX_mode_Water[] PROGMEM = " Y💡Water ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
8584static const char _data_FX_mode_Complex_Kaleido_6[] PROGMEM = " Y💡Complex_Kaleido_6 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
8685static const char _data_FX_mode_Complex_Kaleido_5[] PROGMEM = " Y💡Complex_Kaleido_5 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
8786static const char _data_FX_mode_Complex_Kaleido_4[] PROGMEM = " Y💡Complex_Kaleido_4 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
8887static const char _data_FX_mode_Complex_Kaleido_3[] PROGMEM = " Y💡Complex_Kaleido_3 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
89- static const char _data_FX_mode_Complex_Kaleido_2[] PROGMEM = " Y💡Complex_Kaleido_2 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
90- static const char _data_FX_mode_Complex_Kaleido[] PROGMEM = " Y💡Complex_Kaleido ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
91- static const char _data_FX_mode_SM10[] PROGMEM = " Y💡SM10 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
92- static const char _data_FX_mode_SM9[] PROGMEM = " Y💡SM9 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
88+ static const char _data_FX_mode_Complex_Kaleido12[] PROGMEM = " Y💡Complex_Kaleido12 ☾@Speed,,Size,,,, Gamma Correction;;1;2;c1=128,o2=0" ; // c1: size 0.5-1.0
89+ static const char _data_FX_mode_SM910[] PROGMEM = " Y💡SM910 ☾@Speed,,Scale,,, Variant,Gamma Correction;;1;2;c1=128,o1=0,o2=0" ; // c1: scale 0.6-1.0, o1: variant10
9390static const char _data_FX_mode_SM8[] PROGMEM = " Y💡SM8 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
9491static const char _data_FX_mode_SM7[] PROGMEM = " Y💡SM7 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
95- static const char _data_FX_mode_SM6[] PROGMEM = " Y💡SM6 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
96- static const char _data_FX_mode_SM5[] PROGMEM = " Y💡SM5 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
92+ static const char _data_FX_mode_SM56[] PROGMEM = " Y💡SM56 ☾@Speed,,Zoom,,, Variant,Gamma Correction;;1;2;c1=128,o1=0,o2=0" ; // c1: s 0.7-1.0, o1: variant6
9793static const char _data_FX_mode_SM4[] PROGMEM = " Y💡SM4 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
9894static const char _data_FX_mode_SM3[] PROGMEM = " Y💡SM3 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
9995static const char _data_FX_mode_SM2[] PROGMEM = " Y💡SM2 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
10096static const char _data_FX_mode_SM1[] PROGMEM = " Y💡SM1 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
10197static const char _data_FX_mode_Big_Caleido[] PROGMEM = " Y💡Big_Caleido ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
102- static const char _data_FX_mode_RGB_Blobs5[] PROGMEM = " Y💡RGB_Blobs5 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
103- static const char _data_FX_mode_RGB_Blobs4[] PROGMEM = " Y💡RGB_Blobs4 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
104- static const char _data_FX_mode_RGB_Blobs3[] PROGMEM = " Y💡RGB_Blobs3 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
105- static const char _data_FX_mode_RGB_Blobs2[] PROGMEM = " Y💡RGB_Blobs2 ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
98+ static const char _data_FX_mode_RGB_Blobs45[] PROGMEM = " Y💡RGB_Blobs45 ☾@Speed,,Scale,,,, Gamma Correction;;1;2;c1=128,o2=0" ; // c1: scale 0.05-0.1
99+ static const char _data_FX_mode_RGB_Blobs23[] PROGMEM = " Y💡RGB_Blobs23 ☾@Speed,,,,,Variant,Gamma Correction;;1;2;o1=0,o2=0" ; // o1: variant3
106100static const char _data_FX_mode_RGB_Blobs[] PROGMEM = " Y💡RGB_Blobs ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
107101static const char _data_FX_mode_Polar_Waves[] PROGMEM = " Y💡Polar_Waves ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
108102static const char _data_FX_mode_Slow_Fade[] PROGMEM = " Y💡Slow_Fade ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
@@ -122,6 +116,11 @@ static const char _data_FX_mode_Waves[] PROGMEM = "Y💡Waves ☾@Speed,,,,,,Gam
122116static const char _data_FX_mode_Chasing_Spirals[] PROGMEM = " Y💡Chasing_Spirals ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
123117static const char _data_FX_mode_Rotating_Blob[] PROGMEM = " Y💡Rotating_Blob ☾@Speed,,,,,,Gamma Correction;;1;2;o2=0" ;
124118
119+ // local float map helper (same as in FX.cpp but needed here since that one is static)
120+ static float animartrix_mapf (float x, float in_min, float in_max, float out_min, float out_max) {
121+ if (in_max == in_min) return out_min;
122+ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
123+ }
125124
126125class ANIMartRIXMod :public ANIMartRIX {
127126 private:
@@ -168,21 +167,19 @@ class ANIMartRIXMod:public ANIMartRIX {
168167};
169168ANIMartRIXMod anim;
170169
171- uint16_t mode_Module_Experiment10 () {
172- anim.initEffect ();
173- anim.Module_Experiment10 ();
170+ uint16_t mode_Module_Experiment810 () {
171+ anim.initEffect ();
172+ // c1 maps 0-255 to w range 0.3-1.0, o1 selects HSV color mode
173+ float w = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 0 .3f , 1 .0f );
174+ bool use_hsv = SEGMENT .check1 ;
175+ anim.Module_Experiment810_base (w, use_hsv);
174176 return FRAMETIME ;
175177}
176178uint16_t mode_Module_Experiment9 () {
177179 anim.initEffect ();
178180 anim.Module_Experiment9 ();
179181 return FRAMETIME ;
180182}
181- uint16_t mode_Module_Experiment8 () {
182- anim.initEffect ();
183- anim.Module_Experiment8 ();
184- return FRAMETIME ;
185- }
186183uint16_t mode_Module_Experiment7 () {
187184 anim.initEffect ();
188185 anim.Module_Experiment7 ();
@@ -208,14 +205,15 @@ uint16_t mode_Zoom2() {
208205 anim.Zoom2 ();
209206 return FRAMETIME ;
210207}
211- uint16_t mode_Module_Experiment3 () {
212- anim.initEffect ();
213- anim.Module_Experiment3 ();
214- return FRAMETIME ;
215- }
216- uint16_t mode_Module_Experiment2 () {
217- anim.initEffect ();
218- anim.Module_Experiment2 ();
208+ uint16_t mode_Module_Experiment23 () {
209+ anim.initEffect ();
210+ // c1 maps 0-255 to dist_offset 12-16, c2 maps 0-255 to dist_scale 4-16
211+ float dist_offset = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 12 .0f , 16 .0f );
212+ float dist_scale = animartrix_mapf (SEGMENT .custom2 , 0 , 255 , 4 .0f , 16 .0f );
213+ // speed derived from dist_offset ratio, dir_idx: 0 for high offset, 3 for low
214+ float speed = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 0 .01f , 0 .02f );
215+ int dir_idx = (SEGMENT .custom1 < 128 ) ? 3 : 0 ;
216+ anim.Module_Experiment23_base (speed, dist_offset, dist_scale, dir_idx);
219217 return FRAMETIME ;
220218}
221219uint16_t mode_Module_Experiment1 () {
@@ -253,24 +251,20 @@ uint16_t mode_Complex_Kaleido_3() {
253251 anim.Complex_Kaleido_3 ();
254252 return FRAMETIME ;
255253}
256- uint16_t mode_Complex_Kaleido_2 () {
257- anim.initEffect ();
258- anim.Complex_Kaleido_2 ();
254+ uint16_t mode_Complex_Kaleido12 () {
255+ anim.initEffect ();
256+ // c1 maps 0-255 to size 0.5-1.0
257+ float size = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 0 .5f , 1 .0f );
258+ anim.Complex_Kaleido_12_base (size);
259259 return FRAMETIME ;
260260}
261- uint16_t mode_Complex_Kaleido () {
262- anim.initEffect ();
263- anim.Complex_Kaleido ();
264- return FRAMETIME ;
265- }
266- uint16_t mode_SM10 () {
267- anim.initEffect ();
268- anim.SM10 ();
269- return FRAMETIME ;
270- }
271- uint16_t mode_SM9 () {
272- anim.initEffect ();
273- anim.SM9 ();
261+ uint16_t mode_SM910 () {
262+ anim.initEffect ();
263+ // c1 maps 0-255 to scale 0.6-1.0, o1 selects variant10
264+ float scale = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 0 .6f , 1 .0f );
265+ bool variant10 = SEGMENT .check1 ;
266+ float speed = variant10 ? 0 .006f : 0 .005f ;
267+ anim.SM910_base (speed, scale, variant10);
274268 return FRAMETIME ;
275269}
276270uint16_t mode_SM8 () {
@@ -284,14 +278,12 @@ uint16_t mode_SM8() {
284278//
285279// return FRAMETIME;
286280// }
287- uint16_t mode_SM6 () {
288- anim.initEffect ();
289- anim.SM6 ();
290- return FRAMETIME ;
291- }
292- uint16_t mode_SM5 () {
293- anim.initEffect ();
294- anim.SM5 ();
281+ uint16_t mode_SM56 () {
282+ anim.initEffect ();
283+ // c1 maps 0-255 to s 0.7-1.0, o1 selects variant6
284+ float s = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 0 .7f , 1 .0f );
285+ bool variant6 = SEGMENT .check1 ;
286+ anim.SM56_base (s, variant6);
295287 return FRAMETIME ;
296288}
297289uint16_t mode_SM4 () {
@@ -319,24 +311,18 @@ uint16_t mode_Big_Caleido() {
319311 anim.Big_Caleido ();
320312 return FRAMETIME ;
321313}
322- uint16_t mode_RGB_Blobs5 () {
323- anim.initEffect ();
324- anim.RGB_Blobs5 ();
325- return FRAMETIME ;
326- }
327- uint16_t mode_RGB_Blobs4 () {
328- anim.initEffect ();
329- anim.RGB_Blobs4 ();
314+ uint16_t mode_RGB_Blobs45 () {
315+ anim.initEffect ();
316+ // c1 maps 0-255 to scale 0.05-0.1
317+ float scale = animartrix_mapf (SEGMENT .custom1 , 0 , 255 , 0 .05f , 0 .1f );
318+ anim.RGB_Blobs45_base (scale);
330319 return FRAMETIME ;
331320}
332- uint16_t mode_RGB_Blobs3 () {
333- anim.initEffect ();
334- anim.RGB_Blobs3 ();
335- return FRAMETIME ;
336- }
337- uint16_t mode_RGB_Blobs2 () {
338- anim.initEffect ();
339- anim.RGB_Blobs2 ();
321+ uint16_t mode_RGB_Blobs23 () {
322+ anim.initEffect ();
323+ // o1 selects variant3 (different dist offset and color mapping)
324+ bool variant3 = SEGMENT .check1 ;
325+ anim.RGB_Blobs23_base (variant3);
340326 return FRAMETIME ;
341327}
342328uint16_t mode_RGB_Blobs () {
@@ -442,40 +428,33 @@ class AnimartrixUsermod : public Usermod {
442428
443429 if (!enabled) return ;
444430
445- strip.addEffect (203 , &mode_Module_Experiment10, _data_FX_mode_Module_Experiment10 );
431+ strip.addEffect (203 , &mode_Module_Experiment810, _data_FX_mode_Module_Experiment810 );
446432 strip.addEffect (204 , &mode_Module_Experiment9, _data_FX_mode_Module_Experiment9);
447- strip.addEffect (205 , &mode_Module_Experiment8, _data_FX_mode_Module_Experiment8);
448433 strip.addEffect (206 , &mode_Module_Experiment7, _data_FX_mode_Module_Experiment7);
449434 strip.addEffect (207 , &mode_Module_Experiment6, _data_FX_mode_Module_Experiment6);
450435 strip.addEffect (208 , &mode_Module_Experiment5, _data_FX_mode_Module_Experiment5);
451436 strip.addEffect (209 , &mode_Module_Experiment4, _data_FX_mode_Module_Experiment4);
452437 strip.addEffect (210 , &mode_Zoom2, _data_FX_mode_Zoom2);
453- strip.addEffect (211 , &mode_Module_Experiment3, _data_FX_mode_Module_Experiment3);
454- strip.addEffect (212 , &mode_Module_Experiment2, _data_FX_mode_Module_Experiment2);
438+ strip.addEffect (211 , &mode_Module_Experiment23, _data_FX_mode_Module_Experiment23);
455439 strip.addEffect (213 , &mode_Module_Experiment1, _data_FX_mode_Module_Experiment1);
456440 strip.addEffect (214 , &mode_Parametric_Water, _data_FX_mode_Parametric_Water);
457441 strip.addEffect (215 , &mode_Water, _data_FX_mode_Water);
458442 strip.addEffect (216 , &mode_Complex_Kaleido_6, _data_FX_mode_Complex_Kaleido_6);
459443 strip.addEffect (217 , &mode_Complex_Kaleido_5, _data_FX_mode_Complex_Kaleido_5);
460444 strip.addEffect (218 , &mode_Complex_Kaleido_4, _data_FX_mode_Complex_Kaleido_4);
461445 strip.addEffect (219 , &mode_Complex_Kaleido_3, _data_FX_mode_Complex_Kaleido_3);
462- strip.addEffect (220 , &mode_Complex_Kaleido_2, _data_FX_mode_Complex_Kaleido_2);
463- strip.addEffect (221 , &mode_Complex_Kaleido, _data_FX_mode_Complex_Kaleido);
464- strip.addEffect (222 , &mode_SM10, _data_FX_mode_SM10);
465- strip.addEffect (223 , &mode_SM9, _data_FX_mode_SM9);
446+ strip.addEffect (220 , &mode_Complex_Kaleido12, _data_FX_mode_Complex_Kaleido12);
447+ strip.addEffect (222 , &mode_SM910, _data_FX_mode_SM910);
466448 strip.addEffect (224 , &mode_SM8, _data_FX_mode_SM8);
467449 // strip.addEffect(225, &mode_SM7, _data_FX_mode_SM7);
468- strip.addEffect (226 , &mode_SM6, _data_FX_mode_SM6);
469- strip.addEffect (227 , &mode_SM5, _data_FX_mode_SM5);
450+ strip.addEffect (226 , &mode_SM56, _data_FX_mode_SM56);
470451 strip.addEffect (228 , &mode_SM4, _data_FX_mode_SM4);
471452 strip.addEffect (229 , &mode_SM3, _data_FX_mode_SM3);
472453 strip.addEffect (230 , &mode_SM2, _data_FX_mode_SM2);
473454 strip.addEffect (231 , &mode_SM1, _data_FX_mode_SM1);
474455 strip.addEffect (232 , &mode_Big_Caleido, _data_FX_mode_Big_Caleido);
475- strip.addEffect (233 , &mode_RGB_Blobs5, _data_FX_mode_RGB_Blobs5);
476- strip.addEffect (234 , &mode_RGB_Blobs4, _data_FX_mode_RGB_Blobs4);
477- strip.addEffect (235 , &mode_RGB_Blobs3, _data_FX_mode_RGB_Blobs3);
478- strip.addEffect (236 , &mode_RGB_Blobs2, _data_FX_mode_RGB_Blobs2);
456+ strip.addEffect (233 , &mode_RGB_Blobs45, _data_FX_mode_RGB_Blobs45);
457+ strip.addEffect (235 , &mode_RGB_Blobs23, _data_FX_mode_RGB_Blobs23);
479458 strip.addEffect (237 , &mode_RGB_Blobs, _data_FX_mode_RGB_Blobs);
480459 strip.addEffect (238 , &mode_Polar_Waves, _data_FX_mode_Polar_Waves);
481460 strip.addEffect (239 , &mode_Slow_Fade, _data_FX_mode_Slow_Fade);
0 commit comments