summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlepelog <25211966+lepelog@users.noreply.github.com>2022-06-26 22:33:09 +0200
committerlepelog <25211966+lepelog@users.noreply.github.com>2022-06-26 22:33:09 +0200
commitf215e2d649064fdc73bf1e80f5de2999414ef335 (patch)
tree18485b3f5fb6b16c550d30950424251a4917053c /src
parentfaea8747414203590cda033d6a2edb0a3c52d3e9 (diff)
more nonmatching
Diffstat (limited to 'src')
-rw-r--r--src/d/a/d_a_alink.cpp2
-rw-r--r--src/d/event/d_event_data.cpp551
2 files changed, 509 insertions, 44 deletions
diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp
index df0a1b555d..eefe632c4b 100644
--- a/src/d/a/d_a_alink.cpp
+++ b/src/d/a/d_a_alink.cpp
@@ -19218,7 +19218,7 @@ MtxP daAlink_c::getRightItemMatrix() {
/* 800CF344-800CF380 0C9C84 003C+00 1/0 0/0 0/0 .text checkPlayerNoDraw__9daAlink_cFv */
BOOL daAlink_c::checkPlayerNoDraw() {
return dComIfGp_checkCameraAttentionStatus(field_0x317c, 2) ||
- i_checkNoResetFlg0(FLG0_UNK_8000000);
+ i_checkNoResetFlg0(PLAYER_NO_DRAW);
}
/* 800CF380-800CFC3C 0C9CC0 08BC+00 1/1 0/0 0/0 .text __ct__9daAlink_cFv */
diff --git a/src/d/event/d_event_data.cpp b/src/d/event/d_event_data.cpp
index 0bf899fcaf..a79d20e896 100644
--- a/src/d/event/d_event_data.cpp
+++ b/src/d/event/d_event_data.cpp
@@ -5,21 +5,15 @@
#include "d/event/d_event_data.h"
#include "d/com/d_com_inf_game.h"
+#include "d/d_camera.h"
#include "d/d_demo.h"
#include "d/d_gameover.h"
+#include "d/msg/d_msg_object.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "f_op/f_op_msg_mng.h"
//
-// Types:
-//
-
-struct dCamera_c {
- /* 80181170 */ void StartBlure(int, fopAc_ac_c*, f32, f32);
-};
-
-//
// Forward References:
//
@@ -142,6 +136,22 @@ inline BOOL dComIfGs_isEventBit(u16 id) {
return g_dComIfG_gameInfo.info.getEvent().isEventBit(id);
}
+inline s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* param_0) {
+ return param_0->field_0x09 >> 1 & 0x1f;
+}
+
+inline BOOL dEvDtFlagCheck(int flag) {
+ return dComIfGp_getEventManager().flagCheck(flag);
+}
+
+inline void dEvDtFlagSet(int flag) {
+ dComIfGp_getEventManager().setFlag(flag);
+}
+
+inline dEvt_control_c& dComIfGp_getEvent() {
+ return g_dComIfG_gameInfo.play.getEvent();
+}
+
struct TelopDataStruct {
s32 mName;
u16 mTelopNo;
@@ -559,7 +569,7 @@ 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
+#ifdef NONMATCHING
// matches besides floats
void dEvDtStaff_c::specialProcLight() {
int staffId = i_dComIfGp_evmng_getMyStaffId("LIGHT", NULL, 0);
@@ -611,6 +621,7 @@ asm void dEvDtStaff_c::specialProcLight() {
/* 80044324-80044A58 03EC64 0734+00 1/1 0/0 0/0 .text specialProcMessage__12dEvDtStaff_cFv */
void dEvDtStaff_c::specialProcMessage() {
+ MessageData* data = (MessageData*)&mData;
StaffWork* work = &mWork;
int staffId = i_dComIfGp_evmng_getMyStaffId("MESSAGE", NULL, 0);
if (staffId == -1) {
@@ -633,7 +644,7 @@ void dEvDtStaff_c::specialProcMessage() {
work->mMsgSubstanceP = dComIfGp_evmng_getMyIntegerP(staffId, "No");
}
work->mMsgNo = *work->mMsgSubstanceP;
- field_0x42 = 0;
+ data->unk = 0;
break;
case 'END\0':
case 'FINI':
@@ -671,7 +682,7 @@ void dEvDtStaff_c::specialProcMessage() {
work->mMsgNo = getTelopNo();
}
}
- field_0x42 = 0;
+ data->unk = 0;
if (work->mMsgNo != 0xFFFF) {
work->_0 = fopMsgM_messageSetDemo(work->mMsgNo);
}
@@ -682,17 +693,17 @@ void dEvDtStaff_c::specialProcMessage() {
specialProc_WaitProc(staffId);
break;
case 'CREA':
- switch (field_0x42) {
+ switch (data->unk) {
case 0:
work->_0 = fopMsgM_messageSet(work->mMsgNo, 1000);
if (work->_0 != UINT32_MAX) {
- field_0x42++;
+ data->unk++;
}
break;
case 1:
work->mLMsg = fopMsgM_SearchByID(work->_0);
if (work->mLMsg != NULL) {
- field_0x42++;
+ data->unk++;
}
break;
case 2:
@@ -709,11 +720,11 @@ void dEvDtStaff_c::specialProcMessage() {
dComIfGp_evmng_cutEnd(staffId);
break;
case 'SHOW':
- switch (field_0x42) {
+ switch (data->unk) {
case 0:
work->_0 = fopMsgM_messageSet(work->mMsgNo, 1000);
if (work->_0 != UINT32_MAX) {
- field_0x42 = 1;
+ data->unk = 1;
} else {
break;
}
@@ -734,12 +745,12 @@ void dEvDtStaff_c::specialProcMessage() {
work->mLMsg = NULL;
work->mMsgSubstanceNum--;
if (work->mMsgSubstanceNum != 0) {
- field_0x42 = 0;
+ data->unk = 0;
work->mMsgSubstanceP++;
work->mMsgNo = *work->mMsgSubstanceP;
} else {
dComIfGp_evmng_cutEnd(staffId);
- field_0x42 = 99;
+ data->unk = 99;
}
break;
default:
@@ -880,14 +891,12 @@ void dEvDtStaff_c::specialProcCreate() {
cXyz pos;
csXyz angle;
cXyz scale;
- char* nowCutName;
dStage_objectNameInf* objNameInf;
- int staffId;
- staffId = i_dComIfGp_evmng_getMyStaffId("CREATER", NULL, 0);
+ int staffId = i_dComIfGp_evmng_getMyStaffId("CREATER", NULL, 0);
if (staffId == -1) {
return;
}
- nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
+ char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
if (dComIfGp_evmng_getIsAddvance(staffId)) {
switch (*(int*)nowCutName) {
case 'WAIT':
@@ -961,6 +970,226 @@ SECTION_DEAD static char const* const stringBase_80379EF9 = "PtD";
#pragma pop
/* 80044EE4-80045878 03F824 0994+00 1/1 0/0 0/0 .text specialProcDirector__12dEvDtStaff_cFv */
+#ifdef NONMATCHING
+// matches besides floats
+void dEvDtStaff_c::specialProcDirector() {
+ DirectorData* data = (DirectorData*)mData;
+ daPy_py_c* player = dComIfGp_getLinkPlayer();
+ dEvt_control_c& evtControl = dComIfGp_getEvent();
+ int staffId = i_dComIfGp_evmng_getMyStaffId("DIRECTOR", NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
+ if (dComIfGp_evmng_getIsAddvance(staffId)) {
+ int* eventFlagP = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlag");
+ if (eventFlagP != NULL) {
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[*eventFlagP]);
+ }
+ int* eventFlagOffP = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlagOff");
+ if (eventFlagOffP != NULL) {
+ dComIfGs_offEventBit(dSv_event_flag_c::saveBitLabels[*eventFlagOffP]);
+ }
+ int* switchTableP = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchTable");
+ int switchTable;
+ if (switchTableP != NULL) {
+ switchTable = *switchTableP;
+ } else {
+ switchTable = dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo());
+ }
+ int* switchBitP = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchBit");
+ if (switchBitP != NULL) {
+ dComIfGs_onStageSwitch(switchTable, *switchBitP);
+ }
+ int* switchOffP = dComIfGp_evmng_getMyIntegerP(staffId, "SwitchOff");
+ if (switchOffP != NULL) {
+ dComIfGs_offStageSwitch(switchTable, *switchOffP);
+ }
+ int* tmpBitP = dComIfGp_evmng_getMyIntegerP(staffId, "TmpBit");
+ if (tmpBitP != NULL) {
+ dComIfGs_onTmpBit(dSv_event_tmp_flag_c::tempBitLabels[*tmpBitP]);
+ }
+ int* tmpOffP = dComIfGp_evmng_getMyIntegerP(staffId, "TmpBitOff");
+ if (tmpOffP != NULL) {
+ dComIfGs_offTmpBit(dSv_event_tmp_flag_c::tempBitLabels[*tmpOffP]);
+ }
+ switch (*(int*)nowCutName) {
+ case 'WAIT':
+ specialProc_WaitStart(staffId);
+ break;
+ case 'PLAY':
+ if (strcmp(nowCutName, "PLAYER_NODRAW") == 0) {
+ player->i_onPlayerNoDraw();
+ } else if (strcmp(nowCutName, "PLAYER_DRAW") == 0) {
+ player->i_offPlayerNoDraw();
+ }
+ break;
+ case 'NEXT':
+ dEvDt_Next_Stage(staffId, 0xD);
+ break;
+ case 'SKIP':
+ char* zev = dComIfGp_evmng_getMyStringP(staffId, "Zev");
+ // cast needed to match
+ void* pt = (void*)evtControl.getPt1();
+ if (NULL == pt) {
+ pt = evtControl.getPt2();
+ }
+ if (zev != NULL) {
+ evtControl.setSkipZev(pt, zev);
+ } else {
+ evtControl.setSkipProc(pt, dEv_defaultSkipProc, 0);
+ }
+ break;
+ case 'FADE':
+ f32* rateP = dComIfGp_evmng_getMyFloatP(staffId, "Rate");
+ int* colorP = dComIfGp_evmng_getMyIntegerP(staffId, "Color");
+ if (*rateP > 0) {
+ mDoGph_gInf_c::setFadeRate(0);
+ }
+ if (colorP != NULL) {
+ GXColor color;
+ color.r = colorP[0];
+ color.g = colorP[1];
+ color.b = colorP[2];
+ color.a = colorP[3];
+ mDoGph_gInf_c::fadeOut(*rateP, color);
+ } else {
+ mDoGph_gInf_c::fadeOut(*rateP);
+ }
+ break;
+ case 'VIBR':
+ specialProc_WaitStart(staffId);
+ int* patternP = dComIfGp_evmng_getMyIntegerP(staffId, "Pattern");
+ int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type");
+ dComIfGp_getVibration().StartQuake((u8*)patternP, 0, *typeP, cXyz(0, 1, 0));
+ break;
+ case 'WIPE':
+ f32* wipeRateP = dComIfGp_evmng_getMyFloatP(staffId, "Rate");
+ dDlst_list_c::wipeIn(-*wipeRateP);
+ if (*wipeRateP > 0) {
+ data->unk = 0;
+ } else {
+ data->unk = 1;
+ }
+ int* soundP = dComIfGp_evmng_getMyIntegerP(staffId, "SOUND");
+ if (soundP != NULL) {
+ switch (*soundP) {
+ case 0:
+ mDoAud_seStart(0, NULL, 0, 0);
+ }
+ }
+ break;
+ case 'MAPT':
+ int* idP = dComIfGp_evmng_getMyIntegerP(staffId, "ID");
+ data->unk = *idP;
+ dStage_MapEvent_dt_c* mapEvent = dEvt_control_c::searchMapEventData(data->unk);
+ if (mapEvent != NULL) {
+ if (mapEvent->mType == 0) {
+ data->mSoundWait = mapEvent->field_0x14;
+ } else {
+ data->mSoundWait = -1;
+ }
+ } else {
+ data->mSoundWait = 0;
+ }
+ break;
+ case 'CAST':
+ char* pt2Name = dComIfGp_evmng_getMyStringP(staffId, "Pt2");
+ if (pt2Name != NULL) {
+ fopAc_ac_c* pt2 = fopAcM_searchFromName4Event(pt2Name, -1);
+ if (pt2 != NULL) {
+ evtControl.setPt2(pt2);
+ }
+ }
+ char* ptTName = dComIfGp_evmng_getMyStringP(staffId, "PtT");
+ if (ptTName != NULL) {
+ fopAc_ac_c* ptT = fopAcM_searchFromName4Event(ptTName, -1);
+ if (ptT != NULL) {
+ evtControl.setPtT(ptT);
+ }
+ }
+ char* ptIName = dComIfGp_evmng_getMyStringP(staffId, "PtI");
+ if (ptIName != NULL) {
+ fopAc_ac_c* ptI = fopAcM_searchFromName4Event(ptIName, -1);
+ if (ptI != NULL) {
+ evtControl.setPtI(ptI);
+ }
+ }
+ char* ptDName = dComIfGp_evmng_getMyStringP(staffId, "PtD");
+ if (ptDName != NULL) {
+ fopAc_ac_c* ptD = fopAcM_searchFromName4Event(ptDName, -1);
+ if (ptD != NULL) {
+ evtControl.setPtD(ptD);
+ }
+ }
+ break;
+ case 'SPEC':
+ int* specTypeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type");
+ if (specTypeP != NULL) {
+ switch (*specTypeP) {
+ case 8:
+ if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[506])) {
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[566]);
+ }
+ if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[507])) {
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[567]);
+ }
+ }
+ }
+ break;
+ }
+ }
+ switch (*(int*)nowCutName) {
+ case 'WAIT':
+ specialProc_WaitProc(staffId);
+ break;
+ case 'FADE':
+ if (!mDoGph_gInf_c::isFade()) {
+ dComIfGp_evmng_cutEnd(staffId);
+ break;
+ }
+ if (mDoGph_gInf_c::getFadeRate() >= 1) {
+ f32* rateP = dComIfGp_evmng_getMyFloatP(staffId, "Rate");
+ if (*rateP > 0) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ }
+ break;
+ case 'NEXT':
+ break;
+ case 'VIBR':
+ if (data->mSoundWait > 0) {
+ data->mSoundWait--;
+ if (data->mSoundWait == 0) {
+ dComIfGp_getVibration().StopQuake(0x1F);
+ }
+ } else {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ case 'WIPE':
+ if (data->unk != 0) {
+ if (dDlst_list_c::getWipeRate() == 0) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ } else {
+ if (dDlst_list_c::getWipeRate() >= 1) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ }
+ break;
+ case 'MAPT':
+ data->mSoundWait--;
+ if (data->mSoundWait <= 0) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ default:
+ dComIfGp_evmng_cutEnd(staffId);
+ break;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -969,6 +1198,7 @@ asm void dEvDtStaff_c::specialProcDirector() {
#include "asm/d/event/d_event_data/specialProcDirector__12dEvDtStaff_cFv.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -983,7 +1213,73 @@ SECTION_DEAD static char const* const stringBase_80379F18 = "OffsetAngY";
/* 80451EF8-80451EFC 0004F8 0004+00 1/1 0/0 0/0 .sdata2 @5057 */
SECTION_SDATA2 static f32 lit_5057 = 10.0f;
+inline void dComIfGp_event_setCullRate(f32 f) {
+ g_dComIfG_gameInfo.play.getEvent().setCullRate(f);
+}
+
/* 80045878-80045AFC 0401B8 0284+00 1/1 0/0 0/0 .text specialProcPackage__12dEvDtStaff_cFv */
+#ifdef NONMATCHING
+void dEvDtStaff_c::specialProcPackage() {
+ dMsgObject_c* msgObj = dComIfGp_getMsgObjectClass();
+ if (!!msgObj) {
+ dMsgObject_demoMessageGroup();
+ }
+ int staffId = i_dComIfGp_evmng_getMyStaffId("PACKAGE", 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 'PLAY':
+ char* fileName = dComIfGp_evmng_getMyStringP(staffId, "FileName");
+ cXyz* offsetPos = dComIfGp_evmng_getMyXyzP(staffId, "OffsetPos");
+ f32* offsetAngYP = dComIfGp_evmng_getMyFloatP(staffId, "OffsetAngY");
+ f32 offsetAngY;
+ if (offsetAngYP != NULL) {
+ offsetAngY = *offsetAngYP;
+ } else {
+ offsetAngY = 0.0f;
+ }
+ // should not save event from g_dComIfG_gameInfo to register
+ u8* demoData = (u8*)dComIfGp_getEvent().getStbDemoData(fileName);
+ dDemo_c::start(demoData, offsetPos, offsetAngY);
+ dComIfGp_event_setCullRate(10.0f);
+ int* eventFlagP = dComIfGp_evmng_getMyIntegerP(staffId, "EventFlag");
+ if (eventFlagP != NULL) {
+ dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[*eventFlagP]);
+ }
+ break;
+ }
+ }
+ switch (*(int*)nowCutName) {
+ case 'WAIT':
+ specialProc_WaitProc(staffId);
+ break;
+ case 'PLAY':
+ dEvt_control_c& evtControl = dComIfGp_getEvent();
+ if (dDemo_c::getMode() == 2) {
+ dStage_MapEvent_dt_c* event = evtControl.getStageEventDt();
+ if (event != NULL && event->field_0x7 != 0xFF && !evtControl.chkFlag2(1)) {
+ dDemo_c::getControl()->referObject_control().suspend(100);
+ dComIfGp_evmng_cutEnd(staffId);
+ } else {
+ dDemo_c::end();
+ }
+ }
+ if (dDemo_c::getMode() == 0) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ default:
+ dComIfGp_evmng_cutEnd(staffId);
+ break;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -992,6 +1288,7 @@ asm void dEvDtStaff_c::specialProcPackage() {
#include "asm/d/event/d_event_data/specialProcPackage__12dEvDtStaff_cFv.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -1001,14 +1298,35 @@ SECTION_DEAD static char const* const stringBase_80379F23 = "TIMEKEEPER";
#pragma pop
/* 80045AFC-80045C34 04043C 0138+00 1/1 0/0 0/0 .text specialProcTimekeeper__12dEvDtStaff_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dEvDtStaff_c::specialProcTimekeeper() {
- nofralloc
-#include "asm/d/event/d_event_data/specialProcTimekeeper__12dEvDtStaff_cFv.s"
+void dEvDtStaff_c::specialProcTimekeeper() {
+ TimerKeeperData* dataP = (TimerKeeperData*)&mData;
+ int staffId = i_dComIfGp_evmng_getMyStaffId("TIMEKEEPER", NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
+ if (dComIfGp_evmng_getIsAddvance(staffId)) {
+ switch (*(int*)nowCutName) {
+ case 'COUN':
+ dataP->timer = *dComIfGp_evmng_getMyIntegerP(staffId, "Timer");
+ break;
+ case 'WAIT':
+ break;
+ }
+ }
+ switch (*(int*)nowCutName) {
+ case 'COUN':
+ if (dataP->timer > 0) {
+ dataP->timer--;
+ } else {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ case 'WAIT':
+ default:
+ dComIfGp_evmng_cutEnd(staffId);
+ }
}
-#pragma pop
/* ############################################################################################## */
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -1028,6 +1346,136 @@ SECTION_SDATA2 static f32 lit_5200 = 4.0f / 5.0f;
/* 80045C34-800460A8 040574 0474+00 1/1 0/0 0/0 .text specialProcEffect__12dEvDtStaff_cFv
*/
+#ifdef NONMATCHING
+// matches besides floats
+void dEvDtStaff_c::specialProcEffect() {
+ EffectData* data = (EffectData*)mData;
+ int staffId = i_dComIfGp_evmng_getMyStaffId("EFFECT", NULL, 0);
+ if (staffId == -1) {
+ return;
+ }
+ char* nowCutName = dComIfGp_getEventManager().getMyNowCutName(staffId);
+ if (dComIfGp_evmng_getIsAddvance(staffId)) {
+ data->unk = 0;
+ switch (*(int*)nowCutName) {
+ case 'WAIT': {
+ int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer");
+ int timer;
+ if (timerP != NULL) {
+ timer = *timerP;
+ } else {
+ timer = 0;
+ }
+ data->unk = timer;
+ } break;
+ case 'SHOC': {
+ int* powerP = dComIfGp_evmng_getMyIntegerP(staffId, "Power");
+ int power;
+ if (powerP != NULL) {
+ power = *powerP;
+ } else {
+ power = 5;
+ }
+ int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type");
+ int type;
+ if (typeP != NULL) {
+ type = *typeP;
+ } else {
+ type = 0xF;
+ }
+ dComIfGp_getVibration().StartShock(power, type, cXyz(0, 1, 0));
+ } break;
+ case 'QUAK': {
+ int power;
+ int type;
+ int timer;
+ int random;
+ u8* pattern;
+ int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer");
+ if (timerP != NULL) {
+ timer = *timerP;
+ } else {
+ timer = 30;
+ }
+ data->unk = timer;
+ int* powerP = dComIfGp_evmng_getMyIntegerP(staffId, "Power");
+ if (powerP != NULL) {
+ power = *powerP;
+ } else {
+ power = 5;
+ }
+ int* typeP = dComIfGp_evmng_getMyIntegerP(staffId, "Type");
+ if (typeP != NULL) {
+ type = *typeP;
+ } else {
+ type = 0xF;
+ }
+ pattern = (u8*)dComIfGp_evmng_getMyStringP(staffId, "Pattern");
+ if (pattern != NULL) {
+ int* randomP = dComIfGp_evmng_getMyIntegerP(staffId, "Random");
+ if (randomP != NULL) {
+ random = *randomP;
+ } else {
+ random = 0;
+ }
+ dComIfGp_getVibration().StartQuake(pattern, random, type, cXyz(0, 1, 0));
+ } else {
+ dComIfGp_getVibration().StartQuake(power, type, cXyz(0, 1, 0));
+ }
+ } break;
+ case 'BLUR': {
+ int* timerP = dComIfGp_evmng_getMyIntegerP(staffId, "Timer");
+ int timer;
+ if (timerP != NULL) {
+ timer = *timerP;
+ } else {
+ timer = 30;
+ }
+ int timer2 = data->unk = timer;
+ f32* alphaP = dComIfGp_evmng_getMyFloatP(staffId, "Alpha");
+ f32 alpha;
+ if (alphaP != NULL) {
+ alpha = *alphaP;
+ } else {
+ alpha = 0.8f;
+ }
+ f32* scaleP = dComIfGp_evmng_getMyFloatP(staffId, "Scale");
+ f32 scale;
+ if (scaleP != NULL) {
+ scale = *scaleP;
+ } else {
+ scale = 0.8f;
+ }
+ dCam_getBody()->StartBlure(timer2, NULL, alpha, scale);
+ } break;
+ }
+ }
+ if (data->unk != 0) {
+ data->unk--;
+ }
+ switch (*(int*)nowCutName) {
+ case 'WAIT':
+ if (data->unk == 0) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ case 'QUAK':
+ if (data->unk == 0) {
+ dComIfGp_getVibration().StopQuake(0x1F);
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ case 'BLUR':
+ if (data->unk == 0) {
+ dComIfGp_evmng_cutEnd(staffId);
+ }
+ break;
+ default:
+ dComIfGp_evmng_cutEnd(staffId);
+ break;
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -1036,16 +1484,25 @@ asm void dEvDtStaff_c::specialProcEffect() {
#include "asm/d/event/d_event_data/specialProcEffect__12dEvDtStaff_cFv.s"
}
#pragma pop
+#endif
/* 800460A8-80046138 0409E8 0090+00 1/1 0/0 0/0 .text startCheck__10dEvDtCut_cFv */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dEvDtCut_c::startCheck() {
- nofralloc
-#include "asm/d/event/d_event_data/startCheck__10dEvDtCut_cFv.s"
+int dEvDtCut_c::startCheck() {
+ for (int i = 0; i < 3; i++) {
+ int flag = this->getStartFlag(i);
+ if (flag == -1) {
+ if (i == 0) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+ if (!dEvDtFlagCheck(flag)) {
+ return 0;
+ }
+ }
+ return 1;
}
-#pragma pop
/* 80046138-8004616C 040A78 0034+00 1/1 7/7 0/0 .text init__11dEvDtBase_cFv */
int dEvDtBase_c::init() {
@@ -1111,13 +1568,21 @@ void dEvDtBase_c::advanceCut(dEvDtEvent_c* p_event) {
/* 800462FC-800463DC 040C3C 00E0+00 1/1 0/0 0/0 .text
* advanceCutLocal__11dEvDtBase_cFP12dEvDtStaff_c */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dEvDtBase_c::advanceCutLocal(dEvDtStaff_c* param_0) {
- nofralloc
-#include "asm/d/event/d_event_data/advanceCutLocal__11dEvDtBase_cFP12dEvDtStaff_c.s"
+BOOL dEvDtBase_c::advanceCutLocal(dEvDtStaff_c* param_0) {
+ dEvDtCut_c* cut = &mCutP[param_0->getCurrentCut()];
+ if (dEvDtFlagCheck(cut->getFlagId()) && cut->getNext() != -1) {
+ switch (mCutP[cut->getNext()].startCheck()) {
+ case -1:
+ param_0->advanceCut(cut->getNext());
+ return TRUE;
+ case 1:
+ dEvDtFlagSet(cut->getFlagId());
+ param_0->advanceCut(cut->getNext());
+ return TRUE;
+ }
+ }
+ param_0->field_0x40 = false;
+ return FALSE;
}
-#pragma pop
/* 80379DD0-80379DD0 006430 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */