Sabersense

Sabersense Easybuild

Jan 25th, 2026
62
0
Never
5
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 48.64 KB | None | 0 0
  1. /* V7/8-288.
  2. ============================================================
  3. ================== SABERSENSE CONFIG FILE ==================
  4. ============================================================
  5. Built on SA22C programming by Matthew McGeary.
  6. Modified by Chris Carter with help and contributions
  7. from Fredrik Hubinette and Brian Conner.
  8.  
  9. ==========================================================
  10. =================== 1 BUTTON CONTROLS ====================
  11.  
  12. POWER FUNCTIONS
  13. Activate blade Short click while OFF. *
  14. Activate blade mute Long click while OFF, hilt horizontal.
  15. (Hold for one second then release).
  16. Deactivate blade Hold and wait until blade is off while ON.
  17.  
  18. FUNCTIONS WITH BLADE OFF
  19. Next preset Long click while OFF, hilt pointing up.
  20. (Hold for one second then release).
  21. Previous preset Long click while OFF, hilt pointing down.
  22. (Hold for one second then release).
  23. Skip to first preset Press and hold until it switches, hilt pointing upwards.
  24. Skip to middle preset Press and hold until it switches, hilt horizontal.
  25. Skip to last preset Press and hold until it switches, hilt pointing downwards.
  26. Skip forward 5 presets Fast double-click-and-hold, hilt pointing upwards.
  27. Skip back 5 presets Fast double-click-and-hold, hilt pointing downwards.
  28. Skip forward 10 presets Fast triple-click-and-hold, hilt pointing upwards.
  29. Skip back 10 presets Fast triple-click-and-hold, hilt pointing downwards.
  30. Play Character Quote Fast double-click, hilt pointing up, plays sequentially. **
  31. Play Music Track Fast double-click, hilt pointing down. **
  32. Speak battery voltage Fast double-click-and-hold, hilt horizontal.
  33. Run BladeID/Array Select Fast triple-click while OFF. (Applicable installs only).
  34. Restore Factory Defaults Fast four-clicks while OFF, hold on last click.
  35. Release once announcement starts.
  36. Enter/Exit VOLUME MENU Hold and clash while OFF.
  37. Volume up Click while in VOLUME MENU, hilt pointing up.
  38. Volume down Click while in VOLUME MENU, hilt pointing down.
  39. Volume adjusts in increments per click.
  40. You must exit VOLUME MENU to resume using lightsaber normally.
  41.  
  42. FUNCTIONS WITH BLADE ON
  43. Blade lockup Hold and hit clash while ON.
  44. Blade tip drag Hold and hit clash while ON pointing the blade tip down.
  45. Play Character Quote Fast double-click, hilt pointing up, plays sequentially. **
  46. Force Effect Fast double-click, hilt pointing down, plays randomly. **
  47. Lightning block Double click and hold while ON.
  48. Melt Hold and push blade tip against wall (stab). Rotate for heat colours.
  49. Blaster blocks Short click/double click/triple click while ON.
  50. Enter multi-blast mode Hold while swinging for one second and release.
  51. To trigger blaster block, swing saber while in multi-blast mode.
  52. To exit, hold while swinging for one second and release.
  53.  
  54. COLOUR CHANGE FUNCTIONS WITH BLADE ON
  55. Enter COLOUR MENU Fast triple-click while ON.
  56. Announcement confirms you are in the COLOUR MENU.
  57. Cycle to next colour Rotate hilt whilst in COLOUR MENU until desired colour is reached.
  58. Exit COLOUR MENU Short click saves new colour and exits.
  59. Fast-double-click exits and reverts to original colour.
  60. Announcement confirms you are exiting COLOUR MENU.
  61. You must exit COLOUR MENU to resume using lightsaber normally.
  62.  
  63. * = Gesture ignitions also available via defines.
  64. ** = Audio player orientations can be reversed using SABERSENSE_FLIP_AUDIO_PLAYERS define.
  65.  
  66. ============================================================
  67. ===================== 2 BUTTON CONTROLS ====================
  68.  
  69. POWER FUNCTIONS
  70. Activate blade Short click POWER. *
  71. Activate blade mute Long click POWER (hold for one second then release).
  72. Deactivate blade Press and hold POWER and wait until blade is off.
  73.  
  74. FUNCTIONS WITH BLADE OFF
  75. Next preset Short click AUX, hilt pointing upwards.
  76. Previous preset Short click AUX, hilt pointing downwards.
  77. Previous preset Hold AUX and short click POWER.
  78. (Duplicate legacy command).
  79. Skip to first preset Press and hold any button until it switches, hilt upwards.
  80. Skip to middle preset Press and hold any button until it switches, hilt horizontal.
  81. Skip to last preset Press and hold any button until it switches, hilt downwards.
  82. Skip forward 5 presets Fast double-click AUX, hilt pointing upwards.
  83. Skip back 5 presets Fast double-click AUX, hilt pointing downwards.
  84. Skip forward 10 presets Fast triple-click AUX, hilt pointing upwards.
  85. Skip back 10 presets Fast triple-click AUX, hilt pointing downwards.
  86. Play Character Quote Fast double-click POWER, hilt pointing up, plays sequentially. **
  87. Play Music Track Fast double-click POWER, pointing down. **
  88. Speak battery voltage Fast double-click-and-hold POWER.
  89. Run BladeID/Array Select Fast triple-click. (Applicable installs only).
  90. Restore Factory Defaults Fast four-clicks POWER, hold on last click.
  91. Release once announcement starts.
  92. Enter/Exit VOLUME MENU Hold POWER then quickly click AUX and release both simultaneously.
  93. Volume up Click POWER while in VOLUME MENU, hilt pointing up.
  94. Volume down Click POWER while in VOLUME MENU, hilt pointing down, OR click
  95. AUX while in VOLUME MENU.
  96. Volume adjusts in increments per click.
  97. You must exit VOLUME MENU to resume using saber normally.
  98.  
  99. FUNCTIONS WITH BLADE ON
  100. Blade lockup Press and hold AUX.
  101. Blade tip drag Press and hold AUX while blade is pointing down.
  102. Play Character Quote Fast double-click POWER, hilt pointing up, plays sequentially. **
  103. Force Effect Fast double-click POWER, hilt pointing down, plays randomly. **
  104. Lightning block Double-click POWER and hold.
  105. Melt Hold POWER and stab blade tip against wall. Rotate for heat colours.
  106. Blaster blocks Short click AUX. (Add Short click POWER using define).
  107. Enter multi-blast mode Hold POWER while swinging for one second and release.
  108. Saber will play two quick blasts confirming mode.
  109. Swing blade to trigger blaster block.
  110. To exit multi-blast mode, fast single click AUX.
  111.  
  112. COLOUR CHANGE FUNCTIONS WITH BLADE ON
  113. Enter COLOUR MENU Hold POWER then quickly click AUX and release both
  114. buttons simultaneously. Or fast triple-click POWER.
  115. Announcement confirms you are in the COLOUR MENU.
  116. Cycle to next colour Rotate hilt whilst in COLOUR MENU until desired colour is reached.
  117. Most Sabersense presets have 12 colour options.
  118. Exit COLOUR MENU Short click saves new colour and exits.
  119. Fast-double-click exits and reverts to original colour.
  120. Announcement confirms you are exiting COLOUR MENU.
  121. You must exit COLOUR MENU to resume using lightsaber normally.
  122.  
  123. * = Gesture ignitions also available via defines.
  124. ** = Audio player orientations can be reversed using SABERSENSE_FLIP_AUDIO_PLAYERS define.
  125.  
  126.  
  127. ============================================================
  128. ====================== TECHNICAL NOTES =====================
  129.  
  130. 1) SAVE FILES
  131. For proper function when using BLADE_ID or ARRAY_SELECTOR with SAVE_STATE, allocate
  132. individual save folders per blade array. This will save separate settings per array.
  133. If you want common saved settings, you must use BLADE_DETECT or ARRAY_SELECTOR without the
  134. save folders but with the same number of presets per array. (Single preset arrays such as
  135. charging mode are still permitted).
  136.  
  137. 2) CLASH CONTROLS
  138. // To revert to older 0 to 4 scale, insert the relevant defines below.
  139. // #define AUDIO_CLASH_SUPPRESSION_LEVEL 10 // Disable if using next three defines
  140. // #define PROFFIEOS_DONT_USE_GYRO_FOR_CLASH // Experimental define reverts to OS 5.x clash algorithm
  141. // Fixes false clashes from buttons or motors close to board.
  142. // #define PROFFIEOS_MOTION_FREQUENCY 800 // Experimental define reverts to OS 5.x clash algorithm
  143. // #define PROFFIEOS_ACCELEROMETER_RANGE 4 // Experimental define reverts to OS 5.x clash algorithm
  144. // Can be set to 2, 4, 8 or 16.
  145. For more details on false clash prevention and adjustments, visit:
  146. https://crucible.hubbe.net/t/false-clashes-with-os7-7-still/3988/22
  147.  
  148. If button clicking is causing false clashes due to close proximity
  149. of switch to the Proffieboard, visit:
  150. https://crucible.hubbe.net/t/false-clash-and-thrust-when-clicking-power-button/4136/13
  151.  
  152. For a detailed description of how clashes are detected and triggered,
  153. and how the above settings actually work, visit:
  154. https://crucible.hubbe.net/t/clash-settings-and-questions/4651/2
  155.  
  156. For more information on various historic clash settings, visit:
  157. https://pod.hubbe.net/explainers/history-of-clash.html
  158.  
  159. 3) BLADE DETECT
  160. When using BLADE_DETECT with SABERSENSE_ARRAY_SELECTOR, the NO_BLADE array will be
  161. skipped by Array Selector and only be accessed by the Blade Detect process.
  162.  
  163. 4)
  164. Further information on Proffieboards v2.2 and v3.9 can be found here:
  165.  
  166. Proffieboard v2:
  167. https://drive.google.com/file/d/1vn9vRk-CNZSUHL4xm_hHwS6UgkfKXdO2/view?fbclid=IwY2xjawHI869leHRuA2FlbQIxMQABHTTieWfK0DRZZ1FWWvfSYSSwpfd1cDj4UKqH39EPE7Sd_DQGtQX430zP3Q_aem_1U2VWjNEYfR981X2fEG-hA
  168.  
  169. Proffieboard v3:
  170. https://fredrik.hubbe.net/lightsaber/v6/
  171.  
  172.  
  173. ===========================================================
  174. =================== SABERSENSE DEFINES ====================
  175.  
  176. #define SABERSENSE_BLADE_ID
  177. Replaces regular BladeID with on-demand ID scanning.
  178. Normal BladeID relies either on continuous ID scanning,
  179. or it only runs at specific times like bootup
  180. or when changing fonts. Sabersense BladeID makes
  181. BladeID scanning available as a button press.
  182. Triple-click POWER will run the scan, identify the blade
  183. and switch to its associated array. This system prevents
  184. spurious ID readings switching blade when you don't want
  185. it to, especially if using SnapshotID.
  186. Plays array-specific bladeidX.wav files when switching.
  187.  
  188. #define SABERSENSE_ARRAY_SELECTOR
  189. Replaces regular BladeID and allows cycling between
  190. different blade/preset arrays manually, regardless
  191. of actual BladeID status. Plays array-specific
  192. arrayX.wav files when switching.
  193. Requires arrays to be numbered consecutively,
  194. starting at zero, in the field that would otherwise
  195. contain BladeID values. Like this:
  196. { 0, ... }
  197. { 1, ... }
  198. { 2, ... }
  199. { 3, ... }
  200. etc.
  201.  
  202. #define SABERSENSE_NO_BLADE
  203. If using SABERSENSE_ARRAY_SELECTOR in combination with
  204. BLADE_DETECT_PIN, you must use this define in order to
  205. prevent a compile error.
  206. Note that you can have any number of Blade-In arrays
  207. in your config, but only one NO_BLADE array is permitted.
  208. Note also that NO_BLADE replaces the zero array,
  209. meaning that Blade-In array numbering must be consecutive
  210. starting at 1. Like this:
  211. { NO_BLADE, ... }
  212. { 1, ... }
  213. { 2, ... }
  214. { 3, ... }
  215. etc.
  216.  
  217. #define SABERSENSE_DEFAULT_BLADE_ARRAY 3
  218. This feature is really intended for busy installers
  219. and sets the default blade array in multi-array systems.
  220. Using this feature, you can have a blade array with all
  221. the common blade lengths included, and then select which
  222. length to default to on first boot (i.e. until a save
  223. file is written).
  224. The alternative is to simply re-order the blade array
  225. manually, but then you have to re-order the array1.wav,
  226. array2.wav etc. files on the SD card to match, which
  227. is a hassle.
  228. Note that the define uses zero-based numbering, the
  229. same as the blade array itself, so you must use the
  230. number as it is shown in the blade array - i.e. number 3
  231. for the fourth array down the full list.
  232.  
  233. #define SABERSENSE_DISABLE_SAVE_ARRAY
  234. By default, SABERSENSE_ARRAY_SELECTOR saves the current
  235. array so that the saber will always boot into the last
  236. array used. This define disables that save functionality.
  237.  
  238. #define SABERSENSE_ENABLE_ARRAY_FONT_IDENT
  239. Plays font ident after array ident when switching arrays.
  240. Can be used with SABERSENSE_BLADE_ID and
  241. SABERSENSE_ARRAY_SELECTOR to tell user which font they
  242. have landed on on multiple-array systems in which each
  243. array has its own save files.
  244.  
  245. #define SABERSENSE_FLIP_AUDIO_PLAYERS
  246. Reverses UP/DOWN orientation for playing FORCE, QUOTE and
  247. MUSIC TRACK audio files. Default (no define) is UP for
  248. sequential QUOTE with blade ON and OFF, and DOWN for random
  249. FORCE effect (ON) and music TRACK (OFF). Define acts on
  250. both ON and OFF states for consistency.
  251.  
  252. #define SABERSENSE_BLAST_PWR_AND_AUX
  253. Adds blaster block button to POWER button as well as AUX
  254. in 2-button mode. Improves 1 and 2-button harmonization,
  255. but makes accidental blasts more likely when double-
  256. clicking POWER for Quotes or Force Effect.
  257.  
  258. #define SABERSENSE_FONT_SKIP_A 5
  259. #define SABERSENSE_FONT_SKIP_B 10
  260. As standard, presets can be skipped in batches to aid
  261. font navigation. Two skip levels are provided, A and B,
  262. which default to 5 and 10 fonts respectively. These
  263. defines allow the user to override the default
  264. values if required.
  265.  
  266. #define SABERSENSE_HOT_SKIP_DOWN 0
  267. #define SABERSENSE_HOT_SKIP_LEVEL 0
  268. Hot Skipping is distinct from Font Skipping in that
  269. it skips directly to a given preset, rather than
  270. skipping forwards or backwards x number of presets.
  271. These defines override the Skip-to-Last/Middle
  272. Preset feature, so system skips to user-defined
  273. preset. Note that Skip-to-First preset is fixed
  274. and not user-definable.
  275.  
  276. #define SABERSENSE_DISABLE_FONT_SKIPPING
  277. Completely disables all preset skipping, meaning
  278. presets may only be cycled through one at a time.
  279. Suitable for installs with small numbers of fonts
  280. and presets.
  281.  
  282. #define SABERSENSE_BUTTON_CLICKER
  283. Button Clicker to play press/release wav files when
  284. buttons are pressed. Intended for Scavenger hilt
  285. where wheel makes tactile feel difficult.
  286. Requires press.wav and release.wav files to work.
  287.  
  288. #define SABERSENSE_DISABLE_RESET
  289. By default, all save files can be deleted on demand with
  290. a button press, effectively restoring 'factory' defaults.
  291. This define disables that feature.
  292.  
  293. #define SABERSENSE_NO_COLOR_CHANGE
  294. Use instead of DISABLE_COLOR_CHANGE.
  295.  
  296. #define SABERSENSE_NO_LOCKUP_HOLD
  297. Applicable to two-button mode only, reverts to lockup
  298. being triggered by clash while holding aux.
  299.  
  300. #define SABERSENSE_F263_CUSTOM_USER_EFFECT
  301. Based on Fett263 'Special Abilities', this define
  302. enables interaction with EFFECT_USERx in standard
  303. (non-Fett) blade styles for custom effects like
  304. swing colour changing.
  305.  
  306. GESTURE CONTROLS
  307. There are four gesture types: Twist, Stab, Swing and Thrust.
  308. #define SABERSENSE_TWIST_ON
  309. #define SABERSENSE_TWIST_OFF
  310. #define SABERSENSE_STAB_ON
  311. #define SABERSENSE_SWING_ON
  312. #define SABERSENSE_THRUST_ON
  313.  
  314. #define SABERSENSE_GESTURE_PREON
  315. As standard, gesture controls bypass all preon effects
  316. unless this define is added which reinstates them.
  317.  
  318. ============================================================
  319. ===================== BLADE STYLE NOTES ====================
  320.  
  321. Styles with two tildes followed by a number in the end brackets
  322. use Function styles in which that number sets the default blade
  323. colour according to the following table:
  324.  
  325. 0 DeepSkyBlue ("~ ~ 0"),
  326. 1 Blue ("~ ~ 1"),
  327. 2 Cyan ("~ ~ 2"),
  328. 3 DodgerBlue ("~ ~ 3"),
  329. 4 Green ("~ ~ 4"),
  330. 5 LightGreen ("~ ~ 5"),
  331. 6 Red ("~ ~ 6"),
  332. 7 Magenta ("~ ~ 7"),
  333. 8 Pink ("~ ~ 8"),
  334. 9 Yellow ("~ ~ 9"),
  335. 10 Orange ("~ ~ 10"),
  336. 11 White ("~ ~ 11"),
  337. */
  338. // ****************************************************************
  339. // ****************************************************************
  340.  
  341. #ifdef CONFIG_TOP
  342. #include "proffieboard_v2_config.h"
  343. #define NUM_BLADES 1
  344. #define NUM_BUTTONS 2
  345. const unsigned int maxLedsPerStrip = 144;
  346. #define ENABLE_AUDIO
  347. #define ENABLE_MOTION
  348. #define ENABLE_WS2811
  349. #define ENABLE_SD
  350.  
  351. // VOLUME DEFINES
  352. #define VOLUME 1900 // Maximum volume that can be reached.
  353. #define BOOT_VOLUME 1600 // Default volume at bootup.
  354. // Over-ridden once user adjusts volume
  355. // due to SAVE_STATE.
  356. // OPTIONAL SYSTEM DEFINES
  357. #define NO_REPEAT_RANDOM
  358. #define FEMALE_TALKIE_VOICE
  359. #define KILL_OLD_PLAYERS
  360. #define IDLE_OFF_TIME 15 * 60 * 1000
  361. // Minutes multiplied by seconds multiplied by milliseconds. (15 * 60 * 1000 = 15 minutes).
  362.  
  363. // SAVE SETTINGS - See Technical Note 1 above.
  364. #define SAVE_STATE
  365. // #define SAVE_VOLUME
  366. // #define SAVE_PRESET
  367.  
  368. // PRIMARY CLASH CONTROL - See Technical Note 2 above for further clash controls.
  369. #define CLASH_THRESHOLD_G 3.2
  370. // Range is 0 to 16 by default.
  371.  
  372. // OPTIONAL FEATURE DEFINES
  373. #define DYNAMIC_BLADE_LENGTH
  374. #define DYNAMIC_CLASH_THRESHOLD
  375. #define SAVE_CLASH_THRESHOLD
  376.  
  377. #define FILTER_CUTOFF_FREQUENCY 160
  378. #define FILTER_ORDER 4
  379.  
  380. // #define ORIENTATION ORIENTATION_USB_TOWARDS_BLADE
  381. // #define ORIENTATION_ROTATION 0,-30,0 // For curved hilt, USB pointed down relative to blade.
  382. // #define ORIENTATION_ROTATION 0,14,0 // For angled Proffieboard, USB pointed up relative to blade.
  383.  
  384. // #define SHARED_POWER_PINS
  385.  
  386.  
  387. // ARRAY SELECT AND BLADE ID
  388. // See Technical Note 1 above when using BLADE_ID or ARRAY_SELECTOR.
  389. // #define SABERSENSE_BLADE_ID // Plays Array ident sound with BladeID detection.
  390. // #define ENABLE_POWER_FOR_ID PowerPINS<bladePowerPin2, bladePowerPin3> // Required for BLADE_ID.
  391.  
  392. #define SABERSENSE_ARRAY_SELECTOR // Cycles through blade/preset arrays manually, ignores actual BladeID status.
  393. #define SABERSENSE_DEFAULT_BLADE_ARRAY 1 // Sets the default blade array index.
  394. // #define SABERSENSE_DISABLE_SAVE_ARRAY // Means that arrays won't be saved between reboots.
  395. // Best with systems with only one array plus charging array.
  396.  
  397. // #define SABERSENSE_ENABLE_ARRAY_FONT_IDENT // Plays font ident after array ident.
  398. // Works with SABERSENSE BLADE_ID & ARRAY_SELECTOR.
  399. // used for systems that have different fonts on different arrays.
  400.  
  401. // BLADE DETECT
  402. // #define BLADE_DETECT_PIN aux2Pin // Wire to Button 3.
  403. // #define SABERSENSE_NO_BLADE // Required to make Blade Detect work with Array Selector.
  404.  
  405.  
  406. // REQUIRED FOR BLUETOOTH MODULE.
  407. // #define ENABLE_SERIAL
  408.  
  409.  
  410. // REQUIRED FOR OLED MODULE
  411. // #define ENABLE_SSD1306
  412. // #define OLED_FLIP_180 // Optional
  413. // #define PLI_OFF_TIME 30 * 1000
  414. // Controls how long battery display is shown on OLED after animations end.
  415. // Seconds multiplied by milliseconds. (30 * 1000 = 30 seconds).
  416. // For OLED function, add 'oled' to each preset file list and ensure
  417. // oled folder is on top level of SD card.
  418.  
  419.  
  420. // MEMORY SAVING OPTIONS
  421. // #define DISABLE_BASIC_PARSER_STYLES // Disables default named styles found in Proffie Workbench.
  422. // #define DISABLE_DIAGNOSTIC_COMMANDS // Disables diagnostic commands in Serial Monitor.
  423.  
  424.  
  425. // CUSTOM SABERSENSE BUTTON CONTROLS
  426. // Gesture controls bypass Preon effects unless SABERSENSE_GESTURE_PREON define is added.
  427. #define SABERSENSE_TWIST_ON
  428. #define SABERSENSE_TWIST_OFF
  429. // #define SABERSENSE_STAB_ON
  430. // #define SABERSENSE_THRUST_ON
  431. // #define SABERSENSE_SWING_ON
  432. // #define SABERSENSE_GESTURE_PREON // Includes preon effects with gesture ignitions.
  433.  
  434. #define BUTTON_DOUBLE_CLICK_TIMEOUT 350 // Makes button clicks a little slower and easier.
  435. #define BUTTON_SHORT_CLICK_TIMEOUT 350 // Makes button clicks a little slower and easier.
  436.  
  437. // #define SABERSENSE_FONT_SKIP_A 5 // Set number of preset skips for two clicks. Default 5.
  438. // #define SABERSENSE_FONT_SKIP_B 10 // Set number of preset skips for three clicks. default 10.
  439. // #define SABERSENSE_HOT_SKIP_DOWN 11 // Sets preset skip to selected font, hilt pointing down.
  440. // #define SABERSENSE_HOT_SKIP_LEVEL 7 // Sets preset skip to selected font, hilt horizontal.
  441. // #define SABERSENSE_DISABLE_SKIPPING // Removes preset skipping feature entirely.
  442.  
  443. // #define SABERSENSE_BLAST_MAIN_AND_AUX // Makes blast available on MAIN and AUX on 2-button sabers.
  444. // #define SABERSENSE_FLIP_AUDIO_PLAYERS // Flips audio Players so that QUOTE plays when pointing down, not up.
  445. // #define SABERSENSE_BUTTON_CLICKER // For Scavenger hilt. Plays click sound files with button pushes.
  446. // #define SABERSENSE_NO_COLOR_CHANGE // Disables Colour Change feature.
  447. // #define SABERSENSE_NO_LOCKUP_HOLD // Reverts to lockup being triggered by holding AUX while clashing.
  448. // #define SABERSENSE_DISABLE_RESET // Prevents "Restore Factory Defaults".
  449. // #define SABERSENSE_F263_CUSTOM_USER_EFFECT // For custom blade effects with EFFECT_USERx in the style.
  450. #endif
  451.  
  452.  
  453. #ifdef CONFIG_PROP
  454. #include "../props/saber_sabersense_buttons.h"
  455. #endif
  456.  
  457.  
  458. #ifdef CONFIG_STYLES
  459. // BLADE PLUG CHARGING
  460. // Section below keeps FETs powered while charging.
  461. // Use ChargingStylePtr<BlackPower>(), for charging blade style.
  462. class BlackPower {
  463. public:
  464. LayerRunResult run(BladeBase* base) {
  465. return LayerRunResult::UNKNOWN;
  466. }
  467. SimpleColor getColor(int led) {
  468. return SimpleColor(Color16(0,0,0));
  469. }
  470. };
  471.  
  472. using ON = Rgb<255,255,255>; // Use StylePtr<ON>(), for Bluetooth ON.
  473. using OFF = Rgb<0,0,0>; // Use StylePtr<OFF>(), for Bluetooth OFF.
  474.  
  475. // FULL LENGTH CLASH AND LOCKUP WITH STANDARD MAIN BLADE FLICKER.
  476. using StandardFlicker = Layers<Layers<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,107,205>>,Rgb<0,0,205>,Rgb<0,205,205>,Rgb<0,60,205>,Rgb<0,205,0>,Rgb<22,205,22>,Rgb<205,0,0>,Rgb<205,0,205>,Rgb<205,62,115>,Rgb<205,205,0>,Rgb<205,79,0>,Rgb<178,205,205>>>,OriginalBlastL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Red>,Red,Red,Red,Red,Red,LightYellow,Blue,Blue,Red,Blue,Red>>,LockupL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<200,255,255>>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,White,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Yellow>,Black,20,16>,Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,White>,White,White,White,White,White,White,White,White,White,White,Yellow>,Black,20,16>>,LockupTrL<AlphaL<Mix<TwistAngle<>,RandomFlicker<Red,Black>,RandomFlicker<Yellow,Red>>,SmoothStep<Int<28000>,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,SimpleClashL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Yellow>,Yellow,Yellow,Yellow,White,Red,Yellow,Yellow,Yellow,White,White,Yellow>,Black,28,25>,260>,InOutTrL<TrWipe<500>,TrWipeInX<WavLen<EFFECT_RETRACTION>>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>;
  477.  
  478. // FULL LENGTH CLASH AND LOCKUP WITH HEAVY FLICKER.
  479. using HeavyFlicker = Layers<Layers<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,107,205>>,Rgb<0,0,205>,Rgb<0,205,205>,Rgb<0,60,205>,Rgb<0,205,0>,Rgb<22,205,22>,Rgb<205,0,0>,Rgb<205,0,205>,Rgb<205,62,115>,Rgb<205,205,0>,Rgb<205,79,0>,Rgb<178,205,205>>>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,68,125>>,Rgb<0,0,125>,Rgb<0,125,125>,Rgb<0,35,125>,Rgb<0,125,0>,Rgb<14,125,14>,Rgb<125,0,0>,Rgb<125,0,125>,Rgb<125,40,77>,Rgb<125,125,0>,Rgb<125,48,0>,Rgb<110,125,125>>>>,OriginalBlastL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Red>,Red,Red,Red,Red,Red,LightYellow,Blue,Blue,Red,Blue,Red>>,LockupL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<200,255,255>>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,White,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Yellow>,Black,20,16>,Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,White>,White,White,White,White,White,White,White,White,White,White,Yellow>,Black,20,16>>,LockupTrL<AlphaL<Mix<TwistAngle<>,RandomFlicker<Red,Black>,RandomFlicker<Yellow,Red>>,SmoothStep<Int<28000>,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,SimpleClashL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Yellow>,Yellow,Yellow,Yellow,White,Red,Yellow,Yellow,Yellow,White,White,Yellow>,Black,28,25>,260>,InOutTrL<TrWipe<500>,TrWipeInX<WavLen<EFFECT_RETRACTION>>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>;
  480.  
  481. // FULL LENGTH CLASH AND LOCKUP WITH REDUCED MAIN BLADE FLICKER AND SLOW IGNITION POINTING DOWN.
  482. using SlowIgnition = Layers<Layers<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,107,205>>,Rgb<0,0,205>,Rgb<0,205,205>,Rgb<0,60,205>,Rgb<0,205,0>,Rgb<22,205,22>,Rgb<205,0,0>,Rgb<205,0,205>,Rgb<205,62,115>,Rgb<205,205,0>,Rgb<205,79,0>,Rgb<178,205,205>>>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,68,125>>,Rgb<0,0,125>,Rgb<0,125,125>,Rgb<0,35,125>,Rgb<0,125,0>,Rgb<14,125,14>,Rgb<125,0,0>,Rgb<125,0,125>,Rgb<125,40,77>,Rgb<125,125,0>,Rgb<125,48,0>,Rgb<110,125,125>>>>,OriginalBlastL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Red>,Red,Red,Red,Red,Red,LightYellow,Blue,Blue,Red,Blue,Red>>,LockupL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<200,255,255>>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,White,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Yellow>,Black,20,16>,Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,White>,White,White,White,White,White,White,White,White,White,White,Yellow>,Black,20,16>>,LockupTrL<AlphaL<Mix<TwistAngle<>,RandomFlicker<Red,Black>,RandomFlicker<Yellow,Red>>,SmoothStep<Int<28000>,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,SimpleClashL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Yellow>,Yellow,Yellow,Yellow,White,Red,Yellow,Yellow,Yellow,White,White,Yellow>,Black,28,25>,260>,InOutTrL<TrWipeX<Scale<IsGreaterThan<BladeAngle<>,Int<16100>>,Int<1500>,Int<300>>>,TrWipeIn<1100>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>;
  483.  
  484. // LOCALIZED LOCKUP.
  485. using LocalizedLockup = Layers<Layers<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,107,205>>,Rgb<0,0,205>,Rgb<0,205,205>,Rgb<0,60,205>,Rgb<0,205,0>,Rgb<22,205,22>,Rgb<205,0,0>,Rgb<205,0,205>,Rgb<205,62,115>,Rgb<205,205,0>,Rgb<205,79,0>,Rgb<178,205,205>>>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,68,125>>,Rgb<0,0,125>,Rgb<0,125,125>,Rgb<0,35,125>,Rgb<0,125,0>,Rgb<14,125,14>,Rgb<125,0,0>,Rgb<125,0,125>,Rgb<125,40,77>,Rgb<125,125,0>,Rgb<125,48,0>,Rgb<110,125,125>>>>,OriginalBlastL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Red>,Red,Red,Red,Red,Red,LightYellow,Blue,Blue,Red,Blue,Red>>,LockupL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<200,255,255>>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,White,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Yellow>,Black,20,16>,Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,White>,White,White,White,White,White,White,White,White,White,White,Yellow>,Black,20,16>,Bump<Int<16800>,Int<28000>>>,LockupTrL<AlphaL<Mix<TwistAngle<>,RandomFlicker<Red,Black>,RandomFlicker<Yellow,Red>>,SmoothStep<Int<28000>,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,SimpleClashL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Yellow>,Yellow,Yellow,Yellow,White,Red,Yellow,Yellow,Yellow,White,White,Yellow>,Black,28,25>,260>,InOutTrL<TrWipe<500>,TrWipeInX<WavLen<EFFECT_RETRACTION>>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>;
  486.  
  487. // RAIN BLADE.
  488. using RainBlade = Layers<Layers<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,RandomL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,107,205>>,Rgb<0,0,205>,Rgb<0,205,205>,Rgb<0,60,205>,Rgb<0,205,0>,Rgb<22,205,22>,Rgb<205,0,0>,Rgb<205,0,205>,Rgb<205,62,115>,Rgb<205,205,0>,Rgb<205,79,0>,Rgb<178,205,205>>>,SparkleL<White,90>,OriginalBlastL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Red>,Red,Red,Red,Red,Red,LightYellow,Blue,Blue,Red,Blue,Red>>,LockupL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<200,255,255>>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,White,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Rgb<200,255,255>,Yellow>,Black,20,16>,Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,White>,White,White,White,White,White,White,White,White,White,White,Yellow>,Black,20,16>>,LockupTrL<AlphaL<Mix<TwistAngle<>,RandomFlicker<Red,Black>,RandomFlicker<Yellow,Red>>,SmoothStep<Int<28000>,Int<5000>>>,TrWipeIn<600>,TrFade<300>,SaberBase::LOCKUP_MELT>,SimpleClashL<Strobe<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Yellow>,Yellow,Yellow,Yellow,White,Red,Yellow,Yellow,Yellow,White,White,Yellow>,Black,28,25>,260>,InOutTrL<TrWipe<500>,TrWipeInX<WavLen<EFFECT_RETRACTION>>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>;
  489.  
  490. // UNSTABLE.
  491. using Unstable = Layers<StripesX<Int<3000>,Int<-3500>,ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,RandomPerLEDFlicker<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,33,63>,Rgb<0,0,63>,Rgb<0,63,63>,Rgb<0,18,63>,Rgb<0,63,0>,Rgb<7,63,7>,Rgb<63,0,0>,Rgb<63,0,63>,Rgb<63,19,38>,Rgb<63,63,0>,Rgb<63,25,0>,Rgb<56,63,63>>>,Black>,BrownNoiseFlicker<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,19,36>>,Rgb<0,0,36>,Rgb<0,36,36>,Rgb<0,10,36>,Rgb<0,36,0>,Rgb<4,36,4>,Rgb<36,0,0>,Rgb<36,0,36>,Rgb<36,11,22>,Rgb<36,36,0>,Rgb<36,14,0>,Rgb<32,36,36>>,200>,RandomPerLEDFlicker<ColorChange<TrInstant,Rgb<80,0,0>,Rgb<80,0,80>,Rgb<80,80,60>,Rgb<80,80,0>,Rgb<80,32,0>,Rgb<71,80,80>,Rgb<0,45,80>,Rgb<0,0,80>,Rgb<0,80,80>,Rgb<1,24,80>,Rgb<0,80,0>,Rgb<9,80,9>>,ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,19,36>>,Rgb<0,0,36>,Rgb<0,36,36>,Rgb<0,10,36>,Rgb<0,36,0>,Rgb<4,36,4>,Rgb<36,0,0>,Rgb<36,0,36>,Rgb<36,11,22>,Rgb<36,36,0>,Rgb<36,14,0>,Rgb<32,36,36>>>>,TransitionLoopL<TrConcat<TrWaveX<AudioFlicker<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,BrownNoiseFlicker<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,67,126>,Rgb<0,0,126>,Rgb<0,126,126>,Rgb<0,35,126>,Rgb<0,126,0>,Rgb<14,126,14>,Rgb<126,0,0>,Rgb<126,0,126>,Rgb<126,39,77>,Rgb<126,126,0>,Rgb<126,49,0>,Rgb<112,126,126>>>,Black,200>>,Int<400>,Int<100>,Int<200>,Int<0>>,AlphaL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,Int<0>>,TrDelayX<Scale<SlowNoise<Int<1000>>,Int<100>,Int<1000>>>>>,TransitionLoopL<TrConcat<TrWaveX<AudioFlicker<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,BrownNoiseFlicker<Black,ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,Rgb<0,33,63>,Rgb<0,0,63>,Rgb<0,63,63>,Rgb<0,18,63>,Rgb<0,63,0>,Rgb<7,63,7>,Rgb<63,0,0>,Rgb<63,0,63>,Rgb<63,19,38>,Rgb<63,63,0>,Rgb<63,25,0>,Rgb<56,63,63>>>,300>>,Int<400>,Int<100>,Int<200>,Int<0>>,AlphaL<ColorSelect<Sum<Variation,IntArg<STYLE_OPTION_ARG,0>>,TrFade<50>,ColorChange<TrInstant,DeepSkyBlue>,Blue,Cyan,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure>,Int<0>>,TrDelayX<Scale<SlowNoise<Int<1000>>,Int<200>,Int<1500>>>>>,TransitionEffectL<TrConcat<TrInstant,BrownNoiseFlickerL<AlphaL<White,Int<16000>>,Int<50>>,TrSmoothFade<600>>,EFFECT_LOCKUP_END>,ResponsiveLockupL<Strobe<White,BrownNoiseFlicker<White,Blue,300>,50,1>,TrConcat<TrInstant,White,TrFade<200>>,TrFade<400>,Scale<BladeAngle<0,16000>,Int<4000>,Int<26000>>,Int<6000>,Scale<SwingSpeed<100>,Int<10000>,Int<14000>>>,ResponsiveLightningBlockL<Strobe<White,AudioFlicker<White,Blue>,50,1>,TrConcat<TrInstant,AlphaL<White,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<White,Int<16000>>,30>,TrSmoothFade<600>>>,ResponsiveStabL<Orange>,ResponsiveBlastL<White,Int<400>,Scale<SwingSpeed<200>,Int<100>,Int<400>>>,ResponsiveClashL<White,TrInstant,TrFade<400>>,ResponsiveDragL<BrownNoiseFlickerL<White,Int<300>>,TrWipeIn<400>,TrFade<400>>,ResponsiveMeltL<Mix<TwistAngle<>,OrangeRed,Orange>,TrWipeIn<600>,TrSmoothFade<600>>,InOutTrL<TrWipeSparkTipX<RgbArg<IGNITION_COLOR_ARG,White>,BendTimePowInvX<IgnitionTime<600>,Mult<IntArg<IGNITION_OPTION2_ARG,10992>,Int<98304>>>,Int<500>>,TrWipeInX<BendTimePowX<RetractionTime<>,Mult<IntArg<RETRACTION_OPTION2_ARG,10992>,Int<98304>>>>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>;
  492.  
  493. // Preset Template:
  494. /*
  495.  
  496. { "PreFont;FontStd1/KbrGrflx;Shared/Random;Menus", "tracks/endtitle.wav",
  497. // Main Blade:
  498. StylePtr<StandardFlicker>("~ ~ 0"),
  499. StylePtr<HeavyFlicker>("~ ~ 0"),
  500. StylePtr<SlowIgnition>("~ ~ 0"),
  501. StylePtr<LocalizedLockup>("~ ~ 0"),
  502. StylePtr<RainBlade>("~ ~ 0"),
  503. StylePtr<Unstable>("~ ~ 0"),
  504.  
  505. // Accent LED:
  506. // StylePtr<AccentStyle1("~ ~ 0"),
  507. "graflex"},
  508.  
  509. */
  510.  
  511. #endif
  512.  
  513. // *************************************************************************
  514. // *************************************************************************
  515. // *********************** THE BLADE STYLES ************************
  516. // *************************************************************************
  517. // *************************************************************************
  518. #ifdef CONFIG_PRESETS
  519. Preset presets[] = {
  520.  
  521.  
  522. { "PreFont;FontStd1/KbrGrflx;Shared/Random;Menus", "tracks/endtitle.wav",
  523. // Main Blade:
  524. StylePtr<StandardFlicker>("~ ~ 0"),
  525.  
  526. // Accent LED:
  527. // StylePtr<AccentStyle1("~ ~ 0"),
  528. "graflex"},
  529.  
  530.  
  531. // ****************
  532.  
  533.  
  534. { "PreFont;FontStd1/KbrLkeH;Shared/Random;Menus", "tracks/jeditext.wav",
  535. // Crystal cooling effect with sound.
  536. // Main Blade:
  537. StylePtr<HeavyFlicker>("~ ~ 1"),
  538.  
  539. // Accent LED:
  540. // StylePtr<AccentStyle1("~ ~ 1"),
  541. "luke\nred heat"},
  542.  
  543.  
  544. // ****************
  545.  
  546.  
  547. { "PreFont;FontStd1/SmthJedi;Shared/Random;Menus", "tracks/quigonn.wav",
  548. // Main Blade:
  549. StylePtr<StandardFlicker>("~ ~ 4"),
  550.  
  551. // Accent LED:
  552. // StylePtr<AccentStyle1("~ ~ 4"),
  553. "smooth\njedi"},
  554.  
  555.  
  556. // ****************
  557.  
  558.  
  559. { "PreFont;FontStd1/DarkSide;Shared/Vader;Menus", "tracks/vader.wav",
  560. // Pulsing 'off' crystal.
  561. // Main Blade:
  562. StylePtr<SlowIgnition>("~ ~ 6"),
  563.  
  564. // Accent LED:
  565. // StylePtr<AccentStyle1("~ ~ 6"),
  566. "darkside"},
  567.  
  568.  
  569. // ****************
  570.  
  571.  
  572. { "PreFont;FontStd1/KbrRain;Shared/Thunder;Menus", "tracks/thunder.wav",
  573. // Main Blade:
  574. StylePtr<RainBlade>("~ ~ 3"),
  575.  
  576. // Accent LED:
  577. // StylePtr<AccentStyle1("~ ~ 3"),
  578. "rainlight"},
  579.  
  580.  
  581. // ****************
  582.  
  583.  
  584. { "PreFont;FontStd1/RainDark;Shared/Thunder;Menus", "tracks/thunder.wav",
  585. // Main Blade:
  586. StylePtr<RainBlade>("~ ~ 6"),
  587.  
  588. // Accent LED:
  589. // StylePtr<AccentStyle1("~ ~ 6"),
  590. "raindark"},
  591.  
  592.  
  593. // ****************
  594.  
  595.  
  596. { "PreFont;FontStd1/Unstable;Shared/Kylo;Menus", "tracks/kylo.wav",
  597. // Main Blade:
  598. StylePtr<Unstable>("~ ~ 6"),
  599.  
  600. // Accent LED:
  601. // StylePtr<AccentStyle1("~ ~ 6"),
  602. "unstable"},
  603.  
  604.  
  605. // ****************
  606.  
  607.  
  608. { "PreFont;FontStd1/Rey;Shared/Rey;Menus", "tracks/anewhome.wav",
  609. // Main Blade:
  610. StylePtr<StandardFlicker>("~ ~ 0"),
  611.  
  612. // Accent LED:
  613. // StylePtr<AccentStyle1("~ ~ 0"),
  614. "rey"},
  615.  
  616.  
  617. // ****************
  618.  
  619.  
  620. { "PreFont;FontStd1/KbrEmpr;Shared/Palptine;Menus", "tracks/emperor.wav",
  621. // Main Blade:
  622. StylePtr<LocalizedLockup>("~ ~ 10"),
  623.  
  624. // Accent LED:
  625. // StylePtr<AccentStyle1("~ ~ 10"),
  626. "emperors\hand"},
  627.  
  628.  
  629. // ****************
  630.  
  631.  
  632. { "PreFont;FontStd1/KbrQuiGn;Shared/QuiGonn;Menus", "tracks/maul.wav",
  633. // Main Blade:
  634. StylePtr<LocalizedLockup>("~ ~ 4"),
  635.  
  636. // Accent LED:
  637. // StylePtr<AccentStyle1("~ ~ 4"),
  638. "quigonn"},
  639.  
  640.  
  641. // ****************
  642.  
  643.  
  644. { "PreFont;FontStd1/KbrMaceP;Shared/Windu;Menus", "tracks/trail.wav",
  645. // Main Blade:
  646. StylePtr<StandardFlicker>("~ ~ 7"),
  647.  
  648. // Accent LED:
  649. // StylePtr<AccentStyle1("~ ~ 7"),
  650. "mace\npreon"},
  651.  
  652.  
  653. // ****************
  654.  
  655.  
  656. { "PreFont;FontStd1/KbrMace;Shared/Windu;Menus", "tracks/windu.wav",
  657. // Main Blade:
  658. StylePtr<LocalizedLockup>("~ ~ 7"),
  659.  
  660. // Accent LED:
  661. // StylePtr<AccentStyle1("~ ~ 7"),
  662. "mace\nwindu"},
  663.  
  664.  
  665. // ****************
  666.  
  667.  
  668. { "PreFont;FontStd1/TthCrstl;Shared/Random;Menus", "tracks/march.wav",
  669. // Main Blade:
  670. StylePtr<HeavyFlicker>("~ ~ 8"),
  671.  
  672. // Accent LED:
  673. // StylePtr<AccentStyle1("~ ~ 8"),
  674. "tythonian\ncrystal"},
  675.  
  676.  
  677. // ****************
  678.  
  679.  
  680. { "PreFont;FontStd2/RgueCmdr;Shared/Random;Menus", "tracks/TheBoldOne.wav",
  681. // Main Blade:
  682. StylePtr<StandardFlicker>("~ ~ 9"),
  683.  
  684. // Accent LED:
  685. // StylePtr<AccentStyle1("~ ~ 9"),
  686. "rogue\ncmndr"},
  687.  
  688.  
  689. // ****************
  690.  
  691.  
  692. { "PreFont;FontStd2/Ancient;Shared/Random;Menus", "tracks/piano.wav",
  693. // Main Blade:
  694. StylePtr<HeavyFlicker>("~ ~ 10"),
  695.  
  696. // Accent LED:
  697. // StylePtr<AccentStyle1("~ ~ 10"),
  698. "ancient"},
  699.  
  700.  
  701. // ****************
  702.  
  703.  
  704. { "PreFont;FontStd2/ReturnP;Shared/Palptine;Menus", "tracks/Order66.wav",
  705. // Main Blade:
  706. StylePtr<StandardFlicker>("~ ~ 6"),
  707.  
  708. // Accent LED:
  709. // StylePtr<AccentStyle1("~ ~ 6"),
  710. "return\npreon"},
  711.  
  712.  
  713. // ****************
  714.  
  715.  
  716. { "PreFont;FontStd2/Return;Shared/Palptine;Menus", "tracks/Order66.wav",
  717. // Main Blade:
  718. StylePtr<HeavyFlicker>("~ ~ 6"),
  719.  
  720. // Accent LED:
  721. // StylePtr<AccentStyle1("~ ~ 6"),
  722. "return of\nthe sith"},
  723.  
  724.  
  725. // ****************
  726.  
  727.  
  728. { "PreFont;FontStd2/SmthGrey;Shared/Random;Menus", "tracks/medley1.wav",
  729. // Main Blade:
  730. StylePtr<StandardFlicker>("~ ~ 3"),
  731.  
  732. // Accent LED:
  733. // StylePtr<AccentStyle1("~ ~ 3"),
  734. "smooth\ngrey"},
  735.  
  736.  
  737. // ****************
  738.  
  739.  
  740. { "PreFont;FontStd2/KbrRmote;Shared/Random;Menus", "tracks/deathstar.wav",
  741. // Main Blade:
  742. StylePtr<HeavyFlicker>("~ ~ 2"),
  743.  
  744. // Accent LED:
  745. // StylePtr<AccentStyle1("~ ~ 2"),
  746. "training\nremote"},
  747.  
  748.  
  749. // ****************
  750.  
  751.  
  752. { "PreFont;FontStd2/KbrTmple;Shared/Random;Menus", "tracks/snoke.wav",
  753. // Main Blade:
  754. StylePtr<LocalizedLockup>("~ ~ 9"),
  755.  
  756. // Accent LED:
  757. // StylePtr<AccentStyle1("~ ~ 9"),
  758. "temple\guardian"},
  759.  
  760.  
  761. // ****************
  762.  
  763.  
  764. { "Spare1;Shared/Spare1;Menus", "tracks/sparea.wav",
  765. // Main Blade:
  766. StylePtr<StandardFlicker>("~ ~ 2"),
  767.  
  768. // Accent LED:
  769. // StylePtr<AccentStyle1("~ ~ 2"),
  770. "spare 1"},
  771.  
  772.  
  773. // ****************
  774.  
  775. { "Spare2;Shared/Spare2;Menus", "tracks/spareb.wav",
  776. // Main Blade:
  777. StylePtr<HeavyFlicker>("~ ~ 2"),
  778.  
  779. // Accent LED:
  780. // StylePtr<AccentStyle1("~ ~ 2"),
  781. "spare 2"},
  782.  
  783.  
  784. // ****************
  785.  
  786. { "Spare3;Shared/Spare3;Menus", "tracks/sparec.wav",
  787. // Main Blade:
  788. StylePtr<LocalizedLockup>("~ ~ 2"),
  789.  
  790. // Accent LED:
  791. // StylePtr<AccentStyle1("~ ~ 2"),
  792. "spare 3"},
  793.  
  794.  
  795. // ****************
  796. // ****************
  797. // ****************
  798.  
  799.  
  800. { "PreFont;FontStd2/Rainbow;Shared/Random;Menus", "tracks/Cantina.wav",
  801. // Main Blade:
  802. StylePtr<Layers<StyleFire<StripesX<Int<3000>,Scale<TwistAngle<>,Int<-500>,Int<0>>,Red,Orange,Yellow,Green,Blue,Magenta>,StripesX<Int<3000>,Scale<TwistAngle<>,Int<-500>,Int<0>>,Tomato,OrangeRed,Orange,Yellow,SteelBlue,DeepPink>,0,3,FireConfig<0,2000,5>,FireConfig<0,2000,5>,FireConfig<0,2000,5>>,TransitionEffectL<TrConcat<TrInstant,BrownNoiseFlickerL<AlphaL<White,Int<16000>>,Int<50>>,TrSmoothFade<600>>,EFFECT_LOCKUP_END>,ResponsiveLockupL<Strobe<White,BrownNoiseFlicker<White,Red,300>,50,1>,TrConcat<TrInstant,White,TrFade<200>>,TrFade<400>,Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Int<10000>,Int<40000>>,Int<10000>>,Scale<SwingSpeed<100>,Int<10000>,Int<14000>>>,ResponsiveLightningBlockL<Strobe<White,AudioFlicker<White,Blue>,50,1>,TrConcat<TrInstant,AlphaL<White,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<White,Int<16000>>,30>,TrSmoothFade<600>>>,ResponsiveBlastWaveL<White,Int<400>,Scale<SwingSpeed<200>,Int<100>,Int<400>>>,ResponsiveClashL<White,TrInstant,TrFade<400>,Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Int<10000>,Int<40000>>,Int<10000>>>,TransitionEffectL<TrConcat<TrInstant,AudioFlickerL<RotateColorsX<Variation,White>>,TrFade<1200>>,EFFECT_IGNITION>,ResponsiveStabL<Red>,ResponsiveDragL<BrownNoiseFlickerL<White,Int<300>>,TrWipeIn<400>,TrFade<400>>,ResponsiveMeltL<Mix<TwistAngle<>,Red,Orange>,TrWipeIn<600>,TrSmoothFade<600>>,InOutTrL<TrWipeX<Scale<BladeAngle<>,Int<300>,Int<150>>>,TrWipeInX<Scale<BladeAngle<>,Int<600>,Int<300>>>>,TransitionEffectL<TrConcat<TrWipe<1000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrDelay<2000>,AlphaL<Mix<BatteryLevel,Red,Green>,SmoothStep<BatteryLevel,Int<-10>>>,TrWipeIn<1000>>,EFFECT_BATTERY_LEVEL>>>(),
  803. "rainbow"},
  804.  
  805.  
  806. // ****************
  807.  
  808.  
  809. { "PreFont;FontStd2/DsplyTsy;Shared/Random;Menus", "tracks/jedi.wav",
  810. // Main Blade:
  811. StylePtr<InOutHelper<SimpleClash<Lockup<Blast<ColorChange<TrInstant,Rgb<0,68,125>,Rgb<0,0,125>,Rgb<0,125,125>,Rgb<0,35,125>,Rgb<0,125,0>,Rgb<14,125,14>,Rgb<125,0,0>,Rgb<125,0,125>,Rgb<125,40,77>,Rgb<125,125,0>,Rgb<125,48,0>,Rgb<110,125,125>>,White>,RandomFlicker<Blue,White>>,White>,300,800,ColorChange<TrInstant,Rgb<0,68,125>,Rgb<0,0,125>,Rgb<0,125,125>,Rgb<0,35,125>,Rgb<0,125,0>,Rgb<14,125,14>,Rgb<125,0,0>,Rgb<125,0,125>,Rgb<125,40,77>,Rgb<125,125,0>,Rgb<125,48,0>,Rgb<110,125,125>>>>(),
  812. "display\nmode"},
  813.  
  814.  
  815. // ****************
  816.  
  817.  
  818. { "PreFont;FontStd2/Diagnstc;Shared/Random;Menus", "tracks/trail.wav",
  819. // Full range of colours.
  820. // Main Blade:
  821. StylePtr<InOutHelper<Cyan,300,800,ColorSequence<1250,DodgerBlue,Green,Rgb<28,255,28>,Red,Magenta,Rgb<255,80,154>,Yellow,Orange,Azure,DeepSkyBlue,Blue,Cyan>>>(),
  822. "diagnostic"},
  823.  
  824.  
  825. // ****************
  826.  
  827.  
  828. { "PreFont;FontStd2/Battery;Shared/Random;Menus", "tracks/rey.wav",
  829. // Main Blade:
  830. &style_charging,
  831. "battery\level"},
  832.  
  833.  
  834. // *************************************************************************
  835. /*
  836. // FOR BLADE PLUG CHARGING.
  837. { "FontStd2/Charger;Menus", "tracks/charger.wav",
  838. // Main Blade:
  839. ChargingStylePtr<BlackPower>(),
  840.  
  841. // Accent or charging LED:
  842. StylePtr<Blinking<Rgb<20,0,0>,Black,5000,40>>(),
  843. "charging"},
  844. */
  845.  
  846. };
  847. // *************************************************************************
  848. // *************************************************************************
  849. // *************************************************************************
  850. /*
  851. BLADE NOTES
  852. Ideally use three bladePowerPins with KR 3.5 blades to ensure enough power transfer.
  853.  
  854. V3.0 PIXEL STRIP NOTES:
  855. Add 5 pixels if using KR V3 strip with pixel tip LED.
  856.  
  857. BLADE ARRAY NOTES:
  858. Data 4 is NOT 5 volt tolerant.
  859. On V3.9 Proffie, Free Pads 1,2,3 = blade5Pin,blade6Pin,blade7Pin.
  860. */
  861. // ****************
  862. BladeConfig blades[] = {
  863. // Note, replace zero with NO_BLADE when using Blade Detect.
  864. { 0, // KR v3.5 36 Inch.
  865. // Main Blade:
  866. WS281XBladePtr<134, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  867. CONFIGARRAY(presets) },
  868.  
  869. { 1, // KR v2 36 Inch.
  870. // Main Blade:
  871. WS281XBladePtr<132, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  872. CONFIGARRAY(presets) },
  873.  
  874. { 2, // LGT 36 Inch.
  875. // Main Blade:
  876. WS281XBladePtr<128, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  877. CONFIGARRAY(presets) },
  878.  
  879. { 3, // KR v3.5 32 Inch.
  880. // Main Blade:
  881. WS281XBladePtr<125, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  882. CONFIGARRAY(presets) },
  883.  
  884. { 4, // KR v2 32 Inch.
  885. // Main Blade:
  886. WS281XBladePtr<122, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  887. CONFIGARRAY(presets) },
  888.  
  889. { 5, // LGT 32 Inch.
  890. // Main Blade:
  891. WS281XBladePtr<114, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  892. CONFIGARRAY(presets) },
  893.  
  894. { 6, // KR v2 Shoto.
  895. // Main Blade:
  896. WS281XBladePtr<108, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  897. CONFIGARRAY(presets) },
  898.  
  899. { 7, // Custom Length, Full Pixel Count.
  900. // Main Blade:
  901. WS281XBladePtr<144, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3>>(),
  902. CONFIGARRAY(presets) },
  903.  
  904. };
  905. #endif
  906.  
  907.  
  908. // *************************************************************************
  909.  
  910.  
  911. #ifdef CONFIG_BUTTONS
  912. // Button shorts to GND:
  913. Button PowerButton(BUTTON_POWER, powerButtonPin, "pow");
  914. #if NUM_BUTTONS == 2
  915. Button AuxButton(BUTTON_AUX, auxPin, "aux");
  916.  
  917. // If you need to swap the MAIN and AUX buttons over, use this:
  918. // Button PowerButton(BUTTON_POWER, auxPin, "pow");
  919. // #if NUM_BUTTONS == 2
  920. // Button AuxButton(BUTTON_AUX, powerButtonPin, "aux");
  921.  
  922. // If you need the buttons to short to Batt+ or 3.3 Volt instead of Ground, use this:
  923. // PullDownButton PowerButton(BUTTON_POWER, powerButtonPin, "pow");
  924. // #if NUM_BUTTONS == 2
  925. // PullDownButton AuxButton(BUTTON_AUX, auxPin, "aux");
  926. #endif
  927. #endif
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Bolvasuh
    18 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment