ProffieOS 7.7 Beta (done)

I don’t know, let’s find out… :slight_smile:

There is a piece of code in ProffieOS called “clock control”, it is responsible for reducing the CPU clock when proffieos is idle to reduce power usage. At it’s lowest level, several system clocks are reduced in frequency down to very low values. One of these clocks is hooked up to the counter that drives the WS2811 data output.

I think there was a happy accident in the code that made this still work when OLED wasn’t there. The OLED caused an extra event which made the clock change in the middle of feeding out WS2811 data, which just doesn’t work.

My fix for this is to simply keep the clock going at high speed as long as there are still active neopixels. Only once all neopixels are off, do we allow the CPU to go into low-power mode. This would make the processor draw more power, but since there are still active LEDs, some power draw is expected anyways.

6 Likes

Yes! I did understand it! :smiley: :muscle: :ok_hand:

That makes perfect sense. Thanks for taking the time to explain it Prof. I love learning about this stuff, proving that you can teach an old dog (me!) new tricks! :smiley:

Thanks again. :slight_smile:

2 Likes

I just played with HTML for the first time because of all this fun :slight_smile:

2 Likes

Tested a few uses this morning, seems to be working as expected (both versions).

Great, I’ll probably make a 7.3 zip tonight then.

1 Like

Ok, we have a 7.3 zip, see top post for URL.

It’s the same as 7.2, plus:

  • Fixing missing DELAY in Trigger<>
  • Duplicate case fixed in BC prop
  • ini file unlock python script added
  • TrDoEffectAlways (TrDoEffect now only runs when blade is on)
  • Clock speed changes interfering with WS2811 fixed
  • Bugfixes for some ignored events in Fett263 prop.
1 Like

Thanks. Have flashed to two test sabers moments ago.

What are the remaining milestones to get to full release readiness?

Will report anything that seems awry.

Everything not marked as tested in the first post :wink:

1 Like

We should be able to check off * BOOT_VOLUME since I can’t be the only one who used it and liked the way it worked. What say you all?

We don’t need consensus, one person saying that they have tried it successfully is enough.
(Which you have now done, so I will check it off.)

DISABLE_TALKIE tested.
This video’s audio is the board’s speaker recorded with the define enabled and intentional triggering of the errors.
*EDIT * Video updated with bouncing ball :slight_smile:

ProffieOSHumDelay tested.
Confirmed hum starts at N milliseconds after out.wav begins.
Also confirmed that humStart gets overridden if active at the same time as ProffieOSHumDelay with OS7.x.

Top post updated.

Tested ProffieOSSmoothSwingHumstart and it’s working as expected.

Added bouncing ball to beep code video :slight_smile:

1 Like

Ooohhoohohh, 7.3 and new sounds.
Points for the Close Encounters inference w SD Card Not Found.
I’ll definitely check this stuff out and give the newest update a shot ASAP.

I can report that .PBM animations work, but the first time I flash the board, I get the stock test (something C123) rather than boot01.pbm. By next power cycle, it works.
Also used CONFIG_STYLES with parameters, I couldn’t get the parameter 31th (OFF_COLOR_ARG) to correctly register, but then I just swapped to a different style.
I will install it inside the hilt by Saturday and will try to stress test the Blade ID code.

Do you have boot01.pbm in the font of the first preset?
Do you have SAVE_PRESET (or any encompassing define like SAVE_STATE) active?

Yes, I do have boot01.pbm on the first preset, and that’s why it boots normally afterward.
Yes, I do have SAVE_PRESET on the config. I’ve attached it for your convenience.

/********************************************************************************************
##### General Specs #####
Hilt: Korban Revan Light V2
Chassis: Baldusi Custom v5
Board: Proffieboard v2.2
ProffieOS Version: 7.3
Soundfont Collection: 2023-03
-Momentary Switches: 2
-Battery: 18650 (+USB-C battery charging)
-Speaker: KR Sabers 22mm V2 3W
-Hilt NPXL Connector: Shtok NPLX V3 Illuminated Connector (V4 Config)
-Crystal Chamber (SubBlade)
-Accents (SubBlade x3)
-BladeID: 33k resistor (0603 SMD)
-Blade Present Pin (Data3)
-OLED 128 x 32 pixel SSD1306
//NO FSC BT909 Blutooth Module

##### Hardware Config #####
-PowerButton: Button1 (21)
-AuxButton: Button2 (23)
-NeoPixelBlade01: LED2+LED3 (Shared), Data1
-NeoPixelConnector: 16px, LED2+LED3 (Shared), Data2 (470 Ohm resistor)
-Crystal Chamber (2px SubBlade)
-Accents (SubBlade 3 px X3)
-BladeID Resistor: 33k
-BladePresent: Data3
-Save State

##### Install Intent #####
This is a dedicated Korbanth Revan Light V2 saber install. As such, it should have blue,
green and the iconic violet settings. Blue and Green should share the soundfont, while the
violent should use the dark or fallen soundfont. I bought JuanSith fonts on this saber and
Lord Blako and Kyberphics Butcher for the Korbanth Revan Dark V2, so they don't have the
same sound when paired together.

@@@ REMEMBER @@@: YOU SHOULD PAY FOR EACH SOUNDFONT THAT YOU INSTALL: MULTIPLE HILTS MEANS
BUYING IT MULTIPLE TIMES!

********************************************************************************************/

//*******************************************************************************************
#ifdef CONFIG_TOP
//*******************************************************************************************
/*-----------------------------
////// Hardware Defines  //////
-----------------------------*/
#include "proffieboard_v2_config.h"
#define NUM_BLADES 7						//(1 x Blade + 2 x illuminated NPXL PCB + 1 x Crystal Chamber + 3 Accents)
#define NUM_BUTTONS 2						//If you add a 2nd button, uncomment the AUX line at the bottom
const unsigned int maxLedsPerStrip = 180;	//Should be bigger than the longest physical strip you have (so you might have to add subblades)
#define EXTRA_COLOR_BUFFER_SPACE 70			//Helps to make some effects faster
#define CLASH_THRESHOLD_G 2.0				//Define how hard your motions before effects register. Lower if hard to get or increase if you have spurious effects.
#define ENABLE_MOTION						//Enables de motion sensors.
#define ENABLE_WS2811						//Enables WS2811 NeoPixe-style protocol
#define ENABLE_SD							//Enables SD Card access.
#define SHARED_POWER_PINS					//This one is used for sharing NPXL DATA line on same power lines. Normally used when you have an illuminated PCB or power accents from the blade PCB.
//#define ORIENTATION_ROTATION 0,17,0			//X,Y,Z rotation with respect to USB towards pommel. Mainly thought for curved pommels like Dookus, but also useful for usb at emitter config.

/*-----------------------------
////// Blade ID Defines //////
-----------------------------*/
#define BLADE_ID_CLASS ExternalPullupBladeID<bladeIdentifyPin, 33000>	//You have to run a resistor between 20k and 50k between 3.3V and your blade detect pin. If you use Data1 for your main blade, just put a 0603 resistor between the two pins.
#define BLADE_DETECT_PIN blade3Pin										//Blade detect pin.
#define ENABLE_POWER_FOR_ID PowerPINS<bladePowerPin2, bladePowerPin3>	//When it detects blade insert it resets the NPXL. If you have used more than one MOSFET, you should put all that power your blade here.
//#define BLADE_ID_SCAN_MILLIS 1000										//This define will scan for changes of BladeID value every N ms, if a change is detected it will initialize the saber from scratch and load the right settings for the new ID
#define BLADE_ID_TIMES 10												//This define is the number of scans that get averaged together to come up with a useable scanned value.

/*-----------------------------
/////// Audio Defines  ////////
-----------------------------*/
#define ENABLE_AUDIO					//Basic enabling of the audio functions.
#define VOLUME 2500						//Volume, anything 0-3000, recommended 700.
#define BOOT_VOLUME 100					//This is the volume the saber will default to on boot, you will then use Volume Menu or Volume Editing to adjust during normal use (10 "~" 100% of Volume).
#define FILTER_CUTOFF_FREQUENCY 100		//(Hz) Enable a butterworth highpass filter with the given order and cutoff frequency
#define FILTER_ORDER 8					//Order of the filter

/*-----------------------------
//////// OLED Defines  ////////
-----------------------------*/
#define ENABLE_SSD1306		//To enable OLED
//#define INCLUDE_SSD1306   //Includes support for ssd1306 displays, but does not automatically enable it
//#define OLED_FLIP_180     //Rotates OLED pictures 180deg
#define USE_AUREBESH_FONT	//Select Aubresh font for the display rather than Star Jedi

/*-----------------------------
///// BlueTooth Defines  //////
-----------------------------*/
// Bluetooth module:
// 1) Enable the defines below.
// 2) Add +1 to NUM_BLADES.
// 3) In Preset add: "StylePtr<Blue>(),".
// 4) In BladesConfig: "SimpleBladePtr<CH3LED, NoLED, NoLED, NoLED, bladePowerPin6, -1, -1, -1>()," where bladePowerPin6 is the MOSFET negative you used to power the BT module.
// 
//#define ENABLE_SERIAL				//To enable Blutooth
//Redbear BLE preloads BT name and password
//#define BLE_PASSWORD "PASSWORD"	//Password must be 20 or less characters.
//#define BLE_NAME "LONG NAME"		//Descriptive name.
//#define BLE_SHORTNAME "SHORTNAM"	//Must be 8 or less characters.

/*-----------------------------
///// ProffieOS Defines  //////
-----------------------------*/
#define DISABLE_DIAGNOSTIC_COMMANDS			//Recommended to save memory, disables diagnostic commands for Serial Monitor.
#define DISABLE_BASIC_PARSER_STYLES			//Saves memory by disabling old-fashioned styles.
#define MOTION_TIMEOUT 60 * 15 * 1000		//Amount of time motion and gestures detection stays active after saber is retracted. Affects Battle Mode.
#define IDLE_OFF_TIME 60 * 10 * 1000		//Amount of time power to LEDs remains active after saber is retracted. Might affect Bluetooth.
#define KILL_OLD_PLAYERS					//Will "kill off" oldest sound when spamming effects like blast or clash to prevent running out of wav players.

/*-----------------------------
//// Save States Defines  /////
-----------------------------*/
//#define SAVE_STATE					//Makes the board save last selected Volume, Preset and blade Color
#define SAVE_PRESET
/*#define SAVE_VOLUME
#define SAVE_COLOR_CHANGE
#define DYNAMIC_BLADE_DIMMING
#define DYNAMIC_BLADE_LENGTH
#define DYNAMIC_CLASH_THRESHOLD
#define SAVE_BLADE_DIMMING
#define SAVE_CLASH_THRESHOLD*/

/*-----------------------------
// Presets and Props Defines  /
-----------------------------*/
//#define DUAL_POWER_BUTTONS			//This one means that clicking the AUX will also turn the saber on. If not defined, AUX will go to next preset when off.
#define ENABLE_ALL_EDIT_OPTIONS
#define FETT263_DUAL_MODE_SOUND
//#define FETT263_EDIT_MODE_MENU
#define FETT263_CLASH_STRENGTH_SOUND
#define FETT263_MAX_CLASH 16
#define FETT263_SAY_COLOR_LIST
//#define FETT263_SAY_COLOR_LIST_CC
#define FETT263_SAY_BATTERY_PERCENT
#define FETT263_DISABLE_COPY_PRESET
//#define FETT263_HOLD_BUTTON_OFF
#define FETT263_LOCKUP_DELAY 200
#define FETT263_BM_CLASH_DETECT 6
#define NO_REPEAT_RANDOM				//Make ProffieOS remember which file (of each effect) was played last
#define COLOR_CHANGE_DIRECT				//Allows Color Change button to toggle each ColorChange<> effect.
//#define FEMALE_TALKIE_VOICE			//Uses a female talkie voice, only affects built-in error messages

#endif

//*******************************************************************************************
#ifdef CONFIG_PROP
//*******************************************************************************************
//#include "../props/saber.h"
#include "../props/saber_fett263_buttons.h"

/*
saber.h - this is the default, you don't need a CONFIG_PROP section to use this.
saber_sa22c_buttons.h - saber prop with button assignments designed by sa22c.
saber_shtok_buttons.h - saber prop with button assignments designed by Dmitry Shtok.
saber_fett263_buttons.h - saber prop with button assignments designed by fett263, includes battle mode.
saber_BC_buttons.h - (ProffieOS 6 or later) saber prop with button assignments and features designed by Brian Conner.
detonator.h - thermal detonator prop.
blaster.h - blaster prop.
audiofx.h - similar to an adafruit audiofx board.
micom.h -
*/
#endif

//*******************************************************************************************
#ifdef CONFIG_PRESETS
//*******************************************************************************************

//----------------------------------------------------------------------------------------------
// Default preset for pixelblades. You'd need a new one if you got a tricree-npxl adapter.
//----------------------------------------------------------------------------------------------
/********* Preset Intent ***********************************************************************
  This is Revan's Jedi Lightsaber. As such, it should have the following colors:
  BLUE
  GREEN
  VIOLET
  
  Blue and Green should be paired with light soundfont, while the violet should have a dark side
  sound font. Since the same happens with the Dark saber, and since we don't want them to have
  same sounds, we will keep both JuanSith soundfonts for this saber and Kyberphonics and LorgBlako
  for the Dark saber.
************************************************************************************************/
/********* Blade Definitions *******************************************************************

We have five different presets:
-presetneopxl:			Blade Present. 
-presetnpxltricree:		TriCree Blade Present
-presetchargeblade:		Charging Bladeplug Present
-presetneopxlbladeplug:	Illuminated Bladeplug
-presetnoblade:			No Blade Present
************************************************************************************************/

/*
"Light" Saber soundfonts:

"JuanSith/RReborn;common", "JuanSith/RReborn/tracks/track1.wav",
"Revanchist Reborn"

"JuanSith/RButcher;common", "JuanSith/RButcher/tracks/track1.wav",
"Revanchist The Butcher"

"Dark" saber sound fonts:

"LBSF/KOTORMed;common", "LBSF/KOTORMed/tracks/track1.wav",
"Revanchist Reborn"

"Kyberpho/PButcher;common", "Kyberpho/PButcher/tracks/track1.wav",
"Prodigal Butcher"

*/

Preset presetneopxl[] = {
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StylePtr<MainHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		"Revanchist Reborn B"
	},
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StylePtr<MainHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		"Revanchist Reborn G"
	},
	{	"JuanSith/RButcher;common",
		"JuanSith/RButcher/tracks/track1.wav",
		//Main Blade
		StylePtr<MainHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		"Revanchist The Butcher"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Crystal Chamber
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Accents
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Illuminated PCB
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		"Power Cell\nLevel"
	}
};


//----------------------------------------------------------------------------------------------
// Preset for a NeoPixel TriCree adapter. Copies accents but simplify main blade.
//----------------------------------------------------------------------------------------------

Preset presetnpxltricree[] = {

	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<AudioFlicker<Yellow,White>,Blue,300,800>(),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		"Revanchist Reborn B"
	},
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<AudioFlicker<Yellow,White>,Green,300,800>(),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		"Revanchist Reborn G"
	},
	{	"JuanSith/RButcher;common",
		"JuanSith/RButcher/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<AudioFlicker<Yellow,White>,Rgb<118,0,194>,300,800>(),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		"Revanchist The Butcher"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Crystal Chamber
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Accents
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Illuminated PCB
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		"Power Cell\nLevel"
	}
};

//----------------------------------------------------------------------------------------------
// For NPX BladePlug
//----------------------------------------------------------------------------------------------
Preset presetneopxlbladeplug[] = {
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		"Revanchist Reborn B"
	},
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		"Revanchist Reborn G"
	},
	{	"JuanSith/RButcher;common",
		"JuanSith/RButcher/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		"Revanchist The Butcher"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Crystal Chamber
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Accents
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Illuminated PCB
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		"Power Cell\nLevel"
	}
};

//----------------------------------------------------------------------------------------------
// For the Charging BladePlug
//----------------------------------------------------------------------------------------------
Preset presetchargeblade[] = {
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Crystal Chamber
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Accents
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Illuminated PCB
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		"Power Cell\nLevel"
	}
};

//----------------------------------------------------------------------------------------------
// For the no blade case I would just leave a single preset for display and one for charge.
//----------------------------------------------------------------------------------------------
Preset presetnoblade[] = {
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,0,65535"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,0,65535"),
		"Revanchist Reborn B"
	},
	{	"JuanSith/RReborn;common",
		"JuanSith/RReborn/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("0,65535,0"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("0,65535,0"),
		"Revanchist Reborn G"
	},
	{	"JuanSith/RButcher;common",
		"JuanSith/RButcher/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Crystal Chamber
		StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		//Accents
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>("30208,0,49664"),
		//Illuminated PCB
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>("30208,0,49664"),
		"Revanchist The Butcher"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Crystal Chamber
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Accents
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		//Illuminated PCB
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		"Power Cell\nLevel"
	}
};


//----------------------------------------------------------------------------------------------
// Blade number should always be the same. In this case, 7. Please note that the soundboard will
// not suppress power to any blade. But if it's not physically connected, you can blank it.
//----------------------------------------------------------------------------------------------
// Resistor range for the Blade PCB (between Data and Ground): 2k to 100k Ohms.

/********* Hardware Definition *****************************************************************
 The main blade goes on Data1, while the illuminated PCB, crystal chamber and accents are in
 Data2. We have a 2px crystal chamber, plus 3 X 3px accent strips, they are connecter to the
 NPXL PCB power and are in line in the following order Crystal/Accent1/Accent2/Accent3/NPX PCB.
 We use SubBladeWithStride so the illuminated PCB is treated as two concentric circles.
 Total pixels: 27 pixels.
 
 We have both BladeID and Blade Present capabilities. This should enable all types of autoconfig
 for presets and adapting to multiple conditions.
************************************************************************************************/
/********* Blade Definitions *******************************************************************

We have five different presets:
-presetneopxl:			Blade Present. 
-presetnpxltricree:		TriCree Blade Present
-presetchargeblade:		Charging Bladeplug Present
-presetneopxlbladeplug:	Illuminated Bladeplug
-presetnoblade:			No Blade Present

But we will only have a different save for "presetchargeblade", since the rest have the same
presets, only changing the style for the main blade due to hardware differences.
************************************************************************************************/

BladeConfig blades[] = {
	// Always leave a 0 resistor for a "catch all" config. No resistor will read as high ohms.
	// 0/Default is an 86cm, 124 pixel WS2812B
	// Saving state for each differant preset separatelly. Could also save for each individual blade.
	{ 0,
		//Main Blade
		WS281XBladePtr<124, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		//2 Pixel Crystal Chamber
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		//3X Accent Pixels (3pxl each)
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		//Illuminated PCB (separated in two 8 pxl rings)
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 2.2k **FUTURE USE**
	// 2.7k **FUTURE USE**
	// 3.3k **FUTURE USE**
	// 3.9k **FUTURE USE**
	// 4.7k **FUTURE USE**
	// 5.6k **FUTURE USE**
	// 6.8k is an 46cm 65 pixel WS2812, SMD resistor (Grogu blade)
	{ 6800,
		WS281XBladePtr<65, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 8.3k is an 56cm 80 pixel WS2812, SMD resistor (Yoda blade)
	{ 8300,
		WS281XBladePtr<80, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 10k  **FUTURE USE**
	// 12k is a 108 pixel WS2812 (or V2 LED Strip), SMD resistor
	{ 12000,
		WS281XBladePtr<108, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 15k is a 122 pixel WS2812 (or V2 LED Strip), SMD resistor
	{ 15000,
		WS281XBladePtr<122, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 18k is a 132 pixel WS2812 (or V2 LED Strip), SMD resistor
	{ 18000,
		WS281XBladePtr<132, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 22.3k is an 86.5cm 124 pixel WS2812, SMD resistor
	{ 22000,
		WS281XBladePtr<124, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 27k is a 20 pixel WS2812 (or mini-LED Strip) (demo/test blade)
	{ 27000,
		WS281XBladePtr<20, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 33k is a 15 pixel WS2812 (or mini-LED Strip) (demo/test blade)
	{ 33000,
		WS281XBladePtr<15, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},	
	// 39k is Charging Bladeplug with 5 pixels WS2812b
	{ 39000,
		WS281XBladePtr<5, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetchargeblade),
		"chrg_sav"     //You can add a directory to save state for each blade.
	},
	// 47k is Bladeplug with 5 pixels WS2812b, SMD resistor
	{ 47000,
		WS281XBladePtr<5, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxlbladeplug),
	},
	// 56k is Shtok's NPXL to TriCree adapter
	{ 56000,
		WS281XBladePtr<1, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetnpxltricree), /**** Please do a different preset for TRI Cree ****/
	},
	// 68k is an 86.5cm, 124 pixel WS2812, metal resistor
	{ 68000,
		WS281XBladePtr<124, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	//82k **FUTURE USE**
	//### Deprecated ###
	// 100k is an 85cm, 124 pixel WS2812B	
	{ 100000,
		WS281XBladePtr<124, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	//Let's assume a blade plug with 5 leds.
	{ NO_BLADE,
		WS281XBladePtr<5, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBlade(0, 1, WS281XBladePtr<27, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBlade(2, 4, NULL),
		SubBlade(5, 7, NULL),
		SubBlade(8, 10, NULL),
		SubBladeWithStride(11, 25, 2, NULL),
		SubBladeWithStride(12, 26, 2, NULL),
		CONFIGARRAY(presetnoblade),
	}
};

#endif

//*******************************************************************************************
#ifdef CONFIG_BUTTONS
//*******************************************************************************************
Button PowerButton(BUTTON_POWER, powerButtonPin, "pow"); //Single or Power Button
Button AuxButton(BUTTON_AUX, auxPin, "aux"); // for second button
#endif


//*******************************************************************************************
#ifdef CONFIG_STYLES
//*******************************************************************************************


//######## Main Blade Style ########
/*--------------------------------- MainHyperResponsiveRotoscopePrequelsBlue -------------------------
copyright Fett263 Rotoscope (Primary Blade) OS6 Style
https://fett263.com/fett263-proffieOS6-style-library.html#Rotoscope
OS6.7 v4.021
Single Style
Base Style: Hyper Responsive Rotoscope (Prequels)


--Effects Included--
Ignition Effect: Standard Ignition
Retraction Effect: Standard Retraction
Lockup Effect: Intensity Lockup V1, Begin Effect: Real Clash, End Effect: Full Blade Absorb
LightningBlock Effect: Responsive Lightning Block
Drag Effect: Intensity Sparking Drag
Melt Effect: Intensity Melt
Blast Effect: Blast Wave (Random)
Clash Effect: Real Clash V1
*/
using MainHyperResponsiveRotoscopePrequelsBlue = Layers<Mix<HoldPeakF<SwingSpeed<250>,Scale<SwingAcceleration<100>,Int<50>,Int<500>>,Scale<SwingAcceleration<>,Int<20000>,Int<10000>>>,RandomFlicker<StripesX<Int<24000>,Scale<HoldPeakF<SwingSpeed<200>,Scale<SwingAcceleration<100>,Int<50>,Int<300>>,Scale<SwingAcceleration<100>,Int<24000>,Int<16000>>>,Int<-1400>,Int<-100>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,255,255>>,Scale<EffectRandomF<EFFECT_BLAST>,Int<100>,Int<400>>,Int<100>,Scale<EffectPosition<EFFECT_BLAST>,Int<100>,Int<400>>,Scale<EffectPosition<EFFECT_BLAST>,Int<28000>,Int<8000>>>,EFFECT_BLAST>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,TransitionEffectL<TrConcat<TrInstant,AlphaL<RgbArg<CLASH_COLOR_ARG,Rgb<255,255,255>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<12000>,Int<60000>>>>,TrFadeX<Scale<ClashImpactF<>,Int<200>,Int<400>>>>,EFFECT_CLASH>,TransitionEffectL<TrWaveX<RgbArg<CLASH_COLOR_ARG,Rgb<255,255,255>>,Scale<ClashImpactF<>,Int<100>,Int<400>>,Int<100>,Scale<ClashImpactF<>,Int<100>,Int<400>>,Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>>,EFFECT_CLASH>>,LockupTrL<TransitionEffect<AlphaMixL<Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<SwingSpeed<100>,Int<14000>,Int<18000>>>,BrownNoiseFlickerL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrJoin<TrDelay<8000>,TrInstant>,TrFade<3000>,EFFECT_LOCKUP_BEGIN>,TrConcat<TrJoin<TrDelay<50>,TrInstant>,Mix<IsLessThan<ClashImpactF<>,Int<26000>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Scale<ClashImpactF<>,Int<20000>,Int<60000>>>>>,TrFade<300>>,TrConcat<TrInstant,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,255,255>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL<Strobe<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,AudioFlicker<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,Blue>,50,1>,TrConcat<TrInstant,AlphaL<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<RgbArg<LB_COLOR_ARG,Rgb<255,255,255>>,Int<16000>>,30>,TrSmoothFade<600>>>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,255>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,255>>,Int<300>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrFade<4000>>,TrFade<300>,SaberBase::LOCKUP_DRAG>,LockupTrL<AlphaL<Remap<Scale<RampF,Int<65536>,Int<0>>,StaticFire<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>,Mix<TwistAngle<>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>,RotateColorsX<Int<3000>,Mix<Int<12000>,Black,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>>,0,3,5,3000,10>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrConcat<TrWipeIn<100>,AlphaL<RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrJoin<TrDelay<4000>,TrFade<300>>,AlphaL<Mix<TwistAngle<>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>,RotateColorsX<Int<3000>,RgbArg<STAB_COLOR_ARG,Rgb<255,24,0>>>>,SmoothStep<IntArg<MELT_SIZE_ARG,28000>,Int<4000>>>,TrFade<4000>>,TrWipe<200>,SaberBase::LOCKUP_MELT>,InOutTrL<TrWipeX<IgnitionTime<300>>,TrWipeInX<RetractionTime<0>>,Black>>;
/*
Add to preset as StylePtr<MainHyperResponsiveRotoscopePrequelsBlue>()
--------------------------------------------------------------------------*/

//######## Accents Style ########
/*--------------------------------- AccentHyperResponsiveRotoscopeOriginalTrilogyBlue -------------------------
copyright Fett263 (Accent LED / PCB) OS6 Style
https://fett263.com/fett263-proffieOS6-style-library.html#Rotoscope
OS6.7 v4.021
Single Style
On Behavior: Slow Run Forward
Off Behavior: Slow Pulse Off-On


--Effects Included--
Ignition Effect: Instant
Retraction Effect: Instant
*/
using AccentHyperResponsiveRotoscopeOriginalTrilogyBlue = Layers<TransitionLoop<Black,TrConcat<TrWipe<1000>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,TrWipe<1000>>>,InOutTrL<TrInstant,TrInstant,Pulsing<Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,8000>>>;
/*
Add to preset as StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyBlue>()
--------------------------------------------------------------------------*/

//######## Illuminated PCB Style ########
/*--------------------------------- AccentHyperResponsiveRotoscopePrequelsBlue -------------------------
copyright Fett263 Rotoscope (Accent LED / PCB) OS6 Style
https://fett263.com/fett263-proffieOS6-style-library.html#Rotoscope
OS6.7 v4.021
Single Style
Base Style: Hyper Responsive Rotoscope (Prequels)

Off Behavior: Off
Timed Shift, reset with Clash or Lockup. Timed Shift, reset with Clash or Lockup. Timed Shift, reset with Clash or Lockup. Timed Shift, reset with Clash or Lockup. Timed Shift, reset with Clash or Lockup. Timed Shift, reset with Clash or Lockup. Timed Shift, reset with Clash or Lockup.

--Effects Included--
Ignition Effect: Instant
Retraction Effect: Instant
*/
using IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue = Layers<Mix<HoldPeakF<SwingSpeed<250>,Scale<SwingAcceleration<100>,Int<50>,Int<500>>,Scale<SwingAcceleration<>,Int<20000>,Int<10000>>>,RandomFlicker<StripesX<Int<24000>,Scale<HoldPeakF<SwingSpeed<200>,Scale<SwingAcceleration<100>,Int<50>,Int<300>>,Scale<SwingAcceleration<100>,Int<24000>,Int<16000>>>,Int<-1400>,Int<-100>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,InOutTrL<TrInstant,TrInstant,Black>>;
/*
Add to preset as StylePtr<IlluminatedPCBHyperResponsiveRotoscopePrequelsBlue>()
--------------------------------------------------------------------------*/

//######## Crystal Chamber Style ########
/*--------------------------------- CrystalHyperResponsiveRotoscopePrequelsBlue -------------------------
copyright Fett263 (Crystal Chamber) OS6 Style
https://fett263.com/fett263-proffieOS6-style-library.html#Rotoscope
OS6.7 v4.021
Single Style
On Behavior: Kyber Flow Up
Off Behavior: Slow Pulse Off-On


--Effects Included--
Ignition Effect: Instant
PowerUp Effect: Power Flash
Retraction Effect: Instant
CoolDown Effect: Power Flash
*/
using CrystalHyperResponsiveRotoscopePrequelsBlue = Layers<Stripes<5000,-2500,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,Mix<Int<16384>,Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<IgnitionTime<0>>,TrInstant>,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>,TrFade<1000>>,EFFECT_IGNITION>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<0>>,TrInstant>,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>,TrFade<1000>>,EFFECT_RETRACTION>,InOutTrL<TrInstant,TrInstant,Pulsing<Black,RgbArg<BASE_COLOR_ARG,Rgb<0,0,255>>,8000>>>;
/*
Add to preset as StylePtr<CrystalHyperResponsiveRotoscopePrequelsBlue>()
--------------------------------------------------------------------------*/

#endif

Unrelated, but this isn’t true thankfully.
Use of a font sold to an individual is per individual, not per hilt.
If you were to sell a hilt with said font, then you should either purchase a second copy of the font and pass the cost onto the buyer, or sell your copy (and therefore right to use) and delete all copies in your possession.
I hope this puts some relief on your poor wallet :slight_smile:

1 Like