Shaun White Skateboarding
Shaun White Skateboarding is Ubisoft Montreal’s 2010 skateboarding game on an early Anvil (Scimitar) engine. Its class layouts and container versions follow the Assassin’s Creed II generation rather than the later engine of Riders Republic. Inferred · from the AC2-profile readers fitting its data
The recorded PC build has the executable Shaun White Skateboarding.exe, 26,954,360 bytes, SHA-256 c7eb65c89ab016694a2f60a5f586c451a5a02bf05f226bffc943d256128d35c4. Every observation in the wiki’s Shaun White pages comes from this executable and the data installed beside it. Observed
The game is set in the city of New Harmony, whose districts the player reaches by monorail. Observed
Installed data
Section titled “Installed data”The base install holds 33 forge archives named DataPC*.forge beside the executable, 4,239,261,993 bytes in all, and they hold 3,894 entries. Every one of the 33 archive headers carries the scimitar signature and forge version 26. Proven · all 33 forges
The archives fall into these groups. Observed
| Group | Archives | Content |
|---|---|---|
| Shared | DataPC.forge, DataPC_extra.forge |
Bootstrap resources, localization and GUI data |
| Levels 01 to 06 | DataPC_01.forge to DataPC_06.forge |
One world each, with its cells |
| Level variants | _FYM, _Multi, _Robot_01, _Robot_02, _Stronghold suffixes |
Further worlds of their own, not overlays on a base level |
| Special worlds | DataPC_SW.forge, DataPC_Main_Menu.forge, DataPC_Customization.forge |
The Shaun White world, the menu and character selection |
| Customization | DataPC_*CustomizationData.forge |
Character and customization data |
Beside the executable are also the shader bundles ekshadersPChigh.bin, ekshadersPCmed.bin and ekshadersPClow.bin (see SDB2). The installed copy examined also carries .forge.patch files beside several forges; their layout has not been examined. Unknown
The patched build
Section titled “The patched build”A patched copy of the game (executable dated 2011-08-23, forges dated 2010-10-27) differs from the recorded build in its
data. Observed It holds 40 forges: the same 33 DataPC* data forges plus seven DataPC_StreamedSounds*.forge.
Observed · one patched copy The sound forges are DataPC_StreamedSounds.forge, with no language in its name, and one for each of six languages: Eng, Fre, Ger, Ita, Rus and Spa (DataPC_StreamedSoundsEng.forge and so on). Observed · one patched copy Its text is Russian only: its DataPC.forge holds the Russian text packages and no other language’s. Observed · one patched copy
| Recorded build | Patched build | Confidence | |
|---|---|---|---|
DataPC.forge |
38 entries, 20,545,833 bytes | 11 entries, 19,661,097 bytes | Observed |
| Entries of the 33 data forges | 3,894 | 3,867 | Observed |
| Other 32 data forges | Same version, entry count and size as in the recorded build; 10 of them (dated 2010-10-19) byte-identical, 22 with other content | Observed | |
DataPC_01.forge |
Byte-identical | Observed |
Two independent readers of the forge tables, entry headers and block chunk tables agree on the patched DataPC.forge;
its Graphic Bootstrap entry keeps the same blocks (26 bytes stored raw, then 16 chunks decoding to 512,822 bytes).
No data forge of the patched copy has a bad chunk checksum, an entry header disagreeing with its records, or blocks that
do not fill their payload. Observed · every data forge of the patched copy
The seven sound forges hold 10,308 entries besides their GlobalMetaFiles, and none of them begins with the
data block magic: their payloads are framed some other way. Observed
Videos
Section titled “Videos”The game’s videos are loose Bink files under Videos/, not forge entries: the patched copy holds 77 .bik files,
253.7 MB and 32,596 frames in all, every one Bink 1 of revision i, played through the binkw32.dll (version 1.9u)
beside the executable. None of the 40 forges of that copy has a Bink entry, by their name records and by a byte scan.
Observed · the patched copy Five are top-level clips, three play at start-up and 69 are trick-book clips. Five carry
audio: four clips with four tracks each at 48 kHz, and head_tv.bik in stereo at 44.1 kHz. Observed · the patched copy
The four-track clips (dreamsequence, q16_sq13, startup/short_intro, startup/ubilogo_1280x720) carry, as track ids
0 to 3, a stereo, two mono and a stereo track, all DCT-coded; head_tv.bik has a single stereo DCT track. Observed · all 77 files
The game plays all four tracks together at one volume: a loop calls BinkSetVolume for the four track ids with the same
computed value. Observed · static reading of the executable The tracks are each mastered to full scale, so their sum
reaches the 16-bit limits in 11,016 of the 10,471,680 mixed samples (9,560 in dreamsequence, 1,456 in short_intro);
the clipping is in the material. Observed · every audio clip decoded and mixed
Each frame is decoded into separate Y, U, V and alpha planes of one byte per sample, with sizes rounded up to multiples
of 8 (chroma at half size); the game uploads the Y plane and the two chroma planes as separate textures. Observed · static reading of the executable and of binkw32.dll
The first intro frame is drawn as one quad: its vertex declaration is stream 0 with a FLOAT3 POSITION0 at byte 0 and a
FLOAT2 TEXCOORD0 at 12, a stride of 20, and its pixel program samples the Y, Cr and Cb planes, three L8 textures, at samplers
0, 1 and 2. Observed · the game’s first presented frame, recorded Its programs, run on that frame’s recorded constants and planes,
give at every one of the 921,600 pixels the same RGB as an independent BT.601 conversion, to the last bit.
Proven · the first intro quad’s programs run on its recorded inputs
Every file’s header reads as below, its frame index is increasing and inside the file, and splitting the frames by it gives the same packets as FFmpeg 6.1.1, frame for frame. Proven · all 77 files of the patched copy
Little-endian. The tables after offset 44 follow one another with no gap.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 4 | char[4] = BIKi | magic and revision | Proven | |
| 0x4 | 4 | u32 | file size minus 8 | Proven | |
| 0x8 | 4 | u32 | frame count | Proven | |
| 0xC | 4 | u32 | largest frame size | Proven | |
| 0x10 | 4 | u32 | duplicated frames | Sourced | |
| 0x14 | 4 | u32 | width | Proven | |
| 0x18 | 4 | u32 | height | Proven | |
| 0x1C | 4 | u32 | frame rate numerator | Proven | |
| 0x20 | 4 | u32 | frame rate denominator | Proven | |
| 0x24 | 4 | u32 | video flags | Proven | 0x00100000 alpha plane, 0x00020000 grey; 0 in all 77 files |
| 0x28 | 4 | u32 | audio track count | Proven | |
| 0x2C | 4 per track | u32[] | largest decoded audio size | Proven | one per track |
| after those | 4 per track | u16, u16 | sample rate and audio flags | Proven | flags 0x4000 16-bit, 0x2000 stereo, 0x1000 DCT; 0x7000 and 0x5000 in these files |
| after those | 4 per track | u32[] | track ids | Proven | |
| after those | 4 per frame | u32[] | frame offsets | Proven | bit 0 set on a keyframe |
A frame’s packet starts, for each audio track, with a u32 chunk size and then, in a non-empty chunk, a u32 count of the
PCM bytes the chunk decodes to and the coded blocks. A chunk holds as many whole blocks as fit: usually one, but the first
chunk of a clip holds 18 or 19, so a decoder has to go on decoding inside a chunk (the first chunk of track 1 of q16_sq13
decodes to 72,960 bytes, 19 blocks of 1,920 16-bit samples). Observed · every audio clip, decoded within one step of FFmpeg 6.1.1’s output
BinkGetFrameBuffersInfo (in binkw32.dll 1.9u) fills a u32 buffer count (1 for a file of one frame, else 2), the luma
width and height and the chroma width and height ((width + 1) / 2), each rounded up to a multiple of 8, a zero word, then
per buffer four planes (Y, U, V, alpha) of 12 bytes: u32 used, the buffer pointer, u32 pitch. Used is 1 for Y, U and V and
the alpha flag for the fourth. Observed · static reading of binkw32.dll 1.9u The game reads these fields of the BINK
handle directly: +0x08 frame count, +0x0C and +0x10 the current frame, +0x14 and +0x18 the frame rate, +0x20 the
flags, +0xBC the registered buffers, +0xE0 the audio track count, +0x2A4 the width and +0x2A8 the height; its
BinkGoto calls count frames from 1. Observed · static reading of the executable’s call sites
Levels
Section titled “Levels”The six numbered forges are the game’s main levels, named by the game’s district table and the strings of the English text (localization). Each name below carries the id of its string. Observed
| Forge | World id | District | String id | Evidence |
|---|---|---|---|---|
DataPC_01.forge |
0x47AF3893 |
The Midtown Quarter | 11233 | Level 01 holds the three STRIDE challenges that string 12861 places in THE MIDTOWN QUARTER; stations 0 and 1 (strings 11262, 11263) travel to this world. Observed |
DataPC_02.forge |
0x47AF38BE |
The Downtown Quarter | 11238 | Level 02 holds the WENDY’S challenges that string 12862 places in THE DOWNTOWN QUARTER; station 2 (string 11264) travels to this world. Observed |
DataPC_03.forge |
0x47AF38E9 |
The Rising Island | 11242 | Station 3 (string 11265) travels to this world, whose content is an island. Observed |
DataPC_04.forge |
0x47AF3914 |
The Ministry Quarter | 11249 | The district table lists world 04 and the Stronghold world under this district; the station of level 04 is named Restricted Area Station (string 11266). Observed |
DataPC_05.forge |
0x817B7E55 |
The Prison Quarter | 11253 | The district table lists this world under this district. Observed |
DataPC_06.forge |
0x47AF396A |
none | none | No district lists this world; it appears only in mission tables. The entities include 06_Buildings_MinistryHQ, but no string names a Ministry headquarters. Observed |
DataPC_SW.forge |
0x954D44AF |
Shaun World | 11271, 11272 | The district table lists this world under this district; station 5 (string 11269, Shaun Station) travels to it. Observed |
The names come from the game’s own district table, in the data block of the Game Bootstrap entry (entry 2) of DataPC.forge. A district object (class 0x8DF4697E) holds a string reference (class 0x81A7045D, the string id at offset 12 of the class word), then the ids of its worlds, then its sub-areas (class 0xBE759080). The monorail station table is in the same block, with records of 114 bytes: the name string id at offset 0 and the world id at offset 89 (offset 129 for the Shaun station). Observed
| District | Worlds | Sub-areas (string ids) |
|---|---|---|
| The Midtown Quarter (11233) | 01 | The Common Place 11234, Midtown 11235, The Safe Harbor 11236 |
| The Downtown Quarter (11238) | 02 | The Bureau of Edification 11239, Conformity Square 11240, Tranquility Square 11241 |
| The Rising Island (11242) | 03 | The Underground 11247, The Park 11248 |
| The Ministry Quarter (11249) | 04, 04_Stronghold (0x8B56B7D1) |
The Department of Truth 11250, The Department of Energy 11251, The Restricted Area 11252 |
| The Prison Quarter (11253) | 05 | The Department of Enlightenment 11254 |
| Shaun World (11271) | SW | Shaun World 11272 |
The station of level 04 is named Restricted Area Station (11266), but the world belongs to The Ministry Quarter, of which The Restricted Area is a sub-area. The English strings 11262 to 11269 name six stations: Midtown (01), Safe Harbor (01), Downtown (02), Rising Island (03), Restricted Area (04) and Shaun (SW). The in-game city map shows the Restricted Area node with the panel text of string 11249. Observed
Strings 12635 to 12638 (Conformity Square Rooftops, Rising Island Park, Restricted Area Complex, SkateLab) are four string references in the same block, each followed by a world id of a multiplayer world: 02_Multi, 03_multi, 04_Multi and 05_MULTI. They name those worlds, not levels 04 and 05. Observed
Each of the four multiplayer worlds (02_Multi 0x84798472, 03_multi 0x8CC64B8E, 04_Multi 0x8F9A90C4, 05_MULTI 0x89FC9A5A) holds exactly one entity of class 0x5D54B379, MultiPointPlayerSpawner, named MULTI_Spawner_Player_001 (04_MULTI_Spawner_Player_001 in 04); the single-player worlds use PlayerSpawner, class 0xE74CB43D. Observed · all four multiplayer forges
The other Spawner_Scatter, TeamA, TeamB and Together_ entities of these worlds are further spawn groups of the multiplayer modes. Inferred · from their names
Arriving in 02, 04 or 05, the skater’s feet are at that spawner’s position. Observed · one arrival in each
Data systems
Section titled “Data systems”The container is a forge of version 26 whose entries are framed as data blocks compressed with LZO2A. Proven · all 33 forges
- Objects and classes: object streams, class ids, entities and visuals with LOD selectors.
- World: world roots, cells, placement, start-up and world travel.
- Geometry: meshes and vertex layout.
- Materials and textures: material body, UV rotation, render state, influence, texture maps and format codes.
- Shaders and light: SDB2 bundles, baked lighting, lights and the sky light.
- Collision, grinds, trees and text: mesh shapes, surfaces, skate guidance, RealTree meshes and localization.
Forge version 26 and the class layouts match the Assassin’s Creed II generation of Anvil, but an exact engine revision is not established. Unknown
What is known
| System | Claims | Confidence | Proven or observed |
|---|---|---|---|
| Overview | 6 | 83% | |
| Archives and files | 46 | 78% | |
| Data model | 120 | 85% | |
| World and streaming | 51 | 84% | |
| Geometry | 144 | 81% | |
| Materials | 170 | 78% | |
| Shaders | 66 | 86% | |
| Textures | 68 | 93% | |
| Lighting and sky | 88 | 78% | |
| Vegetation | 25 | 92% | |
| Water | 34 | 91% | |
| Collision and physics | 54 | 87% | |
| Animation | 118 | 82% | |
| Gameplay data | 37 | 100% | |
| Runtime and limits | 120 | 92% |
Computed from the engine's pages; the whole picture is on the coverage page.