mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-21 14:07:29 -04:00
d_a_player_boomerang.inc - All fully matching. (#722)
Co-authored-by: < >
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user