diff --git a/decompile/src/JSRF/Core.cpp b/decompile/src/JSRF/Core.cpp index 7561b8d..b791c42 100644 --- a/decompile/src/JSRF/Core.cpp +++ b/decompile/src/JSRF/Core.cpp @@ -12,18 +12,18 @@ Game and GameObj classes that form the foundation of the JSRF game code. void readInput(); // Address: 0x00011000 -// Matching: no +// Status: unimplemented GameObj::~GameObj() { g_game->gameObjCnt -= 1; } // Address: 0x00011070 -// Matching: no +// Status: unimplemented void GameObj::recursiveExecDefault() { } // Address: 0x000110A0 -// Matching: no +// Status: unimplemented void GameObj::drawListDefault( GameObjFlags flagFilterAny1, int drawArg1, @@ -36,22 +36,22 @@ void GameObj::drawListDefault( } // Address: 0x00011220 -// Matching: no +// Status: unimplemented void GameObj::drawTreeDefault1() { } // Address: 0x00011260 -// Matching: no +// Status: unimplemented void GameObj::drawTreeDefault2() { } // Address: 0x000112A0 -// Matching: no +// Status: unimplemented void GameObj::recursiveExecEvent() { } // Address: 0x000112D0 -// Matching: no +// Status: unimplemented void GameObj::drawListEvent( GameObjFlags flagFilterAny1, int drawArg1, @@ -64,22 +64,22 @@ void GameObj::drawListEvent( } // Address: 0x00011450 -// Matching: no +// Status: unimplemented void GameObj::drawTreeEvent1() { } // Address: 0x00011490 -// Matching: no +// Status: unimplemented void GameObj::drawTreeEvent2() { } // Address: 0x000114D0 -// Matching: no +// Status: unimplemented void GameObj::recursiveExecCoveredPause() { } // Address: 0x00011500 -// Matching: no +// Status: unimplemented void GameObj::drawListCoveredPause( GameObjFlags flagFilterAny1, int drawArg1, @@ -92,22 +92,22 @@ void GameObj::drawListCoveredPause( } // Address: 0x00011680 -// Matching: no +// Status: unimplemented void GameObj::drawTreeCoveredPause1() { } // Address: 0x000116C0 -// Matching: no +// Status: unimplemented void GameObj::drawTreeCoveredPause2() { } // Address: 0x00011700 -// Matching: no +// Status: unimplemented void GameObj::recursiveExecFreezeCam() { } // Address: 0x00011730 -// Matching: no +// Status: unimplemented void GameObj::drawListFreezeCam( GameObjFlags flagFilterAny1, int drawArg1, @@ -120,22 +120,22 @@ void GameObj::drawListFreezeCam( } // Address: 0x000118B0 -// Matching: no +// Status: unimplemented void GameObj::drawTreeFreezeCam1() { } // Address: 0x000118F0 -// Matching: no +// Status: unimplemented void GameObj::drawTreeFreezeCam2() { } // Address: 0x00011930 -// Matching: no +// Status: unimplemented void GameObj::recursiveExecUncoveredPause() { } // Address: 0x00011960 -// Matching: no +// Status: unimplemented void GameObj::drawListUncoveredPause( GameObjFlags flagFilterAny1, int drawArg1, @@ -148,40 +148,40 @@ void GameObj::drawListUncoveredPause( } // Address: 0x00011AE0 -// Matching: no +// Status: unimplemented void GameObj::drawTreeUncoveredPause1() { } // Address: 0x00011B20 -// Matching: no +// Status: unimplemented void GameObj::drawTreeUncoveredPause2() { } // Address: 0x00011B60 -// Matching: no +// Status: unimplemented void GameObj::addToSiblings(GameObj * sibling, GameObj * parent) { } // Address: 0x00011B90 -// Matching: no +// Status: unimplemented void GameObj::destructChildren(GameObj * firstChild) { } // Address: 0x00011BD0 -// Matching: yes +// Status: matching GameObj * GameObj::getParent() { return this->parent; } // Address: 0x00011BE0 -// Matching: no +// Status: unimplemented void GameObj::removeFromObjList(GameObj * obj) { if (obj->flags > -1) { } } // Address: 0x00011C20 -// Matching: no +// Status: nonmatching void GameObj::removeChildrenFromObjList(GameObj * firstChild) { if (firstChild != NULL) do { if (firstChild->flags > -1) { @@ -196,11 +196,11 @@ void GameObj::removeChildrenFromObjList(GameObj * firstChild) { } // Address: 0x00011C80 -// Matching: yes +// Status: matching void GameObj::drawDefault(unsigned unknown) {} // Address: 0x00011C90 -// Matching: yes +// Status: matching void GameObj::execDefault() {} // Eliminated by link time code generation (aliased with 0x00011C90) @@ -243,42 +243,42 @@ void GameObj::postExecUncoveredPause() {} void GameObj::drawUncoveredPause(unsigned unknown) {} // Address: 0x00011CA0 -// Matching: no +// Status: unimplemented void DrawTree::copySomeVectors() { } // Address: 0x00011D00 -// Matching: no +// Status: unimplemented void GameObj::recursivePostExecDefault() { } // Address: 0x00011D00 -// Matching: no +// Status: unimplemented void GameObj::recursivePostExecEvent() { } // Address: 0x00011E40 -// Matching: no +// Status: unimplemented void GameObj::recursivePostExecCoveredPause() { } // Address: 0x00011EE0 -// Matching: no +// Status: unimplemented void GameObj::recursivePostExecFreezeCam() { } // Address: 0x00011F80 -// Matching: no +// Status: unimplemented void GameObj::recursivePostExecUncoveredPause() { } // Address: 0x00012020 -// Matching: no +// Status: unimplemented void GameObj::setParent(GameObj * parent) { } // Address: 0x00012100 -// Matching: no +// Status: unimplemented GameObj::GameObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) { g_game->setObj(index, this); @@ -298,7 +298,7 @@ GameObj::GameObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) { } // Address: 0x00012170 -// Matching: yes +// Status: matching DrawTree::DrawTree(GameObj * parent, GameObjIndex index, GameObjFlags flags) : GameObj(parent, index, flags) { this->otherBitfield = 7; @@ -306,11 +306,11 @@ DrawTree::DrawTree(GameObj * parent, GameObjIndex index, GameObjFlags flags) : } // Address: 0x000121D0 -// Matching: no +// Status: unimplemented DrawTree::~DrawTree() {} // Address: 0x000121E0 -// Matching: no +// Status: unimplemented PlayerObj::PlayerObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) : GameObj(parent, index, flags) { this->unknown0x44 = 0; @@ -321,27 +321,27 @@ PlayerObj::PlayerObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) : PlayerObj::~PlayerObj() {} // Address: 0x00012210 -// Matching: no +// Status: unimplemented Game::Game(unsigned * unknown1, unsigned unknown2) { } // Address: 0x00012390 -// Matching: no +// Status: unimplemented Game::~Game() { } // Address: 0x000123E0 -// Matching: no +// Status: unimplemented void Game::exec() { } // Address: 0x00012580 -// Matching: no +// Status: unimplemented void Game::drawObj(GameObj * obj, unsigned unknown) { } // Address: 0x000125E0 -// Matching: no +// Status: unimplemented void Game::drawList_( GameObjFlags flagFilterAny1, int drawArg1, @@ -354,97 +354,97 @@ void Game::drawList_( } // Address: 0x00012680 -// Matching: no +// Status: unimplemented void Game::drawTree1(GameObj * obj) { } // Address: 0x000126D0 -// Matching: no +// Status: unimplemented void Game::setCoveredPauseNextFrame(BOOL val) { } // Address: 0x000126F0 -// Matching: no +// Status: unimplemented void Game::setEventNextFrame(BOOL val) { } // Address: 0x00012710 -// Matching: no +// Status: unimplemented void Game::setFreezeCamNextFrame(BOOL val) { } // Address: 0x00012730 -// Matching: no +// Status: unimplemented void Game::setUncoveredPauseNextFrame(BOOL val) { } // Address: 0x00012750 -// Matching: yes +// Status: matching void Game::enableDrawChildren() { this->drawChildren = TRUE; } // Address: 0x00012760 -// Matching: yes +// Status: matching void Game::enableSkipDraw() { this->skipDraw = TRUE; } // Address: 0x00012770 -// Matching: no +// Status: unimplemented void Game::fatal() { } // Address: 0x000127B0 -// Matching: yes +// Status: matching void Game::setDrawMode(DrawMode mode) { this->drawMode = mode; } // Address: 0x000127C0 -// Matching: yes +// Status: matching void Game::setGlobal(GlobalIndex index, unsigned val) { this->globals[index] = val; } // Address: 0x000127E0 -// Matching: yes +// Status: matching unsigned Game::getGlobal(GlobalIndex index) { return this->globals[index]; } // Address: 0x000127F0 -// Matching: no +// Status: unimplemented void Game::addToDrawList(GameObj * obj) { } // Address: 0x00012840 -// Matching: no +// Status: unimplemented void Game::removeFromDrawList(GameObj * obj) { } // Address: 0x00012870 -// Matching: yes +// Status: matching void Game::setObj(GameObjIndex index, GameObj * obj) { if (0 <= index && index < OBJ_CNT) this->objects[index] = obj; } // Address: 0x00012890 -// Matching: yes +// Status: matching void Game::unsetObj(GameObjIndex index) { if (0 <= index && this->objects[index] != NULL) this->objects[index] = NULL; } // Address: 0x000128C0 -// Matching: yes +// Status: matching GameObj * Game::getObj(GameObjIndex index) { return 0 <= index ? this->objects[index] : NULL; } // Address: 0x000128E0 -// Matching: yes +// Status: matching int Game::allocObjIndex(GameObjIndex min, GameObjIndex max) { if (min <= max) do if (this->objects[min] == NULL) return min; @@ -455,13 +455,13 @@ int Game::allocObjIndex(GameObjIndex min, GameObjIndex max) { } // Address: 0x00012910 -// Matching: yes +// Status: matching BOOL Game::objIndexAvail(GameObjIndex index) { return this->objects[index] == NULL; } // Address: 0x00012930 -// Matching: yes +// Status: matching void Game::swapObjs(GameObjIndex index1, GameObjIndex index2) { GameObj * tmp = this->objects[index1]; this->objects[index1] = this->objects[index2]; @@ -472,37 +472,37 @@ void Game::swapObjs(GameObjIndex index1, GameObjIndex index2) { } // Address: 0x00012980 -// Matching: no +// Status: unimplemented void Game::clearScreen() { } // Address: 0x000129B0 -// Matching: yes +// Status: matching void Game::enableSomeExtraDrawListCode() { this->runSomeExtraDrawListCode = TRUE; } // Address: 0x000129C0 -// Matching: yes +// Status: matching void Game::setLogosStarted(BOOL val) { this->logosStarted = val; } // Address: 0x000129D0 -// Matching: yes +// Status: matching void Game::clearDrawPriorityList() { this->drawPriorityListHead = NULL; this->drawPriorityListEndNext = &g_game->drawPriorityListHead; } // Address: 0x000129F0 -// Matching: yes +// Status: matching GameObj * Game::getDrawPriorityListHead() { return this->drawPriorityListHead; } // Address: 0x00012A00 -// Matching: yes +// Status: matching void Game::appendToDrawPriorityList(GameObj * obj) { obj->drawPriorityListNext = NULL; *this->drawPriorityListEndNext = obj; @@ -510,7 +510,7 @@ void Game::appendToDrawPriorityList(GameObj * obj) { } // Address: 0x00012A20 -// Matching: no +// Status: unimplemented void Game::sortDrawPriorityListSingleLevel(unsigned char sortKeyBitOffset) { for ( unsigned i = 0; @@ -520,35 +520,35 @@ void Game::sortDrawPriorityListSingleLevel(unsigned char sortKeyBitOffset) { } // Address: 0x00012AC0 -// Matching: yes +// Status: matching void Game::setFallbackBgColour(D3DCOLOR colour, BOOL useFallback) { this->useFallbackBgColour = useFallback; this->bgColourFallback = colour; } // Address: 0x00012AE0 -// Matching: no +// Status: unimplemented RootExecObj::RootExecObj(GameObj * parent, GameObjIndex index, GameObjFlags flags) : GameObj(parent, index, flags) { } // Address: 0x00012BE0 -// Matching: no +// Status: matching RootExecObj::~RootExecObj() { } // Address: 0x00012C10 -// Matching: no +// Status: unimplemented void Game::initRootExecObj() { } // Address: 0x00012C80 -// Matching: no +// Status: unimplemented void Game::drawList(GameObjFlags flagFilterAll, BOOL unknown) { } // Address: 0x000131A0 -// Matching: no +// Status: nonmatching void Game::sortDrawPriorityList() { this->sortDrawPriorityListSingleLevel(0x00); this->sortDrawPriorityListSingleLevel(0x08); @@ -557,23 +557,23 @@ void Game::sortDrawPriorityList() { } // Address: 0x000131F0 -// Matching: no +// Status: unimplemented void Game::drawObjs() { } // Address: 0x00013930 -// Matching: no +// Status: unimplemented void Game::draw() { } // Address: 0x00013A80 -// Matching: no +// Status: unimplemented void Game::frame() { readInput(); } // Address: 0x00013F80 -// Matching: yes +// Status: matching int Game::mainLoop() { if (this->initState >= 0) while (true) { if (!this->fatalErr) this->frame(); @@ -585,7 +585,7 @@ int Game::mainLoop() { } // Address: 0x00013FC0 -// Matching: no +// Status: nonmatching void removeFromObjListByIndex(GameObjIndex index) { GameObj * obj = g_game->getObj(index); if (obj != NULL) { diff --git a/decompile/src/JSRF/GameData.cpp b/decompile/src/JSRF/GameData.cpp index 0efbbbc..1b6f69f 100644 --- a/decompile/src/JSRF/GameData.cpp +++ b/decompile/src/JSRF/GameData.cpp @@ -13,347 +13,347 @@ GameData g_gameData = GameData(); // Address: 0x00039B50 -// Matching: no +// Status: unimplemented BOOL GameData::checkFlagCondition(unsigned cond) { return 0; } // Address: 0x00039BE0 -// Matching: no +// Status: unimplemented void GameData::writeStateFlag(unsigned flagVal) { } // Address: 0x00039C70 -// Matching: no +// Status: unimplemented void GameData::incrementChapter() { } // Address: 0x00039C80 -// Matching: no +// Status: unimplemented void GameData::setMissionDigits34(unsigned val) { } // Address: 0x00039C90 -// Matching: no +// Status: unimplemented void GameData::setSpawnPosIndex(unsigned val) { } // Address: 0x00039CA0 -// Matching: no +// Status: unimplemented unsigned GameData::getSpawnPosIndex() { return 0; } // Address: 0x00039CB0 -// Matching: no void GameData::unlockCharacter(unsigned charId) { +// Status: unimplemented } // Address: 0x00039CF0 -// Matching: no void GameData::lockCharacter(unsigned charId) { +// Status: unimplemented } // Address: 0x00039D10 -// Matching: no BOOL GameData::characterUnlocked(unsigned charId) { +// Status: unimplemented return 0; } // Address: 0x00039D40 -// Matching: no +// Status: unimplemented BOOL GameData::checkFlagConditions(unsigned * conds, unsigned count) { return 0; } // Address: 0x00039D80 -// Matching: no +// Status: unimplemented void GameData::writeStateFlags(unsigned * writes, unsigned count) { } // Address: 0x00039DB0 -// Matching: no +// Status: unimplemented BOOL GameData::checkFlagConditionUnpacked(FlagList flagList, unsigned index) { return 0; } // Address: 0x00039DE0 -// Matching: no +// Status: unimplemented void GameData::writeStateFlagUnpacked(FlagList flagList, unsigned index, unsigned val) { } // Address: 0x00039E10 -// Matching: no +// Status: unimplemented void GameData::setSoulSpawned(unsigned soulId) { } // Address: 0x00039E40 -// Matching: no +// Status: unimplemented BOOL GameData::getSoulSpawned(unsigned soulId) { return 0; } // Address: 0x00039E80 -// Matching: no +// Status: unimplemented void GameData::setSoulCollected(unsigned soulId) { } // Address: 0x00039EB0 -// Matching: no +// Status: unimplemented BOOL GameData::getSoulHeld(unsigned soulId) { return 0; } // Address: 0x00039EF0 -// Matching: no +// Status: unimplemented BOOL GameData::soulSpawnedUncollected(unsigned soulId) { return 0; } // Address: 0x00039F40 -// Matching: no +// Status: unimplemented void GameData::clearHeldSouls() { } // Address: 0x00039F60 -// Matching: no +// Status: unimplemented void GameData::restoreHeldSouls() { } // Address: 0x00039FD0 -// Matching: no +// Status: unimplemented unsigned GameData::getSoulCount() { return 0; } // Address: 0x0003A0A0 -// Matching: no +// Status: unimplemented unsigned GameData::getTotalSoulsInStage(unsigned stageId) { return 0; } // Address: 0x0003A130 -// Matching: no +// Status: unimplemented unsigned GameData::getHeldSoulsInStage(unsigned stageId) { return 0; } // Address: 0x0003A2B0 -// Matching: no +// Status: unimplemented BOOL GameData::getSoulCollectedBySize(TagSize size, unsigned index) { return 0; } // Address: 0x0003A2F0 -// Matching: no +// Status: unimplemented void GameData::setUnusedPerStageBitmask(unsigned stageId, unsigned index) { } // Address: 0x0003A340 -// Matching: no +// Status: unimplemented int GameData::getTagState(unsigned stageId, unsigned tagIndex, BOOL rivalTag) { return 0; } // Address: 0x0003A3A0 -// Matching: no +// Status: unimplemented void GameData::setTagState(unsigned stageId, unsigned tagIndex, BOOL rivalTag, unsigned val) { } // Address: 0x0003A400 -// Matching: no +// Status: unimplemented void GameData::setTagCovered(unsigned stageId, unsigned tagIndex, BOOL rivalTag, unsigned gangOrPlayer) { } // Address: 0x0003A4A0 -// Matching: no +// Status: unimplemented void GameData::setVolumeSettings(float volMusic, float volSfx) { } // Address: 0x0003A4C0 -// Matching: no +// Status: unimplemented void GameData::getVolumeSettings(float * outMusic, float * outSfx) { } // Address: 0x0003A4E0 -// Matching: no +// Status: unimplemented void GameData::setRumbleEnabled(BOOL val) { } // Address: 0x0003A4F0 -// Matching: no +// Status: unimplemented BOOL GameData::getRumbleEnabled() { return 0; } // Address: 0x0003A500 -// Matching: no +// Status: unimplemented void GameData::setGarageMusic(unsigned songId) { } // Address: 0x0003A510 -// Matching: no +// Status: unimplemented unsigned GameData::getGarageMusic() { return 0; } // Address: 0x0003A520 -// Matching: no +// Status: unimplemented void GameData::setUnusedBitfield(unsigned index) { } // Address: 0x0003A550 -// Matching: no +// Status: unimplemented void GameData::setMiscObjective(unsigned index) { } // Address: 0x0003A580 -// Matching: no +// Status: unimplemented BOOL GameData::getMiscObjective(unsigned index) { return 0; } // Address: 0x0003A5C0 -// Matching: no +// Status: unimplemented unsigned GameData::countMiscObjectives() { return 0; } // Address: 0x0003A690 -// Matching: no +// Status: unimplemented BOOL GameData::getHighScore(unsigned stageId, TestRunType type, unsigned rank, TestRunScore * out) { return 0; } // Address: 0x0003A750 -// Matching: no +// Status: unimplemented void GameData::incrementTimer(Timer timer) { } // Address: 0x0003A780 -// Matching: no +// Status: unimplemented unsigned GameData::getTimer(Timer timer) { return 0; } // Address: 0x0003A7B0 -// Matching: no +// Status: unimplemented void GameData::setTimer(Timer timer, unsigned frames) { } // Address: 0x0003A7F0 -// Matching: no +// Status: unimplemented void GameData::setSelectedTag(unsigned gangOrPlayer, TagSize size, unsigned tagId, BOOL multiplayer) { } // Address: 0x0003A820 -// Matching: no +// Status: unimplemented unsigned GameData::getSelectedTag(unsigned gangOrPlayer, TagSize size, BOOL multiplayer) { return 0; } // Address: 0x0003A840 -// Matching: no +// Status: unimplemented void GameData::setCustomTagSelected(unsigned gangOrPlayer, TagSize size, BOOL active, BOOL multiplayer) { } // Address: 0x0003A870 -// Matching: no +// Status: unimplemented BOOL GameData::getCustomTagSelected(unsigned gangOrPlayer, TagSize size, BOOL multiplayer) { return 0; } // Address: 0x0003A890 -// Matching: no +// Status: unimplemented void GameData::setEventSeen(unsigned eventId) { } // Address: 0x0003A8C0 -// Matching: no +// Status: unimplemented BOOL GameData::eventSeen(unsigned eventId) { return 0; } // Address: 0x0003A900 -// Matching: no +// Status: unimplemented void GameData::incrementPlaytime() { } // Address: 0x0003A910 -// Matching: yes +// Status: matching unsigned GameData::getSaveDataSize() { // 0x50 byte key + 0x3508 actual save data + 0x8 extra (why extra?) return 0x50 + sizeof this->saveActive + 0x8; } // Address: 0x0003A920 -// Matching: no +// Status: unimplemented BOOL GameData::decrypt(char * saveData) { return 0; } // Address: 0x0003AB60 -// Matching: no +// Status: unimplemented void GameData::encrypt(char * outSaveData) { } // Address: 0x0003AE00 -// Matching: no +// Status: unimplemented void GameData::getSaveDescription(SaveDescription * outDesc) { } // Address: 0x0003AE20 -// Matching: no +// Status: unimplemented void GameData::clearStateFlags(FlagListOrPtr flagList) { } // Address: 0x0003AEA0 -// Matching: no +// Status: unimplemented void GameData::resetTimer(Timer timer) { } // Address: 0x0003AED0 -// Matching: no +// Status: unimplemented GameData::GameData() { } // Address: 0x0003B3C0 -// Matching: no +// Status: unimplemented void GameData::resetSelectedTags() { } // Address: 0x0003B420 -// Matching: no +// Status: unimplemented void GameData::resetExceptSettingsAndSouls() { } // Address: 0x0003B5A0 -// Matching: no +// Status: unimplemented void GameData::resetExceptSettingsAndHighScores() { } // Address: 0x0003B640 -// Matching: no +// Status: unimplemented void GameData::resetExceptSettings() { } // Address: 0x0003B680 -// Matching: no +// Status: unimplemented void GameData::stash() { } // Address: 0x0003B6A0 -// Matching: no +// Status: unimplemented void GameData::stashRestoreExceptSpecialFlags() { } // Address: 0x0003B6F0 -// Matching: no +// Status: unimplemented void GameData::stashRestoreExceptHighScores() { } // Address: 0x0003B790 -// Matching: no +// Status: unimplemented void GameData::stashRestore() { } @@ -361,6 +361,6 @@ void GameData::stashRestore() { GameData::~GameData() {} // Address: 0x0003B7E0 -// Matching: no +// Status: unimplemented void GameData::addHighScore(unsigned stageId, TestRunType type, TestRunScore * score) { } diff --git a/decompile/src/JSRF/Jet2.cpp b/decompile/src/JSRF/Jet2.cpp index dbff36d..0db0134 100644 --- a/decompile/src/JSRF/Jet2.cpp +++ b/decompile/src/JSRF/Jet2.cpp @@ -13,7 +13,7 @@ Game * g_game; // Address: 0x0006F9E0 -// Matching: yes +// Status: matching void main(void) { g_game = new Game(NULL, 0); g_game->initRootExecObj(); diff --git a/decompile/src/Smilebit/MMatrix.cpp b/decompile/src/Smilebit/MMatrix.cpp index b4b4e09..80931d0 100644 --- a/decompile/src/Smilebit/MMatrix.cpp +++ b/decompile/src/Smilebit/MMatrix.cpp @@ -19,7 +19,7 @@ Mat4 * g_matrices[3]; // Address: 0x001BB690 -// Matching: yes +// Status: matching HRESULT __stdcall initMatrices(unsigned const count) { /* Initialize the matrix stack with the given number of matrices. The requested number of matrices is rounded up to the nearest multiple of two. diff --git a/decompile/src/XDK/CRT/CRT0.c b/decompile/src/XDK/CRT/crt0.c similarity index 94% rename from decompile/src/XDK/CRT/CRT0.c rename to decompile/src/XDK/CRT/crt0.c index bcaf52d..4432fdc 100644 --- a/decompile/src/XDK/CRT/CRT0.c +++ b/decompile/src/XDK/CRT/crt0.c @@ -17,7 +17,7 @@ DWORD __stdcall mainXapiStartup(LPVOID lpThreadParameter); // Address: 0x00148023 -// Matching: no +// Status: unimplemented void __cdecl mainCRTStartup(void) { /* The true entrypoint of the game, spawning a thread for the rest to run in The linker automatically sets this function to the entrypoint. @@ -25,7 +25,7 @@ The linker automatically sets this function to the entrypoint. } // Address: 0x00147FB4 -// Matching: no +// Status: unimplemented DWORD __stdcall mainXapiStartup(LPVOID const lpThreadParameter) { /* Runs some initialization and then calls main() */ main();