the cutting room mirror

Guitar Hero

This article has a talk page!This article has a talk page!
view on tcrf.net

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)