d_lyt_meter_event_skip OK

This commit is contained in:
robojumper
2025-04-17 16:59:28 +02:00
parent 563e5535c7
commit 11eea560a1
6 changed files with 172 additions and 34 deletions
+4
View File
@@ -437,7 +437,11 @@ d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp:
d/lyt/meter/d_lyt_meter_event_skip.cpp:
.text start:0x80105550 end:0x80105F68
.ctors start:0x804DB71C end:0x804DB720
.rodata start:0x804E6A58 end:0x804E6A68
.data start:0x80519578 end:0x80519748
.sdata start:0x80572500 end:0x80572510
.sdata2 start:0x80579CF8 end:0x80579D00
.bss start:0x805ACA90 end:0x805ACB90
d/lyt/meter/d_lyt_meter_timer.cpp:
.text start:0x80105F70 end:0x8010AEB8
+27 -27
View File
@@ -3593,7 +3593,7 @@ findActorBySpecialName = .text:0x800A0880; // type:function size:0x10
getCurrentEventActorBasedOnGroup = .text:0x800A0890; // 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
canSkipCurrentEvent__12EventManagerFv = .text:0x800A09B0; // type:function size:0x1D0
fn_800A0B80 = .text:0x800A0B80; // type:function size:0x10
eventRelatedStateFlags_shift0x11_1 = .text:0x800A0B90; // type:function size:0x10
fn_800A0BA0 = .text:0x800A0BA0; // type:function size:0x94
@@ -6316,23 +6316,23 @@ getPane__23dLytMeterGanbariGauge_cFv = .text:0x80104A70; // type:function size:0
__sinit_\d_lyt_meter_ganbari_gauge_cpp = .text:0x80104A80; // type:function size:0x9D4 scope:local
__dt__38sFStateID_c<23dLytMeterGanbariGauge_c>Fv = .text:0x80105460; // type:function size:0x58
isSameName__38sFStateID_c<23dLytMeterGanbariGauge_c>CFPCc = .text:0x801054C0; // type:function size:0x88
fn_80105550 = .text:0x80105550; // type:function size:0x4
fn_80105560 = .text:0x80105560; // type:function size:0x114
fn_80105680 = .text:0x80105680; // type:function size:0x4
fn_80105690 = .text:0x80105690; // type:function size:0x4
fn_801056A0 = .text:0x801056A0; // type:function size:0x74
fn_80105720 = .text:0x80105720; // type:function size:0x4
fn_80105730 = .text:0x80105730; // type:function size:0x4
fn_80105740 = .text:0x80105740; // type:function size:0x84
fn_801057D0 = .text:0x801057D0; // type:function size:0x4
fn_801057E0 = .text:0x801057E0; // type:function size:0x4
fn_801057F0 = .text:0x801057F0; // type:function size:0x68
fn_80105860 = .text:0x80105860; // type:function size:0x4
initializeState_Invisible__20dLytMeterEventSkip_cFv = .text:0x80105550; // type:function size:0x4
executeState_Invisible__20dLytMeterEventSkip_cFv = .text:0x80105560; // type:function size:0x114
finalizeState_Invisible__20dLytMeterEventSkip_cFv = .text:0x80105680; // type:function size:0x4
initializeState_In__20dLytMeterEventSkip_cFv = .text:0x80105690; // type:function size:0x4
executeState_In__20dLytMeterEventSkip_cFv = .text:0x801056A0; // type:function size:0x74
finalizeState_In__20dLytMeterEventSkip_cFv = .text:0x80105720; // type:function size:0x4
initializeState_Visible__20dLytMeterEventSkip_cFv = .text:0x80105730; // type:function size:0x4
executeState_Visible__20dLytMeterEventSkip_cFv = .text:0x80105740; // type:function size:0x84
finalizeState_Visible__20dLytMeterEventSkip_cFv = .text:0x801057D0; // type:function size:0x4
initializeState_Out__20dLytMeterEventSkip_cFv = .text:0x801057E0; // type:function size:0x4
executeState_Out__20dLytMeterEventSkip_cFv = .text:0x801057F0; // type:function size:0x68
finalizeState_Out__20dLytMeterEventSkip_cFv = .text:0x80105860; // type:function size:0x4
build__20dLytMeterEventSkip_cFPQ23d2d10ResAccIf_c = .text:0x80105870; // type:function size:0x140
remove__20dLytMeterEventSkip_cFv = .text:0x801059B0; // type:function size:0x50
fn_80105A00 = .text:0x80105A00; // type:function size:0xB4
execute__20dLytMeterEventSkip_cFv = .text:0x80105A00; // type:function size:0xB4
draw__20dLytMeterEventSkip_cFv = .text:0x80105AC0; // type:function size:0x34
fn_80105B00 = .text:0x80105B00; // type:function size:0x40
shouldPromptForSkip__20dLytMeterEventSkip_cCFv = .text:0x80105B00; // type:function size:0x40
__sinit_\d_lyt_meter_event_skip_cpp = .text:0x80105B40; // type:function size:0x338 scope:local
__dt__35sFStateID_c<20dLytMeterEventSkip_c>Fv = .text:0x80105E80; // type:function size:0x58
isSameName__35sFStateID_c<20dLytMeterEventSkip_c>CFPCc = .text:0x80105EE0; // type:function size:0x88
@@ -31732,13 +31732,13 @@ lbl_805190E8 = .data:0x805190E8; // type:object size:0x18 data:string
lbl_80519100 = .data:0x80519100; // type:object size:0xE data:string
__vt__23dLytMeterGanbariGauge_c = .data:0x80519110; // type:object size:0x34
__vt__38sFStateID_c<23dLytMeterGanbariGauge_c> = .data:0x80519540; // type:object size:0x34
lbl_80519578 = .data:0x80519578; // type:object size:0x14
lbl_8051958C = .data:0x8051958C; // type:object size:0xC
lbl_80519598 = .data:0x80519598; // type:object size:0x14
lbl_805195AC = .data:0x805195AC; // type:object size:0x10
lbl_805195BC = .data:0x805195BC; // type:object size:0x10
lbl_805195CC = .data:0x805195CC; // type:object size:0x10
lbl_805195DC = .data:0x805195DC; // type:object size:0x134
lbl_80519578 = .data:0x80519578; // type:object size:0x11 data:string
lbl_8051958C = .data:0x8051958C; // type:object size:0xB data:string
lbl_80519598 = .data:0x80519598; // type:object size:0x12 data:string
lbl_805195AC = .data:0x805195AC; // type:object size:0xE data:string
lbl_805195BC = .data:0x805195BC; // type:object size:0xF data:string
lbl_805195CC = .data:0x805195CC; // type:object size:0xE data:string
lbl_805195DC = .data:0x805195DC; // type:object size:0x9 data:string
__vt__35sFStateID_c<20dLytMeterEventSkip_c> = .data:0x80519710; // type:object size:0x34
lbl_80519748 = .data:0x80519748; // type:object size:0x14
lbl_8051975C = .data:0x8051975C; // type:object size:0xC
@@ -38177,7 +38177,7 @@ lbl_805724E8 = .sdata:0x805724E8; // type:object size:0x4 data:4byte
lbl_805724F0 = .sdata:0x805724F0; // type:object size:0x5 data:string
lbl_805724F8 = .sdata:0x805724F8; // type:object size:0x6 data:string
lbl_80572500 = .sdata:0x80572500; // type:object size:0x8 data:4byte
lbl_80572508 = .sdata:0x80572508; // type:object size:0x8
lbl_80572508 = .sdata:0x80572508; // type:object size:0x5 data:string
lbl_80572510 = .sdata:0x80572510; // type:object size:0x8 data:4byte
lbl_80572518 = .sdata:0x80572518; // type:object size:0x5 data:string
lbl_80572520 = .sdata:0x80572520; // type:object size:0x8 data:string
@@ -48782,10 +48782,10 @@ LytMeterGanbariGauge__STATE_CAUTION = .bss:0x805AC9A0; // type:object size:0x30
LytMeterGanbariGauge__STATE_TO_MIN = .bss:0x805AC9E0; // type:object size:0x30 data:4byte
lbl_805ACA20 = .bss:0x805ACA20; // type:object size:0x30 data:4byte
LytMeterGanbariGauge__STATE_TO_MAX = .bss:0x805ACA60; // type:object size:0x30 data:4byte
lbl_805ACA90 = .bss:0x805ACA90; // type:object size:0x10
LytMeterEventSkip__STATE_INVISIBLE = .bss:0x805ACAA0; // type:object size:0x40 data:4byte
LytMeterEventSkip__STATE_IN = .bss:0x805ACAE0; // type:object size:0x40 data:4byte
LytMeterEventSkip__STATE_VISIBLE = .bss:0x805ACB20; // type:object size:0x40 data:4byte
lbl_805ACA90 = .bss:0x805ACA90; // type:object size:0xC
LytMeterEventSkip__STATE_INVISIBLE = .bss:0x805ACAA0; // type:object size:0x30 data:4byte
LytMeterEventSkip__STATE_IN = .bss:0x805ACAE0; // type:object size:0x30 data:4byte
LytMeterEventSkip__STATE_VISIBLE = .bss:0x805ACB20; // type:object size:0x30 data:4byte
LytMeterEventSkip__STATE_OUT = .bss:0x805ACB60; // type:object size:0x30 data:4byte
lbl_805ACB90 = .bss:0x805ACB90; // type:object size:0x50
LytMeterTimer__STATE_SIREN = .bss:0x805ACBE0; // type:object size:0x80 data:4byte
+1 -1
View File
@@ -400,7 +400,7 @@ config.libs = [
Object(Matching, "d/lyt/meter/d_lyt_meter_dowsing.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_timer.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_heart.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"),
+12 -6
View File
@@ -2,28 +2,34 @@
#define D_LYT_METER_EVENT_SKIP_H
#include "d/lyt/d2d.h"
#include "d/lyt/d_textbox.h"
#include "d/lyt/d_window.h"
#include "s/s_State.hpp"
#include "s/s_StateMgr.hpp"
// size 0x164
class dLytMeterEventSkip_c {
public:
dLytMeterEventSkip_c() : mStateMgr(*this, sStateID::null) {}
virtual ~dLytMeterEventSkip_c() {}
bool build(d2d::ResAccIf_c *resAcc);
bool remove();
bool execute();
bool draw();
private:
bool shouldPromptForSkip() const;
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Invisible);
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, In);
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Visible);
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Out);
UI_STATE_MGR_DECLARE(dLytMeterEventSkip_c);
d2d::LytBase_c mLyt;
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[2];
/* 0x150 */ u8 field_0x150[0x164 - 0x150];
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMeterEventSkip_c);
/* 0x03C */ d2d::LytBase_c mLyt;
/* 0x0D0 */ d2d::AnmGroup_c mAnm[2];
/* 0x150 */ dTextBox_c *mpTextBoxes[2];
/* 0x158 */ dWindow_c *mpWindow;
/* 0x15C */ dTextBox_c *mpSizeBox;
/* 0x160 */ bool mVisible;
};
#endif
+1
View File
@@ -17,6 +17,7 @@ public:
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 bool canSkipCurrentEvent();
static EventManager *sInstance;
+127
View File
@@ -1,6 +1,133 @@
#include "d/lyt/meter/d_lyt_meter_event_skip.h"
#include "d/d_sc_game.h"
#include "d/lyt/d2d.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/event_manager.h"
STATE_DEFINE(dLytMeterEventSkip_c, Invisible);
STATE_DEFINE(dLytMeterEventSkip_c, In);
STATE_DEFINE(dLytMeterEventSkip_c, Visible);
STATE_DEFINE(dLytMeterEventSkip_c, Out);
static const d2d::LytBrlanMapping brlanMap[] = {
{ "skip_00_in.brlan", "G_inOut_00"},
{"skip_00_out.brlan", "G_inOut_00"},
};
#define SKIP_ANIM_IN 0
#define SKIP_ANIM_OUT 1
#define SKIP_NUM_ANIMS 2
void dLytMeterEventSkip_c::initializeState_Invisible() {}
void dLytMeterEventSkip_c::executeState_Invisible() {
if (shouldPromptForSkip() || dLytMeterContainer_c::GetInstance()->getMeterField_0x13774()) {
if (dLytMeterContainer_c::GetInstance()->getMeterField_0x13774()) {
for (int i = 0; i < 2; i++) {
mLyt.fn_800AB9A0(mpTextBoxes[i], 1);
}
} else {
for (int i = 0; i < 2; i++) {
mLyt.fn_800AB9A0(mpTextBoxes[i], 0);
}
}
mpWindow->UpdateSize(mpSizeBox, 32.0f);
mVisible = true;
mAnm[SKIP_ANIM_IN].setAnimEnable(true);
mAnm[SKIP_ANIM_IN].setFrame(0.0f);
mStateMgr.changeState(StateID_In);
}
}
void dLytMeterEventSkip_c::finalizeState_Invisible() {}
void dLytMeterEventSkip_c::initializeState_In() {}
void dLytMeterEventSkip_c::executeState_In() {
if (mAnm[SKIP_ANIM_IN].isStop2()) {
mLyt.calc(); // ???
mAnm[SKIP_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Visible);
}
}
void dLytMeterEventSkip_c::finalizeState_In() {}
void dLytMeterEventSkip_c::initializeState_Visible() {}
void dLytMeterEventSkip_c::executeState_Visible() {
if (!shouldPromptForSkip() && !dLytMeterContainer_c::GetInstance()->getMeterField_0x13774()) {
mAnm[SKIP_ANIM_OUT].setAnimEnable(true);
mAnm[SKIP_ANIM_OUT].setFrame(0.0f);
mStateMgr.changeState(StateID_Out);
}
}
void dLytMeterEventSkip_c::finalizeState_Visible() {}
void dLytMeterEventSkip_c::initializeState_Out() {}
void dLytMeterEventSkip_c::executeState_Out() {
if (mAnm[SKIP_ANIM_OUT].isStop2()) {
mAnm[SKIP_ANIM_OUT].setAnimEnable(false);
mVisible = false;
mStateMgr.changeState(StateID_Invisible);
}
}
void dLytMeterEventSkip_c::finalizeState_Out() {}
static const char *sTextBoxes[] = {
"T_skipText_00",
"T_skipTextS_00",
};
bool dLytMeterEventSkip_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("skip_00.brlyt", nullptr);
for (int i = 0; i < SKIP_NUM_ANIMS; i++) {
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
for (int i = 0; i < 2; i++) {
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
}
mpWindow = mLyt.getWindow("W_bgP_00");
mpSizeBox = mLyt.getSizeBoxInWindow("W_bgP_00");
mpWindow->UpdateSize(mpSizeBox, 32.0f);
mLyt.setPriority(0x8A);
mVisible = false;
mStateMgr.changeState(StateID_Invisible);
return true;
}
bool dLytMeterEventSkip_c::remove() {
for (int i = 0; i < 2; i++) {
mAnm[i].remove();
}
return true;
}
bool dLytMeterEventSkip_c::execute() {
mStateMgr.executeState();
if (mVisible) {
for (int i = 0; i < 2; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
}
return true;
}
bool dLytMeterEventSkip_c::draw() {
if (mVisible) {
mLyt.addToDrawList();
}
return true;
}
bool dLytMeterEventSkip_c::shouldPromptForSkip() const {
return dScGame_c::currentSpawnInfo.stageName == "Demo" ? false : EventManager::canSkipCurrentEvent();
}