diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-04-08 18:05:46 -0600 |
|---|---|---|
| committer | Sonic Dreamcaster <alejandro.asenjo88@gmail.com> | 2024-09-17 19:14:09 -0300 |
| commit | 3892bcefa20e4262a676466050d5810b04454faa (patch) | |
| tree | 1fb42f12f53d7cdb88afea708c3b1a36ae06da36 /include | |
| parent | ed2a45796b5f0af0c27cc0c304b035cda4bb0099 (diff) | |
| parent | 0a8c61789e5a04811a6efcd5c6af91637c5d8e57 (diff) | |
Merge branch 'master' into otr
Diffstat (limited to 'include')
37 files changed, 5455 insertions, 3017 deletions
diff --git a/include/alignment.h b/include/alignment.h index e26a1d3f..5a011c0a 100644 --- a/include/alignment.h +++ b/include/alignment.h @@ -7,6 +7,8 @@ #define ALIGN64(val) (((val) + 0x3F) & ~0x3F) #define ALIGN256(val) (((val) + 0xFF) & ~0xFF) +#define ALIGN16_ALT(val) (((val) & ~0xF) + 0x10) + #ifdef __GNUC__ #define ALIGNED8 __attribute__ ((aligned (8))) #else diff --git a/include/audioseq_cmd.h b/include/audioseq_cmd.h index 1f2deed3..6df7788e 100644 --- a/include/audioseq_cmd.h +++ b/include/audioseq_cmd.h @@ -9,7 +9,8 @@ typedef enum { /* 0 */ SEQ_PLAYER_BGM, /* 1 */ SEQ_PLAYER_FANFARE, /* 2 */ SEQ_PLAYER_SFX, - /* 3 */ SEQ_PLAYER_VOICE + /* 3 */ SEQ_PLAYER_VOICE, + /* 4 */ SEQ_PLAYER_MAX, } SequencePlayerId; // ==== Primary commands ==== diff --git a/include/audiothread_cmd.h b/include/audiothread_cmd.h index 2a9a013c..74634286 100644 --- a/include/audiothread_cmd.h +++ b/include/audiothread_cmd.h @@ -42,7 +42,9 @@ typedef enum { /* 0x81 */ AUDIOCMD_OP_GLOBAL_SYNC_LOAD_SEQ_PARTS = 0x81, /* 0x82 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER, /* 0x83 */ AUDIOCMD_OP_GLOBAL_DISABLE_SEQPLAYER, - /* 0x85 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS = 0x85, + /* 0x84 */ AUDIOCMD_OP_GLOBAL_UNK_84, + /* 0x85 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_SKIP_TICKS, + /* 0x88 */ AUDIOCMD_OP_GLOBAL_INIT_SEQPLAYER_ALT = 0x88, /* 0x90 */ AUDIOCMD_OP_GLOBAL_SET_CHANNEL_MASK = 0x90, /* 0xE0 */ AUDIOCMD_OP_GLOBAL_SET_DRUM_FONT = 0xE0, /* 0xE1 */ AUDIOCMD_OP_GLOBAL_SET_SFX_FONT, @@ -410,7 +412,7 @@ typedef enum { /** * Pop the persistent cache of the specified table * - * @param tableType (s32) see the `SampleBankTableType` enum + * @param tableType (s32) see the `AudioTableType` enum */ #define AUDIOCMD_GLOBAL_POP_PERSISTENT_CACHE(tableType) \ AudioThread_QueueCmdS32(AUDIO_MK_CMD(AUDIOCMD_OP_GLOBAL_POP_PERSISTENT_CACHE, 0, 0, 0), tableType) diff --git a/include/bgm.h b/include/bgm.h new file mode 100644 index 00000000..3f5c6376 --- /dev/null +++ b/include/bgm.h @@ -0,0 +1,171 @@ +#ifndef BGM_H +#define BGM_H + +#include "sys.h" + +void Audio_SetBgmParam(s8 bgmParam); +void Audio_PlaySequence(u8 seqPlayId, u16 seqId, u8 fadeinTime, u8 bgmParam); +void Audio_PlayFanfare(u16 seqId, u8 bgmVolume, u8 bgmFadeoutTime, u8 bgmFadeinTime); +void Audio_PlayDeathSequence(void); +void Audio_PlaySoundTest(u8 enable); +void Audio_PlaySequenceDistorted(u8 seqPlayId, u16 seqId, u16 distortion, u8 fadeinTime, u8 unused); +void Audio_PlaySoundTestTrack(u8 trackNumber); +void Audio_PlayBgm(u16 seqId); + +#define AUDIO_PLAY_BGM(seqId) Audio_PlaySequence(SEQ_PLAYER_BGM, (seqId), 0, -1) + +typedef enum BgmSeqIds { + /* 0 */ SEQ_ID_SFX, + /* 1 */ SEQ_ID_VOICE, + /* 2 */ SEQ_ID_CORNERIA, + /* 3 */ SEQ_ID_METEO, + /* 4 */ SEQ_ID_TITANIA, + /* 5 */ SEQ_ID_SECTOR_X, + /* 6 */ SEQ_ID_ZONESS, + /* 7 */ SEQ_ID_AREA_6, + /* 8 */ SEQ_ID_VENOM_1, + /* 9 */ SEQ_ID_SECTOR_Y, + /* 10 */ SEQ_ID_FORTUNA, + /* 11 */ SEQ_ID_SOLAR, + /* 12 */ SEQ_ID_BOLSE, + /* 13 */ SEQ_ID_KATINA, + /* 14 */ SEQ_ID_AQUAS, + /* 15 */ SEQ_ID_SECTOR_Z, + /* 16 */ SEQ_ID_MACBETH, + /* 17 */ SEQ_ID_ANDROSS, + /* 18 */ SEQ_ID_BOSS_CO_1, + /* 19 */ SEQ_ID_BOSS_ME, + /* 20 */ SEQ_ID_BOSS_TI, + /* 21 */ SEQ_ID_BOSS_SX, + /* 22 */ SEQ_ID_BOSS_ZO, + /* 23 */ SEQ_ID_BOSS_A6, + /* 24 */ SEQ_ID_BOSS_VE, + /* 25 */ SEQ_ID_BOSS_SY, + /* 26 */ SEQ_ID_UNK_26, + /* 27 */ SEQ_ID_BOSS_SO, + /* 28 */ SEQ_ID_BOSS_BO, + /* 29 */ SEQ_ID_BOSS_KA, + /* 30 */ SEQ_ID_BOSS_AQ, + /* 31 */ SEQ_ID_BOSS_SZ, + /* 32 */ SEQ_ID_BOSS_MA, + /* 33 */ SEQ_ID_BOSS_ANDROSS, + /* 34 */ SEQ_ID_TITLE, + /* 35 */ SEQ_ID_OPENING, + /* 36 */ SEQ_ID_MENU, + /* 37 */ SEQ_ID_CO_INTRO, + /* 38 */ SEQ_ID_GOOD_END, + /* 39 */ SEQ_ID_DEATH, + /* 40 */ SEQ_ID_GAME_OVER, + /* 41 */ SEQ_ID_UNK_41, + /* 42 */ SEQ_ID_STAFF_ROLL, + /* 43 */ SEQ_ID_STAR_WOLF, + /* 44 */ SEQ_ID_INTRO_S, + /* 45 */ SEQ_ID_INTRO_M, + /* 46 */ SEQ_ID_VERSUS, + /* 47 */ SEQ_ID_VS_HURRY, + /* 48 */ SEQ_ID_BOSS_CO_2, + /* 49 */ SEQ_ID_BAD_END, + /* 50 */ SEQ_ID_ME_INTRO, + /* 51 */ SEQ_ID_INTRO_51, + /* 52 */ SEQ_ID_UNK_52, + /* 53 */ SEQ_ID_UNK_53, + /* 54 */ SEQ_ID_KATT, + /* 55 */ SEQ_ID_BILL, + /* 56 */ SEQ_ID_VS_MENU, + /* 57 */ SEQ_ID_UNK_57, + /* 58 */ SEQ_ID_WARP_ZONE, + /* 59 */ SEQ_ID_UNK_59, + /* 60 */ SEQ_ID_WORLD_MAP, + /* 61 */ SEQ_ID_AND_BRAIN, + /* 62 */ SEQ_ID_TO_ANDROSS, + /* 63 */ SEQ_ID_TRAINING, + /* 64 */ SEQ_ID_VE_CLEAR, + /* 65 */ SEQ_ID_BOSS_RESUME, + /* 66 */ SEQ_ID_MAX, + /* -1 */ SEQ_ID_NONE = 0xFFFF, +} BgmSeqIds; + +#define SEQ_FLAG 0x8000 + +#define NA_BGM_SE (SEQ_ID_SFX) +#define NA_BGM_VO (SEQ_ID_VOICE) +#define NA_BGM_STAGE_CO (SEQ_ID_CORNERIA | SEQ_FLAG) +#define NA_BGM_STAGE_ME (SEQ_ID_METEO | SEQ_FLAG) +#define NA_BGM_STAGE_TI (SEQ_ID_TITANIA | SEQ_FLAG) +#define NA_BGM_STAGE_SX (SEQ_ID_SECTOR_X | SEQ_FLAG) +#define NA_BGM_STAGE_ZO (SEQ_ID_ZONESS | SEQ_FLAG) +#define NA_BGM_STAGE_A6 (SEQ_ID_AREA_6 | SEQ_FLAG) +#define NA_BGM_STAGE_SB (SEQ_ID_AREA_6 | SEQ_FLAG) +#define NA_BGM_STAGE_VE1 (SEQ_ID_VENOM_1 | SEQ_FLAG) +#define NA_BGM_STAGE_SY (SEQ_ID_SECTOR_Y | SEQ_FLAG) +#define NA_BGM_STAGE_FO (SEQ_ID_FORTUNA | SEQ_FLAG) +#define NA_BGM_STAGE_SO (SEQ_ID_SOLAR | SEQ_FLAG) +#define NA_BGM_STAGE_BO (SEQ_ID_BOLSE | SEQ_FLAG) +#define NA_BGM_STAGE_KA (SEQ_ID_KATINA | SEQ_FLAG) +#define NA_BGM_STAGE_AQ (SEQ_ID_AQUAS) +#define NA_BGM_STAGE_SZ (SEQ_ID_SECTOR_Z | SEQ_FLAG) +#define NA_BGM_STAGE_MA (SEQ_ID_MACBETH | SEQ_FLAG) +#define NA_BGM_STAGE_ANDROSS (SEQ_ID_ANDROSS | SEQ_FLAG) +#define NA_BGM_BOSS_CO (SEQ_ID_BOSS_CO_1 | SEQ_FLAG) +#define NA_BGM_BOSS_ME (SEQ_ID_BOSS_ME | SEQ_FLAG) +#define NA_BGM_BOSS_TI (SEQ_ID_BOSS_TI | SEQ_FLAG) +#define NA_BGM_BOSS_SX (SEQ_ID_BOSS_SX | SEQ_FLAG) +#define NA_BGM_BOSS_ZO (SEQ_ID_BOSS_ZO | SEQ_FLAG) +#define NA_BGM_BOSS_A6 (SEQ_ID_BOSS_A6 | SEQ_FLAG) +#define NA_BGM_BOSS_SB (SEQ_ID_BOSS_A6 | SEQ_FLAG) +#define NA_BGM_BOSS_VE (SEQ_ID_BOSS_VE | SEQ_FLAG) +#define NA_BGM_BOSS_SY (SEQ_ID_BOSS_SY | SEQ_FLAG) +#define NA_BGM_BOSS_FO (SEQ_ID_UNK_26 | SEQ_FLAG) +#define NA_BGM_BOSS_SO (SEQ_ID_BOSS_SO | SEQ_FLAG) +#define NA_BGM_BOSS_BO (SEQ_ID_BOSS_BO | SEQ_FLAG) +#define NA_BGM_BOSS_KA (SEQ_ID_BOSS_KA | SEQ_FLAG) +#define NA_BGM_BOSS_AQ (SEQ_ID_BOSS_AQ | SEQ_FLAG) +#define NA_BGM_BOSS_SZ (SEQ_ID_BOSS_SZ | SEQ_FLAG) +#define NA_BGM_BOSS_MA (SEQ_ID_BOSS_MA | SEQ_FLAG) +#define NA_BGM_BOSS_ANDROSS (SEQ_ID_BOSS_ANDROSS | SEQ_FLAG) +#define NA_BGM_TITLE (SEQ_ID_TITLE) +#define NA_BGM_OPENING (SEQ_ID_OPENING) +#define NA_BGM_SELECT (SEQ_ID_MENU) +#define NA_BGM_RANKING (SEQ_ID_MENU) +#define NA_BGM_START_DEMO (SEQ_ID_CO_INTRO) +#define NA_BGM_COURSE_CLEAR (SEQ_ID_GOOD_END) +#define NA_BGM_PLAYER_DOWN (SEQ_ID_DEATH) +#define NA_BGM_GAME_OVER (SEQ_ID_GAME_OVER) +#define NA_BGM_END_DEMO (SEQ_ID_UNK_41) +#define NA_BGM_STAFF_ROLL (SEQ_ID_STAFF_ROLL) +#define NA_BGM_STARWOLF (SEQ_ID_STAR_WOLF | SEQ_FLAG) +#define NA_BGM_START_DEMO_S (SEQ_ID_INTRO_S) +#define NA_BGM_START_DEMO_M (SEQ_ID_INTRO_M) +#define NA_BGM_VOLUME_TEST (SEQ_ID_VERSUS) +#define NA_BGM_BATTLE (SEQ_ID_VERSUS | SEQ_FLAG) +#define NA_BGM_VS_00 (SEQ_ID_VERSUS | SEQ_FLAG) +#define NA_BGM_VS_01 (SEQ_ID_VERSUS | SEQ_FLAG) +#define NA_BGM_VS_02 (SEQ_ID_VERSUS | SEQ_FLAG) +#define NA_BGM_BATTLE_LAST (SEQ_ID_VS_HURRY | SEQ_FLAG) +#define NA_BGM_BOSS_A_CARRIER (SEQ_ID_BOSS_CO_2 | SEQ_FLAG) +#define NA_BGM_COURSE_FAILURE (SEQ_ID_BAD_END) +#define NA_BGM_ME_START_DEMO (SEQ_ID_ME_INTRO) +#define NA_BGM_FO_START_DEMO (SEQ_ID_INTRO_51) +#define NA_BGM_A6_START_DEMO (SEQ_ID_INTRO_51) +#define NA_BGM_BO_START_DEMO (SEQ_ID_INTRO_51) +#define NA_BGM_SO_START_DEMO (SEQ_ID_INTRO_51) +#define NA_BGM_KA_START_DEMO (SEQ_ID_INTRO_51) +#define NA_BGM_SZ_START_DEMO (SEQ_ID_INTRO_51) +#define NA_BGM_AQ_START_DEMO (SEQ_ID_UNK_52) +#define NA_BGM_VE_START_DEMO (SEQ_ID_UNK_53) +#define NA_BGM_KATT (SEQ_ID_KATT) +#define NA_BGM_BILL (SEQ_ID_BILL) +#define NA_BGM_VS_SELECT (SEQ_ID_VS_MENU) +#define NA_BGM_VS_RESULT (SEQ_ID_UNK_57) +#define NA_BGM_STAGE_WZ (SEQ_ID_WARP_ZONE | SEQ_FLAG) +#define NA_BGM_STAGE_AT (SEQ_ID_WARP_ZONE | SEQ_FLAG) +#define NA_BGM_STAGE_SS (SEQ_ID_WARP_ZONE | SEQ_FLAG) +#define NA_BGM_STAGE_BM3 (SEQ_ID_UNK_59 | SEQ_FLAG) +#define NA_BGM_MAP (SEQ_ID_WORLD_MAP) +#define NA_BGM_ANDROSS_BRAIN (SEQ_ID_AND_BRAIN | SEQ_FLAG) +#define NA_BGM_DASH_INTO_BASE (SEQ_ID_TO_ANDROSS | SEQ_FLAG) +#define NA_BGM_TRAINING (SEQ_ID_TRAINING | SEQ_FLAG) +#define NA_BGM_ALL_CLEAR (SEQ_ID_VE_CLEAR | SEQ_FLAG) +#define NA_BGM_REAL_BOSS (SEQ_ID_BOSS_RESUME | SEQ_FLAG) + +#endif diff --git a/include/fox_co.h b/include/fox_co.h new file mode 100644 index 00000000..4ff18d94 --- /dev/null +++ b/include/fox_co.h @@ -0,0 +1,178 @@ +#ifndef FOX_CO_H +#define FOX_CO_H + +#define TEAM_HEAD_XROT (19) +#define TEAM_HEAD_YROT (20) + +// Granga Boss: + +#define DMG_FLICKER_5 (5) // Damage indicator flickers for 5 frames +#define DMG_FLICKER_15 (15) // Damage indicator flickers for 15 frames +#define DMG_DESTROYED (1000) // Damage part is destroyed + +typedef enum GrangaStates { + /* 0 */ GRANGA_STATIONARY, + /* 1 */ GRANGA_FORWARD_MISSILE, // walk forward + missile + /* 2 */ GRANGA_BACKWARDS_LASER_PLASMA, // Walk backwards + lasers + plasma + /* 3 */ GRANGA_FORWARD_LASER_PLASMA, // Walk towards player + lasers + plasma + /* 4 */ GRANGA_FORWARD, // Walk forward + /* 5 */ GRANGA_FALL_TO_LEFT, // Falling from missing left leg + /* 6 */ GRANGA_FALL_TO_RIGHT, // Falling from missing right leg + /* 7 */ GRANGA_EXPLODE, // BOOM! +} GrangaStates; + +typedef enum GrangaWork { + /* 00 */ GRANGA_WORK_00, // x of missiles launched from it's right arm ? + /* 01 */ GRANGA_WORK_01, // y of missiles launched from it's right arm ? + /* 02 */ GRANGA_WORK_02, // z of missiles launched from it's right arm ? + /* 03 */ GRANGA_WORK_03, // x of something // destroy effect related? + /* 04 */ GRANGA_WORK_04, // y of something // destroy effect related? + /* 05 */ GRANGA_WORK_05, // z of something // destroy effect related? + /* 06 */ GRANGA_WORK_06, // x of missiles launched from it's left arm ? + /* 07 */ GRANGA_WORK_07, // y of missiles launched from it's left arm ? + /* 08 */ GRANGA_WORK_08, // z of missiles launched from it's left arm ? + /* 09 */ GRANGA_WORK_09, + /* 10 */ GRANGA_WORK_10, + /* 11 */ GRANGA_WORK_11, + /* 12 */ GRANGA_WORK_12, + /* 13 */ GRANGA_WORK_13, + /* 14 */ GRANGA_WORK_14, + /* 15 */ GRANGA_WORK_15, + /* 16 */ GRANGA_WORK_16, // yRot of missiles launched from both arms ? + /* 17 */ GRANGA_TARGET_X, // player.pos.x target position + /* 18 */ GRANGA_TARGET_Y, // player.pos.y target position + /* 19 */ GRANGA_TARGET_Z, // player.pos.trueZpos target position + /* 20 */ GRANGA_WORK_20, + /* 21 */ GRANGA_WORK_21, + /* 22 */ GRANGA_WORK_22, + /* 23 */ GRANGA_WORK_23, + /* 24 */ GRANGA_WORK_24, + /* 25 */ GRANGA_WORK_25, + /* 26 */ GRANGA_WORK_26, + /* 27 */ GRANGA_WORK_27, + /* 28 */ GRANGA_WORK_28, + /* 29 */ GRANGA_WORK_29, + /* 30 */ GRANGA_WORK_30, + /* 31 */ GRANGA_WORK_31, + /* 32 */ GRANGA_WORK_32, + /* 33 */ GRANGA_WORK_33, + /* 34 */ GRANGA_WORK_34, + /* 35 */ GRANGA_WORK_35, + /* 36 */ GRANGA_WORK_36, + /* 37 */ GRANGA_WORK_37, + /* 38 */ GRANGA_WORK_38, + /* 39 */ GRANGA_WORK_39, + /* 40 */ GRANGA_WORK_40, + /* 41 */ GRANGA_WORK_41, + /* 42 */ GRANGA_WORK_42, + /* 43 */ GRANGA_WORK_43, + /* 44 */ GRANGA_WORK_44, + /* 45 */ GRANGA_WORK_45, + /* 46 */ GRANGA_WORK_46, + /* 47 */ GRANGA_WORK_47, + /* 48 */ GRANGA_WORK_48, + /* 49 */ GRANGA_WORK_49, + /* 50 */ GRANGA_WORK_50, + /* 51 */ GRANGA_WORK_51, + /* 52 */ GRANGA_WORK_52, + /* 53 */ GRANGA_WORK_53, + /* 54 */ GRANGA_WORK_54, + /* 55 */ GRANGA_WORK_55, + /* 56 */ GRANGA_WORK_56, + /* 57 */ GRANGA_WORK_57, + /* 58 */ GRANGA_WORK_58, + /* 59 */ GRANGA_WORK_59, + /* 60 */ GRANGA_WORK_60, + /* 61 */ GRANGA_WORK_61, + /* 62 */ GRANGA_WORK_62, // x + /* 63 */ GRANGA_WORK_63, // y + /* 64 */ GRANGA_WORK_64, // z + /* 65 */ GRANGA_WORK_65, + /* 66 */ GRANGA_WORK_66, // xTargetPos ? + /* 67 */ GRANGA_WORK_67 // zTargetPos ? +} GrangaWork; + +typedef enum GrangaSwork { + /* 00 */ GRANGA_SWK_0, + + // Damage indicators, one per limb + /* 01 */ GRANGA_RIGHT_ARM_DMG_IND, + /* 02 */ GRANGA_LEFT_ARM_DMG_IND, + /* 03 */ GRANGA_GUN_DMG_IND, + /* 04 */ GRANGA_RIGHT_LEG_DMG_IND, + /* 07 */ GRANGA_LEFT_LEG_DMG_IND = 7, + /* 10 */ GRANGA_BACKPACK_DMG_IND = 10, + + /* 18 */ GRANGA_SWK_18 = 18, + /* 19 */ GRANGA_SWK_19, + /* 20 */ GRANGA_SWK_20, + /* 21 */ GRANGA_SWK_21, + /* 22 */ GRANGA_SWK_22, + /* 23 */ GRANGA_SWK_23, + + /* 24 */ GRANGA_LEFT_LEG_HP, + /* 25 */ GRANGA_RIGHT_LEG_HP, + /* 26 */ GRANGA_LEFT_ARM_HP, + /* 27 */ GRANGA_RIGHT_ARM_HP, + /* 28 */ GRANGA_PLASMA_GUN_HP, + /* 29 */ GRANGA_BACKPACK_HP, + + /* 30 */ GRANGA_ATTACK_STATE, + /* 31 */ GRANGA_NEXT_STATE, + /* 32 */ GRANGA_SWK_32, + /* 33 */ GRANGA_INIT, + /* 35 */ GRANGA_MISSILE_COUNT = 35, + /* 36 */ GRANGA_1UP_CHECK +} GrangaSwork; + +typedef enum GrangaFwork { + /* 00 */ GRANGA_FWK_00, // left leg rock angle? + /* 01 */ GRANGA_FWK_01, + /* 02 */ GRANGA_FWK_02, + /* 03 */ GRANGA_FWK_03, + /* 04 */ GRANGA_FWK_04, + /* 12 */ GRANGA_FWK_12 = 12, + /* 13 */ GRANGA_FWK_13, + /* 14 */ GRANGA_FWK_14, +} GrangaFwork; + +typedef enum GrangaDmgParts { + /* 0 */ GRANGA_DMG_BACKPACK, + /* 1 */ GRANGA_DMG_LEFT_ARM, + /* 2 */ GRANGA_DMG_RIGHT_ARM, + /* 3 */ GRANGA_DMG_GUN, + /* 4 */ GRANGA_DMG_LEFT_LEG, + /* 5 */ GRANGA_DMG_RIGHT_LEG, +} GrangaDmgParts; + +typedef enum GrangaAttackState { + /* 0 */ GRANGA_ATTACK_IDLE, + /* 1 */ GRANGA_ATTACK_MISSILES, + /* 2 */ GRANGA_ATTACK_LASERS, + /* 3 */ GRANGA_ATTACK_PLASMA, +} GrangaAttackState; + +// Carrier Boss: + +typedef enum CoCarrierParts { + /* 0 */ CARRIER, // Boss + /* 1 */ CARRIER_LEFT, // Left launch bay + /* 2 */ CARRIER_UPPER, // Right upper launch bay + /* 3 */ CARRIER_BOTTOM // Right lower launch bay +} CarrierParts; + +typedef enum CoCarrierStates { + /* 0 */ CARRIER_STATE_0, + /* 1 */ CARRIER_STATE_1, + /* 2 */ CARRIER_STATE_2, // positioning + /* 3 */ CARRIER_STATE_3, // Close launch bays + /* 4 */ CARRIER_STATE_4, // Open left launch bay + /* 5 */ CARRIER_STATE_5, // open right launch bays + /* 6 */ CARRIER_STATE_6, + /* 7 */ CARRIER_STATE_7, // go around beam attack + /* 8 */ CARRIER_STATE_8, // Dying + /* 9 */ CARRIER_STATE_9, // Dying cutscene + /* 10 */ CARRIER_EXPLODE // BOOM! +} CoCarrierStates; + +#endif diff --git a/include/fox_hud.h b/include/fox_hud.h new file mode 100644 index 00000000..effc38e3 --- /dev/null +++ b/include/fox_hud.h @@ -0,0 +1,58 @@ +#ifndef FOX_HUD_H +#define FOX_HUD_H + +typedef struct { + /* 0x00 */ u8* levelIdxTex; + /* 0x04 */ s32 width; + /* 0x08 */ s32 height; + /* 0x0C */ u8* titleCardTex; + /* 0x10 */ s32 titleCardWidth; + /* 0x14 */ s32 titleCardHeight; +} LevelTitleCard; + +typedef enum LevelClearScreenState { + /* 0 */ LEVEL_CLEAR_STATE_0, + /* 1 */ LEVEL_CLEAR_STATE_1, + /* 2 */ LEVEL_CLEAR_STATE_2, + /* 3 */ LEVEL_CLEAR_STATE_3, + /* 4 */ LEVEL_CLEAR_STATE_4, + /* 5 */ LEVEL_CLEAR_STATE_5, +} LevelClearScreenState; + +typedef enum BombCounterStates { + /* 0 */ BOMB_COUNTER_INIT, + /* 1 */ BOMB_COUNTER_STATE_1, + /* 2 */ BOMB_COUNTER_STATE_2, + /* 3 */ BOMB_COUNTER_STATE_3, + /* 4 */ BOMB_COUNTER_STATE_4, + /* 5 */ BOMB_COUNTER_STATE_5, + /* 6 */ BOMB_COUNTER_STATE_6, + /* 7 */ BOMB_COUNTER_STATE_7, +} BombCounterStates; + +typedef enum RadarMarkTypes { + /* 0 */ RADARMARK_FOX, + /* 1 */ RADARMARK_FALCO, + /* 2 */ RADARMARK_SLIPPY, + /* 3 */ RADARMARK_PEPPY, + /* 4 */ RADARMARK_WOLF, + /* 5 */ RADARMARK_LEON, + /* 6 */ RADARMARK_PIGMA, + /* 7 */ RADARMARK_ANDREW, + /* 8 */ RADARMARK_KATT, + /* 100 */ RADARMARK_MISSILE = 100, + /* 101 */ RADARMARK_KA_SAUCERER, + /* 102 */ RADARMARK_BOSS, + /* 103 */ RADARMARK_SUPPIES, + /* 200 */ RADARMARK_ITEM_1 = 200, + /* 201 */ RADARMARK_ITEM_2, + /* 999 */ RADARMARK_NOTHING = 999 +} RadarMarkTypes; + +typedef enum ActorMissileSeekMode { + /* 0 */ MISSILE_SEEK_TEAMMATES, + /* 1 */ MISSILE_SEEK_PLAYER, + /* 2 */ MISSILE_SEEK_EITHER, +} ActorMissileSeekMode; + +#endif diff --git a/include/fox_map.h b/include/fox_map.h index 996a9419..7f83adea 100644 --- a/include/fox_map.h +++ b/include/fox_map.h @@ -29,7 +29,7 @@ typedef struct { /* 0x18 */ s32 alpha; } PlanetPath; // size = 0x1C -typedef enum { +typedef enum PlanetAnim { /* 0 */ PL_ANIM_STATIC, /* 1 */ PL_ANIM_BILLBOARD, /* 2 */ PL_ANIM_ROTATE_Y, @@ -63,4 +63,34 @@ typedef struct { /* 0xC */ f32 xPos; } TitleCard; // size = 0x10 +typedef enum MapStates { + /* 0 */ MAP_PROLOGUE, + /* 1 */ MAP_LYLAT_CARD, + /* 2 */ MAP_ZOOM_PLANET, + /* 3 */ MAP_IDLE, + /* 4 */ MAP_LEVEL_START, + /* 5 */ MAP_ZOOM_PLANET_PATH, // After level ends + /* 6 */ MAP_PATH_CHANGE, // Path selection by the player + /* 7 */ MAP_GAME_OVER +} MapStates; + +typedef enum PlanetStatus { + /* 0 */ PLANET_UNCLEARED, + /* 1 */ PLANET_CLEARED, + /* 2 */ PLANET_MEDAL +} PlanetStatus; + +typedef enum PlanetExplosions { + /* 0 */ EXPLOSIONS_CORNERIA, + /* 1 */ EXPLOSIONS_KATINA, + /* 2 */ EXPLOSIONS_SECTOR_Y, + /* 3 */ EXPLOSIONS_MAX +} PlanetExplosions; + +typedef enum PlanetSaveSlotTypes { + /* 0 */ SAVETYPE_PLAYED, + /* 1 */ SAVETYPE_MEDAL, + /* 2 */ SAVETYPE_CLEAR +} PlanetSaveSlotTypes; + #endif diff --git a/include/fox_option.h b/include/fox_option.h index ad2a66d3..e6b65f00 100644 --- a/include/fox_option.h +++ b/include/fox_option.h @@ -3,225 +3,221 @@ #include "global.h" -//! TODO: RENAME. Member names inferred by Option_DrawCardLabel. typedef struct { - /* 0x00 */ s32 unk_00; // type - /* 0x04 */ s32 unk_04; - /* 0x08 */ void* unk_08; // texture - /* 0x0C */ u16* unk_0C; // palette - /* 0x10 */ s32 unk_10; // width - /* 0x14 */ s32 unk_14; // height - /* 0x18 */ f32 unk_18; // xPos - /* 0x1C */ f32 unk_1C; // yPos - /* 0x20 */ f32 unk_20; // xScale - /* 0x24 */ f32 unk_24; // yScale - /* 0x28 */ s32 unk_28; // red - /* 0x2C */ s32 unk_2C; // green - /* 0x30 */ s32 unk_30; // blue - /* 0x34 */ s32 unk_34; // alpha -} OptionTexture; // size = 0x38 + /* 0x00 */ s32 type; + /* 0x04 */ s32 unk_04; // Always set to 0 and never used + /* 0x08 */ void* texture; + /* 0x0C */ u16* palette; + /* 0x10 */ s32 width; + /* 0x14 */ s32 height; + /* 0x18 */ f32 xPos; + /* 0x1C */ f32 yPos; + /* 0x20 */ f32 xScale; + /* 0x24 */ f32 yScale; + /* 0x28 */ s32 red; + /* 0x2C */ s32 green; + /* 0x30 */ s32 blue; + /* 0x34 */ s32 alpha; +} OptionCardTexture; // size = 0x38 -//! TODO: RENAME. Member names inferred by Option_DrawMenuCard typedef struct { - /* 0x00 */ f32 unk_00; // x - /* 0x04 */ f32 unk_04; // y - /* 0x08 */ f32 unk_08; // z - /* 0x0C */ f32 unk_0C; // xScale - /* 0x10 */ f32 unk_10; // yScale -} MenuContext_38; // size = 0x14 + /* 0x00 */ f32 x; + /* 0x04 */ f32 y; + /* 0x08 */ f32 z; + /* 0x0C */ f32 xScale; + /* 0x10 */ f32 yScale; +} OptionCardFrame; // size = 0x14 -//! TODO: RENAME. Member names inferred by Option_DrawMenuArwing typedef struct { - /* 0x0 */ f32 unk_0; // x - /* 0x4 */ f32 unk_4; // y - /* 0x8 */ f32 unk_8; // range -} ArwingPosition; // size = 0xC + /* 0x0 */ f32 x; + /* 0x4 */ f32 y; + /* 0x8 */ f32 range; +} ArwingCursorPos; // size = 0xC typedef struct { - /* 0x00 */ OptionTexture unk_00; - /* 0x38 */ MenuContext_38 unk_38; - /* 0x4C */ ArwingPosition unk_4C; - /* 0x58 */ s32 unk_58; - /* 0x5C */ s32 unk_5C; + /* 0x00 */ OptionCardTexture tex; + /* 0x38 */ OptionCardFrame frame; + /* 0x4C */ ArwingCursorPos pos; + /* 0x58 */ bool drawTex; + /* 0x5C */ bool drawFrame; } OptionEntry; // size = 0x60 typedef struct { - /* 0x0 */ PlanetId unk_0; - /* 0x4 */ PlanetId unk_4; - /* 0x8 */ s32 unk_8; -} UnkStruct_D_menu_801AED4C; // size = 0xC + /* 0x0 */ PlanetId start; + /* 0x4 */ PlanetId end; + /* 0x8 */ s32 color; +} RouteColoredLine; // size = 0xC typedef struct { s32 unk_0; s32 unk_4; -} UnkStruct_D_menu_801B9250; +} StickInput; typedef enum OptionId { - OPTION_MAIN = 1000, - OPTION_VERSUS_STAGE = 2000, - OPTION_MAP = 0, - OPTION_TRAINING = 1, - OPTION_VERSUS = 2, - OPTION_RANKING = 3, - OPTION_SOUND = 4, - OPTION_DATA = 5, - OPTION_EXPERT_SOUND = 6, - OPTION_POINT_MATCH = 10, - OPTION_BR_MATCH = 20, - OPTION_TT_MATCH = 30, - OPTION_NAME = 200, - OPTION_SCORE = 300, - OPTION_INVOICE = 400, - OPTION_MAX, + /* 1000 */ OPTION_MAIN_MENU = 1000, + /* 2000 */ OPTION_VERSUS_STAGE = 2000, + /* 0 */ OPTION_MAP = 0, + /* 1 */ OPTION_TRAINING = 1, + /* 2 */ OPTION_VERSUS = 2, + /* 3 */ OPTION_RANKING = 3, + /* 4 */ OPTION_SOUND = 4, + /* 5 */ OPTION_DATA = 5, + /* 6 */ OPTION_EXPERT_SOUND = 6, + /* 10 */ OPTION_POINT_MATCH = 10, // Point Match + /* 20 */ OPTION_BR_MATCH = 20, // Battle Royal Match + /* 30 */ OPTION_TT_MATCH = 30, // Time Trial Match + /* 200 */ OPTION_NAME_ENTRY = 200, + /* 300 */ OPTION_SCORE = 300, + /* 400 */ OPTION_INVOICE = 400, + /* 401 */ OPTION_MAX, } OptionId; -#define OPTION_COUNT ARRAY_COUNT(sOptionCardList) +extern u8* gBSSMapPlanetTextures[9]; +extern u8* gAssetMapPlanetTextures[9]; -extern void* D_menu_801B68B0[]; -extern u8* D_menu_801B68D4[]; - -extern s32 D_menu_801B8220[]; // total hits ranking? see Option_80197DE4 -extern s32 D_menu_801B827C; -extern s32 D_menu_801B8280; -extern s32 D_menu_801B8284; -extern s32 D_menu_801B8288; +extern s32 gTotalHitsRanking[]; +extern bool gGoToTitle; // engine +extern bool sLevelStartState; +extern s32 sWipeHeight; +extern s32 sTitleRankMaxRecords; // Planet textures -extern u8 D_menu_801B9410[96 * 96]; -extern u8 D_menu_801BB810[96 * 96]; -extern u8 D_menu_801BDC10[96 * 96]; -extern u8 D_menu_801C0010[96 * 96]; -extern u8 D_menu_801C2410[96 * 96]; -extern u8 D_menu_801C4810[96 * 96]; -extern u8 D_menu_801C6C10[96 * 96]; -extern u8 D_menu_801C9010[96 * 96]; -extern u8 D_menu_801CB410[96 * 96]; - -void Title_801877F0(void); - s32 Title_80187ABC(void); -void Title_80187B00(void); -void Title_80187E28(void); -void Title_801888E8(void); -void Title_8018994C(void); -void Title_8018A644(void); -void Title_8018ACEC(void); -void Title_8018B5C4(void); -void Title_8018C644(void); -void Title_80187CA8(void); -s32 Title_80188010(void); -void Title_80189208(void); -void Title_8018A2F8(void); -void Title_8018A990(void); -void Title_8018B038(void); -void Title_8018C114(void); -void Title_8018CB90(void); -void Title_8018F680(void); -void Title_8018F77C(void); -void Title_8018F85C(void); -void Title_8018F8E4(void); -void Title_8018FC14(void); -void Title_8018FD08(void); -void Title_8018FF74(void); - -void Option_UpdateEntry(void); -void Option_MapUpdate(void); -void Option_MainMenuUpdate(void); -void Option_TrainingUpdate(void); -void Option_MainMenuDraw(void); -void Option_VersusUpdate(void); -void Option_VersusDraw(void); -void Option_SoundInit(void); -void Option_SoundUpdate(void); -void Option_80194AEC(void); -void Option_80194BD0(void); -void Option_SoundDraw(void); -void Option_801952B4(void); -void Option_ExpertSoundInit(void); -void Option_ExpertSoundUpdate(void); -void Option_ExpertSoundDraw(void); -void Option_DataInit(void); -void Option_DataUpdate(void); -void Option_8019669C(void); -void Option_DataDraw(void); -void Option_RankingInit(void); -void Option_RankingUpdate(void); -void Option_RankingDraw(void); -void Option_80196FC4(void); -void Option_80197074(void); -void Option_8019715C(void); -void Option_RankingMenuDraw(void); -void Option_8019752C(void); +extern u8 gMapVenomCloudTex[96 * 96]; +extern u8 gMapCorneriaTex[96 * 96]; +extern u8 gMapFortunaTex[96 * 96]; +extern u8 gMapAquasTex[96 * 96]; +extern u8 gMapVenomTex[96 * 96]; +extern u8 gMapTitaniaTex[96 * 96]; +extern u8 gMapKatinaTex[96 * 96]; +extern u8 gMapMacbethTex[96 * 96]; +extern u8 gMapZonessTex[96 * 96]; + +void Title_UpdateEntry(void); +s32 Title_CheckControllers(void); +void Title_Ranking_Update(void); +void Title_RankingData_Draw(void); +void Title_Screen_Update(void); +void Title_CsGreatFoxTraveling_Update(void); +void Title_CsTeamRunning_Update(void); +void Title_CsGreatFoxCloseUp_Update(void); +void Title_CsTakeOff_Update(void); +void Title_CsTakeOffSpace_Update(void); +void Title_Ranking_Draw(void); +s32 Title_GetRankTotalHits(void); +void Title_Screen_Draw(void); +void Title_CsGreatFoxTraveling_Draw(void); +void Title_CsTeamRunning_Draw(void); +void Title_CsGreatFoxCloseUp_Draw(void); +void Title_CsTakeOff_Draw(void); +void Title_CsTakeOffSpace_Draw(void); +void Title_StarfoxLogo_Draw(void); +void Title_64Logo_Draw(void); +void Title_CopyrightSymbol_Draw(void); +void Title_PressStart_Draw(void); +void Title_Copyright_Draw(void); +void Title_TeamName_Draw(void); +void Title_SunGlare_Draw(void); + +void Option_Entry_Update(void); +void Option_Map_Update(void); +void Option_MainMenu_Update(void); +void Option_Training_Update(void); +void Option_MainMenu_Draw(void); +void Option_Versus_Update(void); +void Option_Versus_Draw(void); +void Option_Sound_Setup(void); +void Option_Sound_Update(void); +void Option_Sound_SetSoundMode(void); +void Option_Sound_SetVolumeLevels(void); +void Option_Sound_Draw(void); +void Option_Sound_Speaker_Draw(void); +void Option_ExpertSound_Setup(void); +void Option_ExpertSound_Update(void); +void Option_ExpertSound_Draw(void); +void Option_Data_Setup(void); +void Option_Data_Update(void); +void Option_Data_Select(void); +void Option_Data_Draw(void); +void Option_Ranking_Setup(void); +void Option_Ranking_Update(void); +void Option_Ranking_Draw(void); +void Option_Ranking_Select(void); +void Option_Ranking_Cursor(void); +void Option_Ranking2_Cursor(void); +void Option_RankingMenu_Draw(void); +void Option_RankingMenu2_Draw(void); void Option_80197914(void); -void Option_80197A3C(s32, s32, s32); -void Option_80197D30(s32, s32, s32); -void Option_80197DE4(s32, s32, s32); -void Option_80197F74(s32, s32, s32); -void Option_80198164(s32, f32, f32); -void Option_801982B0(s32, s32, f32, f32, s32); -void Option_801984D0(s32, s32, f32, f32); -void Option_80198608(s32, s32, f32, f32); -void Option_8019882C(s32, s32, f32, f32); -void Option_8019896C(s32, f32, s32); -void Option_80199198(f32 arg0, f32 arg1, f32 arg2); -s32 Option_80199284(PlanetId start, PlanetId end); -void Option_VersusMenuInit(void); -void Option_VersusMenuUpdate(void); -void Option_8019949C(void); -void Option_VersusMenuDraw(void); -void Option_80199820(s32); -void Option_80199EA8(void); -void Option_VersusStageInit(void); +void Option_OrdinalNumbers_Draw(s32, s32, s32); +void Option_RankingName_Draw(s32, s32, s32); +void Option_RankingTotalHits_Draw(s32, s32, s32); +void Option_RankingTeamAlive_Draw(s32, s32, s32); +void Option_RankingRoute_Draw(s32, f32, f32); +void Option_RankingRouteFrame_Draw(s32, s32, f32, f32, s32); +void Option_RankingHitCount_Draw(s32, s32, f32, f32); +void Option_RankingTeamPresence_Draw(s32, s32, f32, f32); +void Option_RankingPlanetName_Draw(s32, s32, f32, f32); +void Option_RankingPlanetRoute_Draw(s32, f32, s32); +void Option_RankingRouteMedal_Draw(f32 xPos, f32 yPos, f32 zPos); +s32 Option_GetRouteLineColor(PlanetId start, PlanetId end); +void Option_VersusMenu_Setup(void); +void Option_VersusMenu_Update(void); +void Option_VersusMenu_Cursor(void); +void Option_VersusMenu_Draw(void); +void Option_VS_HandicapSet_Draw(s32); +void Option_VS_N64Console_Draw(void); +void Option_VersusStage_Setup(void); void Option_8019A080(void); -void Option_VersusStageUpdate(void); -void Option_8019A124(void); -void Option_8019A1A8(void); -void Option_8019A214(void); -void Option_8019A298(void); -void Option_8019A2E0(void); -void Option_8019A4DC(void); -void Option_8019A6DC(void); -void Option_8019A954(void); -void Option_VersusStageDraw(void); -void Option_8019AB30(void); -void Option_8019AD84(void); -void Option_8019AFFC(void); -void Option_8019B1F8(void); -void Option_8019B3DC(void); -void Option_8019B5AC(void); -void Option_8019B6D8(f32 xPos, f32 yPos, f32 offset, s32 r, s32 g, s32 b); -void Option_8019B7D4(void); -void Option_8019B8A0(s32 arg0); -void Option_8019B8C8(void); +void Option_VersusStage_Update(void); +void Option_Vs_PointMatch_Update(void); +void Option_Vs_BattleRoyal_Update(void); +void Option_Vs_TimeTrial_Update(void); +void Option_Vs_StartMatch(void); +void Option_Vs_Point_Selection(void); +void Option_VsTimeSelection(void); +void Option_VsStageSelection(void); +void Option_VsConfirmSelection(void); +void Option_VersusStage_Draw(void); +void Option_VsPointMatch_Draw(void); +void Option_VsTimeTrial_Draw(void); +void Option_VsStageSelect_Draw(void); +void Option_VsTimeTrialStageSelect_Draw(void); +void Option_VsStageSelect2_Draw(void); +void Option_VsOKConfirm_Draw(void); +void Option_VsSelectionArrows_Draw(f32 xPos, f32 yPos, f32 offset, s32 r, s32 g, s32 b); +void Option_AcceptCancel_Draw(void); +void Option_VsBackToSubMenu(OptionId menuEntryState); +void Option_VsMenuCard_Draw(void); void Option_DrawMenuLabel(void); -void Option_DrawMenuCard(MenuContext_38 arg0); -void Option_DrawMenuArwing(ArwingPosition arg0); -void Option_8019BC44(f32, f32, f32, f32, f32, f32); -void Option_8019BDF0(void); -void Option_8019BE7C(f32, f32, f32, f32 *, f32 *, f32 *); -void Option_8019BF34(void); -void Option_8019C04C(void); -void Option_DrawCardLabel(OptionTexture arg0); -bool Option_8019C418(s32* arg0, s32 arg1, bool arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, UnkStruct_D_menu_801B9250* arg8); -s32 Option_8019C5A0(s32*); -bool Option_8019C66C(f32* arg0, f32 arg1, f32 arg2, UnkStruct_D_menu_801B9250* arg3); -void Option_8019C824(f32* ); -s32 Option_8019C8C4(void); -void Option_8019CAE0(void); -void Option_8019CBC0(void); -void Option_8019CD54(void); -void Option_8019D118(void); -void Option_8019D624(void); -void Option_8019DB20(s32, f32, f32, f32, f32, f32, f32, f32); -s32 Option_8019DCE8(s32 arg0); -void Option_8019DD44(void); -void Option_8019DE74(void); -void Option_8019DF64(void); -void Option_InvoiceUpdate(void); +void Option_DrawMenuCard(OptionCardFrame arg0); +void Option_DrawMenuArwing(ArwingCursorPos arwing); +void Option_DrawArwing(f32, f32, f32, f32, f32, f32); +void Option_Menu_Push(void); +void Option_SetMenuLightPos(f32, f32, f32, f32*, f32*, f32*); +void Option_CardLightning_Update(void); +void Option_CardLightning_Draw(void); +void Option_DrawCardLabel(OptionCardTexture tex); +bool Option_Input_MoveCursor_Y(s32* arg0, s32 arg1, bool arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 controllerNum, + StickInput* stickY); +s32 Option_Input_DataSelect_X(s32*); +bool Option_Input_Sound_X(f32* arg0, f32 arg1, f32 arg2, StickInput* arg3); +void Option_Color_FlashRed(f32*); +s32 Option_RankInPos_Check(void); +void Option_NameEntry_Update(void); +void Option_NameEntry_Setup(void); +void Option_NameEntry_Select(void); +void Option_NameEntry_Draw(void); +void Option_Ranking_SaveData(void); +void Option_3DFont_Draw(s32, f32, f32, f32, f32, f32, f32, f32); +s32 Option_GetCharIndex(s32 character); +void Option_Score_Update(void); +void Option_Score_Update2(void); +void Option_Score_Draw(void); +void Option_Invoice_Update(void); void Option_InvoiceDraw(void); -void Map_8019E8D0(void); -void Map_801A07E8(u8*, u8*, f32*); -void Map_801AD7EC(s32, s32, s32); -void Map_801A9FD4(s32); +void Map_Main(void); +void Map_Texture_Sphere(u8*, u8*, f32*); +void Map_RemainingLives_Draw(s32, s32, s32); +void Map_801A9FD4(bool); #endif diff --git a/include/functions.h b/include/functions.h index 8e2b7dba..887393be 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2,126 +2,125 @@ #define FUNCTIONS_H #include "sys.h" -#include "structs.h" #include "sf64object.h" #include "sf64player.h" #include "sf64mesg.h" +#include "fox_hud.h" // fox_360 -void func_360_8002ED60(Player*); -void func_360_8002E3E0(Actor*); -void func_360_8002E548(void); -void func_360_8002E5E0(Boss*); -void func_360_8002E604(Boss*); -void func_360_8002E628(Boss*); -void func_360_8002E64C(Boss*); -void func_360_8002E670(Actor*); -void func_360_8002E694(Actor*); -void func_360_8002E6B8(Actor*); -void func_360_8002E6DC(Actor*); -bool func_360_8002E4F8(u16*, RadioCharacterId); -void func_360_8002E700(Player*); -void func_360_8002EE34(void); -void func_360_8002EE64(Actor* actor); -void func_360_8002F180(void); -void func_360_8002F5F4(u16* msg, RadioCharacterId character); -void func_360_8002F69C(Actor*); -void func_360_8002FC00(Actor*); -void func_360_8003088C(Actor*); +void AllRange_FortunaIntro(Player*); +void AllRange_GetStarWolfHits(Actor*); +void AllRange_DrawCountdown(void); +void BoBase_Update(Boss*); +void BoBase_Draw(Boss*); +void BoBaseShield_Update(Boss*); +void BoBaseShield_Draw(Boss*); +void BoShieldReactor_Update(Actor*); +void BoShieldReactor_Draw(Actor*); +void BoLaserCannon_Update(Actor*); +void BoLaserCannon_Draw(Actor*); +bool AllRange_PlayMessage(u16*, RadioCharacterId); +void AllRange_GreatFoxRepair(Player*); +void AllRange_ClearRadio(void); +void ActorAllRange_SetShadowData(Actor* this); +void ActorAllRange_SpawnTeam(void); +void ActorAllRange_PlayMessage(u16* msg, RadioCharacterId character); +void ActorAllRange_UpdateStarWolfEvents(Actor*); +void ActorAllRange_UpdateEnemyEvents(Actor*); +void ActorAllRange_ApplyDamage(Actor*); bool func_360_80031900(Actor*); void ActorAllRange_Update(Actor* this); -void ActorAllRange_Draw(Actor* actor); +void ActorAllRange_Draw(Actor* this); //fox_beam -void func_beam_80038140(PlayerShot* shot); -void func_beam_80036318(PlayerShot* shot); -void func_beam_80035DEC(f32 xPos, f32 yPos, f32 zPos); +void PlayerShot_CollisionCheck(PlayerShot* shot); +void PlayerShot_Impact(PlayerShot* shot); +void PlayerShot_SpawnEffect351(f32 xPos, f32 yPos, f32 zPos); void PlayerShot_Initialize(PlayerShot*); -void func_beam_800365E4(f32, f32, f32, f32, f32, f32, f32, f32, f32, s32, s32); -void func_beam_8003D9B8(void); -void func_beam_8003DA0C(void); +void PlayerShot_SpawnEffect344(f32, f32, f32, f32, f32, f32, f32, f32, f32, s32, s32); +void PlayerShot_UpdateAll(void); +void PlayerShot_DrawAll(void); // fox_bg -void func_bg_8003DAF0(void); -void func_bg_8003DE68(s32, s32); -void func_bg_8003E1E8(void); -void func_bg_80040450(void); -void func_bg_80040954(void); -void func_bg_80040CDC(void); -void func_bg_80040CE4(void); -void func_bg_80042D38(void); +void Background_DrawStarfield(void); +void Background_DrawPartialStarfield(s32, s32); +void Background_DrawBackdrop(void); +void Background_DrawSun(void); +void Background_DrawLensFlare(void); +void Background_dummy_80040CDC(void); +void Background_DrawGround(void); // fox_boss -void func_boss_80042EC0(Boss* boss); +void Boss_AwardBonus(Boss* this); void Boss299_Init(Boss* boss); void Boss299_Update(Boss* boss); void Boss299_Draw(Boss* boss); void Boss300_Init(Boss* boss); void Boss300_Update(Boss* boss); void Boss300_Draw(Boss* boss); -void func_boss_800430DC(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s32, s32); -void func_boss_8004319C(Player* player, f32 arg1, f32 arg2, f32 arg3); +void Boss_SpawnDebris(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s32, s32); +void Boss_CompleteLevel(Player* player, f32 xPos, f32 yPos, f32 zPos); // fox_tank -void func_tank_80043468(Player* player); +void Player_UpdateTankCamOnRails(Player* player); void func_tank_800444BC(Player* player); void func_tank_80044868(Player*); void func_tank_80045130(Player*); void func_tank_80045678(Player*); void func_tank_80045E7C(Player*); -void func_tank_80047504(Player* player); +void Tank_UpdateOnRails(Player* player); void func_tank_80046358(Player*); // fox_demo -void func_demo_8004D440(Player*); -void func_demo_80048AC0(s32 teamId); -void func_demo_80049C0C(Player*); -void func_demo_8004A52C(Player*); +void Cutscene_KillPlayer(Player*); +void func_demo_80048AC0(TeamId teamId); +void Cutscene_EnterWarpZone(Player*); +void Cutscene_LevelStart(Player*); void func_demo_8004AA84(void); -void func_demo_8004AAF4(Player*); -void func_demo_8004C930(Player*); -void func_demo_8004CCC0(Player*); -void func_demo_8004D440(Player* player); -void func_demo_8004E3D8(Player*); -void func_demo_8004F8AC(Actor*); -void func_demo_8004FEC0(Actor*); -void func_demo_800515C4(void); +void Cutscene_AllRangeMode(Player*); +void Cutscene_LevelComplete(Player*); +void Cutscene_UTurn(Player*); +void Cutscene_KillPlayer(Player* player); +void Cutscene_PlayerDown(Player*); +void ActorCutscene_Update(Actor*); +void ActorCutscene_Draw(Actor*); +void Cutscene_DrawGreatFox(void); // fox_display -void func_display_80053658(WingInfo*); -void func_display_8005465C(s32); -void func_display_80057814(Player*); -void func_display_80057D00(void); +void Display_ArwingWings(ArwingInfo*); +void Display_DrawEngineGlow(EngineGlowColor); +void Display_SetupPlayerSfxPos(Player*); +void Display_Update(void); // fox_edata -void func_edata_800594F0(Object_80*); -void func_edata_800595D0(Object_80*); -void func_edisplay_800596C0(void); -void func_edata_800596B0(Actor*); +void Ve1Wall1_Draw(Scenery*); +void Ve1Wall2_Draw(Scenery*); +void Object_ApplyWaterDistortion(void); +void AndJamesTrigger_Draw(Actor*); // fox_edisplay void Graphics_SetScaleMtx(f32); -void func_edisplay_80059850(Object_4C*); -void Actor201_Draw(Actor*); -void Actor202_Draw(Actor*); -void Obj39_Draw(Object_80*); -void func_edisplay_80059B20(Object_80*); -void Obj42_Draw(Object_80*); -void Actor196_Draw(Actor*); -void func_edisplay_80059C34(Object_4C*); -void func_edisplay_80059C40(Object_4C*); -void func_edisplay_80059F68(Object_80*); -void func_edisplay_80059FDC(Object_80*); -void Actor189_Draw(Actor*); -void func_edisplay_8005ADAC(Actor*); -void func_edisplay_8005B1E8(Actor*, s32); -void func_edisplay_8005B388(Actor*); -void func_edisplay_8005B6A4(Actor*); -void func_edisplay_8005B71C(Actor*); -void func_edisplay_8005B7CC(Actor*); -void func_edisplay_8005B848(Actor*); -void func_edisplay_8005B9A4(Actor*); -void func_edisplay_8005BA30(Actor*); +void Sprite168_Draw(Sprite*); +void MeteoBall_Draw(Actor*); +void MeHopBot_Draw(Actor*); +void MeteoTunnel_Draw(Scenery*); +void Scenery_DrawTitaniaBones(Scenery*); +void CoIBeam_Draw(Scenery*); +void CoMoleMissile_Draw(CoMoleMissile*); +void Sprite167_Draw(Sprite*); +void FogShadow_Draw(Sprite*); +void CoBuilding9_Draw(Scenery*); +void CoBuilding10_Draw(Scenery*); +void ActorDebris_Draw(Actor*); +void Actor_DrawEngineAndContrails(Actor*); +void Actor_DrawEngineGlow(Actor*, EngineGlowColor); +void ActorTeamArwing_Draw(Actor*); +void MeMolarRock_Draw(Actor*); +void MeMeteor2_Draw(MeMeteor2*); +void MeLaserCannon1_Draw(MeLaserCannon1*); +void ActorMissileSeek_Draw(Actor*); +void CoSkibot_Draw(CoSkibot*); +void CoRadar_Draw(CoRadar*); void ItemCheckpoint_Draw(Item*); void ItemSilverRing_Draw(Item*); void ItemSilverStar_Draw(Item*); @@ -130,10 +129,10 @@ void ItemBomb_Draw(Item*); void ItemLasers_Draw(Item*); void ItemMeteoWarp_Draw(Item*); void Object_ClampSfxSource(f32*); -void func_edisplay_8005F0E8(f32*, Vec3f*); -void func_edisplay_8005F1EC(f32*); -void func_edisplay_8005F290(f32*, Vec3f*); -void func_edisplay_8005F670(Vec3f*); +void Object_SetSfxSourceToPos(f32*, Vec3f*); +void Object_UpdateSfxSource(f32*); +void Object_SetSfxSourceToView(f32*, Vec3f*); +void Display_SetSecondLight(Vec3f*); bool func_edisplay_8005F9DC(Vec3f*); // fox_enmy @@ -141,12 +140,12 @@ void Object_Draw(s32 ); void Effect_Draw(u8 ); void TexturedLine_Draw(void); void TexturedLine_DrawPath(s32); -void func_enmy_80060F30(f32* , u32 , s32 ); +void Object_PlayerSfx(f32* , u32 , s32 ); void Object_Kill(Object*, f32*); bool func_enmy_80060FE4(Vec3f*, f32); void Object_SetInfo(ObjectInfo* info, u32 objId); -void Object_80_Initialize(Object_80*); -void Object_4C_Initialize(Object_4C*); +void Scenery_Initialize(Scenery*); +void Sprite_Initialize(Sprite*); void Actor_Initialize(Actor*); void Boss_Initialize(Boss*); void Item_Initialize(Item*); @@ -154,31 +153,31 @@ void Effect_Initialize(Effect*); void func_enmy_80061B68(void); void func_enmy_80061CD0(void); void func_enmy_80061E48(Actor* , f32 , f32 , f32 ); -void func_enmy_80061F0C(Actor* , ObjectInit* , s32 ); +void ActorEvent_Load(Actor* , ObjectInit* , s32 ); void Object_Load(ObjectInit* , f32 , f32 , f32 , f32 ); void func_enmy_80062568(void); void func_enmy_80062B60(f32 xPos, f32 zPos, s32 state, f32 scale); void func_enmy_80062C38(f32, f32); -bool func_enmy_80062DBC(Vec3f* pos, f32* hitboxData, Object* obj, f32 xRot, f32 yRot, f32 zRot); -bool func_enmy_800631A8(Vec3f*, f32*, Vec3f*); -bool func_enmy_8006326C(Vec3f* , Vec3f* , ObjectId , Object* ); -s32 func_enmy_8006351C(s32 , Vec3f* , Vec3f* , s32 ); -void func_enmy_800652CC(Object_80*); +bool Object_CheckHitboxCollision(Vec3f* pos, f32* hitboxData, Object* obj, f32 xRot, f32 yRot, f32 zRot); +bool Object_CheckSingleHitbox(Vec3f*, f32*, Vec3f*); +bool Object_CheckPolyCollision(Vec3f* , Vec3f* , ObjectId , Object* ); +s32 Object_CheckCollision(s32 index, Vec3f* pos, Vec3f* vel, s32 mode); +void Scenery_UpdateTitaniaBones(Scenery*); void func_enmy_800654E4(Object*); -void func_enmy_800656D4(Actor*); +void ActorMissileSeek_Update(Actor*); void func_enmy_800660F0(Actor*); -void func_enmy_80066254(Actor*); -void func_enmy_8006654C(Actor*); +void Actor_Despawn(Actor*); +void CoSkibot_Update(CoSkibot*); void func_enmy_8006684C(Actor*); -void func_enmy_800669A0(Actor*); -void func_enmy_80066A80(Actor*); -void func_enmy_80066C00(Object_80*); -void func_enmy_80066D5C(Object_80*); -void func_enmy_80066E8C(Object_4C*); -void func_enmy_80066EA8(Object_80*); -void func_enmy_80066EF0(Item*); -void func_enmy_800671D0(Item*); -void func_enmy_800674B4(f32, f32, f32, f32, f32, f32, f32, f32); +void CoRadar_Update(CoRadar*); +void MeMolarRock_Update(Actor*); +void func_enmy_80066C00(Scenery*); +void CoBuilding9_Update(Scenery*); +void Sprite167_Update(Sprite*); +void SceneryRotateTowardsCamera(Scenery*); +void Item_CheckBounds(Item*); +void Item_SpinPickup(Item*); +void Actor_SpawnDebris70(f32, f32, f32, f32, f32, f32, f32, f32); void ActorSupplies_Update(Actor*); void ActorSupplies_Draw(Actor*); void func_enmy_80067A40(void); @@ -191,324 +190,318 @@ void ItemGoldRing_Update(Item*); void ItemWingRepair_Update(Item*); void ItemMeteoWarp_Update(Item*); void ItemCheckpoint_Update(Item*); -void func_enmy_80068C48(Item*); -void func_enmy_80068C88(Item*); -void func_enmy_80068FE0(Object_4C*); +void ItemRingCheck_Update(Item*); +void ItemPathChange_Update(Item*); +void Sprite_UpdateDoodad(Sprite*); void Object_Dying(s32, ObjectId); -void func_enmy_80069924(Effect*); -void func_enmy_800693E8(Actor*); -void func_enmy_80069658(Boss*); -void func_enmy_800696F8(Object_80*); -void func_enmy_80069858(Object_4C*); -void func_enmy_80069A10(Item*); +void Effect_Move(Effect*); +void Actor_Move(Actor*); +void Boss_Move(Boss*); +void Scenery_Move(Scenery*); +void Sprite_Move(Sprite*); +void Item_Move(Item*); void Actor_Update(Actor*); void Boss_Update(Boss*); -void Object_80_Update(Object_80*); -void Object_4C_Update(Object_4C*); +void Scenery_Update(Scenery*); +void Sprite_Update(Sprite*); void Item_Update(Item*); void Effect_Update(Effect*); void TexturedLine_Update(TexturedLine*); void TexturedLine_UpdateAll(void); -void Object_UpdateAll(void); +void Object_Update(void); //fox_enmy2 void Actor237_Update(Actor*); void Actor237_Draw(Actor*); -void Obj54_Update(Object_80*); -void Actor201_Update(Actor*); -void Actor202_Update(Actor*); -void Actor194_Update(Actor*); -void Actor194_Init(Actor*); -void Actor194_Draw(Actor*); -void Obj42_Update(Object_80*); -void Actor196_Update(Actor*); -void Actor189_Update(Actor*); -void Obj39_Update(Object_80*); -void func_enmy2_8006ECBC(PlayerShotId, PlayerShot*, s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); -void func_enmy2_8006EEFC(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); -void func_enmy2_8006EFA0(s32 unk0E4, f32 xPos, f32 yPos, f32 zPos, f32 arg4, f32 arg5, f32 arg6, f32 xRot, f32 yRot, +void CoWaterfall_Update(Scenery*); +void MeteoBall_Update(Actor*); +void MeHopBot_Update(Actor*); +void MeMora_Update(Actor*); +void MeMora_Dying(Actor*); +void MeMora_Draw(Actor*); +void CoIBeam_Update(Scenery*); +void CoMoleMissile_Update(CoMoleMissile*); +void ActorDebris_Update(Actor*); +void MeteoTunnel_Update(Scenery*); +void Actor_SetupPlayerShot(PlayerShotId, PlayerShot*, s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); +void Actor_SpawnPlayerLaser(s32 actorId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 xRot, f32 yRot, + f32 zRot); +void Actor_SpawnGreatFoxLaser(s32 actorId, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 xRot, f32 yRot, f32 zRot); -void ActorEvent_8006F0D8(f32 xPos, f32 yPos, f32 zPos, f32 arg3); +void ActorEvent_SpawnEffect347(f32 xPos, f32 yPos, f32 zPos, f32 scale1); void ActorEvent_8006F254(Actor*); void ActorEvent_Update(Actor*); -s32 Obj111_Draw(Object_80*); +s32 SyShipDebris_Draw(Scenery*); void ActorEvent_Draw(Actor*); void func_enmy2_800763A4(Actor*); void ActorEvent_Dying(Actor*); -void Actor234_Update(Actor*); -void Actor234_Draw(Actor*); +void TiGreatFox_Update(Actor*); +void TiGreatFox_Draw(Actor*); // fox_effect s32 func_effect_80081B24(f32 xPos, f32 yPos, f32 zPos, f32 scale2); s32 BonusText_Display(f32 xPos, f32 yPos, f32 zPos, s32 hits); void BonusText_Update(void); void BonusText_DrawAll(void); -Effect* func_effect_8007783C(ObjectId objId); -void func_effect_8007797C(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2); -void func_effect_80077A00(Effect* ); -void func_effect_80077A7C(Effect* ); -void func_effect_80077B78(Effect* ); -void func_effect_80077B84(Effect* ); -void func_effect_80078038(Effect* ); -void func_effect_800780F8(Effect* ); -void func_effect_800783C0(Effect* ); -void func_effect_80078438(Effect* ); -void func_effect_800784B4(Effect* ); -void func_effect_80078550(Effect* ); -void func_effect_80078604(Effect* ); -void func_effect_8007868C(Effect* ); -void func_effect_8007879C(Effect* ); -void func_effect_800788B0(Effect* ); -void func_effect_80078A64(Effect* ); -void func_effect_80078AEC(Effect* ); -void func_effect_80078B8C(Effect*); -void func_effect_80078BE0(Effect* ); -void func_effect_80078C84(Effect* ); -void func_effect_80078CE8(Effect* ); -void func_effect_80078E50(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_80078EBC(Effect* ); -void func_effect_80078F78(Effect* ); -void func_effect_800794CC(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007953C(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_800795AC(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +Effect* Effect_Load(ObjectId objId); +void Effect_FireSmoke_Spawn2(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2); +void Effect_Effect372_Draw(Effect* ); +void Effect_Effect382_Draw(Effect* ); +void Effect_Effect388_Draw(Effect* ); +void Effect_Effect384_Draw(Effect* ); +void Effect_Effect385_Draw(Effect* ); +void Effect_Effect389_Draw(Effect* ); +void Effect_Effect347_Draw(Effect* ); +void Effect_Effect351_Draw(Effect* ); +void Effect_Clouds_Draw(Effect* ); +void Effect_Effect366_Draw(Effect* ); +void Effect_Effect367_Draw(Effect* ); +void Effect_Effect344_Draw(Effect* ); +void Effect_Effect345_Draw(Effect* ); +void Effect_Effect346_Draw(Effect* ); +void Effect_Effect348_Draw(Effect* ); +void Effect_Effect355_Draw(Effect* ); +void Effect_Effect353_Draw(Effect*); +void Effect_Effect377_Draw(Effect* ); +void Effect_Effect356_Draw(Effect* ); +void Effect_Effect376_Draw(Effect* ); +void Effect_Effect393_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect393_Update(Effect* ); +void Effect_Effect393_Draw(Effect* ); +void Effect_Effect357_Spawn50(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect357_Spawn80(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect357_Spawn95(f32 xPos, f32 yPos, f32 zPos, f32 scale2); void func_effect_80079618(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007968C(Effect*); -bool func_effect_800798C4(s32 , Gfx** , Vec3f* , Vec3f* , void* ); //OverrideLimbDraw -void func_effect_800798F0(Effect* ); -void func_effect_8007A28C(Effect* ); -void func_effect_8007A3C0(Effect* ); -void func_effect_8007A568(f32 xPos, f32 yPos, f32 zPos, f32 scale1); -void func_effect_8007A5F8(Effect* , Vec3f* pos, u32 sfxId); -void func_effect_8007A6F0(Vec3f* pos, s32 sfxId); -void func_effect_8007A748(Effect*); +void Effect_Effect357_Update(Effect*); +void Effect_Effect357_Draw(Effect* ); +void Effect_Effect383_Update(Effect* ); +void Effect_Effect383_Draw(Effect* ); +void Effect_Effect383_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale1); +void Effect_SetupTimedSfxAtPos(Effect* , Vec3f* pos, u32 sfxId); +void Effect_SpawnTimedSfxAtPos(Vec3f* pos, s32 sfxId); +void Effect_TimedSfx_Update(Effect*); bool func_effect_8007A774(Player*, Effect*, f32); -void func_effect_8007A900(f32 xPos, f32 yPos, f32 zPos, f32 scale1, u8, u8, u16); -void func_effect_8007A994(Effect*); -void func_effect_8007AA60(Effect*); -void func_effect_8007AB50(Effect*); -void func_effect_8007ACE0(f32 xPos, f32 yPos, f32 zPos, f32 scale2, f32 scale1, f32 yRot); -void func_effect_8007ADF4(f32 xPos, f32 yPos, f32 zPos, f32 scale2, f32 scale1); -void func_effect_8007AFD0(f32 xPos, f32 zPos, f32 xVel, f32 zVel, f32 scale1); -void func_effect_8007B040(Effect*); -void func_effect_8007B0F4(Effect*); -void func_effect_8007B228(f32 xPos, f32 yPos, f32 zPos, f32 scale1); -void func_effect_8007B344(f32 xPos, f32 yPos, f32 zPos, f32 scale1, s32 ); -void func_effect_8007B3B8(Effect*); -void func_effect_8007B550(f32 xPos, f32 yPos, f32 zPos, f32 scale1, s32 ); -void func_effect_8007B5C0(Effect*); -void func_effect_8007B62C(Effect*); -void func_effect_8007B670(Effect*); -void func_effect_8007B67C(Effect*); -void func_effect_8007B758(Effect*); -void func_effect_8007B8F8(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007B960(Effect*); -void func_effect_8007BC7C(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007BCE8(Effect*); -void func_effect_8007B9DC(Effect*); -void func_effect_8007BDE0(Effect*); -void func_effect_8007BE54(Effect*); -void func_effect_8007BEE8(Effect*); -void func_effect_8007BFFC(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2, s32 timer50); -void func_effect_8007C120(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2, s32 timer50); -void func_effect_8007C250(Effect*); -void func_effect_8007C484(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2, s32 arg7); -void func_effect_8007C50C(Effect*); -void func_effect_8007C688(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 timer50); -void func_effect_8007C8C4(Effect*); -void func_effect_8007C85C(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007C9E0(Effect*); -void func_effect_8007CAF0(Effect*); -void func_effect_8007CF30(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect359_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale1, u8, u8, u16); +void Effect_Effect359_Update(Effect359*); +void Effect_Effect359_Draw(Effect*); +void Effect_Effect372_Update(Effect*); +void Effect_Effect372_Spawn1(f32 xPos, f32 yPos, f32 zPos, f32 scale2, f32 scale1, f32 yRot); +void Effect_Effect372_Spawn2(f32 xPos, f32 yPos, f32 zPos, f32 scale2, f32 scale1); +void Effect_Effect382_Spawn(f32 xPos, f32 zPos, f32 xVel, f32 zVel, f32 scale1); +void Effect_Effect382_Update(Effect*); +void Effect_Effect381_Update(Effect*); +void Effect_Effect381_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale1); +void Effect_Effect384_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale1, s32 ); +void Effect_Effect384_Update(Effect*); +void Effect_Effect385_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale1, s32 ); +void Effect_Effect385_Update(Effect*); +void Effect_Clouds_Update(Effect*); +void Effect_Effect388_Update(Effect*); +void Effect_Effect389_Update(Effect*); +void Effect_Effect347_Update(Effect*); +void Effect_Effect364_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect364_Update(Effect*); +void Effect_Effect362_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect362_Update(Effect*); +void Effect_Effect364_Draw(Effect*); +void Effect_Effect361_Update(Effect*); +void Effect_Effect360_Update(Effect*); +void Effect_Effect360_361_362_Draw(Effect*); +void Effect386_Spawn1(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2, s32 timer50); +void Effect_Effect390_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2, s32 timer50); +void Effect_Effect386_Update(Effect*); +void Effect_Effect389_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 scale2, s32 arg7); +void Effect_Effect390_Update(Effect*); +void Effect_Effect387_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 timer50); +void Effect_Effect387_Update(Effect*); +void Effect_Effect343_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect343_Update(Effect*); +void Effect_Effect343_Draw(Effect*); +void Effect_FireSmoke_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2); void func_effect_8007D074(f32 xPos, f32 yPos, f32 zPos, f32 scale2); void func_effect_8007D0E0(f32 xPos, f32 yPos, f32 zPos, f32 scale2); void func_effect_8007D10C(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007D1E0(f32 xPos, f32 yPos, f32 zPos, f32 scale2); +void Effect_Effect341_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2); void func_effect_8007D24C(f32 xPos, f32 yPos, f32 zPos, f32 scale2); void func_effect_8007D2C8(f32 xPos, f32 yPos, f32 zPos, f32 scale2); -void func_effect_8007D2F4(Effect*); -void func_effect_8007D55C(Effect*); -void func_effect_8007D748(Effect*); -void func_effect_8007D8A8(Effect*); -void func_effect_8007D9DC(f32 xPos, f32 yPos, f32 zPos, f32 scale2, f32 scale1, s32 timer50); -void func_effect_8007DA58(Effect*); -void func_effect_8007DAE4(Effect*); -void func_effect_8007DB70(Effect*); -void func_effect_8007DED4(Effect*); -void func_effect_8007E014(Effect*); -void func_effect_8007E258(Effect*); -void func_effect_8007E298(Effect*); -void func_effect_8007E330(Effect*); -void func_effect_8007E3E4(Effect*); -void func_effect_8007E45C(Effect*); -void func_effect_8007E5CC(Effect*); -void func_effect_8007E648(Effect*); -void func_effect_8007E93C(Effect* effect, u32 objId, f32 xPos, f32 yPos, f32 zPos, f32 arg5); +void Effect_Effect339_Update(Effect*); +void Effect_FireSmoke_Draw(Effect*); +void Effect_Effect340_Update(Effect*); +void Effect_Effect341_Update(Effect*); +void Effect_Effect367_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 scale2, f32 scale1, s32 timer50); +void Effect_Effect375_Update(Effect*); +void Effect_Effect375_Draw(Effect*); +void Effect_Effect374_Update(Effect*); +void Effect_Effect374_Draw(Effect*); +void Effect_Effect344_Update(Effect*); +void Effect_Effect345_Update(Effect*); +void Effect_Effect342_Update(Effect*); +void Effect_Effect342_Draw(Effect*); +void Effect_Effect351_Update(Effect*); +void Effect_Effect365_Update(Effect*); +void Effect_Effect365_Draw(Effect*); +void Effect_Effect367_Update(Effect*); +void func_effect_8007E93C(Effect* this, u32 objId, f32 xPos, f32 yPos, f32 zPos, f32 speed); void func_effect_8007EE68(ObjectId objId, Vec3f* pos, Vec3f* rot, Vec3f* arg3, Vec3f* arg4, f32 scale2); void func_effect_8007F04C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 unkX, f32 unkY, f32 unkZ, f32 xVel, f32 yVel, f32 zVel, f32 scale2); -void func_effect_8007F11C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4); -void func_effect_8007F20C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 arg4); -void func_effect_8007F438(Effect*); -void func_effect_8007F6B0(Effect*); -void func_effect_8007F958(Effect*); -void func_effect_8007FBE0(Effect*); -void func_effect_8007FE88(Effect*); +void Effect_EnemyLaser(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 speed); +void func_effect_8007F20C(ObjectId objId, f32 xPos, f32 yPos, f32 zPos, f32 speed); +void Effect_Effect346_Update(Effect*); +void Effect_Effect348_Update(Effect*); +void Effect_Effect349_Update(Effect*); +void Effect_Effect350_Update(Effect*); +void Effect_Effect353_354_Update(Effect*); bool func_effect_8007FD84(Effect*); -void func_effect_800802B8(Effect*); -void func_effect_800802D8(Effect*); -void func_effect_800802F8(Effect*); -void func_effect_80080360(Effect*); -void func_effect_8008040C(Effect*); -void func_effect_8008092C(Effect*); -void func_effect_80080ACC(Effect*); -void func_effect_80080D04(Effect*); +void Effect_Effect355_Update(Effect*); +void Effect_Effect377_Update(Effect*); +void Effect_Effect356_Update(Effect*); +void Effect_Effect376_Update(Effect*); +void Effect_Effect398_Update(Effect*); +void Effect_Effect398_Draw(Effect*); +void Effect_Effect394_Update(Effect*); +void Effect_Effect394_Draw(Effect*); void func_effect_800815DC(void); void func_effect_80081A8C(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 arg4); void func_effect_80081BEC(f32 xPos, f32 yPos, f32 zPos, f32 scale2, s32 arg4); -void func_effect_80081C5C(Effect*); -void func_effect_80082F78(Effect*); -void func_effect_8008377C(f32, f32, f32, f32, f32); -void func_effect_800837EC(Effect*); -void func_effect_80083B8C(Effect*); -void func_effect_80083C70(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 arg7, s32 arg8); +void Effect_Effect395_Update(Effect*); +void Effect_Effect395_Draw(Effect*); +void Effect_Effect391_Spawn(f32, f32, f32, f32, f32); +void Effect_Effect391_Update(Effect*); +void Effect_Effect391_Draw(Effect*); +void Effect_Effect399_Setup(Effect* this, f32 xPos, f32 yPos, f32 zPos, f32 xVel, f32 yVel, f32 zVel, f32 arg7, s32 arg8); void func_effect_80083D2C(f32 xPos, f32 yPos, f32 zPos, f32 srcZ); -void func_effect_80083FA8(Effect*); -void func_effect_80084194(Effect*); +void Effect_Effect399_Update(Effect*); +void Effect_Effect399_Draw(Effect*); // fox_fade -void func_fade_80084370(s32); -void func_fade_800843FC(s32); -void func_fade_80084488(s32); -void func_fade_80084688(s32, s32); +void Wipe_Draw(WipeMode mode, s32 frame); // fox_hud -void func_hud_80084B94(s32); -void func_hud_800857DC(f32, f32, f32, f32); -void func_hud_80085890(f32, f32, f32, f32); -void func_hud_80086110(f32, f32, s32); -void func_hud_80086664(f32, f32); -void func_hud_800869A0(f32, f32, s32, f32, s32, s32); -void func_hud_80087530(f32, f32, s32); -void func_hud_800884E4(void); -void func_hud_80088564(void); -void func_hud_8008865C(void); -s32 func_hud_8008AC54(s32); -void func_hud_8008AD94(void); -void func_hud_8008B5B0(f32 x, f32 y); -s32 func_hud_8008B774(void); -void func_hud_8008BD00(u8*, s32, s32, u8); -void func_hud_8008C104(u16*, u16*); -void func_hud_8008C390(f32, f32, f32, s32); -void func_hud_8008C5C8(f32, f32, f32, s32); -void func_hud_8008C6F4(s32, s32); -s32 func_hud_8008BCBC(s32); -void func_hud_8008CA44(void); -s32 func_hud_8008CB8C(void); -void func_hud_8008D0DC(f32, f32, f32, f32, f32); -void func_hud_8008DE68(void); -void func_hud_8008E51C(s32* , f32); -void func_hud_8008E9EC(f32, f32); -void func_hud_8008EA14(f32, f32); -void func_hud_8008FA84(void); -void func_hud_8008FE78(Boss*); -void func_hud_8008FFF0(Boss*, s32); -s32 func_hud_80090200(Boss* boss); -bool func_hud_8009092C(Actor*); -void func_hud_800907C4(Boss*); -bool func_hud_800915FC(Actor*); -bool func_hud_800924E0(Actor*); +void HUD_TeamDownWrench_Draw(s32); +void HUD_BoostGaugeOverheat_Draw(f32, f32, f32, f32); +void HUD_BoostGaugeCool_Draw(f32, f32, f32, f32); +void HUD_TeamShields_Draw(f32, f32, s32); +void HUD_TitleCard_Draw(f32, f32); +void HUD_Number_Draw(f32, f32, s32, f32, bool, s32); +void HUD_LivesCount2_Draw(f32, f32, s32); +void HUD_SetMissionTeamStatus(void); +void HUD_Bolse_Area6_SaveData(void); +void HUD_DrawStatusScreens(void); +s32 ActorMissileSeek_ModeCheck(ActorMissileSeekMode mode); +void HUD_RadioCharacterName_Draw(void); +void HUD_PlayerShieldGauge_Draw(f32 x, f32 y); +s32 HUD_RadioDamage_Type(void); +void HUD_Texture_Scroll(u8*, s32, s32, u8); +void HUD_Texture_Wave(u16*, u16*); +void HUD_DisplaySmallNumber(f32, f32, f32, s32); +void HUD_VsModePortraitTex_Draw(f32, f32, f32, s32); +void HUD_EdgeArrows_Draw(s32, bool); +s32 HUD_CountDigits(s32); +void HUD_EdgeArrows_Update(void); +s32 HUD_8008CB8C(void); +void HUD_VS_ShieldGaugeTex_Draw(f32, f32, f32, f32, f32); +void HUD_DrawBossHealth(void); +void HUD_DrawCountdown(s32* , f32); +void HUD_Shield_GoldRings_HitPoints(f32, f32); +void HUD_BombCounter_Draw(f32, f32); +void HUD_Draw(void); +void FoBase_Draw(Boss*); +void FoBase_BurnEffects(Boss*, s32); +s32 FoBase_ExplodeCs(Boss* this); +bool ActorTeamBoss_SetTarget(Actor*); +void FoBase_Update(Boss*); +bool ActorTeamBoss_ObstacleCheck(Actor*); +bool ActorTeamBoss_SomerSault(Actor*); void ActorTeamBoss_Init(Actor*); -void ActorTeamBoss_Update(Actor* actor); -void func_hud_80093164(Actor*); -void func_hud_800935E8(Player*); -void func_hud_800953A0(Actor*, s32); -void func_hud_8009546C(Actor*, s32); -void func_hud_80095538(Actor*, s32); -void func_hud_80095604(Player*); -void func_hud_80094954(Effect*); -void func_hud_80094BBC(Effect*); -void func_hud_80094D20(f32, f32); -void func_hud_80096A74(Player* player); +void ActorTeamBoss_Update(Actor* this); +void Aquas_CsIntroActors_Update(Actor*); +void Aquas_CsLevelStart(Player*); +void Aquas_AqBump2_Setup(Actor*, s32); +void Aquas_AqCoralReef2_Setup(Actor*, s32); +void Aquas_AqRock_Setup(Actor*, s32); +void Aquas_CsLevelComplete(Player*); +void Aquas_Effect363_Update(Effect*); +void Aquas_Effect363_Draw(Effect*); +void HUD_Hitpoints_Draw(f32, f32); +void Venom1_LevelStart2(Player* player); -// fox_97F80 +// fox_col1 void func_col1_80098860(PlaneF* plane, Vec3f* point, Vec3f* normal); s32 func_col1_800988B4(Vec3f* vec, PlaneF* plane); -bool func_col1_800998FC(Vec3f*, Vec3f*, Vec3f*, s32, Vec3f*, f32*); +bool func_col1_800998FC(Vec3f* objPos, Vec3f* colliderPos, Vec3f* objVel, s32 colId, Vec3f* hitPosOut, + f32* hitAnglesOut); -// fox_A4290 -bool func_col2_800A3690(Vec3f*, Vec3f*, s32, Vec3f*); +// fox_col2 +bool func_col2_800A3690(Vec3f* objPos, Vec3f* colliderPos, s32 colId, Vec3f* hitDataOut); -// fox_A48A0 -void func_800A3CA0(void); +// fox_pause +void func_pause_800A3CA0(void); // fox_play bool Play_CheckMedalStatus(u16); -void func_play_800A3FB0(void); +void Play_dummy_MuteSfx(void); s32 Play_GetMaxShields(void); -void func_play_800A6028(f32*, u32); -void func_play_800AC290(Player* player, PlayerShot* shot, f32 arg2, f32 arg3, PlayerShotId shotId, f32 arg5); -void func_play_800A5844(void); -void func_play_800A594C(void); -void func_play_800A5D6C(void); -void func_play_800A5EBC(void); -void func_play_800A5FA0(f32* , u32 , s32 ); -void func_play_800A6070(f32* , u32 ); -void func_play_800A6148(void); -void func_play_800A69F8(s32 , f32 , f32 , f32 ); +void Play_PlaySfxFirstPlayer(f32*, u32); +void Player_SetupArwingShot(Player* player, PlayerShot* shot, f32 arg2, f32 arg3, PlayerShotId shotId, f32 speed); +void Play_Setup(void); +void Play_InitEnvironment(void); +void Play_GenerateStarfield(void); +void Play_SetupStarfield(void); +void Player_PlaySfx(f32* , u32 , s32 ); +void Play_PlaySfxNoPlayer(f32* , u32 ); +void Play_ClearObjectData(void); +void Play_SpawnDebris(s32 , f32 , f32 , f32 ); void Player_ApplyDamage(Player* player, s32 direction, s32 damage); -bool func_play_800A73E4(f32* , s32* , f32 xPos, f32 yPos, f32 zPos); -bool func_play_800A78C4(Hitbox* hitbox, f32 , f32 , f32 , f32 , f32 , f32 ); -void func_play_800A8BA4(Player* player); -void func_play_800AA800(Player* player); -void func_play_800ACDC0(Player*, PlayerShot*, PlayerShotId ); -void func_play_800B0F50(Player*); -void func_play_800B44C4(Player*); -void func_play_800AB334(void); -void func_play_800ABA08(void); -void func_play_800AE278(Player*); -void func_play_800B2130(Player*); -void func_play_800B2574(Player*); -void func_play_800B56BC(Player*); -void func_play_800B5D30(Player*, s32); -void func_play_800B5FBC(Player*, s32, bool); -void func_play_800B63BC(Player*, s32); -void func_play_800B6848(Player*, s32 ); -void func_play_800B6BFC(Player*, s32 ); -void func_play_800B6F50(f32, f32, f32, f32, f32, f32); -void func_play_800B7184(Player*, s32); -void func_play_800B73E0(Player*); -void func_play_800B852C(ObjectId , Item*); -void func_play_800B86CC(void); -void func_play_800A668C(f32 xPos, f32 yPos, f32 zPos); -void func_play_800AD7F0(Player* player); -void func_play_800ADF58(Player* player); -void func_play_800B415C(Player* player); -void func_play_800B41E0(Player* player); -void func_play_800B41EC(Player* player); -void func_play_800A46A0(Player* player); -void func_play_800A86E4(Player* player); -void func_play_800A887C(Player* player); -s32 func_play_800A7974(Player* player, f32* hitboxData, s32* index, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, +bool Play_CheckDynaFloorCollision(f32* floorHeight, s32* triangleIndex, f32 xPos, f32 yPos, f32 zPos); +bool Play_CheckSingleHitbox(Hitbox* hitbox, f32 , f32 , f32 , f32 , f32 , f32 ); +void Player_CollisionCheck(Player* player); +void Player_FloorCheck(Player* player); +void Player_SetupOnFootShot(Player*, PlayerShot*, PlayerShotId ); +void Player_Setup(Player*); +void Player_Update360(Player*); +void Play_InitLevel(void); +void Player_InitVersus(void); +void Player_CheckBounds360(Player*); +void Player_UpdateArwingRoll(Player*); +void Player_ArwingBoost(Player*); +void Camera_UpdateArwingOnRails(Player*); +void Camera_UpdateCockpitOnRails(Player*, s32); +void Camera_FollowPlayer(Player*, s32 , bool); +void Camera_UpdateArwing360(Player*, bool); +void Camera_UpdateTank360(Player*, s32 ); +void Camera_UpdateOnFoot360(Player*, s32 ); +void Camera_SetStarfieldPos(f32, f32, f32, f32, f32, f32); +void Camera_Update360(Player*, bool); +void Camera_SetupLights(Player*); +void Play_SpawnVsItem(ObjectId , Item*); +void Play_Main(void); +void Play_SpawnHitmark(f32 xPos, f32 yPos, f32 zPos); +void Player_Shoot(Player* player); +void Player_UpdatePath(Player* player); +void Player_LowHealthAlarm(Player* player); +void Play_dummy_800B41E0(Player* player); +void Player_Down(Player* player); +void Player_DamageEffects(Player* player); +void Player_CheckItemCollect(Player* player); +void Player_UpdateHitbox(Player* player); +s32 Player_CheckHitboxCollision(Player* player, f32* hitboxData, s32* index, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 arg9, f32 argA, f32 argB); -bool func_play_800A8054(ObjectId objId, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, Vec3f* arg7, Vec3f* arg8); -void Object_58_Initialize(Object_58*); +bool Play_CheckPolyCollision(ObjectId objId, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, Vec3f* arg7, Vec3f* arg8); +void Scenery360_Initialize(Scenery360*); // fox_versus -s32 func_versus_800C1E9C(void); -void func_versus_800C1ED4(void); -void func_versus_800C20B0(void); +s32 Versus_Main(void); +void Versus_Draw(void); +void Versus_StartMatch(void); void func_versus_800C2190(void); void func_versus_800C26C8(void); void OvlMenu_CallFunction(u32, void*); -void Map_8019E8D0(void); +void Map_Main(void); -void Venom1_80198414(void); -// s32 Venom1_801937F4(s32, Gfx**, Vec3f*, Vec3f*, void*); -// void Venom1_80193D64(s32, Vec3f*, void*); - -void Ending_8018A96C(void); -void Ending_8018AAC4(void); +void Ending_Main(void); +void Ending_Draw(void); // sf_i5_5 bool Ground_801B49D0(Actor* actor); diff --git a/include/gfx.h b/include/gfx.h index 8e8a0a4a..a9ab5623 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -77,6 +77,20 @@ #define VTX_T(x,y,z,s,t,cr,cg,cb,a) { { x, y, z }, 0, { s, t }, { cr, cg, cb, a } } +typedef enum WipeMode { + WIPE_CIRCULAR, + WIPE_HORIZONTAL, + WIPE_VERTICAL, +} WipeMode; + +typedef struct { + u8 r, g, b; +} Color_RGB8; // size = 0x3 + +typedef struct Color_RGBA32 { + u8 r, g, b, a; +} Color_RGBA32; // size = 0x4 + typedef union { u16 data[SCREEN_HEIGHT * SCREEN_WIDTH]; u16 array[SCREEN_HEIGHT][SCREEN_WIDTH]; @@ -117,8 +131,8 @@ void Lights_SetTwoLights(Gfx** dList, s32 dir1x, s32 dir1y, s32 dir1z, s32 dir2x char* Graphics_ClearPrintBuffer(char *buf, s32 fill, s32 len); s32 Graphics_Printf(const char *fmt, ...); -void Texture_Scroll(u16 *texture, s32 width, s32 height, u8 mode); -void Texture_Mottle(u16 *dst, u16 *src, u8 mode); +void Lib_Texture_Scroll(u16 *texture, s32 width, s32 height, u8 mode); +void Lib_Texture_Mottle(u16 *dst, u16 *src, u8 mode); s32 Animation_GetLimbIndex(Limb* limb, Limb** skeleton); void Animation_DrawLimb(s32 mode, Limb* limb, Limb* *skeleton, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data); void Animation_DrawSkeleton(s32 mode, Limb** skeletonSegment, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data, Matrix* transform); @@ -127,23 +141,23 @@ s32 Animation_GetFrameCount(Animation *animationSegment); void Animation_FindBoundingBox(Gfx* dList, s32 len, Vec3f *min, Vec3f *max, s32 *vtxFound, s32 *vtxCount, Vtx* *vtxList); void Animation_GetDListBoundingBox(Gfx *dList, s32 len, Vec3f *min, Vec3f *max); void Animation_GetSkeletonBoundingBox(Limb** skeletonSegment, Animation *animationSegment, s32 frame, Vec3f *min, Vec3f* max); -void TextureRect_4bCI(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_4bCI_Flip(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_4bCI_MirX(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_4bCI_MirY(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_8bCI(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_16bRGBA(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_16bRGBA_MirX(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_8bIA(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_8bIA_FilpMirX(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_8bIA_FilpMirY(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_8bIA_MirX(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_8bIA_MirY(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_16bIA(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_16bIA_MirX(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_16bIA_MirY(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_16bIA_MirXY(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); -void TextureRect_32bRGBA(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_CI4(Gfx **gfxPtr, u8* texture, u16* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_CI4_Flip(Gfx **gfxPtr, u8* texture, u16* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_CI4_MirX(Gfx **gfxPtr, u8* texture, u16* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_CI4_MirY(Gfx **gfxPtr, u8* texture, u16* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_CI8(Gfx **gfxPtr, u8* texture, u16* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_RGBA16(Gfx **gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_RGBA16_MirX(Gfx **gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA8(Gfx **gfxPtr, u8* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA8_FlipMirX(Gfx **gfxPtr, u8* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA8_FlipMirY(Gfx **gfxPtr, u8* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA8_MirX(Gfx **gfxPtr, u8* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA8_MirY(Gfx **gfxPtr, u8* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA16(Gfx **gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA16_MirX(Gfx **gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA16_MirY(Gfx **gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_IA16_MirXY(Gfx **gfxPtr, u16* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void Lib_TextureRect_RGBA32(Gfx **gfxPtr, u32* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); void Graphics_FillRectangle(Gfx **gfxPtr, s32 ulx, s32 uly, s32 lrx, s32 lry, u8 r, u8 g, u8 b, u8 a); u16* Graphics_SetupTextureRender(Gfx **gfxPtr, u8 width, u8 height); void Graphics_DisplayHUDNumber(s32 xPos, s32 yPos, s32 number); diff --git a/include/global.h b/include/global.h index 69c37ee9..e38d4ed1 100644 --- a/include/global.h +++ b/include/global.h @@ -3,15 +3,35 @@ #include "sys.h" +typedef enum OverlayCalls { + /* 90 */ OVLCALL_FO_CS_COMPLETE = 90, + /* 91 */ OVLCALL_BO_BASE_UPDATE, + /* 92 */ OVLCALL_BO_BASE_DRAW, + /* 93 */ OVLCALL_BO_BASE_SHIELD_UPDATE, + /* 94 */ OVLCALL_BO_BASE_SHIELD_DRAW, + /* 95 */ OVLCALL_BO_SHIELD_REACTOR_UPDATE, + /* 96 */ OVLCALL_BO_SHIELD_REACTOR_DRAW, + /* 97 */ OVLCALL_BO_LASER_CANNON_UPDATE, + /* 98 */ OVLCALL_BO_LASER_CANNON_DRAW, + /* 103 */ OVLCALL_TITLE_UPDATE = 103, + /* 104 */ OVLCALL_TITLE_DRAW, + /* 105 */ OVLCALL_MAP_UPDATE, + /* 106 */ OVLCALL_MAP_DRAW, + /* 107 */ OVLCALL_OPTION_UPDATE, + /* 108 */ OVLCALL_OPTION_DRAW, + /* 109 */ OVLCALL_GAME_OVER_UPDATE, + /* 110 */ OVLCALL_UNKMAP_DRAW, +} OverlayCalls; + #include "sf64audio_external.h" #include "functions.h" #include "variables.h" #include "sf64context.h" -#include "structs.h" #include "sf64mesg.h" #include "assets/ast_radio.h" #include "sf64object.h" #include "sf64level.h" +#include "sf64event.h" #include "sf64player.h" #include "i1.h" #include "i2.h" @@ -24,4 +44,6 @@ #include "gfx_dimensions.h" #include <libultraship.h> + + #endif // GLOBAL_H diff --git a/include/i1.h b/include/i1.h index 6d269eeb..0fa47966 100644 --- a/include/i1.h +++ b/include/i1.h @@ -1,74 +1,73 @@ #ifndef I1_H #define I1_H -#include "stdbool.h" -#include "structs.h" +#include "libc/stdbool.h" #include "sf64object.h" #include "sf64thread.h" #include "sf64player.h" #include "sf64mesg.h" extern Gfx* D_VE1_8019A008[]; -extern f32 D_VE1_8019A9B8[]; +extern f32 aVe1GolemechHitbox[]; -extern void Corneria_8018F880(Player*); -extern void Corneria_80191160(Player*); -extern void Venom1_801988B8(Player*); +extern void Corneria_LevelStart(Player*); +extern void Corneria_LevelComplete1(Player*); +extern void Venom1_LevelStart(Player*); -void Corneria_801875A4(Object_4C*); -void Corneria_80189058(Boss*); -void Corneria_8018AA74(Boss*); -void Corneria_8018AED0(Actor*); -void Corneria_8018B15C(Actor*); -void Corneria_8018B418(Actor*); -void Corneria_8018B58C(Actor*); -void Corneria_8018BAAC(Actor*); -void Corneria_8018BBA4(Actor*); -void Corneria_8018BBF8(Actor*); -void Corneria_8018BD7C(Actor*); -void Corneria_8018C19C(Boss*); -void Corneria_8018DDAC(Boss*); -void Corneria_8018E290(Boss*); -void Corneria_8018E76C(Boss*); -void Corneria_8018ECAC(Boss*); -void Corneria_8018ED78(Boss*); -void Corneria_8018EE84(Boss*); -void Corneria_8018EF90(Boss*); -void Corneria_8018F044(Object_80*); -void Corneria_8018F31C(Object_80*); -void Venom1_801922DC(Object_4C*); -void Venom1_80192358(Object_4C*); -void Venom1_801923C0(Object_4C*); -void Venom1_8019243C(Object_4C*); -void Venom1_80192518(Actor*); -void Venom1_80192CD4(Actor*); -void Venom1_80192E2C(Actor*); -void Venom1_80192EB0(Actor*); -void Venom1_801933DC(Actor*); -void Venom1_801934D0(Actor*); -void Venom1_80193540(Object_80*); -void Venom1_80194398(Boss*); -void Venom1_801985E4(Boss*); +void Corneria_CoSmoke_Update(Sprite*); +void Corneria_CoGranga_Update(CoGranga*); +void Corneria_CoGranga_Draw(CoGranga*); +void Corneria_CoGaruda1_Update(CoGaruda1*); +void Corneria_CoGaruda2_Update(CoGaruda2*); +void Corneria_CoGaruda3_Update(CoGaruda3*); +void Corneria_CoGarudaDestroy_Update(CoGarudaDestroy*); +void Corneria_CoGaruda1_Draw(CoGaruda1*); +void Corneria_CoGaruda2_Draw(CoGaruda2*); +void Corneria_CoGaruda3_Draw(CoGaruda3*); +void Corneria_CoGarudaDestroy_Draw(CoGarudaDestroy*); +void Corneria_CoCarrier_Update(CoCarrier*); +void Corneria_CarrierLeft_Update(CoCarrierLeft*); +void Corneria_CarrierUpper_Update(CoCarrierUpper*); +void Corneria_CarrierBottom_Update(CoCarrierBottom*); +void Corneria_CoCarrier_Draw(CoCarrier*); +void Corneria_CoCarrierLeft_Draw(CoCarrierLeft*); +void Corneria_CoCarrierUpper_Draw(CoCarrierUpper*); +void Corneria_CoCarrierBottom_Draw(CoCarrierBottom*); +void Corneria_CoDoors_Update(Scenery*); +void Corneria_CoDoors_Draw(Scenery*); +void Venom1_BossTrigger1_Update(Sprite*); +void Venom1_BossTrigger2_Update(Sprite*); +void Venom1_BossTrigger3_Update(Sprite*); +void Venom1_BossTrigger4_Update(Sprite*); +void Venom1_Ve1Pillar1_Update(Actor*); +void Venom1_Pillar2_3_Update(Actor*); +void Venom1_Ve1Pillar2_Draw(Actor*); +void Venom1_Ve1Pillar4_Update(Actor*); +void Venom1_Ve1MonkeyStatue_Update(Actor*); +void Venom1_Ve1MonkeyStatue_Draw(Actor*); +void Venom1_Ve1Generator_Update(Scenery*); +void Venom1_Ve1Golemech_Update(Boss*); +void Venom1_Ve1Golemech_Draw(Boss*); void Training_ItemRing_Update(Item*); void OvlI1_CallFunction(s32, void*); -void Corneria_80187530(Object_80*); -void Corneria_8018753C(Object_80*); -void Corneria_Boss292_Init(Boss *); -void Corneria_8018B0B4(Actor *); -void Corneria_Boss293_Init(Boss *); -void Corneria_8018ED78(Boss*); -void Venom1_801924A8(Object_80* ); -void Venom1_8019250C(Actor *); -void Venom1_80192CB0(Actor *); -void Venom1_80192EA4(Actor *); -void Venom1_801933B4(Actor *); -void Venom1_Boss319_Init(Boss *); -void Venom1_80198310(Boss *); -void Venom1_80198594(Boss *); -void Training_801988E0(void); -void Training_80198C50(void); -void Training_8019949C(void); +void Corneria_CoBuildingOnFire_Update(Scenery*); +void Corneria_CoBuildingOnFire_Draw(Scenery*); +void Corneria_Granga_Init(Boss *); +void Corneria_CoIBeam_Init(Actor *); +void Corneria_CoCarrier_Init(CoCarrier *); +void Corneria_CoCarrierLeft_Draw(Boss*); +void Venom1_Ve1TempleEntrance_Update(Scenery* ); +void Venom1_Ve1Pillar1_Init(Actor *); +void Venom1_Ve1Pillar2_3_Init(Actor *); +void Venom1_Ve1Pillar4_Init(Actor *); +void Venom1_Ve1MonkeyStatue_Init(Actor *); +void Venom1_Ve1Golemech_Init(Boss *); +void Venom1_Ve1Golemech_SetShadow(Boss *); +void Venom1_Ve1Golemech_Dying(Boss *); +void Training_RingPassCount_Draw(void); +void Training_Setup360(void); +void Training_SpawnEnemies(void); void Venom1_8019864C(PlayerShot*); #endif diff --git a/include/i2.h b/include/i2.h index 67b0e0b4..cf8e8741 100644 --- a/include/i2.h +++ b/include/i2.h @@ -1,49 +1,48 @@ #ifndef I2_H #define I2_H -#include "stdbool.h" -#include "structs.h" +#include "libc/stdbool.h" #include "sf64object.h" #include "sf64thread.h" #include "sf64player.h" #include "sf64mesg.h" -void Meteo_8018CD8C(Player*); -void Meteo_8018E084(Player*); +void Meteo_LevelStart(Player*); +void Meteo_LevelComplete(Player*); void Meteo_8018ED9C(Actor*); -void SectorX_80193A30(Player*); -void SectorX_80194728(Player*); +void SectorX_LevelStart(Player*); +void SectorX_LevelComplete(Player*); void OvlI2_CallFunction(s32, void*); void Meteo_80187B08(Actor *); -void Meteo_Boss297_Init(Boss *); -void Meteo_8018CCF8(Actor *); +void Meteo_MeCrusher_Init(Boss *); +void Meteo_Effect346_Spawn(Actor *); -void Meteo_8018756C(Actor*); -void Meteo_80187650(Actor*); -void Meteo_801877C4(Actor*); -void Meteo_8018795C(Actor*); -void Meteo_80188344(Boss*); -void Meteo_801887D0(Boss*); -void Meteo_80188CAC(Effect*); -void Meteo_80188FAC(Effect*); -void Meteo_80189114(Effect*); -void Meteo_8018978C(Boss*); -void Meteo_8018BACC(Boss*); -void Meteo_8018D9EC(Actor*); -void Meteo_8018DA6C(Actor*); -void Meteo_8018DAEC(Actor*); -void Meteo_8018DB6C(Actor*); -void Meteo_8018DBEC(Effect*); -void Meteo_8018DCE4(Effect*); -void Meteo_8018DE14(Effect*); -void SectorX_8018F330(Actor*); -void SectorX_8018F884(Actor*); -void SectorX_8018FE38(Boss*); -void SectorX_8018FF20(Boss*); -void SectorX_8018FF84(Boss*); -void SectorX_80190020(Boss*); -void SectorX_80190078(Boss*); -void SectorX_80193434(Boss*); +void Meteo_MeMeteor1_Update(MeMeteor1*); +void Meteo_MeMeteor2_Update(MeMeteor2*); +void Meteo_MeLaserCannon1_Update(MeLaserCannon1*); +void Meteo_MeLaserCannon2_Update(MeLaserCannon2*); +void Meteo_MeCrusherShield_Update(Boss*); +void Meteo_MeCrusherShield_Draw(Boss*); +void Meteo_Effect369_Update(Effect*); +void Meteo_Effect370_Update(Effect*); +void Meteo_Effect371_Update(Effect*); +void Meteo_MeCrusher_Update(Boss*); +void Meteo_MeCrusher_Draw(Boss*); +void Meteo_MeteorShower_Update(Actor*); +void Meteo_MeMeteorShower1_Draw(Actor*); +void Meteo_MeMeteorShower2_Draw(Actor*); +void Meteo_MeMeteorShower3_Draw(Actor*); +void Meteo_Effect370_Draw(Effect*); +void Meteo_Effect369_Draw(Effect*); +void Meteo_Effect371_Draw(Effect*); +void SectorX_SxSlippy_Update(Actor*); +void SectorX_SxSlippy_Draw(Actor*); +void SectorX_SxSpyborgLeftArm_Update(Boss*); +void SectorX_SxSpyborgRightArm_Update(Boss*); +void SectorX_SxSpyborgLeftArm_Draw(Boss*); +void SectorX_SxSpyborgRightArm_Draw(Boss*); +void SectorX_SxSpyborg_Update(Boss*); +void SectorX_SxSpyborg_Draw(Boss*); #endif diff --git a/include/i3.h b/include/i3.h index 9a72a7dd..433b533d 100644 --- a/include/i3.h +++ b/include/i3.h @@ -1,8 +1,7 @@ #ifndef I3_H #define I3_H -#include "stdbool.h" -#include "structs.h" +#include "libc/stdbool.h" #include "sf64object.h" #include "sf64thread.h" #include "sf64player.h" @@ -10,145 +9,144 @@ extern f32 D_AQ_801C4188; -void Aquas_801BE034(Actor*); +void Aquas_CsAqFishGroup_Update(Actor*); void Area6_8018DA58(Actor*); void Zoness_8019E5F0(Actor*); -void Solar_801A8BE8(Actor*); -void Aquas_801AB9B0(Player*); +void Aquas_BlueMarineDown(Player*); void Aquas_801BE0F0(Actor*); void OvlI3_CallFunction(s32, void*); -void Area6_BossA6_Init(Boss *); -void Area6_80187944(Boss*); -void Area6_8018C54C(Boss*); -void Area6_8018DF74(Player *player); -void Area6_8018ED78(Player*); +void Area6_A6Gorgon_Init(Boss *); +void Area6_A6Gorgon_Update(Boss*); +void Area6_A6Gorgon_Draw(Boss*); +void Area6_LevelStart(Player *player); +void Area6_LevelComplete(Player*); -void Zoness_801900FC(Vec3f*, Vec3f*, f32, f32, f32, s32, f32, s32, s32); -void Zoness_80190430(Actor* actor); -void Zoness_801904CC(Actor* actor); -void Zoness_80190A00(Actor* actor); -void Zoness_80190F08(Actor* actor); -void Zoness_80191010(Actor* actor); -void Zoness_801914C4(Actor* actor); -void Zoness_801915A4(Actor* actor); -void Zoness_80191680(Actor* actor); -void Zoness_80191B4C(Actor* actor); -void Zoness_80191BB8(Actor* actor); -void Zoness_80191BC4(Actor* actor); -void Zoness_80191DB0(Actor* actor); -void Zoness_80191DB0(Actor* actor); -void Zoness_80191FFC(Actor* actor); -void Zoness_80192094(Actor* actor); -void Zoness_80192834(Actor* actor); -void Zoness_80192C18(Actor* actor); -void Zoness_80192E64(Actor* actor); -void Zoness_80193240(Actor* actor); -void Zoness_BossZo_Init(Boss* bossZO); -void Zoness_801949DC(Boss* bossZO); -void Zoness_80194A84(Boss* bossZO); -void Zoness_8019969C(Actor* actor); -void Zoness_8019983C(Actor* actor); -void Zoness_80199A28(Actor* actor); -void Zoness_80199E24(Actor* actor); -void Zoness_80199F10(Actor* actor); -void Zoness_8019A1FC(Actor* actor); -void Zoness_8019A5D4(Actor* actor); -void Zoness_8019ACCC(Actor* actor); -void Zoness_8019B1F0(Actor* actor); -void Zoness_8019B548(Actor* actor); -void Zoness_8019B7DC(Actor* actor); -void Zoness_8019B810(Actor* actor); -void Zoness_8019B854(Actor* actor); -void Zoness_8019BDE0(Actor* actor); -void Zoness_8019BE48(Actor* actor); -void Zoness_8019C1CC(Actor* actor); -void Zoness_8019C200(Actor* actor); -void Zoness_8019C454(Actor* actor); -void Zoness_8019C83C(Actor* actor); -void Zoness_8019CBEC(Actor* actor); -void Zoness_8019CE58(Actor* actor); -void Zoness_Actor247_Init(Actor* actor); -void Zoness_8019D15C(Actor* actor); -void Zoness_8019D3C4(Actor* actor); -void Zoness_8019D428(Player* player); -void Zoness_8019D76C(Player* player); +void Zoness_ActorDebris_Spawn(Vec3f*, Vec3f*, f32, f32, f32, s32, f32, s32, s32); +void Zoness_ZoBird_Draw(ZoBird* this); +void Zoness_ZoBird_Update(ZoBird* this); +void Zoness_ZoDodora_Update(Actor* this); +void Zoness_ZoDodora_Draw(Actor* this); +void Zoness_ZoFish_Update(Actor* this); +void Zoness_ZoFish_Draw(Actor* this); +void Zoness_ZoEnergyBall_Init(Actor* this); +void Zoness_ZGull_Update(Actor* this); +void Zoness_ZGull_Draw(Actor* this); +void Zoness_ZoEnergyBall_Init2(Actor* actor); +void Zoness_ZoEnergyBall_Update(Actor* this); +void Zoness_ZoEnergyBall_Draw(Actor* this); +void Zoness_ZoEnergyBall_Draw(Actor* this); +void Zoness_ZoTroika_Draw(Actor* this); +void Zoness_ZoTroika_Update(Actor* this); +void Zoness_ZoShrimp_Update(Actor* this); +void Zoness_ZoShrimp_Draw(Actor* this); +void Zoness_ZoObnema_Update(Actor* this); +void Zoness_ZoObnema_Draw(Actor* actor); +void Zoness_ZoSarumarine_Init(Boss* this); +void Zoness_ZoSarumarine_Draw(Boss* this); +void Zoness_ZoSarumarine_Update(Boss* this); +void Zoness_ZoBall_Update(ZoBall* this); +void Zoness_ZoBall_Draw(Actor* actor); +void Zoness_ZoMine_Update(Actor* this); +void Zoness_ZoMine_Draw(ZoMine* actor); +void Zoness_ZoCraneMagnet_Update(Actor* this); +void Zoness_ZoCraneMagnet_Draw(Actor* this); +void Zoness_ZoSpikeBall_Update(Actor* this); +void Zoness_ZoSpikeBall_Draw(Actor* this); +void Zoness_ZoTanker_Init(Actor* actor); +void Zoness_ZoTanker_Update(Actor* this); +void Zoness_ZoTanker_Draw(Actor* actor); +void Zoness_ZoContainer_Init(Actor* this); +void Zoness_ZoContainer_Update(Actor* this); +void Zoness_ZoContainer_Draw(Actor* this); +void Zoness_ZoRadarBuoy_Update(Actor* this); +void Zoness_ZoRadarBuoy_Draw(Actor* actor); +void Zoness_ZoSupplyCrane_Init(Actor* this); +void Zoness_ZoSupplyCrane_Update(Actor* this); +void Zoness_ZoSupplyCrane_Draw(Actor* this); +void Zoness_ZoSearchLight_Update(Actor* this); +void Zoness_ZoSearchLight_Draw(Actor* this); +void Zoness_ZoBarrier_Init(Actor* this); +void Zoness_ZoBarrier_Update(Actor* this); +void Zoness_ZoBarrier_Draw(Actor* this); +void Zoness_LevelStart(Player* player); +void Zoness_LevelComplete(Player* player); void Solar_8019E8B8(f32, f32, f32, f32); void Solar_8019E9F4(f32, f32, f32, f32, f32, f32, f32, s32); -void Solar_8019EA7C(Actor*); -void Solar_8019F20C(Actor*); -void Solar_8019F7AC(Actor*); -void Solar_801A003C(Actor*); -void Solar_801A0120(Effect*); -void Solar_801A0AF0(Effect*); -void Solar_801A10F4(Player* player); -void Solar_801A5B3C(Boss*); -void Solar_801A71B8(Boss*); -void Solar_801A8BE8(Actor*); -void Solar_801A7930(Player* player); +void Solar_SoWave_Update(SoWave*); +void Solar_SoRock_Update(Actor*); +void Solar_SoRock_Draw(Actor*); +void Solar_SoProminence_Update(SoProminence*); +void Solar_Effect392_Update(Effect392*); +void Solar_Effect392_Draw(Effect392*); +void Solar_LevelStart(Player* player); +void Solar_SoVulkain_Update(SoVulkain*); +void Solar_SoVulkain_Draw(SoVulkain*); +void Solar_801A8BE8(ActorCutscene*); +void Solar_LevelComplete(Player* player); -void Aquas_801A9824(void); +void Aquas_InitLevel(void); void Aquas_801AA20C(void); -void Aquas_801AA8E8(Player*); -void Aquas_801AACF8(Player*); +void Aquas_UpdateCamera(Player*); +void Aquas_BlueMarineMove(Player*); void Aquas_801ABA40(PlayerShot*); -void Aquas_801AC274(Player*); -void Aquas_801AC8A8(f32, f32, f32, f32, s32); -void Aquas_801AC918(Effect*); -void Aquas_801ACBB4(Player*); -void Aquas_801ACE50(Player*); -void Aquas_801AD328(Player*); -void Aquas_801AD688(Actor *); -void Aquas_801AD6C0(Actor*); -void Aquas_801AE168(Actor*); -void Aquas_801AE3AC(Actor *); -void Aquas_801AE3D8(Actor*); -void Aquas_801AEB44(Actor*); -void Aquas_801AF9FC(Actor *); -void Aquas_801AFA5C(Actor*); -void Aquas_801B099C(Actor*); -void Aquas_801B0B60(Actor*); -void Aquas_801B0EC0(Actor*); -void Aquas_BossAq_Init(Boss*); -void Aquas_801B134C(Boss*); -void Aquas_801B4D84(Boss*); -void Aquas_801B504C(Actor*); -void Aquas_801B50E8(Actor*); -void Aquas_801B619C(Actor*); -void Aquas_801B6344(Actor *); -void Aquas_801B638C(Actor*); -void Aquas_801B6E54(Actor *); -void Aquas_801B6FF8(Actor*); -void Aquas_801B7A24(Actor*); -void Aquas_801B7AF0(Actor *); -void Aquas_801B7C78(Actor*); -void Aquas_801B90DC(Actor*); -void Aquas_801B91A4(Actor*); -void Aquas_801BA108(Actor*); -void Aquas_801BA26C(Actor*); -void Aquas_801BA4E4(Actor*); -void Aquas_801BA57C(Actor *); -void Aquas_801BA6A4(Actor*); -void Aquas_801BAD7C(Actor*); -void Aquas_801BADF8(Actor*); -void Aquas_801BB204(Actor*); -void Aquas_801BB26C(Actor *); -void Aquas_801BB79C(Actor*); -void Aquas_801BC930(Actor*); -void Aquas_801BC9A0(Actor*); -void Aquas_801BD264(Actor*); -void Aquas_801BD54C(Actor*); -void Aquas_801BDE6C(Actor*); +void Aquas_BlueMarineShoot(Player*); +void Aquas_Effect366_Spawn(f32, f32, f32, f32, s32); +void Aquas_Effect366_Update(Effect*); +void Aquas_BlueMarine_Draw(Player*); +void Aquas_BlueMarineBoost(Player*); +void Aquas_BlueMarineBrake(Player*); +void Aquas_Actor255_Init(Actor *); +void Aquas_Actor255_Update(Actor*); +void Aquas_Actor255_Draw(Actor*); +void Aquas_Actor256_Init(Actor *); +void Aquas_Actor256_Update(Actor*); +void Aquas_Actor256_Draw(Actor*); +void Aquas_Actor257_Init(Actor *); +void Aquas_Actor257_Update(Actor*); +void Aquas_Actor257_Draw(Actor*); +void Aquas_AqPearl_Update(Actor*); +void Aquas_AqPearl_Draw(Actor*); +void Aquas_AqBacoon_Init(Boss*); +void Aquas_AqBacoon_Update(Boss*); +void Aquas_AqBacoon_Draw(Boss*); +void Aquas_AqSculpin_Draw(Actor*); +void Aquas_AqSculpin_Update(Actor*); +void Aquas_AqAnglerFish_Draw(Actor*); +void Aquas_AqAnglerFish_Init(Actor *); +void Aquas_AqAnglerFish_Update(Actor*); +void Aquas_AqSpindlyFish_Init(Actor *); +void Aquas_AqSpindlyFish_Update(Actor*); +void Aquas_AqSpindlyFish_Draw(Actor*); +void Aquas_AqGaroa_Init(Actor *); +void Aquas_AqGaroa_Update(Actor*); +void Aquas_AqGaroa_Draw(Actor*); +void Aquas_AqSquid_Update(Actor*); +void Aquas_AqSquid_Draw(Actor*); +void Aquas_AqSeaweed_Update(Actor*); +void Aquas_AqSeaweed_Draw(Actor*); +void Aquas_AqBoulder_Init(Actor *); +void Aquas_AqBoulder_Update(Actor*); +void Aquas_AqBoulder_Draw(Actor*); +void Aquas_AqCoral_Update(Actor*); +void Aquas_AqCoral_Draw(Actor*); +void Aquas_AqJellyfish_Init(Actor *); +void Aquas_AqJellyfish_Update(Actor*); +void Aquas_AqJellyfish_Draw(Actor*); +void Aquas_AqStoneColumn_Update(Actor*); +void Aquas_AqStoneColumn_Draw(Actor*); +void Aquas_AqFishGroup_Update(Actor*); +void Aquas_AqFishGroup_Draw(Actor*); void Aquas_801BDF14(void); -void Aquas_801BE1FC(Object_80*); -void Aquas_801BE3F8(Actor*); -void Aquas_801BEB1C(Actor*); -void Aquas_801BEC50(Boss*); -void Aquas_801BEC5C(Boss*); -void Aquas_801BEC68(Actor*); -void Aquas_801BEC74(Actor*); -void Aquas_801BEC80(Player*); +void Aquas_AqBump2_Draw(Scenery*); +void Aquas_AqOyster_Update(Actor*); +void Aquas_AqOyster_Draw(Actor*); +void Aquas_Boss301_Update(Boss*); +void Aquas_Boss301_Draw(Boss*); +void Aquas_Actor188_Update(Actor*); +void Aquas_Actor188_Draw(Actor*); +void Aquas_Update360(Player*); #endif diff --git a/include/i4.h b/include/i4.h index f3cc5ae6..6008ace6 100644 --- a/include/i4.h +++ b/include/i4.h @@ -1,8 +1,7 @@ #ifndef I4_H #define I4_H -#include "stdbool.h" -#include "structs.h" +#include "libc/stdbool.h" #include "sf64object.h" #include "sf64thread.h" #include "sf64player.h" @@ -11,44 +10,44 @@ extern s32 D_BO_801A03DC; extern Matrix D_BO_8019EE80; -void Bolse_8018EF6C(Player*); -void Bolse_8018F94C(Player*); -void Katina_80192E20(Player*); -void Katina_80197290(Player*); -void Katina_80197F10(Actor*); -void SectorZ_8019BA64(Player*); -void SectorZ_8019C85C(Player*); -void SectorZ_8019DD20(Actor*); +void Bolse_LevelStart(Player*); +void Bolse_LevelComplete(Player*); +void Katina_LevelStart(Player*); +void Katina_LevelComplete(Player*); +void Katina_SFTeamFlyTowardsCamera(Actor*); +void SectorZ_LevelStart(Player*); +void SectorZ_LevelComplete(Player*); +void SectorZ_LevelCompleteCsUpdate(Actor*); void OvlI4_CallFunction(u32, void*); -void Fortuna_80187960(Actor*); -void Fortuna_8018BA2C(void); -void Bolse_8018C158(Actor*); -void Bolse_80191ED8(void); -void Bolse_80192264(void); -void Katina_Boss316_Init(Boss *); -void Katina_80198594(Actor*); -void Katina_80198930(void); -void SectorZ_80199900(Actor *, s32); -void SectorZ_80199C60(Actor*); -void SectorZ_8019AB8C(Actor*); -void SectorZ_8019EA68(void); +void Fortuna_UpdateEvents(Actor*); +void Fortuna_LoadLevelObjects(void); +void Bolse_UpdateEventHandler(Actor*); +void Bolse_LoadLevelObjects(void); +void Bolse_DrawDynamicGround(void); +void Katina_KaSaucerer_Init(Boss *); +void Katina_UpdateEvents(Actor*); +void Katina_Init(void); +void SectorZ_MissileExplode(ActorAllRange* this, bool shotDown); +void SectorZ_Missile_Update(Actor*); +void SectorZ_UpdateEvents(Actor*); +void SectorZ_LoadLevelObjects(void); -void Fortuna_80188AD0(Actor*); -void Fortuna_80188FE4(Actor*); -void Bolse_80191054(Effect*); -void Bolse_80191180(Effect*); -void Bolse_801912FC(Boss*); -void Bolse_80191AFC(Boss*); -void Katina_80192984(Effect*); -void Katina_80192A68(Effect*); -void Katina_80193718(Boss*); -void Katina_80193B1C(Boss*); -void Katina_801946C4(Boss*); -void Katina_801968F4(Boss*); -void SectorZ_8019E234(Actor*); -void SectorZ_8019E3A8(Actor*); -void SectorZ_8019E454(Boss*); -void SectorZ_8019E98C(Boss*); +void Fortuna_FoRadar_Update(Actor*); +void Fortuna_FoRadar_Draw(Actor*); +void Bolse_Effect397_Update(Effect*); +void Bolse_Effect397_Draw(Effect*); +void Bolse_BoBaseCore_Update(Boss*); +void Bolse_BoBaseCore_Draw(Boss*); +void Katina_LaserEnergyParticlesUpdate(Effect*); +void Katina_LaserEnergyParticlesDraw(Effect*); +void Katina_KaFrontlineBase_Update(Boss*); +void Katina_KaFrontlineBase_Draw(Boss*); +void Katina_KaSaucerer_Update(Boss*); +void Katina_KaSaucerer_Draw(Boss*); +void SectorZ_SpaceJunkUpdate(Actor*); +void SectorZ_SpaceJunkDraw(Actor*); +void SectorZ_SzGreatFox_Update(Boss*); +void SectorZ_SzGreatFox_Draw(Boss*); #endif diff --git a/include/i5.h b/include/i5.h index 94014a39..aa26402e 100644 --- a/include/i5.h +++ b/include/i5.h @@ -1,8 +1,7 @@ #ifndef I5_H #define I5_H -#include "stdbool.h" -#include "structs.h" +#include "libc/stdbool.h" #include "sf64object.h" #include "sf64thread.h" #include "sf64player.h" @@ -12,42 +11,42 @@ extern Gfx* D_TI_801B7584[]; extern Gfx* D_TI_801B7608[]; extern Gfx* D_TI_801B769C[]; -extern f32 D_TI_801B83A8[]; +extern f32 aTiGorasHitbox[]; extern u8 D_MA_801BA1E8; extern f32 D_MA_801BE250[40]; extern s16 D_MA_801BE2F0[9]; -void Titania_8018769C(Player*); -void Titania_801882CC(Player*); -void Macbeth_801AC754(Player*); -void Macbeth_801AF8F4(Player*); +void Titania_LevelStart(Player*); +void Titania_LevelComplete(Player*); +void Macbeth_LevelStart(Player*); +void Macbeth_LevelComplete2(Player*); void Macbeth_801B28BC(Actor*); -void Macbeth_801B3D04(Player*); +void Macbeth_LevelComplete1(Player*); void OvlI5_CallFunction(u32 mode, void* ptr); -void Titania_8018769C(Player *); +void Titania_LevelStart(Player *); void Titania_80188F30(void); -void Titania_80189B80(Actor *); -void Titania_8018ADC4(Actor *); -void Titania_8018B720(Actor *); -void Titania_Actor231_Init(Actor *); -void Titania_8018BFB0(Actor *); +void Titania_TiFekuda_Init(Actor *); +void Titania_TiRasco_Init(Actor *); +void Titania_TiRasco_Dying(Actor *); +void Titania_TiBomb_Init(Actor *); +void Titania_TiDesertCrawler_Init(Actor *); void Titania_8018E3B0(Actor *); -void Titania_8018E3CC(Actor *); -void Titania_8018E5E8(Actor *); -void Titania_8018EFF0(Object_4C *); -void Titania_8018F0D8(Object_80 *); -void Titania_Boss306_Init(Boss *); +void Titania_TiDelphor_Init(Actor *); +void Titania_TiDelphorHead_Init(Actor *); +void Titania_TiCactus_Init(Sprite *); +void Titania_TiPillar_Init(Scenery *); +void Titania_TiGoras_Init(Boss *); void Titania_801990DC(Boss *); -void Macbeth_80199920(void); -void Macbeth_80199F8C(Actor *); -void Macbeth_801A3E70(Actor *); -void Macbeth_801A4660(Actor *); -void Macbeth_801A4AF8(Actor *); -void Macbeth_801A5E2C(Actor *); -void Macbeth_801A6134(Actor *); -void Macbeth_801A65E0(Object_80 *); -void Macbeth_801A7D98(Actor *); +void Macbeth_InitLevel(void); +void Macbeth_Train_Init(Actor *); +void Macbeth_MaMaRailroadSwitch_Init(Actor *); +void Macbeth_MaBoulder_Init(Actor *); +void Macbeth_MaRailwaySignal_Init(Actor *); +void Macbeth_LockBars_Init(Actor *); +void Macbeth_MaBarrier_Init(Actor *); +void Macbeth_MaProximityLight_Init(Scenery *); +void Macbeth_Actor207_Init(Actor *); void Macbeth_801ACFBC(void); void Macbeth_801AD080(void); void Ground_801B5110(f32, f32, f32); @@ -55,80 +54,80 @@ void Ground_801B58AC(Gfx **, f32); bool Ground_801B6AEC(f32, f32, f32); s32 Ground_801B6E20(f32, f32, f32 *, f32 *, f32 *); void Macbeth_801AD144(PlayerShot*); -void Titania_80189120(f32, f32, f32, f32, f32); +void Titania_Effect368_Spawn(f32, f32, f32, f32, f32); bool Macbeth_801A3C20(f32); bool Macbeth_801A3300(Player*, f32, f32); bool Macbeth_801A3790(Player*, f32, f32); -void Titania_80188F60(Effect*); -void Titania_80188FA8(Effect*); -void Titania_80189194(Actor*); -void Titania_801895B8(Actor*); -void Titania_80189AFC(Actor*); -void Titania_80189CC8(Actor*); -void Titania_8018A1C0(Actor*); -void Titania_8018A544(Actor*); -void Titania_8018AABC(Actor*); -void Titania_8018AB44(Actor*); -void Titania_8018B268(Actor*); -void Titania_8018B6AC(Actor*); -void Titania_8018B9D0(Actor*); -void Titania_8018BE84(Actor*); -void Titania_8018C8A8(Actor*); -void Titania_8018E2D8(Actor*); -void Titania_8018E54C(Actor*); -void Titania_8018E5B4(Actor*); -void Titania_8018E5F8(Actor*); -void Titania_8018EF14(Actor*); -void Titania_8018F038(Object_4C*); -void Titania_8018F4D8(Object_80*); -void Titania_8018F8B8(Object_80*); -void Titania_80197A94(Boss*); -void Titania_801982A8(Boss*); -void Macbeth_8019C778(Actor*); -void Macbeth_8019CE88(Actor*); -void Macbeth_8019D700(Actor*); -void Macbeth_8019E410(Actor*); -void Macbeth_8019EA60(Actor*); -void Macbeth_8019EE68(Actor*); -void Macbeth_8019FF9C(Actor*); -void Macbeth_801A0BD8(Object_80*); -void Macbeth_801A12C4(Actor*); -void Macbeth_801A23AC(Object_80*); -void Macbeth_801A2A78(Object_80*); -void Macbeth_801A2B24(Object_80*); -void Macbeth_801A2DD8(Object_80*); -void Macbeth_801A3240(Object_80*); -void Macbeth_801A3E98(Actor*); -void Macbeth_801A43BC(Actor*); -void Macbeth_801A46A0(Actor*); -void Macbeth_801A4A64(Actor*); -void Macbeth_801A4B24(Actor*); -void Macbeth_801A54E8(Actor*); -void Macbeth_801A57D0(Effect*); -void Macbeth_801A5AF0(Effect*); -void Macbeth_801A5B4C(Effect*); -void Macbeth_801A5D68(Effect*); -void Macbeth_801A5E54(Actor*); -void Macbeth_801A5F90(Actor*); -void Macbeth_801A5FD0(Actor*); -void Macbeth_801A6100(Actor*); -void Macbeth_801A6144(Actor*); -void Macbeth_801A6540(Actor*); -void Macbeth_801A6608(Object_80*); -void Macbeth_801A67C8(Actor*); -void Macbeth_801A68EC(Actor*); -void Macbeth_801A7E7C(Actor*); -void Macbeth_801AC294(Actor*); -void Macbeth_801AC438(Actor*); -void Macbeth_801AD6F0(Actor*); -void Macbeth_801ADAC8(Actor*); -void Macbeth_801ADD68(Actor*); -void Macbeth_801AE2C0(Actor*); -void Macbeth_801AE87C(Effect*); -void Macbeth_801AEAA0(Effect*); -void Macbeth_801AEC04(Actor*); -void Macbeth_801AEEFC(Actor*); +void Titania_Effect368_Update(Effect*); +void Titania_Effect368_Draw(Effect*); +void Titania_TiTerrain_Update(Actor*); +void Titania_TiDesertRover_Update(Actor*); +void Titania_TiDesertRover_Draw(Actor*); +void Titania_TiFekuda_Update(Actor*); +void Titania_TiFekuda_Draw(Actor*); +void Titania_TiBoulder_Update(Actor*); +void Titania_TiBoulder_Draw(Actor*); +void Titania_TiLandmine_Update(Actor*); +void Titania_TiRasco_Update(Actor*); +void Titania_TiRasco_Draw(Actor*); +void Titania_TiBomb_Update(Actor*); +void Titania_TiBomb_Draw(Actor*); +void Titania_TiDesertCrawler_Update(Actor*); +void Titania_TiDesertCrawler_Draw(Actor*); +void Titania_TiDelphor_Update(Actor*); +void Titania_TiDelphor_Draw(Actor*); +void Titania_TiDelphorHead_Update(Actor*); +void Titania_TiDelphorHead_Draw(Actor*); +void Titania_Cactus_Update(Sprite*); +void Titania_TiPillar_Update(Scenery*); +void Titania_TiPillar_Draw(Scenery*); +void Titania_TiGoras_Update(Boss*); +void Titania_TiGoras_Draw(Boss*); +void Macbeth_MaLocomotive_Update(Actor*); +void Macbeth_MaTrainCar4_Update(Actor*); +void Macbeth_MaTrainCar3_Update(Actor*); +void Macbeth_MaTrainCar5_Update(Actor*); +void Macbeth_MaTrainCar2_Update(Actor*); +void Macbeth_MaTrainCar7_Update(Actor*); +void Macbeth_MaTrainCar6_Update(Actor*); +void Macbeth_MaSwitchTrack_Update(Scenery*); +void Macbeth_Train_Draw(Actor*); +void Macbeth_TrainTrack_Draw(Scenery*); +void Macbeth_MaTower_Draw(Scenery*); +void Macbeth_IndicatorSign_Draw(Scenery*); +void Macbeth_MaTrainStopBlock_Update(Scenery*); +void Macbeth_MaTrainStopBlock_Draw(Scenery*); +void Macbeth_MaRailroadSwitch_Update(Actor*); +void Macbeth_MaRailroadSwitch_Draw(Actor*); +void Macbeth_MaBoulder_Update(Actor*); +void Macbeth_MaBoulder_Draw(Actor*); +void Macbeth_MaRailwaySignal_Update(Actor*); +void Macbeth_MaRailwaySignal_Draw(Actor*); +void Macbeth_Effect378_Update(Effect*); +void Macbeth_Effect378_Draw(Effect*); +void Macbeth_Effect380_Update(Effect*); +void Macbeth_Effect380_Draw(Effect*); +void Macbeth_MaHorizontalLockBar_Update(Actor*); +void Macbeth_MaHorizontalLockBar_Draw(Actor*); +void Macbeth_MaVerticalLockBar_Update(Actor*); +void Macbeth_MaVerticalLockBar_Draw(Actor*); +void Macbeth_MaBarrier_Update(Actor*); +void Macbeth_MaBarrier_Draw(Actor*); +void Macbeth_MaProximityLight_Draw(Scenery*); +void Macbeth_MaFallingBoulder_Update(Actor*); +void Macbeth_MaFallingBoulder_Draw(Actor*); +void Macbeth_Actor207_Update(Actor*); +void Macbeth_Actor207_Draw(Actor*); +void Macbeth_MaTrainCar1_Update(Actor*); +void Macbeth_MaBombDrop_Update(Actor*); +void Macbeth_MaBombDrop_Draw(Actor*); +void Macbeth_MaSpear_Update(Actor*); +void Macbeth_MaSpear_Draw(Actor*); +void Macbeth_Effect379_Update(Effect*); +void Macbeth_Effect379_Draw(Effect*); +void Macbeth_MaShockBox_Update(Actor*); +void Macbeth_MaShockBox_Draw(Actor*); s32 Macbeth_801A55D4(s32 , Vec3f* , Vec3f* , s32 ); #endif diff --git a/include/i6.h b/include/i6.h index 9a4ac8e3..30d820e2 100644 --- a/include/i6.h +++ b/include/i6.h @@ -1,8 +1,7 @@ #ifndef I6_H #define I6_H -#include "stdbool.h" -#include "structs.h" +#include "libc/stdbool.h" #include "sf64object.h" #include "sf64thread.h" #include "sf64player.h" @@ -17,57 +16,57 @@ extern f32 D_Andross_801A7F78; void Andross_80187530(Actor*); void Andross_80193C4C(Player*); void Andross_80195E44(Actor*); -void Venom2_80196BF8(Player*); -void Venom2_80196D88(Player*); -void SectorY_8019EE60(Player*); +void Venom2_LevelStart(Player*); +void Venom2_LevelComplete(Player*); +void SectorY_LevelComplete(Player*); void SectorY_8019FF00(Actor*); void SectorY_801A0AC0(Player*); -void Andross_8018769C(Actor*); +void Andross_Gate_Draw(Actor*); void OvlI6_CallFunction(u32 mode, void* ptr); void Andross_801878A8(void); void Andross_801888F4(Actor *); void Andross_80189214(void); void Andross_8018BDD8(void); void Andross_8018C390(Player*); -void Andross_Boss320_Init(Boss *); +void Andross_AndAndross_Init(Boss *); void Andross_801961AC(void); -void Venom2_80196314(Actor*); -void Venom2_80196968(void); -void SectorY_Boss314_Init(Boss *); -void SectorY_Actor204_Update(Actor*); -void SectorY_Actor204_Draw(Actor*); -void Turret_801A5AD4(Player*); -void Turret_801A5FC0(Player*); -void Turret_801A6164(Player *); +void Venom2_UpdateEvents(Actor*); +void Venom2_LoadLevelObjects(void); +void SectorY_SyShogun_Init(Boss *); +void SectorY_SyRobot_Update(Actor*); +void SectorY_SyRobot_Draw(Actor*); +void Turret_Update(Player*); +void Turret_UpdateCamera(Player*); +void Turret_Draw(Player *); -void Andross_801880E4(Actor*); -void Andross_80188448(Actor*); -void Andross_80188528(Actor*); -void Andross_80188660(Actor*); -void Andross_8018933C(Actor*); -void Andross_801893B8(Actor*); -void Andross_80189470(Actor*); -void Andross_80189724(Actor*); -void Andross_80189B70(Boss*); -void Andross_8018B8C0(Boss*); -void Andross_8018CAD4(Effect*); -void Andross_8018CF98(Effect*); -void Andross_8018DBF0(Boss*); -void Andross_801928C8(Boss*); -void Andross_80192E94(Actor*); -void Andross_80193244(Actor*); -void Andross_80193380(Object_80*); -void Andross_8019350C(Object_80*); -void Andross_8019356C(Object_80*); -void Andross_801935D4(Object_80*); -void Venom2_80196210(Boss*); -void Venom2_80196288(Boss*); -void SectorY_80197C64(Effect*); -void SectorY_80197CB8(Object_80*); -void SectorY_8019C888(Boss*); -void SectorY_8019E2C4(Boss*); -void SectorY_801A4E44(Object_80*); -void SectorY_801A52B8(Object_80*); +void Andross_ActorTeamArwing_Update(Actor*); +void Andross_ActorTeamArwing_Draw(Actor*); +void Andross_AndBrainWaste_Update(Actor*); +void Andross_AndBrainWaste_Draw(Actor*); +void Andross_AndBossTimer_Update(Actor*); +void Andross_AndRadio_Update(Actor*); +void Andross_AndJamesTrigger_Update(Actor*); +void Andross_AndExplosion_Update(Actor*); +void Andross_AndBrain_Update(Boss*); +void Andross_AndBrain_Draw(Boss*); +void Andross_Effect396_Update(Effect*); +void Andross_Effect396_Draw(Effect*); +void Andross_AndAndross_Update(Boss*); +void Andross_AndAndross_Draw(Boss*); +void Andross_AndLaserEmitter_Update(Actor*); +void Andross_AndLaserEmitter_Draw(Actor*); +void Andross_AndDoor_Update(Scenery*); +void Andross_AndDoor_Draw(Scenery*); +void Andross_AndPassage_Update(Scenery*); +void Andross_AndPassage_Draw(Scenery*); +void Venom2_Ve2Base_Update(Boss*); +void Venom2_Ve2Base_Draw(Boss*); +void SectorY_Effect354_Draw(Effect*); +void SectorY_Scenery156_Draw(Scenery*); +void SectorY_SyShogun_Update(Boss*); +void SectorY_SyShogun_Draw(Boss*); +void SectorY_SyShip3Destroyed_Update(Scenery*); +void SectorY_SyShip4Destroyed_Update(Scenery*); #endif diff --git a/include/macros.h b/include/macros.h index 870be9f3..a9e24eac 100644 --- a/include/macros.h +++ b/include/macros.h @@ -7,6 +7,9 @@ #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +#define SCREEN_MARGIN 8 + +#define TIME_IN_SECONDS(x) (x * 30); #define RAND_FLOAT(max) (Rand_ZeroOne()*(max)) #define RAND_INT(max) ((s32)(Rand_ZeroOne()*(max))) @@ -18,11 +21,10 @@ #define RAND_INT_SEEDED(max) ((s32)(Rand_ZeroOneSeeded()*(max))) #define RAND_FLOAT_CENTERED_SEEDED(width) ((Rand_ZeroOneSeeded()-0.5f)*(width)) -#define SEGMENTED_TO_VIRTUAL(segment) (segment) +#define SEGMENTED_TO_VIRTUAL(segment) LOAD_ASSET(segment) #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) - #define SIGN_OF(x) (((x) > 0) ? 1 : ((x) == 0) ? 0 : -1) #define SQ(x) ((x) * (x)) #define CUBE(x) ((x) * (x) * (x)) @@ -46,6 +48,8 @@ extern f32 COS_DEG(f32 angle); #define CYCLES_TO_MSEC(c) ((s32)CYCLES_TO_USEC(c)/1000) #define CYCLES_TO_MSEC_PC(c) (CYCLES_TO_USEC(c)/1000) +#define UNPACK_BYTE(data, bytenum) (((data) & (0xFF << ((bytenum) * 8))) >> ((bytenum) * 8)) + /* * Macros for libultra */ diff --git a/include/mods.h b/include/mods.h index 3d07f0a0..3581d98d 100644 --- a/include/mods.h +++ b/include/mods.h @@ -1,22 +1,90 @@ #ifndef MODS_H #define MODS_H + +/** + * Quick Boot: + * Define this variable to a game state to boot into that + * state. Two presets (map and main menu) are provided. + * For the full list of game states, see sf64thread.h. + */ +// #define MODS_BOOT_STATE 3 // main menu +// #define MODS_BOOT_STATE 4 // map + /** * Level Select: - * Press left or right on the D-PAD to choose which level to play, - * useful for debugging and speedrunning training. -*/ + * Use the D-Pad to select a level. Press L to start in + * an advanced level phase (warp zone or Andross fight). + * Useful for debugging and speedrunning training. + */ #define MODS_LEVEL_SELECT 0 - /** * Sound Effects Jukebox: * Ability to play sound effects inside the expert sound menu -*/ + * Use L to switch between jukebox and soundtrack + * Use D-PAD to move the cursor + * Use C buttons to edit values + */ #define MODS_SFX_JUKEBOX 0 +/** + * Auto debugger: + * Crash debugger appears without needing to enter code. + */ +#define MODS_AUTO_DEBUGGER 0 + +/** + * FPS Counter: + * Hold Z + R and press L to toggle FPS Display + */ +#define MODS_FPS_COUNTER 0 + +/** + * RAM modifier: + * Hold Z + R and press C> to cycle modes + * + * Cheats: + * Use D-Pad up and down to select a cheat + * Use D-Pad left and right to set its value + * Press L to set the value or twice to lock it + * + * Object Ram Editor: + * Watch up to seven addresses from the player and object arrays + * Use D-Pad to move the cursor and change values + * Press L to edit the highlighted value + */ +#define MODS_RAM_MOD 0 + +/** + * Spawner: + * Spawn Scenery, Actors, Bosses, Sprites, Items, Effects and even Event Actors. + * + * Controls: + * D-Pad left and right to set the object Id. + * C-Right to change between spawn modes. + * Analog stick sets the spawn position. + * L-Trigger to spawn the object. + * D-Pad UP to kill all objects. + * D-Pad DOWN to freeze/unfreeze the ship speed. + * WARNING: Spawning an object that's not loaded in memory will likely result in a crash. + */ +#define MODS_SPAWNER 0 + /* ************************* */ void Map_LevelSelect(void); +#if MODS_FPS_COUNTER == 1 +static void Play_RenderFps(void); +#endif + +#if MODS_RAM_MOD == 1 +void RamMod_Update(void); +#endif + +#if MODS_SPAWNER == 1 +void Spawner(void); +#endif + #endif diff --git a/include/prevent_bss_reordering3.h b/include/prevent_bss_reordering3.h new file mode 100644 index 00000000..3d690bfe --- /dev/null +++ b/include/prevent_bss_reordering3.h @@ -0,0 +1,28 @@ +#ifndef PREVENT_BSS_REORDERING3_H +#define PREVENT_BSS_REORDERING3_H + +/** + * See the explanation at prevent_bss_reordering.h + * + * Instead of producing 64 dummy declarations, this header only produces 32 + * dummy declarations + */ + +struct Dummy200 { int x; }; +struct Dummy201 { int x; }; +struct Dummy202 { int x; }; +struct Dummy203 { int x; }; +struct Dummy204 { int x; }; +struct Dummy205 { int x; }; +struct Dummy206 { int x; }; +struct Dummy207 { int x; }; +struct Dummy208 { int x; }; +struct Dummy209 { int x; }; +struct Dummy210 { int x; }; +struct Dummy211 { int x; }; +struct Dummy212 { int x; }; +struct Dummy213 { int x; }; +struct Dummy214 { int x; }; +struct Dummy215 { int x; }; + +#endif diff --git a/include/prevent_context_reordering.h b/include/prevent_context_reordering.h index 3dbec6b7..2d25120c 100644 --- a/include/prevent_context_reordering.h +++ b/include/prevent_context_reordering.h @@ -1,7 +1,7 @@ #ifndef PREVENT_CONTEXT_REORDERING_H #define PREVENT_CONTEXT_REORDERING_H -extern int Dummyhalf; +// extern int Dummyhalf; // struct Dummy0 {int x;}; // struct Dummy1 {int x;}; // struct Dummy2 {int x;}; @@ -17,12 +17,12 @@ extern int Dummyhalf; // struct Dummy12 {int x;}; // struct Dummy13 {int x;}; // struct Dummy14 {int x;}; -// struct Dummy15 {int x;}; -// struct Dummy16 {int x;}; -// struct Dummy17 {int x;}; -// struct Dummy18 {int x;}; -// struct Dummy19 {int x;}; -// struct Dummy20 {int x;}; +struct Dummy15 {int x;}; +struct Dummy16 {int x;}; +struct Dummy17 {int x;}; +struct Dummy18 {int x;}; +struct Dummy19 {int x;}; +struct Dummy20 {int x;}; struct Dummy21 {int x;}; struct Dummy22 {int x;}; struct Dummy23 {int x;}; @@ -74,60 +74,60 @@ struct Dummy68 {int x;}; struct Dummy69 {int x;}; struct Dummy70 {int x;}; struct Dummy71 {int x;}; -// struct Dummy72 {int x;}; -// struct Dummy73 {int x;}; -// struct Dummy75 { int x; }; -// struct Dummy76 { int x; }; -// struct Dummy77 { int x; }; -// struct Dummy78 { int x; }; -// struct Dummy79 { int x; }; -// struct Dummy80 { int x; }; -// struct Dummy81 { int x; }; -// struct Dummy82 { int x; }; -// struct Dummy83 { int x; }; -// struct Dummy84 { int x; }; -// struct Dummy85 { int x; }; -// struct Dummy86 { int x; }; -// struct Dummy87 { int x; }; -// struct Dummy88 { int x; }; -// struct Dummy89 { int x; }; -// struct Dummy90 { int x; }; -// struct Dummy91 { int x; }; -// struct Dummy92 { int x; }; -// struct Dummy93 { int x; }; -// struct Dummy94 { int x; }; -// struct Dummy95 { int x; }; -// struct Dummy96 { int x; }; -// struct Dummy97 { int x; }; -// struct Dummy98 { int x; }; -// struct Dummy99 { int x; }; -// struct Dummy100 { int x; }; -// struct Dummy101 { int x; }; -// struct Dummy102 { int x; }; -// struct Dummy103 { int x; }; -// struct Dummy104 { int x; }; -// struct Dummy105 { int x; }; -// struct Dummy106 { int x; }; -// struct Dummy107 { int x; }; -// struct Dummy108 { int x; }; -// struct Dummy109 { int x; }; -// struct Dummy110 { int x; }; -// struct Dummy111 { int x; }; -// struct Dummy112 { int x; }; -// struct Dummy113 { int x; }; -// struct Dummy114 { int x; }; -// struct Dummy115 { int x; }; -// struct Dummy116 { int x; }; -// struct Dummy117 { int x; }; -// struct Dummy118 { int x; }; -// struct Dummy119 { int x; }; -// struct Dummy120 { int x; }; -// struct Dummy121 { int x; }; -// struct Dummy122 { int x; }; -// struct Dummy123 { int x; }; -// struct Dummy124 { int x; }; -// struct Dummy125 { int x; }; -// struct Dummy126 { int x; }; -// struct Dummy127 { int x; }; +struct Dummy72 {int x;}; +struct Dummy73 {int x;}; +struct Dummy75 { int x; }; +struct Dummy76 { int x; }; +struct Dummy77 { int x; }; +struct Dummy78 { int x; }; +struct Dummy79 { int x; }; +struct Dummy80 { int x; }; +struct Dummy81 { int x; }; +struct Dummy82 { int x; }; +struct Dummy83 { int x; }; +struct Dummy84 { int x; }; +struct Dummy85 { int x; }; +struct Dummy86 { int x; }; +struct Dummy87 { int x; }; +struct Dummy88 { int x; }; +struct Dummy89 { int x; }; +struct Dummy90 { int x; }; +struct Dummy91 { int x; }; +struct Dummy92 { int x; }; +struct Dummy93 { int x; }; +struct Dummy94 { int x; }; +struct Dummy95 { int x; }; +struct Dummy96 { int x; }; +struct Dummy97 { int x; }; +struct Dummy98 { int x; }; +struct Dummy99 { int x; }; +struct Dummy100 { int x; }; +struct Dummy101 { int x; }; +struct Dummy102 { int x; }; +struct Dummy103 { int x; }; +struct Dummy104 { int x; }; +struct Dummy105 { int x; }; +struct Dummy106 { int x; }; +struct Dummy107 { int x; }; +struct Dummy108 { int x; }; +struct Dummy109 { int x; }; +struct Dummy110 { int x; }; +struct Dummy111 { int x; }; +struct Dummy112 { int x; }; +struct Dummy113 { int x; }; +struct Dummy114 { int x; }; +struct Dummy115 { int x; }; +struct Dummy116 { int x; }; +struct Dummy117 { int x; }; +struct Dummy118 { int x; }; +struct Dummy119 { int x; }; +struct Dummy120 { int x; }; +struct Dummy121 { int x; }; +struct Dummy122 { int x; }; +struct Dummy123 { int x; }; +struct Dummy124 { int x; }; +struct Dummy125 { int x; }; +struct Dummy126 { int x; }; +struct Dummy127 { int x; }; #endif diff --git a/include/sf64audio_external.h b/include/sf64audio_external.h index 23ae1fba..eea7762b 100644 --- a/include/sf64audio_external.h +++ b/include/sf64audio_external.h @@ -3,146 +3,90 @@ #include "sys.h" #include "audioseq_cmd.h" +#include "sfx.h" +#include "bgm.h" -#define AUDIO_PLAY_SFX(sfxId, srcPos, token) (Audio_PlaySfx((sfxId),(srcPos),(token),&gDefaultMod,&gDefaultMod,&gDefaultReverb)) -#define AUDIO_PLAY_BGM(seqId) Audio_PlaySequence(SEQ_PLAYER_BGM, (seqId), 0, -1) - -typedef enum { - /* 0 */ SOUNDMODE_STEREO, - /* 1 */ SOUNDMODE_HEADSET, - /* 2 */ SOUNDMODE_SURROUND, - /* 3 */ SOUNDMODE_MONO -} SoundMode; - -typedef enum BgmSeqIds { - /* 0 */ SEQ_ID_SFX, - /* 1 */ SEQ_ID_VOICE, - /* 2 */ SEQ_ID_CORNERIA, - /* 3 */ SEQ_ID_METEO, - /* 4 */ SEQ_ID_TITANIA, - /* 5 */ SEQ_ID_SECTOR_X, - /* 6 */ SEQ_ID_ZONESS, - /* 7 */ SEQ_ID_AREA_6, - /* 8 */ SEQ_ID_VENOM_1, - /* 9 */ SEQ_ID_SECTOR_Y, - /* 10 */ SEQ_ID_FORTUNA, - /* 11 */ SEQ_ID_SOLAR, - /* 12 */ SEQ_ID_BOLSE, - /* 13 */ SEQ_ID_KATINA, - /* 14 */ SEQ_ID_AQUAS, - /* 15 */ SEQ_ID_SECTOR_Z, - /* 16 */ SEQ_ID_MACBETH, - /* 17 */ SEQ_ID_ANDROSS, - /* 18 */ SEQ_ID_CO_BOSS_1, - /* 19 */ SEQ_ID_ME_BOSS, - /* 20 */ SEQ_ID_TI_BOSS, - /* 21 */ SEQ_ID_SX_BOSS, - /* 22 */ SEQ_ID_ZO_BOSS, - /* 23 */ SEQ_ID_A6_BOSS, - /* 24 */ SEQ_ID_VE_BOSS, - /* 25 */ SEQ_ID_SY_BOSS, - /* 26 */ SEQ_ID_UNK_26, - /* 27 */ SEQ_ID_SO_BOSS, - /* 28 */ SEQ_ID_BO_BOSS, - /* 29 */ SEQ_ID_KA_BOSS, - /* 30 */ SEQ_ID_AQ_BOSS, - /* 31 */ SEQ_ID_SZ_BOSS, - /* 32 */ SEQ_ID_MA_BOSS, - /* 33 */ SEQ_ID_AND_BOSS, - /* 34 */ SEQ_ID_TITLE, - /* 35 */ SEQ_ID_OPENING, - /* 36 */ SEQ_ID_MENU, - /* 37 */ SEQ_ID_CO_INTRO, - /* 38 */ SEQ_ID_GOOD_END, - /* 39 */ SEQ_ID_DEATH, - /* 40 */ SEQ_ID_GAME_OVER, - /* 41 */ SEQ_ID_UNK_41, - /* 42 */ SEQ_ID_ENDING, - /* 43 */ SEQ_ID_STAR_WOLF, - /* 44 */ SEQ_ID_INTRO_44, - /* 45 */ SEQ_ID_INTRO_45, - /* 46 */ SEQ_ID_VERSUS, - /* 47 */ SEQ_ID_VS_HURRY, - /* 48 */ SEQ_ID_CO_BOSS_2, - /* 49 */ SEQ_ID_BAD_END, - /* 50 */ SEQ_ID_ME_INTRO, - /* 51 */ SEQ_ID_INTRO_51, - /* 52 */ SEQ_ID_UNK_52, - /* 53 */ SEQ_ID_UNK_53, - /* 54 */ SEQ_ID_KATT, - /* 55 */ SEQ_ID_BILL, - /* 56 */ SEQ_ID_VS_MENU, - /* 57 */ SEQ_ID_UNK_57, - /* 58 */ SEQ_ID_WARP_ZONE, - /* 59 */ SEQ_ID_UNK_59, - /* 60 */ SEQ_ID_WORLD_MAP, - /* 61 */ SEQ_ID_AND_BRAIN, - /* 62 */ SEQ_ID_TO_ANDROSS, - /* 63 */ SEQ_ID_TRAINING, - /* 64 */ SEQ_ID_VE_CLEAR, - /* 65 */ SEQ_ID_BOSS_RESUME, - /* 66 */ SEQ_ID_MAX, - /* -1 */ SEQ_ID_NONE = 0xFFFF, -} BgmSeqIds; - -#define SEQ_FLAG 0x8000 - -extern f32 gDefaultSfxSource[]; -extern f32 gDefaultMod; -extern s8 gDefaultReverb; - -void Audio_PlaySfx(u32 sfxId, f32* sfxSource, u8 token, f32* freqMod, f32* volMod, s8* reverbAdd); -void Audio_KillSfxByBank(u8 bankId); -void Audio_StopSfxByBankAndSource(u8 bankId, f32* sfxSource); -void Audio_KillSfxByBankAndSource(u8 bankId, f32* sfxSource); -void Audio_KillSfxBySource(f32* sfxSource); -void Audio_KillSfxBySourceAndId(f32* sfxSource, u32 sfxId); -void Audio_KillSfxByTokenAndId(u8 token, u32 sfxId); -void Audio_KillSfxById(u32 sfxId); void Audio_PlayVoice(s32 msgId); void Audio_PlayVoiceWithoutBGM(u32 msgId); void Audio_ClearVoice(void); s32 Audio_GetCurrentVoice(void); s32 Audio_GetCurrentVoiceStatus(void); -void func_8001AF40(u8 unkVoiceParam); +void Audio_SetUnkVoiceParam(u8 unkVoiceParam); + u8* Audio_UpdateFrequencyAnalysis(void); -void func_8001C8B8(u8 playerId); -void func_8001CA24(u8 playerId); -void func_8001CB80(u8 playerId, u8 arg1); -void func_8001CCDC(u8 playerId, f32* sfxSource); -void func_8001CE28(u8 playerId, f32* sfxSource); -void func_8001CF60(f32* sfxSource); -void func_8001CFA8(f32 arg0); -void func_8001D034(f32* sfxSource, u32 sfxId, u8 semitones); -void func_8001D0B4(f32* sfxSource, u32 sfxId, f32 freqMod); -void func_8001D10C(f32* sfxSource, u32 sfxId); -void func_8001D15C(u8 arg0); -void func_8001D1C8(u8 arg0, u8 arg1); -void Audio_PlayEventSfx(f32* sfxSource, u16 arg1); -void Audio_StopEventSfx(f32* sfxSource, u16 arg1); -void Audio_SetBaseSfxReverb(s8 reverb); -void Audio_SetBgmParam(s8 bgmParam); -void Audio_PlaySequence(u8 seqPlayId, u16 seqId, u8 fadeinTime, u8 bgmParam); -void Audio_PlayFanfare(u16 seqId, u8 bgmVolume, u8 bgmFadeoutTime, u8 bgmFadeinTime); -void func_8001D520(void); -void func_8001D638(u8 arg0); -void func_8001D6DC(u8 arg0); -void func_8001D8A8(u8 audioType, u8 volume); -void Audio_PlaySoundTest(u8 enable); -void Audio_PlaySequenceDistorted(u8 seqPlayId, u16 seqId, u16 distortion, u8 fadeinTime, u8 unused); -void Audio_PlaySoundTestTrack(u8 trackNumber); +void Audio_SetVolume(u8 audioType, u8 volume); void Audio_FadeOutAll(u8 fadeoutTime); -void Audio_KillAllSfx(void); void Audio_SetAudioSpec(u8 unused, u16 specParam); -void Audio_PlayBgm(u16 seqId); + +#define AUDIO_SET_SPEC(sfxLayout, spec) Audio_SetAudioSpec(0, ((sfxLayout) << 8) | (spec)) +#define AUDIO_SET_SPEC_ALT(sfxLayout, spec) Audio_SetAudioSpec((sfxLayout), ((sfxLayout) << 8) | (spec)) // used by sys or related void AudioLoad_Init(void); -void func_80016A50(void); +void Audio_dummy_80016A50(void); void Audio_InitSounds(void); void Audio_Update(void); SPTask* AudioThread_CreateTask(void); void AudioThread_PreNMIReset(void); +typedef enum AudioType { + /* 0 */ AUDIO_TYPE_MUSIC, + /* 1 */ AUDIO_TYPE_VOICE, + /* 2 */ AUDIO_TYPE_SFX, + /* 3 */ AUDIO_TYPE_MAX, +} AudioType; + +typedef enum { + /* 0 */ SOUNDMODE_STEREO, + /* 1 */ SOUNDMODE_HEADSET, + /* 2 */ SOUNDMODE_SURROUND, + /* 3 */ SOUNDMODE_MONO +} SoundMode; + +typedef enum OptionSoundMode { + /* 0 */ OPTIONSOUND_STEREO, + /* 1 */ OPTIONSOUND_MONO, + /* 2 */ OPTIONSOUND_HEADSET, + /* 3 */ OPTIONSOUND_MAX, +} OptionSoundMode; + +typedef enum { + /* 0 */ SFXCHAN_0, + /* 1 */ SFXCHAN_1, + /* 2 */ SFXCHAN_2, + /* 3 */ SFXCHAN_3 +} SfxChannelLayout; + +typedef enum { + /* 0 */ AUDIOSPEC_CO, + /* 1 */ AUDIOSPEC_ME, + /* 2 */ AUDIOSPEC_TI, + /* 3 */ AUDIOSPEC_SX, + /* 4 */ AUDIOSPEC_ZO, + /* 5 */ AUDIOSPEC_A6, + /* 6 */ AUDIOSPEC_6, + /* 7 */ AUDIOSPEC_SY, + /* 8 */ AUDIOSPEC_FO, + /* 9 */ AUDIOSPEC_SO, + /* 10 */ AUDIOSPEC_BO, + /* 11 */ AUDIOSPEC_KA, + /* 12 */ AUDIOSPEC_AQ, + /* 13 */ AUDIOSPEC_SZ, + /* 14 */ AUDIOSPEC_MA, + /* 15 */ AUDIOSPEC_15, + /* 16 */ AUDIOSPEC_16, + /* 17 */ AUDIOSPEC_17, + /* 18 */ AUDIOSPEC_18, + /* 19 */ AUDIOSPEC_19, + /* 20 */ AUDIOSPEC_20, + /* 21 */ AUDIOSPEC_21, + /* 22 */ AUDIOSPEC_22, + /* 23 */ AUDIOSPEC_23, + /* 24 */ AUDIOSPEC_24, + /* 25 */ AUDIOSPEC_25, + /* 26 */ AUDIOSPEC_26, + /* 27 */ AUDIOSPEC_27, + /* 28 */ AUDIOSPEC_28, +} AudioSpecID; #endif diff --git a/include/sf64audio_provisional.h b/include/sf64audio_provisional.h index 9ff0ed45..54e556f3 100644 --- a/include/sf64audio_provisional.h +++ b/include/sf64audio_provisional.h @@ -1,7 +1,7 @@ /** * This file is provisional, some of the structs need to be corrected, and others might be unused * This file is only meant to be used as reference to help audio decompilation -*/ + */ #ifndef SF64_AUDIO_H #define SF64_AUDIO_H @@ -57,7 +57,7 @@ typedef void (*AudioCustomUpdateFunction)(void); // Both left and right channels #define DMEM_2CH_SIZE (2 * DMEM_1CH_SIZE) -#define AIBUF_LEN (170 * SAMPLES_PER_FRAME) // number of samples +#define AIBUF_LEN (170 * SAMPLES_PER_FRAME) // number of samples #define AIBUF_SIZE (AIBUF_LEN * SAMPLE_SIZE) // number of bytes // Filter sizes @@ -70,6 +70,9 @@ typedef void (*AudioCustomUpdateFunction)(void); #define AUDIO_RELOCATED_ADDRESS_START K0BASE +#define AUDIOLOAD_SYNC 0 +#define AUDIOLOAD_ASYNC 1 + typedef enum { /* 0 */ ADSR_STATE_DISABLED, /* 1 */ ADSR_STATE_INITIAL, @@ -99,10 +102,21 @@ typedef enum { } SampleCodec; typedef enum { + /* 0 */ SAMPLES_SFX, + /* 1 */ SAMPLES_MAP, + /* 2 */ SAMPLES_VOICE, + /* 3 */ SAMPLES_INST, + /* 4 */ SAMPLES_MAX, + /* -1 */ SAMPLES_NONE = 255, +} SampleBank; + +#define SAMPLES_NONE_U 255U + +typedef enum { /* 0 */ SEQUENCE_TABLE, /* 1 */ FONT_TABLE, /* 2 */ SAMPLE_TABLE -} SampleBankTableType; +} AudioTableType; typedef enum { /* 0 */ CACHE_TEMPORARY, @@ -112,6 +126,14 @@ typedef enum { } AudioCacheType; typedef enum { + /* 0 */ CACHEPOLICY_0, + /* 1 */ CACHEPOLICY_1, + /* 2 */ CACHEPOLICY_2, + /* 3 */ CACHEPOLICY_3, + /* 4 */ CACHEPOLICY_4, +} AudioCachePolicy; + +typedef enum { /* 0 */ LOAD_STATUS_NOT_LOADED, // the entry data is not loaded /* 1 */ LOAD_STATUS_IN_PROGRESS, // the entry data is being loaded asynchronously /* 2 */ LOAD_STATUS_COMPLETE, // the entry data is loaded, it may be discarded if not stored persistently, and @@ -122,6 +144,26 @@ typedef enum { /* 5 */ LOAD_STATUS_PERMANENTLY_LOADED // the entry data is loaded in the permanent pool, it won't be discarded } AudioLoadStatus; +typedef enum { + /* 0 */ SLOW_LOAD_WAITING, + /* 1 */ SLOW_LOAD_START, + /* 2 */ SLOW_LOAD_LOADING, + /* 3 */ SLOW_LOAD_DONE +} SlowLoadState; + +typedef enum { + /* 0 */ SLOW_LOAD_STATUS_0, + /* 1 */ SLOW_LOAD_STATUS_1, + /* 2 */ SLOW_LOAD_STATUS_2, + /* 3 */ SLOW_LOAD_STATUS_3 +} SlowLoadStatus; + +typedef enum AudioResetStatus { + /* 0 */ AUDIORESET_READY, + /* 1 */ AUDIORESET_WAIT, + /* 2 */ AUDIORESET_BLOCK, +} AudioResetStatus; + typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction); struct Note; @@ -173,15 +215,18 @@ typedef struct { /* 0x00 */ u32 start; /* 0x04 */ u32 end; /* 0x08 */ u32 count; - /* 0x0C */ char unk_0C[0x4]; - /* 0x10 */ s16 predictorState[16]; // only exists if count != 0. 8-byte aligned -} AdpcmLoop; // size = 0x30 (or 0x10) + /* 0x10 */ u64 predictorState[4]; // only exists if count != 0. 8-byte aligned +} AdpcmLoop; // size = 0x30 or 0x10, 0x8 aligned typedef struct { /* 0x00 */ s32 order; /* 0x04 */ s32 numPredictors; - /* 0x08 */ s16 book[1]; // size 8 * order * numPredictors. 8-byte aligned -} AdpcmBook; // size >= 0x8 +#ifdef AVOID_UB + /* 0x08 */ u64 book[]; // size 8 * order * numPredictors. +#else + /* 0x08 */ u64 book[1]; // size 8 * order * numPredictors. +#endif +} AdpcmBook; // size >= 8, 0x8 aligned typedef struct { /* 0x00 */ u32 codec : 4; // The state of compression or decompression @@ -245,7 +290,7 @@ typedef struct { /* 0x0C */ s32 startPos; // start pos in ring buffer /* 0x10 */ s16 lengthA; // first length in ring buffer (from startPos, at most until end) /* 0x12 */ s16 lengthB; // second length in ring buffer (from pos 0) -} ReverbRingBufferItem; // size = 0x14 +} ReverbRingBufferItem; // size = 0x14 typedef struct { /* 0x000 */ u8 resampleFlags; @@ -255,10 +300,10 @@ typedef struct { /* 0x004 */ u8 downsampleRate; /* 0x005 */ s8 unk_05; /* 0x006 */ u16 windowSize; - /* 0x008 */ u16 unk_08; + /* 0x008 */ u16 decayRatio; // determines how much reverb persists /* 0x00A */ u16 unk_0A; - /* 0x00C */ u16 decayRatio; // determines how much reverb persists - /* 0x00E */ u16 unk_0E; + /* 0x00C */ u16 leakRtL; + /* 0x00E */ u16 leakLtR; /* 0x010 */ s32 nextRingBufPos; /* 0x014 */ s32 unk_20; /* 0x018 */ s32 bufSizePerChan; @@ -296,7 +341,7 @@ typedef struct { /* 0x004 */ u8 seqId; /* 0x005 */ u8 defaultFont; /* 0x006 */ u8 unk_06[1]; - /* 0x007 */ s8 unk_07[1]; // indexed like an array, but that can't be + /* 0x007 */ s8 unk_07[1]; // indexed like an array, but that can't be /* 0x008 */ u16 tempo; // seqTicks per minute /* 0x00A */ u16 tempoAcc; // tempo accumulation, used in a discretized algorithm to apply tempo. /* 0x00C */ u16 tempoChange; // Used to adjust the tempo without altering the base tempo. @@ -312,7 +357,7 @@ typedef struct { /* 0x02C */ f32 fadeVolumeMod; /* 0x030 */ f32 appliedFadeVolume; // /* 0x034 */ f32 bend; - /* 0x034 */ struct SequenceChannel* channels[16]; + /* 0x034 */ struct SequenceChannel* channels[SEQ_NUM_CHANNELS]; /* 0x074 */ SeqScriptState scriptState; /* 0x090 */ u8* shortNoteVelocityTable; /* 0x094 */ u8* shortNoteGateTimeTable; @@ -320,8 +365,8 @@ typedef struct { /* 0x0D8 */ s32 skipTicks; /* 0x0DC */ u32 scriptCounter; /* 0x0E0 */ char - padE4[0x6C]; // unused struct members for sequence/sound font dma management, according to sm64 decomp -} SequencePlayer; // size = 0x14C + padE4[0x6C]; // unused struct members for sequence/sound font dma management, according to sm64 decomp +} SequencePlayer; // size = 0x14C typedef struct { /* 0x0 */ u8 decayIndex; // index used to obtain adsr decay rate from adsrDecayTable @@ -430,7 +475,7 @@ typedef struct SequenceChannel { /* 0x7C */ NotePool notePool; /* 0xBC */ s8 seqScriptIO[8]; // bridge between .seq script and audio lib, "io ports" /* 0xC4 */ u16 unkC4; -} SequenceChannel; // size = 0xC8 +} SequenceChannel; // size = 0xC8 // Might also be known as a Track, according to sm64 debug strings (?). typedef struct SequenceLayer { @@ -462,14 +507,14 @@ typedef struct SequenceLayer { /* 0x38 */ s16 delay; /* 0x3A */ s16 gateDelay; /* 0x3C */ s16 delay2; - /* 0x40 */ struct Note *note; + /* 0x40 */ struct Note* note; /* 0x44 */ Instrument* instrument; - /* 0x48 */ TunedSample *tunedSample; - /* 0x4C */ SequenceChannel *channel; + /* 0x48 */ TunedSample* tunedSample; + /* 0x4C */ SequenceChannel* channel; /* 0x50 */ SeqScriptState state; /* 0x6C */ AudioListItem listItem; /* 0x7C */ char pad7C[4]; -} SequenceLayer; //size = 0x80 +} SequenceLayer; // size = 0x80 typedef struct UnkStruct_800097A8 { /* 0x00 */ s16* unk_0; @@ -480,7 +525,7 @@ typedef struct UnkStruct_800097A8 { /* 0x14 */ struct SampleDma* unk_14; /* 0x18 */ s16 unk18; /* 0x1A */ char pad1A[6]; -} UnkStruct_800097A8; /* size = 0x20 */ +} UnkStruct_800097A8; /* size = 0x20 */ typedef struct { /* 0x000 */ s16 adpcmdecState[16]; @@ -506,9 +551,7 @@ typedef struct { /* 0x0C */ NoteSynthesisBuffers* synthesisBuffers; /* 0x10 */ s16 curVolLeft; /* 0x12 */ s16 curVolRight; - /* 0x14 */ char unk_14[0x6]; - /* 0x1A */ u8 combFilterNeedsInit; - /* 0x1C */ char unk_1C[0x4]; + /* 0x14 */ char unk_14[0xC]; } NoteSynthesisState; // size = 0x20 typedef struct { @@ -557,17 +600,16 @@ typedef struct { struct { /* 0x01 */ u8 reverbIndex : 3; /* 0x01 */ u8 bookOffset : 3; - // /* 0x01 */ u8 isSyntheticWave : 1; /* 0x01 */ u8 isSyntheticWave : 1; /* 0x01 */ u8 hasTwoParts : 1; } bitField1; - /* 0x02 */ u8 unk_02; - /* 0x03 */ u8 unk_03; - /* 0x04 */ u8 unk_04; - /* 0x05 */ u8 unk_05; - /* 0x06 */ u16 unk_06; - /* 0x08 */ u16 unk_08; - /* 0x0A */ u16 unk_0A; + /* 0x02 */ u8 gain; + /* 0x03 */ u8 leftDelaySize; + /* 0x04 */ u8 rightDelaySize; + /* 0x05 */ u8 reverb; + /* 0x06 */ u16 panVolLeft; + /* 0x08 */ u16 panVolRight; + /* 0x0A */ u16 resampleRate; /* 0x0C */ s16* waveSampleAddr; } NoteSubEu; // size = 0x10 @@ -582,9 +624,9 @@ typedef struct Note { typedef struct { /* 0x00 */ u8 downsampleRate; /* 0x02 */ u8 windowSize; - /* 0x02 */ u16 unk_2; - /* 0x04 */ u16 decayRatio; // determines how much reverb persists - /* 0x06 */ u16 unk_6; + /* 0x02 */ u16 decayRatio; // determines how much reverb persists + /* 0x04 */ u16 leakRtL; + /* 0x06 */ u16 leakLtR; } ReverbSettings; // size = 0x8 /** @@ -593,7 +635,7 @@ typedef struct { */ typedef struct { /* 0x00 */ u32 samplingFrequency; // Target sampling rate in Hz - /* 0x04 */ u8 unk_04; + /* 0x04 */ u8 numBuffers; /* 0x05 */ u8 numNotes; /* 0x06 */ u8 numReverbs; /* 0x08 */ ReverbSettings* reverbSettings; @@ -617,7 +659,7 @@ typedef struct { * processing audio commands. This struct parameterizes that buffer. */ typedef struct { - /* 0x00 */ s16 specUnk4; + /* 0x00 */ s16 count; /* 0x02 */ u16 samplingFrequency; // Target sampling rate in Hz /* 0x04 */ u16 aiSamplingFrequency; // True sampling rate of the audio interface (AI), see `osAiSetFrequency` /* 0x06 */ s16 samplesPerFrameTarget; @@ -752,7 +794,7 @@ typedef struct { /* 0x14 */ u32 chunkSize; /* 0x18 */ OSMesg retMsg; /* 0x1C */ OSMesgQueue* retQueue; - /* 0x20 */ OSMesgQueue msgQueue; + /* 0x20 */ OSMesgQueue mesgQueue; /* 0x38 */ OSMesg msg; /* 0x3C */ OSIoMesg ioMesg; } AudioAsyncLoad; // size = 0x54 @@ -768,7 +810,7 @@ typedef struct { /* 0x14 */ s32 bytesRemaining; /* 0x18 */ s8* status; // write-only /* 0x1C */ Sample sample; - /* 0x2C */ OSMesgQueue msgQueue; + /* 0x2C */ OSMesgQueue mesgQueue; /* 0x44 */ OSMesg msg; /* 0x48 */ OSIoMesg ioMesg; } AudioSlowLoad; // size = 0x60 @@ -779,7 +821,14 @@ typedef struct { } AudioSlowLoadBuffer; // size = 0xC4 typedef struct { - /* 0x00 */ u32 romAddr; + /* 0x00 */ s16 numEntries; + /* 0x02 */ s16 unkMediumParam; + /* 0x04 */ uintptr_t romAddr; + /* 0x08 */ char pad[8]; +} AudioTableBase; + +typedef struct { + /* 0x00 */ uintptr_t romAddr; /* 0x04 */ u32 size; /* 0x08 */ s8 medium; /* 0x09 */ s8 cachePolicy; @@ -789,12 +838,9 @@ typedef struct { } AudioTableEntry; // size = 0x10 typedef struct { - /* 0x00 */ s16 numEntries; - /* 0x02 */ s16 unkMediumParam; - /* 0x04 */ u32 romAddr; - /* 0x08 */ char pad[0x8]; - /* 0x10 */ AudioTableEntry entries[1]; // (dynamic size) -} AudioTable; // size >= 0x20 + /* 0x00 */ AudioTableBase base; + /* 0x10 */ AudioTableEntry entries[]; // (dynamic size) +} AudioTable; // size >= 0x20 typedef struct SampleDma { /* 0x00 */ u8* ramAddr; @@ -807,13 +853,6 @@ typedef struct SampleDma { } SampleDma; // size = 0x10 typedef struct { - /* 0x00 */ OSTask task; - /* 0x40 */ OSMesgQueue* msgQueue; - /* 0x44 */ void* unk_44; // probably a message that gets unused. - /* 0x48 */ char unk_48[0x8]; -} AudioTask; // size = 0x50 - -typedef struct { /* 0x00 */ u8 reverbVol; /* 0x01 */ u8 gain; // Increases volume by a multiplicative scaling factor. Represented as a UQ4.4 number /* 0x02 */ u8 pan; @@ -863,18 +902,18 @@ typedef struct { typedef struct { /* 0x0 */ u16 seqId; - /* 0x2 */ u16 unk_2; + /* 0x2 */ u16 audioSpec; /* 0x4 */ u8 bgmParam; } SoundTestTrack; // size: 0x6 typedef struct { - /* 0x00 */ f32 *xPos; - /* 0x04 */ f32 *yPos; - /* 0x08 */ f32 *zPos; + /* 0x00 */ f32* xPos; + /* 0x04 */ f32* yPos; + /* 0x08 */ f32* zPos; /* 0x0C */ u8 token; - /* 0x10 */ f32 *freqMod; - /* 0x14 */ f32 *volMod; - /* 0x18 */ s8 *reverbAdd; + /* 0x10 */ f32* freqMod; + /* 0x14 */ f32* volMod; + /* 0x18 */ s8* reverbAdd; /* 0x1C */ f32 distance; /* 0x20 */ u32 priority; /* 0x24 */ u32 sfxId; @@ -887,7 +926,7 @@ typedef struct { typedef struct { /* 0x00 */ u32 sfxId; - /* 0x04 */ f32* pos; + /* 0x04 */ f32* source; /* 0x08 */ u8 token; /* 0x0C */ f32* freqMod; /* 0x10 */ f32* volMod; @@ -897,7 +936,7 @@ typedef struct { typedef struct { /* 0x0 */ u32 priority; // lower is more prioritized /* 0x4 */ u8 entryIndex; -} ActiveSfx; // size 0x8 +} ActiveSfx; // size 0x8 typedef struct { /* 0x0 */ u8 seqId; @@ -931,19 +970,19 @@ typedef struct { /* 0x014 */ u32 tempoCmd; /* 0x018 */ u16 tempoOriginal; // stores the original tempo before modifying it (to reset back to) /* 0x01C */ Modulation tempo; - /* 0x02C */ u32 setupCmd[5]; // a queue of cmds to execute once the player is disabled - /* 0x040 */ u8 setupCmdTimer; // only execute setup commands when the timer is at 0. - /* 0x041 */ u8 setupCmdNum; // number of setup commands requested once the player is disabled + /* 0x02C */ u32 setupCmd[5]; // a queue of cmds to execute once the player is disabled + /* 0x040 */ u8 setupCmdTimer; // only execute setup commands when the timer is at 0. + /* 0x041 */ u8 setupCmdNum; // number of setup commands requested once the player is disabled /* 0x042 */ u8 setupFadeTimer; /* 0x044 */ ChannelModulation channelMod[16]; /* 0x244 */ u16 freqModChannelFlags; /* 0x246 */ u16 volChannelFlags; - /* 0x248 */ u16 seqId; // active seqId currently playing. Resets when sequence stops - /* 0x24A */ u16 prevSeqId; // last seqId played on a player. Does not reset when sequence stops + /* 0x248 */ u16 seqId; // active seqId currently playing. Resets when sequence stops + /* 0x24A */ u16 prevSeqId; // last seqId played on a player. Does not reset when sequence stops /* 0x24C */ u16 channelPortMask; - /* 0x250 */ u32 startSeqCmd; // This name comes from MM + /* 0x250 */ u32 startSeqCmd; // This name comes from MM /* 0x254 */ u8 isWaitingForFonts; // This name comes from MM -} ActiveSequence; // size 0x258 +} ActiveSequence; // size 0x258 typedef struct { /* 0x0 */ f32 volMod; @@ -976,42 +1015,12 @@ typedef struct { #define SEQ_HEX0(seqId) ((seqId) >> 28 & 0xFF) #define SEQ_HEX1(seqId) (((seqId) & (0xF << 24)) >> 24 & 0xFF) -#define SEQ_BYTE4(seqId) ((seqId) & 0xFF) -#define SEQ_BYTE3(seqId) (((seqId) & (0xFF << 8)) >>8 & 0xFF) -#define SEQ_BYTE2(seqId) (((seqId) & (0xFF << 16)) >>13 & 0xFFFF) - -#define SFX_BANK_MASK(sfxId) ((sfxId) & (0xF << 28)) -#define SFX_STATE_MASK(sfxId) ((sfxId) & (1 << 24)) -#define SFX_RANGE_MASK(sfxId) ((sfxId) & (3 << 16)) -#define SFX_IMPORTANCE_MASK(sfxId) ((sfxId) & (0xFF << 8)) - -#define SFX_BANK_SHIFT(sfxId) (((sfxId) >> 28) & 0xFF) -#define SFX_STATE_SHIFT(sfxId) (((sfxId) >> 24)) -#define SFX_RANGE_SHIFT(sfxId) (((sfxId) >> 16) & 0xFF) -#define SFX_IMPORTANCE_SHIFT(sfxId) (((sfxId) >> 8) & 0xFF) - -#define SFX_BANK(sfxId) SFX_BANK_SHIFT(SFX_BANK_MASK(sfxId)) -#define SFX_STATE(sfxId) SFX_STATE_SHIFT(SFX_STATE_MASK(sfxId)) -#define SFX_BIT04(sfxId) ((sfxId) & (1 << 27)) -#define SFX_BIT05(sfxId) ((sfxId) & (1 << 26)) -#define SFX_BIT06(sfxId) ((sfxId) & (1 << 25)) -#define SFX_BIT08(sfxId) ((sfxId) & (1 << 23)) // adds random variance to freqMod -#define SFX_BIT09(sfxId) ((sfxId) & (1 << 22)) // turns off distance-dependent frequency increase -#define SFX_BIT10(sfxId) ((sfxId) & (1 << 21)) // makes reverb increase with distance -#define SFX_BIT11(sfxId) ((sfxId) & (1 << 20)) // makes priority independent of distance -#define SFX_BIT12(sfxId) ((sfxId) & (1 << 19)) -#define SFX_BIT13(sfxId) ((sfxId) & (1 << 18)) // makes distance ignore z position? probably more -#define SFX_RANGE(sfxId) SFX_RANGE_SHIFT(SFX_RANGE_MASK(sfxId)) -#define SFX_IMPORTANCE(sfxId) SFX_IMPORTANCE_SHIFT(SFX_IMPORTANCE_MASK(sfxId)) -#define SFX_INDEX(sfxId) ((sfxId) & 0xFF) - -#define SFX_PACK(bank, range, importance, index, state, bit4, bit5, bit6, bit8, bit9, bit10, bit11, bit12, bit13) \ - (((bank)<<28)|((range)<<16)|((importance)<<8)|(index)|((state)<<24)|\ - ((bit4)<<27)|((bit5)<<23)|((bit6)<<23)|((bit8)<<23)|((bit9)<<22)|\ - ((bit10)<<21)|((bit11)<<20)|((bit12)<<19)|((bit13)<<18)) +#define SEQ_BYTE4(seqId) ((seqId) &0xFF) +#define SEQ_BYTE3(seqId) (((seqId) & (0xFF << 8)) >> 8 & 0xFF) +#define SEQ_BYTE2(seqId) (((seqId) & (0xFF << 16)) >> 13 & 0xFFFF) // audio_synthesis -void func_80008780(f32 *, s32, f32 *); +void func_80008780(f32*, s32, f32*); Acmd* func_80009B64(Acmd* aList, s32* cmdCount, s16* aiBufStart, s32 aiBufLen); // audio_effects @@ -1027,7 +1036,7 @@ void* AudioHeap_Alloc(AudioAllocPool* pool, u32 size); void AudioHeap_InitPool(AudioAllocPool* pool, void* ramAddr, u32 size); void AudioHeap_InitMainPools(s32 initPoolSize); void* AudioHeap_AllocCached(s32 tableType, s32 size, s32 cache, s32 id); -s32 AudioHeap_SearchCaches(s32 tableType, s32 cache, s32 id); +void* AudioHeap_SearchCaches(s32 tableType, s32 cache, s32 id); s32 AudioHeap_ResetStep(void); void* AudioHeap_SearchPermanentCache(s32 tableType, s32 id); u8* AudioHeap_AllocPermanent(s32 tableType, s32 id, u32 size); @@ -1061,7 +1070,7 @@ void func_800128B4(void); void func_80012964(NotePool* pool); void func_80012AC4(NotePool* pool, s32); void func_80012C40(Note* note); -Note *func_8001301C(SequenceLayer* layer); +Note* func_8001301C(SequenceLayer* layer); void func_800132E8(void); // audio_seqplayer @@ -1075,18 +1084,15 @@ void func_800168BC(void); // audio_thread void AudioThread_ScheduleProcessCmds(void); -u32 AudioThread_GetAsyncLoadStatus(u32 *); +u32 AudioThread_GetAsyncLoadStatus(u32*); u8* AudioThread_GetFontsForSequence(s32 seqId, u32* outNumFonts); -s32 func_8001ED34(void); +bool AudioThread_ResetComplete(void); void AudioThread_ResetAudioHeap(s32); void AudioThread_Init(void); extern AudioTable gSampleBankTableInit; -// extern AudioTableEntry gSampleBankTableInitEntries[]; extern AudioTable gSeqTableInit; -// extern AudioTableEntry gSeqTableInitEntries[]; extern AudioTable gSoundFontTableInit; -// extern AudioTableEntry gSoundFontTableInitEntries[]; extern u8 gSeqFontTableInit[]; extern AudioSpec gAudioSpecs[]; @@ -1131,10 +1137,10 @@ extern AudioCommonPoolSplit gTemporaryCommonPoolSplit; extern u8 gSampleFontLoadStatus[64]; extern u8 gFontLoadStatus[64]; extern u8 gSeqLoadStatus[256]; -extern volatile u8 gResetStatus; +extern volatile u8 gAudioResetStep; extern u8 gAudioSpecId; extern s32 gResetFadeoutFramesLeft; -extern u8 sAudioContextPad1000[0x1000];// 0x1000 gap +extern u8 sAudioContextPad1000[0x1000]; // 0x1000 gap extern Note* gNotes; // 0x4 extern SequencePlayer gSeqPlayers[4]; @@ -1170,10 +1176,10 @@ extern u8 gSampleDmaReuseQueue1RdPos; extern u8 gSampleDmaReuseQueue2RdPos; extern u8 gSampleDmaReuseQueue1WrPos; extern u8 gSampleDmaReuseQueue2WrPos; -extern AudioTable *gSequenceTable; +extern AudioTable* gSequenceTable; extern AudioTable* gSoundFontTable; -extern AudioTable *gSampleBankTable; -extern u8 *gSeqFontTable; +extern AudioTable* gSampleBankTable; +extern u8* gSeqFontTable; extern s16 gNumSequences; extern SoundFont* gSoundFontList; // 0x4 @@ -1197,7 +1203,7 @@ extern s16* gAiBuffers[3]; extern s16 gAiBuffLengths[3]; extern u32 gAudioRandom; extern u32 D_80155D88; -extern volatile u32 gResetTimer; +extern volatile u32 gAudioResetTimer; extern u64 gAudioContextEnd[]; @@ -1214,9 +1220,9 @@ extern u16 gHaasEffectDelaySizes[64]; extern EnvelopePoint gDefaultEnvelope[]; extern NoteSubEu gZeroNoteSub; extern NoteSubEu gDefaultNoteSub; -extern s16 D_800DD200[]; -extern f32 gHeadsetPanVolume[]; -extern f32 gStereoPanVolume[]; -extern f32 gDefaultPanVolume[]; +extern s16 gD_800DD200[]; +extern f32 gHeadsetPanVolume[128]; +extern f32 gStereoPanVolume[128]; +extern f32 gDefaultPanVolume[128]; #endif diff --git a/include/sf64context.h b/include/sf64context.h index 3b1063b4..600d5247 100644 --- a/include/sf64context.h +++ b/include/sf64context.h @@ -6,190 +6,190 @@ #include "sf64object.h" #include "sf64player.h" -extern s32 gOverlaySetup; -extern s32 gOverlayStage; -extern s32 D_ctx_80177824; // some sort of flag -extern s32 D_ctx_8017782C; // some sort of flag. all range related? +extern s32 gSceneId; +extern s32 gSceneSetup; +extern s32 gClearPlayerInfo; +extern s32 D_ctx_8017782C; extern GameState gGameState; -extern s32 D_Timer_8017783C; // next game state timer? -extern s32 D_ctx_80177844; // timer for vs item spawn +extern s32 gNextGameStateTimer; +extern s32 gVsItemSpawnTimer; extern OptionState gOptionMenuStatus; -extern s32 D_ctx_80177854; // pause-related state -extern s32 D_ctx_80177868; // some sort of state. pause-related? +extern s32 gPlayState; +extern s32 D_ctx_80177868; extern LevelMode gLevelMode; extern DrawMode gDrawMode; extern s32 gPlayerNum; extern s32 gCamCount; extern s32 gTeamShields[6]; extern s32 gSavedTeamShields[6]; -extern UNK_TYPE D_ctx_801778F0[6]; +extern s32 gPrevPlanetSavedTeamShields[6]; extern s32 gTeamDamage[6]; -extern u8 D_ctx_80177930; // next planet path -extern f32 gGroundLevel; +extern u8 gMissionStatus; +extern f32 gGroundHeight; extern f32 D_ctx_80177950; -extern f32 D_ctx_80177968; -extern f32 D_ctx_80177970; +extern f32 gPlayerTurnRate; +extern f32 gPlayerTurnStickMod; extern f32 gCsCamEyeX; extern f32 gCsCamEyeY; extern f32 gCsCamEyeZ; extern f32 gCsCamAtX; extern f32 gCsCamAtY; extern f32 gCsCamAtZ; -extern Vec3f gPlayerCamEye; -extern Vec3f gPlayerCamAt; +extern Vec3f gPlayCamEye; +extern Vec3f gPlayCamAt; extern bool gExpertMode; extern s32 D_ctx_80177A10[10]; extern f32 D_ctx_80177A48[10]; extern s32 gCsFrameCount; -extern u8 D_ctx_80177A98; -extern u8 D_ctx_80177AB0; -extern u8 D_ctx_80177AC8; -extern s32 D_ctx_80177AE0; +extern u8 gDrawGround; +extern u8 gDrawBackdrop; // Venom Andross is the only level with multiple backdrops +extern u8 gAqDrawMode; +extern s32 gTitleState; extern s32 gMainController; -extern s32 D_ctx_80177B40; -extern PlanetId gCurrentPlanet; // D_ctx_80177B48 // Arrow pointer? -extern s32 D_ctx_80177B50[7]; -extern s32 D_ctx_80177B70[7]; -extern PlanetId D_ctx_80177B90[7]; -extern s32 D_ctx_80177BB0[7]; -extern s32 D_ctx_80177BD8[22]; // overruns D_ctx_80177C30? -extern s32 D_ctx_80177C38[6]; +extern s32 gMapState; +extern s32 gMissionNumber; +extern s32 gMissionTeamStatus[7]; +extern s32 gMissionHitCount[7]; +extern PlanetId gMissionPlanet[7]; +extern s32 gMissionMedal[7]; +extern s32 gPlanetPathStatus[]; +extern s32 gPrevPlanetTeamShields[6]; extern s32 D_ctx_80177C58[6]; -extern u8 gSoundMode; +extern u8 gOptionSoundMode; extern s32 gVolumeSettings[3]; extern u16 gBgmSeqId; extern u8 gLevelType; -extern s32 D_ctx_80177CA0; +extern s32 gSavedObjectLoadIndex; extern UNK_TYPE F_80177CA8; -extern f32 D_ctx_80177CB0; +extern f32 gSavedPathProgress; extern UNK_TYPE F_80177CB8; -extern f32 D_ctx_80177CC0; -extern f32 D_ctx_80177CC8; -extern f32 D_ctx_80177CE8; -extern f32 D_ctx_80177D08; -extern f32 D_ctx_80177D20; -extern f32 D_ctx_80177D38; -extern f32 D_ctx_80177D50; -extern f32 D_ctx_80177D68; +extern f32 gWaterLevel; +extern f32 gPathGroundScroll; +extern f32 gPathTexScroll; +extern f32 gPathVelZ; +extern f32 gPathProgress; +extern f32 gRadioPortraitScaleY; +extern f32 gRadioTextBoxScaleY; +extern f32 gRadioMsgRadioId; extern UNK_TYPE F_80177D80; extern UNK_TYPE F_80177DE8; extern s32 gGameFrameCount; -extern s32 D_ctx_80177DC8; -extern s32 D_ctx_80177E70; -extern s32 D_ctx_80177E78; -extern s32 D_ctx_80177E80; -extern Vec3f D_ctx_80177E88; -extern Vec3f D_ctx_80177F10; +extern s32 gObjectLoadIndex; +extern s32 gPrevEventActorIndex; +extern s32 gFormationLeaderIndex; +extern s32 gRingPassCount; +extern Vec3f gFormationInitRot; +extern Vec3f gFormationInitPos; extern UNK_TYPE F_80178020; -extern s32 D_ctx_8017812C; +extern s32 gGroundClipMode; extern LevelId gCurrentLevel; -extern s32 D_ctx_8017827C; +extern s32 gLevelPhase; extern s32 gBossActive; -extern s32 D_ctx_8017828C; -extern s32 D_ctx_80178294; +extern bool gKillEventActors; +extern s32 gUseDynaFloor; extern s32 gRadioState; -extern s32 D_ctx_801782A4; -extern s32 D_Timer_801782AC; -extern s32 D_Timer_801782B4; +extern s32 gCurrentRadioPortrait; +extern s32 gRadioStateTimer; +extern s32 gRadioMouthTimer; extern s32 D_ctx_801782C0; extern s32 D_ctx_801782C8; extern s32 D_ctx_801782D0; -extern s32 D_ctx_801782D8; +extern s32 gRadioMsgCharIndex; extern UNK_TYPE F_801782E0; -extern s32 D_ctx_801782E8; +extern s32 gRadioMsgId; extern UNK_TYPE F_801782F0; -extern s32 D_ctx_801782F8; -extern s32 D_ctx_80178300; -extern u16* D_ctx_80178308; -extern ObjectInit* D_ctx_80178310; +extern s32 gMsgCharIsPrinting; +extern bool gHideRadio; +extern u16* gRadioMsg; +extern ObjectInit* gLevelObjects; extern s32 gFogRed; extern s32 gFogGreen; extern s32 gFogBlue; extern s32 gFogAlpha; -extern s32 D_ctx_80178340; // alpha something -extern s32 D_ctx_80178348; // red something -extern s32 D_ctx_80178350; // green something -extern s32 D_ctx_80178354; // blue something -extern s32 D_ctx_80178358; // alpha target -extern s32 D_ctx_8017835C; // alpha step -extern s32 D_ctx_80178360; // 2 lights second color -extern s32 D_ctx_80178364; -extern s32 D_ctx_80178368; -extern f32 D_ctx_8017836C; // 2 lights second color brightness -extern f32 D_ctx_80178370; // Vec3f? -extern f32 D_ctx_80178374; -extern f32 D_ctx_80178378; -extern s32 D_ctx_8017837C; -extern u32 D_ctx_80178380[4]; // player alphas -extern s32 D_ctx_80178390[4]; // player reds -extern s32 D_ctx_801783A0[4]; // player greens -extern s32 D_ctx_801783B0[4]; // player blues +extern s32 gFillScreenAlpha; +extern s32 gFillScreenRed; +extern s32 gFillScreenGreen; +extern s32 gFillScreenBlue; +extern s32 gFillScreenAlphaTarget; +extern s32 gFillScreenAlphaStep; +extern s32 gLight3R; +extern s32 gLight3G; +extern s32 gLight3B; +extern f32 gLight3Brightness; +extern f32 gLight3x; +extern f32 gLight3y; +extern f32 gLight3z; +extern s32 gFadeoutType; +extern u32 gPlayerGlareAlphas[4]; +extern s32 gPlayerGlareReds[4]; +extern s32 gPlayerGlareGreens[4]; +extern s32 gPlayerGlareBlues[4]; extern s32 D_ctx_801783C0[4]; -extern f32 D_ctx_801783D0; // something x translate -extern f32 D_ctx_801783D4; // something y translate -extern s32 gFogNear; //near -extern s32 gFogFar; //far +extern f32 gSunViewX; +extern f32 gSunViewY; +extern s32 gFogNear; +extern s32 gFogFar; extern UNK_TYPE F_801783E0[12]; -extern s32 D_ctx_80178410; -extern f32 D_ctx_80178414; -extern f32 D_ctx_80178418; +extern s32 gStarCount; +extern f32 gStarWarpDistortion; +extern f32 gCOComplete2CamRotY; extern UNK_TYPE F_8017841C; -extern f32 D_ctx_80178420; -extern f32 D_ctx_80178424; -extern f32 D_ctx_80178428; -extern f32 D_ctx_8017842C; -extern f32 D_ctx_80178430; +extern f32 gStarfieldX; +extern f32 gStarfieldY; +extern f32 gStarfieldRoll; +extern f32 gStarfieldScrollX; +extern f32 gStarfieldScrollY; extern UNK_TYPE F_80178434; extern UNK_TYPE F_80178438; extern UNK_TYPE F_8017843C; -extern f32 D_ctx_80178440; -extern f32 D_ctx_80178444; -extern f32 D_ctx_80178448; -extern f32 D_ctx_80178450[3]; -extern f32 D_ctx_80178460[3]; -extern f32 D_ctx_80178470[3]; +extern f32 gBossDeathCamAtX; +extern f32 gBossDeathCamAtY; +extern f32 gBossDeathCamAtZ; +extern f32 gCsTeamTargetsX[3]; +extern f32 gCsTeamTargetsY[3]; +extern f32 gCsTeamTargetsZ[3]; extern f32 gCameraShakeY; extern s32 gCameraShake; extern s32 D_ctx_80178484; -extern bool D_ctx_80178488; +extern bool gLoadLevelObjects; extern UNK_TYPE F_8017848C; extern UNK_TYPE F_80178490; extern s32 D_ctx_80178494; -extern f32 D_ctx_80178498; -extern f32 D_ctx_8017849C; -extern f32 D_ctx_801784A0; -extern s32 D_ctx_801784A4; +extern f32 gShotHitPosZ; +extern f32 gShotHitPosX; +extern f32 gShotHitPosY; +extern s32 gZoDodoraWaypointCount; extern UNK_TYPE F_801784A8; -extern s32 D_ctx_801784AC; +extern GroundType gGroundType; extern UNK_TYPE F_801784B0; extern UNK_TYPE F_801784B4; -extern f32 D_ctx_801784B8; // effective Vec3f -extern f32 D_ctx_801784BC; -extern f32 D_ctx_801784C0; -extern f32 D_ctx_801784C4; // effective Vec3f -extern f32 D_ctx_801784C8; -extern f32 D_ctx_801784CC; -extern f32 D_ctx_801784D0; // effective Vec3f -extern f32 D_ctx_801784D4; -extern f32 D_ctx_801784D8; -extern s32 gLight1x; // Vec3i light direction +extern f32 gLight1xRot; +extern f32 gLight1yRot; +extern f32 gLight1zRot; +extern f32 gLight1xRotTarget; +extern f32 gLight1yRotTarget; +extern f32 gLight1zRotTarget; +extern f32 gEnvLightxRot; +extern f32 gEnvLightyRot; +extern f32 gEnvLightzRot; +extern s32 gLight1x; extern s32 gLight1y; extern s32 gLight1z; -extern f32 D_ctx_801784E8; -extern f32 D_ctx_801784EC; // effective Vec3f? -extern f32 D_ctx_801784F0; -extern f32 D_ctx_801784F4; -extern f32 D_ctx_801784F8; // effective Vec3f -extern f32 D_ctx_801784FC; -extern f32 D_ctx_80178500; -extern s32 gLight2x; // Vec3i light direction alternate +extern f32 gLight1rotStep; +extern f32 gLight2xRot; +extern f32 gLight2yRot; +extern f32 gLight2zRot; +extern f32 gLight2xRotTarget; +extern f32 gLight2yRotTarget; +extern f32 gLight2zRotTarget; +extern s32 gLight2x; extern s32 gLight2y; extern s32 gLight2z; -extern f32 D_ctx_80178510; +extern f32 gLight2rotStep; extern UNK_TYPE F_801784514; extern UNK_TYPE F_801784518; extern UNK_TYPE F_80178451C; -extern f32 D_ctx_80178520; // effective Vec3f +extern f32 D_ctx_80178520; extern f32 D_ctx_80178524; extern f32 D_ctx_80178528; extern UNK_TYPE F_80178452C; @@ -197,39 +197,39 @@ extern UNK_TYPE F_801784530; extern UNK_TYPE F_801784534; extern f32 D_ctx_80178538; extern f32 D_ctx_8017853C; -extern s32 D_ctx_80178540; +extern s32 gLight2colorStep; extern s32 D_ctx_80178544; -extern s32 gLight1R; // Color32 light color 1 +extern s32 gLight1R; extern s32 gLight1G; extern s32 gLight1B; -extern s32 gAmbientR; // Color32 ambient color +extern s32 gAmbientR; extern s32 gAmbientG; extern s32 gAmbientB; extern UNK_TYPE F_801784560; -extern s32 gLight2R; // Color32 light color 2 +extern s32 gLight2R; extern s32 gLight2G; extern s32 gLight2B; -extern s32 D_ctx_80178570; // Color32 light color 2 modifier? -extern s32 D_ctx_80178574; -extern s32 D_ctx_80178578; -extern s32 D_ctx_80161A70; // Color32? +extern s32 gLight2RTarget; +extern s32 gLight2GTarget; +extern s32 gLight2BTarget; +extern s32 D_ctx_80161A70; extern s32 D_ctx_80161A74; extern s32 D_ctx_80161A78; extern s32 D_ctx_80161A7C; extern s32 D_ctx_80161A80; extern s32 D_ctx_80161A84; -extern s32 D_ctx_80161A88; -extern s32 D_ctx_80161A8C; +extern s32 gGroundSurface; +extern s32 gSavedGroundSurface; extern u8 gGoldRingCount[4]; -extern u8 D_ctx_80161A94[4]; +extern u8 gSavedGoldRingCount[4]; extern s32 gHitCount; extern s32 gSavedHitCount; extern s16 gLifeCount[4]; extern LaserStrength gLaserStrength[4]; -extern s32 D_ctx_80161AB8; +extern s32 gCullObjects; extern UNK_TYPE F_80161AC0[16]; -extern Object_80 gObjects80[50]; -extern Object_4C gObjects4C[40]; +extern Scenery gScenery[50]; +extern Sprite gSprites[40]; extern Actor gActors[60]; extern Boss gBosses[4]; extern Effect gEffects[100]; @@ -238,62 +238,62 @@ extern PlayerShot gPlayerShots[16]; extern TexturedLine gTexturedLines[100]; extern RadarMark gRadarMarks[65]; extern BonusText gBonusText[10]; -extern s32 D_ctx_80176550[2]; -extern f32 D_ctx_80176558[2][100]; -extern f32 D_ctx_80176878[2][100]; -extern f32 D_ctx_80176B98[2][100]; -extern f32 D_ctx_80176EB8[2][100]; -extern f32 D_ctx_801771D8[2][100]; -extern f32 D_ctx_80177500[2][100]; -extern u16 D_ctx_80177828; // enemy shot speed? -extern u8 D_ctx_80177830; // show level complete status overlay -extern s32 D_ctx_80177838; // level clear related -extern s32 D_ctx_80177840; // timer for mission accomplished scrren +extern s32 gMeMoraStatus[2]; +extern f32 gMeMoraXpos[2][100]; +extern f32 gMeMoraYpos[2][100]; +extern f32 gMeMoraZpos[2][100]; +extern f32 gMeMoraXrot[2][100]; +extern f32 gMeMoraYrot[2][100]; +extern f32 gMeMoraZrot[2][100]; +extern u16 gEnemyShotSpeed; +extern u8 gShowLevelClearStatusScreen; +extern s32 gLevelStartStatusScreenTimer; +extern s32 gLevelClearScreenTimer; extern s32 gBossHealthBar; -extern s32 D_ctx_80177850; // bonus text related. set to 15 but never read +extern s32 D_ctx_80177850; extern s32 D_ctx_80177858[4]; -extern s32 D_ctx_80177870[4]; +extern s32 gPlayerForms[4]; extern s32 gHandicap[4]; extern VsStage gVersusStage; -extern s32 D_ctx_801778A4; -extern s32 D_ctx_801778AC; -extern s32 D_ctx_801778C8; +extern s32 gVsPointsToWin; +extern s32 gVsMatchType; +extern s32 gVsTimeTrialLimit; extern bool gVersusMode; extern u16 gBoostButton[4]; extern u16 gBrakeButton[4]; extern u16 gShootButton[4]; extern u16 gBombButton[4]; extern f32 D_ctx_80177958[4]; -extern s32 D_ctx_8017796C; +extern s32 gTeamLowHealthMsgTimer; extern OSContPad* gInputHold; extern OSContPad* gInputPress; -extern u8* D_ctx_80177984; +extern u8* gControllerRumble; extern s32 D_ctx_80177990[4]; extern f32 D_ctx_801779A8[4]; -extern u8 D_ctx_801779BC; +extern u8 gPauseEnabled; extern s32 gChargeTimers[4]; -extern f32 D_ctx_801779E4; -extern f32 D_ctx_801779F4; -extern s32 D_Timer_80177A00[4]; -extern s32 D_Timer_80177A38[4]; -extern s32 D_Timer_80177A70[4]; -extern s32 D_Timer_80177A88[4]; -extern f32 D_ctx_80177AA0[4]; -extern f32 D_ctx_80177AB8[4]; -extern s32 D_ctx_80177AD0[4]; -extern s32 D_ctx_80177AE8[4]; -extern s32 D_ctx_80177B00[4][4]; -extern u8 D_Timer_80177B44; -extern u8 D_ctx_80177B4C; -extern u8 D_ctx_80177B6C; -extern u8 gGreatFoxIntact; -extern u8 D_ctx_80177BAC; -extern u16 D_Timer_80177BD0[4]; -extern u16 D_ctx_80177C30[4]; -extern s32 D_ctx_80177C50; -extern s32 D_ctx_80177C70; -extern s32 D_ctx_80177C78; -extern s32 D_ctx_80177C8C; +extern f32 gPathVelX; +extern f32 gPathVelY; +extern s32 gUturnDownTimers[4]; +extern s32 gUturnBrakeTimers[4]; +extern s32 gLoopDownTimers[4]; +extern s32 gLoopBoostTimers[4]; +extern f32 gMuzzleFlashScale[4]; +extern f32 gShieldAlpha[4]; +extern s32 gHasShield[4]; +extern s32 gShieldTimer[4]; +extern s32 gVsLockOnTimers[4][4]; +extern u8 gStartAndrossFightTimer; +extern u8 gSoShieldsEmpty; +extern u8 gCoUturnCount; +extern u8 gGreatFoxIntact; +extern u8 gTiStartLandmaster; +extern u16 gControllerRumbleTimers[4]; +extern u16 gPlayerScores[4]; +extern s32 gCircleWipeFrame; +extern s32 gFovYMode; +extern s32 gTraining360MsgTimer; +extern s32 gTraining360MsgIndex; extern s32 D_ctx_80177C94; extern s32 D_ctx_80177C9C; extern s32 D_ctx_80177CA4; @@ -301,42 +301,42 @@ extern s32 D_ctx_80177CAC; extern s32 D_ctx_80177CB4; extern s32 D_ctx_80177CBC; extern s32 D_ctx_80177CC4; -extern s32 D_ctx_80177CD0[6]; -extern s32 D_ctx_80177CF0[6]; +extern s32 gStarWolfTeamAlive[6]; +extern s32 gSavedStarWolfTeamAlive[6]; extern s32 gRightWingHealth[4]; extern s32 gLeftWingHealth[4]; -extern s32 D_ctx_80177D40[4]; -extern s32 D_ctx_80177D58[4]; -extern s32 D_ctx_80177D70[4]; -extern s32 D_ctx_80177D88[4]; +extern s32 gRightWingFlashTimer[4]; +extern s32 gLeftWingFlashTimer[4]; +extern s32 gRightWingDebrisTimer[4]; +extern s32 gLeftWingDebrisTimer[4]; extern s32 gBombCount[4]; -extern s32 D_ctx_80177DB8[4]; -extern s32 D_ctx_80177DD0[4][10]; -extern s32 D_ctx_80177E74; -extern s32 D_ctx_80177E7C; -extern s32 D_ctx_80177E84; -extern Vec3f D_ctx_80177E98[10]; +extern s32 gVsPoints[4]; +extern s32 gVsKills[4][10]; +extern s32 gVsMatchWon; +extern bool gVsMatchStart; +extern bool gChangeTo360; +extern Vec3f gTeamArrowsViewPos[10]; extern f32 D_ctx_80177F20[65]; extern f32 D_ctx_80178028[65]; extern f32 D_ctx_80178130[65]; extern u8 D_ctx_80178238[65]; extern Player* gPlayer; -extern f32* D_ctx_80178288; -extern f32* D_ctx_80178290; -extern u32* D_ctx_80178298; +extern f32* gStarOffsetsX; +extern f32* gStarOffsetsY; +extern u32* gStarFillColors; extern UNK_TYPE F_801782A0; -extern Object_58* gObjects58; +extern Scenery360* gScenery360; extern UNK_TYPE F_801782B0; -extern s32 D_ctx_801782B8; +extern s32 gDrawSmallRocks; extern s32 D_ctx_801782BC; -extern PosRot* D_ctx_801782C4; +extern PosRot* gZoDodoraPosRots; extern f32* D_ctx_801782CC; extern f32* D_ctx_801782D4; extern f32* D_ctx_801782DC; extern f32* D_ctx_801782E4; extern f32* D_ctx_801782EC; extern UNK_TYPE F_801782F4; -extern s32 D_ctx_801782FC; +extern s32 gDynaFloorTimer; extern UNK_TYPE F_80178304; extern UNK_TYPE F_8017830C; extern UNK_TYPE F_80178314; diff --git a/include/sf64dma.h b/include/sf64dma.h index 6c58fcd6..e5b04f4a 100644 --- a/include/sf64dma.h +++ b/include/sf64dma.h @@ -68,14 +68,28 @@ #define SEGMENT_BSS_END(segment) (segment ## _BSS_END) #define SEGMENT_BSS_SIZE(segment) ((uintptr_t)SEGMENT_BSS_END(segment) - (uintptr_t)SEGMENT_BSS_START(segment)) -u8 Overlay_Load(u8, u8); -void Overlay_InitDma(void); +#define ROM_SEGMENT(file) { SEGMENT_ROM_START(file), SEGMENT_ROM_END(file) } + +#define OVERLAY_OFFSETS(file) \ + { { SEGMENT_ROM_START(file), SEGMENT_ROM_END(file) }, \ + { SEGMENT_BSS_START(file), SEGMENT_BSS_END(file) }, \ + { SEGMENT_TEXT_START(file), SEGMENT_TEXT_END(file) }, \ + { SEGMENT_DATA_START(file), SEGMENT_RODATA_END(file) } } + +#define NO_SEGMENT { NULL, NULL } + +#define NO_OVERLAY { NO_SEGMENT, NO_SEGMENT, NO_SEGMENT, NO_SEGMENT } + +u8 Load_SceneSetup(u8 sceneId, u8 sceneSetup); +void Load_InitDmaAndMsg(void); typedef struct { /* 0x0 */ void* start; /* 0x4 */ void* end; } SegmentOffset; // size = 0x8 +#define SEGMENT_SIZE(segment) ((ptrdiff_t) ((uintptr_t) (segment).end - (uintptr_t) (segment).start)) + typedef struct { /* 0x00 */ SegmentOffset rom; /* 0x08 */ SegmentOffset bss; @@ -86,44 +100,18 @@ typedef struct { typedef struct { /* 0x00 */ OverlayOffsets ovl; /* 0x20 */ SegmentOffset assets[15]; -} OverlayInit; // size = 0x98 +} Scene; // size = 0x98 typedef struct { /* 0x0 */ void* vRomAddress; - /* 0x8 */ SegmentOffset pRom; - /* 0xC */ s32 compFlag; + /* 0x4 */ SegmentOffset pRom; + /* 0xC */ bool compFlag; } DmaEntry; // size = 0x10; -extern DmaEntry gDmaTable[]; // 178A70 +#define DMA_ENTRY(file) { file##_ROM_START, { file##_ROM_START, file##_ROM_END }, false } +#define DMA_ENTRY_NONE { NULL, { NULL, NULL }, false } -extern OverlayInit sNoOvl_Logo[1]; // sets segment 15 with no overlay -extern OverlayInit sOvlending_Ending[6]; // overlay EF0260 -extern OverlayInit sOvlmenu_Title[1]; // EBFBE0 -extern OverlayInit sOvlmenu_Option[1]; // EBFBE0 -extern OverlayInit sOvlmenu_Map[1]; // EBFBE0 -extern OverlayInit sOvlmenu_GameOver[1]; // EBFBE0 -extern OverlayInit sOvli1_Corneria[1]; // fox_i1 -extern OverlayInit sOvli2_Meteo[2]; // fox_i2 -extern OverlayInit sOvli5_Titania[6]; // E6A810 -extern OverlayInit sOvli2_SectorX[2]; // fox_i2 -extern OverlayInit sOvli4_SectorZ[1]; // i4 -extern OverlayInit sOvli3_Aquas[1]; // i3 -extern OverlayInit sOvli3_Area6[1]; // i3 -extern OverlayInit sOvli4_Fortuna[2]; // i4 -extern OverlayInit sOvli3_Unk4[1]; // i3 -extern OverlayInit sOvli6_SectorY[1]; // E9F1D0 -extern OverlayInit sOvli3_Solar[1]; // i3 -extern OverlayInit sOvli3_Zoness[1]; // i3 -extern OverlayInit sOvli1_Venom1[1]; // fox_i1 -extern OverlayInit sOvli6_Andross[1]; // E9F1D0 -extern OverlayInit sOvli6_Venom2[2]; // E9F1D0 -extern OverlayInit sOvli2_Setup20[1]; // fox_i2 -extern OverlayInit sOvli4_Bolse[1]; // i4 -extern OverlayInit sOvli4_Katina[1]; // i4 -extern OverlayInit sOvli5_Macbeth[2]; // E6A810 -extern OverlayInit sOvli1_Training[1]; // fox_i1 -extern OverlayInit sOvli2_Versus[2]; // fox_i2 -extern OverlayInit sUnused_Overlay[1]; // EFFA40 +extern DmaEntry gDmaTable[]; // 178A70 DECLARE_SEGMENT(makerom); DECLARE_SEGMENT(main); @@ -168,9 +156,18 @@ DECLARE_SEGMENT(ast_macbeth); DECLARE_SEGMENT(ast_warp_zone); DECLARE_SEGMENT(ast_title); DECLARE_SEGMENT(ast_map); +DECLARE_SEGMENT(ast_map_en); +DECLARE_SEGMENT(ast_map_fr); +DECLARE_SEGMENT(ast_map_de); DECLARE_SEGMENT(ast_option); +DECLARE_SEGMENT(ast_option_en); +DECLARE_SEGMENT(ast_option_fr); +DECLARE_SEGMENT(ast_option_de); DECLARE_SEGMENT(ast_vs_menu); -DECLARE_SEGMENT(ast_font); +DECLARE_SEGMENT(ast_vs_menu_en); +DECLARE_SEGMENT(ast_vs_menu_fr); +DECLARE_SEGMENT(ast_vs_menu_de); +DECLARE_SEGMENT(ast_text); DECLARE_SEGMENT(ast_font_3d); DECLARE_SEGMENT(ast_andross); DECLARE_SEGMENT(ast_logo); @@ -180,6 +177,9 @@ DECLARE_SEGMENT(ast_ending_award_back); DECLARE_SEGMENT(ast_ending_expert); DECLARE_SEGMENT(ast_training); DECLARE_SEGMENT(ast_radio); +DECLARE_SEGMENT(ast_radio_en); +DECLARE_SEGMENT(ast_radio_fr); +DECLARE_SEGMENT(ast_radio_de); DECLARE_SEGMENT(ovl_i1); DECLARE_SEGMENT(ovl_i2); DECLARE_SEGMENT(ovl_i3); @@ -190,4 +190,8 @@ DECLARE_SEGMENT(ovl_menu); DECLARE_SEGMENT(ovl_ending); DECLARE_SEGMENT(ovl_unused); + + + + #endif diff --git a/include/sf64event.h b/include/sf64event.h new file mode 100644 index 00000000..6e12fa46 --- /dev/null +++ b/include/sf64event.h @@ -0,0 +1,484 @@ +/** + * Glossary: + * EVID: Event ID + * EVACT: Event Action + * EVOP: Event Opcode + * EVC: Event Condition + * EVSTATE: Event State + * + * Level Prefixes: + * CO: Corneria + * ME: Meteo + * SX: Sector X + * SY: Sector Y + * SZ: Sector Z + * KA: Katina + * AQ: Aquas + * A6: Area 6 + * FO: Fortuna + * SO: Solar + * MA: Macbeth + * TI: Titania + * BO: Bolse + * ZO: Zoness + * VE1: Venom 1 + * VE2: Venom 2 + * AND: Venom Andross + * WZ: Warpzone + */ + +#ifndef SF64_EVENT +#define SF64_EVENT + +#define evaLoopCount(actor) (actor)->iwork[0] +#define evaTargetActorIndex(actor) (actor)->iwork[1] +#define evaTrigCondition(actor) (actor)->iwork[2] +#define evaTrigCmdIndex(actor) (actor)->iwork[3] +#define EvaIwork4(actor) (actor)->iwork[4] +#define evaMoveModeZ(actor) (actor)->iwork[5] +#define evaRotateFlag(actor) (actor)->iwork[6] +#define evaTexLineFlag(actor) (actor)->iwork[7] +#define evaTexLineIndex(actor) (actor)->iwork[8] +#define evaLeaderActorIndex(actor) (actor)->iwork[9] +#define EvaIwork10(actor) (actor)->iwork[10] +#define EvaIwork11(actor) (actor)->iwork[11] +#define EvaIwork12(actor) (actor)->iwork[12] +#define evaFormationFly(actor) (actor)->iwork[13] +#define EvaIwork14(actor) (actor)->iwork[14] +#define EvaIwork15(actor) (actor)->iwork[15] +#define EvaIwork16(actor) (actor)->iwork[16] +#define EvaIwork17(actor) (actor)->iwork[17] +#define EvaIwork18(actor) (actor)->iwork[18] +#define EvaIwork19(actor) (actor)->iwork[19] +#define evaTrigCondition0(actor) (actor)->iwork[20] +#define evaTrigCondition1(actor) (actor)->iwork[21] +#define evaTrigCondition2(actor) (actor)->iwork[22] +#define evaTrigCondition3(actor) (actor)->iwork[23] +#define evaTrigCondition4(actor) (actor)->iwork[24] + +#define EvaFwork0(actor) (actor)->fwork[0] +#define EvaFwork1(actor) (actor)->fwork[1] +#define EvaFwork2(actor) (actor)->fwork[2] +#define EvaFwork3(actor) (actor)->fwork[3] +#define EvaFwork4(actor) (actor)->fwork[4] +#define EvaFwork5(actor) (actor)->fwork[5] +#define EvaFwork6(actor) (actor)->fwork[6] +#define EvaFwork7(actor) (actor)->fwork[7] +#define EvaFwork8(actor) (actor)->fwork[8] +#define EvaFwork9(actor) (actor)->fwork[9] +#define EvaFwork10(actor) (actor)->fwork[10] +#define EvaFwork11(actor) (actor)->fwork[11] +#define EvaFwork12(actor) (actor)->fwork[12] +#define EvaFwork13(actor) (actor)->fwork[13] +#define EvaFwork14(actor) (actor)->fwork[14] +#define EvaFwork15(actor) (actor)->fwork[15] +#define EvaFwork16(actor) (actor)->fwork[16] +#define evaTargetSpread(actor) (actor)->fwork[17] +#define EvaFwork18(actor) (actor)->fwork[18] +#define EvaFwork19(actor) (actor)->fwork[19] +#define EvaFwork20(actor) (actor)->fwork[20] +#define EvaFwork21(actor) (actor)->fwork[21] +#define EvaFwork22(actor) (actor)->fwork[22] +#define EvaFwork23(actor) (actor)->fwork[23] +#define evaTargetTurnRate(actor) (actor)->fwork[24] +#define EvaFwork25(actor) (actor)->fwork[25] +#define EvaFwork26(actor) (actor)->fwork[26] +#define EvaFwork27(actor) (actor)->fwork[27] +#define EvaFwork28(actor) (actor)->fwork[28] +#define EvaFwork29(actor) (actor)->fwork[29] + +#define EV_OPC(opcode) (((opcode) & 0x7F) << 9) +#define EV_OPC_MASK(cmd) ((cmd) & (0x7F << 9)) +#define EVENT_CMD(opcode, arg1, arg2) (EV_OPC(opcode) | ((s16) (arg1) & 0x1FF)), (arg2) + +#define EV_ZMODE(zmode) (((zmode) & 3) << 7) +#define EV_ZMODE_MASK(cmd) ((cmd) & (3 << 7)) + +#define EV_CHANGE_AI 200 + +#define EVENT_SET_SPEED(speed, zmode, time) EVENT_CMD(EVOP_SET_SPEED, EV_ZMODE(zmode) | ((speed) & 0x7F), time) +#define EVENT_SET_ACCEL(speedTarget, zmode, time) EVENT_CMD(EVOP_SET_ACCEL, EV_ZMODE(zmode) | ((speedTarget) & 0x7F), time) +#define EVENT_SET_BASE_ZVEL(zvel) EVENT_CMD(EVOP_SET_BASE_ZVEL, 0, zvel) +#define EVENT_SET_AS_LEADER() EVENT_CMD(EVOP_SET_AS_LEADER, 0 ,0 ) +#define EVENT_START_FORMATION(duration) EVENT_CMD(EVOP_START_FORMATION, 0, duration) +#define EVENT_STOP_FORMATION() EVENT_CMD(EVOP_STOP_FORMATION, 0, 0) + +#define EVENT_F4_PLUS_X(rot, rotVel) EVENT_CMD(EVOP_F4_PLUS_X, (rotVel) * 10, rot) +#define EVENT_F4_MINUS_X(rot, rotVel) EVENT_CMD(EVOP_F4_MINUS_X, (rotVel) * 10, rot) +#define EVENT_F4_PLUS_Y(rot, rotVel) EVENT_CMD(EVOP_F4_PLUS_Y, (rotVel) * 10, rot) +#define EVENT_F4_MINUS_Y(rot, rotVel) EVENT_CMD(EVOP_F4_MINUS_Y, (rotVel) * 10, rot) + +#define EVENT_ROT_PLUS_X(rot, rotVel) EVENT_CMD(EVOP_ROT_PLUS_X, (rotVel) * 10, rot) +#define EVENT_ROT_MINUS_X(rot, rotVel) EVENT_CMD(EVOP_ROT_MINUS_X, (rotVel) * 10, rot) +#define EVENT_ROT_PLUS_Y(rot, rotVel) EVENT_CMD(EVOP_ROT_PLUS_Y, (rotVel) * 10, rot) +#define EVENT_ROT_MINUS_Y(rot, rotVel) EVENT_CMD(EVOP_ROT_MINUS_Y, (rotVel) * 10, rot) +#define EVENT_ROT_PLUS_Z(rot, rotVel) EVENT_CMD(EVOP_ROT_PLUS_Z, (rotVel) * 10, rot) +#define EVENT_ROT_MINUS_Z(rot, rotVel) EVENT_CMD(EVOP_ROT_MINUS_Z, (rotVel) * 10, rot) + +#define EVENT_SET_ROTATE() EVENT_CMD(EVOP_SET_ROTATE, 0, 0) +#define EVENT_STOP_ROTATE() EVENT_CMD(EVOP_STOP_ROTATE, 0, 0) + +#define EVENT_PURSUE_PLAYER(duration, turnRate) EVENT_CMD(EVOP_PURSUE_PLAYER, turnRate, duration) +#define EVENT_FLEE_PLAYER(duration, turnRate) EVENT_CMD(EVOP_FLEE_PLAYER, turnRate, duration) +#define EVENT_PURSUE_TARGET(duration, turnRate) EVENT_CMD(EVOP_PURSUE_TARGET, turnRate, duration) +#define EVENT_FLEE_TARGET(duration, turnRate) EVENT_CMD(EVOP_FLEE_TARGET, turnRate, duration) +#define EVENT_CHASE_TARGET(duration, turnRate) EVENT_CMD(EVOP_CHASE_TARGET, turnRate, duration) +#define EVENT_SET_TARGET(teamId, spread) EVENT_CMD(EVOP_SET_TARGET, teamId, spread) +#define EVENT_PURSUE_CAMERA(duration, turnRate) EVENT_CMD(EVOP_PURSUE_CAMERA, turnRate, duration) +#define EVENT_FLEE_CAMERA(duration, turnRate) EVENT_CMD(EVOP_FLEE_CAMERA, turnRate, duration) +#define EVENT_SET_WAIT(duration) EVENT_CMD(EVOP_SET_WAIT, 0, duration) + +#define EVENT_SET_CALL(duration, voiceParam) EVENT_CMD(EVOP_SET_CALL, voiceParam, duration) +#define EVENT_RESTORE_TEAM(teammate) EVENT_CMD(EVOP_RESTORE_TEAM, 0, teammate) +#define EVENT_PLAY_SFX(sfx) EVENT_CMD(EVOP_PLAY_SFX, 0, sfx) +#define EVENT_STOP_SFX(sfx) EVENT_CMD(EVOP_STOP_SFX, 0, sfx) + +#define EVENT_SET_TRIGGER(cond, cmd) EVENT_CMD(EVOP_SET_TRIGGER, cmd, cond) +#define EVENT_SET_Z_TRIGGER(z, cmd) EVENT_SET_TRIGGER(EVC_CLOSE_Z + (s32)((z) / 100), cmd) +#define EVENT_CLEAR_TRIGGER(cmd) EVENT_SET_TRIGGER(EVC_NONE, cmd) + +#define EVENT_INIT_ACTOR(info, health) EVENT_CMD(EVOP_INIT_ACTOR, health, info) +#define EVENT_SET_TEAM_ID(teamId) EVENT_CMD(EVOP_SET_TEAM_ID, 0, teamId) + +#define EVENT_SET_ACTION(action) EVENT_CMD(EVOP_SET_ACTION, 0, action) +#define EVENT_ADD_TO_GROUP(num, flags) EVENT_CMD(EVOP_ADD_TO_GROUP, flags, num) + +#define EVENT_DROP_ITEM(item) EVENT_CMD(EVOP_DROP_ITEM, 0, item) + +#define EVENT_SET_REVERB(reverb) EVENT_CMD(EVOP_SET_REVERB, 0, reverb) +#define EVENT_SET_SURFACE(type) EVENT_CMD(EVOP_SET_SURFACE, 0, type) +#define EVENT_PLAY_MSG(rcid, msg) EVENT_CMD(EVOP_PLAY_MSG, rcid, msg) +#define EVENT_DAMAGE_TEAM(teamId, damage) EVENT_CMD(EVOP_DAMAGE_TEAM, damage, teamId) +#define EVENT_STOP_BGM() EVENT_CMD(EVOP_STOP_BGM, 0, 0) + +#define EVENT_MAKE_TEXLINE(color) EVENT_CMD(EVOP_MAKE_TEXLINE, 0, color) +#define EVENT_STOP_TEXLINE() EVENT_CMD(EVOP_STOP_TEXLINE, 0, 0) + +#define EVENT_LOOP(count, cmd) EVENT_CMD(EVOP_LOOP, cmd, count) +#define EVENT_GOTO(cmd) EVENT_LOOP(0, cmd) + +#define EVENT_STOP_SCRIPT() EVENT_CMD(EVOP_STOP_SCRIPT, 0, 0) + + +typedef enum EventModeZ { + EMZ_REST, + EMZ_RELATIVE, + EMZ_PLAYER, + EMZ_3, +} EventModeZ; + +typedef enum EventOpcode { + /* 0 */ EVOP_SET_SPEED, + /* 1 */ EVOP_SET_ACCEL, + /* 2 */ EVOP_SET_BASE_ZVEL, + /* 3 */ EVOP_SET_AS_LEADER, + /* 4 */ EVOP_START_FORMATION, + /* 8 */ EVOP_STOP_FORMATION = 8, + /* 9 */ EVOP_F4_PLUS_X, + /* 10 */ EVOP_F4_MINUS_X, + /* 11 */ EVOP_F4_PLUS_Y, + /* 12 */ EVOP_F4_MINUS_Y, + /* 16 */ EVOP_ROT_PLUS_X = 16, + /* 17 */ EVOP_ROT_MINUS_X, + /* 18 */ EVOP_ROT_PLUS_Y, + /* 19 */ EVOP_ROT_MINUS_Y, + /* 20 */ EVOP_ROT_PLUS_Z, + /* 21 */ EVOP_ROT_MINUS_Z, + /* 24 */ EVOP_SET_ROTATE = 24, + /* 25 */ EVOP_STOP_ROTATE, + /* 40 */ EVOP_PURSUE_PLAYER = 40, + /* 41 */ EVOP_FLEE_PLAYER, + /* 42 */ EVOP_PURSUE_TARGET, + /* 43 */ EVOP_FLEE_TARGET, + /* 44 */ EVOP_CHASE_TARGET, + /* 45 */ EVOP_SET_TARGET, + /* 46 */ EVOP_PURSUE_CAMERA, + /* 47 */ EVOP_FLEE_CAMERA, + /* 48 */ EVOP_SET_WAIT, + /* 56 */ EVOP_SET_CALL = 56, + /* 57 */ EVOP_RESTORE_TEAM, + /* 58 */ EVOP_PLAY_SFX, + /* 59 */ EVOP_STOP_SFX, + /* 96 */ EVOP_SET_TRIGGER = 96, + /* 104 */ EVOP_INIT_ACTOR = 104, + /* 105 */ EVOP_SET_TEAM_ID, + /* 112 */ EVOP_SET_ACTION = 112, + /* 113 */ EVOP_ADD_TO_GROUP, + /* 116 */ EVOP_DROP_ITEM = 116, + /* 118 */ EVOP_SET_REVERB = 118, + /* 119 */ EVOP_SET_SURFACE, + /* 120 */ EVOP_PLAY_MSG, + /* 121 */ EVOP_DAMAGE_TEAM, + /* 122 */ EVOP_STOP_BGM, + /* 124 */ EVOP_MAKE_TEXLINE = 124, + /* 125 */ EVOP_STOP_TEXLINE, + /* 126 */ EVOP_LOOP, + /* 127 */ EVOP_STOP_SCRIPT, +} EventOpcode; + +typedef enum EventCondition { + /* 0 */ EVC_NONE, + /* 1 */ EVC_NO_TARGET, + /* 2 */ EVC_TEAM_COUNT_3, + /* 3 */ EVC_TEAM_COUNT_2, + /* 4 */ EVC_TEAM_COUNT_1, + /* 5 */ EVC_TEAM_COUNT_0, + /* 6 */ EVC_FALCO_ACTIVE, + /* 7 */ EVC_PEPPY_ACTIVE, + /* 8 */ EVC_SLIPPY_ACTIVE, + /* 9 */ EVC_CLOSE_LEFT_100, + /* 10 */ EVC_CLOSE_LEFT_400, + /* 11 */ EVC_CLOSE_LEFT_700, + /* 12 */ EVC_CLOSE_LEFT_200, + /* 13 */ EVC_CLOSE_RIGHT_100, + /* 14 */ EVC_CLOSE_RIGHT_400, + /* 15 */ EVC_CLOSE_RIGHT_700, + /* 16 */ EVC_CLOSE_RIGHT_200, + /* 17 */ EVC_CLOSE_ABOVE_100, + /* 18 */ EVC_CLOSE_ABOVE_400, + /* 19 */ EVC_CLOSE_ABOVE_700, + /* 20 */ EVC_CLOSE_ABOVE_200, + /* 21 */ EVC_CLOSE_BELOW_100, + /* 22 */ EVC_CLOSE_BELOW_400, + /* 23 */ EVC_CLOSE_BELOW_700, + /* 24 */ EVC_CLOSE_BELOW_200, + /* 25 */ EVC_HEALTH_100p, + /* 26 */ EVC_HEALTH_75p, + /* 27 */ EVC_HEALTH_50p, + /* 28 */ EVC_HEALTH_25p, + /* 29 */ EVC_HEALTH_0p, + /* 30 */ EVC_UNK270_5PLUS, + /* 31 */ EVC_UNK270_NONZERO, + /* 32 */ EVC_UNK270_ZERO, + /* 33 */ EVC_UNK250_GREATER_168, + /* 34 */ EVC_UNK250_LESS_84, + /* 35 */ EVC_SINGLE_LASER, + /* 36 */ EVC_TWIN_LASER, + /* 37 */ EVC_HYPER_LASER, + /* 38 */ EVC_UNK3_LASER, + /* 39 */ EVC_SHOT_CLOSE_150, + /* 40 */ EVC_SHOT_CLOSE_300, + /* 41 */ EVC_NO_LEADER, + /* 42 */ EVC_NO_FOLLOWER, + /* 43 */ EVC_HAS_FOLLOWER, + /* 44 */ EVC_TOOK_DAMAGE, + /* 45 */ EVC_PASSED_ALL_RINGS, + /* 46 */ EVC_ATTACK_GROUP_CLEARED, + /* 47 */ EVC_PRESS_CRIGHT, + /* 48 */ EVC_WING_BROKEN, + /* 49 */ EVC_ME_CLEAR, + /* 50 */ EVC_FO_CLEAR, + /* 51 */ EVC_SX_CLEAR, + /* 52 */ EVC_TI_CLEAR, + /* 53 */ EVC_BO_CLEAR, + /* 54 */ EVC_SY_CLEAR, + /* 55 */ EVC_KA_CLEAR, + /* 56 */ EVC_SO_CLEAR, + /* 57 */ EVC_MA_CLEAR, + /* 58 */ EVC_AQ_CLEAR, + /* 59 */ EVC_ZO_CLEAR, + /* 60 */ EVC_SZ_CLEAR, + /* 61 */ EVC_A6_CLEAR, + /* 62 */ EVC_NOT_CHASED, + /* 63 */ EVC_CHASED, + /* 64 */ EVC_MISSED_SEARCHLIGHT, + /* 65 */ EVC_30_HITS, + /* 66 */ EVC_80_HITS, + /* 67 */ EVC_EXPERT_MODE, + /* 100 */ EVC_CLOSE_Z=100, +} EventCondition; + +typedef enum EventState { + /* 0 */ EVSTATE_READY, + /* 1 */ EVSTATE_WAIT, + /* 2 */ EVSTATE_F4_PLUS_X, + /* 3 */ EVSTATE_F4_MINUS_X, + /* 4 */ EVSTATE_F4_PLUS_Y, + /* 5 */ EVSTATE_F4_MINUS_Y, + /* 6 */ EVSTATE_PURSUE_PLAYER, + /* 7 */ EVSTATE_FLEE_PLAYER, + /* 8 */ EVSTATE_PURSUE_TARGET, + /* 9 */ EVSTATE_FLEE_TARGET, + /* 10 */ EVSTATE_ME_AS_OPEN, + /* 11 */ EVSTATE_ME_AS_CLOSE, + /* 12 */ EVSTATE_TEAM_RETREAT, + /* 13 */ EVSTATE_CHASE_TARGET, + /* 14 */ EVSTATE_PURSUE_CAMERA, + /* 15 */ EVSTATE_FLEE_CAMERA, + /* 200 */ EVSTATE_SCRIPT_END = 200, + /* 1000 */ EVSTATE_1000 = 1000, +} EventState; + +typedef enum EventAction { + /* 0 */ EVACT_NONE, + /* 1 */ EVACT_1, + /* 2 */ EVACT_2, + /* 3 */ EVACT_3, + /* 4 */ EVACT_4, + /* 5 */ EVACT_5, + /* 6 */ EVACT_6, + /* 7 */ EVACT_7, + /* 8 */ EVACT_8, + /* 9 */ EVACT_9, + /* 10 */ EVACT_10, + /* 11 */ EVACT_11, + /* 12 */ EVACT_DESPAWN, + /* 13 */ EVACT_TI_DROP_MINE, + /* 14 */ EVACT_ME_AS_OPEN, + /* 15 */ EVACT_ME_AS_CLOSE, + /* 16 */ EVACT_16, + /* 17 */ EVACT_17, + /* 18 */ EVACT_GFOX_COVER_FIRE, + /* 19 */ EVACT_19, // projectile ring used by bee enemies +} EventAction; + +typedef enum EventActorId { + /* 0 */ EVID_VENOM_FIGHTER_1, + /* 1 */ EVID_VENOM_FIGHTER_2, + /* 2 */ EVID_ME_SLIPPY, + /* 3 */ EVID_SPY_EYE, // jp name: Sunfish II + /* 4 */ EVID_GRANGA_FIGHTER_1, // jp name: Dragon + /* 5 */ EVID_GRANGA_FIGHTER_2, // jp name: Dragon II + /* 6 */ EVID_FIREBIRD, // Handles Firebird from Corneria and Gore from Solar + /* 7 */ EVID_CORNERIAN_FIGHTER, // Seems unused? + /* 8 */ EVID_VENOM_TANK, + /* 9 */ EVID_TRIPOD, // jp name: Butterfly + /* 10 */ EVID_ATTACKER_1, + /* 11 */ EVID_ATTACKER_2, + /* 12 */ EVID_ATTACKER_3, + /* 13 */ EVID_ME_METEOR_1, + /* 14 */ EVID_ME_METEOR_2, + /* 15 */ EVID_COMMANDER, + /* 16 */ EVID_SPIDER, + /* 17 */ EVID_ZERAM_CLASS_CRUISER, + /* 18 */ EVID_SX_SPY_EYE, // jp name: Sunfish I + /* 19 */ EVID_SX_CANINE, + /* 20 */ EVID_SPACE_MINE, + /* 21 */ EVID_A6_NINJIN_MISSILE, + /* 22 */ EVID_A6_ROCKET, + /* 23 */ EVID_VENOM_FIGHTER_3, + /* 24 */ EVID_SX_BASE_DEBRIS_1, + /* 25 */ EVID_SX_BASE_WALL_1, + /* 26 */ EVID_SX_BASE_DEBRIS_2, + /* 27 */ EVID_SX_LASER, + /* 28 */ EVID_SX_WATCH_POST, // Invented name + /* 29 */ EVID_SX_SPACE_MINE, + /* 30 */ EVID_A6_HARLOCK_FRIGATE, + /* 31 */ EVID_A6_UMBRA_STATION, + /* 32 */ EVID_SX_BASE_FLOOR_1, + /* 33 */ EVID_CRUISER_GUN, // Guns located on Zeram-class Cruisers + /* 34 */ EVID_SX_BASE_WALL_2, + /* 35 */ EVID_SX_BASE_WALL_3, + /* 36 */ EVID_TI_BOMBER, // Bird-like ship that drops land mines + /* 37 */ EVID_SX_BORZOI_FIGHTER, + /* 38 */ EVID_SX_WARP_GATE, + /* 39 */ EVID_SX_BASE_WALL_TILE_1, + /* 40 */ EVID_EVENT_HANDLER, + /* 41 */ EVID_SY_SHIP_1, + /* 42 */ EVID_SY_SHIP_2, + /* 43 */ EVID_TEAMMATE, + /* 44 */ EVID_SY_SHIP_3, + /* 45 */ EVID_ME_METEOR_3, + /* 46 */ EVID_ZO_PATROL_BOAT, + /* 47 */ EVID_ME_SECRET_MARKER_1, // Metal spheres that mark secret items. Invented name + /* 48 */ EVID_SY_ROBOT_1, + /* 49 */ EVID_SY_ROBOT_2, + /* 50 */ EVID_SY_ROBOT_3, + /* 51 */ EVID_SY_ROBOT_4, // Unclear as to whether it's used or not, only it's hitbox gets used in code + /* 52 */ EVID_SARUMARINE_PERISCOPE, + /* 53 */ EVID_SX_BASE_WALL_4, + /* 54 */ EVID_GAMMA_ON, // Andross Army Gamma-Off Formation Leader (Orange Andross Fighter) + /* 55 */ EVID_GAMMA_OFF, // Blue Andross Fighter + /* 56 */ EVID_TI_GREAT_FOX, // Great Fox that flees after the intro cutscene + /* 57 */ EVID_SY_SHIP_3_2, // Another variant of EVID_SY_SHIP_3 without a hitbox, seems unused? + /* 58 */ EVID_SY_SARUZIN, // flagship of Sector Y, base of the Shogun Boss + /* 59 */ EVID_SY_ROBOT_SPRITE_SIDE, // Robot sprites that appear in Sector Y's background, side variant + /* 60 */ EVID_SY_ROBOT_SPRITE_FRONT, // Robot sprites that appear in Sector Y's background, front variant + /* 61 */ EVID_ME_METEOR_4, + /* 62 */ EVID_ME_METEOR_5, + /* 63 */ EVID_ME_BIG_METEOR, // Big meteor that bounces in Meteo + /* 64 */ EVID_ME_ROCK_GULL, // Enemy laser turret inside a meteorite + /* 65 */ EVID_ME_METEOR_6, + /* 66 */ EVID_ME_SECRET_MARKER_2, // Metal spheres that mark secret items. Invented name + /* 67 */ EVID_ME_FLIP_BOT, + /* 68 */ EVID_SY_LASER_TURRET, + /* 69 */ EVID_SY_SHIP_DESTROYED, + /* 70 */ EVID_SY_DEBRIS, // Sprite portraying small pieces of debris. Seems unused + /* 71 */ EVID_ITEM_WING_REPAIR, + /* 72 */ EVID_SY_SHIP_WINDOWS, + /* 73 */ EVID_SY_SHIP_4, + /* 74 */ EVID_SY_SHIP_4_DESTROYED, + /* 75 */ EVID_SY_SHIP_2_SPRITE, // Unused + /* 76 */ EVID_SY_SHIP_3_SPRITE, // Unused + /* 77 */ EVID_SY_SHIP_MISSILE, + /* 78 */ EVID_SUPPLY_CRATE, + /* 79 */ EVID_ZO_BIRD, + /* 80 */ EVID_VE1_PILLAR, + /* 81 */ EVID_VE1_BLOCKER, + /* 82 */ EVID_MA_LASER_TURRET, + /* 83 */ EVID_AQ_OYSTER, + /* 84 */ EVID_VE1_PILLAR_5, + /* 85 */ EVID_BILL, + /* 86 */ EVID_KATT, + /* 87 */ EVID_VE1_TEMPLE_BG, // Background used inside Venom 1 temple to hide drawing popup + /* 88 */ EVID_AQ_STARFISH, + /* 89 */ EVID_AQ_SHELL, + /* 90 */ EVID_MA_RAILROAD_CART, + /* 91 */ EVID_MA_GUILLOTINE_1, + /* 92 */ EVID_WZ_PILLAR_1, + /* 93 */ EVID_WZ_PILLAR_2, + /* 94 */ EVID_WZ_METEOR_1, + /* 95 */ EVID_WZ_METEOR_2, + /* 96 */ EVID_WZ_GATE, + /* 97 */ EVID_ME_METEOR_7, + /* 98 */ EVID_MA_BOULDER, + /* 99 */ EVID_VE1_ENEMY_GATE, // Gate in Venom 1 for outcoming enemies + /* 100 */ EVID_ENEMY_GATE_DOOR_RIGHT, + /* 101 */ EVID_ENEMY_GATE_DOOR_LEFT, + /* 102 */ EVID_TR_BARRIER, + /* 103 */ EVID_ANDROSS_GATE, + /* 104 */ EVID_ANDROSS_GATE_2, + /* 105 */ EVID_SX_WARP_ENMY, + /* 106 */ EVID_KILLER_BEE, + /* 107 */ EVID_MA_GUILLOTINE_2, // Variant of the Macbeth Guillotine that can be shot at to be opened + /* 200 */ EVID_200 = 200, + /* 300 */ EVID_300 = 300, + /* 4095*/ EVID_FFF = 4095, +} EventActorId; + +typedef enum EventSfx { + /* 0 */ EVSFX_OB_SLIDE_OPEN, + /* 1 */ EVSFX_OB_SLIDE_CLOSE, + /* 2 */ EVSFX_OB_STEELFRAME, + /* 3 */ EVSFX_OB_HEAVY_BOUND, + /* 4 */ EVSFX_ITEM_APPEAR, + /* 5 */ EVSFX_OB_BLOCK_APPEAR, + /* 6 */ EVSFX_OB_ROCKWALL_UP, + /* 7 */ EVSFX_EN_UNIT_GATHERING, + /* 8 */ EVSFX_EN_MOTOR_STOP, + /* 9 */ EVSFX_EN_MS_DASH, + /* 10 */ EVSFX_OB_ROCK_CRASH, + /* 11 */ EVSFX_OB_ROCK_EYE_OPEN, + /* 12 */ EVSFX_OB_SHIP_FALLDOWN, + /* 13 */ EVSFX_OB_BOUND_M, + /* 14 */ EVSFX_OB_SPEAR_PILLAR, + /* 15 */ EVSFX_OB_PILLER_ROLL, + /* 16 */ EVSFX_SEARCHLIGHT_MISS, + /* 17 */ EVSFX_OB_ROUTEGATE_OPEN_Q, + /* 18 */ EVSFX_OB_ROUTEGATE_CLOSE_Q, + /* 19 */ EVSFX_OB_ROUTEGATE_OPEN_S, + /* 20 */ EVSFX_OB_ROUTEGATE_CLOSE_S, + /* 21 */ EVSFX_OB_LIFT, + /* 22 */ EVSFX_OB_PLATE_ROLL, +} EventSfx; + +typedef enum TexLineColor { + /* 0 */ TXLC_WHITE, + /* 1 */ TXLC_LIGHT_BLUE, + /* 2 */ TXLC_BLUE, + /* 3 */ TXLC_GREEN, + /* 4 */ TXLC_RED, + /* 5 */ TXLC_YELLOW, +} TexLineColor; + +#endif diff --git a/include/sf64level.h b/include/sf64level.h index 02a39496..1891ae8d 100644 --- a/include/sf64level.h +++ b/include/sf64level.h @@ -1,22 +1,25 @@ #ifndef SF64_LEVEL #define SF64_LEVEL -#include "structs.h" - #define SAVE_SLOT_SOLAR 13 #define SAVE_SLOT_VENOM_1 14 #define SAVE_SLOT_VENOM_2 15 -typedef enum { +typedef enum LevelType { /* 0 */ LEVELTYPE_PLANET, /* 1 */ LEVELTYPE_SPACE, - /* 2 */ LEVELTYPE_UNK2, - /* 3 */ LEVELTYPE_UNK3, } LevelType; -typedef struct { +typedef enum MissionStatus { + /* 0 */ MISSION_COMPLETE, + /* 1 */ MISSION_ACCOMPLISHED, + /* 2 */ MISSION_WARP, + /* 3 */ MISSION_MAX, +} MissionStatus; + +typedef struct Environment { /* 0x00 */ s32 type; - /* 0x04 */ s32 unk_04; + /* 0x04 */ s32 unk04; /* 0x08 */ u16 bgColor; /* 0x0A */ u16 seqId; /* 0x0C */ s32 fogR; @@ -24,44 +27,59 @@ typedef struct { /* 0x14 */ s32 fogB; /* 0x18 */ s32 fogN; /* 0x1C */ s32 fogF; - /* 0x20 */ Vec3f unk_20; + /* 0x20 */ Vec3f lightDir; /* 0x2C */ s32 lightR; /* 0x30 */ s32 lightG; /* 0x34 */ s32 lightB; /* 0x38 */ s32 ambR; /* 0x3C */ s32 ambG; /* 0x40 */ s32 ambB; -} EnvSettings; // size = 0x44 +} Environment; // size = 0x44 + +typedef enum GroundType { + /* 0 */ GROUND_0, + /* 1 */ GROUND_1, + /* 2 */ GROUND_2, + /* 3 */ GROUND_3, + /* 4 */ GROUND_4, + /* 5 */ GROUND_5, + /* 6 */ GROUND_6, + /* 7 */ GROUND_7, + /* 10 */ GROUND_10 = 10, + /* 11 */ GROUND_11, + /* 12 */ GROUND_12, + /* 13 */ GROUND_13, +} GroundType; -typedef enum { - /* 0 */ OVL_SETUP_TITLE, - /* 1 */ OVL_SETUP_MENU, - /* 2 */ OVL_SETUP_MAP, - /* 3 */ OVL_SETUP_GAME_OVER, - /* 4 */ OVL_SETUP_CREDITS, - /* 5 */ OVL_SETUP_CORNERIA, - /* 6 */ OVL_SETUP_METEO, - /* 7 */ OVL_SETUP_TITANIA, - /* 8 */ OVL_SETUP_SECTOR_X, - /* 9 */ OVL_SETUP_AQUAS, - /* 10 */ OVL_SETUP_AREA_6, - /* 11 */ OVL_SETUP_FORTUNA, - /* 12 */ OVL_SETUP_UNK_4, - /* 13 */ OVL_SETUP_SECTOR_Y, - /* 14 */ OVL_SETUP_SOLAR, - /* 15 */ OVL_SETUP_ZONESS, - /* 16 */ OVL_SETUP_VENOM_ANDROSS, - /* 17 */ OVL_SETUP_TRAINING, - /* 18 */ OVL_SETUP_VENOM_1, - /* 19 */ OVL_SETUP_KATINA, - /* 10 */ OVL_SETUP_20, - /* 11 */ OVL_SETUP_MACBETH, - /* 12 */ OVL_SETUP_BOLSE, - /* 13 */ OVL_SETUP_SECTOR_Z, - /* 14 */ OVL_SETUP_VENOM_2, - /* 50 */ OVL_SETUP_VERSUS = 50, - /* 99 */ OVL_SETUP_LOGO = 99, -} OverlaySetups; +typedef enum SceneId { + /* 0 */ SCENE_TITLE, + /* 1 */ SCENE_MENU, + /* 2 */ SCENE_MAP, + /* 3 */ SCENE_GAME_OVER, + /* 4 */ SCENE_CREDITS, + /* 5 */ SCENE_CORNERIA, + /* 6 */ SCENE_METEO, + /* 7 */ SCENE_TITANIA, + /* 8 */ SCENE_SECTOR_X, + /* 9 */ SCENE_AQUAS, + /* 10 */ SCENE_AREA_6, + /* 11 */ SCENE_FORTUNA, + /* 12 */ SCENE_UNK_4, + /* 13 */ SCENE_SECTOR_Y, + /* 14 */ SCENE_SOLAR, + /* 15 */ SCENE_ZONESS, + /* 16 */ SCENE_VENOM_ANDROSS, + /* 17 */ SCENE_TRAINING, + /* 18 */ SCENE_VENOM_1, + /* 19 */ SCENE_KATINA, + /* 20 */ SCENE_20, + /* 21 */ SCENE_MACBETH, + /* 22 */ SCENE_BOLSE, + /* 23 */ SCENE_SECTOR_Z, + /* 24 */ SCENE_VENOM_2, + /* 50 */ SCENE_VERSUS = 50, + /* 99 */ SCENE_LOGO = 99, +} SceneId; typedef enum LevelId { /* -1 */ LEVEL_UNK_M1 = -1, @@ -115,403 +133,37 @@ typedef enum VsStage { /* 2 */ VS_STAGE_SECTOR_Z, } VsStage; -#define EV_OPC(opcode) (((opcode) & 0x7F) << 9) -#define EV_OPC_MASK(cmd) ((cmd) & (0x7F << 9)) -#define EVENT_CMD(opcode, arg1, arg2) (EV_OPC(opcode) | ((s16) (arg1) & 0x1FF)), (arg2) - -#define EV_ZMODE(zmode) (((zmode) & 3) << 7) -#define EV_ZMODE_MASK(cmd) ((cmd) & (3 << 7)) - -#define EVENT_PLAY_MSG(rcid, msg) EVENT_CMD(EVOP_PLAY_MSG, rcid, msg) -#define EVENT_STOP_SCRIPT() EVENT_CMD(EVOP_STOP_SCRIPT, 0, 0) -#define EVENT_MAKE_TEXLINE(color) EVENT_CMD(EVOP_MAKE_TEXLINE, 0, color) -#define EVENT_STOP_TEXLINE() EVENT_CMD(EVOP_STOP_TEXLINE, 0, 0) -#define EVENT_INIT_ACTOR(info, health) EVENT_CMD(EVOP_INIT_ACTOR, health, info) -#define EVENT_SET_SPEED(speed, zmode, time) EVENT_CMD(EVOP_SET_SPEED, EV_ZMODE(zmode) | ((speed) & 0x7F), time) -#define EVENT_SET_ACCEL(speedTarget, zmode, time) EVENT_CMD(EVOP_SET_ACCEL, EV_ZMODE(zmode) | ((speedTarget) & 0x7F), time) -#define EVENT_SET_ROTATE() EVENT_CMD(EVOP_SET_ROTATE, 0, 0) -#define EVENT_STOP_ROTATE() EVENT_CMD(EVOP_STOP_ROTATE, 0, 0) -#define EVENT_SET_TRIGGER(cond, cmd) EVENT_CMD(EVOP_SET_TRIGGER, cmd, cond) -#define EVENT_CLEAR_TRIGGER(cmd) EVENT_SET_TRIGGER(EVC_NONE, cmd) -#define EVENT_LOOP(cmd, count) EVENT_CMD(EVOP_LOOP, cmd, count) -#define EVENT_SET_GROUND(type) EVENT_CMD(EVOP_SET_GROUND, 0, type) -#define EVENT_DROP_ITEM(item) EVENT_CMD(EVOP_DROP_ITEM, 0, item) -#define EVENT_ADD_TO_GROUP(num, flags) EVENT_CMD(EVOP_ADD_TO_GROUP, flags, num) -#define EVENT_SET_REVERB(reverb) EVENT_CMD(EVOP_SET_REVERB, 0, reverb) -#define EVENT_STOP_BGM() EVENT_CMD(EVOP_STOP_BGM, 0, 0) -#define EVENT_SET_ACTION(action) EVENT_CMD(EVOP_SET_ACTION, 0, action) -#define EVENT_RESTORE_TEAM(teammate) EVENT_CMD(EVOP_RESTORE_TEAM, 0, teammate) -#define EVENT_PLAY_SFX(sfx) EVENT_CMD(EVOP_PLAY_SFX, 0, sfx) -#define EVENT_STOP_SFX(sfx) EVENT_CMD(EVOP_STOP_SFX, 0, sfx) -#define EVENT_SET_CALL(duration, voiceParam) EVENT_CMD(EVOP_SET_CALL, voiceParam, duration) -#define EVENT_ROT_PLUS_X(rot, rotVel) EVENT_CMD(EVOP_ROT_PLUS_X, rotVel * 10, rot) -#define EVENT_ROT_MINUS_X(rot, rotVel) EVENT_CMD(EVOP_ROT_MINUS_X, rotVel * 10, rot) -#define EVENT_ROT_PLUS_Y(rot, rotVel) EVENT_CMD(EVOP_ROT_PLUS_Y, rotVel * 10, rot) -#define EVENT_ROT_MINUS_Y(rot, rotVel) EVENT_CMD(EVOP_ROT_MINUS_Y, rotVel * 10, rot) -#define EVENT_ROT_PLUS_Z(rot, rotVel) EVENT_CMD(EVOP_ROT_PLUS_Z, rotVel * 10, rot) -#define EVENT_ROT_MINUS_Z(rot, rotVel) EVENT_CMD(EVOP_ROT_MINUS_Z, rotVel * 10, rot) -#define EVENT_F4_PLUS_X(rot, rotVel) EVENT_CMD(EVOP_F4_PLUS_X, rotVel * 10, rot) -#define EVENT_F4_MINUS_X(rot, rotVel) EVENT_CMD(EVOP_F4_MINUS_X, rotVel * 10, rot) -#define EVENT_F4_PLUS_Y(rot, rotVel) EVENT_CMD(EVOP_F4_PLUS_Y, rotVel * 10, rot) -#define EVENT_F4_MINUS_Y(rot, rotVel) EVENT_CMD(EVOP_F4_MINUS_Y, rotVel * 10, rot) -#define EVENT_SET_BASE_ZVEL(zvel) EVENT_CMD(EVOP_SET_BASE_ZVEL, 0, zvel) - -typedef enum EventModeZ { - EMZ_REST, - EMZ_RELATIVE, - EMZ_PLAYER, - EMZ_3, -} EventModeZ; - -typedef enum EventOpcode { - /* 0 */ EVOP_SET_SPEED, - /* 1 */ EVOP_SET_ACCEL, - /* 2 */ EVOP_SET_BASE_ZVEL, - /* 3 */ EVOP_SET_TO_IWORK_9, - /* 4 */ EVOP_SET_IWORK_13, - /* 8 */ EVOP_CLEAR_IWORK_13 = 8, - /* 9 */ EVOP_F4_PLUS_X, - /* 10 */ EVOP_F4_MINUS_X, - /* 11 */ EVOP_F4_PLUS_Y, - /* 12 */ EVOP_F4_MINUS_Y, - /* 16 */ EVOP_ROT_PLUS_X = 16, - /* 17 */ EVOP_ROT_MINUS_X, - /* 18 */ EVOP_ROT_PLUS_Y, - /* 19 */ EVOP_ROT_MINUS_Y, - /* 20 */ EVOP_ROT_PLUS_Z, - /* 21 */ EVOP_ROT_MINUS_Z, - /* 24 */ EVOP_SET_ROTATE = 24, - /* 25 */ EVOP_STOP_ROTATE, - /* 40 */ EVOP_SET_STATE_6 = 40, - /* 41 */ EVOP_SET_STATE_7, - /* 42 */ EVOP_SET_STATE_8, - /* 43 */ EVOP_SET_STATE_9, - /* 44 */ EVOP_SET_STATE_13, - /* 45 */ EVOP_SET_IWORK_1_TO_IWORK_12, - /* 46 */ EVOP_SET_STATE_14, - /* 47 */ EVOP_SET_STATE_15, - /* 48 */ EVOP_SET_STATE_1, - /* 56 */ EVOP_SET_CALL = 56, - /* 57 */ EVOP_RESTORE_TEAM, - /* 58 */ EVOP_PLAY_SFX, - /* 59 */ EVOP_STOP_SFX, - /* 96 */ EVOP_SET_TRIGGER = 96, - /* 104 */ EVOP_INIT_ACTOR = 104, - /* 105 */ EVOP_SET_IWORK_12, - /* 112 */ EVOP_SET_ACTION = 112, - /* 113 */ EVOP_ADD_TO_GROUP, - /* 116 */ EVOP_DROP_ITEM = 116, - /* 118 */ EVOP_SET_REVERB = 118, - /* 119 */ EVOP_SET_GROUND, - /* 120 */ EVOP_PLAY_MSG, - /* 121 */ EVOP_DAMAGE_TEAM, - /* 122 */ EVOP_STOP_BGM, - /* 124 */ EVOP_MAKE_TEXLINE = 124, - /* 125 */ EVOP_STOP_TEXLINE, - /* 126 */ EVOP_LOOP, - /* 127 */ EVOP_STOP_SCRIPT, -} EventOpcode; - -typedef enum EventCondition { - /* 0 */ EVC_NONE, - /* 1 */ EVC_1, - /* 2 */ EVC_TEAM_COUNT_3, - /* 3 */ EVC_TEAM_COUNT_2, - /* 4 */ EVC_TEAM_COUNT_1, - /* 5 */ EVC_TEAM_COUNT_0, - /* 6 */ EVC_FALCO_ACTIVE, - /* 7 */ EVC_PEPPY_ACTIVE, - /* 8 */ EVC_SLIPPY_ACTIVE, - /* 9 */ EVC_9, - /* 10 */ EVC_10, - /* 11 */ EVC_11, - /* 12 */ EVC_12, - /* 13 */ EVC_13, - /* 14 */ EVC_14, - /* 15 */ EVC_15, - /* 16 */ EVC_16, - /* 17 */ EVC_17, - /* 18 */ EVC_18, - /* 19 */ EVC_19, - /* 20 */ EVC_20, - /* 21 */ EVC_21, - /* 22 */ EVC_22, - /* 23 */ EVC_23, - /* 24 */ EVC_24, - /* 25 */ EVC_HEALTH_100p, - /* 26 */ EVC_HEALTH_75p, - /* 27 */ EVC_HEALTH_50p, - /* 28 */ EVC_HEALTH_25p, - /* 29 */ EVC_HEALTH_0p, - /* 30 */ EVC_30, - /* 31 */ EVC_31, - /* 32 */ EVC_32, - /* 33 */ EVC_33, - /* 34 */ EVC_34, - /* 35 */ EVC_SINGLE_LASER, - /* 36 */ EVC_TWIN_LASER, - /* 37 */ EVC_HYPER_LASER, - /* 38 */ EVC_UNK3_LASER, - /* 39 */ EVC_39, - /* 40 */ EVC_40, - /* 41 */ EVC_41, - /* 42 */ EVC_42, - /* 43 */ EVC_43, - /* 44 */ EVC_44, - /* 45 */ EVC_45, - /* 46 */ EVC_46, - /* 47 */ EVC_PRESS_CRIGHT, - /* 48 */ EVC_WING_BROKEN, - /* 49 */ EVC_ME_CLEAR, - /* 50 */ EVC_FO_CLEAR, - /* 51 */ EVC_SX_CLEAR, - /* 52 */ EVC_TI_CLEAR, - /* 53 */ EVC_BO_CLEAR, - /* 54 */ EVC_SY_CLEAR, - /* 55 */ EVC_KA_CLEAR, - /* 56 */ EVC_SO_CLEAR, - /* 57 */ EVC_MA_CLEAR, - /* 58 */ EVC_AQ_CLEAR, - /* 59 */ EVC_ZO_CLEAR, - /* 60 */ EVC_SZ_CLEAR, - /* 61 */ EVC_A6_CLEAR, - /* 62 */ EVC_62, - /* 63 */ EVC_63, - /* 64 */ EVC_64, - /* 65 */ EVC_30_HITS, - /* 66 */ EVC_80_HITS, - /* 67 */ EVC_EXPERT_MODE, - /* 68 */ EVC_68, - /* 69 */ EVC_69, - /* 100 */ EVC_100=100, -} EventCondition; - -typedef enum EventState { - /* 0 */ EVSTATE_0, - /* 1 */ EVSTATE_1, - /* 2 */ EVSTATE_F4_PLUS_X, - /* 3 */ EVSTATE_F4_MINUS_X, - /* 4 */ EVSTATE_F4_PLUS_Y, - /* 5 */ EVSTATE_F4_MINUS_Y, - /* 6 */ EVSTATE_6, - /* 7 */ EVSTATE_7, - /* 8 */ EVSTATE_8, - /* 9 */ EVSTATE_9, - /* 10 */ EVSTATE_10, - /* 11 */ EVSTATE_11, - /* 12 */ EVSTATE_TEAM_RETREAT, - /* 13 */ EVSTATE_13, - /* 14 */ EVSTATE_14, - /* 15 */ EVSTATE_15, - /* 200 */ EVSTATE_SCRIPT_END = 200, - /* 1000 */ EVSTATE_1000 = 1000, -} EventState; - -typedef enum EventAction { - /* 0 */ EVACT_0, - /* 1 */ EVACT_1, - /* 2 */ EVACT_2, - /* 3 */ EVACT_3, - /* 4 */ EVACT_4, - /* 5 */ EVACT_5, - /* 6 */ EVACT_6, - /* 7 */ EVACT_7, - /* 8 */ EVACT_8, - /* 9 */ EVACT_9, - /* 10 */ EVACT_10, - /* 11 */ EVACT_11, - /* 12 */ EVACT_12, - /* 13 */ EVACT_13, - /* 14 */ EVACT_14, - /* 15 */ EVACT_15, - /* 16 */ EVACT_16, - /* 17 */ EVACT_17, - /* 18 */ EVACT_18, - /* 19 */ EVACT_19, -} EventAction; - -typedef enum EventActorInfo { - /* 0 */ EINFO_0, - /* 1 */ EINFO_1, - /* 2 */ EINFO_2, - /* 3 */ EINFO_3, - /* 4 */ EINFO_4, - /* 5 */ EINFO_5, - /* 6 */ EINFO_6, - /* 7 */ EINFO_7, - /* 8 */ EINFO_8, - /* 9 */ EINFO_9, - /* 10 */ EINFO_10, - /* 11 */ EINFO_11, - /* 12 */ EINFO_12, - /* 13 */ EINFO_13, - /* 14 */ EINFO_14, - /* 15 */ EINFO_15, - /* 16 */ EINFO_16, - /* 17 */ EINFO_17, - /* 18 */ EINFO_18, - /* 19 */ EINFO_19, - /* 20 */ EINFO_20, - /* 21 */ EINFO_21, - /* 22 */ EINFO_22, - /* 23 */ EINFO_23, - /* 24 */ EINFO_24, - /* 25 */ EINFO_25, - /* 26 */ EINFO_26, - /* 27 */ EINFO_27, - /* 28 */ EINFO_28, - /* 29 */ EINFO_29, - /* 30 */ EINFO_30, - /* 31 */ EINFO_31, - /* 32 */ EINFO_32, - /* 33 */ EINFO_33, - /* 34 */ EINFO_34, - /* 35 */ EINFO_35, - /* 36 */ EINFO_36, - /* 37 */ EINFO_37, - /* 38 */ EINFO_38, - /* 39 */ EINFO_39, - /* 40 */ EINFO_40, - /* 41 */ EINFO_41, - /* 42 */ EINFO_42, - /* 43 */ EINFO_43, - /* 44 */ EINFO_44, - /* 45 */ EINFO_45, - /* 46 */ EINFO_46, - /* 47 */ EINFO_47, - /* 48 */ EINFO_48, - /* 49 */ EINFO_49, - /* 50 */ EINFO_50, - /* 51 */ EINFO_51, - /* 52 */ EINFO_52, - /* 53 */ EINFO_53, - /* 54 */ EINFO_54, - /* 55 */ EINFO_55, - /* 56 */ EINFO_56, - /* 57 */ EINFO_57, - /* 58 */ EINFO_58, - /* 59 */ EINFO_59, - /* 60 */ EINFO_60, - /* 61 */ EINFO_61, - /* 62 */ EINFO_62, - /* 63 */ EINFO_63, - /* 64 */ EINFO_64, - /* 65 */ EINFO_65, - /* 66 */ EINFO_66, - /* 67 */ EINFO_67, - /* 68 */ EINFO_68, - /* 69 */ EINFO_69, - /* 70 */ EINFO_70, - /* 71 */ EINFO_71, - /* 72 */ EINFO_72, - /* 73 */ EINFO_73, - /* 74 */ EINFO_74, - /* 75 */ EINFO_75, - /* 76 */ EINFO_76, - /* 77 */ EINFO_77, - /* 78 */ EINFO_78, - /* 79 */ EINFO_79, - /* 80 */ EINFO_80, - /* 81 */ EINFO_81, - /* 82 */ EINFO_82, - /* 83 */ EINFO_83, - /* 84 */ EINFO_84, - /* 85 */ EINFO_85, - /* 86 */ EINFO_86, - /* 87 */ EINFO_87, - /* 88 */ EINFO_88, - /* 89 */ EINFO_89, - /* 90 */ EINFO_90, - /* 91 */ EINFO_91, - /* 92 */ EINFO_92, - /* 93 */ EINFO_93, - /* 94 */ EINFO_94, - /* 95 */ EINFO_95, - /* 96 */ EINFO_96, - /* 97 */ EINFO_97, - /* 98 */ EINFO_98, - /* 99 */ EINFO_99, - /* 100 */ EINFO_100, - /* 101 */ EINFO_101, - /* 102 */ EINFO_102, - /* 103 */ EINFO_103, - /* 104 */ EINFO_104, - /* 105 */ EINFO_105, - /* 106 */ EINFO_106, - /* 107 */ EINFO_107, - /* 200 */ EINFO_200 = 200, - /* 300 */ EINFO_300 = 300, -} EventActorInfo; - -typedef enum EventSfx { - /* 0 */ EVSFX_0, - /* 1 */ EVSFX_1, - /* 2 */ EVSFX_2, - /* 3 */ EVSFX_3, - /* 4 */ EVSFX_4, - /* 5 */ EVSFX_5, - /* 6 */ EVSFX_6, - /* 7 */ EVSFX_7, - /* 8 */ EVSFX_8, - /* 9 */ EVSFX_9, - /* 10 */ EVSFX_10, - /* 11 */ EVSFX_11, - /* 12 */ EVSFX_12, - /* 13 */ EVSFX_13, - /* 14 */ EVSFX_14, - /* 15 */ EVSFX_15, - /* 16 */ EVSFX_16, - /* 17 */ EVSFX_17, - /* 18 */ EVSFX_18, - /* 19 */ EVSFX_19, - /* 20 */ EVSFX_20, - /* 21 */ EVSFX_21, - /* 22 */ EVSFX_22, -} EventSfx; - -typedef enum TexLineColor { - /* 0 */ TXLC_WHITE, - /* 1 */ TXLC_LIGHT_BLUE, - /* 2 */ TXLC_BLUE, - /* 3 */ TXLC_GREEN, - /* 4 */ TXLC_RED, - /* 5 */ TXLC_YELLOW, -} TexLineColor; - -typedef enum GroundType { - /* 0 */ GROUNDTYPE_GRASS, - /* 1 */ GROUNDTYPE_ROCK, - /* 2 */ GROUNDTYPE_WATER, -} GroundType; - -typedef enum ItemDrop { - /* 0 */ DROP_NONE, - /* 1 */ DROP_SILVER_RING, - /* 2 */ DROP_SILVER_RING_50p, - /* 3 */ DROP_SILVER_RING_33p, - /* 4 */ DROP_SILVER_RING_25p, - /* 5 */ DROP_BOMB, - /* 6 */ DROP_BOMB_50p, - /* 7 */ DROP_BOMB_33p, - /* 8 */ DROP_BOMB_25p, - /* 9 */ DROP_LASERS, - /* 10 */ DROP_LASERS_50p, - /* 11 */ DROP_LASERS_33p, - /* 12 */ DROP_LASERS_25p, - /* 13 */ DROP_1UP, - /* 14 */ DROP_GOLD_RING_1, - /* 15 */ DROP_GOLD_RING_2, - /* 16 */ DROP_GOLD_RING_3, - /* 17 */ DROP_GOLD_RING_4, - /* 18 */ DROP_GOLD_RING_GROUP, - /* 19 */ DROP_LASERS_GROUP, - /* 20 */ DROP_BOMB_GROUP, - /* 21 */ DROP_SILVER_RING_GROUP, - /* 22 */ DROP_SILVER_RING_10p, - /* 23 */ DROP_WING_REPAIR, - /* 24 */ DROP_TEAM_MESG, - /* 25 */ DROP_SILVER_STAR, - /* 26 */ DROP_MAX, -} ItemDrop; +typedef enum VsMatchType { + /* 0 */ VS_MATCH_POINTS, + /* 1 */ VS_MATCH_BATTLE, + /* 2 */ VS_MATCH_TIME, +} VsMatchType; + +#define VS_TIME_UP(countdown) (((countdown)[0] == 0) && ((countdown)[1] == 0) && ((countdown)[2] == 0)) + +typedef enum VsState { + /* 0 */ VS_STATE_0, + /* 1 */ VS_STATE_1, + /* 2 */ VS_STATE_2, + /* 3 */ VS_STATE_3, + /* 4 */ VS_STATE_4, + /* 5 */ VS_STATE_5, + /* 6 */ VS_STATE_6, + /* 7 */ VS_STATE_7, + /* 8 */ VS_STATE_8, + /* 9 */ VS_STATE_9, + /* 10 */ VS_STATE_10, + /* 11 */ VS_STATE_11, + /* 12 */ VS_STATE_12, + /* 13 */ VS_STATE_13, + /* 14 */ VS_STATE_14, + /* 20 */ VS_STATE_20 = 20, +} VsState; + +typedef enum GroundSurface { + /* 0 */ SURFACE_GRASS, + /* 1 */ SURFACE_ROCK, + /* 2 */ SURFACE_WATER, +} GroundSurface; #endif diff --git a/include/sf64math.h b/include/sf64math.h index b73dc2d2..2ce97b96 100644 --- a/include/sf64math.h +++ b/include/sf64math.h @@ -5,6 +5,9 @@ #include "libc/math.h" #include <math.h> +#define MTXF_NEW 0 +#define MTXF_APPLY 1 + typedef struct { /* 0x0 */ f32 x; /* 0x4 */ f32 y; @@ -23,6 +26,11 @@ typedef struct { } PosRot; // size = 0x18 typedef struct { + /* 0x00 */ Vec3f eye; + /* 0x0C */ Vec3f at; +} CameraPoint; // size = 0x18 + +typedef struct { /* 0x0 */ s16 vtx[3]; } Triangle; // size = 0x6 @@ -73,24 +81,66 @@ s32 Math_PursueVec3f(Vec3f *pos, Vec3f *target, Vec3f *rot, f32 stepSize, f32 sc void Math_Vec3fFromAngles(Vec3f *step, f32 xRot, f32 yRot, f32 stepsize); f32 Math_RadToDeg(f32 rAngle); -void Matrix_Copy(Matrix*, Matrix*); +// Copies src Matrix into dst +void Matrix_Copy(Matrix* dst, Matrix* src); + +// Makes a copy of the stack's current matrix and puts it on the top of the stack void Matrix_Push(Matrix** mtxStack); + +// Removes the top matrix of the stack void Matrix_Pop(Matrix** mtxStack); -void Matrix_Mult(Matrix*, Matrix*, u8); -void Matrix_Translate(Matrix*, f32, f32, f32, u8); + +// Copies tf into mtx (MTXF_NEW) or applies it to mtx (MTXF_APPLY) +void Matrix_Mult(Matrix* mtx, Matrix* tf, u8 mode); + +// Creates a translation matrix in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY) +void Matrix_Translate(Matrix* mtx, f32 x, f32 y, f32 z, u8 mode); + +// Creates a scale matrix in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY) void Matrix_Scale(Matrix* mtx, f32 xScale, f32 yScale, f32 zScale, u8 mode); -void Matrix_RotateX(Matrix*, f32, u8); -void Matrix_RotateY(Matrix*, f32, u8); -void Matrix_RotateZ(Matrix*, f32, u8); -void Matrix_RotateAxis(Matrix*, f32, f32, f32, f32, u8); -void Matrix_ToMtx(Mtx *dest); -void Matrix_FromMtx(Mtx *src, Matrix *dest); + +// Creates rotation matrix about the X axis in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY) +void Matrix_RotateX(Matrix* mtx, f32 angle, u8 mode); + +// Creates rotation matrix about the Y axis in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY) +void Matrix_RotateY(Matrix* mtx, f32 angle, u8 mode); + +// Creates rotation matrix about the Z axis in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY) +void Matrix_RotateZ(Matrix* mtx, f32 angle, u8 mode); + +// Creates rotation matrix about a given vector axis in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY). +// The vector specifying the axis does not need to be a unit vector. +void Matrix_RotateAxis(Matrix* mtx, f32 angle, f32 axisX, f32 axisY, f32 axisZ, u8 mode); + +// Converts the current Gfx matrix to a Mtx +void Matrix_ToMtx(Mtx* dest); + +// Converts the Mtx src to a Matrix, putting the result in dest +void Matrix_FromMtx(Mtx* src, Matrix* dest); + +// Applies the transform matrix mtx to the vector src, putting the result in dest void Matrix_MultVec3f(Matrix* mtx, Vec3f* src, Vec3f* dest); + +// Applies the linear part of the transformation matrix mtx to the vector src, ignoring any translation that mtx might +// have. Puts the result in dest. void Matrix_MultVec3fNoTranslate(Matrix* mtx, Vec3f* src, Vec3f* dest); -void Matrix_GetYRPAngles(Matrix*, Vec3f*); -void Matrix_GetXYZAngles(Matrix*, Vec3f*); -void Matrix_LookAt(Matrix*, f32, f32, f32, f32, f32, f32, f32, f32, f32, u8); -void Matrix_SetGfxMtx(Gfx**); + +// Expresses the rotational part of the transform mtx as Tait-Bryan angles, in the yaw-pitch-roll (intrinsic YXZ) +// convention used in worldspace calculations +void Matrix_GetYRPAngles(Matrix* mtx, Vec3f* rot); + +// Expresses the rotational part of the transform mtx as Tait-Bryan angles, in the extrinsic XYZ convention used in +// modelspace calculations +void Matrix_GetXYZAngles(Matrix* mtx, Vec3f* rot); + +// Creates a look-at matrix from Eye, At, and Up in mtx (MTXF_NEW) or applies one to mtx (MTXF_APPLY). +// A look-at matrix is a rotation-translation matrix that maps y to Up, z to (At - Eye), and translates to Eye +void Matrix_LookAt(Matrix* mtx, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, + u8 mode); + +// Converts the current Gfx matrix to a Mtx and sets it to the display list +void Matrix_SetGfxMtx(Gfx** gfx); + f32 Math_FAtanF(f32); f32 Math_FAtan2F(f32, f32); diff --git a/include/sf64mesg.h b/include/sf64mesg.h index 30657869..6ba88c73 100644 --- a/include/sf64mesg.h +++ b/include/sf64mesg.h @@ -18,188 +18,939 @@ bool Message_DisplayText(Gfx** gfxPtr, u16* msgPtr, s32 xPos, s32 yPos, s32 len) void Message_DisplayScrollingText(Gfx** gfxPtr, u16* msgPtr, s32 xPos, s32 yPos, s32 yRangeHi, s32 yRangeLo, s32 len); bool Message_IsPrintingChar(u16* msgPtr, s32 charPos); + // Id + 1 gives the other frame of the animation typedef enum RadioCharacterId { RCID_FOX = 0, - RCID_FOX_OPEN, - RCID_FOX_RED = 5, - RCID_FOX_RED_OPEN, RCID_STATIC = 2, - RCID_STATIC_FLIP, + RCID_FOX_RED = 5, RCID_FALCO = 10, - RCID_FALCO_OPEN, RCID_FALCO_RED = 15, - RCID_FALCO_RED_OPEN, RCID_SLIPPY = 20, - RCID_SLIPPY_OPEN, RCID_SLIPPY_RED = 25, - RCID_SLIPPY_RED_OPEN, RCID_PEPPY = 30, - RCID_PEPPY_OPEN, RCID_PEPPY_RED = 35, - RCID_PEPPY_RED_OPEN, RCID_KATT = 40, - RCID_KATT_OPEN, RCID_ANDROSS = 50, - RCID_ANDROSS_OPEN, RCID_ANDROSS_RED = 55, - RCID_ANDROSS_RED_OPEN, RCID_JAMES = 60, - RCID_JAMES_OPEN, RCID_GEN_PEPPER = 70, - RCID_GEN_PEPPER_OPEN, RCID_BOSS_CORNERIA = 80, - RCID_BOSS_CORNERIA_OPEN, RCID_ROB64 = 90, - RCID_ROB64_OPEN, RCID_ROB64_RED = 95, - RCID_ROB64_RED_OPEN, RCID_BOSS_METEO = 100, - RCID_BOSS_METEO_OPEN, RCID_BOSS_CORNERIA2 = 110, - RCID_BOSS_CORNERIA2_OPEN, RCID_BOSS_AREA6 = 120, - RCID_BOSS_AREA6_OPEN, RCID_BOSS_ZONESS = 130, - RCID_BOSS_ZONESS_OPEN, RCID_ROB64_2 = 140, - RCID_ROB64_2_OPEN, RCID_BOSS_SECTORX = 150, - RCID_BOSS_SECTORX_OPEN, RCID_BOSS_SECTORY = 160, - RCID_BOSS_SECTORY_OPEN, RCID_BILL = 170, - RCID_BILL_OPEN, RCID_CAIMAN_AREA6 = 180, - RCID_CAIMAN_AREA6_OPEN, RCID_BOSS_MACBETH = 190, - RCID_BOSS_MACBETH_OPEN, RCID_WOLF = 200, - RCID_WOLF_OPEN, RCID_PIGMA = 210, - RCID_PIGMA_OPEN, RCID_LEON = 220, - RCID_LEON_OPEN, RCID_ANDREW = 230, - RCID_ANDREW_OPEN, RCID_WOLF_2 = 240, - RCID_WOLF_2_OPEN, RCID_PIGMA_2 = 250, - RCID_PIGMA_2_OPEN, RCID_LEON_2 = 260, - RCID_LEON_2_OPEN, RCID_ANDREW_2 = 270, - RCID_ANDREW_2_OPEN, RCID_ROB64_TITLE = 300, - RCID_ROB64_TITLE_OPEN, RCID_GEN_PEPPER_TITLE = 310, - RCID_GEN_PEPPER_TITLE_OPEN, RCID_TR = 350, - RCID_TR_OPEN, RCID_FOX_EXPERT = 400, - RCID_FOX_EXPERT_OPEN, + RCID_1000 = 1000, } RadioCharacterId; -void Radio_PlayMessage(u16*, enum RadioCharacterId); +void Radio_PlayMessage(u16*, RadioCharacterId); void func_radio_800BB388(void); -void func_radio_800BB5D0(void); - -typedef enum { - MSGCHAR_END, - MSGCHAR_NWL, - MSGCHAR_NP2, - MSGCHAR_NP3, - MSGCHAR_NP4, - MSGCHAR_NP5, - MSGCHAR_NP6, - MSGCHAR_NP7, - MSGCHAR_PRI0, - MSGCHAR_PRI1, - MSGCHAR_PRI2, - MSGCHAR_PRI3, - MSGCHAR_SPC, - MSGCHAR_QSP, - MSGCHAR_HSP, - MSGCHAR_NPF, - MSGCHAR_CLF, - MSGCHAR_CUP, - MSGCHAR_CRT, - MSGCHAR_CDN, - MSGCHAR_AUP, - MSGCHAR_ALF, - MSGCHAR_ADN, - MSGCHAR_ART, - MSGCHAR_A, - MSGCHAR_B, - MSGCHAR_C, - MSGCHAR_D, - MSGCHAR_E, - MSGCHAR_F, - MSGCHAR_G, - MSGCHAR_H, - MSGCHAR_I, - MSGCHAR_J, - MSGCHAR_K, - MSGCHAR_L, - MSGCHAR_M, - MSGCHAR_N, - MSGCHAR_O, - MSGCHAR_P, - MSGCHAR_Q, - MSGCHAR_R, - MSGCHAR_S, - MSGCHAR_T, - MSGCHAR_U, - MSGCHAR_V, - MSGCHAR_W, - MSGCHAR_X, - MSGCHAR_Y, - MSGCHAR_Z, - MSGCHAR_a, - MSGCHAR_b, - MSGCHAR_c, - MSGCHAR_d, - MSGCHAR_e, - MSGCHAR_f, - MSGCHAR_g, - MSGCHAR_h, - MSGCHAR_i, - MSGCHAR_j, - MSGCHAR_k, - MSGCHAR_l, - MSGCHAR_m, - MSGCHAR_n, - MSGCHAR_o, - MSGCHAR_p, - MSGCHAR_q, - MSGCHAR_r, - MSGCHAR_s, - MSGCHAR_t, - MSGCHAR_u, - MSGCHAR_v, - MSGCHAR_w, - MSGCHAR_x, - MSGCHAR_y, - MSGCHAR_z, - MSGCHAR_EXM, - MSGCHAR_QST, - MSGCHAR_DSH, - MSGCHAR_CMA, - MSGCHAR_PRD, - MSGCHAR_0, - MSGCHAR_1, - MSGCHAR_2, - MSGCHAR_3, - MSGCHAR_4, - MSGCHAR_5, - MSGCHAR_6, - MSGCHAR_7, - MSGCHAR_8, - MSGCHAR_9, - MSGCHAR_APS, - MSGCHAR_LPR, - MSGCHAR_RPR, - MSGCHAR_CLN, - MSGCHAR_PIP, +void Radio_Draw(void); + +typedef enum MsgCharCode { + // Non-printing and whitespace + /* 0 */ MSGCHAR_END, // End message + /* 1 */ MSGCHAR_NWL, // New line + /* 2 */ MSGCHAR_NP2, // No effect + /* 3 */ MSGCHAR_NP3, // No effect + /* 4 */ MSGCHAR_NP4, // No effect + /* 5 */ MSGCHAR_NP5, // No effect + /* 6 */ MSGCHAR_NP6, // No effect + /* 7 */ MSGCHAR_NP7, // No effect + /* 8 */ MSGCHAR_PRI0, // Set message priority + /* 9 */ MSGCHAR_PRI1, // Set message priority + /* 10 */ MSGCHAR_PRI2, // Set message priority + /* 11 */ MSGCHAR_PRI3, // Set message priority + /* 12 */ MSGCHAR_SPC, // Space + /* 13 */ MSGCHAR_QSP, // Quarter space + /* 14 */ MSGCHAR_HSP, // Half Space + /* 15 */ MSGCHAR_NXT, // Next text box + + // printing characters + /* 16 */ MSGCHAR_CLF, // C-Left + /* 17 */ MSGCHAR_CUP, // C-Up + /* 18 */ MSGCHAR_CRT, // C-Right + /* 19 */ MSGCHAR_CDN, // C-Down + /* 20 */ MSGCHAR_AUP, // Up arrow + /* 21 */ MSGCHAR_ALF, // Left arrow + /* 22 */ MSGCHAR_ADN, // Down arrow + /* 23 */ MSGCHAR_ART, // Right arrow + /* 24 */ MSGCHAR_A, // A + /* 25 */ MSGCHAR_B, // B + /* 26 */ MSGCHAR_C, // C + /* 27 */ MSGCHAR_D, // D + /* 28 */ MSGCHAR_E, // E + /* 29 */ MSGCHAR_F, // F + /* 30 */ MSGCHAR_G, // G + /* 31 */ MSGCHAR_H, // H + /* 32 */ MSGCHAR_I, // I + /* 33 */ MSGCHAR_J, // J + /* 34 */ MSGCHAR_K, // K + /* 35 */ MSGCHAR_L, // L + /* 36 */ MSGCHAR_M, // M + /* 37 */ MSGCHAR_N, // N + /* 38 */ MSGCHAR_O, // O + /* 39 */ MSGCHAR_P, // P + /* 40 */ MSGCHAR_Q, // Q + /* 41 */ MSGCHAR_R, // R + /* 42 */ MSGCHAR_S, // S + /* 43 */ MSGCHAR_T, // T + /* 44 */ MSGCHAR_U, // U + /* 45 */ MSGCHAR_V, // V + /* 46 */ MSGCHAR_W, // W + /* 47 */ MSGCHAR_X, // X + /* 48 */ MSGCHAR_Y, // Y + /* 49 */ MSGCHAR_Z, // Z + /* 50 */ MSGCHAR_a, // a + /* 51 */ MSGCHAR_b, // b + /* 52 */ MSGCHAR_c, // c + /* 53 */ MSGCHAR_d, // d + /* 54 */ MSGCHAR_e, // e + /* 55 */ MSGCHAR_f, // f + /* 56 */ MSGCHAR_g, // g + /* 57 */ MSGCHAR_h, // h + /* 58 */ MSGCHAR_i, // i + /* 59 */ MSGCHAR_j, // j + /* 60 */ MSGCHAR_k, // k + /* 61 */ MSGCHAR_l, // l + /* 62 */ MSGCHAR_m, // m + /* 63 */ MSGCHAR_n, // n + /* 64 */ MSGCHAR_o, // o + /* 65 */ MSGCHAR_p, // p + /* 66 */ MSGCHAR_q, // q + /* 67 */ MSGCHAR_r, // r + /* 68 */ MSGCHAR_s, // s + /* 69 */ MSGCHAR_t, // t + /* 70 */ MSGCHAR_u, // u + /* 71 */ MSGCHAR_v, // v + /* 72 */ MSGCHAR_w, // w + /* 73 */ MSGCHAR_x, // x + /* 74 */ MSGCHAR_y, // y + /* 75 */ MSGCHAR_z, // z + /* 76 */ MSGCHAR_EXM, // ! + /* 77 */ MSGCHAR_QST, // ? + /* 78 */ MSGCHAR_DSH, // - + /* 79 */ MSGCHAR_CMA, // , + /* 80 */ MSGCHAR_PRD, // . + /* 81 */ MSGCHAR_0, // 0 + /* 82 */ MSGCHAR_1, // 1 + /* 83 */ MSGCHAR_2, // 2 + /* 84 */ MSGCHAR_3, // 3 + /* 85 */ MSGCHAR_4, // 4 + /* 86 */ MSGCHAR_5, // 5 + /* 87 */ MSGCHAR_6, // 6 + /* 88 */ MSGCHAR_7, // 7 + /* 89 */ MSGCHAR_8, // 8 + /* 90 */ MSGCHAR_9, // 9 + /* 91 */ MSGCHAR_APS, // ' + /* 92 */ MSGCHAR_LPR, // ( + /* 93 */ MSGCHAR_RPR, // ) + /* 94 */ MSGCHAR_CLN, // : + + // PAL exclusive characters + /* 95 */ MSGCHAR_e_grave, // è, placeholder in US + /* 96 */ MSGCHAR_e_acute, // é + /* 97 */ MSGCHAR_a_grave, // à + /* 98 */ MSGCHAR_e_hat, // ê + /* 99 */ MSGCHAR_i_hat, // î + /*100 */ MSGCHAR_o_hat, // ô + /*101 */ MSGCHAR_i_umlaut, // ï + /*102 */ MSGCHAR_u_hat, // û + /*103 */ MSGCHAR_c_cedilla, // ç + /*104 */ MSGCHAR_a_hat, // â + /*105 */ MSGCHAR_u_grave, // ú + /*106 */ MSGCHAR_u_umlaut, // ü + /*107 */ MSGCHAR_o_umlaut, // ö + /*108 */ MSGCHAR_a_umlaut, // ä + /*109 */ MSGCHAR_eszett, // ß + /*110 */ MSGCHAR_U_UMLAUT, // Ü + + // PAL placeholder textures + /*111 */ MSGCHAR_111, + /*112 */ MSGCHAR_112, + /*113 */ MSGCHAR_113, + /*114 */ MSGCHAR_114, + /*115 */ MSGCHAR_115, + /*116 */ MSGCHAR_116, + /*117 */ MSGCHAR_117, + /*118 */ MSGCHAR_118, + /*119 */ MSGCHAR_119, + /*120 */ MSGCHAR_120, + /*121 */ MSGCHAR_121, + /*122 */ MSGCHAR_122, + /*123 */ MSGCHAR_123, + /*124 */ MSGCHAR_124, + /*125 */ MSGCHAR_125, + /*126 */ MSGCHAR_126, + /*127 */ MSGCHAR_127, } MsgCharCode; +typedef enum MsgMojiCode { + // Non-printing and whitespace + /* 0 */ MSGMOJI_0, + /* 1 */ MSGMOJI_1, + /* 2 */ MSGMOJI_2, + /* 3 */ MSGMOJI_3, + /* 4 */ MSGMOJI_4, + /* 5 */ MSGMOJI_5, + /* 6 */ MSGMOJI_6, + /* 7 */ MSGMOJI_7, + /* 8 */ MSGMOJI_8, + /* 9 */ MSGMOJI_9, + /* 10 */ MSGMOJI_10, + /* 11 */ MSGMOJI_11, + /* 12 */ MSGMOJI_12, + /* 13 */ MSGMOJI_13, + /* 14 */ MSGMOJI_14, + /* 15 */ MSGMOJI_15, + + // Hiragana + /* 16 */ MSGMOJI_16, // a + /* 17 */ MSGMOJI_17, // A + /* 18 */ MSGMOJI_18, // i + /* 19 */ MSGMOJI_19, // I + /* 20 */ MSGMOJI_20, // u + /* 21 */ MSGMOJI_21, // U + /* 22 */ MSGMOJI_22, // e + /* 23 */ MSGMOJI_23, // E + /* 24 */ MSGMOJI_24, // o + /* 25 */ MSGMOJI_25, // O + /* 26 */ MSGMOJI_26, // ga + /* 27 */ MSGMOJI_27, // ka + /* 28 */ MSGMOJI_28, // gi + /* 29 */ MSGMOJI_29, // ki + /* 30 */ MSGMOJI_30, // gu + /* 31 */ MSGMOJI_31, // ku + /* 32 */ MSGMOJI_32, // ge + /* 33 */ MSGMOJI_33, // ke + /* 34 */ MSGMOJI_34, // go + /* 35 */ MSGMOJI_35, // ko + /* 36 */ MSGMOJI_36, // za + /* 37 */ MSGMOJI_37, // sa + /* 38 */ MSGMOJI_38, // ji + /* 39 */ MSGMOJI_39, // shi + /* 40 */ MSGMOJI_40, // zu + /* 41 */ MSGMOJI_41, // su + /* 42 */ MSGMOJI_42, // ze + /* 43 */ MSGMOJI_43, // se + /* 44 */ MSGMOJI_44, // zo + /* 45 */ MSGMOJI_45, // so + /* 46 */ MSGMOJI_46, // da + /* 47 */ MSGMOJI_47, // ta + /* 48 */ MSGMOJI_48, // ji + /* 49 */ MSGMOJI_49, // chi + /* 50 */ MSGMOJI_50, // sokuon + /* 51 */ MSGMOJI_51, // zu + /* 52 */ MSGMOJI_52, // tsu + /* 53 */ MSGMOJI_53, // de + /* 54 */ MSGMOJI_54, // te + /* 55 */ MSGMOJI_55, // do + /* 56 */ MSGMOJI_56, // to + /* 57 */ MSGMOJI_57, // na + /* 58 */ MSGMOJI_58, // ni + /* 59 */ MSGMOJI_59, // nu + /* 60 */ MSGMOJI_60, // ne + /* 61 */ MSGMOJI_61, // no + /* 62 */ MSGMOJI_62, // ba + /* 63 */ MSGMOJI_63, // pa + /* 64 */ MSGMOJI_64, // ha + /* 65 */ MSGMOJI_65, // bi + /* 66 */ MSGMOJI_66, // pi + /* 67 */ MSGMOJI_67, // hi + /* 68 */ MSGMOJI_68, // bu + /* 69 */ MSGMOJI_69, // pu + /* 70 */ MSGMOJI_70, // fu + /* 71 */ MSGMOJI_71, // be + /* 72 */ MSGMOJI_72, // pe + /* 73 */ MSGMOJI_73, // he + /* 74 */ MSGMOJI_74, // bo + /* 75 */ MSGMOJI_75, // po + /* 76 */ MSGMOJI_76, // ho + /* 77 */ MSGMOJI_77, // ma + /* 78 */ MSGMOJI_78, // mi + /* 79 */ MSGMOJI_79, // mu + /* 80 */ MSGMOJI_80, // me + /* 81 */ MSGMOJI_81, // mo + /* 82 */ MSGMOJI_82, // ya + /* 83 */ MSGMOJI_83, // Ya + /* 84 */ MSGMOJI_84, // yu + /* 85 */ MSGMOJI_85, // Yu + /* 86 */ MSGMOJI_86, // yo + /* 87 */ MSGMOJI_87, // Yo + /* 88 */ MSGMOJI_88, // ra + /* 89 */ MSGMOJI_89, // ri + /* 90 */ MSGMOJI_90, // ru + /* 91 */ MSGMOJI_91, // re + /* 92 */ MSGMOJI_92, // ro + /* 93 */ MSGMOJI_93, // wa + /* 94 */ MSGMOJI_94, // wo + /* 95 */ MSGMOJI_95, // n + + // Katakana + /* 96 */ MSGMOJI_96, // a + /* 97 */ MSGMOJI_97, // A + /* 98 */ MSGMOJI_98, // i + /* 99 */ MSGMOJI_99, // I + /* 100 */ MSGMOJI_100, // u + /* 101 */ MSGMOJI_101, // U + /* 102 */ MSGMOJI_102, // e + /* 103 */ MSGMOJI_103, // E + /* 104 */ MSGMOJI_104, // o + /* 105 */ MSGMOJI_105, // O + /* 106 */ MSGMOJI_106, // ga + /* 107 */ MSGMOJI_107, // ka + /* 108 */ MSGMOJI_108, // gi + /* 109 */ MSGMOJI_109, // ki + /* 110 */ MSGMOJI_110, // gu + /* 111 */ MSGMOJI_111, // ku + /* 112 */ MSGMOJI_112, // ge + /* 113 */ MSGMOJI_113, // ke + /* 114 */ MSGMOJI_114, // go + /* 115 */ MSGMOJI_115, // ko + /* 116 */ MSGMOJI_116, // za + /* 117 */ MSGMOJI_117, // sa + /* 118 */ MSGMOJI_118, // ji + /* 119 */ MSGMOJI_119, // shi + /* 120 */ MSGMOJI_120, // zu + /* 121 */ MSGMOJI_121, // su + /* 122 */ MSGMOJI_122, // ze + /* 123 */ MSGMOJI_123, // se + /* 124 */ MSGMOJI_124, // zo + /* 125 */ MSGMOJI_125, // so + /* 126 */ MSGMOJI_126, // da + /* 127 */ MSGMOJI_127, // ta + /* 128 */ MSGMOJI_128, // dji + /* 129 */ MSGMOJI_129, // chi + /* 130 */ MSGMOJI_130, // sokuon + /* 131 */ MSGMOJI_131, // dzu + /* 132 */ MSGMOJI_132, // tsu + /* 133 */ MSGMOJI_133, // de + /* 134 */ MSGMOJI_134, // te + /* 135 */ MSGMOJI_135, // do + /* 136 */ MSGMOJI_136, // to + /* 137 */ MSGMOJI_137, // na + /* 138 */ MSGMOJI_138, // ni + /* 139 */ MSGMOJI_139, // nu + /* 140 */ MSGMOJI_140, // ne + /* 141 */ MSGMOJI_141, // no + /* 142 */ MSGMOJI_142, // ba + /* 143 */ MSGMOJI_143, // pa + /* 144 */ MSGMOJI_144, // ha + /* 145 */ MSGMOJI_145, // bi + /* 146 */ MSGMOJI_146, // pi + /* 147 */ MSGMOJI_147, // hi + /* 148 */ MSGMOJI_148, // bu + /* 149 */ MSGMOJI_149, // pu + /* 150 */ MSGMOJI_150, // fu + /* 151 */ MSGMOJI_151, // be + /* 152 */ MSGMOJI_152, // pe + /* 153 */ MSGMOJI_153, // he + /* 154 */ MSGMOJI_154, // bo + /* 155 */ MSGMOJI_155, // po + /* 156 */ MSGMOJI_156, // ho + /* 157 */ MSGMOJI_157, // ma + /* 158 */ MSGMOJI_158, // mi + /* 159 */ MSGMOJI_159, // mu + /* 160 */ MSGMOJI_160, // me + /* 161 */ MSGMOJI_161, // mo + /* 162 */ MSGMOJI_162, // ya + /* 163 */ MSGMOJI_163, // Ya + /* 164 */ MSGMOJI_164, // yu + /* 165 */ MSGMOJI_165, // Yu + /* 166 */ MSGMOJI_166, // yo + /* 167 */ MSGMOJI_167, // Yo + /* 168 */ MSGMOJI_168, // ra + /* 169 */ MSGMOJI_169, // ri + /* 170 */ MSGMOJI_170, // ru + /* 171 */ MSGMOJI_171, // re + /* 172 */ MSGMOJI_172, // ro + /* 173 */ MSGMOJI_173, // wa + /* 174 */ MSGMOJI_174, // wo + /* 175 */ MSGMOJI_175, // n + /* 176 */ MSGMOJI_176, // choonpu + + // Kanji and other symbols + + /* 177 */ MSGMOJI_177, // C-Left + /* 178 */ MSGMOJI_178, // C-Right + /* 179 */ MSGMOJI_179, // C-Down + /* 180 */ MSGMOJI_180, // C-Up + /* 181 */ MSGMOJI_181, + /* 182 */ MSGMOJI_182, + /* 183 */ MSGMOJI_183, // Numeral 4 + /* 184 */ MSGMOJI_184, + /* 185 */ MSGMOJI_185, + /* 186 */ MSGMOJI_186, // Center dot + /* 187 */ MSGMOJI_187, + /* 188 */ MSGMOJI_188, + /* 189 */ MSGMOJI_189, + /* 190 */ MSGMOJI_190, + /* 191 */ MSGMOJI_191, + /* 192 */ MSGMOJI_192, + /* 193 */ MSGMOJI_193, + /* 194 */ MSGMOJI_194, + /* 195 */ MSGMOJI_195, // Latin D + /* 196 */ MSGMOJI_196, // Latin r + /* 197 */ MSGMOJI_197, // Period + /* 198 */ MSGMOJI_198, + /* 199 */ MSGMOJI_199, + /* 200 */ MSGMOJI_200, + /* 201 */ MSGMOJI_201, + /* 202 */ MSGMOJI_202, + /* 203 */ MSGMOJI_203, + /* 204 */ MSGMOJI_204, + /* 205 */ MSGMOJI_205, + /* 206 */ MSGMOJI_206, + /* 207 */ MSGMOJI_207, + /* 208 */ MSGMOJI_208, + /* 209 */ MSGMOJI_209, + /* 210 */ MSGMOJI_210, + /* 211 */ MSGMOJI_211, + /* 212 */ MSGMOJI_212, + /* 213 */ MSGMOJI_213, + /* 214 */ MSGMOJI_214, + /* 215 */ MSGMOJI_215, + /* 216 */ MSGMOJI_216, + /* 217 */ MSGMOJI_217, // Numeral 5 + /* 218 */ MSGMOJI_218, + /* 219 */ MSGMOJI_219, + /* 220 */ MSGMOJI_220, + /* 221 */ MSGMOJI_221, + /* 222 */ MSGMOJI_222, + /* 223 */ MSGMOJI_223, + /* 224 */ MSGMOJI_224, + /* 225 */ MSGMOJI_225, + /* 226 */ MSGMOJI_226, // Numeral 3 + /* 227 */ MSGMOJI_227, + /* 228 */ MSGMOJI_228, + /* 229 */ MSGMOJI_229, + /* 230 */ MSGMOJI_230, + /* 231 */ MSGMOJI_231, + /* 232 */ MSGMOJI_232, + /* 233 */ MSGMOJI_233, + /* 234 */ MSGMOJI_234, + /* 235 */ MSGMOJI_235, + /* 236 */ MSGMOJI_236, + /* 237 */ MSGMOJI_237, + /* 238 */ MSGMOJI_238, + /* 239 */ MSGMOJI_239, + /* 240 */ MSGMOJI_240, + /* 241 */ MSGMOJI_241, + /* 242 */ MSGMOJI_242, + /* 243 */ MSGMOJI_243, + /* 244 */ MSGMOJI_244, + /* 245 */ MSGMOJI_245, + /* 246 */ MSGMOJI_246, + /* 247 */ MSGMOJI_247, + /* 248 */ MSGMOJI_248, + /* 249 */ MSGMOJI_249, + /* 250 */ MSGMOJI_250, + /* 251 */ MSGMOJI_251, + /* 252 */ MSGMOJI_252, + /* 253 */ MSGMOJI_253, + /* 254 */ MSGMOJI_254, + /* 255 */ MSGMOJI_255, + /* 256 */ MSGMOJI_256, + /* 257 */ MSGMOJI_257, + /* 258 */ MSGMOJI_258, + /* 259 */ MSGMOJI_259, + /* 260 */ MSGMOJI_260, + /* 261 */ MSGMOJI_261, + /* 262 */ MSGMOJI_262, + /* 263 */ MSGMOJI_263, + /* 264 */ MSGMOJI_264, + /* 265 */ MSGMOJI_265, + /* 266 */ MSGMOJI_266, + /* 267 */ MSGMOJI_267, // ! + /* 268 */ MSGMOJI_268, + /* 269 */ MSGMOJI_269, + /* 270 */ MSGMOJI_270, + /* 271 */ MSGMOJI_271, + /* 272 */ MSGMOJI_272, + /* 273 */ MSGMOJI_273, + /* 274 */ MSGMOJI_274, + /* 275 */ MSGMOJI_275, + /* 276 */ MSGMOJI_276, + /* 277 */ MSGMOJI_277, + /* 278 */ MSGMOJI_278, + /* 279 */ MSGMOJI_279, + /* 280 */ MSGMOJI_280, + /* 281 */ MSGMOJI_281, + /* 282 */ MSGMOJI_282, + /* 283 */ MSGMOJI_283, + /* 284 */ MSGMOJI_284, + /* 285 */ MSGMOJI_285, + /* 286 */ MSGMOJI_286, + /* 287 */ MSGMOJI_287, + /* 288 */ MSGMOJI_288, + /* 289 */ MSGMOJI_289, + /* 290 */ MSGMOJI_290, + /* 291 */ MSGMOJI_291, + /* 292 */ MSGMOJI_292, // ? + /* 293 */ MSGMOJI_293, + /* 294 */ MSGMOJI_294, + /* 295 */ MSGMOJI_295, + /* 296 */ MSGMOJI_296, + /* 297 */ MSGMOJI_297, + /* 298 */ MSGMOJI_298, + /* 299 */ MSGMOJI_299, + /* 300 */ MSGMOJI_300, + /* 301 */ MSGMOJI_301, + /* 302 */ MSGMOJI_302, + /* 303 */ MSGMOJI_303, + /* 304 */ MSGMOJI_304, + /* 305 */ MSGMOJI_305, + /* 306 */ MSGMOJI_306, + /* 307 */ MSGMOJI_307, + /* 308 */ MSGMOJI_308, + /* 309 */ MSGMOJI_309, + /* 310 */ MSGMOJI_310, + /* 311 */ MSGMOJI_311, + /* 312 */ MSGMOJI_312, + /* 313 */ MSGMOJI_313, + /* 314 */ MSGMOJI_314, + /* 315 */ MSGMOJI_315, + /* 316 */ MSGMOJI_316, + /* 317 */ MSGMOJI_317, + /* 318 */ MSGMOJI_318, + /* 319 */ MSGMOJI_319, + /* 320 */ MSGMOJI_320, + /* 321 */ MSGMOJI_321, + /* 322 */ MSGMOJI_322, + /* 323 */ MSGMOJI_323, + /* 324 */ MSGMOJI_324, + /* 325 */ MSGMOJI_325, + /* 326 */ MSGMOJI_326, + /* 327 */ MSGMOJI_327, + /* 328 */ MSGMOJI_328, + /* 329 */ MSGMOJI_329, + /* 330 */ MSGMOJI_330, + /* 331 */ MSGMOJI_331, + /* 332 */ MSGMOJI_332, + /* 333 */ MSGMOJI_333, + /* 334 */ MSGMOJI_334, + /* 335 */ MSGMOJI_335, + /* 336 */ MSGMOJI_336, + /* 337 */ MSGMOJI_337, + /* 338 */ MSGMOJI_338, + /* 339 */ MSGMOJI_339, + /* 340 */ MSGMOJI_340, + /* 341 */ MSGMOJI_341, + /* 342 */ MSGMOJI_342, + /* 343 */ MSGMOJI_343, // Latin Y + /* 344 */ MSGMOJI_344, + /* 345 */ MSGMOJI_345, + /* 346 */ MSGMOJI_346, + /* 347 */ MSGMOJI_347, + /* 348 */ MSGMOJI_348, + /* 349 */ MSGMOJI_349, + /* 350 */ MSGMOJI_350, + /* 351 */ MSGMOJI_351, + /* 352 */ MSGMOJI_352, + /* 353 */ MSGMOJI_353, + /* 354 */ MSGMOJI_354, + /* 355 */ MSGMOJI_355, + /* 356 */ MSGMOJI_356, + /* 357 */ MSGMOJI_357, + /* 358 */ MSGMOJI_358, + /* 359 */ MSGMOJI_359, + /* 360 */ MSGMOJI_360, // Latin G + /* 361 */ MSGMOJI_361, + /* 362 */ MSGMOJI_362, + /* 363 */ MSGMOJI_363, + /* 364 */ MSGMOJI_364, + /* 365 */ MSGMOJI_365, // Latin O + /* 366 */ MSGMOJI_366, // Latin K + /* 367 */ MSGMOJI_367, + /* 368 */ MSGMOJI_368, + /* 369 */ MSGMOJI_369, + /* 370 */ MSGMOJI_370, + /* 371 */ MSGMOJI_371, // ~ + /* 372 */ MSGMOJI_372, + /* 373 */ MSGMOJI_373, + /* 374 */ MSGMOJI_374, + /* 375 */ MSGMOJI_375, // Latin Z + /* 376 */ MSGMOJI_376, // Latin R + /* 377 */ MSGMOJI_377, // Numeral 2 + /* 378 */ MSGMOJI_378, + /* 379 */ MSGMOJI_379, + /* 380 */ MSGMOJI_380, + /* 381 */ MSGMOJI_381, // Latin C + /* 382 */ MSGMOJI_382, + /* 383 */ MSGMOJI_383, + /* 384 */ MSGMOJI_384, + /* 385 */ MSGMOJI_385, + /* 386 */ MSGMOJI_386, + /* 387 */ MSGMOJI_387, + /* 388 */ MSGMOJI_388, + /* 389 */ MSGMOJI_389, + /* 390 */ MSGMOJI_390, + /* 391 */ MSGMOJI_391, + /* 392 */ MSGMOJI_392, + /* 393 */ MSGMOJI_393, + /* 394 */ MSGMOJI_394, + /* 395 */ MSGMOJI_395, + /* 396 */ MSGMOJI_396, + /* 397 */ MSGMOJI_397, + /* 398 */ MSGMOJI_398, + /* 399 */ MSGMOJI_399, + /* 400 */ MSGMOJI_400, + /* 401 */ MSGMOJI_401, + /* 402 */ MSGMOJI_402, + /* 403 */ MSGMOJI_403, + /* 404 */ MSGMOJI_404, + /* 405 */ MSGMOJI_405, + /* 406 */ MSGMOJI_406, + /* 407 */ MSGMOJI_407, + /* 408 */ MSGMOJI_408, + /* 409 */ MSGMOJI_409, + /* 410 */ MSGMOJI_410, + /* 411 */ MSGMOJI_411, + /* 412 */ MSGMOJI_412, + /* 413 */ MSGMOJI_413, + /* 414 */ MSGMOJI_414, + /* 415 */ MSGMOJI_415, + /* 416 */ MSGMOJI_416, + /* 417 */ MSGMOJI_417, + /* 418 */ MSGMOJI_418, + /* 419 */ MSGMOJI_419, + /* 420 */ MSGMOJI_420, + /* 421 */ MSGMOJI_421, + /* 422 */ MSGMOJI_422, + /* 423 */ MSGMOJI_423, + /* 424 */ MSGMOJI_424, + /* 425 */ MSGMOJI_425, + /* 426 */ MSGMOJI_426, + /* 427 */ MSGMOJI_427, + /* 428 */ MSGMOJI_428, + /* 429 */ MSGMOJI_429, + /* 430 */ MSGMOJI_430, + /* 431 */ MSGMOJI_431, + /* 432 */ MSGMOJI_432, + /* 433 */ MSGMOJI_433, + /* 434 */ MSGMOJI_434, + /* 435 */ MSGMOJI_435, + /* 436 */ MSGMOJI_436, // Numeral 1 + /* 437 */ MSGMOJI_437, + /* 438 */ MSGMOJI_438, + /* 439 */ MSGMOJI_439, + /* 440 */ MSGMOJI_440, + /* 441 */ MSGMOJI_441, + /* 442 */ MSGMOJI_442, + /* 443 */ MSGMOJI_443, + /* 444 */ MSGMOJI_444, + /* 445 */ MSGMOJI_445, + /* 446 */ MSGMOJI_446, + /* 447 */ MSGMOJI_447, + /* 448 */ MSGMOJI_448, + /* 449 */ MSGMOJI_449, + /* 450 */ MSGMOJI_450, + /* 451 */ MSGMOJI_451, + /* 452 */ MSGMOJI_452, + /* 453 */ MSGMOJI_453, + /* 454 */ MSGMOJI_454, + /* 455 */ MSGMOJI_455, + /* 456 */ MSGMOJI_456, + /* 457 */ MSGMOJI_457, + /* 458 */ MSGMOJI_458, + /* 459 */ MSGMOJI_459, + /* 460 */ MSGMOJI_460, + /* 461 */ MSGMOJI_461, + /* 462 */ MSGMOJI_462, + /* 463 */ MSGMOJI_463, + /* 464 */ MSGMOJI_464, + /* 465 */ MSGMOJI_465, + /* 466 */ MSGMOJI_466, + /* 467 */ MSGMOJI_467, + /* 468 */ MSGMOJI_468, + /* 469 */ MSGMOJI_469, + /* 470 */ MSGMOJI_470, + /* 471 */ MSGMOJI_471, + /* 472 */ MSGMOJI_472, + /* 473 */ MSGMOJI_473, + /* 474 */ MSGMOJI_474, + /* 475 */ MSGMOJI_475, + /* 476 */ MSGMOJI_476, + /* 477 */ MSGMOJI_477, + /* 478 */ MSGMOJI_478, + /* 479 */ MSGMOJI_479, + /* 480 */ MSGMOJI_480, + /* 481 */ MSGMOJI_481, + /* 482 */ MSGMOJI_482, + /* 483 */ MSGMOJI_483, + /* 484 */ MSGMOJI_484, + /* 485 */ MSGMOJI_485, + /* 486 */ MSGMOJI_486, + /* 487 */ MSGMOJI_487, + /* 488 */ MSGMOJI_488, + /* 489 */ MSGMOJI_489, + /* 490 */ MSGMOJI_490, + /* 491 */ MSGMOJI_491, + /* 492 */ MSGMOJI_492, + /* 493 */ MSGMOJI_493, + /* 494 */ MSGMOJI_494, + /* 495 */ MSGMOJI_495, + /* 496 */ MSGMOJI_496, + /* 497 */ MSGMOJI_497, + /* 498 */ MSGMOJI_498, + /* 499 */ MSGMOJI_499, + /* 500 */ MSGMOJI_500, + /* 501 */ MSGMOJI_501, + /* 502 */ MSGMOJI_502, + /* 503 */ MSGMOJI_503, + /* 504 */ MSGMOJI_504, + /* 505 */ MSGMOJI_505, + /* 506 */ MSGMOJI_506, + /* 507 */ MSGMOJI_507, + /* 508 */ MSGMOJI_508, + /* 509 */ MSGMOJI_509, + /* 510 */ MSGMOJI_510, + /* 511 */ MSGMOJI_511, + /* 512 */ MSGMOJI_512, + /* 513 */ MSGMOJI_513, + /* 514 */ MSGMOJI_514, + /* 515 */ MSGMOJI_515, + /* 516 */ MSGMOJI_516, + /* 517 */ MSGMOJI_517, + /* 518 */ MSGMOJI_518, + /* 519 */ MSGMOJI_519, + /* 520 */ MSGMOJI_520, + /* 521 */ MSGMOJI_521, + /* 522 */ MSGMOJI_522, + /* 523 */ MSGMOJI_523, + /* 524 */ MSGMOJI_524, // Numeral 0 + /* 525 */ MSGMOJI_525, + /* 526 */ MSGMOJI_526, + /* 527 */ MSGMOJI_527, + /* 528 */ MSGMOJI_528, + /* 529 */ MSGMOJI_529, + /* 530 */ MSGMOJI_530, + /* 531 */ MSGMOJI_531, + /* 532 */ MSGMOJI_532, + /* 533 */ MSGMOJI_533, + /* 534 */ MSGMOJI_534, + /* 535 */ MSGMOJI_535, + /* 536 */ MSGMOJI_536, + /* 537 */ MSGMOJI_537, + /* 538 */ MSGMOJI_538, + /* 539 */ MSGMOJI_539, + /* 540 */ MSGMOJI_540, + /* 541 */ MSGMOJI_541, + /* 542 */ MSGMOJI_542, + /* 543 */ MSGMOJI_543, + /* 544 */ MSGMOJI_544, + /* 545 */ MSGMOJI_545, + /* 546 */ MSGMOJI_546, + /* 547 */ MSGMOJI_547, + /* 548 */ MSGMOJI_548, + /* 549 */ MSGMOJI_549, + /* 550 */ MSGMOJI_550, + /* 551 */ MSGMOJI_551, + /* 552 */ MSGMOJI_552, + /* 553 */ MSGMOJI_553, + /* 554 */ MSGMOJI_554, + /* 555 */ MSGMOJI_555, + /* 556 */ MSGMOJI_556, + /* 557 */ MSGMOJI_557, + /* 558 */ MSGMOJI_558, + /* 559 */ MSGMOJI_559, + /* 560 */ MSGMOJI_560, + /* 561 */ MSGMOJI_561, + /* 562 */ MSGMOJI_562, + /* 563 */ MSGMOJI_563, + /* 564 */ MSGMOJI_564, + /* 565 */ MSGMOJI_565, + /* 566 */ MSGMOJI_566, + /* 567 */ MSGMOJI_567, + /* 568 */ MSGMOJI_568, + /* 569 */ MSGMOJI_569, + /* 570 */ MSGMOJI_570, + /* 571 */ MSGMOJI_571, + /* 572 */ MSGMOJI_572, + /* 573 */ MSGMOJI_573, + /* 574 */ MSGMOJI_574, + /* 575 */ MSGMOJI_575, + /* 576 */ MSGMOJI_576, + /* 577 */ MSGMOJI_577, + /* 578 */ MSGMOJI_578, + /* 579 */ MSGMOJI_579, + /* 580 */ MSGMOJI_580, + /* 581 */ MSGMOJI_581, + /* 582 */ MSGMOJI_582, + /* 583 */ MSGMOJI_583, + /* 584 */ MSGMOJI_584, + /* 585 */ MSGMOJI_585, + /* 586 */ MSGMOJI_586, + /* 587 */ MSGMOJI_587, + /* 588 */ MSGMOJI_588, + /* 589 */ MSGMOJI_589, + /* 590 */ MSGMOJI_590, + /* 591 */ MSGMOJI_591, + /* 592 */ MSGMOJI_592, + /* 593 */ MSGMOJI_593, + /* 594 */ MSGMOJI_594, + /* 595 */ MSGMOJI_595, + /* 596 */ MSGMOJI_596, + /* 597 */ MSGMOJI_597, + /* 598 */ MSGMOJI_598, + /* 599 */ MSGMOJI_599, + /* 600 */ MSGMOJI_600, + /* 601 */ MSGMOJI_601, + /* 602 */ MSGMOJI_602, + /* 603 */ MSGMOJI_603, // Numeral 9 + /* 604 */ MSGMOJI_604, + /* 605 */ MSGMOJI_605, + /* 606 */ MSGMOJI_606, + /* 607 */ MSGMOJI_607, // Numeral 6 + /* 608 */ MSGMOJI_608, + /* 609 */ MSGMOJI_609, // Numeral 8 + /* 610 */ MSGMOJI_610, + /* 611 */ MSGMOJI_611, + /* 612 */ MSGMOJI_612, + /* 613 */ MSGMOJI_613, + /* 614 */ MSGMOJI_614, + /* 615 */ MSGMOJI_615, + /* 616 */ MSGMOJI_616, + /* 617 */ MSGMOJI_617, + /* 618 */ MSGMOJI_618, + /* 619 */ MSGMOJI_619, + /* 620 */ MSGMOJI_620, + /* 621 */ MSGMOJI_621, + /* 622 */ MSGMOJI_622, + /* 623 */ MSGMOJI_623, + /* 624 */ MSGMOJI_624, + /* 625 */ MSGMOJI_625, + /* 626 */ MSGMOJI_626, + /* 627 */ MSGMOJI_627, + /* 628 */ MSGMOJI_628, + /* 629 */ MSGMOJI_629, + /* 630 */ MSGMOJI_630, + /* 631 */ MSGMOJI_631, + /* 632 */ MSGMOJI_632, + /* 633 */ MSGMOJI_633, + /* 634 */ MSGMOJI_634, + /* 635 */ MSGMOJI_635, + /* 636 */ MSGMOJI_636, + /* 637 */ MSGMOJI_637, + /* 638 */ MSGMOJI_638, + /* 639 */ MSGMOJI_639, + /* 640 */ MSGMOJI_640, + /* 641 */ MSGMOJI_641, + /* 642 */ MSGMOJI_642, + /* 643 */ MSGMOJI_643, + /* 644 */ MSGMOJI_644, + /* 645 */ MSGMOJI_645, + /* 646 */ MSGMOJI_646, + /* 647 */ MSGMOJI_647, + /* 648 */ MSGMOJI_648, + /* 649 */ MSGMOJI_649, + /* 650 */ MSGMOJI_650, + /* 651 */ MSGMOJI_651, + /* 652 */ MSGMOJI_652, + /* 653 */ MSGMOJI_653, + /* 654 */ MSGMOJI_654, + /* 655 */ MSGMOJI_655, + /* 656 */ MSGMOJI_656, + /* 657 */ MSGMOJI_657, + /* 658 */ MSGMOJI_658, + /* 659 */ MSGMOJI_659, + /* 660 */ MSGMOJI_660, + /* 661 */ MSGMOJI_661, + /* 662 */ MSGMOJI_662, + /* 663 */ MSGMOJI_663, + /* 664 */ MSGMOJI_664, + /* 665 */ MSGMOJI_665, + /* 666 */ MSGMOJI_666, + /* 667 */ MSGMOJI_667, + /* 668 */ MSGMOJI_668, + /* 669 */ MSGMOJI_669, + /* 670 */ MSGMOJI_670, + /* 671 */ MSGMOJI_671, + /* 672 */ MSGMOJI_672, + /* 673 */ MSGMOJI_673, + /* 674 */ MSGMOJI_674, + /* 675 */ MSGMOJI_675, + /* 676 */ MSGMOJI_676, + /* 677 */ MSGMOJI_677, + /* 678 */ MSGMOJI_678, + /* 679 */ MSGMOJI_679, + /* 680 */ MSGMOJI_680, + /* 681 */ MSGMOJI_681, + /* 682 */ MSGMOJI_682, + /* 683 */ MSGMOJI_683, + /* 684 */ MSGMOJI_684, + /* 685 */ MSGMOJI_685, + /* 686 */ MSGMOJI_686, + /* 687 */ MSGMOJI_687, + /* 688 */ MSGMOJI_688, + /* 689 */ MSGMOJI_689, + /* 690 */ MSGMOJI_690, + /* 691 */ MSGMOJI_691, // Latin B + /* 692 */ MSGMOJI_692, + /* 693 */ MSGMOJI_693, + /* 694 */ MSGMOJI_694, + /* 695 */ MSGMOJI_695, + /* 696 */ MSGMOJI_696, + /* 697 */ MSGMOJI_697, + /* 698 */ MSGMOJI_698, + /* 699 */ MSGMOJI_699, + /* 700 */ MSGMOJI_700, // Latin A + /* 701 */ MSGMOJI_701, + /* 702 */ MSGMOJI_702, + /* 703 */ MSGMOJI_703, + /* 704 */ MSGMOJI_704, + /* 705 */ MSGMOJI_705, + /* 706 */ MSGMOJI_706, + /* 707 */ MSGMOJI_707, + /* 708 */ MSGMOJI_708, + /* 709 */ MSGMOJI_709, + /* 710 */ MSGMOJI_710, + /* 711 */ MSGMOJI_711, + /* 712 */ MSGMOJI_712, + /* 713 */ MSGMOJI_713, + /* 714 */ MSGMOJI_714, + /* 715 */ MSGMOJI_715, // Latin U + /* 716 */ MSGMOJI_716, + /* 717 */ MSGMOJI_717, + /* 718 */ MSGMOJI_718, + /* 719 */ MSGMOJI_719, + /* 720 */ MSGMOJI_720, + /* 721 */ MSGMOJI_721, + /* 722 */ MSGMOJI_722, + /* 723 */ MSGMOJI_723, + /* 724 */ MSGMOJI_724, // Latin P + /* 725 */ MSGMOJI_725, + /* 726 */ MSGMOJI_726, + + // Blank textures + /* 727 */ MSGMOJI_727, + /* 728 */ MSGMOJI_728, + /* 729 */ MSGMOJI_729, + /* 730 */ MSGMOJI_730, + /* 731 */ MSGMOJI_731, + /* 732 */ MSGMOJI_732, + /* 733 */ MSGMOJI_733, + /* 734 */ MSGMOJI_734, + /* 735 */ MSGMOJI_735, +} MsgMojiCode; + #endif diff --git a/include/sf64object.h b/include/sf64object.h index 7ccda766..5a87d32a 100644 --- a/include/sf64object.h +++ b/include/sf64object.h @@ -4,9 +4,9 @@ #include <libultraship.h> #include "sf64math.h" -#define HITBOX_TYPE_2 200000.0f -#define HITBOX_TYPE_3 300000.0f -#define HITBOX_TYPE_4 400000.0f +#define HITBOX_ROTATED 200000.0f +#define HITBOX_SHADOW 300000.0f +#define HITBOX_WHOOSH 400000.0f typedef struct { /* 0x0 */ f32 offset; @@ -20,8 +20,8 @@ typedef struct { } Hitbox; // size = 0x18 typedef struct { - /* 0x00 */ Triangle tri; - /* 0x08 */ PlaneI plane; + /* 0x00 */ Triangle tri; + /* 0x08 */ PlaneI plane; } CollisionPoly; // size = 0x14 typedef struct { @@ -33,46 +33,46 @@ typedef struct { } CollisionHeader; // size = 0x24 typedef struct { - /* 0x00 */ Vec3f min; - /* 0x0C */ Vec3f max; - /* 0x18 */ s32 polyCount; - /* 0x1C */ Triangle* polys; - /* 0x20 */ Vec3f* mesh; + /* 0x00 */ Vec3f min; + /* 0x0C */ Vec3f max; + /* 0x18 */ s32 polyCount; + /* 0x1C */ Triangle* polys; + /* 0x20 */ Vec3f* mesh; } CollisionHeader2; // size = 0x24 typedef enum { - /* 0 */ COL1_0, // OBJ_ACTOR_180 - /* 1 */ COL1_1, // OBJ_80_39 + /* 0 */ COL1_0, // OBJ_ACTOR_ME_MOLAR_ROCK + /* 1 */ COL1_1, // OBJ_SCENERY_ME_TUNNEL /* 2 */ COL1_2, /* 3 */ COL1_3, // ACTOR_EVENT_ID - /* 4 */ COL1_4, // OBJ_BOSS_308 - /* 5 */ COL1_5, // OBJ_80_149 - /* 6 */ COL1_6, // OBJ_80_150 - /* 7 */ COL1_7, // OBJ_BOSS_309 - /* 8 */ COL1_8, // OBJ_BOSS_313 - /* 9 */ COL1_9, // OBJ_BOSS_312 + /* 4 */ COL1_4, // OBJ_BOSS_FO_BASE + /* 5 */ COL1_5, // OBJ_SCENERY_FO_MOUNTAIN_2 + /* 6 */ COL1_6, // OBJ_SCENERY_FO_MOUNTAIN_3 + /* 7 */ COL1_7, // OBJ_BOSS_BO_BASE + /* 8 */ COL1_8, // OBJ_BOSS_SZ_GREAT_FOX + /* 9 */ COL1_9, // OBJ_BOSS_VE2_BASE } CollisonId_1; typedef enum { - /* 0 */ COL2_0, // default - /* 1 */ COL2_1, // OBJ_80_4, OBJ_80_5 - /* 2 */ COL2_2, // OBJ_80_2 - /* 3 */ COL2_3, // OBJ_80_3, OBJ_80_69 - /* 4 */ COL2_4, // OBJ_80_140 - /* 5 */ COL2_5, // PLAYERSHOT_7 ? - /* 6 */ COL2_6, // OBJ_80_141 - /* 7 */ COL2_7, // OBJ_80_47 - /* 8 */ COL2_8, // OBJ_80_70 - /* 9 */ COL2_9, // OBJ_80_72 - /* 10 */ COL2_10, // OBJ_80_71 - /* 11 */ COL2_11, // OBJ_80_73 - /* 12 */ COL2_12, // OBJ_80_67 - /* 13 */ COL2_13, // OBJ_80_74 - /* 14 */ COL2_14, // OBJ_80_117 - /* 15 */ COL2_15, // OBJ_80_124 - /* 16 */ COL2_16, // OBJ_80_126 - /* 17 */ COL2_17, // OBJ_80_143 - /* 18 */ COL2_18, // OBJ_80_120 + /* 0 */ COL2_0, // default + /* 1 */ COL2_1, // OBJ_SCENERY_CO_BUMP_4, OBJ_SCENERY_CO_BUMP_5 + /* 2 */ COL2_2, // OBJ_SCENERY_CO_BUMP_2 + /* 3 */ COL2_3, // OBJ_SCENERY_CO_BUMP_3, OBJ_SCENERY_MA_TERRAIN_BUMP + /* 4 */ COL2_4, // OBJ_SCENERY_VS_PYRAMID_1 + /* 5 */ COL2_5, // PLAYERSHOT_7 ? + /* 6 */ COL2_6, // OBJ_SCENERY_VS_PYRAMID_2 + /* 7 */ COL2_7, // OBJ_SCENERY_ZO_ISLAND + /* 8 */ COL2_8, // OBJ_SCENERY_MA_FLOOR_1 + /* 9 */ COL2_9, // OBJ_SCENERY_MA_FLOOR_3 + /* 10 */ COL2_10, // OBJ_SCENERY_MA_FLOOR_2 + /* 11 */ COL2_11, // OBJ_SCENERY_MA_FLOOR_4 + /* 12 */ COL2_12, // OBJ_SCENERY_MA_WALL_3 + /* 13 */ COL2_13, // OBJ_SCENERY_MA_FLOOR_5 + /* 14 */ COL2_14, // OBJ_SCENERY_AQ_CORAL_REEF_1 + /* 15 */ COL2_15, // OBJ_SCENERY_AQ_BUMP_1 + /* 16 */ COL2_16, // OBJ_SCENERY_AQ_BUMP_2 + /* 17 */ COL2_17, // OBJ_SCENERY_VS_KA_FLBASE + /* 18 */ COL2_18, // OBJ_SCENERY_AQ_CORAL_REEF_2 } CollisionId_2; typedef struct { @@ -85,18 +85,36 @@ typedef struct { } ObjectInit; // size = 0x14 typedef struct { - /* 0x00 */ Gfx* dList; - /* 0x04 */ f32* hitbox; - /* 0x08 */ f32 scale; - /* 0x0C */ f32 info_unk_10; - /* 0x10 */ f32 unk_10; - /* 0x14 */ u8 info_unk_16; - /* 0x15 */ u8 info_unk_14; - /* 0x16 */ u8 sfx; - /* 0x17 */ u8 info_unk_19; - /* 0x18 */ f32 info_unk_1C; - /* 0x1C */ u8 bonus; -} UnkStruct_D003C; // size = 0x20 + /* 0x00 */ u8 enabled; + /* 0x02 */ u16 type; + /* 0x04 */ Vec3f pos; + /* 0x10 */ f32 yRot; + /* 0x14 */ char pad14[0x14]; +} RadarMark; // size = 0x28 + +typedef struct { + /* 0x00 */ u8 mode; + /* 0x02 */ u16 timer; + /* 0x04 */ Vec3f posAA; + /* 0x10 */ Vec3f posBB; + /* 0x1C */ f32 xRot; + /* 0x20 */ f32 yRot; + /* 0x24 */ f32 zScale; + /* 0x28 */ f32 xyScale; + /* 0x2C */ Color_RGBA32 prim; +} TexturedLine; // size = 0x30 + +typedef struct { + /* 0x00 */ u8 hits; + /* 0x04 */ Vec3f pos; + /* 0x10 */ f32 rise; + /* 0x14 */ char pad14[0x4]; + /* 0x18 */ u16 timer; +} BonusText; // size = 0x1C + +#define BONUS_TEXT_FREE 0 +#define BONUS_TEXT_GREAT 100 +#define BONUS_TEXT_1UP 101 typedef enum ObjectStatus { /* 0 */ OBJ_FREE, @@ -105,7 +123,7 @@ typedef enum ObjectStatus { /* 3 */ OBJ_DYING, } ObjectStatus; -typedef struct { +typedef struct Object { /* 0x00 */ u8 status; /* 0x02 */ u16 id; /* 0x04 */ Vec3f pos; @@ -114,7 +132,7 @@ typedef struct { typedef void (*ObjectFunc)(Object*); -typedef struct { +typedef struct ObjectInfo { /* 0x00 */ union { ObjectFunc draw; Gfx* dList; @@ -122,25 +140,25 @@ typedef struct { /* 0x00 */ u8 drawType; /* 0x08 */ ObjectFunc action; // argument must have object type. /* 0x0C */ f32* hitbox; - /* 0x10 */ f32 unk_10; // z coordinate of something - /* 0x14 */ s16 unk_14; // can be -1, 0, 1 - /* 0x16 */ s16 unk_16; // can be 0, 1, 2 + /* 0x10 */ f32 cullDistance; // z coordinate of something + /* 0x14 */ s16 unk_14; // can be -1, 0, 1. governs camera-related behavior in effects (billboarding?) + /* 0x16 */ s16 unk_16; // can be 0, 1, 2. affects death behavior? /* 0x18 */ u8 damage; - /* 0x19 */ u8 unk_19; // can be 0, 1, 2 - /* 0x1C */ f32 unk_1C; // y offset of something - /* 0x20 */ u8 bonus; -} ObjectInfo; // size = 0x24 + /* 0x19 */ u8 unk_19; // can be 0, 1, 2. Also camera-related? + /* 0x1C */ f32 targetOffset; // target lock y offset. 0.0f can't be targeted + /* 0x20 */ u8 bonus; // hits when killed. numbers above 1 indicate the hit+ bonus +} ObjectInfo; // size = 0x24 -typedef struct { +typedef struct Scenery360 { /* 0x00 */ Object obj; /* 0x1C */ ObjectInfo info; - /* 0x40 */ u8 unk_40; + /* 0x40 */ u8 pathIndex; /* 0x41 */ char unk_41[7]; /* 0x48 */ f32 sfxSource[3]; /* 0x54 */ f32 unk_54; -} Object_58; // size = 0x58 +} Scenery360; // size = 0x58 -typedef struct { +typedef struct Scenery { /* 0x00 */ Object obj; /* 0x1C */ ObjectInfo info; /* 0x40 */ s32 index; @@ -148,27 +166,24 @@ typedef struct { /* 0x48 */ s32 state; /* 0x4C */ s32 timer_4C; /* 0x50 */ s8 dmgType; - /* 0x51 */ char pad51[3]; /* 0x54 */ s32 dmgPart; - /* 0x58 */ f32 unk_58; - /* 0x5C */ f32 unk_5C; - /* 0x60 */ f32 unk_60; + /* 0x58 */ Vec3f effectVel; /* 0x64 */ Vec3f vel; /* 0x70 */ f32 sfxSource[3]; /* 0x7C */ char pad7C[4]; -} Object_80; // size = 0x80 +} Scenery; // size = 0x80 -typedef struct { +typedef struct Sprite { /* 0x00 */ Object obj; /* 0x1C */ ObjectInfo info; /* 0x40 */ s32 index; /* 0x44 */ char pad44[1]; - /* 0x45 */ u8 unk_45; - /* 0x46 */ s8 unk_46; - /* 0x48 */ s32 unk_48; -} Object_4C; // size = 0x4C + /* 0x45 */ u8 sceneryId; + /* 0x46 */ s8 destroy; + /* 0x48 */ s32 toLeft; +} Sprite; // size = 0x4C -typedef struct { +typedef struct Item { /* 0x00 */ Object obj; /* 0x1C */ ObjectInfo info; /* 0x40 */ s32 index; @@ -182,10 +197,10 @@ typedef struct { /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ f32 sfxSource[3]; - /* 0x68 */ f32 scale; + /* 0x68 */ f32 width; } Item; // size 0x6C -typedef struct { +typedef struct Effect { /* 0x00 */ Object obj; /* 0x1C */ ObjectInfo info; /* 0x40 */ s32 index; @@ -208,15 +223,15 @@ typedef struct { /* 0x80 */ f32 sfxSource[3]; } Effect; // size 0x8C -typedef struct { +typedef struct Boss { /* 0x000 */ Object obj; /* 0x01C */ ObjectInfo info; /* 0x040 */ s32 index; - /* 0x044 */ s16 unk_044; - /* 0x046 */ s16 unk_046; - /* 0x048 */ s16 unk_048; - /* 0x04A */ s16 unk_04A; - /* 0x04C */ s16 unk_04C; + /* 0x044 */ s16 work_044; + /* 0x046 */ s16 work_046; + /* 0x048 */ s16 work_048; + /* 0x04A */ s16 work_04A; + /* 0x04C */ s16 animFrame; /* 0x04E */ s16 state; /* 0x050 */ s16 timer_050; /* 0x052 */ s16 timer_052; @@ -225,40 +240,42 @@ typedef struct { /* 0x058 */ s16 timer_058; /* 0x05A */ s16 timer_05A; /* 0x05C */ s16 timer_05C; - /* 0x05E */ u8 unk_05E; + /* 0x05E */ u8 drawShadow; /* 0x060 */ s16 health; /* 0x062 */ s8 dmgType; /* 0x064 */ s16 damage; /* 0x066 */ s16 dmgPart; - /* 0x068 */ f32 unk_068; + /* 0x068 */ f32 yOffset; /* 0x06C */ Vec3f vel; - /* 0x078 */ Vec3f unk_078; + /* 0x078 */ Vec3f rot_078; /* 0x084 */ f32 gravity; /* 0x088 */ s16 swork[40]; /* 0x0D8 */ f32 fwork[50]; /* 0x1A0 */ Vec3f vwork[50]; - /* 0x3F8 */ f32 unk_3F8; + /* 0x3F8 */ f32 scale; /* 0x3FC */ f32 sfxSource[3]; } Boss; // size = 0x408 +#define DMG_COLLISION 3 +#define DMG_EXPLOSION 2 #define DMG_BEAM 1 #define DMG_NONE 0 #define DMG_BOMB -1 -#define DMG_UNK_100 100 +#define DMG_MISSILE 100 -typedef struct { +typedef struct Actor { /* 0x000 */ Object obj; /* 0x01C */ ObjectInfo info; /* 0x040 */ s32 index; /* 0x044 */ u8 itemDrop; - /* 0x046 */ s16 unk_046; - /* 0x048 */ s16 unk_048; - /* 0x04A */ s16 unk_04A; - /* 0x04C */ s16 timer_04C; - /* 0x04E */ s16 unk_04E; + /* 0x046 */ s16 work_046; + /* 0x048 */ s16 work_048; + /* 0x04A */ s16 work_04A; + /* 0x04C */ s16 work_04C; + /* 0x04E */ s16 counter_04E; /* 0x050 */ uintptr_t iwork[25]; - /* 0x0B4 */ s16 unk_0B4; - /* 0x0B6 */ s16 unk_0B6; + /* 0x0B4 */ s16 eventType; + /* 0x0B6 */ s16 animFrame; // used for model type in ActorAllRange and ActorCutscene /* 0x0B8 */ s16 state; /* 0x0BA */ char pad0BA[0x2]; /* 0x0BC */ u16 timer_0BC; @@ -267,19 +284,19 @@ typedef struct { /* 0x0C2 */ u16 timer_0C2; /* 0x0C4 */ u16 timer_0C4; /* 0x0C6 */ u16 timer_0C6; - /* 0x0C8 */ u8 unk_0C8; - /* 0x0C9 */ u8 unk_0C9; - /* 0x0CA */ u8 timer_0CA[4]; + /* 0x0C8 */ u8 unk_0C8; // may have been used for scenery shadowing + /* 0x0C9 */ u8 drawShadow; + /* 0x0CA */ u8 lockOnTimers[4]; /* 0x0CE */ s16 health; - /* 0x0D0 */ s8 unk_0D0; - /* 0x0D2 */ s16 unk_0D2; - /* 0x0D4 */ s16 unk_0D4; + /* 0x0D0 */ s8 dmgType; + /* 0x0D2 */ s16 dmgPart; + /* 0x0D4 */ s16 dmgSource; /* 0x0D6 */ u16 damage; - /* 0x0D8 */ Vec3f unk_0D8; - /* 0x0E4 */ s16 aiType; - /* 0x0E6 */ s16 aiIndex; + /* 0x0D8 */ Vec3f hitPos; + /* 0x0E4 */ s16 aiType; // Actor index for AllRange, script index for Event + /* 0x0E6 */ s16 aiIndex; // Target index for AllRange, program counter for Event /* 0x0E8 */ Vec3f vel; - /* 0x0F4 */ Vec3f unk_0F4; + /* 0x0F4 */ Vec3f rot_0F4; /* 0x100 */ f32 sfxSource[3]; /* 0x10C */ f32 gravity; /* 0x110 */ f32 scale; @@ -288,419 +305,463 @@ typedef struct { } Actor; // size = 0x2F4 typedef enum ObjectId { - /* -1 */ OBJ_INVALID=-1, - /* 0 */ OBJ_80_0, - /* 1 */ OBJ_80_1, - /* 2 */ OBJ_80_2, - /* 3 */ OBJ_80_3, - /* 4 */ OBJ_80_4, - /* 5 */ OBJ_80_5, - /* 6 */ OBJ_80_6, - /* 7 */ OBJ_80_7, - /* 8 */ OBJ_80_8, - /* 9 */ OBJ_80_9, - /* 10 */ OBJ_80_10, - /* 11 */ OBJ_80_11, - /* 12 */ OBJ_80_12, - /* 13 */ OBJ_80_13, - /* 14 */ OBJ_80_14, - /* 15 */ OBJ_80_15, - /* 16 */ OBJ_80_16, - /* 17 */ OBJ_80_17, - /* 18 */ OBJ_80_18, - /* 19 */ OBJ_80_19, - /* 20 */ OBJ_80_20, - /* 21 */ OBJ_80_21, - /* 22 */ OBJ_80_22, - /* 23 */ OBJ_80_23, - /* 24 */ OBJ_80_24, - /* 25 */ OBJ_80_25, - /* 26 */ OBJ_80_26, - /* 27 */ OBJ_80_27, - /* 28 */ OBJ_80_28, - /* 29 */ OBJ_80_29, - /* 30 */ OBJ_80_30, - /* 31 */ OBJ_80_31, - /* 32 */ OBJ_80_32, - /* 33 */ OBJ_80_33, - /* 34 */ OBJ_80_34, - /* 35 */ OBJ_80_35, - /* 36 */ OBJ_80_36, - /* 37 */ OBJ_80_37, - /* 38 */ OBJ_80_38, - /* 39 */ OBJ_80_39, - /* 40 */ OBJ_80_40, - /* 41 */ OBJ_80_41, - /* 42 */ OBJ_80_42, - /* 43 */ OBJ_80_43, - /* 44 */ OBJ_80_44, - /* 45 */ OBJ_80_45, - /* 46 */ OBJ_80_46, - /* 47 */ OBJ_80_47, - /* 48 */ OBJ_80_48, - /* 49 */ OBJ_80_49, - /* 50 */ OBJ_80_50, - /* 51 */ OBJ_80_51, - /* 52 */ OBJ_80_52, - /* 53 */ OBJ_80_53, - /* 54 */ OBJ_80_54, - /* 55 */ OBJ_80_55, - /* 56 */ OBJ_80_56, - /* 57 */ OBJ_80_57, - /* 58 */ OBJ_80_58, - /* 59 */ OBJ_80_59, - /* 60 */ OBJ_80_60, - /* 61 */ OBJ_80_61, - /* 62 */ OBJ_80_62, - /* 63 */ OBJ_80_63, - /* 64 */ OBJ_80_64, - /* 65 */ OBJ_80_65, - /* 66 */ OBJ_80_66, - /* 67 */ OBJ_80_67, - /* 68 */ OBJ_80_68, - /* 69 */ OBJ_80_69, - /* 70 */ OBJ_80_70, - /* 71 */ OBJ_80_71, - /* 72 */ OBJ_80_72, - /* 73 */ OBJ_80_73, - /* 74 */ OBJ_80_74, - /* 75 */ OBJ_80_75, - /* 76 */ OBJ_80_76, - /* 77 */ OBJ_80_77, - /* 78 */ OBJ_80_78, - /* 79 */ OBJ_80_79, - /* 80 */ OBJ_80_80, - /* 81 */ OBJ_80_81, - /* 82 */ OBJ_80_82, - /* 83 */ OBJ_80_83, - /* 84 */ OBJ_80_84, - /* 85 */ OBJ_80_85, - /* 86 */ OBJ_80_86, - /* 87 */ OBJ_80_87, - /* 88 */ OBJ_80_88, - /* 89 */ OBJ_80_89, - /* 90 */ OBJ_80_90, - /* 91 */ OBJ_80_91, - /* 92 */ OBJ_80_92, - /* 93 */ OBJ_80_93, - /* 94 */ OBJ_80_94, - /* 95 */ OBJ_80_95, - /* 96 */ OBJ_80_96, - /* 97 */ OBJ_80_97, - /* 98 */ OBJ_80_98, - /* 99 */ OBJ_80_99, - /* 100 */ OBJ_80_100, - /* 101 */ OBJ_80_101, - /* 102 */ OBJ_80_102, - /* 103 */ OBJ_80_103, - /* 104 */ OBJ_80_104, - /* 105 */ OBJ_80_105, - /* 106 */ OBJ_80_106, - /* 107 */ OBJ_80_107, - /* 108 */ OBJ_80_108, - /* 109 */ OBJ_80_109, - /* 110 */ OBJ_80_110, - /* 111 */ OBJ_80_111, - /* 112 */ OBJ_80_112, - /* 113 */ OBJ_80_113, - /* 114 */ OBJ_80_114, - /* 115 */ OBJ_80_115, - /* 116 */ OBJ_80_116, - /* 117 */ OBJ_80_117, - /* 118 */ OBJ_80_118, - /* 119 */ OBJ_80_119, - /* 120 */ OBJ_80_120, - /* 121 */ OBJ_80_121, - /* 122 */ OBJ_80_122, - /* 123 */ OBJ_80_123, - /* 124 */ OBJ_80_124, - /* 125 */ OBJ_80_125, - /* 126 */ OBJ_80_126, - /* 127 */ OBJ_80_127, - /* 128 */ OBJ_80_128, - /* 129 */ OBJ_80_129, - /* 130 */ OBJ_80_130, - /* 131 */ OBJ_80_131, - /* 132 */ OBJ_80_132, - /* 133 */ OBJ_80_133, - /* 134 */ OBJ_80_134, - /* 135 */ OBJ_80_135, - /* 136 */ OBJ_80_136, - /* 137 */ OBJ_80_137, - /* 138 */ OBJ_80_138, - /* 139 */ OBJ_80_139, - /* 140 */ OBJ_80_140, - /* 141 */ OBJ_80_141, - /* 142 */ OBJ_80_142, - /* 143 */ OBJ_80_143, - /* 144 */ OBJ_80_144, - /* 145 */ OBJ_80_145, - /* 146 */ OBJ_80_146, - /* 147 */ OBJ_80_147, - /* 148 */ OBJ_80_148, - /* 149 */ OBJ_80_149, - /* 150 */ OBJ_80_150, - /* 151 */ OBJ_80_151, - /* 152 */ OBJ_80_152, - /* 153 */ OBJ_80_153, - /* 154 */ OBJ_80_154, - /* 155 */ OBJ_80_155, - /* 156 */ OBJ_80_156, - /* 157 */ OBJ_80_157, - /* 158 */ OBJ_80_158, - /* 159 */ OBJ_80_159, - /* 160 */ OBJ_80_160, - /* 161 */ OBJ_4C_161, - /* 162 */ OBJ_4C_162, - /* 163 */ OBJ_4C_163, - /* 164 */ OBJ_4C_164, - /* 165 */ OBJ_4C_165, - /* 166 */ OBJ_4C_166, - /* 167 */ OBJ_4C_167, - /* 168 */ OBJ_4C_168, - /* 169 */ OBJ_4C_169, - /* 170 */ OBJ_4C_170, - /* 171 */ OBJ_4C_171, - /* 172 */ OBJ_4C_172, - /* 173 */ OBJ_4C_173, - /* 174 */ OBJ_4C_174, - /* 175 */ OBJ_4C_175, - /* 176 */ OBJ_ACTOR_176, - /* 177 */ OBJ_ACTOR_177, - /* 178 */ OBJ_ACTOR_178, - /* 179 */ OBJ_ACTOR_179, - /* 180 */ OBJ_ACTOR_180, - /* 181 */ OBJ_ACTOR_181, - /* 182 */ OBJ_ACTOR_182, - /* 183 */ OBJ_ACTOR_183, - /* 184 */ OBJ_ACTOR_184, - /* 185 */ OBJ_ACTOR_185, - /* 186 */ OBJ_ACTOR_186, - /* 187 */ OBJ_ACTOR_187, - /* 188 */ OBJ_ACTOR_188, - /* 189 */ OBJ_ACTOR_189, - /* 190 */ OBJ_ACTOR_190, - /* 191 */ OBJ_ACTOR_191, - /* 192 */ OBJ_ACTOR_192, - /* 193 */ OBJ_ACTOR_193, - /* 194 */ OBJ_ACTOR_194, - /* 195 */ OBJ_ACTOR_195, - /* 196 */ OBJ_ACTOR_196, - /* 197 */ OBJ_ACTOR_ALLRANGE, - /* 198 */ OBJ_ACTOR_TEAM_BOSS, - /* 199 */ OBJ_ACTOR_199, - /* 200 */ OBJ_ACTOR_EVENT, - /* 201 */ OBJ_ACTOR_201, - /* 202 */ OBJ_ACTOR_202, - /* 203 */ OBJ_ACTOR_SLIPPY_SX, - /* 204 */ OBJ_ACTOR_204, - /* 205 */ OBJ_ACTOR_205, - /* 206 */ OBJ_ACTOR_206, - /* 207 */ OBJ_ACTOR_207, - /* 208 */ OBJ_ACTOR_208, - /* 209 */ OBJ_ACTOR_209, - /* 210 */ OBJ_ACTOR_210, - /* 211 */ OBJ_ACTOR_211, - /* 212 */ OBJ_ACTOR_212, - /* 213 */ OBJ_ACTOR_213, - /* 214 */ OBJ_ACTOR_214, - /* 215 */ OBJ_ACTOR_215, - /* 216 */ OBJ_ACTOR_216, - /* 217 */ OBJ_ACTOR_217, - /* 218 */ OBJ_ACTOR_218, - /* 219 */ OBJ_ACTOR_219, - /* 220 */ OBJ_ACTOR_220, - /* 221 */ OBJ_ACTOR_221, - /* 222 */ OBJ_ACTOR_222, - /* 223 */ OBJ_ACTOR_223, - /* 224 */ OBJ_ACTOR_224, - /* 225 */ OBJ_ACTOR_225, - /* 226 */ OBJ_ACTOR_226, - /* 227 */ OBJ_ACTOR_227, - /* 228 */ OBJ_ACTOR_228, - /* 229 */ OBJ_ACTOR_229, - /* 230 */ OBJ_ACTOR_230, - /* 231 */ OBJ_ACTOR_231, - /* 232 */ OBJ_ACTOR_232, - /* 233 */ OBJ_ACTOR_233, - /* 234 */ OBJ_ACTOR_234, - /* 235 */ OBJ_ACTOR_235, - /* 236 */ OBJ_ACTOR_236, - /* 237 */ OBJ_ACTOR_237, - /* 238 */ OBJ_ACTOR_238, - /* 239 */ OBJ_ACTOR_239, - /* 240 */ OBJ_ACTOR_240, - /* 241 */ OBJ_ACTOR_241, - /* 242 */ OBJ_ACTOR_242, - /* 243 */ OBJ_ACTOR_243, - /* 244 */ OBJ_ACTOR_244, - /* 245 */ OBJ_ACTOR_245, - /* 246 */ OBJ_ACTOR_246, - /* 247 */ OBJ_ACTOR_247, - /* 248 */ OBJ_ACTOR_248, - /* 249 */ OBJ_ACTOR_249, - /* 250 */ OBJ_ACTOR_250, - /* 251 */ OBJ_ACTOR_251, - /* 252 */ OBJ_ACTOR_252, - /* 253 */ OBJ_ACTOR_253, - /* 254 */ OBJ_ACTOR_254, - /* 255 */ OBJ_ACTOR_255, - /* 256 */ OBJ_ACTOR_256, - /* 257 */ OBJ_ACTOR_257, - /* 258 */ OBJ_ACTOR_258, - /* 259 */ OBJ_ACTOR_259, - /* 260 */ OBJ_ACTOR_260, - /* 261 */ OBJ_ACTOR_261, - /* 262 */ OBJ_ACTOR_262, - /* 263 */ OBJ_ACTOR_263, - /* 264 */ OBJ_ACTOR_264, - /* 265 */ OBJ_ACTOR_265, - /* 266 */ OBJ_ACTOR_266, - /* 267 */ OBJ_ACTOR_267, - /* 268 */ OBJ_ACTOR_268, - /* 269 */ OBJ_ACTOR_269, - /* 270 */ OBJ_ACTOR_270, - /* 271 */ OBJ_ACTOR_271, - /* 272 */ OBJ_ACTOR_272, - /* 273 */ OBJ_ACTOR_273, - /* 274 */ OBJ_ACTOR_274, - /* 275 */ OBJ_ACTOR_275, - /* 276 */ OBJ_ACTOR_276, - /* 277 */ OBJ_ACTOR_277, - /* 278 */ OBJ_ACTOR_278, - /* 279 */ OBJ_ACTOR_279, - /* 280 */ OBJ_ACTOR_280, - /* 281 */ OBJ_ACTOR_281, - /* 282 */ OBJ_ACTOR_282, - /* 283 */ OBJ_ACTOR_283, - /* 284 */ OBJ_ACTOR_284, - /* 285 */ OBJ_ACTOR_285, - /* 286 */ OBJ_ACTOR_286, - /* 287 */ OBJ_ACTOR_287, - /* 288 */ OBJ_ACTOR_288, - /* 289 */ OBJ_ACTOR_289, - /* 290 */ OBJ_ACTOR_290, - /* 291 */ OBJ_ACTOR_SUPPLIES, - /* 292 */ OBJ_BOSS_292, - /* 293 */ OBJ_BOSS_293, - /* 294 */ OBJ_BOSS_294, - /* 295 */ OBJ_BOSS_295, - /* 296 */ OBJ_BOSS_296, - /* 297 */ OBJ_BOSS_297, - /* 298 */ OBJ_BOSS_298, - /* 299 */ OBJ_BOSS_299, - /* 300 */ OBJ_BOSS_300, - /* 301 */ OBJ_BOSS_301, - /* 302 */ OBJ_BOSS_A6, - /* 303 */ OBJ_BOSS_303, - /* 304 */ OBJ_BOSS_304, - /* 305 */ OBJ_BOSS_305, - /* 306 */ OBJ_BOSS_306, - /* 307 */ OBJ_BOSS_ZO, - /* 308 */ OBJ_BOSS_308, - /* 309 */ OBJ_BOSS_309, - /* 310 */ OBJ_BOSS_310, - /* 311 */ OBJ_BOSS_311, - /* 312 */ OBJ_BOSS_312, - /* 313 */ OBJ_BOSS_313, - /* 314 */ OBJ_BOSS_314, - /* 315 */ OBJ_BOSS_SO, - /* 316 */ OBJ_BOSS_316, - /* 317 */ OBJ_BOSS_317, - /* 318 */ OBJ_BOSS_AQ, - /* 319 */ OBJ_BOSS_319, - /* 320 */ OBJ_BOSS_320, - /* 321 */ OBJ_BOSS_321, - /* 322 */ OBJ_ITEM_LASERS, - /* 323 */ OBJ_ITEM_CHECKPOINT, - /* 324 */ OBJ_ITEM_SILVER_RING, - /* 325 */ OBJ_ITEM_SILVER_STAR, - /* 326 */ OBJ_ITEM_METEO_WARP, - /* 327 */ OBJ_ITEM_BOMB, - /* 328 */ OBJ_ITEM_328, - /* 329 */ OBJ_ITEM_329, - /* 330 */ OBJ_ITEM_330, - /* 331 */ OBJ_ITEM_331, - /* 332 */ OBJ_ITEM_332, - /* 333 */ OBJ_ITEM_333, - /* 334 */ OBJ_ITEM_334, - /* 335 */ OBJ_ITEM_1UP, - /* 336 */ OBJ_ITEM_GOLD_RING, - /* 337 */ OBJ_ITEM_WING_REPAIR, - /* 338 */ OBJ_ITEM_TRAINING_RING, - /* 339 */ OBJ_EFFECT_339, - /* 340 */ OBJ_EFFECT_340, - /* 341 */ OBJ_EFFECT_341, - /* 342 */ OBJ_EFFECT_342, - /* 343 */ OBJ_EFFECT_343, - /* 344 */ OBJ_EFFECT_344, - /* 345 */ OBJ_EFFECT_345, - /* 346 */ OBJ_EFFECT_346, - /* 347 */ OBJ_EFFECT_347, - /* 348 */ OBJ_EFFECT_348, - /* 349 */ OBJ_EFFECT_349, - /* 350 */ OBJ_EFFECT_350, - /* 351 */ OBJ_EFFECT_351, - /* 352 */ OBJ_EFFECT_352, - /* 353 */ OBJ_EFFECT_353, - /* 354 */ OBJ_EFFECT_354, - /* 355 */ OBJ_EFFECT_355, - /* 356 */ OBJ_EFFECT_356, - /* 357 */ OBJ_EFFECT_357, - /* 358 */ OBJ_EFFECT_358, - /* 359 */ OBJ_EFFECT_359, - /* 360 */ OBJ_EFFECT_360, - /* 361 */ OBJ_EFFECT_361, - /* 362 */ OBJ_EFFECT_362, - /* 363 */ OBJ_EFFECT_363, - /* 364 */ OBJ_EFFECT_364, - /* 365 */ OBJ_EFFECT_365, - /* 366 */ OBJ_EFFECT_366, - /* 367 */ OBJ_EFFECT_367, - /* 368 */ OBJ_EFFECT_368, - /* 369 */ OBJ_EFFECT_369, - /* 370 */ OBJ_EFFECT_370, - /* 371 */ OBJ_EFFECT_371, - /* 372 */ OBJ_EFFECT_372, - /* 373 */ OBJ_EFFECT_373, - /* 374 */ OBJ_EFFECT_374, - /* 375 */ OBJ_EFFECT_375, - /* 376 */ OBJ_EFFECT_376, - /* 377 */ OBJ_EFFECT_377, - /* 378 */ OBJ_EFFECT_378, - /* 379 */ OBJ_EFFECT_379, - /* 380 */ OBJ_EFFECT_380, - /* 381 */ OBJ_EFFECT_381, - /* 382 */ OBJ_EFFECT_382, - /* 383 */ OBJ_EFFECT_383, - /* 384 */ OBJ_EFFECT_384, - /* 385 */ OBJ_EFFECT_385, - /* 386 */ OBJ_EFFECT_386, - /* 387 */ OBJ_EFFECT_387, - /* 388 */ OBJ_EFFECT_388, - /* 389 */ OBJ_EFFECT_389, - /* 390 */ OBJ_EFFECT_390, - /* 391 */ OBJ_EFFECT_391, - /* 392 */ OBJ_EFFECT_392, - /* 393 */ OBJ_EFFECT_393, - /* 394 */ OBJ_EFFECT_394, - /* 395 */ OBJ_EFFECT_395, - /* 396 */ OBJ_EFFECT_396, - /* 397 */ OBJ_EFFECT_397, - /* 398 */ OBJ_EFFECT_398, - /* 399 */ OBJ_EFFECT_399, - /* 400 */ OBJ_UNK_400, - /* 401 */ OBJ_UNK_401, - /* 402 */ OBJ_UNK_402, - /* 403 */ OBJ_UNK_403, - /* 404 */ OBJ_UNK_404, - /* 405 */ OBJ_UNK_405, - /* 406 */ OBJ_UNK_406, - /* 407 */ OBJ_ID_MAX, + /* -1 */ OBJ_INVALID = -1, + /* 0 */ OBJ_SCENERY_CO_STONE_ARCH, + /* 1 */ OBJ_SCENERY_CO_BUMP_1, // Terrain bump 1 + /* 2 */ OBJ_SCENERY_CO_BUMP_2, // Terrain bump 2 + /* 3 */ OBJ_SCENERY_CO_BUMP_3, // Terrain bump 3 + /* 4 */ OBJ_SCENERY_CO_BUMP_4, // Terrain bump 4 + /* 5 */ OBJ_SCENERY_CO_BUMP_5, // Terrain bump 5 + /* 6 */ OBJ_SCENERY_CO_HIGHWAY_1, + /* 7 */ OBJ_SCENERY_CO_HIGHWAY_2, + /* 8 */ OBJ_SCENERY_CO_HIGHWAY_3, + /* 9 */ OBJ_SCENERY_CO_HIGHWAY_4, + /* 10 */ OBJ_SCENERY_CO_BUILDING_1, // Building with "GOOD LUCK!" legend. + /* 11 */ OBJ_SCENERY_CO_BUILDING_2, + /* 12 */ OBJ_SCENERY_CO_BUILDING_3, + /* 13 */ OBJ_SCENERY_CO_BUILDING_4, + /* 14 */ OBJ_SCENERY_CO_BUILDING_5, + /* 15 */ OBJ_SCENERY_CO_BUILDING_6, + /* 16 */ OBJ_SCENERY_CO_BUILDING_7, // Building with Pepper's face on it + /* 17 */ OBJ_SCENERY_CO_BUILDING_8, + /* 18 */ OBJ_SCENERY_CO_BUILDING_ON_FIRE, + /* 19 */ OBJ_SCENERY_CO_TOWER, + /* 20 */ OBJ_SCENERY_CO_ARCH_1, + /* 21 */ OBJ_SCENERY_CO_ARCH_2, + /* 22 */ OBJ_SCENERY_CO_ARCH_3, + /* 23 */ OBJ_SCENERY_CO_RADAR_DISH, + /* 24 */ OBJ_SCENERY_CO_HIGHWAY_5, + /* 25 */ OBJ_SCENERY_CO_HIGHWAY_6, + /* 26 */ OBJ_SCENERY_CO_HIGHWAY_7, + /* 27 */ OBJ_SCENERY_CO_HIGHWAY_8, + /* 28 */ OBJ_SCENERY_CO_HIGHWAY_9, + /* 29 */ OBJ_SCENERY_TI_SKULL, + /* 30 */ OBJ_SCENERY_TI_RIB_0, + /* 31 */ OBJ_SCENERY_TI_RIB_1, + /* 32 */ OBJ_SCENERY_TI_RIB_2, + /* 33 */ OBJ_SCENERY_TI_RIB_3, + /* 34 */ OBJ_SCENERY_TI_RIB_4, + /* 35 */ OBJ_SCENERY_TI_RIB_5, + /* 36 */ OBJ_SCENERY_TI_RIB_6, + /* 37 */ OBJ_SCENERY_TI_RIB_7, + /* 38 */ OBJ_SCENERY_TI_RIB_8, + /* 39 */ OBJ_SCENERY_ME_TUNNEL, + /* 40 */ OBJ_SCENERY_CO_BUILDING_9, + /* 41 */ OBJ_SCENERY_CO_BUILDING_10, + /* 42 */ OBJ_SCENERY_IBEAM, + /* 43 */ OBJ_SCENERY_ZO_ROCK, + /* 44 */ OBJ_SCENERY_ZO_OIL_RIG_1, + /* 45 */ OBJ_SCENERY_ZO_OIL_RIG_2, + /* 46 */ OBJ_SCENERY_ZO_OIL_RIG_3, + /* 47 */ OBJ_SCENERY_ZO_ISLAND, + /* 48 */ OBJ_SCENERY_VE1_WALL_1, + /* 49 */ OBJ_SCENERY_VE1_WALL_2, + /* 50 */ OBJ_SCENERY_VE1_WALL_3, + /* 51 */ OBJ_SCENERY_VE1_HALLWAY_OBSTACLE, + /* 52 */ OBJ_SCENERY_VE1_GENERATOR, + /* 53 */ OBJ_SCENERY_VE1_WATCH_POST, + /* 54 */ OBJ_SCENERY_CO_WATERFALL, + /* 55 */ OBJ_SCENERY_CO_ROCKWALL, + /* 56 */ OBJ_SCENERY_CO_DOORS, + /* 57 */ OBJ_SCENERY_TI_PILLAR, + /* 58 */ OBJ_SCENERY_TI_BRIDGE, + /* 59 */ OBJ_SCENERY_MA_BUILDING_1, + /* 60 */ OBJ_SCENERY_MA_BUILDING_2, + /* 61 */ OBJ_SCENERY_MA_TOWER, + /* 62 */ OBJ_SCENERY_MA_WALL_1, + /* 63 */ OBJ_SCENERY_GUILLOTINE_HOUSING, + /* 64 */ OBJ_SCENERY_MA_GUILLOTINE, + /* 65 */ OBJ_SCENERY_MA_PROXIMITY_LIGHT, + /* 66 */ OBJ_SCENERY_MA_WALL_2, + /* 67 */ OBJ_SCENERY_MA_WALL_3, + /* 68 */ OBJ_SCENERY_MA_WALL_4, + /* 69 */ OBJ_SCENERY_MA_TERRAIN_BUMP, + /* 70 */ OBJ_SCENERY_MA_FLOOR_1, + /* 71 */ OBJ_SCENERY_MA_FLOOR_2, + /* 72 */ OBJ_SCENERY_MA_FLOOR_3, + /* 73 */ OBJ_SCENERY_MA_FLOOR_4, + /* 74 */ OBJ_SCENERY_MA_FLOOR_5, + /* 75 */ OBJ_SCENERY_MA_FLOOR_6, + /* 76 */ OBJ_SCENERY_MA_WEAPONS_FACTORY, + /* 77 */ OBJ_SCENERY_MA_INDICATOR_SIGN, + /* 78 */ OBJ_SCENERY_MA_DISTANCE_SIGN_1, + /* 79 */ OBJ_SCENERY_MA_DISTANCE_SIGN_2, + /* 80 */ OBJ_SCENERY_MA_DISTANCE_SIGN_3, + /* 81 */ OBJ_SCENERY_MA_DISTANCE_SIGN_4, + /* 82 */ OBJ_SCENERY_MA_DISTANCE_SIGN_5, + /* 83 */ OBJ_SCENERY_MA_TRAIN_STOP_BLOCK, + /* 84 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_1, + /* 85 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_2, + /* 86 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_3, + /* 87 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_4, + /* 88 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_5, + /* 89 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_6, + /* 90 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_7, + /* 91 */ OBJ_SCENERY_MA_RAILROAD_SWITCH_8, + /* 92 */ OBJ_SCENERY_MA_TRAIN_TRACK_1, + /* 93 */ OBJ_SCENERY_MA_TRAIN_TRACK_2, + /* 94 */ OBJ_SCENERY_MA_TRAIN_TRACK_3, + /* 95 */ OBJ_SCENERY_MA_TRAIN_TRACK_4, + /* 96 */ OBJ_SCENERY_MA_TRAIN_TRACK_5, + /* 97 */ OBJ_SCENERY_MA_TRAIN_TRACK_6, + /* 98 */ OBJ_SCENERY_MA_TRAIN_TRACK_7, + /* 99 */ OBJ_SCENERY_MA_TRAIN_TRACK_8, + /* 100 */ OBJ_SCENERY_MA_TRAIN_TRACK_9, + /* 101 */ OBJ_SCENERY_MA_TRAIN_TRACK_10, + /* 102 */ OBJ_SCENERY_MA_TRAIN_TRACK_11, + /* 103 */ OBJ_SCENERY_MA_TRAIN_TRACK_12, + /* 104 */ OBJ_SCENERY_MA_SWITCH_TRACK, + /* 105 */ OBJ_SCENERY_MA_TRAIN_TRACK_13, + /* 106 */ OBJ_SCENERY_SY_SHIP_1, + /* 107 */ OBJ_SCENERY_SY_SHIP_2, + /* 108 */ OBJ_SCENERY_SY_SHIP_3, + /* 109 */ OBJ_SCENERY_SY_SHIP_3_DESTROYED, + /* 110 */ OBJ_SCENERY_SY_SHIP_4, + /* 111 */ OBJ_SCENERY_SY_SHIP_DEBRIS, + /* 112 */ OBJ_SCENERY_SY_SHIP_2_DESTROYED, + /* 113 */ OBJ_SPRITE_SY_SHIP_2, // Unused + /* 114 */ OBJ_SPRITE_SY_SHIP_3, // Unused + /* 115 */ OBJ_SCENERY_SY_SHIP_MISSILE, + /* 116 */ OBJ_SCENERY_SY_SHIP_WINDOWS, + /* 117 */ OBJ_SCENERY_AQ_CORAL_REEF_1, + /* 118 */ OBJ_SCENERY_AQ_TUNNEL_1, + /* 119 */ OBJ_SCENERY_AQ_ARCH, + /* 120 */ OBJ_SCENERY_AQ_CORAL_REEF_2, + /* 121 */ OBJ_SCENERY_AQ_ROCK, + /* 122 */ OBJ_SCENERY_AQ_WALL_1, + /* 123 */ OBJ_SCENERY_AQ_ROOF, + /* 124 */ OBJ_SCENERY_AQ_BUMP_1, + /* 125 */ OBJ_SCENERY_AQ_TUNNEL_2, + /* 126 */ OBJ_SCENERY_AQ_BUMP_2, + /* 127 */ OBJ_SCENERY_VE1_TEMPLE_ENTRANCE, + /* 128 */ OBJ_SCENERY_VE1_TEMPLE_INTERIOR_1, + /* 129 */ OBJ_SCENERY_VE1_TEMPLE_INTERIOR_2, + /* 130 */ OBJ_SCENERY_VE1_TEMPLE_INTERIOR_3, + /* 131 */ OBJ_SCENERY_AND_PASSAGE, + /* 132 */ OBJ_SCENERY_AND_DOOR, + /* 133 */ OBJ_SCENERY_TR_BUILDING, + /* 134 */ OBJ_SCENERY_AND_PATH_INTERSECTION, + /* 135 */ OBJ_SCENERY_AND_PATH_WALLS, + /* 136 */ OBJ_SCENERY_AND_PATH_EXIT, + /* 137 */ OBJ_SCENERY_AND_PATH_ENTRANCE, + /* 138 */ OBJ_SCENERY_VS_BUILDING_1, // Building with Pepper's face. + /* 139 */ OBJ_SCENERY_VS_BUILDING_2, // Building with Pepper's face. Duplicate from previous? + /* 140 */ OBJ_SCENERY_VS_PYRAMID_1, + /* 141 */ OBJ_SCENERY_VS_PYRAMID_2, + /* 142 */ OBJ_SCENERY_VS_ARCH, + /* 143 */ OBJ_SCENERY_VS_KA_FLBASE, + /* 144 */ OBJ_SCENERY_VS_SPACE_JUNK_1, + /* 145 */ OBJ_SCENERY_VS_SPACE_JUNK_2, + /* 146 */ OBJ_SCENERY_VS_SPACE_JUNK_3, + /* 147 */ OBJ_SCENERY_LEVEL_OBJECTS, // Level specific scenery objects, used in Andross and Versus + /* 148 */ OBJ_SCENERY_FO_MOUNTAIN_1, + /* 149 */ OBJ_SCENERY_FO_MOUNTAIN_2, + /* 150 */ OBJ_SCENERY_FO_MOUNTAIN_3, + /* 151 */ OBJ_SCENERY_FO_TOWER, + /* 152 */ OBJ_SCENERY_BO_POLE, + /* 153 */ OBJ_SCENERY_BO_BUILDING, + /* 154 */ OBJ_SCENERY_KA_FLBASE, + /* 155 */ OBJ_SCENERY_UNK_155, + /* 156 */ OBJ_SCENERY_SY_SHOGUN_SHIP, + /* 157 */ OBJ_SCENERY_SZ_SPACE_JUNK_3, + /* 158 */ OBJ_SCENERY_SZ_SPACE_JUNK_1, + /* 159 */ OBJ_SCENERY_VE2_TOWER, + /* 160 */ OBJ_SCENERY_VE2_MOUNTAIN, + /* 161 */ OBJ_SPRITE_CO_POLE, + /* 162 */ OBJ_SPRITE_CO_TREE, + /* 163 */ OBJ_SPRITE_FO_POLE, + /* 164 */ OBJ_SPRITE_FOG_SHADOW, + /* 165 */ OBJ_SPRITE_CO_RUIN1, + /* 166 */ OBJ_SPRITE_CO_RUIN2, + /* 167 */ OBJ_SPRITE_167, + /* 168 */ OBJ_SPRITE_168, + /* 169 */ OBJ_SPRITE_TI_CACTUS, + /* 170 */ OBJ_SPRITE_CO_SMOKE, + /* 171 */ OBJ_SPRITE_VE1_BOSS_TRIGGER1, + /* 172 */ OBJ_SPRITE_VE1_BOSS_TRIGGER2, + /* 173 */ OBJ_SPRITE_VE1_BOSS_TRIGGER3, + /* 174 */ OBJ_SPRITE_VE1_BOSS_TRIGGER4, + /* 175 */ OBJ_SPRITE_GFOX_TARGET, + /* 176 */ OBJ_ACTOR_CO_GARUDA_1, // Robot that pushes buildings. + /* 177 */ OBJ_ACTOR_CO_GARUDA_2, // Robot that throws I-Beams. + /* 178 */ OBJ_ACTOR_CO_GARUDA_3, // Robot that spins I-Beams. + /* 179 */ OBJ_ACTOR_CO_GARUDA_DESTROY, + /* 180 */ OBJ_ACTOR_ME_MOLAR_ROCK, + /* 181 */ OBJ_ACTOR_ME_METEOR_1, + /* 182 */ OBJ_ACTOR_ME_METEOR_2, // Smaller than Meteor 1 + /* 183 */ OBJ_ACTOR_ME_METEOR_SHOWER_1, + /* 184 */ OBJ_ACTOR_ME_METEOR_SHOWER_2, + /* 185 */ OBJ_ACTOR_ME_METEOR_SHOWER_3, + /* 186 */ OBJ_ACTOR_ME_LASER_CANNON_1, + /* 187 */ OBJ_ACTOR_ME_LASER_CANNON_2, + /* 188 */ OBJ_ACTOR_AQ_UNK_188, // Unimplemented actor. + /* 189 */ OBJ_ACTOR_DEBRIS, + /* 190 */ OBJ_MISSILE_SEEK_TEAM, + /* 191 */ OBJ_MISSILE_SEEK_PLAYER, + /* 192 */ OBJ_ACTOR_CO_SKIBOT, + /* 193 */ OBJ_ACTOR_CO_RADAR, + /* 194 */ OBJ_ACTOR_ME_MORA, + /* 195 */ OBJ_ACTOR_CUTSCENE, + /* 196 */ OBJ_ACTOR_CO_MOLE_MISSILE, + /* 197 */ OBJ_ACTOR_ALLRANGE, + /* 198 */ OBJ_ACTOR_TEAM_BOSS, + /* 199 */ OBJ_ACTOR_TEAM_ARWING, + /* 200 */ OBJ_ACTOR_EVENT, + /* 201 */ OBJ_ACTOR_ME_METEO_BALL, + /* 202 */ OBJ_ACTOR_ME_HOPBOT, + /* 203 */ OBJ_ACTOR_SX_SLIPPY, + /* 204 */ OBJ_ACTOR_SY_ROBOT, + /* 205 */ OBJ_ACTOR_MA_LOCOMOTIVE, + /* 206 */ OBJ_ACTOR_MA_TRAIN_CAR_1, + /* 207 */ OBJ_ACTOR_207, + /* 208 */ OBJ_ACTOR_MA_TRAIN_CAR_2, + /* 209 */ OBJ_ACTOR_MA_TRAIN_CAR_3, + /* 210 */ OBJ_ACTOR_MA_TRAIN_CAR_4, + /* 211 */ OBJ_ACTOR_MA_TRAIN_CAR_5, + /* 212 */ OBJ_ACTOR_MA_TRAIN_CAR_6, + /* 213 */ OBJ_ACTOR_MA_TRAIN_CAR_7, + /* 214 */ OBJ_ACTOR_MA_RAILROAD_SWITCH, + /* 215 */ OBJ_ACTOR_MA_BOULDER, + /* 216 */ OBJ_ACTOR_MA_HORIZONTAL_LOCK_BAR, + /* 217 */ OBJ_ACTOR_MA_VERTICAL_LOCK_BAR, + /* 218 */ OBJ_ACTOR_MA_BARRIER, + /* 219 */ OBJ_ACTOR_MA_FALLING_BOULDER, + /* 220 */ OBJ_ACTOR_MA_BOMBDROP, + /* 221 */ OBJ_ACTOR_MA_SPEAR, + /* 222 */ OBJ_ACTOR_MA_SHOCK_BOX, + /* 223 */ OBJ_ACTOR_MA_RAILWAY_SIGNAL, + /* 224 */ OBJ_ACTOR_TI_TERRAIN, + /* 225 */ OBJ_ACTOR_TI_LANDMINE, + /* 226 */ OBJ_ACTOR_TI_DESERT_ROVER, + /* 227 */ OBJ_ACTOR_TI_DELPHOR, // Tall enemy with laser tracking. + /* 228 */ OBJ_ACTOR_TI_DELPHOR_HEAD, // Delphor's head. + /* 229 */ OBJ_ACTOR_TI_DESERT_CRAWLER, + /* 230 */ OBJ_ACTOR_TI_BOULDER, + /* 231 */ OBJ_ACTOR_TI_BOMB, // Ground time-based bomb. + /* 232 */ OBJ_ACTOR_TI_RASCO, // Flying enemy that throws rocks. + /* 233 */ OBJ_ACTOR_TI_FEKUDA, // Small cannon that fires lasers. + /* 234 */ OBJ_ACTOR_TI_GREAT_FOX, + /* 235 */ OBJ_ACTOR_ZO_BIRD, + /* 236 */ OBJ_ACTOR_ZO_DODORA, // Giant flying snake type enemy. + /* 237 */ OBJ_ACTOR_UNK_237, + /* 238 */ OBJ_ACTOR_ZO_FISH, + /* 239 */ OBJ_ACTOR_ZO_DODORA_WP_COUNT, // Dodora waypoint counter. + /* 240 */ OBJ_ACTOR_ZO_Z_GULL, + /* 241 */ OBJ_ACTOR_ZO_ENERGY_BALL, // Energy balls carried by Z-Gulls. + /* 242 */ OBJ_ACTOR_ZO_TROIKA, + /* 243 */ OBJ_ACTOR_ZO_SHRIMP, + /* 244 */ OBJ_ACTOR_ZO_OBNEMA, // Giant Arachnid type enemy. + /* 245 */ OBJ_ACTOR_ZO_BALL, // Balls shoot by Zoness boss. + /* 246 */ OBJ_ACTOR_ZO_MINE, + /* 247 */ OBJ_ACTOR_ZO_BARRIER, // Barrier with opening rudders on the sides. + /* 248 */ OBJ_ACTOR_ZO_CRANE_MAGNET, + /* 249 */ OBJ_ACTOR_SPIKEBALL, // Spikeball shot by Zoness boss. + /* 250 */ OBJ_ACTOR_ZO_TANKER, // Cargo ship, usually carries contaners. + /* 251 */ OBJ_ACTOR_ZO_CONTAINER, + /* 252 */ OBJ_ACTOR_ZO_RADARBUOY, // Zoness searchlight. + /* 253 */ OBJ_ACTOR_ZO_SUPPLYCRANE, + /* 254 */ OBJ_ACTOR_ZO_SEARCHLIGHT, + /* 255 */ OBJ_ACTOR_255, + /* 256 */ OBJ_ACTOR_256, + /* 257 */ OBJ_ACTOR_257, + /* 258 */ OBJ_ACTOR_AQ_PEARL, + /* 259 */ OBJ_ACTOR_AQ_ANGLERFISH, // Giant fish with search light. + /* 260 */ OBJ_ACTOR_AQ_GAROA, // Blue shellded enemy that throws energy balls. + /* 261 */ OBJ_ACTOR_AQ_SCULPIN, // Fish-type enemy. + /* 262 */ OBJ_ACTOR_AQ_SPINDLYFISH, + /* 263 */ OBJ_ACTOR_AQ_SQUID, + /* 264 */ OBJ_ACTOR_AQ_SEAWEED, + /* 265 */ OBJ_ACTOR_AQ_BOULDER, + /* 266 */ OBJ_ACTOR_AQ_CORAL, + /* 267 */ OBJ_ACTOR_AQ_JELLYFISH, + /* 268 */ OBJ_ACTOR_AQ_FISHGROUP, // A school of small fish. + /* 269 */ OBJ_ACTOR_AQ_STONE_COLUMN, + /* 270 */ OBJ_ACTOR_AQ_OYSTER, + /* 271 */ OBJ_ACTOR_BO_SHIELD_REACTOR, + /* 272 */ OBJ_ACTOR_BO_LASER_CANNON, + /* 273 */ OBJ_ACTOR_FO_RADAR, + /* 274 */ OBJ_ACTOR_SZ_SPACE_JUNK, + /* 275 */ OBJ_ACTOR_SO_ROCK_1, // Surfacing rock type 1. + /* 276 */ OBJ_ACTOR_SO_ROCK_2, // Surfacing rock type 2. + /* 277 */ OBJ_ACTOR_SO_ROCK_3, // Surfacing rock type 3. + /* 278 */ OBJ_ACTOR_SO_WAVE, + /* 279 */ OBJ_ACTOR_SO_PROMINENCE, + /* 280 */ OBJ_ACTOR_VE1_PILLAR_1, + /* 281 */ OBJ_ACTOR_VE1_PILLAR_2, + /* 282 */ OBJ_ACTOR_VE1_PILLAR_3, + /* 283 */ OBJ_ACTOR_VE1_PILLAR_4, + /* 284 */ OBJ_ACTOR_VE1_MONKEY_STATUE, + /* 285 */ OBJ_ACTOR_AND_LASER_EMITTER, + /* 286 */ OBJ_ACTOR_AND_BRAIN_WASTE, + /* 287 */ OBJ_ACTOR_AND_EXPLOSION, // Explosions that follow Fox during the Andross escape. + /* 288 */ OBJ_ACTOR_AND_RADIO, // Andross radio messages. + /* 289 */ OBJ_ACTOR_AND_JAMES_TRIGGER, + /* 290 */ OBJ_ACTOR_AND_BOSS_TIMER_SET, + /* 291 */ OBJ_ACTOR_SUPPLIES, + /* 292 */ OBJ_BOSS_CO_GRANGA, + /* 293 */ OBJ_BOSS_CO_CARRIER, + /* 294 */ OBJ_BOSS_CO_CARRIER_LEFT, + /* 295 */ OBJ_BOSS_CO_CARRIER_UPPER, + /* 296 */ OBJ_BOSS_CO_CARRIER_BOTTOM, + /* 297 */ OBJ_BOSS_ME_CRUSHER, + /* 298 */ OBJ_BOSS_ME_CRUSHER_SHIELD, + /* 299 */ OBJ_BOSS_UNK_299, + /* 300 */ OBJ_BOSS_UNK_300, + /* 301 */ OBJ_BOSS_AQ_UNK_301, + /* 302 */ OBJ_BOSS_A6_GORGON, + /* 303 */ OBJ_BOSS_SX_SPYBORG, + /* 304 */ OBJ_BOSS_SX_SPYBORG_LEFT_ARM, + /* 305 */ OBJ_BOSS_SX_SPYBORG_RIGHT_ARM, + /* 306 */ OBJ_BOSS_TI_GORAS, + /* 307 */ OBJ_BOSS_ZO_SARUMARINE, + /* 308 */ OBJ_BOSS_FO_BASE, + /* 309 */ OBJ_BOSS_BO_BASE, + /* 310 */ OBJ_BOSS_BO_BASE_SHIELD, // Bolse force field + /* 311 */ OBJ_BOSS_BO_BASE_CORE, + /* 312 */ OBJ_BOSS_VE2_BASE, + /* 313 */ OBJ_BOSS_SZ_GREAT_FOX, + /* 314 */ OBJ_BOSS_SY_SHOGUN, + /* 315 */ OBJ_BOSS_SO_VULKAIN, + /* 316 */ OBJ_BOSS_KA_SAUCERER, + /* 317 */ OBJ_BOSS_KA_FLBASE, // Katina FrontLine Base + /* 318 */ OBJ_BOSS_AQ_BACOON, + /* 319 */ OBJ_BOSS_VE1_GOLEMECH, + /* 320 */ OBJ_BOSS_AND_ANDROSS, + /* 321 */ OBJ_BOSS_AND_BRAIN, + /* 322 */ OBJ_ITEM_LASERS, + /* 323 */ OBJ_ITEM_CHECKPOINT, + /* 324 */ OBJ_ITEM_SILVER_RING, + /* 325 */ OBJ_ITEM_SILVER_STAR, + /* 326 */ OBJ_ITEM_METEO_WARP, + /* 327 */ OBJ_ITEM_BOMB, + /* 328 */ OBJ_ITEM_PATH_SPLIT_X, + /* 329 */ OBJ_ITEM_PATH_TURN_LEFT, + /* 330 */ OBJ_ITEM_PATH_TURN_RIGHT, + /* 331 */ OBJ_ITEM_PATH_SPLIT_Y, + /* 332 */ OBJ_ITEM_PATH_TURN_UP, + /* 333 */ OBJ_ITEM_PATH_TURN_DOWN, + /* 334 */ OBJ_ITEM_RING_CHECK, + /* 335 */ OBJ_ITEM_1UP, + /* 336 */ OBJ_ITEM_GOLD_RING, + /* 337 */ OBJ_ITEM_WING_REPAIR, + /* 338 */ OBJ_ITEM_TRAINING_RING, + /* 339 */ OBJ_EFFECT_FIRE_SMOKE_1, + /* 340 */ OBJ_EFFECT_FIRE_SMOKE_2, + /* 341 */ OBJ_EFFECT_FIRE_SMOKE_3, + /* 342 */ OBJ_EFFECT_SMOKE_1, + /* 343 */ OBJ_EFFECT_SMOKE_2, + /* 344 */ OBJ_EFFECT_EXPLOSION_MARK_1, // Explosion mark left on the ground after an enemy explodes. + /* 345 */ OBJ_EFFECT_LASER_MARK_1, // Mark left when lasers hit the ground. + /* 346 */ OBJ_EFFECT_346, + /* 347 */ OBJ_EFFECT_347, + /* 348 */ OBJ_EFFECT_348, + /* 349 */ OBJ_EFFECT_349, + /* 350 */ OBJ_EFFECT_350, + /* 351 */ OBJ_EFFECT_351, + /* 352 */ OBJ_EFFECT_CLOUDS, + /* 353 */ OBJ_EFFECT_ENEMY_LASER_1, + /* 354 */ OBJ_EFFECT_354, + /* 355 */ OBJ_EFFECT_355, + /* 356 */ OBJ_EFFECT_356, + /* 357 */ OBJ_EFFECT_357, + /* 358 */ OBJ_EFFECT_KA_ENERGY_PARTICLES, + /* 359 */ OBJ_EFFECT_359, + /* 360 */ OBJ_EFFECT_360, + /* 361 */ OBJ_EFFECT_361, + /* 362 */ OBJ_EFFECT_362, + /* 363 */ OBJ_EFFECT_363, + /* 364 */ OBJ_EFFECT_364, + /* 365 */ OBJ_EFFECT_365, + /* 366 */ OBJ_EFFECT_366, // ast_blue_marine + /* 367 */ OBJ_EFFECT_367, // ast_bg_planet + /* 368 */ OBJ_EFFECT_368, // TI: ast_landmaster + /* 369 */ OBJ_EFFECT_369, // ME: ast_common + /* 370 */ OBJ_EFFECT_370, // ME: ast_meteo + /* 371 */ OBJ_EFFECT_371, // ME: ast_meteo + /* 372 */ OBJ_EFFECT_372, // ast_arwing + /* 373 */ OBJ_EFFECT_TIMED_SFX, + /* 374 */ OBJ_EFFECT_374, // ast_enmy_planet + /* 375 */ OBJ_EFFECT_375, + /* 376 */ OBJ_EFFECT_376, // Plasma shot by Granga + /* 377 */ OBJ_EFFECT_377, // Spyborg blue shot + /* 378 */ OBJ_EFFECT_378, // Ball projectiles shot by train car turret in Macbeth + /* 379 */ OBJ_EFFECT_379, + /* 380 */ OBJ_EFFECT_380, // Some kind of shot (Macbeth boss) + /* 381 */ OBJ_EFFECT_381, + /* 382 */ OBJ_EFFECT_382, + /* 383 */ OBJ_EFFECT_383, // Big boss explosion + /* 384 */ OBJ_EFFECT_384, // small explosion + /* 385 */ OBJ_EFFECT_385, // small explosion + /* 386 */ OBJ_EFFECT_386, // some type of explosion + /* 387 */ OBJ_EFFECT_387, + /* 388 */ OBJ_EFFECT_388, + /* 389 */ OBJ_EFFECT_389, + /* 390 */ OBJ_EFFECT_390, + /* 391 */ OBJ_EFFECT_391, + /* 392 */ OBJ_EFFECT_392, + /* 393 */ OBJ_EFFECT_393, + /* 394 */ OBJ_EFFECT_394, + /* 395 */ OBJ_EFFECT_395, + /* 396 */ OBJ_EFFECT_396, + /* 397 */ OBJ_EFFECT_397, + /* 398 */ OBJ_EFFECT_398, + /* 399 */ OBJ_EFFECT_399, + /* 400 */ OBJ_ENV_SMALL_ROCKS_ENABLE, + /* 401 */ OBJ_ENV_SMALL_ROCKS_DISABLE, + /* 402 */ OBJ_UNK_402, + /* 403 */ OBJ_UNK_403, + /* 404 */ OBJ_UNK_404, + /* 405 */ OBJ_UNK_405, + /* 406 */ OBJ_ID_MAX, } ObjectId; +#define OBJ_SCENERY_START OBJ_SCENERY_CO_STONE_ARCH +#define OBJ_SPRITE_START OBJ_SPRITE_CO_POLE +#define OBJ_ACTOR_START OBJ_ACTOR_CO_GARUDA_1 +#define OBJ_BOSS_START OBJ_BOSS_CO_GRANGA +#define OBJ_ITEM_START OBJ_ITEM_LASERS +#define OBJ_EFFECT_START OBJ_EFFECT_FIRE_SMOKE_1 +#define OBJ_ENV_START OBJ_ENV_SMALL_ROCKS_ENABLE + +#define OBJ_SCENERY_MAX OBJ_SPRITE_START +#define OBJ_SPRITE_MAX OBJ_ACTOR_START +#define OBJ_ACTOR_MAX OBJ_BOSS_START +#define OBJ_BOSS_MAX OBJ_ITEM_START +#define OBJ_ITEM_MAX OBJ_EFFECT_START +#define OBJ_EFFECT_MAX OBJ_ENV_START + #define ACTOR_EVENT_ID 1000 +typedef enum ItemDrop { + /* 0 */ DROP_NONE, + /* 1 */ DROP_SILVER_RING, + /* 2 */ DROP_SILVER_RING_50p, + /* 3 */ DROP_SILVER_RING_33p, + /* 4 */ DROP_SILVER_RING_25p, + /* 5 */ DROP_BOMB, + /* 6 */ DROP_BOMB_50p, + /* 7 */ DROP_BOMB_33p, + /* 8 */ DROP_BOMB_25p, + /* 9 */ DROP_LASERS, + /* 10 */ DROP_LASERS_50p, + /* 11 */ DROP_LASERS_33p, + /* 12 */ DROP_LASERS_25p, + /* 13 */ DROP_1UP, + /* 14 */ DROP_GOLD_RING_1, + /* 15 */ DROP_GOLD_RING_2, + /* 16 */ DROP_GOLD_RING_3, + /* 17 */ DROP_GOLD_RING_4, + /* 18 */ DROP_GOLD_RING_GROUP, + /* 19 */ DROP_LASERS_GROUP, + /* 20 */ DROP_BOMB_GROUP, + /* 21 */ DROP_SILVER_RING_GROUP, + /* 22 */ DROP_SILVER_RING_10p, + /* 23 */ DROP_WING_REPAIR, + /* 24 */ DROP_TEAM_MESG, + /* 25 */ DROP_SILVER_STAR, + /* 26 */ DROP_MAX, +} ItemDrop; + typedef enum AllRangeAi { /* 0 */ AI360_FOX, /* 1 */ AI360_FALCO, @@ -712,13 +773,44 @@ typedef enum AllRangeAi { /* 7 */ AI360_ANDREW, /* 8 */ AI360_KATT, /* 9 */ AI360_BILL, - /* 10 */ AI360_10, + /* 10 */ AI360_ENEMY, /* 100 */ AI360_GREAT_FOX = 100, /* 200 */ AI360_MISSILE = 200, /* 200 */ AI360_EVENT_HANDLER = 1000, } AllRangeAi; -Actor* func_game_800A3608(ObjectId); +typedef enum ActorCutsceneModels { + /* 0 */ ACTOR_CS_TEAM_ARWING, + /* 1 */ ACTOR_CS_GREAT_FOX, + /* 10 */ ACTOR_CS_ME_CORNERIA_BG = 10, // Planet Corneria in the background of level start CS. + /* 11 */ ACTOR_CS_FO_EXPLOSION, // Fortuna explosion in a mission complete ending. + /* 20 */ ACTOR_CS_COMMANDER = 20, + /* 24 */ ACTOR_CS_KATT = 24, + /* 25 */ ACTOR_CS_SZ_SPACE_JUNK, + /* 26 */ ACTOR_CS_SZ_INVADER, + /* 28 */ ACTOR_CS_COMMANDER_GLOW = 28, // Commander with Engine Glow. + /* 30 */ ACTOR_CS_30 = 30, // Related to LEVEL_BOLSE + /* 31 */ ACTOR_CS_31, + /* 32 */ ACTOR_CS_32, + /* 33 */ ACTOR_CS_CORNERIAN_FIGHTER, // Bill's ship when actor->index is 3. + /* 34 */ ACTOR_CS_KA_ENEMY, + /* 35 */ ACTOR_CS_SY_SHIP_1_SHRINK, // Scale Matrix by 1/8. + /* 36 */ ACTOR_CS_SY_SHIP_2, + /* 37 */ ACTOR_CS_37, + /* 38 */ ACTOR_CS_38, // Related to Sector Y + /* 39 */ ACTOR_CS_SY_SHIP_1 = 39, + /* 40 */ ACTOR_CS_40, + /* 41 */ ACTOR_CS_AQ_FISHGROUP, + /* 42 */ ACTOR_CS_42, // Related to Sector Y + /* 43 */ ACTOR_CS_43, // Related to Sector Y + /* 44 */ ACTOR_CS_AQ_SEAWEED, + /* 45 */ ACTOR_CS_AQ_BUMP_2, + /* 46 */ ACTOR_CS_AQ_CORAL_REEF_2, + /* 47 */ ACTOR_CS_AQ_ROCK, + /* 1000 */ ACTOR_CS_1000 = 1000 // James? Is that you? +} ActorCutsceneModels; + +Actor* Game_SpawnActor(ObjectId); // template enums for boss work buffers @@ -874,4 +966,405 @@ typedef enum { /* 50 */ LN_VWK_MAX, } BossLNvwork; +typedef Scenery CoStoneArch; +typedef Scenery CoBump1; +typedef Scenery CoBump2; +typedef Scenery CoBump3; +typedef Scenery CoBump4; +typedef Scenery CoBump5; +typedef Scenery CoHighway1; +typedef Scenery CoHighway2; +typedef Scenery CoHighway3; +typedef Scenery CoHighway4; +typedef Scenery CoBuilding1; +typedef Scenery CoBuilding2; +typedef Scenery CoBuilding3; +typedef Scenery CoBuilding4; +typedef Scenery CoBuilding5; +typedef Scenery CoBuilding6; +typedef Scenery CoBuilding7; +typedef Scenery CoBuilding8; +typedef Scenery CoBuildingOnFire; +typedef Scenery CoTower; +typedef Scenery CoArch1; +typedef Scenery CoArch2; +typedef Scenery CoArch3; +typedef Scenery CoRadarDish; +typedef Scenery CoHighway5; +typedef Scenery CoHighway6; +typedef Scenery CoHighway7; +typedef Scenery CoHighway8; +typedef Scenery CoHighway9; +typedef Scenery TiSkull; +typedef Scenery TiRib0; +typedef Scenery TiRib1; +typedef Scenery TiRib2; +typedef Scenery TiRib3; +typedef Scenery TiRib4; +typedef Scenery TiRib5; +typedef Scenery TiRib6; +typedef Scenery TiRib7; +typedef Scenery TiRib8; +typedef Scenery MeTunnel; +typedef Scenery CoBuilding9; +typedef Scenery CoBuilding10; +typedef Scenery CoIBeam; +typedef Scenery ZoRock; +typedef Scenery ZoOilRig1; +typedef Scenery ZoOilRig2; +typedef Scenery ZoOilRig3; +typedef Scenery ZoIsland; +typedef Scenery Ve1Wall1; +typedef Scenery Ve1Wall2; +typedef Scenery Ve1Wall3; +typedef Scenery Ve1HallwayObstacle; +typedef Scenery Ve1Generator; +typedef Scenery Ve1WatchPost; +typedef Scenery CoWaterfall; +typedef Scenery CoRockWall; +typedef Scenery CoDoors; +typedef Scenery TiPillar; +typedef Scenery TiBridge; +typedef Scenery MaBuilding1; +typedef Scenery MaBuilding2; +typedef Scenery MaTower; +typedef Scenery MaWall1; +typedef Scenery Scenery63; +typedef Scenery MaGuillotine; +typedef Scenery MaProximityLight; +typedef Scenery MaWall2; +typedef Scenery MaWall3; +typedef Scenery MaWall4; +typedef Scenery MaTerrainBump; +typedef Scenery MaFloor1; +typedef Scenery MaFloor2; +typedef Scenery MaFloor3; +typedef Scenery MaFloor4; +typedef Scenery MaFloor5; +typedef Scenery MaFloor6; +typedef Scenery MaWeaponsFactory; +typedef Scenery MaIndicatorSign; +typedef Scenery MaDistanceSign1; +typedef Scenery MaDistanceSign2; +typedef Scenery MaDistanceSign3; +typedef Scenery MaDistanceSign4; +typedef Scenery MaDistanceSign5; +typedef Scenery MaTrainStopBlock; +typedef Scenery MaRailroadSwitch1; +typedef Scenery MaRailroadSwitch2; +typedef Scenery MaRailroadSwitch3; +typedef Scenery MaRailroadSwitch4; +typedef Scenery MaRailroadSwitch5; +typedef Scenery MaRailroadSwitch6; +typedef Scenery MaRailroadSwitch7; +typedef Scenery MaRailroadSwitch8; +typedef Scenery MaTrainTrack1; +typedef Scenery MaTrainTrack2; +typedef Scenery MaTrainTrack3; +typedef Scenery MaTrainTrack4; +typedef Scenery MaTrainTrack5; +typedef Scenery MaTrainTrack6; +typedef Scenery MaTrainTrack7; +typedef Scenery MaTrainTrack8; +typedef Scenery MaTrainTrack9; +typedef Scenery MaTrainTrack10; +typedef Scenery MaTrainTrack11; +typedef Scenery MaTrainTrack12; +typedef Scenery MaSwitchTrack; +typedef Scenery MaTrainTrack13; +typedef Scenery SyShip1; +typedef Scenery SyShip2; +typedef Scenery SyShip3; +typedef Scenery SyShip3Destroyed; +typedef Scenery SyShip4; +typedef Scenery SyShipDebris; +typedef Scenery SyShip2Destroyed; +typedef Sprite SpriteSyShip2; +typedef Sprite SpriteSyShip3; +typedef Scenery SyShipProjectile; +typedef Scenery SyShipWindows; +typedef Scenery AqCoralReef1; +typedef Scenery AqTunnel1; +typedef Scenery AqArch; +typedef Scenery AqCoralReef2; +typedef Scenery AqRock; +typedef Scenery AqWall1; +typedef Scenery AqRoof; +typedef Scenery AqBump1; +typedef Scenery AqTunnel2; +typedef Scenery AqBump2; +typedef Scenery Ve1TempleEntrance; +typedef Scenery AqTempleInterior1; +typedef Scenery AqTempleInterior2; +typedef Scenery AqTempleInterior3; +typedef Scenery AndPassage; +typedef Scenery AndDoor; +typedef Scenery TrBuilding; +typedef Scenery AndPathIntersection; +typedef Scenery AndPathWalls; +typedef Scenery AndPathExit; +typedef Scenery AndPathEntrance; +typedef Scenery VsBuilding1; +typedef Scenery VsBuilding2; +typedef Scenery VsPyramid1; +typedef Scenery VsPyramid2; +typedef Scenery VsArch; +typedef Scenery VsKaFlBase; +typedef Scenery VsSpaceJunk1; +typedef Scenery VsSpaceJunk2; +typedef Scenery VsSpaceJunk3; +typedef Scenery Scenery147; +typedef Scenery FoMountain1; +typedef Scenery FoMountain2; +typedef Scenery FoMountain3; +typedef Scenery FoTower; +typedef Scenery BoPole; +typedef Scenery BoBuilding; +typedef Scenery KaFlBase; +typedef Scenery SceneryUnk155; +typedef Scenery SceneryUnk156; +typedef Scenery SzSpaceJunk3; +typedef Scenery SzSpaceJunk1; +typedef Scenery Ve2Tower; +typedef Scenery Ve2Mountain; +typedef Sprite CoPole; +typedef Sprite CoTree; +typedef Sprite FoPole; +typedef Sprite FogShadow; +typedef Sprite CoRuin1; +typedef Sprite CoRuin2; +typedef Sprite Sprite167; +typedef Sprite Sprite168; +typedef Sprite TiCactus; +typedef Sprite CoSmoke; +typedef Sprite Ve1BossTrigger1; +typedef Sprite Ve1BossTrigger2; +typedef Sprite Ve1BossTrigger3; +typedef Sprite Ve1BossTrigger4; +typedef Sprite GfoxTarget; +typedef Actor CoGaruda1; // Robot that pushes buildings. +typedef Actor CoGaruda2; // Robot that throws I-Beams. +typedef Actor CoGaruda3; // Robot that spins I-Beams. +typedef Actor CoGarudaDestroy; +typedef Actor MeMolarRock; +typedef Actor MeMeteor1; +typedef Actor MeMeteor2; +typedef Actor MeMeteorShower1; +typedef Actor MeMeteorShower2; +typedef Actor MeMeteorShower3; +typedef Actor MeLaserCannon1; +typedef Actor MeLaserCannon2; +typedef Actor Actor188; +typedef Actor ActorDebris; +typedef Actor ActorMissileSeekTeam; +typedef Actor ActorMissileSeekPlayer; +typedef Actor CoSkibot; +typedef Actor CoRadar; +typedef Actor MeMora; +typedef Actor ActorCutscene; +typedef Actor CoMoleMissile; +typedef Actor ActorAllRange; +typedef Actor ActorTeamBoss; // Teammates in a boss battle +typedef Actor ActorTeamArwing; +typedef Actor ActorEvent; +typedef Actor MeteoBall; +typedef Actor MeHopBot; +typedef Actor SxSlippy; +typedef Actor SyRobot; +typedef Actor MaLocomotive; +typedef Actor MaTrainCar1; +typedef Actor Actor207; +typedef Actor MaTrainCar2; +typedef Actor MaTrainCar3; +typedef Actor MaTrainCar4; +typedef Actor MaTrainCar5; +typedef Actor MaTrainCar6; +typedef Actor MaTrainCar7; +typedef Actor MaRailroadSwitch; +typedef Actor MaBoulder; +typedef Actor MaHorizontalLockBar; +typedef Actor MaVerticalLockBar; +typedef Actor MaBarrier; +typedef Actor MaFallingBoulder; +typedef Actor MaBombDrop; +typedef Actor MaSpear; +typedef Actor MaShockBox; +typedef Actor MaRailwaySignal; +typedef Actor TiTerrain; +typedef Actor TiLandmine; +typedef Actor TiDesertRover; +typedef Actor TiDelphor; +typedef Actor TiDelphorHead; +typedef Actor TiDesertCrawler; +typedef Actor TiBoulder; +typedef Actor TiBomb; +typedef Actor TiRasco; +typedef Actor TiFekuda; +typedef Actor TiGreatFox; +typedef Actor ZoBird; +typedef Actor ZoDodora; // Snake type enemy +typedef Actor Actor237; +typedef Actor ZoFish; +typedef Actor ZoDodoraWpCount; +typedef Actor ZGull; +typedef Actor ZoEnergyBall; +typedef Actor ZoTroika; +typedef Actor ZoShrimp; +typedef Actor ZoObnema; +typedef Actor ZoBall; +typedef Actor ZoMine; +typedef Actor ZoBarrier; +typedef Actor ZoCraneMagnet; +typedef Actor ZoSpikeBall; +typedef Actor ZoTanker; +typedef Actor ZoContainer; +typedef Actor ZoRadarBuoy; +typedef Actor ZoSupplyCrane; +typedef Actor ZoSearchLight; +typedef Actor Actor255; +typedef Actor Actor256; +typedef Actor Actor257; +typedef Actor AqPearl; +typedef Actor AqAnglerFish; +typedef Actor AqGaroa; +typedef Actor AqSculpin; +typedef Actor AqSpindlyFish; +typedef Actor AqSquid; +typedef Actor AqSeaweed; +typedef Actor AqBoulder; +typedef Actor AqCoral; +typedef Actor AqJellyfish; +typedef Actor AqFishGroup; +typedef Actor AqStoneColumn; +typedef Actor AqOyster; +typedef Actor BoShieldReactor; +typedef Actor BoLaserCannon; +typedef Actor FoRadar; +typedef Actor SzSpaceJunk; +typedef Actor SoRock1; +typedef Actor SoRock2; +typedef Actor SoRock3; +typedef Actor SoWave; +typedef Actor SoProminence; +typedef Actor Ve1Pillar1; +typedef Actor Ve1Pillar2; +typedef Actor Ve1Pillar3; +typedef Actor Ve1Pillar4; +typedef Actor Ve1MonkeyStatue; +typedef Actor AndLaserEmitter; +typedef Actor AndBrainWaste; +typedef Actor AndExplosion; +typedef Actor AndRadio; +typedef Actor AndJamesTrigger; +typedef Actor AndBossTimer; +typedef Actor ActorSupplies; +typedef Boss CoGranga; +typedef Boss CoCarrier; +typedef Boss CoCarrierLeft; +typedef Boss CoCarrierUpper; +typedef Boss CoCarrierBottom; +typedef Boss MeCrusher; +typedef Boss MeCrusherShield; +typedef Boss Boss299; +typedef Boss Boss300; +typedef Boss Boss301; +typedef Boss A6Gorgon; +typedef Boss SxSpyborg; +typedef Boss SxSpyborgLeftArm; +typedef Boss SxSpyborgRightArm; +typedef Boss TiGoras; +typedef Boss ZoSarumarine; +typedef Boss FoBase; +typedef Boss BoBase; +typedef Boss BoBaseShield; +typedef Boss BoBaseCore; +typedef Boss Ve2Base; +typedef Boss SzGreatFox; +typedef Boss SyShogun; +typedef Boss SoVulkain; +typedef Boss KaSaucerer; +typedef Boss KaFrontlineBase; +typedef Boss AqBacoon; +typedef Boss Ve1Golemech; +typedef Boss AndAndross; +typedef Boss AndBrain; +typedef Item ItemLasers; +typedef Item ItemCheckpoint; +typedef Item ItemSilverStar; +typedef Item ItemSilverRing; +typedef Item ItemMeteoWarp; +typedef Item ItemBomb; +typedef Item ItemPathSplitX; +typedef Item ItemPathTurnLeft; +typedef Item ItemPathTurnRight; +typedef Item ItemPathSplitY; +typedef Item ItemPathTurnUp; +typedef Item ItemPathTurnDown; +typedef Item ItemRingCheck; +typedef Item Item1UP; +typedef Item ItemGoldRing; +typedef Item ItemWingRepair; +typedef Item ItemTrainingRing; +typedef Effect EffectFireSmoke; +typedef Effect Effect340; +typedef Effect Effect341; +typedef Effect Effect342; +typedef Effect Effect343; +typedef Effect Effect344; +typedef Effect Effect345; +typedef Effect Effect346; +typedef Effect Effect347; +typedef Effect Effect348; +typedef Effect Effect349; +typedef Effect Effect350; +typedef Effect Effect351; +typedef Effect EffectClouds; +typedef Effect Effect353; +typedef Effect Effect354; +typedef Effect Effect355; +typedef Effect Effect356; +typedef Effect Effect357; +typedef Effect Effect358; +typedef Effect Effect359; +typedef Effect Effect360; +typedef Effect Effect361; +typedef Effect Effect362; +typedef Effect Effect363; +typedef Effect Effect364; +typedef Effect Effect365; +typedef Effect Effect366; +typedef Effect Effect367; +typedef Effect Effect368; +typedef Effect Effect369; +typedef Effect Effect370; +typedef Effect Effect371; +typedef Effect Effect372; +typedef Effect TimedSfx; +typedef Effect Effect374; +typedef Effect Effect375; +typedef Effect Effect376; +typedef Effect Effect377; +typedef Effect Effect378; +typedef Effect Effect379; +typedef Effect Effect380; +typedef Effect Effect381; +typedef Effect Effect382; +typedef Effect Effect383; +typedef Effect Effect384; +typedef Effect Effect385; +typedef Effect Effect386; +typedef Effect Effect387; +typedef Effect Effect388; +typedef Effect Effect389; +typedef Effect Effect390; +typedef Effect Effect391; +typedef Effect Effect392; +typedef Effect Effect393; +typedef Effect Effect394; +typedef Effect Effect395; +typedef Effect Effect396; +typedef Effect Effect397; +typedef Effect Effect398; +typedef Effect Effect399; + #endif diff --git a/include/sf64player.h b/include/sf64player.h index 2817e56e..71f28f91 100644 --- a/include/sf64player.h +++ b/include/sf64player.h @@ -4,6 +4,25 @@ #include "sf64math.h" #include "sf64object.h" +#define PFLAG_228_0 (1 << 0) +#define PFLAG_228_1 (1 << 1) +#define PFLAG_228_2 (1 << 2) +#define PFLAG_228_3 (1 << 3) +#define PFLAG_228_4 (1 << 4) +#define PFLAG_228_5 (1 << 5) +#define PFLAG_228_6 (1 << 6) +#define PFLAG_228_7 (1 << 7) + +typedef enum TeamId { + /* 0 */ TEAM_ID_FOX, + /* 1 */ TEAM_ID_FALCO, + /* 2 */ TEAM_ID_SLIPPY, + /* 3 */ TEAM_ID_PEPPY, + /* 4 */ TEAM_ID_KATT, + /* 5 */ TEAM_ID_BILL, + /* 6 */ TEAM_ID_MAX, +} TeamId; + typedef enum WingState { /* 0 */ WINGSTATE_NONE, /* 1 */ WINGSTATE_BROKEN, @@ -20,69 +39,89 @@ typedef enum PlayerForm { } PlayerForm; typedef enum DrawMode { - /* 0 */ DRAWMODE_0, - /* 1 */ DRAWMODE_1, - /* 2 */ DRAWMODE_2, + /* 0 */ DRAW_NONE, + /* 1 */ DRAW_TITLE, + /* 2 */ DRAW_OPTION, /* 3 */ DRAW_MAP, - /* 4 */ DRAWMODE_4, - /* 5 */ DRAWMODE_5, - /* 6 */ DRAWMODE_6, - /* 7 */ DRAWMODE_7, - /* 8 */ DRAWMODE_8, + /* 4 */ DRAW_PLAY, + /* 5 */ DRAW_UNK_MAP, + /* 6 */ DRAW_UNK_VS, + /* 7 */ DRAW_UNK_7, + /* 8 */ DRAW_ENDING, + /* 9 */ DRAW_MAX, } DrawMode; +typedef enum EngineGlowColor { + /* 0 */ EG_RED, + /* 1 */ EG_BLUE, + /* 2 */ EG_GREEN, + /* 3 */ EG_ORANGE +} EngineGlowColor; + typedef enum LevelMode { /* 0 */ LEVELMODE_ON_RAILS, /* 1 */ LEVELMODE_ALL_RANGE, - /* 2 */ LEVELMODE_UNK_2, + /* 2 */ LEVELMODE_TURRET, // Unused scrapped turret mode + /* 3 */ LEVELMODE_MAX, } LevelMode; typedef enum PlayerState1C8 { - /* 0 */ PLAYERSTATE_1C8_0, - /* 1 */ PLAYERSTATE_1C8_1, - /* 2 */ PLAYERSTATE_1C8_2, - /* 3 */ PLAYERSTATE_1C8_3, - /* 4 */ PLAYERSTATE_1C8_4, - /* 5 */ PLAYERSTATE_1C8_5, - /* 6 */ PLAYERSTATE_1C8_6, - /* 7 */ PLAYERSTATE_1C8_7, - /* 8 */ PLAYERSTATE_1C8_8, - /* 9 */ PLAYERSTATE_1C8_9, - /* 10 */ PLAYERSTATE_1C8_10, - /* 11 */ PLAYERSTATE_1C8_11, + /* 0 */ PLAYERSTATE_1C8_STANDBY, + /* 1 */ PLAYERSTATE_1C8_INIT, + /* 2 */ PLAYERSTATE_1C8_LEVEL_INTRO, + /* 3 */ PLAYERSTATE_1C8_ACTIVE, + /* 4 */ PLAYERSTATE_1C8_DOWN, + /* 5 */ PLAYERSTATE_1C8_U_TURN, + /* 6 */ PLAYERSTATE_1C8_NEXT, + /* 7 */ PLAYERSTATE_1C8_LEVEL_COMPLETE, + /* 8 */ PLAYERSTATE_1C8_ENTER_WARP_ZONE, + /* 9 */ PLAYERSTATE_1C8_START_360, + /* 10 */ PLAYERSTATE_1C8_GFOX_REPAIR, + /* 11 */ PLAYERSTATE_1C8_ANDROSS_MOUTH, /* 12 */ PLAYERSTATE_1C8_12, - /* 13 */ PLAYERSTATE_1C8_13, + /* 13 */ PLAYERSTATE_1C8_VS_STANDBY, + /* 14 */ PLAYERSTATE_1C8_MAX, } PlayerState1C8; -typedef enum { - /* 0 */ PLAYERSHOT_0, // single laser? - /* 1 */ PLAYERSHOT_1, // twin laser? +typedef enum PlayerShotStatus { + /* 0 */ SHOT_FREE, + /* 1 */ SHOT_ACTIVE, + /* 2 */ SHOT_HITMARK, +} PlayerShotStatus; + +typedef enum PlayerShotId { + /* 0 */ PLAYERSHOT_SINGLE_LASER, // single laser? + /* 1 */ PLAYERSHOT_TWIN_LASER, // twin laser? /* 2 */ PLAYERSHOT_2, - /* 3 */ PLAYERSHOT_3, // bomb? - /* 4 */ PLAYERSHOT_4, - /* 5 */ PLAYERSHOT_5, // landmaster shot - /* 6 */ PLAYERSHOT_6, // on-foot shot + /* 3 */ PLAYERSHOT_BOMB, // bomb? + /* 4 */ PLAYERSHOT_LOCK_SEARCH, + /* 5 */ PLAYERSHOT_TANK, // landmaster shot + /* 6 */ PLAYERSHOT_ON_FOOT, // on-foot shot /* 7 */ PLAYERSHOT_7, // unused? related to on-foot shot somehow - /* 8 */ PLAYERSHOT_8, // charge shot - /* 9 */ PLAYERSHOT_9, + /* 8 */ PLAYERSHOT_LOCK_ON, // charge shot + /* 9 */ PLAYERSHOT_GFOX_LASER, } PlayerShotId; -typedef enum { +#define NPC_SHOT_ID 100 +#define CS_SHOT_ID 100 +#define DMG_SRC_2 2 +#define DMG_SRC_100 100 + +typedef enum LaserStrength { /* 0 */ LASERS_SINGLE, /* 1 */ LASERS_TWIN, /* 2 */ LASERS_HYPER, /* 3 */ LASERS_UNK_3, + /* 4 */ LASERS_MAX, } LaserStrength; -typedef struct { +typedef struct PlayerShot { /* 0x00 */ Object obj; /* 0x1C */ s32 index; /* 0x20 */ Vec3f vel; - /* 0x2C */ f32 unk_2C; - /* 0x30 */ f32 unk_30; - /* 0x34 */ f32 unk_34; + /* 0x2C */ Vec3f vec_2C; /* 0x38 */ f32 sfxSource[3]; - /* 0x44 */ f32 unk_44; + /* 0x44 */ f32 scale; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; @@ -90,31 +129,31 @@ typedef struct { /* 0x58 */ s32 unk_58; /* 0x5C */ s32 unk_5C; /* 0x60 */ s32 unk_60; - /* 0x64 */ s32 unk_64; - /* 0x68 */ s32 playerNum; + /* 0x64 */ s32 timer; + /* 0x68 */ s32 sourceId; /* 0x6C */ u8 bonus; } PlayerShot; // size = 0x70 -typedef struct { - /* 0x00 */ u8 rightState; - /* 0x01 */ u8 leftState; - /* 0x04 */ f32 unk_04; - /* 0x08 */ f32 unk_08; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ f32 unk_10; - /* 0x14 */ f32 unk_14; - /* 0x18 */ f32 unk_18; - /* 0x1C */ f32 unk_1C; - /* 0x20 */ f32 unk_20; - /* 0x24 */ f32 unk_24; +typedef struct ArwingInfo { + /* 0x00 */ u8 rightWingState; + /* 0x01 */ u8 leftWingState; + /* 0x04 */ f32 upperRightFlapYrot; + /* 0x08 */ f32 bottomRightFlapYrot; + /* 0x0C */ f32 upperLeftFlapYrot; + /* 0x10 */ f32 bottomLeftFlapYrot; + /* 0x14 */ f32 laserGunsYpos; + /* 0x18 */ f32 laserGunsXpos; + /* 0x1C */ f32 wingsXrot; + /* 0x20 */ f32 wingsYrot; + /* 0x24 */ f32 wingsZrot; /* 0x28 */ f32 unk_28; - /* 0x2C */ u8 unk_2C; - /* 0x30 */ f32 unk_30; - /* 0x34 */ f32 unk_34; - /* 0x38 */ f32 unk_38; -} WingInfo; // size = 0x3C + /* 0x2C */ u8 drawFace; + /* 0x30 */ f32 teamFaceXrot; + /* 0x34 */ f32 teamFaceYrot; + /* 0x38 */ f32 cockpitGlassXrot; +} ArwingInfo; // size = 0x3C -typedef struct { +typedef struct PlayerSfx { /* 0x00 */ u8 levelType; /* 0x01 */ u8 form; /* 0x04 */ f32 *srcPos; @@ -140,64 +179,57 @@ typedef struct Player { /* 0x028 */ f32 unk_028; /* 0x02C */ f32 unk_02C; /* 0x030 */ f32 unk_030; - /* 0x034 */ f32 unk_034; + /* 0x034 */ f32 camRoll; /* 0x038 */ char pad38[8]; - /* 0x040 */ Vec3f camEye; - /* 0x04C */ Vec3f camAt; - /* 0x058 */ f32 unk_058; - /* 0x05C */ f32 unk_05C; - /* 0x05C */ f32 unk_060; - /* 0x064 */ f32 unk_064; - /* 0x068 */ f32 unk_068; - /* 0x06C */ f32 unk_06C; - /* 0x070 */ f32 unk_070; - /* 0x074 */ Vec3f pos; - /* 0x080 */ f32 unk_080; - /* 0x084 */ f32 unk_084; - /* 0x088 */ f32 unk_088; - /* 0x08C */ f32 unk_08C; - /* 0x090 */ Vec3f unk_090; - /* 0x09C */ f32 unk_09C; - /* 0x0A0 */ f32 unk_0A0; - /* 0x0A4 */ f32 unk_0A4; - /* 0x0A8 */ f32 unk_0A8; - /* 0x0AC */ f32 unk_0AC; - /* 0x0B0 */ f32 unk_0B0; - /* 0x0B4 */ f32 unk_0B4; - /* 0x0B8 */ f32 unk_0B8; - /* 0x0BC */ f32 unk_0BC; + /* 0x040 */ CameraPoint cam; + /* 0x058 */ f32 camYaw; + /* 0x05C */ f32 camPitch; + /* 0x05C */ f32 xRock; + /* 0x064 */ Vec3f groundPos; // position on ground directly below player + /* 0x070 */ f32 groundRotY; // y rotation of actor under player when acting as ground + /* 0x074 */ Vec3f pos; // pos.z is position along path. see trueZpos for the actual z position + /* 0x080 */ f32 yBob; + /* 0x084 */ f32 xShake; + /* 0x088 */ f32 bobPhase; + /* 0x08C */ f32 camDist; + /* 0x090 */ Vec3f basePos; // position at start of update + /* 0x09C */ f32 pathWidth; + /* 0x0A0 */ f32 pathHeight; + /* 0x0A4 */ f32 pathFloor; + /* 0x0A8 */ f32 unk_0A8; // set to 3000.0f, not used. May have been z-extent of path? + /* 0x0AC */ f32 xPath; + /* 0x0B0 */ f32 yPath; + /* 0x0B4 */ f32 pathStep; + /* 0x0B8 */ f32 xPathTarget; + /* 0x0BC */ f32 yPathTarget; /* 0x0C0 */ Vec3f vel; - /* 0x0CC */ f32 unk_0CC; - /* 0x0D0 */ f32 unk_0D0; - /* 0x0D4 */ f32 unk_0D4; - /* 0x0D8 */ Vec3f unk_0D8; - /* 0x0E4 */ f32 unk_0E4; - /* 0x0E8 */ f32 unk_0E8; - /* 0x0EC */ f32 unk_0EC; - /* 0x0F0 */ f32 unk_0F0; - /* 0x0F4 */ f32 unk_0F4; - /* 0x0F8 */ f32 unk_0F8; - /* 0x0FC */ f32 unk_0FC; - /* 0x100 */ f32 unk_100; - /* 0x104 */ f32 unk_104; - /* 0x108 */ f32 unk_108; - /* 0x10C */ f32 unk_10C; - /* 0x110 */ f32 unk_110; - /* 0x114 */ f32 unk_114; - /* 0x118 */ f32 unk_118; - /* 0x11C */ f32 unk_11C; - /* 0x120 */ f32 unk_120; - /* 0x124 */ f32 unk_124; + /* 0x0CC */ f32 warpCamSpeed; + /* 0x0D0 */ f32 baseSpeed; + /* 0x0D4 */ f32 gravity; + /* 0x0D8 */ Vec3f knockback; + /* 0x0E4 */ Vec3f rot; + /* 0x0F0 */ f32 rockAngle; + /* 0x0F4 */ f32 rockPhase; + /* 0x0F8 */ f32 bankAngle; + /* 0x0FC */ f32 xRot_0FC; // on-foot cam x tilt from floor + /* 0x100 */ f32 zRot_0FC; // on-foot cam z tilt from floor + /* 0x104 */ Vec3f rot_104; // rotation modifiers from ground movement + /* 0x110 */ f32 boostSpeed; + /* 0x114 */ f32 yRot_114; + /* 0x118 */ f32 pathChangeYaw; + /* 0x11C */ f32 yRotVel_11C; + /* 0x120 */ f32 xRot_120; + /* 0x124 */ f32 pathChangePitch; /* 0x128 */ char pad128[4]; - /* 0x12C */ f32 unk_12C; - /* 0x130 */ f32 unk_130; - /* 0x134 */ f32 unk_134; - /* 0x138 */ f32 unk_138; + /* 0x12C */ f32 zRotBank; + /* 0x130 */ f32 zRotBarrelRoll; + /* 0x134 */ f32 damageShake; + /* 0x138 */ f32 trueZpos; // the actual position of the arwing. pos.z is its z position along the path /* 0x13C */ char pad13C[4]; - /* 0x140 */ f32 unk_140; - /* 0x144 */ f32 unk_144; - /* 0x148 */ f32 unk_148; - /* 0x14C */ f32 unk_14C; + /* 0x140 */ f32 zPathVel; + /* 0x144 */ f32 zPath; + /* 0x148 */ f32 unk_148; // affects how cam eye follows the player + /* 0x14C */ f32 unk_14C; // affects how cam at follows the player /* 0x150 */ f32 unk_150; /* 0x154 */ f32 unk_154; /* 0x158 */ f32 unk_158; @@ -214,74 +246,74 @@ typedef struct Player { /* 0x184 */ f32 unk_184; /* 0x188 */ f32 unk_188; /* 0x18C */ f32 unk_18C; - /* 0x190 */ f32 unk_190; - /* 0x194 */ f32 unk_194; - /* 0x198 */ s32 unk_198; - /* 0x19C */ s32 unk_19C; - /* 0x1A0 */ s32 unk_1A0; - /* 0x1A4 */ s32 unk_1A4; + /* 0x190 */ f32 unk_190; // Related to engine glow. Investigate + /* 0x194 */ f32 unk_194; // Related to engine glow. Investigate + /* 0x198 */ s32 savedAlternateView; + /* 0x19C */ s32 unk_19C; // used to indicate whether a U-turn is forced, whether to draw ground in TI intro, and to stop the landmaster + /* 0x1A0 */ s32 unk_1A0; // tank muzzle flash timer + /* 0x1A4 */ s32 dmgType; /* 0x1A8 */ char pad1A8[8]; - /* 0x1B0 */ s32 unk_1B0; - /* 0x1B4 */ s32 unk_1B4; + /* 0x1B0 */ s32 turretState; + /* 0x1B4 */ s32 turretActor; /* 0x1B8 */ char pad1B8[4]; - /* 0x1BC */ s32 unk_1BC; - /* 0x1C0 */ s32 unk_1C0; + /* 0x1BC */ s32 turretRecoil; + /* 0x1C0 */ s32 turretLockOnCount; /* 0x1C4 */ s32 num; /* 0x1C8 */ PlayerState1C8 state_1C8; /* 0x1CC */ PlayerForm form; - /* 0x1D0 */ s32 unk_1D0; - /* 0x1D4 */ s32 unk_1D4; - /* 0x1D8 */ s32 unk_1D8; - /* 0x1DC */ s32 unk_1DC; - /* 0x1E0 */ s32 timer_1E0; - /* 0x1E4 */ s32 timer_1E4; - /* 0x1E8 */ s32 timer_1E8; - /* 0x1EC */ s32 unk_1EC; - /* 0x1F0 */ s32 unk_1F0; - /* 0x1F4 */ s32 unk_1F4; - /* 0x1F8 */ s32 timer_1F8; - /* 0x1FC */ s32 timer_1FC; - /* 0x200 */ s32 unk_200; - /* 0x204 */ s32 unk_204; - /* 0x208 */ s32 unk_208; + /* 0x1D0 */ s32 csState; + /* 0x1D4 */ bool grounded; + /* 0x1D8 */ s32 meTargetIndex; + /* 0x1DC */ s32 rollState; + /* 0x1E0 */ s32 rollInputTimerL; + /* 0x1E4 */ s32 rollInputTimerR; + /* 0x1E8 */ s32 rollTimer; + /* 0x1EC */ s32 rollRate; + /* 0x1F0 */ s32 baseRollRate; + /* 0x1F4 */ s32 hitTimer; + /* 0x1F8 */ s32 csTimer; + /* 0x1FC */ s32 csEventTimer; + /* 0x200 */ s32 dmgEffect; // 1 colors the arwing red. 2 gives it a static-y texture + /* 0x204 */ s32 wingPosition; + /* 0x208 */ s32 unk_208; // timer for great fox splash effects in aquas intro /* 0x20C */ s32 unk_20C; - /* 0x210 */ s32 timer_210; - /* 0x214 */ s32 timer_214; - /* 0x218 */ s32 timer_218; - /* 0x21C */ s32 unk_21C; - /* 0x220 */ s32 timer_220; - /* 0x224 */ s32 timer_224; + /* 0x210 */ s32 pathChangeTimer; + /* 0x214 */ s32 timer_214; // unused. may have been another double input timer like barrel roll + /* 0x218 */ s32 timer_218; // unused. may have been another double input timer like barrel roll + /* 0x21C */ s32 hitDirection; + /* 0x220 */ s32 radioDamageTimer; + /* 0x224 */ s32 dmgEffectTimer; /* 0x228 */ s32 flags_228; - /* 0x22C */ s32 unk_22C; - /* 0x230 */ s32 unk_230; - /* 0x234 */ s32 unk_234; - /* 0x238 */ s32 unk_238; - /* 0x23C */ s32 unk_23C; - /* 0x240 */ s32 unk_240; - /* 0x244 */ s32 timer_244; - /* 0x248 */ f32 unk_248; - /* 0x24C */ f32 unk_24C; - /* 0x250 */ f32 unk_250; + /* 0x22C */ s32 whooshTimer; + /* 0x230 */ s32 unk_230; // turns off some Blue Marine controls. perhaps was a lockout timer? + /* 0x234 */ s32 draw; + /* 0x238 */ s32 alternateView; + /* 0x23C */ s32 shadowing; + /* 0x240 */ s32 hideShadow; + /* 0x244 */ s32 shotTimer; + /* 0x248 */ f32 shadowRotX; // forms YPR triple with groundRotY + /* 0x24C */ f32 shadowRotZ; + /* 0x250 */ f32 unk_250; // checked for by event actors, but unused? /* 0x250 */ char pad254[4]; - /* 0x258 */ f32 unk_258; - /* 0x25C */ f32 unk_25C; + /* 0x258 */ f32 meteoWarpSpinSpeed; + /* 0x25C */ f32 contrailScale; /* 0x260 */ char pad260[4]; /* 0x264 */ s32 shields; /* 0x268 */ s32 damage; /* 0x26C */ s32 heal; - /* 0x270 */ s32 unk_270; + /* 0x270 */ s32 unk_270; // checked for by event actors, but unused? /* 0x274 */ char pad274[4]; /* 0x278 */ s32 timer_278; - /* 0x27C */ s32 timer_27C; - /* 0x280 */ s32 unk_280; + /* 0x27C */ s32 meteoWarpTimer; + /* 0x280 */ s32 barrelRollAlpha; /* 0x284 */ s32 unk_284; - /* 0x288 */ s32 unk_288; + /* 0x288 */ s32 attacker; /* 0x28C */ char pad28C[0x28]; - /* 0x2B4 */ bool unk_2B4; - /* 0x2B8 */ bool unk_2B8; - /* 0x2BC */ f32 unk_2BC; - /* 0x2C0 */ f32 unk_2C0; - /* 0x2C4 */ s32 unk_2C4; + /* 0x2B4 */ bool boostCooldown; + /* 0x2B8 */ bool boostActive; + /* 0x2BC */ f32 boostMeter; + /* 0x2C0 */ f32 unk_2C0; // has to do with starting right tank jet. counterpart of D_800C9F20 + /* 0x2C4 */ s32 deflectCount; // counts shots deflected by barrel rolls. never used /* 0x2C8 */ Vec3f hit2; /* 0x2D4 */ Vec3f hit1; /* 0x2E0 */ Vec3f hit3; @@ -290,10 +322,10 @@ typedef struct Player { /* 0x460 */ f32 sfxSource[3]; /* 0x46C */ f32 sfxVel[3]; /* 0x478 */ PlayerSfx sfx; - /* 0x498 */ s32 timer_498; - /* 0x49C */ WingInfo wings; - /* 0x4D8 */ f32 unk_4D8; - /* 0x4DC */ s32 unk_4DC; + /* 0x498 */ s32 mercyTimer; + /* 0x49C */ ArwingInfo arwing; + /* 0x4D8 */ f32 aerobaticPitch; + /* 0x4DC */ bool somersault; } Player; // size = 0x4E0 diff --git a/include/sf64save.h b/include/sf64save.h index 0de8c4f5..2f80a517 100644 --- a/include/sf64save.h +++ b/include/sf64save.h @@ -3,8 +3,17 @@ #include <libultra/types.h> +#define RANKING_MAX (10) // Maximum number of entries in the ranking +#define ROUTE_MAX (7) // Maximum number of planets in a route +#define ENTRY_MAX (3) // Maximum number of letters for name entry + +#define TEAMSTATUS_PEPPY (0x00FF0000) +#define TEAMSTATUS_SLIPPY (0x0000FF00) +#define TEAMSTATUS_FALCO (0x000000FF) +#define TEAMSTATUS_ALIVE (0x00FFFFFF) + typedef struct { - /* bit 0 */ u8 unk_0 : 3; + /* bit 0 */ u8 unk_0 : 3; // unused /* bit 3 */ u8 expertMedal : 1; /* bit 4 */ u8 expertClear : 1; /* bit 5 */ u8 played : 1; @@ -12,27 +21,27 @@ typedef struct { /* bit 7 */ u8 normalClear : 1; } PlanetData; // size = 0x1 -typedef struct { - /* bit 0 */ u16 unk_0 : 8; - /* bit 8 */ u16 unk_8 : 4; - /* bit C */ u16 unk_C : 1; - /* bit D */ u16 unk_D : 1; - /* bit E */ u16 unk_E : 1; - /* bit F */ u16 unk_F : 1; -} Save_SubStruct_5E; // size = 0x10 +typedef struct PlanetStats { + /* bit 0 */ u16 hitCount : 8; + /* bit 8 */ u16 planetId : 4; + /* bit C */ u16 unk_C : 1; // hitCount related + /* bit D */ u16 peppyAlive : 1; + /* bit E */ u16 falcoAlive : 1; + /* bit F */ u16 slippyAlive : 1; +} PlanetStats; // size = 0x10 -typedef struct{ +typedef struct SaveData { /* 0x00 */ PlanetData planet[16]; /* 0x10 */ char pad10[0x4]; /* 0x14 */ u8 soundMode; /* 0x15 */ u8 musicVolume; /* 0x16 */ u8 voiceVolume; /* 0x17 */ u8 sfxVolume; - /* 0x18 */ u8 unk_18[10][3]; - /* 0x36 */ u8 unk_36[10]; - /* 0x40 */ u8 unk_40[10]; - /* 0x4A */ u16 unk_4A[10]; - /* 0x5E */ Save_SubStruct_5E unk_5E[10][7]; + /* 0x18 */ u8 rankNameEntry[RANKING_MAX][ENTRY_MAX]; // Name entries in the ranking + /* 0x36 */ u8 rankingRoute[RANKING_MAX]; // Maximum number of planets played in the current record + /* 0x40 */ u8 rankingLives[RANKING_MAX]; // Player lives left in the current record + /* 0x4A */ u16 rankingMedal[RANKING_MAX]; // Medals obtained in the current record + /* 0x5E */ PlanetStats stats[RANKING_MAX][ROUTE_MAX]; /* 0xEA */ u8 unk_EA; /* 0xEB */ char padEB[0x3]; /* 0xEE */ char padEE[0x10]; @@ -40,9 +49,9 @@ typedef struct{ typedef struct { /* 0x00 */ union { - u8 raw[sizeof(SaveData)]; - SaveData data; - }; + u8 raw[sizeof(SaveData)]; + SaveData data; + }; /* 0xFE */ u16 checksum; } Save; // size = 0x100 diff --git a/include/sf64thread.h b/include/sf64thread.h index 31aeb1ce..cbe8a395 100644 --- a/include/sf64thread.h +++ b/include/sf64thread.h @@ -13,7 +13,7 @@ typedef enum { /* 5 */ GSTATE_GAME_OVER, /* 6 */ GSTATE_VS_INIT, /* 7 */ GSTATE_PLAY, - /* 8 */ GSTATE_CREDITS, + /* 8 */ GSTATE_ENDING, /* 100 */ GSTATE_BOOT = 100, /* 101 */ GSTATE_BOOT_WAIT, /* 102 */ GSTATE_SHOW_LOGO, @@ -22,6 +22,13 @@ typedef enum { /* 105 */ GSTATE_START, } GameState; +typedef enum PlayState { + /* 0 */ PLAY_STANDBY, + /* 1 */ PLAY_INIT, + /* 2 */ PLAY_UPDATE, + /* 100 */ PLAY_PAUSE=100, +} PlayState; + typedef void (*TimerAction)(s32*, s32); typedef struct { @@ -35,7 +42,7 @@ typedef struct { typedef struct { /* 0x000 */ OSThread thread; /* 0x1B0 */ char stack[0x800]; - /* 0x9B0 */ OSMesgQueue msgQueue; + /* 0x9B0 */ OSMesgQueue mesgQueue; /* 0x9C8 */ OSMesg msg; /* 0x9CC */ FrameBuffer* fb; /* 0x9D0 */ u16 width; @@ -52,7 +59,7 @@ typedef enum { typedef struct { /* 0x00 */ OSTask task; - /* 0x40 */ OSMesgQueue* msgQueue; + /* 0x40 */ OSMesgQueue* mesgQueue; /* 0x44 */ OSMesg msg; /* 0x48 */ SpTaskState state; } SPTask; // size = 0x50, 0x8 aligned @@ -78,8 +85,8 @@ void Timer_SetValue(s32* address, s32 value); void Timer_CompleteTask(TimerTask*); void Timer_Wait(u64); -void Fault_ThreadEntry(void*); -void func_80007FE4(FrameBuffer*, u16, u16); +void Fault_ThreadEntry(OSMesg); +void Fault_SetFrameBuffer(FrameBuffer*, u16, u16); void Fault_Init(void); typedef enum { @@ -96,7 +103,7 @@ extern OSContPad gControllerHold[4]; extern OSContPad gControllerPress[4]; extern u8 gControllerPlugged[4]; extern u32 gControllerLock; -extern u8 gControllerRumble[4]; +extern u8 gControllerRumbleEnabled[4]; extern OSContPad sNextController[4]; // extern OSContPad sPrevController[4]; // extern OSContStatus sControllerStatus[4]; // @@ -119,33 +126,33 @@ extern u32 gSegments[16]; // 800E1FD0 extern OSMesgQueue gPiMgrCmdQueue; // 800E2010 extern OSMesg sPiMgrCmdBuff[50]; // 800E2028 -extern OSMesgQueue gDmaMsgQueue; -extern void* sDmaMsgBuff[1]; +extern OSMesgQueue gDmaMesgQueue; +extern OSMesg sDmaMsgBuff[1]; extern OSIoMesg gDmaIOMsg; extern OSMesgQueue gSerialEventQueue; -extern void* sSerialEventBuff[1]; -extern OSMesgQueue gMainThreadMsgQueue; -extern void* sMainThreadMsgBuff[32]; -extern OSMesgQueue gTaskMsgQueue; -extern void* sTaskMsgBuff[16]; -extern OSMesgQueue gAudioVImsgQueue; -extern void* sAudioVImsgBuff[1]; -extern OSMesgQueue gAudioTaskMsgQueue; -extern void* sAudioTaskMsgBuff[1]; -extern OSMesgQueue gGfxVImsgQueue; -extern void* sGfxVImsgBuff[4]; -extern OSMesgQueue gGfxTaskMsgQueue; -extern void* sGfxTaskMsgBuff[2]; -extern OSMesgQueue gSerialThreadMsgQueue; -extern void* sSerialThreadMsgBuff[8]; -extern OSMesgQueue gControllerMsgQueue; -extern void* sControllerMsgBuff[1]; -extern OSMesgQueue gSaveMsgQueue; -extern void* sSaveMsgBuff[1]; -extern OSMesgQueue gTimerTaskMsgQueue; -extern void* sTimerTaskMsgBuff[16]; -extern OSMesgQueue gTimerWaitMsgQueue; -extern void* sTimerWaitMsgBuff[1]; +extern OSMesg sSerialEventBuff[1]; +extern OSMesgQueue gMainThreadMesgQueue; +extern OSMesg sMainThreadMsgBuff[32]; +extern OSMesgQueue gTaskMesgQueue; +extern OSMesg sTaskMsgBuff[16]; +extern OSMesgQueue gAudioVImesgQueue; +extern OSMesg sAudioVImsgBuff[1]; +extern OSMesgQueue gAudioTaskMesgQueue; +extern OSMesg sAudioTaskMsgBuff[1]; +extern OSMesgQueue gGfxVImesgQueue; +extern OSMesg sGfxVImsgBuff[4]; +extern OSMesgQueue gGfxTaskMesgQueue; +extern OSMesg sGfxTaskMsgBuff[2]; +extern OSMesgQueue gSerialThreadMesgQueue; +extern OSMesg sSerialThreadMsgBuff[8]; +extern OSMesgQueue gControllerMesgQueue; +extern OSMesg sControllerMsgBuff[1]; +extern OSMesgQueue gSaveMesgQueue; +extern OSMesg sSaveMsgBuff[1]; +extern OSMesgQueue gTimerTaskMesgQueue; +extern OSMesg sTimerTaskMsgBuff[16]; +extern OSMesgQueue gTimerWaitMesgQueue; +extern OSMesg sTimerWaitMsgBuff[1]; extern GfxPool gGfxPools[2]; // 800E23B0 @@ -160,11 +167,11 @@ extern Lightsn* gLight; extern FrameBuffer* gFrameBuffer; extern u16* gTextureRender; -extern u8 D_80137E78; +extern u8 gVIsPerFrame; extern u32 gSysFrameCount; extern u8 gStartNMI; extern u8 gStopTasks; -extern u8 D_80137E84[4]; +extern u8 gControllerRumbleFlags[4]; extern u16 gFillScreenColor; extern u16 gFillScreen; @@ -175,7 +182,11 @@ extern OSThread gMainThread; // 8013A040 extern u8 sMainThreadStack[0x1000]; // 8013A1F0 extern OSThread gAudioThread; //8013B1F0 -#define MSG_QUEUE_EMPTY -1 +#define MESG_QUEUE_EMPTY -1 + +#define MQ_GET_MESG(mq, mesg) (osRecvMesg((mq), (OSMesg*) (mesg), OS_MESG_NOBLOCK) != -1) +#define MQ_WAIT_FOR_MESG(mq, mesg) osRecvMesg((mq), (OSMesg*) (mesg), OS_MESG_BLOCK) +#define MQ_CLEAR_QUEUE(mq) do {s32 m1 = -1; s32 mesg; do {} while(osRecvMesg((mq), (OSMesg*) &(mesg), OS_MESG_NOBLOCK) != m1);} while(0) #define FAULT_MESG_BREAK 1 #define FAULT_MESG_FAULT 2 diff --git a/include/sfx.h b/include/sfx.h new file mode 100644 index 00000000..37394ccc --- /dev/null +++ b/include/sfx.h @@ -0,0 +1,511 @@ +#ifndef SFX_H +#define SFX_H + +#include "sys.h" + +extern f32 gDefaultSfxSource[]; +extern f32 gDefaultMod; +extern s8 gDefaultReverb; + +void Audio_PlaySfx(u32 sfxId, f32* sfxSource, u8 token, f32* freqMod, f32* volMod, s8* reverbAdd); +void Audio_KillSfxByBank(u8 bankId); +void Audio_StopSfxByBankAndSource(u8 bankId, f32* sfxSource); +void Audio_KillSfxByBankAndSource(u8 bankId, f32* sfxSource); +void Audio_KillSfxBySource(f32* sfxSource); +void Audio_KillSfxBySourceAndId(f32* sfxSource, u32 sfxId); +void Audio_KillSfxByTokenAndId(u8 token, u32 sfxId); +void Audio_KillSfxById(u32 sfxId); +void Audio_StartPlayerNoise(u8 playerId); +void Audio_StopPlayerNoise(u8 playerId); +void Audio_InitBombSfx(u8 playerId, u8 type); +void Audio_PlayBombFlightSfx(u8 playerId, f32* sfxSource); +void Audio_PlayBombExplodeSfx(u8 playerId, f32* sfxSource); +void Audio_StopEngineNoise(f32* sfxSource); +void Audio_SetSfxSpeedModulation(f32 vel); +void Audio_SetTransposeAndPlaySfx(f32* sfxSource, u32 sfxId, u8 semitones); +void Audio_SetModulationAndPlaySfx(f32* sfxSource, u32 sfxId, f32 freqMod); +void Audio_PlaySfxModulated(f32* sfxSource, u32 sfxId); +void Audio_SetSfxMapModulation(u8 fMod); +void Audio_SetHeatAlarmParams(u8 shields, u8 heightParam); +void Audio_PlayEventSfx(f32* sfxSource, u16 eventSfxId); +void Audio_StopEventSfx(f32* sfxSource, u16 eventSfxId); +void Audio_SetEnvSfxReverb(s8 reverb); +void Audio_PlayPauseSfx(u8 active); +void Audio_PlayMapMenuSfx(u8 active); +void Audio_KillAllSfx(void); + +#define AUDIO_PLAY_SFX(sfxId, srcPos, token) (Audio_PlaySfx((sfxId),(srcPos),(token),&gDefaultMod,&gDefaultMod,&gDefaultReverb)) + +#define SFX_FLAG_18 (1 << 18) // makes distance ignore z position? probably more +#define SFX_FLAG_19 (1 << 19) +#define SFX_FLAG_20 (1 << 20) // make priority ignore distance +#define SFX_FLAG_21 (1 << 21) // make reverb ignore distance +#define SFX_FLAG_22 (1 << 22) // make volume ignore distance +#define SFX_FLAG_23 (1 << 23) // make noisy + +#define SFX_FLAG_27 (1 << 27) // allow duplicate requests + +#define SFX_BANK_SHIFT 28 +#define SFX_STATE_SHIFT 24 +#define SFX_RANGE_SHIFT 16 +#define SFX_IMPORT_SHIFT 8 + +#define SFX_BANK_MASK (0xF << SFX_BANK_SHIFT) +#define SFX_STATE_FLAG (1 << SFX_STATE_SHIFT) +#define SFX_RANGE_MASK (3 << SFX_RANGE_SHIFT) +#define SFX_IMPORT_MASK (0xFF << SFX_IMPORT_SHIFT) + +#define SFX_BANK(sfxId) ((((sfxId) & SFX_BANK_MASK) >> SFX_BANK_SHIFT) & 0xFF) +#define SFX_BANK_ALT(sfxId) (((sfxId) >> SFX_BANK_SHIFT) & 0xFF) +#define SFX_STATE(sfxId) (((sfxId) & SFX_STATE_FLAG) >> SFX_STATE_SHIFT) +#define SFX_RANGE(sfxId) ((((sfxId) & SFX_RANGE_MASK) >> SFX_RANGE_SHIFT) & 0xFF) +#define SFX_IMPORT(sfxId) ((((sfxId) & SFX_IMPORT_MASK) >> SFX_IMPORT_SHIFT) & 0xFF) +#define SFX_INDEX(sfxId) ((sfxId) & 0xFF) + +#define SFX_PACK(bank, index, range, importance, flags) \ + ((((bank)<<SFX_BANK_SHIFT)&SFX_BANK_MASK)|(((range)<<SFX_RANGE_SHIFT)&SFX_RANGE_MASK)|\ + (((importance)<<SFX_IMPORT_SHIFT)&SFX_IMPORT_MASK)|((index)&0xFF)|SFX_STATE_FLAG|(flags)) + +typedef enum SfxBankId { + SFX_BANK_PLAYER, + SFX_BANK_1, + SFX_BANK_2, + SFX_BANK_3, + SFX_BANK_SYSTEM, +} SfxBankId; + +#define NA_SE_NONE 0x00000000 + +#define NA_SE_TURRET_SHOT 0x09000000 // Invented name. Appears in unused turret mode. +#define NA_SE_ARWING_SHOT 0x09400000 +#define NA_SE_SMART_BOMB_SHOT 0x09001001 +#define NA_SE_ARWING_BOOST 0x09000002 +#define NA_SE_ARWING_DASH 0x09004002 // Boost variant used by Venom 1 intro and boss Titania +#define NA_SE_ARWING_BRAKE 0x09000003 +#define NA_SE_ARWING_EXPLOSION 0x0903F004 +#define NA_SE_SLIPPY_HIT 0x09000004 // From Sector X boss +#define NA_SE_ARWING_ENGIN_GRD 0x0100F005 +#define NA_SE_TANK_ENGIN 0x0100F006 +#define NA_SE_WING_OPEN 0x09000007 +#define NA_SE_BOMB_CHARGE 0x01008008 // iniial bomb flight. only plays for 1 frame. Bombs were chargeable? +#define NA_SE_BOMB_EXPLODE0 0x0901A009 // unused bomb explosion +#define NA_SE_BOMB_EXPLODE1 0x0903A00A // used bomb explosion +#define NA_SE_BOMB_EXPLODE2 0x0901A00B // unused bomb explosion +#define NA_SE_BACKUP_CLEAR 0x0940A00B // Also used for explosion on Corneria at game start +#define NA_SE_ARWING_TWIN_LASER 0x0940800C +#define NA_SE_ZERO_SHIELD 0x0900000D // Unreferenced. Sounds like an explosion +#define NA_SE_DAMAGE_S 0x0903900E +#define NA_SE_DAMAGE_L 0x0903A00F +#define NA_SE_ARWING_DOWN 0x0900C010 +#define NA_SE_ROLLING_REFLECT 0x09007011 +#define NA_SE_ROLLING_AIR 0x09000012 +#define NA_SE_WING_OPEN_END 0x09000013 +#define NA_SE_LIFT_UP_END 0x09002013 +#define NA_SE_TANK_SHOT 0x09000014 // Also used for on-foot shot +#define NA_SE_TANK_BOUND 0x09008015 // Same as NA_SE_TANK_WALL_HIT +#define NA_SE_TANK_WALL_HIT 0x09008015 // Same as NA_SE_TANK_BOUND +#define NA_SE_TANK_GO_UP 0x01008016 +#define NA_SE_MAR_ROLLING_AIR 0x09000017 +#define NA_SE_STEP_FOX 0x09000018 // Unreferenced +#define NA_SE_STEP_FALCO 0x09000019 // Unreferenced +#define NA_SE_STEP_PEPPY 0x0900001A // Unreferenced +#define NA_SE_STEP_SLIPPY 0x0900001B // Unreferenced +#define NA_SE_DEMO_RUNNING 0x0140001C +#define NA_SE_LIFT_UP 0x0100001D +#define NA_SE_ENGINE_START 0x0100001E +#define NA_SE_VOLUME_TEST 0x0100001F +#define NA_SE_ARWING_ENGIN_SPC 0x0100F020 +#define NA_SE_MAR_SHOT 0x09400021 +#define NA_SE_MARINE_ENGINE00 0x0100F022 +#define NA_SE_WING_REPAIR 0x09008023 +#define NA_SE_TANK_BURNER_HALF 0x01004024 +#define NA_SE_MAR_BOMB_SHOT 0x01000025 +#define NA_SE_MAR_LAUNCH 0x01038026 +#define NA_SE_MAR_TWIN_LASER 0x09400027 // Also used for hyper lasers +#define NA_SE_MAR_BOUND 0x09404028 +#define NA_SE_LOCK_ON_LASER 0x09007029 // Charge shot fire +#define NA_SE_ARWING_WARP_DASH 0x0940802A // During warp zone entrance cutscene +#define NA_SE_MAP_ARWING_WARP_DASH 0x0900802A +#define NA_SE_ARWING_TWIN_LASER2 0x0940802B +#define NA_SE_ARWING_WING_BROKEN 0x0900A02C +#define NA_SE_LOCK_SEARCH 0x0900302D // Charge shot charge +#define NA_SE_SPREAD_EXPLOSION 0x0903502E // Charge shot/torpedo explode +#define NA_SE_TANK_DASH 0x0900402F +#define NA_SE_MARINE_BOOST 0x09004030 +#define NA_SE_MARINE_BRAKE 0x09004031 +#define NA_SE_MAP_ARWING_DASH 0x09000032 + +#define NA_SE_FALL 0x11000000 +#define NA_SE_PASS 0x19000001 +#define NA_SE_OB_METAL_BOUND_S 0x19030002 // Unreferenced. +#define NA_SE_OB_METAL_BOUND_M 0x19030003 +#define NA_SE_EN_METAL_BOUND_M 0x19130003 +#define NA_SE_EN_MS_LAND 0x19031003 +#define NA_SE_OB_METAL_BOUND_L 0x19030004 +#define NA_SE_OB_BLOCK_APPEAR 0x19122005 +#define NA_SE_OB_BOUND_M 0x19020006 +#define NA_SE_OB_ROCK_BOUND 0x19030006 +#define NA_SE_OB_AQ_ROCK_BOUND 0x19400007 +#define NA_SE_METALBOMB_REFLECT 0x19020008 +#define NA_SE_OB_MA_SWITCH_UP 0x19033008 +#define NA_SE_METALBOMB_BOUND 0x19030009 // Unreferenced. +#define NA_SE_TANK_SLIDE 0x1100000A +#define NA_SE_SPLASH_LEVEL_S 0x1100000B +#define NA_SE_SPLASH_LEVEL_L 0x1100000C +#define NA_SE_OB_GATE_OPEN 0x1900000D +#define NA_SE_OB_SLIDE_OPEN 0x1903000D +#define NA_SE_OB_GATE_CLOSE 0x1900000E +#define NA_SE_OB_SLIDE_CLOSE 0x1903000E +#define NA_SE_OB_EXPLOSION_S 0x1903400F +#define NA_SE_GREATFOX_ENGINE 0x11030010 +#define NA_SE_EARTHQUAKE 0x11000011 +#define NA_SE_MAP_ZOOM_START 0x19003012 +#define NA_SE_MAP_ZOOM_END 0x19004013 +#define NA_SE_OB_WATER_BOUND_M 0x19000014 +#define NA_SE_OB_STEELFRAME 0x19500015 +#define NA_SE_EXPLOSION_DEMO2 0x11030016 +#define NA_SE_KA_UFO_FALLING 0x11404016 +#define NA_SE_IN_SPLASH_S 0x19800017 +#define NA_SE_OUT_SPLASH_S 0x19800018 // Unreferenced. +#define NA_SE_IN_SPLASH_L 0x19832019 +#define NA_SE_OUT_SPLASH_L 0x1983201A +#define NA_SE_OB_CRAME_MOTOR 0x1900001B +#define NA_SE_OB_BROKEN_BOX 0x1903901C +#define NA_SE_OB_MINI_BOMB 0x1903001D +#define NA_SE_OB_WT_WHEEL_ROLL 0x1903001E +#define NA_SE_OB_WALL_UP 0x1903001F +#define NA_SE_ON_SPLASH_S 0x19000020 +#define NA_SE_EN_PULL_CHAIN0 0x19003021 +#define NA_SE_EN_GATHER_PARTS 0x11033022 +#define NA_SE_EN_HEARTBEAT 0x11003023 +#define NA_SE_OB_SAND_BOUND_S 0x19000024 +#define NA_SE_KA_UFO_ENGINE 0x11037025 +#define NA_SE_MAP_ZOOM_OUT 0x19000026 +#define NA_SE_EN_BROKEN_SPARK 0x11000027 +#define NA_SE_OB_SPARK_BEAM 0x11000028 +#define NA_SE_OB_BOMB_ALARM 0x19000029 +#define NA_SE_WARP_HOLE 0x1900602A +#define NA_SE_OB_WING 0x1900302B +#define NA_SE_SUBMARINE_ATM 0x1100802C +#define NA_SE_WATER_PRESSURE 0x1900002D +#define NA_SE_BUBBLE_UP 0x1900002E +#define NA_SE_EN_WT_BROKEN 0x1902102F +#define NA_SE_EN_WT_DISAPPEAR_S 0x19003030 +#define NA_SE_EN_WT_BOUND_M 0x19402031 +#define NA_SE_OB_BOMB_ALARM_LAST 0x19000032 +#define NA_SE_EN_WT_DISAPPEAR_L 0x19000033 +#define NA_SE_EN_RNG_BEAM_CHARGE 0x11015034 +#define NA_SE_EN_RNG_BEAM_SHOT 0x19006035 +#define NA_SE_EN_SHIELD_ROLL 0x19030036 +#define NA_SE_GREATFOX_SHOT_DEMO 0x19030037 +#define NA_SE_WARP_RING_1 0x19404038 +#define NA_SE_WARP_RING_2 0x19404139 +#define NA_SE_WARP_RING_3 0x1940423A +#define NA_SE_WARP_RING_4 0x1940433B +#define NA_SE_WARP_RING_5 0x1940443C +#define NA_SE_WARP_RING_6 0x1940453D +#define NA_SE_WARP_RING_7 0x1940463E +#define NA_SE_KA_UFO_HATCH_OPEN 0x1903203F +#define NA_SE_KA_UFO_HATCH_CLOSE 0x19032040 +#define NA_SE_KA_UFO_CORE_OPEN 0x19032041 +#define NA_SE_BO_CORE_APPEAR 0x19034041 +#define NA_SE_KA_UFO_HATCH_STOP 0x19034042 +#define NA_SE_KA_UFO_LONG_CHARGE 0x11034043 +#define NA_SE_KA_UFO_LAST_CHARGE 0x19406044 +#define NA_SE_KA_UFO_BEAM 0x1140B045 +#define NA_SE_EXPLOSION_DEMO3 0x11038046 +#define NA_SE_KA_UFO_BOUND 0x19408047 +#define NA_SE_OB_BARRIER_RELEASE 0x19401048 +#define NA_SE_EN_SPACE_SNAKE 0x11032049 +#define NA_SE_OB_ROCKWALL_UP 0x1913204A +#define NA_SE_COLONY_LEVEL 0x1100004B // Unreferenced. +#define NA_SE_MAP_MOVE 0x1100004C +#define NA_SE_MAP_ROLL 0x1100204C +#define NA_SE_MAP_LINE_DRAW 0x1900404D +#define NA_SE_SHIP_ENGINE_SPC 0x1100004E // Unreferenced. +#define NA_SE_OB_BROKEN_SPARK_L 0x1900404F +#define NA_SE_EN_SHIELD_ROLL_LEVEL 0x11002050 +#define NA_SE_EN_SHIELD_ROLL_STOP 0x19004051 +#define NA_SE_OB_MAGMA_WAVE 0x11002052 +#define NA_SE_EN_OUT_PROMINENCE 0x19035053 +#define NA_SE_EN_OUT_MAGMA 0x19036053 +#define NA_SE_EN_IN_PROMINENCE 0x19035054 +#define NA_SE_EN_IN_MAGMA 0x19036054 +#define NA_SE_OB_SMOKE 0x11000055 +#define NA_SE_OB_ROCK_CRASH 0x19032056 +#define NA_SE_OB_ROCK_EYE_OPEN 0x19030057 +#define NA_SE_OB_SHIP_FALLDOWN 0x19033058 +#define NA_SE_EN_VEBOSS_BROKEN 0x19030059 +#define NA_SE_OB_ARM_SWING 0x1903005A +#define NA_SE_OB_POLE_MOVE 0x1903205B +#define NA_SE_OB_POLE_BOUND 0x1903205C +#define NA_SE_OB_HEAVY_SWITCH 0x1940405D +#define NA_SE_OB_CONNECT_CUT 0x1940205E +#define NA_SE_OB_MA_SWITCH_ON 0x1903205F +#define NA_SE_OB_MA_SWITCH_GRN 0x19020060 +#define NA_SE_OB_MA_SWITCH_RED 0x19020061 +#define NA_SE_OB_POST_UP 0x19001062 +#define NA_SE_OB_SIDE_GATE_CLOSE 0x11001063 +#define NA_SE_OB_SPEAR_STICK 0x19032064 +#define NA_SE_RAILWAY_BOUND 0x19000065 +#define NA_SE_EN_MABOSS_HATCH 0x19034066 +#define NA_SE_EN_MABOSS_CHARGE0 0x19022067 +#define NA_SE_EN_MABOSS_SHOT0 0x19023068 +#define NA_SE_EN_MABOSS_PLATECHARGE 0x19022069 +#define NA_SE_VO_ANDROSS_PUNCH 0x1940306A +#define NA_SE_VO_ANDROSS_SLAP 0x1940306B +#define NA_SE_VO_ANDROSS_WHAND 0x1940306C +#define NA_SE_VO_ANDROSS_CHOKE 0x1940306D +#define NA_SE_VO_ANDROSS_LAUGH 0x1940306E +#define NA_SE_VO_ANDROSS_GROAN 0x1940306F +#define NA_SE_VO_ANDROSS_DEATH 0x19403070 +#define NA_SE_OB_ROUTE_EXPLOSION0 0x11403071 +#define NA_SE_OB_ROUTEGATE_OPEN_Q 0x19038072 +#define NA_SE_EN_ANDROSS_ROBOT 0x11030073 +#define NA_SE_EN_ANDROSS_BRAIN 0x11034074 +#define NA_SE_EN_ANDROSS_EYE 0x11032075 +#define NA_SE_OB_ROUTE_EXPLOSION1 0x11403076 +#define NA_SE_OB_FISH_AWAY 0x19400077 +#define NA_SE_OB_AQ_PILLAR_BROKE 0x19021078 +#define NA_SE_WARP_OUT 0x11407079 +#define NA_SE_ARWING_HATCH 0x1950107A +#define NA_SE_OB_POINT_SWITCH 0x1940807B +#define NA_SE_VO_ANDROSS_EXCITE 0x1940307C +#define NA_SE_OB_PILLAR_ROLL 0x1903407D +#define NA_SE_OB_ROUTEGATE_CLOSE_Q 0x1903807E +#define NA_SE_OB_ROUTEGATE_OPEN_S 0x1903807F +#define NA_SE_OB_ROUTEGATE_CLOSE_S 0x19038080 // events that play this are unused +#define NA_SE_OB_LIFT 0x11032081 +#define NA_SE_OB_PLATE_ROLL 0x19031082 +#define NA_SE_STARFOX_SEAL 0x19031083 +#define NA_SE_EXPLOSION_DEMO6 0x11020084 + +#define NA_SE_EXPLOSION_S 0x29000000 +#define NA_SE_BIG_EXPLOSION 0x29000001 // Unreferenced. +#define NA_SE_EN_SHOT_0 0x29002002 +#define NA_SE_EN_DAMAGE_M 0x29024003 +#define NA_SE_OB_DAMAGE_M 0x29034003 +#define NA_SE_EN_BREATH 0x31000004 // Unreferenced. +#define NA_SE_EN_WOLF_ENGINE 0x31004005 +#define NA_SE_EN_WOLF_ENGINE2 0x31004006 +#define NA_SE_EN_REFLECT 0x29121007 +#define NA_SE_EN_EXPLOSION_S 0x2903A008 +#define NA_SE_EN_EXPLOSION_M 0x2903B009 +#define NA_SE_EN_EXPLOSION_L 0x2940C00A +#define NA_SE_EN_CRASH_DOWN 0x2903700B +#define NA_SE_ARWING_ENGINE_FG 0x3100000C +#define NA_SE_ARWING_SHOT_F 0x2900000D +#define NA_SE_EN_DAMAGE_S 0x2903300E +#define NA_SE_EN_DAMAGE_L 0x2900300F +#define NA_SE_EN_KNOCK_DOWN 0x2943500F +#define NA_SE_EN_S_FIGHTER_ENGINE 0x31000010 // Unreferenced. +#define NA_SE_EN_ENGINE_01 0x31000011 +#define NA_SE_EN_MISSILE_ENGINE 0x31000012 +#define NA_SE_EN_LONG_BEAM 0x31000013 +#define NA_SE_EN_ALIEN_FLY 0x31000014 +#define NA_SE_EN_SPACE_SHIP 0x31000015 +#define NA_SE_EN_TANK_RB_ENGINE 0x31000016 +#define NA_SE_EN_TANK_ENGINE 0x31000017 +#define NA_SE_A_CARRIER_ENGINE 0x31038018 +#define NA_SE_EN_HEAVY_WALK 0x29022019 +#define NA_SE_EN_HATCH 0x2940201A +#define NA_SE_EN_MISSILE_SHOT 0x2903101B +#define NA_SE_EN_BARREL_SHOT 0x2903201B +#define NA_SE_EN_THROW 0x2902401C +#define NA_SE_EN_MS_PUNCH 0x2903401C +#define NA_SE_EN_FALLING_DOWN 0x2900201D +#define NA_SE_EN_LASER_BEAM 0x3100001E +#define NA_SE_EN_HEAVY_WALK1 0x2902201F +#define NA_SE_EN_HEAVY_JUMP 0x29023020 +#define NA_SE_EN_HEAVY_BOUND 0x29034021 +#define NA_SE_OB_HEAVY_BOUND 0x2903A021 +#define NA_SE_EN_COMBINE 0x29433022 +#define NA_SE_EN_MOTOR_ROLL 0x29400023 +#define NA_SE_EN_MOTOR_STOP 0x29034024 +#define NA_SE_EN_UNIT_COMBINE 0x29402024 +#define NA_SE_EN_ENERGY_BEAM 0x31000025 +#define NA_SE_EN_ZOBOSS_BEAM 0x31034025 +#define NA_SE_EN_BOSS_EXPLOSION 0x2902F026 +#define NA_SE_EN_STAR_EXPLOSION 0x2940F026 +#define NA_SE_EN_PARTS_BROKEN 0x2940C027 +#define NA_SE_EN_THROW_S 0x29000028 +#define NA_SE_EN_HEAVY_WALK2 0x29406029 +#define NA_SE_EN_APPEAR_SAND 0x2900502A +#define NA_SE_EN_TIBOSS_AT_CRY 0x2940702B +#define NA_SE_EN_TIBOSS_DM_CRY 0x2940802C +#define NA_SE_EN_TIBOSS_DW_CRY 0x2940902D +#define NA_SE_EXPLOSION_DEMO 0x3140402E +#define NA_SE_EXPLOSION_DEMO5 0x3143402E +#define NA_SE_EN_BOSS_BEAM0 0x3143102F +#define NA_SE_EN_BOSS_CHARGE 0x39435830 +#define NA_SE_OB_SAND_BOUND_M 0x29003031 +#define NA_SE_EN_BOSS_ATTACK 0x29403031 +#define NA_SE_OB_SPEAR_PILLAR 0x29503032 +#define NA_SE_EN_WT_EXPLOSION_S 0x29038033 +#define NA_SE_EN_WT_EXPLOSION_M 0x29000034 // Unreferenced. +#define NA_SE_EN_WT_EXPLOSION_L 0x29000035 // Unreferenced. +#define NA_SE_EN_BIRD_DOWN 0x29018036 +#define NA_SE_EN_BIRD_DAMAGE 0x29033037 +#define NA_SE_EN_SPIDER_MOVE 0x21000038 // Unreferenced. +#define NA_SE_EN_SHIP_ENGINE_S 0x31012039 +#define NA_SE_EN_SHIP_ENGINE_L 0x3100203A +#define NA_SE_EN_S_BALL_SHOT 0x2903203B +#define NA_SE_EN_SINK_PARTS 0x2940983C +#define NA_SE_EN_M_BALL_SHOT 0x2900403D +#define NA_SE_EN_PULL_CHAIN1 0x3100503E +#define NA_SE_EN_HEART_OPEN 0x2900803F +#define NA_SE_ARWING_ENGINE_FS 0x31000040 +#define NA_SE_EN_SNAKE_DAMAGE 0x29034041 +#define NA_SE_EN_KANI_DOWN 0x29000042 // Unreferenced. +#define NA_SE_EN_KANI_MOTOR 0x31030043 +#define NA_SE_EN_DISAPPEAR_SAND 0x29000044 // Unreferenced. +#define NA_SE_EN_SANADA_DAMAGE 0x29034045 +#define NA_SE_EN_SANADA_DOWN 0x2902A046 +#define NA_SE_EN_SANADA_SWIM 0x31000047 +#define NA_SE_EN_SANADA_APPEAR 0x29022048 +#define NA_SE_EN_SEA_EXPLOSION_S 0x29018049 +#define NA_SE_EN_SEA_EXPLOSION_L 0x2900004A // Unreferenced. +#define NA_SE_EN_P_BALL_SHOT 0x2903404B +#define NA_SE_EN_WT_DAMAGE_S 0x2903604C +#define NA_SE_EN_EYEFILM_DAMAGE 0x2940604C +#define NA_SE_EN_SHELL_BEAT 0x3140904D +#define NA_SE_EN_SHELL_DAMAGE 0x2940804E +#define NA_SE_EN_SHELL_DOWN 0x2940A04F +#define NA_SE_EN_KAIBASHIRA_DAMAGE 0x29036050 +#define NA_SE_EN_EYEFILM_REVIVAL 0x29409051 +#define NA_SE_EN_P_GUN_APPEAR 0x29400052 +#define NA_SE_EN_P_GUN_DISAPPEAR 0x29000053 // Unreferenced. +#define NA_SE_EN_SHELL_CLOSE 0x29408054 +#define NA_SE_EN_SHELL_FILLOPEN 0x29408055 +#define NA_SE_EN_S_BEAM_CHARGE 0x31016056 +#define NA_SE_EN_S_BEAM_SHOT 0x31037057 +#define NA_SE_EN_S_BEAM_END 0x29038058 +#define NA_SE_GREATFOX_BURNER 0x31024059 +#define NA_SE_EN_BURNER_L 0x3102505A +#define NA_SE_EN_GRN_BEAM_CHARGE 0x3103605B +#define NA_SE_EN_GRN_BEAM_SHOT 0x3102705C +#define NA_SE_EN_MEBOSS_SHIELD 0x3102405D +#define NA_SE_EN_CATCH 0x2902405E +#define NA_SE_EN_PASS 0x2903305F +#define NA_SE_EN_MS_EXPLOSION_S 0x2903A060 +#define NA_SE_EN_SZMIS_ENGINE 0x31032061 +#define NA_SE_EN_PUNCH_ENGINE 0x3103A061 +#define NA_SE_EN_BARRIER_REFLECT 0x29001062 +#define NA_SE_EN_ANDROSS_EXPLOSION 0x31009063 +#define NA_SE_EN_SPARK_DAMAGE_M 0x29033064 +#define NA_SE_EN_VEBOSS_DAMAGE 0x31034064 +#define NA_SE_EN_ARM_SWING 0x29034065 +#define NA_SE_EN_COVER_OPEN 0x31404066 +#define NA_SE_EN_COVER_CLOSE 0x31404067 +#define NA_SE_EN_COVER_MOVE_STOP 0x39404068 +#define NA_SE_EN_ENERGY_BALL 0x31008069 +#define NA_SE_EN_UNIT_GATHERING 0x2900306A +#define NA_SE_EN_MS_SHOT_S 0x2900306B +#define NA_SE_EN_MS_DASH 0x2902306C +#define NA_SE_EN_MS_KICK 0x2902306D +#define NA_SE_EN_MS_SHOT_L 0x2901306E +#define NA_SE_EN_MS_SHIELD_BROKEN 0x2903A06F +#define NA_SE_EN_MS_EXPLOSION_L 0x29000070 // Unreferenced. +#define NA_SE_OB_SOROCK_APPEAR 0x29000071 +#define NA_SE_OB_SOROCK_DISAPPEAR 0x29000072 +#define NA_SE_EN_SOBOSS_CRY 0x29432073 +#define NA_SE_EN_SOBOSS_DAMAGE 0x29433074 +#define NA_SE_EN_SOBOSS_BROKEN 0x29434075 +#define NA_SE_EN_SOBOSS_DOWN 0x39439076 +#define NA_SE_EN_SOBOSS_SWING 0x29432077 +#define NA_SE_EN_SOBOSS_BREATH 0x31033078 +#define NA_SE_EN_SOBOSS_ROLL 0x39033079 +#define NA_SE_EN_ANGLER_DAMAGE 0x2900007A // Unreferenced. +#define NA_SE_EN_ANGLER_DOWN 0x2900007B // Unreferenced. +#define NA_SE_BANK2_UNK_7C 0x2100007C // Unreferenced. Sounds like many small explosions +#define NA_SE_ROCK_REFLECT 0x2902107D +#define NA_SE_OB_MAGMA_BUBBLE 0x3140807E +#define NA_SE_BANK2_UNK_7F 0x2900007F // Unreferenced. Sounds like an impact +#define NA_SE_OB_VEBOSS_WALK 0x29032080 +#define NA_SE_OB_VEBOSS_JUMP 0x29033081 +#define NA_SE_OB_VEBOSS_LAND 0x29034082 +#define NA_SE_OB_VEBOSS_ATTACK 0x31030083 +#define NA_SE_OB_VEBOSS_BOUND 0x29405084 +#define NA_SE_EN_FREIGHT_TRAIN 0x31078085 +#define NA_SE_EN_MABOSS_REFLECT 0x29022086 +#define NA_SE_EN_ANDROSS_BREATH 0x31022087 +#define NA_SE_EN_ANDROSS_BITE0 0x29022088 +#define NA_SE_EN_ANDROSS_BITE1 0x29022089 +#define NA_SE_EN_ANDROSS_VOMIT 0x3140208A +#define NA_SE_EN_ANDROSS_SPARK 0x3103108B +#define NA_SE_EN_WT_THROW 0x2900308C +#define NA_SE_EN_WT_SPARK_CHARGE 0x2900208D +#define NA_SE_EN_WT_SPARK_BEAM 0x3100208E +#define NA_SE_EN_AQ_ZAKO_DAMAGE 0x2903408F +#define NA_SE_EN_AQ_ZAKO_DOWN 0x29038090 +#define NA_SE_EN_WARP_IN 0x39408091 +#define NA_SE_EN_WARP_OUT 0x39408092 +#define NA_SE_EN_A6BOSS_CHARGE 0x39033093 +#define NA_SE_EN_A6BOSS_BEAM 0x31405094 +#define NA_SE_EN_TRAIN_BREAK 0x31408095 +#define NA_SE_EN_ANDROSS_WARP 0x2940B096 +#define NA_SE_EN_ANDROSS_CATCH 0x31408097 +#define NA_SE_EN_KANI_STOP 0x29030098 +#define NA_SE_EN_MABOSS_RAGE 0x29036099 +#define NA_SE_EN_DOWN_IMPACT 0x2940D09A +#define NA_SE_EN_MARBLE_BEAM 0x3103109B + +#define NA_SE_PAUSE_ON 0x4900F000 +#define NA_SE_PAUSE_OFF 0x4900F001 // Unreferenced. Seems to be identical to NA_SE_PAUSE_ON +#define NA_SE_CURSOR 0x49000002 +#define NA_SE_DECIDE 0x49000003 +#define NA_SE_TWIN_LASER_GET 0x49002004 +#define NA_SE_BOMB_GET 0x49002005 // Collect bomb. Seems to be identical to NA_SE_BOMB_GUAGE_UP +#define NA_SE_BOMB_GAUGE_UP 0x49002006 // Collect bomb. Seems to be identical to NA_SE_BOMB_GET +#define NA_SE_COUNT_UP 0x49004007 +#define NA_SE_READY 0x49000008 +#define NA_SE_GO 0x49000009 +#define NA_SE_ERROR 0x4900100A +#define NA_SE_DIR_WARNING 0x4100000B // Unreferenced. +#define NA_SE_ITEM_APPEAR 0x4900000C +#define NA_SE_SHIELD_RING_M 0x4900200D +#define NA_SE_SHIELD_RING 0x4900200E +#define NA_SE_CHECKPOINT 0x4900400F +#define NA_SE_SHIELD_WARNING0 0x49008010 // Low health hit alarm +#define NA_SE_SHIELD_WARNING1 0x49008011 // Critical health hit alarm +#define NA_SE_TEAM_SHIELD_UP 0x41007012 +#define NA_SE_GOLD_RING 0x49003013 +#define NA_SE_DEMO_SIREN 0x49000014 +#define NA_SE_SHIELD_UPGRADE 0x49008015 +#define NA_SE_GOOD_LUCK 0x49002016 +#define NA_SE_MESSAGE_MOVE 0x49000017 // Used for text in training mode +#define NA_SE_COMMU_REQUEST 0x49002018 // C> call alert +#define NA_SE_MAP_WINDOW_OPEN 0x49000019 // Also reticles on +#define NA_SE_MAP_WINDOW_CLOSE 0x4900101A // Also reticles off +#define NA_SE_MAR_LOCKON 0x4900001B +#define NA_SE_MISSILE_ALARM 0x4900001C +#define NA_SE_CANCEL 0x4900101D +#define NA_SE_COMPUTER_NOISE 0x4100001E // Used in mission briefing +#define NA_SE_MAP_MOVE_STOP 0x4900001F +#define NA_SE_ARWING_DECIDE 0x49000020 // Used in main menu +#define NA_SE_ARWING_CANCEL 0x49000021 // Used in main menu +#define NA_SE_ARWING_CURSOR 0x49000022 // Used in main menu +#define NA_SE_OVERHEAT_ALARM 0x4100C023 +#define NA_SE_ONE_UP 0x4900C024 +#define NA_SE_RING_PASS 0x49008025 // Also used for Corneria mech boss secret 1UP +#define NA_SE_SHIELD_BUZZER 0x49001026 +#define NA_SE_LOCK_ON 0x49008027 +#define NA_SE_BOSS_GAUGE_OPEN 0x4900C028 +#define NA_SE_BANK4_UNK_1 0x40000029 // Unreferenced. Sounds like an item collect jingle +#define NA_SE_COUNTDOWN 0x4900C02A +#define NA_SE_VIEW_SITCHW_ON 0x4000002B // Unreferenced. Related to gFovYMode? +#define NA_SE_VIEW_MOVE_IN 0x4900002C +#define NA_SE_VIEW_MOVE_OUT 0x4900002D +#define NA_SE_SEARCHLIGHT_MISS 0x4900402E +#define NA_SE_RING_MISS 0x4900402F +#define NA_SE_GET_EMBLEM 0x49008030 +#define NA_SE_MISSION_ACCOMPLISHED 0x49008031 +#define NA_SE_VO_PEPPER_CONSENT 0x49000032 // This is ONE steep bill, but it's worth it. +#define NA_SE_VO_PEPPER_SURPRISE 0x49000033 // WHAT?! +#define NA_SE_MISSION_COMPLETE 0x49008034 +#define NA_SE_BANL4_UNK_2 0x40000035 // Unreferenced. Hard to make out what it is +#define NA_SE_TIME_OVER 0x4900D036 + +#endif + + diff --git a/include/structs.h b/include/structs.h deleted file mode 100644 index 0b0ee4f5..00000000 --- a/include/structs.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef STRUCTS_H -#define STRUCTS_H - -#include <libultraship.h> -#include "sf64math.h" - -typedef struct { - /* 0x00 */ u8 unk_00; - /* 0x02 */ u16 unk_02; - /* 0x04 */ Vec3f pos; - /* 0x10 */ f32 unk_10; - /* 0x14 */ char pad14[0x14]; -} RadarMark; // size = 0x28 - -typedef struct { - /* 0x00 */ u8 mode; - /* 0x02 */ u16 timer; - /* 0x04 */ Vec3f unk_04; - /* 0x10 */ Vec3f unk_10; - /* 0x1C */ f32 unk_1C; - /* 0x20 */ f32 unk_20; - /* 0x24 */ f32 unk_24; - /* 0x28 */ f32 unk_28; - /* 0x2C */ u8 unk_2C; // possibly a color struct - /* 0x2D */ u8 unk_2D; - /* 0x2E */ u8 unk_2E; - /* 0x2F */ u8 unk_2F; -} TexturedLine; // size = 0x30 - -typedef struct { - /* 0x00 */ u8 hits; - /* 0x04 */ Vec3f pos; - /* 0x10 */ f32 unk_10; - /* 0x14 */ char pad14[0x4]; - /* 0x18 */ u16 timer; -} BonusText; // size = 0x1C - -#define BONUS_TEXT_FREE 0 -#define BONUS_TEXT_GREAT 100 -#define BONUS_TEXT_1UP 101 - -typedef struct { - /* 0x00 */ Vec3f eye; - /* 0x0C */ Vec3f at; -} CameraPoint; // size = 0x18 - -typedef struct { - /* 0x00 */ f32 unk_00; - /* 0x04 */ f32 unk_04; - /* 0x08 */ f32 unk_08; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ s16 unk_10; -} UnkStruct_D_i5_801B8E50; //size = 0x14 - -typedef struct { - /* 0x00 */ f32 unk_00; - /* 0x04 */ s16 unk_04; - /* 0x08 */ f32 unk_08; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ s16 unk_10; -} UnkStruct_D_i5_801BA1EC; //size = 0x14 - -typedef enum OptionState { - OPTION_WAIT, - OPTION_SETUP, - OPTION_UPDATE -} OptionState; - -typedef enum OptionSoundMode { - OPTIONSOUND_STEREO, - OPTIONSOUND_MONO, - OPTIONSOUND_HEADSET, - OPTIONSOUND_MAX, -} OptionSoundMode; - -#endif diff --git a/include/sys.h b/include/sys.h index 5b0f7109..55bbaffc 100644 --- a/include/sys.h +++ b/include/sys.h @@ -25,39 +25,44 @@ typedef s32 (*CompareFunc)(void*, void*); s32 Lib_vsPrintf(char* dst, const char* fmt, va_list args); void Lib_vTable(s32 index, void (**table)(s32, s32), s32 arg0, s32 arg1); void Lib_QuickSort(u8* first, u32 length, u32 size, CompareFunc cFunc); -void Lib_Perspective(Gfx** dList); -void Lib_Ortho(Gfx** dList); -void Lib_DmaRead(void* src, void* dst, ptrdiff_t size); +void Lib_InitPerspective(Gfx** dList); +void Lib_InitOrtho(Gfx** dList); +void Lib_DmaRead(void* src, void* dst, s32 size); void Lib_FillScreen(u8 setFill); void Memory_FreeAll(void); void* Memory_Allocate(s32); -OSPiHandle * func_8001EE60(void); +OSPiHandle * osDriveRomInit(void); void RdRam_CheckIPL3(void); void Mio0_Decompress(void* header, u8* dst); void Game_Initialize(void); void Game_Update(void); -extern s32 D_game_800D2860[]; -extern s32 D_game_800D2870; +extern bool gShowReticles[]; +extern bool D_game_800D2870; -extern f32 D_game_80161A10; -extern f32 D_game_80161A14; +extern f32 gNextVsViewScale; +extern f32 gVsViewScale; extern s32 gPlayerInactive[4]; -extern s32 D_game_80161A28; -extern u8 D_game_80161A2C; -extern u16 D_game_80161A2E; +extern s32 gVsMenuSelection; +extern u8 gShowHud; +extern u16 gNextLevelPhase; extern u16 gNextLevel; -extern GameState gNextGameState; -extern GameState gGameState; -extern u16 D_game_80161A34; +extern u16 gNextGameState; +extern u16 gLastGameState; extern u16 gBgColor; extern u8 gBlurAlpha; -extern u8 D_game_80161A39; -extern f32 D_game_80161A3C; -extern f32 D_game_80161A40; -extern f32 D_game_80161A44; +extern u8 gGameStandby; +extern f32 gFovY; +extern f32 gProjectNear; +extern f32 gProjectFar; + +typedef enum OptionState { + OPTION_WAIT, + OPTION_SETUP, + OPTION_UPDATE +} OptionState; #endif diff --git a/include/variables.h b/include/variables.h index e583edf1..3248eaeb 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2,53 +2,52 @@ #define VARIABLES_H #include "sys.h" -#include "structs.h" #include "sf64level.h" #include "sf64object.h" #include "sf64player.h" // fox_360 -extern s32 D_360_800C9B4C; +extern s32 gAllRangeSpawnEvent; // fox_bg -extern u16 D_bg_800C9C3C[16]; +extern u16 gStarColors[16]; // fox_boss -extern s32 D_boss_800C9E90[]; +extern s32 gBossBgms[]; // fox_tank extern Vec3f D_tank_800C9F2C; // fox_display extern s32 D_display_800CA220; -extern f32 D_display_800CA230; -extern Actor* D_display_800CA234; -extern s32 D_display_Timer_800CA238; +extern f32 gCamDistortion; +extern Actor* gTeamHelpActor; +extern s32 gTeamHelpTimer; // fox_edata -extern f32 D_edata_800CBE70[]; -extern f32 D_edata_800CBE8C[]; -extern f32 D_edata_800CBEA8[]; -extern f32 D_edata_800CBEC4[]; -extern f32 D_edata_800CBEE0[]; -extern f32 D_edata_800CBEFC[]; -extern f32 D_edata_800CBF18[]; -extern f32 D_edata_800CBF34[]; -extern f32 D_edata_800CBF38[]; -extern f32 D_edata_800CBF54[]; -extern f32 D_edata_800CBF70[]; -extern f32 D_edata_800CBF8C[]; -extern f32 D_edata_800CBFA8[]; -extern f32 D_edata_800CBFC8[]; -extern f32 D_edata_800CBFE4[]; -extern f32 D_edata_800CC000[]; -extern f32 D_edata_800CC01C[]; -extern f32 D_edata_800CC038[]; -extern f32 D_edata_800CC054[]; -extern f32 D_edata_800CC070[]; -extern f32 D_edata_800CC0D4[]; -extern f32 D_edata_800CC0F0[]; -extern ObjectInfo D_edata_800CC124[]; +extern f32 gZoEnergyBallHitbox[]; +extern f32 gCubeHitbox100[]; +extern f32 gCubeHitbox150[]; +extern f32 gCubeHitbox200[]; +extern f32 gCubeHitbox300[]; +extern f32 gCubeHitbox400[]; +extern f32 gItemRingCheckHitbox[]; +extern f32 gNoHitbox[]; +extern f32 gItemCheckpointHitbox[]; +extern f32 gItemSupplyRingHitbox[]; +extern f32 gMeteoWarpHitbox[]; +extern f32 gItemPathChangeHitbox[]; +extern f32 gItemLasersHitbox[]; +extern f32 gItemBombHitbox[]; +extern f32 gActorMissileSeekHitbox[]; +extern f32 gMeMoraHitbox[]; +extern f32 gTeamHitbox[]; +extern f32 gActorAllRangeHItbox[]; +extern f32 aWzMeteor1Hitbox[]; +extern f32 aWzGateHitbox[]; +extern f32 aWzPillar1Hitbox[]; +extern f32 aWzPillar2Hitbox[]; +extern ObjectInfo gObjectInfo[]; extern f32* D_edata_800CF964[]; // fox_edisplay @@ -74,49 +73,49 @@ extern f32 D_edisplay_800CFCCC[]; extern Gfx D_edisplay_800CFD80[]; // fox_enmy -extern ObjectInit* D_enmy_800CFDA0[]; -extern u32 D_enmy_800CFF54[9]; +extern ObjectInit* gLevelObjectInits[]; +extern u32 gWarpRingSfx[9]; // fox_enmy2 -extern s32 D_enmy2_800CFF80[4]; -extern s32 D_enmy2_800CFF90; +extern s32 gTeamEventActorIndex[4]; +extern s32 gCallVoiceParam; // fox_hud extern s16 D_hud_800D1970; -// fox_A4290 +// fox_col2 extern CollisionHeader D_800D2B38[]; extern CollisionHeader2 D_800D2CA0[]; // fox_play -extern u8 D_play_800D2F68; -extern u8 D_play_800D3180[30]; +extern u8 gVenomHardClear; +extern u8 gLeveLClearStatus[30]; // fox_radio -extern s32 gCurrentMsgPri; +extern s32 gRadioMsgPri; // fox_360 -extern s32 D_360_8015F900; -extern s32 D_360_8015F904; -extern s16 D_360_8015F908; -extern s32 D_360_8015F90C; -extern s32 D_360_8015F910; -extern f32 D_360_8015F914; -extern f32 D_360_8015F918; -extern f32 D_360_8015F91C; -extern u8 D_360_8015F920; -extern u8 D_360_8015F921; -extern s32 D_360_8015F924; -extern s32 D_360_8015F928; -extern s32 D_360_8015F930[3]; -extern s32 D_360_8015F93C; -extern s32 D_360_8015F940; -extern f32 D_360_8015F944; +extern s32 gAllRangeSupplyTimer; +extern s32 sStarWolfKillTimer; +extern s16 gStarWolfMsgTimer; +extern s32 gAllRangeWingRepairTimer; +extern s32 gAllRangeSuppliesSent; +extern f32 gSzMissileR; +extern f32 gSzMissileG; +extern f32 gSzMissileB; +extern u8 gKaKilledAlly; +extern u8 gKaAllyKillCount; +extern s32 gAllRangeCheckpoint; +extern s32 gAllRangeEventTimer; +extern s32 gAllRangeCountdown[3]; +extern bool gShowAllRangeCountdown; +extern s32 gAllRangeFrameCount; +extern f32 gAllRangeCountdownScale; // fox_bg -extern f32 D_bg_800C9C30; -extern u16 D_bg_800C9C34; -extern f32 D_bg_8015F960; +extern f32 gAndrossUnkAlpha; +extern u16 gBolseDynamicGround; +extern f32 gWarpZoneBgAlpha; extern u8 D_bg_8015F964; extern f32 D_bg_8015F968; extern f32 D_bg_8015F96C; @@ -133,11 +132,11 @@ extern s32 gBossFrameCount; // fox_display extern Vec3f D_display_801613B0[]; // static, here for reordering extern Vec3f D_display_801613E0[]; // static, here for reordering -extern s16 D_display_80161410; +extern s16 gReflectY; extern Matrix D_display_80161418[]; // static, here for reordering extern Vec3f D_display_80161518[]; // static, here for reordering extern Vec3f D_display_80161548[]; // static, here for reordering -extern Vec3f D_display_80161578[]; +extern Vec3f gLockOnTargetViewPos[]; extern f32 D_display_801615A8[]; extern f32 D_display_801615B8[]; @@ -146,11 +145,11 @@ extern Vec3f D_edisplay_801615D0; // fox_enmy extern s32 D_enmy_Timer_80161670[4]; -extern s32 D_enmy_80161680; -extern u8 D_enmy_80161684; +extern s32 gLastPathChange; +extern u8 gMissedZoSearchlight; // fox_enmy2 -extern s32 D_enmy2_80161690; +extern s32 gCallTimer; // fox_hud extern s32 D_hud_80161704; @@ -163,39 +162,42 @@ extern s32 gDisplayedHitCount; extern s32 D_hud_80161730; extern s32 gShowBossHealth; // 0x80161734 +// fox_std_lib +extern char D_801619A0[]; + // fox_play -extern u8 D_play_80161A50; -extern f32 D_play_80161A54; +extern u8 gSavedZoSearchlightStatus; +extern f32 gArwingSpeed; extern s32 D_play_80161A58; extern s32 D_play_80161A5C; extern u16 gScreenFlashTimer; extern u16 gDropHitCountItem; //fox_radio -extern u16** D_radio_80178720; -extern s32 D_radio_80178724; -extern s32 D_radio_80178728; -extern s32 D_radio_8017872C; -extern f32 D_radio_80178730; -extern f32 D_radio_80178734; -extern f32 D_radio_80178738; -extern f32 D_radio_8017873C; -extern f32 D_radio_80178740; +extern u16** gRadioMsgList; +extern s32 gRadioMsgListIndex; +extern s32 gRadioPrintPosX; +extern s32 gRadioPrintPosY; +extern f32 gRadioTextBoxPosX; +extern f32 gRadioTextBoxPosY; +extern f32 gRadioTextBoxScaleX; +extern f32 gRadioPortraitPosX; +extern f32 gRadioPortraitPosY; // fox_versus -extern s32 D_versus_80178750; -extern s32 D_versus_80178754; +extern bool gVsMatchOver; +extern s32 gVsMatchState; extern s32 D_versus_80178758; extern s32 sUnlockLandmaster; // sUnlockLandmaster extern s32 sUnlockOnFoot; // sUnlockOnFoot -extern s32 D_versus_80178768[]; +extern s32 gVsCountdown[]; // gfx_data -extern u16 D_Tex_800DACB8[][32]; +extern u16 D_Tex_800DACB8[]; extern u16 D_Tex_800D99F8[]; extern u16 gTextCharPalettes[]; extern Gfx gRcpInitDL[]; -extern Gfx D_Gfx_800DAC20[]; +extern Gfx aCoHighwayShadowDL[]; extern Gfx D_Gfx_800D9688[]; extern u8 D_Tex_800DB4B8[]; extern Gfx D_Gfx_800D94D0[]; |
