From 2056ae5f1a0ddb618997e143a9d0ae9fc7d909eb Mon Sep 17 00:00:00 2001 From: fig02 Date: Sat, 7 Sep 2024 17:53:48 -0400 Subject: Document Attention/Lock-on Related Actor Flags (#2161) * document actor flags 0, 2, 3, and 27 * format * fly -> hover * wodring --- src/code/z_actor.c | 27 +++++++++++++++------------ src/code/z_en_a_keep.c | 4 ++-- src/code/z_player_call.c | 3 ++- 3 files changed, 19 insertions(+), 15 deletions(-) (limited to 'src/code') diff --git a/src/code/z_actor.c b/src/code/z_actor.c index fd5eb6806..069bca7fa 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -431,7 +431,7 @@ void Attention_Draw(Attention* attention, PlayState* play) { actor = attention->arrowHoverActor; - if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_27)) { + if ((actor != NULL) && !(actor->flags & ACTOR_FLAG_LOCK_ON_DISABLED)) { AttentionColor* attentionColor = &sAttentionColors[actor->category]; POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_7); @@ -545,8 +545,9 @@ void Attention_Update(Attention* attention, Player* player, Actor* playerFocusAc attention->reticleFadeAlphaControl = 0; } - lockOnSfxId = CHECK_FLAG_ALL(playerFocusActor->flags, ACTOR_FLAG_0 | ACTOR_FLAG_2) ? NA_SE_SY_LOCK_ON - : NA_SE_SY_LOCK_ON_HUMAN; + lockOnSfxId = CHECK_FLAG_ALL(playerFocusActor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE) + ? NA_SE_SY_LOCK_ON + : NA_SE_SY_LOCK_ON_HUMAN; Sfx_PlaySfxCentered(lockOnSfxId); } @@ -848,7 +849,7 @@ s32 TitleCard_Clear(PlayState* play, TitleCardContext* titleCtx) { void Actor_Kill(Actor* actor) { actor->draw = NULL; actor->update = NULL; - actor->flags &= ~ACTOR_FLAG_0; + actor->flags &= ~ACTOR_FLAG_ATTENTION_ENABLED; } void Actor_SetWorldToHome(Actor* actor) { @@ -1589,7 +1590,7 @@ f32 Attention_WeightedDistToPlayerSq(Actor* actor, Player* player, s16 playerSha s16 yawTempAbs = ABS(yawTemp); if (player->focusActor != NULL) { - if ((yawTempAbs > 0x4000) || (actor->flags & ACTOR_FLAG_27)) { + if ((yawTempAbs > 0x4000) || (actor->flags & ACTOR_FLAG_LOCK_ON_DISABLED)) { return MAXFLOAT; } else { f32 adjDistSq; @@ -1650,14 +1651,14 @@ u32 Attention_ActorIsInRange(Actor* actor, f32 distSq) { * Returns true if an actor lock-on should be released. * This function does not actually release the lock-on, as that is Player's responsibility. * - * If an actor's update function is NULL or `ACTOR_FLAG_0` is unset, the lock-on should be released. + * If an actor's update function is NULL or `ACTOR_FLAG_ATTENTION_ENABLED` is unset, the lock-on should be released. * * There is also a check for Player exceeding the lock-on leash distance. * Note that this check will be ignored if `ignoreLeash` is true. * */ s32 Attention_ShouldReleaseLockOn(Actor* actor, Player* player, s32 ignoreLeash) { - if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_0)) { + if ((actor->update == NULL) || !(actor->flags & ACTOR_FLAG_ATTENTION_ENABLED)) { return true; } @@ -3208,7 +3209,7 @@ s16 sAttentionPlayerRotY; * To be considered an attention actor the actor needs to: * - Have a non-NULL update function (still active) * - Not be player (this is technically a redundant check because the PLAYER category is never searched) - * - Have `ACTOR_FLAG_0` set + * - Have `ACTOR_FLAG_ATTENTION_ENABLED` set * - Not be the current focus actor * - Be the closest attention actor found so far * - Be within range, specified by attentionRangeType @@ -3233,8 +3234,10 @@ void Attention_FindActorInCategory(PlayState* play, ActorContext* actorCtx, Play playerFocusActor = player->focusActor; while (actor != NULL) { - if ((actor->update != NULL) && ((Player*)actor != player) && CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_0)) { - if ((actorCategory == ACTORCAT_ENEMY) && CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_0 | ACTOR_FLAG_2) && + if ((actor->update != NULL) && ((Player*)actor != player) && + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_ATTENTION_ENABLED)) { + if ((actorCategory == ACTORCAT_ENEMY) && + CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE) && (actor->xyzDistToPlayerSq < SQ(500.0f)) && (actor->xyzDistToPlayerSq < sBgmEnemyDistSq)) { actorCtx->attention.bgmEnemy = actor; sBgmEnemyDistSq = actor->xyzDistToPlayerSq; @@ -4335,10 +4338,10 @@ s16 func_80034DD4(Actor* actor, PlayState* play, s16 arg2, f32 arg3) { } if (arg3 < var) { - actor->flags &= ~ACTOR_FLAG_0; + actor->flags &= ~ACTOR_FLAG_ATTENTION_ENABLED; Math_SmoothStepToS(&arg2, 0, 6, 0x14, 1); } else { - actor->flags |= ACTOR_FLAG_0; + actor->flags |= ACTOR_FLAG_ATTENTION_ENABLED; Math_SmoothStepToS(&arg2, 0xFF, 6, 0x14, 1); } diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c index 80e49121e..b6b513ce6 100644 --- a/src/code/z_en_a_keep.c +++ b/src/code/z_en_a_keep.c @@ -132,7 +132,7 @@ void EnAObj_Init(Actor* thisx, PlayState* play) { break; case A_OBJ_UNKNOWN_6: this->focusYoffset = 10.0f; - thisx->flags |= ACTOR_FLAG_0; + thisx->flags |= ACTOR_FLAG_ATTENTION_ENABLED; this->dyna.bgId = 5; thisx->gravity = -2.0f; EnAObj_SetupWaitTalk(this, thisx->params); @@ -146,7 +146,7 @@ void EnAObj_Init(Actor* thisx, PlayState* play) { case A_OBJ_SIGNPOST_ARROW: thisx->textId = (this->textId & 0xFF) | 0x300; thisx->lockOnArrowOffset = 500.0f; - thisx->flags |= ACTOR_FLAG_0 | ACTOR_FLAG_3; + thisx->flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_NEUTRAL; this->focusYoffset = 45.0f; EnAObj_SetupWaitTalk(this, thisx->params); Collider_InitCylinder(play, &this->collider); diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index 2235c8b3d..7b44d6afe 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -1,6 +1,7 @@ #include "global.h" -#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_2 | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_25 | ACTOR_FLAG_26) +#define FLAGS \ + (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE | ACTOR_FLAG_4 | ACTOR_FLAG_5 | ACTOR_FLAG_25 | ACTOR_FLAG_26) #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" -- cgit v1.2.3