Document OnePointCutscene Init Field (#1465)

* player csmode enum

* cleanup

* missed one, player2

* spell out enum name

* use CSMODE_MAX for data

* doc OnePointDemo Field

* PR Suggestions

* another suggestion

* duplicate word

* adjust comment

* cleanup comments

* oops
This commit is contained in:
engineer124
2023-01-12 20:30:41 -05:00
committed by GitHub
parent 985dd7f520
commit 905b7087de
4 changed files with 433 additions and 420 deletions
+38 -27
View File
@@ -50,26 +50,28 @@
#define CAM_HUD_VISIBILITY_MASK (0xF << CAM_HUD_VISIBILITY_SHIFT)
#define CAM_HUD_VISIBILITY(hudVisibility) (((hudVisibility) & 0xF) << CAM_HUD_VISIBILITY_SHIFT)
//! @note: since `interfaceField` can only have `0 - 0xF` values,
//! there is no cam value mapped to `HUD_VISIBILITY_NOTHING_INSTANT`.
//! @note: since 0 means `HUD_VISIBILITY_ALL`,
//! there is no cam value mapped to `HUD_VISIBILITY_NO_CHANGE`.
#define CAM_HUD_VISIBILITY_ALL CAM_HUD_VISIBILITY(0) // HUD_VISIBILITY_ALL
#define CAM_HUD_VISIBILITY_NOTHING CAM_HUD_VISIBILITY(HUD_VISIBILITY_NOTHING)
#define CAM_HUD_VISIBILITY_NOTHING_ALT CAM_HUD_VISIBILITY(HUD_VISIBILITY_NOTHING_ALT)
#define CAM_HUD_VISIBILITY_HEARTS_FORCE CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_FORCE)
#define CAM_HUD_VISIBILITY_A CAM_HUD_VISIBILITY(HUD_VISIBILITY_A)
#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE)
#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_FORCE CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_FORCE)
#define CAM_HUD_VISIBILITY_ALL_NO_MINIMAP_BY_BTN_STATUS CAM_HUD_VISIBILITY(HUD_VISIBILITY_ALL_NO_MINIMAP_BY_BTN_STATUS)
#define CAM_HUD_VISIBILITY_B CAM_HUD_VISIBILITY(HUD_VISIBILITY_B)
#define CAM_HUD_VISIBILITY_HEARTS_MAGIC CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC)
#define CAM_HUD_VISIBILITY_B_ALT CAM_HUD_VISIBILITY(HUD_VISIBILITY_B_ALT)
#define CAM_HUD_VISIBILITY_HEARTS CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS)
#define CAM_HUD_VISIBILITY_A_B_MINIMAP CAM_HUD_VISIBILITY(HUD_VISIBILITY_A_B_MINIMAP)
#define CAM_HUD_VISIBILITY_HEARTS_MAGIC_FORCE CAM_HUD_VISIBILITY(HUD_VISIBILITY_HEARTS_MAGIC_FORCE)
// These defines exist to clarify exactly which HUD visibility modes are supported by the camera system. While most of
// them map 1 to 1 with their HUD visibility counterparts, not all HUD visibility mode values will work as expected if
// used directly. Notably:
// - CAM_HUD_VISIBILITY_ALL (0) maps to HUD_VISIBILITY_ALL (50), not HUD_VISIBILITY_NO_CHANGE (0)
// - HUD_VISIBILITY_NOTHING_INSTANT (52) has no CAM_HUD_VISIBILITY_* mapping,
// because camera HUD visibility values are restricted to the 0-0xF range
#define CAM_HUD_VISIBILITY_ALL (0) // HUD_VISIBILITY_ALL
#define CAM_HUD_VISIBILITY_NOTHING (HUD_VISIBILITY_NOTHING)
#define CAM_HUD_VISIBILITY_NOTHING_ALT (HUD_VISIBILITY_NOTHING_ALT)
#define CAM_HUD_VISIBILITY_HEARTS_FORCE (HUD_VISIBILITY_HEARTS_FORCE)
#define CAM_HUD_VISIBILITY_A (HUD_VISIBILITY_A)
#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE (HUD_VISIBILITY_A_HEARTS_MAGIC_FORCE)
#define CAM_HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_FORCE (HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_FORCE)
#define CAM_HUD_VISIBILITY_ALL_NO_MINIMAP_BY_BTN_STATUS (HUD_VISIBILITY_ALL_NO_MINIMAP_BY_BTN_STATUS)
#define CAM_HUD_VISIBILITY_B (HUD_VISIBILITY_B)
#define CAM_HUD_VISIBILITY_HEARTS_MAGIC (HUD_VISIBILITY_HEARTS_MAGIC)
#define CAM_HUD_VISIBILITY_B_ALT (HUD_VISIBILITY_B_ALT)
#define CAM_HUD_VISIBILITY_HEARTS (HUD_VISIBILITY_HEARTS)
#define CAM_HUD_VISIBILITY_A_B_MINIMAP (HUD_VISIBILITY_A_B_MINIMAP)
#define CAM_HUD_VISIBILITY_HEARTS_MAGIC_FORCE (HUD_VISIBILITY_HEARTS_MAGIC_FORCE)
// Unique to camera, does not change hud visibility mode (similar effect as HUD_VISIBILITY_NO_CHANGE)
#define CAM_HUD_VISIBILITY_IGNORE CAM_HUD_VISIBILITY(0xF)
#define CAM_HUD_VISIBILITY_IGNORE (0xF)
/**
* letterboxFlag: Determines the size of the letter-box window. See CAM_LETTERBOX_* defines.
@@ -80,7 +82,7 @@
* funcFlags: Custom flags for functions
*/
#define CAM_INTERFACE_FIELD(letterboxFlag, hudVisibilityMode, funcFlags) \
(((letterboxFlag) & CAM_LETTERBOX_MASK) | (hudVisibilityMode) | ((funcFlags) & 0xFF))
(((letterboxFlag) & CAM_LETTERBOX_MASK) | CAM_HUD_VISIBILITY(hudVisibilityMode) | ((funcFlags) & 0xFF))
// 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
@@ -1249,13 +1251,22 @@ typedef enum {
#define ONEPOINT_CS_GET_ACTION(onePointCsFull) ((onePointCsFull)->actionFlags & 0x1F)
/** initFlags
* & 0x00FF = atInitFlags
* & 0xFF00 = eyeInitFlags
#define ONEPOINT_CS_INIT_FIELD_NONE 0xFF
#define ONEPOINT_CS_INIT_FIELD_ACTORCAT(actorCat) (0x80 | ((actorCat) & 0x0F))
#define ONEPOINT_CS_INIT_FIELD_HUD_VISIBILITY(camHudVisibility) (0xC0 | ((camHudVisibility) & 0x0F))
#define ONEPOINT_CS_INIT_FIELD_PLAYER_CS(csMode) ((csMode) & 0x7F)
#define ONEPOINT_CS_INIT_FIELD_IS_TYPE_ACTORCAT(field) ((field & 0xF0) == 0x80)
#define ONEPOINT_CS_INIT_FIELD_IS_TYPE_HUD_VISIBILITY(field) ((field & 0xF0) == 0xC0)
#define ONEPOINT_CS_INIT_FIELD_IS_TYPE_PLAYER_CS(field) !(field & 0x80)
/** viewFlags
* & 0x00FF = atFlags
* & 0xFF00 = eyeFlags
* 0x1: Direct Copy of atTargetInit
* if initFlags & 0x6060: use head for focus point
* if viewFlags & 0x6060: use head for focus point
* 0x2: Add atTargetInit to view's lookAt
* if initFlags & 0x6060: use world for focus point
* if viewFlags & 0x6060: use world for focus point
* 0x3: Add atTargetInit to camera's at
* 0x4: Don't update targets?
* 0x8: flag to use atTagetInit as f32 pitch, yaw, r
@@ -1264,8 +1275,8 @@ typedef enum {
*/
typedef struct {
/* 0x00 */ u8 actionFlags;
/* 0x01 */ u8 unk_01;
/* 0x02 */ s16 initFlags;
/* 0x01 */ u8 initField;
/* 0x02 */ s16 viewFlags;
/* 0x04 */ s16 timerInit;
/* 0x06 */ s16 rollTargetInit;
/* 0x08 */ f32 fovTargetInit;