d_a_player_npc OK, d_a_npc_os 100% except weakfunc order

This commit is contained in:
LagoLunatic
2024-03-18 23:41:02 -04:00
parent 3f1d64f3ab
commit c2452afb7f
7 changed files with 56 additions and 74 deletions
+1 -1
View File
@@ -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"']),
+8 -8
View File
@@ -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();
+1
View File
@@ -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() {
+5
View File
@@ -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;
-1
View File
@@ -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
View File
@@ -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(&current.pos, angleY, roomNo, restartNum);
dComIfGs_setPlayerPriest(restartNum, current.pos, angleY, roomNo);
dComIfGs_setRestartOption(&current.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;
}
+6 -18
View File
@@ -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;
}