diff --git a/configure.py b/configure.py index 6a4fc5f2b16..5cceeee96b8 100755 --- a/configure.py +++ b/configure.py @@ -628,14 +628,14 @@ config.libs = [ Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_base.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_boss.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_explain.cpp"), - Object(NonMatching, "d/d_msg_scrn_item.cpp"), + Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_item.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_howl.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_jimaku.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_kanban.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_light.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_place.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_staff.cpp"), - Object(NonMatching, "d/d_msg_scrn_talk.cpp"), + Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_talk.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_scrn_tree.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_string_base.cpp"), Object(MatchingFor("GZ2E01"), "d/d_msg_string.cpp"), @@ -919,7 +919,7 @@ config.libs = [ Object(NonMatching, "Z2AudioLib/Z2LinkMgr.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(NonMatching, "Z2AudioLib/Z2EnvSeMgr.cpp"), Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2WolfHowlMgr.cpp"), - Object(NonMatching, "Z2AudioLib/Z2SpeechMgr2.cpp"), + Object(MatchingFor("GZ2E01"), "Z2AudioLib/Z2SpeechMgr2.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(NonMatching, "Z2AudioLib/Z2AudioMgr.cpp"), ], }, diff --git a/include/JSystem/J2DGraph/J2DPane.h b/include/JSystem/J2DGraph/J2DPane.h index 1278e455a93..97a9e1235a6 100644 --- a/include/JSystem/J2DGraph/J2DPane.h +++ b/include/JSystem/J2DGraph/J2DPane.h @@ -144,7 +144,7 @@ public: MtxP getGlbMtx() { return mGlobalMtx; } - JGeometry::TBox2& getGlbBounds() { return mGlobalBounds; } + const JGeometry::TBox2& getGlbBounds() const { return mGlobalBounds; } void setMtx(Mtx m) { MTXCopy(m, mPositionMtx); } diff --git a/include/JSystem/JGadget/binary.h b/include/JSystem/JGadget/binary.h index 3f4485803b8..71be3ed5530 100644 --- a/include/JSystem/JGadget/binary.h +++ b/include/JSystem/JGadget/binary.h @@ -93,7 +93,7 @@ struct TValueIterator { const void* get() const { return mBegin; } typename Parser::ParseType operator*() const { - return *(typename Parser::ParseType*)get(); + return Parser::parse(get()); } TValueIterator& operator++() { @@ -127,7 +127,6 @@ struct TParseValue_misaligned : TParseValue_raw_ { template struct TValueIterator_misaligned : public TValueIterator, sizeof(T)> { - TValueIterator_misaligned(const TValueIterator_misaligned& other) : TValueIterator, sizeof(T)>(other) {} TValueIterator_misaligned(const void* begin) : TValueIterator, sizeof(T)>(begin) {} }; diff --git a/include/JSystem/JGadget/pointer.h b/include/JSystem/JGadget/pointer.h index 183684237f2..ac38df93f97 100644 --- a/include/JSystem/JGadget/pointer.h +++ b/include/JSystem/JGadget/pointer.h @@ -7,6 +7,7 @@ template class TPointer { public: TPointer(T* ptr) : mPtr(ptr) {} + ~TPointer() {} void set(T* ptr) { mPtr = ptr; } T* mPtr; }; @@ -22,4 +23,4 @@ public: } -#endif \ No newline at end of file +#endif diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index 50ad426d360..68cfab23156 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -12,7 +12,7 @@ void JMAVECScaleAdd(register const Vec* vec1, register const Vec* vec2, register register f32 scale); inline int JMAAbs(int value) { - return value > 0 ? value : -value; + return __abs(value); } inline f32 JMAFastReciprocal(f32 value) { diff --git a/include/JSystem/JMath/random.h b/include/JSystem/JMath/random.h index 4b4babb2f79..cfb8ecc1aa3 100644 --- a/include/JSystem/JMath/random.h +++ b/include/JSystem/JMath/random.h @@ -20,10 +20,6 @@ struct TRandom_fast_ { u32 get_bit32(void) { return this->get(); } - u8 get_uint8(u8 param_0) { - return get_ufloat_1() * param_0; - } - // due to the float constant, having this function inlined adds that float to data, // making it not match float get_ufloat_1(void) { @@ -39,6 +35,17 @@ struct TRandom_fast_ { void setSeed(u32 seed) { value = seed; } }; + +template +class TRandom_ : public RandomT { +public: + TRandom_(u32 value) : RandomT(value) {} + + u8 get_uint8(u8 param_0) { + return get_ufloat_1() * param_0; + } +}; + } // namespace JMath #endif /* RANDOM_H */ diff --git a/include/JSystem/JUtility/JUTAssert.h b/include/JSystem/JUtility/JUTAssert.h index fa8dc58074f..95767093ed6 100644 --- a/include/JSystem/JUtility/JUTAssert.h +++ b/include/JSystem/JUtility/JUTAssert.h @@ -17,6 +17,9 @@ #define JUT_WARN(LINE, ...) \ JUTAssertion::setWarningMessage_f(JUTAssertion::getSDevice(), __FILE__, LINE, __VA_ARGS__); \ +#define JUT_WARN_1(LINE, ...) \ + JUTAssertion::setWarningMessage_f(1, __FILE__, LINE, __VA_ARGS__); \ + #define JUT_LOG(LINE, ...) \ JUTAssertion::setLogMessage_f(JUTAssertion::getSDevice(), __FILE__, LINE, __VA_ARGS__) @@ -28,6 +31,7 @@ #define JUT_ASSERT_MSG(...) (void)0; #define JUT_PANIC(...) #define JUT_WARN(...) +#define JUT_WARN_1(...) #define JUT_LOG(...) #define JUT_CONFIRM(...) #endif diff --git a/include/Z2AudioLib/Z2SceneMgr.h b/include/Z2AudioLib/Z2SceneMgr.h index da2db509b0f..2db1c7edfec 100644 --- a/include/Z2AudioLib/Z2SceneMgr.h +++ b/include/Z2AudioLib/Z2SceneMgr.h @@ -30,13 +30,13 @@ public: bool loadSeWave(u32); bool loadBgmWave(u32); - bool isSceneExist() const { return sceneExist; } + bool isSceneExist() { return sceneExist; } int getCurrentSceneNum() const { return sceneNum; } s8 getCurrentRoomNum() { return roomNum; } bool isInGame() const { return inGame; } void setInGame(bool i_inGame) { inGame = i_inGame; } bool isInDarkness() const { return inDarkness; } - s8 getRoomReverb() const { return dComIfGp_getReverb(roomNum); } + s8 getRoomReverb() { return dComIfGp_getReverb(roomNum); } bool isMovieDemo() { return sceneNum == 2 || sceneNum == 8 || sceneNum == 9; } s32 getSeLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 0); } s32 getBgmLoadStatus(u32 wave) { return getWaveLoadStatus(wave, 1); } diff --git a/include/Z2AudioLib/Z2SpeechMgr2.h b/include/Z2AudioLib/Z2SpeechMgr2.h index cf5cf9514fd..ee0e3a5e19c 100644 --- a/include/Z2AudioLib/Z2SpeechMgr2.h +++ b/include/Z2AudioLib/Z2SpeechMgr2.h @@ -33,7 +33,7 @@ struct Z2SpeechMgr2 : public JASGlobalInstance { /* 0x000 */ JAISoundHandle field_0x0; /* 0x004 */ JAISoundHandle field_0x4; - /* 0x008 */ JMath::TRandom_fast_ random; + /* 0x008 */ JMath::TRandom_ random; /* 0x00C */ Z2SpeechStarter mSpeech; /* 0x010 */ u16 mText[500]; /* 0x3F8 */ s16 mTextNum; diff --git a/include/d/d_demo.h b/include/d/d_demo.h index 47be9c8d55d..d8d88941cc6 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -121,7 +121,7 @@ public: } void setModel(J3DModel* p_model) { mModel = p_model; } - u8 checkEnable(u16 flag) { return mFlags & flag; } + BOOL checkEnable(u16 flag) { return mFlags & flag; } void onEnable(u16 flag) { mFlags |= flag; } cXyz& getTrans() { return mTrans; } cXyz& getScale() { return mScale; } diff --git a/include/d/d_event.h b/include/d/d_event.h index 6f8e892a30d..d47e8da71c1 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -132,6 +132,7 @@ public: u8 getGtItm() { return mGtItm; } void startCheckSkipEdge(void* param_0) { setSkipProc(param_0, dEv_noFinishSkipProc, 0); } bool checkSkipEdge() { return chkFlag2(8) != false; } + void setDebugStb(u8 stb) { mDebugStb = stb; } public: /* 0x000 */ u8 field_0x0[4]; diff --git a/include/d/d_meter_HIO.h b/include/d/d_meter_HIO.h index 9c7d6d6aa5a..b928ec7afed 100644 --- a/include/d/d_meter_HIO.h +++ b/include/d/d_meter_HIO.h @@ -552,13 +552,21 @@ public: /* 0xA8 */ u8 mAnimDebug; }; // Size: 0xAC -class dMeter_drawHIO_c { +class dMeter_drawHIO_c : public JORReflexible { public: /* 801FF5B8 */ dMeter_drawHIO_c(); /* 80201128 */ virtual ~dMeter_drawHIO_c() {} + #ifdef DEBUG + virtual void listenPropertyEvent(const JORPropertyEvent*); + virtual void genMessage(JORMContext*); + #endif + /* 0x000 */ // vtable /* 0x004 */ s8 field_0x4; + #ifdef DEBUG + int field_0x8_debug; + #endif /* 0x008 */ f32 mLifeTopPosX; /* 0x00C */ f32 mLifeTopPosY; /* 0x010 */ f32 mNoMagicPosY; diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index c58396868c0..e146e6db81a 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -106,6 +106,9 @@ public: static void setWideZoomLightProjection(Mtx m) {} static void setFrameRate(u16 i_rate) { JFWDisplay::getManager()->setFrameRate(i_rate); } + // NONMATCHING - Need to define all mDoGph_gInf_c shieldD members + static u8 isWide() { return false; } + static GXTexObj mFrameBufferTexObj; static GXTexObj mZbufferTexObj; static bloom_c m_bloom; diff --git a/src/Z2AudioLib/Z2SoundInfo.cpp b/src/Z2AudioLib/Z2SoundInfo.cpp index ad9f0519dd4..1dda9961a47 100644 --- a/src/Z2AudioLib/Z2SoundInfo.cpp +++ b/src/Z2AudioLib/Z2SoundInfo.cpp @@ -236,7 +236,6 @@ u32 const JAUStdSoundTableType::STRM_CH_SHIFT = 2; /* 802BB8E0-802BBA10 2B6220 0130+00 1/0 0/0 0/0 .text * getStreamInfo__11Z2SoundInfoCF10JAISoundIDP9JAIStream */ -// NONMATCHING regalloc void Z2SoundInfo::getStreamInfo(JAISoundID param_1, JAIStream* param_2) const { int numChild; JAUSoundTableItem* data; diff --git a/src/Z2AudioLib/Z2SpeechMgr2.cpp b/src/Z2AudioLib/Z2SpeechMgr2.cpp index eeee84aabce..49f589fc903 100644 --- a/src/Z2AudioLib/Z2SpeechMgr2.cpp +++ b/src/Z2AudioLib/Z2SpeechMgr2.cpp @@ -1,6 +1,5 @@ // -// Generated By: dol2asm -// Translation Unit: Z2SpeechMgr2 +// Z2SpeechMgr2 // #include "Z2AudioLib/Z2SpeechMgr2.h" @@ -364,7 +363,7 @@ Z2SpeechMgr2::Z2SpeechMgr2() : JASGlobalInstance(true), random(0) /* 802CBD88-802CBF60 2C66C8 01D8+00 1/0 1/1 0/0 .text setString__12Z2SpeechMgr2FPCUssUcUs */ -void Z2SpeechMgr2::setString(u16 const* i_text, s16 i_textNum, u8 i_speaker, u16 i_mood) { +void Z2SpeechMgr2::setString(u16 const* s, s16 i_textNum, u8 i_speaker, u16 i_mood) { switch (i_speaker) { case 0x13: case 0x15: @@ -487,15 +486,21 @@ void Z2SpeechMgr2::setString(u16 const* i_text, s16 i_textNum, u8 i_speaker, u16 mText[i] = 0; } + JUT_ASSERT(383, s != 0); + if (i_textNum > 500) { mTextNum = 500; - JUT_WARN(387, "TOO MANY TEXT : now(%d) > max(%d)", i_textNum, 500); + JUT_WARN_1(387, "TOO MANY TEXT : now(%d) > max(%d)", i_textNum, 500); } else { mTextNum = i_textNum; } + #ifdef DEBUG + for (int i = 0; i <= mTextNum; i++) { + #else for (int i = 0; i < mTextNum; i++) { - mText[i] = i_text[i]; + #endif + mText[i] = s[i]; } mTextCount = 0; @@ -514,7 +519,11 @@ void Z2SpeechMgr2::setString(u16 const* i_text, s16 i_textNum, u8 i_speaker, u16 void Z2SpeechMgr2::setTextCount(s16 i_textCount) { if (mVoice != 99) { field_0x3ff = 0x0; + + #ifndef DEBUG i_textCount = (i_textCount == 0) ? 0 : i_textCount - 1; + #endif + bool all_text = false; if (mTextCount == 0 && i_textCount >= mTextNum) { all_text = true; @@ -587,8 +596,8 @@ void Z2SpeechMgr2::speakOneWord(bool param_0) { } u32 sound = mMood + Z2SE_HYL_MDN_RPLY; f32 fVar1 = Z2GetSceneMgr()->getRoomReverb() / 127.0f; - mSpeech.startSound(sound, &field_0x0, NULL, 0, - fVar1, 1.0f, 1.0f, -1.0f, -1.0f, 0); + bool soundStarted = + mSpeech.startSound(sound, &field_0x0, NULL, 0, fVar1, 1.0f, 1.0f, -1.0f, -1.0f, 0); mSpeech.setPortData(&field_0x0, 8, field_0x402[field_0x401 - 1] + 1, -1); if (field_0x400 == 0) { selectUnit(param_0); @@ -690,7 +699,6 @@ typedef struct { } Z2ConnectCost; /* 802CC4C0-802CC738 2C6E00 0278+00 2/2 0/0 0/0 .text selectUnit__12Z2SpeechMgr2Fb */ -// NONMATCHING minor regalloc void Z2SpeechMgr2::selectUnit(bool param_0) { Z2ConnectCost cost[5]; @@ -705,14 +713,14 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { if (field_0x401 != 0 && param_0) { cVar5 = 0; - ZVar2 = field_0x402[field_0x401 - 1]; + s8 ZVar4 = field_0x402[field_0x401 - 1]; while (true) { bool bVar1 = false; - ZVar3 = random.get_uint8(Z2MdnPrm::sPrm[mMood].field_0x8); + ZVar2 = random.get_uint8(Z2MdnPrm::sPrm[mMood].field_0x8); for (int i = 0; i < field_0x401; i++) { - if (field_0x402[i] == ZVar3) { + if (field_0x402[i] == ZVar2) { bVar1 = true; break; } @@ -723,7 +731,7 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { } for (int i = 0; i < cVar5; i++) { - if (ZVar3 == cost[i].field_0x0) { + if (ZVar2 == cost[i].field_0x0) { bVar1 = true; break; } @@ -733,23 +741,25 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { continue; } - u8 local_3f = JMAAbs(Z2MdnPrm::sPrm[mMood].field_0x0[ZVar3 * 2] - - Z2MdnPrm::sPrm[mMood].field_0x0[ZVar2 * 2 + 1]); - cost[cVar5] = (Z2ConnectCost){ZVar3, local_3f}; + const u8 (*prm)[2] = (u8 (*)[2])Z2MdnPrm::sPrm[mMood].field_0x0; + u8 local_3f = JMAAbs(prm[ZVar2][0] - prm[ZVar4][1]); + Z2ConnectCost connectCost = {ZVar2, local_3f}; + cost[cVar5] = connectCost; cVar5++; if (cVar5 == 5) { - u16 tmp = cost[0].field_0x1; - ZVar2 = cost[0].field_0x0; - for (int i = 0; i < 5; i++) { - if (cost[i].field_0x1 < tmp) { - tmp = cost[i].field_0x1; - ZVar2 = cost[i].field_0x0; - } - } break; } } + + u16 tmp = cost[0].field_0x1; + ZVar2 = cost[0].field_0x0; + for (int i = 0; i < 5; i++) { + if (cost[i].field_0x1 < tmp) { + tmp = cost[i].field_0x1; + ZVar2 = cost[i].field_0x0; + } + } } field_0x402[field_0x401] = ZVar2; @@ -757,7 +767,6 @@ void Z2SpeechMgr2::selectUnit(bool param_0) { } /* 802CC738-802CC9D0 2C7078 0298+00 1/1 0/0 0/0 .text selectTail__12Z2SpeechMgr2Fv */ -// NONMATCHING minor regalloc void Z2SpeechMgr2::selectTail() { Z2ConnectCost cost[5]; s8 cVar9 = 0; @@ -791,7 +800,8 @@ void Z2SpeechMgr2::selectTail() { if (!bVar5) { u8 local_3f = JMAAbs(Z2MdnPrm::sPrm[mMood].field_0x4[ZVar6] - Z2MdnPrm::sPrm[mMood].field_0x0[ZVar1 * 2 + 1]); - cost[cVar9] = (Z2ConnectCost){ZVar6, local_3f}; + Z2ConnectCost connectCost = {ZVar6, local_3f}; + cost[cVar9] = connectCost; cVar9++; if (cVar9 == bVar3 || cVar9 == 5) { diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index 49c5b0ff53a..02de206cc8d 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -5,6 +5,9 @@ #include "JSystem/JGadget/pointer.h" #include "JSystem/JGadget/define.h" +/* 80450620-80450628 0000A0 0002+06 3/3 1/1 0/0 .sdata m_branchId__7dDemo_c */ +s16 dDemo_c::m_branchId = -1; + namespace { /* 80037DE4-80037E44 032724 0060+00 1/0 0/0 0/0 .text * __dt__Q220@unnamed@d_demo_cpp@24jstudio_tAdaptor_messageFv */ @@ -19,17 +22,14 @@ void jstudio_tAdaptor_message::adaptor_do_MESSAGE(JStudio::data::TEOperationData case JStudio::data::UNK_0x19: JUT_ASSERT(107, pContent!=0); JUT_ASSERT(108, uSize==4); - dMsgObject_setDemoMessage(*(u32*)pContent); + u32 content = *(u32*)pContent; + dMsgObject_setDemoMessage(content); break; default: #ifdef DEBUG JGadget_outMessage msg(JGadget_outMessage::warning, __FILE__, 124); - const char* id_string = adaptor_getID_string(); - - msg << "unknown data-type : "; - msg << iType; - msg << "\n demo-object : "; - msg << id_string; + msg << "unknown data-type : " << iType << "\n demo-object : " << adaptor_getID_string(); + int x = 0; #else break; #endif @@ -48,24 +48,25 @@ jstudio_tCreateObject_message::create(JStudio::TObject** ppObject, const JStudio::stb::data::TParse_TBlock_object& iBlock) { JUT_ASSERT(168, ppObject!=0); - switch (iBlock.get_type()) { - case 'JMSG': { - jstudio_tAdaptor_message* adaptor = new jstudio_tAdaptor_message(); - if (adaptor == NULL) { - return false; + u32 type = iBlock.get_type(); + switch (type) { + case 'JMSG': + { + jstudio_tAdaptor_message* adaptor = new jstudio_tAdaptor_message(); + if (adaptor == NULL) { + return false; + } + + JGadget::TPointer_delete sp8(adaptor); + JStudio::TObject_message* object = JStudio::TCreateObject::createFromAdaptor(iBlock, adaptor); + if (object == NULL) { + return false; + } + + sp8.set(NULL); + *ppObject = object; } - - JGadget::TPointer_delete sp8(adaptor); - JStudio::TObject_message* object = JStudio::TCreateObject::createFromAdaptor(iBlock, adaptor); - if (object == NULL) { - return false; - } - - sp8.set(NULL); - *ppObject = object; - return true; - } default: return false; } @@ -96,6 +97,12 @@ dDemo_actor_c::~dDemo_actor_c() { mBtpId = -1; mBtkId = -1; mBrkId = -1; + + #ifdef DEBUG + if(dComIfGp_event_getMode() == 0) { + g_dComIfG_gameInfo.play.getEvent().setDebugStb(0); + } + #endif } /* 80038128-8003815C 032A68 0034+00 1/1 0/0 0/0 .text getActor__13dDemo_actor_cFv */ @@ -214,6 +221,7 @@ u16 dDemo_c::m_branchType; /* 80450E44-80450E48 000344 0004+00 5/5 0/0 0/0 .sbss m_branchData__7dDemo_c */ const u8* dDemo_c::m_branchData; + /* 80038338-80038490 032C78 0158+00 0/0 1/1 5/5 .text getDemoIDData__13dDemo_actor_cFPiPiPiPUsPUc */ // NONMATCHING - some stack issues @@ -222,7 +230,7 @@ int dDemo_actor_c::getDemoIDData(int* param_0, int* param_1, int* param_2, u16* JStudio::stb::TParseData_fixed<51, TValueIterator_misaligned > data(getPrm()->getData()); static JStudio::stb::TParseData_fixed<51, TValueIterator_misaligned > dummy; - static JGadget::binary::TValueIterator_misaligned it(dummy.begin()); + static JGadget::binary::TValueIterator_misaligned it = dummy.begin(); if (it == data.end()) { it = dummy.begin(); @@ -247,16 +255,17 @@ int dDemo_actor_c::getDemoIDData(int* param_0, int* param_1, int* param_2, u16* return 1; } +s16 dDemo_c::m_branchNum = 0; + /* 80038490-80038518 032DD0 0088+00 1/1 0/0 0/0 .text dDemo_getJaiPointer__FPCcUliPUs */ -// NONMATCHING - slight problem with loop static void* dDemo_getJaiPointer(char const* arcName, u32 anmID, int param_2, u16* param_3) { if (param_2 <= 0 || param_3 == NULL) { return NULL; } - int var_r31 = 0; - - for (int i = 0; i < param_2; i++, var_r31 += 2) { + int i; + int var_r31; + for (i = var_r31 = 0; i < param_2; i++, var_r31 += 2) { if ((u16)anmID == param_3[var_r31]) { return dComIfG_getObjectIDRes(arcName, param_3[var_r31 + 1]); } @@ -348,11 +357,6 @@ static void branchFile(char const* resName) { dDemo_c::setBranchData(branchData); } -/* 80450620-80450628 0000A0 0002+06 3/3 1/1 0/0 .sdata m_branchId__7dDemo_c */ -s16 dDemo_c::m_branchId = -1; - -s16 dDemo_c::m_branchNum = 0; - /* 800387EC-80038920 03312C 0134+00 1/0 0/0 0/0 .text JSGSetData__13dDemo_actor_cFUlPCvUl */ void dDemo_actor_c::JSGSetData(u32 id, void const* pdata, u32 param_2) { diff --git a/src/d/d_meter_HIO.cpp b/src/d/d_meter_HIO.cpp index 48739f3c65d..cbb0906c5a0 100644 --- a/src/d/d_meter_HIO.cpp +++ b/src/d/d_meter_HIO.cpp @@ -647,6 +647,9 @@ dMeter_drawLightDropHIO_c::dMeter_drawLightDropHIO_c() { /* 801FF5B8-802001AC 1F9EF8 0BF4+00 1/1 0/0 0/0 .text __ct__16dMeter_drawHIO_cFv */ dMeter_drawHIO_c::dMeter_drawHIO_c() { + #ifdef DEBUG + field_0x8_debug = 0; + #endif mLifeTopPosX = 40.0f; mLifeTopPosY = -5.6f; diff --git a/src/d/d_msg_scrn_base.cpp b/src/d/d_msg_scrn_base.cpp index 413fb4e5d33..af5a3b7b058 100644 --- a/src/d/d_msg_scrn_base.cpp +++ b/src/d/d_msg_scrn_base.cpp @@ -4,6 +4,7 @@ #include "d/d_msg_object.h" #include "d/d_msg_out_font.h" #include "d/d_pane_class.h" +#include "cstring.h" /* 8023C0DC-8023C124 236A1C 0048+00 0/0 9/9 0/0 .text __ct__14dMsgScrnBase_cFv */ dMsgScrnBase_c::dMsgScrnBase_c() { @@ -29,8 +30,7 @@ void dMsgScrnBase_c::init() { field_0x4c = 0; mCharInfoPtr = NULL; - mFontSize.mSizeY = 0.0f; - mFontSize.mSizeX = 0.0f; + mFontSize.mSizeX = mFontSize.mSizeY = 0.0f; mRubySize = 0.0f; mTextBoxPosX = 0.0f; mTextBoxPosY = 0.0f; @@ -86,11 +86,12 @@ void dMsgScrnBase_c::drawOutFont(f32 param_0, f32 param_1, f32 param_2) { } /* 8023C360-8023C3EC 236CA0 008C+00 0/0 2/2 0/0 .text setString__14dMsgScrnBase_cFPcPc */ -void dMsgScrnBase_c::setString(char* i_stringA, char* i_stringB) { +void dMsgScrnBase_c::setString(char* mpText, char* i_stringB) { for (int i = 0; i < 7; i++) { if (mpTm_c[i] != NULL) { + JUT_ASSERT(262, ((J2DTextBox*)(mpTm_c[i]->getPanePtr()))->getStringAllocByte() > std::strlen(mpText)); if (i == 0) { - strcpy(((J2DTextBox*)mpTm_c[i]->getPanePtr())->getStringPtr(), i_stringA); + strcpy(((J2DTextBox*)mpTm_c[i]->getPanePtr())->getStringPtr(), mpText); } else { strcpy(((J2DTextBox*)mpTm_c[i]->getPanePtr())->getStringPtr(), i_stringB); } @@ -100,10 +101,11 @@ void dMsgScrnBase_c::setString(char* i_stringA, char* i_stringB) { /* 8023C3EC-8023C458 236D2C 006C+00 0/0 2/2 0/0 .text setRubyString__14dMsgScrnBase_cFPc */ -void dMsgScrnBase_c::setRubyString(char* i_string) { +void dMsgScrnBase_c::setRubyString(char* mpText) { for (int i = 0; i < 3; i++) { if (mpTmr_c[i] != NULL) { - strcpy(((J2DTextBox*)mpTmr_c[i]->getPanePtr())->getStringPtr(), i_string); + JUT_ASSERT(288, ((J2DTextBox*)(mpTmr_c[i]->getPanePtr()))->getStringAllocByte() > std::strlen(mpText)); + strcpy(((J2DTextBox*)mpTmr_c[i]->getPanePtr())->getStringPtr(), mpText); } } } @@ -139,7 +141,7 @@ void dMsgScrnBase_c::fontAlpha(f32 i_alpha) { /* 8023C574-8023C5C8 236EB4 0054+00 1/0 8/8 0/0 .text isTalkNow__14dMsgScrnBase_cFv */ bool dMsgScrnBase_c::isTalkNow() { - switch (dMsgObject_c::getStatus()) { + switch (dMsgObject_getMsgObjectClass()->getStatus()) { case 5: case 6: case 7: @@ -153,4 +155,4 @@ bool dMsgScrnBase_c::isTalkNow() { default: return false; } -} \ No newline at end of file +} diff --git a/src/d/d_msg_scrn_item.cpp b/src/d/d_msg_scrn_item.cpp index 4fa887840fc..0a728eee445 100644 --- a/src/d/d_msg_scrn_item.cpp +++ b/src/d/d_msg_scrn_item.cpp @@ -1,6 +1,5 @@ // -// Generated By: dol2asm -// Translation Unit: msg/scrn/d_msg_scrn_item +// Item Message Screen // #include "d/d_msg_scrn_item.h" @@ -13,7 +12,9 @@ #include "d/d_meter_HIO.h" #include "d/d_item_data.h" #include "d/d_pane_class.h" +#include "d/d_s_play.h" #include "m_Do/m_Do_lib.h" +#include "m_Do/m_Do_graphic.h" #include "JSystem/J2DGraph/J2DAnmLoader.h" #include "JSystem/J2DGraph/J2DScreen.h" #include "JSystem/J2DGraph/J2DGrafContext.h" @@ -32,6 +33,13 @@ dMsgScrnItem_c::dMsgScrnItem_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { int iVar6 = dMsgObject_getMessageID(); bool bVar5 = false; + #ifdef DEBUG + if (dMsgObject_getMessageID() >= 0x10cc && dMsgObject_getMessageID() < 0x11cc) { + mItemIndex = dMsgObject_getMessageID() - 0x10cc; + bVar5 = true; + } + #endif + if (iVar6 >= 0x645 && iVar6 <= 0x648) { mItemIndex = iVar6 - 0x641; bVar5 = true; @@ -95,6 +103,7 @@ dMsgScrnItem_c::dMsgScrnItem_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { break; } } + if (isOugiID()) { JKRReadIdxResource(mpItemTex[0], 0xc00, 0x3d, dComIfGp_getItemIconArchive()); field_0x0e0[0] = (ResTIMG*)mpItemTex[0]; @@ -348,23 +357,29 @@ void dMsgScrnItem_c::exec() { } /* 8023FB24-8023FF30 23A464 040C+00 1/0 0/0 0/0 .text drawSelf__14dMsgScrnItem_cFv */ -// NONMATCHING Issues with float regs order void dMsgScrnItem_c::drawSelf() { J2DGrafContext* grafContext = dComIfGp_getCurrentGrafPort(); grafContext->setup2D(); - u8* iVar6 = (u8*)mCharInfoPtr; - if (*(s16*)(iVar6 + 0x1068) > 0) { + s16* pLen = (short*)((u8*)mCharInfoPtr + 0x1068); + if (*pLen > 0) { f32 dVar12 = mpTm_c[0]->getAlphaRate(); - for (int i = 0; i < *(short*)(iVar6 + 0x1068); i = i + 1) { + for (int i = 0; i < *pLen; i = i + 1) { mpLight_c->draw(&mCharInfoPtr[i].field_0x14, mCharInfoPtr[i].field_0x00, mCharInfoPtr[i].field_0x04, mCharInfoPtr[i].field_0x08, mCharInfoPtr[i].field_0x0c, dVar12 * g_MsgObject_HIO_c.mBoxItemHaloAlpha, mCharInfoPtr[i].mColorNo); } } - mpTm_c[0]->getGlobalPosX(); - drawOutFont(g_MsgObject_HIO_c.mBoxItemTextPosX - 2.0f, g_MsgObject_HIO_c.mBoxItemTextPosY, - 1.0f); + + f32 globalPosX = mpTm_c[0]->getGlobalPosX(); + if (mDoGph_gInf_c::isWide()) { + drawOutFont(g_MsgObject_HIO_c.mBoxItemTextPosX + 7.0f + YREG_F(2), + g_MsgObject_HIO_c.mBoxItemTextPosY, 1.0f); + } else { + drawOutFont(g_MsgObject_HIO_c.mBoxItemTextPosX - 2.0f + YREG_F(2), + g_MsgObject_HIO_c.mBoxItemTextPosY, 1.0f); + } + mpTxScreen->draw(0.0f, 0.0f, grafContext); mpSelect_c->draw(0.0f, 0.0f); mpArrow_c->draw(); @@ -414,17 +429,19 @@ void dMsgScrnItem_c::drawSelf() { if (g_drawHIO.mItemScaleAdjustON == true) { texScale = (g_drawHIO.mItemScalePercent / 100.0f); } else if (mItemIndex >= 0 && mItemIndex <= 0xff) { - texScale = dItem_data::item_resource[(u8)mItemIndex].getTexScale() / 100.0f; + texScale = dItem_data::getTexScale(mItemIndex) / 100.0f; } else { texScale = 1.0f; }; - // operation order is wrong here - mpItemPane[i]->draw( - mpScreen->search('set_it_n')->getGlbBounds().i.x + g_MsgObject_HIO_c.mBoxItemPosX + - (field_0x174 - (field_0x17c * texScale)) / 2, - mpScreen->search('set_it_n')->getGlbBounds().i.y + g_MsgObject_HIO_c.mBoxItemPosY + - (field_0x170 - (field_0x178 * texScale)) / 2, - field_0x19e, false, false); + + mpItemPane[i]->draw(mpScreen->search('set_it_n')->getGlbBounds().i.x + + 0.5f * (field_0x170 - (field_0x178 * texScale)) + + g_MsgObject_HIO_c.mBoxItemPosX, + mpScreen->search('set_it_n')->getGlbBounds().i.y + + 0.5f * (field_0x174 - (field_0x17c * texScale)) + + g_MsgObject_HIO_c.mBoxItemPosY, + field_0x178 * texScale, field_0x17c * texScale, field_0x19e, false, + false); } } } @@ -596,7 +613,6 @@ void dMsgScrnItem_c::fukiPosCalc(u8 param_1) { } } - /* 8024074C-802407E8 23B08C 009C+00 1/1 0/0 0/0 .text * setBtk0Animation__14dMsgScrnItem_cFP19J2DAnmTextureSRTKey */ void dMsgScrnItem_c::setBtk0Animation(J2DAnmTextureSRTKey* param_1) { diff --git a/src/d/d_msg_scrn_talk.cpp b/src/d/d_msg_scrn_talk.cpp index 1b5aa62fe41..2f2eb3dc015 100644 --- a/src/d/d_msg_scrn_talk.cpp +++ b/src/d/d_msg_scrn_talk.cpp @@ -1,5 +1,4 @@ // -// Generated By: dol2asm // Translation Unit: msg/scrn/d_msg_scrn_talk // @@ -17,161 +16,6 @@ #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/J2DGraph/J2DGrafContext.h" #include "JSystem/J2DGraph/J2DScreen.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void __ct__14dMsgScrnTalk_cFUcUcP10JKRExpHeap(); -extern "C" void __dt__14dMsgScrnTalk_cFv(); -extern "C" void exec__14dMsgScrnTalk_cFv(); -extern "C" void drawSelf__14dMsgScrnTalk_cFv(); -extern "C" void arwAnimeInit__14dMsgScrnTalk_cFv(); -extern "C" void arwAnimeMove__14dMsgScrnTalk_cFv(); -extern "C" void dotAnimeInit__14dMsgScrnTalk_cFv(); -extern "C" void dotAnimeMove__14dMsgScrnTalk_cFv(); -extern "C" void setSelectString__14dMsgScrnTalk_cFPcPcPc(); -extern "C" void setSelectRubyString__14dMsgScrnTalk_cFPcPcPc(); -extern "C" void isSelect__14dMsgScrnTalk_cFv(); -extern "C" void selectAnimeInit__14dMsgScrnTalk_cFUcUcfUc(); -extern "C" void selectAnimeMove__14dMsgScrnTalk_cFUcUcb(); -extern "C" void selectAnimeEnd__14dMsgScrnTalk_cFv(); -extern "C" void fukiScale__14dMsgScrnTalk_cFf(); -extern "C" void fukiTrans__14dMsgScrnTalk_cFff(); -extern "C" void fukiAlpha__14dMsgScrnTalk_cFf(); -extern "C" void fukiPosCalc__14dMsgScrnTalk_cFUc(); -extern "C" extern char const* const msg_scrn_d_msg_scrn_talk__stringBase0; - -// -// External References: -// - -extern "C" void mDoExt_getMesgFont__Fv(); -extern "C" void mDoLib_project__FP3VecP3Vec(); -extern "C" void dComIfGp_getSubHeap2D__Fi(); -extern "C" void -drawPikari__13dMeter2Draw_cFffPffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorfUc(); -extern "C" void getActor__12dMsgObject_cFv(); -extern "C" void __ct__17dMsgScrn3Select_cFv(); -extern "C" void isSelect__17dMsgScrn3Select_cFv(); -extern "C" void setString__17dMsgScrn3Select_cFPcPcPc(); -extern "C" void setRubyString__17dMsgScrn3Select_cFPcPcPc(); -extern "C" void translate__17dMsgScrn3Select_cFff(); -extern "C" void draw__17dMsgScrn3Select_cFff(); -extern "C" void selAnimeInit__17dMsgScrn3Select_cFUcUcUcfUc(); -extern "C" void selAnimeMove__17dMsgScrn3Select_cFUcUcb(); -extern "C" void selAnimeEnd__17dMsgScrn3Select_cFv(); -extern "C" void getTextBoxWidth__17dMsgScrn3Select_cFv(); -extern "C" void getFontSize__17dMsgScrn3Select_cFv(); -extern "C" void getRubyFontSize__17dMsgScrn3Select_cFv(); -extern "C" void getCharSpace__17dMsgScrn3Select_cFv(); -extern "C" void getRubyCharSpace__17dMsgScrn3Select_cFv(); -extern "C" void getTextBoxGlobalPosX__17dMsgScrn3Select_cFi(); -extern "C" void getTextBoxGlobalPosY__17dMsgScrn3Select_cFi(); -extern "C" void __ct__15dMsgScrnArrow_cFv(); -extern "C" void draw__15dMsgScrnArrow_cFv(); -extern "C" void setPos__15dMsgScrnArrow_cFff(); -extern "C" void arwAnimeInit__15dMsgScrnArrow_cFv(); -extern "C" void arwAnimeMove__15dMsgScrnArrow_cFv(); -extern "C" void dotAnimeInit__15dMsgScrnArrow_cFv(); -extern "C" void dotAnimeMove__15dMsgScrnArrow_cFv(); -extern "C" void __ct__14dMsgScrnBase_cFv(); -extern "C" void __dt__14dMsgScrnBase_cFv(); -extern "C" void init__14dMsgScrnBase_cFv(); -extern "C" void multiDraw__14dMsgScrnBase_cFv(); -extern "C" void draw__14dMsgScrnBase_cFv(); -extern "C" void drawOutFont__14dMsgScrnBase_cFfff(); -extern "C" void fontAlpha__14dMsgScrnBase_cFf(); -extern "C" void isTalkNow__14dMsgScrnBase_cFv(); -extern "C" void __ct__15dMsgScrnLight_cFUcUc(); -extern "C" void draw__15dMsgScrnLight_cFPffffffUc(); -extern "C" void __ct__8CPaneMgrFP9J2DScreenUxUcP10JKRExpHeap(); -extern "C" void reinit__8CPaneMgrFv(); -extern "C" void getGlobalPosX__8CPaneMgrFv(); -extern "C" void getGlobalPosY__8CPaneMgrFv(); -extern "C" void setBlackWhite__8CPaneMgrFQ28JUtility6TColorQ28JUtility6TColor(); -extern "C" void getGlobalVtxCenter__8CPaneMgrFP7J2DPanebs(); -extern "C" void dPaneClass_showNullPane__FP9J2DScreen(); -extern "C" void setAlphaRate__13CPaneMgrAlphaFf(); -extern "C" void getAlphaRate__13CPaneMgrAlphaFv(); -extern "C" bool __eq__4cXyzCFRC3Vec(); -extern "C" void alloc__7JKRHeapFUli(); -extern "C" void free__7JKRHeapFPv(); -extern "C" void* __nw__FUl(); -extern "C" void __dl__FPv(); -extern "C" void getBounds__7J2DPaneFv(); -extern "C" void __ct__9J2DScreenFv(); -extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive(); -extern "C" void draw__9J2DScreenFffPC14J2DGrafContext(); -extern "C" void setString__10J2DTextBoxFsPCce(); -extern "C" void _savegpr_21(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _savegpr_28(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_21(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80399BB0-80399BB0 026210 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80399BB0 = "zelda_message_window_new.blo"; -SECTION_DEAD static char const* const stringBase_80399BCD = "zelda_message_window_text_seirei.blo"; -SECTION_DEAD static char const* const stringBase_80399BF2 = "zelda_message_window_text.blo"; -SECTION_DEAD static char const* const stringBase_80399C10 = ""; -#pragma pop - -/* 803C13C8-803C1420 01E4E8 0058+00 2/2 0/0 0/0 .data __vt__14dMsgScrnTalk_c */ -SECTION_DATA extern void* __vt__14dMsgScrnTalk_c[22] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)draw__14dMsgScrnBase_cFv, - (void*)__dt__14dMsgScrnTalk_cFv, - (void*)exec__14dMsgScrnTalk_cFv, - (void*)multiDraw__14dMsgScrnBase_cFv, - (void*)drawSelf__14dMsgScrnTalk_cFv, - (void*)setSelectString__14dMsgScrnTalk_cFPcPcPc, - (void*)setSelectRubyString__14dMsgScrnTalk_cFPcPcPc, - (void*)arwAnimeInit__14dMsgScrnTalk_cFv, - (void*)arwAnimeMove__14dMsgScrnTalk_cFv, - (void*)dotAnimeInit__14dMsgScrnTalk_cFv, - (void*)dotAnimeMove__14dMsgScrnTalk_cFv, - (void*)isSelect__14dMsgScrnTalk_cFv, - (void*)selectAnimeInit__14dMsgScrnTalk_cFUcUcfUc, - (void*)selectAnimeMove__14dMsgScrnTalk_cFUcUcb, - (void*)selectAnimeEnd__14dMsgScrnTalk_cFv, - (void*)fukiScale__14dMsgScrnTalk_cFf, - (void*)fukiTrans__14dMsgScrnTalk_cFff, - (void*)fukiAlpha__14dMsgScrnTalk_cFf, - (void*)fontAlpha__14dMsgScrnBase_cFf, - (void*)fukiPosCalc__14dMsgScrnTalk_cFUc, -}; - -/* 80454D00-80454D04 003300 0004+00 2/2 0/0 0/0 .sdata2 @4086 */ -SECTION_SDATA2 static f32 lit_4086 = 18.0f; - -/* 80454D04-80454D08 003304 0004+00 3/3 0/0 0/0 .sdata2 @4087 */ -SECTION_SDATA2 static u8 lit_4087[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; - -/* 80454D08-80454D0C 003308 0004+00 1/1 0/0 0/0 .sdata2 @4088 */ -SECTION_SDATA2 static f32 lit_4088 = -10.0f; - -/* 80454D0C-80454D10 00330C 0004+00 1/1 0/0 0/0 .sdata2 @4089 */ -SECTION_SDATA2 static f32 lit_4089 = 6.0f / 5.0f; /* 80246FF0-80247A90 241930 0AA0+00 0/0 1/1 0/0 .text __ct__14dMsgScrnTalk_cFUcUcP10JKRExpHeap */ dMsgScrnTalk_c::dMsgScrnTalk_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { @@ -341,7 +185,6 @@ dMsgScrnTalk_c::dMsgScrnTalk_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { } } - /* 80247A90-80247D34 2423D0 02A4+00 1/0 0/0 0/0 .text __dt__14dMsgScrnTalk_cFv */ dMsgScrnTalk_c::~dMsgScrnTalk_c() { delete mpScreen; @@ -383,10 +226,6 @@ dMsgScrnTalk_c::~dMsgScrnTalk_c() { dComIfGp_getMsgCommonArchive()->removeResourceAll(); } -/* ############################################################################################## */ -/* 80454D10-80454D14 003310 0004+00 2/2 0/0 0/0 .sdata2 @4197 */ -SECTION_SDATA2 static f32 lit_4197 = 1.0f; - /* 80247D34-80247E4C 242674 0118+00 1/0 0/0 0/0 .text exec__14dMsgScrnTalk_cFv */ void dMsgScrnTalk_c::exec() { if (isTalkNow()) { @@ -406,24 +245,15 @@ void dMsgScrnTalk_c::exec() { } } - -/* ############################################################################################## */ -/* 80454D14-80454D18 003314 0004+00 1/1 0/0 0/0 .sdata2 @4278 */ -SECTION_SDATA2 static f32 lit_4278 = 4.0f / 5.0f; - -/* 80454D18-80454D1C 003318 0004+00 1/1 0/0 0/0 .sdata2 @4279 */ -SECTION_SDATA2 static f32 lit_4279 = -1.0f; - /* 80247E4C-802480F0 24278C 02A4+00 1/0 0/0 0/0 .text drawSelf__14dMsgScrnTalk_cFv */ -// NONMATCHING - regalloc void dMsgScrnTalk_c::drawSelf() { - CharInfo_c* pCharInfo; - J2DGrafContext* grafContext = dComIfGp_getCurrentGrafPort(); - grafContext->setup2D(); - pCharInfo = mCharInfoPtr; - if (*(s16*)(pCharInfo + 150) > 0) { + J2DGrafContext* grafContext[1]; + grafContext[0] = dComIfGp_getCurrentGrafPort(); + grafContext[0]->setup2D(); + s16* pLen = (s16*)(mCharInfoPtr + 150); + if (*pLen > 0) { f32 dVar10 = mpTm_c[0]->getAlphaRate(); - for (int i = 0; i < *(s16*)(pCharInfo + 150); i++) { + for (int i = 0; i < *pLen; i++) { if (dMsgObject_getMsgObjectClass()->getFukiKind() == 8) { if (field_0xf8[i] >= 0.0f) { f32 fVar1; @@ -465,7 +295,7 @@ void dMsgScrnTalk_c::drawSelf() { } } drawOutFont(0.0f, 0.0f, 1.0f); - mpTxScreen->draw(0.0f, 0.0f, grafContext); + mpTxScreen->draw(0.0f, 0.0f, grafContext[0]); if (mpSelect_c != NULL) { mpSelect_c->draw(0.0f, 0.0f); } @@ -560,50 +390,6 @@ void dMsgScrnTalk_c::fukiAlpha(f32 param_1) { } } -/* ############################################################################################## */ -/* 80454D1C-80454D20 00331C 0004+00 1/1 0/0 0/0 .sdata2 @4489 */ -SECTION_SDATA2 static f32 lit_4489 = 608.0f; - -/* 80454D20-80454D24 003320 0004+00 1/1 0/0 0/0 .sdata2 @4490 */ -SECTION_SDATA2 static f32 lit_4490 = 448.0f; - -/* 80454D24-80454D28 003324 0004+00 1/1 0/0 0/0 .sdata2 @4491 */ -SECTION_SDATA2 static f32 lit_4491 = 0.5f; - -/* 80454D28-80454D2C 003328 0004+00 1/1 0/0 0/0 .sdata2 @4492 */ -SECTION_SDATA2 static f32 lit_4492 = 50.0f; - -/* 80454D2C-80454D30 00332C 0004+00 1/1 0/0 0/0 .sdata2 @4493 */ -SECTION_SDATA2 static f32 lit_4493 = 105.0f; - -/* 80454D30-80454D34 003330 0004+00 1/1 0/0 0/0 .sdata2 @4494 */ -SECTION_SDATA2 static f32 lit_4494 = 486.0f; - -/* 80454D34-80454D38 003334 0004+00 1/1 0/0 0/0 .sdata2 @4495 */ -SECTION_SDATA2 static f32 lit_4495 = 230.0f; - -/* 80454D38-80454D3C 003338 0004+00 1/1 0/0 0/0 .sdata2 @4496 */ -SECTION_SDATA2 static f32 lit_4496 = 235.0f; - -/* 80454D3C-80454D40 00333C 0004+00 1/1 0/0 0/0 .sdata2 @4497 */ -SECTION_SDATA2 static f32 lit_4497 = 355.0f; - -/* 80454D40-80454D44 003340 0004+00 1/1 0/0 0/0 .sdata2 @4498 */ -SECTION_SDATA2 static f32 lit_4498 = 209.0f; - -/* 80454D44-80454D48 003344 0004+00 1/1 0/0 0/0 .sdata2 @4499 */ -SECTION_SDATA2 static f32 lit_4499 = -190.0f; - -/* 80454D48-80454D50 003348 0004+04 1/1 0/0 0/0 .sdata2 @4500 */ -SECTION_SDATA2 static f32 lit_4500[1 + 1 /* padding */] = { - 190.0f, - /* padding */ - 0.0f, -}; - -/* 80454D50-80454D58 003350 0008+00 1/1 0/0 0/0 .sdata2 @4502 */ -SECTION_SDATA2 static f64 lit_4502 = 4503601774854144.0 /* cast s32 to float */; - /* 8024835C-80248954 242C9C 05F8+00 1/0 0/0 0/0 .text fukiPosCalc__14dMsgScrnTalk_cFUc */ void dMsgScrnTalk_c::fukiPosCalc(u8 param_1) { msg_class* msgActor = dMsgObject_c::getActor(); @@ -659,7 +445,7 @@ void dMsgScrnTalk_c::fukiPosCalc(u8 param_1) { switch (field_0x488) { case 1: dVar15 = g_MsgObject_HIO_c.mBoxPos[2][0]; - field_0xf0 = 235.0f - (mpScreen->search('n_all')->getBounds().i.y + + field_0xf0 = 105.0f - (mpScreen->search('n_all')->getBounds().i.y + mpScreen->search('n_all')->getBounds().f.y) / 2; if (mpSelect_c != NULL) { mpSelect_c->translate(486.0f, 230.0f); @@ -667,7 +453,7 @@ void dMsgScrnTalk_c::fukiPosCalc(u8 param_1) { break; case 2: dVar15 = g_MsgObject_HIO_c.mBoxPos[1][0]; - field_0xf0 = 105.0f - (mpScreen->search('n_all')->getBounds().i.y + + field_0xf0 = 235.0f - (mpScreen->search('n_all')->getBounds().i.y + mpScreen->search('n_all')->getBounds().f.y) / 2; if (mpSelect_c != NULL) { mpSelect_c->translate(486.0f, 355.0f); diff --git a/src/d/d_msg_unit.cpp b/src/d/d_msg_unit.cpp index 997abcfcb56..b429956f201 100644 --- a/src/d/d_msg_unit.cpp +++ b/src/d/d_msg_unit.cpp @@ -4,6 +4,7 @@ // #include "d/d_msg_unit.h" +#include "d/d_com_inf_game.h" #include "stdio.h" #include "d/d_kankyo.h" #include "d/d_meter2_info.h" @@ -18,10 +19,15 @@ dMsgUnit_c::~dMsgUnit_c() {} // NONMATCHING - regalloc void dMsgUnit_c::setTag(int param_1, int param_2, char* param_3, bool param_4) { *param_3 = 0; + bool stack9 = false; + bool stack8 = false; + int param_2b = param_2; if (param_1 == 0x10000) { sprintf(param_3, "%d", param_2); } else if (param_1 == 0x10001) { - sprintf(param_3, "%d-%d", param_2 / 10, param_2 % 10); + int tens_digit = param_2 / 10; + int ones_digit = param_2 % 10; + sprintf(param_3, "%d-%d", tens_digit, ones_digit); } else if (param_1 == 4 && param_4 == true) { int r6 = param_2 / 1000; int r5 = r6 / 60; @@ -34,51 +40,83 @@ void dMsgUnit_c::setTag(int param_1, int param_2, char* param_3, bool param_4) { sprintf(param_3, "%d:%02d", r5, r6); } } else if (param_1 == 3 && param_4 == true) { + f32 iVar8b; f32 dayTime = g_env_light.getDaytime(); - f32 iVar8 = 1000000.0f * dayTime; - iVar8 = ((s32)iVar8 % 15000000) / 1000000.0f; - iVar8 = 60.0f * (iVar8 / 15.0f); - sprintf(param_3, "%d:%02d", (s32)(dayTime / 15.0f), (s32)iVar8); + f32 fVar1 = dayTime / 15.0f; + iVar8b = ((s32)(1000000.0f * dayTime) % 15000000) / 1000000.0f; + f32 iVar8c = 60.0f * (iVar8b / 15.0f); + iVar8b = ((s32)(1000000.0f * dayTime) % 250000) / 1000000.0f; + f32 iVar9 = 60.0f * (iVar8b / 0.25f); + sprintf(param_3, "%d:%02d", (s32)(fVar1), (s32)iVar8c); } else { if (param_1 == 9 && param_4 == true) { - sprintf(param_3, "%d", param_2); + int param_2c = param_2; + sprintf(param_3, "%d", param_2c); + stack8 = true; } - bmg_header_t* iVar9 = (bmg_header_t*)dMeter2Info_getMsgUnitResource(); - inf1_section_t* inf1 = NULL; - str1_section_t* str1 = NULL; - int local_114 = sizeof(bmg_header_t); - u32 size = iVar9->size; - bmg_section_t* piVar12 = iVar9->section; - for (; local_114 < size; local_114 += piVar12->size) { - switch(piVar12->msgType) { - case 'FLW1': - break; - case 'FLI1': - break; - case 'DAT1': - break; - case 'INF1': - inf1 = (inf1_section_t*)piVar12; - break; - case 'STR1': - str1 = (str1_section_t*)piVar12; - break; + + if (!stack9) { + bmg_header_t* iVar9 = (bmg_header_t*)dMeter2Info_getMsgUnitResource(); + inf1_section_t* inf1 = NULL; + const void* dat1 = NULL; + str1_section_t* str1 = NULL; + int local_114 = sizeof(bmg_header_t); + u32 size = iVar9->size; + bmg_section_t* piVar12 = (bmg_section_t*)(((u8*)iVar9) + local_114); + for (; local_114 < size; local_114 += piVar12->size) { + switch(piVar12->msgType) { + case 'FLW1': + break; + case 'FLI1': + break; + case 'INF1': + inf1 = (inf1_section_t*)piVar12; + break; + case 'DAT1': + dat1 = piVar12; + break; + case 'STR1': + str1 = (str1_section_t*)piVar12; + break; + } + piVar12 = (bmg_section_t*)((u8*)piVar12 + piVar12->size); + } + + // This section is weird. The debug seems like entriesStr is outside the condition + // but the normal build doesn't really work with that. Same for inf1->entries. + + #ifdef DEBUG + inf1_entry_t* entry = &inf1->entries[param_1]; + u32 dat1EntryOffset = entry->dat1EntryOffset; + u16 startFrame = entry->startFrame; + u16 endFrame = entry->endFrame; + const char* entriesStr = str1->entries->str; + #else + u16 startFrame = inf1->entries[param_1].startFrame; + u16 endFrame = inf1->entries[param_1].endFrame; + const char* entriesStr; + #endif + const char* uVar5; + if (param_2 == 1 + #ifdef DEBUG + || (dComIfGs_getPalLanguage() == 3 && param_2 == 0) + #endif + ) { + #ifdef DEBUG + uVar5 = entriesStr + endFrame; + } else { + uVar5 = entriesStr + startFrame; + #else + uVar5 = str1->entries->str + endFrame; + } else { + uVar5 = str1->entries->str + startFrame; + #endif + } + if (strcmp(uVar5, "") == 0) { + sprintf(param_3, "%d%s", param_2, uVar5); + } else { + sprintf(param_3, "%d %s", param_2, uVar5); } - piVar12 = (bmg_section_t*)((u8*)piVar12 + piVar12->size); - } - - u32 uVar1 = inf1->entries[param_1].startFrame; - u32 uVar2 = inf1->entries[param_1].endFrame; - const char* uVar5; - if (param_2 == 1) { - uVar5 = str1->entries->str + uVar1; - } else { - uVar5 = str1->entries->str + uVar2; - } - if (strcmp(uVar5, "") == 0) { - sprintf(param_3, "%d%s", param_2, uVar5); - } else { - sprintf(param_3, "%d %s", param_2, uVar5); } if (param_1 == 3 && param_4 == true) { char acStack_d8[20]; @@ -87,7 +125,7 @@ void dMsgUnit_c::setTag(int param_1, int param_2, char* param_3, bool param_4) { } if (param_1 == 4 && param_4 == true) { char acStack_ec[20]; - setTag(5, param_2, acStack_ec, false); + setTag(5, param_2b, acStack_ec, false); strcat(param_3, acStack_ec); } }