1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-10 19:13:42 +00:00

More target related state flags (#2184)

* name some more flags

* format

* cdi suggestion
This commit is contained in:
fig02 2024-09-10 22:00:41 -04:00 committed by GitHub
parent 58d8abfe03
commit 2e79b83bb8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 25 deletions

View file

@ -663,7 +663,7 @@ typedef struct WeaponInfo {
#define PLAYER_STATE1_12 (1 << 12) #define PLAYER_STATE1_12 (1 << 12)
#define PLAYER_STATE1_13 (1 << 13) #define PLAYER_STATE1_13 (1 << 13)
#define PLAYER_STATE1_14 (1 << 14) #define PLAYER_STATE1_14 (1 << 14)
#define PLAYER_STATE1_15 (1 << 15) #define PLAYER_STATE1_Z_TARGETING (1 << 15) // Either lock-on or parallel is active. This flag is never checked for and is practically unused.
#define PLAYER_STATE1_16 (1 << 16) #define PLAYER_STATE1_16 (1 << 16)
#define PLAYER_STATE1_PARALLEL (1 << 17) // "Parallel" mode, Z-Target without an actor lock-on #define PLAYER_STATE1_PARALLEL (1 << 17) // "Parallel" mode, Z-Target without an actor lock-on
#define PLAYER_STATE1_18 (1 << 18) #define PLAYER_STATE1_18 (1 << 18)
@ -678,7 +678,7 @@ typedef struct WeaponInfo {
#define PLAYER_STATE1_27 (1 << 27) #define PLAYER_STATE1_27 (1 << 27)
#define PLAYER_STATE1_28 (1 << 28) #define PLAYER_STATE1_28 (1 << 28)
#define PLAYER_STATE1_29 (1 << 29) #define PLAYER_STATE1_29 (1 << 29)
#define PLAYER_STATE1_30 (1 << 30) #define PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE (1 << 30) // Lock-on was released automatically, for example by leaving the lock-on leash range
#define PLAYER_STATE1_31 (1 << 31) #define PLAYER_STATE1_31 (1 << 31)
#define PLAYER_STATE2_0 (1 << 0) #define PLAYER_STATE2_0 (1 << 0)
@ -694,7 +694,7 @@ typedef struct WeaponInfo {
#define PLAYER_STATE2_10 (1 << 10) #define PLAYER_STATE2_10 (1 << 10)
#define PLAYER_STATE2_11 (1 << 11) #define PLAYER_STATE2_11 (1 << 11)
#define PLAYER_STATE2_12 (1 << 12) #define PLAYER_STATE2_12 (1 << 12)
#define PLAYER_STATE2_13 (1 << 13) #define PLAYER_STATE2_LOCK_ON_WITH_SWITCH (1 << 13) // Actor lock-on is active, specifically with Switch Targeting. Hold Targeting checks the state of the Z button instead of this flag.
#define PLAYER_STATE2_14 (1 << 14) #define PLAYER_STATE2_14 (1 << 14)
#define PLAYER_STATE2_15 (1 << 15) #define PLAYER_STATE2_15 (1 << 15)
#define PLAYER_STATE2_DO_ACTION_ENTER (1 << 16) // Sets the "Enter On A" DoAction #define PLAYER_STATE2_DO_ACTION_ENTER (1 << 16) // Sets the "Enter On A" DoAction
@ -721,7 +721,7 @@ typedef struct WeaponInfo {
#define PLAYER_STATE3_4 (1 << 4) #define PLAYER_STATE3_4 (1 << 4)
#define PLAYER_STATE3_5 (1 << 5) #define PLAYER_STATE3_5 (1 << 5)
#define PLAYER_STATE3_RESTORE_NAYRUS_LOVE (1 << 6) // Set by ocarina effects actors when destroyed to signal Nayru's Love may be restored (see `ACTOROVL_ALLOC_ABSOLUTE`) #define PLAYER_STATE3_RESTORE_NAYRUS_LOVE (1 << 6) // Set by ocarina effects actors when destroyed to signal Nayru's Love may be restored (see `ACTOROVL_ALLOC_ABSOLUTE`)
#define PLAYER_STATE3_7 (1 << 7) #define PLAYER_STATE3_FLYING_WITH_HOOKSHOT (1 << 7) // Flying in the air with the hookshot as it pulls Player toward its destination
typedef void (*PlayerActionFunc)(struct Player*, struct PlayState*); typedef void (*PlayerActionFunc)(struct Player*, struct PlayState*);
typedef s32 (*UpperActionFunc)(struct Player*, struct PlayState*); typedef s32 (*UpperActionFunc)(struct Player*, struct PlayState*);

View file

@ -492,7 +492,7 @@ void Player_SetBootData(PlayState* play, Player* this) {
int Player_InBlockingCsMode(PlayState* play, Player* this) { int Player_InBlockingCsMode(PlayState* play, Player* this) {
return (this->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_29)) || (this->csAction != PLAYER_CSACTION_NONE) || return (this->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_29)) || (this->csAction != PLAYER_CSACTION_NONE) ||
(play->transitionTrigger == TRANS_TRIGGER_START) || (this->stateFlags1 & PLAYER_STATE1_0) || (play->transitionTrigger == TRANS_TRIGGER_START) || (this->stateFlags1 & PLAYER_STATE1_0) ||
(this->stateFlags3 & PLAYER_STATE3_7) || (this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT) ||
((gSaveContext.magicState != MAGIC_STATE_IDLE) && (Player_ActionToMagicSpell(this, this->itemAction) >= 0)); ((gSaveContext.magicState != MAGIC_STATE_IDLE) && (Player_ActionToMagicSpell(this, this->itemAction) >= 0));
} }
@ -603,7 +603,7 @@ void Player_UpdateBottleHeld(PlayState* play, Player* this, s32 item, s32 itemAc
void func_8008EDF0(Player* this) { void func_8008EDF0(Player* this) {
this->focusActor = NULL; this->focusActor = NULL;
this->stateFlags2 &= ~PLAYER_STATE2_13; this->stateFlags2 &= ~PLAYER_STATE2_LOCK_ON_WITH_SWITCH;
} }
void func_8008EE08(Player* this) { void func_8008EE08(Player* this) {
@ -611,8 +611,8 @@ void func_8008EE08(Player* this) {
(this->stateFlags1 & (PLAYER_STATE1_21 | PLAYER_STATE1_23 | PLAYER_STATE1_27)) || (this->stateFlags1 & (PLAYER_STATE1_21 | PLAYER_STATE1_23 | PLAYER_STATE1_27)) ||
(!(this->stateFlags1 & (PLAYER_STATE1_18 | PLAYER_STATE1_19)) && (!(this->stateFlags1 & (PLAYER_STATE1_18 | PLAYER_STATE1_19)) &&
((this->actor.world.pos.y - this->actor.floorHeight) < 100.0f))) { ((this->actor.world.pos.y - this->actor.floorHeight) < 100.0f))) {
this->stateFlags1 &= ~(PLAYER_STATE1_15 | PLAYER_STATE1_16 | PLAYER_STATE1_PARALLEL | PLAYER_STATE1_18 | this->stateFlags1 &= ~(PLAYER_STATE1_Z_TARGETING | PLAYER_STATE1_16 | PLAYER_STATE1_PARALLEL |
PLAYER_STATE1_19 | PLAYER_STATE1_30); PLAYER_STATE1_18 | PLAYER_STATE1_19 | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE);
} else if (!(this->stateFlags1 & (PLAYER_STATE1_18 | PLAYER_STATE1_19 | PLAYER_STATE1_21))) { } else if (!(this->stateFlags1 & (PLAYER_STATE1_18 | PLAYER_STATE1_19 | PLAYER_STATE1_21))) {
this->stateFlags1 |= PLAYER_STATE1_19; this->stateFlags1 |= PLAYER_STATE1_19;
} }

View file

@ -2316,7 +2316,7 @@ void func_80833A20(Player* this, s32 newMeleeWeaponState) {
} }
s32 func_80833B2C(Player* this) { s32 func_80833B2C(Player* this) {
if (this->stateFlags1 & (PLAYER_STATE1_16 | PLAYER_STATE1_PARALLEL | PLAYER_STATE1_30)) { if (this->stateFlags1 & (PLAYER_STATE1_16 | PLAYER_STATE1_PARALLEL | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE)) {
return 1; return 1;
} else { } else {
return 0; return 0;
@ -3179,7 +3179,7 @@ s32 Player_SetupAction(PlayState* play, Player* this, PlayerActionFunc actionFun
this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_6 | PLAYER_STATE1_26 | PLAYER_STATE1_28 | PLAYER_STATE1_29 | this->stateFlags1 &= ~(PLAYER_STATE1_2 | PLAYER_STATE1_6 | PLAYER_STATE1_26 | PLAYER_STATE1_28 | PLAYER_STATE1_29 |
PLAYER_STATE1_31); PLAYER_STATE1_31);
this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_28); this->stateFlags2 &= ~(PLAYER_STATE2_19 | PLAYER_STATE2_27 | PLAYER_STATE2_28);
this->stateFlags3 &= ~(PLAYER_STATE3_1 | PLAYER_STATE3_3 | PLAYER_STATE3_7); this->stateFlags3 &= ~(PLAYER_STATE3_1 | PLAYER_STATE3_3 | PLAYER_STATE3_FLYING_WITH_HOOKSHOT);
this->av1.actionVar1 = 0; this->av1.actionVar1 = 0;
this->av2.actionVar2 = 0; this->av2.actionVar2 = 0;
@ -3404,7 +3404,7 @@ int Player_CanUpdateItems(Player* this) {
s32 Player_UpdateUpperBody(Player* this, PlayState* play) { s32 Player_UpdateUpperBody(Player* this, PlayState* play) {
if (!(this->stateFlags1 & PLAYER_STATE1_23) && (this->actor.parent != NULL) && Player_HoldsHookshot(this)) { if (!(this->stateFlags1 & PLAYER_STATE1_23) && (this->actor.parent != NULL) && Player_HoldsHookshot(this)) {
Player_SetupAction(play, this, Player_Action_80850AEC, 1); Player_SetupAction(play, this, Player_Action_80850AEC, 1);
this->stateFlags3 |= PLAYER_STATE3_7; this->stateFlags3 |= PLAYER_STATE3_FLYING_WITH_HOOKSHOT;
Player_AnimPlayOnce(play, this, &gPlayerAnim_link_hook_fly_start); Player_AnimPlayOnce(play, this, &gPlayerAnim_link_hook_fly_start);
Player_AnimReplaceApplyFlags(play, this, Player_AnimReplaceApplyFlags(play, this,
ANIM_FLAG_UPDATE_XZ | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_PLAYER_SETMOVE | ANIM_FLAG_UPDATE_XZ | ANIM_FLAG_UPDATE_Y | ANIM_FLAG_PLAYER_SETMOVE |
@ -3555,13 +3555,14 @@ void func_80836BEC(Player* this, PlayState* play) {
s32 isTalking; s32 isTalking;
if (!zButtonHeld) { if (!zButtonHeld) {
this->stateFlags1 &= ~PLAYER_STATE1_30; this->stateFlags1 &= ~PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE;
} }
if ((play->csCtx.state != CS_STATE_IDLE) || (this->csAction != PLAYER_CSACTION_NONE) || if ((play->csCtx.state != CS_STATE_IDLE) || (this->csAction != PLAYER_CSACTION_NONE) ||
(this->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_29)) || (this->stateFlags3 & PLAYER_STATE3_7)) { (this->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_29)) ||
(this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT)) {
this->unk_66C = 0; this->unk_66C = 0;
} else if (zButtonHeld || (this->stateFlags2 & PLAYER_STATE2_13) || (this->unk_684 != NULL)) { } else if (zButtonHeld || (this->stateFlags2 & PLAYER_STATE2_LOCK_ON_WITH_SWITCH) || (this->unk_684 != NULL)) {
if (this->unk_66C <= 5) { if (this->unk_66C <= 5) {
this->unk_66C = 5; this->unk_66C = 5;
} else { } else {
@ -3598,7 +3599,7 @@ void func_80836BEC(Player* this, PlayState* play) {
// Dark Link uses Hold Targeting. // Dark Link uses Hold Targeting.
usingHoldTargeting = (gSaveContext.zTargetSetting != 0) || (this->actor.category != ACTORCAT_PLAYER); usingHoldTargeting = (gSaveContext.zTargetSetting != 0) || (this->actor.category != ACTORCAT_PLAYER);
this->stateFlags1 |= PLAYER_STATE1_15; this->stateFlags1 |= PLAYER_STATE1_Z_TARGETING;
if ((nextLockOnActor != NULL) && !(nextLockOnActor->flags & ACTOR_FLAG_LOCK_ON_DISABLED)) { if ((nextLockOnActor != NULL) && !(nextLockOnActor->flags & ACTOR_FLAG_LOCK_ON_DISABLED)) {
@ -3613,7 +3614,7 @@ void func_80836BEC(Player* this, PlayState* play) {
// Set new lock-on // Set new lock-on
if (!usingHoldTargeting) { if (!usingHoldTargeting) {
this->stateFlags2 |= PLAYER_STATE2_13; this->stateFlags2 |= PLAYER_STATE2_LOCK_ON_WITH_SWITCH;
} }
this->focusActor = nextLockOnActor; this->focusActor = nextLockOnActor;
@ -3625,9 +3626,9 @@ void func_80836BEC(Player* this, PlayState* play) {
} }
} }
this->stateFlags1 &= ~PLAYER_STATE1_30; this->stateFlags1 &= ~PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE;
} else { } else {
if (!(this->stateFlags1 & (PLAYER_STATE1_PARALLEL | PLAYER_STATE1_30))) { if (!(this->stateFlags1 & (PLAYER_STATE1_PARALLEL | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE))) {
Player_SetParallel(this); Player_SetParallel(this);
} }
} }
@ -3637,7 +3638,7 @@ void func_80836BEC(Player* this, PlayState* play) {
if ((this->actor.category == ACTORCAT_PLAYER) && (this->focusActor != this->unk_684) && if ((this->actor.category == ACTORCAT_PLAYER) && (this->focusActor != this->unk_684) &&
Attention_ShouldReleaseLockOn(this->focusActor, this, ignoreLeash)) { Attention_ShouldReleaseLockOn(this->focusActor, this, ignoreLeash)) {
func_8008EDF0(this); func_8008EDF0(this);
this->stateFlags1 |= PLAYER_STATE1_30; this->stateFlags1 |= PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE;
} else if (this->focusActor != NULL) { } else if (this->focusActor != NULL) {
this->focusActor->attentionPriority = 40; this->focusActor->attentionPriority = 40;
} }
@ -3655,7 +3656,7 @@ void func_80836BEC(Player* this, PlayState* play) {
} }
} else { } else {
if (this->stateFlags1 & PLAYER_STATE1_PARALLEL) { if (this->stateFlags1 & PLAYER_STATE1_PARALLEL) {
this->stateFlags2 &= ~PLAYER_STATE2_13; this->stateFlags2 &= ~PLAYER_STATE2_LOCK_ON_WITH_SWITCH;
} else { } else {
func_8008EE08(this); func_8008EE08(this);
} }
@ -6020,7 +6021,7 @@ void func_8083C0E8(Player* this, PlayState* play) {
} }
void func_8083C148(Player* this, PlayState* play) { void func_8083C148(Player* this, PlayState* play) {
if (!(this->stateFlags3 & PLAYER_STATE3_7)) { if (!(this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT)) {
func_8083B010(this); func_8083B010(this);
if (this->stateFlags1 & PLAYER_STATE1_27) { if (this->stateFlags1 & PLAYER_STATE1_27) {
func_80838F18(play, this); func_80838F18(play, this);
@ -10764,7 +10765,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
if (this->csAction != PLAYER_CSACTION_NONE) { if (this->csAction != PLAYER_CSACTION_NONE) {
Camera_RequestMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_NORMAL); Camera_RequestMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_NORMAL);
} else if (!(this->stateFlags1 & PLAYER_STATE1_20)) { } else if (!(this->stateFlags1 & PLAYER_STATE1_20)) {
if ((this->actor.parent != NULL) && (this->stateFlags3 & PLAYER_STATE3_7)) { if ((this->actor.parent != NULL) && (this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT)) {
camMode = CAM_MODE_HOOKSHOT_FLY; camMode = CAM_MODE_HOOKSHOT_FLY;
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, this->actor.parent); Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, this->actor.parent);
} else if (Player_Action_8084377C == this->actionFunc) { } else if (Player_Action_8084377C == this->actionFunc) {
@ -10795,7 +10796,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
} else { } else {
camMode = CAM_MODE_LEDGE_HANG; camMode = CAM_MODE_LEDGE_HANG;
} }
} else if (this->stateFlags1 & (PLAYER_STATE1_PARALLEL | PLAYER_STATE1_30)) { } else if (this->stateFlags1 & (PLAYER_STATE1_PARALLEL | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE)) {
if (func_8002DD78(this) || func_808334B4(this)) { if (func_8002DD78(this) || func_808334B4(this)) {
camMode = CAM_MODE_Z_AIM; camMode = CAM_MODE_Z_AIM;
} else if (this->stateFlags1 & PLAYER_STATE1_21) { } else if (this->stateFlags1 & PLAYER_STATE1_21) {
@ -11949,7 +11950,7 @@ void Player_Action_8084B530(Player* this, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TALK; this->actor.flags &= ~ACTOR_FLAG_TALK;
if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE)) { if (!CHECK_FLAG_ALL(this->talkActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE)) {
this->stateFlags2 &= ~PLAYER_STATE2_13; this->stateFlags2 &= ~PLAYER_STATE2_LOCK_ON_WITH_SWITCH;
} }
Camera_SetFinishedFlag(Play_GetCamera(play, CAM_ID_MAIN)); Camera_SetFinishedFlag(Play_GetCamera(play, CAM_ID_MAIN));
@ -15400,7 +15401,7 @@ s32 Player_StartFishing(PlayState* play) {
s32 func_80852F38(PlayState* play, Player* this) { s32 func_80852F38(PlayState* play, Player* this) {
if (!Player_InBlockingCsMode(play, this) && (this->invincibilityTimer >= 0) && !func_8008F128(this) && if (!Player_InBlockingCsMode(play, this) && (this->invincibilityTimer >= 0) && !func_8008F128(this) &&
!(this->stateFlags3 & PLAYER_STATE3_7)) { !(this->stateFlags3 & PLAYER_STATE3_FLYING_WITH_HOOKSHOT)) {
func_80832564(play, this); func_80832564(play, this);
Player_SetupAction(play, this, Player_Action_8084F308, 0); Player_SetupAction(play, this, Player_Action_8084F308, 0);
Player_AnimPlayOnce(play, this, &gPlayerAnim_link_normal_re_dead_attack); Player_AnimPlayOnce(play, this, &gPlayerAnim_link_normal_re_dead_attack);