mirror of
https://github.com/zeldaret/oot.git
synced 2024-11-10 19:20:13 +00:00
OnePointDemo ActionFlags Macros (#1451)
* actionflags * more macros * distinguish enums better * PR Suggestions * Update src/code/z_camera_data.inc.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_camera_data.inc.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
This commit is contained in:
parent
2e9e895bf9
commit
da06e9a701
5 changed files with 3803 additions and 401 deletions
|
@ -1221,6 +1221,33 @@ typedef struct {
|
||||||
{ fov, CAM_DATA_FOV }, \
|
{ fov, CAM_DATA_FOV }, \
|
||||||
{ interfaceField, CAM_DATA_INTERFACE_FIELD }
|
{ interfaceField, CAM_DATA_INTERFACE_FIELD }
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 0x1 */ ONEPOINT_CS_ACTION_ID_1 = 1,
|
||||||
|
/* 0x2 */ ONEPOINT_CS_ACTION_ID_2,
|
||||||
|
/* 0x3 */ ONEPOINT_CS_ACTION_ID_3,
|
||||||
|
/* 0x4 */ ONEPOINT_CS_ACTION_ID_4,
|
||||||
|
/* 0x9 */ ONEPOINT_CS_ACTION_ID_9 = 9,
|
||||||
|
/* 0xA */ ONEPOINT_CS_ACTION_ID_10,
|
||||||
|
/* 0xB */ ONEPOINT_CS_ACTION_ID_11,
|
||||||
|
/* 0xC */ ONEPOINT_CS_ACTION_ID_12,
|
||||||
|
/* 0xD */ ONEPOINT_CS_ACTION_ID_13,
|
||||||
|
/* 0xF */ ONEPOINT_CS_ACTION_ID_15 = 15,
|
||||||
|
/* 0x10 */ ONEPOINT_CS_ACTION_ID_16,
|
||||||
|
/* 0x11 */ ONEPOINT_CS_ACTION_ID_17,
|
||||||
|
/* 0x12 */ ONEPOINT_CS_ACTION_ID_18,
|
||||||
|
/* 0x13 */ ONEPOINT_CS_ACTION_ID_19,
|
||||||
|
/* 0x15 */ ONEPOINT_CS_ACTION_ID_21 = 21,
|
||||||
|
/* 0x18 */ ONEPOINT_CS_ACTION_ID_24 = 24
|
||||||
|
} OnePointCsAction;
|
||||||
|
|
||||||
|
#define ONEPOINT_CS_ACTION_FLAG_40 0x40
|
||||||
|
#define ONEPOINT_CS_ACTION_FLAG_BGCHECK 0x80
|
||||||
|
|
||||||
|
#define ONEPOINT_CS_ACTION(action, isBit40, checkBg) \
|
||||||
|
(((action) & 0x1F) | ((isBit40) ? ONEPOINT_CS_ACTION_FLAG_40 : 0) | ((checkBg) ? ONEPOINT_CS_ACTION_FLAG_BGCHECK : 0))
|
||||||
|
|
||||||
|
#define ONEPOINT_CS_GET_ACTION(onePointCsFull) ((onePointCsFull)->actionFlags & 0x1F)
|
||||||
|
|
||||||
/** initFlags
|
/** initFlags
|
||||||
* & 0x00FF = atInitFlags
|
* & 0x00FF = atInitFlags
|
||||||
* & 0xFF00 = eyeInitFlags
|
* & 0xFF00 = eyeInitFlags
|
||||||
|
|
|
@ -5464,9 +5464,9 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
rwData->rollTarget = CAM_DEG_TO_BINANG(rwData->curKeyFrame->rollTargetInit);
|
rwData->rollTarget = CAM_DEG_TO_BINANG(rwData->curKeyFrame->rollTargetInit);
|
||||||
}
|
}
|
||||||
|
|
||||||
action = rwData->curKeyFrame->actionFlags & 0x1F;
|
action = ONEPOINT_CS_GET_ACTION(rwData->curKeyFrame);
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case 15:
|
case ONEPOINT_CS_ACTION_ID_15:
|
||||||
// static copy to at/eye/fov/roll
|
// static copy to at/eye/fov/roll
|
||||||
*at = rwData->atTarget;
|
*at = rwData->atTarget;
|
||||||
*eyeNext = rwData->eyeTarget;
|
*eyeNext = rwData->eyeTarget;
|
||||||
|
@ -5474,7 +5474,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->roll = rwData->rollTarget;
|
camera->roll = rwData->rollTarget;
|
||||||
camera->stateFlags |= CAM_STATE_10;
|
camera->stateFlags |= CAM_STATE_10;
|
||||||
break;
|
break;
|
||||||
case 21:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_21:
|
||||||
// same as 15, but with unk_38 ?
|
// same as 15, but with unk_38 ?
|
||||||
if (rwData->unk_38 == 0) {
|
if (rwData->unk_38 == 0) {
|
||||||
rwData->unk_38 = 1;
|
rwData->unk_38 = 1;
|
||||||
|
@ -5487,7 +5488,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->fov = rwData->fovTarget;
|
camera->fov = rwData->fovTarget;
|
||||||
camera->roll = rwData->rollTarget;
|
camera->roll = rwData->rollTarget;
|
||||||
break;
|
break;
|
||||||
case 16:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_16:
|
||||||
// same as 21, but don't unset CAM_STATE_3 on stateFlags
|
// same as 21, but don't unset CAM_STATE_3 on stateFlags
|
||||||
if (rwData->unk_38 == 0) {
|
if (rwData->unk_38 == 0) {
|
||||||
rwData->unk_38 = 1;
|
rwData->unk_38 = 1;
|
||||||
|
@ -5500,7 +5502,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->fov = rwData->fovTarget;
|
camera->fov = rwData->fovTarget;
|
||||||
camera->roll = rwData->rollTarget;
|
camera->roll = rwData->rollTarget;
|
||||||
break;
|
break;
|
||||||
case 1:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_1:
|
||||||
// linear interpolation of eye/at using the geographic coordinates
|
// linear interpolation of eye/at using the geographic coordinates
|
||||||
OLib_Vec3fDiffToVecGeo(&eyeNextAtOffset, at, eyeNext);
|
OLib_Vec3fDiffToVecGeo(&eyeNextAtOffset, at, eyeNext);
|
||||||
OLib_Vec3fDiffToVecGeo(&rwData->atEyeOffsetTarget, &rwData->atTarget, &rwData->eyeTarget);
|
OLib_Vec3fDiffToVecGeo(&rwData->atEyeOffsetTarget, &rwData->atTarget, &rwData->eyeTarget);
|
||||||
|
@ -5512,7 +5515,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
eyeNextAtOffset.yaw + ((s16)(rwData->atEyeOffsetTarget.yaw - eyeNextAtOffset.yaw) * invKeyFrameTimer);
|
eyeNextAtOffset.yaw + ((s16)(rwData->atEyeOffsetTarget.yaw - eyeNextAtOffset.yaw) * invKeyFrameTimer);
|
||||||
Camera_AddVecGeoToVec3f(&eyeTarget, at, &scratchGeo);
|
Camera_AddVecGeoToVec3f(&eyeTarget, at, &scratchGeo);
|
||||||
goto setEyeNext;
|
goto setEyeNext;
|
||||||
case 2:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_2:
|
||||||
// linear interpolation of eye/at using the eyeTarget
|
// linear interpolation of eye/at using the eyeTarget
|
||||||
invKeyFrameTimer = 1.0f / rwData->keyFrameTimer;
|
invKeyFrameTimer = 1.0f / rwData->keyFrameTimer;
|
||||||
eyeTarget.x = F32_LERPIMP(camera->eyeNext.x, rwData->eyeTarget.x, invKeyFrameTimer);
|
eyeTarget.x = F32_LERPIMP(camera->eyeNext.x, rwData->eyeTarget.x, invKeyFrameTimer);
|
||||||
|
@ -5527,8 +5531,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->eyeNext.z =
|
camera->eyeNext.z =
|
||||||
Camera_LERPFloorF(eyeTarget.z, camera->eyeNext.z, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
Camera_LERPFloorF(eyeTarget.z, camera->eyeNext.z, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
case 9:
|
case ONEPOINT_CS_ACTION_ID_9:
|
||||||
case 10:
|
case ONEPOINT_CS_ACTION_ID_10:
|
||||||
// linear interpolation of at/fov/roll
|
// linear interpolation of at/fov/roll
|
||||||
invKeyFrameTimer = 1.0f / rwData->keyFrameTimer;
|
invKeyFrameTimer = 1.0f / rwData->keyFrameTimer;
|
||||||
atTarget.x = F32_LERPIMP(camera->at.x, rwData->atTarget.x, invKeyFrameTimer);
|
atTarget.x = F32_LERPIMP(camera->at.x, rwData->atTarget.x, invKeyFrameTimer);
|
||||||
|
@ -5542,7 +5546,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->roll = Camera_LERPFloorS(BINANG_LERPIMPINV(camera->roll, rwData->rollTarget, rwData->keyFrameTimer),
|
camera->roll = Camera_LERPFloorS(BINANG_LERPIMPINV(camera->roll, rwData->rollTarget, rwData->keyFrameTimer),
|
||||||
camera->roll, rwData->curKeyFrame->lerpStepScale, 0xA);
|
camera->roll, rwData->curKeyFrame->lerpStepScale, 0xA);
|
||||||
break;
|
break;
|
||||||
case 4:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_4:
|
||||||
// linear interpolation of eye/at/fov/roll using the step scale, and spherical coordinates
|
// linear interpolation of eye/at/fov/roll using the step scale, and spherical coordinates
|
||||||
OLib_Vec3fDiffToVecGeo(&eyeNextAtOffset, at, eyeNext);
|
OLib_Vec3fDiffToVecGeo(&eyeNextAtOffset, at, eyeNext);
|
||||||
OLib_Vec3fDiffToVecGeo(&rwData->atEyeOffsetTarget, &rwData->atTarget, &rwData->eyeTarget);
|
OLib_Vec3fDiffToVecGeo(&rwData->atEyeOffsetTarget, &rwData->atTarget, &rwData->eyeTarget);
|
||||||
|
@ -5554,7 +5559,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
rwData->curKeyFrame->lerpStepScale, 1);
|
rwData->curKeyFrame->lerpStepScale, 1);
|
||||||
Camera_AddVecGeoToVec3f(eyeNext, at, &scratchGeo);
|
Camera_AddVecGeoToVec3f(eyeNext, at, &scratchGeo);
|
||||||
goto setAtFOVRoll;
|
goto setAtFOVRoll;
|
||||||
case 3:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_3:
|
||||||
// linear interplation of eye/at/fov/roll using the step scale using eyeTarget
|
// linear interplation of eye/at/fov/roll using the step scale using eyeTarget
|
||||||
camera->eyeNext.x =
|
camera->eyeNext.x =
|
||||||
Camera_LERPCeilF(rwData->eyeTarget.x, camera->eyeNext.x, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
Camera_LERPCeilF(rwData->eyeTarget.x, camera->eyeNext.x, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
|
@ -5563,8 +5569,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->eyeNext.z =
|
camera->eyeNext.z =
|
||||||
Camera_LERPCeilF(rwData->eyeTarget.z, camera->eyeNext.z, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
Camera_LERPCeilF(rwData->eyeTarget.z, camera->eyeNext.z, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
case 11:
|
case ONEPOINT_CS_ACTION_ID_11:
|
||||||
case 12:
|
case ONEPOINT_CS_ACTION_ID_12:
|
||||||
setAtFOVRoll:
|
setAtFOVRoll:
|
||||||
// linear interpolation of at/fov/roll using the step scale.
|
// 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.x = Camera_LERPCeilF(rwData->atTarget.x, camera->at.x, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
|
@ -5573,7 +5579,8 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->fov = Camera_LERPCeilF(rwData->fovTarget, camera->fov, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
camera->fov = Camera_LERPCeilF(rwData->fovTarget, camera->fov, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
camera->roll = Camera_LERPCeilS(rwData->rollTarget, camera->roll, rwData->curKeyFrame->lerpStepScale, 1);
|
camera->roll = Camera_LERPCeilS(rwData->rollTarget, camera->roll, rwData->curKeyFrame->lerpStepScale, 1);
|
||||||
break;
|
break;
|
||||||
case 13:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_13:
|
||||||
// linear interpolation of at, with rotation around eyeTargetInit.y
|
// linear interpolation of at, with rotation around eyeTargetInit.y
|
||||||
camera->at.x = Camera_LERPCeilF(rwData->atTarget.x, camera->at.x, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
camera->at.x = Camera_LERPCeilF(rwData->atTarget.x, camera->at.x, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
camera->at.y += camera->playerPosDelta.y * rwData->curKeyFrame->lerpStepScale;
|
camera->at.y += camera->playerPosDelta.y * rwData->curKeyFrame->lerpStepScale;
|
||||||
|
@ -5603,18 +5610,20 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
camera->fov, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
camera->fov, rwData->curKeyFrame->lerpStepScale, 1.0f);
|
||||||
camera->roll = Camera_LERPCeilS(rwData->rollTarget, camera->roll, rwData->curKeyFrame->lerpStepScale, 1);
|
camera->roll = Camera_LERPCeilS(rwData->rollTarget, camera->roll, rwData->curKeyFrame->lerpStepScale, 1);
|
||||||
break;
|
break;
|
||||||
case 24:
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_24:
|
||||||
// Set current keyframe to the roll target?
|
// Set current keyframe to the roll target?
|
||||||
rwData->curKeyFrameIdx = rwData->rollTarget;
|
rwData->curKeyFrameIdx = rwData->rollTarget;
|
||||||
break;
|
break;
|
||||||
case 19: {
|
|
||||||
|
case ONEPOINT_CS_ACTION_ID_19: {
|
||||||
// Change the parent camera (or default)'s mode to normal
|
// Change the parent camera (or default)'s mode to normal
|
||||||
s32 camIdx = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
|
s32 camIdx = 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[camIdx], CAM_MODE_NORMAL, 1);
|
||||||
}
|
}
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
case 18: {
|
case ONEPOINT_CS_ACTION_ID_18: {
|
||||||
// copy the current camera to the parent (or default)'s camera.
|
// copy the current camera to the parent (or default)'s camera.
|
||||||
s32 camIdx = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
|
s32 camIdx = camera->parentCamId <= CAM_ID_NONE ? CAM_ID_MAIN : camera->parentCamId;
|
||||||
Camera* cam = camera->play->cameraPtrs[camIdx];
|
Camera* cam = camera->play->cameraPtrs[camIdx];
|
||||||
|
@ -5632,11 +5641,11 @@ s32 Camera_Unique9(Camera* camera) {
|
||||||
|
|
||||||
*eye = *eyeNext;
|
*eye = *eyeNext;
|
||||||
|
|
||||||
if (rwData->curKeyFrame->actionFlags & 0x80) {
|
if (rwData->curKeyFrame->actionFlags & ONEPOINT_CS_ACTION_FLAG_BGCHECK) {
|
||||||
Camera_BGCheck(camera, at, eye);
|
Camera_BGCheck(camera, at, eye);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rwData->curKeyFrame->actionFlags & 0x40) {
|
if (rwData->curKeyFrame->actionFlags & ONEPOINT_CS_ACTION_FLAG_40) {
|
||||||
// Set the player's position
|
// Set the player's position
|
||||||
camera->player->actor.world.pos.x = rwData->playerPos.x;
|
camera->player->actor.world.pos.x = rwData->playerPos.x;
|
||||||
camera->player->actor.world.pos.z = rwData->playerPos.z;
|
camera->player->actor.world.pos.z = rwData->playerPos.z;
|
||||||
|
@ -6072,7 +6081,7 @@ s32 Camera_Demo5(Camera* camera) {
|
||||||
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D79C);
|
ONEPOINT_CS_INFO(camera)->keyFrameCnt = ARRAY_COUNT(D_8011D79C);
|
||||||
if ((targetScreenPosX < 0x15) || (targetScreenPosX >= 0x12C) || (targetScreenPosY < 0x29) ||
|
if ((targetScreenPosX < 0x15) || (targetScreenPosX >= 0x12C) || (targetScreenPosY < 0x29) ||
|
||||||
(targetScreenPosY >= 0xC8)) {
|
(targetScreenPosY >= 0xC8)) {
|
||||||
D_8011D79C[0].actionFlags = 0x41;
|
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.y = -30.0f;
|
||||||
D_8011D79C[0].atTargetInit.x = 0.0f;
|
D_8011D79C[0].atTargetInit.x = 0.0f;
|
||||||
D_8011D79C[0].atTargetInit.z = 0.0f;
|
D_8011D79C[0].atTargetInit.z = 0.0f;
|
||||||
|
@ -6156,8 +6165,8 @@ s32 Camera_Demo5(Camera* camera) {
|
||||||
targethead.pos.x += 50.0f * Math_SinS(sp4A - 0x7FFF);
|
targethead.pos.x += 50.0f * Math_SinS(sp4A - 0x7FFF);
|
||||||
targethead.pos.z += 50.0f * Math_CosS(sp4A - 0x7FFF);
|
targethead.pos.z += 50.0f * Math_CosS(sp4A - 0x7FFF);
|
||||||
if (Camera_BGCheck(camera, &playerhead.pos, &targethead.pos)) {
|
if (Camera_BGCheck(camera, &playerhead.pos, &targethead.pos)) {
|
||||||
D_8011D954[1].actionFlags = 0xC1;
|
D_8011D954[1].actionFlags = ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, true, true);
|
||||||
D_8011D954[2].actionFlags = 0x8F;
|
D_8011D954[2].actionFlags = ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true);
|
||||||
} else {
|
} else {
|
||||||
D_8011D954[2].timerInit = (s16)(eyeTargetDist * 0.004f) + 6;
|
D_8011D954[2].timerInit = (s16)(eyeTargetDist * 0.004f) + 6;
|
||||||
}
|
}
|
||||||
|
@ -6181,7 +6190,7 @@ s32 Camera_Demo5(Camera* camera) {
|
||||||
Actor_GetFocus(&targethead, camera->target);
|
Actor_GetFocus(&targethead, camera->target);
|
||||||
if (Camera_BGCheck(camera, &playerhead.pos, &targethead.pos)) {
|
if (Camera_BGCheck(camera, &playerhead.pos, &targethead.pos)) {
|
||||||
D_8011D9F4[1].timerInit = 4;
|
D_8011D9F4[1].timerInit = 4;
|
||||||
D_8011D9F4[1].actionFlags = 0x8F;
|
D_8011D9F4[1].actionFlags = ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true);
|
||||||
} else {
|
} else {
|
||||||
t = eyeTargetDist * 0.005f;
|
t = eyeTargetDist * 0.005f;
|
||||||
D_8011D9F4[1].timerInit = t + 8;
|
D_8011D9F4[1].timerInit = t + 8;
|
||||||
|
|
|
@ -2675,105 +2675,311 @@ s32 sDemo5PrevSfxFrame = -200;
|
||||||
|
|
||||||
// target is player, far from eye
|
// target is player, far from eye
|
||||||
OnePointCsFull D_8011D6AC[] = {
|
OnePointCsFull D_8011D6AC[] = {
|
||||||
{ // initflags & 0x00FF (at): 2, atTarget is view lookAt + atInit
|
{
|
||||||
// initFlags & 0xFF00 (eye): none
|
// initflags & 0x00FF (at): 2, atTarget is view lookAt + atInit
|
||||||
// action: 15, copy at, eye, roll, fov to camera
|
// initFlags & 0xFF00 (eye): none
|
||||||
// result: eye remains in the same locaiton, at is View's lookAt
|
// action: 15, copy at, eye, roll, fov to camera
|
||||||
0x8F,
|
// result: eye remains in the same location, at is View's lookAt
|
||||||
0xFF,
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true),
|
||||||
0x0002,
|
0xFF,
|
||||||
0x0001,
|
0x0002,
|
||||||
0x0000,
|
1,
|
||||||
60.0f,
|
0,
|
||||||
1.0f,
|
60.0f,
|
||||||
{ 0.0f, 0.0f, 0.0f },
|
1.0f,
|
||||||
{ 0.0f, 0.0f, 0.0f } },
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
{ // initFlags & 0x00FF (at): 3, atTarget is camera's current at + atInit
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
// initFlags & 0xFF00 (eye): 3, eyeTarget is the camera's current eye + eyeInit
|
},
|
||||||
// action: interplate eye and at.
|
{
|
||||||
// result: eye and at's y interpolate to become +20 from their current location.
|
// initFlags & 0x00FF (at): 3, atTarget is camera's current at + atInit
|
||||||
0x81,
|
// initFlags & 0xFF00 (eye): 3, eyeTarget is the camera's current eye + eyeInit
|
||||||
0xFF,
|
// action: interpolate eye and at.
|
||||||
0x0303,
|
// result: eye and at's y interpolate to become +20 from their current location.
|
||||||
0x0013,
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, false, true),
|
||||||
0x0000,
|
0xFF,
|
||||||
45.0f,
|
0x0303,
|
||||||
1.0f,
|
19,
|
||||||
{ 0.0f, 20.0f, 0.0f },
|
0,
|
||||||
{ 0.0f, 20.0f, 0.0f } },
|
45.0f,
|
||||||
{ // initFlags & 0x00FF (at): 0 none
|
1.0f,
|
||||||
// initFlags & 0xFF00 (eye): 0 none
|
{ 0.0f, 20.0f, 0.0f },
|
||||||
// action: 18, copy this camera to default camera.
|
{ 0.0f, 20.0f, 0.0f },
|
||||||
0x12,
|
},
|
||||||
0xFF,
|
{
|
||||||
0x0000,
|
// initFlags & 0x00FF (at): 0 none
|
||||||
0x0001,
|
// initFlags & 0xFF00 (eye): 0 none
|
||||||
0x0000,
|
// action: 18, copy this camera to default camera.
|
||||||
60.0f,
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
1.0f,
|
0xFF,
|
||||||
{ -1.0f, -1.0f, -1.0f },
|
0x0000,
|
||||||
{ -1.0f, -1.0f, -1.0f } },
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// target is player close to current eye
|
// target is player close to current eye
|
||||||
OnePointCsFull D_8011D724[] = {
|
OnePointCsFull D_8011D724[] = {
|
||||||
{ 0x8F, 0xFF, 0x2424, 0x0001, 0x0000, 60.0f, 1.0f, { 0.0f, 0.0f, 0.0f }, { 0.0f, 10.0f, -20.0f } },
|
{
|
||||||
{ 0x81, 0xFF, 0x2121, 0x0013, 0x0000, 50.0f, 1.0f, { 0.0f, -10.0f, 0.0f }, { 0.0f, 0.0f, 60.0f } },
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true),
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
0xFF,
|
||||||
|
0x2424,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
|
{ 0.0f, 10.0f, -20.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x2121,
|
||||||
|
19,
|
||||||
|
0,
|
||||||
|
50.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, -10.0f, 0.0f },
|
||||||
|
{ 0.0f, 0.0f, 60.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// target is close to player
|
// target is close to player
|
||||||
OnePointCsFull D_8011D79C[] = {
|
OnePointCsFull D_8011D79C[] = {
|
||||||
{ 0xCF, 0xFF, 0x0002, 0x0001, 0x0000, 60.0f, 1.0f, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } },
|
|
||||||
{ 0xC1, 0xFF, 0x0303, 0x0013, 0x0000, 45.0f, 1.0f, { 0.0f, -20.0f, 0.0f }, { 0.0f, -10.0f, 5.0f } },
|
|
||||||
{
|
{
|
||||||
0xC1,
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, true, true),
|
||||||
|
0xFF,
|
||||||
|
0x0002,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, true, true),
|
||||||
0xFF,
|
0xFF,
|
||||||
0x0303,
|
0x0303,
|
||||||
0x0009,
|
19,
|
||||||
0x0000,
|
0,
|
||||||
|
45.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, -20.0f, 0.0f },
|
||||||
|
{ 0.0f, -10.0f, 5.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, true, true),
|
||||||
|
0xFF,
|
||||||
|
0x0303,
|
||||||
|
9,
|
||||||
|
0,
|
||||||
60.0f,
|
60.0f,
|
||||||
1.0f,
|
1.0f,
|
||||||
{ 0.0f, 10.0f, 0.0f },
|
{ 0.0f, 10.0f, 0.0f },
|
||||||
{ 0.0f, 10.0f, 0.0f },
|
{ 0.0f, 10.0f, 0.0f },
|
||||||
},
|
},
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// target is within 300 units of eye, and player is within 30 units of eye
|
// target is within 300 units of eye, and player is within 30 units of eye
|
||||||
OnePointCsFull D_8011D83C[] = {
|
OnePointCsFull D_8011D83C[] = {
|
||||||
{ 0x83, 0xFF, 0x2141, 0x0014, 0x0000, 45.0f, 0.2f, { 0.0f, 0.0f, 10.0f }, { 0.0f, 0.0f, 10.0f } },
|
{
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_3, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x2141,
|
||||||
|
20,
|
||||||
|
0,
|
||||||
|
45.0f,
|
||||||
|
0.2f,
|
||||||
|
{ 0.0f, 0.0f, 10.0f },
|
||||||
|
{ 0.0f, 0.0f, 10.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// target is within 700 units of eye, angle between player/eye and target/eye is less than
|
// target is within 700 units of eye, angle between player/eye and target/eye is less than
|
||||||
// 76.9 degrees. The x/y coordinates of the target on screen is between (21, 41) and (300, 200),
|
// 76.9 degrees. The x/y coordinates of the target on screen is between (21, 41) and (300, 200),
|
||||||
// and the player is farther than 30 units of the eye
|
// and the player is farther than 30 units of the eye
|
||||||
OnePointCsFull D_8011D88C[] = {
|
OnePointCsFull D_8011D88C[] = {
|
||||||
{ 0x81, 0xFF, 0x0303, 0x0014, 0x0000, 45.0f, 1.0f, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } },
|
{
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_1, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x0303,
|
||||||
|
20,
|
||||||
|
0,
|
||||||
|
45.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
|
{ 0.0f, 0.0f, 0.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// same as above, but the target is NOT within the screen area.
|
// same as above, but the target is NOT within the screen area.
|
||||||
OnePointCsFull D_8011D8DC[] = {
|
OnePointCsFull D_8011D8DC[] = {
|
||||||
{ 0x8F, 0xFF, 0x0404, 0x0014, 0x0001, 50.0f, 1.0f, { 0.0f, 5.0f, 10.0f }, { 0.0f, 10.0f, -80.0f } },
|
{
|
||||||
{ 0x82, 0xFF, 0x2121, 0x0005, 0x0000, 60.0f, 1.0f, { 0.0f, 5.0f, 0.0f }, { 5.0f, 5.0f, -200.0f } },
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true),
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
0xFF,
|
||||||
|
0x0404,
|
||||||
|
20,
|
||||||
|
1,
|
||||||
|
50.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 5.0f, 10.0f },
|
||||||
|
{ 0.0f, 10.0f, -80.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_2, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x2121,
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 5.0f, 0.0f },
|
||||||
|
{ 5.0f, 5.0f, -200.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// target is a door.
|
// target is a door.
|
||||||
OnePointCsFull D_8011D954[] = {
|
OnePointCsFull D_8011D954[] = {
|
||||||
{ 0x0F, 0xFF, 0xC1C1, 0x0014, 0x0000, 60.0f, 1.0f, { 0.0f, 0.0f, 50.0f }, { 0.0f, 0.0f, 250.0f } },
|
{
|
||||||
{ 0x83, 0xFF, 0x05B1, 0x0005, 0x0000, 60.0f, 0.1f, { 0.0f, 10.0f, 50.0f }, { 0.0f, 10.0f, 100.0f } },
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, false),
|
||||||
{ 0x82, 0xFF, 0x2121, 0x0005, 0x0002, 60.0f, 1.0f, { 0.0f, 10.0f, 0.0f }, { 0.0f, 20.0f, -150.0f } },
|
0xFF,
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
0xC1C1,
|
||||||
|
20,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 0.0f, 50.0f },
|
||||||
|
{ 0.0f, 0.0f, 250.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_3, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x05B1,
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
0.1f,
|
||||||
|
{ 0.0f, 10.0f, 50.0f },
|
||||||
|
{ 0.0f, 10.0f, 100.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_2, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x2121,
|
||||||
|
5,
|
||||||
|
2,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 10.0f, 0.0f },
|
||||||
|
{ 0.0f, 20.0f, -150.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// otherwise
|
// otherwise
|
||||||
OnePointCsFull D_8011D9F4[] = {
|
OnePointCsFull D_8011D9F4[] = {
|
||||||
{ 0x8F, 0xFF, 0x0504, 0x0014, 0x0002, 60.0f, 1.0f, { 0.0f, 5.0f, 50.0f }, { 0.0f, 20.0f, 300.0f } },
|
{
|
||||||
{ 0x82, 0xFF, 0x2121, 0x0005, 0x0002, 60.0f, 1.0f, { 0.0f, 10.0f, 0.0f }, { 0.0f, 20.0f, -150.0f } },
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true),
|
||||||
{ 0x12, 0xFF, 0x0000, 0x0001, 0x0000, 60.0f, 1.0f, { -1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f } },
|
0xFF,
|
||||||
|
0x0504,
|
||||||
|
20,
|
||||||
|
2,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 5.0f, 50.0f },
|
||||||
|
{ 0.0f, 20.0f, 300.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_2, false, true),
|
||||||
|
0xFF,
|
||||||
|
0x2121,
|
||||||
|
5,
|
||||||
|
2,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ 0.0f, 10.0f, 0.0f },
|
||||||
|
{ 0.0f, 20.0f, -150.0f },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_18, false, false),
|
||||||
|
0xFF,
|
||||||
|
0x0000,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
60.0f,
|
||||||
|
1.0f,
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
{ -1.0f, -1.0f, -1.0f },
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -147,7 +147,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
||||||
csInfo->keyFrameCnt = 11;
|
csInfo->keyFrameCnt = 11;
|
||||||
|
|
||||||
for (i = 0; i < csInfo->keyFrameCnt - 3; i++) {
|
for (i = 0; i < csInfo->keyFrameCnt - 3; i++) {
|
||||||
if (D_80120B94[i].actionFlags != 0x8F) {
|
if (D_80120B94[i].actionFlags != ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true)) {
|
||||||
D_80120B94[i].atTargetInit.x = Rand_ZeroOne() * 5.0f;
|
D_80120B94[i].atTargetInit.x = Rand_ZeroOne() * 5.0f;
|
||||||
D_80120B94[i].atTargetInit.z = (Rand_ZeroOne() * 30.0f) + 10.0f;
|
D_80120B94[i].atTargetInit.z = (Rand_ZeroOne() * 30.0f) + 10.0f;
|
||||||
D_80120B94[i].eyeTargetInit.x = (Rand_ZeroOne() * 100.0f) + 20.0f;
|
D_80120B94[i].eyeTargetInit.x = (Rand_ZeroOne() * 100.0f) + 20.0f;
|
||||||
|
@ -169,7 +169,7 @@ s32 OnePointCutscene_SetInfo(PlayState* play, s16 subCamId, s16 csId, Actor* act
|
||||||
csInfo->keyFrameCnt = 7;
|
csInfo->keyFrameCnt = 7;
|
||||||
|
|
||||||
for (i = 0; i < csInfo->keyFrameCnt - 3; i++) {
|
for (i = 0; i < csInfo->keyFrameCnt - 3; i++) {
|
||||||
if (D_80120D4C[i].actionFlags != 0x8F) {
|
if (D_80120D4C[i].actionFlags != ONEPOINT_CS_ACTION(ONEPOINT_CS_ACTION_ID_15, false, true)) {
|
||||||
D_80120D4C[i].atTargetInit.x = Rand_ZeroOne() * 20.0f;
|
D_80120D4C[i].atTargetInit.x = Rand_ZeroOne() * 20.0f;
|
||||||
D_80120D4C[i].atTargetInit.z = (Rand_ZeroOne() * 40.0f) + 10.0f;
|
D_80120D4C[i].atTargetInit.z = (Rand_ZeroOne() * 40.0f) + 10.0f;
|
||||||
D_80120D4C[i].eyeTargetInit.x = (Rand_ZeroOne() * 40.0f) + 60.0f;
|
D_80120D4C[i].eyeTargetInit.x = (Rand_ZeroOne() * 40.0f) + 60.0f;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue