Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Camera docs: KeepOn4 #1456

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Prev Previous commit
Next Next commit
KEEPON4_ITEM_TYPE_ -> CAM_ITEM_TYPE_
Dragorn421 committed Dec 12, 2022
commit 714a3205dd2d1414cbd5361f84c220b033ebc9df
32 changes: 16 additions & 16 deletions include/z64camera.h
Original file line number Diff line number Diff line change
@@ -854,20 +854,20 @@ typedef struct {
} KeepOn4ReadOnlyData; // size = 0x20

typedef enum {
/* 1 */ KEEPON4_ITEM_TYPE_1=1, // drop fish from bottle and something with ruto's letter
/* 2 */ KEEPON4_ITEM_TYPE_2, // drink from bottle?
/* 3 */ KEEPON4_ITEM_TYPE_3, // use bottled fairy
/* 4 */ KEEPON4_ITEM_TYPE_4, // something with farore's wind, something with exchange items, catching things into bottles
/* 5 */ KEEPON4_ITEM_TYPE_5, // drop bugs and blue fire from bottle
/* 8 */ KEEPON4_ITEM_TYPE_8=8, // ??? get item after underwater?
/* 9 */ KEEPON4_ITEM_TYPE_9, // get item
/* 10 */ KEEPON4_ITEM_TYPE_10, // used farore's wind or nayru's love
/* 11 */ KEEPON4_ITEM_TYPE_11, // talking to navi?
/* 12 */ KEEPON4_ITEM_TYPE_ONEPOINTDEMO9806,
/* 81 */ KEEPON4_ITEM_TYPE_HORSE=81,
/* 90 */ KEEPON4_ITEM_TYPE_90=90, // play ocarina (on its own)?
/* 91 */ KEEPON4_ITEM_TYPE_91 // play ocarina for an actor?
} KeepOn4_item_type;
/* 1 */ CAM_ITEM_TYPE_1=1, // drop fish from bottle and something with ruto's letter
/* 2 */ CAM_ITEM_TYPE_2, // drink from bottle?
/* 3 */ CAM_ITEM_TYPE_3, // use bottled fairy
/* 4 */ CAM_ITEM_TYPE_4, // something with farore's wind, something with exchange items, catching things into bottles
/* 5 */ CAM_ITEM_TYPE_5, // drop bugs and blue fire from bottle
/* 8 */ CAM_ITEM_TYPE_8=8, // ??? get item after underwater?
/* 9 */ CAM_ITEM_TYPE_9, // get item
/* 10 */ CAM_ITEM_TYPE_10, // used farore's wind or nayru's love
/* 11 */ CAM_ITEM_TYPE_11, // talking to navi?
/* 12 */ CAM_ITEM_TYPE_ONEPOINTDEMO9806,
/* 81 */ CAM_ITEM_TYPE_HORSE=81,
/* 90 */ CAM_ITEM_TYPE_90=90, // play ocarina (on its own)?
/* 91 */ CAM_ITEM_TYPE_91 // play ocarina for an actor?
} CameraItemType;

typedef struct {
/* 0x00 */ f32 atToEyeTargetStepYaw;
@@ -889,8 +889,8 @@ typedef struct {
#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_ONEPOINTDEMO9806 (1 << 4) // Camera timer ticks down, and other things (TODO). Only set for KEEPON4_ITEM_TYPE_ONEPOINTDEMO9806
#define KEEPON4_FLAG_NOOP (1 << 5) // No effect. Only set for KEEPON4_ITEM_TYPE_11
#define KEEPON4_FLAG_ONEPOINTDEMO9806 (1 << 4) // Camera timer ticks down, and other things (TODO). Only set for CAM_ITEM_TYPE_ONEPOINTDEMO9806
#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_HORSE (1 << 7) // (partly a KEEPON4_FLAG_EYE_) pitch: provided, yaw: offset from the side opposite to the camera `target` compared to player

26 changes: 13 additions & 13 deletions src/code/z_camera.c
Original file line number Diff line number Diff line change
@@ -3607,31 +3607,31 @@ s32 Camera_KeepOn4(Camera* camera) {

osSyncPrintf("camera: item: type %d\n", *itemType);
switch (*itemType) {
case KEEPON4_ITEM_TYPE_1:
case CAM_ITEM_TYPE_1:
roData->yOffset = playerHeight * -0.6f * yNormal;
roData->eyeDist = playerHeight * 2.0f * yNormal;
roData->pitchTarget = 10.0f;
break;

case KEEPON4_ITEM_TYPE_2:
case KEEPON4_ITEM_TYPE_3:
case CAM_ITEM_TYPE_2:
case CAM_ITEM_TYPE_3:
roData->pitchTarget = -20.0f;
roData->fovTarget = 80.0f;
break;

case KEEPON4_ITEM_TYPE_4:
case CAM_ITEM_TYPE_4:
roData->yOffset = playerHeight * -0.2f * yNormal;
roData->pitchTarget = 25.0f;
break;

case KEEPON4_ITEM_TYPE_8:
case CAM_ITEM_TYPE_8:
roData->yOffset = playerHeight * -0.2f * yNormal;
roData->eyeDist = playerHeight * 0.8f * yNormal;
roData->pitchTarget = 50.0f;
roData->fovTarget = 70.0f;
break;

case KEEPON4_ITEM_TYPE_9:
case CAM_ITEM_TYPE_9:
roData->yOffset = playerHeight * 0.1f * yNormal;
roData->eyeDist = playerHeight * 0.5f * yNormal;
roData->pitchTarget = -20.0f;
@@ -3640,15 +3640,15 @@ s32 Camera_KeepOn4(Camera* camera) {
CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE, KEEPON4_FLAG_EYE_KEEP_YAW);
break;

case KEEPON4_ITEM_TYPE_5:
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_EYE_YAW_REL_TO_PLAYER);
break;

case KEEPON4_ITEM_TYPE_10:
case CAM_ITEM_TYPE_10:
roData->yOffset = playerHeight * -0.5f * yNormal;
roData->eyeDist = playerHeight * 1.5f * yNormal;
roData->pitchTarget = -15.0f;
@@ -3659,7 +3659,7 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->initTimer = 60;
break;

case KEEPON4_ITEM_TYPE_ONEPOINTDEMO9806:
case CAM_ITEM_TYPE_ONEPOINTDEMO9806:
roData->yOffset = playerHeight * -0.6f * yNormal;
roData->eyeDist = playerHeight * 1.6f * yNormal;
roData->pitchTarget = -2.0f;
@@ -3672,14 +3672,14 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->fovTarget = 50.0f;
break;

case KEEPON4_ITEM_TYPE_90:
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_EYE_YAW_REL_TO_PLAYER);
break;

case KEEPON4_ITEM_TYPE_91:
case CAM_ITEM_TYPE_91:
roData->yOffset = playerHeight * -0.1f * yNormal;
roData->eyeDist = playerHeight * 1.5f * yNormal;
roData->pitchTarget = -3.0f;
@@ -3689,7 +3689,7 @@ s32 Camera_KeepOn4(Camera* camera) {
CAM_INTERFACE_FIELD(CAM_LETTERBOX_MEDIUM, CAM_HUD_VISIBILITY_IGNORE, KEEPON4_FLAG_EYE_FROM_TARGET);
break;

case KEEPON4_ITEM_TYPE_HORSE:
case CAM_ITEM_TYPE_HORSE:
roData->yOffset = playerHeight * -0.3f * yNormal;
roData->eyeDist = playerHeight * 1.5f * yNormal;
roData->pitchTarget = 2.0f;
@@ -3701,7 +3701,7 @@ s32 Camera_KeepOn4(Camera* camera) {
roData->fovTarget = 45.0f;
break;

case KEEPON4_ITEM_TYPE_11:
case CAM_ITEM_TYPE_11:
roData->yOffset = playerHeight * -0.19f * yNormal;
roData->eyeDist = playerHeight * 0.7f * yNormal;
roData->yawTarget = 130.0f;
2 changes: 1 addition & 1 deletion src/code/z_onepointdemo.c
Original file line number Diff line number Diff line change
@@ -963,7 +963,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
subCam->timer = -99;
if (Play_CamIsNotFixed(play)) {
func_800C0808(play, subCamId, player, CAM_SET_TURN_AROUND);
subCam->data2 = KEEPON4_ITEM_TYPE_ONEPOINTDEMO9806;
subCam->data2 = CAM_ITEM_TYPE_ONEPOINTDEMO9806;
} else {
Play_CopyCamera(play, subCamId, CAM_ID_MAIN);
Play_CameraChangeSetting(play, subCamId, CAM_SET_FREE2);
4 changes: 2 additions & 2 deletions src/overlays/actors/ovl_En_Horse/z_en_horse.c
Original file line number Diff line number Diff line change
@@ -1750,7 +1750,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play2) {
Camera_SetViewParam(play->cameraPtrs[CAM_ID_MAIN], CAM_VIEW_TARGET, &this->actor);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_TURN_AROUND);
Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_CAMERA_DATA_2, NULL, NULL,
KEEPON4_ITEM_TYPE_HORSE, 0, 0);
CAM_ITEM_TYPE_HORSE, 0, 0);
}
}
if (!(this->stateFlags & ENHORSE_INACTIVE)) {
@@ -1825,7 +1825,7 @@ void EnHorse_Idle(EnHorse* this, PlayState* play) {
Camera_SetViewParam(play->cameraPtrs[CAM_ID_MAIN], CAM_VIEW_TARGET, &this->actor);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_TURN_AROUND);
Camera_SetCameraData(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_CAMERA_DATA_2, NULL, NULL,
KEEPON4_ITEM_TYPE_HORSE, 0, 0);
CAM_ITEM_TYPE_HORSE, 0, 0);
}
} else {
Audio_PlaySfxGeneral(NA_SE_EV_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
32 changes: 16 additions & 16 deletions src/overlays/actors/ovl_player_actor/z_player.c
Original file line number Diff line number Diff line change
@@ -3122,9 +3122,9 @@ void func_80835E44(PlayState* play, s16 camSetting) {
}
}

void func_80835EA4(PlayState* play, s32 keepOn4_item_type_) {
void func_80835EA4(PlayState* play, s32 camItemType) {
func_80835E44(play, CAM_SET_TURN_AROUND);
Camera_SetCameraData(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_CAMERA_DATA_2, NULL, NULL, keepOn4_item_type_, 0,
Camera_SetCameraData(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_CAMERA_DATA_2, NULL, NULL, camItemType, 0,
0);
}

@@ -5165,7 +5165,7 @@ void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) {
if (magicSpell == PLAYER_MAGIC_SPELL(PLAYER_IA_DINS_FIRE)) {
this->subCamId = OnePointCutscene_Init(play, 1100, -101, NULL, CAM_ID_MAIN);
} else {
func_80835EA4(play, KEEPON4_ITEM_TYPE_10);
func_80835EA4(play, CAM_ITEM_TYPE_10);
}
}

@@ -5234,7 +5234,7 @@ s32 func_8083B040(Player* this, PlayState* play) {
func_80835C58(play, this, func_8085063C, 1);
this->stateFlags1 |= PLAYER_STATE1_28 | PLAYER_STATE1_29;
func_80832264(play, this, func_80833338(this));
func_80835EA4(play, KEEPON4_ITEM_TYPE_4);
func_80835EA4(play, CAM_ITEM_TYPE_4);
}

func_80832224(this);
@@ -5289,11 +5289,11 @@ s32 func_8083B040(Player* this, PlayState* play) {
} else if (sp2C == EXCH_ITEM_BOTTLE_RUTOS_LETTER) {
this->unk_84F = 1;
this->actor.textId = 0x4005;
func_80835EA4(play, KEEPON4_ITEM_TYPE_1);
func_80835EA4(play, CAM_ITEM_TYPE_1);
} else {
this->unk_84F = 2;
this->actor.textId = 0xCF;
func_80835EA4(play, KEEPON4_ITEM_TYPE_4);
func_80835EA4(play, CAM_ITEM_TYPE_4);
}

this->actor.flags |= ACTOR_FLAG_8;
@@ -5315,23 +5315,23 @@ s32 func_8083B040(Player* this, PlayState* play) {
if (sp2C == PLAYER_BOTTLE(PLAYER_IA_BOTTLE_FAIRY)) {
func_80835DE4(play, this, func_8084EED8, 0);
func_808322D0(play, this, &gPlayerAnim_link_bottle_bug_out);
func_80835EA4(play, KEEPON4_ITEM_TYPE_3);
func_80835EA4(play, CAM_ITEM_TYPE_3);
} else if ((sp2C >= PLAYER_BOTTLE(PLAYER_IA_BOTTLE_FISH)) &&
(sp2C <= PLAYER_BOTTLE(PLAYER_IA_BOTTLE_BUG))) {
func_80835DE4(play, this, func_8084EFC0, 0);
func_808322D0(play, this, &gPlayerAnim_link_bottle_fish_out);
func_80835EA4(play, (sp2C == PLAYER_BOTTLE(PLAYER_IA_BOTTLE_FISH)) ? KEEPON4_ITEM_TYPE_1
: KEEPON4_ITEM_TYPE_5);
func_80835EA4(play, (sp2C == PLAYER_BOTTLE(PLAYER_IA_BOTTLE_FISH)) ? CAM_ITEM_TYPE_1
: CAM_ITEM_TYPE_5);
} else {
func_80835DE4(play, this, func_8084EAC0, 0);
func_80832B78(play, this, &gPlayerAnim_link_bottle_drink_demo_start);
func_80835EA4(play, KEEPON4_ITEM_TYPE_2);
func_80835EA4(play, CAM_ITEM_TYPE_2);
}
} else {
func_80835DE4(play, this, func_8084E3C4, 0);
func_808322D0(play, this, &gPlayerAnim_link_normal_okarina_start);
this->stateFlags2 |= PLAYER_STATE2_27;
func_80835EA4(play, (this->unk_6A8 != NULL) ? KEEPON4_ITEM_TYPE_91 : KEEPON4_ITEM_TYPE_90);
func_80835EA4(play, (this->unk_6A8 != NULL) ? CAM_ITEM_TYPE_91 : CAM_ITEM_TYPE_90);
if (this->unk_6A8 != NULL) {
this->stateFlags2 |= PLAYER_STATE2_25;
Camera_SetViewParam(Play_GetCamera(play, CAM_ID_MAIN), CAM_VIEW_TARGET, this->unk_6A8);
@@ -6444,7 +6444,7 @@ s32 func_8083E5A8(Player* this, PlayState* play) {
if (!(this->stateFlags2 & PLAYER_STATE2_10) || (this->currentBoots == PLAYER_BOOTS_IRON)) {
func_80836898(play, this, func_8083A434);
func_808322D0(play, this, &gPlayerAnim_link_demo_get_itemB);
func_80835EA4(play, KEEPON4_ITEM_TYPE_9);
func_80835EA4(play, CAM_ITEM_TYPE_9);
}

this->stateFlags1 |= PLAYER_STATE1_10 | PLAYER_STATE1_11 | PLAYER_STATE1_29;
@@ -12483,7 +12483,7 @@ void func_8084E1EC(Player* this, PlayState* play) {
if ((this->stateFlags1 & PLAYER_STATE1_10) && LinkAnimation_OnFrame(&this->skelAnime, 10.0f)) {
func_808332F4(this, play);
func_80832340(play, this);
func_80835EA4(play, KEEPON4_ITEM_TYPE_8);
func_80835EA4(play, CAM_ITEM_TYPE_8);
} else if (LinkAnimation_OnFrame(&this->skelAnime, 5.0f)) {
func_80832698(this, NA_SE_VO_LI_BREATH_DRINK);
}
@@ -12648,7 +12648,7 @@ void func_8084E6D4(Player* this, PlayState* play) {
}

this->unk_850 = 2;
func_80835EA4(play, KEEPON4_ITEM_TYPE_9);
func_80835EA4(play, CAM_ITEM_TYPE_9);
}
} else {
if (this->unk_850 == 0) {
@@ -12819,7 +12819,7 @@ void func_8084ECA4(Player* this, PlayState* play) {
this->interactRangeActor->parent = &this->actor;
Player_UpdateBottleHeld(play, this, catchInfo->itemId, ABS(catchInfo->itemAction));
func_808322D0(play, this, sp24->unk_04);
func_80835EA4(play, KEEPON4_ITEM_TYPE_4);
func_80835EA4(play, CAM_ITEM_TYPE_4);
}
}
}
@@ -14814,6 +14814,6 @@ void func_80853148(PlayState* play, Actor* actor) {

if ((this->naviActor == this->targetActor) && ((this->targetActor->textId & 0xFF00) != 0x200)) {
this->naviActor->flags |= ACTOR_FLAG_8;
func_80835EA4(play, KEEPON4_ITEM_TYPE_11);
func_80835EA4(play, CAM_ITEM_TYPE_11);
}
}