mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-26 17:52:03 -04:00
d_a_player_npc OK, d_a_npc_os 100% except weakfunc order
This commit is contained in:
+1
-1
@@ -440,7 +440,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/actor/d_a_obj_search.cpp"),
|
||||
Object(Matching, "d/actor/d_a_player.cpp"),
|
||||
Object(NonMatching, "d/actor/d_a_player_main.cpp"),
|
||||
Object(NonMatching, "d/actor/d_a_player_npc.cpp"),
|
||||
Object(Matching, "d/actor/d_a_player_npc.cpp"),
|
||||
Object(NonMatching, "d/actor/d_a_sea.cpp"),
|
||||
Object(Matching, "d/actor/d_a_spc_item01.cpp"),
|
||||
Object(Matching, "d/actor/d_a_vrbox.cpp", extra_cflags=['-pragma "nosyminline on"']),
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
f32 getBaseAnimeFrame() { return 0.0f; }
|
||||
f32 getBaseAnimeFrameRate() { return 1.0f; }
|
||||
s8 getCattleRoomNo() { return m_cattleRoomNo; }
|
||||
cXyz& getEyePos() { return eyePos; }
|
||||
cXyz& getEyePos() { return field_0x748; }
|
||||
f32 getGroundY() { return mAcch.GetGroundH(); }
|
||||
s16 getHead_x() { return mJntCtrl.getHead_x(); }
|
||||
s16 getHead_y() { return mJntCtrl.getHead_y(); }
|
||||
@@ -57,20 +57,20 @@ public:
|
||||
}
|
||||
}
|
||||
BOOL isFinish() { return cLib_checkBit(field_0x784, 0x1UL); }
|
||||
BOOL isGravity() { return cLib_checkBit(field_0x784, 0x8UL); }
|
||||
BOOL isPlayerRoom_Goat() {}
|
||||
void onFinish() { cLib_onBit(field_0x784, 0x1UL); }
|
||||
BOOL isSetHomePos() { return cLib_checkBit(field_0x784, 0x2UL); }
|
||||
void onSetHomePos() { cLib_onBit(field_0x784, 0x2UL); }
|
||||
BOOL isWaterHit() { return cLib_checkBit(field_0x784, 0x4UL); }
|
||||
void offGravity() { field_0x784 &= ~0x8; }
|
||||
void onWaterHit() { cLib_onBit(field_0x784, 0x4UL); }
|
||||
BOOL isGravity() { return cLib_checkBit(field_0x784, 0x8UL); }
|
||||
void onGravity() { cLib_onBit(field_0x784, 0x8UL); }
|
||||
void offGravity() { cLib_offBit(field_0x784, 0x8UL); }
|
||||
void offPlayerRoom(int idx) { m_playerRoom[idx] = false; }
|
||||
void onFinish() { field_0x784 |= 0x1; }
|
||||
void onGravity() { field_0x784 |= 0x8; }
|
||||
void onPlayerRoom(int idx) { m_playerRoom[idx] = true; }
|
||||
void onSetHomePos() { field_0x784 |= 0x2; }
|
||||
void onWaterHit() { field_0x784 |= 0x4; }
|
||||
void setCattleRoomNo(s8 roomNo) { m_cattleRoomNo = roomNo; }
|
||||
|
||||
static bool isPlayerRoom(int idx) { return m_playerRoom[idx]; }
|
||||
static bool isPlayerRoom_Goat() { return isPlayerRoom(1); }
|
||||
|
||||
s32 create();
|
||||
BOOL createHeap();
|
||||
|
||||
@@ -1036,6 +1036,7 @@ inline void dComIfGs_setRestartOption(s8 i_option) {
|
||||
|
||||
inline void dComIfGs_setRestartOption(cXyz* i_pos, s16 i_angle, s8 i_roomNo, s8 i_option) {
|
||||
g_dComIfG_gameInfo.save.getRestart().setRestartOption(i_option, i_pos, i_angle, i_roomNo);
|
||||
g_dComIfG_gameInfo.save.getPlayer().getPriest().set(i_option, *i_pos, i_angle, i_roomNo);
|
||||
}
|
||||
|
||||
inline u32 dComIfGs_getRestartRoomParam() {
|
||||
|
||||
@@ -75,6 +75,11 @@ public:
|
||||
virtual void end();
|
||||
|
||||
void setTevStr(dKy_tevstr_c* tevStr) { mTevstr = tevStr; }
|
||||
void remove() { end(); }
|
||||
|
||||
void offWindOff() {}
|
||||
void onWindOff() {}
|
||||
void setColor(const GXColor&) {}
|
||||
|
||||
/* 0x14 */ s8 field_0x14;
|
||||
/* 0x15 */ u8 field_0x15;
|
||||
|
||||
@@ -454,7 +454,6 @@ s32 daNpc_Md_c::create() {
|
||||
s16 angle = dComIfGs_getPlayerPriestRotate();
|
||||
cXyz& pos = dComIfGs_getPlayerPriestPos();
|
||||
dComIfGs_setRestartOption(&pos, angle, roomNo, 2);
|
||||
dComIfGs_setPlayerPriest(2, pos, angle, roomNo);
|
||||
}
|
||||
checkRestart(2);
|
||||
}
|
||||
|
||||
+35
-46
@@ -17,6 +17,8 @@ static f32 dummy2[3] = {1.0f, 1.0f, 1.0f};
|
||||
static u8 dummy3[4] = {0x02, 0x00, 0x02, 0x01};
|
||||
static f64 dummy4[2] = {3.0, 0.5};
|
||||
|
||||
static u8 temp[0x4C]; // TODO
|
||||
|
||||
static daNpc_Os_HIO_c l_HIO;
|
||||
static s32 l_hio_counter = 0;
|
||||
static cXyz l_smoke_scale(0.5f, 0.5f, 0.5f);
|
||||
@@ -144,8 +146,6 @@ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
||||
|
||||
/* 00000374-00000538 .text create__10daNpc_Os_cFv */
|
||||
s32 daNpc_Os_c::create() {
|
||||
/* Nonmatching */
|
||||
|
||||
fopAcM_SetupActor(this, daNpc_Os_c)
|
||||
|
||||
static u32 l_heap_size = 0xFA0;
|
||||
@@ -190,8 +190,6 @@ s32 daNpc_Os_c::create() {
|
||||
|
||||
/* 00000748-000008CC .text nodeCallBack__FP7J3DNodei */
|
||||
static BOOL nodeCallBack(J3DNode* node, int param_1) {
|
||||
/* Nonmatching */
|
||||
|
||||
if (!param_1) {
|
||||
J3DModel* model = j3dSys.getModel();
|
||||
J3DJoint* joint = (J3DJoint*)node;
|
||||
@@ -618,21 +616,24 @@ s16 daNpc_Os_c::getStickAngY() {
|
||||
|
||||
/* 0000180C-00001964 .text calcStickPos__10daNpc_Os_cFsP4cXyz */
|
||||
int daNpc_Os_c::calcStickPos(s16 param_1, cXyz* param_2) {
|
||||
/* Nonmatching */
|
||||
|
||||
int ret;
|
||||
|
||||
dAttList_c* attList = dComIfGp_getAttention().GetLockonList(0);
|
||||
bool lockon = dComIfGp_getAttention().Lockon();
|
||||
// This temp variable for attention is probably a fakematch, but it fixes a regswap in dAttention_c::Lockon.
|
||||
dAttention_c& attention = dComIfGp_getAttention();
|
||||
dAttList_c* attList = attention.GetLockonList(0);
|
||||
bool lockon = attention.Lockon();
|
||||
if(!lockon) {
|
||||
ret = 0;
|
||||
}
|
||||
else {
|
||||
ret = dComIfGp_getAttention().LockonTruth() ? 1 : -1;
|
||||
} else {
|
||||
BOOL lockon = attention.LockonTruth();
|
||||
ret = -1;
|
||||
if (lockon) {
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(attList == NULL) {
|
||||
attList = dComIfGp_getAttention().GetActionList(0);
|
||||
attList = attention.GetActionList(0);
|
||||
}
|
||||
|
||||
if(attList) {
|
||||
@@ -1054,8 +1055,6 @@ BOOL daNpc_Os_c::routeCheck(f32 param_1, s16* param_2) {
|
||||
|
||||
/* 0000375C-000039EC .text searchNpcAction__10daNpc_Os_cFPv */
|
||||
BOOL daNpc_Os_c::searchNpcAction(void*) {
|
||||
/* Nonmatching */
|
||||
|
||||
if(field_0x7A9 == 0) {
|
||||
attention_info.flags |= fopAc_Attn_ACTION_CARRY_e;
|
||||
setAnm(1);
|
||||
@@ -1068,10 +1067,15 @@ BOOL daNpc_Os_c::searchNpcAction(void*) {
|
||||
|
||||
BOOL door = player->eventInfo.checkCommandDoor();
|
||||
f32 dist = fopAcM_searchPlayerDistanceXZ2(this);
|
||||
f32 temp = dist < l_HIO.field_0x60 * l_HIO.field_0x60 ? 0.0f : l_HIO.field_0xA8;
|
||||
s16 angle = fopAcM_searchPlayerAngleY(this);
|
||||
s16 temp2 = angle;
|
||||
BOOL temp3 = routeCheck(dist, &temp2) && cLib_distanceAngleS(angle, temp2) <= 0x2000;
|
||||
f32 temp;
|
||||
if (dist < l_HIO.field_0x60 * l_HIO.field_0x60) {
|
||||
temp = 0.0f;
|
||||
} else {
|
||||
temp = l_HIO.field_0xA8;
|
||||
}
|
||||
s16 angle, adjustedAngle;
|
||||
angle = adjustedAngle = fopAcM_searchPlayerAngleY(this);
|
||||
BOOL temp3 = routeCheck(dist, &adjustedAngle) && cLib_distanceAngleS(angle, adjustedAngle) <= 0x2000;
|
||||
if(door || !temp3 || (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK1_e) || player->checkAttentionLock())) {
|
||||
temp = 0.0f;
|
||||
offNpcCallCommand();
|
||||
@@ -1091,7 +1095,7 @@ BOOL daNpc_Os_c::searchNpcAction(void*) {
|
||||
}
|
||||
}
|
||||
|
||||
walkProc(temp, temp2);
|
||||
walkProc(temp, adjustedAngle);
|
||||
cLib_addCalcAngleS(&shape_angle.y, current.angle.y, l_HIO.mOs2.field_0x28, l_HIO.mOs2.field_0x24 * 2, l_HIO.mOs2.field_0x26 * 2);
|
||||
s16 temp4 = shape_angle.y;
|
||||
lookBack(1, 0, 0);
|
||||
@@ -1551,15 +1555,8 @@ void daNpc_Os_c::initialNextEvent(int staffIdx) {
|
||||
|
||||
/* 00004A60-00004AF8 .text initialSaveEvent__10daNpc_Os_cFi */
|
||||
void daNpc_Os_c::initialSaveEvent(int) {
|
||||
/* Nonmatching */
|
||||
|
||||
home.pos = current.pos;
|
||||
|
||||
s8 restartNum = getRestartNumber();
|
||||
s8 roomNo = fopAcM_GetRoomNo(this);
|
||||
s16 angleY = home.angle.y;
|
||||
dComIfGs_setRestartOption(¤t.pos, angleY, roomNo, restartNum);
|
||||
dComIfGs_setPlayerPriest(restartNum, current.pos, angleY, roomNo);
|
||||
dComIfGs_setRestartOption(¤t.pos, home.angle.y, fopAcM_GetRoomNo(this), getRestartNumber());
|
||||
}
|
||||
|
||||
/* 00004AF8-00004B64 .text talk_init__10daNpc_Os_cFv */
|
||||
@@ -1597,8 +1594,6 @@ BOOL daNpc_Os_c::talk() {
|
||||
|
||||
/* 00004C04-00004D20 .text setAnm__10daNpc_Os_cFi */
|
||||
void daNpc_Os_c::setAnm(int param_1) {
|
||||
/* Nonmatching */
|
||||
|
||||
struct anmPrm_c {
|
||||
/* 0x00 */ s8 mAnmTblIdx;
|
||||
/* 0x04 */ int mLoopMode;
|
||||
@@ -1654,12 +1649,13 @@ void daNpc_Os_c::setAnm(int param_1) {
|
||||
|
||||
field_0x78C = param_1;
|
||||
anmPrm_c& prm = l_anmPrm[param_1];
|
||||
f32 temp = prm.mPlaySpeed;
|
||||
if(prm.mAnmTblIdx != field_0x7A0 || temp != mpMorf->getPlaySpeed()) {
|
||||
f32 playSpeed = prm.mPlaySpeed;
|
||||
if(prm.mAnmTblIdx != field_0x7A0 || prm.mPlaySpeed != mpMorf->getPlaySpeed()) {
|
||||
field_0x7A0 = prm.mAnmTblIdx;
|
||||
s8* temp2 = &l_anmTbl[field_0x7A0]; // fakematch
|
||||
mPrevMorfFrame = 0.0f;
|
||||
mReachedAnimEnd = false;
|
||||
dNpc_Os_setAnm(mpMorf, prm.mLoopMode, prm.mMorf, temp, l_anmTbl[field_0x7A0], "Os");
|
||||
dNpc_Os_setAnm(mpMorf, prm.mLoopMode, prm.mMorf, playSpeed, *temp2, "Os");
|
||||
|
||||
if(prm.m10 < 0) {
|
||||
mpMorf->setFrame(mpMorf->getEndFrame());
|
||||
@@ -1770,8 +1766,6 @@ void daNpc_Os_c::setAnm_brkAnm(int param_1) {
|
||||
|
||||
/* 000050B0-00005204 .text chkAttention__10daNpc_Os_cF4cXyzs */
|
||||
BOOL daNpc_Os_c::chkAttention(cXyz param_1, s16 param_2) {
|
||||
/* Nonmatching */
|
||||
|
||||
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
||||
f32 maxDist = l_HIO.mNpc.mMaxAttnDistXZ;
|
||||
s32 maxAngle = l_HIO.mNpc.mMaxAttnAngleY;
|
||||
@@ -1787,9 +1781,9 @@ BOOL daNpc_Os_c::chkAttention(cXyz param_1, s16 param_2) {
|
||||
maxAngle += 0x71C;
|
||||
}
|
||||
|
||||
s16 temp = angle - param_2;
|
||||
angle -= param_2;
|
||||
BOOL ret = false;
|
||||
if(maxAngle > abs(temp) && maxDist > dist) {
|
||||
if(maxAngle > abs(angle) && maxDist > dist) {
|
||||
ret = true;
|
||||
}
|
||||
|
||||
@@ -1845,9 +1839,7 @@ void daNpc_Os_c::checkOrder() {
|
||||
|
||||
/* 00005454-00005468 .text checkCommandTalk__10daNpc_Os_cFv */
|
||||
BOOL daNpc_Os_c::checkCommandTalk() {
|
||||
/* Nonmatching */
|
||||
|
||||
return eventInfo.checkCommandTalk();
|
||||
return eventInfo.checkCommandTalk() ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
/* 00005468-000054BC .text next_msgStatus__10daNpc_Os_cFPUl */
|
||||
@@ -1966,12 +1958,13 @@ static const char* event_name_tbl[] = {
|
||||
|
||||
/* 00005824-00005B58 .text init__10daNpc_Os_cFv */
|
||||
BOOL daNpc_Os_c::init() {
|
||||
/* Nonmatching */
|
||||
|
||||
cXyz dummy(0.0f, 0.0f, 0.0f);
|
||||
|
||||
field_0x794 = fopAcM_GetParam(this) >> 0x10 & 0xFF;
|
||||
attention_info.distances[4] = 0x27;
|
||||
// Fakematch, the next two lines get optimized out, but they affect the regalloc when copying the tevstr.
|
||||
speedF = speedF;
|
||||
speedF = speedF;
|
||||
m_smoke_tevstr = tevStr;
|
||||
m_smoke.setTevStr(&m_smoke_tevstr);
|
||||
m_playerRoom[subtype] = false;
|
||||
@@ -2080,8 +2073,6 @@ void daNpc_Os_c::smokeSet(u16 particle) {
|
||||
|
||||
/* 00005E5C-00006AF8 .text execute__10daNpc_Os_cFv */
|
||||
BOOL daNpc_Os_c::execute() {
|
||||
/* Nonmatching */
|
||||
|
||||
static JGeometry::TVec3<f32> splash_scale(0.6f, 0.6f, 0.6f);
|
||||
static JGeometry::TVec3<f32> ripple_scale(1.0f, 1.0f, 1.0f);
|
||||
|
||||
@@ -2352,8 +2343,6 @@ BOOL daNpc_Os_c::execute() {
|
||||
|
||||
/* 00006AF8-00006E1C .text __dt__10daNpc_Os_cFv */
|
||||
daNpc_Os_c::~daNpc_Os_c() {
|
||||
/* Nonmatching */
|
||||
|
||||
dComIfG_resDelete(&mPhs, "Os");
|
||||
|
||||
if (heap) {
|
||||
@@ -2361,7 +2350,7 @@ daNpc_Os_c::~daNpc_Os_c() {
|
||||
}
|
||||
|
||||
endBeam();
|
||||
m_smoke.end();
|
||||
m_smoke.remove();
|
||||
if(l_hio_counter != 0) {
|
||||
l_hio_counter -= 1;
|
||||
}
|
||||
|
||||
@@ -77,25 +77,17 @@ void daPy_npc_c::setOffsetHomePos() {
|
||||
|
||||
/* 8015A6A4-8015AA0C .text setPointRestart__10daPy_npc_cFsSc */
|
||||
void daPy_npc_c::setPointRestart(s16 i_point, s8 option) {
|
||||
/* Nonmatching (regswaps) */
|
||||
stage_scls_info_dummy_class* sclsinfo;
|
||||
stage_scls_info_class* scls_data;
|
||||
stage_actor_data_class* player_data;
|
||||
int scls_start_code;
|
||||
int i;
|
||||
s16 rotY;
|
||||
s8 roomNo;
|
||||
|
||||
JUT_ASSERT(157, dComIfGp_getStagePlayer() != 0);
|
||||
sclsinfo = dComIfGp_getStageSclsInfo();
|
||||
stage_scls_info_dummy_class* sclsinfo = dComIfGp_getStageSclsInfo();
|
||||
JUT_ASSERT(159, sclsinfo != 0);
|
||||
|
||||
JUT_ASSERT(161, 0 <= i_point && i_point < sclsinfo->num);
|
||||
scls_data = sclsinfo->m_entries;
|
||||
stage_scls_info_class* scls_data = sclsinfo->m_entries;
|
||||
JUT_ASSERT(163, scls_data != 0);
|
||||
|
||||
player_data = dComIfGp_getStagePlayer()->m_entries;
|
||||
scls_start_code = scls_data[i_point].mStart;
|
||||
stage_actor_data_class* player_data = dComIfGp_getStagePlayer()->m_entries;
|
||||
int scls_start_code = scls_data[i_point].mStart;
|
||||
int i;
|
||||
for (i = 0; i < dComIfGp_getStagePlayerNum(); i++) {
|
||||
u8 plyr_start_code = player_data->mAngle.z & 0xFF;
|
||||
if (plyr_start_code == scls_start_code) {
|
||||
@@ -113,10 +105,7 @@ void daPy_npc_c::setPointRestart(s16 i_point, s8 option) {
|
||||
old = home;
|
||||
shape_angle = home.angle;
|
||||
|
||||
rotY = home.angle.y;
|
||||
roomNo = -1;
|
||||
dComIfGs_setRestartOption(&home.pos, rotY, roomNo, option);
|
||||
dComIfGs_setPlayerPriest(option, home.pos, rotY, roomNo);
|
||||
dComIfGs_setRestartOption(&home.pos, home.angle.y, -1, option);
|
||||
dComIfGs_setPlayerPriest(option, dComIfGs_getRestartOptionPos(), dComIfGs_getRestartOptionAngleY(), dComIfGs_getRestartOptionRoomNo());
|
||||
fopAcM_setStageLayer(this);
|
||||
}
|
||||
@@ -150,7 +139,6 @@ BOOL daPy_npc_c::initialRestartOption(s8 option, int save) {
|
||||
s8 roomNo = current.roomNo;
|
||||
rotY = home.angle.y;
|
||||
dComIfGs_setRestartOption(&home.pos, rotY, roomNo, option);
|
||||
dComIfGs_setPlayerPriest(option, home.pos, rotY, roomNo);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user