Saberforge Bane Mk2

I’ve been waiting for this beauty to show up in Saberforge’s site for more than six months, then another two months until it was in my hands (I needed a friend to bring it).

It is a clameshell design, so I had to use some very advanced techniques to get the correct curve.

1 Like

This allowed to design a monolithic chassis en the CAD.


Since I was not comfortable with the dimensions I left more margin than usual. And that payed off by fitting (after a 14hs print session) in the first try.

Also designed and printer a custom pair of plunger. Color was definitely off, but I will revisit that in the future.

1 Like

Then came the time to install the Shtok V3 Illuminated PCB in a V4 configuration. That is Data2 for the PCB Leds, and also added a Blade Present pin. I put heat shrink to reduce mechanical stress, plus some glue over the back for stress relief and contamination protection.



Then I prepared the switch:

Did the switches with a shared ground.


And off to install the board:

1 Like

And this is how it ended installed.

4 Likes

Incidentally, if anyone wants to review the config file, here it is:

/********************************************************************************************
##### General Specs #####
Hilt: SaberForge Bane Mk2
Chassis: Baldusi Custom Basic v6
Board: Proffieboard v2.2
ProffieOS Version: 7.4
Soundfont Collection: 2023-04
-Momentary Switches: 2
-Battery: 18650
-Speaker: KR Sabers 22mm V2 3W
-Hilt NPXL Connector: Shtok NPLX V3 Illuminated Connector (V4 Config)
-BladeID: 33k resistor (0603 SMD)
-Blade Present Pin (Data3)

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

##### Install Intent #####
This is a dedicated SaberForge Bane Mk2. As such, it should have just a red blade. I've
bought Lord Blako's The Bane for this hilt. Will also add Kyberphics RED and Greyscale
Seethe, for variety.

@@@ REMEMBER @@@: YOU SHOULD PAY FOR EACH SOUNDFONT PER PERSON: MULTIPLE HILTS SAME PERSON
ARE FINE. BUT IF YOU SELL THE HILT, YOU EITHER PAY FOR THOSE FONTS, INSTALL FONTS THAT THE
BUYER ALREADY OWNS OR DELETE YOUR COPIES.

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

//*******************************************************************************************
#ifdef CONFIG_TOP
//*******************************************************************************************
/*-----------------------------
////// Hardware Defines  //////
-----------------------------*/
#include "proffieboard_v2_config.h"
#define NUM_BLADES 3						//(1 x Blade + 2 x illuminated NPXL PCB)
#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 1.5				//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,-50,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 1000						//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 (same number scale as 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.
saber_caiwyn_buttons.h - (ProffieOS 7 or later) This config is designed to provide fast, low-latency response to button presses for the most basic functions (blaster blocks, lockups, and clashes) by omitting, or limiting non-critical features.
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 Darth Bane Lightsaber. As such, it should have the following colors:
  RED
  
  I've bought Lord Blako's The Bane for this hilt. Will also add Kyberphics RED and Greyscale
  Seethe, for variety.
  Plus the always present battery metering PowerCell.

@@@ REMEMBER @@@: YOU SHOULD PAY FOR EACH SOUNDFONT PER PERSON: MULTIPLE HILTS SAME PERSON
ARE FINE. BUT IF YOU SELL THE HILT, YOU EITHER PAY FOR THOSE FONTS, INSTALL FONTS THAT THE
BUYER ALREADY OWNS OR DELETE YOUR COPIES.
  
************************************************************************************************/
/********* 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
************************************************************************************************/

/*
"Dark" Saber soundfonts:

"LBSF/TheBane;common", "LBSF/TheBane/tracks/track2.wav",
"Darth Bane"

"Kyberpho/Red;common", "Kyberpho/Red/tracks/track1.wav",
"RED"

"Greyscal/Seethe;common", "Greyscal/Seethe/tracks/track1.wav",
"Seethe"

*/

Preset presetneopxl[] = {
	{	"LBSF/TheBane;common",
		"LBSF/TheBane/tracks/track2.wav",
		//Main Blade
		StylePtr<MainHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		//Crystal Chamber
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		"Darth Bane"
	},
	{	"Kyberpho/Red;common",
		"Kyberpho/Red/tracks/track1.wav",
		//Main Blade
		StylePtr<MainHyperResponsiveRotoscopePrequelsRed>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		"RED"
	},
	{	"Greyscal/Seethe;common",
		"Greyscal/Seethe/tracks/track1.wav",
		//Main Blade
		StylePtr<MainHyperResponsiveRotoscopeSequelsRed>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		"Seethe"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//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[] = {
	{	"LBSF/TheBane;common",
		"LBSF/TheBane/tracks/track2.wav",
		//Main Blade
		StyleNormalPtr<AudioFlicker<Yellow,White>,Red,300,800>(),
		//Crystal Chamber
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		"Darth Bane"
	},
	{	"Kyberpho/Red;common",
		"Kyberpho/Red/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<AudioFlicker<Yellow,White>,Red,300,800>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		"RED"
	},
	{	"Greyscal/Seethe;common",
		"Greyscal/Seethe/tracks/track1.wav",
		//Main Blade
		StyleNormalPtr<AudioFlicker<Yellow,White>,Red,300,800>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		"Seethe"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Illuminated PCB
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		StyleNormalPtr<BLACK, BLACK, 300, 800>(),
		"Power Cell\nLevel"
	}
};

//----------------------------------------------------------------------------------------------
// For NPX BladePlug
//----------------------------------------------------------------------------------------------
Preset presetneopxlbladeplug[] = {
	{	"LBSF/TheBane;common",
		"LBSF/TheBane/tracks/track2.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		//Crystal Chamber
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		"Darth Bane"
	},
	{	"Kyberpho/Red;common",
		"Kyberpho/Red/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		"RED"
	},
	{	"Greyscal/Seethe;common",
		"Greyscal/Seethe/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		"Seethe"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//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,
		//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[] = {
	{	"LBSF/TheBane;common",
		"LBSF/TheBane/tracks/track2.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		//Crystal Chamber
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeOriginalTrilogyRed>(),
		"Darth Bane"
	},
	{	"Kyberpho/Red;common",
		"Kyberpho/Red/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>(),
		"RED"
	},
	{	"Greyscal/Seethe;common",
		"Greyscal/Seethe/tracks/track1.wav",
		//Main Blade
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		//Illuminated PCB
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		StylePtr<AccentHyperResponsiveRotoscopeSequelsRed>(),
		"Seethe"
	},
	{ "PwrCell;common", "tracks/mars.wav",
		//Main Blade
		&style_charging,
		//Illuminated PCB
		&style_charging,
		&style_charging,
		"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 is on Data2. We use SubBladeWithStride
 so the illuminated PCB is treated as two concentric circles.
 Total pixels: 16 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> >(),
		//Illuminated PCB (separated in two 8 pxl rings)
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 22.3k is an 86.5cm 124 pixel WS2812, SMD resistor
	{ 22000,
		WS281XBladePtr<124, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	// 33k is a 30 pixel WS2812 (or mini-LED Strip) (demo/test blade)
	{ 33000,
		WS281XBladePtr<30, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},	
	// 39k is Charging Bladeplug with 5 pixels WS2812b
	{ 39000,
		WS281XBladePtr<5, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 2, NULL),
		CONFIGARRAY(presetneopxlbladeplug),
	},
	// 56k is Shtok's NPXL to TriCree adapter
	{ 56000,
		WS281XBladePtr<1, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	//82k **FUTURE USE**
	//### Deprecated ###
	// 100k is an 85cm, 124 pixel WS2812B	
	{ 100000,
		WS281XBladePtr<124, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 2, NULL),
		CONFIGARRAY(presetneopxl)
	},
	//Let's assume a blade plug with 5 leds.
	{ NO_BLADE,
		WS281XBladePtr<5, bladePin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >(),
		SubBladeWithStride(0, 15, 2, WS281XBladePtr<16, blade2Pin, Color8::GRB, PowerPINS<bladePowerPin2, bladePowerPin3> >()),
		SubBladeWithStride(1, 15, 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 ########
/*--------------------------------- MainHyperResponsiveRotoscopeOriginalTrilogyRed -------------------------
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 (Original Trilogy)


--Effects Included--
Ignition Effect: Standard Ignition
PowerUp Effect: Power Burst Forward
Retraction Effect: Standard Retraction
CoolDown Effect: Power Burst Reverse
Lockup Effect: Intensity Lockup V1, Begin Effect: Real Clash, End Effect: Localized Absorb
LightningBlock Effect: Responsive Lightning Block
Drag Effect: Intensity Sparking Drag
Melt Effect: Intensity Melt
Blast Effect: Blast Wave (Random)
Clash Effect: Responsive Clash with Wave
Battery Level: Blade Location (Green to Red)
*/
using MainHyperResponsiveRotoscopeOriginalTrilogyRed = Layers<Mix<HoldPeakF<SwingSpeed<250>,Scale<SwingAcceleration<100>,Int<50>,Int<500>>,Scale<SwingAcceleration<>,Int<20000>,Int<10000>>>,RandomFlicker<StripesX<Int<15000>,Scale<HoldPeakF<SwingSpeed<200>,Scale<SwingAcceleration<100>,Int<50>,Int<300>>,Scale<SwingAcceleration<100>,Int<24000>,Int<16000>>>,Int<-3200>,Int<-200>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<IgnitionTime<300>>,TrInstant>,Stripes<5000,-2500,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<7710>,Black,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>>,Mix<Int<3855>,Black,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>>>,TrFade<800>>,EFFECT_IGNITION>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<0>>,TrInstant>,Stripes<5000,2500,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<7710>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>>,Mix<Int<3855>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>>>,TrFade<800>>,EFFECT_RETRACTION>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,244,157>>,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>,TransitionEffectL<TrWaveX<RgbArg<CLASH_COLOR_ARG,Rgb<255,68,0>>,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,68,0>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>>,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,68,0>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,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,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL<Strobe<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,AudioFlicker<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Blue>,50,1>,TrConcat<TrInstant,AlphaL<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Int<16000>>,30>,TrSmoothFade<600>>>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,0>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,0>>,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>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,Bump<BatteryLevel,Int<10000>>>,TrFade<300>>,EFFECT_BATTERY_LEVEL>>;
/*
Add to preset as StylePtr<MainHyperResponsiveRotoscopeOriginalTrilogyRed>()
--------------------------------------------------------------------------*/

/*--------------------------------- MainHyperResponsiveRotoscopePrequelsRed -------------------------
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
PowerUp Effect: Power Burst Forward
Retraction Effect: Standard Retraction
CoolDown Effect: Power Burst Reverse
Lockup Effect: Intensity Lockup V1, Begin Effect: Real Clash, End Effect: Localized Absorb
LightningBlock Effect: Responsive Lightning Block
Drag Effect: Intensity Sparking Drag
Melt Effect: Intensity Melt
Blast Effect: Blast Wave (Random)
Clash Effect: Responsive Clash with Wave
Battery Level: Blade Location (Green to Red)
*/
using MainHyperResponsiveRotoscopePrequelsRed = 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<255,0,0>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<IgnitionTime<300>>,TrInstant>,Stripes<5000,-2500,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<7710>,Black,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>>,Mix<Int<3855>,Black,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>>>,TrFade<800>>,EFFECT_IGNITION>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<0>>,TrInstant>,Stripes<5000,2500,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<7710>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>>,Mix<Int<3855>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>>>,TrFade<800>>,EFFECT_RETRACTION>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,244,157>>,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>,TransitionEffectL<TrWaveX<RgbArg<CLASH_COLOR_ARG,Rgb<255,68,0>>,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,68,0>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>>,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,68,0>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,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,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL<Strobe<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,AudioFlicker<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Blue>,50,1>,TrConcat<TrInstant,AlphaL<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Int<16000>>,30>,TrSmoothFade<600>>>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,0>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,0>>,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>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,Bump<BatteryLevel,Int<10000>>>,TrFade<300>>,EFFECT_BATTERY_LEVEL>>;
/*
Add to preset as StylePtr<MainHyperResponsiveRotoscopePrequelsRed>()
--------------------------------------------------------------------------*/

/*--------------------------------- MainHyperResponsiveRotoscopeSequelsRed -------------------------
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 (Sequels)


--Effects Included--
Ignition Effect: Standard Ignition
PowerUp Effect: Power Burst Forward
Retraction Effect: Standard Retraction
CoolDown Effect: Power Burst Reverse
Lockup Effect: Intensity Lockup V1, Begin Effect: Real Clash, End Effect: Localized Absorb
LightningBlock Effect: Responsive Lightning Block
Drag Effect: Intensity Sparking Drag
Melt Effect: Intensity Melt
Blast Effect: Blast Wave (Random)
Clash Effect: Responsive Clash with Wave
Battery Level: Blade Location (Green to Red)
*/
using MainHyperResponsiveRotoscopeSequelsRed = Layers<Mix<HoldPeakF<SwingSpeed<250>,Scale<SwingAcceleration<100>,Int<50>,Int<500>>,Scale<SwingAcceleration<>,Int<20000>,Int<10000>>>,RandomFlicker<StripesX<Int<14000>,Scale<HoldPeakF<SwingSpeed<200>,Scale<SwingAcceleration<100>,Int<50>,Int<300>>,Scale<SwingAcceleration<100>,Int<24000>,Int<16000>>>,Int<-4000>,Int<-400>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<IgnitionTime<300>>,TrInstant>,Stripes<5000,-2500,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<7710>,Black,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>>,Mix<Int<3855>,Black,RgbArg<IGNITION_COLOR_ARG,Rgb<255,255,255>>>>,TrFade<800>>,EFFECT_IGNITION>,TransitionEffectL<TrConcat<TrJoin<TrDelayX<RetractionTime<0>>,TrInstant>,Stripes<5000,2500,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>,Mix<Int<7710>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>>,Mix<Int<3855>,Black,RgbArg<RETRACTION_COLOR_ARG,Rgb<255,255,255>>>>,TrFade<800>>,EFFECT_RETRACTION>,TransitionEffectL<TrWaveX<RgbArg<BLAST_COLOR_ARG,Rgb<255,244,157>>,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>,TransitionEffectL<TrWaveX<RgbArg<CLASH_COLOR_ARG,Rgb<255,68,0>>,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,68,0>>,Int<200>>,StripesX<Int<1800>,Scale<NoisySoundLevel,Int<-3500>,Int<-5000>>,Mix<Int<6425>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Mix<Int<12850>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>>>,AlphaL<AudioFlicker<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Mix<Int<10280>,Black,RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>>>,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,68,0>>,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,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,AlphaL<RgbArg<LOCKUP_COLOR_ARG,Rgb<255,68,0>>,Bump<Scale<BladeAngle<>,Scale<BladeAngle<0,16000>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-12000>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<10000>>>,Sum<IntArg<LOCKUP_POSITION_ARG,16000>,Int<-10000>>>,Int<13000>>>,TrFade<400>>,SaberBase::LOCKUP_NORMAL>,ResponsiveLightningBlockL<Strobe<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,AudioFlicker<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Blue>,50,1>,TrConcat<TrInstant,AlphaL<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Bump<Int<12000>,Int<18000>>>,TrFade<200>>,TrConcat<TrInstant,HumpFlickerL<AlphaL<RgbArg<LB_COLOR_ARG,Rgb<118,0,194>>,Int<16000>>,30>,TrSmoothFade<600>>>,LockupTrL<AlphaL<RandomPerLEDFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,0>>>,SmoothStep<IntArg<DRAG_SIZE_ARG,28000>,Int<3000>>>,TrConcat<TrJoin<TrDelay<4000>,TrWipeIn<200>>,AlphaL<BrownNoiseFlickerL<RgbArg<DRAG_COLOR_ARG,Rgb<255,255,0>>,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>,TransitionEffectL<TrConcat<TrJoin<TrDelay<2000>,TrInstant>,AlphaL<Mix<BatteryLevel,Red,Green>,Bump<BatteryLevel,Int<10000>>>,TrFade<300>>,EFFECT_BATTERY_LEVEL>>;
/*
Add to preset as StylePtr<MainHyperResponsiveRotoscopeSequelsRed>()
--------------------------------------------------------------------------*/

//######## Illuminated PCB Style ########

/*--------------------------------- AccentHyperResponsiveRotoscopeOriginalTrilogyRed -------------------------
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 (Original Trilogy)

Off Behavior: Off


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

/*--------------------------------- AccentHyperResponsiveRotoscopePrequelsRed -------------------------
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


--Effects Included--
Ignition Effect: Instant
Retraction Effect: Instant
*/
using AccentHyperResponsiveRotoscopePrequelsRed = 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<255,0,0>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<7710>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>,Mix<Int<19276>,Black,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,RgbArg<BASE_COLOR_ARG,Rgb<255,0,0>>>,InOutTrL<TrInstant,TrInstant,Black>>;
/*
Add to preset as StylePtr<AccentHyperResponsiveRotoscopePrequelsRed>()
--------------------------------------------------------------------------*/

/*--------------------------------- AccentHyperResponsiveRotoscopeSequelsRed -------------------------
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 (Sequels)

Off Behavior: Off


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

#endif

Nice. Excellent work.

So what did you do with the traced curve? take a picture and import it as an SVG or something? That’s been something I haven’t wrapped my head around yet. How to get the curve into 3D world.

I have the rule in the picture. Put it as an image on a plane, scaled it until the rule was perfectly scaled, then traced curves until they matched. You obviously need a good parametric CAD to make it easy.

1 Like

A+ on those comments in the config. I’m inspired to include these kind of notes in my next config so I know what the heck I did :slight_smile:

1 Like