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]
did a bit more research, and it turns out Haunted House and Monster High: Ghoul Spirit were both made by ImaginEngine, who later collaborated with Pipeworks on their Wreck-It Ralph game.
They were both part of Foundation 9 Entertainment, so it makes sense they worked together.
why is this game allocating 0 bytes aligned to 16-bytes?
how does that mean
@foone
Oh no.
If you malloc 0 bytes twice in a row, do you get two different pointers? What happens when you free them?!
I am fighting going down a rathole of research that is not going to end with me being happy. 😠
@rogerlipscombe: Yes, self-written mallocs often do that. (Or just assert(size != 0).) I think somebody of the early Unix programmers might have been a bit sloppy about malloc(0) and free(NULL), and so these border cases got specified in a nonsensical, perhaps even harmful, "user-friendly" way.
@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