Difference between revisions of "Pipeworks Spigot Engine"
(13 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== History == |
== History == |
||
The Spigot engine appears to have been developed for |
The Spigot engine appears to have been developed for [[w:Pipeworks_Studios|Pipeworks Studios']] second game, [[w:Godzilla:_Destroy_All_Monsters_Melee|Godzilla: Destroy All Monsters Melee]] (Gamecube, 2002). The June 3rd, 2002 copy of [https://web.archive.org/web/20020603122746/http://www.pipeworks.com:80/gallery.html Pipework's Gallery page] calls the engine Spigot, confirming the name. |
||
It was expanded and ported to multiple platforms, being used as late as 2012 (Wheel of Fortune for the Wii U) by Pipeworks, and 2014 by external developers ([https://store.steampowered.com/app/290810/Colossal_Kaiju_Combat_Kaijuland_Battles/ Colossal Kaiju Combat: Kaijuland Battles], by Sunstone Games) |
It was expanded and ported to multiple platforms, being used as late as 2012 (Wheel of Fortune for the Wii U) by Pipeworks, and 2014 by external developers ([https://store.steampowered.com/app/290810/Colossal_Kaiju_Combat_Kaijuland_Battles/ Colossal Kaiju Combat: Kaijuland Battles], by Sunstone Games) |
||
== Games possibly using the Spigot Engine == |
== Games possibly using the Spigot Engine == |
||
Line 14: | Line 14: | ||
!Build date |
!Build date |
||
!Internal name |
!Internal name |
||
!Game folder (in debug info) |
|||
|- |
|- |
||
|[[w:Godzilla:_Destroy_All_Monsters_Melee|Godzilla: Destroy All Monsters Melee]] |
|[[w:Godzilla:_Destroy_All_Monsters_Melee|Godzilla: Destroy All Monsters Melee]] |
||
Line 22: | Line 23: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|[[w:Godzilla:_Destroy_All_Monsters_Melee|Godzilla: Destroy All Monsters Melee]] |
|[[w:Godzilla:_Destroy_All_Monsters_Melee|Godzilla: Destroy All Monsters Melee]] |
||
Line 30: | Line 32: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|[[w:Godzilla:_Save_the_Earth|Godzilla: Save the Earth]] |
|[[w:Godzilla:_Save_the_Earth|Godzilla: Save the Earth]] |
||
Line 38: | Line 41: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|[[w:Godzilla:_Save_the_Earth|Godzilla: Save the Earth]] |
|[[w:Godzilla:_Save_the_Earth|Godzilla: Save the Earth]] |
||
|2004 |
|2004 |
||
|Xbox |
|Xbox |
||
|1.3 |
|||
|4.670 (from XBE) |
|||
|09/09/2004 |
|||
|? |
|? |
||
| |
| |
||
|? |
|||
|? |
|||
|- |
|- |
||
|[[w:Rampage:_Total_Destruction|Rampage: Total Destruction]] |
|[[w:Rampage:_Total_Destruction|Rampage: Total Destruction]] |
||
Line 54: | Line 59: | ||
|02/24/2006 |
|02/24/2006 |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|[[w:Rampage:_Total_Destruction|Rampage: Total Destruction]] |
|[[w:Rampage:_Total_Destruction|Rampage: Total Destruction]] |
||
Line 62: | Line 68: | ||
|10/16/2006 |
|10/16/2006 |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|[[w:Rampage:_Total_Destruction|Rampage: Total Destruction]] |
|[[w:Rampage:_Total_Destruction|Rampage: Total Destruction]] |
||
Line 70: | Line 77: | ||
|02/23/2006 |
|02/23/2006 |
||
|RAMPAGE |
|RAMPAGE |
||
| |
|||
|- |
|- |
||
|NHRA Drag Racing: Countdown to the Championship |
|NHRA Drag Racing: Countdown to the Championship |
||
Line 78: | Line 86: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|NHRA Drag Racing: Countdown to the Championship |
|NHRA Drag Racing: Countdown to the Championship |
||
Line 86: | Line 95: | ||
|06/01/2007 |
|06/01/2007 |
||
|DRAGRACE |
|DRAGRACE |
||
| |
|||
|- |
|- |
||
|[[w:Godzilla:_Unleashed|Godzilla: Unleashed]] |
|[[w:Godzilla:_Unleashed|Godzilla: Unleashed]] |
||
Line 94: | Line 104: | ||
|10/12/2007 |
|10/12/2007 |
||
|GZ3PS2 |
|GZ3PS2 |
||
| |
|||
|- |
|- |
||
|[[w:Godzilla:_Unleashed|Godzilla: Unleashed]] |
|[[w:Godzilla:_Unleashed|Godzilla: Unleashed]] |
||
Line 102: | Line 113: | ||
|10/18/2007 |
|10/18/2007 |
||
|Godzilla3 |
|Godzilla3 |
||
| |
|||
|- |
|- |
||
|[[w:Boogie_(video_game)|Boogie]] |
|[[w:Boogie_(video_game)|Boogie]] |
||
Line 110: | Line 122: | ||
|10/15/2007 |
|10/15/2007 |
||
|Boogie |
|Boogie |
||
| |
|||
|- |
|||
|Are You Smarter Than a 5th Grader?: Make the Grade |
|||
|2008 |
|||
|Wii |
|||
|1.4 |
|||
|1.1.0.554 |
|||
|08/01/2008 |
|||
|FifthGrader |
|||
| |
|||
|- |
|- |
||
|Merv Griffin's Crosswords |
|Merv Griffin's Crosswords |
||
Line 118: | Line 140: | ||
|09/26/2008 |
|09/26/2008 |
||
|Crossword |
|Crossword |
||
| |
|||
|- |
|- |
||
|[[w:Night_at_the_Museum:_Battle_of_the_Smithsonian_(video_game)|Night at the Museum: Battle of the Smithsonian]] |
|[[w:Night_at_the_Museum:_Battle_of_the_Smithsonian_(video_game)|Night at the Museum: Battle of the Smithsonian]] |
||
Line 126: | Line 149: | ||
|03/07/2009 |
|03/07/2009 |
||
|Night |
|Night |
||
| |
|||
|- |
|- |
||
|[[w:Night_at_the_Museum:_Battle_of_the_Smithsonian_(video_game)|Night at the Museum: Battle of the Smithsonian]] |
|[[w:Night_at_the_Museum:_Battle_of_the_Smithsonian_(video_game)|Night at the Museum: Battle of the Smithsonian]] |
||
Line 134: | Line 158: | ||
|? |
|? |
||
|Night |
|Night |
||
| |
|||
|- |
|- |
||
|Charm Girls Club: Pajama Party |
|Charm Girls Club: Pajama Party |
||
Line 142: | Line 167: | ||
|08/04/2009 |
|08/04/2009 |
||
|GirlsClub |
|GirlsClub |
||
|E:\Build\GirlsClub\GirlsClub |
|||
|- |
|- |
||
|[[GeoStorm]] |
|||
|GeoStorm<ref>May have been an internal training game, possibly for the US Army? https://web.archive.org/web/20220630165435/https://simulacrum0.github.io/</ref> |
|||
|2009 |
|2009 |
||
|Windows (32bit) |
|Windows (32bit) |
||
Line 150: | Line 176: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Monopoly |
|Monopoly |
||
Line 158: | Line 185: | ||
|? |
|? |
||
|Monopoly |
|Monopoly |
||
| |
|||
|- |
|- |
||
|Jeopardy |
|Jeopardy |
||
Line 166: | Line 194: | ||
|08/11/2010 |
|08/11/2010 |
||
|Jeopardy |
|Jeopardy |
||
|E:\Build\WheelJeopardy\Jeopardy |
|||
|- |
|- |
||
|Wheel of Fortune |
|Wheel of Fortune |
||
Line 174: | Line 203: | ||
|08/11/2010 |
|08/11/2010 |
||
|Wheel |
|Wheel |
||
|E:\Build\WheelJeopardy\Wheel |
|||
|- |
|- |
||
|Deadliest Warrior |
|Deadliest Warrior |
||
Line 182: | Line 212: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Deadliest Warrior |
|Deadliest Warrior |
||
Line 190: | Line 221: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Zumba Fitness |
|Zumba Fitness |
||
Line 198: | Line 230: | ||
|? |
|? |
||
|Zumba |
|Zumba |
||
| |
|||
|- |
|- |
||
|Zumba Fitness |
|Zumba Fitness |
||
Line 206: | Line 239: | ||
|10/11/2010 |
|10/11/2010 |
||
|Zumba |
|Zumba |
||
|E:\Build\Zumba\Zumba |
|||
|- |
|||
|Zumba Fitness |
|||
|2010 |
|||
|Xbox 360 |
|||
|? |
|||
|? |
|||
|? |
|||
|? |
|||
|- |
|- |
||
|[[w:UDraw_Studio|UDraw Studio]] |
|[[w:UDraw_Studio|UDraw Studio]] |
||
Line 222: | Line 248: | ||
|09/11/2010 |
|09/11/2010 |
||
|TabletPaint |
|TabletPaint |
||
|E:\Build\TabletPaint\TabletPaint |
|||
|- |
|- |
||
|Haunted House |
|Haunted House |
||
Line 230: | Line 257: | ||
|08/19/2010 |
|08/19/2010 |
||
|HauntedHouse |
|HauntedHouse |
||
|P:\ImaginEngine\HauntedHouse\HauntedHouse |
|||
|- |
|- |
||
|[[w:UDraw_Studio|UDraw Studio: Instant Artist]] |
|[[w:UDraw_Studio|UDraw Studio: Instant Artist]] |
||
Line 238: | Line 266: | ||
|09/05/2011 |
|09/05/2011 |
||
|TabletPaint2 |
|TabletPaint2 |
||
|D:\build\TabletPaint2\TabletPaint2 |
|||
|- |
|- |
||
|Deadliest Warrior: Legends |
|Deadliest Warrior: Legends |
||
Line 246: | Line 275: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Deadliest Warrior: Legends |
|Deadliest Warrior: Legends |
||
Line 254: | Line 284: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|[https://www.mobygames.com/game/88235/gremlins-gizmo/ Gremlins: Gizmo] |
|[https://www.mobygames.com/game/88235/gremlins-gizmo/ Gremlins: Gizmo] |
||
Line 262: | Line 293: | ||
|08/29/2011 |
|08/29/2011 |
||
|GForce |
|GForce |
||
|E:\Build\GForce\GForce |
|||
|- |
|- |
||
|[https://monsterhigh.fandom.com/wiki/Ghoul_Spirit_(video_game) Monster High: Ghoul Spirit] |
|[https://monsterhigh.fandom.com/wiki/Ghoul_Spirit_(video_game) Monster High: Ghoul Spirit] |
||
Line 270: | Line 302: | ||
|01/11/2013 |
|01/11/2013 |
||
|Monster |
|Monster |
||
|C:\projects\MonsterHigh_2011\Wii\Monster |
|||
|- |
|- |
||
|Devil May Cry: HD Collection |
|Devil May Cry: HD Collection |
||
Line 278: | Line 311: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Devil May Cry: HD Collection |
|Devil May Cry: HD Collection<ref>Possibly only uses Spigot for the menu system between the games </ref> |
||
|2012 |
|2012 |
||
|Xbox 360 |
|Xbox 360 |
||
|1.30 |
|||
|No version.txt file |
|||
|? |
|? |
||
|X360DMC |
|||
|? |
|||
| |
| |
||
|? |
|||
|- |
|- |
||
|Wheel of Fortune |
|Wheel of Fortune |
||
Line 294: | Line 329: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Wheel of Fortune |
|Wheel of Fortune |
||
Line 302: | Line 338: | ||
|11/19/2012 |
|11/19/2012 |
||
|Wheel |
|Wheel |
||
| |
|||
|- |
|- |
||
|Wheel of Fortune |
|Wheel of Fortune |
||
Line 310: | Line 347: | ||
|09/03/2012 |
|09/03/2012 |
||
|Wheel |
|Wheel |
||
| |
|||
|- |
|- |
||
|Jeopardy! |
|Jeopardy! |
||
Line 318: | Line 356: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Jeopardy! |
|Jeopardy! |
||
Line 325: | Line 364: | ||
|1.0.0.073 |
|1.0.0.073 |
||
|11/14/2012 |
|11/14/2012 |
||
|Jeopardy |
|||
|Wheel |
|||
| |
|||
|- |
|- |
||
|Jeopardy! |
|Jeopardy! |
||
|2012 |
|2012 |
||
|Xbox 360 |
|Xbox 360 |
||
|1.30 |
|||
|? |
|||
|1.0.0.537 |
|||
|? |
|||
|08/21/2012 |
|||
|? |
|||
|Jeopardy |
|||
|? |
|||
| |
|||
|- |
|- |
||
|Deadliest Warrior Ancient Combat |
|Deadliest Warrior: Ancient Combat |
||
|2012 |
|2012 |
||
|PS3 |
|PS3 |
||
Line 342: | Line 383: | ||
|? |
|? |
||
|? |
|? |
||
| |
|||
|- |
|- |
||
|Deadliest Warrior Ancient Combat |
|Deadliest Warrior: Ancient Combat |
||
|2012 |
|2012 |
||
|Xbox 360 |
|Xbox 360 |
||
|v1.20 |
|||
|? |
|||
|1.0.0.046 |
|||
|? |
|||
|10/14/2011 |
|||
|? |
|||
|DWarrior |
|||
|? |
|||
| |
|||
|- |
|- |
||
|[https://store.steampowered.com/app/290810/Colossal_Kaiju_Combat_Kaijuland_Battles/ Colossal Kaiju Combat™: Kaijuland Battles] |
|[https://store.steampowered.com/app/290810/Colossal_Kaiju_Combat_Kaijuland_Battles/ Colossal Kaiju Combat™: Kaijuland Battles] |
||
Line 358: | Line 401: | ||
|09/24/2015 |
|09/24/2015 |
||
|Kaiju |
|Kaiju |
||
| |
|||
|} |
|} |
||
Line 387: | Line 431: | ||
|PSP/Wii |
|PSP/Wii |
||
|? |
|? |
||
|- |
|||
|Zumba Fitness |
|||
|2010 |
|||
|Xbox 360 |
|||
|Fabric |
|||
|- |
|- |
||
|Wreck-It Ralph |
|Wreck-It Ralph |
||
Line 417: | Line 466: | ||
Known games with debugging info: |
Known games with debugging info: |
||
*[[w:Godzilla:_Unleashed|Godzilla: Unleashed]] (2007, Wii) (partially stripped) |
|||
* Wheel of Fortune (2010, Wii) |
* Wheel of Fortune (2010, Wii) |
||
* Jeopardy (2010, Wii) |
* Jeopardy (2010, Wii) |
||
* Night at the Museum: Battle of the Smithsonian (2009, Wii) |
* Night at the Museum: Battle of the Smithsonian (2009, Wii) (partially stripped) |
||
* Zumba Fitness (2010, Wii) |
* Zumba Fitness (2010, Wii) |
||
* Merv Griffin's Crosswords (2008, Wii) |
* Merv Griffin's Crosswords (2008, Wii) (partially stripped) |
||
* Gremlins: Gizmo (2011, Wii) |
* Gremlins: Gizmo (2011, Wii) |
||
* UDraw Studio (2010, Wii) |
* UDraw Studio (2010, Wii) |
||
* Monster High: Ghoul Spirit (2011, Wii) |
* Monster High: Ghoul Spirit (2011, Wii) |
||
* Haunted House (2010, Wii) |
* Haunted House (2010, Wii) |
||
* Are You Smarter Than a 5th Grader?: Make the Grade (2008, Wii) |
|||
As for the debug information itself, it's included in a "default.elf" file. This file is not used by the retail game, although supposedly it [https://tcrf.net/Wheel_of_Fortune_(Wii)#ELF_Executable is a perfect match for the retail executable if stripped and converted]. There's no legitimate reason for this file to be left on the disk, so it was presumably included by mistake. |
|||
The debugging information in the file is not fully loaded by Ghidra (which seems to just get symbol names). [https://llvm.org/docs/CommandGuide/llvm-dwarfdump.html LLVM-dwarfdump] can be used to get significantly more of it, though not all of it is decodable, and the output will include a lot of "decoding failed" errors. |
|||
== Bundle files == |
== Bundle files == |
||
Line 438: | Line 495: | ||
=== Bundle v1.20 format === |
=== Bundle v1.20 format === |
||
{| class="wikitable" |
{| class="wikitable" |
||
|+Header definition |
|+Header definition (BundleFileHeader) |
||
!Offset |
!Offset |
||
!Name |
!Official Name |
||
!Size |
!Size |
||
!Type |
!Type |
||
Line 446: | Line 503: | ||
|- |
|- |
||
|0 |
|0 |
||
|szSigString |
|||
|File signature |
|||
|40 |
|40 |
||
|String |
|String |
||
Line 452: | Line 509: | ||
|- |
|- |
||
|40 |
|40 |
||
|szProjectName |
|||
|Bundle name |
|||
|32 |
|32 |
||
|String |
|String |
||
Line 458: | Line 515: | ||
|- |
|- |
||
|72 |
|72 |
||
|bBigEndian |
|||
|File marker |
|||
|1 |
|1 |
||
|byte |
|byte |
||
|01 if the file is big endian, 00 if little-endian |
|||
|Unknown purpose, but must be 0x01 |
|||
|- |
|||
|76 |
|||
|nTotalSize |
|||
|4 |
|||
|BE Int |
|||
| |
|||
|- |
|||
|80 |
|||
|nTypeNames |
|||
|4 |
|||
|BE Int |
|||
|Count of type names |
|||
|- |
|- |
||
|84 |
|84 |
||
|nTypesOffset |
|||
|Types offset |
|||
|4 |
|4 |
||
|BE Int |
|BE Int |
||
|Offset to the directory of resource types. |
|Offset to the directory of resource types. |
||
|- |
|- |
||
|88 |
|88 |
||
|nTypesSize |
|||
|Types length |
|||
|4 |
|4 |
||
|BE int |
|BE int |
||
Line 476: | Line 545: | ||
|- |
|- |
||
|92 |
|92 |
||
|nResEntries |
|||
|Unknown count 1 |
|||
|4 |
|4 |
||
|BE int |
|BE int |
||
| |
|||
|Multiplied by 16 and added to the resource directory length |
|||
|- |
|- |
||
|96 |
|96 |
||
|nResLocsOffset |
|||
|Resource index offset |
|||
|4 |
|4 |
||
|BE int |
|BE int |
||
| |
|||
|Offset to the index of resource chunks |
|||
|- |
|- |
||
|100 |
|100 |
||
|nResReqs |
|||
|Unknown count 2 |
|||
|4 |
|4 |
||
|BE int |
|BE int |
||
| |
|||
|Multiplied by 8 and added to the resource directory length |
|||
|- |
|||
|104 |
|||
|nResReqsOffset |
|||
|4 |
|||
|BE Int |
|||
| |
|||
|- |
|- |
||
|108 |
|108 |
||
|nForkPairs |
|||
|Unknown count 3 |
|||
|4 |
|4 |
||
|BE int |
|BE int |
||
| |
|||
|Multiplied by 8 and added to the resource directory length |
|||
|- |
|||
|112 |
|||
|nForkPairsOffset |
|||
|4 |
|||
|BE Int |
|||
| |
|||
|- |
|||
|116 |
|||
|nNameInfoOffset |
|||
|4 |
|||
|BE Int |
|||
| |
|||
|- |
|||
|120 |
|||
|nNameInfoSize |
|||
|4 |
|||
|BE Int |
|||
| |
|||
|} |
|} |
||
{| class="wikitable" |
{| class="wikitable" |
||
Line 526: | Line 619: | ||
|} |
|} |
||
{| class="wikitable" |
{| class="wikitable" |
||
|+Resource chunk index entry ( |
|+Resource chunk index entry (BREntry) |
||
!Offset |
!Offset |
||
!Name |
!Name |
||
Line 534: | Line 627: | ||
|- |
|- |
||
|0 |
|0 |
||
|nOffset |
|||
|Data offset |
|||
|4 |
|4 |
||
|BE int |
|BE int |
||
Line 540: | Line 633: | ||
|- |
|- |
||
|4 |
|4 |
||
|nSizeAndType |
|||
|unknown |
|||
| |
|4 |
||
|TypedInt |
|||
|byte |
|||
|Size of the chunk, uncompressed |
|||
| |
|||
|- |
|||
|5 |
|||
|uncompressed length |
|||
|3 |
|||
|BE int |
|||
|The length of the resource after decompression (zlib inflate) |
|||
|- |
|- |
||
|8 |
|8 |
||
|nSizeAndCompression |
|||
|unknown |
|||
| |
|4 |
||
|TypedInt |
|||
|byte |
|||
|Size of the chunk, compressed |
|||
| |
|||
|- |
|||
|9 |
|||
|compressed length |
|||
|3 |
|||
|BE int |
|||
|The length of the compressed resource |
|||
|- |
|- |
||
|12 |
|12 |
||
|nResourceId |
|||
|unknown |
|||
|4 |
|4 |
||
|BE int |
|||
|? |
|||
|Resource ID of the chunk |
|||
|Possibly a resource ID? |
|||
|} |
|} |
||
TypedInt is a weird data structure used in a view places: It's a 32bit integer, but it's masked with 0x3ffffff on every use. So it's a 26-bit integer. |
|||
The top 6 bits are used for type information. The bottom 3 of the top 6 are the compression type (1=compressed, 0=uncompressed), and the top-3 encode how many buffers are needed for loading (0-7) |
|||
== Other software == |
== Other software == |
||
Line 574: | Line 658: | ||
It also uses the Fonix middleware for speech (recognition or lip-syncing?), and [https://www.fmod.com/ FMOD] for audio playback. Videos are encoded in the [https://wiki.tockdom.com/wiki/THP_(File_Format) THP format]. |
It also uses the Fonix middleware for speech (recognition or lip-syncing?), and [https://www.fmod.com/ FMOD] for audio playback. Videos are encoded in the [https://wiki.tockdom.com/wiki/THP_(File_Format) THP format]. |
||
<references /> |
Latest revision as of 00:20, 14 June 2023
History
The Spigot engine appears to have been developed for Pipeworks Studios' second game, Godzilla: Destroy All Monsters Melee (Gamecube, 2002). The June 3rd, 2002 copy of Pipework's Gallery page calls the engine Spigot, confirming the name.
It was expanded and ported to multiple platforms, being used as late as 2012 (Wheel of Fortune for the Wii U) by Pipeworks, and 2014 by external developers (Colossal Kaiju Combat: Kaijuland Battles, by Sunstone Games)
Games possibly using the Spigot Engine
Title | Year | Platform | Bundle version | Game version | Build date | Internal name | Game folder (in debug info) |
---|---|---|---|---|---|---|---|
Godzilla: Destroy All Monsters Melee | 2002 | GameCube | 1.18 | No version.txt file | ? | ? | |
Godzilla: Destroy All Monsters Melee | 2003 | Xbox | ? | ? | ? | ? | |
Godzilla: Save the Earth | 2004 | PS2 | 1.3 | No version.txt file | ? | ? | |
Godzilla: Save the Earth | 2004 | Xbox | 1.3 | 4.670 (from XBE) | 09/09/2004 | ? | |
Rampage: Total Destruction | 2006 | GameCube | 1.3 | 6.1.0.25 | 02/24/2006 | ? | |
Rampage: Total Destruction | 2006 | Wii | 1.4 | 7.1.0.54 | 10/16/2006 | ? | |
Rampage: Total Destruction | 2006 | PS2 | 1.3 | 6.1.0.24 | 02/23/2006 | RAMPAGE | |
NHRA Drag Racing: Countdown to the Championship | 2007 | PSP | 1.4 | No version.txt file | ? | ? | |
NHRA Drag Racing: Countdown to the Championship | 2007 | PS2 | 1.4 | 2.8.7.626 | 06/01/2007 | DRAGRACE | |
Godzilla: Unleashed | 2007 | PS2 | 1.4 | 1.0.0.0135 | 10/12/2007 | GZ3PS2 | |
Godzilla: Unleashed | 2007 | Wii | 1.4 | 6.12.0.0267 | 10/18/2007 | Godzilla3 | |
Boogie | 2007 | PS2 | 1.4 | 5.1.1.398 | 10/15/2007 | Boogie | |
Are You Smarter Than a 5th Grader?: Make the Grade | 2008 | Wii | 1.4 | 1.1.0.554 | 08/01/2008 | FifthGrader | |
Merv Griffin's Crosswords | 2008 | Wii | 1.03 | 6.0.0.402 | 09/26/2008 | Crossword | |
Night at the Museum: Battle of the Smithsonian | 2009 | Wii | 1.03 | 1.0.0.779 | 03/07/2009 | Night | |
Night at the Museum: Battle of the Smithsonian | 2009 | Xbox 360 | 1.03 | No version.txt file | ? | Night | |
Charm Girls Club: Pajama Party | 2009 | Wii | 1.03 | 1.0.0.512 | 08/04/2009 | GirlsClub | E:\Build\GirlsClub\GirlsClub |
GeoStorm | 2009 | Windows (32bit) | ? | ? | ? | ? | |
Monopoly | 2010 | PSP | 1.13 | No version.txt file | ? | Monopoly | |
Jeopardy | 2010 | Wii | 1.20 | 1.0.0.430 | 08/11/2010 | Jeopardy | E:\Build\WheelJeopardy\Jeopardy |
Wheel of Fortune | 2010 | Wii | 1.20 | 1.0.0.415 | 08/11/2010 | Wheel | E:\Build\WheelJeopardy\Wheel |
Deadliest Warrior | 2010 | PS3 | ? | ? | ? | ? | |
Deadliest Warrior | 2010 | Xbox 360 | ? | ? | ? | ? | |
Zumba Fitness | 2010 | PS3 | v1.20 | ? | ? | Zumba | |
Zumba Fitness | 2010 | Wii | 1.20 | 1.0.0.508 | 10/11/2010 | Zumba | E:\Build\Zumba\Zumba |
UDraw Studio | 2010 | Wii | 1.20 | 1.0.0.129 | 09/11/2010 | TabletPaint | E:\Build\TabletPaint\TabletPaint |
Haunted House | 2010 | Wii | 1.20 | 1.0.0.100 | 08/19/2010 | HauntedHouse | P:\ImaginEngine\HauntedHouse\HauntedHouse |
UDraw Studio: Instant Artist | 2011 | Wii | 1.30 | 1.0.0.213 | 09/05/2011 | TabletPaint2 | D:\build\TabletPaint2\TabletPaint2 |
Deadliest Warrior: Legends | 2011 | PS3 | ? | ? | ? | ? | |
Deadliest Warrior: Legends | 2011 | Xbox 360 | ? | ? | ? | ? | |
Gremlins: Gizmo | 2011 | Wii | 1.30 | 1.0.0.309 | 08/29/2011 | GForce | E:\Build\GForce\GForce |
Monster High: Ghoul Spirit | 2011 | Wii | 1.30 | 1.0.0.272 | 01/11/2013 | Monster | C:\projects\MonsterHigh_2011\Wii\Monster |
Devil May Cry: HD Collection | 2012 | PS3 | ? | ? | ? | ? | |
Devil May Cry: HD Collection[1] | 2012 | Xbox 360 | 1.30 | No version.txt file | ? | X360DMC | |
Wheel of Fortune | 2012 | PS3 | ? | ? | ? | ? | |
Wheel of Fortune | 2012 | Wii U | 1.30 | 1.0.0.076 | 11/19/2012 | Wheel | |
Wheel of Fortune | 2012 | Xbox 360 | 1.30 | 1.0.0.565 | 09/03/2012 | Wheel | |
Jeopardy! | 2012 | PS3 | ? | ? | ? | ? | |
Jeopardy! | 2012 | Wii U | 1.30 | 1.0.0.073 | 11/14/2012 | Jeopardy | |
Jeopardy! | 2012 | Xbox 360 | 1.30 | 1.0.0.537 | 08/21/2012 | Jeopardy | |
Deadliest Warrior: Ancient Combat | 2012 | PS3 | ? | ? | ? | ? | |
Deadliest Warrior: Ancient Combat | 2012 | Xbox 360 | v1.20 | 1.0.0.046 | 10/14/2011 | DWarrior | |
Colossal Kaiju Combat™: Kaijuland Battles | 2014 | Windows (32bit) | 1.30 | 1.0.0.467 | 09/24/2015 | Kaiju |
Pipeworks games NOT using the Spigot Engine
Title | Year | Platforms | Engine |
---|---|---|---|
GLOM | 2001 | PalmOS | ? |
Prince of Persia: Revelations | 2005 | PSP | ? |
Godzilla: Unleashed: Double Smash | 2007 | DS | ? |
Prince of Persia: Rival Swords | 2007 | PSP/Wii | ? |
Zumba Fitness | 2010 | Xbox 360 | Fabric |
Wreck-It Ralph | 2012 | Wii/DS/3DS | ? |
Godzilla: Smash 3 | 2014 | Android/iOS | Unity |
Prominence Poker | 2016 | Windows (32bit)/PS4/Xbox One | Unreal |
Magic Spellslingers | 2022 | Windows/MacOS/iOS/Android | Unity |
Virtual Machine
Spigot uses a "PWK Virtual Machine", version 3.01 in Wheel of Fortune (2010, Wii). It appears to be used for scripting, and the scripts are contained in matching .pvd and .pvm files.
Debug info
Some games have shipped with debugging information included, allowing for function/class names to be extracted.
Known games with debugging info:
- Godzilla: Unleashed (2007, Wii) (partially stripped)
- Wheel of Fortune (2010, Wii)
- Jeopardy (2010, Wii)
- Night at the Museum: Battle of the Smithsonian (2009, Wii) (partially stripped)
- Zumba Fitness (2010, Wii)
- Merv Griffin's Crosswords (2008, Wii) (partially stripped)
- Gremlins: Gizmo (2011, Wii)
- UDraw Studio (2010, Wii)
- Monster High: Ghoul Spirit (2011, Wii)
- Haunted House (2010, Wii)
- Are You Smarter Than a 5th Grader?: Make the Grade (2008, Wii)
As for the debug information itself, it's included in a "default.elf" file. This file is not used by the retail game, although supposedly it is a perfect match for the retail executable if stripped and converted. There's no legitimate reason for this file to be left on the disk, so it was presumably included by mistake.
The debugging information in the file is not fully loaded by Ghidra (which seems to just get symbol names). LLVM-dwarfdump can be used to get significantly more of it, though not all of it is decodable, and the output will include a lot of "decoding failed" errors.
Bundle files
A key part of the Spigot engine are Pipeworks bundle files. These contain named, typed, and compressed resources for the game to use.
Bundle files are stored in .bdg files, although some games use alternate extensions, such as .bdx (Wheel of Fortune, 2012, Xbox) or .bd9 (Colossal Kaiju Combat™: Kaijuland Battles, 2014, Windows).
Sometimes there is an accompanying .jnl file, but this doesn't appear to be neccessary, and is more of a log file of the tool used to compile the bundle file.
The bundle file comes in many versions, with the most well analyzed at the moment being v1.20.
Bundle v1.20 format
Offset | Official Name | Size | Type | Value/Notes |
---|---|---|---|---|
0 | szSigString | 40 | String | "Pipeworks bundle v1.20 (big endian) \x1a\0" |
40 | szProjectName | 32 | String | Zero-terminated, padded with random bytes |
72 | bBigEndian | 1 | byte | 01 if the file is big endian, 00 if little-endian |
76 | nTotalSize | 4 | BE Int | |
80 | nTypeNames | 4 | BE Int | Count of type names |
84 | nTypesOffset | 4 | BE Int | Offset to the directory of resource types. |
88 | nTypesSize | 4 | BE int | Length of the directory of resource types |
92 | nResEntries | 4 | BE int | |
96 | nResLocsOffset | 4 | BE int | |
100 | nResReqs | 4 | BE int | |
104 | nResReqsOffset | 4 | BE Int | |
108 | nForkPairs | 4 | BE int | |
112 | nForkPairsOffset | 4 | BE Int | |
116 | nNameInfoOffset | 4 | BE Int | |
120 | nNameInfoSize | 4 | BE Int |
Offset | Name | Size | Type | Value/Notes |
---|---|---|---|---|
0 | unknown | 1 | byte | seems to be 0x00 or 0x10 in all examples |
1 | flags/type? | 1 | byte | Unknown purpose. Seen values: 00, 01, 03, 04, 05, 06, 08, 0x0A, 0x11, |
2 | Type name | n | string | Zero-terminated. Sometimes ends with '\0\xFF' for unknown reasons. (padding/off by one error?) |
Offset | Name | Size | Type | Value/Notes |
---|---|---|---|---|
0 | nOffset | 4 | BE int | Offset to where the resource begins |
4 | nSizeAndType | 4 | TypedInt | Size of the chunk, uncompressed |
8 | nSizeAndCompression | 4 | TypedInt | Size of the chunk, compressed |
12 | nResourceId | 4 | BE int | Resource ID of the chunk |
TypedInt is a weird data structure used in a view places: It's a 32bit integer, but it's masked with 0x3ffffff on every use. So it's a 26-bit integer.
The top 6 bits are used for type information. The bottom 3 of the top 6 are the compression type (1=compressed, 0=uncompressed), and the top-3 encode how many buffers are needed for loading (0-7)
Other software
at least Wheel of Fortune (2010, Wii) has a separate engine called "RockNRoll" which appears to be used for collision/physics.
It also uses the Fonix middleware for speech (recognition or lip-syncing?), and FMOD for audio playback. Videos are encoded in the THP format.
- ↑ Possibly only uses Spigot for the menu system between the games