diff --git a/decompile/objdiff.json b/decompile/objdiff.json index b93034e..30ffb37 100644 --- a/decompile/objdiff.json +++ b/decompile/objdiff.json @@ -30,9 +30,48 @@ "source_path": "src/JSRF/Core.cpp" }, "symbol_mappings": { + "DrawTree::DrawTree": "??0DrawTree@@QAE@PAUGameObj@@W4GameObjIndex@@W4GameObjFlags@@@Z", + "DrawTree::`scalar_deleting_destructor'": "??_GDrawTree@@UAEPAXI@Z", + "DrawTree::copySomeVectors": "?copySomeVectors@DrawTree@@QAEXXZ", + "DrawTree::~DrawTree": "??1DrawTree@@UAE@XZ", + "GameObj::GameObj": "??0GameObj@@QAE@PAU0@W4GameObjIndex@@W4GameObjFlags@@@Z", "GameObj::`scalar_deleting_destructor'": "??_GGameObj@@UAEPAXI@Z", "GameObj::`vftable'": "??_7GameObj@@6B@", - "GameObj::~GameObj": "??1GameObj@@UAE@XZ" + "GameObj::addToSiblings": "?addToSiblings@GameObj@@QAEXPAU1@0@Z", + "GameObj::destructChildren": "?destructChildren@GameObj@@QAEXPAU1@@Z", + "GameObj::drawListCoveredPause": "?drawListCoveredPause@GameObj@@QAEXW4GameObjFlags@@HH0I00@Z", + "GameObj::drawListDefault": "?drawListDefault@GameObj@@QAEXW4GameObjFlags@@HH0I00@Z", + "GameObj::drawListEvent": "?drawListEvent@GameObj@@QAEXW4GameObjFlags@@HH0I00@Z", + "GameObj::drawListFreezeCam": "?drawListFreezeCam@GameObj@@QAEXW4GameObjFlags@@HH0I00@Z", + "GameObj::drawListUncoveredPause": "?drawListUncoveredPause@GameObj@@QAEXW4GameObjFlags@@HH0I00@Z", + "GameObj::drawTreeCoveredPause1": "?drawTreeCoveredPause1@GameObj@@QAEXXZ", + "GameObj::drawTreeCoveredPause2": "?drawTreeCoveredPause2@GameObj@@QAEXXZ", + "GameObj::drawTreeDefault1": "?drawTreeDefault1@GameObj@@QAEXXZ", + "GameObj::drawTreeDefault2": "?drawTreeDefault2@GameObj@@QAEXXZ", + "GameObj::drawTreeEvent1": "?drawTreeEvent1@GameObj@@QAEXXZ", + "GameObj::drawTreeEvent2": "?drawTreeEvent2@GameObj@@QAEXXZ", + "GameObj::drawTreeFreezeCam1": "?drawTreeFreezeCam1@GameObj@@QAEXXZ", + "GameObj::drawTreeFreezeCam2": "?drawTreeFreezeCam2@GameObj@@QAEXXZ", + "GameObj::drawTreeUncoveredPause1": "?drawTreeUncoveredPause1@GameObj@@QAEXXZ", + "GameObj::drawTreeUncoveredPause2": "?drawTreeUncoveredPause2@GameObj@@QAEXXZ", + "GameObj::getParent": "?getParent@GameObj@@QAEPAU1@XZ", + "GameObj::nopDraw": "?drawDefault@GameObj@@UAEXH@Z", + "GameObj::nopExec": "?execDefault@GameObj@@UAEXXZ", + "GameObj::recursiveExecCoveredPause": "?recursiveExecCoveredPause@GameObj@@QAEXXZ", + "GameObj::recursiveExecDefault": "?recursiveExecDefault@GameObj@@QAEXXZ", + "GameObj::recursiveExecEvent": "?recursiveExecEvent@GameObj@@QAEXXZ", + "GameObj::recursiveExecFreezeCam": "?recursiveExecFreezeCam@GameObj@@QAEXXZ", + "GameObj::recursiveExecUncoveredPause": "?recursiveExecUncoveredPause@GameObj@@QAEXXZ", + "GameObj::recursivePostExecCoveredPause": "?recursivePostExecCoveredPause@GameObj@@QAEXXZ", + "GameObj::recursivePostExecDefault": "?recursivePostExecDefault@GameObj@@QAEXXZ", + "GameObj::recursivePostExecEvent": "?recursivePostExecEvent@GameObj@@QAEXXZ", + "GameObj::recursivePostExecFreezeCam": "?recursivePostExecFreezeCam@GameObj@@QAEXXZ", + "GameObj::recursivePostExecUncoveredPause": "?recursivePostExecUncoveredPause@GameObj@@QAEXXZ", + "GameObj::removeChildrenFromObjList": "?removeChildrenFromObjList@GameObj@@QAEXPAU1@@Z", + "GameObj::removeFromObjList": "?removeFromObjList@GameObj@@QAEXPAU1@@Z", + "GameObj::setParent": "?setParent@GameObj@@QAEXPAU1@@Z", + "GameObj::~GameObj": "??1GameObj@@UAE@XZ", + "PlayerObj::PlayerObj": "??0PlayerObj@@QAE@PAUGameObj@@W4GameObjIndex@@W4GameObjFlags@@@Z" } } ] diff --git a/decompile/src/JSRF/Core.cpp b/decompile/src/JSRF/Core.cpp index 03dbf54..eba9ca1 100644 --- a/decompile/src/JSRF/Core.cpp +++ b/decompile/src/JSRF/Core.cpp @@ -11,3 +11,294 @@ Game and GameObj classes that form the foundation of the JSRF game code. GameObj::~GameObj() { g_game->gameObjCnt -= 1; } + +// Address: 0x00011070 +// Matching: no +void GameObj::recursiveExecDefault() { +} + +// Address: 0x000110A0 +// Matching: no +void GameObj::drawListDefault( + GameObjFlags flagFilterAny1, + int drawArg1, + int drawArg2, + GameObjFlags flagFilterAll, + unsigned otherBitfieldFilterAny, + GameObjFlags flagFilterNone, + GameObjFlags flagFilterAny2 +) { +} + +// Address: 0x00011220 +// Matching: no +void GameObj::drawTreeDefault1() { +} + +// Address: 0x00011260 +// Matching: no +void GameObj::drawTreeDefault2() { +} + +// Address: 0x000112A0 +// Matching: no +void GameObj::recursiveExecEvent() { +} + +// Address: 0x000112D0 +// Matching: no +void GameObj::drawListEvent( + GameObjFlags flagFilterAny1, + int drawArg1, + int drawArg2, + GameObjFlags flagFilterAll, + unsigned otherBitfieldFilterAny, + GameObjFlags flagFilterNone, + GameObjFlags flagFilterAny2 +) { +} + +// Address: 0x00011450 +// Matching: no +void GameObj::drawTreeEvent1() { +} + +// Address: 0x00011490 +// Matching: no +void GameObj::drawTreeEvent2() { +} + +// Address: 0x000114D0 +// Matching: no +void GameObj::recursiveExecCoveredPause() { +} + +// Address: 0x00011500 +// Matching: no +void GameObj::drawListCoveredPause( + GameObjFlags flagFilterAny1, + int drawArg1, + int drawArg2, + GameObjFlags flagFilterAll, + unsigned otherBitfieldFilterAny, + GameObjFlags flagFilterNone, + GameObjFlags flagFilterAny2 +) { +} + +// Address: 0x00011680 +// Matching: no +void GameObj::drawTreeCoveredPause1() { +} + +// Address: 0x000116C0 +// Matching: no +void GameObj::drawTreeCoveredPause2() { +} + +// Address: 0x00011700 +// Matching: no +void GameObj::recursiveExecFreezeCam() { +} + +// Address: 0x00011730 +// Matching: no +void GameObj::drawListFreezeCam( + GameObjFlags flagFilterAny1, + int drawArg1, + int drawArg2, + GameObjFlags flagFilterAll, + unsigned otherBitfieldFilterAny, + GameObjFlags flagFilterNone, + GameObjFlags flagFilterAny2 +) { +} + +// Address: 0x000118B0 +// Matching: no +void GameObj::drawTreeFreezeCam1() { +} + +// Address: 0x000118F0 +// Matching: no +void GameObj::drawTreeFreezeCam2() { +} + +// Address: 0x00011930 +// Matching: no +void GameObj::recursiveExecUncoveredPause() { +} + +// Address: 0x00011960 +// Matching: no +void GameObj::drawListUncoveredPause( + GameObjFlags flagFilterAny1, + int drawArg1, + int drawArg2, + GameObjFlags flagFilterAll, + unsigned otherBitfieldFilterAny, + GameObjFlags flagFilterNone, + GameObjFlags flagFilterAny2 +) { +} + +// Address: 0x00011AE0 +// Matching: no +void GameObj::drawTreeUncoveredPause1() { +} + +// Address: 0x00011B20 +// Matching: no +void GameObj::drawTreeUncoveredPause2() { +} + +// Address: 0x00011B60 +// Matching: no +void GameObj::addToSiblings(GameObj * sibling, GameObj * parent) { +} + +// Address: 0x00011B90 +// Matching: no +void GameObj::destructChildren(GameObj * firstChild) { +} + +// Address: 0x00011BD0 +// Matching: yes +GameObj * GameObj::getParent() { + return this->parent; +} + +// Address: 0x00011BE0 +// Matching: no +void GameObj::removeFromObjList(GameObj * obj) { +} + +// Address: 0x00011C20 +// Matching: no +void GameObj::removeChildrenFromObjList(GameObj * firstChild) { +} + +// Address: 0x00011C80 +// Matching: yes +void GameObj::drawDefault(int unknown) {} + +// Address: 0x00011C90 +// Matching: yes +void GameObj::execDefault() {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::postExecDefault() {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::execEvent() {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::postExecEvent() {} + +// Eliminated by link time code generation (aliased with 0x00011C80) +void GameObj::drawEvent(int unknown) {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::execCoveredPause() {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::postExecCoveredPause() {} + +// Eliminated by link time code generation (aliased with 0x00011C80) +void GameObj::drawCoveredPause(int unknown) {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::execFreezeCam() {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::postExecFreezeCam() {} + +// Eliminated by link time code generation (aliased with 0x00011C80) +void GameObj::drawFreezeCam(int unknown) {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::execUncoveredPause() {} + +// Eliminated by link time code generation (aliased with 0x00011C90) +void GameObj::postExecUncoveredPause() {} + +// Eliminated by link time code generation (aliased with 0x00011C80) +void GameObj::drawUncoveredPause(int unknown) {} + +// Address: 0x00011CA0 +// Matching: no +void DrawTree::copySomeVectors() { +} + +// Address: 0x00011D00 +// Matching: no +void GameObj::recursivePostExecDefault() { +} + +// Address: 0x00011D00 +// Matching: no +void GameObj::recursivePostExecEvent() { +} + +// Address: 0x00011E40 +// Matching: no +void GameObj::recursivePostExecCoveredPause() { +} + +// Address: 0x00011EE0 +// Matching: no +void GameObj::recursivePostExecFreezeCam() { +} + +// Address: 0x00011F80 +// Matching: no +void GameObj::recursivePostExecUncoveredPause() { +} + +// Address: 0x00012020 +// Matching: no +void GameObj::setParent(GameObj * parent) { +} + +// Address: 0x00012100 +// Matching: no +GameObj::GameObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) { + g_game->setObj(index, this); + + this->parent = NULL; + this->firstChild = NULL; + this->prevSibling = NULL; + this->nextSibling = NULL; + this->index = index; + this->flags = flags; + + this->setParent(parent); + + this->sortKey = 0; + this->otherBitfield = 1; + + g_game->gameObjCnt += 1; +} + +// Address: 0x00012170 +// Matching: no +DrawTree::DrawTree(GameObj * parent, GameObjIndex index, GameObjFlags flags) : + GameObj(parent, index, flags) { + this->otherBitfield = 7; + this->someIndex = 0; +} + +// Address: 0x000121D0 +// Matching: no +DrawTree::~DrawTree() {} + +// Address: 0x000121E0 +// Matching: no +PlayerObj::PlayerObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) : + GameObj(parent, index, flags) { + this->unknown0x44 = 0; + this->unknown0x48 = 0; +} + +// Eliminated by link time code generation (aliased with 0x000121D0) +PlayerObj::~PlayerObj() {} diff --git a/decompile/src/JSRF/Core.hpp b/decompile/src/JSRF/Core.hpp index 82ded0a..de4b9af 100644 --- a/decompile/src/JSRF/Core.hpp +++ b/decompile/src/JSRF/Core.hpp @@ -41,7 +41,7 @@ enum GameObjIndex { }; // Base class of most objects (and everything in g_game->objects) -class GameObj { +struct GameObj { GameObjFlags flags; GameObjIndex index; @@ -64,7 +64,6 @@ class GameObj { // Another linked list sort of arrangement GameObj * someKindOfNextObj; -public: virtual ~GameObj(); void recursiveExecDefault(); @@ -147,23 +146,23 @@ public: // frame. virtual void execDefault(); virtual void postExecDefault(); - virtual void drawDefault(); + virtual void drawDefault(int); virtual void execEvent(); virtual void postExecEvent(); - virtual void drawEvent(); + virtual void drawEvent(int); virtual void execCoveredPause(); virtual void postExecCoveredPause(); - virtual void drawCoveredPause(); + virtual void drawCoveredPause(int); virtual void execFreezeCam(); virtual void postExecFreezeCam(); - virtual void drawFreezeCam(); + virtual void drawFreezeCam(int); virtual void execUncoveredPause(); virtual void postExecUncoveredPause(); - virtual void drawUncoveredPause(); + virtual void drawUncoveredPause(int); void recursivePostExecDefault(); void recursivePostExecEvent(); @@ -178,7 +177,7 @@ public: // Base class of objects serving as the head of a tree of objects to draw // recursively -class DrawTree : GameObj { +struct DrawTree : GameObj { D3DVECTOR unknown0x44; D3DVECTOR unknown0x50; D3DVECTOR unknown0x5C; @@ -190,18 +189,17 @@ class DrawTree : GameObj { D3DRECT viewport; unsigned someIndex; -public: void copySomeVectors(); DrawTree(GameObj * parent, GameObjIndex index, GameObjFlags flags); virtual ~DrawTree(); }; -class PlayerObj : GameObj { +struct PlayerObj : GameObj { unsigned unknown0x44; unsigned unknown0x48; -public: PlayerObj(GameObj * parent, GameObjIndex index, GameObjFlags flags); + virtual ~PlayerObj(); }; // Top-level globally-accessible "god object" that runs the main loop and @@ -251,9 +249,9 @@ extern struct Game { BOOL uncoveredPauseNextFrame; BOOL noUncoveredPauseNextFrame; - unsigned unknown0x70; + BOOL drawChildren; BOOL skipDraw; - int zeroedByExec; + BOOL runSomeExtraDrawListCode; GraphicsPerformanceCounters perfCounters; DrawMode drawMode; @@ -262,17 +260,17 @@ extern struct Game { GameObj * objects[7668]; unsigned globals[461]; // Items may be any 32-bit type, e.g. ptr - GameObj * somethingLinkedBHead; - GameObj * * somethingLinkedBEndNext; + DrawTree * drawTreesHead; + DrawTree * * drawTreesEndNext; - GameObj * somethingLinkedAHead; - GameObj * * somethingLinkedAEndNext; + GameObj * drawListHead; + GameObj * * drawListEndNext; - GameObj * sortedLinkedListHead; - GameObj * * sortedLinkedListEndNext; + GameObj * drawPriorityListHead; + GameObj * * drawPriorityListEndNext; - GameObj * linkedListsByKeyHeads [256]; - GameObj * * linkedListByKeyEndNexts[256]; + GameObj * drawPriorityListsByKeyHeads [256]; + GameObj * * drawPriorityListsByKeyEndNexts[256]; LARGE_INTEGER execPerfCount; LARGE_INTEGER drawPerfCount; @@ -286,10 +284,10 @@ extern struct Game { int frameCnt2; int frameCnt3; unsigned gameObjCnt; - GameObj * rootDrawObj; - int unknown0x87F0; + DrawTree * currentDrawTree; + GameObjIndex currentDrawTreeIndex; int unknown0x87F4; - Mat4 unknown0x87F8; + Mat4 parentMatrix; unsigned unknown0x8838; unsigned unknown0x883C; @@ -324,8 +322,8 @@ extern struct Game { void addToDrawList (GameObj * obj); void removeFromDrawList(GameObj * obj); - void setObj (GameObjIndex index ); - void unsetObj (GameObjIndex index , GameObj * obj); + void setObj (GameObjIndex index , GameObj * obj); + void unsetObj (GameObjIndex index ); GameObj * getObj (GameObjIndex index ); int allocObjIndex(GameObjIndex min , GameObjIndex max); BOOL objIndexAvail(GameObjIndex index ); @@ -351,7 +349,7 @@ extern struct Game { } * g_game; // Root of the exec GameObj tree -class RootExecObj : GameObj { +struct RootExecObj : GameObj { RootExecObj(GameObj * parent, GameObjIndex index, GameObjFlags flags); virtual ~RootExecObj(); };