Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 5 additions & 1 deletion assets/languages/en.ini
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,9 @@ DefaultPadConfig=Default Pad Config
SmxDefaultLightBrightness=Default Light Brightness
SmxBgPack=Pad Lights Pack
SmxJudgePack=Judgement Pack
SmxIdleLights=Idle Pad Lights
SmxIdleLightsFirmware=Firmware
SmxIdleLightsBlack=Black
SmxAssignPads=Assign Pads to Players
SmxSwapPads=Swap P1/P2 Pads
SmxSwapPadsAction=Swap
Expand Down Expand Up @@ -1703,14 +1706,15 @@ SmxInputHelp=Enable native StepManiaX stage input via the RustManiaX SDK, connec
UseFSRsHelp=Enable direct FSR pad diagnostics and threshold editing on the Configure Pads screen. This reads supported pads directly instead of relying on the gameplay input backend.\nAlso reveals the StepManiaX settings page.\nDefault is No.
SmxConfigHelp=StepManiaX pad settings: enable StepManiaX input and pad-config management.\nShown when Use FSRs is enabled.
SmxManagesPadConfigHelp=Controls who owns your StepManiaX pad thresholds.\nOn: DeadSync writes thresholds to each pad (the pad's saved default profile, or the Default Pad Config preset if it has none) and re-applies them on launch and whenever the active profile or pad changes. Edits made in Configure Pads are temporary; save tunings as profiles from Song Select to keep them.\nOff: DeadSync never changes your pads. Edit them directly in Configure Pads and the values stay on the pad.\nDefault is No.
SmxPanelLightsHelp=Drive StepManiaX pad panel LEDs with GIF animations. Plays configurable background animations on all screens, per-panel judgement effects during gameplay (tap grades, freezes, rolls, mine hits), and press feedback while navigating menus. While on, the game owns the LEDs and the pad's own firmware lighting is suppressed.\nDefault is No.
SmxPanelLightsHelp=Drive StepManiaX pad panel LEDs with GIF animations. Plays configurable background animations on all screens, per-panel judgement effects during gameplay (tap grades, freezes, rolls, mine hits), and press feedback while navigating menus. While the game is showing something, the pad's own firmware lighting is suppressed; what an idle pad shows is controlled by Idle Pad Lights.\nDefault is No.
SmxUnderglowThemeHelp=Set the StepManiaX pad edge underglow LEDs to your theme colour. P1 pad uses the selected colour; P2 pad uses the paired offset colour. Applied on pad connect and whenever the theme colour changes. While this options page is open, the strips show a red test colour instead (blue when this is off). Requires a newer pad with master board firmware v4 or later; older pads do not support underglow and will not light up.\nDefault is No.
SmxUnderglowGrbHelp=Wire byte order for the underglow LED strips. Some strips read colours in GRB order, which swaps red and green: purple shows as cyan and green as magenta. While this options page is open the strips hold a red test colour; if they show green instead of red, switch this to GRB.\nDefault is RGB.
DefaultPadConfigHelp=The built-in threshold preset (Low/Medium/High, matching the official StepManiaX tool) DeadSync uses as its default.\nDefault is Low.
SmxSinglePadPlayerHelp=With a single StepManiaX pad connected, choose whether it plays as Player 1 or Player 2, regardless of its hardware jumper. Pick Player 2 to play a lone stage on the P2 side.
SmxDefaultLightBrightnessHelp=Machine default for StepManiaX pad-light brightness, 0% (off) to 100%. Used to seed new player profiles; each player can then set their own value in Player Options.\nDefault is 100%.
SmxBgPackHelp=The GIF pack to use for full-pad background animations. Default uses the built-in common pack. User packs go in assets/smx-pad-lights/dance/<pack-name>/. Only shown when Panel Lights is on.
SmxJudgePackHelp=The GIF pack to use for per-panel judgement animations. Default uses the built-in common pack. User packs go in assets/smx-judge-lights/dance/<pack-name>/. Only shown when Panel Lights is on.
SmxIdleLightsHelp=What the pads show when GIF lighting has nothing to display, such as the none pack or a role a pack leaves empty.\nFirmware: the pads fall back to their built-in lighting (the stored idle and step animations).\nBlack: the game keeps the LEDs and holds the pads dark; panel press animations still play.\nOnly shown when Panel Lights is on. Default is Firmware.
SmxAssignPadsHelp=Choose which physical pad is Player 1 and which is Player 2 by stepping on each. Use this when both pads share the same P1/P2 jumper, or when the pads are installed on the wrong sides. The pads light blue (P1) and red (P2) so you can see the assignment.
SmxSwapPadsHelp=Instantly swap which pad is Player 1 and which is Player 2. Handy when the pads are jumpered correctly but installed on the wrong sides. Both pads must be connected.
DebugFsrDumpHelp=If you have FSRs, use this to create fsrdump.txt in your deadsync folder. Please send it to PerfectTaste so he can debug and implement support for more FSR I/O boards and firmware versions.
Expand Down
4 changes: 4 additions & 0 deletions assets/languages/pseudo.ini
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,9 @@ SmxAssignStatusNone=[(ńóńé)__]
SmxConfig=[ŠťépMáńíáX___]
SmxBgPack=[Páđ Ĺíghťš Páçk___]
SmxDefaultLightBrightness=[Đéfáúĺť Ĺíghť Bŕíghťńéšš_______]
SmxIdleLights=[Íđĺé Páđ Ĺíghťš___]
SmxIdleLightsBlack=[Bĺáçk_]
SmxIdleLightsFirmware=[Fíŕmwáŕé__]
SmxInput=[Úšé ŠťépMáńíáX____]
SmxJudgePack=[Júđgéméńť Páçk___]
SmxManagesPadConfig=[ĐéáđŠýńç Máńágéš Páđ Çóńfíg________]
Expand Down Expand Up @@ -521,6 +524,7 @@ SmxAssignPadsHelp=[Çhóóšé whíçh phýšíçáĺ páđ íš Pĺáýéŕ 1
SmxConfigHelp=[ŠťépMáńíáX páđ šéťťíńgš: éńábĺé ŠťépMáńíáX íńpúť áńđ páđ-çóńfíg máńágéméńť.\nŠhówń whéń Úšé FŠŔš íš éńábĺéđ.____________________________]
SmxBgPackHelp=[Ťhé GÍF páçk ťó úšé fóŕ fúĺĺ-páđ báçkgŕóúńđ áńímáťíóńš. Đéfáúĺť úšéš ťhé búíĺť-íń çómmóń páçk. Úšéŕ páçkš gó íń ášéťš/šmx-páđ-ĺíghťš/đáńçé/<páçk-ńámé>/. Óńĺý šhówń whéń Páńéĺ Ĺíghťš íš óń.____________]
SmxDefaultLightBrightnessHelp=[Máçhíńé đéfáúĺť fóŕ ŠťépMáńíáX páđ-ĺíghť bŕíghťńéšš, 0% (óff) ťó 100%. Úšéđ ťó šééđ ńéw pĺáýéŕ pŕófíĺéš; éáçh pĺáýéŕ çáń ťhéń šéť ťhéíŕ ówń váĺúé íń Pĺáýéŕ Ópťíóńš.\nĐéfáúĺť íš 100%._________________________________________]
SmxIdleLightsHelp=[Wháť ťhé páđš šhów whéń GÍF ĺíghťíńg háš ńóťhíńg ťó đíšpĺáý, šúçh áš ťhé ńóńé páçk óŕ á ŕóĺé á páçk ĺéávéš émpťý.\nFíŕmwáŕé: ťhé páđš fáĺĺ báçk ťó ťhéíŕ búíĺť-íń ĺíghťíńg (ťhé šťóŕéđ íđĺé áńđ šťép áńímáťíóńš).\nBĺáçk: ťhé gámé kéépš ťhé ĹÉĐš áńđ hóĺđš ťhé páđš đáŕk; páńéĺ pŕéšš áńímáťíóńš šťíĺĺ pĺáý.\nÓńĺý šhówń whéń Páńéĺ Ĺíghťš íš óń. Đéfáúĺť íš Fíŕmwáŕé.____________________]
SmxJudgePackHelp=[Ťhé GÍF páçk ťó úšé fóŕ péŕ-páńéĺ júđgéméńť áńímáťíóńš. Đéfáúĺť úšéš ťhé búíĺť-íń çómmóń páçk. Úšéŕ páçkš gó íń ášéťš/šmx-júđgé-ĺíghťš/đáńçé/<páçk-ńámé>/. Óńĺý šhówń whéń Páńéĺ Ĺíghťš íš óń.___________]
SmxInputHelp=[Éńábĺé ńáťívé ŠťépMáńíáX šťágé íńpúť víá ťhé ŔúšťMáńíáX ŠĐK, çóńńéçťíńg đíŕéçťĺý ťó ťhé páđš.\nÇháńgíńg ťhíš ŕéqúíŕéš á ŕéšťáŕť.\nĐéfáúĺť íš Ńó.____________________________________]
SmxManagesPadConfigHelp=[Çóńťŕóĺš whó ówńš ýóúŕ ŠťépMáńíáX páđ ťhŕéšhóĺđš.\nÓń: ĐéáđŠýńç wŕíťéš ťhŕéšhóĺđš ťó éáçh páđ (ťhé páđ'š šávéđ đéfáúĺť pŕófíĺé, óŕ ťhé Đéfáúĺť Páđ Çóńfíg pŕéšéť íf íť háš ńóńé) áńđ ŕé-áppĺíéš ťhém óń ĺáúńçh áńđ whéńévéŕ ťhé áçťívé pŕófíĺé óŕ páđ çháńgéš. Éđíťš máđé íń Çóńfígúŕé Páđš áŕé ťémpóŕáŕý; šávé ťúńíńgš áš pŕófíĺéš fŕóm Šóńg Šéĺéçť ťó kéép ťhém.\nÓff: ĐéáđŠýńç ńévéŕ çháńgéš ýóúŕ páđš. Éđíť ťhém đíŕéçťĺý íń Çóńfígúŕé Páđš áńđ ťhé váĺúéš šťáý óń ťhé páđ.\nĐéfáúĺť íš Ńó.____________________________________________________________________________________________________________________]
Expand Down
2 changes: 2 additions & 0 deletions crates/deadsync-config/src/app_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ pub struct Config {
/// effects, press feedback). While on, the game owns the LEDs and the
/// pad's own firmware lighting is suppressed.
pub smx_panel_lights: bool,
pub smx_idle_lights_black: bool,
/// User animation pack supplying the pad backgrounds (a directory under
/// `assets/smx-pad-lights/dance/`). Empty selects the built-in set.
pub smx_pad_gifs_pack: SmxPackName,
Expand Down Expand Up @@ -381,6 +382,7 @@ impl Default for Config {
smx_input: system.smx_input,
smx_manages_pad_config: system.smx_manages_pad_config,
smx_panel_lights: system.smx_panel_lights,
smx_idle_lights_black: system.smx_idle_lights_black,
smx_pad_gifs_pack: system.smx_pad_gifs_pack,
smx_judge_gifs_pack: system.smx_judge_gifs_pack,
smx_underglow_theme: system.smx_underglow_theme,
Expand Down
4 changes: 4 additions & 0 deletions crates/deadsync-config/src/app_update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@ pub fn set_smx_panel_lights(cfg: &mut Config, enabled: bool) -> bool {
set_if_changed(&mut cfg.smx_panel_lights, enabled)
}

pub fn set_smx_idle_lights_black(cfg: &mut Config, black: bool) -> bool {
set_if_changed(&mut cfg.smx_idle_lights_black, black)
}

pub fn set_smx_pad_gifs_pack(cfg: &mut Config, pack: crate::options::SmxPackName) -> bool {
set_if_changed(&mut cfg.smx_pad_gifs_pack, pack)
}
Expand Down
1 change: 1 addition & 0 deletions crates/deadsync-config/src/defaults.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ pub const DEFAULT_SMX_MANAGES_PAD_CONFIG: bool = false;
pub const DEFAULT_SMX_PANEL_LIGHTS: bool = false;
pub const DEFAULT_SMX_UNDERGLOW_THEME: bool = false;
pub const DEFAULT_SMX_UNDERGLOW_GRB: bool = false;
pub const DEFAULT_SMX_IDLE_LIGHTS_BLACK: bool = false;
pub const DEFAULT_SMX_DEFAULT_LIGHT_BRIGHTNESS: u8 = 100;
pub const DEFAULT_SOFTWARE_RENDERER_THREADS: u8 = 1;
pub const DEFAULT_SONG_PARSING_THREADS: u8 = 0;
Expand Down
1 change: 1 addition & 0 deletions crates/deadsync-config/src/load.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ fn apply_system_opts(loaded: SystemOptions, cfg: &mut Config) {
cfg.smx_input = loaded.smx_input;
cfg.smx_manages_pad_config = loaded.smx_manages_pad_config;
cfg.smx_panel_lights = loaded.smx_panel_lights;
cfg.smx_idle_lights_black = loaded.smx_idle_lights_black;
cfg.smx_pad_gifs_pack = loaded.smx_pad_gifs_pack;
cfg.smx_judge_gifs_pack = loaded.smx_judge_gifs_pack;
cfg.smx_underglow_theme = loaded.smx_underglow_theme;
Expand Down
22 changes: 21 additions & 1 deletion crates/deadsync-config/src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ use crate::defaults::{
DEFAULT_SHOW_SELECT_MUSIC_SCOREBOX, DEFAULT_SHOW_SELECT_MUSIC_STAGE_DISPLAY,
DEFAULT_SHOW_SELECT_MUSIC_VIDEO_BANNERS, DEFAULT_SHOW_STATS_MODE, DEFAULT_SHOW_VERSION_OVERLAY,
DEFAULT_SMOOTH_HISTOGRAM, DEFAULT_SMX_INPUT, DEFAULT_SMX_MANAGES_PAD_CONFIG,
DEFAULT_SMX_PANEL_LIGHTS, DEFAULT_SMX_UNDERGLOW_GRB, DEFAULT_SMX_UNDERGLOW_THEME,
DEFAULT_SMX_IDLE_LIGHTS_BLACK, DEFAULT_SMX_PANEL_LIGHTS, DEFAULT_SMX_UNDERGLOW_GRB,
DEFAULT_SMX_UNDERGLOW_THEME,
DEFAULT_SOFTWARE_RENDERER_THREADS, DEFAULT_SONG_PARSING_THREADS,
DEFAULT_SUBMIT_ARROWCLOUD_FAILS, DEFAULT_THREE_KEY_NAVIGATION, DEFAULT_TRANSLATED_TITLES,
DEFAULT_UPDATER_INSTALL_ENABLED, DEFAULT_USE_FSRS,
Expand Down Expand Up @@ -179,6 +180,10 @@ pub struct SystemOptions {
/// Send platform strip (underglow) colours in GRB wire order instead of
/// RGB, for strip hardware that consumes WS2812 channel order.
pub smx_underglow_grb: bool,
/// When pad gif lighting is on but nothing resolves for the current
/// screen, hold the pads solid black (true) instead of releasing them to
/// the pad firmware's built-in lighting (false, the default).
pub smx_idle_lights_black: bool,
/// User animation pack supplying the pad backgrounds (a directory under
/// `assets/smx-pad-lights/dance/`). Empty selects the built-in set.
pub smx_pad_gifs_pack: SmxPackName,
Expand Down Expand Up @@ -231,6 +236,7 @@ impl Default for SystemOptions {
smx_input: DEFAULT_SMX_INPUT,
smx_manages_pad_config: DEFAULT_SMX_MANAGES_PAD_CONFIG,
smx_panel_lights: DEFAULT_SMX_PANEL_LIGHTS,
smx_idle_lights_black: DEFAULT_SMX_IDLE_LIGHTS_BLACK,
smx_underglow_theme: DEFAULT_SMX_UNDERGLOW_THEME,
smx_underglow_grb: DEFAULT_SMX_UNDERGLOW_GRB,
smx_pad_gifs_pack: SmxPackName::default(),
Expand Down Expand Up @@ -609,6 +615,10 @@ pub fn load_system_options(conf: &SimpleIni, default: SystemOptions) -> SystemOp
.get("Options", "SmxPanelLights")
.and_then(|value| parse_loose_bool_str(&value))
.unwrap_or(default.smx_panel_lights),
smx_idle_lights_black: conf
.get("Options", "SmxIdleLightsBlack")
.and_then(|value| parse_loose_bool_str(&value))
.unwrap_or(default.smx_idle_lights_black),
smx_underglow_theme: conf
.get("Options", "SmxUnderglowTheme")
.and_then(|value| parse_loose_bool_str(&value))
Expand Down Expand Up @@ -770,6 +780,11 @@ pub fn push_system_input_hardware_option_lines(
options.system.smx_manages_pad_config,
);
push_bool(content, "SmxPanelLights", options.system.smx_panel_lights);
push_bool(
content,
"SmxIdleLightsBlack",
options.system.smx_idle_lights_black,
);
if let Some(enabled) = options.smx_underglow_theme {
push_bool(content, "SmxUnderglowTheme", enabled);
}
Expand Down Expand Up @@ -2128,6 +2143,7 @@ mod tests {
smx_input: false,
smx_manages_pad_config: false,
smx_panel_lights: false,
smx_idle_lights_black: false,
smx_underglow_theme: false,
smx_underglow_grb: false,
smx_pad_gifs_pack: SmxPackName::default(),
Expand Down Expand Up @@ -2407,6 +2423,7 @@ mod tests {
SmxInput=1
SmxManagesPadConfig=1
SmxPanelLights=1
SmxIdleLightsBlack=1
SmxUnderglowTheme=1
SmxUnderglowGrb=1
SmxPadGifsPack=senpi-basic
Expand Down Expand Up @@ -2463,6 +2480,7 @@ mod tests {
assert!(loaded.smx_input);
assert!(loaded.smx_manages_pad_config);
assert!(loaded.smx_panel_lights);
assert!(loaded.smx_idle_lights_black);
assert!(loaded.smx_underglow_theme);
assert!(loaded.smx_underglow_grb);
assert_eq!(loaded.smx_pad_gifs_pack.as_str(), "senpi-basic");
Expand Down Expand Up @@ -2591,6 +2609,7 @@ mod tests {
options.smx_input = true;
options.smx_manages_pad_config = true;
options.smx_panel_lights = false;
options.smx_idle_lights_black = true;
let hardware_options = SystemInputHardwareOptions {
system: options,
gamepad_backend: "RawInput",
Expand All @@ -2611,6 +2630,7 @@ mod tests {
"SmxInput=1\n",
"SmxManagesPadConfig=1\n",
"SmxPanelLights=0\n",
"SmxIdleLightsBlack=1\n",
"SmxUnderglowTheme=1\n",
"SmxUnderglowGrb=0\n",
"SmxPadGifsPack=\n",
Expand Down
4 changes: 4 additions & 0 deletions crates/deadsync-config/src/runtime_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,10 @@ impl RuntimeConfigStore {
self.update_config(|cfg| config_update::set_smx_underglow_grb(cfg, grb))
}

pub fn update_smx_idle_lights_black(&self, black: bool) -> bool {
self.update_config(|cfg| config_update::set_smx_idle_lights_black(cfg, black))
}

pub fn update_smx_default_pad_config(&self, preset: deadsync_smx::SmxPadPreset) -> bool {
self.update_config(|cfg| config_update::set_smx_default_pad_config(cfg, preset))
}
Expand Down
1 change: 1 addition & 0 deletions crates/deadsync-config/src/runtime_update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ update_config_fn!(pub fn update_use_fsrs(enabled: bool) => set_use_fsrs);
runtime_config_fn!(pub fn update_smx_input(enabled: bool) => update_smx_input);
runtime_config_fn!(pub fn update_smx_manages_pad_config(enabled: bool) => update_smx_manages_pad_config);
runtime_config_fn!(pub fn update_smx_panel_lights(enabled: bool) => update_smx_panel_lights);
runtime_config_fn!(pub fn update_smx_idle_lights_black(black: bool) => update_smx_idle_lights_black);
runtime_config_fn!(pub fn update_smx_pad_gifs_pack(pack: crate::options::SmxPackName) => update_smx_pad_gifs_pack);
runtime_config_fn!(pub fn update_smx_judge_gifs_pack(pack: crate::options::SmxPackName) => update_smx_judge_gifs_pack);
runtime_config_fn!(pub fn update_smx_default_pad_config(preset: deadsync_smx::SmxPadPreset) => update_smx_default_pad_config);
Expand Down
1 change: 1 addition & 0 deletions crates/deadsync-config/src/save.rs
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ fn system_options(cfg: &Config) -> SystemOptions {
smx_input: cfg.smx_input,
smx_manages_pad_config: cfg.smx_manages_pad_config,
smx_panel_lights: cfg.smx_panel_lights,
smx_idle_lights_black: cfg.smx_idle_lights_black,
smx_underglow_theme: cfg.smx_underglow_theme,
smx_underglow_grb: cfg.smx_underglow_grb,
smx_pad_gifs_pack: cfg.smx_pad_gifs_pack,
Expand Down
4 changes: 4 additions & 0 deletions crates/deadsync-shell/src/lighting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@ impl SmxPanelDriver {
self.inner.set_pad_blackout(pad, on);
}

pub fn set_idle_black(&mut self, on: bool) {
self.inner.set_idle_black(on);
}

pub fn on_raw_panel(&self, pad: usize, panel: usize, pressed: bool) {
self.inner.on_raw_panel(pad, panel, pressed);
}
Expand Down
2 changes: 1 addition & 1 deletion crates/deadsync-smx/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ deadsync-score = { path = "../deadsync-score" }
deadlib-platform = { path = "../deadlib-platform" }
image = { version = "0.25.10", default-features = false, features = ["gif"] }
log = "0.4.33"
rustmaniax-sdk = "2.0.0"
rustmaniax-sdk = "2.1.1"

[lints.clippy]
perf = { level = "warn", priority = -1 }
Expand Down
Loading