From ec4d1c352682cc655a645a3a06fb455d3e6fd362 Mon Sep 17 00:00:00 2001 From: LysiX Date: Sun, 3 Nov 2024 21:30:06 -0600 Subject: [PATCH] custom gem colors --- _ark/ps4/dx/macros/dx_overshell_macros.dta | 19 + _ark/ps4/dx/overshell/dx_slider_states.dta | 367 ++++++++++++++++++ .../dx/overshell/dx_track_theme_states.dta | 51 +++ _ark/ps4/dx/overshell/dx_warn_states.dta | 25 ++ _ark/ps4/dx/ui/dx_init.dta | 19 +- _ark/ps4/dx/ui/init_dev.dta | 3 + _build/GoldHEN/plugins/RB4DX-Plugin.prx | Bin 74656 -> 74960 bytes 7 files changed, 483 insertions(+), 1 deletion(-) diff --git a/_ark/ps4/dx/macros/dx_overshell_macros.dta b/_ark/ps4/dx/macros/dx_overshell_macros.dta index d110ca8..c2d5e38 100644 --- a/_ark/ps4/dx/macros/dx_overshell_macros.dta +++ b/_ark/ps4/dx/macros/dx_overshell_macros.dta @@ -111,4 +111,23 @@ {dx_file_rename "ps4/track/shared/particles/textures/particle_spark_cluster.bmp_ps4" "ps4/track/shared/particles/textures/particle_spark_cluster1.bmp_ps4"} {dx_file_rename "ps4/track/shared/particles/textures/particle_spark_dense.bmp_ps4" "ps4/track/shared/particles/textures/particle_spark_dense1.bmp_ps4"} {dx_file_rename "ps4/track/shared/particles/textures/particle_spiral_flare.bmp_ps4" "ps4/track/shared/particles/textures/particle_spiral_flare1.bmp_ps4"} +) + +#define WRITE_GEM_COLOR_DTAS +( + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/greenr.dta" {array ({/ $gemcolgr 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/greeng.dta" {array ({/ $gemcolgg 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/greenb.dta" {array ({/ $gemcolgb 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/redr.dta" {array ({/ $gemcolrr 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/redg.dta" {array ({/ $gemcolrg 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/redb.dta" {array ({/ $gemcolrb 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/yellowr.dta" {array ({/ $gemcolyr 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/yellowg.dta" {array ({/ $gemcolyg 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/yellowb.dta" {array ({/ $gemcolyb 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/bluer.dta" {array ({/ $gemcolbr 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/blueg.dta" {array ({/ $gemcolbg 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/blueb.dta" {array ({/ $gemcolbb 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/oranger.dta" {array ({/ $gemcolor 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/orangeg.dta" {array ({/ $gemcolog 255})}} + {write_file "data:/GoldHEN/RB4DX/settings/theme/gem/colors/orangeb.dta" {array ({/ $gemcolob 255})}} ) \ No newline at end of file diff --git a/_ark/ps4/dx/overshell/dx_slider_states.dta b/_ark/ps4/dx/overshell/dx_slider_states.dta index 7b44779..a9d94a8 100644 --- a/_ark/ps4/dx/overshell/dx_slider_states.dta +++ b/_ark/ps4/dx/overshell/dx_slider_states.dta @@ -59,4 +59,371 @@ (on_cancel {$this show_state kState_RB4DXVisSettings} {$this trigger_cancel_effects}) +) + +#define RGB_DATA +( + {switch $gemchanged + ("Green" + {switch $gemcolchanged + (R + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolgr} ("+" "0" "-")} + ) + (G + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolgg} ("+" "0" "-")} + ) + (B + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolgb} ("+" "0" "-")} + ) + } + ) + ("Red" + {switch $gemcolchanged + (R + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolrr} ("+" "0" "-")} + ) + (G + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolrg} ("+" "0" "-")} + ) + (B + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolrb} ("+" "0" "-")} + ) + } + ) + ("Yellow" + {switch $gemcolchanged + (R + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolyr} ("+" "0" "-")} + ) + (G + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolyg} ("+" "0" "-")} + ) + (B + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolyb} ("+" "0" "-")} + ) + } + ) + ("Blue" + {switch $gemcolchanged + (R + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolbr} ("+" "0" "-")} + ) + (G + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolbg} ("+" "0" "-")} + ) + (B + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolbb} ("+" "0" "-")} + ) + } + ) + ("Orange" + {switch $gemcolchanged + (R + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolor} ("+" "0" "-")} + ) + (G + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolog} ("+" "0" "-")} + ) + (B + {$this setup_confirm_actions {sprintf "Gem Color: %d" $gemcolob} ("+" "0" "-")} + ) + } + ) + } +) +#define RGB_ADD +( + {switch $gemchanged + ("Green" + {switch $gemcolchanged + (R + {unless {> {+ $gemcolgr 1} 255} + {set $gemcolgr {+ $gemcolgr 1}} + } + ) + (G + {unless {> {+ $gemcolgg 1} 255} + {set $gemcolgg {+ $gemcolgg 1}} + } + ) + (B + {unless {> {+ $gemcolgb 1} 255} + {set $gemcolgb {+ $gemcolgb 1}} + } + ) + } + ) + ("Red" + {switch $gemcolchanged + (R + {unless {> {+ $gemcolrr 1} 255} + {set $gemcolrr {+ $gemcolrr 1}} + } + ) + (G + {unless {> {+ $gemcolrg 1} 255} + {set $gemcolrg {+ $gemcolrg 1}} + } + ) + (B + {unless {> {+ $gemcolrb 1} 255} + {set $gemcolrb {+ $gemcolrb 1}} + } + ) + } + ) + ("Yellow" + {switch $gemcolchanged + (R + {unless {> {+ $gemcolyr 1} 255} + {set $gemcolyr {+ $gemcolyr 1}} + } + ) + (G + {unless {> {+ $gemcolyg 1} 255} + {set $gemcolyg {+ $gemcolyg 1}} + } + ) + (B + {unless {> {+ $gemcolyb 1} 255} + {set $gemcolyb {+ $gemcolyb 1}} + } + ) + } + ) + ("Blue" + {switch $gemcolchanged + (R + {unless {> {+ $gemcolbr 1} 255} + {set $gemcolbr {+ $gemcolbr 1}} + } + ) + (G + {unless {> {+ $gemcolbg 1} 255} + {set $gemcolbg {+ $gemcolbg 1}} + } + ) + (B + {unless {> {+ $gemcolbb 1} 255} + {set $gemcolbb {+ $gemcolbb 1}} + } + ) + } + ) + ("Orange" + {switch $gemcolchanged + (R + {unless {> {+ $gemcolor 1} 255} + {set $gemcolor {+ $gemcolor 1}} + } + ) + (G + {unless {> {+ $gemcolgg 1} 255} + {set $gemcolog {+ $gemcolog 1}} + } + ) + (B + {unless {> {+ $gemcolgb 1} 255} + {set $gemcolob {+ $gemcolob 1}} + } + ) + } + ) + } +) +#define RGB_SUB +( + {switch $gemchanged + ("Green" + {switch $gemcolchanged + (R + {unless {< {- $gemcolgr 1} 0} + {set $gemcolgr {- $gemcolgr 1}} + } + ) + (G + {unless {< {- $gemcolgg 1} 0} + {set $gemcolgg {- $gemcolgg 1}} + } + ) + (B + {unless {< {- $gemcolgb 1} 0} + {set $gemcolgb {- $gemcolgb 1}} + } + ) + } + ) + ("Red" + {switch $gemcolchanged + (R + {unless {< {<- $gemcolrr 1} 0} + {set $gemcolrr {<- $gemcolrr 1}} + } + ) + (G + {unless {< {<- $gemcolrg 1} 0} + {set $gemcolrg {<- $gemcolrg 1}} + } + ) + (B + {unless {< {<- $gemcolrb 1} 0} + {set $gemcolrb {<- $gemcolrb 1}} + } + ) + } + ) + ("Yellow" + {switch $gemcolchanged + (R + {unless {< {<- $gemcolyr 1} 0} + {set $gemcolyr {<- $gemcolyr 1}} + } + ) + (G + {unless {< {<- $gemcolyg 1} 0} + {set $gemcolyg {<- $gemcolyg 1}} + } + ) + (B + {unless {< {<- $gemcolyb 1} 0} + {set $gemcolyb {<- $gemcolyb 1}} + } + ) + } + ) + ("Blue" + {switch $gemcolchanged + (R + {unless {< {<- $gemcolbr 1} 0} + {set $gemcolbr {<- $gemcolbr 1}} + } + ) + (G + {unless {< {<- $gemcolbg 1} 0} + {set $gemcolbg {<- $gemcolbg 1}} + } + ) + (B + {unless {< {<- $gemcolbb 1} 0} + {set $gemcolbb {<- $gemcolbb 1}} + } + ) + } + ) + ("Orange" + {switch $gemcolchanged + (R + {unless {< {<- $gemcolor 1} 0} + {set $gemcolor {<- $gemcolor 1}} + } + ) + (G + {unless {< {<- $gemcolgg 1} 0} + {set $gemcolog {<- $gemcolog 1}} + } + ) + (B + {unless {< {<- $gemcolgb 1} 0} + {set $gemcolob {<- $gemcolob 1}} + } + ) + } + ) + } +) +#define RGB_RESET +( + {switch $gemchanged + ("Green" + {switch $gemcolchanged + (R + {set $gemcolgr 0} + ) + (G + {set $gemcolgg 0} + ) + (B + {set $gemcolgb 0} + ) + } + ) + ("Red" + {switch $gemcolchanged + (R + {set $gemcolrr 0} + ) + (G + {set $gemcolrg 0} + ) + (B + {set $gemcolrb 0} + ) + } + ) + ("Yellow" + {switch $gemcolchanged + (R + {set $gemcolyr 0} + ) + (G + {set $gemcolyg 0} + ) + (B + {set $gemcolyb 0} + ) + } + ) + ("Blue" + {switch $gemcolchanged + (R + {set $gemcolbr 0} + ) + (G + {set $gemcolbg 0} + ) + (B + {set $gemcolbb 0} + ) + } + ) + ("Orange" + {switch $gemcolchanged + (R + {set $gemcolor 0} + ) + (G + {set $gemcolog 0} + ) + (B + {set $gemcolob 0} + ) + } + ) + } +) +(kState_RB4DXRGBSlider + (view confirm_action) + (enter + RGB_DATA + ) + (SELECT_MSG + {local $list_data {($objId UIListCom) get_data_in_column token}} + {switch $list_data + ("+" + RGB_ADD + RGB_DATA + ) + ("0" + RGB_RESET + RGB_DATA + ) + ("-" + RGB_SUB + RGB_DATA + ) + } + ) + (on_cancel + {$this show_state kState_RB4DXRGBSelect} + {$this trigger_cancel_effects}) ) \ No newline at end of file diff --git a/_ark/ps4/dx/overshell/dx_track_theme_states.dta b/_ark/ps4/dx/overshell/dx_track_theme_states.dta index d0398df..1dd8ac9 100644 --- a/_ark/ps4/dx/overshell/dx_track_theme_states.dta +++ b/_ark/ps4/dx/overshell/dx_track_theme_states.dta @@ -8,6 +8,7 @@ "Strikeline Texture" {if_else $noshine "Highway Shine: OFF" "Highway Shine: ON"} {if_else $gemshine "Gem Shine: OFF" "Gem Shine: ON"} + {if_else $gemcolors "Custom Gem Colors: ON" "Custom Gem Colors: OFF"} ) } ) @@ -16,6 +17,7 @@ (enter {set $noshine {dx_file_exists "ps4/track/shared/track_skin_swap.sgraph_ps4ps4"}} {set $gemshine {dx_file_exists "ps4/track/guitar/gem_unlit.sgraph_ps4ps4"}} + {set $gemcolors {file_exists "settings/theme/gem/colors/enabled.dta"}} {set $dx_cur_state thm} RB4DXTHM_DATA ) @@ -72,6 +74,14 @@ {$this show_state kState_RB4DXSLTexSelector} {$this trigger_select_effects} ) + ("Custom Gem Colors: ON" + {$this show_state kState_RB4DXGemColorConfirm} + {$this trigger_select_effects} + ) + ("Custom Gem Colors: OFF" + {$this show_state kState_RB4DXGemColorSettings} + {$this trigger_select_effects} + ) } ) (on_cancel @@ -187,4 +197,45 @@ {$this show_state kState_RB4DXTrackTheme} {$this trigger_cancel_effects} ) +) + +;Gem Color Settings +(kState_RB4DXGemColorSettings + (view {$this get_auto_list_view}) + (enter + {$this setup_confirm_actions a ("Green" "Red" "Yellow" "Blue" "Orange")} + {unless $gemcolors + {dx_write_null_file "settings/theme/gem/colors/enabled.dta"} + WRITE_GEM_COLOR_DTAS + } + ) + (SELECT_MSG + {local $list_data {($objId UIListCom) get_data_in_column token}} + {set $gemchanged $list_data} + {$this show_state kState_RB4DXRGBSelect} + {$this trigger_select_effects} + ) + (on_cancel + WRITE_GEM_COLOR_DTAS + {$this show_state kState_RB4DXTrackTheme} + {$this trigger_cancel_effects} + ) +) + +;Gem Color Settings +(kState_RB4DXRGBSelect + (view {$this get_auto_list_view}) + (enter + {$this setup_confirm_actions a ("R" "G" "B")} + ) + (SELECT_MSG + {local $list_data {($objId UIListCom) get_data_in_column token}} + {set $gemcolchanged $list_data} + {$this show_state kState_RB4DXRGBSlider} + {$this trigger_select_effects} + ) + (on_cancel + {$this show_state kState_RB4DXGemColorSettings} + {$this trigger_cancel_effects} + ) ) \ No newline at end of file diff --git a/_ark/ps4/dx/overshell/dx_warn_states.dta b/_ark/ps4/dx/overshell/dx_warn_states.dta index 9722ade..2df36fd 100644 --- a/_ark/ps4/dx/overshell/dx_warn_states.dta +++ b/_ark/ps4/dx/overshell/dx_warn_states.dta @@ -163,6 +163,31 @@ ) ) +(kState_RB4DXGemColorConfirm + (view confirm_action) + (enter + {$this setup_confirm_actions "Would you like to reset gem colors to default or edit your colors?" ("Reset" "Edit")} + ) + (SELECT_MSG + {local $list_data {($objId UIListCom) get_data_in_column token} + } + {switch $list_data + ("Reset" + {dx_file_delete "settings/theme/gem/colors/enabled.dta"} + {$this show_state kState_RB4DXTrackTheme} + ) + ("Edit" + {$this show_state kState_RB4DXGemColorSettings} + ) + } + {$this trigger_select_effects} + ) + (on_cancel + {$this show_state kState_RB4DXTrackTheme} + {$this trigger_cancel_effects} + ) +) + (kState_RB4DXAutoplayHowTo (view confirm_action) (enter diff --git a/_ark/ps4/dx/ui/dx_init.dta b/_ark/ps4/dx/ui/dx_init.dta index fb422e6..1c9a48d 100644 --- a/_ark/ps4/dx/ui/dx_init.dta +++ b/_ark/ps4/dx/ui/dx_init.dta @@ -75,4 +75,21 @@ } ;controller binding -SET_PAD_BINDING_VAR \ No newline at end of file +SET_PAD_BINDING_VAR + +;default gem colors (TODO: READ FROM USER DTAS) +{set $gemcolgr 33} +{set $gemcolgg 93} +{set $gemcolgb 2} +{set $gemcolrr 229} +{set $gemcolrg 4} +{set $gemcolrb 8} +{set $gemcolyr 202} +{set $gemcolyg 164} +{set $gemcolyb 8} +{set $gemcolbr 3} +{set $gemcolbg 82} +{set $gemcolbb 139} +{set $gemcolor 190} +{set $gemcolog 48} +{set $gemcolob 5} \ No newline at end of file diff --git a/_ark/ps4/dx/ui/init_dev.dta b/_ark/ps4/dx/ui/init_dev.dta index f8ac412..68f8229 100644 --- a/_ark/ps4/dx/ui/init_dev.dta +++ b/_ark/ps4/dx/ui/init_dev.dta @@ -12,6 +12,9 @@ {dx_file_mkdir "settings/controller/type/vox"} {dx_file_mkdir "settings/controller/binding"} {dx_file_mkdir "settings/controller/binding/pad"} ;TODO: maybe add bindings for non-pad controllers? + {dx_file_mkdir "settings/theme"} + {dx_file_mkdir "settings/theme/gem"} + {dx_file_mkdir "settings/theme/gem/colors"} ) #define UPDATE_SETTINGS ( diff --git a/_build/GoldHEN/plugins/RB4DX-Plugin.prx b/_build/GoldHEN/plugins/RB4DX-Plugin.prx index 59fe441ad90d1736eb4d62abd747dfacb711d249..e50d5f2a7724f63aa81d795aa0caa4d1c734844b 100644 GIT binary patch delta 9895 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