`Camera_KeepOn4` docs 3: name most `KEEPON4_FLAG_`

This commit is contained in:
Dragorn421 2025-06-26 21:39:56 +02:00
parent d44c341c2d
commit 076ed68198
No known key found for this signature in database
GPG Key ID: 05949E029F4EF294
3 changed files with 30 additions and 28 deletions

View File

@ -848,8 +848,8 @@ typedef struct KeepOn3 {
typedef struct KeepOn4ReadOnlyData {
/* 0x00 */ f32 yOffset;
/* 0x04 */ f32 eyeDist;
/* 0x08 */ f32 pitchTarget; // degrees
/* 0x0C */ f32 yawTarget; // degrees
/* 0x08 */ f32 pitchTarget; // degrees, usage varies with KEEPON4_FLAG_EYE_ flags
/* 0x0C */ f32 yawTarget; // degrees, usage varies with KEEPON4_FLAG_EYE_ flags
/* 0x10 */ f32 atOffsetPlayerForwards; // distance to offset `at` by, in the player's forwards direction
/* 0x14 */ f32 unk_14; // scale for stepping yaw and pitch of "at to eye" to target
/* 0x18 */ f32 fovTarget;
@ -889,13 +889,13 @@ typedef struct KeepOn4 {
/* 0x20 */ KeepOn4ReadWriteData rwData;
} KeepOn4; // size = 0x38
#define KEEPON4_FLAG_0 (1 << 0)
#define KEEPON4_FLAG_1 (1 << 1)
#define KEEPON4_FLAG_2 (1 << 2)
#define KEEPON4_FLAG_3 (1 << 3)
#define KEEPON4_FLAG_NO_CHECK_COL (1 << 0) // If set, disables checking for colliders and collision to place the camera eye. Unused
#define KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER (1 << 1) // pitch: provided, yaw: offset from behind player
#define KEEPON4_FLAG_EYE_ABS (1 << 2) // pitch: provided, yaw: provided. Unused
#define KEEPON4_FLAG_EYE_FROM_TARGET (1 << 3) // pitch and yaw: depends on x/y rotations of the camera `target`, plus offsets
#define KEEPON4_FLAG_4 (1 << 4)
#define KEEPON4_FLAG_5 (1 << 5)
#define KEEPON4_FLAG_6 (1 << 6)
#define KEEPON4_FLAG_NOOP (1 << 5) // No effect. Only set for CAM_ITEM_TYPE_11
#define KEEPON4_FLAG_EYE_KEEP_YAW (1 << 6) // pitch: provided, yaw: retain current yaw
#define KEEPON4_FLAG_7 (1 << 7)
#define CAM_FUNCDATA_KEEP4(yOffset, eyeDist, pitchTarget, yawTarget, atOffsetPlayerForwards, fov, interfaceField, unk_14, initTimer) \

View File

@ -3757,16 +3757,16 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->eyeDist = playerHeight * 0.5f * yNormal;
roData->pitchTarget = -20.0f;
roData->yawTarget = 0.0f;
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_6);
roData->interfaceField = CAM_INTERFACE_FIELD(
CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_EYE_KEEP_YAW);
break;
case CAM_ITEM_TYPE_5:
roData->yOffset = playerHeight * -0.4f * yNormal;
roData->pitchTarget = -10.0f;
roData->yawTarget = 45.0f;
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON4_FLAG_1);
roData->interfaceField = CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL,
KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER);
break;
case CAM_ITEM_TYPE_10:
@ -3775,8 +3775,8 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->pitchTarget = -15.0f;
roData->yawTarget = 175.0f;
roData->fovTarget = 70.0f;
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_NOTHING_ALT, KEEPON4_FLAG_1);
roData->interfaceField = CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_NOTHING_ALT,
KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER);
roData->initTimer = 0x3C;
break;
@ -3787,7 +3787,7 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->yawTarget = 120.0f;
roData->atOffsetPlayerForwards = player->stateFlags1 & PLAYER_STATE1_27 ? 0.0f : 20.0f;
roData->interfaceField = CAM_INTERFACE_FIELD(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NOTHING_ALT,
KEEPON4_FLAG_4 | KEEPON4_FLAG_1);
KEEPON4_FLAG_4 | KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER);
roData->initTimer = 0x1E;
roData->fovTarget = 50.0f;
break;
@ -3795,8 +3795,8 @@ s32 Camera_KeepOn4(Camera* camera) {
case CAM_ITEM_TYPE_90:
roData->yOffset = playerHeight * -0.3f * yNormal;
roData->fovTarget = 45.0f;
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1);
roData->interfaceField = CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE,
KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER);
break;
case CAM_ITEM_TYPE_91:
@ -3806,7 +3806,7 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->yawTarget = 10.0f;
roData->fovTarget = 55.0f;
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_3);
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_EYE_FROM_TARGET);
break;
case CAM_ITEM_TYPE_81:
@ -3826,8 +3826,9 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->eyeDist = playerHeight * 0.7f * yNormal;
roData->yawTarget = 130.0f;
roData->atOffsetPlayerForwards = 10.0f;
roData->interfaceField = CAM_INTERFACE_FIELD(
CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_5 | KEEPON4_FLAG_1);
roData->interfaceField =
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE,
KEEPON4_FLAG_NOOP | KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER);
break;
default:
@ -3860,15 +3861,15 @@ s32 Camera_KeepOn4(Camera* camera) {
camera->stateFlags &= ~(CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
rwData->animTimer = roData->initTimer;
rwData->unk_08 = playerPosRot->pos.y - camera->playerPosDelta.y;
if (roData->interfaceField & KEEPON4_FLAG_1) {
if (roData->interfaceField & KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER) {
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
atToEyeBaseYaw = (s16)((s16)(playerPosRot->rot.y - 0x7FFF) - atToEyeNextDir.yaw) > 0
? (s16)(playerPosRot->rot.y - 0x7FFF) + CAM_DEG_TO_BINANG(roData->yawTarget)
: (s16)(playerPosRot->rot.y - 0x7FFF) - CAM_DEG_TO_BINANG(roData->yawTarget);
} else if (roData->interfaceField & KEEPON4_FLAG_2) {
} else if (roData->interfaceField & KEEPON4_FLAG_EYE_ABS) {
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
atToEyeBaseYaw = CAM_DEG_TO_BINANG(roData->yawTarget);
} else if ((roData->interfaceField & KEEPON4_FLAG_3) && camera->target != NULL) {
} else if ((roData->interfaceField & KEEPON4_FLAG_EYE_FROM_TARGET) && camera->target != NULL) {
PosRot sp60;
sp60 = Actor_GetWorldPosShapeRot(camera->target);
@ -3888,7 +3889,7 @@ s32 Camera_KeepOn4(Camera* camera) {
: sp9E - CAM_DEG_TO_BINANG(roData->yawTarget);
lineOCCheckExclusions[1] = camera->target;
lineOCCheckNumExclusions++;
} else if (roData->interfaceField & KEEPON4_FLAG_6) {
} else if (roData->interfaceField & KEEPON4_FLAG_EYE_KEEP_YAW) {
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
atToEyeBaseYaw = atToEyeNextDir.yaw;
} else {
@ -3900,7 +3901,7 @@ s32 Camera_KeepOn4(Camera* camera) {
vecGeo.yaw = atToEyeBaseYaw;
vecGeo.r = roData->eyeDist;
sEyeCandidate = Camera_AddVecGeoToVec3f(&sAtTarget, &vecGeo);
if (!(roData->interfaceField & KEEPON4_FLAG_0)) {
if (!(roData->interfaceField & KEEPON4_FLAG_NO_CHECK_COL)) {
angleCnt = ARRAY_COUNT(sCamCheckAroundOffsetsYaw);
for (i = 0; i < angleCnt; i++) {
if (!CollisionCheck_LineOCCheck(camera->play, &camera->play->colChkCtx, &sAtTarget, &sEyeCandidate,

View File

@ -1264,9 +1264,10 @@ CameraModeValue sSetFireBirdsEyeModeWallClimbData[] = {
*/
CameraModeValue sSetTurnAroundModeNormalData[] = {
CAM_FUNCDATA_KEEP4(
-30, 120, -10, 170, 0, 60,
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_1), 25, 6),
CAM_FUNCDATA_KEEP4(-30, 120, -10, 170, 0, 60,
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE,
KEEPON4_FLAG_EYE_YAW_REL_TO_PLAYER),
25, 6),
};
/**