This commit is contained in:
robojumper
2025-04-04 01:41:19 +02:00
parent e5a24391fb
commit 3535968370
18 changed files with 178 additions and 28 deletions
+9 -9
View File
@@ -555,8 +555,8 @@ fn_80016700 = .text:0x80016700; // type:function size:0x160
fn_80016860 = .text:0x80016860; // type:function size:0x28
createLightTextures = .text:0x80016890; // type:function size:0x98
fn_80016930 = .text:0x80016930; // type:function size:0x2C
fn_80016960 = .text:0x80016960; // type:function size:0x130
fn_80016A90 = .text:0x80016A90; // type:function size:0xCC
fn_80016960__3d3dFRC7mVec3_cRC7mVec3_c = .text:0x80016960; // type:function size:0x130
fn_80016A90__3d3dFRC7mVec3_c = .text:0x80016A90; // type:function size:0xCC
fn_80016B60 = .text:0x80016B60; // type:function size:0xAC
__ct__Q23d3d13AnmMdlWrapperFv = .text:0x80016C10; // type:function size:0x88
__dt__Q23d3d13AnmMdlWrapperFv = .text:0x80016CA0; // type:function size:0xB0
@@ -3591,7 +3591,7 @@ fn_800A07D0 = .text:0x800A07D0; // type:function size:0x58
mainEventSetUnkActorLink = .text:0x800A0830; // type:function size:0x44
findActorBySpecialName = .text:0x800A0880; // type:function size:0x10
getCurrentEventActorBasedOnGroup = .text:0x800A0890; // type:function size:0x58
fn_800A08F0 = .text:0x800A08F0; // type:function size:0x58
fn_800A08F0__12EventManagerFQ27fBase_c12GROUP_TYPE_e = .text:0x800A08F0; // type:function size:0x58
checkButton2HeldForCutscenes = .text:0x800A0950; // type:function size:0x60
fn_800A09B0 = .text:0x800A09B0; // type:function size:0x1D0
fn_800A0B80 = .text:0x800A0B80; // type:function size:0x10
@@ -3888,9 +3888,9 @@ destroyMsg__12UnkTextThingFP8MsbtInfo = .text:0x800B2050; // type:function size:
destroyFlow__12UnkTextThingFP8MsbfInfo = .text:0x800B2090; // type:function size:0x40
__sinit_\d_textunk_cpp = .text:0x800B20D0; // type:function size:0xC scope:local
LytMsgWindowUnk__ctor = .text:0x800B20E0; // type:function size:0x48
fn_800B2130 = .text:0x800B2130; // type:function size:0x370
textAdvancingRelated = .text:0x800B24A0; // type:function size:0x5FC
fn_800B2AA0 = .text:0x800B2AA0; // type:function size:0x80
fn_800B2130__13TextWindowUnkFPCcP10dTextBox_cPvb = .text:0x800B2130; // type:function size:0x370
textAdvancingRelated__13TextWindowUnkFbb = .text:0x800B24A0; // type:function size:0x5FC
fn_800B2AA0__13TextWindowUnkFv = .text:0x800B2AA0; // type:function size:0x80
somethingWithTextboxEndState = .text:0x800B2B20; // type:function size:0x48
LytMsgWindowUnk__checkTextEndReached = .text:0x800B2B70; // type:function size:0x1C
LytMsgWindowUnk__initSomethingMaybe = .text:0x800B2B90; // type:function size:0xD8
@@ -6823,7 +6823,7 @@ fn_80116FC0 = .text:0x80116FC0; // type:function size:0x10
fn_80116FD0 = .text:0x80116FD0; // type:function size:0xC0
fn_80117090 = .text:0x80117090; // type:function size:0x1AC
LytMsgWindow__isNotStateInvisible = .text:0x80117240; // type:function size:0x4C
LytMsgWindow__setTextToDisplay = .text:0x80117290; // type:function size:0x24
setTextToDisplay__15dLytMsgWindow_cFPCw = .text:0x80117290; // type:function size:0x24
fn_801172C0 = .text:0x801172C0; // type:function size:0x50
fn_80117310 = .text:0x80117310; // type:function size:0x4C
fn_80117360 = .text:0x80117360; // type:function size:0x14
@@ -6883,7 +6883,7 @@ fn_8011A090 = .text:0x8011A090; // type:function size:0x198
fn_8011A230 = .text:0x8011A230; // type:function size:0x158
__dt__17dLytAutoExplain_cFv = .text:0x8011A390; // type:function size:0x118
__dt__17dLytAutoCaption_cFv = .text:0x8011A4B0; // type:function size:0x118
fn_8011A5D0 = .text:0x8011A5D0; // type:function size:0x1AC
fn_8011A5D0__15dLytMsgWindow_cCFv = .text:0x8011A5D0; // type:function size:0x1AC
changeState__86sStateMgr_c<17dLytAutoCaption_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8011A780; // type:function size:0x10
changeState__86sStateMgr_c<17dLytAutoExplain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x8011A790; // type:function size:0x10
fn_8011A7A0 = .text:0x8011A7A0; // type:function size:0x10
@@ -10920,7 +10920,7 @@ fn_801B25D0 = .text:0x801B25D0; // type:function size:0x2C
fn_801B2600 = .text:0x801B2600; // type:function size:0xC
fn_801B2610 = .text:0x801B2610; // type:function size:0x180
fn_801B2790 = .text:0x801B2790; // type:function size:0x98
fn_801B2830 = .text:0x801B2830; // type:function size:0xC
isValidTextLabel__10dMessage_cFPCc = .text:0x801B2830; // type:function size:0xC
fn_801B2840 = .text:0x801B2840; // type:function size:0x38
getMsbtFileName__10dMessage_cFl = .text:0x801B2880; // type:function size:0x88
getMsbfFileName__10dMessage_cFl = .text:0x801B2910; // type:function size:0x88
+1
View File
@@ -39,6 +39,7 @@ public:
return field_0x32A;
}
static bool isValidTextLabel(const char *name);
static void loadTextByLabel(const char *label, dTagProcessor_c *tagProcessor, bool, u32, u32);
private:
+12
View File
@@ -82,6 +82,18 @@ public:
return field_0x90C;
}
u8 getField_0x90D() const {
return field_0x90D;
}
u8 getField_0x90E() const {
return field_0x90E;
}
s32 getField_0x830() const {
return field_0x830;
}
void setMsgWindowSubtype(u8 type) {
field_0x90C = type;
}
+1
View File
@@ -11,6 +11,7 @@ public:
virtual ~TextWindowUnk() {}
void fn_800B2130(const char *, dTextBox_c *, void*, bool);
void fn_800B2AA0();
void textAdvancingRelated(bool, bool);
const wchar_t *getProcessedText() const {
+1 -1
View File
@@ -17,7 +17,7 @@ public:
build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) override;
/* vt 0x14 */ virtual bool remove() override;
/* vt 0x18 */ virtual bool execute() override;
/* vt 0x1C */ virtual void open() override;
/* vt 0x1C */ virtual void open(dAcObjBase_c *obj, u32 param) override;
/* vt 0x20 */ virtual bool isDoneOpening() const override;
/* vt 0x24 */ virtual void close() override;
/* vt 0x28 */ virtual bool isDoneClosing() const override;
+1 -1
View File
@@ -17,7 +17,7 @@ public:
build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) override;
/* vt 0x14 */ virtual bool remove() override;
/* vt 0x18 */ virtual bool execute() override;
/* vt 0x1C */ virtual void open() override;
/* vt 0x1C */ virtual void open(dAcObjBase_c *obj, u32 param) override;
/* vt 0x20 */ virtual bool isDoneOpening() const override;
/* vt 0x24 */ virtual void close() override;
/* vt 0x28 */ virtual bool isDoneClosing() const override;
+5 -1
View File
@@ -6,6 +6,7 @@
#include "d/lyt/d2d.h"
#include "d/lyt/msg_window/d_lyt_msg_window_common.h"
#include "d/lyt/msg_window/d_lyt_msg_window_select_btn.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "sized_string.h"
@@ -23,10 +24,10 @@ public:
bool remove();
private:
static bool isValidTextLabel(const char *name);
void setTextToDisplay(const wchar_t *text);
void createSubMsgManager(u8 type);
void removeSubMsgManagers();
bool fn_8011A5D0() const;
static dLytMsgWindow_c *sInstance;
@@ -68,6 +69,9 @@ private:
/* 0x748 */ dLytAutoExplain_c *mpAutoExplain;
/* 0x74C */ dLytAutoCaption_c *mpAutoCaption;
/* 0x750 */ u8 _0x750[0x768 - 0x750];
/* 0x768 */ mVec3_c field_0x768;
/* 0x774 */ s32 field_0x774;
/* 0x778 */ s32 field_0x778;
/* 0x77C */ s32 field_0x77C;
@@ -2,6 +2,7 @@
#define D_LYT_MGS_WINDOW_COMMON_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_tag_processor.h"
#include "d/lyt/d2d.h"
#include "m/m2d.h"
@@ -13,7 +14,7 @@ public:
/* vt 0x10 */ virtual bool build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor);
/* vt 0x14 */ virtual bool remove();
/* vt 0x18 */ virtual bool execute();
/* vt 0x1C */ virtual void open();
/* vt 0x1C */ virtual void open(dAcObjBase_c *obj, u32 param);
/* vt 0x20 */ virtual bool isDoneOpening() const;
/* vt 0x24 */ virtual void close();
/* vt 0x28 */ virtual bool isDoneClosing() const;
@@ -18,7 +18,7 @@ public:
build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) override;
/* vt 0x14 */ virtual bool remove() override;
/* vt 0x18 */ virtual bool execute() override;
/* vt 0x1C */ virtual void open() override;
/* vt 0x1C */ virtual void open(dAcObjBase_c *obj, u32 param) override;
/* vt 0x20 */ virtual bool isDoneOpening() const override;
/* vt 0x24 */ virtual void close() override;
/* vt 0x28 */ virtual bool isDoneClosing() const override;
@@ -1,6 +1,7 @@
#ifndef D_LYT_MSG_WINDOW_WOOD_H
#define D_LYT_MSG_WINDOW_WOOD_H
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_tag_processor.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_common_a_btn.h"
@@ -18,7 +19,7 @@ public:
build(d2d::ResAccIf_c *resAcc1, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) override;
/* vt 0x14 */ virtual bool remove() override;
/* vt 0x18 */ virtual bool execute() override;
/* vt 0x1C */ virtual void open() override;
/* vt 0x1C */ virtual void open(dAcObjBase_c *obj, u32 param) override;
/* vt 0x20 */ virtual bool isDoneOpening() const override;
/* vt 0x24 */ virtual void close() override;
/* vt 0x28 */ virtual bool isDoneClosing() const override;
+4
View File
@@ -10,6 +10,7 @@
#include "m/m3d/m_proc.h"
#include "m/m_color.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/tlist.h"
@@ -17,6 +18,9 @@
namespace d3d {
f32 fn_80016960(const mVec3_c&, const mVec3_c& pos);
bool fn_80016A90(const mVec3_c& pos);
class AnmMdlWrapper : protected m3d::mdlAnmChr {
public:
AnmMdlWrapper();
+3 -2
View File
@@ -3,11 +3,11 @@
#define EVENT_MANAGER_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "f/f_base.h"
#include "sized_string.h"
#include "toBeSorted/event.h"
#include <cstring>
class dAcBase_c;
class EventManager {
@@ -16,6 +16,7 @@ public:
static bool finishEvent(dAcBase_c *actor, const char *eventName);
static void changeOwnEvent(dAcBase_c *actor1, dAcBase_c *actor2, Event *event, UNKWORD);
static bool alsoSetAsCurrentEvent(dAcBase_c *actor, Event *event, void *unknown);
static dAcObjBase_c *fn_800A08F0(fBase_c::GROUP_TYPE_e);
static EventManager *sInstance;
+1
View File
@@ -7,6 +7,7 @@ extern "C" void *BGM_MGR;
extern "C" void fn_8035E000();
extern "C" void fn_8035E860(void *);
extern "C" void fn_8035E310(void *);
extern "C" void fn_8035E820(void *);
extern "C" void fn_8035E880(void *);
extern "C" void *ENEMY_SOUND_MGR;
+1 -1
View File
@@ -146,7 +146,7 @@ void dLytAutoCaption_c::draw() {
mLyt.draw();
}
void dLytAutoCaption_c::open() {
void dLytAutoCaption_c::open(dAcObjBase_c *obj, u32 param) {
mShouldBeOpen = true;
}
+1 -1
View File
@@ -139,7 +139,7 @@ void dLytAutoExplain_c::draw() {
mLyt.draw();
}
void dLytAutoExplain_c::open() {
void dLytAutoExplain_c::open(dAcObjBase_c *obj, u32 param) {
mShouldBeOpen = true;
}
+131 -7
View File
@@ -1,6 +1,7 @@
#include "d/lyt/msg_window/d_lyt_msg_window.h"
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_message.h"
#include "d/d_tag_processor.h"
#include "d/d_textunk.h"
@@ -13,9 +14,14 @@
#include "d/lyt/d_lyt_auto_explain.h"
#include "d/lyt/d_lyt_auto_caption.h"
// clang-format on
#include "f/f_base.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
#include "toBeSorted/d_d3d.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/global_fi_context.h"
#include "toBeSorted/music_mgrs.h"
STATE_DEFINE(dLytMsgWindow_c, Invisible);
STATE_DEFINE(dLytMsgWindow_c, In);
@@ -129,7 +135,7 @@ void dLytMsgWindow_c::executeState_Invisible() {
mStateMgr.changeState(StateID_WaitKeyMapClose);
} else if (field_0x80C) {
field_0x80C = 0;
if (isValidTextLabel(mName)) {
if (dMessage_c::isValidTextLabel(mName)) {
mNameCopy = mName;
dMessage_c::loadTextByLabel(mNameCopy, mpTagProcessor, true, 0, 0);
@@ -204,7 +210,28 @@ void dLytMsgWindow_c::executeState_Invisible() {
}
void dLytMsgWindow_c::finalizeState_Invisible() {}
void dLytMsgWindow_c::initializeState_In() {}
extern "C" s32 lbl_80575134;
extern "C" s32 lbl_8057511C;
void dLytMsgWindow_c::initializeState_In() {
dAcObjBase_c *obj = EventManager::fn_800A08F0(fBase_c::ACTOR);
u32 param = 0;
if (mpTagProcessor->getField_0x90D() == 1) {
param = 0;
} else if (mpTagProcessor->getField_0x90D() == 2) {
param = 2;
} else if (mpTagProcessor->getField_0x90D() == 3) {
param = 1;
} else if (obj != nullptr && d3d::fn_80016A90(obj->poscopy2)) {
d3d::fn_80016960(field_0x768, obj->poscopy2);
// TODO - stack and FPR problems
field_0x768 = mVec3_c(field_0x768.x, field_0x768.y, 0.0f);
if (field_0x768.y < lbl_8057511C / 3.0f + lbl_80575134) {
param = 2;
}
}
mpCurrentSubtype->open(obj, param);
}
void dLytMsgWindow_c::executeState_In() {
if (mpCurrentSubtype->isDoneOpening()) {
mStateMgr.changeState(StateID_OutputText);
@@ -221,16 +248,113 @@ void dLytMsgWindow_c::initializeState_OutputText() {
void dLytMsgWindow_c::executeState_OutputText() {}
void dLytMsgWindow_c::finalizeState_OutputText() {}
void dLytMsgWindow_c::initializeState_WaitKeyChangePage0() {}
void dLytMsgWindow_c::executeState_WaitKeyChangePage0() {}
extern "C" bool checkButtonAPressed();
void dLytMsgWindow_c::initializeState_WaitKeyChangePage0() {
if (field_0x811 != 0) {
field_0x812 = 1;
} else if (field_0x814 == 0) {
fn_8035E860(BGM_MGR);
}
}
void dLytMsgWindow_c::executeState_WaitKeyChangePage0() {
bool allowChange = false;
if (field_0x811 != 0) {
if (mpTagProcessor->getField_0x830() <= 0) {
allowChange = true;
}
} else if (field_0x814 != 0) {
if (field_0x813 != 0) {
field_0x813 = 0;
allowChange = true;
}
} else if (checkButtonAPressed() || fn_8011A5D0()) {
fn_8035E880(BGM_MGR);
allowChange = true;
}
if (!allowChange) {
return;
}
if (field_0x811 == 0) {
mStateMgr.changeState(StateID_WaitKeyChangePage1);
} else {
mpMsgWindowUnk->fn_800B2AA0();
if (mpTagProcessor->getMsgWindowSubtype() >= 6 && mpTagProcessor->getMsgWindowSubtype() < 8) {
mpMsgWindowUnk->textAdvancingRelated(true, true);
}
setTextToDisplay(mpMsgWindowUnk->getProcessedText());
field_0x818 = 1;
mStateMgr.changeState(StateID_OutputText);
}
}
void dLytMsgWindow_c::finalizeState_WaitKeyChangePage0() {}
void dLytMsgWindow_c::initializeState_WaitKeyChangePage1() {}
void dLytMsgWindow_c::executeState_WaitKeyChangePage1() {}
void dLytMsgWindow_c::executeState_WaitKeyChangePage1() {
if (mpCurrentSubtype->vt_0x38(false)) {
field_0x817 = 0;
mpMsgWindowUnk->fn_800B2AA0();
if (mpTagProcessor->getMsgWindowSubtype() >= 6 && mpTagProcessor->getMsgWindowSubtype() < 8) {
mpMsgWindowUnk->textAdvancingRelated(true, true);
}
setTextToDisplay(mpMsgWindowUnk->getProcessedText());
field_0x818 = 1;
mStateMgr.changeState(StateID_OutputText);
}
}
void dLytMsgWindow_c::finalizeState_WaitKeyChangePage1() {}
void dLytMsgWindow_c::initializeState_WaitKeyMsgEnd0() {}
void dLytMsgWindow_c::executeState_WaitKeyMsgEnd0() {}
void dLytMsgWindow_c::initializeState_WaitKeyMsgEnd0() {
if (field_0x811 != 0) {
field_0x812 = 1;
} else if (mpTagProcessor->getField_0x90E() == 0 && field_0x814 == 0) {
fn_8035E860(BGM_MGR);
}
}
void dLytMsgWindow_c::executeState_WaitKeyMsgEnd0() {
bool allowChange = false;
if (field_0x811 != 0) {
if (mpTagProcessor->getField_0x830() <= 0) {
allowChange = true;
}
} else if (mpTagProcessor->getField_0x90E() != 0) {
allowChange = true;
} else if (field_0x814 != 0) {
if (field_0x813 != 0) {
field_0x813 = 0;
allowChange = true;
}
} else if (checkButtonAPressed() || fn_8011A5D0()) {
fn_8035E880(BGM_MGR);
allowChange = true;
}
if (!allowChange) {
return;
}
if (field_0x811 == 0 && mpTagProcessor->getField_0x90E() == 0) {
mStateMgr.changeState(StateID_WaitKeyMsgEnd1);
} else if (field_0x810 != 0) {
if (dMessage_c::isValidTextLabel(mName)) {
mNameCopy = mName;
dTextBox_c *box = mpCurrentSubtype->vt_0x30();
mpMsgWindowUnk->fn_800B2130(mNameCopy, box, field_0x828, true);
setTextToDisplay(mpMsgWindowUnk->getProcessedText());
field_0x818 = 1;
mStateMgr.changeState(StateID_OutputText);
field_0x810 = 0;
}
} else {
fn_8035E820(BGM_MGR);
if (mpTagProcessor->getField_0x90E() != 0) {
mStateMgr.changeState(StateID_WaitKeySelectQuestion);
} else {
mStateMgr.changeState(StateID_Out);
}
}
}
void dLytMsgWindow_c::finalizeState_WaitKeyMsgEnd0() {}
void dLytMsgWindow_c::initializeState_WaitKeyMsgEnd1() {}
@@ -168,7 +168,7 @@ void dLytMsgWindowStone_c::draw() {
mLyt.draw();
}
void dLytMsgWindowStone_c::open() {
void dLytMsgWindowStone_c::open(dAcObjBase_c *obj, u32 param) {
mShouldBeOpen = true;
}
@@ -166,7 +166,7 @@ void dLytMsgWindowWood_c::draw() {
mLyt.draw();
}
void dLytMsgWindowWood_c::open() {
void dLytMsgWindowWood_c::open(dAcObjBase_c *obj, u32 param) {
mShouldBeOpen = true;
}