Monopoly (2010) for the PSP:
"Pipeworks bundle v1.13 (little endian)"
Yep.
they made a free-to-play match-three game with a Godzilla license in 2014. Let's check...
Nope, unity.
Night at the Museum: Battle of the Smithsonian, 2009, Wii:
"Pipeworks bundle v1.03 (big endian)"
Godzilla: Unleashed, 2007, wii:
"Pipeworks Bundle File version 1.4"
I suspect this game doesn't use the whole engine, and may just use the bundle files. It has a non-standard layout.
One similar to Destroy All Monsters Melee, in fact, which makes me think they reused some code.
Godzilla: Save the Earth (2004), for PS2, uses "Pipeworks Bundle File version 1.3".
1.3! This is the earliest game I've seen using Pipeworks, and it's got a surprisingly late version number. Weird!
interesting find: the "Colossal Kaiju Combat" games licensed the Spigot engine from Pipeworks. So if they are showing some of the same files, then it's gotta be Spigot.
Time to find out. 5$ to find out
"Pipeworks bundle v1.30 (little endian)"
It's got the .pvd/.pvm files and everything.
This is 100% the same engine.
Started building a wiki page listing all the versions and such.
here's the really fun part:
they clearly were fine with licensing out their spigot engine, given that they licensed it to that kaiju game.
How many other games did they license it to, and it just never was mentioned anywhere?
So they made a few demos (for the xbox) with Microsoft prior to announcing their "first" Spigot game. I don't think those demos were ever released, they were just shown as promos for the Xbox.
It's possible that's where Spigot came from. Maybe they built the engine for that, then reused it for their Godzilla game.
if I see one more place where this code is like "(if x!=0 && x!=0xFFFFFFFF)"...
LEARN TO USE ONE SENTINEL AND STOP PRETENDING -1 IS A POINTER
okay I got it to clear the window and start responding again.
there are 1244 RTTI structures in this binary, out of the 128 thousand symbols I accidentally tried to print
this is the code I finally ran:
symbols=list(getCurrentProgram().getSymbolTable().getDefinedSymbols())
rttis=[s for s in symbols if s.getName().endswith('__RTTI')]
RTTIVTableHeader=getDataTypes("RTTIVTableHeader")[0]
def makeRTTI(symbol):
start=rttis[0].programLocation.address
end=start.add(8)
clearListing(start,end)
createData(start,RTTIVTableHeader)
[makeRTTI(x) for x in rttis]
@foone save your sanity and use one of the plugins that lets you use Python 3 instead of 2!
https://github.com/justfoxing/ghidra_bridge
https://github.com/mandiant/Ghidrathon
https://github.com/jpleasu/ghidraal
@foone wat.
How do you even get that through an optimising compiler?
@foone Something like a Duff's Device?
Good. Now fix the decompiler.
@delroth Will do!
Although, haven't ya'll done a comprehensive survey of Wii/GC games? Seems you could script extracting the .elf and then using readelf to check for debug symbols without too much difficulty.
@foone GC/Wii games don't typically come with ELF files :-) The standard executable format for those consoles (DOL) doesn't have any kind of symbol section. The Wii SDK has some amount of dynamic linking support (REL files) but only imports/exports have symbols there (think DLLs).
So usually when we find symbols it's either weird game engines with their own executable format, or forgotten files on the disc image master (e.g. "framework.map" in Zelda: The Wind Waker).
@foone either that, or dead files that were actually converted to DOL but still kept on the disc image for whatever reason (someone forgot to `make clean`). I've seen both, usually more of the latter.
Sometimes you can get lucky and the ELFs are even debug builds!
https://wiki.dolphin-emu.org/index.php?title=Ships_with_Debugging_Symbols has a bit more details for each game.
Or, sometimes the developers forget a Windows version of the game on disc... https://tcrf.net/Pikmin/Windows_Executable
@delroth huh, yep. The elf file is completely superflous, the game runs fine without it. good to know!
Although now I'm wondering if the .elf and .dol files are definitely in sync. I may be reversing an old version of the code!