summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-04-08 18:05:46 -0600
committerSonic Dreamcaster <alejandro.asenjo88@gmail.com>2024-09-17 19:14:09 -0300
commit3892bcefa20e4262a676466050d5810b04454faa (patch)
tree1fb42f12f53d7cdb88afea708c3b1a36ae06da36 /include
parented2a45796b5f0af0c27cc0c304b035cda4bb0099 (diff)
parent0a8c61789e5a04811a6efcd5c6af91637c5d8e57 (diff)
Merge branch 'master' into otr
Diffstat (limited to 'include')
-rw-r--r--include/alignment.h2
-rw-r--r--include/audioseq_cmd.h3
-rw-r--r--include/audiothread_cmd.h6
-rw-r--r--include/bgm.h171
-rw-r--r--include/fox_co.h178
-rw-r--r--include/fox_hud.h58
-rw-r--r--include/fox_map.h32
-rw-r--r--include/fox_option.h384
-rw-r--r--include/functions.h721
-rw-r--r--include/gfx.h52
-rw-r--r--include/global.h24
-rw-r--r--include/i1.h113
-rw-r--r--include/i2.h67
-rw-r--r--include/i3.h254
-rw-r--r--include/i4.h75
-rw-r--r--include/i5.h195
-rw-r--r--include/i6.h85
-rw-r--r--include/macros.h8
-rw-r--r--include/mods.h78
-rw-r--r--include/prevent_bss_reordering3.h28
-rw-r--r--include/prevent_context_reordering.h124
-rw-r--r--include/sf64audio_external.h192
-rw-r--r--include/sf64audio_provisional.h248
-rw-r--r--include/sf64context.h386
-rw-r--r--include/sf64dma.h74
-rw-r--r--include/sf64event.h484
-rw-r--r--include/sf64level.h524
-rw-r--r--include/sf64math.h76
-rw-r--r--include/sf64mesg.h1031
-rw-r--r--include/sf64object.h1523
-rw-r--r--include/sf64player.h366
-rw-r--r--include/sf64save.h45
-rw-r--r--include/sf64thread.h79
-rw-r--r--include/sfx.h511
-rw-r--r--include/structs.h76
-rw-r--r--include/sys.h41
-rw-r--r--include/variables.h158
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[];