// Sabertrio Proffie Saber - Blade & Sound Font Configuration #ifdef CONFIG_TOP #include "proffieboard_v2_config.h" #define NUM_BLADES 4 #define NUM_BUTTONS 2 #define VOLUME 1750 const unsigned int maxLedsPerStrip = 144; #define CLASH_THRESHOLD_G 3.4 #define ENABLE_AUDIO #define ENABLE_MOTION #define ENABLE_WS2811 #define ENABLE_SD #define ENABLE_SSD1306 #define COLOR_CHANGE_DIRECT #define IDLE_OFF_TIME 60*2*1000 #define MOTION_TIMEOUT 60*10*1000 #define SHARED_POWER_PINS #define DISABLE_DIAGNOSTIC_COMMANDS #define BLADE_DETECT_PIN 17 #define SAVE_PRESET #endif #ifdef CONFIG_PROP #include"../props/s3button_config.h" #endif #ifdef CONFIG_PRESETS Preset no_blade[] = { { "0-NO_BLADE","", StylePtr(), StylePtr(), StylePtr(), StylePtr>() , }, }; Preset blade[] = { //Fully Responsive RandomFlicker Blade Style ( DodgerBlue ) (animated) { "1-SABERTRIO", "", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>, AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, Moccasin,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>,ResponsiveStabL, TrWipe<600>>,ResponsiveBlastL,Moccasin,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>,Scale,Int<100>,Int<400>>>, SimpleClashL,Moccasin,TrInstant,TrFade<100>,EFFECT_CLASH>>,LockupTrL>, SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Red,Orange>,SmoothStep, Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<600>,Black>,TransitionEffectL, AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL,SmoothStep>>, TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr(), "Sabertrio"}, //Fully Responsive RandomFlicker Blade Style ( Red ) (animated) { "2-DARK_EDITION", "", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>, AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, Moccasin,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,Moccasin,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>, Scale,Int<100>,Int<400>>>,SimpleClashL,Moccasin,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL, Rgb<255,200,0>,DarkOrange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<600>,Black>, TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL, SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr(), "Dark Edition"}, //Fully Responsive RandomFlicker Blade Style ( Red ) (animated) { "19-The_Return", "", StylePtr,RotateColorsX>,RotateColorsX>, RotateColorsX>>,AlphaL,Black,300>,SwingSpeed<400>>,TransitionEffectL>, Int<50>>,TrSmoothFade<600>>,EFFECT_LOCKUP_END>,ResponsiveLockupL,50,1>,TrConcat>,TrFade<100>, Scale,Int<10000>,Int<30000>>,Int<10000>,Scale,Int<10000>,Int<14000>>>,LockupTrL,White,50,1>,Rgb<75,75,150>>,RandomPerLEDFlicker,Rgb<100,100,150>>>,TrWipe<200>,TrWipe<200>,SaberBase::LOCKUP_LIGHTNING_BLOCK>,ResponsiveStabL,TrWipe<600>>, ResponsiveBlastWaveL,Scale,Int<100>,Int<400>>,Int<400>>,ResponsiveBlastWaveL,Int<100>,Int<300>,Scale, Int<10000>,Int<30000>>,Int<10000>,EFFECT_CLASH>,LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Coral,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,RandomBlink<30000,White,Black>, TrWipeIn<200>,Mix>,Int<1000>,Int<6000>>,Int<-3000>>,Black,White>,TrDelay<400>,Mix,Int<-3000>>,Black,White>,TrWipe<300>>, TrWipeIn<1100>,Black>,TransitionEffectL,AlphaL,SmoothStep,Int<-4000>>>,TrDelay<7700>>,EFFECT_PREON>,TransitionEffectL, BrownNoiseFlickerL>,TrWipeIn<200>>,EFFECT_PREON>>>(), StylePtr(), "The Return"}, //Fully Responsive RandomFlicker Blade Style ( DeepSkyBlue ) (original) { "3-THE_LIGHT","", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>, AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat,LemonChiffon,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,LemonChiffon,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>, Scale,Int<100>,Int<400>>>,SimpleClashL,LemonChiffon,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL, TrWipeIn<800>,Black>,TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>, AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr(), "The Light"}, //Fully Responsive RandomFlicker Blade Style ( Green ) (prequel) { "4-THE_BALANCE","" , StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat,NavajoWhite, TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>, TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat, Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>,ResponsiveStabL,TrWipe<600>>, ResponsiveBlastL,NavajoWhite,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>,Scale,Int<100>,Int<400>>>, SimpleClashL,NavajoWhite,TrInstant,TrFade<100>,EFFECT_CLASH>>,LockupTrL>, SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Red,Orange>,SmoothStep, Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<900>,Black>,TransitionEffectL, AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL,SmoothStep>>, TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<900>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<900>,Black>>>(), StylePtr(), "The Balance"}, //Fully Responsive RandomFlicker Blade Style ( Red ) (original) { "5-THE_DARK","" , StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, LemonChiffon,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant, TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>,ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,LemonChiffon,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>,Scale, Int<100>,Int<400>>>,SimpleClashL,LemonChiffon,TrInstant,TrFade<100>,EFFECT_CLASH>>,LockupTrL>, SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Rgb<255,200,0>,DarkOrange>, SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<800>,Black>,TransitionEffectL, AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL,SmoothStep>>, TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr(), "The Dark"}, //Fully Responsive RandomFlicker Blade Style ( Red ) (animated) { "6-VENGEANCE","" , StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, Moccasin,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,Moccasin,TrInstant,TrFade<50>,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,Moccasin,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Rgb<255,200,0>,DarkOrange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>, InOutTrL,TrWipeIn<800>,Black>,TransitionEffectL,AlphaL,SmoothStep>>, TrDelay<2000>,AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr(), "Vengence"}, //Fully Responsive Kylo Ren Unstable Neopixel Lightsaber (Unstable Swing) Styles ( Red ) (sequel) { "7-KROSSGUARD", "", StylePtr,StyleFire,RandomPerLEDFlicker>, RotateColorsX>>,300>,RotateColorsX>,0,6,FireConfig<10,1000,2>,FireConfig<10,1000,2>,FireConfig<10,1000,2>, FireConfig<10,1000,2>>,StyleFire,RotateColorsX>,300>,Mix, RotateColorsX>,RotateColorsX>>,0,8,FireConfig<10,1200,1>,FireConfig<10,1200,1>,FireConfig<10,1200,1>, FireConfig<10,1200,1>>>,LockupTrL,Bump,Scale,Int<10000>,Int<30000>>, Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>, Int<10000>>,Int<10000>>>>,TrConcat,EFFECT_LOCKUP_BEGIN>,TrFade<400>>, TrConcat>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>, TrSmoothFade<600>>>,ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,EFFECT_CLASH>>, AlphaL>,Int<22000>,Int<40000>>,Int<22000>>>,LockupTrL>, SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Rgb<255,200,0>,DarkOrange>, SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<800>,Black>, TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL, SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,StyleFire,RandomPerLEDFlicker>, RotateColorsX>>,300>,RotateColorsX>,0,6,FireConfig<10,1000,2>,FireConfig<10,1000,2>,FireConfig<10,1000,2>, FireConfig<10,1000,2>>,StyleFire,RotateColorsX>,300>,Mix,RotateColorsX>,RotateColorsX>>,0,8,FireConfig<10,1200,1>,FireConfig<10,1200,1>,FireConfig<10,1200,1>,FireConfig<10,1200,1>>>, ResponsiveLightningBlockL>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>,AlphaL>,Int<22000>,Int<40000>>,Int<22000>>>, InOutTrL,TrWipeIn<800>,Black>>>>(), StylePtr,StyleFire,RandomPerLEDFlicker>, RotateColorsX>>,300>,RotateColorsX>,0,6,FireConfig<10,1000,2>,FireConfig<10,1000,2>,FireConfig<10,1000,2>, FireConfig<10,1000,2>>,StyleFire,RotateColorsX>,300>,Mix,RotateColorsX>,RotateColorsX>>,0,8,FireConfig<10,1200,1>,FireConfig<10,1200,1>,FireConfig<10,1200,1>,FireConfig<10,1200,1>>>, ResponsiveLightningBlockL>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>,AlphaL>,Int<22000>,Int<40000>>,Int<22000>>>, InOutTrL,TrWipeIn<800>,Black>>>>(), StylePtr(), "Krossguard"}, //Fully Responsive AudioFlicker Canon Jedi/Sith Neopixel Lightsaber Styles ( Silver ) (animated) { "8-SNIPPETS", "", StylePtr>,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, Moccasin,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,Moccasin,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>, Scale,Int<100>,Int<400>>>,SimpleClashL,Moccasin,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL, Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<800>,Black>, TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>, AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<800>,Black>>>(), StylePtr(), "Snippets"}, //Fully Responsive RandomFlicker Blade Style ( Red ) (prequel) { "9-MENACE", "", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>, AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat,NavajoWhite,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat, TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,NavajoWhite,TrInstant,TrFade<50>,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,NavajoWhite,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Rgb<255,200,0>,DarkOrange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>, InOutTrL,TrWipeIn<600>,Black>,TransitionEffectL,AlphaL,SmoothStep>>, TrDelay<2000>,AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr(), "Menace"}, //Fully Responsive RandomFlicker Blade Style ( Gold ) (animated) { "10-TEMPLE_GUARDIAN", "", StylePtr>,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>, AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, Moccasin,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,Moccasin,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>, Scale,Int<100>,Int<400>>>,SimpleClashL,Moccasin,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL, TrWipeIn<600>,Black>,TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>, AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<600>,Black>>>(), StylePtr(), "Temple Guardian"}, //Shock Baton Neopixel Lightsaber Style ( Shock Baton ) (sequel) (polar spark,center in) { "11-SHOCK_BATON", "", StylePtr,Black,300>,Stripes<3000,-4000,Rgb<50,50,75>,Rgb<100,100,150>,Rgb<10,10,15>, Rgb<150,150,225>>,200>,LockupTrL,Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>, Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>, Int<10000>>>>,TrConcat,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>, ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>, TrConcat>,30>,TrSmoothFade<600>>>,ResponsiveStabL,TrWipe<600>>, ResponsiveBlastL,EFFECT_BLAST>,Int<400>,Scale,Int<100>,Int<400>>>, SimpleClashL,EFFECT_CLASH>>,LockupTrL>,SmoothStep, Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>, TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<300>>,TrJoin,TrWipeIn<600>>,Black>, TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>, AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>, TransitionEffectL>,Rgb<100,100,150>,300>,LayerFunctions,Int<10000>>, Bump,Int<10000>>>>,TrDelay<800>>,EFFECT_PREON>>>(), StylePtr,Black,300>,Stripes<3000,-4000,Rgb<50,50,75>,Rgb<100,100,150>, Rgb<10,10,15>,Rgb<150,150,225>>,200>,ResponsiveLightningBlockL>,TrConcat,Int<18000>>>,TrFade<200>>, TrConcat>,30>,TrSmoothFade<600>>>,InOutTrL,TrWipeIn<300>>,TrJoin,TrWipeIn<600>>,Black>, TransitionEffectL>,Rgb<100,100,150>,300>,LayerFunctions,Int<10000>>, Bump,Int<10000>>>>,TrDelay<800>>,EFFECT_PREON>>>(), StylePtr,Black,300>,Stripes<3000,-4000,Rgb<50,50,75>,Rgb<100,100,150>, Rgb<10,10,15>,Rgb<150,150,225>>,200>,ResponsiveLightningBlockL>,TrConcat,Int<18000>>>,TrFade<200>>, TrConcat>,30>,TrSmoothFade<600>>>,InOutTrL,TrWipeIn<300>>,TrJoin,TrWipeIn<600>>,Black>, TransitionEffectL>,Rgb<100,100,150>,300>,LayerFunctions,Int<10000>>, Bump,Int<10000>>>>,TrDelay<800>>,EFFECT_PREON>>>(), StylePtr(), "Shock Baton"}, //Fully Responsive AudioFlicker Canon Jedi/Sith Neopixel Lightsaber Styles ( Red ) (prequel) { "12-THE_TRAGEDY", "", StylePtr,RotateColorsX>>,LockupTrL>,Bump, Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL, Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat,NavajoWhite,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>, SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>, TrConcat>,30>,TrSmoothFade<600>>>,ResponsiveStabL,TrWipe<600>>, ResponsiveBlastL,NavajoWhite,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>,Scale,Int<100>,Int<400>>>, SimpleClashL,NavajoWhite,TrInstant,TrFade<100>,EFFECT_CLASH>>,TransitionEffectL>,RandomPerLEDFlicker>,Black>,BrownNoiseFlicker>, RotateColorsX>,200>,RandomPerLEDFlicker>,RotateColorsX>>>, TrFade<1200>>,EFFECT_IGNITION>,TransitionEffectL,TrFade<1000>>,EFFECT_RETRACTION>,LockupTrL>, SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Rgb<255,200,0>,DarkOrange>, SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<700>,Black>,TransitionEffectL, AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL, SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, TransitionEffectL,Black>,BrownNoiseFlicker,200>, RandomPerLEDFlicker,Rgb<30,30,30>>>,TrFade<800>>,EFFECT_IGNITION>,TransitionEffectL,TrFade<1000>>,EFFECT_RETRACTION>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, TransitionEffectL,Black>,BrownNoiseFlicker,200>, RandomPerLEDFlicker,Rgb<30,30,30>>>,TrFade<800>>,EFFECT_IGNITION>,TransitionEffectL,TrFade<1000>>,EFFECT_RETRACTION>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr(), "The Tragedy"}, //Fully Responsive RandomFlicker Blade Style ( Cyan ) (prequel) { "13-TEENSY_SF", "", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>, AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, NavajoWhite,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat, TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,NavajoWhite,TrInstant,TrFade<50>,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,NavajoWhite,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL, Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<700>,Black>, TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL, SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr(), "TeensySF"}, //Fully Responsive RandomFlicker Blade Style ( Blue ) (original) { "14-SMOOTH_JEDI", "", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, LemonChiffon,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,LemonChiffon,TrInstant,TrFade<50>,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,LemonChiffon,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>, InOutTrL,TrWipeIn<700>,Black>,TransitionEffectL,AlphaL, SmoothStep>>,TrDelay<2000>,AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr(), "Smooth Jedi"}, //Fully Responsive AudioFlicker Canon Jedi/Sith Neopixel Lightsaber Styles ( Amber/Gold ) (sequel) { "15-SMOOTH_GREY", "", StylePtr>,RotateColorsX>>,LockupTrL, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,EFFECT_LOCKUP_BEGIN>,TrFade<400>>, SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>, TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>,ResponsiveStabL,TrWipe<600>>, ResponsiveBlastL,EFFECT_BLAST>,Int<400>,Scale,Int<100>,Int<400>>>, SimpleClashL,EFFECT_CLASH>>,LockupTrL>,SmoothStep, Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>, TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL,TrWipeIn<700>,Black>,TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>,AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr(), "Smooth Grey"}, //Fully Responsive RandomFlicker Blade Style ( Purple ) (prequel) { "16-SMOOTH_FUZZ", "", StylePtr>,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, NavajoWhite,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,NavajoWhite,TrInstant,TrFade<50>,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,NavajoWhite,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL, TrWipeIn<900>,Black>,TransitionEffectL,AlphaL,SmoothStep>>, TrDelay<2000>,AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr>,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<700>,Black>>>(), StylePtr(), "Smooth Fuzz"}, //Fully Responsive "Power Surge" Unstable Neopixel Lightsaber Style ( Red ) (original) { "17-ROGUE_COMMANDER", "", StylePtr>,RotateColorsX>>, TransitionLoopL,40>,Int<250>,Int<100>,Int<200>,Int<0>>>, TransitionLoopL,40>,Int<350>,Int<100>,Int<300>,Int<0>>>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, LemonChiffon,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,LemonChiffon,TrInstant,TrFade<50>,EFFECT_BLAST>,Int<400>, Scale,Int<100>,Int<400>>>,SimpleClashL,LemonChiffon,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Rgb<255,200,0>,DarkOrange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>, InOutTrL,TrWipeIn<900>,Black>,TransitionEffectL,AlphaL,SmoothStep>>, TrDelay<2000>,AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr>,RotateColorsX>>, TransitionLoopL,40>,Int<250>,Int<100>,Int<200>,Int<0>>>, TransitionLoopL,40>,Int<350>,Int<100>,Int<300>,Int<0>>>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<900>,Black>>>(), StylePtr>,RotateColorsX>>, TransitionLoopL,40>,Int<250>,Int<100>,Int<200>,Int<0>>>, TransitionLoopL,40>,Int<350>,Int<100>,Int<300>,Int<0>>>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<900>,Black>>>(), StylePtr(), "Rogue Commander"}, //Fully Responsive RandomFlicker Blade Style ( Green ) (original) { "18-TYTHONIAN_CYRSTAL", "", StylePtr,RotateColorsX>>,LockupTrL>, Bump,Scale,Int<10000>,Int<30000>>,Int<10000>>,Scale,Int<14000>,Int<18000>>>>,AlphaL,Scale,Int<10000>,Int<30000>>,Int<10000>>,Int<10000>>>>,TrConcat, LemonChiffon,TrInstant,TrFade<200>,EFFECT_LOCKUP_BEGIN>,TrFade<400>>,TrConcat,TrInstant,TrFade<200>, EFFECT_LOCKUP_BEGIN>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL,50,1>,TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, ResponsiveStabL,TrWipe<600>>,ResponsiveBlastL,LemonChiffon,TrInstant,TrFade<50>,EFFECT_BLAST>, Int<400>,Scale,Int<100>,Int<400>>>,SimpleClashL,LemonChiffon,TrInstant,TrFade<100>,EFFECT_CLASH>>, LockupTrL>,SmoothStep,Int<5000>>>,TrWipeIn<400>,TrFade<300>,SaberBase::LOCKUP_DRAG>, LockupTrL,Red,Orange>,SmoothStep,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,InOutTrL, TrWipeIn<800>,Black>,TransitionEffectL,AlphaL,SmoothStep>>,TrDelay<2000>, AlphaL,SmoothStep>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<900>,Black>>>(), StylePtr,RotateColorsX>>,ResponsiveLightningBlockL>, TrConcat,Int<18000>>>,TrFade<200>>,TrConcat>,30>,TrSmoothFade<600>>>, InOutTrL,TrWipeIn<900>,Black>>>(), StylePtr(), "Tythonian Crytal"} }; BladeConfig blades[] = { { 0, WS281XBladePtr<115, bladePin, Color8::GRB, PowerPINS >(), WS281XBladePtr<20, blade2Pin, Color8::GRB, PowerPINS >(), WS281XBladePtr<20, blade4Pin, Color8::GRB, PowerPINS >(), SimpleBladePtr, NoLED, NoLED, NoLED, bladePowerPin1, -1, -1, -1>() , CONFIGARRAY(blade) }, { NO_BLADE, WS281XBladePtr<115, bladePin, Color8::GRB, PowerPINS >(), WS281XBladePtr<20, blade2Pin, Color8::GRB, PowerPINS >(), WS281XBladePtr<20, blade4Pin, Color8::GRB, PowerPINS >(), SimpleBladePtr, NoLED, NoLED, NoLED, bladePowerPin1, -1, -1, -1>() , CONFIGARRAY(no_blade) }, }; #endif #ifdef CONFIG_BUTTONS Button PowerButton(BUTTON_POWER, powerButtonPin, "pow"); Button AuxButton(BUTTON_AUX, auxPin, "aux"); #endif