2022-10-01 02:01:39 +00:00
|
|
|
#ifndef Z64QUAKE_H
|
|
|
|
#define Z64QUAKE_H
|
|
|
|
|
2023-05-18 14:29:50 +00:00
|
|
|
#include "z64camera.h"
|
2022-10-01 02:01:39 +00:00
|
|
|
#include "z64math.h"
|
|
|
|
|
|
|
|
struct PlayState;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
/* 0x00 */ Vec3f atOffset;
|
|
|
|
/* 0x0C */ Vec3f eyeOffset;
|
2023-05-18 14:29:50 +00:00
|
|
|
/* 0x18 */ s16 upRollOffset;
|
|
|
|
/* 0x1A */ s16 fovOffset;
|
|
|
|
/* 0x1C */ f32 maxOffset; // Set to scaled max data of struct (mag for Vec3f), never used
|
|
|
|
} ShakeInfo; // size = 0x20
|
2022-10-01 02:01:39 +00:00
|
|
|
|
|
|
|
typedef enum {
|
2023-05-18 14:29:50 +00:00
|
|
|
/* 0 */ QUAKE_TYPE_NONE,
|
|
|
|
/* 1 */ QUAKE_TYPE_1, // Periodic, sustaining, random X perturbations
|
|
|
|
/* 2 */ QUAKE_TYPE_2, // Aperiodic, sustaining, random X perturbations
|
|
|
|
/* 3 */ QUAKE_TYPE_3, // Periodic, decaying
|
|
|
|
/* 4 */ QUAKE_TYPE_4, // Aperiodic, decaying, random X perturbations
|
|
|
|
/* 5 */ QUAKE_TYPE_5, // Periodic, sustaining
|
|
|
|
/* 6 */ QUAKE_TYPE_6 // See below
|
2022-10-01 02:01:39 +00:00
|
|
|
} QuakeType;
|
|
|
|
|
2023-05-18 14:29:50 +00:00
|
|
|
s16 Quake_Request(Camera* camera, u32 type);
|
|
|
|
|
|
|
|
u32 Quake_SetSpeed(s16 index, s16 speed);
|
|
|
|
u32 Quake_SetPerturbations(s16 index, s16 y, s16 x, s16 fov, s16 roll);
|
|
|
|
u32 Quake_SetDuration(s16 index, s16 duration);
|
|
|
|
u32 Quake_SetOrientation(s16 index, s16 isRelativeToScreen, Vec3s orientation);
|
|
|
|
|
|
|
|
s16 Quake_GetTimeLeft(s16 index);
|
|
|
|
s32 Quake_GetNumActiveQuakes(void);
|
|
|
|
u32 Quake_RemoveRequest(s16 index);
|
|
|
|
|
2022-10-01 02:01:39 +00:00
|
|
|
void Quake_Init(void);
|
2023-05-18 14:29:50 +00:00
|
|
|
s16 Quake_Update(Camera* camera, ShakeInfo* camShake);
|
2022-10-01 02:01:39 +00:00
|
|
|
|
2023-05-18 14:29:50 +00:00
|
|
|
#define DISTORTION_TYPE_HOT_ROOM (1 << 0) // Hot Room
|
|
|
|
#define DISTORTION_TYPE_NON_ZORA_SWIMMING (1 << 2) // Non-Zora swimming
|
|
|
|
#define DISTORTION_TYPE_ZORA_SWIMMING (1 << 3) // Zora swimming, also used for boss warp pad part 1
|
2022-10-01 02:01:39 +00:00
|
|
|
|
2023-05-18 14:29:50 +00:00
|
|
|
#define DISTORTION_TYPE_UNDERWATER_ENTRY (1 << 4) // Entering water, also used for boss warp pad part 2
|
|
|
|
#define DISTORTION_TYPE_SONG_OF_TIME (1 << 5) // Song of Time effects
|
|
|
|
#define DISTORTION_TYPE_ZORA_KICK (1 << 6) // PLAYER_MWA_ZORA_PUNCH_KICK
|
|
|
|
#define DISTORTION_TYPE_UNK_ATTACK (1 << 7) // Impossible to achieve, inferred to be another `PLAYER_MWA_`,
|
|
|
|
|
|
|
|
#define DISTORTION_TYPE_GORON_BUTT (1 << 8) // PLAYER_MWA_GORON_PUNCH_BUTT
|
|
|
|
#define DISTORTION_TYPE_MASK_TRANSFORM_1 (1 << 9) // Mask transformation part 1
|
|
|
|
#define DISTORTION_TYPE_BOSS_WARP (1 << 10) // Boss warp pad part 3
|
|
|
|
#define DISTORTION_TYPE_MASK_TRANSFORM_2 (1 << 11) // Mask transformation part 2
|
|
|
|
|
|
|
|
void Distortion_Request(s32 type);
|
|
|
|
void Distortion_SetDuration(s16 duration);
|
|
|
|
|
|
|
|
s16 Distortion_GetTimeLeft(void);
|
2022-10-01 02:01:39 +00:00
|
|
|
s16 Distortion_GetType(void);
|
2023-05-18 14:29:50 +00:00
|
|
|
void Distortion_RemoveRequest(s32 type);
|
|
|
|
|
2023-10-26 06:42:24 +00:00
|
|
|
void Distortion_Init(struct PlayState* play);
|
2022-10-01 02:01:39 +00:00
|
|
|
void Distortion_Update(void);
|
|
|
|
|
|
|
|
#endif
|