Introducing z64camera.h (#797)

* Introduce z64camera.h

* format

* Oops

* Change paramData to u8

* BINANG_TO_DEGF and DEGF_TO_BINANG to z64camera.h

* Fix bss, thanks Anon

* Update with docs from OoT

* Cleanup

* Fix activeCamId

* underwater

* remove interface alpha stuff

* Oops

* To Hex

* Cleanup cam settings comments

* PR Suggestions

* More PR Suggestions

* trackActor -> focalActor

* Fix merge

* Fix bss, thanks Anon
This commit is contained in:
engineer124 2022-07-12 00:25:40 -04:00 committed by GitHub
parent 628482f3c4
commit fda5da2500
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 492 additions and 175 deletions

View File

@ -1114,15 +1114,15 @@ u32 Camera_SetMode(Camera* camera, s16 mode, s8 param_3);
s32 Camera_ChangeMode(Camera* camera, s16 mode);
// void func_800DF86C(void);
// void func_800DF8EC(void);
s32 func_800DFAC8(Camera* camera, s16 param_2);
s32 Camera_ChangeSetting(Camera* camera, s16 setting);
u32 Camera_ChangeDataIdx(Camera* camera, u32 camDataIdx);
// void func_800DFC1C(void);
// void func_800DFC40(void);
s32 Camera_GetInputDirYaw(Camera* camera);
void func_800DFC90(Vec3s* arg0, Camera* camera);
void Camera_GetCamDir(Vec3s* dst, Camera* camera);
s16 Camera_GetCamDirPitch(Camera* camera);
s16 Camera_GetCamDirYaw(Camera* camera);
void func_800DFD04(Camera* camera, s32 arg1, s32 arg2, s32 arg3);
void Camera_AddQuake(Camera* camera, s32 arg1, s16 y, s32 countdown);
void func_800DFD78(Camera* camera, s32 paramFlag, void* value);
// UNK_TYPE4 func_800DFEF0(s32 param_1, u16 param_2);
// UNK_TYPE4 func_800DFF18(Camera* iParm1, UNK_TYPE2 uParm2);
@ -1130,7 +1130,7 @@ void func_800DFD78(Camera* camera, s32 paramFlag, void* value);
// UNK_TYPE4 func_800DFF44(void);
s16 Camera_SetFlags(Camera* iParm1, s16 flags);
s16 Camera_ClearFlags(Camera* camera, s16 flags);
s32 func_800DFFAC(Camera* camera, Actor* doorActor, s16 bgCamDataId, f32 arg3, s16 timer1, s16 timer2, s16 timer3);
s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamDataId, f32 arg3, s16 timer1, s16 timer2, s16 timer3);
// UNK_TYPE4 func_800E007C(Camera* param_1, Camera* param_2);
// UNK_TYPE4 func_800E01AC(void);
Vec3f* Camera_GetQuakeOffset(Vec3f* dst, Camera* camera);
@ -2734,9 +2734,9 @@ void Game_UpdateFramerateVariables(s32 divisor);
void Game_SetFramerateDivisor(GameState* gameState, s32 divisor);
void GameState_SetFBFilter(Gfx** gfx, u32 arg1);
void Game_Nop80173534(GameState* gameState);
void GameState_Draw(GameState* gameState, GraphicsContext* gCtxt);
void GameState_SetFrameBuffer(GraphicsContext* gCtxt);
void func_801736DC(GraphicsContext* gCtxt);
void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx);
void GameState_SetFrameBuffer(GraphicsContext* gfxCtx);
void func_801736DC(GraphicsContext* gfxCtx);
void Game_UpdateInput(GameState* gameState);
void Game_Update(GameState* gameState);
void Game_IncrementFrameCount(GameState* gameState);

View File

@ -19,8 +19,7 @@
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - RDRAM_CACHED)
#define SEGMENTED_TO_VIRTUAL(addr) (void*)(PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)]) + SEGMENT_OFFSET(addr))
#define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamera])
#define CAM_ID_MAIN 0
#define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId])
#define SET_NEXT_GAMESTATE(curState, newInit, newStruct) \
(curState)->nextGameStateInit = (GameStateFunc)newInit; \

View File

@ -815,10 +815,10 @@ extern BgSpecialSceneMaxObjects sCustomDynapolyMem[];
// extern UNK_TYPE1 D_801B969C;
// extern UNK_TYPE1 D_801B976C;
// extern UNK_TYPE1 D_801B979C;
extern CameraStateParams cameraStates[91];
// extern CameraStateParams cameraStates[91];
// extern UNK_TYPE1 D_801B9CE2;
extern UNK_PTR D_801B9CE4;
extern camera_update_func cameraUpdateFuncs[71];
// extern UNK_PTR D_801B9CE4;
// extern camera_update_func cameraUpdateFuncs[71];
// extern UNK_TYPE2 D_801B9E04;
// extern UNK_TYPE4 D_801B9E08;
// extern UNK_TYPE4 D_801B9E0C;

View File

@ -29,6 +29,7 @@
#include "z64animation.h"
#include "z64audio.h"
#include "z64bgcheck.h"
#include "z64camera.h"
#include "z64collision_check.h"
#include "z64curve.h"
#include "z64cutscene.h"
@ -443,7 +444,7 @@ typedef struct {
/* 0x150 */ Vec3f curDistortionScale;
/* 0x15C */ u16 normal;
/* 0x160 */ u32 flags; // bit 3: Render to an orthographic perspective
/* 0x164 */ UNK_TYPE4 unk164;
/* 0x164 */ s32 unk164;
} View; // size = 0x168
typedef void(*fault_update_input_func)(Input* input);
@ -1004,73 +1005,6 @@ typedef struct {
/* 0x20 */ u32 unk20;
} s801BB170; // size = 0x24
typedef struct Camera {
/* 0x000 */ char paramData[0x50];
/* 0x050 */ Vec3f at;
/* 0x05C */ Vec3f eye;
/* 0x068 */ Vec3f up;
/* 0x074 */ Vec3f eyeNext;
/* 0x080 */ Vec3f skyboxOffset;
/* 0x08C */ struct PlayState* play;
/* 0x090 */ struct Player* player;
/* 0x094 */ PosRot playerPosRot;
/* 0x0A8 */ struct Actor* target;
/* 0x0AC */ PosRot targetPosRot;
/* 0x0C0 */ f32 rUpdateRateInv;
/* 0x0C4 */ f32 pitchUpdateRateInv;
/* 0x0C8 */ f32 yawUpdateRateInv;
/* 0x0CC */ f32 yOffsetUpdateRate;
/* 0x0D0 */ f32 xzOffsetUpdateRate;
/* 0x0D4 */ f32 fovUpdateRate;
/* 0x0D8 */ f32 xzSpeed;
/* 0x0DC */ f32 dist;
/* 0x0E0 */ f32 speedRatio;
/* 0x0E4 */ Vec3f posOffset;
/* 0x0F0 */ Vec3f playerPosDelta;
/* 0x0FC */ f32 fov;
/* 0x100 */ f32 atLERPStepScale;
/* 0x104 */ f32 playerGroundY;
/* 0x108 */ Vec3f floorNorm;
/* 0x114 */ f32 waterYPos;
/* 0x118 */ s32 waterPrevCamIdx;
/* 0x11C */ s32 waterPrevCamSetting;
/* 0x120 */ s16 waterQuakeId;
/* 0x122 */ s16 unk122;
/* 0x124 */ void* data0;
/* 0x128 */ void* data1;
/* 0x12C */ s16 data2;
/* 0x12E */ s16 data3;
/* 0x130 */ s16 uid;
/* 0x132 */ UNK_TYPE1 pad132[2];
/* 0x134 */ Vec3s inputDir;
/* 0x13A */ Vec3s camDir;
/* 0x140 */ s16 status;
/* 0x142 */ s16 setting;
/* 0x144 */ s16 mode;
/* 0x146 */ s16 bgCheckId;
/* 0x148 */ s16 camDataIdx;
/* 0x14A */ s16 flags1;
/* 0x14C */ s16 flags2;
/* 0x14E */ s16 childCamIdx;
/* 0x150 */ s16 unk150;
/* 0x152 */ s16 unk152;
/* 0x154 */ s16 prevSetting;
/* 0x156 */ s16 nextCamDataIdx;
/* 0x158 */ s16 nextBGCheckId;
/* 0x15A */ s16 roll;
/* 0x15C */ s16 paramFlags;
/* 0x15E */ s16 animState;
/* 0x160 */ s16 unk160;
/* 0x162 */ s16 timer;
/* 0x164 */ s16 camId;
/* 0x166 */ s16 prevCamDataIdx;
/* 0x168 */ s16 unk168;
/* 0x16A */ s16 unk16A;
/* 0x16C */ Vec3f meshActorPos;
} Camera; // size = 0x178
typedef s32(*camera_update_func)(Camera* camera);
typedef struct {
/* 0x00 */ Vec3f atOffset;
/* 0x0C */ Vec3f eyeOffset;
@ -1266,9 +1200,9 @@ struct PlayState {
/* 0x000B4 */ char unk_B4[0x4];
/* 0x000B8 */ View view;
/* 0x00220 */ Camera mainCamera;
/* 0x00398 */ Camera subCameras[3];
/* 0x00800 */ Camera* cameraPtrs[4];
/* 0x00810 */ s16 activeCamera;
/* 0x00398 */ Camera subCameras[NUM_CAMS - CAM_ID_SUB_FIRST];
/* 0x00800 */ Camera* cameraPtrs[NUM_CAMS];
/* 0x00810 */ s16 activeCamId;
/* 0x00812 */ s16 nextCamera;
/* 0x00814 */ SoundContext soundCtx;
/* 0x00818 */ LightContext lightCtx;

387
include/z64camera.h Normal file
View File

@ -0,0 +1,387 @@
#ifndef Z64CAMERA_H
#define Z64CAMERA_H
#include "ultra64.h"
// these two angle conversion macros are slightly inaccurate
#define CAM_DEG_TO_BINANG(degrees) (s16)((degrees) * ((f32)0xFFFF / 360) + .5f)
#define CAM_BINANG_TO_DEG(binang) ((f32)(binang) * (360.0001525f / 0xFFFF))
#define NUM_CAMS 4
// Camera IDs are indices into `cameraPtrs`
#define CAM_ID_MAIN 0 // The index of the main camera
#define CAM_ID_SUB_FIRST 1 // The index sub cameras start at
#define CAM_ID_NONE -1 // Used to indicate no camera. Can be used to default to the active camera in some scenarios
#define SUB_CAM_ID_DONE 0 // Used in some actors for variables holding sub camera IDs to indicate "subcam is finished"
// Camera behaviorFlags. Flags specifically for settings, modes, and bgCam
// Used to store current state, only CAM_BEHAVIOR_SETTING_1 and CAM_BEHAVIOR_BG_2 are read from and used in logic
// Setting (0x1, 0x10)
#define CAM_BEHAVIOR_SETTING_USE_PRIORITY (1 << 0) // Use settings priority system
#define CAM_BEHAVIOR_SETTING_2 (1 << 4)
// Mode (0x2, 0x20)
#define CAM_BEHAVIOR_MODE_1 (1 << 1)
#define CAM_BEHAVIOR_MODE_2 (1 << 5)
// bgCam (0x4, 0x40)
#define CAM_BEHAVIOR_BGCAM_1 (1 << 2)
#define CAM_BEHAVIOR_BGCAM_2 (1 << 6)
// Camera stateFlags. Variety of generic flags
#define CAM_STATE_0 (1 << 0) // Must be set for the camera from changing settings based on the bg surface
#define CAM_STATE_1 (1 << 1)
#define CAM_STATE_2 (1 << 2)
#define CAM_STATE_3 (1 << 3)
#define CAM_STATE_4 (1 << 4)
#define CAM_STATE_5 (1 << 5)
#define CAM_STATE_6 (1 << 6)
#define CAM_STATE_7 (1 << 7)
#define CAM_STATE_UNDERWATER (1 << 8)
#define CAM_STATE_9 (1 << 9)
#define CAM_STATE_10 (1 << 10) // Surpresses the camera from changing settings based on the bg surface
#define CAM_STATE_11 (1 << 11)
#define CAM_STATE_12 (1 << 12)
#define CAM_STATE_13 (1 << 13)
#define CAM_STATE_14 (1 << 14)
#define CAM_STATE_15 ((s16)(1 << 15))
// Camera viewFlags. Set params related to view
#define CAM_VIEW_AT (1 << 0) // camera->at
#define CAM_VIEW_EYE (1 << 1) // camera->eye and camera->eyeNext
#define CAM_VIEW_UP (1 << 2) // camera->up
#define CAM_VIEW_TARGET (1 << 3) // camera->target
#define CAM_VIEW_TARGET_POS (1 << 4) // camera->targetPosRot.pos
#define CAM_VIEW_FOV (1 << 5) // camera->fov
#define CAM_VIEW_ROLL (1 << 6) // camera->roll
/**
* Camera Status type
* Determines how much the camera is updated each frame
* Higher values represents higher levels of activity
*/
// Camera is on
#define CAM_STATUS_CUT 0 // The camera is not updated at all
#define CAM_STATUS_WAIT 1 // There is minimally/partially updated, action function is not run
#define CAM_STATUS_UNK3 3 // The camera is mostly updated including running its action function, but data is not set to view
#define CAM_STATUS_ACTIVE 7 // The camera is fully updated, info is sent to view
// Camera is off
#define CAM_STATUS_INACTIVE 0x100
typedef enum {
/* 0x00 */ CAM_SET_NONE,
/* 0x01 */ CAM_SET_NORMAL0, // Generic camera 0, used in various places "NORMAL0"
/* 0x02 */ CAM_SET_NORMAL3, // Generic camera 3, used in various places "NORMAL3"
/* 0x03 */ CAM_SET_PIVOT_DIVING, // Player diving from the surface of the water to underwater not as zora "CIRCLE5"
/* 0x04 */ CAM_SET_HORSE, // Reiding a horse "HORSE0"
/* 0x05 */ CAM_SET_ZORA_DIVING, // Parallel's Pivot Diving, but as Zora. However, Zora does not dive like a human. So this setting appears to not be used "ZORA0"
/* 0x06 */ CAM_SET_PREREND_FIXED, // Unused remnant of OoT: camera is fixed in position and rotation "PREREND0"
/* 0x07 */ CAM_SET_PREREND_PIVOT, // Unused remnant of OoT: Camera is fixed in position with fixed pitch, but is free to rotate in the yaw direction 360 degrees "PREREND1"
/* 0x08 */ CAM_SET_DOORC, // Generic room door transitions, camera moves and follows player as the door is open and closed "DOORC"
/* 0x09 */ CAM_SET_DEMO0, // Unknown, possibly related to treasure chest game as goron? "DEMO0"
/* 0x0A */ CAM_SET_FREE0, // Free Camera, manual control is given, no auto-updating eye or at "FREE0"
/* 0x0B */ CAM_SET_BIRDS_EYE_VIEW_0, // Appears unused. Camera is a top-down view "FUKAN0"
/* 0x0C */ CAM_SET_NORMAL1, // Generic camera 1, used in various places "NORMAL1"
/* 0x0D */ CAM_SET_NANAME, // Unknown, slanted or tilted. Behaves identical to Normal0 except with added roll "NANAME"
/* 0x0E */ CAM_SET_CIRCLE0, // Used in Curiosity Shop, Pirates Fortress, Mayor's Residence "CIRCLE0"
/* 0x0F */ CAM_SET_FIXED0, // Used in Sakon's Hideout puzzle rooms, milk bar stage "FIXED0"
/* 0x10 */ CAM_SET_SPIRAL_DOOR, // Exiting a Spiral Staircase "SPIRAL"
/* 0x11 */ CAM_SET_DUNGEON0, // Generic dungeon camera 0, used in various places "DUNGEON0"
/* 0x12 */ CAM_SET_ITEM0, // Getting an item and holding it above Player's head (from small chest, freestanding, npc, ...) "ITEM0"
/* 0x13 */ CAM_SET_ITEM1, // Looking at player while playing the ocarina "ITEM1"
/* 0x14 */ CAM_SET_ITEM2, // Bottles: drinking, releasing fairy, dropping fish "ITEM2"
/* 0x15 */ CAM_SET_ITEM3, // Bottles: catching fish or bugs, showing an item "ITEM3"
/* 0x16 */ CAM_SET_NAVI, // Song of Soaring, variations of playing Song of Time "NAVI"
/* 0x17 */ CAM_SET_WARP_PAD_MOON, // Warp circles from Goron Trial on the moon "WARP0"
/* 0x18 */ CAM_SET_DEATH, // Player death animation when health goes to 0 "DEATH"
/* 0x19 */ CAM_SET_REBIRTH, // Unknown set with camDataId = -9 (it's not being revived by a fairy) "REBIRTH"
/* 0x1A */ CAM_SET_LONG_CHEST_OPENING, // Long cutscene when opening a big chest with a major item "TREASURE"
/* 0x1B */ CAM_SET_MASK_TRANSFORMATION, // Putting on a transformation mask "TRANSFORM"
/* 0x1C */ CAM_SET_ATTENTION, // Unknown, set with camDataId = -15 "ATTENTION"
/* 0x1D */ CAM_SET_WARP_PAD_ENTRANCE, // Warp pad from start of a dungeon to the boss-room "WARP1"
/* 0x1E */ CAM_SET_DUNGEON1, // Generic dungeon camera 1, used in various places "DUNGEON1"
/* 0x1F */ CAM_SET_FIXED1, // Fixes camera in place, used in various places eg. entering Stock Pot Inn, hiting a switch, giving witch a red potion, shop browsing "FIXED1"
/* 0x20 */ CAM_SET_FIXED2, // Used in Pinnacle Rock after defeating Sea Monsters, and by Tatl in Fortress "FIXED2"
/* 0x21 */ CAM_SET_MAZE, // Unused. Set to use Camera_Parallel2(), which is only Camera_Noop() "MAZE"
/* 0x22 */ CAM_SET_REMOTEBOMB, // Unused. Set to use Camera_Parallel2(), which is only Camera_Noop(). But also related to Play_ChangeCameraSetting? "REMOTEBOMB"
/* 0x23 */ CAM_SET_CIRCLE1, // Unknown "CIRCLE1"
/* 0x24 */ CAM_SET_CIRCLE2, // Looking at far-away NPCs eg. Garo in Road to Ikana, Hungry Goron, Tingle "CIRCLE2"
/* 0x25 */ CAM_SET_CIRCLE3, // Used in curiosity shop, goron racetrack, final room in Sakon's hideout, other places "CIRCLE3"
/* 0x26 */ CAM_SET_CIRCLE4, // Used during the races on the doggy racetrack "CIRCLE4"
/* 0x27 */ CAM_SET_FIXED3, // Used in Stock Pot Inn Toilet and Tatl cutscene after woodfall "FIXED3"
/* 0x28 */ CAM_SET_TOWER_ASCENT, // Various climbing structures (Snowhead climb to the temple entrance) "TOWER0"
/* 0x29 */ CAM_SET_PARALLEL0, // Unknown "PARALLEL0"
/* 0x2A */ CAM_SET_NORMALD, // Unknown, set with camDataId = -20 "NORMALD"
/* 0x2B */ CAM_SET_SUBJECTD, // Unknown, set with camDataId = -21 "SUBJECTD"
/* 0x2C */ CAM_SET_START0, // Entering a room, either Dawn of a New Day reload, or entering a door where the camera is fixed on the other end "START0"
/* 0x2D */ CAM_SET_START2, // Entering a scene, camera is put at a low angle eg. Grottos, Deku Palace, Stock Pot Inn "START2"
/* 0x2E */ CAM_SET_STOP0, // Called in z_play "STOP0"
/* 0x2F */ CAM_SET_BOAT_CRUISE, // Koume's boat cruise "JCRUISING"
/* 0x30 */ CAM_SET_VERTICAL_CLIMB, // Large vertical climbs, such as Mountain Village wall or Pirates Fortress ladder. "CLIMBMAZE"
/* 0x31 */ CAM_SET_SIDED, // Unknown, set with camDataId = -24 "SIDED"
/* 0x32 */ CAM_SET_DUNGEON2, // Generic dungeon camera 2, used in various places "DUNGEON2"
/* 0x33 */ CAM_SET_BOSS_ODOLWA, // Odolwa's Lair, also used in GBT entrance: "BOSS_SHIGE"
/* 0x34 */ CAM_SET_KEEPBACK, // Unknown. Possibly related to climbing something? "KEEPBACK"
/* 0x35 */ CAM_SET_CIRCLE6, // Used in select regions from Ikana "CIRCLE6"
/* 0x36 */ CAM_SET_CIRCLE7, // Unknown "CIRCLE7"
/* 0x37 */ CAM_SET_MINI_BOSS, // Used during the various minibosses of the "CHUBOSS"
/* 0x38 */ CAM_SET_RFIXED1, // Talking to Koume stuck on the floor in woods of mystery "RFIXED1"
/* 0x39 */ CAM_SET_TREASURE_CHEST_MINIGAME, // Treasure Chest Shop in East Clock Town, minigame location "TRESURE1"
/* 0x3A */ CAM_SET_HONEY_AND_DARLING_1, // Honey and Darling Minigames "BOMBBASKET"
/* 0x3B */ CAM_SET_CIRCLE8, // Used by Stone Tower moving platforms, Falling eggs in Marine Lab, Bugs into soilpatch cutscene "CIRCLE8"
/* 0x3C */ CAM_SET_BIRDS_EYE_VIEW_1, // Camera is a top-down view. Used in Fisherman's minigame and Deku Palace "FUKAN1"
/* 0x3D */ CAM_SET_DUNGEON3, // Generic dungeon camera 3, used in various places "DUNGEON3"
/* 0x3E */ CAM_SET_TELESCOPE, // Observatory telescope and Curiosity Shop Peep-Hole "TELESCOPE"
/* 0x3F */ CAM_SET_ROOM0, // Certain rooms eg. inside the clock tower "ROOM0"
/* 0x40 */ CAM_SET_RCIRC0, // Used by a few NPC cutscenes, focus close on the NPC "RCIRC0"
/* 0x41 */ CAM_SET_CIRCLE9, // Used by Sakon Hideout entrance and Deku Palace Maze "CIRCLE9"
/* 0x42 */ CAM_SET_ONTHEPOLE, // Somewhere in Snowhead Temple and Woodfall Temple "ONTHEPOLE"
/* 0x43 */ CAM_SET_INBUSH, // Various bush environments eg. grottos, Swamp Spider House, Termina Field grass bushes, Deku Palace near bean "INBUSH"
/* 0x44 */ CAM_SET_BOSS_MAJORA, // Majora's Lair: "BOSS_LAST"
/* 0x45 */ CAM_SET_BOSS_TWINMOLD, // Twinmold's Lair: "BOSS_INI"
/* 0x46 */ CAM_SET_BOSS_GOHT, // Goht's Lair: "BOSS_HAK"
/* 0x47 */ CAM_SET_BOSS_GYORG, // Gyorg's Lair: "BOSS_KON"
/* 0x48 */ CAM_SET_CONNECT0, // Smoothly and gradually return camera to Player after a cutscene "CONNECT0"
/* 0x49 */ CAM_SET_PINNACLE_ROCK, // Pinnacle Rock pit "MORAY"
/* 0x4A */ CAM_SET_NORMAL2, // Generic camera 2, used in various places "NORMAL2"
/* 0x4B */ CAM_SET_HONEY_AND_DARLING_2, // "BOMBBOWL"
/* 0x4C */ CAM_SET_CIRCLEA, // Unknown, Circle 10 "CIRCLEA"
/* 0x4D */ CAM_SET_WHIRLPOOL, // Great Bay Temple Central Room Whirlpool "WHIRLPOOL"
/* 0x4E */ CAM_SET_CUCCO_SHACK, // "KOKKOGAME"
/* 0x4F */ CAM_SET_GIANT, // Giants Mask in Twinmold's Lair "GIANT"
/* 0x50 */ CAM_SET_SCENE0, // Entering doors to a new scene "SCENE0"
/* 0x51 */ CAM_SET_ROOM1, // Certain rooms eg. some rooms in Stock Pot Inn "ROOM1"
/* 0x52 */ CAM_SET_WATER2, // Swimming as Zora in Great Bay Temple "WATER2"
/* 0x53 */ CAM_SET_WOODFALL_SWAMP, // Woodfall inside the swamp, but not on the platforms, "SOKONASI"
/* 0x54 */ CAM_SET_FORCEKEEP, // Unknown "FORCEKEEP"
/* 0x55 */ CAM_SET_PARALLEL1, // Unknown "PARALLEL1"
/* 0x56 */ CAM_SET_START1, // Used when entering the lens cave "START1"
/* 0x57 */ CAM_SET_ROOM2, // Certain rooms eg. Deku King's Chamber, Ocean Spider House "ROOM2"
/* 0x58 */ CAM_SET_NORMAL4, // Generic camera 4, used in Ikana Graveyard "NORMAL4"
/* 0x59 */ CAM_SET_ELEGY_SHELL, // cutscene after playing elegy of emptyness and spawning a shell "SHELL"
/* 0x5A */ CAM_SET_DUNGEON4, // Used in Pirates Fortress Interior, hidden room near hookshot "DUNGEON4"
/* 0x5B */ CAM_SET_MAX
} CameraSettingType;
typedef enum {
/* 0x00 */ CAM_MODE_NORMAL, // "NORMAL"
/* 0x01 */ CAM_MODE_JUMP, // "JUMP"
/* 0x02 */ CAM_MODE_GORONDASH, // "GORONDASH"
/* 0x03 */ CAM_MODE_DEKUSHOOT, // "NUTSSHOT"
/* 0x04 */ CAM_MODE_BOWARROWZ, // "BOWARROWZ"
/* 0x05 */ CAM_MODE_DEKUFLY, // "NUTSFLY"
/* 0x06 */ CAM_MODE_FIRSTPERSON, // "SUBJECT"
/* 0x07 */ CAM_MODE_FOLLOWBOOMERANG, // "BOOKEEPON"
/* 0x08 */ CAM_MODE_ZORAFIN, // "ZORAFIN"
/* 0x09 */ CAM_MODE_FOLLOWTARGET, // "KEEPON"
/* 0x0A */ CAM_MODE_TARGET, // "PARALLEL"
/* 0x0B */ CAM_MODE_TALK, // "TALK"
/* 0x0C */ CAM_MODE_SLINGSHOT, // "PACHINCO"
/* 0x0D */ CAM_MODE_BOWARROW, // "BOWARROW"
/* 0x0E */ CAM_MODE_BATTLE, // "BATTLE"
/* 0x0F */ CAM_MODE_DEKUHIDE, // "NUTSHIDE"
/* 0x10 */ CAM_MODE_STILL, // "STILL"
/* 0x11 */ CAM_MODE_CHARGE, // "CHARGE"
/* 0x12 */ CAM_MODE_CLIMB, // "CLIMB"
/* 0x13 */ CAM_MODE_CLIMBZ, // "CLIMBZ"
/* 0x14 */ CAM_MODE_HOOKSHOT, // "FOOKSHOT"
/* 0x15 */ CAM_MODE_FREEFALL, // "FREEFALL"
/* 0x16 */ CAM_MODE_HANG, // "HANG"
/* 0x17 */ CAM_MODE_HANGZ, // "HANGZ
/* 0x18 */ CAM_MODE_PUSHPULL, // "PUSHPULL"
/* 0x19 */ CAM_MODE_DEKUFLYZ, // "CNUTSFLYZ"
/* 0x1A */ CAM_MODE_GORONJUMP, // "GORONJUMP"
/* 0x1B */ CAM_MODE_BOOMERANG, // "BOOMERANG"
/* 0x1C */ CAM_MODE_CHARGEZ, // "CHARGEZ"
/* 0x1D */ CAM_MODE_ZORAFINZ, // "ZORAFINZ"
/* 0x1E */ CAM_MODE_MAX
} CameraModeType;
typedef enum {
/* 0x00 */ CAM_FUNC_NONE,
/* 0x01 */ CAM_FUNC_NORMAL0,
/* 0x02 */ CAM_FUNC_NORMAL1,
/* 0x03 */ CAM_FUNC_NORMAL2,
/* 0x04 */ CAM_FUNC_NORMAL3,
/* 0x05 */ CAM_FUNC_NORMAL4,
/* 0x06 */ CAM_FUNC_PARALLEL0,
/* 0x07 */ CAM_FUNC_PARALLEL1,
/* 0x08 */ CAM_FUNC_PARALLEL2,
/* 0x09 */ CAM_FUNC_PARALLEL3,
/* 0x0A */ CAM_FUNC_PARALLEL4,
/* 0x0B */ CAM_FUNC_KEEPON0,
/* 0x0C */ CAM_FUNC_KEEPON1,
/* 0x0D */ CAM_FUNC_KEEPON2,
/* 0x0E */ CAM_FUNC_KEEPON3,
/* 0x0F */ CAM_FUNC_KEEPON4,
/* 0x10 */ CAM_FUNC_SUBJECT0,
/* 0x11 */ CAM_FUNC_SUBJECT1,
/* 0x12 */ CAM_FUNC_SUBJECT2,
/* 0x13 */ CAM_FUNC_SUBJECT3,
/* 0x14 */ CAM_FUNC_SUBJECT4,
/* 0x15 */ CAM_FUNC_JUMP0,
/* 0x16 */ CAM_FUNC_JUMP1,
/* 0x17 */ CAM_FUNC_JUMP2,
/* 0x18 */ CAM_FUNC_JUMP3,
/* 0x19 */ CAM_FUNC_JUMP4,
/* 0x1A */ CAM_FUNC_BATTLE0,
/* 0x1B */ CAM_FUNC_BATTLE1,
/* 0x1C */ CAM_FUNC_BATTLE2,
/* 0x1D */ CAM_FUNC_BATTLE3,
/* 0x1E */ CAM_FUNC_BATTLE4,
/* 0x1F */ CAM_FUNC_FIXED0,
/* 0x20 */ CAM_FUNC_FIXED1,
/* 0x21 */ CAM_FUNC_FIXED2,
/* 0x22 */ CAM_FUNC_FIXED3,
/* 0x23 */ CAM_FUNC_FIXED4,
/* 0x24 */ CAM_FUNC_DATA0,
/* 0x25 */ CAM_FUNC_DATA1,
/* 0x26 */ CAM_FUNC_DATA2,
/* 0x27 */ CAM_FUNC_DATA3,
/* 0x28 */ CAM_FUNC_DATA4,
/* 0x29 */ CAM_FUNC_UNIQUE0,
/* 0x2A */ CAM_FUNC_UNIQUE1,
/* 0x2B */ CAM_FUNC_UNIQUE2,
/* 0x2C */ CAM_FUNC_UNIQUE3,
/* 0x2D */ CAM_FUNC_UNIQUE4,
/* 0x2E */ CAM_FUNC_UNIQUE5,
/* 0x2F */ CAM_FUNC_UNIQUE6,
/* 0x30 */ CAM_FUNC_UNIQUE7,
/* 0x31 */ CAM_FUNC_UNIQUE8,
/* 0x32 */ CAM_FUNC_UNIQUE9,
/* 0x33 */ CAM_FUNC_DEMO0,
/* 0x34 */ CAM_FUNC_DEMO1,
/* 0x35 */ CAM_FUNC_DEMO2,
/* 0x36 */ CAM_FUNC_DEMO3,
/* 0x37 */ CAM_FUNC_DEMO4,
/* 0x38 */ CAM_FUNC_DEMO5,
/* 0x39 */ CAM_FUNC_DEMO6,
/* 0x3A */ CAM_FUNC_DEMO7,
/* 0x3B */ CAM_FUNC_DEMO8,
/* 0x3C */ CAM_FUNC_DEMO9,
/* 0x3D */ CAM_FUNC_SPECIAL0,
/* 0x3E */ CAM_FUNC_SPECIAL1,
/* 0x3F */ CAM_FUNC_SPECIAL2,
/* 0x40 */ CAM_FUNC_SPECIAL3,
/* 0x41 */ CAM_FUNC_SPECIAL4,
/* 0x42 */ CAM_FUNC_SPECIAL5,
/* 0x43 */ CAM_FUNC_SPECIAL6,
/* 0x44 */ CAM_FUNC_SPECIAL7,
/* 0x45 */ CAM_FUNC_SPECIAL8,
/* 0x46 */ CAM_FUNC_SPECIAL9,
/* 0x47 */ CAM_FUNC_MAX
} CameraFuncType;
typedef enum {
/* 0x00 */ CAM_DATA_00,
/* 0x01 */ CAM_DATA_01,
/* 0x02 */ CAM_DATA_02,
/* 0x03 */ CAM_DATA_03,
/* 0x04 */ CAM_DATA_04,
/* 0x05 */ CAM_DATA_05,
/* 0x06 */ CAM_DATA_06,
/* 0x07 */ CAM_DATA_07,
/* 0x08 */ CAM_DATA_08,
/* 0x09 */ CAM_DATA_09,
/* 0x0A */ CAM_DATA_10,
/* 0x0B */ CAM_DATA_11,
/* 0x0C */ CAM_DATA_12,
/* 0x0D */ CAM_DATA_13,
/* 0x0E */ CAM_DATA_14,
/* 0x0F */ CAM_DATA_15,
/* 0x10 */ CAM_DATA_16,
/* 0x11 */ CAM_DATA_17,
/* 0x12 */ CAM_DATA_18,
/* 0x13 */ CAM_DATA_19,
/* 0x14 */ CAM_DATA_20,
/* 0x15 */ CAM_DATA_21,
} CameraDataType;
typedef struct {
/* 0x0 */ s16 val;
/* 0x2 */ s16 param;
} CameraModeValue; // size = 0x4
typedef struct {
/* 0x0 */ s16 funcId;
/* 0x2 */ s16 numValues;
/* 0x4 */ CameraModeValue* values;
} CameraMode; // size = 0x8
/**
* Flags:
* (flags & 0xF): Priority (lower value has higher priority)
* (flags & 0x40000000): Store previous setting and bgCamData, also ignores water checks
* (flags & 0x80000000): Set camera setting based on bg/scene data and reset action function state
*/
typedef struct {
/* 0x0 */ u32 validModes;
/* 0x4 */ u32 flags;
/* 0x8 */ CameraMode* cameraModes;
} CameraSetting; // size = 0xC
typedef struct Camera {
/* 0x000 */ u8 paramData[0x50]; // function Data, acts like a heap that's reset every time a new action function is switched to
/* 0x050 */ Vec3f at;
/* 0x05C */ Vec3f eye;
/* 0x068 */ Vec3f up;
/* 0x074 */ Vec3f eyeNext;
/* 0x080 */ Vec3f quakeOffset;
/* 0x08C */ struct PlayState* play;
/* 0x090 */ Actor* focalActor; // the actor the camera is focused on. Most often Player, but can be any actor
/* 0x094 */ PosRot focalActorPosRot;
/* 0x0A8 */ Actor* target; // the actor that is being z-targeted
/* 0x0AC */ PosRot targetPosRot;
/* 0x0C0 */ f32 rUpdateRateInv;
/* 0x0C4 */ f32 pitchUpdateRateInv;
/* 0x0C8 */ f32 yawUpdateRateInv;
/* 0x0CC */ f32 yOffsetUpdateRate;
/* 0x0D0 */ f32 xzOffsetUpdateRate;
/* 0x0D4 */ f32 fovUpdateRate;
/* 0x0D8 */ f32 xzSpeed;
/* 0x0DC */ f32 dist;
/* 0x0E0 */ f32 speedRatio;
/* 0x0E4 */ Vec3f atActorOffset;
/* 0x0F0 */ Vec3f focalActorOffset;
/* 0x0FC */ f32 fov;
/* 0x100 */ f32 atLerpStepScale;
/* 0x104 */ f32 playerFloorHeight;
/* 0x108 */ Vec3f floorNorm;
/* 0x114 */ f32 waterYPos;
/* 0x118 */ s32 waterPrevBgCamDataId;
/* 0x11C */ s32 waterPrevCamSetting;
/* 0x120 */ s16 waterQuakeId;
/* 0x122 */ s16 unk122;
/* 0x124 */ void* data0;
/* 0x128 */ void* data1;
/* 0x12C */ s16 data2;
/* 0x12E */ s16 data3;
/* 0x130 */ s16 uid;
/* 0x132 */ UNK_TYPE1 unk_132[2];
/* 0x134 */ Vec3s inputDir;
/* 0x13A */ Vec3s camDir;
/* 0x140 */ s16 status;
/* 0x142 */ s16 setting;
/* 0x144 */ s16 mode;
/* 0x146 */ s16 bgId;
/* 0x148 */ s16 bgCamDataId;
/* 0x14A */ s16 behaviorFlags;
/* 0x14C */ s16 stateFlags;
/* 0x14E */ s16 childCamId;
/* 0x150 */ s16 doorTimer1; // a door timer used when door cam is indexed from bgCamDataId
/* 0x152 */ s16 unk152;
/* 0x154 */ s16 prevSetting;
/* 0x156 */ s16 nextCamSceneDataId;
/* 0x158 */ s16 nextBgId;
/* 0x15A */ s16 roll;
/* 0x15C */ s16 viewFlags;
/* 0x15E */ s16 animState; // Determines the current state of the current camera behavior function
/* 0x160 */ s16 unk160;
/* 0x162 */ s16 doorTimer2; // a door timer used when door cam is indexed from bgCamDataId
/* 0x164 */ s16 camId;
/* 0x166 */ s16 prevBgCamDataId;
/* 0x168 */ s16 unk168;
/* 0x16C */ Vec3f meshActorPos;
} Camera; // size = 0x178
#endif

View File

@ -111,11 +111,9 @@ typedef struct {
// Angle conversion macros
#define DEG_TO_BINANG(degrees) (s16)((degrees) * (0x8000 / 180.0f))
#define DEGF_TO_BINANG(degreesf) (s16)((degreesf) * 182.04167f + .5f)
#define RADF_TO_BINANG(radf) (s16)((radf) * (0x8000 / M_PI))
#define RADF_TO_DEGF(radf) ((radf) * (180.0f / M_PI))
#define DEGF_TO_RADF(degf) ((degf) * (M_PI / 180.0f))
#define BINANG_TO_DEGF(binang) ((f32)binang * (360.0001525f / 65535.0f))
#define BINANG_TO_RAD(binang) (((f32)binang / 0x8000) * M_PI)
// Angle arithmetic macros

View File

@ -1343,7 +1343,7 @@ void Actor_SetCameraHorseSetting(PlayState* play, Player* player) {
EnHorse* rideActor = (EnHorse*)player->rideActor;
if ((rideActor != NULL) && !(rideActor->unk_1EC & 0x10)) {
func_800DFAC8(Play_GetCamera(play, CAM_ID_MAIN), 4);
Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_HORSE);
}
}
}
@ -2508,10 +2508,10 @@ void Actor_Draw(PlayState* play, Actor* actor) {
Lights_Draw(light, play->state.gfxCtx);
if (actor->flags & ACTOR_FLAG_1000) {
Matrix_SetTranslateRotateYXZ(actor->world.pos.x + play->mainCamera.skyboxOffset.x,
Matrix_SetTranslateRotateYXZ(actor->world.pos.x + play->mainCamera.quakeOffset.x,
actor->world.pos.y +
((actor->shape.yOffset * actor->scale.y) + play->mainCamera.skyboxOffset.y),
actor->world.pos.z + play->mainCamera.skyboxOffset.z, &actor->shape.rot);
((actor->shape.yOffset * actor->scale.y) + play->mainCamera.quakeOffset.y),
actor->world.pos.z + play->mainCamera.quakeOffset.z, &actor->shape.rot);
} else {
Matrix_SetTranslateRotateYXZ(actor->world.pos.x, actor->world.pos.y + (actor->shape.yOffset * actor->scale.y),
actor->world.pos.z, &actor->shape.rot);

View File

@ -318,7 +318,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DF8EC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFAC8.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeSetting.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeDataIdx.s")
@ -328,13 +328,13 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetInputDirYaw.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFC90.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetCamDir.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetCamDirPitch.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_GetCamDirYaw.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFD04.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_AddQuake.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFD78.s")
@ -350,7 +350,7 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ClearFlags.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800DFFAC.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/Camera_ChangeDoorCam.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_camera/func_800E007C.s")

View File

@ -123,14 +123,14 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) {
if ((dist == 0.0f) && (vec->y == 0.0f)) {
sph.pitch = 0;
} else {
sph.pitch = DEGF_TO_BINANG(RADF_TO_DEGF(func_80086B30(dist, vec->y)));
sph.pitch = CAM_DEG_TO_BINANG(RADF_TO_DEGF(func_80086B30(dist, vec->y)));
}
sph.r = sqrtf(SQ(vec->y) + distSquared);
if ((vec->x == 0.0f) && (vec->z == 0.0f)) {
sph.yaw = 0;
} else {
sph.yaw = DEGF_TO_BINANG(RADF_TO_DEGF(func_80086B30(vec->x, vec->z)));
sph.yaw = CAM_DEG_TO_BINANG(RADF_TO_DEGF(func_80086B30(vec->x, vec->z)));
}
*dest = sph;
@ -238,8 +238,8 @@ Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b) {
OLib_Vec3fDiffRad(&anglesRad, a, b);
anglesBinAng.x = DEGF_TO_BINANG(RADF_TO_DEGF(anglesRad.x));
anglesBinAng.y = DEGF_TO_BINANG(RADF_TO_DEGF(anglesRad.y));
anglesBinAng.x = CAM_DEG_TO_BINANG(RADF_TO_DEGF(anglesRad.x));
anglesBinAng.y = CAM_DEG_TO_BINANG(RADF_TO_DEGF(anglesRad.y));
anglesBinAng.z = 0.0f;
*dest = anglesBinAng;

View File

@ -756,8 +756,8 @@ void Distortion_Update(void) {
return;
}
depthPhase += DEGF_TO_BINANG(depthPhaseStep);
screenPlanePhase += DEGF_TO_BINANG(screenPlanePhaseStep);
depthPhase += CAM_DEG_TO_BINANG(depthPhaseStep);
screenPlanePhase += CAM_DEG_TO_BINANG(screenPlanePhaseStep);
View_SetDistortionDirRot(&sDistortionContext.play->view,
Math_CosS(depthPhase) * (DEGF_TO_RADF(rotX) * xyScaleFactor),

View File

@ -85,7 +85,7 @@ void BgCtowerRot_CorridorRotate(BgCtowerRot* this, PlayState* play) {
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos);
rotZ = CLAMP(1100.0f - offset.z, 0.0f, 1000.0f);
func_800DFAC8(play->cameraPtrs[CAM_ID_MAIN], 17);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_DUNGEON0);
this->dyna.actor.shape.rot.z = rotZ * 16.384f;
if (play->csCtx.frames == 132) {

View File

@ -226,7 +226,7 @@ void BgIkanaDharma_Update(Actor* thisx, PlayState* play) {
Actor_MoveWithGravity(&this->dyna.actor);
Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4);
if (this->dyna.actor.bgCheckFlags & 2) {
s16 quake = Quake_Add(play->cameraPtrs[play->activeCamera], 3);
s16 quake = Quake_Add(GET_ACTIVE_CAM(play), 3);
Quake_SetSpeed(quake, 21536);
Quake_SetQuakeValues(quake, 4, 0, 0, 0);

View File

@ -130,14 +130,14 @@ s32 func_80953DA8(BgIngate* this, PlayState* play) {
} else {
gSaveContext.eventInf[4] |= 2;
}
func_800DFAC8(camera, 47);
Camera_ChangeSetting(camera, CAM_SET_BOAT_CRUISE);
play->unk_1887C = 0x63;
return false;
}
void func_80953E38(PlayState* play) {
func_800DFAC8(Play_GetCamera(play, CAM_ID_MAIN), 1);
Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0);
if (!(gSaveContext.eventInf[3] & 0x20)) {
gSaveContext.eventInf[4] &= (u8)~2;
@ -214,11 +214,11 @@ void func_80953F9C(BgIngate* this, PlayState* play) {
}
if (ActorCutscene_GetCurrentIndex() != this->unk16E) {
if (ActorCutscene_GetCurrentIndex() != -1) {
func_800DFAC8(camera, 1);
Camera_ChangeSetting(camera, CAM_SET_NORMAL0);
player->stateFlags1 |= 0x20;
play->actorCtx.unk5 &= ~0x4;
} else {
func_800DFAC8(camera, 47);
Camera_ChangeSetting(camera, CAM_SET_BOAT_CRUISE);
player->stateFlags1 &= ~0x20;
}
}

View File

@ -111,7 +111,7 @@ void func_80ACAD88(BgOpenShutter* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_SLIDE_DOOR_OPEN);
func_800DFFAC(play->cameraPtrs[0], &this->dyna.actor, player->unk_3BA, 0.0f, 12, 15, 10);
Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->dyna.actor, player->unk_3BA, 0.0f, 12, 15, 10);
this->unk_164 = 0;
this->actionFunc = func_80ACAE5C;
this->dyna.actor.velocity.y = 0.0f;

View File

@ -1633,8 +1633,8 @@ void func_809DD934(Boss02* this, PlayState* play) {
if (player->stateFlags1 & 0x100) {
Cutscene_Start(play, &play->csCtx);
this->unk_1D22 = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->unk_1D22, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->unk_1D22, CAM_STATUS_ACTIVE);
func_8016566C(150);
this->unk_1D14 = 0;
this->unk_1D5C = 0.0f;
@ -2059,8 +2059,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
}
Cutscene_Start(play, &play->csCtx);
this->unk_1D22 = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->unk_1D22, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->unk_1D22, CAM_STATUS_ACTIVE);
this->unk_1D20 = 2;
this->unk_1D1C = 0;
@ -2156,8 +2156,8 @@ void func_809DEAC4(Boss02* this, PlayState* play) {
if (ActorCutscene_GetCurrentIndex() == -1) {
Cutscene_Start(play, &play->csCtx);
this->unk_1D22 = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->unk_1D22, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->unk_1D22, CAM_STATUS_ACTIVE);
this->unk_1D20 = 101;
this->unk_1D1C = 0;
this->unk_1D5C = 1.0f;

View File

@ -1151,8 +1151,8 @@ void Boss03_IntroCutscene(Boss03* this, PlayState* play) {
Cutscene_Start(play, &play->csCtx);
func_800B7298(play, &this->actor, 7);
this->csCamId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->csCamId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->csCamId, CAM_STATUS_ACTIVE);
this->actor.world.rot.y = -0x7B30;
this->prevPlayerPos.y = 1850.0f;
@ -1451,8 +1451,8 @@ void Boss03_DeathCutscene(Boss03* this, PlayState* play) {
Cutscene_Start(play, &play->csCtx);
func_800B7298(play, &this->actor, 1);
this->csCamId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->csCamId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->csCamId, CAM_STATUS_ACTIVE);
this->unk_2BE = Math_FAtan2F(this->actor.world.pos.z, this->actor.world.pos.x);
// Player is above water && Player is standing on ground
@ -1665,8 +1665,8 @@ void Boss03_SpawnSmallFishesCutscene(Boss03* this, PlayState* play) {
Cutscene_Start(play, &play->csCtx);
func_800B7298(play, &this->actor, 1);
this->csCamId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->csCamId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->csCamId, CAM_STATUS_ACTIVE);
this->csState = 1;
this->unk_2BE = 0xBB8;
@ -2441,8 +2441,7 @@ void Boss03_DrawEffects(PlayState* play) {
Matrix_Translate(eff->pos.x, eff->pos.y, eff->pos.z, MTXMODE_NEW);
if (eff->type == GYORG_EFFECT_DROPLET) {
Matrix_RotateYF(Camera_GetInputDirYaw(play->cameraPtrs[play->activeCamera]) * (M_PI / 0x8000),
MTXMODE_APPLY);
Matrix_RotateYF(Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)) * (M_PI / 0x8000), MTXMODE_APPLY);
} else { // GYORG_EFFECT_SPLASH
Matrix_ReplaceRotation(&play->billboardMtxF);
}

View File

@ -260,8 +260,8 @@ void func_809EC568(Boss04* this, PlayState* play) {
this->unk_704 = 0;
Cutscene_Start(play, &play->csCtx);
this->unk_70A = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->unk_70A, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->unk_70A, CAM_STATUS_ACTIVE);
func_800B7298(play, &this->actor, 7);
player->actor.world.pos.x = this->unk_6E8;
player->actor.world.pos.z = this->unk_6F0 + 410.0f;

View File

@ -201,8 +201,8 @@ void func_809F24C8(Boss06* this, PlayState* play) {
Cutscene_Start(play, &play->csCtx);
func_800B7298(play, &this->actor, 7);
this->unk_A00 = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->unk_A00, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->unk_A00, CAM_STATUS_ACTIVE);
D_809F4970->unk_151 = 1;
this->unk_1C9 = 1;
this->unk_1C8 = 1;

View File

@ -502,7 +502,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) {
Vec3f screenPos;
// if not underwater
if (!(play->cameraPtrs[CAM_ID_MAIN]->flags2 & 0x100)) {
if (!(play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER)) {
OPEN_DISPS(play->state.gfxCtx);
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 20);

View File

@ -405,7 +405,7 @@ void func_808A1288(DoorShutter* this, PlayState* play) {
this->unk_164 = sp38;
this->unk_168 = 0.0f;
func_800DFFAC(play->cameraPtrs[CAM_ID_MAIN], &this->actor, player->unk_3BA, this->unk_168, 12, sp34, 10);
Camera_ChangeDoorCam(play->cameraPtrs[CAM_ID_MAIN], &this->actor, player->unk_3BA, this->unk_168, 12, sp34, 10);
}
}

View File

@ -80,7 +80,7 @@ void EffZoraband_Draw(Actor* thisx, PlayState* play2) {
OPEN_DISPS(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
Matrix_RotateYS((Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamera]) + 0x8000), MTXMODE_APPLY);
Matrix_RotateYS((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY);
AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(object_zoraband_Matanimheader_000F38));
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
if (this->actor.home.rot.z != 0) {

View File

@ -123,7 +123,7 @@ void func_8092E284(ElfMsg* this, PlayState* play) {
} else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
this->actor.home.rot.x = 0;
ActorCutscene_Start(this->actor.cutscene, &this->actor);
func_800E0348(play->cameraPtrs[0]);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
}

View File

@ -121,7 +121,7 @@ void func_80A2CF7C(ElfMsg3* this, PlayState* play) {
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
} else if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
ActorCutscene_Start(this->actor.cutscene, &this->actor);
func_800E0348(play->cameraPtrs[0]);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
}

View File

@ -126,7 +126,7 @@ void func_80AFD668(ElfMsg4* this, PlayState* play) {
ActorCutscene_SetIntentToPlay((s16)this->actor.cutscene);
} else if (ActorCutscene_GetCanPlayNext((s16)this->actor.cutscene)) {
ActorCutscene_Start(this->actor.cutscene, &this->actor);
func_800E0348(play->cameraPtrs[0]);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
ActorCutscene_SetIntentToPlay((s16)this->actor.cutscene);
}

View File

@ -219,7 +219,7 @@ void EnAni_FallToGround(EnAni* this, PlayState* play) {
// the animation gets cut short, (first 16 frames only) only the landing part is seen
Animation_Change(&this->skelAnime, &gAniLandingThenStandingUpAnim, 1.0f, 0.0f, 16.0f, ANIMMODE_ONCE, 0.0f);
this->stateFlags |= ANI_STATE_WRITHING;
quakeValue = Quake_Add(play->cameraPtrs[0], 3);
quakeValue = Quake_Add(play->cameraPtrs[CAM_ID_MAIN], 3);
Quake_SetSpeed(quakeValue, 0x6978);
Quake_SetQuakeValues(quakeValue, 7, 0, 0, 0);
Quake_SetCountdown(quakeValue, 0x14);

View File

@ -689,9 +689,8 @@ void EnBb_Draw(Actor* thisx, PlayState* play) {
if (this->flameScaleX > 0.0f) {
currentMatrixState = Matrix_GetCurrent();
func_8012C2DC(play->state.gfxCtx);
Matrix_RotateYS(
((Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamera]) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 0);

View File

@ -723,9 +723,8 @@ void EnBbfall_Draw(Actor* thisx, PlayState* play2) {
if (this->flameOpacity > 0) {
func_8012C2DC(play->state.gfxCtx);
Matrix_RotateYS(
((Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamera]) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_Scale(this->flameScaleX, this->flameScaleY, 1.0f, MTXMODE_APPLY);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
currentMatrixState = Matrix_GetCurrent();

View File

@ -538,7 +538,7 @@ void EnBom_Update(Actor* thisx, PlayState* play) {
play->envCtx.lightSettings.diffuseColor1[2] = 250;
play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] =
play->envCtx.lightSettings.ambientColor[2] = 250;
func_800DFD04(&play->mainCamera, 2, 11, 8);
Camera_AddQuake(&play->mainCamera, 2, 11, 8);
thisx->params = ENBOM_1;
this->timer = 10;
thisx->flags |= (0x100000 | 0x20);

View File

@ -414,7 +414,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
play->envCtx.lightSettings.ambientColor[0] = play->envCtx.lightSettings.ambientColor[1] =
play->envCtx.lightSettings.ambientColor[2] = 250;
func_800DFD04(&play->mainCamera, 2, 11, 8);
Camera_AddQuake(&play->mainCamera, 2, 11, 8);
this->actor.params = ENBOMBF_1;
this->timer = 10;

View File

@ -143,7 +143,7 @@ void func_8091C178(EnButte* this, PlayState* play) {
sp48 = Math_SinS(D_8091D3A0) * 250.0f;
sp48 = CLAMP(sp48, 0, 255);
func_800DFC90(&sp40, GET_ACTIVE_CAM(play));
Camera_GetCamDir(&sp40, GET_ACTIVE_CAM(play));
Matrix_RotateYS(sp40.y, MTXMODE_NEW);
Matrix_RotateXS(sp40.x, MTXMODE_APPLY);
Matrix_RotateZS(sp40.z, MTXMODE_APPLY);

View File

@ -558,8 +558,8 @@ void EnClearTag_UpdateCamera(EnClearTag* this, PlayState* play) {
case 1:
Cutscene_Start(play, &play->csCtx);
this->subCamId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, this->subCamId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
func_800B7298(play, &this->actor, 4);
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
this->subCamEye.x = mainCam->eye.x;

View File

@ -549,7 +549,7 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) {
this->collider1.base.atFlags &= ~AT_ON;
this->collider2.base.atFlags |= AT_ON;
if (hitFloor) {
func_800DFD04(play->cameraPtrs[play->activeCamera], 2, 15, 10); // camera shake?
Camera_AddQuake(GET_ACTIVE_CAM(play), 2, 15, 10);
Rumble_Request(this->actor.xyzDistToPlayerSq, 180, 20, 100);
EnFamos_SetupAttackDebris(this);

View File

@ -4,7 +4,6 @@
* Description: Fishing Pond Elements (Owner, Fish, Props, Effects...)
*/
#include "prevent_bss_reordering.h"
#include "z_en_fishing.h"
#include "z64rumble.h"
#include "objects/object_fish/object_fish.h"
@ -5154,8 +5153,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
case 1:
sCameraId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, sCameraId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, sCameraId, CAM_STATUS_ACTIVE);
camera = Play_GetCamera(play, CAM_ID_MAIN);
sCameraEye.x = camera->eye.x;
sCameraEye.y = camera->eye.y;
@ -5282,8 +5281,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
case 10:
Cutscene_Start(play, &play->csCtx);
sCameraId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, sCameraId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, sCameraId, CAM_STATUS_ACTIVE);
func_800B7298(play, &this->actor, 4);
camera = Play_GetCamera(play, CAM_ID_MAIN);
sCameraEye.x = camera->eye.x;
@ -5321,8 +5320,8 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) {
case 20:
Cutscene_Start(play, &play->csCtx);
sCameraId = Play_CreateSubCamera(play);
Play_CameraChangeStatus(play, CAM_ID_MAIN, 1);
Play_CameraChangeStatus(play, sCameraId, 7);
Play_CameraChangeStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
Play_CameraChangeStatus(play, sCameraId, CAM_STATUS_ACTIVE);
func_800B7298(play, &this->actor, 4);
camera = Play_GetCamera(play, CAM_ID_MAIN);
sCameraEye.x = camera->eye.x;

View File

@ -1162,11 +1162,11 @@ void func_80963F44(EnFu* this, PlayState* play) {
void func_80963F88(EnFu* this, PlayState* play) {
if (this->unk_542 == 1) {
func_800DFAC8(play->cameraPtrs[CAM_ID_MAIN], 75);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_HONEY_AND_DARLING_2);
play->unk_1887E = 0;
} else if (this->unk_542 == 2) {
play->unk_1887D = 0;
func_800DFAC8(play->cameraPtrs[CAM_ID_MAIN], 75);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_HONEY_AND_DARLING_2);
}
}

View File

@ -137,7 +137,7 @@ s32 func_808F8CCC(EnHorseGameCheck* this, PlayState* play2) {
}
this->unk_17C = -1;
func_800DFAC8(play->cameraPtrs[CAM_ID_MAIN], 10);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_FREE0);
Play_CameraSetAtEye(play, 0, &sp40, &sp4C);
Play_CameraSetFov(play, 0, 45.0f);
func_800FE484();
@ -228,7 +228,7 @@ s32 func_808F8FAC(EnHorseGameCheck* this, PlayState* play) {
if ((this->unk_17C != -1) && ((this->unk_168 - this->unk_17C) > 10)) {
this->unk_17C = -1;
func_800DFAC8(play->cameraPtrs[CAM_ID_MAIN], 4);
Camera_ChangeSetting(play->cameraPtrs[CAM_ID_MAIN], CAM_SET_HORSE);
}
this->unk_168++;

View File

@ -586,7 +586,7 @@ void func_80AF2030(EnTest7* this, PlayState* play) {
this->actor.world.pos.y += 100.0f;
camera = Play_GetCamera(play, ActorCutscene_GetCurrentCamera(play->playerActorCsIds[8]));
camera->player = NULL;
camera->focalActor = NULL;
camera->eye.x = ((camera->eye.x - this->unk_1E60.x) * sp1C) + this->unk_1E60.x;
camera->eye.y = ((camera->eye.y - this->unk_1E60.y) * sp1C) + this->unk_1E60.y;
@ -682,7 +682,7 @@ void func_80AF24D8(EnTest7* this, PlayState* play, f32 arg2) {
Camera* camera = Play_GetCamera(play, ActorCutscene_GetCurrentCamera(play->playerActorCsIds[8]));
pos = &player->actor.world.pos;
camera->player = NULL;
camera->focalActor = NULL;
sp3C.x = ((180.0f * Math_SinS(this->unk_1E8E)) * Math_CosS(0xFA0)) + pos->x;
sp3C.y = (Math_SinS(0xFA0) * 180.0f) + pos->y;
@ -703,7 +703,7 @@ void func_80AF2654(EnTest7* this, PlayState* play, f32 arg2) {
Vec3f sp30;
camera = Play_GetCamera(play, ActorCutscene_GetCurrentCamera(play->playerActorCsIds[8]));
camera->player = NULL;
camera->focalActor = NULL;
pos = &player->actor.world.pos;
@ -806,7 +806,7 @@ void func_80AF2BAC(EnTest7* this, PlayState* play, Vec3f* arg2, f32 arg3) {
f32 z;
Camera* camera = Play_GetCamera(play, ActorCutscene_GetCurrentCamera(play->playerActorCsIds[8]));
camera->player = NULL;
camera->focalActor = NULL;
x = ((camera->at.x - arg2->x) * arg3) + arg2->x;
y = ((camera->at.y - arg2->y) * arg3) + arg2->y;
z = ((camera->at.z - arg2->z) * arg3) + arg2->z;

View File

@ -267,7 +267,7 @@ void ObjAqua_Draw(Actor* thisx, PlayState* play) {
ObjAqua* this = THIS;
s32 framesTemp;
s32 pad;
s16 yaw = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamera]) + 0x8000;
s16 yaw = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000;
s32 actionFuncTemp = this->actionFunc == func_80ACBDFC;
OPEN_DISPS(play->state.gfxCtx);

View File

@ -84,7 +84,7 @@ void func_80983704(ObjDemo* this, PlayState* play) {
if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
if (this->unk_148 == 1) {
ActorCutscene_Start(this->actor.cutscene, &this->actor);
func_800E0348(play->cameraPtrs[0]);
func_800E0348(play->cameraPtrs[CAM_ID_MAIN]);
} else {
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
}

View File

@ -200,9 +200,8 @@ void ObjJgameLight_Draw(Actor* thisx, PlayState* play) {
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, 0, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
Matrix_Translate(0.0f, 52.0f, 0.0f, MTXMODE_APPLY);
Matrix_RotateYS(
((Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamera]) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_RotateYS(((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) - this->actor.shape.rot.y) + 0x8000),
MTXMODE_APPLY);
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, gGameplayKeepDrawFlameDL);

View File

@ -64,7 +64,7 @@ void ObjKinoko_Update(Actor* thisx, PlayState* play) {
}
thisx->scale.y = thisx->scale.x;
thisx->scale.z = thisx->scale.x;
thisx->shape.rot.y = Camera_GetCamDirYaw(play->cameraPtrs[play->activeCamera]) + 0x8000;
thisx->shape.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000;
}
}

View File

@ -507,7 +507,7 @@ void func_809289E4(ObjTsubo* this, PlayState* play) {
s16 yawDiff = this->actor.yawTowardsPlayer - GET_PLAYER(play)->actor.world.rot.y;
s32 absYawDiff = ABS_ALT(yawDiff);
if (absYawDiff > DEGF_TO_BINANG(120.0f)) {
if (absYawDiff > (0x10000 / 3)) {
Actor_PickUp(&this->actor, play, 0, 36.0f, 30.0f);
}
}

View File

@ -512,7 +512,7 @@ void func_808DD3C8(Actor* thisx, PlayState* play2) {
f32 temp_f2;
f32 tempf;
if ((play->cameraPtrs[CAM_ID_MAIN]->flags2 & 0x100) || ((u8)play->envCtx.unk_E2 == 0)) {
if ((play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || ((u8)play->envCtx.unk_E2 == 0)) {
return;
}
@ -599,7 +599,7 @@ void func_808DD970(Actor* thisx, PlayState* play2) {
phi_f26 = CLAMP_MAX(phi_f26, 1.0f);
if (!(play->cameraPtrs[CAM_ID_MAIN]->flags2 & 0x100) || (phi_f26 == 0.0f)) {
if (!(play->cameraPtrs[CAM_ID_MAIN]->stateFlags & CAM_STATE_UNDERWATER) || (phi_f26 == 0.0f)) {
return;
}
}

View File

@ -1271,15 +1271,15 @@
0x800DF840:("Camera_ChangeMode",),
0x800DF86C:("func_800DF86C",),
0x800DF8EC:("func_800DF8EC",),
0x800DFAC8:("func_800DFAC8",),
0x800DFAC8:("Camera_ChangeSetting",),
0x800DFB14:("Camera_ChangeDataIdx",),
0x800DFC1C:("func_800DFC1C",),
0x800DFC40:("func_800DFC40",),
0x800DFC68:("Camera_GetInputDirYaw",),
0x800DFC90:("func_800DFC90",),
0x800DFC90:("Camera_GetCamDir",),
0x800DFCB4:("Camera_GetCamDirPitch",),
0x800DFCDC:("Camera_GetCamDirYaw",),
0x800DFD04:("func_800DFD04",),
0x800DFD04:("Camera_AddQuake",),
0x800DFD78:("func_800DFD78",),
0x800DFEF0:("func_800DFEF0",),
0x800DFF18:("func_800DFF18",),
@ -1287,7 +1287,7 @@
0x800DFF44:("func_800DFF44",),
0x800DFF60:("Camera_SetFlags",),
0x800DFF84:("Camera_ClearFlags",),
0x800DFFAC:("func_800DFFAC",),
0x800DFFAC:("Camera_ChangeDoorCam",),
0x800E007C:("func_800E007C",),
0x800E01AC:("func_800E01AC",),
0x800E01B8:("Camera_GetQuakeOffset",),

View File

@ -445,6 +445,10 @@ wordReplace = {
"func_800E0308": "Camera_SetTargetActor",
"func_800E031C": "Camera_GetWaterYPos",
"func_800E02AC": "Camera_SetToTrackActor",
"func_800DFAC8": "Camera_ChangeSetting",
"func_800DFC90": "Camera_GetCamDir",
"func_800DFD04": "Camera_AddQuake",
"func_800DFFAC": "Camera_ChangeDoorCam",
"func_801694DC": "Play_CreateSubCamera",
"Play_GetActiveCameraIndex": "Play_GetActiveCamId",
"func_80169590": "Play_CameraChangeStatus",

View File

@ -785,15 +785,15 @@ asm/non_matchings/code/z_camera/Camera_SetMode.s,Camera_SetMode,0x800DF4D0,0xDC
asm/non_matchings/code/z_camera/Camera_ChangeMode.s,Camera_ChangeMode,0x800DF840,0xB
asm/non_matchings/code/z_camera/func_800DF86C.s,func_800DF86C,0x800DF86C,0x20
asm/non_matchings/code/z_camera/func_800DF8EC.s,func_800DF8EC,0x800DF8EC,0x77
asm/non_matchings/code/z_camera/func_800DFAC8.s,func_800DFAC8,0x800DFAC8,0x13
asm/non_matchings/code/z_camera/Camera_ChangeSetting.s,Camera_ChangeSetting,0x800DFAC8,0x13
asm/non_matchings/code/z_camera/Camera_ChangeDataIdx.s,Camera_ChangeDataIdx,0x800DFB14,0x42
asm/non_matchings/code/z_camera/func_800DFC1C.s,func_800DFC1C,0x800DFC1C,0x9
asm/non_matchings/code/z_camera/func_800DFC40.s,func_800DFC40,0x800DFC40,0xA
asm/non_matchings/code/z_camera/Camera_GetInputDirYaw.s,Camera_GetInputDirYaw,0x800DFC68,0xA
asm/non_matchings/code/z_camera/func_800DFC90.s,func_800DFC90,0x800DFC90,0x9
asm/non_matchings/code/z_camera/Camera_GetCamDir.s,Camera_GetCamDir,0x800DFC90,0x9
asm/non_matchings/code/z_camera/Camera_GetCamDirPitch.s,Camera_GetCamDirPitch,0x800DFCB4,0xA
asm/non_matchings/code/z_camera/Camera_GetCamDirYaw.s,Camera_GetCamDirYaw,0x800DFCDC,0xA
asm/non_matchings/code/z_camera/func_800DFD04.s,func_800DFD04,0x800DFD04,0x1D
asm/non_matchings/code/z_camera/Camera_AddQuake.s,Camera_AddQuake,0x800DFD04,0x1D
asm/non_matchings/code/z_camera/func_800DFD78.s,func_800DFD78,0x800DFD78,0x5E
asm/non_matchings/code/z_camera/func_800DFEF0.s,func_800DFEF0,0x800DFEF0,0xA
asm/non_matchings/code/z_camera/func_800DFF18.s,func_800DFF18,0x800DFF18,0x7
@ -801,7 +801,7 @@ asm/non_matchings/code/z_camera/func_800DFF34.s,func_800DFF34,0x800DFF34,0x4
asm/non_matchings/code/z_camera/func_800DFF44.s,func_800DFF44,0x800DFF44,0x7
asm/non_matchings/code/z_camera/Camera_SetFlags.s,Camera_SetFlags,0x800DFF60,0x9
asm/non_matchings/code/z_camera/Camera_ClearFlags.s,Camera_ClearFlags,0x800DFF84,0xA
asm/non_matchings/code/z_camera/func_800DFFAC.s,func_800DFFAC,0x800DFFAC,0x34
asm/non_matchings/code/z_camera/Camera_ChangeDoorCam.s,Camera_ChangeDoorCam,0x800DFFAC,0x34
asm/non_matchings/code/z_camera/func_800E007C.s,func_800E007C,0x800E007C,0x4C
asm/non_matchings/code/z_camera/func_800E01AC.s,func_800E01AC,0x800E01AC,0x3
asm/non_matchings/code/z_camera/Camera_GetQuakeOffset.s,Camera_GetQuakeOffset,0x800E01B8,0x9

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
785 asm/non_matchings/code/z_camera/Camera_ChangeMode.s Camera_ChangeMode 0x800DF840 0xB
786 asm/non_matchings/code/z_camera/func_800DF86C.s func_800DF86C 0x800DF86C 0x20
787 asm/non_matchings/code/z_camera/func_800DF8EC.s func_800DF8EC 0x800DF8EC 0x77
788 asm/non_matchings/code/z_camera/func_800DFAC8.s asm/non_matchings/code/z_camera/Camera_ChangeSetting.s func_800DFAC8 Camera_ChangeSetting 0x800DFAC8 0x13
789 asm/non_matchings/code/z_camera/Camera_ChangeDataIdx.s Camera_ChangeDataIdx 0x800DFB14 0x42
790 asm/non_matchings/code/z_camera/func_800DFC1C.s func_800DFC1C 0x800DFC1C 0x9
791 asm/non_matchings/code/z_camera/func_800DFC40.s func_800DFC40 0x800DFC40 0xA
792 asm/non_matchings/code/z_camera/Camera_GetInputDirYaw.s Camera_GetInputDirYaw 0x800DFC68 0xA
793 asm/non_matchings/code/z_camera/func_800DFC90.s asm/non_matchings/code/z_camera/Camera_GetCamDir.s func_800DFC90 Camera_GetCamDir 0x800DFC90 0x9
794 asm/non_matchings/code/z_camera/Camera_GetCamDirPitch.s Camera_GetCamDirPitch 0x800DFCB4 0xA
795 asm/non_matchings/code/z_camera/Camera_GetCamDirYaw.s Camera_GetCamDirYaw 0x800DFCDC 0xA
796 asm/non_matchings/code/z_camera/func_800DFD04.s asm/non_matchings/code/z_camera/Camera_AddQuake.s func_800DFD04 Camera_AddQuake 0x800DFD04 0x1D
797 asm/non_matchings/code/z_camera/func_800DFD78.s func_800DFD78 0x800DFD78 0x5E
798 asm/non_matchings/code/z_camera/func_800DFEF0.s func_800DFEF0 0x800DFEF0 0xA
799 asm/non_matchings/code/z_camera/func_800DFF18.s func_800DFF18 0x800DFF18 0x7
801 asm/non_matchings/code/z_camera/func_800DFF44.s func_800DFF44 0x800DFF44 0x7
802 asm/non_matchings/code/z_camera/Camera_SetFlags.s Camera_SetFlags 0x800DFF60 0x9
803 asm/non_matchings/code/z_camera/Camera_ClearFlags.s Camera_ClearFlags 0x800DFF84 0xA
804 asm/non_matchings/code/z_camera/func_800DFFAC.s asm/non_matchings/code/z_camera/Camera_ChangeDoorCam.s func_800DFFAC Camera_ChangeDoorCam 0x800DFFAC 0x34
805 asm/non_matchings/code/z_camera/func_800E007C.s func_800E007C 0x800E007C 0x4C
806 asm/non_matchings/code/z_camera/func_800E01AC.s func_800E01AC 0x800E01AC 0x3
807 asm/non_matchings/code/z_camera/Camera_GetQuakeOffset.s Camera_GetQuakeOffset 0x800E01B8 0x9