This commit is contained in:
lepelog 2022-06-08 21:50:29 +02:00
parent fb9dd3cdee
commit 8945d46f09
16 changed files with 663 additions and 324 deletions

View File

@ -72,11 +72,7 @@ struct cXyz : Vec {
/* 80267128 */ s16 atan2sX_Z() const;
/* 80267150 */ s16 atan2sY_XZ() const;
void setAll(f32 f) {
z = f;
y = f;
x = f;
}
void setAll(f32 f) { set(f, f, f); }
void setMin(const cXyz& other) {
if (x > other.x) {

View File

@ -389,6 +389,10 @@ public:
mWindow[i].setMode(mode);
}
char* getLastPlayStageName() { return mLastPlayStageName; }
u8 getGameoverStatus() { return mGameoverStatus; }
public:
/* 0x00000 */ dBgS mBgs;
/* 0x01404 */ dCcS mCcs;
@ -651,6 +655,7 @@ void dComIfG_get_timelayer(int* layer);
int dComIfG_resDelete(request_of_phase_process_class* i_phase, char const* resName);
int dComIfG_changeOpeningScene(scene_class* scene, s16 procName);
int dComIfG_resLoad(request_of_phase_process_class* i_phase, char const* arc_name);
BOOL dComIfGs_isStageSwitch(int i_stageNo, int i_no);
inline void dComIfG_setBrightness(u8 brightness) {
g_dComIfG_gameInfo.mFadeBrightness = brightness;
@ -2059,6 +2064,14 @@ inline void dComIfGp_evmng_cutEnd(int param_0) {
dComIfGp_getPEvtManager()->cutEnd(param_0);
}
inline int i_dComIfGp_evmng_getMyStaffId(const char* pName, fopAc_ac_c* pActor, int param_2) {
return dComIfGp_getPEvtManager()->getMyStaffId(pName, pActor, param_2);
}
inline int dComIfGp_evmng_getIsAddvance(int param_0) {
return dComIfGp_getPEvtManager()->getIsAddvance(param_0);
}
inline int* dComIfGp_evmng_getMyIntegerP(int index, char* name) {
return (int*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_INT);
}
@ -2071,6 +2084,14 @@ inline f32* dComIfGp_evmng_getMyFloatP(int index, char* name) {
return (f32*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_FLOAT);
}
inline cXyz* dComIfGp_evmng_getMyXyzP(int index, char* name) {
return (cXyz*)dComIfGp_getPEvtManager()->getMySubstanceP(index, name, dEvDtData_c::TYPE_VEC);
}
inline int dComIfGp_evmng_getMySubstanceNum(int index, char* name) {
return dComIfGp_getPEvtManager()->getMySubstanceNum(index, name);
}
inline void dComIfGp_evmng_create() {
g_dComIfG_gameInfo.play.getEvtManager().create();
}
@ -2253,4 +2274,12 @@ inline daAlink_c* daAlink_getAlinkActorClass() {
return (daAlink_c*)g_dComIfG_gameInfo.play.getPlayerPtr(LINK_PTR);
}
inline char* dComIfGp_getLastPlayStageName() {
return g_dComIfG_gameInfo.play.getLastPlayStageName();
}
inline u8 dComIfGp_getGameoverStatus() {
return g_dComIfG_gameInfo.play.getGameoverStatus();
}
#endif /* D_COM_D_COM_INF_GAME_H */

View File

@ -3,4 +3,39 @@
#include "dolphin/types.h"
class cXyz;
struct dDemo_c {
/* 80039678 */ void create();
/* 80039910 */ void remove();
/* 80039B6C */ void start(u8 const*, cXyz*, f32);
/* 80039CF8 */ void end();
/* 80039D4C */ void branch();
/* 80039DA4 */ void update();
/* 80039EDC */ void setBranchType(u16);
/* 80039EEC */ void setBranchId(u16, s16);
/* 80039F04 */ void reset();
static u32 getFrameNoMsg() { return m_frameNoMsg; }
static u16 m_branchId[1 + 3 /* padding */];
static u8 m_system[4];
static u8 m_control[4];
static u8 m_stage[4];
static u8 m_audio[4];
static u8 m_particle[4];
static u8 m_message[4];
static u8 m_factory[4];
static u8 m_mesgControl[4];
static u8 m_object[4];
static u8 m_data[4];
static u8 m_frame[4];
static u8 m_translation[4];
static f32 m_rotationY;
static u32 m_frameNoMsg;
static u8 m_mode[4];
static u8 m_status[4];
static u8 m_branchType[2 + 2 /* padding */];
static u8 m_branchData[4];
};
#endif /* D_D_DEMO_H */

View File

@ -1,6 +1,52 @@
#ifndef D_D_GAMEOVER_H
#define D_D_GAMEOVER_H
#include "d/msg/d_msg_class.h"
#include "dolphin/types.h"
#include "f_op/f_op_msg_mng.h"
struct dGameover_c : msg_class {
/* 8019B044 */ void _create();
/* 8019B2F4 */ void _execute();
/* 8019B384 */ void playerAnmWait_init();
/* 8019B388 */ void playerAnmWait_proc();
/* 8019B3A0 */ void dispFadeOut_init();
/* 8019B3E8 */ void dispFadeOut_proc();
/* 8019B40C */ void dispWait_init();
/* 8019B454 */ void dispWait_proc();
/* 8019B478 */ void demoFadeIn_init();
/* 8019B484 */ void demoFadeIn_proc();
/* 8019B4D8 */ void demoFadeOut_init();
/* 8019B4E4 */ void demoFadeOut_proc();
/* 8019B560 */ void saveOpen_init();
/* 8019B564 */ void saveOpen_proc();
/* 8019B5A4 */ void saveMove_init();
/* 8019B5A8 */ void saveMove_proc();
/* 8019B5F0 */ void saveClose_init();
/* 8019B5F4 */ void saveClose_proc();
/* 8019B7BC */ void deleteWait_init();
/* 8019B7C0 */ void deleteWait_proc();
/* 8019B7C4 */ void _draw();
/* 8019B864 */ void _delete();
s32 deleteCheck() { return _0x108 == 8; }
/* 0x100 */ u8 _0x100[0x118 - 0x100];
/* 0x108 */ u8 _0x108;
}; // size unknown
s32 d_GameOver_Create(u8 param_0);
void d_GameOver_Delete(unsigned int& param_0);
inline s32 d_GameOver_CheckDelete(unsigned int& id) {
if (id != UINT32_MAX) {
dGameover_c* gameover = (dGameover_c*)fopMsgM_SearchByID(id);
if (gameover != NULL) {
return gameover->deleteCheck();
} else {
return 0;
}
} else {
return 0;
}
}
#endif /* D_D_GAMEOVER_H */

View File

@ -890,7 +890,7 @@ inline u32 dStage_stagInfo_GetArg0(stage_stag_info_class* p_info) {
return (p_info->field_0x0c >> 0x14) & 0xFF;
}
inline s8 dStage_sclsInfo_getSceneLayer(stage_scls_info_class* p_info) {
inline int dStage_sclsInfo_getSceneLayer(stage_scls_info_class* p_info) {
return p_info->field_0xb & 0xF;
}
@ -898,12 +898,12 @@ inline s8 dStage_sclsInfo_getWipe(stage_scls_info_class* p_info) {
return p_info->mWipe;
}
inline s8 dStage_sclsInfo_getWipeTime(stage_scls_info_class* p_info) {
return p_info->field_0xb >> 5;
inline u32 dStage_sclsInfo_getWipeTime(stage_scls_info_class* p_info) {
return (p_info->field_0xb & 0xF0) >> 5;
}
inline int dStage_sclsInfo_getTimeH(stage_scls_info_class* p_info) {
return ((p_info->field_0xb & 0xF0) >> 4) | ((p_info->field_0xa & 0x0F) << 4);
return ((p_info->field_0xa & 0xF0) >> 4) | (p_info->field_0xb & 0x10);
}
inline u32 dStage_FileList_dt_getMiniMap(dStage_FileList_dt_c* p_fList) {

View File

@ -2,6 +2,7 @@
#define D_EVENT_D_EVENT_DATA_H
#include "d/d_stage.h"
#include "d/msg/d_msg_class.h"
#include "d/save/d_save.h"
#include "dolphin/types.h"
@ -81,6 +82,14 @@ public:
/* 0xC */ TYPE_CREATE,
};
struct StaffWork {
unsigned int _0;
msg_class* mLMsg;
unsigned int mMsgNo;
s32 mMsgSubstanceNum;
int* mMsgSubstanceP;
};
void specialProc_WaitStart(int);
void specialProc_WaitProc(int);
void specialProc();
@ -101,7 +110,9 @@ public:
int getStartCut() { return mStartCut; }
// private:
/* 0x00 */ char mName[32];
/* 0x00 */ char mName[8];
/* 0x08 */ StaffWork mWork;
/* 0x0C */ u8 field_0x1C[0x20 - 0x1C];
/* 0x20 */ s32 mTagID;
/* 0x24 */ u32 mIndex;
/* 0x28 */ u32 mFlagID;
@ -121,7 +132,7 @@ public:
class dEvDtEvent_c {
public:
int finishCheck();
void forceFinish();
int forceFinish();
void specialStaffProc(dEvDtStaff_c*);
int getNStaff() { return mNStaff; }
int getStaff(int idx) { return mStaff[idx]; }
@ -136,8 +147,7 @@ public:
/* 0x7C */ int mNStaff;
/* 0x80 */ u8 field_0x80[4];
/* 0x84 */ int field_0x84;
/* 0x88 */ int field_0x88[2];
/* 0x90 */ int field_0x90;
/* 0x88 */ int field_0x88[3];
/* 0x94 */ bool mPlaySound;
/* 0x95 */ u8 field_0x95[0xF];
/* 0xA4 */ int mEventState;
@ -147,9 +157,9 @@ public:
class dEvDtFlag_c {
public:
dEvDtFlag_c() {}
void flagCheck(int);
void flagSet(int);
bool flagMaxCheck(int);
BOOL flagCheck(int);
BOOL flagSet(int);
BOOL flagMaxCheck(int);
void init();
#define FlagMax 0x2800

View File

@ -72,6 +72,7 @@ public:
dEvDtBase_c& getBase() { return mEventList[mCurrentEventType]; }
void setFlag(int flag) { mFlags.flagSet(flag); }
int flagCheck(int flag) { return mFlags.flagCheck(flag); }
static int getIndexCompositId(s16 param_0) { return param_0 != -1 ? (u8)param_0 : -1; }
static int getTypeCompositId(s16 param_0) { return param_0 == -1 ? 0 : param_0 >> 8; }

View File

@ -24,6 +24,8 @@ s32 dKy_daynight_check();
void dKy_clear_game_init();
void dKy_setLight_init();
u8 dKy_pol_sound_get(cBgS_PolyInfo const* param_0);
void dKy_instant_rainchg();
void dKy_instant_timechg(f32);
struct LIGHT_INFLUENCE {
/* 800CFC7C */ ~LIGHT_INFLUENCE();

View File

@ -35,6 +35,12 @@ struct SVec {
y = oY;
z = oZ;
}
void setall(s16 val) {
x = val;
y = val;
z = val;
}
};
extern "C" {

View File

@ -36,8 +36,9 @@ u32 fopMsgM_Create(s16, fopMsgCreateFunc, void*);
void fopMsgM_setMessageID(unsigned int);
void fopMsgM_destroyExpHeap(JKRExpHeap*);
s32 fopMsgM_setStageLayer(void*);
void fopMsgM_messageSetDemo(u32 param_0);
int fopMsgM_messageSet(u32 param_0, u32 param_1);
int fopMsgM_messageSetDemo(u32 param_0);
msg_class* fopMsgM_SearchByID(unsigned int param_0);
char* fopMsgM_messageGet(char* msg, u32 string_id);
#endif
#endif

View File

@ -39,8 +39,12 @@ bool cM3dGAab::TopPlaneYUnder(f32 pY) const {
/* 8026ECF8-8026ED1C 0024+00 s=0 e=6 z=0 None .text ClearForMinMax__8cM3dGAabFv */
void cM3dGAab::ClearForMinMax(void) {
mMin.setAll(1000000000.0f);
mMax.setAll(-1000000000.0f);
mMin.z = 1000000000.0f;
mMin.y = 1000000000.0f;
mMin.x = 1000000000.0f;
mMax.z = -1000000000.0f;
mMax.y = -1000000000.0f;
mMax.x = -1000000000.0f;
}
/* 8026ED1C-8026ED60 0044+00 s=1 e=3 z=0 None .text SetMinMax__8cM3dGAabFRC4cXyz */

View File

@ -221,38 +221,6 @@ struct dDemo_camera_c {
/* 80039FFC */ ~dDemo_camera_c();
};
struct dDemo_c {
/* 80039678 */ void create();
/* 80039910 */ void remove();
/* 80039B6C */ void start(u8 const*, cXyz*, f32);
/* 80039CF8 */ void end();
/* 80039D4C */ void branch();
/* 80039DA4 */ void update();
/* 80039EDC */ void setBranchType(u16);
/* 80039EEC */ void setBranchId(u16, s16);
/* 80039F04 */ void reset();
static u16 m_branchId[1 + 3 /* padding */];
static u8 m_system[4];
static u8 m_control[4];
static u8 m_stage[4];
static u8 m_audio[4];
static u8 m_particle[4];
static u8 m_message[4];
static u8 m_factory[4];
static u8 m_mesgControl[4];
static u8 m_object[4];
static u8 m_data[4];
static u8 m_frame[4];
static u8 m_translation[4];
static f32 m_rotationY;
static u8 m_frameNoMsg[4];
static u8 m_mode[4];
static u8 m_status[4];
static u8 m_branchType[2 + 2 /* padding */];
static u8 m_branchData[4];
};
struct dDemo_ambient_c {
/* 80038DF0 */ void JSGSetColor(_GXColor);
/* 800394C8 */ ~dDemo_ambient_c();
@ -1013,7 +981,7 @@ u8 dDemo_c::m_translation[4];
f32 dDemo_c::m_rotationY;
/* 80450E34-80450E38 000334 0004+00 2/2 1/1 0/0 .sbss m_frameNoMsg__7dDemo_c */
u8 dDemo_c::m_frameNoMsg[4];
u32 dDemo_c::m_frameNoMsg;
/* 80450E38-80450E3C 000338 0004+00 4/4 4/4 0/0 .sbss m_mode__7dDemo_c */
u8 dDemo_c::m_mode[4];

View File

@ -13,8 +13,6 @@
struct request_of_phase_process_class {};
struct msg_class {};
struct mDoRst {
static u8 mResetData[4 + 4 /* padding */];
};
@ -28,8 +26,6 @@ struct mDoGph_gInf_c {
static f32 mFadeRate;
};
struct fopAc_ac_c {};
struct dSv_player_item_c {
/* 80032FB8 */ void setItem(int, u8);
/* 80033030 */ void getItem(int, bool) const;
@ -86,31 +82,6 @@ struct dGov_HIO_c {
/* 8019C06C */ ~dGov_HIO_c();
};
struct dGameover_c {
/* 8019B044 */ void _create();
/* 8019B2F4 */ void _execute();
/* 8019B384 */ void playerAnmWait_init();
/* 8019B388 */ void playerAnmWait_proc();
/* 8019B3A0 */ void dispFadeOut_init();
/* 8019B3E8 */ void dispFadeOut_proc();
/* 8019B40C */ void dispWait_init();
/* 8019B454 */ void dispWait_proc();
/* 8019B478 */ void demoFadeIn_init();
/* 8019B484 */ void demoFadeIn_proc();
/* 8019B4D8 */ void demoFadeOut_init();
/* 8019B4E4 */ void demoFadeOut_proc();
/* 8019B560 */ void saveOpen_init();
/* 8019B564 */ void saveOpen_proc();
/* 8019B5A4 */ void saveMove_init();
/* 8019B5A8 */ void saveMove_proc();
/* 8019B5F0 */ void saveClose_init();
/* 8019B5F4 */ void saveClose_proc();
/* 8019B7BC */ void deleteWait_init();
/* 8019B7C0 */ void deleteWait_proc();
/* 8019B7C4 */ void _draw();
/* 8019B864 */ void _delete();
};
struct dDlst_base_c {};
struct dDlst_list_c {
@ -122,8 +93,6 @@ struct dDlst_Gameover_CAPTURE_c {
/* 8019C2CC */ ~dDlst_Gameover_CAPTURE_c();
};
struct JKRArchive {};
struct dDlst_GameOverScrnDraw_c {
/* 8019B940 */ dDlst_GameOverScrnDraw_c(JKRArchive*);
/* 8019BBFC */ ~dDlst_GameOverScrnDraw_c();
@ -131,24 +100,6 @@ struct dDlst_GameOverScrnDraw_c {
/* 8019BCF4 */ void draw();
};
struct cXyz {};
struct ResTLUT {};
struct ResTIMG {};
struct JKRHeap {
/* 802CE5CC */ void freeAll();
/* 802CE784 */ void getTotalFreeSize();
};
struct JGeometry {
template <typename A1>
struct TBox2 {};
/* TBox2<f32> */
struct TBox2__template0 {};
};
struct JFWDisplay {
static u8 sManager[4];
};
@ -254,38 +205,6 @@ extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive();
extern "C" void draw__9J2DScreenFffPC14J2DGrafContext();
extern "C" void func_802FC800();
extern "C" void setString__10J2DTextBoxFPCce();
extern "C" void C_MTXOrtho();
extern "C" void GXSetVtxDesc();
extern "C" void GXClearVtxDesc();
extern "C" void GXSetVtxAttrFmt();
extern "C" void GXSetTexCoordGen2();
extern "C" void GXSetNumTexGens();
extern "C" void GXPixModeSync();
extern "C" void GXBegin();
extern "C" void GXSetCullMode();
extern "C" void GXSetTexCopySrc();
extern "C" void GXSetTexCopyDst();
extern "C" void GXCopyTex();
extern "C" void GXSetNumChans();
extern "C" void GXInitTexObj();
extern "C" void GXInitTexObjLOD();
extern "C" void GXLoadTexObj();
extern "C" void GXSetTevColorIn();
extern "C" void GXSetTevAlphaIn();
extern "C" void GXSetTevColorOp();
extern "C" void GXSetTevAlphaOp();
extern "C" void GXSetAlphaCompare();
extern "C" void GXSetTevOrder();
extern "C" void GXSetNumTevStages();
extern "C" void GXSetFog();
extern "C" void GXSetFogRangeAdj();
extern "C" void GXSetBlendMode();
extern "C" void GXSetZMode();
extern "C" void GXSetZCompLoc();
extern "C" void GXSetDither();
extern "C" void GXSetProjection();
extern "C" void GXLoadPosMtxImm();
extern "C" void GXSetCurrentMtx();
extern "C" void __register_global_object();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_24();
@ -297,7 +216,6 @@ extern "C" void _restgpr_29();
extern "C" void strcmp();
extern "C" extern u8 g_mDoMtx_identity[48 + 24 /* padding */];
extern "C" extern void* g_fopMsg_Method[5 + 1 /* padding */];
extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */];
extern "C" extern void* __vt__12dDlst_base_c[3];
extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
extern "C" extern void* __vt__14mDoHIO_entry_c[3];
@ -981,7 +899,7 @@ static asm void dGameover_Create(msg_class* param_0) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void d_GameOver_Create(u8 param_0) {
asm s32 d_GameOver_Create(u8 param_0) {
nofralloc
#include "asm/d/d_gameover/d_GameOver_Create__FUc.s"
}

View File

@ -1428,6 +1428,7 @@ s32 dName_c::getMenuPosIdx(u8 selPos) {
case 3:
return 3;
}
//!@bug UB: no default return
}
/* 80251094-8025115C 24B9D4 00C8+00 1/0 0/0 0/0 .text draw__14dDlst_NameIN_cFv */

View File

@ -5,22 +5,16 @@
#include "d/event/d_event_data.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_demo.h"
#include "d/d_gameover.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "f_op/f_op_msg_mng.h"
//
// Types:
//
struct dDemo_c {
/* 80039B6C */ void start(u8 const*, cXyz*, f32);
/* 80039CF8 */ void end();
static u8 m_control[4];
static u8 m_frameNoMsg[4];
static u8 m_mode[4];
};
struct dCamera_c {
/* 80181170 */ void StartBlure(int, fopAc_ac_c*, f32, f32);
};
@ -136,92 +130,109 @@ extern "C" u8 m_mode__7dDemo_c[4];
extern "C" f32 mWipeRate__12dDlst_list_c;
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
inline dEvent_manager_c& dComIfGp_getEventManager() {
return g_dComIfG_gameInfo.play.getEvtManager();
}
//
// Declarations:
//
inline BOOL dComIfGs_isEventBit(u16 id) {
return g_dComIfG_gameInfo.info.getEvent().isEventBit(id);
}
struct TelopDataStruct {
s32 mName;
u16 mTelopNo;
u16 _6;
u16 _8;
// padding
};
/* ############################################################################################## */
/* 803A7FB0-803A8238 0050D0 0288+00 2/2 0/0 0/0 .data TelopData */
SECTION_DATA static u8 TelopData[648] = {
0x44, 0x30, 0x35, 0x00, 0x04, 0x4D, 0x10, 0x69, 0x00, 0x03, 0x00, 0x00, 0x44, 0x30, 0x35, 0x41,
0x04, 0x4D, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x35, 0x42, 0x04, 0x4D, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x34, 0x00, 0x04, 0x4E, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00,
0x44, 0x30, 0x34, 0x41, 0x04, 0x4E, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x34, 0x42,
0x04, 0x4E, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x31, 0x00, 0x04, 0x4F, 0x12, 0x78,
0x00, 0x03, 0x00, 0x00, 0x44, 0x30, 0x31, 0x41, 0x04, 0x4F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x44, 0x30, 0x31, 0x42, 0x04, 0x4F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x31, 0x30, 0x00,
0x04, 0x50, 0x13, 0x2C, 0x00, 0x03, 0x00, 0x00, 0x44, 0x31, 0x30, 0x41, 0x04, 0x50, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x44, 0x31, 0x30, 0x42, 0x04, 0x50, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x44, 0x31, 0x31, 0x00, 0x04, 0x51, 0x14, 0x78, 0x00, 0x03, 0x00, 0x00, 0x44, 0x31, 0x31, 0x41,
0x04, 0x51, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x31, 0x31, 0x42, 0x04, 0x51, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x36, 0x00, 0x04, 0x52, 0x15, 0x59, 0x00, 0x03, 0x00, 0x00,
0x44, 0x30, 0x36, 0x41, 0x04, 0x52, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x36, 0x42,
0x04, 0x52, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x37, 0x00, 0x04, 0x53, 0x16, 0x39,
0x00, 0x03, 0x00, 0x00, 0x44, 0x30, 0x37, 0x41, 0x04, 0x53, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x44, 0x30, 0x37, 0x42, 0x04, 0x53, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x38, 0x00,
0x04, 0x54, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x44, 0x30, 0x38, 0x41, 0x04, 0x54, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x38, 0x42, 0x04, 0x54, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x44, 0x30, 0x38, 0x43, 0x04, 0x54, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x38, 0x44,
0x04, 0x54, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x39, 0x00, 0x04, 0x55, 0xFF, 0xFF,
0x00, 0x01, 0x00, 0x00, 0x44, 0x30, 0x39, 0x41, 0x04, 0x55, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x44, 0x30, 0x39, 0x42, 0x04, 0x55, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x44, 0x30, 0x39, 0x43,
0x04, 0x55, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x30, 0x30, 0x00, 0x04, 0x56, 0xFF, 0xFF,
0x00, 0x01, 0x00, 0x00, 0x46, 0x31, 0x30, 0x33, 0x04, 0x57, 0x00, 0x0A, 0x00, 0x03, 0x00, 0x00,
0x52, 0x30, 0x31, 0x00, 0x04, 0x57, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x31, 0x30, 0x39,
0x04, 0x58, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x52, 0x31, 0x30, 0x39, 0x04, 0x58, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x52, 0x32, 0x30, 0x39, 0x04, 0x58, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x46, 0x31, 0x31, 0x32, 0x04, 0x59, 0x04, 0x09, 0x00, 0x03, 0x00, 0x00, 0x46, 0x31, 0x31, 0x33,
0x04, 0x5A, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x46, 0x31, 0x30, 0x38, 0x04, 0x5B, 0xFF, 0xFF,
0x00, 0x01, 0x00, 0x00, 0x52, 0x31, 0x30, 0x38, 0x04, 0x5B, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x46, 0x31, 0x31, 0x35, 0x04, 0x5C, 0x04, 0x1E, 0x00, 0x03, 0x00, 0x00, 0x46, 0x31, 0x31, 0x31,
0x04, 0x5E, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x46, 0x31, 0x32, 0x34, 0x04, 0x5F, 0xFF, 0xFF,
0x00, 0x01, 0x00, 0x00, 0x46, 0x31, 0x31, 0x34, 0x04, 0x60, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00,
0x46, 0x31, 0x32, 0x35, 0x04, 0x61, 0x0A, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x46, 0x31, 0x32, 0x31,
0x04, 0x62, 0x06, 0x2D, 0x00, 0x03, 0x00, 0x00, 0x46, 0x31, 0x32, 0x32, 0x04, 0x62, 0x06, 0x2D,
0x00, 0x03, 0x00, 0x00, 0x46, 0x31, 0x32, 0x33, 0x04, 0x62, 0x06, 0x2D, 0x00, 0x03, 0x00, 0x00,
0x46, 0x31, 0x31, 0x37, 0x04, 0x63, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00, 0x46, 0x31, 0x32, 0x38,
0x04, 0x6E, 0x03, 0x2E, 0x00, 0x03, 0x00, 0x00, 0x52, 0x31, 0x32, 0x38, 0x04, 0x6E, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x46, 0x31, 0x32, 0x37, 0x04, 0x74, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00,
0x52, 0x31, 0x32, 0x37, 0x04, 0x74, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x46, 0x31, 0x32, 0x36,
0x04, 0x75, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x00,
};
static TelopDataStruct TelopData[] = {
{'D05\0', 1101, 4201, 3}, {'D05A', 1101, -1, 0}, {'D05B', 1101, -1, 0},
{'D04\0', 1102, -1, 1}, {'D04A', 1102, -1, 0}, {'D04B', 1102, -1, 0},
{'D01\0', 1103, 4728, 3}, {'D01A', 1103, -1, 0}, {'D01B', 1103, -1, 0},
{'D10\0', 1104, 4908, 3}, {'D10A', 1104, -1, 0}, {'D10B', 1104, -1, 0},
{'D11\0', 1105, 5240, 3}, {'D11A', 1105, -1, 0}, {'D11B', 1105, -1, 0},
{'D06\0', 1106, 5465, 3}, {'D06A', 1106, -1, 0}, {'D06B', 1106, -1, 0},
{'D07\0', 1107, 5689, 3}, {'D07A', 1107, -1, 0}, {'D07B', 1107, -1, 0},
{'D08\0', 1108, -1, 1}, {'D08A', 1108, -1, 0}, {'D08B', 1108, -1, 0},
{'D08C', 1108, -1, 0}, {'D08D', 1108, -1, 0}, {'D09\0', 1109, -1, 1},
{'D09A', 1109, -1, 0}, {'D09B', 1109, -1, 0}, {'D09C', 1109, -1, 0},
{'F00\0', 1110, -1, 1}, {'F103', 1111, 10, 3}, {'R01\0', 1111, -1, 0},
{'F109', 1112, -1, 1}, {'R109', 1112, -1, 0}, {'R209', 1112, -1, 0},
{'F112', 1113, 1033, 3}, {'F113', 1114, 1024, 3}, {'F108', 1115, -1, 1},
{'R108', 1115, -1, 0}, {'F115', 1116, 1054, 3}, {'F111', 1118, -1, 1},
{'F124', 1119, -1, 1}, {'F114', 1120, 2048, 3}, {'F125', 1121, 2572, 3},
{'F121', 1122, 1581, 3}, {'F122', 1122, 1581, 3}, {'F123', 1122, 1581, 3},
{'F117', 1123, -1, 1}, {'F128', 1134, 814, 3}, {'R128', 1134, -1, 0},
{'F127', 1140, -1, 1}, {'R127', 1140, -1, 0}, {'F126', 1141, -1, 1}};
/* 80450640-80450648 0000C0 0004+04 2/2 0/0 0/0 .sdata numTelopData */
SECTION_SDATA static u32 numTelopData[1 + 1 /* padding */] = {
0x00000036,
/* padding */
0x00000000,
};
static s32 numTelopData = ARRAY_SIZE(TelopData);
/* 8004372C-800437C4 03E06C 0098+00 2/2 0/0 0/0 .text getTelopNo__FPCc */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void getTelopNo(char const* param_0) {
nofralloc
#include "asm/d/event/d_event_data/getTelopNo__FPCc.s"
static u16 getTelopNo(char const* pName) {
s32 val =
((pName[3] == 'B' ? 'd' : pName[0]) << 0x18 | pName[4] << 0x10 | pName[5] << 8 | pName[6]);
for (s32 i = 0; i < numTelopData; i++) {
if (val == TelopData[i].mName) {
return TelopData[i].mTelopNo;
}
}
return 0xFFFF;
}
#pragma pop
/* 800437C4-800437F0 03E104 002C+00 1/1 0/0 0/0 .text getTelopNo__Fv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void getTelopNo() {
nofralloc
#include "asm/d/event/d_event_data/getTelopNo__Fv.s"
static u16 getTelopNo() {
return getTelopNo(dComIfGp_getStartStageName());
}
#pragma pop
/* 800437F0-80043A14 03E130 0224+00 1/1 0/0 0/0 .text getStartTelopNo__Fv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void getStartTelopNo() {
nofralloc
#include "asm/d/event/d_event_data/getStartTelopNo__Fv.s"
static u16 getStartTelopNo() {
const char* startStageName = dComIfGp_getStartStageName();
const char* lastPlayStateName = dComIfGp_getLastPlayStageName();
if (strcmp(startStageName, lastPlayStateName) == 0) {
return 0xFFFF;
}
TelopDataStruct* telopData = NULL;
s32 val = ((startStageName[3] == 'B' ? 'd' : startStageName[0]) << 0x18 |
startStageName[4] << 0x10 | startStageName[5] << 8 | startStageName[6]);
for (s32 i = 0; i < numTelopData; i++) {
if (val == TelopData[i].mName) {
telopData = &TelopData[i];
break;
}
}
if (telopData == NULL || telopData->_8 == 0) {
return 0xFFFF;
} else if (telopData->_8 == 2 && telopData->_6 != 0xFFFF &&
!dComIfGs_isEventBit(telopData->_6)) {
return 0xFFFF;
} else if (telopData->_8 == 3 && telopData->_6 != 0xFFFF &&
!dComIfGs_isStageSwitch(telopData->_6 >> 8, telopData->_6 & 0xFF)) {
return 0xFFFF;
} else {
TelopDataStruct* lastTelopData = NULL;
val = ((lastPlayStateName[3] == 'B' ? 'd' : lastPlayStateName[0]) << 0x18 |
lastPlayStateName[4] << 0x10 | lastPlayStateName[5] << 8 | lastPlayStateName[6]);
for (s32 i = 0; i < numTelopData; i++) {
if (val == TelopData[i].mName) {
lastTelopData = &TelopData[i];
break;
}
}
if (lastTelopData != NULL && telopData->mTelopNo == lastTelopData->mTelopNo) {
return 0xFFFF;
} else {
return telopData->mTelopNo;
}
}
}
#pragma pop
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@ -255,6 +266,7 @@ SECTION_SDATA2 static f64 lit_4267 = 4503601774854144.0 /* cast s32 to float */;
/* 80043A14-80043D60 03E354 034C+00 1/1 0/0 0/0 .text dEvDt_Next_Stage__Fii */
// bunch of issues with sclsInfo section. regalloc for the rest
// TODO: try struct on stack
#ifdef NONMATCHING
static int dEvDt_Next_Stage(int index, int wipe_type) {
char* stage;
@ -281,18 +293,19 @@ static int dEvDt_Next_Stage(int index, int wipe_type) {
}
if (info != NULL && id >= 0 && id < info->numEntries) {
stage = info->mEntries[id].mStage;
point = info->mEntries[id].mStart;
roomNo = info->mEntries[id].mRoom;
layer = dStage_sclsInfo_getSceneLayer(&info->mEntries[id]);
wipe = dStage_sclsInfo_getWipe(&info->mEntries[id]);
wipe_time = dStage_sclsInfo_getWipeTime(&info->mEntries[id]);
stage_scls_info_class* stgInfo = &info->mEntries[id];
stage = stgInfo->mStage;
point = stgInfo->mStart;
roomNo = stgInfo->mRoom;
layer = dStage_sclsInfo_getSceneLayer(stgInfo);
wipe = dStage_sclsInfo_getWipe(stgInfo);
wipe_time = dStage_sclsInfo_getWipeTime(stgInfo);
if (wipe == 15) {
wipe = 0;
}
s8 timeH = dStage_sclsInfo_getTimeH(&info->mEntries[id]);
int timeH = dStage_sclsInfo_getTimeH(stgInfo);
if (timeH >= 0 && timeH <= 23) {
setHour = true;
hour = timeH;
@ -367,31 +380,38 @@ static asm int dEvDt_Next_Stage(int param_0, int param_1) {
#endif
/* 80043D60-80043DC8 03E6A0 0068+00 3/3 0/0 0/0 .text flagCheck__11dEvDtFlag_cFi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtFlag_c::flagCheck(int param_0) {
nofralloc
#include "asm/d/event/d_event_data/flagCheck__11dEvDtFlag_cFi.s"
BOOL dEvDtFlag_c::flagCheck(int param_0) {
if (flagMaxCheck(param_0)) {
return FALSE;
} else {
if (mFlags[(u32)param_0 / 0x20] & (1 << (param_0 & 0x1F))) {
return TRUE;
} else {
return FALSE;
}
}
}
#pragma pop
/* 80043DC8-80043E30 03E708 0068+00 2/2 1/1 0/0 .text flagSet__11dEvDtFlag_cFi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtFlag_c::flagSet(int param_0) {
nofralloc
#include "asm/d/event/d_event_data/flagSet__11dEvDtFlag_cFi.s"
BOOL dEvDtFlag_c::flagSet(int param_0) {
if (flagMaxCheck(param_0)) {
return FALSE;
} else {
mFlags[(u32)param_0 / 0x20] |= (1 << (param_0 & 0x1F));
return TRUE;
}
}
#pragma pop
bool dEvDtFlag_c::flagMaxCheck(int flag_id) {
BOOL dEvDtFlag_c::flagMaxCheck(int flag_id) {
if (flag_id == -1) {
return true;
return TRUE;
}
return FlagMax <= flag_id;
if (FlagMax <= flag_id) {
return TRUE;
} else {
return FALSE;
}
}
void dEvDtFlag_c::init() {
@ -401,35 +421,38 @@ void dEvDtFlag_c::init() {
}
/* 80043E78-80043EFC 03E7B8 0084+00 0/0 1/1 0/0 .text finishCheck__12dEvDtEvent_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int dEvDtEvent_c::finishCheck() {
nofralloc
#include "asm/d/event/d_event_data/finishCheck__12dEvDtEvent_cFv.s"
int dEvDtEvent_c::finishCheck() {
for (int i = 0; i < 3; i++) {
int tmp = field_0x88[i];
if (tmp == -1) {
return 1;
}
if (!dComIfGp_getEventManager().flagCheck(tmp)) {
return 0;
}
}
return 1;
}
#pragma pop
/* 80043EFC-80043F70 03E83C 0074+00 0/0 1/1 0/0 .text forceFinish__12dEvDtEvent_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtEvent_c::forceFinish() {
nofralloc
#include "asm/d/event/d_event_data/forceFinish__12dEvDtEvent_cFv.s"
int dEvDtEvent_c::forceFinish() {
for (int i = 0; i < 3; i++) {
int tmp = field_0x88[i];
if (tmp == -1) {
return 1;
}
dComIfGp_getEventManager().setFlag(tmp);
}
return 1;
}
#pragma pop
/* 80043F70-80043FD8 03E8B0 0068+00 0/0 1/1 0/0 .text
* specialStaffProc__12dEvDtEvent_cFP12dEvDtStaff_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtEvent_c::specialStaffProc(dEvDtStaff_c* param_0) {
nofralloc
#include "asm/d/event/d_event_data/specialStaffProc__12dEvDtEvent_cFP12dEvDtStaff_c.s"
void dEvDtEvent_c::specialStaffProc(dEvDtStaff_c* param_0) {
for (int i = 0; i < mNStaff; i++) {
param_0[mStaff[i]].specialProc();
}
}
#pragma pop
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@ -439,57 +462,56 @@ SECTION_DEAD static char const* const stringBase_80379E0D = "Timer";
#pragma pop
/* 80043FD8-8004403C 03E918 0064+00 4/4 0/0 0/0 .text specialProc_WaitStart__12dEvDtStaff_cFi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtStaff_c::specialProc_WaitStart(int param_0) {
nofralloc
#include "asm/d/event/d_event_data/specialProc_WaitStart__12dEvDtStaff_cFi.s"
void dEvDtStaff_c::specialProc_WaitStart(int param_0) {
int* timer = dComIfGp_evmng_getMyIntegerP(param_0, "Timer");
if (timer == NULL) {
field_0x36 = 0;
} else {
field_0x36 = *timer;
}
}
#pragma pop
/* 8004403C-80044080 03E97C 0044+00 4/4 0/0 0/0 .text specialProc_WaitProc__12dEvDtStaff_cFi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtStaff_c::specialProc_WaitProc(int param_0) {
nofralloc
#include "asm/d/event/d_event_data/specialProc_WaitProc__12dEvDtStaff_cFi.s"
void dEvDtStaff_c::specialProc_WaitProc(int param_0) {
if (field_0x36 > 0) {
field_0x36--;
} else {
dComIfGp_evmng_cutEnd(param_0);
}
}
#pragma pop
/* ############################################################################################## */
/* 803A8238-803A8270 -00001 0034+04 1/1 0/0 0/0 .data @4398 */
SECTION_DATA static void* lit_4398[13 + 1 /* padding */] = {
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0xA0),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x50),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0xA0),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x68),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x48),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0xA0),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x40),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x94),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x8C),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x9C),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0xA0),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x38),
(void*)(((char*)specialProc__12dEvDtStaff_cFv) + 0x70),
/* padding */
NULL,
};
/* 80044080-80044134 03E9C0 00B4+00 2/1 0/0 0/0 .text specialProc__12dEvDtStaff_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtStaff_c::specialProc() {
nofralloc
#include "asm/d/event/d_event_data/specialProc__12dEvDtStaff_cFv.s"
}
#pragma pop
inline dEvent_manager_c& dComIfGp_getEventManager() {
return g_dComIfG_gameInfo.play.getEvtManager();
void dEvDtStaff_c::specialProc() {
switch (mType) {
case 0xB:
specialProcPackage();
break;
case 6:
specialProcDirector();
break;
case 4:
specialProcTimekeeper();
break;
case 1:
dComIfGp_evmng_cutEnd(mIndex);
break;
case 3:
specialProcEffect();
break;
case 0xC:
specialProcCreate();
dComIfGp_evmng_cutEnd(mIndex);
break;
case 8:
specialProcSound();
break;
case 7:
specialProcMessage();
break;
case 9:
specialProcLight();
break;
}
}
/* 80044134-80044170 03EA74 003C+00 0/0 1/1 0/0 .text init__12dEvDtStaff_cFv */
@ -531,6 +553,46 @@ SECTION_SDATA2 static f64 lit_4461 = 24.0;
/* 80044190-80044324 03EAD0 0194+00 1/1 0/0 0/0 .text specialProcLight__12dEvDtStaff_cFv
*/
#ifdef NM
// matches besides floats
void dEvDtStaff_c::specialProcLight() {
int staffId = i_dComIfGp_evmng_getMyStaffId("LIGHT", NULL, 0);
if (staffId != -1) {
char* nowCutNameP = dComIfGp_getEventManager().getMyNowCutName(staffId);
if (dComIfGp_evmng_getIsAddvance(staffId)) {
int nowCutName = *(int*)nowCutNameP;
f32* hourP;
switch (nowCutName) {
case 'CHAN':
hourP = dComIfGp_evmng_getMyFloatP(staffId, "Hour");
if (hourP != NULL) {
dKy_instant_timechg(*hourP * 15.0f);
}
int* weatherP = dComIfGp_evmng_getMyIntegerP(staffId, "Weather");
if (weatherP != NULL) {
switch (*weatherP) {
case 0:
dKy_instant_rainchg();
}
}
break;
case 'ADD_':
hourP = dComIfGp_evmng_getMyFloatP(staffId, "Hour");
if (hourP != NULL) {
f32 hours = dComIfGs_getTime() * (1.0f / 15.0f);
hours += *hourP;
while (hours >= 24.0) {
hours -= 24.0;
}
dKy_instant_timechg(hours * 15.0f);
}
break;
}
}
dComIfGp_evmng_cutEnd(staffId);
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -539,27 +601,183 @@ asm void dEvDtStaff_c::specialProcLight() {
#include "asm/d/event/d_event_data/specialProcLight__12dEvDtStaff_cFv.s"
}
#pragma pop
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80379E21 = "MESSAGE";
SECTION_DEAD static char const* const stringBase_80379E29 = "msgNo";
SECTION_DEAD static char const* const stringBase_80379E2F = "No";
SECTION_DEAD static char const* const stringBase_80379E32 = "Type";
SECTION_DEAD static char const* const stringBase_80379E37 = "ForStart";
#pragma pop
#endif
/* 80044324-80044A58 03EC64 0734+00 1/1 0/0 0/0 .text specialProcMessage__12dEvDtStaff_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dEvDtStaff_c::specialProcMessage() {
nofralloc
#include "asm/d/event/d_event_data/specialProcMessage__12dEvDtStaff_cFv.s"
void dEvDtStaff_c::specialProcMessage() {
StaffWork* work = &mWork;
int staffId = i_dComIfGp_evmng_getMyStaffId("MESSAGE", NULL, 0);
if (staffId == -1) {
return;
}
char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
if (dComIfGp_evmng_getIsAddvance(staffId)) {
switch (*(int*)nowCutName) {
case 'WAIT':
specialProc_WaitStart(staffId);
break;
case 'CREA':
case 'SHOW':
work->_0 = UINT32_MAX;
work->mLMsg = NULL;
work->mMsgSubstanceNum = dComIfGp_evmng_getMySubstanceNum(staffId, "msgNo");
work->mMsgSubstanceP = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo");
if (work->mMsgSubstanceNum < 1) {
work->mMsgSubstanceNum = dComIfGp_evmng_getMySubstanceNum(staffId, "No");
work->mMsgSubstanceP = dComIfGp_evmng_getMyIntegerP(staffId, "No");
}
work->mMsgNo = *work->mMsgSubstanceP;
field_0x42 = 0;
break;
case 'END\0':
case 'FINI':
work->mLMsg->field_0xf8 = 0x10;
break;
case 'CONT':
work->mLMsg->field_0xf8 = 0xF;
int* ptr = dComIfGp_evmng_getMyIntegerP(staffId, "msgNo");
if (ptr == NULL) {
ptr = dComIfGp_evmng_getMyIntegerP(staffId, "No");
}
work->mMsgNo = *ptr;
fopMsgM_messageSet(work->mMsgNo, 1000);
break;
case 'SAVE':
work->mMsgNo = 1;
int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type");
if (typeP != NULL && *typeP == 1) {
work->mMsgNo = 2;
}
work->_0 = d_GameOver_Create(work->mMsgNo);
break;
case 'TELO':
int* forStartP = dComIfGp_evmng_getMyIntegerP(staffId, "ForStart");
if (forStartP != NULL && *forStartP != 0) {
work->mMsgNo = getStartTelopNo();
} else {
char* stageP = dComIfGp_evmng_getMyStringP(staffId, "Stage");
int* noP = dComIfGp_evmng_getMyIntegerP(staffId, "No");
if (noP != NULL) {
work->mMsgNo = *noP;
} else if (stageP != NULL) {
work->mMsgNo = getTelopNo(stageP);
} else {
work->mMsgNo = getTelopNo();
}
}
field_0x42 = 0;
if (work->mMsgNo != 0xFFFF) {
work->_0 = fopMsgM_messageSetDemo(work->mMsgNo);
}
}
}
switch (*(int*)nowCutName) {
case 'WAIT':
specialProc_WaitProc(staffId);
break;
case 'CREA':
switch (field_0x42) {
case 0:
work->_0 = fopMsgM_messageSet(work->mMsgNo, 1000);
if (work->_0 != UINT32_MAX) {
field_0x42++;
}
break;
case 1:
work->mLMsg = fopMsgM_SearchByID(work->_0);
if (work->mLMsg != NULL) {
field_0x42++;
}
break;
case 2:
dComIfGp_evmng_cutEnd(staffId);
break;
}
break;
case 'PUSH':
if (work->mLMsg->field_0xf8 == 0xE) {
dComIfGp_evmng_cutEnd(staffId);
}
break;
case 'TELO':
dComIfGp_evmng_cutEnd(staffId);
break;
case 'SHOW':
switch (field_0x42) {
case 0:
work->_0 = fopMsgM_messageSet(work->mMsgNo, 1000);
if (work->_0 != UINT32_MAX) {
field_0x42 = 1;
} else {
break;
}
case 1:
work->mLMsg = fopMsgM_SearchByID(work->_0);
if (work->mLMsg == NULL) {
break;
}
switch (work->mLMsg->field_0xf8) {
case 0xE:
work->mLMsg->field_0xf8 = 0x10;
break;
case 0x11:
break;
case 0x12:
work->mLMsg->field_0xf8 = 0x13;
work->_0 = UINT32_MAX;
work->mLMsg = NULL;
work->mMsgSubstanceNum--;
if (work->mMsgSubstanceNum != 0) {
field_0x42 = 0;
work->mMsgSubstanceP++;
work->mMsgNo = *work->mMsgSubstanceP;
} else {
dComIfGp_evmng_cutEnd(staffId);
field_0x42 = 99;
}
break;
default:
break;
}
break;
default:
dComIfGp_evmng_cutEnd(staffId);
break;
}
break;
case 'DELE':
case 'FINI':
if (work->mLMsg == NULL) {
dComIfGp_evmng_cutEnd(staffId);
} else if (work->mLMsg->field_0xf8 == 0x12) {
work->mLMsg->field_0xf8 = 0x13;
work->_0 = UINT32_MAX;
work->mLMsg = NULL;
dComIfGp_evmng_cutEnd(staffId);
}
break;
case 'CONT':
dComIfGp_evmng_cutEnd(staffId);
break;
case 'END\0':
switch (work->mLMsg->field_0xf8) {
case 0x11:
case 0x12:
dComIfGp_evmng_cutEnd(staffId);
break;
}
break;
case 'SAVE':
if (d_GameOver_CheckDelete(work->_0) && dComIfGp_getGameoverStatus() == 1) {
dComIfGp_evmng_cutEnd(staffId);
d_GameOver_Delete(work->_0);
}
break;
default:
dComIfGp_evmng_cutEnd(staffId);
break;
}
}
#pragma pop
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@ -576,6 +794,54 @@ SECTION_SDATA2 static f32 lit_4669 = -1.0f;
/* 80044A58-80044CB8 03F398 0260+00 1/1 0/0 0/0 .text specialProcSound__12dEvDtStaff_cFv
*/
#ifdef NONMATCHING
// matches besides floats
void dEvDtStaff_c::specialProcSound() {
int staffId = i_dComIfGp_evmng_getMyStaffId("SOUND", NULL, 0);
if (staffId == -1) {
return;
}
char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
if (dComIfGp_evmng_getIsAddvance(staffId)) {
switch (*(int*)nowCutName) {
case 'WAIT':
specialProc_WaitStart(staffId);
break;
case 'STRM':
mDoAud_bgmStreamPlay();
break;
case 'NOMS':
specialProc_WaitStart(staffId);
break;
case 'RIDD':
int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type");
if (typeP != NULL && *typeP == 1) {
mDoAud_seStart(0xC, NULL, 0, 0);
} else {
mDoAud_seStart(0xD, NULL, 0, 0);
}
break;
case 'BGMS':
int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer");
if (timerP != NULL) {
mDoAud_bgmStop(*timerP);
}
}
}
switch (*(int*)nowCutName) {
case 'WAIT':
specialProc_WaitProc(staffId);
break;
case 'NOMS':
if (mSoundWait <= dDemo_c::getFrameNoMsg()) {
dComIfGp_evmng_cutEnd(staffId);
}
break;
default:
dComIfGp_evmng_cutEnd(staffId);
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -584,6 +850,7 @@ asm void dEvDtStaff_c::specialProcSound() {
#include "asm/d/event/d_event_data/specialProcSound__12dEvDtStaff_cFv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@ -599,6 +866,60 @@ SECTION_DEAD static char const* const stringBase_80379E65 = "SCALE";
/* 80044CB8-80044EE4 03F5F8 022C+00 1/1 0/0 0/0 .text specialProcCreate__12dEvDtStaff_cFv
*/
#ifdef NONMATCHING
void dEvDtStaff_c::specialProcCreate() {
// regalloc
char* name;
u32 arg;
cXyz pos;
csXyz angle;
cXyz scale;
char* nowCutName;
dStage_objectNameInf* objNameInf;
int staffId;
staffId = i_dComIfGp_evmng_getMyStaffId("CREATER", NULL, 0);
if (staffId == -1) {
return;
}
nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
if (dComIfGp_evmng_getIsAddvance(staffId)) {
switch (*(int*)nowCutName) {
case 'WAIT':
break;
case 'CREA':
name = dComIfGp_evmng_getMyStringP(staffId, "MAKECAST");
objNameInf = dStage_searchName(name);
int* argP = dComIfGp_evmng_getMyIntegerP(staffId, "ARG");
if (argP == NULL) {
arg = UINT32_MAX;
} else {
arg = *argP;
}
cXyz* posP = dComIfGp_evmng_getMyXyzP(staffId, "POS");
if (posP == NULL) {
pos = ((fopAc_ac_c*)dComIfGp_getPlayer(0))->getPosition();
} else {
pos = *posP;
}
int* angleP = dComIfGp_evmng_getMyIntegerP(staffId, "ANGLE");
if (angleP == NULL) {
angle.setall(0);
} else {
angle.set(angleP[0], angleP[1], angleP[2]);
}
cXyz* scaleP = dComIfGp_evmng_getMyXyzP(staffId, "SCALE");
if (scaleP == NULL) {
scale.setAll(1.0f);
} else {
scale = *scaleP;
}
fopAcM_create(objNameInf->mProcName, arg, &pos, dComIfGp_roomControl_getStayNo(),
&angle, &scale, objNameInf->mSubtype);
break;
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -607,6 +928,7 @@ asm void dEvDtStaff_c::specialProcCreate() {
#include "asm/d/event/d_event_data/specialProcCreate__12dEvDtStaff_cFv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */

View File

@ -201,7 +201,7 @@ asm void fopMsgM_messageSet(u32 param_0, fopAc_ac_c* param_1, u32 param_2) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void fopMsgM_messageSet(u32 param_0, u32 param_1) {
asm int fopMsgM_messageSet(u32 param_0, u32 param_1) {
nofralloc
#include "asm/f_op/f_op_msg_mng/fopMsgM_messageSet__FUlUl.s"
}
@ -211,7 +211,7 @@ asm void fopMsgM_messageSet(u32 param_0, u32 param_1) {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void fopMsgM_messageSetDemo(u32 param_0) {
asm int fopMsgM_messageSetDemo(u32 param_0) {
nofralloc
#include "asm/f_op/f_op_msg_mng/fopMsgM_messageSetDemo__FUl.s"
}