mirror of
https://github.com/zeldaret/oot.git
synced 2025-05-11 11:33:48 +00:00
Boomerang related state flags (#2180)
* boomerang state flags * finish comment
This commit is contained in:
parent
6fcaa51832
commit
6e0288d155
4 changed files with 24 additions and 17 deletions
|
@ -672,8 +672,8 @@ typedef struct WeaponInfo {
|
||||||
#define PLAYER_STATE1_21 (1 << 21)
|
#define PLAYER_STATE1_21 (1 << 21)
|
||||||
#define PLAYER_STATE1_22 (1 << 22)
|
#define PLAYER_STATE1_22 (1 << 22)
|
||||||
#define PLAYER_STATE1_23 (1 << 23)
|
#define PLAYER_STATE1_23 (1 << 23)
|
||||||
#define PLAYER_STATE1_24 (1 << 24)
|
#define PLAYER_STATE1_USING_BOOMERANG (1 << 24) // Currently using the boomerang. This includes all phases (aiming, throwing, and catching).
|
||||||
#define PLAYER_STATE1_25 (1 << 25)
|
#define PLAYER_STATE1_BOOMERANG_THROWN (1 << 25) // Boomerang has been thrown and is flying in the air
|
||||||
#define PLAYER_STATE1_26 (1 << 26)
|
#define PLAYER_STATE1_26 (1 << 26)
|
||||||
#define PLAYER_STATE1_27 (1 << 27)
|
#define PLAYER_STATE1_27 (1 << 27)
|
||||||
#define PLAYER_STATE1_28 (1 << 28)
|
#define PLAYER_STATE1_28 (1 << 28)
|
||||||
|
|
|
@ -1199,7 +1199,8 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
|
||||||
|
|
||||||
if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.save.info.playerData.swordHealth <= 0.0f)) {
|
if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.save.info.playerData.swordHealth <= 0.0f)) {
|
||||||
dLists += 4;
|
dLists += 4;
|
||||||
} else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_25)) {
|
} else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) &&
|
||||||
|
(this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN)) {
|
||||||
dLists = gPlayerLeftHandOpenDLs + gSaveContext.save.linkAge;
|
dLists = gPlayerLeftHandOpenDLs + gSaveContext.save.linkAge;
|
||||||
sLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
|
sLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
|
||||||
} else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speed > 2.0f) &&
|
} else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speed > 2.0f) &&
|
||||||
|
|
|
@ -186,7 +186,7 @@ void EnBoom_Fly(EnBoom* this, PlayState* play) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Set player flags and kill the boomerang beacause Link caught it.
|
// Set player flags and kill the boomerang beacause Link caught it.
|
||||||
player->stateFlags1 &= ~PLAYER_STATE1_25;
|
player->stateFlags1 &= ~PLAYER_STATE1_BOOMERANG_THROWN;
|
||||||
Actor_Kill(&this->actor);
|
Actor_Kill(&this->actor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -2065,7 +2065,7 @@ int func_808332B8(Player* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 func_808332E4(Player* this) {
|
s32 func_808332E4(Player* this) {
|
||||||
return (this->stateFlags1 & PLAYER_STATE1_24);
|
return (this->stateFlags1 & PLAYER_STATE1_USING_BOOMERANG);
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_808332F4(Player* this, PlayState* play) {
|
void func_808332F4(Player* this, PlayState* play) {
|
||||||
|
@ -2167,7 +2167,9 @@ void Player_InitItemActionWithAnim(PlayState* play, Player* this, s8 itemAction)
|
||||||
LinkAnimationHeader** iter = D_80853914 + this->modelAnimType;
|
LinkAnimationHeader** iter = D_80853914 + this->modelAnimType;
|
||||||
u32 animGroup;
|
u32 animGroup;
|
||||||
|
|
||||||
this->stateFlags1 &= ~(PLAYER_STATE1_3 | PLAYER_STATE1_24);
|
// This is redundant, the same two flags get unset in
|
||||||
|
// `Player_InitItemAction` called below.
|
||||||
|
this->stateFlags1 &= ~(PLAYER_STATE1_3 | PLAYER_STATE1_USING_BOOMERANG);
|
||||||
|
|
||||||
for (animGroup = 0; animGroup < PLAYER_ANIMGROUP_MAX; animGroup++) {
|
for (animGroup = 0; animGroup < PLAYER_ANIMGROUP_MAX; animGroup++) {
|
||||||
if (current == *iter) {
|
if (current == *iter) {
|
||||||
|
@ -2259,7 +2261,7 @@ void Player_InitHookshotIA(PlayState* play, Player* this) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player_InitBoomerangIA(PlayState* play, Player* this) {
|
void Player_InitBoomerangIA(PlayState* play, Player* this) {
|
||||||
this->stateFlags1 |= PLAYER_STATE1_24;
|
this->stateFlags1 |= PLAYER_STATE1_USING_BOOMERANG;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player_InitItemAction(PlayState* play, Player* this, s8 itemAction) {
|
void Player_InitItemAction(PlayState* play, Player* this, s8 itemAction) {
|
||||||
|
@ -2270,7 +2272,7 @@ void Player_InitItemAction(PlayState* play, Player* this, s8 itemAction) {
|
||||||
this->heldItemAction = this->itemAction = itemAction;
|
this->heldItemAction = this->itemAction = itemAction;
|
||||||
this->modelGroup = this->nextModelGroup;
|
this->modelGroup = this->nextModelGroup;
|
||||||
|
|
||||||
this->stateFlags1 &= ~(PLAYER_STATE1_3 | PLAYER_STATE1_24);
|
this->stateFlags1 &= ~(PLAYER_STATE1_3 | PLAYER_STATE1_USING_BOOMERANG);
|
||||||
|
|
||||||
sItemActionInitFuncs[itemAction](play, this);
|
sItemActionInitFuncs[itemAction](play, this);
|
||||||
|
|
||||||
|
@ -2806,7 +2808,7 @@ s32 func_80834EB8(Player* this, PlayState* play) {
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 func_80834F2C(Player* this, PlayState* play) {
|
s32 func_80834F2C(Player* this, PlayState* play) {
|
||||||
if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_25)) {
|
if ((this->doorType == PLAYER_DOORTYPE_NONE) && !(this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN)) {
|
||||||
if (sUseHeldItem || func_80834E44(play)) {
|
if (sUseHeldItem || func_80834E44(play)) {
|
||||||
if (func_80834D2C(this, play)) {
|
if (func_80834D2C(this, play)) {
|
||||||
return func_80834EB8(this, play);
|
return func_80834EB8(this, play);
|
||||||
|
@ -3049,7 +3051,7 @@ s32 func_80835800(Player* this, PlayState* play) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->stateFlags1 & PLAYER_STATE1_25) {
|
if (this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN) {
|
||||||
Player_SetUpperActionFunc(this, func_80835B60);
|
Player_SetUpperActionFunc(this, func_80835B60);
|
||||||
} else if (func_80834F2C(this, play)) {
|
} else if (func_80834F2C(this, play)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -3104,13 +3106,16 @@ s32 func_808359FC(Player* this, PlayState* play) {
|
||||||
this->actor.focus.rot.x, yaw, 0, 0);
|
this->actor.focus.rot.x, yaw, 0, 0);
|
||||||
|
|
||||||
this->boomerangActor = &boomerang->actor;
|
this->boomerangActor = &boomerang->actor;
|
||||||
|
|
||||||
if (boomerang != NULL) {
|
if (boomerang != NULL) {
|
||||||
boomerang->moveTo = this->focusActor;
|
boomerang->moveTo = this->focusActor;
|
||||||
boomerang->returnTimer = 20;
|
boomerang->returnTimer = 20;
|
||||||
this->stateFlags1 |= PLAYER_STATE1_25;
|
this->stateFlags1 |= PLAYER_STATE1_BOOMERANG_THROWN;
|
||||||
|
|
||||||
if (!func_8008E9C4(this)) {
|
if (!func_8008E9C4(this)) {
|
||||||
Player_SetParallel(this);
|
Player_SetParallel(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->unk_A73 = 4;
|
this->unk_A73 = 4;
|
||||||
Player_PlaySfx(this, NA_SE_IT_BOOMERANG_THROW);
|
Player_PlaySfx(this, NA_SE_IT_BOOMERANG_THROW);
|
||||||
Player_PlayVoiceSfx(this, NA_SE_VO_LI_SWORD_N);
|
Player_PlayVoiceSfx(this, NA_SE_VO_LI_SWORD_N);
|
||||||
|
@ -3125,7 +3130,7 @@ s32 func_80835B60(Player* this, PlayState* play) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(this->stateFlags1 & PLAYER_STATE1_25)) {
|
if (!(this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN)) {
|
||||||
Player_SetUpperActionFunc(this, func_80835C08);
|
Player_SetUpperActionFunc(this, func_80835C08);
|
||||||
LinkAnimation_PlayOnce(play, &this->upperSkelAnime, &gPlayerAnim_link_boom_catch);
|
LinkAnimation_PlayOnce(play, &this->upperSkelAnime, &gPlayerAnim_link_boom_catch);
|
||||||
func_808357E8(this, gPlayerLeftHandBoomerangDLs);
|
func_808357E8(this, gPlayerLeftHandBoomerangDLs);
|
||||||
|
@ -3574,9 +3579,10 @@ void func_80836BEC(Player* this, PlayState* play) {
|
||||||
|
|
||||||
isTalking = func_8083224C(play);
|
isTalking = func_8083224C(play);
|
||||||
|
|
||||||
if (isTalking || (this->unk_66C != 0) || (this->stateFlags1 & (PLAYER_STATE1_12 | PLAYER_STATE1_25))) {
|
if (isTalking || (this->unk_66C != 0) ||
|
||||||
|
(this->stateFlags1 & (PLAYER_STATE1_12 | PLAYER_STATE1_BOOMERANG_THROWN))) {
|
||||||
if (!isTalking) {
|
if (!isTalking) {
|
||||||
if (!(this->stateFlags1 & PLAYER_STATE1_25) &&
|
if (!(this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN) &&
|
||||||
((this->heldItemAction != PLAYER_IA_FISHING_POLE) || (this->unk_860 == 0)) &&
|
((this->heldItemAction != PLAYER_IA_FISHING_POLE) || (this->unk_860 == 0)) &&
|
||||||
CHECK_BTN_ALL(sControlInput->press.button, BTN_Z)) {
|
CHECK_BTN_ALL(sControlInput->press.button, BTN_Z)) {
|
||||||
if (this->actor.category == ACTORCAT_PLAYER) {
|
if (this->actor.category == ACTORCAT_PLAYER) {
|
||||||
|
@ -10769,7 +10775,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
|
||||||
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK)) {
|
if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_TALK)) {
|
||||||
camMode = CAM_MODE_TALK;
|
camMode = CAM_MODE_TALK;
|
||||||
} else if (this->stateFlags1 & PLAYER_STATE1_16) {
|
} else if (this->stateFlags1 & PLAYER_STATE1_16) {
|
||||||
if (this->stateFlags1 & PLAYER_STATE1_25) {
|
if (this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN) {
|
||||||
camMode = CAM_MODE_FOLLOW_BOOMERANG;
|
camMode = CAM_MODE_FOLLOW_BOOMERANG;
|
||||||
} else {
|
} else {
|
||||||
camMode = CAM_MODE_Z_TARGET_FRIENDLY;
|
camMode = CAM_MODE_Z_TARGET_FRIENDLY;
|
||||||
|
@ -10780,7 +10786,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
|
||||||
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, focusActor);
|
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, focusActor);
|
||||||
} else if (this->stateFlags1 & PLAYER_STATE1_12) {
|
} else if (this->stateFlags1 & PLAYER_STATE1_12) {
|
||||||
camMode = CAM_MODE_CHARGE;
|
camMode = CAM_MODE_CHARGE;
|
||||||
} else if (this->stateFlags1 & PLAYER_STATE1_25) {
|
} else if (this->stateFlags1 & PLAYER_STATE1_BOOMERANG_THROWN) {
|
||||||
camMode = CAM_MODE_FOLLOW_BOOMERANG;
|
camMode = CAM_MODE_FOLLOW_BOOMERANG;
|
||||||
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, this->boomerangActor);
|
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, this->boomerangActor);
|
||||||
} else if (this->stateFlags1 & (PLAYER_STATE1_13 | PLAYER_STATE1_14)) {
|
} else if (this->stateFlags1 & (PLAYER_STATE1_13 | PLAYER_STATE1_14)) {
|
||||||
|
@ -14762,7 +14768,7 @@ void func_80851750(PlayState* play, Player* this, CsCmdActorCue* cue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80851788(PlayState* play, Player* this, CsCmdActorCue* cue) {
|
void func_80851788(PlayState* play, Player* this, CsCmdActorCue* cue) {
|
||||||
this->stateFlags1 &= ~PLAYER_STATE1_25;
|
this->stateFlags1 &= ~PLAYER_STATE1_BOOMERANG_THROWN;
|
||||||
|
|
||||||
this->yaw = this->actor.shape.rot.y = this->actor.world.rot.y =
|
this->yaw = this->actor.shape.rot.y = this->actor.world.rot.y =
|
||||||
Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_450);
|
Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_450);
|
||||||
|
|
Loading…
Add table
Reference in a new issue