mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-02 10:10:06 -04:00
d_door work
This commit is contained in:
@@ -367,7 +367,7 @@ public:
|
||||
void setItemNameMessageID(u32 id) { mItemNameMessageID = id; }
|
||||
|
||||
s16 getItemKeyNumCount() { return mItemKeyNumCount; }
|
||||
void setItemKeyNumCount(s16 num) { mItemKeyNumCount += num; }
|
||||
void setItemKeyNumCount(s16 num) { mItemKeyNumCount = num; }
|
||||
|
||||
void setItemBeastNumCount(int i_idx, s16 num) { mItemBeastNumCounts[i_idx] += num; }
|
||||
s16 getItemBeastNumCount(int i_idx) { return mItemBeastNumCounts[i_idx]; }
|
||||
|
||||
+14
-13
@@ -5,6 +5,8 @@
|
||||
#include "d/d_particle.h"
|
||||
#include "SSystem/SComponent/c_phase.h"
|
||||
|
||||
class msg_class;
|
||||
|
||||
class dDoor_info_c : public fopAc_ac_c {
|
||||
public:
|
||||
void valShipId() {}
|
||||
@@ -29,7 +31,7 @@ public:
|
||||
void makeEventId(int);
|
||||
void initProc(int);
|
||||
void initOpenDemo(int);
|
||||
void checkArea(f32, f32, f32);
|
||||
BOOL checkArea(f32, f32, f32);
|
||||
void openInitCom(int);
|
||||
void openProcCom();
|
||||
void closeEndCom();
|
||||
@@ -98,14 +100,14 @@ class dDoor_stop_c {
|
||||
public:
|
||||
void calcMtx(dDoor_info_c*);
|
||||
void closeInit(dDoor_info_c*);
|
||||
void closeProc(dDoor_info_c*);
|
||||
s32 closeProc(dDoor_info_c*);
|
||||
void openInit(dDoor_info_c*);
|
||||
void openProc(dDoor_info_c*);
|
||||
void create();
|
||||
s32 openProc(dDoor_info_c*);
|
||||
BOOL create();
|
||||
|
||||
public:
|
||||
/* 0x0 */ J3DModel* mpModel;
|
||||
/* 0x4 */ f32 m4;
|
||||
/* 0x4 */ f32 mOffsY;
|
||||
/* 0x8 */ u8 m8;
|
||||
/* 0x9 */ u8 mFrontCheck;
|
||||
/* 0xA */ u8 mA;
|
||||
@@ -115,14 +117,13 @@ public:
|
||||
class dDoor_msg_c {
|
||||
public:
|
||||
void init(s16);
|
||||
void proc(cXyz*);
|
||||
BOOL proc(cXyz*);
|
||||
|
||||
public:
|
||||
/* 0x0 */ u32 m0;
|
||||
/* 0x4 */ int mMsg;
|
||||
/* 0x8 */ s8 m8;
|
||||
/* 0x9 */ u8 m9[0xA - 0x9];
|
||||
/* 0xA */ s16 mA;
|
||||
/* 0x0 */ uint mMsgPId;
|
||||
/* 0x4 */ msg_class* m_msg;
|
||||
/* 0x8 */ u8 mState;
|
||||
/* 0xA */ s16 mMsgId;
|
||||
};
|
||||
|
||||
class dDoor_hkyo_c {
|
||||
@@ -133,13 +134,13 @@ public:
|
||||
|
||||
s32 resLoad();
|
||||
void resDelete();
|
||||
void create();
|
||||
BOOL create();
|
||||
void setAnm(u8);
|
||||
void init();
|
||||
void calcMtx(dDoor_info_c*, f32);
|
||||
void draw(dDoor_info_c*);
|
||||
void proc(dDoor_info_c*);
|
||||
void chkFirst();
|
||||
BOOL chkFirst();
|
||||
void onFirst();
|
||||
BOOL chkStart();
|
||||
|
||||
|
||||
+251
-32
@@ -5,7 +5,9 @@
|
||||
|
||||
#include "d/d_door.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_vibration.h"
|
||||
#include "d/res/res_key.h"
|
||||
#include "d/res/res_hkyo.h"
|
||||
#include "d/actor/d_a_player.h"
|
||||
|
||||
/* 8006B39C-8006B3A8 .text getSwbit__12dDoor_info_cFv */
|
||||
@@ -232,8 +234,29 @@ void dDoor_info_c::initOpenDemo(int evt) {
|
||||
}
|
||||
|
||||
/* 8006BC50-8006BDBC .text checkArea__12dDoor_info_cFfff */
|
||||
void dDoor_info_c::checkArea(f32, f32, f32) {
|
||||
/* Nonmatching */
|
||||
BOOL dDoor_info_c::checkArea(f32 f1, f32 f2, f32 distXZSqMax) {
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
cXyz delta = player->current.pos - current.pos;
|
||||
f32 distXZSq = delta.abs2XZ();
|
||||
if (distXZSq > distXZSqMax)
|
||||
return FALSE;
|
||||
|
||||
delta.normalize();
|
||||
f32 dot = delta.x * mAngleVec.x + delta.z * mAngleVec.z;
|
||||
f32 d3 = distXZSq * dot * dot;
|
||||
if (d3 > f2)
|
||||
return FALSE;
|
||||
|
||||
if (distXZSq - d3 > f1)
|
||||
return FALSE;
|
||||
|
||||
s16 checkAngle = current.angle.y;
|
||||
if (mFrontCheck == 1)
|
||||
checkAngle += 0x7FFF;
|
||||
if (abs((s16)(checkAngle - player->current.angle.y)) < 0x5000)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 8006BDBC-8006BE94 .text openInitCom__12dDoor_info_cFi */
|
||||
@@ -527,45 +550,143 @@ void dDoor_key2_c::draw(dDoor_info_c* door) {
|
||||
|
||||
/* 8006CA78-8006CB28 .text calcMtx__12dDoor_stop_cFP12dDoor_info_c */
|
||||
void dDoor_stop_c::calcMtx(dDoor_info_c* door) {
|
||||
/* Nonmatching */
|
||||
if (m8 == 0 || mpModel == NULL)
|
||||
return;
|
||||
mDoMtx_stack_c::transS(door->current.pos.x, door->current.pos.y + mOffsY, door->current.pos.z);
|
||||
mDoMtx_stack_c::YrotM(door->current.angle.y);
|
||||
if (mFrontCheck == 1)
|
||||
mDoMtx_stack_c::YrotM(0x7FFF);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* 8006CB28-8006CBFC .text closeInit__12dDoor_stop_cFP12dDoor_info_c */
|
||||
void dDoor_stop_c::closeInit(dDoor_info_c*) {
|
||||
/* Nonmatching */
|
||||
void dDoor_stop_c::closeInit(dDoor_info_c* door) {
|
||||
mOffsY = 300.0f;
|
||||
fopAcM_SetSpeedF(door, 0.0f);
|
||||
if (door->getArg1() == 17) {
|
||||
fopAcM_seStart(door, JA_SE_OBJ_CAGE_CLOSE, 0);
|
||||
} else {
|
||||
fopAcM_seStart(door, JA_SE_OBJ_STN_DOOR_STL_BAR, 0);
|
||||
}
|
||||
mB = 1;
|
||||
}
|
||||
|
||||
/* 8006CBFC-8006CC80 .text closeProc__12dDoor_stop_cFP12dDoor_info_c */
|
||||
void dDoor_stop_c::closeProc(dDoor_info_c*) {
|
||||
/* Nonmatching */
|
||||
s32 dDoor_stop_c::closeProc(dDoor_info_c* door) {
|
||||
if (!mB)
|
||||
return 1;
|
||||
|
||||
cLib_chaseF(&door->speedF, 60.0f, 6.0f);
|
||||
if (cLib_chaseF(&mOffsY, 0.0f, door->speedF)) {
|
||||
mB = FALSE;
|
||||
return 2;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006CC80-8006CD50 .text openInit__12dDoor_stop_cFP12dDoor_info_c */
|
||||
void dDoor_stop_c::openInit(dDoor_info_c*) {
|
||||
/* Nonmatching */
|
||||
void dDoor_stop_c::openInit(dDoor_info_c* door) {
|
||||
mOffsY = 0.0f;
|
||||
fopAcM_SetSpeedF(door, 0.0f);
|
||||
if (door->getArg1() == 17) {
|
||||
fopAcM_seStart(door, JA_SE_OBJ_CAGE_OPEN, 0);
|
||||
} else {
|
||||
fopAcM_seStart(door, JA_SE_OBJ_STN_DOOR_STL_BAR, 0);
|
||||
}
|
||||
mB = 1;
|
||||
}
|
||||
|
||||
/* 8006CD50-8006CDD8 .text openProc__12dDoor_stop_cFP12dDoor_info_c */
|
||||
void dDoor_stop_c::openProc(dDoor_info_c*) {
|
||||
/* Nonmatching */
|
||||
s32 dDoor_stop_c::openProc(dDoor_info_c* door) {
|
||||
if (!mB)
|
||||
return 1;
|
||||
|
||||
cLib_chaseF(&door->speedF, 30.0f, 4.0f);
|
||||
if (cLib_chaseF(&mOffsY, 300.0f, door->speedF)) {
|
||||
mB = FALSE;
|
||||
m8 = FALSE;
|
||||
return 2;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006CDD8-8006CE8C .text create__12dDoor_stop_cFv */
|
||||
void dDoor_stop_c::create() {
|
||||
/* Nonmatching */
|
||||
BOOL dDoor_stop_c::create() {
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getStageRes("Stage", "stop10.bmd");
|
||||
if (modelData == NULL)
|
||||
modelData = (J3DModelData*)dComIfG_getStageRes("Stage", "stop10.bdl");
|
||||
|
||||
if (modelData != NULL) {
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
||||
if (mpModel == NULL)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 8006CE8C-8006CEA8 .text init__11dDoor_msg_cFs */
|
||||
void dDoor_msg_c::init(s16 param_1) {
|
||||
mA = param_1;
|
||||
m0 = -1;
|
||||
mMsg = 0;
|
||||
m8 = 0;
|
||||
void dDoor_msg_c::init(s16 msg_id) {
|
||||
mMsgId = msg_id;
|
||||
mMsgPId = fpcM_ERROR_PROCESS_ID_e;
|
||||
m_msg = NULL;
|
||||
mState = 0;
|
||||
}
|
||||
|
||||
/* 8006CEA8-8006D0DC .text proc__11dDoor_msg_cFP4cXyz */
|
||||
void dDoor_msg_c::proc(cXyz*) {
|
||||
/* Nonmatching */
|
||||
BOOL dDoor_msg_c::proc(cXyz* pos) {
|
||||
switch (mState) {
|
||||
case 0:
|
||||
mMsgPId = fopMsgM_messageSet(mMsgId, pos);
|
||||
if (mMsgPId != fpcM_ERROR_PROCESS_ID_e)
|
||||
mState++;
|
||||
break;
|
||||
case 1:
|
||||
m_msg = fopMsgM_SearchByID(mMsgPId);
|
||||
if (m_msg != NULL)
|
||||
mState++;
|
||||
break;
|
||||
case 2:
|
||||
JUT_ASSERT(0x3ba, m_msg);
|
||||
if (m_msg->mStatus == fopMsgStts_MSG_TYPING_e) {
|
||||
switch (mMsgId) {
|
||||
case 0x1BBD:
|
||||
case 0x06A8:
|
||||
dComIfGp_getVibration().StartShock(7, -0x21, cXyz(0.0f, 1.0f, 0.0f));
|
||||
break;
|
||||
}
|
||||
mState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
JUT_ASSERT(0x3ca, m_msg);
|
||||
if (m_msg->mStatus == fopMsgStts_MSG_DISPLAYED_e) {
|
||||
switch (mMsgId) {
|
||||
case 0x1BBD:
|
||||
case 0x1BC0:
|
||||
case 0x1BC1:
|
||||
case 0x1BC2:
|
||||
mMsgId++;
|
||||
m_msg->mStatus = fopMsgStts_MSG_CONTINUES_e;
|
||||
fopMsgM_messageSet(mMsgId);
|
||||
break;
|
||||
default:
|
||||
mState++;
|
||||
m_msg->mStatus = fopMsgStts_MSG_ENDS_e;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_msg != NULL && m_msg->mStatus == fopMsgStts_BOX_CLOSED_e) {
|
||||
m_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006D0DC-8006D11C .text resLoad__12dDoor_hkyo_cFv */
|
||||
@@ -585,13 +706,47 @@ void dDoor_hkyo_c::resDelete() {
|
||||
}
|
||||
|
||||
/* 8006D154-8006D2D4 .text create__12dDoor_hkyo_cFv */
|
||||
void dDoor_hkyo_c::create() {
|
||||
/* Nonmatching */
|
||||
BOOL dDoor_hkyo_c::create() {
|
||||
if (m11 == 0)
|
||||
return TRUE;
|
||||
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Hkyo", HKYO_BDL_HKYO1);
|
||||
JUT_ASSERT(0x41c, modelData != NULL);
|
||||
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000202);
|
||||
if (mpModel == NULL)
|
||||
return FALSE;
|
||||
|
||||
mpBrkAnm = new mDoExt_brkAnm();
|
||||
if (mpBrkAnm == NULL)
|
||||
return FALSE;
|
||||
|
||||
J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Hkyo", HKYO_BRK_HKYO1B);
|
||||
if (!mpBrkAnm->init(modelData, brk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 8006D2D4-8006D3A8 .text setAnm__12dDoor_hkyo_cFUc */
|
||||
void dDoor_hkyo_c::setAnm(u8) {
|
||||
/* Nonmatching */
|
||||
void dDoor_hkyo_c::setAnm(u8 idx) {
|
||||
if (mAnmIdx == idx)
|
||||
return;
|
||||
|
||||
mAnmIdx = idx;
|
||||
if (idx == 0)
|
||||
return;
|
||||
|
||||
u32 fileIndex;
|
||||
switch (idx) {
|
||||
case 1: fileIndex = HKYO_BRK_HKYO1A; break;
|
||||
case 2: fileIndex = HKYO_BRK_HKYO1B; break;
|
||||
default: fileIndex = HKYO_BRK_HKYO1C; break;
|
||||
}
|
||||
|
||||
J3DModelData* modelData = mpModel->getModelData();
|
||||
J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Hkyo", fileIndex);
|
||||
mpBrkAnm->init(modelData, brk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, true, 0);
|
||||
}
|
||||
|
||||
/* 8006D3A8-8006D3B4 .text init__12dDoor_hkyo_cFv */
|
||||
@@ -600,28 +755,92 @@ void dDoor_hkyo_c::init() {
|
||||
}
|
||||
|
||||
/* 8006D3B4-8006D464 .text calcMtx__12dDoor_hkyo_cFP12dDoor_info_cf */
|
||||
void dDoor_hkyo_c::calcMtx(dDoor_info_c*, f32) {
|
||||
/* Nonmatching */
|
||||
void dDoor_hkyo_c::calcMtx(dDoor_info_c* door, f32 offsY) {
|
||||
if (m11 == 0 || mpModel == NULL)
|
||||
return;
|
||||
mDoMtx_stack_c::transS(door->current.pos);
|
||||
mDoMtx_stack_c::YrotM(door->current.angle.y);
|
||||
mDoMtx_stack_c::transM(0.0f, offsY, 0.0f);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* 8006D464-8006D500 .text draw__12dDoor_hkyo_cFP12dDoor_info_c */
|
||||
void dDoor_hkyo_c::draw(dDoor_info_c*) {
|
||||
/* Nonmatching */
|
||||
void dDoor_hkyo_c::draw(dDoor_info_c* door) {
|
||||
if (m11 == 0 || mAnmIdx == 0 || mpModel == NULL)
|
||||
return;
|
||||
if (!chkFirst()) {
|
||||
J3DModelData* modelData = mpModel->getModelData();
|
||||
g_env_light.setLightTevColorType(mpModel, &door->tevStr);
|
||||
mpBrkAnm->entry(modelData);
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006D500-8006D71C .text proc__12dDoor_hkyo_cFP12dDoor_info_c */
|
||||
void dDoor_hkyo_c::proc(dDoor_info_c*) {
|
||||
/* Nonmatching */
|
||||
void dDoor_hkyo_c::proc(dDoor_info_c* door) {
|
||||
if (m11 == 0 || mpModel == NULL)
|
||||
return;
|
||||
|
||||
switch (m11) {
|
||||
case 1:
|
||||
if (dComIfGs_isTmpBit(0x108))
|
||||
setAnm(1);
|
||||
else if (dComIfGs_isTmpBit(0x110))
|
||||
setAnm(2);
|
||||
else
|
||||
setAnm(0);
|
||||
break;
|
||||
case 4:
|
||||
if (dComIfGs_isEventBit(0x1710))
|
||||
setAnm(0);
|
||||
else
|
||||
setAnm(3);
|
||||
break;
|
||||
case 3:
|
||||
if (!dComIfGs_isTact(2) || dComIfGs_isEventBit(0x1704))
|
||||
setAnm(0);
|
||||
else
|
||||
setAnm(3);
|
||||
break;
|
||||
case 2:
|
||||
if (!dComIfGs_isEventBit(0x1704) || dComIfGs_isEventBit(0x1b01))
|
||||
setAnm(0);
|
||||
else
|
||||
setAnm(3);
|
||||
break;
|
||||
default:
|
||||
setAnm(0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (mAnmIdx != 0) {
|
||||
mpBrkAnm->play();
|
||||
fopAcM_seStart(door, JA_SE_OBJ_RES_DOOR_BLINK, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006D71C-8006D784 .text chkFirst__12dDoor_hkyo_cFv */
|
||||
void dDoor_hkyo_c::chkFirst() {
|
||||
/* Nonmatching */
|
||||
BOOL dDoor_hkyo_c::chkFirst() {
|
||||
if (m11 != 1)
|
||||
return FALSE;
|
||||
|
||||
switch (mAnmIdx) {
|
||||
case 1:
|
||||
if (!dComIfGs_isEventBit(0x2602))
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 8006D784-8006D7E8 .text onFirst__12dDoor_hkyo_cFv */
|
||||
void dDoor_hkyo_c::onFirst() {
|
||||
/* Nonmatching */
|
||||
switch (mAnmIdx) {
|
||||
case 1: dComIfGs_onEventBit(0x2602); break;
|
||||
case 2: dComIfGs_onEventBit(0x2601); break;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8006D7E8-8006D800 .text chkStart__12dDoor_hkyo_cFv */
|
||||
|
||||
Reference in New Issue
Block a user