diff options
| author | robojumper <robojumper@gmail.com> | 2025-04-06 23:15:50 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-04-07 22:12:41 +0200 |
| commit | d14d64ef672bab94f835fe894d8dc83094075809 (patch) | |
| tree | a5ab3dd689010104c11b4f4bf71ecc0857959d31 /src | |
| parent | 45bc91d2636900dc0e279dcdc4b298fe0840e3dd (diff) | |
some d_message additions
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/d_message.cpp | 114 |
1 files changed, 112 insertions, 2 deletions
diff --git a/src/d/d_message.cpp b/src/d/d_message.cpp index 4633ff8a..f0c01978 100644 --- a/src/d/d_message.cpp +++ b/src/d/d_message.cpp @@ -1,16 +1,21 @@ #include "d/d_message.h" #include "common.h" +#include "d/d_sc_game.h" #include "d/d_tag_processor.h" #include "d/d_textunk.h" +#include "egg/core/eggHeap.h" #include "f/f_base.h" #include "f/f_profile.h" #include "f/f_profile_name.h" #include "libms/libms.h" #include "libms/msgfile.h" #include "sized_string.h" +#include "toBeSorted/arc_managers/oarc_manager.h" +#include "toBeSorted/event_manager.h" #include "toBeSorted/global_fi_context.h" + SPECIAL_BASE_PROFILE(MESSAGE, dMessage_c, fProfile::MESSAGE, 0x2A8, 0); static const char *sMsbtFileNames[82] = { @@ -181,12 +186,28 @@ static char *sMsbfFileNames[80] = { "599-Demo.msbf", }; +static char *sArcNames[] = { + "0-Common", "1-Town", "2-Forest", "3-Mountain", "4-Desert", "5-CenterField", +}; + dMessage_c *dMessage_c::sInstance; dTagProcessor_c *dMessage_c::sTagProcessor; -static void *msbAlloc(size_t size) {} +static void *msbAlloc(size_t size) { + if (UnkTextThing::getInstance()->getField_0x7B6() == false) { + return EGG::Heap::alloc(size, 0x20, nullptr); + } else { + return UnkTextThing::getInstance()->allocUnk(size, 0x20); + } +} -static void msbFree(void *ptr) {} +static void msbFree(void *ptr) { + if (UnkTextThing::getInstance()->getField_0x7B6() == false) { + EGG::Heap::free(ptr, nullptr); + } else { + UnkTextThing::getInstance()->destroyUnk(ptr); + } +} dMessage_c::dMessage_c() { sInstance = this; @@ -251,6 +272,16 @@ int dMessage_c::doDelete() { } int dMessage_c::execute() { + if (field_0x2FC != 0 && !EventManager::isInEvent()) { + field_0x2FC = 0; + } + + if (field_0x2FC > 0) { + field_0x2FC--; + } + executeMinigame(); + sTagProcessor->execute(); + return SUCCEEDED; } @@ -394,6 +425,10 @@ s32 dMessage_c::getTextIndexForLabel(const char *label) { return LMS_GetTextIndexByLabel(info, label); } +s32 dMessage_c::getMsbtIndexForLabel(const char *label) { + return sInstance->getMsbtIndexForLabelInternal(label); +} + s32 dMessage_c::getMsbtIndexForLabelInternal(const char *label) { if (mCurrentTextFileNumber <= 81) { MsbtInfo *info = getMsbtInfoForIndex(mCurrentTextFileNumber); @@ -426,6 +461,19 @@ MsbtInfo *dMessage_c::getMsbtInfoForIndexInternal(s32 index) { return mpMsgs[index]; } +MsbfInfo *dMessage_c::getMsbfInfoForIndex(s32 index) { + return sInstance->getMsbfInfoForIndexInternal(index); +} + +MsbfInfo *dMessage_c::getMsbfInfoForIndexInternal(s32 index) { + UnkTextThing *thing = UnkTextThing::getInstance(); + MsbfInfo *overrideMsbf = thing->getMsbfInfo(index); + if (overrideMsbf != nullptr && thing->getField_0x7B4() == true) { + return overrideMsbf; + } + return mpFlows[index]; +} + extern "C" u8 fn_80054F30(); static SizedString<8> sCurrentLanguage; @@ -441,6 +489,68 @@ const char *dMessage_c::getLanguageIdentifier() { return sCurrentLanguage; } +const char *dMessage_c::getArcNameByIndex(s32 idx, bool global) { + return getArcNameByIndexInternal(idx, global); +} + +const char *dMessage_c::getArcNameByIndexInternal(s32 idx, bool global) { + return sArcNames[idx]; +} + +void *dMessage_c::getDataFromMsbArc(s32 number, const char *fileName, bool global) { + SizedString<128> path; + path.sprintf("%s/%s", getLanguageIdentifier(), getArcNameByIndex(number, global)); + return OarcManager::GetInstance()->getData(path, fileName); +} + +void dMessage_c::setZevFromMsbArc() { + SizedString<128> path; + path.sprintf("%s/dat/zev.dat", getArcNameByIndex(0, false)); + sZev0 = getDataFromMsbArc(0, path, false); + sZevStage = nullptr; +} + +void dMessage_c::setStageZevFromMsbArc() { + SizedString<32> stage = dScGame_c::currentSpawnInfo.stageName; + char buf[2]; + buf[0] = stage[1]; + buf[1] = '\0'; + + SizedString<128> path; + + int i = atoi(buf) + 1; + + // TODO figure out what this is + if (stage == "t_tkm24" || stage == "t_tkm26") { + i = 2; + } else if (i < 1 || 6 <= i) { + i = 0; + } + path.sprintf("%s/dat/zev.dat", getArcNameByIndex(i, false)); + sZevStage = getDataFromMsbArc(i, path, false); +} + +void *dMessage_c::sZev0; +void *dMessage_c::sZevStage; + +void *dMessage_c::getZev0Internal() { + UnkTextThing *thing = UnkTextThing::getInstance(); + void *overrideZev = thing->getField_0x74C(); + if (overrideZev != nullptr && thing->getField_0x7B4() == true) { + return overrideZev; + } + return sZev0; +} + +void *dMessage_c::getZevStageInternal() { + UnkTextThing *thing = UnkTextThing::getInstance(); + void *overrideZev = thing->getField_0x750(); + if (overrideZev != nullptr && thing->getField_0x7B4() == true) { + return overrideZev; + } + return sZevStage; +} + s32 dMessage_c::getArcIndexForFile(const char *fileName) { char buf[2]; buf[0] = fileName[0]; |
