arg.
for once they didn't use vtables and RTTI
and so I have two classes. one subclasses the other, for sure. But which is which? I can't tell.
Top-level
arg. and so I have two classes. one subclasses the other, for sure. But which is which? I can't tell. 20 comments
WFSaveGame > GBSaveGame > SaveGame > SaveGameBase > GuiPopup STOP ALL THE INHERITANCE who could have ever predicted that a class named "Matrix4" would be 64 bytes? (It was either that or 128 bytes) ahh, GraphicsDevice extends _GraphicsDevice also this compiler (Metroworks CodeWarrior for PowerPC) loves generating global floating point literals in the binary and then NEVER MERGING THEM do you know how many copies of float 0.0 and 1.0 there are? I DON'T BUT IT'S AT LEAST FIVE it's especially weird for floating point zero. I don't know if you know this, but the IEEE-754 encoding of floating point zero is just that: zeroes. I don't know why I'm saying the compiler should be more optimized. That'd make my job harder. oh hello (floating point 0.0 and 1.0) hey I found a list of supported platforms in the binary! it includes: Wii, PS2, DX9, PSP, X360, and PS3. if ((((bVar1) && (bVar1)) && (bVar1)) && (bVar1)) { I was gonna ask "are you okay, Ghidra?" but nope, the disassembly matches. the fuck happened here, optimizer? if (filename == (String *)0x3) { NOPE NOPE NOPE NOPE NOPE NOPE "3" IS NOT A VALID POINTER TO A STRING. EVER they do a weird thing with picking puzzles: they seem to pick like 13 of them, but the game only uses 4-6. they also do some very weird shit with copying them around in RAM. like, I can see them overwriting my changes. I think I've figured out how codewarrior works: oh god I think this game's Quad class initializes some of the points to negative NaN amazing moments in compiler optimization: if (param_1 != (GrQuad *)0x0) { |
one of them is, I'm reasonably sure, 342944 bytes.
the other is at least 44 bytes.