mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-04 15:04:31 +00:00
Camera_KeepOn4
docs 2: RO and RW data (#2632)
* `Camera_KeepOn4` docs 2: RO and RW data * fix unk_14 rename * CAM_DATA_UNK_22 -> CAM_DATA_INIT_TIMER
This commit is contained in:
parent
b7935dad12
commit
d44c341c2d
3 changed files with 113 additions and 113 deletions
|
@ -334,7 +334,7 @@ typedef enum CameraDataType {
|
||||||
/* 0x13 */ CAM_DATA_AT_OFFSET_X,
|
/* 0x13 */ CAM_DATA_AT_OFFSET_X,
|
||||||
/* 0x14 */ CAM_DATA_AT_OFFSET_Y,
|
/* 0x14 */ CAM_DATA_AT_OFFSET_Y,
|
||||||
/* 0x15 */ CAM_DATA_AT_OFFSET_Z,
|
/* 0x15 */ CAM_DATA_AT_OFFSET_Z,
|
||||||
/* 0x16 */ CAM_DATA_UNK_22,
|
/* 0x16 */ CAM_DATA_INIT_TIMER,
|
||||||
/* 0x17 */ CAM_DATA_UNK_23,
|
/* 0x17 */ CAM_DATA_UNK_23,
|
||||||
/* 0x18 */ CAM_DATA_FOV_SCALE,
|
/* 0x18 */ CAM_DATA_FOV_SCALE,
|
||||||
/* 0x19 */ CAM_DATA_YAW_SCALE,
|
/* 0x19 */ CAM_DATA_YAW_SCALE,
|
||||||
|
@ -846,15 +846,15 @@ typedef struct KeepOn3 {
|
||||||
{ interfaceField, CAM_DATA_INTERFACE_FIELD }
|
{ interfaceField, CAM_DATA_INTERFACE_FIELD }
|
||||||
|
|
||||||
typedef struct KeepOn4ReadOnlyData {
|
typedef struct KeepOn4ReadOnlyData {
|
||||||
/* 0x00 */ f32 unk_00;
|
/* 0x00 */ f32 yOffset;
|
||||||
/* 0x04 */ f32 unk_04;
|
/* 0x04 */ f32 eyeDist;
|
||||||
/* 0x08 */ f32 unk_08;
|
/* 0x08 */ f32 pitchTarget; // degrees
|
||||||
/* 0x0C */ f32 unk_0C;
|
/* 0x0C */ f32 yawTarget; // degrees
|
||||||
/* 0x10 */ f32 unk_10;
|
/* 0x10 */ f32 atOffsetPlayerForwards; // distance to offset `at` by, in the player's forwards direction
|
||||||
/* 0x14 */ f32 unk_14;
|
/* 0x14 */ f32 unk_14; // scale for stepping yaw and pitch of "at to eye" to target
|
||||||
/* 0x18 */ f32 unk_18;
|
/* 0x18 */ f32 fovTarget;
|
||||||
/* 0x1C */ s16 interfaceField;
|
/* 0x1C */ s16 interfaceField;
|
||||||
/* 0x1E */ s16 unk_1E;
|
/* 0x1E */ s16 initTimer;
|
||||||
} KeepOn4ReadOnlyData; // size = 0x20
|
} KeepOn4ReadOnlyData; // size = 0x20
|
||||||
|
|
||||||
typedef enum CameraItemType {
|
typedef enum CameraItemType {
|
||||||
|
@ -874,14 +874,14 @@ typedef enum CameraItemType {
|
||||||
} CameraItemType;
|
} CameraItemType;
|
||||||
|
|
||||||
typedef struct KeepOn4ReadWriteData {
|
typedef struct KeepOn4ReadWriteData {
|
||||||
/* 0x00 */ f32 unk_00;
|
/* 0x00 */ f32 atToEyeTargetStepYaw; // binang
|
||||||
/* 0x04 */ f32 unk_04;
|
/* 0x04 */ f32 atToEyeTargetStepPitch; // binang
|
||||||
/* 0x08 */ f32 unk_08;
|
/* 0x08 */ f32 unk_08; // set but unused
|
||||||
/* 0x0C */ s16 unk_0C;
|
/* 0x0C */ s16 atToEyeTargetYaw;
|
||||||
/* 0x0E */ s16 unk_0E;
|
/* 0x0E */ s16 atToEyeTargetPitch;
|
||||||
/* 0x10 */ s16 unk_10;
|
/* 0x10 */ s16 animTimer;
|
||||||
/* 0x12 */ s16 unk_12;
|
/* 0x12 */ s16 unk_12; // set but unused
|
||||||
/* 0x14 */ s16 unk_14;
|
/* 0x14 */ s16 itemType;
|
||||||
} KeepOn4ReadWriteData; // size = 0x18
|
} KeepOn4ReadWriteData; // size = 0x18
|
||||||
|
|
||||||
typedef struct KeepOn4 {
|
typedef struct KeepOn4 {
|
||||||
|
@ -898,16 +898,16 @@ typedef struct KeepOn4 {
|
||||||
#define KEEPON4_FLAG_6 (1 << 6)
|
#define KEEPON4_FLAG_6 (1 << 6)
|
||||||
#define KEEPON4_FLAG_7 (1 << 7)
|
#define KEEPON4_FLAG_7 (1 << 7)
|
||||||
|
|
||||||
#define CAM_FUNCDATA_KEEP4(yOffset, eyeDist, pitchTarget, yawTarget, atOffsetZ, fov, interfaceField, yawUpdateRateTarget, unk_22) \
|
#define CAM_FUNCDATA_KEEP4(yOffset, eyeDist, pitchTarget, yawTarget, atOffsetPlayerForwards, fov, interfaceField, unk_14, initTimer) \
|
||||||
{ yOffset, CAM_DATA_Y_OFFSET }, \
|
{ yOffset, CAM_DATA_Y_OFFSET }, \
|
||||||
{ eyeDist, CAM_DATA_EYE_DIST }, \
|
{ eyeDist, CAM_DATA_EYE_DIST }, \
|
||||||
{ pitchTarget, CAM_DATA_PITCH_TARGET }, \
|
{ pitchTarget, CAM_DATA_PITCH_TARGET }, \
|
||||||
{ yawTarget, CAM_DATA_YAW_TARGET }, \
|
{ yawTarget, CAM_DATA_YAW_TARGET }, \
|
||||||
{ atOffsetZ, CAM_DATA_AT_OFFSET_Z }, \
|
{ atOffsetPlayerForwards, CAM_DATA_AT_OFFSET_Z }, \
|
||||||
{ fov, CAM_DATA_FOV }, \
|
{ fov, CAM_DATA_FOV }, \
|
||||||
{ interfaceField, CAM_DATA_INTERFACE_FIELD }, \
|
{ interfaceField, CAM_DATA_INTERFACE_FIELD }, \
|
||||||
{ yawUpdateRateTarget, CAM_DATA_YAW_UPDATE_RATE_TARGET }, \
|
{ unk_14, CAM_DATA_YAW_UPDATE_RATE_TARGET }, \
|
||||||
{ unk_22, CAM_DATA_UNK_22 }
|
{ initTimer, CAM_DATA_INIT_TIMER }
|
||||||
|
|
||||||
typedef struct KeepOn0ReadOnlyData {
|
typedef struct KeepOn0ReadOnlyData {
|
||||||
/* 0x00 */ f32 fovScale;
|
/* 0x00 */ f32 fovScale;
|
||||||
|
@ -1463,7 +1463,7 @@ typedef struct Special5 {
|
||||||
{ yOffset, CAM_DATA_Y_OFFSET }, \
|
{ yOffset, CAM_DATA_Y_OFFSET }, \
|
||||||
{ eyeDist, CAM_DATA_EYE_DIST }, \
|
{ eyeDist, CAM_DATA_EYE_DIST }, \
|
||||||
{ eyeDistNext, CAM_DATA_EYE_DIST_NEXT }, \
|
{ eyeDistNext, CAM_DATA_EYE_DIST_NEXT }, \
|
||||||
{ unk_22, CAM_DATA_UNK_22 }, \
|
{ unk_22, CAM_DATA_INIT_TIMER }, \
|
||||||
{ pitchTarget, CAM_DATA_PITCH_TARGET }, \
|
{ pitchTarget, CAM_DATA_PITCH_TARGET }, \
|
||||||
{ fov, CAM_DATA_FOV }, \
|
{ fov, CAM_DATA_FOV }, \
|
||||||
{ atLerpStepScale, CAM_DATA_AT_LERP_STEP_SCALE }, \
|
{ atLerpStepScale, CAM_DATA_AT_LERP_STEP_SCALE }, \
|
||||||
|
@ -1477,7 +1477,7 @@ typedef struct Special5 {
|
||||||
{ pitchTarget, CAM_DATA_PITCH_TARGET }, \
|
{ pitchTarget, CAM_DATA_PITCH_TARGET }, \
|
||||||
{ fov, CAM_DATA_FOV }, \
|
{ fov, CAM_DATA_FOV }, \
|
||||||
{ atLerpStepScale, CAM_DATA_AT_LERP_STEP_SCALE }, \
|
{ atLerpStepScale, CAM_DATA_AT_LERP_STEP_SCALE }, \
|
||||||
{ unk_22, CAM_DATA_UNK_22 }, \
|
{ unk_22, CAM_DATA_INIT_TIMER }, \
|
||||||
{ interfaceField, CAM_DATA_INTERFACE_FIELD }
|
{ interfaceField, CAM_DATA_INTERFACE_FIELD }
|
||||||
|
|
||||||
typedef struct Special7ReadWriteData {
|
typedef struct Special7ReadWriteData {
|
||||||
|
|
|
@ -3698,12 +3698,12 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
camera->play->view.unk_124 = camera->camId | 0x50;
|
camera->play->view.unk_124 = camera->camId | 0x50;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
rwData->unk_14 = *itemType;
|
rwData->itemType = *itemType;
|
||||||
camera->stateFlags &= ~CAM_STATE_LOCK_MODE;
|
camera->stateFlags &= ~CAM_STATE_LOCK_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rwData->unk_14 != *itemType) {
|
if (rwData->itemType != *itemType) {
|
||||||
PRINTF(VT_COL(YELLOW, BLACK) "camera: item: item type changed %d -> %d\n" VT_RST, rwData->unk_14, *itemType);
|
PRINTF(VT_COL(YELLOW, BLACK) "camera: item: item type changed %d -> %d\n" VT_RST, rwData->itemType, *itemType);
|
||||||
camera->animState = 20;
|
camera->animState = 20;
|
||||||
camera->stateFlags |= CAM_STATE_LOCK_MODE;
|
camera->stateFlags |= CAM_STATE_LOCK_MODE;
|
||||||
camera->stateFlags &= ~(CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
|
camera->stateFlags &= ~(CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
|
||||||
|
@ -3717,115 +3717,115 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
|
CameraModeValue* values = sCameraSettings[camera->setting].cameraModes[camera->mode].values;
|
||||||
f32 yNormal = 1.0f + t - (68.0f / playerHeight * t);
|
f32 yNormal = 1.0f + t - (68.0f / playerHeight * t);
|
||||||
|
|
||||||
roData->unk_00 = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal;
|
roData->yOffset = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal;
|
||||||
roData->unk_04 = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal;
|
roData->eyeDist = GET_NEXT_SCALED_RO_DATA(values) * playerHeight * yNormal;
|
||||||
roData->unk_08 = GET_NEXT_RO_DATA(values);
|
roData->pitchTarget = GET_NEXT_RO_DATA(values);
|
||||||
roData->unk_0C = GET_NEXT_RO_DATA(values);
|
roData->yawTarget = GET_NEXT_RO_DATA(values);
|
||||||
roData->unk_10 = GET_NEXT_RO_DATA(values);
|
roData->atOffsetPlayerForwards = GET_NEXT_RO_DATA(values);
|
||||||
roData->unk_18 = GET_NEXT_RO_DATA(values);
|
roData->fovTarget = GET_NEXT_RO_DATA(values);
|
||||||
roData->interfaceField = GET_NEXT_RO_DATA(values);
|
roData->interfaceField = GET_NEXT_RO_DATA(values);
|
||||||
roData->unk_14 = GET_NEXT_SCALED_RO_DATA(values);
|
roData->unk_14 = GET_NEXT_SCALED_RO_DATA(values);
|
||||||
roData->unk_1E = GET_NEXT_RO_DATA(values);
|
roData->initTimer = GET_NEXT_RO_DATA(values);
|
||||||
PRINTF("camera: item: type %d\n", *itemType);
|
PRINTF("camera: item: type %d\n", *itemType);
|
||||||
switch (*itemType) {
|
switch (*itemType) {
|
||||||
case CAM_ITEM_TYPE_1:
|
case CAM_ITEM_TYPE_1:
|
||||||
roData->unk_00 = playerHeight * -0.6f * yNormal;
|
roData->yOffset = playerHeight * -0.6f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 2.0f * yNormal;
|
roData->eyeDist = playerHeight * 2.0f * yNormal;
|
||||||
roData->unk_08 = 10.0f;
|
roData->pitchTarget = 10.0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_2:
|
case CAM_ITEM_TYPE_2:
|
||||||
case CAM_ITEM_TYPE_3:
|
case CAM_ITEM_TYPE_3:
|
||||||
roData->unk_08 = -20.0f;
|
roData->pitchTarget = -20.0f;
|
||||||
roData->unk_18 = 80.0f;
|
roData->fovTarget = 80.0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_4:
|
case CAM_ITEM_TYPE_4:
|
||||||
roData->unk_00 = playerHeight * -0.2f * yNormal;
|
roData->yOffset = playerHeight * -0.2f * yNormal;
|
||||||
roData->unk_08 = 25.0f;
|
roData->pitchTarget = 25.0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_8:
|
case CAM_ITEM_TYPE_8:
|
||||||
roData->unk_00 = playerHeight * -0.2f * yNormal;
|
roData->yOffset = playerHeight * -0.2f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 0.8f * yNormal;
|
roData->eyeDist = playerHeight * 0.8f * yNormal;
|
||||||
roData->unk_08 = 50.0f;
|
roData->pitchTarget = 50.0f;
|
||||||
roData->unk_18 = 70.0f;
|
roData->fovTarget = 70.0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_9:
|
case CAM_ITEM_TYPE_9:
|
||||||
roData->unk_00 = playerHeight * 0.1f * yNormal;
|
roData->yOffset = playerHeight * 0.1f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 0.5f * yNormal;
|
roData->eyeDist = playerHeight * 0.5f * yNormal;
|
||||||
roData->unk_08 = -20.0f;
|
roData->pitchTarget = -20.0f;
|
||||||
roData->unk_0C = 0.0f;
|
roData->yawTarget = 0.0f;
|
||||||
roData->interfaceField =
|
roData->interfaceField =
|
||||||
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_6);
|
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_5:
|
case CAM_ITEM_TYPE_5:
|
||||||
roData->unk_00 = playerHeight * -0.4f * yNormal;
|
roData->yOffset = playerHeight * -0.4f * yNormal;
|
||||||
roData->unk_08 = -10.0f;
|
roData->pitchTarget = -10.0f;
|
||||||
roData->unk_0C = 45.0f;
|
roData->yawTarget = 45.0f;
|
||||||
roData->interfaceField =
|
roData->interfaceField =
|
||||||
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON4_FLAG_1);
|
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_ALL, KEEPON4_FLAG_1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_10:
|
case CAM_ITEM_TYPE_10:
|
||||||
roData->unk_00 = playerHeight * -0.5f * yNormal;
|
roData->yOffset = playerHeight * -0.5f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 1.5f * yNormal;
|
roData->eyeDist = playerHeight * 1.5f * yNormal;
|
||||||
roData->unk_08 = -15.0f;
|
roData->pitchTarget = -15.0f;
|
||||||
roData->unk_0C = 175.0f;
|
roData->yawTarget = 175.0f;
|
||||||
roData->unk_18 = 70.0f;
|
roData->fovTarget = 70.0f;
|
||||||
roData->interfaceField =
|
roData->interfaceField =
|
||||||
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_NOTHING_ALT, KEEPON4_FLAG_1);
|
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_NOTHING_ALT, KEEPON4_FLAG_1);
|
||||||
roData->unk_1E = 0x3C;
|
roData->initTimer = 0x3C;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_12:
|
case CAM_ITEM_TYPE_12:
|
||||||
roData->unk_00 = playerHeight * -0.6f * yNormal;
|
roData->yOffset = playerHeight * -0.6f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 1.6f * yNormal;
|
roData->eyeDist = playerHeight * 1.6f * yNormal;
|
||||||
roData->unk_08 = -2.0f;
|
roData->pitchTarget = -2.0f;
|
||||||
roData->unk_0C = 120.0f;
|
roData->yawTarget = 120.0f;
|
||||||
roData->unk_10 = player->stateFlags1 & PLAYER_STATE1_27 ? 0.0f : 20.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,
|
roData->interfaceField = CAM_INTERFACE_FIELD(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NOTHING_ALT,
|
||||||
KEEPON4_FLAG_4 | KEEPON4_FLAG_1);
|
KEEPON4_FLAG_4 | KEEPON4_FLAG_1);
|
||||||
roData->unk_1E = 0x1E;
|
roData->initTimer = 0x1E;
|
||||||
roData->unk_18 = 50.0f;
|
roData->fovTarget = 50.0f;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_90:
|
case CAM_ITEM_TYPE_90:
|
||||||
roData->unk_00 = playerHeight * -0.3f * yNormal;
|
roData->yOffset = playerHeight * -0.3f * yNormal;
|
||||||
roData->unk_18 = 45.0f;
|
roData->fovTarget = 45.0f;
|
||||||
roData->interfaceField =
|
roData->interfaceField =
|
||||||
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1);
|
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_91:
|
case CAM_ITEM_TYPE_91:
|
||||||
roData->unk_00 = playerHeight * -0.1f * yNormal;
|
roData->yOffset = playerHeight * -0.1f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 1.5f * yNormal;
|
roData->eyeDist = playerHeight * 1.5f * yNormal;
|
||||||
roData->unk_08 = -3.0f;
|
roData->pitchTarget = -3.0f;
|
||||||
roData->unk_0C = 10.0f;
|
roData->yawTarget = 10.0f;
|
||||||
roData->unk_18 = 55.0f;
|
roData->fovTarget = 55.0f;
|
||||||
roData->interfaceField =
|
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_3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_81:
|
case CAM_ITEM_TYPE_81:
|
||||||
roData->unk_00 = playerHeight * -0.3f * yNormal;
|
roData->yOffset = playerHeight * -0.3f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 1.5f * yNormal;
|
roData->eyeDist = playerHeight * 1.5f * yNormal;
|
||||||
roData->unk_08 = 2.0f;
|
roData->pitchTarget = 2.0f;
|
||||||
roData->unk_18 = 45.0f;
|
roData->fovTarget = 45.0f;
|
||||||
roData->unk_0C = 20.0f;
|
roData->yawTarget = 20.0f;
|
||||||
roData->unk_10 = 20.0f;
|
roData->atOffsetPlayerForwards = 20.0f;
|
||||||
roData->interfaceField =
|
roData->interfaceField =
|
||||||
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_NOTHING_ALT, KEEPON4_FLAG_7);
|
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_NOTHING_ALT, KEEPON4_FLAG_7);
|
||||||
roData->unk_1E = 0x1E;
|
roData->initTimer = 0x1E;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CAM_ITEM_TYPE_11:
|
case CAM_ITEM_TYPE_11:
|
||||||
roData->unk_00 = playerHeight * -0.19f * yNormal;
|
roData->yOffset = playerHeight * -0.19f * yNormal;
|
||||||
roData->unk_04 = playerHeight * 0.7f * yNormal;
|
roData->eyeDist = playerHeight * 0.7f * yNormal;
|
||||||
roData->unk_0C = 130.0f;
|
roData->yawTarget = 130.0f;
|
||||||
roData->unk_10 = 10.0f;
|
roData->atOffsetPlayerForwards = 10.0f;
|
||||||
roData->interfaceField = CAM_INTERFACE_FIELD(
|
roData->interfaceField = CAM_INTERFACE_FIELD(
|
||||||
CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_5 | KEEPON4_FLAG_1);
|
CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_5 | KEEPON4_FLAG_1);
|
||||||
break;
|
break;
|
||||||
|
@ -3844,10 +3844,10 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
sAtTarget = playerPosRot->pos;
|
sAtTarget = playerPosRot->pos;
|
||||||
sAtTarget.y += playerHeight;
|
sAtTarget.y += playerHeight;
|
||||||
temp_f0_2 = BgCheck_CameraRaycastDown2(&camera->play->colCtx, &spC0, &i, &sAtTarget);
|
temp_f0_2 = BgCheck_CameraRaycastDown2(&camera->play->colCtx, &spC0, &i, &sAtTarget);
|
||||||
if (temp_f0_2 > (roData->unk_00 + sAtTarget.y)) {
|
if (temp_f0_2 > (roData->yOffset + sAtTarget.y)) {
|
||||||
sAtTarget.y = temp_f0_2 + 10.0f;
|
sAtTarget.y = temp_f0_2 + 10.0f;
|
||||||
} else {
|
} else {
|
||||||
sAtTarget.y += roData->unk_00;
|
sAtTarget.y += roData->yOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
lineOCCheckNumExclusions = 0;
|
lineOCCheckNumExclusions = 0;
|
||||||
|
@ -3858,38 +3858,38 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
lineOCCheckNumExclusions++;
|
lineOCCheckNumExclusions++;
|
||||||
func_80043ABC(camera);
|
func_80043ABC(camera);
|
||||||
camera->stateFlags &= ~(CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
|
camera->stateFlags &= ~(CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
|
||||||
rwData->unk_10 = roData->unk_1E;
|
rwData->animTimer = roData->initTimer;
|
||||||
rwData->unk_08 = playerPosRot->pos.y - camera->playerPosDelta.y;
|
rwData->unk_08 = playerPosRot->pos.y - camera->playerPosDelta.y;
|
||||||
if (roData->interfaceField & KEEPON4_FLAG_1) {
|
if (roData->interfaceField & KEEPON4_FLAG_1) {
|
||||||
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->unk_08);
|
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
|
||||||
atToEyeBaseYaw = (s16)((s16)(playerPosRot->rot.y - 0x7FFF) - atToEyeNextDir.yaw) > 0
|
atToEyeBaseYaw = (s16)((s16)(playerPosRot->rot.y - 0x7FFF) - atToEyeNextDir.yaw) > 0
|
||||||
? (s16)(playerPosRot->rot.y - 0x7FFF) + CAM_DEG_TO_BINANG(roData->unk_0C)
|
? (s16)(playerPosRot->rot.y - 0x7FFF) + CAM_DEG_TO_BINANG(roData->yawTarget)
|
||||||
: (s16)(playerPosRot->rot.y - 0x7FFF) - CAM_DEG_TO_BINANG(roData->unk_0C);
|
: (s16)(playerPosRot->rot.y - 0x7FFF) - CAM_DEG_TO_BINANG(roData->yawTarget);
|
||||||
} else if (roData->interfaceField & KEEPON4_FLAG_2) {
|
} else if (roData->interfaceField & KEEPON4_FLAG_2) {
|
||||||
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->unk_08);
|
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
|
||||||
atToEyeBaseYaw = CAM_DEG_TO_BINANG(roData->unk_0C);
|
atToEyeBaseYaw = CAM_DEG_TO_BINANG(roData->yawTarget);
|
||||||
} else if ((roData->interfaceField & KEEPON4_FLAG_3) && camera->target != NULL) {
|
} else if ((roData->interfaceField & KEEPON4_FLAG_3) && camera->target != NULL) {
|
||||||
PosRot sp60;
|
PosRot sp60;
|
||||||
|
|
||||||
sp60 = Actor_GetWorldPosShapeRot(camera->target);
|
sp60 = Actor_GetWorldPosShapeRot(camera->target);
|
||||||
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->unk_08) - sp60.rot.x;
|
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget) - sp60.rot.x;
|
||||||
atToEyeBaseYaw = (s16)((s16)(sp60.rot.y - 0x7FFF) - atToEyeNextDir.yaw) > 0
|
atToEyeBaseYaw = (s16)((s16)(sp60.rot.y - 0x7FFF) - atToEyeNextDir.yaw) > 0
|
||||||
? (s16)(sp60.rot.y - 0x7FFF) + CAM_DEG_TO_BINANG(roData->unk_0C)
|
? (s16)(sp60.rot.y - 0x7FFF) + CAM_DEG_TO_BINANG(roData->yawTarget)
|
||||||
: (s16)(sp60.rot.y - 0x7FFF) - CAM_DEG_TO_BINANG(roData->unk_0C);
|
: (s16)(sp60.rot.y - 0x7FFF) - CAM_DEG_TO_BINANG(roData->yawTarget);
|
||||||
lineOCCheckExclusions[1] = camera->target;
|
lineOCCheckExclusions[1] = camera->target;
|
||||||
lineOCCheckNumExclusions++;
|
lineOCCheckNumExclusions++;
|
||||||
} else if ((roData->interfaceField & KEEPON4_FLAG_7) && camera->target != NULL) {
|
} else if ((roData->interfaceField & KEEPON4_FLAG_7) && camera->target != NULL) {
|
||||||
PosRot sp4C;
|
PosRot sp4C;
|
||||||
|
|
||||||
sp4C = Actor_GetWorld(camera->target);
|
sp4C = Actor_GetWorld(camera->target);
|
||||||
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->unk_08);
|
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
|
||||||
sp9E = Camera_XZAngle(&sp4C.pos, &playerPosRot->pos);
|
sp9E = Camera_XZAngle(&sp4C.pos, &playerPosRot->pos);
|
||||||
atToEyeBaseYaw = ((s16)(sp9E - atToEyeNextDir.yaw) > 0) ? sp9E + CAM_DEG_TO_BINANG(roData->unk_0C)
|
atToEyeBaseYaw = ((s16)(sp9E - atToEyeNextDir.yaw) > 0) ? sp9E + CAM_DEG_TO_BINANG(roData->yawTarget)
|
||||||
: sp9E - CAM_DEG_TO_BINANG(roData->unk_0C);
|
: sp9E - CAM_DEG_TO_BINANG(roData->yawTarget);
|
||||||
lineOCCheckExclusions[1] = camera->target;
|
lineOCCheckExclusions[1] = camera->target;
|
||||||
lineOCCheckNumExclusions++;
|
lineOCCheckNumExclusions++;
|
||||||
} else if (roData->interfaceField & KEEPON4_FLAG_6) {
|
} else if (roData->interfaceField & KEEPON4_FLAG_6) {
|
||||||
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->unk_08);
|
atToEyeBasePitch = CAM_DEG_TO_BINANG(roData->pitchTarget);
|
||||||
atToEyeBaseYaw = atToEyeNextDir.yaw;
|
atToEyeBaseYaw = atToEyeNextDir.yaw;
|
||||||
} else {
|
} else {
|
||||||
atToEyeBasePitch = atToEyeNextDir.pitch;
|
atToEyeBasePitch = atToEyeNextDir.pitch;
|
||||||
|
@ -3898,7 +3898,7 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
|
|
||||||
vecGeo.pitch = atToEyeBasePitch;
|
vecGeo.pitch = atToEyeBasePitch;
|
||||||
vecGeo.yaw = atToEyeBaseYaw;
|
vecGeo.yaw = atToEyeBaseYaw;
|
||||||
vecGeo.r = roData->unk_04;
|
vecGeo.r = roData->eyeDist;
|
||||||
sEyeCandidate = Camera_AddVecGeoToVec3f(&sAtTarget, &vecGeo);
|
sEyeCandidate = Camera_AddVecGeoToVec3f(&sAtTarget, &vecGeo);
|
||||||
if (!(roData->interfaceField & KEEPON4_FLAG_0)) {
|
if (!(roData->interfaceField & KEEPON4_FLAG_0)) {
|
||||||
angleCnt = ARRAY_COUNT(sCamCheckAroundOffsetsYaw);
|
angleCnt = ARRAY_COUNT(sCamCheckAroundOffsetsYaw);
|
||||||
|
@ -3916,10 +3916,10 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
PRINTF("camera: item: BG&collision check %d time(s)\n", i);
|
PRINTF("camera: item: BG&collision check %d time(s)\n", i);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
rwData->unk_04 = (s16)(vecGeo.pitch - atToEyeNextDir.pitch) / (f32)rwData->unk_10;
|
rwData->atToEyeTargetStepPitch = (s16)(vecGeo.pitch - atToEyeNextDir.pitch) / (f32)rwData->animTimer;
|
||||||
rwData->unk_00 = (s16)(vecGeo.yaw - atToEyeNextDir.yaw) / (f32)rwData->unk_10;
|
rwData->atToEyeTargetStepYaw = (s16)(vecGeo.yaw - atToEyeNextDir.yaw) / (f32)rwData->animTimer;
|
||||||
rwData->unk_0C = atToEyeNextDir.yaw;
|
rwData->atToEyeTargetYaw = atToEyeNextDir.yaw;
|
||||||
rwData->unk_0E = atToEyeNextDir.pitch;
|
rwData->atToEyeTargetPitch = atToEyeNextDir.pitch;
|
||||||
camera->animState++;
|
camera->animState++;
|
||||||
rwData->unk_12 = 1;
|
rwData->unk_12 = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -3932,20 +3932,20 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
camera->yOffsetUpdateRate = 0.25f;
|
camera->yOffsetUpdateRate = 0.25f;
|
||||||
camera->atLERPStepScale = 0.75f;
|
camera->atLERPStepScale = 0.75f;
|
||||||
Camera_LERPCeilVec3f(&sAtTarget, at, 0.5f, 0.5f, 0.2f);
|
Camera_LERPCeilVec3f(&sAtTarget, at, 0.5f, 0.5f, 0.2f);
|
||||||
if (roData->unk_10 != 0.0f) {
|
if (roData->atOffsetPlayerForwards != 0.0f) {
|
||||||
vecGeo.r = roData->unk_10;
|
vecGeo.r = roData->atOffsetPlayerForwards;
|
||||||
vecGeo.pitch = 0;
|
vecGeo.pitch = 0;
|
||||||
vecGeo.yaw = playerPosRot->rot.y;
|
vecGeo.yaw = playerPosRot->rot.y;
|
||||||
*at = Camera_AddVecGeoToVec3f(at, &vecGeo);
|
*at = Camera_AddVecGeoToVec3f(at, &vecGeo);
|
||||||
}
|
}
|
||||||
camera->atLERPStepScale = 0.0f;
|
camera->atLERPStepScale = 0.0f;
|
||||||
camera->dist = Camera_LERPCeilF(roData->unk_04, camera->dist, 0.25f, 2.0f);
|
camera->dist = Camera_LERPCeilF(roData->eyeDist, camera->dist, 0.25f, 2.0f);
|
||||||
vecGeo.r = camera->dist;
|
vecGeo.r = camera->dist;
|
||||||
if (rwData->unk_10 != 0) {
|
if (rwData->animTimer != 0) {
|
||||||
camera->stateFlags |= CAM_STATE_LOCK_MODE;
|
camera->stateFlags |= CAM_STATE_LOCK_MODE;
|
||||||
rwData->unk_0C += (s16)rwData->unk_00;
|
rwData->atToEyeTargetYaw += (s16)rwData->atToEyeTargetStepYaw;
|
||||||
rwData->unk_0E += (s16)rwData->unk_04;
|
rwData->atToEyeTargetPitch += (s16)rwData->atToEyeTargetStepPitch;
|
||||||
rwData->unk_10--;
|
rwData->animTimer--;
|
||||||
} else if (roData->interfaceField & KEEPON4_FLAG_4) {
|
} else if (roData->interfaceField & KEEPON4_FLAG_4) {
|
||||||
camera->stateFlags |= (CAM_STATE_CAM_FUNC_FINISH | CAM_STATE_BLOCK_BG);
|
camera->stateFlags |= (CAM_STATE_CAM_FUNC_FINISH | CAM_STATE_BLOCK_BG);
|
||||||
camera->stateFlags |= (CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
|
camera->stateFlags |= (CAM_STATE_CHECK_WATER | CAM_STATE_CHECK_BG);
|
||||||
|
@ -3967,12 +3967,12 @@ s32 Camera_KeepOn4(Camera* camera) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vecGeo.yaw = Camera_LERPCeilS(rwData->unk_0C, atToEyeNextDir.yaw, roData->unk_14, 4);
|
vecGeo.yaw = Camera_LERPCeilS(rwData->atToEyeTargetYaw, atToEyeNextDir.yaw, roData->unk_14, 4);
|
||||||
vecGeo.pitch = Camera_LERPCeilS(rwData->unk_0E, atToEyeNextDir.pitch, roData->unk_14, 4);
|
vecGeo.pitch = Camera_LERPCeilS(rwData->atToEyeTargetPitch, atToEyeNextDir.pitch, roData->unk_14, 4);
|
||||||
*eyeNext = Camera_AddVecGeoToVec3f(at, &vecGeo);
|
*eyeNext = Camera_AddVecGeoToVec3f(at, &vecGeo);
|
||||||
*eye = *eyeNext;
|
*eye = *eyeNext;
|
||||||
Camera_BGCheck(camera, at, eye);
|
Camera_BGCheck(camera, at, eye);
|
||||||
camera->fov = Camera_LERPCeilF(roData->unk_18, camera->fov, camera->fovUpdateRate, 1.0f);
|
camera->fov = Camera_LERPCeilF(roData->fovTarget, camera->fov, camera->fovUpdateRate, 1.0f);
|
||||||
camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA);
|
camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA);
|
||||||
//! @bug Missing return, but the return value is not used.
|
//! @bug Missing return, but the return value is not used.
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,7 +110,7 @@ s16 sCamDataRegsInit[CAM_DATA_MAX] = {
|
||||||
0, // CAM_DATA_AT_OFFSET_X
|
0, // CAM_DATA_AT_OFFSET_X
|
||||||
0, // CAM_DATA_AT_OFFSET_Y
|
0, // CAM_DATA_AT_OFFSET_Y
|
||||||
0, // CAM_DATA_AT_OFFSET_Z
|
0, // CAM_DATA_AT_OFFSET_Z
|
||||||
6, // CAM_DATA_UNK_22
|
6, // CAM_DATA_INIT_TIMER
|
||||||
60, // CAM_DATA_UNK_23
|
60, // CAM_DATA_UNK_23
|
||||||
30, // CAM_DATA_FOV_SCALE
|
30, // CAM_DATA_FOV_SCALE
|
||||||
0, // CAM_DATA_YAW_SCALE
|
0, // CAM_DATA_YAW_SCALE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue