mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-07 13:23:27 -04:00
d_door work
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user