d_a_player_boomerang.inc - All fully matching. (#722)

Co-authored-by: ‎ ‎ ‎ <‎ ‎ ‎>
This commit is contained in:
123456789758
2025-03-31 17:58:45 -04:00
committed by GitHub
parent 26f1b0c8f0
commit 0b883c50c6
3 changed files with 187 additions and 31 deletions
+1
View File
@@ -88,6 +88,7 @@ public:
daPyFlg0_UNK4 = 0x00000004,
daPyFlg0_UNK8 = 0x00000008,
daPyFlg0_DEKU_SP_RETURN_FLG = 0x00000010,
daPyFlg0_UNK20 = 0x00000020,
daPyFlg0_CUT_AT_FLG = 0x00000040,
daPyFlg0_UNK80 = 0x00000080,
daPyFlg0_UNK100 = 0x00000100,
+2 -2
View File
@@ -1508,11 +1508,11 @@ public:
BOOL procRopeUpHang();
BOOL checkBoomerangAnime() const;
void throwBoomerang();
void returnBoomerang();
int returnBoomerang();
BOOL checkNextActionBoomerangReady();
BOOL checkNextActionBoomerangFly();
BOOL checkNextBoomerangMode();
void changeBoomerangCatchProc();
int changeBoomerangCatchProc();
BOOL procBoomerangSubject_init();
BOOL procBoomerangSubject();
BOOL procBoomerangMove_init();
+184 -29
View File
@@ -2,56 +2,153 @@
* d_a_player_boomerang.inc
*
* Code relating to the Boomerang item.
*
* This file is not a standalone translation unit and is instead directly
*
* This file is not a standalone translation unit and is instead directly
* included into d_a_player_main.cpp.
*
* The original name of this file is not known, but a best guess was taken
*
* The original name of this file is not known, but a best guess was taken
* based on the original names of the functions it contains.
*/
#include "d/actor/d_a_boomerang.h"
#include "d/actor/d_a_player_main.h"
#include "d/actor/d_a_player_HIO.h"
#include "d/actor/d_a_player_main.h"
/* 8014956C-80149590 .text checkBoomerangAnime__9daPy_lk_cCFv */
BOOL daPy_lk_c::checkBoomerangAnime() const {
/* Nonmatching */
return ((checkBoomerangReadyAnime()) || (checkBoomerangThrowAnime()));
}
/* 80149590-80149698 .text throwBoomerang__9daPy_lk_cFv */
void daPy_lk_c::throwBoomerang() {
/* Nonmatching */
daBoomerang_c *boomerang = (daBoomerang_c *)mActorKeepEquip.getActor();
fopAcM_SetParam(boomerang, 1);
if (mpAttnActorLockOn != NULL) {
boomerang->setAimActor(mpAttnActorLockOn);
}
boomerang->shape_angle.y = shape_angle.y;
mActorKeepThrow = mActorKeepEquip;
mActorKeepEquip.clearData();
mEquipItem = daPyItem_NONE_e;
dComIfGp_setPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e);
shape_angle.y += mBodyAngle.y;
current.angle.y = shape_angle.y;
mBodyAngle.y = 0;
voiceStart(0);
if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) {
dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_AIM_e);
offModeFlg(ModeFlg_SUBJECT);
onModeFlg(ModeFlg_00000080);
} else {
if (mAcch.ChkGroundHit()) {
procWait_init();
}
}
return;
}
/* 80149698-801497A4 .text returnBoomerang__9daPy_lk_cFv */
void daPy_lk_c::returnBoomerang() {
/* Nonmatching */
int daPy_lk_c::returnBoomerang() {
dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e);
if (mEquipItem == daPyItem_NONE_e) {
if (daPy_getPlayerActorClass() == this) {
if (!dComIfGp_event_runCheck()) {
if (mDemo.getDemoType() == 0) {
if ((m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xffff ||
(checkPlayerGuard())) ||
((m_anm_heap_upper[UPPER_MOVE2_e].mIdx ==
LKANM_BCK_DAMDASH ||
(checkBoomerangAnime())))) {
if ((!(checkModeFlg(ModeFlg_WHIDE | ModeFlg_ROPE |
ModeFlg_IN_SHIP | ModeFlg_CLIMB |
ModeFlg_SWIM | ModeFlg_00080000 |
ModeFlg_GRAB | ModeFlg_PUSHPULL |
ModeFlg_LADDER | ModeFlg_CROUCH |
ModeFlg_CRAWL)) ||
(mCurProc == daPyProc_SHIP_BOOMERANG_e))) {
mActorKeepEquip = mActorKeepThrow;
mActorKeepThrow.clearData();
mEquipItem = dItem_BOOMERANG_e;
onNoResetFlg0(daPyFlg0_UNK20);
return true;
}
}
}
}
}
}
mActorKeepThrow.clearData();
return false;
}
/* 801497A4-8014984C .text checkNextActionBoomerangReady__9daPy_lk_cFv */
BOOL daPy_lk_c::checkNextActionBoomerangReady() {
/* Nonmatching */
if ((!itemButton()) &&
((mpAttnActorLockOn != NULL ||
(dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x10))))) {
setActAnimeUpper(
LKANM_BCK_BOOMTHROW, UPPER_MOVE2_e, daPy_HIO_boom_c0::m.field_0x4,
daPy_HIO_boom_c0::m.field_0x8, daPy_HIO_boom_c0::m.field_0x0,
daPy_HIO_boom_c0::m.field_0xC);
setPriTextureAnime(0x48, 0);
return true;
}
return cancelItemUpperReadyAnime();
}
/* 8014984C-801498D8 .text checkNextActionBoomerangFly__9daPy_lk_cFv */
BOOL daPy_lk_c::checkNextActionBoomerangFly() {
/* Nonmatching */
if (checkBoomerangReadyAnime()) {
checkNextActionBoomerangReady();
} else {
if ((itemTrigger()) && (mEquipItem == getReadyItem())) {
setActAnimeUpper(LKANM_BCK_BOOMWAIT, UPPER_MOVE2_e,
daPy_HIO_boom_c0::m.field_0x18, 0.0f, -1,
daPy_HIO_basic_c0::m.field_0xC);
}
}
return;
}
/* 801498D8-80149964 .text checkNextBoomerangMode__9daPy_lk_cFv */
BOOL daPy_lk_c::checkNextBoomerangMode() {
/* Nonmatching */
if (!checkBoomerangAnime()) {
seStartOnlyReverb(JA_SE_LK_ITEM_TAKEOUT);
}
if (mpAttention->Lockon()) {
procBoomerangMove_init();
} else {
procBoomerangSubject_init();
}
return;
}
/* 80149964-80149A44 .text changeBoomerangCatchProc__9daPy_lk_cFv */
void daPy_lk_c::changeBoomerangCatchProc() {
/* Nonmatching */
int daPy_lk_c::changeBoomerangCatchProc() {
if (checkNoResetFlg0(daPyFlg0_UNK20)) {
if ((((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) &&
(checkModeFlg(ModeFlg_00020000))) &&
((m_anm_heap_upper[UPPER_MOVE2_e].mIdx == 0xffff ||
(checkBoomerangThrowAnime())))) {
setActAnimeUpper(
LKANM_BCK_BOOMCATCH, UPPER_MOVE2_e,
daPy_HIO_boom_c0::m.field_0x20, daPy_HIO_boom_c0::m.field_0x24,
daPy_HIO_boom_c0::m.field_0x2, daPy_HIO_boom_c0::m.field_0x28);
setPriTextureAnime(0x49, 0);
seStartOnlyReverb(JA_SE_LK_BOOM_CATCH);
if (checkModeFlg(ModeFlg_00000001)) {
return procBoomerangCatch_init();
}
}
offNoResetFlg0(daPyFlg0_UNK20);
}
return false;
}
/* 80149A44-80149AF0 .text procBoomerangSubject_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procBoomerangSubject_init() {
if(mCurProc == daPyProc_BOOMERANG_SUBJECT_e) {
if (mCurProc == daPyProc_BOOMERANG_SUBJECT_e) {
return false;
}
@@ -60,7 +157,8 @@ BOOL daPy_lk_c::procBoomerangSubject_init() {
mVelocity = 0.0f;
setActAnimeUpper(LKANM_BCK_BOOMWAIT, UPPER_MOVE2_e, 0.0f, 0.0f, -1, -1.0f);
setSingleMoveAnime(ANM_ATNRS, 0.0f, 0.0f, -1, daPy_HIO_basic_c0::m.field_0xC);
setSingleMoveAnime(ANM_ATNRS, 0.0f, 0.0f, -1,
daPy_HIO_basic_c0::m.field_0xC);
dComIfGp_setPlayerStatus0(0, daPyStts0_BOOMERANG_AIM_e);
@@ -71,32 +169,32 @@ BOOL daPy_lk_c::procBoomerangSubject_init() {
/* 80149AF0-80149C00 .text procBoomerangSubject__9daPy_lk_cFv */
BOOL daPy_lk_c::procBoomerangSubject() {
if(!checkItemModeActorPointer()) {
if (!checkItemModeActorPointer()) {
return true;
}
if(checkBoomerangReadyAnime()) {
if (checkBoomerangReadyAnime()) {
dComIfGp_setDoStatus(7);
}
setShapeAngleToAtnActor();
if(mpAttention->Lockon()) {
if (mpAttention->Lockon()) {
setSpeedAndAngleAtn();
}
if(checkNextMode(0) == 0) {
if(setBodyAngleToCamera()) {
daBoomerang_c* boomerang = (daBoomerang_c*)mActorKeepEquip.getActor();
if(boomerang != NULL) {
if (checkNextMode(0) == 0) {
if (setBodyAngleToCamera()) {
daBoomerang_c *boomerang =
(daBoomerang_c *)mActorKeepEquip.getActor();
if (boomerang != NULL) {
cXyz sight;
checkSightLine(boomerang->getFlyMax(), &sight);
mSightPacket.setPos(&sight);
mSightPacket.onDrawFlg();
}
}
}
else {
} else {
mSightPacket.offDrawFlg();
}
@@ -105,20 +203,77 @@ BOOL daPy_lk_c::procBoomerangSubject() {
/* 80149C00-80149CC8 .text procBoomerangMove_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procBoomerangMove_init() {
/* Nonmatching */
if (mCurProc == daPyProc_BOOMERANG_MOVE_e) {
return false;
} else {
commonProcInit(daPyProc_BOOMERANG_MOVE_e);
if (m34B8 == 2) {
current.angle.y = shape_angle.y + 0x4000;
} else {
m34B8 = 3;
current.angle.y = shape_angle.y + -0x4000;
}
setActAnimeUpper(LKANM_BCK_BOOMWAIT, UPPER_MOVE2_e,
daPy_HIO_boom_c0::m.field_0x18, 0.0f, -1, -1.0f);
setBlendAtnMoveAnime(daPy_HIO_basic_c0::m.field_0xC);
dComIfGp_setPlayerStatus0(0, daPyStts0_BOOMERANG_AIM_e);
return true;
}
}
/* 80149CC8-80149DA4 .text procBoomerangMove__9daPy_lk_cFv */
BOOL daPy_lk_c::procBoomerangMove() {
/* Nonmatching */
if (!checkItemModeActorPointer()) {
return true;
} else {
if (mpAttnActorLockOn != NULL) {
setSpeedAndAngleAtnActor();
} else {
setSpeedAndAngleAtn();
}
if (!checkNextMode(0)) {
f32 fVar1 = -1.0f;
if (std::fabsf(mVelocity) < 0.001f) {
onModeFlg(ModeFlg_00000001);
if (m34B8 != 3) {
m34B8 = 3;
fVar1 = daPy_HIO_basic_c0::m.field_0xC;
}
} else {
offModeFlg(ModeFlg_00000001);
}
setBlendAtnMoveAnime(fVar1);
setBodyAngleXReadyAnime();
}
}
return true;
}
/* 80149DA4-80149E1C .text procBoomerangCatch_init__9daPy_lk_cFv */
BOOL daPy_lk_c::procBoomerangCatch_init() {
/* Nonmatching */
if (mCurProc == daPyProc_BOOMERANG_CATCH_e) {
return false;
} else {
commonProcInit(daPyProc_BOOMERANG_CATCH_e);
setSingleMoveAnime(ANM_BOOMCATCH, daPy_HIO_boom_c0::m.field_0x20,
daPy_HIO_boom_c0::m.field_0x24,
daPy_HIO_boom_c0::m.field_0x2,
daPy_HIO_boom_c0::m.field_0x28);
offNoResetFlg0(daPyFlg0_UNK20);
}
return true;
}
/* 80149E1C-80149ECC .text procBoomerangCatch__9daPy_lk_cFv */
BOOL daPy_lk_c::procBoomerangCatch() {
/* Nonmatching */
if (mpAttention->Lockon()) {
setSpeedAndAngleAtn();
} else {
setSpeedAndAngleNormal(daPy_HIO_move_c0::m.field_0x0);
}
if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) {
resetActAnimeUpper(UPPER_MOVE2_e, -1.0f);
}
checkNextMode(0);
return true;
}