1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-15 04:14:34 +00:00

OnePointCutscene Cleanup (#1467)

* cleanup

* more cleanup

* attention cs

* remove comment
This commit is contained in:
engineer124 2022-12-18 20:09:13 -05:00 committed by GitHub
parent 2ae64683a5
commit 70bbcebbfe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 116 additions and 107 deletions

View file

@ -5189,6 +5189,9 @@ s32 Camera_Unique8(Camera* camera) {
return Camera_Noop(camera);
}
/**
* OnePoint Cutscene
*/
s32 Camera_Unique9(Camera* camera) {
Vec3f atTarget;
Vec3f eyeTarget;
@ -5248,7 +5251,7 @@ s32 Camera_Unique9(Camera* camera) {
if (rwData->keyFrameTimer == 0) {
rwData->isNewKeyFrame = true;
rwData->curKeyFrameIdx++;
if (rwData->curKeyFrameIdx < ONEPOINT_CS_INFO(camera)->keyFrameCnt) {
if (rwData->curKeyFrameIdx < ONEPOINT_CS_INFO(camera)->keyFrameCount) {
rwData->curKeyFrame = &ONEPOINT_CS_INFO(camera)->keyFrames[rwData->curKeyFrameIdx];
rwData->keyFrameTimer = rwData->curKeyFrame->timerInit;
@ -5558,7 +5561,7 @@ s32 Camera_Unique9(Camera* camera) {
scratchGeo.yaw = Camera_LERPCeilS(rwData->atEyeOffsetTarget.yaw, eyeNextAtOffset.yaw,
rwData->curKeyFrame->lerpStepScale, 1);
Camera_AddVecGeoToVec3f(eyeNext, at, &scratchGeo);
goto setAtFOVRoll;
goto setAtFovRoll;
case ONEPOINT_CS_ACTION_ID_3:
// linear interplation of eye/at/fov/roll using the step scale using eyeTarget
@ -5571,7 +5574,7 @@ s32 Camera_Unique9(Camera* camera) {
FALLTHROUGH;
case ONEPOINT_CS_ACTION_ID_11:
case ONEPOINT_CS_ACTION_ID_12:
setAtFOVRoll:
setAtFovRoll:
// linear interpolation of at/fov/roll using the step scale.
camera->at.x = Camera_LERPCeilF(rwData->atTarget.x, camera->at.x, rwData->curKeyFrame->lerpStepScale, 1.0f);
camera->at.y = Camera_LERPCeilF(rwData->atTarget.y, camera->at.y, rwData->curKeyFrame->lerpStepScale, 1.0f);
@ -5618,15 +5621,15 @@ s32 Camera_Unique9(Camera* camera) {
case ONEPOINT_CS_ACTION_ID_19: {
// Change the parent camera (or default)'s mode to normal
s32 camIdx = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
s32 camId = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
Camera_ChangeModeFlags(camera->play->cameraPtrs[camIdx], CAM_MODE_NORMAL, 1);
Camera_ChangeModeFlags(camera->play->cameraPtrs[camId], CAM_MODE_NORMAL, 1);
}
FALLTHROUGH;
case ONEPOINT_CS_ACTION_ID_18: {
// copy the current camera to the parent (or default)'s camera.
s32 camIdx = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
Camera* cam = camera->play->cameraPtrs[camIdx];
s32 camId = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
Camera* cam = camera->play->cameraPtrs[camId];
*eye = *eyeNext;
Camera_Copy(cam, camera);
@ -6015,7 +6018,7 @@ s32 Camera_Demo4(Camera* camera) {
}
/**
* Sets up a cutscene for Camera_Uniq9
* Sets up a OnePoint attention cutscene
*/
s32 Camera_Demo5(Camera* camera) {
f32 eyeTargetDist;
@ -6037,6 +6040,7 @@ s32 Camera_Demo5(Camera* camera) {
Actor_GetFocus(&playerhead, &camera->player->actor);
player = camera->player;
sCameraInterfaceField = CAM_INTERFACE_FIELD(CAM_LETTERBOX_LARGE, CAM_HUD_VISIBILITY_NOTHING_ALT, 0);
if ((camera->target == NULL) || (camera->target->update == NULL)) {
if (camera->target == NULL) {
osSyncPrintf(VT_COL(YELLOW, BLACK) "camera: warning: attention: target is not valid, stop!\n" VT_RST);
@ -6044,6 +6048,7 @@ s32 Camera_Demo5(Camera* camera) {
camera->target = NULL;
return true;
}
Actor_GetFocus(&camera->targetPosRot, camera->target);
OLib_Vec3fDiffToVecGeo(&playerTargetGeo, &camera->targetPosRot.pos, &camera->playerPosRot.pos);
D_8011D3AC = camera->target->category;
@ -6051,6 +6056,7 @@ s32 Camera_Demo5(Camera* camera) {
eyeTargetDist = OLib_Vec3fDist(&camera->targetPosRot.pos, &camera->eye);
OLib_Vec3fDiffToVecGeo(&eyePlayerGeo, &playerhead.pos, &camera->eyeNext);
sp4A = eyePlayerGeo.yaw - playerTargetGeo.yaw;
if (camera->target->category == ACTORCAT_PLAYER) {
// camera is targeting a(the) player actor
if (eyePlayerGeo.r > 30.0f) {
@ -6058,9 +6064,9 @@ s32 Camera_Demo5(Camera* camera) {
D_8011D6AC[1].atTargetInit.z = Rand_ZeroOne() * 10.0f;
D_8011D6AC[1].eyeTargetInit.x = Rand_ZeroOne() * 10.0f;
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D6AC;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D6AC);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D6AC);
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt--;
ONEPOINT_CS_INFO(camera)->keyFrameCount--;
} else {
camera->timer += D_8011D6AC[2].timerInit;
}
@ -6068,9 +6074,9 @@ s32 Camera_Demo5(Camera* camera) {
D_8011D724[1].eyeTargetInit.x = Rand_ZeroOne() * 10.0f;
D_8011D724[1].timerInit = camera->timer - 1;
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D724;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D724);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D724);
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt--;
ONEPOINT_CS_INFO(camera)->keyFrameCount--;
} else {
camera->timer += D_8011D724[2].timerInit;
}
@ -6078,9 +6084,9 @@ s32 Camera_Demo5(Camera* camera) {
} else if (playerTargetGeo.r < 30.0f) {
// distance between player and target is less than 30 units.
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D79C;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D79C);
if ((targetScreenPosX < 0x15) || (targetScreenPosX >= 0x12C) || (targetScreenPosY < 0x29) ||
(targetScreenPosY >= 0xC8)) {
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D79C);
if ((targetScreenPosX <= 20) || (targetScreenPosX >= SCREEN_WIDTH - 20) || (targetScreenPosY <= 40) ||
(targetScreenPosY >= SCREEN_HEIGHT - 40)) {
D_8011D79C[0].actionFlags = ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, true, false);
D_8011D79C[0].atTargetInit.y = -30.0f;
D_8011D79C[0].atTargetInit.x = 0.0f;
@ -6093,7 +6099,7 @@ s32 Camera_Demo5(Camera* camera) {
D_8011D79C[1].timerInit = camera->timer - 1;
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt -= 2;
ONEPOINT_CS_INFO(camera)->keyFrameCount -= 2;
} else {
camera->timer += D_8011D79C[2].timerInit + D_8011D79C[3].timerInit;
}
@ -6102,9 +6108,9 @@ s32 Camera_Demo5(Camera* camera) {
// and the distance fromthe camera's current position to the player is less than 30 units
D_8011D83C[0].timerInit = camera->timer;
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D83C;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D83C);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D83C);
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt--;
ONEPOINT_CS_INFO(camera)->keyFrameCount--;
} else {
camera->timer += D_8011D83C[1].timerInit;
}
@ -6112,13 +6118,13 @@ s32 Camera_Demo5(Camera* camera) {
// The distance between the camera's current position and the target is less than 700 units
// and the angle between the camera's position and the player, and the player to the target
// is less than ~76.9 degrees
if (targetScreenPosX >= 0x15 && targetScreenPosX < 0x12C && targetScreenPosY >= 0x29 &&
targetScreenPosY < 0xC8 && eyePlayerGeo.r > 30.0f) {
if ((targetScreenPosX > 20) && (targetScreenPosX < SCREEN_WIDTH - 20) && (targetScreenPosY > 40) &&
(targetScreenPosY < SCREEN_HEIGHT - 40) && (eyePlayerGeo.r > 30.0f)) {
D_8011D88C[0].timerInit = camera->timer;
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D88C;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D88C);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D88C);
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt--;
ONEPOINT_CS_INFO(camera)->keyFrameCount--;
} else {
camera->timer += D_8011D88C[1].timerInit;
}
@ -6134,9 +6140,9 @@ s32 Camera_Demo5(Camera* camera) {
D_8011D8DC[0].timerInit = camera->timer;
D_8011D8DC[1].timerInit = (s16)(eyeTargetDist * 0.005f) + 8;
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D8DC;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D8DC);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D8DC);
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt -= 2;
ONEPOINT_CS_INFO(camera)->keyFrameCount -= 2;
} else {
camera->timer += D_8011D8DC[1].timerInit + D_8011D8DC[2].timerInit;
}
@ -6171,9 +6177,9 @@ s32 Camera_Demo5(Camera* camera) {
D_8011D954[2].timerInit = (s16)(eyeTargetDist * 0.004f) + 6;
}
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D954;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D954);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D954);
if (camera->parentCamId != CAM_ID_MAIN) {
ONEPOINT_CS_INFO(camera)->keyFrameCnt -= 2;
ONEPOINT_CS_INFO(camera)->keyFrameCount -= 2;
} else {
camera->timer += D_8011D954[2].timerInit + D_8011D954[3].timerInit;
}
@ -6196,13 +6202,13 @@ s32 Camera_Demo5(Camera* camera) {
D_8011D9F4[1].timerInit = t + 8;
}
ONEPOINT_CS_INFO(camera)->keyFrames = D_8011D9F4;
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D9F4);
ONEPOINT_CS_INFO(camera)->keyFrameCount = ARRAY_COUNT(D_8011D9F4);
if (camera->parentCamId != CAM_ID_MAIN) {
if (camera->play->state.frames & 1) {
D_8011D9F4[0].rollTargetInit = -D_8011D9F4[0].rollTargetInit;
D_8011D9F4[1].rollTargetInit = -D_8011D9F4[1].rollTargetInit;
}
ONEPOINT_CS_INFO(camera)->keyFrameCnt -= 2;
ONEPOINT_CS_INFO(camera)->keyFrameCount -= 2;
} else {
camera->timer += D_8011D9F4[1].timerInit + D_8011D9F4[2].timerInit;
D_8011D9F4[0].rollTargetInit = D_8011D9F4[1].rollTargetInit = 0;
@ -6240,7 +6246,9 @@ s32 Camera_Demo5(Camera* camera) {
sDemo5PrevAction12Frame = camera->play->state.frames;
Camera_ChangeSettingFlags(camera, CAM_SET_CS_C, (4 | 1));
Camera_Unique9(camera);
return true;
}