d_a_door10 (#816)

* d_a_door10

* func size

* Fixups from debug maps

* remove script for now

* PR
This commit is contained in:
Maide
2025-07-25 05:04:41 +01:00
committed by GitHub
parent 468df0d5f1
commit 4c6cde87bf
7 changed files with 790 additions and 90 deletions
+1 -1
View File
@@ -1362,7 +1362,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_coming3"),
ActorRel(Matching, "d_a_demo_dk"),
ActorRel(Matching, "d_a_demo_kmm"),
ActorRel(NonMatching, "d_a_door10"),
ActorRel(Equivalent, "d_a_door10", extra_cflags=['-pragma "nosyminline on"']),
ActorRel(Matching, "d_a_dr"),
ActorRel(Equivalent, "d_a_dr2"),
ActorRel(NonMatching, "d_a_ep"),
+22 -20
View File
@@ -7,41 +7,42 @@
class daDoor10_c : public dDoor_info_c {
public:
void checkFlag(unsigned short) {}
bool checkFlag(unsigned short flag) { return m356 & flag; }
inline BOOL execute();
void offFlag(unsigned short) {}
void onFlag(unsigned short) {}
void setAction(unsigned char) {}
void offFlag(unsigned short flag) { m356 &= ~flag; }
void onFlag(unsigned short flag) { m356 |= flag; }
void setAction(u8 action) { m354 = action; }
void chkMakeKey();
s32 chkMakeKey();
void setKey();
void chkMakeStop();
void chkStopF();
void chkStopB();
BOOL chkMakeStop();
s32 chkStopF();
s32 chkStopB();
void setStop();
void chkStopOpen();
BOOL chkStopOpen();
void setStopDemo();
void chkStopClose();
void getBdlName();
void getDzbName();
void getSize2X();
void CreateHeap();
BOOL chkStopClose();
const char* getBdlName();
const char* getDzbName();
f32 getSize2X();
BOOL CreateHeap();
void setEventPrm();
void openInit();
void openProc();
BOOL openProc();
void openEnd();
void closeInit();
void closeProc();
BOOL closeProc();
void closeEnd();
void calcMtx();
void CreateInit();
BOOL CreateInit();
cPhs_State create();
void demoProc();
BOOL draw();
static const char M_arcname[];
public:
/* 0x2D0 */ dDoor_smoke_c m2D0;
/* 0x306 */ u8 m306[0x308 - 0x306];
/* 0x308 */ dDoor_key2_c mKeyLock;
/* 0x32C */ dDoor_stop_c mStopBars;
/* 0x338 */ dDoor_hkyo_c mHkyo;
@@ -50,8 +51,9 @@ public:
/* 0x354 */ u8 m354;
/* 0x355 */ u8 m355[0x356 - 0x355];
/* 0x356 */ u16 m356;
/* 0x358 */ u8 m358[0x364 - 0x358];
/* 0x358 */ f32 m358;
/* 0x35C */ request_of_phase_process_class mPhase;
/* 0x364 */ int m364;
};
}; // size = 0x368
#endif /* D_A_DOOR10_H */
+1 -1
View File
@@ -102,7 +102,7 @@ public:
void RwgCaptPoly(int, dBgS_CaptPoly&) {}
void SetGrpRoomInf(int) {}
void SetOldShapeAngleY(s16) {}
void SetRoomId(u16) {}
void SetRoomId(u16 roomNo) { mRoomNo = roomNo; }
void SphChk(dBgS_SphChk*, void*) {}
void SplGrpChk(dBgS_SplGrpChk*) {}
void WallCorrect(dBgS_Acch*) {}
+14 -8
View File
@@ -25,8 +25,8 @@ public:
s32 frontCheckOld();
s32 frontCheck();
s32 drawCheck_local();
u8 drawCheck(int);
u8 checkExecute();
s32 drawCheck(int);
s32 checkExecute();
void startDemoProc();
void makeEventId(int);
void initProc(int);
@@ -48,10 +48,10 @@ public:
/* 0x294 */ cXyz mAngleVec;
/* 0x2A0 */ u8 mFrontCheck;
/* 0x2A1 */ u8 m2A1;
/* 0x2A2 */ u16 mEventIdx[12];
/* 0x2A2 */ s16 mEventIdx[12];
/* 0x2BA */ u8 mToolId[12];
/* 0x2C6 */ u8 field_0x2c6;
/* 0x2C7 */ u8 field_0x2c7;
/* 0x2C6 */ u8 m2C6;
/* 0x2C7 */ u8 m2C7;
/* 0x2C8 */ int mStaffId;
/* 0x2CC */ s8 mRoomNo;
/* 0x2CD */ u8 m2CD[0x2D0 - 0x2CD];
@@ -98,6 +98,9 @@ public:
class dDoor_stop_c {
public:
dDoor_stop_c() {}
~dDoor_stop_c() {}
void calcMtx(dDoor_info_c*);
void closeInit(dDoor_info_c*);
s32 closeProc(dDoor_info_c*);
@@ -128,9 +131,12 @@ public:
class dDoor_hkyo_c {
public:
void chkUse() {}
void offUse() {}
void onUse(u8) {}
dDoor_hkyo_c() {}
~dDoor_hkyo_c() {}
bool chkUse() { return m11 != 0; }
void offUse() { m11 = 0; }
void onUse(u8 arg0) { m11 = arg0; }
cPhs_State resLoad();
void resDelete();
+1 -1
View File
@@ -66,7 +66,7 @@ public:
dEvDtFlag_c& getFlags() { return mFlag; }
int setStartDemo(int eventInfoIdx) { return mException.setStartDemo(eventInfoIdx); }
void cancelStartDemo() { /* TODO */ }
void cancelStartDemo() { mException.init(); }
void setCameraPlay(int v) { mCameraPlay = v; }
int cameraPlay() { return mCameraPlay; }
+748 -56
View File
@@ -6,160 +6,785 @@
#include "d/actor/d_a_door10.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "f_op/f_op_actor_mng.h"
#include "d/d_com_inf_game.h"
#include "d/res/res_doorbs.h"
/* 00000078-000000C8 .text chkMakeKey__10daDoor10_cFv */
void daDoor10_c::chkMakeKey() {
/* Nonmatching */
s32 daDoor10_c::chkMakeKey() {
u8 cVar1 = getType();
if (cVar1 == 4 || cVar1 == 5) {
return 1;
}
if (cVar1 == 1) {
return 2;
}
return 0;
}
/* 000000C8-000001A8 .text setKey__10daDoor10_cFv */
void daDoor10_c::setKey() {
/* Nonmatching */
if (chkMakeKey() == 1) {
/* Normal Locked Door */
if (!dComIfGs_isSwitch(getSwbit(), -1)) {
mKeyLock.keyOn();
return;
}
}
if (chkMakeKey() == 2) {
/* Boss Door */
if (getSwbit() == 0xFF) {
mKeyLock.keyOff();
return;
}
if (getSwbit() >= 0x80 || !dComIfGs_isSwitch(getSwbit(), -1)) {
mKeyLock.keyOn();
return;
}
}
mKeyLock.keyOff();
}
/* 000001A8-00000218 .text chkMakeStop__10daDoor10_cFv */
void daDoor10_c::chkMakeStop() {
/* Nonmatching */
BOOL daDoor10_c::chkMakeStop() {
u8 cVar3 = getSwbit2();
if (cVar3 != 0xFF) {
return TRUE;
}
if (!chkMakeKey() && getSwbit() != 0xFF) {
return TRUE;
}
return FALSE;
}
/* 00000218-000002E4 .text chkStopF__10daDoor10_cFv */
void daDoor10_c::chkStopF() {
/* Nonmatching */
s32 daDoor10_c::chkStopF() {
u8 bVar3 = getType();
u8 uVar1 = getSwbit();
u8 uVar2 = getFRoomNo();
if (uVar1 == 0xFF) {
return 0;
}
switch (bVar3) {
case 0:
case 2:
case 3:
if (dComIfGp_roomControl_checkStatusFlag(uVar2, 0x1) == FALSE) {
return -1;
}
return !dComIfGs_isSwitch(uVar1, uVar2);
}
return 0;
}
/* 000002E4-00000374 .text chkStopB__10daDoor10_cFv */
void daDoor10_c::chkStopB() {
/* Nonmatching */
s32 daDoor10_c::chkStopB() {
s32 ret;
u8 uVar1 = getSwbit2();
u8 uVar2 = getBRoomNo();
if (uVar1 == 0xFF) {
ret = 0;
} else if (dComIfGp_roomControl_checkStatusFlag(uVar2, 0x1) == FALSE) {
ret = -1;
} else {
ret = !dComIfGs_isSwitch(uVar1, uVar2);
}
return ret;
}
/* 00000374-00000408 .text setStop__10daDoor10_cFv */
void daDoor10_c::setStop() {
/* Nonmatching */
if (chkMakeStop() && mStopBars.mpModel != NULL) {
mStopBars.mFrontCheck = mFrontCheck;
if (mFrontCheck == 0) {
mStopBars.m8 = chkStopF();
mStopBars.mA = chkStopB();
} else {
mStopBars.m8 = chkStopB();
mStopBars.mA =chkStopF();
}
mStopBars.mOffsY = 0.0f;
}
}
/* 00000408-00000598 .text chkStopOpen__10daDoor10_cFv */
void daDoor10_c::chkStopOpen() {
/* Nonmatching */
BOOL daDoor10_c::chkStopOpen() {
u8 cVar3 = getType();
u8 swbit;
u8 roomNo;
if (mFrontCheck == 0) {
swbit = getSwbit();
roomNo = getFRoomNo();
} else {
swbit = getSwbit2();
roomNo = getBRoomNo();
}
if ((mFrontCheck == 0 && cVar3 == 2) || (mFrontCheck == 1 && cVar3 == 5)) {
#if VERSION == VERSION_DEMO
if (!dComIfGp_event_runCheck() != FALSE) {
if (dComIfGp_roomControl_checkRoomDisp(roomNo)) {
if (fopAcM_myRoomSearchEnemy(roomNo) == NULL) {
if (m2A1 != 0) {
m2A1--;
return FALSE;
}
if (swbit != 0xFF) {
dComIfGs_onSwitch(swbit, roomNo);
}
return TRUE;
}
}
}
if (getArg1() == 15) {
m2A1 = 0;
} else {
m2A1 = 0x41;
}
#else
if (!dComIfGp_event_runCheck() != FALSE || m2A1 == 0) {
if (dComIfGp_roomControl_checkRoomDisp(roomNo)) {
if (fopAcM_myRoomSearchEnemy(roomNo) == NULL) {
if (m2A1 != 0) {
m2A1--;
return FALSE;
}
if (swbit != 0xFF) {
dComIfGs_onSwitch(swbit, roomNo);
}
return TRUE;
}
}
if (getArg1() == 15) {
m2A1 = 0;
} else {
m2A1 = 0x41;
}
}
#endif
} else if (swbit != 0xFF && dComIfGs_isSwitch(swbit, roomNo)) {
return TRUE;
}
return FALSE;
}
/* 00000598-000005BC .text setStopDemo__10daDoor10_cFv */
void daDoor10_c::setStopDemo() {
/* Nonmatching */
if (mFrontCheck == 0) {
m2C6 = 0;
} else {
m2C6 = 1;
}
}
/* 000005BC-000006A4 .text chkStopClose__10daDoor10_cFv */
void daDoor10_c::chkStopClose() {
/* Nonmatching */
BOOL daDoor10_c::chkStopClose() {
u8 cVar3 = getType();
u8 uVar1;
u8 uVar2;
if (mStopBars.mpModel == NULL) {
return false;
}
if (cVar3 == 1) {
return false;
}
if (mFrontCheck == 0) {
if (cVar3 == 2) {
return false;
}
uVar1 = getSwbit();
uVar2 = getFRoomNo();
} else {
if (cVar3 == 5) {
return false;
}
uVar1 = getSwbit2();
uVar2 = getBRoomNo();
}
if (uVar1 == 0xFF) {
return false;
}
if (dComIfGs_isSwitch(uVar1, uVar2)) {
return FALSE;
}
return TRUE;
}
/* 000006A4-00000714 .text getBdlName__10daDoor10_cFv */
void daDoor10_c::getBdlName() {
/* Nonmatching */
const char* daDoor10_c::getBdlName() {
switch (getType()) {
case 1: return "door20.bdl";
case 2: break;
case 3: return "door11.bdl";
}
return "door10.bdl";
}
/* 00000714-00000788 .text getDzbName__10daDoor10_cFv */
void daDoor10_c::getDzbName() {
/* Nonmatching */
const char* daDoor10_c::getDzbName() {
switch (getType()) {
case 1: return "door20.dzb";
case 2: break;
case 3: return "door11.dzb";
}
return "door10.dzb";
}
/* 00000788-000007CC .text getSize2X__10daDoor10_cFv */
void daDoor10_c::getSize2X() {
/* Nonmatching */
f32 daDoor10_c::getSize2X() {
switch (getType()) {
case 3:
return 15.0f * 15.0f;
}
return 110.0f * 110.0f;
}
static const char daDoor10_c::M_arcname[] = "door10";
/* 000007CC-000007EC .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
static BOOL CheckCreateHeap(fopAc_ac_c* a_this) {
return ((daDoor10_c*)a_this)->CreateHeap();
}
/* 000007EC-00000AEC .text CreateHeap__10daDoor10_cFv */
void daDoor10_c::CreateHeap() {
/* Nonmatching */
BOOL daDoor10_c::CreateHeap() {
J3DModelData* modelData;
if (m364 != 0) {
modelData = (J3DModelData*)dComIfG_getObjectRes("DoorBs", m364);
} else {
modelData = (J3DModelData*)dComIfG_getStageRes("Stage", getBdlName());
}
JUT_ASSERT(VERSION_SELECT(354, 356, 356, 356), modelData);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
if (mpModel == NULL) {
return FALSE;
}
switch (chkMakeKey()) {
case 1:
if (!mKeyLock.keyCreate(0)) {
return FALSE;
}
break;
case 2:
if (!mKeyLock.keyCreate(1)) {
return FALSE;
}
break;
}
if (mHkyo.chkUse() && !mHkyo.create()) {
return FALSE;
}
if (chkMakeStop() && !mStopBars.create()) {
return FALSE;
}
mpBgW = new dBgW();
if (mpBgW == NULL) {
return FALSE;
}
cBgD_t* cBgD;
if (m364 != 0) {
if (m364 == 4) {
cBgD = (cBgD_t*)dComIfG_getObjectRes("DoorBs", DOORBS_DZB_DOOR20_D);
} else {
cBgD = (cBgD_t*)dComIfG_getObjectRes("DoorBs", DOORBS_DZB_DOOR20_K);
}
} else {
cBgD = (cBgD_t*)dComIfG_getStageRes("Stage", getDzbName());
}
if (cBgD == NULL) {
return FALSE;
}
calcMtx();
mKeyLock.calcMtx(this);
mStopBars.calcMtx(this);
if (mHkyo.chkUse()) {
mHkyo.calcMtx(this, 0.0f);
}
if (mpBgW->Set(cBgD, cBgW::MOVE_BG_e, &mpModel->getBaseTRMtx()) == 1) {
return FALSE;
}
return TRUE;
}
/* 00000AEC-00000C8C .text setEventPrm__10daDoor10_cFv */
void daDoor10_c::setEventPrm() {
/* Nonmatching */
if (mFrontCheck == 0) {
m2C6 = 2;
if (mStopBars.mA == 0xff) {
mStopBars.mA = chkStopB();
}
} else {
m2C6 = 3;
if (getType() == 1 && getArg1() != 16) {
return;
}
if (mStopBars.mA == 0xff) {
mStopBars.mA = chkStopF();
}
}
if (mStopBars.m8 != 0) {
return;
}
if (getType() == 1 && getArg1() != 16) {
m2C6 = 6;
} else if (mStopBars.mA == 1) {
m2C6 += 2;
}
if (mKeyLock.mbEnabled != 0) {
switch (getType()) {
case 1:
if (dComIfGs_isDungeonItemBossKey() == 0) {
return;
}
break;
default:
if (dComIfGs_getKeyNum() == 0) {
return;
}
break;
}
}
if (checkArea(getSize2X(), 110.0f * 110.0f, 250.0f * 250.0f)) {
eventInfo.setEventId(mEventIdx[m2C6]);
eventInfo.setToolId(mToolId[m2C6]);
eventInfo.onCondition(dEvtCnd_CANDOOR_e);
}
}
/* 00000C8C-00000D38 .text openInit__10daDoor10_cFv */
void daDoor10_c::openInit() {
/* Nonmatching */
openInitCom(1);
onFlag(1);
dComIfG_Bgsp()->Release(mpBgW);
m358 = 0.0f;
speedF = 0.0f;
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_MOVE_U, 0);
}
/* 00000D38-00000DC8 .text openProc__10daDoor10_cFv */
void daDoor10_c::openProc() {
/* Nonmatching */
BOOL daDoor10_c::openProc() {
BOOL ret = FALSE;
cLib_chaseF(&speedF, 30.0f, 4.0f);
if (cLib_chaseF(&m358, 300.0f, speedF) != 0) {
ret = TRUE;
}
calcMtx();
if (mHkyo.chkUse()) {
mHkyo.calcMtx(this, m358);
}
return ret;
}
/* 00000DC8-00000E5C .text openEnd__10daDoor10_cFv */
void daDoor10_c::openEnd() {
/* Nonmatching */
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_STOP_U, 0);
offFlag(1);
m358 = 300.0;
speedF = 0.0f;
}
/* 00000E5C-00000F3C .text closeInit__10daDoor10_cFv */
void daDoor10_c::closeInit() {
/* Nonmatching */
onFlag(2);
bool rt = dComIfG_Bgsp()->Regist(mpBgW, this);
JUT_ASSERT(VERSION_SELECT(539, 541, 541, 541), !rt);
dComIfGp_map_clrAGBMapSendStopFlg();
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
}
/* 00000F3C-00000FCC .text closeProc__10daDoor10_cFv */
void daDoor10_c::closeProc() {
/* Nonmatching */
BOOL daDoor10_c::closeProc() {
BOOL ret = FALSE;
cLib_chaseF(&speedF, 60.0f, 6.0f);
if (cLib_chaseF(&m358, 0.0f, speedF) != 0) {
ret = TRUE;
}
calcMtx();
if (mHkyo.chkUse()) {
mHkyo.calcMtx(this, m358);
}
return ret;
}
/* 00000FCC-00001084 .text closeEnd__10daDoor10_cFv */
void daDoor10_c::closeEnd() {
/* Nonmatching */
offFlag(2);
closeEndCom();
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_STOP_D, 0);
}
/* 00001084-000010FC .text calcMtx__10daDoor10_cFv */
void daDoor10_c::calcMtx() {
/* Nonmatching */
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::YrotM(home.angle.y);
mDoMtx_stack_c::transM(0.0f, m358, 0.0f);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 000010FC-0000125C .text CreateInit__10daDoor10_cFv */
void daDoor10_c::CreateInit() {
/* Nonmatching */
BOOL daDoor10_c::CreateInit() {
if (dComIfG_Bgsp()->Regist(mpBgW, this)) {
JUT_ASSERT(VERSION_SELECT(605, 607, 607, 607), NULL);
}
tevStr.mRoomNo = current.roomNo;
m358 = 0.0f;
setAction(0);
if (getType() == 1) {
attention_info.position.y += 250.0f;
eyePos.y += 250.0f;
} else {
attention_info.position.y += 150.0f;
eyePos.y += 150.0f;
}
attention_info.flags = fopAc_Attn_ACTION_DOOR_e;
calcMtx();
mpBgW->Move();
mpBgW->SetRoomId(getFRoomNo());
initProc(1);
if (mHkyo.chkUse()) {
mHkyo.init();
mHkyo.calcMtx(this, 0.0f);
}
#if VERSION > VERSION_DEMO
m2A1 = 0x41;
#endif
return TRUE;
}
/* 0000125C-000013A8 .text create__10daDoor10_cFv */
cPhs_State daDoor10_c::create() {
/* Nonmatching */
switch (getArg1()) {
case 1:
case 2:
case 3:
case 4:
mHkyo.onUse(getArg1());
break;
default:
mHkyo.offUse();
break;
}
switch (getArg1()) {
case 13:
m364 = 4;
break;
case 14:
m364 = 5;
break;
default:
m364 = 0;
break;
}
cPhs_State ret;
if (m364 != 0 && (ret = dComIfG_resLoad(&mPhase, "DoorBs")) != cPhs_COMPLEATE_e) {
return ret;
}
if (chkMakeKey() && (ret = mKeyLock.keyResLoad()) != cPhs_COMPLEATE_e) {
return ret;
}
if (mHkyo.chkUse() && (ret = mHkyo.resLoad()) != cPhs_COMPLEATE_e) {
return ret;
}
fopAcM_SetRoomNo(this, getFRoomNo());
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x3800)) {
return cPhs_ERROR_e;
}
CreateInit();
return cPhs_COMPLEATE_e;
}
/* 000013A8-000016B0 .text demoProc__10daDoor10_cFv */
void daDoor10_c::demoProc() {
/* Nonmatching */
s32 iVar1 = getDemoAction();
if (dComIfGp_evmng_getIsAddvance(mStaffId)) {
switch(iVar1) {
case 3:
openInit();
break;
case 4:
closeInit();
break;
case 7:
setGoal();
break;
case 5:
m2D0.smokeInit(this);
break;
case 6:
m2D0.smokeEnd();
break;
case 8:
mKeyLock.keyInit(this);
break;
case 2:
setStop();
if (mStopBars.m8 != 0) {
mStopBars.closeInit(this);
}
break;
case 1:
if (mHkyo.chkUse() && mHkyo.chkFirst()) {
mHkyo.onFirst();
} else {
mStopBars.openInit(this);
}
break;
}
}
switch(iVar1) {
case 3:
if (checkFlag(1)) {
if (openProc()) {
openEnd();
dComIfGp_evmng_cutEnd(mStaffId);
}
} else {
dComIfGp_evmng_cutEnd(mStaffId);
}
break;
case 4:
if (checkFlag(2)) {
if (closeProc()) {
closeEnd();
dComIfGp_evmng_cutEnd(mStaffId);
}
} else {
dComIfGp_evmng_cutEnd(mStaffId);
}
break;
case 5:
m2D0.smokeProc(this);
dComIfGp_evmng_cutEnd(mStaffId);
break;
case 8:
if (mKeyLock.keyProc()) {
dComIfGp_evmng_cutEnd(mStaffId);
}
mKeyLock.calcMtx(this);
break;
case 2:
if (mStopBars.closeProc(this)) {
dComIfGp_evmng_cutEnd(mStaffId);
}
mStopBars.calcMtx(this);
break;
case 1:
if (mHkyo.chkUse() && mHkyo.chkFirst()) {
dComIfGp_evmng_cutEnd(mStaffId);
} else if (mStopBars.openProc(this)) {
dComIfGp_evmng_cutEnd(mStaffId);
}
mStopBars.calcMtx(this);
break;
case 19:
if (dComIfGp_event_chkEventFlag(dEvtFlag_NOPARTNER_e)) {
setAction(1);
dComIfGp_event_reset();
shape_angle.y = current.angle.y;
dComIfGp_event_offEventFlag(dEvtFlag_NOPARTNER_e);
if (dComIfGp_evmng_checkStartDemo()) {
dComIfGp_evmng_cancelStartDemo();
}
}
dComIfGp_evmng_cutEnd(mStaffId);
break;
default:
dComIfGp_evmng_cutEnd(mStaffId);
break;
}
}
/* 000016B0-00001850 .text daDoor10_actionWait__FP10daDoor10_c */
void daDoor10_actionWait(daDoor10_c*) {
/* Nonmatching */
BOOL daDoor10_actionWait(daDoor10_c* i_this) {
if (i_this->eventInfo.checkCommandDoor()) {
i_this->initOpenDemo(1);
i_this->setAction(3);
i_this->demoProc();
} else {
if (i_this->mStopBars.m8 != 0) {
if (i_this->eventInfo.checkCommandDemoAccrpt()) {
i_this->mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR");
i_this->shape_angle.y = i_this->current.angle.y;
if (i_this->mFrontCheck == 1) {
i_this->shape_angle.y += 0x7FFF;
}
i_this->setAction(3);
i_this->demoProc();
return TRUE;
}
if (i_this->chkStopOpen()) {
i_this->setStopDemo();
fopAcM_orderOtherEventId(i_this, i_this->mEventIdx[i_this->m2C6], i_this->mToolId[i_this->m2C6]);
return TRUE;
}
}
if (i_this->mStopBars.m8 == 0 && i_this->chkStopClose()) {
i_this->mStopBars.m8 = 1;
i_this->mStopBars.closeInit(i_this);
i_this->mStopBars.calcMtx(i_this);
i_this->setAction(2);
return TRUE;
}
if (i_this->mHkyo.chkUse() && i_this->mHkyo.chkFirst()) {
i_this->setAction(4);
return TRUE;
}
if (i_this->mStopBars.m8 == 0) {
i_this->setEventPrm();
}
}
return TRUE;
}
/* 00001850-000018A4 .text daDoor10_actionStopClose__FP10daDoor10_c */
void daDoor10_actionStopClose(daDoor10_c*) {
/* Nonmatching */
BOOL daDoor10_actionStopClose(daDoor10_c* i_this) {
if (i_this->mStopBars.closeProc(i_this)) {
i_this->setAction(1);
}
i_this->mStopBars.calcMtx(i_this);
return TRUE;
}
/* 000018A4-00001928 .text daDoor10_actionDemo__FP10daDoor10_c */
void daDoor10_actionDemo(daDoor10_c*) {
/* Nonmatching */
BOOL daDoor10_actionDemo(daDoor10_c* i_this) {
if (dComIfGp_evmng_endCheck(i_this->mEventIdx[i_this->m2C6])) {
i_this->setAction(1);
dComIfGp_event_reset();
i_this->shape_angle.y = i_this->current.angle.y;
} else {
i_this->demoProc();
}
return TRUE;
}
/* 00001928-00001A00 .text daDoor10_actionHkyo__FP10daDoor10_c */
void daDoor10_actionHkyo(daDoor10_c*) {
/* Nonmatching */
BOOL daDoor10_actionHkyo(daDoor10_c* i_this) {
if (!i_this->mHkyo.chkUse()) {
i_this->setAction(1);
return TRUE;
}
if (i_this->eventInfo.checkCommandDemoAccrpt()) {
i_this->mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR");
i_this->setAction(3);
i_this->demoProc();
} else if (i_this->mHkyo.chkStart()) {
i_this->m2C6 = 10;
fopAcM_orderOtherEventId(i_this, i_this->mEventIdx[i_this->m2C6], i_this->mToolId[i_this->m2C6]);
}
return TRUE;
}
/* 00001A00-00001A80 .text daDoor10_actionInit__FP10daDoor10_c */
void daDoor10_actionInit(daDoor10_c*) {
/* Nonmatching */
BOOL daDoor10_actionInit(daDoor10_c* i_this) {
i_this->setKey();
i_this->mKeyLock.calcMtx(i_this);
i_this->setStop();
i_this->mStopBars.calcMtx(i_this);
if (i_this->mHkyo.chkUse()) {
i_this->mHkyo.calcMtx(i_this, 0.0f);
}
daDoor10_actionWait(i_this);
i_this->setAction(1);
return 1;
}
/* 00001A80-00001BAC .text draw__10daDoor10_cFv */
BOOL daDoor10_c::draw() {
/* Nonmatching */
if (!drawCheck(getType() == 1)) {
return TRUE;
}
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpModel);
dComIfGd_setList();
if (mKeyLock.mbEnabled) {
mKeyLock.draw(this);
}
if (mStopBars.m8 != 0 && mStopBars.mpModel != NULL) {
g_env_light.setLightTevColorType(mStopBars.mpModel, &tevStr);
mDoExt_modelUpdateDL(mStopBars.mpModel);
}
if (mHkyo.chkUse()) {
mHkyo.draw(this);
}
return TRUE;
}
/* 00001BAC-00001BCC .text daDoor10_Draw__FP10daDoor10_c */
@@ -167,9 +792,50 @@ static BOOL daDoor10_Draw(daDoor10_c* i_this) {
return ((daDoor10_c*)i_this)->draw();
}
BOOL daDoor10_c::execute() {
typedef BOOL (*action)(daDoor10_c*);
static action l_action[] = {
daDoor10_actionInit,
daDoor10_actionWait,
daDoor10_actionStopClose,
daDoor10_actionDemo,
daDoor10_actionHkyo,
};
s32 iVar1 = checkExecute();
if (mHkyo.chkUse()) {
mHkyo.proc(this);
}
switch (iVar1) {
case 0:
setAction(0);
break;
case 2:
l_action[m354](this);
break;
case 1:
startDemoProc();
demoProc();
break;
default:
JUT_ASSERT(VERSION_SELECT(1028, 1032, 1032, 1032), NULL);
break;
}
mRoomNo2 = dComIfGp_roomControl_getStayNo();
return TRUE;
}
/* 00001BCC-00001CCC .text daDoor10_Execute__FP10daDoor10_c */
static BOOL daDoor10_Execute(daDoor10_c*) {
/* Nonmatching */
static BOOL daDoor10_Execute(daDoor10_c* i_this) {
return i_this->execute();
}
/* 00001CCC-00001CD4 .text daDoor10_IsDelete__FP10daDoor10_c */
@@ -178,13 +844,39 @@ static BOOL daDoor10_IsDelete(daDoor10_c*) {
}
/* 00001CD4-00001E18 .text daDoor10_Delete__FP10daDoor10_c */
static BOOL daDoor10_Delete(daDoor10_c*) {
/* Nonmatching */
static BOOL daDoor10_Delete(daDoor10_c* i_this) {
fpc_ProcID proc = fopAcM_GetID(i_this);
#if VERSION > VERSION_DEMO
if (i_this->heap != NULL)
#endif
{
dComIfG_Bgsp()->Release(i_this->mpBgW);
}
if (i_this->m364 != 0) {
dComIfG_resDelete(&i_this->mPhase, "DoorBs");
}
if (i_this->chkMakeKey()) {
i_this->mKeyLock.keyResDelete();
}
if (i_this->mHkyo.chkUse()) {
i_this->mHkyo.resDelete();
}
#if VERSION > VERSION_DEMO
i_this->m2D0.smokeEnd();
#endif
i_this->~daDoor10_c();
return TRUE;
}
/* 00001E18-00001EA8 .text daDoor10_Create__FP10fopAc_ac_c */
static cPhs_State daDoor10_Create(fopAc_ac_c*) {
/* Nonmatching */
static cPhs_State daDoor10_Create(fopAc_ac_c* a_this) {
fopAcM_SetupActor(a_this, daDoor10_c);
return ((daDoor10_c*)a_this)->create();
}
static actor_method_class l_daDoor10_Method = {
+3 -3
View File
@@ -142,7 +142,7 @@ s32 dDoor_info_c::drawCheck_local() {
}
/* 8006B824-8006B8AC .text drawCheck__12dDoor_info_cFi */
u8 dDoor_info_c::drawCheck(int mode) {
s32 dDoor_info_c::drawCheck(int mode) {
s32 rt = drawCheck_local();
if (rt != 0) {
if (mode) {
@@ -157,7 +157,7 @@ u8 dDoor_info_c::drawCheck(int mode) {
}
/* 8006B8AC-8006B954 .text checkExecute__12dDoor_info_cFv */
u8 dDoor_info_c::checkExecute() {
s32 dDoor_info_c::checkExecute() {
mFrontCheck = frontCheck();
if (fopAcM_CheckStatus(this, fopAcStts_UNK1000_e))
return 1;
@@ -234,7 +234,7 @@ void dDoor_info_c::initProc(int spl) {
/* 8006BBB0-8006BC50 .text initOpenDemo__12dDoor_info_cFi */
void dDoor_info_c::initOpenDemo(int evt) {
if (field_0x2c6 != 9)
if (m2C6 != 9)
dComIfGp_map_setAGBMapSendStopFlg();
shape_angle.y = current.angle.y;