diff --git a/_ark/ps4/dx/macros/dx_overshell_macros.dta b/_ark/ps4/dx/macros/dx_overshell_macros.dta
index 487987d..d110ca8 100644
--- a/_ark/ps4/dx/macros/dx_overshell_macros.dta
+++ b/_ark/ps4/dx/macros/dx_overshell_macros.dta
@@ -36,6 +36,40 @@
}
}
)
+#define SET_HIGHWAY_TEX_VAR
+(
+ {set $enabledtex
+ {cond
+ ({&& {! {dx_file_exists "settings/visuals/highwaytex.dta"}} {dx_file_exists "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}}
+ none
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_wood.dta"}
+ wood
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_black.dta"}
+ black
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_rb3_guitar.dta"}
+ rb3_guitar
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_rb3_bass.dta"}
+ rb3_bass
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_rb3_drums.dta"}
+ rb3_drums
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_rb3_keys.dta"}
+ rb3_keys
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_fnfestival.dta"}
+ fnfestival
+ )
+ ({dx_file_exists "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ fnfestival_beta
+ )
+ }
+ }
+)
#define MOVE_NOFLAMES_FILES_ON
(
{dx_file_rename "ps4/track/smasher/gem_smasher_unlit1.entity_ps4" "ps4/track/smasher/gem_smasher_unlit.entity_ps4"}
diff --git a/_ark/ps4/dx/overshell/dx_states.dta b/_ark/ps4/dx/overshell/dx_states.dta
index 2b1f286..2f1a090 100644
--- a/_ark/ps4/dx/overshell/dx_states.dta
+++ b/_ark/ps4/dx/overshell/dx_states.dta
@@ -629,16 +629,30 @@
;Track Settings
#define RB4DXTRK_DATA
(
- {$this setup_confirm_actions a
- (
- {if_else $noflames "Flames: OFF" "Flames: ON"}
- {if_else $noshine "Track Shine: OFF" "Track Shine: ON"}
- {if_else $gemshine "Gem Shine: OFF" "Gem Shine: ON"}
- {if_else $noaa "Track Antialiasing: OFF" "Track Antialiasing: ON"}
- {if_else $micwarn "Hide Mic Warning: ON" "Hide Mic Warning: OFF"}
- {if_else $trackangle "Custom Track Angle: ON" "Custom Track Angle: OFF"}
- "Track Curvature"
- )
+ {if_else {$this in_song}
+ {$this setup_confirm_actions a
+ (
+ {if_else $noflames "Flames: OFF" "Flames: ON"}
+ {if_else $noshine "Highway Shine: OFF" "Highway Shine: ON"}
+ {if_else $gemshine "Gem Shine: OFF" "Gem Shine: ON"}
+ {if_else $noaa "Track Antialiasing: OFF" "Track Antialiasing: ON"}
+ {if_else $micwarn "Hide Mic Warning: ON" "Hide Mic Warning: OFF"}
+ {if_else $trackangle "Custom Track Angle: ON" "Custom Track Angle: OFF"}
+ "Track Curvature"
+ )
+ }
+ {$this setup_confirm_actions a
+ (
+ "Highway Texture"
+ {if_else $noflames "Flames: OFF" "Flames: ON"}
+ {if_else $noshine "Highway Shine: OFF" "Highway Shine: ON"}
+ {if_else $gemshine "Gem Shine: OFF" "Gem Shine: ON"}
+ {if_else $noaa "Track Antialiasing: OFF" "Track Antialiasing: ON"}
+ {if_else $micwarn "Hide Mic Warning: ON" "Hide Mic Warning: OFF"}
+ {if_else $trackangle "Custom Track Angle: ON" "Custom Track Angle: OFF"}
+ "Track Curvature"
+ )
+ }
}
)
(kState_RB4DXTrkSettings
@@ -687,7 +701,7 @@
{$this show_state kState_RB4DXTrackAngleSelector}
{$this trigger_select_effects}
)
- (("Track Shine: ON" "Track Shine: OFF")
+ (("Highway Shine: ON" "Highway Shine: OFF")
{set $noshine {! $noshine}}
{if_else $noshine
{do
@@ -777,6 +791,10 @@
{$this show_state kState_RB4DXTrackCurve}
{$this trigger_select_effects}
)
+ ("Highway Texture"
+ {$this show_state kState_RB4DXHWTexSelector}
+ {$this trigger_select_effects}
+ )
}
)
(on_cancel
@@ -786,6 +804,498 @@
)
)
+;Highway Texture Selector (TODO: automatically create this state)
+(kState_RB4DXHWTexSelector
+ (view {$this get_auto_list_view})
+ (enter
+ {$this setup_confirm_actions a
+ (
+ "[Default]"
+ "Black"
+ "RB3 Guitar"
+ "RB3 Bass"
+ "RB3 Drums"
+ "RB3 Keys"
+ "Fortnite Festival"
+ "Fortnite Festival (Beta)"
+ "Wood"
+ )
+ }
+ {set $customhw {|| {dx_file_exists "settings/visuals/highwaytex.dta"} {dx_file_exists "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}}}
+ SET_HIGHWAY_TEX_VAR
+ )
+ (SELECT_MSG
+ {local $list_data {($objId UIListCom) get_data_in_column token}}
+ {switch $list_data ;This is very jank, pls fix
+ ("[Default]"
+ {if $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ )
+ (wood
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_rb3_keys.dta"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util.bmp_ps4" "ps4/track/shared/track_pattern_center_util1.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util.bmp_ps4" "ps4/track/shared/track_pattern_side_util1.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ )
+ }
+ {dx_file_delete "settings/visuals/highwaytex.dta"}
+ }
+ )
+ ("Wood"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_wood.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("Black"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_black.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("RB3 Guitar"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("RB3 Bass"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_rb3_bass.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("RB3 Drums"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_rb3_drums.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("RB3 Keys"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_rb3_keys.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("Fortnite Festival"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_fnfestival.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival_beta
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ ("Fortnite Festival (Beta)"
+ {dx_write_null_file "settings/visuals/highwaytex.dta"}
+ {dx_write_null_file "settings/visuals/highwaytex_fnfestival_beta.dta"}
+ {if_else $customhw
+ {switch $enabledtex
+ (none
+ {dx_file_delete "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (wood
+ {dx_file_delete "settings/visuals/highwaytex_wood.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (black
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_black.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_guitar
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_guitar.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_bass
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_bass.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_drums
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_drums.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (rb3_keys
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_rb3_keys.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ (fnfestival
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4"}
+ {dx_file_delete "settings/visuals/highwaytex_fnfestival.dta"}
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ )
+ }
+ {do
+ {dx_file_rename "ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4" "ps4/track/shared/gem_track_texture/gem_track_surface.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_center_util1.bmp_ps4" "ps4/track/shared/track_pattern_center_util.bmp_ps4"}
+ {dx_file_rename "ps4/track/shared/track_pattern_side_util1.bmp_ps4" "ps4/track/shared/track_pattern_side_util.bmp_ps4"}
+ }
+ }
+ )
+ }
+ {$this show_state kState_RB4DXTrkSettings}
+ {$this trigger_select_effects}
+ )
+ (on_cancel
+ {$this show_state kState_RB4DXTrkSettings}
+ {$this trigger_cancel_effects}
+ )
+)
+
;Track Angle Type Selector
(kState_RB4DXTrackAngleSelector
(view confirm_action)
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4
new file mode 100644
index 0000000..ba76982
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_black.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4
new file mode 100644
index 0000000..c092fd4
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4
new file mode 100644
index 0000000..b200a8f
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_fnfestival_beta.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4
new file mode 100644
index 0000000..5120e20
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_bass.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4
new file mode 100644
index 0000000..96fd507
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_drums.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4
new file mode 100644
index 0000000..69b5a7d
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_guitar.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4 b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4
new file mode 100644
index 0000000..5b0b198
Binary files /dev/null and b/_ark/ps4/track/shared/gem_track_texture/gem_track_surface_rb3_keys.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/track_pattern_center_util1.bmp_ps4 b/_ark/ps4/track/shared/track_pattern_center_util1.bmp_ps4
new file mode 100644
index 0000000..ba76982
Binary files /dev/null and b/_ark/ps4/track/shared/track_pattern_center_util1.bmp_ps4 differ
diff --git a/_ark/ps4/track/shared/track_pattern_side_util1.bmp_ps4 b/_ark/ps4/track/shared/track_pattern_side_util1.bmp_ps4
new file mode 100644
index 0000000..ba76982
Binary files /dev/null and b/_ark/ps4/track/shared/track_pattern_side_util1.bmp_ps4 differ
diff --git a/dependencies/ForgeTool/DtxCS.dll b/dependencies/ForgeTool/DtxCS.dll
index e60515a..0fd476b 100644
Binary files a/dependencies/ForgeTool/DtxCS.dll and b/dependencies/ForgeTool/DtxCS.dll differ
diff --git a/dependencies/ForgeTool/DtxCS.xml b/dependencies/ForgeTool/DtxCS.xml
new file mode 100644
index 0000000..0fc2b2b
--- /dev/null
+++ b/dependencies/ForgeTool/DtxCS.xml
@@ -0,0 +1,600 @@
+
+
+
+ DtxCS
+
+
+
+
+ Builtin functions, in case I end up writing an interpreter.
+
+
+
+
+ Represents an array of DataNodes.
+
+
+
+
+ Returns DataType.ARRAY
+
+
+
+
+ The children of this array.
+
+
+
+
+ Default constructor for a Data Array.
+
+
+
+
+ Add a node to this Array.
+
+ Node to add
+ The added node.
+
+
+
+ Get or set the child of this array at the given index.
+
+
+
+
+
+
+ Find the array in this array's children at the given index.
+
+
+
+
+
+
+ Find the integer in this array's children at the given index.
+
+
+
+
+
+
+ Find the float in this array's children at the given index.
+
+
+
+
+
+
+ Find the string in this array's children at the given index.
+
+
+
+
+
+
+ Find the symbol in this array's children at the given index.
+
+
+
+
+
+
+ Find the variable in this array's children at the given index.
+
+
+
+
+
+
+ Finds any node at the given index and returns it as a string.
+
+
+
+
+
+
+ Find the first array in this array's children whose name matches.
+ If none is found, returns null.
+
+
+
+
+
+
+ The string representation of the first element of the array, unless
+ that element is another array, which would result in an empty string.
+
+
+
+
+ The number of elements in this array.
+
+
+
+
+ The string representation of this Array, suitable for putting right
+ back into a .dta file.
+
+
+
+
+
+ Returns a copy of this datacommand with all children evaulated.
+
+
+
+
+ The most basic element of dta.
+
+
+
+
+ The type of this Atom.
+
+
+
+
+ The value of this Atom.
+
+
+
+
+ The value of this Atom.
+
+
+
+
+ The value of this Atom.
+
+
+
+
+ Construct an Atom whose value is a string or symbol.
+
+ The value assigned to this atom.
+
+
+
+ Construct an Atom whose value is an integer.
+
+
+
+
+
+ Construct an Atom whose value is a floating-point value.
+
+
+
+
+
+ The string representation of this Atom.
+
+
+
+
+ Returns the string representation of this Atom.
+
+
+
+
+
+ Makes a data variable. Scoping not implemented because we're not an interpreter.
+ Don't give this the $.
+
+
+
+
+
+ Represents the possible types of values in a DataArray.
+
+
+
+
+ Integral value.
+
+
+
+
+ Floating point value.
+
+
+
+
+ $-prefixed variable type
+
+
+
+
+ Symbol value.
+
+
+
+
+ '()
+
+
+
+
+ #ifdef directive
+
+
+
+
+ #else directive
+
+
+
+
+ #endif directive
+
+
+
+
+ Array.
+
+
+
+
+ {}-enclosed function call
+
+
+
+
+ ""-enclosed String value.
+
+
+
+
+ []-enclosed macro definition
+
+
+
+
+ #define directive
+
+
+
+
+ #include directive
+
+
+
+
+ #merge directive
+
+
+
+
+ #ifndef directive
+
+
+
+
+ #autorun directive
+
+
+
+
+ #undef directive
+
+
+
+
+ Represents the basic element of DTA, which could be an Atom or an Array.
+
+
+
+
+ The parent of this data node. If null, this is a root node.
+
+
+
+
+ The name of this data node.
+
+
+
+
+ The type of this data node.
+
+
+
+
+ Evaluate this node to get a value.
+
+
+
+
+
+ Represents a .dta/.dtx file.
+
+
+
+
+ Parses a plaintext DTA given its bytes in a byte array. If an encoding tag is set, tries to use the correct encoding.
+
+
+
+
+
+
+ Parses the entirety of a .dta file in plain text into a DataArray.
+
+
+
+
+
+ Parses the entirety of a .dta file in a stream to a DataArray.
+
+
+
+
+
+
+ Parses the string as DTA elements, adding each one to the given root array.
+
+ string of DTA info
+ top-level array to add the string to
+
+
+
+ Parses a binary format (dtb) file.
+
+
+
+
+
+ Parses a binary format (dtb) file and returns the version and encryption state.
+
+
+
+
+
+
+ Converts a DataArray to a binary format (DTB) file.
+
+
+
+
+ Provides a means to decrypt an encrypted DTB file (or any other file using this crypt method).
+
+
+
+
+ Read a signed 8-bit integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 8-bit integer from the stream.
+
+
+
+
+
+
+ Write a signed 8-bit integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Write an unsigned 8-bit integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Read an unsigned 16-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 16-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Write an unsigned 16-bit little-endian integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Write a signed 16-bit little-endian integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Read an unsigned 16-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 16-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Write an unsigned 16-bit big-endian integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Write a signed 16-bit big-endian integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Read an unsigned 24-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 24-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 24-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 24-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 32-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 32-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Write an unsigned 32-bit little-endian integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Write a signed 32-bit little-endian integer to the stream.
+
+
+ The integer to write.
+
+
+
+ Read an unsigned 32-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 32-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 64-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 64-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a single-precision (4-byte) floating-point value from the stream.
+
+
+
+
+
+
+ Write a single-precision (4-byte) floating-point value to the stream.
+
+
+ The floating point value to write.
+
+
+
+ Read a null-terminated ASCII string from the given stream.
+
+
+
+
+
+
+ Read a length-prefixed string of the specified encoding type from the file.
+ The length is a 32-bit little endian integer.
+
+
+ The encoding to use to decode the string.
+
+
+
+
+ Read a length-prefixed UTF-8 string from the given stream.
+
+
+
+
+
+
+ Write a length-prefixed string of the specified encoding type to the file.
+ The length is a 32-bit little endian integer.
+
+
+ The encoding to use to decode the string.
+ The string to write.
+
+
+
+ Write a length-prefixed UTF-8 string to the given stream.
+
+
+ The string to write.
+
+
+
+ Read a given number of bytes from a stream into a new byte array.
+
+
+ Number of bytes to read (maximum)
+ New byte array of size <=count.
+
+
+
+ Read a variable-length integral value as found in MIDI messages.
+
+
+
+
+
+
diff --git a/dependencies/ForgeTool/ForgeTool.exe b/dependencies/ForgeTool/ForgeTool.exe
index 7dbf9e6..48c33df 100644
Binary files a/dependencies/ForgeTool/ForgeTool.exe and b/dependencies/ForgeTool/ForgeTool.exe differ
diff --git a/dependencies/ForgeTool/ForgeTool.exe.config b/dependencies/ForgeTool/ForgeTool.exe.config
new file mode 100644
index 0000000..d7c60fd
--- /dev/null
+++ b/dependencies/ForgeTool/ForgeTool.exe.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/dependencies/ForgeTool/ForgeToolGUI.exe b/dependencies/ForgeTool/ForgeToolGUI.exe
deleted file mode 100644
index 1a8da53..0000000
Binary files a/dependencies/ForgeTool/ForgeToolGUI.exe and /dev/null differ
diff --git a/dependencies/ForgeTool/GameArchives.dll b/dependencies/ForgeTool/GameArchives.dll
index 421ca21..7e23622 100644
Binary files a/dependencies/ForgeTool/GameArchives.dll and b/dependencies/ForgeTool/GameArchives.dll differ
diff --git a/dependencies/ForgeTool/GameArchives.xml b/dependencies/ForgeTool/GameArchives.xml
new file mode 100644
index 0000000..9bc5623
--- /dev/null
+++ b/dependencies/ForgeTool/GameArchives.xml
@@ -0,0 +1,1084 @@
+
+
+
+ GameArchives
+
+
+
+
+ Represent an element of a filesystem, usually directories and files.
+
+
+
+
+ The name of this node.
+
+
+
+
+ The folder where this node resides.
+ For the root directory, this is null.
+
+
+
+
+ Represents a single file in a filesystem.
+
+
+
+
+ The size of this file.
+
+
+
+
+ Indicates whether this file is compressed in the archive.
+
+
+
+
+ The size of this file, as it is in the archive.
+
+
+
+
+ A collection of extended information about the file. The values in the collection
+ depend on the type of package the file is from. Modifying this dictionary results in
+ undefined behavior.
+
+
+
+
+ Get a byte-array in memory containing all the data of this file.
+
+
+
+
+
+ Gets a stream that allows access to this file.
+
+
+
+
+ Get a stream (either memory-backed or disk-based) that allows access to this file.
+
+
+
+
+
+ Represents a directory within some file system.
+
+
+
+
+ Tries to get the named file. If it is not found, returns false.
+
+
+
+
+
+
+
+ Get the file in this directory with the given name. Throws exception if not found.
+
+
+
+ Thrown when the file could not be found.
+
+
+
+ Tries to get the named directory. If it is not found, returns false.
+
+
+
+
+
+
+
+ Get the directory in this directory with the given name. Throws exception if not found.
+
+
+
+ Thrown when the directory could not be found.
+
+
+
+ Tries to get the file at the given path, which is relative to this directory.
+
+
+
+ Thrown when a directory in the path could not be found.
+ Thrown when the file could not be found.
+
+
+
+ A collection of all files in this directory.
+
+
+
+
+ A collection of all the directories in this directory.
+
+
+
+
+ Represents some content package which contains a single filesystem.
+
+
+
+
+ The name of this package.
+
+
+
+
+ The root directory of this filesystem.
+
+
+
+
+ The size of this package's data files. For packages with unified header and data,
+ this is just the size of the package file.
+
+
+
+
+ Indicates whether this package can be modified.
+
+
+
+
+ Implementation of the IDisposable interface.
+
+
+
+
+ Separates elements in a file path.
+
+
+
+
+ The name of the root directory. Never used in paths, though.
+
+
+
+
+ The .NET type of the file objects in this package.
+
+
+
+
+ Get the file at the given path. Path separator is '/'.
+ Files in the root directory have no path separator.
+
+
+ The file at the given path.
+
+
+
+ Returns a list containing all the logical files of the specified type in this archive.
+
+
+
+
+
+ Returns a list containing all the logical files in this archive.
+
+
+
+
+
+ Checks if a replacement operation is possible on the given source and target files.
+
+ The file to be overwritten.
+ The file to read from.
+ True if the replacement is possible.
+
+
+
+ Replace the given target file with the given source file.
+ This modifies the archive file permanently!
+
+ The file to be overwritten.
+ The file to read from.
+ True if the replacement is successful.
+
+
+
+ Ark Package
+
+
+
+
+ Instantiate ark package file from input .hdr file.
+ Note: will check for data files and throw exception if they're not found.
+
+ Full path to .hdr file
+
+
+
+ Read the filename table, which is a blob of strings,
+ then read the filename pointer table which links files to filenames
+
+
+
+
+ Reads the new file table format in v9 and v10
+
+
+
+
+ Get the directory at the end of this path, or make it (and all
+ intermediate dirs) if it doesn't exist.
+
+
+
+
+
+
+ A "protected file" wrapper.
+
+
+
+
+ Constructs a new protected file stream from the given base stream.
+
+ The base stream
+
+
+
+ A default implementation of a directory.
+ Useful for archives where directories are implicit.
+ Important: File and directory names are case-insensitive.
+
+
+
+
+ An uncompressed file which is simply a number of bytes at a certain offset in a stream.
+
+
+
+
+ Constructs a new OffsetFile
+
+ The name of the file, including extension
+ The directory in which this file resides
+ Stream which contains this file
+ Offset into the stream at which the file starts
+ Length in bytes of the file
+
+
+
+ A single stream which is actually made up of a number of streams in sequence.
+
+
+
+
+ Denotes whether the stream can be read from.
+
+
+
+
+ Denotes whether the user can seek this stream.
+
+
+
+
+ Denotes whether the user can write to this stream.
+
+
+
+
+ The total length of this file.
+
+
+
+
+ The current position the stream points to within the file.
+
+
+
+
+ Not implemented; read-only stream.
+
+
+
+
+ Reads `count` bytes into `buffer` at offset `offset`.
+
+
+
+
+
+
+
+
+ Get the correct stream and offset.
+ Returns the offset into that stream.
+
+
+
+
+
+
+
+ Seek the stream to given position within the file relative to given origin.
+
+
+
+
+
+
+
+ Not implemented; read-only stream.
+
+
+
+
+
+ Not implemented; read-only stream.
+
+
+
+
+
+
+
+ A stream based on another stream, useful for representing
+ file streams within simple archive packages.
+
+
+
+
+ Constructs a new offset stream on the given base stream with the given offset and length.
+
+ The base stream
+ Offset into the base stream where this stream starts
+ Number of bytes in this stream
+
+
+
+ Represents a directory in the local file system.
+ All files in the directory are loaded by default, while subdirectories
+ are loaded on-demand (although this may change in the future).
+
+
+
+
+ Make a shallow instance of the given local directory.
+
+ Location of the directory.
+
+
+
+ Represents a file on the local filesystem.
+
+
+
+
+ The result of a package test.
+
+
+
+
+ Definitely not an instance of the package type.
+
+
+
+
+ Possibly an instance of the package type, but a more in-depth analysis would be needed.
+
+
+
+
+ Definitely an instance of the package type.
+
+
+
+
+ Collection of methods for reading packages.
+
+
+
+
+ Attempts to read the file as a supported archive package.
+ If the file is not of a supported format, throws an exception.
+
+
+
+ Thrown when an unsupported file type is given.
+
+
+
+ Attempts to read the file as a supported archive package.
+ If the file is not of a supported format, throws an exception.
+
+ An IFile referring to the archive package.
+
+ This callback will be called when a package is a likely match but needs a password/decryption
+ key. It will be called with a request string, and should return the key.
+
+ The package, if it could be opened.
+ Thrown when an unsupported file type is given.
+
+
+
+ Reads a package using the given decryption key if necessary.
+
+
+
+
+ Tries to read a package given only a stream. This makes a dummy file which works with the package reader.
+
+ Stream to read from. This must support the Length property.
+ (Optional) the filename to give the dummy file.
+
+
+
+
+ A list of supported file formats and their extensions, presented
+ in a format that an OpenFileDialog supports.
+
+
+
+
+ Open the .far archive which is the given file.
+
+
+
+
+
+ Get the directory at the end of this path, or make it (and all
+ intermediate dirs) if it doesn't exist.
+
+
+
+
+
+
+ Parse a directory for its contents.
+
+ The name of this directory.
+ Location of its filename infos.
+ File descriptor dictionary
+
+
+
+
+ Hashes a path with a broken fnv132 hashing algorithm
+
+
+
+
+
+
+ The common name of this package type.
+
+
+
+
+ The common file extensions of this package type.
+
+
+ These should be of the format:
+ *.ext
+ As expected by an OpenFileDialog filter list.
+
+
+
+
+ Given a file, determines whether the file is
+ of this package type.
+
+
+
+
+ Given a file which is a valid package, opens it as this
+ package type, returning the package instance.
+
+
+
+
+ Add an archive package type to the supported types.
+
+ Friendly name for the package type
+ String-array of typical file extensions, formatted
+ as *.ext
+ Function which, given a file, returns a PackageTestResult
+ which tells if the file is of that package type.
+ Function which loads the package.
+
+
+
+ Wraps a PFSC file to create a decompressed stream.
+
+
+
+
+
+
+
+ Offset within the sector for Read()s
+ Should always be == position % sectorSize
+
+
+
+
+ Position within logical stream.
+
+
+
+
+ Playstation File System Directory
+
+
+
+
+ Represents a PFS image.
+
+
+
+
+ Size of each XEX sector
+
+
+
+
+ Offset within the sector for Read()s
+ Should always be == position % sectorSize
+
+
+
+
+ Active sector number
+
+
+
+
+ Sector at and after which the encryption is active
+
+
+
+
+ Position within logical stream.
+
+
+
+
+ Temporary location for the decrypted sector
+
+
+
+
+ Creates an AES-XTS-128 stream.
+ Reads from the stream will decrypt data. Writes to the stream will encrypt data.
+
+
+
+
+ Precondition: activeSector is set
+ Postconditions:
+ - sectorOffset is reset to 0
+ - sectorBuf[] is filled with decrypted sector
+ - position is updated
+
+
+
+
+ Open the .psarc archive which is the given file.
+
+
+
+
+
+ Get the directory at the end of this path, or make it (and all
+ intermediate dirs) if it doesn't exist.
+
+ Path from PSARC path file, including filename.
+
+
+
+
+
+ Represents a Directory within an STFS package.
+
+
+
+
+ Represents a file within an STFS package.
+
+
+
+
+ The name of this file.
+
+
+
+
+
+ Gets up to the first 2GiB of a file. For larger accesses use STFSFileStream.
+
+
+
+
+
+ Returns a Stream that allows access to the file's bytes.
+
+
+
+
+
+ A stream for accessing file data from within an STFS package.
+
+
+
+
+ Denotes whether the stream can be read from.
+
+
+
+
+ Denotes whether the user can seek this stream.
+
+
+
+
+ Denotes whether the user can write to this stream.
+
+
+
+
+ The total length of this file.
+
+
+
+
+ The current position the stream points to within the file.
+
+
+
+
+ Not implemented; read-only stream.
+
+
+
+
+ Reads `count` bytes into `buffer` at offset `offset`.
+
+
+
+
+
+
+
+
+ Seek the stream to given position within the file relative to given origin.
+
+
+
+
+
+
+
+ Not implemented; read-only stream.
+
+
+
+
+
+ Not implemented; read-only stream.
+
+
+
+
+
+
+
+ Represents the two supported types of STFS packages (CON and LIVE).
+
+
+
+
+ Package signed with console key.
+
+
+
+
+ Package signed for XBOX Live.
+
+
+
+
+ Package used in system files and on-disc content.
+
+
+
+
+ The ordinal index of this block.
+
+
+
+
+ SHA-1 hash of the block.
+
+
+
+
+ Ordinal number of next block.
+
+
+
+
+ Status byte:
+ Value Meaning
+ 0x00 Unused Block
+ 0x40 Free Block (previously used)
+ 0x80 Used Block
+ 0xC0 Newly Allocated Block
+
+
+
+
+ Represents an STFS package. Allows read-only access to files.
+
+
+
+
+ Checks if the given file is an STFS file (LIVE/CON).
+
+ Absolute path to file.
+ Is the file an STFS?
+
+
+
+ The stream used to access this STFS package. Typically, this is a FileStream.
+
+
+
+
+ The type of this STFS package (LIVE and CON are supported).
+
+
+
+
+ The directory under which all files in this STFS package live.
+
+
+
+
+ The total size of this STFS package.
+
+
+
+
+ Has this package been disposed?
+
+
+
+
+ The content thumbnail of this package.
+
+
+
+
+ The title thumbnail for this package.
+
+
+
+
+ The filename of this package.
+
+
+
+
+ Holds the block we're currently working on.
+
+
+
+
+ Opens up an STFS file at the given absolute path.
+
+ Path to the STFS file.
+ New STFS instance which refers to given file.
+ Thrown if file is not valid STFS package.
+
+
+
+ Ensure that we dispose upon garbage collection.
+
+
+
+
+ Turns a given block number to an offset within the STFS package.
+
+
+
+
+
+
+ Returns an array of the file's block numbers in order.
+
+ The starting block index
+ How many blocks the file has
+ Do we know the blocks are sequential? (speedup)
+
+
+
+
+ Cache the block at the given byte offset.
+ Does not check that you're aligned to a block boundary.
+
+
+
+
+
+ Dispose this object.
+
+
+
+
+ Read a signed 8-bit integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 8-bit integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 16-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 16-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 16-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 16-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 24-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 24-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 24-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 24-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 32-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 32-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 32-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 32-bit Big-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 64-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 64-bit little-endian integer from the stream.
+
+
+
+
+
+
+ Read an unsigned 64-bit big-endian integer from the stream.
+
+
+
+
+
+
+ Read a signed 64-bit big-endian integer from the stream.
+
+
+
+
+
+
+ Reads a multibyte value of the specified length from the stream.
+
+ The stream
+ Must be less than or equal to 8
+
+
+
+
+ Read a single-precision (4-byte) floating-point value from the stream.
+
+
+
+
+
+
+ Read a null-terminated ASCII string from the given stream.
+
+
+
+
+
+
+ Read a length-prefixed string of the specified encoding type from the file.
+ The length is a 32-bit little endian integer.
+
+
+ The encoding to use to decode the string.
+
+
+
+
+ Read a length-prefixed UTF-8 string from the given stream.
+
+
+
+
+
+
+ Read a given number of bytes from a stream into a new byte array.
+
+
+ Number of bytes to read (maximum)
+ New byte array of size <=count.
+
+
+
+ Read a variable-length integral value as found in MIDI messages.
+
+
+
+
+
+
+ Open the .far archive which is the given file.
+
+
+
+
+
+ Opens a directory from the local filesystem as an IDirectory
+
+ Path to the directory.
+ An IDirectory representing the local directory.
+
+
+
+ Create an instance of an IFile from the given local path.
+ Note that this creates a new LocalDirectory object each time it is
+ called. If you are opening a lot of files from one directory, it's more
+ efficient to grab the directory with Util.LocalDir(), then get each
+ file from there.
+
+
+
+
+
+
+ Returns the last element of this array.
+
+ The type of the array.
+
+ The last element of the array.
+
+
+
+ Saves this file to the given path. Overwrites existing files.
+
+
+
+
+
+
+ Copies one stream to the other.
+
+ The source stream.
+ The destination stream.
+
+
+
+ Xbox (360) ISO Directory
+
+
+
+
+ Represents an element of an XISO file system.
+
+
+
+
+ The location of the filesystem entry node in the ISO.
+
+
+
+
+ Represents an Xbox/Xbox 360 disc image.
+
+
+
+
diff --git a/dependencies/ForgeTool/LICENSE.txt b/dependencies/ForgeTool/LICENSE.txt
deleted file mode 100644
index 02bbb60..0000000
--- a/dependencies/ForgeTool/LICENSE.txt
+++ /dev/null
@@ -1,165 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
- 0. Additional Definitions.
-
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
- 1. Exception to Section 3 of the GNU GPL.
-
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
- 2. Conveying Modified Versions.
-
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
-
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
-
- 3. Object Code Incorporating Material from Library Header Files.
-
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
-
- 4. Combined Works.
-
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
-
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
-
- d) Do one of the following:
-
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
-
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
-
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
-
- 5. Combined Libraries.
-
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
-
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
-
- 6. Revised Versions of the GNU Lesser General Public License.
-
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
\ No newline at end of file
diff --git a/dependencies/ForgeTool/LibForge.dll b/dependencies/ForgeTool/LibForge.dll
index 59cbd6b..b336bd9 100644
Binary files a/dependencies/ForgeTool/LibForge.dll and b/dependencies/ForgeTool/LibForge.dll differ
diff --git a/dependencies/ForgeTool/LibOrbisPkg.dll b/dependencies/ForgeTool/LibOrbisPkg.dll
index f37f9d2..e67a9d0 100644
Binary files a/dependencies/ForgeTool/LibOrbisPkg.dll and b/dependencies/ForgeTool/LibOrbisPkg.dll differ
diff --git a/dependencies/ForgeTool/OpenTK.GLControl.dll b/dependencies/ForgeTool/OpenTK.GLControl.dll
deleted file mode 100644
index 9d928cf..0000000
Binary files a/dependencies/ForgeTool/OpenTK.GLControl.dll and /dev/null differ
diff --git a/dependencies/ForgeTool/OpenTK.dll b/dependencies/ForgeTool/OpenTK.dll
deleted file mode 100644
index 52feb21..0000000
Binary files a/dependencies/ForgeTool/OpenTK.dll and /dev/null differ
diff --git a/dependencies/ForgeTool/README.md b/dependencies/ForgeTool/README.md
deleted file mode 100644
index 2c9b3ab..0000000
--- a/dependencies/ForgeTool/README.md
+++ /dev/null
@@ -1,76 +0,0 @@
-This is a fork of LibForge/ForgeTool by Maxton, with continuing work to fix bugs and add features.
-
-Download the latest build from [Appveyor](https://ci.appveyor.com/project/LlysiX/libforge/build/artifacts) or from the [releases page](https://github.com/mtolly/LibForge/releases) if the artifacts have expired
-
-# Original readme follows
-
-## About This Repository
-
-I am keeping track of my research into RB4 customs here.
-
-I am working out the structure of the files in Rock Band 4. These are being documented in the form of 010 Editor Template files, which are in the `010` directory.
-
-## Latest Build
-
-Can be downloaded at [Appveyor](https://ci.appveyor.com/project/maxton/libforge/branch/master/artifacts)
-
-## LibForge
-
-This is a library I'm working on that handles reading, writing, and converting for formats in the Forge engine used by Rock Band 4 and Rock Band VR.
-
-It is licensed under the GNU LGPLv3 and includes two frontends at the moment:
-
-### ForgeTool
-
-This is a command line tool that does file conversions.
-
-```
-Usage: ForgeTool.exe [options]
-Verbs:
- version
- - Prints the version number and exits
- rbmid2mid
- - converts a Forge midi to a Standard Midi File
- reprocess
- - converts a Forge midi to a Forge midi
- mid2rbmid
- - converts a Standard Midi File to a Forge midi
- tex2png
- - converts a Forge texture to PNG
- mesh2obj
- - converts a Forge mesh to OBJ
- con2gp4 [--scee] [--id 16CHARIDENTIFIER] [--desc "Package Description"]
- - converts a CON custom to a .gp4 project in the given output directory
- --scee : make an EU package
- --id <16CHARIDENTIFIER> : set the customizable part of the Package ID/Filename
- --desc "Package Description" : set the description of the package
- con2pkg [--scee] [--id 16CHARIDENTIFIER] [--desc "Package Description"]
- - converts a CON custom to a PS4 PKG custom in the given output directory
- --scee : make an EU package
- --id <16CHARIDENTIFIER> : set the customizable part of the Package ID/Filename
- --desc "Package Description" : set the description of the package
- con2rbvr [--noark] [--prefix PREFIX]
- - converts a CON custom to a RBVR custom in the given game directory
- --noark : creates a songs folder to be used with patchcreator in arkhelper instead of a DLC ARK
- --prefix : sets a custom prefix to better organize your converted song files
- arkorder
- - outputs the arkorder DTA of a given ARK HDR file
- arkbuild
- - creates an ARK file using files with the specified arkorder in the output directory
- milo2lipsync
- - converts an uncompressed milo archive to forge lipsync file
- csv2txt
- - decodes a csv file
- dta2b
- - converts text dta into encoded dta
-```
-
-### ForgeToolGUI
-
-This has an ark/PFS/folder browser with support for previewing the following:
- - Textures (.png_pc, .png_ps4, .bmp_pc, .bmp_ps4, etc)
- - Models (a 3d preview with optional wireframe)
- - .songdta files
- - Data (.dta/.dtb/.\*\_dta\_\*/.moggsong) files
- - RBmid files
- - RBsong files
diff --git a/dev_scripts/highways_png2tex.bat b/dev_scripts/highways_png2tex.bat
new file mode 100644
index 0000000..0aa5d9c
--- /dev/null
+++ b/dev_scripts/highways_png2tex.bat
@@ -0,0 +1,2 @@
+cd ..\dx_textures\highways\
+FOR /F "tokens=*" %%G IN ('dir /b *.png') DO ..\..\dependencies\forgetool\forgetool png2tex "%%G" "%%~nG.bmp_ps4"
\ No newline at end of file
diff --git a/dx_textures/highways/_1_black_highway.png b/dx_textures/highways/_1_black_highway.png
new file mode 100644
index 0000000..7e3e9b3
Binary files /dev/null and b/dx_textures/highways/_1_black_highway.png differ
diff --git a/dx_textures/highways/_2_rb3_guitar.png b/dx_textures/highways/_2_rb3_guitar.png
new file mode 100644
index 0000000..f2f388d
Binary files /dev/null and b/dx_textures/highways/_2_rb3_guitar.png differ
diff --git a/dx_textures/highways/_rb3_bass.png b/dx_textures/highways/_rb3_bass.png
new file mode 100644
index 0000000..9dbab71
Binary files /dev/null and b/dx_textures/highways/_rb3_bass.png differ
diff --git a/dx_textures/highways/_rb3_drum.png b/dx_textures/highways/_rb3_drum.png
new file mode 100644
index 0000000..5be7a95
Binary files /dev/null and b/dx_textures/highways/_rb3_drum.png differ
diff --git a/dx_textures/highways/_rb3_keys.png b/dx_textures/highways/_rb3_keys.png
new file mode 100644
index 0000000..fc05d33
Binary files /dev/null and b/dx_textures/highways/_rb3_keys.png differ
diff --git a/dx_textures/highways/fnfestival (beta).png b/dx_textures/highways/fnfestival (beta).png
new file mode 100644
index 0000000..3c5794d
Binary files /dev/null and b/dx_textures/highways/fnfestival (beta).png differ
diff --git a/dx_textures/highways/fortnite festival.png b/dx_textures/highways/fortnite festival.png
new file mode 100644
index 0000000..2ccb9ad
Binary files /dev/null and b/dx_textures/highways/fortnite festival.png differ
diff --git a/dx_textures/highways/gem_track_surface.png b/dx_textures/highways/gem_track_surface.png
new file mode 100644
index 0000000..c927fee
Binary files /dev/null and b/dx_textures/highways/gem_track_surface.png differ
diff --git a/dx_textures/highways/work/_1_rb3_guitar.png b/dx_textures/highways/work/_1_rb3_guitar.png
new file mode 100644
index 0000000..0bcd8f5
Binary files /dev/null and b/dx_textures/highways/work/_1_rb3_guitar.png differ
diff --git a/dx_textures/highways/work/_rb3_bass.png b/dx_textures/highways/work/_rb3_bass.png
new file mode 100644
index 0000000..186756a
Binary files /dev/null and b/dx_textures/highways/work/_rb3_bass.png differ
diff --git a/dx_textures/highways/work/_rb3_drums.png b/dx_textures/highways/work/_rb3_drums.png
new file mode 100644
index 0000000..a87bc95
Binary files /dev/null and b/dx_textures/highways/work/_rb3_drums.png differ
diff --git a/dx_textures/highways/work/_rb3_keys.png b/dx_textures/highways/work/_rb3_keys.png
new file mode 100644
index 0000000..ab66d85
Binary files /dev/null and b/dx_textures/highways/work/_rb3_keys.png differ
diff --git a/dx_textures/highways/work/_zrb2.png b/dx_textures/highways/work/_zrb2.png
new file mode 100644
index 0000000..99f15a1
Binary files /dev/null and b/dx_textures/highways/work/_zrb2.png differ
diff --git a/dx_textures/highways/work/_zrb2_drums.png b/dx_textures/highways/work/_zrb2_drums.png
new file mode 100644
index 0000000..db0138f
Binary files /dev/null and b/dx_textures/highways/work/_zrb2_drums.png differ
diff --git a/dx_textures/highways/work/_ztbrb.png b/dx_textures/highways/work/_ztbrb.png
new file mode 100644
index 0000000..2e7b3f7
Binary files /dev/null and b/dx_textures/highways/work/_ztbrb.png differ
diff --git a/dx_textures/highways/work/_ztbrb_drums.png b/dx_textures/highways/work/_ztbrb_drums.png
new file mode 100644
index 0000000..baa7a64
Binary files /dev/null and b/dx_textures/highways/work/_ztbrb_drums.png differ
diff --git a/dx_textures/highways/work/fnfestival_streak.png b/dx_textures/highways/work/fnfestival_streak.png
new file mode 100644
index 0000000..01c56f3
Binary files /dev/null and b/dx_textures/highways/work/fnfestival_streak.png differ
diff --git a/dx_textures/highways/work/yarg.png b/dx_textures/highways/work/yarg.png
new file mode 100644
index 0000000..1b31601
Binary files /dev/null and b/dx_textures/highways/work/yarg.png differ