d_door work

This commit is contained in:
Jasper St. Pierre
2024-02-07 22:16:39 -08:00
parent 6c3bb08b77
commit 89ca32a65c
5 changed files with 230 additions and 52 deletions
+4
View File
@@ -2502,6 +2502,10 @@ inline s16 dComIfGp_evmng_getEventIdx(const char* pName, u8 evNo) {
return g_dComIfG_gameInfo.play.getEvtManager().getEventIdx(pName, evNo);
}
inline int dComIfGp_evmng_getToolId(u8 idx, int sub) {
return dComIfGp_getPEvtManager()->getToolId(idx, sub);
}
inline int dComIfGp_evmng_getMyStaffId(const char* pName, fopAc_ac_c* pActor = NULL, int staffType = 0) {
return dComIfGp_getPEvtManager()->getMyStaffId(pName, pActor, staffType);
}
+15 -24
View File
@@ -19,12 +19,12 @@ public:
u8 getShipId();
u8 getArg1();
BOOL adjoinPlayer();
void getViewRoomNo();
void frontCheckOld();
void frontCheck();
void drawCheck_local();
void drawCheck(int);
void checkExecute();
u8 getViewRoomNo();
s32 frontCheckOld();
s32 frontCheck();
s32 drawCheck_local();
u8 drawCheck(int);
u8 checkExecute();
void startDemoProc();
void makeEventId(int);
void initProc(int);
@@ -33,34 +33,25 @@ public:
void openInitCom(int);
void openProcCom();
void closeEndCom();
void getDemoAction();
s32 getDemoAction();
void setGoal();
void setPlayerAngle(int);
void setPosAndAngle(cXyz*, s16);
public:
/* 0x290 */ u8 mRoomNo2;
/* 0x291 */ u8 mFRoomNo;
/* 0x292 */ u8 mBRoomNo;
/* 0x290 */ s8 mRoomNo2;
/* 0x291 */ u8 mFromRoomNo;
/* 0x292 */ u8 mToRoomNo;
/* 0x293 */ u8 m293[0x294 - 0x293];
/* 0x294 */ cXyz mAngleVec;
/* 0x2A0 */ u8 mFrontCheck;
/* 0x2A1 */ u8 m2A1;
/* 0x2A2 */ u8 m2A2[0x2A4 - 0x2A2];
/* 0x2A4 */ void* m2A4;
/* 0x2A8 */ s16 m2A8;
/* 0x2AA */ u8 m2AA[0x2AC - 0x2AA];
/* 0x2AC */ void* m2AC;
/* 0x2B0 */ void* m2B0;
/* 0x2B4 */ void* m2B4;
/* 0x2B8 */ void* m2B8;
/* 0x2BC */ u8 m2BC;
/* 0x2BD */ u8 m2BD;
/* 0x2BE */ u8 m2BE[0x2C0 - 0x2BE];
/* 0x2C0 */ void* m2C0;
/* 0x2C4 */ void* m2C4;
/* 0x2A2 */ u16 mEventIdx[12];
/* 0x2BA */ u8 mToolId[12];
/* 0x2C6 */ u8 field_0x2c6;
/* 0x2C7 */ u8 field_0x2c7;
/* 0x2C8 */ int mStaffId;
/* 0x2CC */ u8 mRoomNo;
/* 0x2CC */ s8 mRoomNo;
/* 0x2CD */ u8 m2CD[0x2D0 - 0x2CD];
};
+4 -3
View File
@@ -169,9 +169,9 @@ public:
static u8 getIconDispMode() { return mIconDispMode; }
static void setIconDispMode(u8 mode) { mIconDispMode = mode; }
static void setAGBMapSendStopFlg() {}
static void clrAGBMapSendStopFlg() {}
static void isAGBMapSendStopFlg() {}
static void setAGBMapSendStopFlg() { mAGBMapSendStopFlg = true; }
static void clrAGBMapSendStopFlg() { mAGBMapSendStopFlg = false; }
static bool isAGBMapSendStopFlg() { return mAGBMapSendStopFlg; }
static void getMapDspSizeHeight() {}
static void getMapDspSizeWidth() {}
static void getNowRoom() {}
@@ -257,6 +257,7 @@ public:
static u8 mIconSelfAlpha;
static f32 mIconSelfScale;
static u8 mIconDispMode;
static bool mAGBMapSendStopFlg;
};
inline void dMap_drawPoint(u8 param_1, f32 param_2, f32 param_3, f32 param_4, s8 param_5, s16 param_6, u8 param_7, u8 param_8, u8 param_9) {
+1 -3
View File
@@ -1078,11 +1078,9 @@ inline u32 dStage_FileList_dt_GetParticleNo(dStage_FileList_dt_c* i_fili) {
}
bool dStage_chkPlayerId(int playerId, int room_no);
int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no);
void dStage_restartRoom(u32 roomParam, u32 mode);
bool dStage_setShipPos(int param_0, int i_roomNo);
BOOL dStage_checkRestart();
void dStage_Create();
void dStage_Delete();
+206 -22
View File
@@ -70,53 +70,164 @@ BOOL dDoor_info_c::adjoinPlayer() {
}
/* 8006B4C4-8006B554 .text getViewRoomNo__12dDoor_info_cFv */
void dDoor_info_c::getViewRoomNo() {
/* Nonmatching */
u8 dDoor_info_c::getViewRoomNo() {
cXyz delta = dComIfGd_getView()->mLookat.mEye - current.pos;
if (delta.x * mAngleVec.x + delta.z * mAngleVec.z < 0.0f)
return getBRoomNo();
else
return getFRoomNo();
}
/* 8006B554-8006B5E4 .text frontCheckOld__12dDoor_info_cFv */
void dDoor_info_c::frontCheckOld() {
s32 dDoor_info_c::frontCheckOld() {
/* Nonmatching */
fopAc_ac_c* player = dComIfGp_getPlayer(0);
cSGlobe globe(player->current.pos - current.pos);
cSAngle angle1;
angle1 = (globe.U() - player->current.angle.y);
s16 angle = angle1.Abs();
if (angle < 0x4000 && angle >= 0)
return 0;
else
return 1;
}
/* 8006B65C-8006B6F4 .text frontCheck__12dDoor_info_cFv */
void dDoor_info_c::frontCheck() {
/* Nonmatching */
s32 dDoor_info_c::frontCheck() {
s32 stayNo = dComIfGp_roomControl_getStayNo();
if (getFRoomNo() == getBRoomNo())
return frontCheckOld();
return stayNo == getFRoomNo() ? 0 :
stayNo == getBRoomNo() ? 1 : 2;
}
/* 8006B6F4-8006B824 .text drawCheck_local__12dDoor_info_cFv */
void dDoor_info_c::drawCheck_local() {
/* Nonmatching */
s32 dDoor_info_c::drawCheck_local() {
if (!adjoinPlayer() && !mEvtInfo.checkCommandDemoAccrpt() && !mEvtInfo.checkCommandDoor())
return 0;
if (getFRoomNo() == 0x3F || getBRoomNo() == 0x3F)
mTevStr.mRoomNo = dComIfGp_roomControl_getStayNo();
else
mTevStr.mRoomNo = getViewRoomNo();
current.roomNo = mTevStr.mRoomNo;
u8 front = frontCheck();
if (front == 2)
mRoomNo = -1;
else
mRoomNo = dComIfGp_roomControl_getStayNo();
if (!dComIfGp_roomControl_checkRoomDisp(mTevStr.mRoomNo))
return 1;
if (getViewRoomNo() == 0x3F && (getFRoomNo() != 0x3F || getBRoomNo() != 0x3F))
return 1;
else
return 2;
}
/* 8006B824-8006B8AC .text drawCheck__12dDoor_info_cFi */
void dDoor_info_c::drawCheck(int) {
/* Nonmatching */
u8 dDoor_info_c::drawCheck(int mode) {
s32 rt = drawCheck_local();
if (rt != 0) {
if (mode) {
fopAcM_SetStatusMap(this, 0x0A);
} else {
fopAcM_SetStatusMap(this, 0x09);
}
} else {
fopAcM_OffStatus(this, fopAcStts_SHOWMAP_e);
}
return rt == 2;
}
/* 8006B8AC-8006B954 .text checkExecute__12dDoor_info_cFv */
void dDoor_info_c::checkExecute() {
/* Nonmatching */
u8 dDoor_info_c::checkExecute() {
mFrontCheck = frontCheck();
if (fopAcM_checkStatus(this, fopAcStts_UNK1000_e))
return 1;
if (mEvtInfo.checkCommandDemoAccrpt() || mEvtInfo.checkCommandDoor())
return 2;
if (mRoomNo2 != dComIfGp_roomControl_getStayNo())
return 0;
if (mFrontCheck != 2 && adjoinPlayer())
return 2;
return 0;
}
/* 8006B954-8006BA30 .text startDemoProc__12dDoor_info_cFv */
void dDoor_info_c::startDemoProc() {
/* Nonmatching */
fopAc_ac_c* player = dComIfGp_getPlayer(0);
mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR");
shape_angle.y = current.angle.y;
JUT_ASSERT(0x112, player);
s16 delta = player->home.angle.y - home.angle.y;
if (delta < 0)
delta = -delta;
if (delta < 0x1000 && delta > -1000)
shape_angle.y += 0x7FFF;
}
/* 8006BA30-8006BB5C .text makeEventId__12dDoor_info_cFi */
void dDoor_info_c::makeEventId(int) {
void dDoor_info_c::makeEventId(int spl) {
/* Nonmatching */
static const char* table[] = {
"DEFAULT_STOP_OPEN",
"DEFAULT_STOP_OPEN",
"DEFAULT_SHUTTER_DOOR_F",
"DEFAULT_SHUTTER_DOOR_F",
"DEFAULT_SHUTTER_DOOR_F_STOP",
"DEFAULT_SHUTTER_DOOR_F_STOP",
"DEFAULT_BS_SHUTTER_F",
"DEFAULT_KNOB_DOOR_F_OPEN",
"DEFAULT_KNOB_DOOR_B_OPEN",
"DEFAULT_KNOB_TALK",
"HKYO_DOOR",
"SHUTTER_DROP_CARRY",
};
for (s32 i = 0; i < 12; i++) {
mToolId[i] = dComIfGp_evmng_getToolId(getEventNo(), i);
mEventIdx[i] = dComIfGp_evmng_getEventIdx(table[i], mToolId[i]);
}
switch (spl) {
case 1:
mEventIdx[2] = dComIfGp_evmng_getEventIdx("DEFAULT_SHUTTER_DOOR_10", mToolId[2]);
mEventIdx[3] = dComIfGp_evmng_getEventIdx("DEFAULT_SHUTTER_DOOR_10", mToolId[3]);
break;
case 2:
mEventIdx[2] = dComIfGp_evmng_getEventIdx("DEFAULT_SHUTTER_DOOR_12", mToolId[2]);
mEventIdx[3] = dComIfGp_evmng_getEventIdx("DEFAULT_SHUTTER_DOOR_12", mToolId[3]);
break;
}
}
/* 8006BB5C-8006BBB0 .text initProc__12dDoor_info_cFi */
void dDoor_info_c::initProc(int) {
/* Nonmatching */
void dDoor_info_c::initProc(int spl) {
mAngleVec.set(cM_ssin(home.angle.y), 0.0f, cM_scos(home.angle.y));
makeEventId(spl);
}
/* 8006BBB0-8006BC50 .text initOpenDemo__12dDoor_info_cFi */
void dDoor_info_c::initOpenDemo(int) {
/* Nonmatching */
void dDoor_info_c::initOpenDemo(int evt) {
if (field_0x2c6 != 9)
dComIfGp_map_setAGBMapSendStopFlg();
shape_angle.y = current.angle.y;
if (mFrontCheck == 1)
shape_angle.y += 0x7FFF;
mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR");
if (evt)
dComIfGp_event_onEventFlag(2);
}
/* 8006BC50-8006BDBC .text checkArea__12dDoor_info_cFfff */
@@ -125,28 +236,101 @@ void dDoor_info_c::checkArea(f32, f32, f32) {
}
/* 8006BDBC-8006BE94 .text openInitCom__12dDoor_info_cFi */
void dDoor_info_c::openInitCom(int) {
void dDoor_info_c::openInitCom(int ship) {
/* Nonmatching */
if (mFrontCheck == 0) {
mFromRoomNo = getFRoomNo();
mToRoomNo = getBRoomNo();
} else {
mFromRoomNo = getBRoomNo();
mToRoomNo = getFRoomNo();
}
if (mFromRoomNo != mToRoomNo && mFromRoomNo != 0x3F && mToRoomNo != 0x3F)
dComIfGp_roomControl_offStatusFlag(mToRoomNo, 0x08);
if (ship && getShipId() != 0x3F)
dStage_setShipPos(getShipId(), mToRoomNo);
}
/* 8006BE94-8006BF74 .text openProcCom__12dDoor_info_cFv */
void dDoor_info_c::openProcCom() {
/* Nonmatching */
daPy_py_c* player = daPy_getPlayerActorClass();
s16 angle = shape_angle.y + 0x7FFF;
cXyz target;
cXyz playerPos = player->current.pos;
target = current.pos;
target.x += cM_ssin(angle) * -100.0f;
target.z += cM_scos(angle) * -100.0f;
playerPos.x = playerPos.x * 0.9f + target.x * 0.1f;
playerPos.z = playerPos.z * 0.9f + target.z * 0.1f;
player->setPlayerPosAndAngle(&playerPos, player->current.angle.y);
}
/* 8006BF74-8006C0A4 .text closeEndCom__12dDoor_info_cFv */
void dDoor_info_c::closeEndCom() {
/* Nonmatching */
if (mFromRoomNo != mToRoomNo && mFromRoomNo != 0x3F && mToRoomNo != 0x3F)
dComIfGp_roomControl_onStatusFlag(mFromRoomNo, 0x08);
daPy_py_c* player = daPy_getPlayerActorClass();
cXyz delta = player->current.pos - current.pos;
f32 rad;
f32 dot = delta.x * mAngleVec.x + delta.z * mAngleVec.z;
if (dot < 0.0f)
rad = 180.0f;
else
rad = -180.0f;
cXyz pos(player->current.pos.x - rad * mAngleVec.x, player->current.pos.y, player->current.pos.z - rad * mAngleVec.z);
g_dComIfG_gameInfo.save.getRestart().setRoom(pos,
dot > 0.0f ? player->current.angle.y : (s16)(player->current.angle.y + 0x8000),
fopAcM_GetRoomNo(player));
}
/* 8006C0A4-8006C0EC .text getDemoAction__12dDoor_info_cFv */
void dDoor_info_c::getDemoAction() {
/* Nonmatching */
s32 dDoor_info_c::getDemoAction() {
static char* action_table[] = {
"WAIT",
"STOP_OPEN",
"STOP_CLOSE",
"OPEN",
"CLOSE",
"SMOKE",
"SMOKE_END",
"SETGOAL",
"UNLOCK",
"SETSTART",
"SETANGLE",
"ADJUSTMENT",
"OPEN_PUSH",
"OPEN_PULL",
"OPEN_PUSH2",
"OPEN_PULL2",
"TALK",
"SETSTART_PUSH",
"SETSTART_PULL",
"END_CHECK",
"DROP_BF",
"DROP_AF",
};
return dComIfGp_evmng_getMyActIdx(mStaffId, action_table, ARRAY_SIZE(action_table), 0, 0);
}
/* 8006C0EC-8006C1D8 .text setGoal__12dDoor_info_cFv */
void dDoor_info_c::setGoal() {
/* Nonmatching */
daPy_py_c* player = daPy_getPlayerActorClass();
cXyz playerPos = player->current.pos;
cXyz target = current.pos;
s16 angle = shape_angle.y + 0x7FFF;
playerPos.x += cM_ssin(angle) * 350.0f;
playerPos.z += cM_scos(angle) * 350.0f;
target.x += cM_ssin(angle) * 250.0f;
target.z += cM_scos(angle) * 250.0f;
playerPos.x = playerPos.x * 0.8f + target.x * 0.2f;
playerPos.z = playerPos.z * 0.8f + target.z * 0.2f;
dComIfGp_evmng_setGoal(&playerPos);
}
/* 8006C1D8-8006C200 .text setPlayerAngle__12dDoor_info_cFi */