Mail has been fixed; you should now be able to confirm your e-mail address, watch pages, and the like.
Please report any issues on Discord.

Notes:Guitar Hero

From The Cutting Room Floor
Jump to navigation Jump to search

This page contains notes for the game Guitar Hero.

All information found in .dtb files presented in detokenized .dta format (equivalent to the custom scripting language used to develop the game). Paths are relative to the root of the ARK file contents, as extracted by ARK Expander (link forthcoming). I'm working with the US retail release, SLUS-21224. Your mileage may vary using any other region. Huge dump ahead.

Found in /config/gen/beatmatch_controller.dtb, I'm pretty sure the "egozy" layout is leftover from the early days when the frets were colored ROYGB:

(joypad (slots
		kPad_L2
		0
		kPad_L1
		1
		kPad_R1
		2
		kPad_R2
		3
		kPad_X
		4))
(lefty_joypad (slots
		kPad_X
		0
		kPad_R2
		1
		kPad_R1
		2
		kPad_L1
		3
		kPad_L2
		4))
(guitar (slots
		kPad_R2
		0
		kPad_Circle
		1
		kPad_Tri
		2
		kPad_X
		3
		kPad_Square
		4))
(egozy (slots
		kPad_R2
		0
		kPad_R1
		1
		kPad_Tri
		2
		kPad_Square
		3
		kPad_X
		4))}


Found in /config/gen/cheats.dtb, this is part of the debugging interface. I have yet to find a way to reenable it on the retail game or any of the demos, I believe there is a necessary .IRX driver that we don't have a copy of.

(keyboard
	(KB_F2 {toggle_fake_player1_cheat})
	(KB_F3 {toggle_scoring_debug})
	(KB_F4 {toggle_lights_debug})
	(KB_F5 {cheat_empty_star_power})
	(KB_F6 {track_panel toggle_gems})
	(KB_F7 {track_panel toggle_surface})
	(KB_F8 {track_panel toggle_nowbar})
	(KB_F11 {test_screen_transitions})
	(0 {toggle_time_paused})
	(1
		{set
			$no_crowd
			{! $no_crowd}}
		{update_crowd})
	(2
		{guitarist0
			debug_driver
			{switch
				$guitarist0.driver
				(0 main.drv)
				(1 left_hand.drv)
				(2 right_hand.drv)}}
		{set
			$guitarist0.driver
			{mod
				{+
					1
					$guitarist0.driver}
				3}})
	(3 {paramedit
			edit
			{find
				$syscfg
				charsys
				guitar_face_params
				face_data}
			{guitarist0 update_params}})
	(5 {if
			{meta is_up}
			{{ui
					panel
					sel_song}
				beat_song
				1000000}})
	(# {if
			{game is_up}
			{player0::player
				win
				3}})
	($ {if_else
			{game is_up}
			{player0::player
				win
				4}
			{cheat_add_cash}})
	(% {if
			{game is_up}
			{player0::player
				win
				5}})
	(a {a_cheat})
	(A {A_cheat})
	(b {b_cheat})
	(B {set
			$barf_cheat
			{! $barf_cheat}})
	(c {if
			{game is_up}
			{force_pick_shot}})
	(C {rnd
			toggle_overlay
			camera})
	(d {toggle_dual_perspective})
	(e {adjust_crowd_rating -0.10})
	(E {adjust_crowd_rating 0.10})
	(f {toggle_fretboard})
	(g {guitarist0 toggle_debug})
	(G {rnd
			toggle_overlay
			guitar})
	(j {guitarist0 walk_prev})
	(k {guitarist0 walk_next})
	(h {if
			{exists hud}
			{hud
				set_showing
				{! {hud showing}}}})
	(H {hide_2d_crowd})
	(l {player0::player lose})
	(L {toggle_lipsync_test})
	(m {toggle_crowd_meter})
	(M {toggle_mute_global})
	(O {rnd
			save_objects
			dump.rnd
			ui})
	(p {toggle_auto_play})
	(P {cycle_music_speed})
	(q {toggle_solo_quantize})
	(r {reload_song})
	(R {reload_track_hud})
	(s {if
			{game is_up}
			{rnd
				toggle_overlay
				score}})
	(S {fill_star_meter})
	(t {rnd
			toggle_overlay
			time})
	(T
		{rnd toggle_timers}
		{rnd
			toggle_overlay
			rate})
	(u {next_tutorial_lesson})
	(U {prev_tutorial_lesson})
	(w {player0::player
			win
			3})
	(W {toggle_walks})
	(x {toggle_cam})
	(Z {set
			$arena.camtest
			1})
	(> {tutorial reset_vo})
	(. {camtest_next_shots})
	(, {camtest_pick_shot}))
(right
	(kPad_Circle {cycle_free_camera})
	(kPad_X {toggle_shuttle})
	(kPad_Square {meta print_current_screen}))

Related but much longer, from /config/gen/cheats_funcs.dtb:

{func
	cheat_msg
	($msg)
	{rnd
		show_overlay
		cheats
		TRUE}
	{rnd
		reflect
		cheats
		{print
			$msg
			"
"}}
	{set
		$cheat.clear_time
		{+
			{ui frame}
			CHEAT_DISPLAY_MS}}
	{ui
		delay_task
		CHEAT_DISPLAY_MS
		{if
			{>=
				{ui frame}
				$cheat.clear_time}
			{rnd
				show_overlay
				cheats
				FALSE}}}}
{func
	cheat_msg_bool
	($label $val)
	{cheat_msg {sprint
			$label
			": "
			{if_else
				$val
				"ON"
				"OFF"}}}}
{func
	audio_array
	{find
		$syscfg
		beatmatch
		audio}}
{func
	get_audio
	{elem
		{elem
			{audio_array}
			1}
		0}}
{func
	set_audio
	($val)
	{set
		{elem_var
			{elem
				{audio_array}
				1}
			0}
		$val}
	{cheat_msg {sprint
			"New audio mode: "
			$val}}}
{func
	toggle_audio_mode
	{if
		{meta is_up}
		{cond
			({==
					{get_audio}
					slipstream}
				{set_audio unmute})
			({==
					{get_audio}
					unmute}
				{set_audio slipstream})}}}
{func
	a_cheat
	{if_else
		{meta is_up}
		{toggle_audio_mode}
		{arena
			set_showing
			{! {arena showing}}}}}
{func
	A_cheat
	{if_else
		{meta is_up}
		{if
			{! {{ui
						panel
						sel_song}
					is_up}}
			{do
				(($new {! {campaign all_access}}))
				{campaign
					set_all_access
					$new}
				{campaign
					set_tutorial_access
					$new}
				{cheat_msg_bool
					"All Access"
					$new}
				{if
					{==
						{ui current_screen}
						{ui
							screen
							main}}
					{{ui
							screen
							main}
						access_all}}}}
		{toggle_crowd_audio}}}
{func
	b_cheat
	{if_else
		{meta is_up}
		{{ui
				panel
				sel_song}
			beat_song
			1}
		{set
			$debug.beep
			{! $debug.beep}}}}
{func
	hide_2d_crowd
	{set
		$show
		{! {arena::Crowd01.mm showing}}}
	{foreach_int
		$i
		1
		6
		{set
			$name
			{sprintf
				"arena::Crowd0%d.mm"
				$i}}
		{if
			{exists $name}
			{$name
				set_showing
				$show}}}}
{func
	cycle_free_camera
	{with_namespace
		player0
		{if_else
			{track free_camera_active}
			{do
				{track
					free_camera
					FALSE}
				{cheat_msg "Free camera: off"}}
			{if_else
				{arena free_camera_active}
				{do
					{arena
						free_camera
						FALSE}
					{track
						free_camera
						TRUE
						$cheat.controller}
					{cheat_msg "Free camera: Fretboard"}}
				{do
					{arena
						free_camera
						TRUE
						$cheat.controller}
					{cheat_msg "Free camera: Arena"}}}}}}
{func
	toggle_crowd_meter
	{with_namespace
		player0
		{do
			(($new {! {player crowd_rating_active}}))
			{player
				set_crowd_rating_active
				$new}
			{cheat_msg_bool
				"Crowd meter"
				$new}}}}
{func
	start_shuttle
	{if_else
		{rnd
			overlay_showing
			time}
		{set
			$cheat.show_time
			FALSE}
		{do
			{rnd
				show_overlay
				time
				TRUE}
			{set
				$cheat.show_time
				TRUE}}}
	{game
		set_time_paused
		TRUE}
	{arena_panel
		set_paused
		TRUE}
	{player0::player
		set_crowd_rating_active
		FALSE}
	{beatmatch
		set_shuttle
		TRUE
		$cheat.controller}}
{func
	stop_shuttle
	{beatmatch
		set_shuttle
		FALSE}
	{game
		set_time_paused
		FALSE}
	{arena_panel
		set_paused
		FALSE}
	{if
		$cheat.show_time
		{rnd
			show_overlay
			time
			FALSE}}}
{func
	toggle_shuttle
	{if_else
		{beatmatch shuttle_active}
		{stop_shuttle}
		{start_shuttle}}}
{func
	toggle_mute_global
	{if_else
		{mixer mute}
		{do
			{mixer
				set_mute
				FALSE}
			{cheat_msg "Mute all: FALSE"}}
		{do
			{mixer
				set_mute
				TRUE}
			{cheat_msg "Mute all: TRUE"}}}}
{func
	next_tutorial_lesson
	{if
		{tutorial is_up}
		{tutorial
			tutorial_inc
			1}}}
{func
	prev_tutorial_lesson
	{if
		{tutorial is_up}
		{tutorial
			tutorial_inc
			-1}}}
{func
	toggle_crowd_audio
	{do
		(($new {! {crowd_audio enabled}}))
		{crowd_audio
			set_enabled
			$new}
		{cheat_msg_bool
			"CrowdAudio"
			$new}}}
{func
	toggle_walks
	{do
		(($new {! {guitarist0 walks_enabled}}))
		{guitarist0
			set_walks_enabled
			$new}
		{cheat_msg_bool
			"Walks"
			$new}}}
{func
	toggle_auto_solo
	{with_namespace
		player0
		{do
			(($new {! {player_matcher auto_solo}}))
			{player_matcher
				set_auto_solo
				$new}
			{cheat_msg_bool
				"Auto freestyle"
				$new}}}}
{func
	toggle_solo_quantize
	{with_namespace
		player0
		{player_matcher toggle_solo_quantize}}}
{func
	toggle_auto_play
	{if_else
		{game multiplayer}
		{cycle_multiplayer_auto_play}
		{with_namespace
			player0
			{do
				(($new {! {player_matcher auto_play}}))
				{player_matcher
					set_auto_play
					$new}
				{cheat_msg_bool
					"Autoplay"
					$new}}}}}

#define MULTI_AUTO_STATES (((FALSE
			FALSE
			"off")
		(TRUE
			FALSE
			"player1")
		(FALSE
			TRUE
			"player2")
		(TRUE
			TRUE
			"both")))
{set
	$multi_auto_index
	0}
{func
	cycle_multiplayer_auto_play
	{do
		(($new_index {mod
					{+
						$multi_auto_index
						1}
					4})
			($state {elem
					MULTI_AUTO_STATES
					$new_index}))
		{player0::player_matcher
			set_auto_play
			{elem
				$state
				0}}
		{player1::player_matcher
			set_auto_play
			{elem
				$state
				1}}
		{cheat_msg {sprint
				"Autoplay: "
				{elem
					$state
					2}}}
		{set
			$multi_auto_index
			$new_index}}}
{func
	adjust_crowd_rating
	($delta)
	{with_namespace
		player0
		{player
			set_crowd_rating
			{+
				{player crowd_rating}
				$delta}}}}
{func
	toggle_lipsync_test
	{toggle_camera_lipsync}}
{func
	toggle_fake_player1_cheat
	{if_else
		{toggle_fake_player1}
		{cheat_msg "Faking Player 2"}
		{cheat_msg "Normal Player 1"}}}
{func
	toggle_dual_perspective
	{do
		(($new {! {track_panel dual_perspective}}))
		{track_panel
			set_dual_perspective
			$new}
		{cheat_msg_bool
			"Dual-perspective"
			$new}}}
{func
	reload_song
	{game
		thread_task
		(preserve
			$ms
			$auto0
			$auto1)
		{game
			set_time_paused
			TRUE}
		{arena_panel
			set_paused
			TRUE}
		{set
			$ms
			{game ms}}
		{set
			$auto0
			{player0::player_matcher auto_play}}
		{if
			{game multiplayer}
			{set
				$auto1
				{player1::player_matcher auto_play}}}
		{game
			load_song
			{game get_song}}
		{$task
			wait
			{! {game loaded}}}
		{cheat_msg {sprint
				"Reloaded song: "
				{game get_song}}}
		{arena_panel
			set_paused
			FALSE}
		{game
			set_skip_intro
			TRUE}
		{game
			set_start_paused
			TRUE}
		{game start_song_now}
		{track_panel set_track_out}
		{beatmatch
			jump
			$ms}
		{game
			set_skip_intro
			FALSE}
		{game
			set_start_paused
			TRUE}
		{player0::player_matcher
			set_auto_play
			$auto0}
		{if
			{game multiplayer}
			{player1::player_matcher
				set_auto_play
				$auto1}}}}
{func
	toggle_time_paused
	{do
		(($new {! {game time_paused}}))
		{game
			set_time_paused
			$new}
		{crowd_audio
			set_paused
			$new}}}
{func
	toggle_fretboard
	{if
		{! {meta is_up}}
		{track_panel
			set_showing
			{! {track_panel showing}}}}}
{func
	reload_track_hud
	{game
		thread_task
		(preserve $ms)
		{game
			set_time_paused
			TRUE}
		{set
			$ms
			{game ms}}
		{ui
			goto_screen
			reload_hud_track}
		{$task
			wait
			{! {track_panel is_up}}}
		{$task
			wait
			{! {hud is_up}}}
		{track_panel intro_skip}
		{track_panel set_track_out}
		{hud intro_skip}
		{beatmatch
			jump
			$ms}}}

#define MUSIC_SPEEDS ((1.00
		0.50
		0.25
		0.10))
{set
	$speed_index
	0}
{func
	cycle_music_speed
	{if
		{! {meta is_up}}
		{do
			(($new_index {mod
						{+
							$speed_index
							1}
						{size MUSIC_SPEEDS}})
				($speed {elem
						MUSIC_SPEEDS
						$new_index}))
			{beatmatch
				set_music_speed
				$speed}
			{cheat_msg {sprint
					"Track speed: "
					$speed}}
			{set
				$speed_index
				$new_index}}}}

#define DEBUG_TASK ((init {$this
			set
			active
			FALSE})
	(start
		{$this
			set
			active
			TRUE}
		{$this on_start}
		{$this poll})
	(is_active {$this
			get
			active})
	(stop
		{$this on_stop}
		{$this
			set
			active
			FALSE})
	(poll
		{$this on_poll}
		{if
			{$this
				get
				active}
			{game
				delay_task
				15
				(preserve $this)
				{$this poll}}}))
{class
	ScoringDebug
	DEBUG_TASK
	(on_start {rnd
			show_overlay
			score_debug
			TRUE})
	(on_stop {rnd
			show_overlay
			score_debug
			FALSE})
	(on_poll {if_else
			{game is_up}
			{rnd
				reflect
				score_debug
				{with_namespace
					player0
					{printf
						"Crowd: %.2f-%.2f Notes: %d-%d-%d Mult: %.2f
"
						{player raw_crowd_rating}
						{player crowd_rating}
						{player current_streak}
						{player longest_streak}
						{player notes_hit}
						{/
							{player score}
							{beatmatch
								base_max_score
								0}}}}}
			{$this stop}})}
{new
	ScoringDebug
	scoring_debug}
{func
	toggle_scoring_debug
	{if_else
		{scoring_debug is_active}
		{scoring_debug stop}
		{scoring_debug start}}}
{func
	toggle_lights_debug
	{do
		(($new_state {! {rnd
						overlay_showing
						lights}}))
		{rnd
			show_overlay
			lights
			$new_state}}}
{func
	lights_debug
	($msg)
	{rnd
		reflect
		lights
		{print
			"Lights: "
			$msg
			"
"}}}
{func
	toggle_cam
	{if
		{exists cam}
		{cam toggle_enabled}
		{cheat_msg_bool
			"camera logic"
			{cam get_enabled}}}}
{func
	cheat_add_cash
	{if
		{store is_up}
		{campaign
			add_cash
			100}
		{store update_total_cash_display}}}
{func
	fill_star_meter
	{if
		{! {meta is_up}}
		{if_else
			{game multiplayer}
			{if_else
				{fake_player1}
				{player1::player fill_star_power}
				{player0::player fill_star_power}}
			{player0::player fill_star_power}}}}
{func
	cheat_empty_star_power
	{if
		{! {meta is_up}}
		{if_else
			{game multiplayer}
			{if_else
				{fake_player1}
				{player1::player empty_star_power}
				{player0::player empty_star_power}}
			{player0::player empty_star_power}}}}
{func
	print_transition_test_status
	{if
		{&&
			$transition_screen_0
			$transition_screen_1}
		{rnd
			reflect
			transition_test
			{printf
				"%s - %s - %d
"
				{screen_name $transition_screen_0}
				{screen_name $transition_screen_1}
				$transition_count}}}}
{func
	test_screen_transitions
	{if
		{meta is_up}
		{if_else
			{! $transition_screen_0}
			{do
				{set
					$transition_screen_0
					{ui current_screen}}
				{rnd
					show_overlay
					transition_test
					TRUE}
				{rnd
					reflect
					transition_test
					{print
						{screen_name $transition_screen_0}
						" -
"}}}
			{if_else
				{! $transition_screen_1}
				{do
					{set
						$transition_screen_1
						{ui current_screen}}
					{set
						$transition_test_active
						TRUE}
					{set
						$transition_count
						0}
					{print_transition_test_status}
					{run_transition_test}}
				{do
					{set
						$transition_screen_0
						FALSE}
					{set
						$transition_screen_1
						FALSE}
					{set
						$transition_test_active
						FALSE}
					{set
						$transition_count
						0}
					{rnd
						show_overlay
						transition_test
						FALSE}}}}}}
{func
	run_transition_test
	{ui
		thread_task
		{ui
			goto_screen
			$transition_screen_0}
		{$task
			wait
			{ui in_transition}}
		{++
			$transition_count
			1}
		{print_transition_test_status}
		{ui
			goto_screen
			$transition_screen_1}
		{$task
			wait
			{ui in_transition}}
		{++
			$transition_count
			1}
		{print_transition_test_status}
		{if
			$transition_test_active
			{run_transition_test}}}}

Found in /config/gen/gh.dtb, this is where I found out we needed more files (possibly HMX-specific) for debug mode (also notice the reference to mtapman being set to FALSE on the shipping version):

(system
	(script 
#include system_script.dta
)
	(language (force eng))
	(iop_modules
		(iop/scrtchpd.irx)
		(iop/sio2man.irx)
		(iop/mcman.irx)
		(iop/mcserv.irx)
		
#ifdef _SHIP
		(iop/usbd.irx FALSE)
		(iop/usbkb.irx FALSE)
		
#else 
		(iop/usbd.irx)
		(iop/usbkb.irx
			"keybd=1"
			"debug=0")
		
#endif 
		(iop/padman.irx)
		(iop/msifrpc.irx)
		
#ifdef _SHIP
		(iop/mtapman.irx FALSE)
		
#else 
		(iop/mtapman.irx)
		
#endif 
		(iop/libsd.irx)
		(iop/sdrdrv.irx)
		(iop/cdvdstm.irx)))

Same file, there's also a bit more mention of on-screen debug meters, if I'm reading the scripting right:

(rnd
	(title "Guitar Hero")
	(show_timers FALSE)
	(overlays
		(time
			(lines 1)
			(showing FALSE)
			(color
				0
				0
				0
				0.70))
		(cheats
			(lines 1)
			(showing FALSE)
			(color
				0
				0
				0
				0.70))
		(camera
			(lines 3)
			(showing FALSE))
		(score
			(lines 15)
			(showing FALSE))
		(guitar
			(lines 1)
			(showing FALSE))
		(guitarist0_status
			(lines 1)
			(showing FALSE))
		(guitarist0_history
			(lines 3)
			(showing FALSE))
		(player0_freestyle
			(lines 1)
			(showing FALSE))
		(score_debug
			(lines 1)
			(showing FALSE))
		(lights
			(lines 1)
			(showing FALSE))
		(camtest
			(lines 1)
			(showing FALSE))
		(transition_test
			(lines 1)
			(showing FALSE))))

Sole contents of /config/gen/gh_version.dtb, so we know the US version was built September 17, 2005 for release on November 1:

"Build: 050917_E"

Juicy dev info, reference to something called "ghedit" which I'm guessing probably ran on a PS2 TOOL, either on the PS2 but communicating with a companion program on the PC side, or directly on the PC side and interfacing with the game engine itself. As best as I can tell, this tool is nowhere on the retail disc but would likely be present in any development build of the game. First, from /config/gen/ghedit.dtb:

(rndedit
	(title GHEdit)
	(extension gh)
	(target "ghedit_tool_%c.elf")
	(prog_id GHEdit.File)
	(max_paths
		(HMX_SYSTEM_RUN "%s/../../system/run")
		(HMX_SYSTEM_MAX "%s/../../system/tool/max")))
(namespaces (ghui
		2500
		20000))
(ghui 
#merge ../ghui/config.dta
)

#merge ../../../system/run/config/rndedit.dta

Also, from /config/gen/ghedit_tool.dtb:

(namespaces (ghui
		2500
		20000))
(ghui 
#merge ../ghui/config.dta
)

#merge ../../../system/run/config/rndedit_tool.dta

Found in /config/gen/mc.dtb, editing these settings along with hexediting the main ELF file can be used to change the display name and disc ID for savefile purposes, allowing multiple saves to be used with different custom discs instead of other discs clobbering all the high scores:

(base_dir "BASLUS-21224")
(elf_name "SLUS_212.24")

Found in /config/gen/mem.dtb, this points to the possibility that at one time, they had planned for a PC version as well as the known initial discussions with MadCatz regarding controllers for a potential original Xbox version of the game (although this one isn't explicitly listed here, there is a fall through which I think is meant for it):

(heaps
	
#ifdef HX_EE
	(main (size 20500000))
	(rnd
		(size 5500000)
		(handle TRUE))
	
#else 
	
#ifdef HX_PC
	(main (size 50000000))
	
#else 
	(main (size 26000000))

Excerpt from /config/gen/scoring.dtb, all floats within 0.00<=x<=1.00 are percentages. Notice "recharge_rate 0.00" under star_power, this is the percentage of the star power bar to automatically gain per measure. Never used in game (and AFAIK, I think it still exists even nowadays in the RB3 engine). Also including star rating thresholds, as you may know there is no one- or two-star:

(star_power
	(recharge_rate 0.00)
	(deploy_rate 0.12)
	(star_phrase 0.25)
	(whammy_rate 0.03)
	(ready_level 0.50)
	(multiplier 2)
	(crowd_boost 6)
	(min_length 2.00)
	(whammy_speed 0.05)
	(whammy_timeout 0.50))
(star_ratings
	(thresholds
		(kDifficultyEasy
			2.00
			3.00)
		(kDifficultyMedium
			2.00
			3.00)
		(kDifficultyHard
			2.00
			3.00)
		(kDifficultyExpert
			2.00
			3.00))
	(symbols (3_star
			4_star
			5_star)))

Not much interesting in GH1's /config/gen/songs.dtb. The cool and juicy stuff is when I get to the GH2 demos and retail build. Here, the tutorial songs do have names and artists (as would be displayed on screen normally) but they're never used, here's an example:

(tutorial102
	(name "Basic 2 Playing Notes")
	(artist "You")

As an aside, here is part of my personal addition to GH1's songs.dtb to add the two "secret" songs (there are other files that need to be edited as well):

(advharmony
	(name "Trippolette")
	(artist "Andrew Buch")
	(song
		(name songs/advharmony/advharmony)
		(tracks 1)
		(slip_tracks ((2 3)))
		(pans (-1.00
				1.00
				-1.00
				1.00))
		(vols (0.80
				0.80
				0.90
				0.90))
		(cores (-1
				-1
				1
				1))
		(solo (riffs standard)))
	(bank sfx/song_default)
	(bpm 120)
	(anim_tempo kTempoFast)
	(preview
		9845
		44150)
	(midi_file songs/advharmony/advharmony.mid)
	(quickplay
		(character nu_metal)
		(guitar gibson_flying_v)
		(venue fest)))


(graveyardshift
	(name "Graveyard Shift")
	(artist "Unknown")
	(song
		(name songs/graveyardshift/graveyardshift)
		(tracks 1)
		(slip_tracks ((2 3)))
		(pans (-1.00
				1.00
				-1.00
				1.00))
		(vols (0.80
				0.80
				0.90
				0.90))
		(cores (-1
				-1
				1
				1))
		(solo (riffs standard)))
	(bank sfx/song_default)
	(bpm 120)
	(anim_tempo kTempoFast)
	(preview
		9845
		44150)
	(midi_file songs/graveyardshift/graveyardshift.mid)
	(quickplay
		(character nu_metal)
		(guitar gibson_flying_v)
		(venue fest)))

Similarly, here's the song section of /config/gen/store.dtb, as modified by me to add *Trip and GS to the in the store, making them "buyable" (but making them cost $0 so it doesn't mess up the rest of the store with the total money you get if you 5* everything):

(song
	(fireitup (price 300))
	(cheatonthechurch (price 300))
	(cavemanrejoice (price 300))
	(eureka (price 300))
	(allofthis (price 250))
	(behindthemask (price 250))
	(breakingwheel (price 250))
	(callout (price 250))
	(decontrol (price 250))
	(evenrats (price 250))
	(farewellmyth (price 250))
	(flyonthewall (price 250))
	(getready2rokk (price 250))
	(guitarhero (price 250))
	(hey (price 250))
	(sailyourshipby (price 250))
	(storyofmylove (price 250))
	(advharmony (price 0))
	(graveyardshift (price 0)))

Found in /config/gen/track_graphics.dtb, are settings pertaining to the visual appearance of the fretboard, including scroll speed (called "track_speed", with 1.0 being equivalent to normal Easy scroll speed and 2.1 equivalent to GH2 Hard/Expert with Hyperspeed enabled). Most of these values I have not modified, although they should modify the angle, position, and rate of fade at the entry point in the distance. Also notice that HMX can't spell for shit - "dual_perspecitve":

(gem
	(fps 30)
	(mat_formats
		(gem gem_%s)
		(tail tail_%s)
		(tail_glow tail_glow_%s)
		(star gem_starpower_%s)
		(dot dot_top_hopo2_%s))
	(tail_glow_width 1.50)
	(tail_glow_tight_width 0.70)
	(sparkle_len 1000))
(track_width 20)
(horizon_y 110)
(remove_y -10)
(track_speed
	(kDifficultyEasy 1)
	(kDifficultyMedium 1)
	(kDifficultyHard 1.40)
	(kDifficultyExpert 1.40))
(alpha_dist 40)
(horizon_tail_clip 7)
(nowbar_tail_clip 1.50)
(cam
	(near_plane 50)
	(far_plane 200)
	(z_start 0)
	(z_end 0.10))
(free_camera
	(rotate_rate 0.00)
	(slew_rate 0.10)
	(near_far_plane
		2
		200))
(init_gems 25)
(init_tails 16)
(multiplayer
	(normal
		(track_offset
			8.85
			0
			0)
		(track_scale
			0.85
			0.85
			0.85))
	(dual_perspecitve (track_scale
			0.76
			0.76
			0.76))
	(use_dual_perspective TRUE))
(fade
	(multi
		((x 128)
			(y 236))
		((x 384)
			(y 236)))
	(normal
		(x 256)
		(y 216)))

In GH2 there's a file called /config/gen/modes.dtb that stores default settings for attract mode (which is actually the game autoplaying the chart with the equivalent of performance mode enabled), quickplay, career, practice, and multiplayer. I don't know where these settings are stored in GH1, however.

Nothing really interesting in GH1's /ui/gen/ folder, although when I cover the GH2 demos we'll see more in there as far as re-enabling locked away menus.

That's all for tonight, tomorrow I'll go through and dig out some interesting imagery. LocalH 03:55, 11 August 2011 (EDT)