Unused Graphics#
THPS3 Leftovers#
Once again, the same gag and mock-up images from THPS3 remain in the files, albeit only in the PlayStation 2 version and some of them are removed. None of the future Tony Hawk games include any of these images but they do appear again in MTX Mototrax.









Mock Loading Screen#
The file loadscrn_Kona.img, which one would assume is another Pro Skater 4 leftover, actually appears to be some sort of joke image.

Xbox Icons#
Each icon used for saves in the Xbox dashboard exists in the 'images/Miscellaneous' folder tree of the PlayStation 2 version. A unique icon for saved Replay Data also exists, though as THUG dropped the Replay feature entirely, this goes unused.
Create A Trick#
UI elements for the Create-A-Trick screen that aren't used.
Pro Point Indicator#
A HUD graphic for cash and pro points like the one seen in Pro Skater 4.
This still exists in the game's code but has been disabled. It is possible to see in the game by enabling and disabling 'Toggle Poly Count' in the Debug Menu. Cash is always valued at '0' as pickups do not exist in the game. Pro Points corresponds to how many missions the player has completed.

Unused Models#
driving_icon#

A 3D icon much like those used to mark goals. Possibly could've been used to differentiate driving goals from the standard missions or maybe to show the vehicle being driven.
Ed_Cursor folder#
In addition to all the variants of the Rail Tool cursor, one can find more unused cursors sharing the same design in this folder.





Horse#

A horse from the unused West Side level. It has a skeleton named 'anl_horse' and a selection of animations found in the level's PRE file. The animation files reference walking, running, trotting, coming to a stop, jumping then landing, and even eating.
Rail_Cursor#

An alternate model for the park editor's 'Rail Tool' cursor exists. In a total reversal of the Ed_Cursor models this one is much closer to the designs for the Gap and Selection tools.
test_skater_m & test_facial#

Earlier cutscene models for Eric with him wearing an Adio hoodie instead of his zip-up jacket.
TreeTest, TreeTest2 & TreeTest3#

Three separate yet completely alike tree models. Each one has its own associated skeleton, implying that they could animate in some way. The first two are seemingly identical, with TreeTest3 being different in that it is split into multiple meshes.
Unused Cutscenes#
NJ_Pool.cut#
A sequence with the player character and Eric Sparrow by the pool at the New Jersey school playground. Eric loudly attempts to impress an unseen audience by grinding around the pool before eating the dirt with Hanna-Barbera-like bail sounds. He then prompts the player to do better than him. The cutscene has rather jerky camera movement, a temporary voice for Eric is used, and the scene begins and ends with a beep. Not to mention... the player has no face!
It is unknown exactly where the scene was used or if it was to be used at all. However, judging by Eric's alignment, it undoubtedly takes place in the early chapters of the game.
Scene1.cut#
Presumably some sort of test of the cutscene system featuring a monkey from THPS4's Zoo and Eric Sparrow.
The camera position and angles are very broken and often point at nothing. It's worth noting that Eric is using his earlier test_skater_m model in this sequence. He also appears to be going through the same animations from NJ_Pool.
Test.cut#
A short sequence obviously demonstrating particle effects with a lot of smoke.
Unused Sounds#
Dealer House Ambience#
Many sounds exist that were meant to be used as additional ambience at the drug dealer's house in New Jersey. The level is only scripted to play ambient sounds of muffled dog barking during the day plus creaking and an owl hooting at night.
Four sounds of muffled shouting from a male.
Filename |
Audio |
|---|---|
NJ_CrackHouse01 |
|
NJ_CrackHouse02 |
|
NJ_CrackHouse03 |
|
NJ_CrackHouse04 |
Rather disturbing sounds of a woman screaming, crying and being in distress.
Filename |
Audio |
|---|---|
NJ_CrackHouseFemScream01 |
|
NJ_CrackHouseFemScream02 |
|
NJ_CrackHouseFemScream03 |
|
NJ_CrackHouseFemScream04 |
|
NJ_CrackHouseFemScream05 |
|
NJ_CrackHouseFemScream06 |
|
NJ_CrackHouseFemScream07 |
|
NJ_CrackHouseFemScream08 |
|
NJ_CrackHouseFemScream09 |
Sounds of footsteps. Meant to be played at the house during night time.
Filename |
Audio |
|---|---|
NJ_NightCrackHouseSteps01 |
|
NJ_NightCrackHouseSteps02 |
|
NJ_NightCrackHouseSteps03 |
Drug Dealer Lines#
Located in the same folder as the previously mentioned ambient sounds. Lines meant to be used by the roaming drug dealers during the mission Get the stolen items back from the dealers. These are still implemented in the August prototype.
Filename |
Audio |
|---|---|
NJ_CrackMan01 |
|
NJ_CrackMan02 |
|
NJ_CrackMan03 |
|
NJ_CrackMan04 |
Unused Voicelines#
Bucky Lasek#
The missions Party Boat Skate-Tricks and Over the Wall have voice lines for Bucky Lasek. In the final game these two missions instead feature Bam Margera.
Transcript |
Audio |
|---|---|
"Welcome to Wet Beaver's party boat. This party's boring as hell. Let's liven it up with some skating. Nail the tricks I yell out." |
|
"That was some damn sweet Kung fu!" |
|
"One last thing to do. Get up that ladder..." |
|
"and ring those bells - easy!" |
|
"We think the guards will run out and open the gates - yeah it's a long shot. Oh yeah, don't get shot." |
|
"Those suckers opened the gates! I love it when a plan comes together." |
Eric Sparrow#
There are several audio files regarding Eric for the final mission in the game, Tear Up Eric's Best Line.
A sizeable amount of lines of Eric taunting the player based on their distance.
Transcript |
Audio |
|---|---|
"Someone needs a bit more practice!" |
|
"Hello, I'm way over here!" |
|
"Come on! C'mon, keep up! Slow poke!" |
|
"Hey, you suck. Jeez!" |
|
"I'm miles ahead of ya, pal!" |
|
[Chuckle] "Come on. Can't you keep up?!" |
|
"You want this tape back? Come on!" |
|
"You're never gonna see it again unless you catch me. Loser!" |
|
[Uneasy chuckle] "Looks like someone's been practicin'." |
|
"Ah you still can't catch me!" [Cocky chuckle] |
|
"Get off me, man!" |
|
"You really think you can catch me? You suck! You're never getting this tape back." |
|
"I still ain't givin' ya the tape back, even if you do catch me. Bitch!" |
One can also locate a sound file with Eric's meltdown after the player beats his line. While the line is used during the Beat Eric cutscene, this raw variant does not feature the cutscene sound mixing.
|
Raw (unused) |
Cutscene (used) |
|---|---|
Security Stew#
There are four sound files of Stew struggling to keep up with the player in the mission Get Access to the Train Station.
Transcript |
Audio |
|---|---|
[Breathless panting] "Hey!" |
|
[Panting and wheezing] |
|
[Pained wheezing] |
|
[Frustrated and breathless wheezing] "Come here! You li-... I oughtta..." |
Unused Music#
The following music tracks are leftovers from the unused West Side level.
Filename |
Audio |
|---|---|
WWW_Track01 |
|
WWW_Track02 |
Previously Undocumented Cheat Codes#
While a handful of cheat codes were officially published for the game, the game's internal scripts actually contain definitions for many more. These cheat code definitions are stored as hashed values (iteratively hashed using CRC32), meaning they cannot be trivially decoded. Through brute-forcing possible strings, several additional cheat codes were discovered in the scripts that were never published in cheat books or official guides.
Cheat Identifier |
PS2 Cheat Code |
Xbox Cheat Code |
GameCube Cheat Code |
|---|---|---|---|
cheat_unlock_always_special |
superduper |
superduper |
superduper |
cheat_unlock_perfect_rail |
letitslide |
letitslide |
letitslide |
cheat_unlock_perfect_skitch |
rearrider |
rearrider |
rearrider |
cheat_unlock_perfect_manual |
??? |
??? |
??? |
cheat_unlock_moon_grav |
getitup |
getitup |
getitup |
cheat_unlock_pedgroup1 |
??? |
??? |
??? |
cheat_unlock_pedgroup2 |
??? |
??? |
??? |
cheat_unlock_pedgroup3 |
machomen |
machomen |
machomen |
cheat_unlock_pedgroup4 |
??? |
??? |
??? |
cheat_unlock_pedgroup5 |
goodolboys |
goodolboys |
goodolboys |
cheat_unlock_pedgroup6 |
minwage |
minwage |
minwage |
cheat_unlock_pedgroup7 |
??? |
??? |
??? |
cheat_unlock_pedgroup8 |
sputnik |
sputnik |
sputnik |
cheat_unlock_pedgroup9 |
??? |
??? |
??? |
cheat_select_shift |
??? |
??? |
??? |
unlock_all_cheat_codes |
??? |
??? |
??? |
unlock_all_sponsors |
??? |
sellout |
keepitreal |
cheat_unlockmovies |
digivid |
super8mm |
fish-eye |
unlock_all_cutscenes |
??? |
??? |
??? |
cheat_reallygivelevels |
boltcutter |
lockpik |
hacksaw |
cheat_give_im |
??? |
marvelous |
wongchu |
cheat_give_kiss |
??? |
??? |
??? |
cheat_give_thud |
??? |
argh!! |
nooo!! |
unlock_all_cheats |
??? |
cap&ball |
??? |
Development Text#
effects.lst#
Located in the "scripts" folder.
None
Flat
Shaded
Smooth
Glow
DoubleGlow
Star
DoubleStar
gapflags.lst#
Located in the "scripts" folder.
CANCEL_GROUND
CANCEL_AIR
CANCEL_RAIL
CANCEL_WALL
CANCEL_LIP
CANCEL_MANUAL
REQUIRE_GROUND
REQUIRE_AIR
REQUIRE_RAIL
REQUIRE_WALL
REQUIRE_LIP
REQUIRE_MANUAL
PURE_GROUND
PURE_AIR
PURE_RAIL
PURE_WALL
PURE_LIP
PURE_MANUAL
keycombo.lst#
Located in the "scripts" folder.
<None>
Air_CircleD
Air_CircleDL
Air_CircleDR
Air_CircleL
Air_CircleR
Air_CircleU
Air_CircleUL
Air_CircleUR
Air_D_D_Circle
Air_D_D_Square
Air_L_L_Circle
Air_L_L_Square
Air_R_R_Circle
Air_R_R_Square
Air_SquareD
Air_SquareDL
Air_SquareDR
Air_SquareL
Air_SquareR
Air_SquareU
Air_SquareUL
Air_SquareUR
Air_U_U_Circle
Air_U_U_Square
Lip_TriangleD
Lip_TriangleDL
Lip_TriangleDR
Lip_TriangleL
Lip_TriangleR
Lip_TriangleU
Lip_TriangleUL
Lip_TriangleUR
SpAir_D_L_Circle
SpAir_D_L_Square
SpAir_D_R_Circle
SpAir_D_R_Square
SpAir_D_U_Circle
SpAir_D_U_Square
SpAir_L_D_Circle
SpAir_L_D_Square
SpAir_L_R_Circle
SpAir_L_R_Square
SpAir_L_U_Circle
SpAir_L_U_Square
SpAir_R_D_Circle
SpAir_R_D_Square
SpAir_R_L_Circle
SpAir_R_L_Square
SpAir_R_U_Circle
SpAir_R_U_Square
SpAir_U_D_Circle
SpAir_U_D_Square
SpAir_U_L_Circle
SpAir_U_L_Square
SpAir_U_R_Circle
SpAir_U_R_Square
SpGrind_D_L_Triangle
SpGrind_D_R_Triangle
SpGrind_D_U_Triangle
SpGrind_L_D_Triangle
SpGrind_L_R_Triangle
SpGrind_L_U_Triangle
SpGrind_R_D_Triangle
SpGrind_R_L_Triangle
SpGrind_R_U_Triangle
SpGrind_U_D_Triangle
SpGrind_U_L_Triangle
SpGrind_U_R_Triangle
SpLip_D_L_Triangle
SpLip_D_R_Triangle
SpLip_D_U_Triangle
SpLip_L_D_Triangle
SpLip_L_R_Triangle
SpLip_L_U_Triangle
SpLip_R_D_Triangle
SpLip_R_L_Triangle
SpLip_R_U_Triangle
SpLip_U_D_Triangle
SpLip_U_L_Triangle
SpLip_U_R_Triangle
SpLip_U_U_Triangle
SpMan_D_L_Triangle
SpMan_D_R_Triangle
SpMan_D_U_Triangle
SpMan_L_D_Triangle
SpMan_L_R_Triangle
SpMan_L_U_Triangle
SpMan_R_D_Triangle
SpMan_R_L_Triangle
SpMan_R_U_Triangle
SpMan_U_D_Triangle
SpMan_U_L_Triangle
SpMan_U_R_Triangle
Extra_SquareSquareL
qdir.txt#
Located in the "scripts" folder.
c:\skate5\data\scripts\aaaaloopchecker.qb
c:\skate5\data\scripts\allanims.qb
c:\skate5\data\scripts\burn.qb
c:\skate5\data\scripts\cas_ped_f.qb
c:\skate5\data\scripts\cas_ped_m.qb
c:\skate5\data\scripts\profile_ped.qb
c:\skate5\data\scripts\skater.qb
c:\skate5\data\scripts\debugger\debugger_names.qb
c:\skate5\data\scripts\debugger\mouse.qb
c:\skate5\data\scripts\debugger\view_object.qb
c:\skate5\data\scripts\engine\ButtonScripts.qb
c:\skate5\data\scripts\engine\camera.qb
c:\skate5\data\scripts\engine\controller_pulling.qb
c:\skate5\data\scripts\engine\debug.qb
c:\skate5\data\scripts\engine\EventLog.qb
c:\skate5\data\scripts\engine\gamecube.qb
c:\skate5\data\scripts\engine\lights.qb
c:\skate5\data\scripts\engine\movies.qb
c:\skate5\data\scripts\engine\reverb.qb
c:\skate5\data\scripts\engine\xbox_scripts.qb
c:\skate5\data\scripts\engine\menu\colormenu.qb
c:\skate5\data\scripts\engine\menu\consolemessage.qb
c:\skate5\data\scripts\engine\menu\dialogbox.qb
c:\skate5\data\scripts\engine\menu\helper_text.qb
c:\skate5\data\scripts\engine\menu\keyboard.qb
c:\skate5\data\scripts\engine\menu\lighttool.qb
c:\skate5\data\scripts\engine\menu\MenuButtonRemap.qb
c:\skate5\data\scripts\engine\menu\panelmessage.qb
c:\skate5\data\scripts\engine\menu\scalingmenu.qb
c:\skate5\data\scripts\engine\menu\sliderbar.qb
c:\skate5\data\scripts\engine\menu\timeofday.qb
c:\skate5\data\scripts\game\animevents.qb
c:\skate5\data\scripts\game\animtags.qb
c:\skate5\data\scripts\game\betting_guy.qb
c:\skate5\data\scripts\game\casutils.qb
c:\skate5\data\scripts\game\cas_logos.qb
c:\skate5\data\scripts\game\cas_parts.qb
c:\skate5\data\scripts\game\cas_skater_f.qb
c:\skate5\data\scripts\game\cas_skater_m.qb
c:\skate5\data\scripts\game\cas_skater_shared.qb
c:\skate5\data\scripts\game\cas_team.qb
c:\skate5\data\scripts\game\Comp_Scripts.qb
c:\skate5\data\scripts\game\cutscene.qb
c:\skate5\data\scripts\game\decks.qb
c:\skate5\data\scripts\game\deck_layers.qb
c:\skate5\data\scripts\game\EdPieces.qb
c:\skate5\data\scripts\game\EdPieces2.qb
c:\skate5\data\scripts\game\events.qb
c:\skate5\data\scripts\game\game.qb
c:\skate5\data\scripts\game\gameflow.qb
c:\skate5\data\scripts\game\goalattack.qb
c:\skate5\data\scripts\game\goal_utilities.qb
c:\skate5\data\scripts\game\graffiti.qb
c:\skate5\data\scripts\game\Levels.qb
c:\skate5\data\scripts\game\mapguy.qb
c:\skate5\data\scripts\game\motox_control.qb
c:\skate5\data\scripts\game\NSCustomParks.qb
c:\skate5\data\scripts\game\object.qb
c:\skate5\data\scripts\game\park_ed.qb
c:\skate5\data\scripts\game\ped.qb
c:\skate5\data\scripts\game\playervehiclesounds.qb
c:\skate5\data\scripts\game\player_controlled_vehicle.qb
c:\skate5\data\scripts\game\pro_anims.qb
c:\skate5\data\scripts\game\rigidbodysounds.qb
c:\skate5\data\scripts\game\scaling.qb
c:\skate5\data\scripts\game\Sk4_PedAnim.qb
c:\skate5\data\scripts\game\sk4_PedCollision.qb
c:\skate5\data\scripts\game\sk4_PedImpress.qb
c:\skate5\data\scripts\game\sk4_PedScripts.qb
c:\skate5\data\scripts\game\sk4_PedSecretReact.qb
c:\skate5\data\scripts\game\sK4_PedSkaterAI.qb
c:\skate5\data\scripts\game\sk4_PedTalking.qb
c:\skate5\data\scripts\game\sk4_PedVO.qb
c:\skate5\data\scripts\game\skeleton.qb
c:\skate5\data\scripts\game\skutils.qb
c:\skate5\data\scripts\game\startup.qb
c:\skate5\data\scripts\game\terrain.qb
c:\skate5\data\scripts\game\goals\goal_cat.qb
c:\skate5\data\scripts\game\goals\goal_collect.qb
c:\skate5\data\scripts\game\goals\goal_combo_scripts.qb
c:\skate5\data\scripts\game\goals\goal_competition.qb
c:\skate5\data\scripts\game\goals\goal_counter.qb
c:\skate5\data\scripts\game\goals\goal_countercombo.qb
c:\skate5\data\scripts\game\goals\goal_descriptions.qb
c:\skate5\data\scripts\game\goals\goal_film.qb
c:\skate5\data\scripts\game\goals\goal_find_gaps.qb
c:\skate5\data\scripts\game\goals\goal_gaps.qb
c:\skate5\data\scripts\game\goals\goal_highcombo.qb
c:\skate5\data\scripts\game\goals\goal_horse.qb
c:\skate5\data\scripts\game\goals\goal_kill.qb
c:\skate5\data\scripts\game\goals\goal_manager.qb
c:\skate5\data\scripts\game\goals\goal_oldskool.qb
c:\skate5\data\scripts\game\goals\goal_race.qb
c:\skate5\data\scripts\game\goals\goal_rewards.qb
c:\skate5\data\scripts\game\goals\goal_scores.qb
c:\skate5\data\scripts\game\goals\goal_score_scripts.qb
c:\skate5\data\scripts\game\goals\GOAL_Scripts.qb
c:\skate5\data\scripts\game\goals\goal_secret_tape.qb
c:\skate5\data\scripts\game\goals\goal_skate_letters.qb
c:\skate5\data\scripts\game\goals\goal_special.qb
c:\skate5\data\scripts\game\goals\goal_team_select.qb
c:\skate5\data\scripts\game\goals\goal_tetris.qb
c:\skate5\data\scripts\game\goals\goal_tips.qb
c:\skate5\data\scripts\game\goals\goal_tour.qb
c:\skate5\data\scripts\game\goals\goal_trickspot.qb
c:\skate5\data\scripts\game\goals\goal_untimed_collect.qb
c:\skate5\data\scripts\game\goal_editor\goal_editor.qb
c:\skate5\data\scripts\game\menu\boardshop.qb
c:\skate5\data\scripts\game\menu\casmenu.qb
c:\skate5\data\scripts\game\menu\casmenu_old.qb
c:\skate5\data\scripts\game\menu\catmenu.qb
c:\skate5\data\scripts\game\menu\chapter_info.qb
c:\skate5\data\scripts\game\menu\chapter_menu.qb
c:\skate5\data\scripts\game\menu\credits.qb
c:\skate5\data\scripts\game\menu\cutscenemenu.qb
c:\skate5\data\scripts\game\menu\displayoptions.qb
c:\skate5\data\scripts\game\menu\edit_skater.qb
c:\skate5\data\scripts\game\menu\edit_tricks_menu.qb
c:\skate5\data\scripts\game\menu\gamemenu.qb
c:\skate5\data\scripts\game\menu\game_progress_menu.qb
c:\skate5\data\scripts\game\menu\gap_menu.qb
c:\skate5\data\scripts\game\menu\goal_editor_menu.qb
c:\skate5\data\scripts\game\menu\high_scores_menu.qb
c:\skate5\data\scripts\game\menu\instructions_caf.qb
c:\skate5\data\scripts\game\menu\level_textures.qb
c:\skate5\data\scripts\game\menu\mainmenu.qb
c:\skate5\data\scripts\game\menu\memcard.qb
c:\skate5\data\scripts\game\menu\memcardmessages.qb
c:\skate5\data\scripts\game\menu\MenuSounds.qb
c:\skate5\data\scripts\game\menu\menutest.qb
c:\skate5\data\scripts\game\menu\models.qb
c:\skate5\data\scripts\game\menu\netmenu.qb
c:\skate5\data\scripts\game\menu\net_vault_menu.qb
c:\skate5\data\scripts\game\menu\NewScreenElementTest.qb
c:\skate5\data\scripts\game\menu\onlinestats.qb
c:\skate5\data\scripts\game\menu\optionsmenu.qb
c:\skate5\data\scripts\game\menu\panelstuff.qb
c:\skate5\data\scripts\game\menu\ParkEdMenu.qb
c:\skate5\data\scripts\game\menu\replay.qb
c:\skate5\data\scripts\game\menu\select_sponsor.qb
c:\skate5\data\scripts\game\menu\skateshop.qb
c:\skate5\data\scripts\game\menu\soundoptions.qb
c:\skate5\data\scripts\game\menu\sprites.qb
c:\skate5\data\scripts\game\menu\stats.qb
c:\skate5\data\scripts\game\menu\thememenu.qb
c:\skate5\data\scripts\game\menu\themes.qb
c:\skate5\data\scripts\game\menu\trickmenu.qb
c:\skate5\data\scripts\game\minigames\minigame_baseball.qb
c:\skate5\data\scripts\game\minigames\minigame_basketball.qb
c:\skate5\data\scripts\game\minigames\minigame_bet.qb
c:\skate5\data\scripts\game\minigames\minigame_fountain.qb
c:\skate5\data\scripts\game\minigames\minigame_height.qb
c:\skate5\data\scripts\game\minigames\minigame_pong.qb
c:\skate5\data\scripts\game\minigames\minigame_timedcombo.qb
c:\skate5\data\scripts\game\minigames\minigame_timer.qb
c:\skate5\data\scripts\game\minigames\minigame_utilities.qb
c:\skate5\data\scripts\game\misc\autotest.qb
c:\skate5\data\scripts\game\misc\car_scripts.qb
c:\skate5\data\scripts\game\misc\cash_icons.qb
c:\skate5\data\scripts\game\misc\cheats.qb
c:\skate5\data\scripts\game\misc\compress.qb
c:\skate5\data\scripts\game\misc\flags.qb
c:\skate5\data\scripts\game\misc\FrontEndCamAnims.qb
c:\skate5\data\scripts\game\misc\gameoptions.qb
c:\skate5\data\scripts\game\misc\global_flags.qb
c:\skate5\data\scripts\game\misc\helper.qb
c:\skate5\data\scripts\game\misc\helper_desc.qb
c:\skate5\data\scripts\game\misc\IK.qb
c:\skate5\data\scripts\game\misc\judges.qb
c:\skate5\data\scripts\game\misc\level_flags.qb
c:\skate5\data\scripts\game\misc\menu.qb
c:\skate5\data\scripts\game\misc\panel.qb
c:\skate5\data\scripts\game\misc\promenu.qb
c:\skate5\data\scripts\game\misc\proset.qb
c:\skate5\data\scripts\game\misc\records.qb
c:\skate5\data\scripts\game\misc\SK4_Scripts.qb
c:\skate5\data\scripts\game\misc\strings.qb
c:\skate5\data\scripts\game\misc\tagsdb.qb
c:\skate5\data\scripts\game\misc\warppoint.qb
c:\skate5\data\scripts\game\net\combo_mambo.qb
c:\skate5\data\scripts\game\net\ctf.qb
c:\skate5\data\scripts\game\net\firefight.qb
c:\skate5\data\scripts\game\net\horse.qb
c:\skate5\data\scripts\game\net\king.qb
c:\skate5\data\scripts\game\net\net.qb
c:\skate5\data\scripts\game\net\netmessages.qb
c:\skate5\data\scripts\game\net\netoptions.qb
c:\skate5\data\scripts\game\net\scorechallenge.qb
c:\skate5\data\scripts\game\net\slap.qb
c:\skate5\data\scripts\game\net\teamcheat.qb
c:\skate5\data\scripts\game\net\trick_attack.qb
c:\skate5\data\scripts\game\ped\Sk5_PedScripts.qb
c:\skate5\data\scripts\game\ped\Sk5_PedSkater.qb
c:\skate5\data\scripts\game\rail_editor\rail_editor.qb
c:\skate5\data\scripts\game\sfx\sfxmenu.qb
c:\skate5\data\scripts\game\sfx\sfx_car.qb
c:\skate5\data\scripts\game\sfx\sfx_ped.qb
c:\skate5\data\scripts\game\skater\airtricks.qb
c:\skate5\data\scripts\game\skater\alltricks.qb
c:\skate5\data\scripts\game\skater\anim.qb
c:\skate5\data\scripts\game\skater\bails.qb
c:\skate5\data\scripts\game\skater\createatrick.qb
c:\skate5\data\scripts\game\skater\grindlist.qb
c:\skate5\data\scripts\game\skater\grindscripts.qb
c:\skate5\data\scripts\game\skater\groundtricks.qb
c:\skate5\data\scripts\game\skater\iniskater_exceptions.qb
c:\skate5\data\scripts\game\skater\liptricks.qb
c:\skate5\data\scripts\game\skater\looptricks.qb
c:\skate5\data\scripts\game\skater\manualtricks.qb
c:\skate5\data\scripts\game\skater\physics.qb
c:\skate5\data\scripts\game\skater\pressuretricks.qb
c:\skate5\data\scripts\game\skater\protricks.qb
c:\skate5\data\scripts\game\skater\skater_misc.qb
c:\skate5\data\scripts\game\skater\skater_particlesys.qb
c:\skate5\data\scripts\game\skater\skater_procanim.qb
c:\skate5\data\scripts\game\skater\skater_profile.qb
c:\skate5\data\scripts\game\skater\skater_sfx.qb
c:\skate5\data\scripts\game\skater\skater_shoppingcart.qb
c:\skate5\data\scripts\game\skater\specialitems.qb
c:\skate5\data\scripts\game\skater\specialitems_bmx.qb
c:\skate5\data\scripts\game\skater\switch_control.qb
c:\skate5\data\scripts\game\skater\tricks.qb
c:\skate5\data\scripts\game\skater\walking_control.qb
c:\skate5\data\scripts\game\skater\walltricks.qb
c:\skate5\data\scripts\game\usr\AJC_Scripts.qb
c:\skate5\data\scripts\game\usr\ALF_Scripts.qb
c:\skate5\data\scripts\game\usr\BDJ_Scripts.qb
c:\skate5\data\scripts\game\usr\CJR_Scripts.qb
c:\skate5\data\scripts\game\usr\CPF_Scripts.qb
c:\skate5\data\scripts\game\usr\JEG_Scripts.qb
c:\skate5\data\scripts\game\usr\JKU_Scripts.qb
c:\skate5\data\scripts\game\usr\JS_Scripts.qb
c:\skate5\data\scripts\gamemodes\gamemode.qb
scriptkeys.ini#
Located in the "scripts" folder.
; This file contains interface definitions for script keys
Class KeyFade
{
Mode = In
Duration = 100
// @nextparm | Mode | list | In | Out | done
// @nextparm | Duration | slidernum | 0 | 100 | 1
// @nodecolor | [128,128,128]
// @template | print | // My script to do Fade<Mode>
// @template | printif | Mode | In | FadeIn Dur=<Duration>
// @template | printif | Mode | Out | FadeOut Dur=<Duration>
}
; This class is internally defined DO NOT REMOVE
Class KeyObj
{
Type Enable
{
Node = [none]
// @nextparm | Node | node
// @nextdesc | Node | Determines the node that should be enabled at this time
}
Type Disable
{
Node = [none]
// @nextparm | Node | node
// @nextdesc | Node | Determines the node that should be disabled at this time
}
}
terrains.lst#
Located in the "scripts" folder.
TERRAIN_DEFAULT
TERRAIN_CONCSMOOTH
TERRAIN_CONCROUGH
TERRAIN_METALSMOOTH
TERRAIN_METALROUGH
TERRAIN_METALCORRUGATED
TERRAIN_METALGRATING
TERRAIN_METALTIN
TERRAIN_WOOD
TERRAIN_WOODMASONITE
TERRAIN_WOODPLYWOOD
TERRAIN_WOODFLIMSY
TERRAIN_WOODSHINGLE
TERRAIN_WOODPIER
TERRAIN_BRICK
TERRAIN_TILE
TERRAIN_ASPHALT
TERRAIN_ROCK
TERRAIN_GRAVEL
TERRAIN_SIDEWALK
TERRAIN_GRASS
TERRAIN_GRASSDRIED
TERRAIN_DIRT
TERRAIN_DIRTPACKED
TERRAIN_WATER
TERRAIN_ICE
TERRAIN_SNOW
TERRAIN_SAND
TERRAIN_PLEXIGLASS
TERRAIN_FIBERGLASS
TERRAIN_CARPET
TERRAIN_CONVEYOR
TERRAIN_CHAINLINK
TERRAIN_METALFUTURE
TERRAIN_GENERIC1
TERRAIN_GENERIC2
TERRAIN_WHEELS
TERRAIN_WETCONC
TERRAIN_METALFENCE
TERRAIN_GRINDTRAIN
TERRAIN_GRINDROPE
TERRAIN_CONCCRUSTY
TERRAIN_FLOAT
TERRAIN_GARBAGE
TERRAIN_GLASS
TERRAIN_BRICKLARGE
TERRAIN_LEAVES
TERRAIN_MUD
TERRAIN_SKYLIGHTS
TERRAIN_TINROOF
node_compress.txt#
Located in the "scripts/engine" folder.
; node_compress.q
; a set of common sub-expressions that can be replaced in a .qn file
; this file is parsed by a ruby script to perform the compression
; so the syntax is quite important
;
; Place the larger structures first
; all the structure names must start with "ncomp_"
ncomp_occlusion = {
Class = LevelGeometry
Occluder
CreatedAtStart
CollisionMode = Geometry
}
ncomp_occlusion_notcreated = {
Class = LevelGeometry
Occluder
CollisionMode = Geometry
}
ncomp_conc_rail = {
Class = RailNode
Type = Concrete
CreatedAtStart
TerrainType = TERRAIN_CONCSMOOTH
}
ncomp_metal_rail = {
Class = RailNode
Type = Metal
CreatedAtStart
TerrainType = TERRAIN_METALSMOOTH
}
ncomp_wood_rail = {
Class = RailNode
Type = Wood
CreatedAtStart
TerrainType = TERRAIN_WOO
}
ncomp_default_rail = {
Class = RailNode
Type = Generic
CreatedAtStart
TerrainType = TERRAIN_DEFAULT
}
ncomp_wire_rail = {
Class = RailNode
Type = Wire
CreatedAtStart
TerrainType = TERRAIN_GRINDWIRE
}
ncomp_LO_default = {
Class = LevelObject
Type = Normal
CollisionMode = Geometry
SuspendDistance = 0
lod_dist1 = 200
lod_dist2 = 201
}
ncomp_LO_default2 = {
Class = LevelObject
Type = Normal
CollisionMode = Geometry
SuspendDistance = 0
}
ncomp_waypoint_default = {
Class = Waypoint
Type = Default
CreatedAtStart
}
ncomp_PedAI_default = {
Class = Waypoint
Type = PedAI
CreatedAtStart
Continue
PedType = Skate
Priority = Normal
ContinueWeight = 1.0
AdjustSpeedPercent = 50.0
Acceleration = 500.0
SkateAction = Continue
JumpHeight = 60.0
}
ncomp_proxim_box = {
Class = ProximNode
Type = Camera
ProximObject
RenderToViewport
SelectRenderOnly
Shape = BoundingBox
}
ncomp_proxim_defaults = {
Class = ProximNode
Type = Camera
ProximObject
RenderToViewport
SelectRenderOnly
}
ncomp_goal_arrow = {
Class = GameObject
Type = Goal_Arrow
AbsentInNetGames
Model = "goalarrow\goalarrow.mdl"
SuspendDistance = 0
lod_dist1 = 400
lod_dist2 = 401
}
ncomp_ped_stuff = {
AbsentInNetGames
SkeletonName = THPS5_human
AnimName = animload_THPS5_human
}
ncomp_level_light = {
Class = LevelLight
CreatedAtStart
Brightness = 0
}
ncomp_level_light2 = {
Class = LevelLight
CreatedAtStart
}
ncomp_car_waypoint = {
Class = Waypoint
Type = DecelForTurn
CreatedAtStart
SpawnObjScript = Car_DecelForTurn01
}
ncomp_car_waypoint2 = {
Class = Waypoint
Type = DecelForTurn
CreatedAtStart
}
ncomp_bouncy_defaults = {
coeff_restitution = 0.3
coeff_friction = 1.0
skater_collision_impulse_factor = .7
skater_collision_rotation_factor = 0
skater_collision_assent = 5
}
ncomp_emitter_box = {
Class = EmitterObject
Type = BoundingBox
}
ncomp_LO = {
Class = LevelObject
Type = Normal
CreatedAtStart
CollisionMode = Geometry
SuspendDistance = 0
lod_dist1 = 400
lod_dist2 = 401
}
ncomp_LO_2 = {
Class = LevelObject
Type = Normal
CreatedAtStart
CollisionMode = Geometry
}
ncomp_ghost_401 = {
Class = GameObject
Type = Ghost
CreatedAtStart
AbsentInNetGames
Model = "none"
SuspendDistance = 0
lod_dist1 = 400
lod_dist2 = 401
}
ncomp_ghost_obj = {
Class = GameObject
Type = Ghost
CreatedAtStart
AbsentInNetGames
Model = "none"
}
ncomp_simple_waypoint = {
Class = Waypoint
CreatedAtStart
}
ncomp_proxim_shpere = {
Class = ProximNode
Type = Camera
CreatedAtStart
RenderToViewport
SelectRenderOnly
Shape = Sphere
}
ncomp_lod_suspend_dist1_200 = {
SuspendDistance = 0
lod_dist1 = 200
lod_dist2 = 201
}
ncomp_lod_dist1_200 = {
lod_dist1 = 200
lod_dist2 = 201
}
ncomp_level_geometry = {
Class = LevelGeometry
CreatedAtStart
CollisionMode = Geometry
}
ncomp_level_geometry_NC = {
Class = LevelGeometry
CollisionMode = Geometry
}
ncomp_collision_mode_geometry = {
CollisionMode = Geometry
}
particlegen.ms#
Located in the "scripts/templates" folder. A MAXScript file for particle systems.
-- MAXScript code to generate templates for particle system scripts
-- aml 5-6-01
nd = nsGetNode()
--nsOpen "ActivateAllParticleSystems"
--------------------------------------------- Start
--if (not nsGet "CreatedAtStart" == true) then
--(
-- nsOutNCR "// "
--)
--
--nsOutNCR "CreateParticleSystem name=Particle_UnNamed"
--
--if (nsGet "EmitScript" == "[UseParams]") then
--(
-- nsOutNCR (" emitscript=EmitScript" + nd.name)
--)
--else
--(
-- nsOutNCR " emitscript=<EmitScript>"
--)
--
--if (nsGet "UpdateScript" != "[None]" AND nsGet "UpdateScript" != "") then
--(
-- nsOutNCR " updatescript=<UpdateScript>"
--)
--
-- Strip texture extension
--tex = nsGet "Texture"
--pos = findstring tex "."
--if (pos != undefined) then
--(
-- tex = substring tex 1 (pos-1)
--)
--
--nsOutNCR (" texture=" + tex + " blendmode=<BlendMode> fix=<FixedAlpha>")
--
--if (not nsGet "Params" == "[None]") then
--(
-- nsOut " params=<Params>"
--)
--else
--(
-- nsOut ""
--)
--
--------------------------------------------- End
--nsClose()
nsOpen "LoadAllParticleTextures"
tex = nsGet "Texture"
pos = findstring tex "."
if (pos != undefined) then
(
tex = substring tex 1 (pos-1)
)
nsOutOnce ("LoadParticleTexture \"particles\\" + tex + "\"")
nsClose()
-- Create the emit script
-- We shouldn't generate a script if an alternate EmitScript is specified
if (nsGet "EmitScript" == "[UseParams]") then
(
nsOpen("EmitScript" + nd.name)
nsOut ("// Auto generated Emitter Script for " + nd.name)
-- Write out the node's position
pos = nsGetPos(nd)
posX = nsConvVal(pos.x) as String
posY = nsConvVal(pos.y) as String
posZ = nsConvVal(-pos.z) as String
nsOutNCR ("setpos pos=")
nsOut ("(" + posX + "," + posY + "," + posZ + ")")
nsOut ("setlife max=" + nsGet "LifetimeMax" as String)
nsOut ("setanglespread spread=" + nsGet "AngleSpread" as String)
nsOut ("setspeedrange min=" + nsGet "SpeedMin" as String + " max=" + nsGet "SpeedMax" as String)
nsOut ("setemitrange width=" + nsGet "EmitWidth" as String + " height=" + nsGet "EmitHeight" as String)
nsOutNCR "setforce force=("
nsOutNCR (nsGet "Force_X" as String + ",")
nsOutNCR (nsGet "Force_Y" as String + ",")
nsOut (nsGet "Force_Z" as String + ")")
nsOutNCR "setemittarget target=("
nsOutNCR (nsGet "EmitTarget_X" as String + ",")
nsOutNCR (nsGet "EmitTarget_Y" as String + ",")
nsOut (nsGet "EmitTarget_Z" as String + ")")
nsOut ("setparticlesize sw=" + nsGet "StartWidth" as String + " ew=" + nsGet "EndWidth" as String)
c = nsGet "StartRGB"
ca = nsGet "StartAlpha"
r = (c.r as Integer) as String
g = (c.g as Integer) as String
b = (c.b as Integer) as String
a = (ca as Integer) as String
nsOutNCR ("setcolor sr=" + r + " sg=" + g + " sb=" + b + " sa=" + a)
if (nsGet "UseMidTime" == true) then
(
c = nsGet "MidRGB"
ca = nsGet "MidAlpha"
r = (c.r as Integer) as String
g = (c.g as Integer) as String
b = (c.b as Integer) as String
a = (ca as Integer) as String
nsOutNCR (" mr=" + r + " mg=" + g + " mb=" + b + " ma=" + a)
)
c = nsGet "EndRGB"
ca = nsGet "EndAlpha"
r = (c.r as Integer) as String
g = (c.g as Integer) as String
b = (c.b as Integer) as String
a = (ca as Integer) as String
nsOutNCR (" er=" + r + " eg=" + g + " eb=" + b + " ea=" + a)
if (nsGet "UseMidTime" == true) then
(
nsOut (" midtime=" + (nsGet "MidTime" as Integer) as String)
)
else
(
nsOut ""
)
nsOut ("Buildpath " as String)
if (nsGet "UsePulseEmit" == true) then
(
nsOut "begin"
if (nsGet "RandomEmitRate" == true) then
(
rndA = nsGetElement (nsGet "EmitRate1Rnd") 0
rndB = nsGetElement (nsGet "EmitRate1Rnd") 1
nsOut (" emitrate rate=randomrange (" + rndA + "," + rndB + ")")
)
else
(
nsOut (" emitrate rate=" + (nsGet "EmitRate1" as Integer) as String)
)
if (nsGet "RandomEmitWait" == true) then
(
rndA = nsGetElement (nsGet "EmitRate1DelayRnd") 0
rndB = nsGetElement (nsGet "EmitRate1DelayRnd") 1
nsOut (" wait randomrange (" + rndA + "," + rndB + ") frames")
)
else
(
nsOut (" wait " + (nsGet "EmitRate1Delay" as Integer) as String + " frames")
)
if (nsGet "RandomEmitRate" == true) then
(
rndA = nsGetElement (nsGet "EmitRate2Rnd") 0
rndB = nsGetElement (nsGet "EmitRate2Rnd") 1
nsOut (" emitrate rate=randomrange (" + rndA + "," + rndB + ")")
)
else
(
nsOut (" emitrate rate=" + (nsGet "EmitRate2" as Integer) as String)
)
if (nsGet "RandomEmitWait" == true) then
(
rndA = nsGetElement (nsGet "EmitRate2DelayRnd") 0
rndB = nsGetElement (nsGet "EmitRate2DelayRnd") 1
nsOut (" wait randomrange (" + rndA + "," + rndB + ") frames")
)
else
(
nsOut (" wait " + (nsGet "EmitRate2Delay" as Integer) as String + " frames")
)
nsOut "repeat"
)
else
(
nsOut ("emitrate rate=" + (nsGet "EmitRate" as Integer) as String)
)
nsClose()
)
-- Create the trigger script for the node we're being ran on
nsOpen()
nsOut "// Particle system creation script template v1"
nsOut ("// Node: " + nd.name)
nsOut "if not ParticleExists name=Particle_UnNamed"
nsOutNCR "CreateParticleSystem name=Particle_UnNamed"
if (nsGet "EmitScript" == "[UseParams]") then
(
nsOutNCR (" emitscript=EmitScript" + nd.name)
)
else
(
nsOutNCR " emitscript=<EmitScript>"
)
if (nsGet "UpdateScript" != "[None]" AND nsGet "UpdateScript" != "") then
(
nsOutNCR " updatescript=<UpdateScript>"
)
-- Compute a default value for the Max Particles setting
-- Should only apply
-- Strip texture extension
tex = nsGet "Texture"
pos = findstring tex "."
if (pos != undefined) then
(
tex = substring tex 1 (pos-1)
)
nsOutNCR (" texture=" + tex + " blendmode=<BlendMode> fix=<FixedAlpha>")
if (nsGet "Params" != "") then
(
nsOutNCR " params=<Params>"
)
nsOutNCR " type=<Type>"
nsOut " MaxStreams=<MaxStreams>"
--else
--(
-- nsOut ""
--)
nsOut "endif"
nsClose()
sfpemit.ms#
Located in the "scripts/templates" folder. A MAXScript file related to screen facing poly emitters.
-- sfpemit.ms
-- Screen Facing Poly Emit script generation script
nd = nsGetNode()
pos = nsGetPos nd
mode = nsGet "SFP_Effect"
nsOpen()
nsOutNCR "setpos pos=("
nsOutNCR (pos.x as String)
nsOutNCR ","
nsOutNCR (pos.y as String)
nsOutNCR ","
nsOutNCR ((-pos.z) as String)
nsOut ")"
width = nsGetWidth nd
height = nsGetHeight nd
nsOutNCR "setparticlesize sw="
nsOutNCR (width as String)
nsOutNCR " sh="
nsOut (height as String)
fn DumpColor corner color alph =
(
nsOutNCR "setcolor corner="
nsOutNCR ((corner as Integer) as String)
nsOutNCR " er="
nsOutNCR ((color.r as Integer) as String)
nsOutNCR " eg="
nsOutNCR ((color.g as Integer) as String)
nsOutNCR " eb="
nsOutNCR ((color.b as Integer) as String)
nsOutNCR " ea="
nsOut ((alph as Integer) as String)
)
if (mode == "Flat") then
(
color = nsGet "Color"
alph = nsGet "Alpha"
DumpColor 0 color alph
)
else if (mode == "Shaded") then
(
for i = 0 to 3 do
(
color = nsGet ("Corner" + (i as String))
alph = nsGet ("Corner" + (i as String) + "A")
DumpColor i color alph
)
)
else if (mode == "Smooth") then
(
color = nsGet "ColorInside"
alph = nsGet "ColorInsideA"
DumpColor 0 color alph
color = nsGet "ColorOutside"
alph = nsGet "ColorOutsideA"
DumpColor 1 color alph
)
else if (mode == "Glow" or
mode == "Star" or
mode == "SmoothStar") then
(
color = nsGet "Center"
alph = nsGet "CenterA"
DumpColor 0 color alph
color = nsGet "Mid"
alph = nsGet "MidA"
DumpColor 1 color alph
color = nsGet "Out"
alph = nsGet "OutA"
DumpColor 2 color alph
)
else if (mode == "Line" or
mode == "Ribbon") then
(
color = nsGet "Start"
alph = nsGet "StartA"
DumpColor 0 color alph
color = nsGet "End"
alph = nsGet "EndA"
DumpColor 1 color alph
)
else if (mode == "RibbonTrail") then
(
color = nsGet "Color"
alph = nsGet "Alpha"
DumpColor 0 color alph
nColors = nsGetColorSize "History"
for i = 0 to nColors-1 do
(
color = nsGetColor "History" i
cnum = i+1
DumpColor cnum color color.a
)
)
else if (mode == "SmoothRibbon" or
mode == "GlowRibbonTrail") then
(
color = nsGet "Color0"
alph = nsGet "Alpha0"
DumpColor 0 color alph
color = nsGet "Color1"
alph = nsGet "Alpha1"
DumpColor 1 color alph
color = nsGet "Color2"
alph = nsGet "Alpha2"
DumpColor 2 color alph
color = nsGet "Color3"
alph = nsGet "Alpha3"
DumpColor 3 color alph
nColors = nsGetColorSize "History"
for i = 0 to nColors-1 do
(
color = nsGetColor "History" i
cnum = i+4
DumpColor cnum color color.a
)
)
nsOut "emit num=1"
nsClose()
sfpgen.ms#
Located in the "scripts/templates" folder. A MAXScript file related to screen facing polys.
-- SFPType
nd = nsGetNode()
LevelName = nsGetLevel()
type = nsGet "SFP_Effect"
emitscript = nsGetEmitScript()
texname = nsGetTexName nd
if (texname == undefined) then ( texname = "" )
nsOpen (LevelName + "SFPLoad")
if (texname != "") then
(
nsOutOnce ("LoadSFPTexture levels/" + LevelName + "/sfp/" + texname)
)
nsClose()
nsOpen (LevelName + "SFPUnload")
if (texname != "") then
(
nsOutOnce ("UnloadSFPTexture levels/" + LevelName + "/sfp/" + texname)
)
nsClose()
-- Dump out the script for this particular particle system
-- Emitscripts are generated through sfpemit.ms
nsOpen()
maxPart = nsGetMaxParticles()
if (nd.material != undefined) then
(
alph = nsGetFixedAlpha nd.material 1
BlendMode = nsGetBlendMode nd.material 1
)
else
(
alph = ""
BlendMode = ""
)
if (nd.material == undefined) then (matname = "") else (matname = nd.material.name)
pname = nsReplace (matname + "_" + type) " " "_"
if (pname == undefined) then (pname = "")
if (maxPart == -1) then (maxPart = 1)
nsOutNCR ("CreateParticleSystem name=" + pname + " max=" + maxPart as String)
if (BlendMode != "") then
(
nsOutNCR (" blendmode=" + BlendMode + " fix=" + alph as String + " type=" + type + " texture=" + texname)
)
if (emitscript != "") then
(
nsOutNCR (" emitscript=" + emitscript)
)
if (type == "Glow" or
type == "Star" or
type == "SmoothStar" ) then
(
seg = nsGet "Segments"
nsOutNCR " segments="
nsOutNCR (seg as String)
split = nsGet "Split"
nsOutNCR " split="
nsOutNCR (split as String)
)
if (type == "Line" or
type == "Ribbon") then
(
hist = nsGet "History"
nsOutNCR " history="
nsOutNCR (hist as String)
)
if (type == "SmoothRibbon" or
type == "RibbonTrial") then
(
hist = nsGetColorSize "History"
nsOutNCR " history="
nsOutNCR (hist as String)
)
if (type == "GlowRibbonTrail") then
(
hist = nsGetColorSize "History"
nsOutNCR " history="
nsOutNCR (hist as String)
seg = nsGet "Segments"
nsOutNCR " segments="
nsOutNCR (seg as String)
split = nsGet "Split"
nsOutNCR " split="
nsOutNCR (split as String)
)
nsOut ""
nsClose()
Oddities#
School II Objects#
Just outside the playable space at the start of School II are several unused objects. They can be most easily found by either enabling the Moon Gravity cheat or by using Create-A-Goal's camera.
All the objects are directly from the original THPS2 incarnation of the stage. This includes a Hall Pass pickup, the original school bell meshes, and the rotating piece of the rooftop's AC unit, plus all the 'bouncy' objects like a metal barrel, a wooden crate, and a traffic pylon.

|
The Tony Hawk series | |
|---|---|
|
Pro Skater | |
|
PlayStation |
Tony Hawk's Pro Skater (Prototypes) • Pro Skater 2 (Prototypes) • Pro Skater 3 (Prototypes) • Pro Skater 4 |
|
Nintendo 64 |
|
|
Dreamcast |
|
|
PlayStation 2, GameCube |
|
|
Xbox |
|
|
Windows |
Pro Skater 2 • Pro Skater 3 • Pro Skater 4 • Pro Skater HD • Pro Skater 3 + 4 |
|
Mac OS Classic, Mac OS X |
|
|
Game Boy Color |
|
|
Game Boy Advance |
|
|
PlayStation 3, Xbox 360 |
|
|
PlayStation 4, Xbox One |
|
|
PlayStation 5, Xbox Series X and S, Nintendo Switch, Nintendo Switch 2 |
|
|
Story-Based | |
|
PlayStation 2 |
Tony Hawk's Underground (Prototypes) • Underground 2 • Project 8 • Proving Ground |
|
Xbox |
|
|
GameCube |
|
|
Windows |
|
|
PlayStation Portable |
|
|
Game Boy Advance |
|
|
Nintendo DS |
|
|
Xbox 360, PlayStation 3 |
|
|
Wii |
|
|
Spin-offs/Related | |
|
GameCube, PlayStation 2, Xbox |
|
|
Game Boy Advance |
|
|
Nintendo DS |
|
|
See Also | |