This is a sub-page of Tony Hawk's Underground (PlayStation 2, Xbox, GameCube, Windows).
Remnants of something named Gunslinger can be located throughout Tony Hawk's Underground's game data, scripts, prototypes and leaked code. This is largely believed to be in relation to Neversoft's 2005 game GUN which had a two year development cycle, lining up right with THUG's release.
West Side#
The most well-known Gunslinger relic found within THUG. The final PS2 build has level folders named WWW and WWW_Sky (WWW is presumably short for Wild Wild West). Both folders only contain a single GEOM file. Thankfully the rest of the level's data is fully intact in the prototype builds. Through further editing the level, named West Side, can be loaded inside the game. (Either through the prototype builds or with further work even the final game.)
The level is a rough representation of a western landscape, taking place beside a river that is crudely connected multiple other areas. This includes a long stream that heads towards a lengthy canyon, looping back to the river area. Several horses and horse-riding peds are spawned when the level begins and go along a predetermined path. The sounds of gunfire can be heard when getting close to these riders. Beyond the river and suspended in air are two parallel rows of identical looking buildings opposing each other, making an old west or ghost town. It's even possible to spot peds wondering around this town. Unfortunately the town seems to be completely inaccessible to the player.
When first loading into the level THUG's soundtrack will cut out and instead cycle between two western themed music tracks.





West Side Scripts#
WWW_Scripts.qb, the script file for the West Side level, has a LOT of Gunslinger specific scripts suggesting that the build used additional features for the Camera and Walking system. There are mentions of strafe locking, aiming, having a target, mounting and dismounting a horse. A script named Gunslinger_SkaterChecker attempts to take the player off their board to force walking controls.
GunslingerInvertAiming = 1
GunslingerTargetDistance = 1500.00000000000
GunslingerLookaroundHeadingKa = 1.00000000000
GunslingerLookaroundHeadingEa = 2.00000000000
GunslingerLookaroundHeadingKs = 1.00000000000
GunslingerLookaroundHeadingEs = 2.00000000000
GunslingerHorseLookaroundHeadingKa = 1.00000000000
GunslingerHorseLookaroundHeadingEa = 2.00000000000
GunslingerHorseLookaroundHeadingKs = 1.00000000000
GunslingerHorseLookaroundHeadingEs = 2.00000000000
GunslingerLookaroundTiltKa = 1.00000000000
GunslingerLookaroundTiltEa = 2.00000000000
GunslingerLookaroundTiltKs = 1.00000000000
GunslingerLookaroundTiltEs = 2.00000000000
GunslingerHorseLookaroundTiltKa = 1.00000000000
GunslingerHorseLookaroundTiltEa = 2.00000000000
GunslingerHorseLookaroundTiltKs = 1.00000000000
GunslingerHorseLookaroundTiltEs = 2.00000000000
GunslingerLookaroundHeadingSpeed = 3.75000000000
GunslingerLookaroundTiltSpeed = 0.69999998808
GunslingerHorseLookaroundHeadingSpeed = 3.75000000000
GunslingerHorseLookaroundTiltSpeed = 0.69999998808
GunslingerLookaroundModulationDistance = 36.00000000000
GunslingerLookaroundDamping = 0.40000000596
GunslingerLookaroundTiltCursorSuck = 0.50000000000
GunslingerLookaroundHeadingCursorSuck = 0.25000000000
GunslingerStrafeLockTargetKickInTime = 0.50000000000
GunslingerCameraParameters = {
matrix_slerp_rate = 0.01999999955
lookaround_slerp_rate = 0.03999999911
run_slerp_factor = 1.75000000000
min_slerp_speed = 130
full_slerp_speed = 450
dpad_min_slerp_speed = 50
dpad_full_slerp_speed = 150
flush_slerp_factor = 12
above = 72.00000000000
behind = 144.00000000000
lerp_xz = 0.25000000000
lerp_y = 0.75000000000
lock_angle = 135
tilt = 0.00000000000
zoom_lerp = 0.06250000000
facing_control = 1.70000004768
control_slerp_factor = 1.29999995232
}
GunslingerWalkParameters = {
walk_speed = 100
run_speed = 350
max_stand_speed = 0
decel_factor = 5
run_accel_rate = 1500
walk_accel_rate = 350
walk_point = 0.85000002384
stop_skidding_speed = 50
forced_run_delay = 200
dpad_control_damping_factor = 1.29999995232
start_run_dpad_delay = 1000
full_run_dpad_delay = 1700
jump_velocity = 600
min_jump_factor = 0.89999997616
gravity = 1750
hold_time_for_max_jump = 600
hang_jump_horiz_vel = 50
hang_jump_factor = 0.60000002384
rotate_in_place_rate = 1200
max_rotate_in_place_speed = 150
max_rotate_in_place_angle = 20
walk_rotate_factor = 0.50000000000
max_pop_speed = 100
worse_turn_factor = 10
best_turn_factor = 25
jump_adjust_speed = 200
jump_accel_factor = 12
snap_up_height = 24
snap_down_height = 18
max_unnoticed_ground_snap = 4
feeler_length = 18
feeler_height = 23
push_feeler_length = 15
push_strength = 30
curb_float_lerp_up_rate = 54
curb_float_lerp_down_rate = 18
curb_float_feeler_length = 24
min_curb_height_adjust_vel = 50
walker_height = 70
min_skid_speed = 150
skid_accel = 1400
max_reverse_angle = 45
wall_turn_factor = 5
wall_turn_speed_threshold = 20
max_wall_turn_speed_threshold = 400
forward_tolerance = 15
lerp_upright_rate = 6
hang_move_speed = 46.20000076294
hang_horiz_control_tolerance = 45
hang_vert_control_tolerance = 45
hang_control_delay = 400
hang_hop_max_rail_angle = 45
hang_max_rail_ascent = 30
ledge_top_feeler_up = 6
ledge_top_feeler_down = 6
ledge_front_feeler_forward = 12
ledge_front_feeler_back = 12
hang_obstruction_feeler_back = 12
hang_obstruction_feeler_up = 6
pull_up_obstruction_height = 12
rehang_delay = ( 0.30000001192 * 1000 )
hang_init_anim_feeler_height = 36
hang_init_anim_feeler_length = 12
lowest_hang_height = 92
max_hop_to_hang_height = 173
max_hop_to_hang_forward_reach = 48
max_hop_to_hang_backward_reach = 24
hop_obstruction_feeler_up = 24
hop_target_vert_vel = 100
hop_delay = ( 0.20000000298 * 1000 )
barrier_jump_delay = ( 0 * 1000 )
barrier_jump_min_clearance = 3
barrier_jump_max_angle = 75
max_horiz_snap_distance = 24
button_horiz_snap_distance = 48
max_vert_snap_distance = 6
max_onto_ladder_angle = 60
ladder_move_speed = 45
ladder_control_tolerance = 45
ladder_climb_offset = 4
max_slow_walk_speed = 50
max_fast_walk_speed = 100
max_slow_run_speed = 150
min_anim_run_speed = 50
hang_vert_origin_offset = 91
pull_up_offset_forward = 10.83500003815
pull_up_offset_up = 86.27828216553
ladder_top_offset_forward = 6.00362014771
ladder_top_offset_up = 59.59719848633
ladder_bottom_offset_forward = 23.98740005493
ladder_bottom_offset_up = 13.03870010376
}
GunslingerHorseParameters = {
walk_speed = 300
run_speed = 620
max_stand_speed = 0
decel_factor = 5
run_accel_rate = 1500
walk_accel_rate = 350
walk_point = 0.75000000000
stop_skidding_speed = 50
forced_run_delay = 200
dpad_control_damping_factor = 1.29999995232
start_run_dpad_delay = 1000
full_run_dpad_delay = 1700
jump_velocity = 600
min_jump_factor = 0.89999997616
gravity = 1750
hold_time_for_max_jump = 600
hang_jump_horiz_vel = 50
hang_jump_factor = 0.60000002384
rotate_in_place_rate = 400
max_rotate_in_place_speed = 150
max_rotate_in_place_angle = 20
walk_rotate_factor = 0.50000000000
max_pop_speed = 100
worse_turn_factor = 10
best_turn_factor = 25
jump_adjust_speed = 200
jump_accel_factor = 12
snap_up_height = 24
snap_down_height = 18
max_unnoticed_ground_snap = 4
feeler_length = 18
feeler_height = 23
push_feeler_length = 15
push_strength = 30
curb_float_lerp_up_rate = 54
curb_float_lerp_down_rate = 18
curb_float_feeler_length = 24
min_curb_height_adjust_vel = 50
walker_height = 70
min_skid_speed = 150
skid_accel = 1400
max_reverse_angle = 45
wall_turn_factor = 15
wall_turn_speed_threshold = 20
max_wall_turn_speed_threshold = 200
forward_tolerance = 15
lerp_upright_rate = 6
hang_move_speed = 46.20000076294
hang_horiz_control_tolerance = 45
hang_vert_control_tolerance = 45
hang_control_delay = 400
hang_hop_max_rail_angle = 45
hang_max_rail_ascent = 30
ledge_top_feeler_up = 6
ledge_top_feeler_down = 6
ledge_front_feeler_forward = 12
ledge_front_feeler_back = 12
hang_obstruction_feeler_back = 12
hang_obstruction_feeler_up = 6
pull_up_obstruction_height = 12
rehang_delay = ( 0.30000001192 * 1000 )
hang_init_anim_feeler_height = 36
hang_init_anim_feeler_length = 12
lowest_hang_height = 92
max_hop_to_hang_height = 173
max_hop_to_hang_forward_reach = 48
max_hop_to_hang_backward_reach = 24
hop_obstruction_feeler_up = 24
hop_target_vert_vel = 100
hop_delay = ( 0.20000000298 * 1000 )
barrier_jump_delay = ( 0 * 1000 )
barrier_jump_min_clearance = 3
barrier_jump_max_angle = 75
max_horiz_snap_distance = 24
button_horiz_snap_distance = 48
max_vert_snap_distance = 6
max_onto_ladder_angle = 60
ladder_move_speed = 45
ladder_control_tolerance = 45
ladder_climb_offset = 4
max_slow_walk_speed = 100
max_fast_walk_speed = 200
max_slow_run_speed = 300
min_anim_run_speed = 50
hang_vert_origin_offset = 91
pull_up_offset_forward = 10.83500003815
pull_up_offset_up = 86.27828216553
ladder_top_offset_forward = 6.00362014771
ladder_top_offset_up = 59.59719848633
ladder_bottom_offset_forward = 23.98740005493
ladder_bottom_offset_up = 13.03870010376
}
SCRIPT PlayGunshot
SpawnSound WWW_Gunshot_Pistol
ENDSCRIPT
SCRIPT HorsePlaySpeedChosenAnim
Horse_GetSpeedScale
SWITCH <SpeedScale>
CASE HORSE_WALK
PlayAnim Anim = ( <Anims> [ 0 ] ) <...>
CASE HORSE_TROT
PlayAnim Anim = ( <Anims> [ 1 ] ) <...>
CASE HORSE_CANTER
PlayAnim Anim = ( <Anims> [ 2 ] ) <...>
CASE HORSE_GALLOP
PlayAnim Anim = ( <Anims> [ 3 ] ) <...>
ENDSWITCH
ENDSCRIPT
SCRIPT HorseRunSpeedChosenAnim
HorsePlaySpeedChosenAnim NoRestart <...>
BEGIN
IF AnimFinished
BREAK
ENDIF
Wait 1 GameFrame
HorsePlaySpeedChosenAnim NoRestart <...>
REPEAT
ENDSCRIPT
SCRIPT HorseCycleSpeedChosenAnim
HorsePlaySpeedChosenAnim Cycle NoRestart <...>
BEGIN
Wait 1 GameFrame
HorsePlaySpeedChosenAnim Cycle NoRestart <...>
REPEAT
ENDSCRIPT
SCRIPT WaitAnimHorse
BEGIN
IF AnimFinished
BREAK
ENDIF
Wait 1 GameFrame
REPEAT
ENDSCRIPT
SCRIPT WaitHorse
BEGIN
Wait 1 GameFrame
REPEAT
ENDSCRIPT
SCRIPT ClearAllHorseExceptions
ClearExceptionGroup HorseStateExceptions
ClearExceptionGroup HorseEvents
ENDSCRIPT
SCRIPT HorseJumpRequestedEvent
IF Walk_Ground
FireEvent type = Jump
Horse_Jump
ENDIF
ClearException JumpRequested
ENDSCRIPT
SCRIPT HorseJumpButton
printf "HorseJumpRequested"
FireEvent type = HorseJumpRequested
ENDSCRIPT
SCRIPT HorseJustCreated
printf "HorseJustCreated entry"
ClearExceptionGroup HorseStateExceptions
SetException Ex = Run Scr = HorseJustCreatedToRunState Group = HorseStateExceptions
EnableInputEvents
SetEventHandler Ex = Release_X Scr = HorseJumpButton Group = HorseEvents
WaitHorse
printf "HorseJustCreated exit"
ENDSCRIPT
SCRIPT HorseJustCreatedToRunState
ClearExceptionGroup HorseStateExceptions
HorsePlaySpeedChosenAnim Cycle NoRestart Anims = [ HORSE_WALK HORSE_TROT HORSE_CANTER HORSE_GALLOP ] Speeds = [ 63.88000106812 130.44000244141 400 520 ] BlendPeriod = 0.10000000149 <...>
Goto HorseRunState
ENDSCRIPT
SCRIPT HorseRunState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Stand Scr = HorseStandState Group = HorseStateExceptions
SetException Ex = Jump Scr = HorseRunJumpState Group = WalkingStateExceptions
SetEventHandler Ex = HorseJumpRequested Scr = HorseJumpRequestedEvent Group = HorseEvents
BEGIN
HorsePlaySpeedChosenAnim Cycle NoRestart Anims = [ HORSE_WALK HORSE_TROT HORSE_CANTER HORSE_GALLOP ] Speeds = [ 63.88000106812 130.44000244141 400 520 ] BlendPeriod = 0.10000000149 <...>
Wait 1 GameFrame
REPEAT
ENDSCRIPT
SCRIPT HorseRunJumpState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Land Scr = HorseLandState Group = HorseStateExceptions
PlayAnim Anim = Horse_Jump BlendPeriod = 0.10000000149
BEGIN
IF AnimFinished
BREAK
ENDIF
Wait 1 GameFrame
REPEAT
Goto HorseAirState
ENDSCRIPT
SCRIPT HorseAirState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Land Scr = HorseLandState Group = HorseStateExceptions
PlayAnim Anim = Horse_Airidle Cycle NoRestart BlendPeriod = 0.10000000149
BEGIN
Wait 1 GameFrame
REPEAT
ENDSCRIPT
SCRIPT HorseLandState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Stand Scr = HorseStandLandState Group = HorseStateExceptions
SetException Ex = Run Scr = HorseRunLandState Group = HorseStateExceptions
SetEventHandler Ex = JumpRequested Scr = HorseJumpRequestedEvent Group = HorseEvents
BEGIN
Wait 1 GameFrame
REPEAT
ENDSCRIPT
SCRIPT HorseRunLandState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Stand Scr = HorseStandState Group = HorseStateExceptions
PlayAnim Anim = Horse_Land BlendPeriod = 0.10000000149
BEGIN
IF AnimFinished
BREAK
ENDIF
Wait 1 GameFrame
REPEAT
Goto HorseRunState
ENDSCRIPT
SCRIPT HorseStandLandState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Run Scr = HorseRunState Group = HorseStateExceptions
PlayAnim Anim = HorseLand BlendPeriod = 0.05000000075
BEGIN
IF AnimFinished
BREAK
ENDIF
Wait 1 GameFrame
REPEAT
Goto HorseStandState
ENDSCRIPT
SCRIPT HorseStandState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Run Scr = HorseStandToRunState Group = HorseStateExceptions
PlayAnim Anim = Horse_StandIdle BlendPeriod = 0.10000000149
BEGIN
IF AnimFinished
PlayAnim Anim = Horse_StandIdle BlendPeriod = 0.10000000149
ENDIF
Wait 1 GameFrame
REPEAT
ENDSCRIPT
SCRIPT HorseStandToRunState
ClearExceptionGroup HorseStateExceptions
SetException Ex = Stand Scr = HorseStandState Group = HorseStateExceptions
HorsePlaySpeedChosenAnim Cycle NoRestart Anims = [ HORSE_WALK HORSE_TROT HORSE_CANTER HORSE_GALLOP ] Speeds = [ 63.88000106812 130.44000244141 400 520 ] BlendPeriod = 0.10000000149 <...>
Goto HorseRunState
ENDSCRIPT
SCRIPT PlayerHorseAi
SetEventHandler Ex = Landed Scr = HorseLandedEvent Group = PlayerHorse
Wait
ENDSCRIPT
SCRIPT HorseLandedEvent
Skater : ClearPanel_Landed
Goto HorseJustCreated
ENDSCRIPT
horse_mode = 0
SCRIPT MountHorse
SetActiveCamera id = playerHorseCamera
ENDSCRIPT
SCRIPT DismountHorse
SkaterCam0 : UnPause
SetActiveCamera id = SkaterCam0
playerHorseCamera : VehicleCamera_Reset
ENDSCRIPT
SCRIPT ToggleHorseMode
IF ( horse_mode = 0 )
refreshHorse vehicleSetup = <vehicleSetup>
PlayerHorse : Vehicle_PlaceBeforeCamera
playerHorseCamera : VehicleCamera_Reset
PlayerHorse : Unhide
Skater : SkaterLoopingSound_TurnOff
ELSE
SkaterCam0 : UnPause
SetActiveCamera id = SkaterCam0
PlayerHorse : Die
playerHorseCamera : Die
Skater : SkaterLoopingSound_TurnOn
Skater : SetCustomRestart set
ENDIF
ENDSCRIPT
SCRIPT refreshHorse
IF NOT ObjectExists id = PlayerHorse
createHorse vehicleSetup = <vehicleSetup>
ELSE
PlayerHorse : Vehicle_Reset <vehicleSetup>
ENDIF
ENDSCRIPT
SCRIPT createHorse
IF NOT ObjectExists id = PlayerHorse
CreateCompositeObject {
components = [
{ component = suspend
NeverSuspend
}
{
component = skeleton
skeletonName = horse
}
{
component = animation
AnimName = animload_anl_horse
}
{
component = horse
}
{
component = input
controller = 0
}
{
component = model
}
{
component = movablecontact
}
]
params = {
name = PlayerHorse
<vehicleSetup>
}
}
CreateCompositeObject {
components = [
{
component = horsecamera
subject = PlayerHorse
horseCameraSetup
}
{
component = input
controller = 0
}
{
component = camera
}
]
params = { name = playerHorseCamera }
}
ENDIF
PlayerHorse : Obj_SwitchScript HorseJustCreated
ENDSCRIPT
horseCameraSetup = {
alignment_rate = 2.50000000000
offset_height = 100
offset_distance = 180
offset_tilt = 10.00000000000
}
customHorseSetup = {
model = "west\\horse.skin"
skeletonName = horse
texDictOffset = 66
use_asset_manager = 1
}
SCRIPT WWW_Setup
IF IsCareerMode
ELSE
ENDIF
Create_Panel_Message style = panel_message_death text = " "
ENDSCRIPT
SCRIPT WWW_startup
WWW_LoadingSounds
SetTerrainGrindWire
SetTerrainWood
SetTerrainConcSmooth
SetTerrainMetalSmooth
SpawnSkaterScript Gunslinger_SkaterChecker
ENDSCRIPT
SCRIPT Gunslinger_SkaterChecker
BEGIN
IF ObjectExists id = Skater
MakeskaterGoto Switch_OnGroundAI params = { newscript = walking_ongroundai }
IF Gunslinger
Skater : Move x = 50
ToggleHorseMode vehicleSetup = customHorseSetup
Skater : Move x = -50
ENDIF
BREAK
SetMusicVolume 0
ELSE
Wait 0.50000000000 seconds
printf "NO SKATER YET ============================================================="
ENDIF
REPEAT
Wait 3 seconds
SetMusicVolume 0
Wait 3 seconds
stopstream
BEGIN
playstream WWW_Track02 priority = 100
Wait 180 seconds
playstream WWW_Track01 priority = 100
Wait 260 seconds
REPEAT
ENDSCRIPT
SCRIPT WWW_Goals
IF InMultiplayerGame
add_multiplayer_mode_goals
ENDIF
IF NOT InSplitScreenGame
IF NOT GameModeEquals is_singlesession
ENDIF
ENDIF
IF NOT InSplitScreenGame
IF NOT GameModeEquals is_singlesession
IF NOT InNetGame
ENDIF
ENDIF
ENDIF
ENDSCRIPT
SCRIPT TOD_Script
SWITCH <current_tod>
CASE morning
CASE day
CASE evening
CASE night
DEFAULT
printf "### no tod set ###"
ENDSWITCH
ENDSCRIPT
SCRIPT trstscripts
BEGIN
Wait 10 frames
REPEAT
ENDSCRIPT
SCRIPT WWW_Horse_Test01
Obj_StickToGround distAbove = 3 distBelow = 6
Obj_Playanim Anim = HORSE_GALLOP Cycle
Obj_SetPathAcceleration 50 mphps
Obj_SetPathDeceleration 50 mphps
Obj_SetPathVelocity 30 mph
Obj_FollowPathLinked TurnDist = 5
Wait RANDOM(1, 1, 1, 1, 1) RANDOMCASE 1 RANDOMCASE 5 RANDOMCASE 10 RANDOMCASE 30 RANDOMCASE 60 RANDOMEND frames
BEGIN
IF Obj_ObjectInRadius radius = 10 type = Skater
Obj_SetPathVelocity 60 fps
ELSE
IF Obj_ObjectInRadius radius = 120 type = Skater
RANDOM(1, 1, 1, 1, 1) RANDOMCASE RANDOMCASE RANDOMCASE RANDOMCASE
RANDOMCASE Obj_Playstream RANDOM(1, 1, 1, 1, 1) RANDOMCASE FL_Gunshots01 RANDOMCASE FL_Gunshots02 RANDOMCASE FL_Gunshots03 RANDOMCASE FL_Gunshots04 RANDOMCASE FL_Gunshots05 RANDOMEND
RANDOMEND
Obj_SetPathVelocity RANDOM(1, 1, 1, 1, 1, 1, 1) RANDOMCASE 30 RANDOMCASE 32 RANDOMCASE 32 RANDOMCASE 35 RANDOMCASE 35 RANDOMCASE 40 RANDOMCASE 45 RANDOMEND fps
ELSE
IF Obj_ObjectInRadius radius = 200 type = Skater
Obj_SetPathVelocity 25 fps
ELSE
Obj_SetPathVelocity 15 fps
ENDIF
ENDIF
ENDIF
Wait RANDOM(1, 1, 1, 1, 1) RANDOMCASE 0.50000000000 RANDOMCASE 0.60000002384 RANDOMCASE 0.69999998808 RANDOMCASE 0.80000001192 RANDOMCASE 0.89999997616 RANDOMEND seconds
obj_playsound HORSE_GALLOP pitch = RANDOM(1, 1, 1) RANDOMCASE 95 RANDOMCASE 100 RANDOMCASE 105 RANDOMEND
Wait RANDOM(1, 1, 1, 1, 1) RANDOMCASE 0.50000000000 RANDOMCASE 0.60000002384 RANDOMCASE 0.69999998808 RANDOMCASE 0.80000001192 RANDOMCASE 0.89999997616 RANDOMEND seconds
obj_playsound HORSE_GALLOP pitch = RANDOM(1, 1, 1) RANDOMCASE 95 RANDOMCASE 100 RANDOMCASE 105 RANDOMEND
REPEAT
ENDSCRIPT
SCRIPT WWW_Rider_Test01 HorseName = TRG_Enemy_Horse01
Obj_LockToObject ObjectName = <HorseName> VECTOR(0.00000000000, 0.00000000000, 0.00000000000)
BEGIN
Obj_Playanim Anim = Rider_Gallop Cycle
Obj_WaitAnimFinished
REPEAT
ENDSCRIPT
Startup Script#
The startup.qb script mentions a Gunslinger build type. If this is detected in the executable the game will attempt to jump to the gun_startup script, or if unavailable it falls back to default_gun_startup. default_gun_startup begins by forcing the player skater into a predetermined appearance that is defined in cas_skater_m.qb, afterwards the game runs an autolaunch for the West Side level.
SCRIPT Call_Personal_StartUp_Script
IF Gunslinger
IF ScriptExists gun_startup
gun_startup
ELSE
default_gun_startup
ENDIF
ELSE
IF ScriptExists startup
startup
ELSE
printf "WARNING: Missing the startup script"
Hideloadingscreen
CreateScreenElement {
parent = root_window
type = textelement
id = ns_rules
text = "Neversoft and Activision 2002"
font = newtrickfont
pos = PAIR(320.00000000000, 420.00000000000)
rgba = [ 140 128 128 55 ]
Scale = 0.60000002384
just = [ center center ]
not_focusable
}
RunScriptOnScreenElement id = ns_rules missing_startup
ENDIF
ENDIF
ENDSCRIPT
SCRIPT default_gun_startup
GetCurrentSkaterProfileIndex
SetPlayerAppearance player = <currentSkaterProfileIndex> appearance_structure = appearance_custom_skater_male_09
change show_career_startup_menu = 0
autolaunch level = load_www game = career
ENDSCRIPT
Pre-Made Skater#
The previously mentioned skater appearance does not appear in Create-A-Skater's list of Pre-Made Skaters but is defined with them. It refers to the body type 'MaleBody1' which appears to be invalid and also lacks an entry for hair which is unlike the others. The used CAS parts are as follows: Cowboy for hat, Handle Bars for facial hair, Light Skin 2 for the face, Western Vest (or the ID Baggy Vest as used in the script file) for torso, Tight for pants and Cowboy Boots for shoes.

Animations#
WWW.pre contains an 'anims\west' directory with a big chunk of animation files not seen elsewhere. Subdirectories include 'anl_horse', 'Cowboy' and 'rider'.
anl_horse\default.ska.ps2
anl_horse\Horse_Airidle.ska.ps2
anl_horse\Horse_Canter.ska.ps2
anl_horse\Horse_EatIdle.ska.ps2
anl_horse\Horse_Gallop.ska.ps2
anl_horse\Horse_Gallop_Left.ska.ps2
anl_horse\Horse_Gallop_Right.ska.ps2
anl_horse\Horse_Jump.ska.ps2
anl_horse\Horse_Land.ska.ps2
anl_horse\Horse_StandFromEat.ska.ps2
anl_horse\Horse_StandIdle.ska.ps2
anl_horse\Horse_StandToEat.ska.ps2
anl_horse\Horse_Stop.ska.ps2
anl_horse\Horse_Trot.ska.ps2
anl_horse\Horse_Walk.ska.ps2
Cowboy\Cowboy_Run_HighGun.ska.ps2
Cowboy\Cowboy_Run_LowGun.ska.ps2
Cowboy\Cowboy_Run_NoGun.ska.ps2
Cowboy\Cowboy_StandIdle_HighGun.ska.ps2
Cowboy\Cowboy_StandIdle_LowGun.ska.ps2
Cowboy\Cowboy_StandIdle_NoGun.ska.ps2
Cowboy\Cowboy_Walk_HighGun.ska.ps2
Cowboy\Cowboy_Walk_LowGun.ska.ps2
Cowboy\Cowboy_Walk_NoGun.ska.ps2
rider\Rider_Airidle.ska.ps2
rider\Rider_Canter.ska.ps2
rider\Rider_EatIdle.ska.ps2
rider\Rider_Gallop.ska.ps2
rider\Rider_Gallop_Left.ska.ps2
rider\Rider_Gallop_Right.ska.ps2
rider\Rider_Jump.ska.ps2
rider\Rider_Land.ska.ps2
rider\Rider_StandFromEat.ska.ps2
rider\Rider_StandIdle.ska.ps2
rider\Rider_StandToEat.ska.ps2
rider\Rider_Stop.ska.ps2
rider\Rider_Trot.ska.ps2
rider\Rider_Walk.ska.ps2
Cowboy#






Remnants in C++ Code#
THUG1's source code contains multiple files relating to Gunslinger specific code within the GEL (Game Engine Library) folder tree.
components\GunslingerCameraLookAroundComponent.cpp
components\GunslingerWalkCameraComponent.cpp
components\GunslingerWalkComponent.cpp
components\HorseCameraComponent.cpp
components\HorseCameraComponent.h
components\HorseComponent.cpp
components\HorseComponent.h
components\RiderComponent.cpp
components\RiderComponent.h
components\weaponcomponent.cpp
components\weaponcomponent.h