diff --git a/assets/xml/interface/parameter_static.xml b/assets/xml/interface/parameter_static.xml
index dd35b081e..33ab40de4 100644
--- a/assets/xml/interface/parameter_static.xml
+++ b/assets/xml/interface/parameter_static.xml
@@ -22,14 +22,14 @@
-
+
-
+
@@ -44,7 +44,7 @@
-
+
@@ -62,7 +62,7 @@
-
+
@@ -74,7 +74,7 @@
-
+
diff --git a/include/functions.h b/include/functions.h
index ecbb95387..e1d4bb45b 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -1632,7 +1632,7 @@ void func_800FE658(f32 arg0);
// void func_800FE788(void);
// void func_800FE798(void);
// void func_800FE7A8(void);
-// void func_800FE9B4(void);
+s32 func_800FE9B4(GlobalContext* globalCtx);
// void func_800FEA50(void);
void func_800FEAB0(void);
// void func_800FEAC0(void);
@@ -1970,7 +1970,7 @@ void Inventory_DeleteItem(s16 arg0, s16 arg1);
// void func_80114CA0(void);
s32 Inventory_HasEmptyBottle(void);
s32 Inventory_HasItemInBottle(u8 itemId);
-// void Inventory_UpdateBottleItem(void);
+// void func_80114FD0(void);
// void func_80115130(void);
// void Inventory_UpdateItem(void);
// void func_801153C8(void);
@@ -2055,7 +2055,7 @@ s32 func_80123810(GlobalContext* globalCtx);
void func_80123AA4(Player* player, s32 arg1);
// void func_80123BD4(void);
// void func_80123C58(void);
-void func_80123C90(GlobalContext* globalCtx, Player* player);
+void Player_SetEquipmentData(GlobalContext* globalCtx, Player* this);
void func_80123D50(GlobalContext* globalCtx, Player* player, UNK_TYPE arg2, UNK_TYPE arg3);
void func_80123DA4(Player* player);
// void func_80123DC0(void);
@@ -2253,16 +2253,16 @@ s32 Room_StartRoomTransition(GlobalContext* globalCtx, RoomContext* roomCtx, s32
s32 Room_HandleLoadCallbacks(GlobalContext* globalCtx, RoomContext* roomCtx);
void Room_Draw(GlobalContext* globalCtx, Room* room, u32 flags);
void func_8012EBF8(GlobalContext* globalCtx, RoomContext* roomCtx);
-s32 func_8012EC80(GlobalContext* globalCtx);
-void func_8012ED34(s16 equipment);
-u8 func_8012ED78(GlobalContext* globalCtx, s16 equipment);
-void Inventory_ChangeUpgrade(s16 arg0, u32 arg1);
-s32 func_8012EE34(s16 arg0);
-void func_8012EF0C(s16 arg0);
-void func_8012F0EC(s16 arg0);
-void func_8012F1BC(s16 sceneIndex);
-s16 func_8012F22C(s16 sceneIndex);
-void func_8012F278(GlobalContext* globalCtx);
+s32 Inventory_GetBtnBItem(GlobalContext* globalCtx);
+void Inventory_ChangeEquipment(s16 value);
+u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment);
+void Inventory_ChangeUpgrade(s16 upgrade, u32 value);
+s32 Inventory_IsMapVisible(s16 sceneNum);
+void Inventory_SetMapVisibility(s16 tingleIndex);
+void Inventory_SaveDekuPlaygroundHighScore(s16 timerId);
+void Inventory_IncrementSkullTokenCount(s16 sceneIndex);
+s16 Inventory_GetSkullTokenCount(s16 sceneIndex);
+void Inventory_SaveLotteryCodeGuess(GlobalContext* globalCtx);
s32 Object_Spawn(ObjectContext* objectCtx, s16 id);
void Object_InitBank(GameState* gameState, ObjectContext* objectCtx);
void Object_UpdateBank(ObjectContext* objectCtx);
diff --git a/include/variables.h b/include/variables.h
index 77a97c131..55ab6f711 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -1629,29 +1629,29 @@ extern MtxF gIdentityMtxF;
// extern u64* initialgspUcodeText;
// extern u64* initialgspUcodeData;
// extern UNK_TYPE1 D_801D1E70;
-// extern UNK_TYPE1 D_801D2E80;
-// extern UNK_TYPE1 D_801D2F80;
-// extern UNK_TYPE1 D_801D3070;
-// extern UNK_TYPE1 D_801D3700;
-// extern UNK_TYPE1 D_801D3D90;
-// extern UNK_TYPE1 D_801D3F90;
-// extern UNK_TYPE1 D_801D4190;
-// extern UNK_TYPE1 D_801D4390;
-// extern UNK_TYPE1 D_801D4590;
+// extern UNK_TYPE1 gLowPassFilterData;
+// extern UNK_TYPE1 gHighPassFilterData;
+// extern UNK_TYPE1 gBandStopFilterData;
+// extern UNK_TYPE1 gBandPassFilterData;
+// extern UNK_TYPE1 gSawtoothWaveSample;
+// extern UNK_TYPE1 gTriangleWaveSample;
+// extern UNK_TYPE1 gSineWaveSample;
+// extern UNK_TYPE1 gSquareWaveSample;
+// extern UNK_TYPE1 gWhiteNoiseSample;
// extern UNK_TYPE1 D_801D4790;
-// extern UNK_TYPE1 D_801D4990;
-// extern UNK_TYPE1 D_801D4B90;
+// extern UNK_TYPE1 gEighthPulseWaveSample;
+// extern UNK_TYPE1 gQuarterPulseWaveSample;
extern s16* gWaveSamples[9];
extern UNK_PTR D_801D4D98;
extern UNK_PTR D_801D4DB0;
extern f32 gBendPitchOneOctaveFrequencies[256];
// extern UNK_TYPE1 D_801D4FB4;
-// extern UNK_TYPE4 D_801D51B4;
+// extern UNK_TYPE4 gBendPitchTwoSemitonesFrequencies;
// extern UNK_TYPE4 D_801D53B4;
-// extern UNK_TYPE1 D_801D55B4;
-// extern UNK_TYPE1 D_801D57B4;
-// extern UNK_TYPE1 D_801D57C4;
-// extern UNK_TYPE1 D_801D57D4;
+// extern UNK_TYPE1 gPitchFrequencies;
+// extern UNK_TYPE1 gDefaultShortNoteVelocityTable;
+// extern UNK_TYPE1 gDefaultShortNoteGateTimeTable;
+// extern UNK_TYPE1 gDefaultEnvelope;
extern NoteSubEu gZeroNoteSub;
extern NoteSubEu gDefaultNoteSub;
extern u16 gHeadsetPanQuantization[];
diff --git a/include/z64.h b/include/z64.h
index 48b19347f..1a9770b1c 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -901,7 +901,7 @@ typedef struct {
/* 0x11F0B */ UNK_TYPE1 pad11F0B[0x5];
/* 0x11F10 */ s32 unk11F10;
/* 0x11F14 */ UNK_TYPE1 pad11F14[0xE];
- /* 0x11F22 */ u8 unk11F22;
+ /* 0x11F22 */ u8 msgMode;
/* 0x11F23 */ UNK_TYPE1 pad11F23[0xE3];
/* 0x12006 */ s16 unk12006;
/* 0x12007 */ UNK_TYPE1 pad12007[0x18];
@@ -919,7 +919,11 @@ typedef struct {
/* 0x12044 */ s16 unk12044;
/* 0x12046 */ UNK_TYPE1 pad12046[0x2];
/* 0x12048 */ u8 unk12048; // EnKakasi
- /* 0x12049 */ UNK_TYPE1 pad12049[0x21];
+ /* 0x12049 */ UNK_TYPE1 pad12049[0xB];
+ /* 0x12054 */ s16 unk12054; // First digit in lottery code guess
+ /* 0x12056 */ s16 unk12056; // Second digit lottery code guess
+ /* 0x12058 */ s16 unk12058; // Third digit lottery code guess
+ /* 0x1205A */ UNK_TYPE1 pad1205A[0x10];
/* 0x1206A */ s16 unk1206A;
/* 0x1206C */ s32 unk1206C;
/* 0x12070 */ UNK_TYPE1 pad12070[0x8];
diff --git a/include/z64audio.h b/include/z64audio.h
index 9baa9911e..89fff01c7 100644
--- a/include/z64audio.h
+++ b/include/z64audio.h
@@ -109,23 +109,23 @@ typedef enum {
} OcarinaButtonIdx;
typedef enum {
- /* 0x0 */ NOTE_C4,
- /* 0x1 */ NOTE_DFLAT4,
- /* 0x2 */ NOTE_D4,
- /* 0x3 */ NOTE_EFLAT4,
- /* 0x4 */ NOTE_E4,
- /* 0x5 */ NOTE_F4,
- /* 0x6 */ NOTE_GFLAT4,
- /* 0x7 */ NOTE_G4,
- /* 0x8 */ NOTE_AFLAT4,
- /* 0x9 */ NOTE_A4,
- /* 0xA */ NOTE_BFLAT4,
- /* 0xB */ NOTE_B4,
- /* 0xC */ NOTE_C5,
- /* 0xD */ NOTE_DFLAT5,
- /* 0xE */ NOTE_D5,
- /* 0xF */ NOTE_EFLAT5,
- /* -1 */ NOTE_NONE = 0xFF
+ /* 0x0 */ OCARINA_PITCH_C4,
+ /* 0x1 */ OCARINA_PITCH_DFLAT4,
+ /* 0x2 */ OCARINA_PITCH_D4,
+ /* 0x3 */ OCARINA_PITCH_EFLAT4,
+ /* 0x4 */ OCARINA_PITCH_E4,
+ /* 0x5 */ OCARINA_PITCH_F4,
+ /* 0x6 */ OCARINA_PITCH_GFLAT4,
+ /* 0x7 */ OCARINA_PITCH_G4,
+ /* 0x8 */ OCARINA_PITCH_AFLAT4,
+ /* 0x9 */ OCARINA_PITCH_A4,
+ /* 0xA */ OCARINA_PITCH_BFLAT4,
+ /* 0xB */ OCARINA_PITCH_B4,
+ /* 0xC */ OCARINA_PITCH_C5,
+ /* 0xD */ OCARINA_PITCH_DFLAT5,
+ /* 0xE */ OCARINA_PITCH_D5,
+ /* 0xF */ OCARINA_PITCH_EFLAT5,
+ /* -1 */ OCARINA_PITCH_NONE = 0xFF
} OcarinaNoteIdx;
typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction);
diff --git a/include/z64item.h b/include/z64item.h
index 46ba8c045..c8d7b0d1e 100644
--- a/include/z64item.h
+++ b/include/z64item.h
@@ -383,7 +383,8 @@ typedef enum {
/* -1 */ EXCH_ITEM_MINUS1 = -1, // Unknown usage or function
/* 0x00 */ EXCH_ITEM_NONE,
/* 0x1E */ EXCH_ITEM_1E = 0x1E, // BOTTLE_MUSHROOM
- /* 0x2A */ EXCH_ITEM_2A = 0x2A // MOON_TEAR?
+ /* 0x2A */ EXCH_ITEM_2A = 0x2A, // MOON_TEAR?
+ /* 0x2E */ EXCH_ITEM_2E = 0x2E
} ExchangeItemID;
#endif
diff --git a/include/z64save.h b/include/z64save.h
index 5b0c33ab8..61d217544 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -22,7 +22,7 @@ typedef struct {
/* 0x50 */ u8 dungeonItems[10];
/* 0x5A */ s8 dungeonKeys[10];
/* 0x64 */ s8 strayFairies[10]; // "orange_fairy"
- /* 0x6E */ u8 unk_6E[8][3]; // "degnuts_memory_name"
+ /* 0x6E */ char dekuPlaygroundPlayerName[3][8]; // Stores playerName (8 char) over (3 days) when getting a new high score. original name: degnuts_memory_name
} Inventory; // size = 0x88
typedef struct {
@@ -49,7 +49,9 @@ typedef struct {
/* 0x08 */ u32 swch1;
/* 0x0C */ u32 clearedRoom;
/* 0x10 */ u32 collectible;
-} CycleSceneFlags; // size = 0x14
+ /* 0x14 */ u32 unk_14;
+ /* 0x18 */ u32 unk_18;
+} PermanentSceneFlags; // size = 0x1C
typedef struct {
/* 0x00 */ u16 optionId; // original name: option_id
@@ -80,6 +82,14 @@ typedef struct {
/* 0x0026 */ s16 savedSceneNum; // "scene_data_ID"
} SavePlayerData; // size = 0x28
+typedef struct {
+ /* 0x00 */ u32 chest;
+ /* 0x04 */ u32 swch0;
+ /* 0x08 */ u32 swch1;
+ /* 0x0C */ u32 clearedRoom;
+ /* 0x10 */ u32 collectible;
+} CycleSceneFlags; // size = 0x14
+
typedef struct {
/* 0x0000 */ u32 entranceIndex; // "scene_no"
/* 0x0004 */ u8 equippedMask; // "player_mask"
@@ -100,7 +110,28 @@ typedef struct {
/* 0x0024 */ SavePlayerData playerData;
/* 0x004C */ ItemEquips equips;
/* 0x0070 */ Inventory inventory;
- /* 0x00F8 */ u32 roomInf[128][7];
+ /* 0x00F8 */ PermanentSceneFlags permanentSceneFlags[120];
+ /* 0x0E18 */ u8 unk_E18[0x54];
+ /* 0x0E6C */ u32 dekuPlaygroundHighScores[3];
+ /* 0x0E78 */ u32 pictoFlags0;
+ /* 0x0E7C */ u32 pictoFlags1;
+ /* 0x0E80 */ u32 unk_E80;
+ /* 0x0E84 */ u32 unk_E84;
+ /* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags
+ /* 0x0EA4 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes
+ /* 0x0EC0 */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls
+ /* 0x0EC4 */ u32 unk_EC4; // Gossic stone heart piece flags
+ /* 0x0EC8 */ u32 unk_EC8;
+ /* 0x0ECC */ u32 unk_ECC[2]; // Related to blue warps
+ /* 0x0ED4 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man
+ /* 0x0ED8 */ u32 unk_DD8;
+ /* 0x0EDC */ u32 bankRupees;
+ /* 0x0EE0 */ u32 unk_EE0;
+ /* 0x0EE4 */ u32 unk_EE4; // Fishing flags
+ /* 0x0EE8 */ u32 unk_EE8;
+ /* 0x0EEC */ u32 horseBackBalloonHighScore;
+ /* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
+ /* 0x0EF4 */ u32 unk_EF4; // Shooting Gallery Man Flags
/* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
/* 0x0F5C */ u32 mapsVisited; // "area_arrival"
/* 0x0F60 */ u32 mapsVisible; // "cloud_clear"
@@ -109,7 +140,7 @@ typedef struct {
/* 0x0F66 */ u8 scarecrowsSong[128]; // "oca_rec_buff8"
/* 0x0FE6 */ s8 bombersCaughtNum; // "aikotoba_index"
/* 0x0FE7 */ s8 bombersCaughtOrder[5]; // "aikotoba_table"
- /* 0x0FEC */ s8 lotteryCodes[3][3]; // "numbers_table"
+ /* 0x0FEC */ s8 lotteryCodes[3][3]; // Pre-set lottery codes "numbers_table"
/* 0x0FF5 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table"
/* 0x0FFB */ s8 bomberCode[5]; // "bombers_aikotoba_table"
/* 0x1000 */ HorseData horseData;
@@ -196,7 +227,7 @@ typedef struct {
/* 0x3F5C */ s32 unk_3F5C; // "bet_rupees"
/* 0x3F60 */ u8 screenScaleFlag; // "framescale_flag"
/* 0x3F64 */ f32 screenScale; // "framescale_scale"
- /* 0x3F68 */ CycleSceneFlags cycleSceneFlags[120];
+ /* 0x3F68 */ CycleSceneFlags cycleSceneFlags[120]; // Scene flags that are temporarily stored over the duration of a single 3-day cycle
/* 0x48C8 */ u16 unk_48C8; // "scene_id_mix"
/* 0x48CA */ u8 maskMaskBit[3]; // masks given away on the Moon
/* 0x48CD */ u8 unk_48CD[24];
diff --git a/spec b/spec
index 7dcc4bcbf..352e4fbd6 100644
--- a/spec
+++ b/spec
@@ -619,7 +619,7 @@ beginseg
pad_text
pad_text
pad_text
- include "build/data/code/audio_data.data.o"
+ include "build/src/code/audio/audio_data.o"
include "build/src/code/audio/audio_synthesis.o"
include "build/data/code/audio_synthesis.data.o"
include "build/src/code/audio/audio_heap.o"
@@ -1471,8 +1471,7 @@ beginseg
name "ovl_Obj_Ice_Poly"
compress
include "build/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.o"
- include "build/data/ovl_Obj_Ice_Poly/ovl_Obj_Ice_Poly.data.o"
- include "build/data/ovl_Obj_Ice_Poly/ovl_Obj_Ice_Poly.reloc.o"
+ include "build/src/overlays/actors/ovl_Obj_Ice_Poly/ovl_Obj_Ice_Poly_reloc.o"
endseg
beginseg
@@ -1495,8 +1494,7 @@ beginseg
name "ovl_Obj_Bean"
compress
include "build/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.o"
- include "build/data/ovl_Obj_Bean/ovl_Obj_Bean.data.o"
- include "build/data/ovl_Obj_Bean/ovl_Obj_Bean.reloc.o"
+ include "build/src/overlays/actors/ovl_Obj_Bean/ovl_Obj_Bean_reloc.o"
endseg
beginseg
diff --git a/src/code/audio/audio_data.c b/src/code/audio/audio_data.c
new file mode 100644
index 000000000..c43018922
--- /dev/null
+++ b/src/code/audio/audio_data.c
@@ -0,0 +1,949 @@
+#include "global.h"
+
+s16 gLowPassFilterData[16 * 8] = {
+ /* 0x0 */ 0, 0, 0, 32767, 0, 0, 0, 0, // Identity filter (delta function)
+ /* 0x1 */ 3854, 4188, 4398, 4469, 4398, 4188, 3854, 3416, // low-freq cutoff (more filtering)
+ /* 0x2 */ 3415, 4314, 4915, 5126, 4915, 4314, 3415, 2351,
+ /* 0x3 */ 2636, 4433, 5762, 6252, 5762, 4433, 2636, 849,
+ /* 0x4 */ 1334, 4196, 6646, 7609, 6646, 4196, 1334, -802,
+ /* 0x5 */ -265, 3421, 7292, 8944, 7292, 3421, -265, -1863,
+ /* 0x6 */ -1558, 2065, 7146, 9546, 7146, 2065, -1558, -1682,
+ /* 0x7 */ -2353, 726, 7441, 11028, 7441, 726, -2353, -697,
+ /* 0x8 */ -2252, -693, 7121, 11962, 7121, -693, -2252, 668,
+ /* 0x9 */ -1373, -1819, 6299, 12298, 6299, -1819, -1373, 1484,
+ /* 0xA */ -213, -2740, 5843, 13680, 5843, -2740, -213, 1494,
+ /* 0xB */ 980, -3081, 4883, 14286, 4883, -3081, 980, 590,
+ /* 0xC */ 1769, -2973, 3866, 14981, 3866, -2973, 1769, -568,
+ /* 0xD */ 2023, -2554, 2911, 16397, 2911, -2554, 2023, -1391,
+ /* 0xE */ 1766, -1918, 2016, 19800, 2016, -1918, 1766, -1564,
+ /* 0xF */ 841, -853, 863, 26829, 863, -853, 841, -820, // high-freq cutoff (less filtering)
+};
+
+s16 gHighPassFilterData[15 * 8] = {
+ /* 0x0 */ -289, -291, -289, 30736, -289, -291, -289, -290, // low-freq cutoff (less filtering)
+ /* 0x1 */ -464, -467, -467, 29506, -467, -467, -464, -463,
+ /* 0x2 */ -662, -670, -672, 28101, -672, -670, -662, -656,
+ /* 0x3 */ -839, -855, -861, 26830, -861, -855, -839, -822,
+ /* 0x4 */ -996, -1024, -1038, 25685, -1038, -1024, -996, -963,
+ /* 0x5 */ -1184, -1236, -1266, 24272, -1266, -1236, -1184, -1118,
+ /* 0x6 */ -1357, -1450, -1506, 22900, -1506, -1450, -1357, -1238,
+ /* 0x7 */ -1514, -1680, -1784, 21498, -1784, -1680, -1514, -1307,
+ /* 0x8 */ -1613, -1877, -2048, 20390, -2048, -1877, -1613, -1298,
+ /* 0x9 */ -1657, -2185, -2559, 18869, -2559, -2185, -1657, -1093,
+ /* 0xA */ -1524, -2395, -3078, 18030, -3078, -2395, -1524, -739,
+ /* 0xB */ -1253, -2504, -3621, 17642, -3621, -2504, -1253, -367,
+ /* 0xC */ -525, -2367, -4732, 17517, -4732, -2367, -525, 0,
+ /* 0xD */ -34, -1762, -5706, 17503, -5706, -1762, -34, -258,
+ /* 0xE */ -772, -3, -6985, 17240, -6985, -3, -772, -3, // high-freq cutoff (more filtering)
+};
+
+// clang-format off
+s16 gBandStopFilterData[105 * 8] = {
+ // Block 0
+ /* 0x00 */ -43, -716, -1205, 28210, -1205, -716, -43, 629,
+ /* 0x01 */ 249, -919, -1819, 25489, -1819, -919, 249, 1301,
+ /* 0x02 */ 1267, -802, -2650, 20722, -2650, -802, 1267, 2603,
+ /* 0x03 */ 2497, -210, -3196, 17617, -3196, -210, 2497, 3339,
+ /* 0x04 */ 3413, 690, -3385, 14754, -3385, 690, 3413, 3035,
+ /* 0x05 */ 3859, 1734, -3416, 12704, -3416, 1734, 3859, 2042,
+ /* 0x06 */ 3858, 2907, -3414, 11516, -3414, 2907, 3858, 890,
+ /* 0x07 */ 3374, 4194, -3345, 10859, -3345, 4194, 3374, 80,
+ /* 0x08 */ 2446, 5521, -3130, 10483, -3130, 5521, 2446, 86,
+ /* 0x09 */ 1275, 6760, -2665, 10225, -2665, 6760, 1275, 1140,
+ /* 0x0A */ 252, 7778, -1836, 10022, -1836, 7778, 252, 3010,
+ /* 0x0B */ -98, 8427, -461, 9805, -461, 8427, -98, 4988,
+ /* 0x0C */ 719, 7392, 1528, 8201, 1528, 7392, 719, 5286,
+ /* 0x0D */ 2499, 5359, 3651, 5985, 3651, 5359, 2499, 3761,
+
+ // Block 1
+ /* 0x0E */ 711, -205, -1026, 27608, -1026, -205, 711, 1271,
+ /* 0x0F */ 1335, -108, -1520, 24836, -1520, -108, 1335, 2003,
+ /* 0x10 */ 2540, 455, -2104, 19853, -2104, 455, 2540, 2712,
+ /* 0x11 */ 3406, 1298, -2347, 16266, -2347, 1298, 3406, 2397,
+ /* 0x12 */ 3860, 2321, -2440, 14094, -2440, 2321, 3860, 1428,
+ /* 0x13 */ 3858, 3511, -2439, 12888, -2439, 3511, 3858, 259,
+ /* 0x14 */ 3248, 4679, -2238, 11859, -2238, 4679, 3248, -575,
+ /* 0x15 */ 2329, 6021, -1929, 11579, -1929, 6021, 2329, -626,
+ /* 0x16 */ 1225, 7613, -1395, 11967, -1395, 7613, 1225, 332,
+ /* 0x17 */ 172, 8785, -352, 12028, -352, 8785, 172, 2119,
+ /* 0x18 */ -172, 8198, 1139, 10360, 1139, 8198, -172, 3385,
+ /* 0x19 */ 511, 7006, 2830, 8649, 2830, 7006, 511, 3421,
+ /* 0x1A */ 1995, 5313, 4595, 6801, 4595, 5313, 1995, 2158,
+
+ // Block 2
+ /* 0x1B */ 1196, 313, -815, 26961, -815, 313, 1196, 1154,
+ /* 0x1C */ 1896, 666, -1159, 23821, -1159, 666, 1896, 1500,
+ /* 0x1D */ 2934, 1569, -1548, 19353, -1548, 1569, 2934, 1308,
+ /* 0x1E */ 3463, 2673, -1703, 16770, -1703, 2673, 3463, 316,
+ /* 0x1F */ 3269, 3757, -1608, 14587, -1608, 3757, 3269, -910,
+ /* 0x20 */ 2585, 4889, -1364, 13325, -1364, 4889, 2585, -1763,
+ /* 0x21 */ 1588, 6277, -970, 13171, -970, 6277, 1588, -1922,
+ /* 0x22 */ 337, 8121, -265, 14134, -265, 8121, 337, -1186,
+ /* 0x23 */ -795, 8193, 882, 12631, 882, 8193, -795, 391,
+ /* 0x24 */ -1058, 7224, 2132, 10492, 2132, 7224, -1058, 1444,
+ /* 0x25 */ -503, 6540, 3803, 9532, 3803, 6540, -503, 1541,
+ /* 0x26 */ 906, 5326, 5759, 8358, 5759, 5326, 906, 423,
+
+ // Block 3
+ /* 0x27 */ 1298, 781, -597, 27018, -597, 781, 1298, 392,
+ /* 0x28 */ 1914, 1364, -834, 24334, -834, 1364, 1914, 205,
+ /* 0x29 */ 2474, 2527, -1015, 19916, -1015, 2527, 2474, -817,
+ /* 0x2A */ 2277, 3649, -934, 16994, -934, 3649, 2277, -2050,
+ /* 0x2B */ 1545, 4865, -673, 15635, -673, 4865, 1545, -2964,
+ /* 0x2C */ 366, 6363, -181, 15693, -181, 6363, 366, -3252,
+ /* 0x2D */ -1017, 6734, 611, 13854, 611, 6734, -1017, -2187,
+ /* 0x2E */ -1937, 6500, 1558, 12000, 1558, 6500, -1937, -774,
+ /* 0x2F */ -2216, 6018, 2714, 10698, 2714, 6018, -2216, 171,
+ /* 0x30 */ -1795, 5344, 4221, 9864, 4221, 5344, -1795, 182,
+ /* 0x31 */ -659, 4411, 6228, 9260, 6228, 4411, -659, -908,
+
+ // Block 4
+ /* 0x32 */ 968, 1138, -358, 27228, -358, 1138, 968, -607,
+ /* 0x33 */ 1251, 1846, -453, 24418, -453, 1846, 1251, -1246,
+ /* 0x34 */ 1138, 3176, -412, 20709, -412, 3176, 1138, -2601,
+ /* 0x35 */ 313, 4550, -119, 19167, -119, 4550, 313, -3633,
+ /* 0x36 */ -972, 5170, 419, 16290, 419, 5170, -972, -3351,
+ /* 0x37 */ -2123, 5230, 1090, 13680, 1090, 5230, -2123, -2199,
+ /* 0x38 */ -2916, 5066, 1926, 12019, 1926, 5066, -2916, -929,
+ /* 0x39 */ -3202, 4669, 2995, 10953, 2995, 4669, -3202, -80,
+ /* 0x3A */ -2874, 3990, 4369, 10214, 4369, 3990, -2874, -84,
+ /* 0x3B */ -1937, 3001, 6108, 9601, 6108, 3001, -1937, -1071,
+
+ // Block 5
+ /* 0x3C */ 310, 1351, -102, 27950, -102, 1351, 310, -1287,
+ /* 0x3D */ 169, 2166, -55, 25895, -55, 2166, 169, -2088,
+ /* 0x3E */ -697, 3332, 252, 21292, 252, 3332, -697, -2909,
+ /* 0x3F */ -1846, 3873, 739, 17298, 739, 3873, -1846, -2549,
+ /* 0x40 */ -2904, 4036, 1371, 14658, 1371, 4036, -2904, -1485,
+ /* 0x41 */ -3657, 3912, 2183, 12999, 2183, 3912, -3657, -261,
+ /* 0x42 */ -3814, 3385, 3124, 11558, 3124, 3385, -3814, 561,
+ /* 0x43 */ -3535, 2679, 4428, 10890, 4428, 2679, -3535, 589,
+ /* 0x44 */ -2812, 1718, 6312, 10782, 6312, 1718, -2812, -299,
+
+ // Block 6
+ /* 0x45 */ -472, 1315, 164, 27677, 164, 1315, -472, -1185,
+ /* 0x46 */ -993, 1945, 353, 24630, 353, 1945, -993, -1551,
+ /* 0x47 */ -2181, 2706, 860, 19924, 860, 2706, -2181, -1347,
+ /* 0x48 */ -3275, 2979, 1521, 16895, 1521, 2979, -3275, -319,
+ /* 0x49 */ -3842, 2725, 2248, 14245, 2248, 2725, -3842, 889,
+ /* 0x4A */ -3933, 2186, 3141, 12579, 3141, 2186, -3933, 1665,
+ /* 0x4B */ -3664, 1431, 4428, 11971, 4428, 1431, -3664, 1747,
+ /* 0x4C */ -3021, 346, 6399, 12209, 6399, 346, -3021, 1024,
+
+ // Block 7
+ /* 0x4D */ -1075, 1074, 417, 27236, 417, 1074, -1075, -395,
+ /* 0x4E */ -1798, 1521, 741, 24438, 741, 1521, -1798, -206,
+ /* 0x4F */ -2921, 1848, 1426, 19572, 1426, 1848, -2921, 803,
+ /* 0x50 */ -3491, 1649, 2169, 16192, 2169, 1649, -3491, 1954,
+ /* 0x51 */ -3600, 1124, 3106, 14379, 3106, 1124, -3600, 2726,
+ /* 0x52 */ -3300, 278, 4453, 13834, 4453, 278, -3300, 2867,
+ /* 0x53 */ -2282, -916, 5804, 12748, 5804, -916, -2282, 2012,
+
+ // Block 8
+ /* 0x54 */ -1306, 682, 649, 26892, 649, 682, -1306, 599,
+ /* 0x55 */ -1951, 858, 1073, 23787, 1073, 858, -1951, 1214,
+ /* 0x56 */ -2705, 755, 1945, 19505, 1945, 755, -2705, 2450,
+ /* 0x57 */ -2857, 207, 2996, 17354, 2996, 207, -2857, 3289,
+ /* 0x58 */ -2261, -722, 4101, 15425, 4101, -722, -2261, 3173,
+ /* 0x59 */ -1164, -1891, 5287, 13853, 5287, -1891, -1164, 2227,
+
+ // Block 9
+ /* 0x5A */ -1119, 202, 869, 27136, 869, 202, -1119, 1249,
+ /* 0x5B */ -1545, 108, 1432, 24611, 1432, 108, -1545, 1984,
+ /* 0x5C */ -1675, -472, 2529, 20597, 2529, -472, -1675, 2814,
+ /* 0x5D */ -1040, -1426, 3661, 17877, 3661, -1426, -1040, 2634,
+ /* 0x5E */ 105, -2626, 4871, 15944, 4871, -2626, 105, 1615,
+
+ // Block 10
+ /* 0x5F */ -554, -321, 1071, 27687, 1071, -321, -554, 1185,
+ /* 0x60 */ -562, -704, 1738, 25171, 1738, -704, -562, 1585,
+ /* 0x61 */ 73, -1749, 3045, 21572, 3045, -1749, 73, 1458,
+ /* 0x62 */ 1152, -2704, 3884, 16963, 3884, -2704, 1152, 320,
+
+ // Block 11
+ /* 0x63 */ 222, -806, 1221, 27862, 1221, -806, 222, 404,
+ /* 0x64 */ 632, -1385, 1908, 24706, 1908, -1385, 632, 208,
+ /* 0x65 */ 1605, -2339, 2840, 18439, 2840, -2339, 1605, -756,
+
+ // Block 12
+ /* 0x66 */ 861, -1081, 1224, 25856, 1224, -1081, 861, -576,
+ /* 0x67 */ 1422, -1655, 1804, 21885, 1804, -1655, 1422, -1117,
+
+ // Block 13
+ /* 0x68 */ 434, -453, 467, 29652, 467, -453, 434, -405,
+};
+
+s16 gBandPassFilterData[105 * 8] = {
+ // Block 0
+ /* 0x00 */ 687, 4058, 6599, 7544, 6599, 4058, 687, -2532,
+ /* 0x01 */ -1303, 2777, 6337, 7745, 6337, 2777, -1303, -4185,
+ /* 0x02 */ -2873, 1376, 5931, 7886, 5931, 1376, -2873, -4520,
+ /* 0x03 */ -4108, 0, 5913, 8723, 5913, 0, -4108, -3999,
+ /* 0x04 */ -4233, -1334, 5242, 8775, 5242, -1334, -4233, -2371,
+ /* 0x05 */ -3882, -2547, 4808, 9389, 4808, -2547, -3882, -900,
+ /* 0x06 */ -3072, -3668, 4423, 10438, 4423, -3668, -3072, 0,
+ /* 0x07 */ -1914, -4609, 3950, 11819, 3950, -4609, -1914, 0,
+ /* 0x08 */ -678, -5227, 3301, 13449, 3301, -5227, -678, -903,
+ /* 0x09 */ 246, -5250, 2363, 14858, 2363, -5250, 246, -2189,
+ /* 0x0A */ 509, -4812, 1262, 16454, 1262, -4812, 509, -3143,
+ /* 0x0B */ 0, -4404, 0, 20367, 0, -4404, 0, -3591,
+ /* 0x0C */ -1151, -2707, -1393, 19954, -1393, -2707, -1151, -2310,
+ /* 0x0D */ -1765, -1920, -2014, 19800, -2014, -1920, -1765, -1566,
+
+ // Block 1
+ /* 0x0E */ -3122, 1346, 5464, 7125, 5464, 1346, -3122, -5776,
+ /* 0x0F */ -4566, 0, 5211, 7489, 5211, 0, -4566, -5723,
+ /* 0x10 */ -4941, -1265, 4474, 7249, 4474, -1265, -4941, -4155,
+ /* 0x11 */ -4932, -2431, 4021, 7549, 4021, -2431, -4932, -2447,
+ /* 0x12 */ -4511, -3587, 3678, 8286, 3678, -3587, -4511, -927,
+ /* 0x13 */ -3660, -4711, 3314, 9396, 3314, -4711, -3660, 0,
+ /* 0x14 */ -2471, -5685, 2820, 10810, 2820, -5685, -2471, 0,
+ /* 0x15 */ -1213, -6349, 2123, 12463, 2123, -6349, -1213, -929,
+ /* 0x16 */ -272, -6581, 1189, 14354, 1189, -6581, -272, -2327,
+ /* 0x17 */ 0, -6351, 0, 16604, 0, -6351, 0, -3460,
+ /* 0x18 */ -509, -4812, -1262, 16454, -1262, -4812, -509, -3143,
+ /* 0x19 */ -1488, -3277, -2395, 16401, -2395, -3277, -1488, -2045,
+ /* 0x1A */ -2021, -2555, -2910, 16397, -2910, -2555, -2021, -1392,
+
+ // Block 2
+ /* 0x1B */ -5281, -1216, 4054, 6441, 4054, -1216, -5281, -5221,
+ /* 0x1C */ -5495, -2330, 3552, 6498, 3552, -2330, -5495, -3511,
+ /* 0x1D */ -5377, -3474, 3206, 6991, 3206, -3474, -5377, -1659,
+ /* 0x1E */ -4853, -4693, 2893, 7887, 2893, -4693, -4853, 0,
+ /* 0x1F */ -3646, -5586, 2357, 8623, 2357, -5586, -3646, 965,
+ /* 0x20 */ -2373, -6636, 1821, 10132, 1821, -6636, -2373, 971,
+ /* 0x21 */ -1086, -7852, 1115, 12658, 1115, -7852, -1086, 0,
+ /* 0x22 */ 0, -8182, 0, 14837, 0, -8182, 0, -1565,
+ /* 0x23 */ 272, -6581, -1189, 14354, -1189, -6581, 272, -2326,
+ /* 0x24 */ -246, -5250, -2363, 14858, -2363, -5250, -246, -2189,
+ /* 0x25 */ -1231, -3701, -3393, 14931, -3393, -3701, -1231, -1181,
+ /* 0x26 */ -1768, -2974, -3865, 14981, -3865, -2974, -1768, -569,
+
+ // Block 3
+ /* 0x27 */ -5832, -3391, 2948, 6305, 2948, -3391, -5832, -2116,
+ /* 0x28 */ -5587, -4647, 2641, 7014, 2641, -4647, -5587, 0,
+ /* 0x29 */ -4365, -5434, 2063, 7306, 2063, -5434, -4365, 1734,
+ /* 0x2A */ -3036, -6379, 1534, 8205, 1534, -6379, -3036, 2660,
+ /* 0x2B */ -1576, -7586, 916, 9927, 916, -7586, -1576, 2682,
+ /* 0x2C */ 0, -9097, 0, 12831, 0, -9097, 0, 1740,
+ /* 0x2D */ 1086, -7852, -1115, 12658, -1115, -7852, 1086, 0,
+ /* 0x2E */ 1213, -6349, -2123, 12463, -2123, -6349, 1213, -929,
+ /* 0x2F */ 678, -5227, -3301, 13449, -3301, -5227, 678, -903,
+ /* 0x30 */ -406, -3992, -4605, 14759, -4605, -3992, -406, 0,
+ /* 0x31 */ -979, -3083, -4882, 14287, -4882, -3083, -979, 589,
+
+ // Block 4
+ /* 0x32 */ -4748, -5319, 1902, 6607, 1902, -5319, -4748, 2218,
+ /* 0x33 */ -3402, -6148, 1363, 7101, 1363, -6148, -3402, 3837,
+ /* 0x34 */ -1853, -7246, 787, 8259, 787, -7246, -1853, 4733,
+ /* 0x35 */ 0, -8777, 0, 10430, 0, -8777, 0, 4782,
+ /* 0x36 */ 1576, -7586, -916, 9927, -916, -7586, 1576, 2682,
+ /* 0x37 */ 2373, -6636, -1821, 10132, -1821, -6636, 2373, 971,
+ /* 0x38 */ 2471, -5685, -2820, 10810, -2820, -5685, 2471, 0,
+ /* 0x39 */ 1914, -4609, -3950, 11819, -3950, -4609, 1914, 0,
+ /* 0x3A */ 846, -3385, -5195, 13035, -5195, -3385, 846, 875,
+ /* 0x3B */ 214, -2741, -5841, 13679, -5841, -2741, 214, 1492,
+
+ // Block 5
+ /* 0x3C */ -1989, -7002, 716, 7373, 716, -7002, -1989, 5976,
+ /* 0x3D */ 0, -8439, 0, 9006, 0, -8439, 0, 6882,
+ /* 0x3E */ 1853, -7246, -787, 8259, -787, -7246, 1853, 4733,
+ /* 0x3F */ 3036, -6379, -1534, 8205, -1534, -6379, 3036, 2660,
+ /* 0x40 */ 3646, -5586, -2357, 8623, -2357, -5586, 3646, 965,
+ /* 0x41 */ 3660, -4711, -3314, 9396, -3314, -4711, 3660, 0,
+ /* 0x42 */ 3072, -3668, -4423, 10438, -4423, -3668, 3072, 0,
+ /* 0x43 */ 2003, -2459, -5656, 11656, -5656, -2459, 2003, 869,
+ /* 0x44 */ 1374, -1820, -6298, 12297, -6298, -1820, 1374, 1483,
+
+ // Block 6
+ /* 0x45 */ 1989, -7002, -716, 7373, -716, -7002, 1989, 5976,
+ /* 0x46 */ 3402, -6148, -1363, 7101, -1363, -6148, 3402, 3837,
+ /* 0x47 */ 4365, -5434, -2063, 7306, -2063, -5434, 4365, 1734,
+ /* 0x48 */ 4853, -4693, -2893, 7887, -2893, -4693, 4853, 0,
+ /* 0x49 */ 4511, -3587, -3678, 8286, -3678, -3587, 4511, -927,
+ /* 0x4A */ 3882, -2547, -4808, 9389, -4808, -2547, 3882, -900,
+ /* 0x4B */ 2938, -1390, -6423, 11264, -6423, -1390, 2938, 0,
+ /* 0x4C */ 2253, -695, -7120, 11961, -7120, -695, 2253, 667,
+
+ // Block 7
+ /* 0x4D */ 4748, -5319, -1902, 6607, -1902, -5319, 4748, 2218,
+ /* 0x4E */ 5587, -4647, -2641, 7014, -2641, -4647, 5587, 0,
+ /* 0x4F */ 5377, -3474, -3206, 6991, -3206, -3474, 5377, -1659,
+ /* 0x50 */ 4932, -2431, -4021, 7549, -4021, -2431, 4932, -2447,
+ /* 0x51 */ 4233, -1334, -5242, 8775, -5242, -1334, 4233, -2371,
+ /* 0x52 */ 3218, 0, -7035, 10795, -7035, 0, 3218, -1464,
+ /* 0x53 */ 2355, 725, -7440, 11027, -7440, 725, 2355, -698,
+
+ // Block 8
+ /* 0x54 */ 5832, -3391, -2948, 6305, -2948, -3391, 5832, -2116,
+ /* 0x55 */ 5495, -2330, -3552, 6498, -3552, -2330, 5495, -3511,
+ /* 0x56 */ 4941, -1265, -4474, 7249, -4474, -1265, 4941, -4155,
+ /* 0x57 */ 4108, 0, -5913, 8723, -5913, 0, 4108, -3999,
+ /* 0x58 */ 2383, 1404, -6726, 9241, -6726, 1404, 2383, -2496,
+ /* 0x59 */ 1559, 2063, -7145, 9545, -7145, 2063, 1559, -1684,
+
+ // Block 9
+ /* 0x5A */ 5281, -1216, -4054, 6441, -4054, -1216, 5281, -5221,
+ /* 0x5B */ 4566, 0, -5211, 7489, -5211, 0, 4566, -5723,
+ /* 0x5C */ 2873, 1376, -5931, 7886, -5931, 1376, 2873, -4520,
+ /* 0x5D */ 1113, 2760, -6833, 8572, -6833, 2760, 1113, -2779,
+ /* 0x5E */ 267, 3420, -7291, 8943, -7291, 3420, 267, -1864,
+
+ // Block 10
+ /* 0x5F */ 3122, 1346, -5464, 7125, -5464, 1346, 3122, -5776,
+ /* 0x60 */ 1303, 2777, -6337, 7745, -6337, 2777, 1303, -4185,
+ /* 0x61 */ -605, 3972, -6859, 7994, -6859, 3972, -605, -1897,
+ /* 0x62 */ -1333, 4196, -6647, 7610, -6647, 4196, -1333, -803,
+
+ // Block 11
+ /* 0x63 */ -687, 4058, -6599, 7544, -6599, 4058, -687, -2532,
+ /* 0x64 */ -2251, 4520, -6201, 6821, -6201, 4520, -2251, 0,
+ /* 0x65 */ -2636, 4433, -5763, 6253, -5763, 4433, -2636, 847,
+
+ // Block 12
+ /* 0x66 */ -3207, 4379, -5163, 5439, -5163, 4379, -3207, 1826,
+ /* 0x67 */ -3414, 4314, -4915, 5127, -4915, 4314, -3414, 2350,
+
+ // Block 13
+ /* 0x68 */ -3854, 4188, -4398, 4469, -4398, 4188, -3854, 3415,
+};
+
+s16 gSawtoothWaveSample[] = {
+ // 1st Harmonic
+ 0, 1023, 2047, 3071, 4095, 5119, 6143, 7167,
+ 8191, 9215, 10239, 11263, 12287, 13311, 14335, 15359,
+ 16383, 17407, 18431, 19455, 20479, 21503, 22527, 23551,
+ 24575, 25599, 26623, 27647, 28671, 29695, 30719, 31743,
+ -32767, -31743, -30719, -29695, -28671, -27647, -26623, -25599,
+ -24575, -23551, -22527, -21503, -20479, -19455, -18431, -17407,
+ -16383, -15359, -14335, -13311, -12287, -11263, -10239, -9215,
+ -8191, -7167, -6143, -5119, -4095, -3071, -2047, -1023,
+
+ // 2nd Harmonic
+ 0, 2047, 4095, 6143, 8191, 10239, 12287, 14335,
+ 16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
+ -32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
+ -16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047,
+ 0, 2047, 4095, 6143, 8191, 10239, 12287, 14335,
+ 16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
+ -32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
+ -16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047,
+
+ // 4th Harmonic
+ 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
+ -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
+ 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
+ -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
+ 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
+ -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
+ 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
+ -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
+
+ // 8th Harmonic
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, -32767, -24575, -16383, -8191,
+};
+
+s16 gTriangleWaveSample[] = {
+ // 1st Harmonic
+ 0, 2047, 4095, 6143, 8191, 10239, 12287, 14335,
+ 16383, 18431, 20479, 22527, 24575, 26623, 28671, 30719,
+ 32767, 30719, 28671, 26623, 24575, 22527, 20479, 18431,
+ 16383, 14335, 12287, 10239, 8191, 6143, 4095, 2047,
+ 0, -2047, -4095, -6143, -8191, -10239, -12287, -14335,
+ -16383, -18431, -20479, -22527, -24575, -26623, -28671, -30719,
+ -32767, -30719, -28671, -26623, -24575, -22527, -20479, -18431,
+ -16383, -14335, -12287, -10239, -8191, -6143, -4095, -2047,
+
+ // 2nd Harmonic
+ 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
+ 32767, 28671, 24575, 20479, 16383, 12287, 8191, 4095,
+ 0, -4095, -8191, -12287, -16383, -20479, -24575, -28671,
+ -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
+ 0, 4095, 8191, 12287, 16383, 20479, 24575, 28671,
+ 32767, 28671, 24575, 20479, 16383, 12287, 8191, 4095,
+ 0, -4095, -8191, -12287, -16383, -20479, -24575, -28671,
+ -32767, -28671, -24575, -20479, -16383, -12287, -8191, -4095,
+
+ // 4th Harmonic
+ 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
+ 0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
+ 0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
+ 0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
+ 0, 8191, 16383, 24575, 32767, 24575, 16383, 8191,
+ 0, -8191, -16383, -24575, -32767, -24575, -16383, -8191,
+
+ // 8th Harmonic
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+ 0, 16383, 32767, 16383, 0, -16383, -32767, -16383,
+};
+
+s16 gSineWaveSample[] = {
+ // 1st Harmonic
+ 0, 3211, 6392, 9511, 12539, 15446, 18204, 20787,
+ 23169, 25329, 27244, 28897, 30272, 31356, 32137, 32609,
+ 32767, 32609, 32137, 31356, 30272, 28897, 27244, 25329,
+ 23169, 20787, 18204, 15446, 12539, 9511, 6392, 3211,
+ 0, -3211, -6392, -9511, -12539, -15446, -18204, -20787,
+ -23169, -25329, -27244, -28897, -30272, -31356, -32137, -32609,
+ -32767, -32609, -32137, -31356, -30272, -28897, -27244, -25329,
+ -23169, -20787, -18204, -15446, -12539, -9511, -6392, -3211,
+
+ // 2nd Harmonic
+ 0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
+ 32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
+ 0, -6392, -12539, -18204, -23169, -27244, -30272, -32137,
+ -32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392,
+ 0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
+ 32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
+ 0, -6392, -12539, -18204, -23169, -27244, -30272, -32137,
+ -32767, -32137, -30272, -27244, -23169, -18204, -12539, -6392,
+
+ // 4th Harmonic
+ 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
+ 0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
+ 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
+ 0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
+ 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
+ 0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
+ 0, 12539, 23169, 30272, 32767, 30272, 23169, 12539,
+ 0, -12539, -23169, -30272, -32767, -30272, -23169, -12539,
+
+ // 8th Harmonic
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+ 0, 23169, 32767, 23169, 0, -23169, -32767, -23169,
+};
+
+s16 gSquareWaveSample[] = {
+ // 1st Harmonic
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
+ -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
+
+ // 2nd Harmonic
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+
+ // 4th Harmonic
+ -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, -32767, -32767, -32767, -32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, -32767, -32767, -32767, -32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, -32767, -32767, -32767, -32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, -32767, -32767, -32767, -32767,
+
+ // 8th Harmonic
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+ 0, 0, 32767, 32767, 0, 0, -32767, -32767,
+};
+
+s16 gWhiteNoiseSample[] = {
+ // 1st Harmonic
+ 0, -25689, -25791, 27803, -27568, -21030, 22174, 6298,
+ 27071, -18531, 28649, 2284, 3380, 6890, -12682, -21114,
+ 10000, -24520, 32296, 12248, 15096, 15354, -12021, -31545,
+ -12929, 6388, -11064, 30456, -30316, -21999, 29691, 27649,
+ 0, -27649, -29691, 21999, 30316, -30457, 11064, -6387,
+ 12929, 31544, 12021, -15353, -15096, -12249, -32296, 24521,
+ -10000, 21113, 12682, -6889, -3380, -2285, -28649, 18532,
+ -27071, -6299, -22174, 21031, 27568, -27804, 25791, 25690,
+
+ // 2nd Harmonic
+ 0, -25791, -27568, 22174, 27071, 28649, 3380, -12682,
+ 10000, 32296, 15096, -12021, -12929, -11064, -30316, 29691,
+ 0, -29691, 30316, 11064, 12929, 12021, -15096, -32296,
+ -10000, 12682, -3380, -28649, -27071, -22174, 27568, 25791,
+ 0, -25791, -27568, 22174, 27071, 28649, 3380, -12682,
+ 10000, 32296, 15096, -12021, -12929, -11064, -30316, 29691,
+ 0, -29691, 30316, 11064, 12929, 12021, -15096, -32296,
+ -10000, 12682, -3380, -28649, -27071, -22174, 27568, 25791,
+
+ // 4th Harmonic
+ 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
+ 0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
+ 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
+ 0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
+ 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
+ 0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
+ 0, -27568, 27071, 3380, 10000, 15096, -12929, -30316,
+ 0, 30316, 12929, -15096, -10000, -3380, -27071, 27568,
+
+ // 8th Harmonic
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+ 0, 27071, 10000, -12929, 0, 12929, -10000, -27071,
+};
+
+// Sine White Noise?
+s16 D_801D4790[] = {
+ // 1st Harmonic
+ 0, 16316, 20148, 20257, 27209, -32657, 29264, 27259,
+ -29394, -21494, -26410, 30770, 30033, 29130, 20206, 14129,
+ 20000, 25677, 19024, 9146, 6921, 4506, -5868, -13122,
+ -7858, -1885, -7042, -14025, -11903, -8647, -12346, -12396,
+ 0, 12396, 12346, 8647, 11903, 14024, 7042, 1886,
+ 7858, 13121, 5868, -4505, -6921, -9147, -19024, -25676,
+ -20000, -14130, -20206, -29129, -30033, -30771, 26410, 21495,
+ 29394, -27260, -29264, 32658, -27209, -20258, -20148, -16315,
+
+ // 2nd Harmonic
+ 0, 20148, 27209, 29264, -29394, -26410, 30033, 20206,
+ 20000, 19024, 6921, -5868, -7858, -7042, -11903, -12346,
+ 0, 12346, 11903, 7042, 7858, 5868, -6921, -19024,
+ -20000, -20206, -30033, 26410, 29394, -29264, -27209, -20148,
+ 0, 20148, 27209, 29264, -29394, -26410, 30033, 20206,
+ 20000, 19024, 6921, -5868, -7858, -7042, -11903, -12346,
+ 0, 12346, 11903, 7042, 7858, 5868, -6921, -19024,
+ -20000, -20206, -30033, 26410, 29394, -29264, -27209, -20148,
+
+ // 4th Harmonic
+ 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
+ 0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
+ 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
+ 0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
+ 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
+ 0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
+ 0, 27209, -29394, 30033, 20000, 6921, -7858, -11903,
+ 0, 11903, 7858, -6921, -20000, -30033, 29394, -27209,
+
+ // 8th Harmonic
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+ 0, -29394, 20000, -7858, 0, 7858, -20000, 29394,
+};
+
+// Pulse Wave (duty cycle = 12.5%)
+s16 gEighthPulseWaveSample[] = {
+ // 1st Harmonic
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+
+ // 2nd Harmonic
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, 0, 0, 0, 0, 0, 0,
+
+ // 4th Harmonic
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 0, 0, -32767, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 0, 0, -32767, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 0, 0, -32767, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 0, 0, -32767, 0, 0, 0,
+
+ // 8th Harmonic
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+};
+
+// Pulse Wave (duty cycle = 25%)
+s16 gQuarterPulseWaveSample[] = {
+ // 1st Harmonic
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767, -32767, -32767, -32767, -32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+
+ // 2nd Harmonic
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -32767, -32767, -32767, -32767, 0, 0, 0, 0,
+
+ // 4th Harmonic
+ 0, 0, 0, 0, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, -32767, -32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, -32767, -32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, -32767, -32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, -32767, -32767, 0, 0,
+
+ // 8th Harmonic
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+ 0, 0, 32767, 0, 0, 0, -32767, 0,
+};
+// clang-format on
+
+s16* gWaveSamples[] = {
+ gSawtoothWaveSample, gTriangleWaveSample, gSineWaveSample, gSquareWaveSample, gWhiteNoiseSample,
+ D_801D4790, gEighthPulseWaveSample, gQuarterPulseWaveSample, gQuarterPulseWaveSample,
+};
+
+f32 gBendPitchOneOctaveFrequencies[] = {
+ 0.5f, 0.5f, 0.502736f, 0.505488f, 0.508254f, 0.511036f, 0.513833f, 0.516645f, 0.519472f, 0.522315f,
+ 0.525174f, 0.528048f, 0.530938f, 0.533843f, 0.536765f, 0.539702f, 0.542656f, 0.545626f, 0.548612f, 0.551614f,
+ 0.554633f, 0.557669f, 0.560721f, 0.563789f, 0.566875f, 0.569977f, 0.573097f, 0.576233f, 0.579387f, 0.582558f,
+ 0.585746f, 0.588951f, 0.592175f, 0.595415f, 0.598674f, 0.60195f, 0.605245f, 0.608557f, 0.611888f, 0.615236f,
+ 0.618603f, 0.621989f, 0.625393f, 0.628815f, 0.632257f, 0.635717f, 0.639196f, 0.642694f, 0.646212f, 0.649748f,
+ 0.653304f, 0.65688f, 0.660475f, 0.664089f, 0.667724f, 0.671378f, 0.675052f, 0.678747f, 0.682461f, 0.686196f,
+ 0.689952f, 0.693727f, 0.697524f, 0.701341f, 0.70518f, 0.709039f, 0.712919f, 0.716821f, 0.720744f, 0.724689f,
+ 0.728655f, 0.732642f, 0.736652f, 0.740684f, 0.744737f, 0.748813f, 0.752911f, 0.757031f, 0.761175f, 0.76534f,
+ 0.769529f, 0.77374f, 0.777975f, 0.782232f, 0.786513f, 0.790818f, 0.795146f, 0.799497f, 0.803873f, 0.808272f,
+ 0.812696f, 0.817144f, 0.821616f, 0.826112f, 0.830633f, 0.835179f, 0.83975f, 0.844346f, 0.848966f, 0.853613f,
+ 0.858284f, 0.862982f, 0.867704f, 0.872453f, 0.877228f, 0.882029f, 0.886856f, 0.891709f, 0.89659f, 0.901496f,
+ 0.90643f, 0.911391f, 0.916379f, 0.921394f, 0.926436f, 0.931507f, 0.936604f, 0.94173f, 0.946884f, 0.952066f,
+ 0.957277f, 0.962516f, 0.967783f, 0.97308f, 0.978405f, 0.98376f, 0.989144f, 0.994557f, 1.0f, 1.005473f,
+ 1.010975f, 1.016508f, 1.022071f, 1.027665f, 1.033289f, 1.038944f, 1.04463f, 1.050347f, 1.056095f, 1.061875f,
+ 1.067687f, 1.07353f, 1.079405f, 1.085312f, 1.091252f, 1.097224f, 1.103229f, 1.109267f, 1.115337f, 1.121441f,
+ 1.127579f, 1.13375f, 1.139955f, 1.146193f, 1.152466f, 1.158773f, 1.165115f, 1.171491f, 1.177903f, 1.184349f,
+ 1.190831f, 1.197348f, 1.203901f, 1.210489f, 1.217114f, 1.223775f, 1.230473f, 1.237207f, 1.243978f, 1.250786f,
+ 1.257631f, 1.264514f, 1.271434f, 1.278392f, 1.285389f, 1.292423f, 1.299497f, 1.306608f, 1.313759f, 1.320949f,
+ 1.328178f, 1.335447f, 1.342756f, 1.350104f, 1.357493f, 1.364922f, 1.372392f, 1.379903f, 1.387455f, 1.395048f,
+ 1.402683f, 1.41036f, 1.418078f, 1.425839f, 1.433642f, 1.441488f, 1.449377f, 1.457309f, 1.465285f, 1.473304f,
+ 1.481367f, 1.489474f, 1.497626f, 1.505822f, 1.514063f, 1.522349f, 1.530681f, 1.539058f, 1.547481f, 1.55595f,
+ 1.564465f, 1.573027f, 1.581636f, 1.590292f, 1.598995f, 1.607746f, 1.616545f, 1.625392f, 1.634287f, 1.643231f,
+ 1.652224f, 1.661266f, 1.670358f, 1.6795f, 1.688691f, 1.697933f, 1.707225f, 1.716569f, 1.725963f, 1.735409f,
+ 1.744906f, 1.754456f, 1.764058f, 1.773712f, 1.783419f, 1.793179f, 1.802993f, 1.81286f, 1.822782f, 1.832757f,
+ 1.842788f, 1.852873f, 1.863013f, 1.873209f, 1.883461f, 1.893768f, 1.904132f, 1.914553f, 1.925031f, 1.935567f,
+ 1.946159f, 1.95681f, 1.96752f, 1.978287f, 1.989114f, 2.0f,
+};
+
+f32 gBendPitchTwoSemitonesFrequencies[] = {
+ 0.890899f, 0.890899f, 0.89171f, 0.892521f, 0.893333f, 0.894146f, 0.89496f, 0.895774f, 0.89659f, 0.897406f,
+ 0.898222f, 0.89904f, 0.899858f, 0.900677f, 0.901496f, 0.902317f, 0.903138f, 0.90396f, 0.904783f, 0.905606f,
+ 0.90643f, 0.907255f, 0.908081f, 0.908907f, 0.909734f, 0.910562f, 0.911391f, 0.91222f, 0.91305f, 0.913881f,
+ 0.914713f, 0.915545f, 0.916379f, 0.917213f, 0.918047f, 0.918883f, 0.919719f, 0.920556f, 0.921394f, 0.922232f,
+ 0.923072f, 0.923912f, 0.924752f, 0.925594f, 0.926436f, 0.927279f, 0.928123f, 0.928968f, 0.929813f, 0.93066f,
+ 0.931507f, 0.932354f, 0.933203f, 0.934052f, 0.934902f, 0.935753f, 0.936604f, 0.937457f, 0.93831f, 0.939164f,
+ 0.940019f, 0.940874f, 0.94173f, 0.942587f, 0.943445f, 0.944304f, 0.945163f, 0.946023f, 0.946884f, 0.947746f,
+ 0.948608f, 0.949472f, 0.950336f, 0.951201f, 0.952066f, 0.952933f, 0.9538f, 0.954668f, 0.955537f, 0.956406f,
+ 0.957277f, 0.958148f, 0.95902f, 0.959893f, 0.960766f, 0.961641f, 0.962516f, 0.963392f, 0.964268f, 0.965146f,
+ 0.966024f, 0.966903f, 0.967783f, 0.968664f, 0.969546f, 0.970428f, 0.971311f, 0.972195f, 0.97308f, 0.973965f,
+ 0.974852f, 0.975739f, 0.976627f, 0.977516f, 0.978405f, 0.979296f, 0.980187f, 0.981079f, 0.981972f, 0.982865f,
+ 0.98376f, 0.984655f, 0.985551f, 0.986448f, 0.987346f, 0.988244f, 0.989144f, 0.990044f, 0.990945f, 0.991847f,
+ 0.992749f, 0.993653f, 0.994557f, 0.995462f, 0.996368f, 0.997275f, 0.998182f, 0.999091f, 1.0f, 1.00091f,
+ 1.001821f, 1.002733f, 1.003645f, 1.004559f, 1.005473f, 1.006388f, 1.007304f, 1.00822f, 1.009138f, 1.010056f,
+ 1.010975f, 1.011896f, 1.012816f, 1.013738f, 1.014661f, 1.015584f, 1.016508f, 1.017433f, 1.018359f, 1.019286f,
+ 1.020214f, 1.021142f, 1.022071f, 1.023002f, 1.023933f, 1.024864f, 1.025797f, 1.026731f, 1.027665f, 1.0286f,
+ 1.029536f, 1.030473f, 1.031411f, 1.03235f, 1.033289f, 1.03423f, 1.035171f, 1.036113f, 1.037056f, 1.038f,
+ 1.038944f, 1.03989f, 1.040836f, 1.041783f, 1.042731f, 1.04368f, 1.04463f, 1.045581f, 1.046532f, 1.047485f,
+ 1.048438f, 1.049392f, 1.050347f, 1.051303f, 1.05226f, 1.053217f, 1.054176f, 1.055135f, 1.056095f, 1.057056f,
+ 1.058018f, 1.058981f, 1.059945f, 1.06091f, 1.061875f, 1.062842f, 1.063809f, 1.064777f, 1.065746f, 1.066716f,
+ 1.067687f, 1.068658f, 1.069631f, 1.070604f, 1.071578f, 1.072554f, 1.07353f, 1.074507f, 1.075485f, 1.076463f,
+ 1.077443f, 1.078424f, 1.079405f, 1.080387f, 1.08137f, 1.082355f, 1.08334f, 1.084325f, 1.085312f, 1.0863f,
+ 1.087289f, 1.088278f, 1.089268f, 1.09026f, 1.091252f, 1.092245f, 1.093239f, 1.094234f, 1.09523f, 1.096226f,
+ 1.097224f, 1.098223f, 1.099222f, 1.100222f, 1.101224f, 1.102226f, 1.103229f, 1.104233f, 1.105238f, 1.106244f,
+ 1.10725f, 1.108258f, 1.109267f, 1.110276f, 1.111287f, 1.112298f, 1.11331f, 1.114323f, 1.115337f, 1.116352f,
+ 1.117368f, 1.118385f, 1.119403f, 1.120422f, 1.121441f, 1.122462f,
+};
+
+f32 gPitchFrequencies[] = {
+ /* 0x00 */ 0.105112f, // PITCH_A0
+ /* 0x01 */ 0.111362f, // PITCH_BFLAT0
+ /* 0x02 */ 0.117984f, // PITCH_B0
+ /* 0x03 */ 0.125f, // PITCH_C1
+ /* 0x04 */ 0.132433f, // PITCH_DFLAT1
+ /* 0x05 */ 0.140308f, // PITCH_D1
+ /* 0x06 */ 0.148651f, // PITCH_EFLAT1
+ /* 0x07 */ 0.15749f, // PITCH_E1
+ /* 0x08 */ 0.166855f, // PITCH_F1
+ /* 0x09 */ 0.176777f, // PITCH_GFLAT1
+ /* 0x0A */ 0.187288f, // PITCH_G1
+ /* 0x0B */ 0.198425f, // PITCH_AFLAT1
+ /* 0x0C */ 0.210224f, // PITCH_A1
+ /* 0x0D */ 0.222725f, // PITCH_BFLAT1
+ /* 0x0E */ 0.235969f, // PITCH_B1
+ /* 0x0F */ 0.25f, // PITCH_C2
+ /* 0x10 */ 0.264866f, // PITCH_DFLAT2
+ /* 0x11 */ 0.280616f, // PITCH_D2
+ /* 0x12 */ 0.297302f, // PITCH_EFLAT2
+ /* 0x13 */ 0.31498f, // PITCH_E2
+ /* 0x14 */ 0.33371f, // PITCH_F2
+ /* 0x15 */ 0.353553f, // PITCH_GFLAT2
+ /* 0x16 */ 0.374577f, // PITCH_G2
+ /* 0x17 */ 0.39685f, // PITCH_AFLAT2
+ /* 0x18 */ 0.420448f, // PITCH_A2
+ /* 0x19 */ 0.445449f, // PITCH_BFLAT2
+ /* 0x1A */ 0.471937f, // PITCH_B2
+ /* 0x1B */ 0.5f, // PITCH_C3
+ /* 0x1C */ 0.529732f, // PITCH_DFLAT3
+ /* 0x1D */ 0.561231f, // PITCH_D3
+ /* 0x1E */ 0.594604f, // PITCH_EFLAT3
+ /* 0x1F */ 0.629961f, // PITCH_E3
+ /* 0x20 */ 0.66742f, // PITCH_F3
+ /* 0x21 */ 0.707107f, // PITCH_GFLAT3
+ /* 0x22 */ 0.749154f, // PITCH_G3
+ /* 0x23 */ 0.793701f, // PITCH_AFLAT3
+ /* 0x24 */ 0.840897f, // PITCH_A3
+ /* 0x25 */ 0.890899f, // PITCH_BFLAT3
+ /* 0x26 */ 0.943875f, // PITCH_B3
+ /* 0x27 */ 1.0f, // PITCH_C4 (Middle C)
+ /* 0x28 */ 1.059463f, // PITCH_DFLAT4
+ /* 0x29 */ 1.122462f, // PITCH_D4
+ /* 0x2A */ 1.189207f, // PITCH_EFLAT4
+ /* 0x2B */ 1.259921f, // PITCH_E4
+ /* 0x2C */ 1.33484f, // PITCH_F4
+ /* 0x2D */ 1.414214f, // PITCH_GFLAT4
+ /* 0x2E */ 1.498307f, // PITCH_G4
+ /* 0x2F */ 1.587401f, // PITCH_AFLAT4
+ /* 0x30 */ 1.681793f, // PITCH_A4
+ /* 0x31 */ 1.781798f, // PITCH_BFLAT4
+ /* 0x32 */ 1.887749f, // PITCH_B4
+ /* 0x33 */ 2.0f, // PITCH_C5
+ /* 0x34 */ 2.118926f, // PITCH_DFLAT5
+ /* 0x35 */ 2.244924f, // PITCH_D5
+ /* 0x36 */ 2.378414f, // PITCH_EFLAT5
+ /* 0x37 */ 2.519842f, // PITCH_E5
+ /* 0x38 */ 2.66968f, // PITCH_F5
+ /* 0x39 */ 2.828428f, // PITCH_GFLAT5
+ /* 0x3A */ 2.996615f, // PITCH_G5
+ /* 0x3B */ 3.174803f, // PITCH_AFLAT5
+ /* 0x3C */ 3.363586f, // PITCH_A5
+ /* 0x3D */ 3.563596f, // PITCH_BFLAT5
+ /* 0x3E */ 3.775498f, // PITCH_B5
+ /* 0x3F */ 4.0f, // PITCH_C6
+ /* 0x40 */ 4.237853f, // PITCH_DFLAT6
+ /* 0x41 */ 4.489849f, // PITCH_D6
+ /* 0x42 */ 4.756829f, // PITCH_EFLAT6
+ /* 0x43 */ 5.039685f, // PITCH_E6
+ /* 0x44 */ 5.33936f, // PITCH_F6
+ /* 0x45 */ 5.656855f, // PITCH_GFLAT6
+ /* 0x46 */ 5.993229f, // PITCH_G6
+ /* 0x47 */ 6.349606f, // PITCH_AFLAT6
+ /* 0x48 */ 6.727173f, // PITCH_A6
+ /* 0x49 */ 7.127192f, // PITCH_BFLAT6
+ /* 0x4A */ 7.550996f, // PITCH_B6
+ /* 0x4B */ 8.0f, // PITCH_C7
+ /* 0x4C */ 8.475705f, // PITCH_DFLAT7
+ /* 0x4D */ 8.979697f, // PITCH_D7
+ /* 0x4E */ 9.513658f, // PITCH_EFLAT7
+ /* 0x4F */ 10.07937f, // PITCH_E7
+ /* 0x50 */ 10.6787205f, // PITCH_F7
+ /* 0x51 */ 11.31371f, // PITCH_GFLAT7
+ /* 0x52 */ 11.986459f, // PITCH_G7
+ /* 0x53 */ 12.699211f, // PITCH_AFLAT7
+ /* 0x54 */ 13.454346f, // PITCH_A7
+ /* 0x55 */ 14.254383f, // PITCH_BFLAT7
+ /* 0x56 */ 15.101993f, // PITCH_B7
+ /* 0x57 */ 16.0f, // PITCH_C8
+ /* 0x58 */ 16.95141f, // PITCH_DFLAT8
+ /* 0x59 */ 17.959395f, // PITCH_D8
+ /* 0x5A */ 19.027315f, // PITCH_EFLAT8
+ /* 0x5B */ 20.15874f, // PITCH_E8
+ /* 0x5C */ 21.35744f, // PITCH_F8
+ /* 0x5D */ 22.62742f, // PITCH_GFLAT8
+ /* 0x5E */ 23.972918f, // PITCH_G8
+ /* 0x5F */ 25.398422f, // PITCH_AFLAT8
+ /* 0x60 */ 26.908691f, // PITCH_A8
+ /* 0x61 */ 28.508766f, // PITCH_BFLAT8
+ /* 0x62 */ 30.203985f, // PITCH_B8
+ /* 0x63 */ 32.0f, // PITCH_C9
+ /* 0x64 */ 33.90282f, // PITCH_DFLAT9
+ /* 0x65 */ 35.91879f, // PITCH_D9
+ /* 0x66 */ 38.05463f, // PITCH_EFLAT9
+ /* 0x67 */ 40.31748f, // PITCH_E9
+ /* 0x68 */ 42.71488f, // PITCH_F9
+ /* 0x69 */ 45.25484f, // PITCH_GFLAT9
+ /* 0x6A */ 47.945835f, // PITCH_G9
+ /* 0x6B */ 50.796845f, // PITCH_AFLAT9
+ /* 0x6C */ 53.817383f, // PITCH_A9
+ /* 0x6D */ 57.017532f, // PITCH_BFLAT9
+ /* 0x6E */ 60.40797f, // PITCH_B9
+ /* 0x6F */ 64.0f, // PITCH_C10
+ /* 0x70 */ 67.80564f, // PITCH_DFLAT10
+ /* 0x71 */ 71.83758f, // PITCH_D10
+ /* 0x72 */ 76.10926f, // PITCH_EFLAT10
+ /* 0x73 */ 80.63496f, // PITCH_E10
+ /* 0x74 */ 85.42976f, // PITCH_F10
+ /* 0x75 */ 0.055681f, // PITCH_BFLATNEG1
+ /* 0x76 */ 0.058992f, // PITCH_BNEG1
+ /* 0x77 */ 0.0625f, // PITCH_C0
+ /* 0x78 */ 0.066216f, // PITCH_DFLAT0
+ /* 0x79 */ 0.070154f, // PITCH_D0
+ /* 0x7A */ 0.074325f, // PITCH_EFLAT0
+ /* 0x7B */ 0.078745f, // PITCH_E0
+ /* 0x7C */ 0.083427f, // PITCH_F0
+ /* 0x7D */ 0.088388f, // PITCH_GFLAT0
+ /* 0x7E */ 0.093644f, // PITCH_G0
+ /* 0x7F */ 0.099213f, // PITCH_AFLAT0
+};
+
+u8 gDefaultShortNoteVelocityTable[] = {
+ 12, 25, 38, 51, 57, 64, 71, 76, 83, 89, 96, 102, 109, 115, 121, 127,
+};
+
+u8 gDefaultShortNoteGateTimeTable[] = {
+ 229, 203, 177, 151, 139, 126, 113, 100, 87, 74, 61, 48, 36, 23, 10, 0,
+};
+
+AdsrEnvelope gDefaultEnvelope[] = {
+ { 1, 32000 },
+ { 1000, 32000 },
+ { -1, 0 },
+ { 0, 0 },
+};
+
+NoteSubEu gZeroNoteSub = { 0 };
+
+NoteSubEu gDefaultNoteSub = {
+ { 1, 1, 0, 0, 0, 0, 0, 0 }, { 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+u16 gHeadsetPanQuantization[64] = {
+ 60, 58, 56, 54, 52, 50, 48, 46, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18,
+ 16, 14, 12, 10, 8, 6, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+s32 D_801D58A4 = 0;
+
+// clang-format off
+s16 D_801D58A8[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 500, 0, 0, 0, 0,
+ 0, 0, 0, 500, 0, 0, 0, 0,
+ 0, 0, 0, 500, 0, 0, 0, 0,
+ 0, 0, 0, 500, 0, 0, 0, 0,
+};
+// clang-format on
+
+f32 gHeadsetPanVolume[] = {
+ 1.0f, 0.995386f, 0.990772f, 0.986157f, 0.981543f, 0.976929f, 0.972315f, 0.967701f, 0.963087f, 0.958472f,
+ 0.953858f, 0.949244f, 0.94463f, 0.940016f, 0.935402f, 0.930787f, 0.926173f, 0.921559f, 0.916945f, 0.912331f,
+ 0.907717f, 0.903102f, 0.898488f, 0.893874f, 0.88926f, 0.884646f, 0.880031f, 0.875417f, 0.870803f, 0.866189f,
+ 0.861575f, 0.856961f, 0.852346f, 0.847732f, 0.843118f, 0.838504f, 0.83389f, 0.829276f, 0.824661f, 0.820047f,
+ 0.815433f, 0.810819f, 0.806205f, 0.801591f, 0.796976f, 0.792362f, 0.787748f, 0.783134f, 0.77852f, 0.773906f,
+ 0.769291f, 0.764677f, 0.760063f, 0.755449f, 0.750835f, 0.74622f, 0.741606f, 0.736992f, 0.732378f, 0.727764f,
+ 0.72315f, 0.718535f, 0.713921f, 0.709307f, 0.70537f, 0.70211f, 0.69885f, 0.695591f, 0.692331f, 0.689071f,
+ 0.685811f, 0.682551f, 0.679291f, 0.676031f, 0.672772f, 0.669512f, 0.666252f, 0.662992f, 0.659732f, 0.656472f,
+ 0.653213f, 0.649953f, 0.646693f, 0.643433f, 0.640173f, 0.636913f, 0.633654f, 0.630394f, 0.627134f, 0.623874f,
+ 0.620614f, 0.617354f, 0.614094f, 0.610835f, 0.607575f, 0.604315f, 0.601055f, 0.597795f, 0.594535f, 0.591276f,
+ 0.588016f, 0.584756f, 0.581496f, 0.578236f, 0.574976f, 0.571717f, 0.568457f, 0.565197f, 0.561937f, 0.558677f,
+ 0.555417f, 0.552157f, 0.548898f, 0.545638f, 0.542378f, 0.539118f, 0.535858f, 0.532598f, 0.529339f, 0.526079f,
+ 0.522819f, 0.519559f, 0.516299f, 0.513039f, 0.50978f, 0.50652f, 0.50326f, 0.5f,
+};
+
+f32 gStereoPanVolume[] = {
+ 0.707f, 0.716228f, 0.725457f, 0.734685f, 0.743913f, 0.753142f, 0.76237f, 0.771598f, 0.780827f, 0.790055f,
+ 0.799283f, 0.808512f, 0.81774f, 0.826968f, 0.836197f, 0.845425f, 0.854654f, 0.863882f, 0.87311f, 0.882339f,
+ 0.891567f, 0.900795f, 0.910024f, 0.919252f, 0.92848f, 0.937709f, 0.946937f, 0.956165f, 0.965394f, 0.974622f,
+ 0.98385f, 0.993079f, 0.997693f, 0.988465f, 0.979236f, 0.970008f, 0.960779f, 0.951551f, 0.942323f, 0.933095f,
+ 0.923866f, 0.914638f, 0.905409f, 0.896181f, 0.886953f, 0.877724f, 0.868496f, 0.859268f, 0.850039f, 0.840811f,
+ 0.831583f, 0.822354f, 0.813126f, 0.803898f, 0.794669f, 0.785441f, 0.776213f, 0.766984f, 0.757756f, 0.748528f,
+ 0.739299f, 0.730071f, 0.720843f, 0.711614f, 0.695866f, 0.673598f, 0.651331f, 0.629063f, 0.606795f, 0.584528f,
+ 0.56226f, 0.539992f, 0.517724f, 0.495457f, 0.473189f, 0.450921f, 0.428654f, 0.406386f, 0.384118f, 0.36185f,
+ 0.339583f, 0.317315f, 0.295047f, 0.27278f, 0.250512f, 0.228244f, 0.205976f, 0.183709f, 0.161441f, 0.139173f,
+ 0.116905f, 0.094638f, 0.07237f, 0.050102f, 0.027835f, 0.005567f, 0.00835f, 0.019484f, 0.030618f, 0.041752f,
+ 0.052886f, 0.06402f, 0.075154f, 0.086287f, 0.097421f, 0.108555f, 0.119689f, 0.130823f, 0.141957f, 0.153091f,
+ 0.164224f, 0.175358f, 0.186492f, 0.197626f, 0.20876f, 0.219894f, 0.231028f, 0.242161f, 0.253295f, 0.264429f,
+ 0.275563f, 0.286697f, 0.297831f, 0.308965f, 0.320098f, 0.331232f, 0.342366f, 0.3535f,
+};
+
+f32 gDefaultPanVolume[] = {
+ 1.0f, 0.999924f, 0.999694f, 0.999312f, 0.998776f, 0.998088f, 0.997248f, 0.996254f, 0.995109f, 0.993811f,
+ 0.992361f, 0.990759f, 0.989006f, 0.987101f, 0.985045f, 0.982839f, 0.980482f, 0.977976f, 0.97532f, 0.972514f,
+ 0.96956f, 0.966457f, 0.963207f, 0.959809f, 0.956265f, 0.952574f, 0.948737f, 0.944755f, 0.940629f, 0.936359f,
+ 0.931946f, 0.92739f, 0.922692f, 0.917853f, 0.912873f, 0.907754f, 0.902497f, 0.897101f, 0.891567f, 0.885898f,
+ 0.880093f, 0.874153f, 0.868079f, 0.861873f, 0.855535f, 0.849066f, 0.842467f, 0.835739f, 0.828884f, 0.821901f,
+ 0.814793f, 0.807561f, 0.800204f, 0.792725f, 0.785125f, 0.777405f, 0.769566f, 0.76161f, 0.753536f, 0.745348f,
+ 0.737045f, 0.72863f, 0.720103f, 0.711466f, 0.70272f, 0.693867f, 0.684908f, 0.675843f, 0.666676f, 0.657406f,
+ 0.648036f, 0.638567f, 0.629f, 0.619337f, 0.609579f, 0.599728f, 0.589785f, 0.579752f, 0.56963f, 0.559421f,
+ 0.549126f, 0.538748f, 0.528287f, 0.517745f, 0.507124f, 0.496425f, 0.485651f, 0.474802f, 0.46388f, 0.452888f,
+ 0.441826f, 0.430697f, 0.419502f, 0.408243f, 0.396921f, 0.385538f, 0.374097f, 0.362598f, 0.351044f, 0.339436f,
+ 0.327776f, 0.316066f, 0.304308f, 0.292503f, 0.280653f, 0.268761f, 0.256827f, 0.244854f, 0.232844f, 0.220798f,
+ 0.208718f, 0.196606f, 0.184465f, 0.172295f, 0.160098f, 0.147877f, 0.135634f, 0.12337f, 0.111087f, 0.098786f,
+ 0.086471f, 0.074143f, 0.061803f, 0.049454f, 0.037097f, 0.024734f, 0.012368f, 0.0f,
+};
+
+// clang-format off
+s16 D_801D5F24[8 * (2 + 3 + 3)] = {
+ // floor(sin(i * M_PI / 16) * (2^15 - 1))
+ 0, 6392, 12539, 18204, 23169, 27244, 30272, 32137,
+ 32767, 32137, 30272, 27244, 23169, 18204, 12539, 6392,
+ // -floor(sin(i * M_PI / 32) * (2^15 - 1))
+ 0, -3211, -6392, -9511, -12539, -15446, -18204, -20787,
+ -23169, -25329, -27244, -28897, -30272, -31356, -32137, -32609,
+ -32767, -32609, -32137, -31356, -30272, -28897, -27244, -25329,
+ // -floor(sin(i * M_PI / 32) * (2^15 - 1))
+ -23169, -25329, -27244, -28897, -30272, -31356, -32137, -32609,
+ -32767, -32609, -32137, -31356, -30272, -28897, -27244, -25329,
+ -23169, -20787, -18204, -15446, -12539, -9511, -6392, -3211,
+};
+// clang-format on
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index bfb33e2e1..648f05556 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -1,6 +1,7 @@
#include "global.h"
+#include "interface/parameter_static/parameter_static.h"
-// Bit Flag array in which gBitFlags[n] is literally (1 << n)
+// Bit Flag array in which gBitFlags[n] is (1 << n)
u32 gBitFlags[] = {
(1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6), (1 << 7),
(1 << 8), (1 << 9), (1 << 10), (1 << 11), (1 << 12), (1 << 13), (1 << 14), (1 << 15),
@@ -8,164 +9,225 @@ u32 gBitFlags[] = {
(1 << 24), (1 << 25), (1 << 26), (1 << 27), (1 << 28), (1 << 29), (1 << 30), (1 << 31),
};
-u16 gEquipMasks[] = { 0x000F, 0x00F0, 0x0F00, 0xF000 };
-u16 gEquipNegMasks[] = { 0xFFF0, 0xFF0F, 0xF0FF, 0x0FFF };
+// four-bit masks
+u16 gEquipMasks[] = {
+ 0xF << 0, // Sword
+ 0xF << 4, // Shield
+ 0xF << 8, // Unused (Tunic)
+ 0xF << 12, // Unused (Boots)
+};
+
+// four-bit masks
+u16 gEquipNegMasks[] = {
+ ~(0xF << 0), // Sword
+ ~(0xF << 4), // Shield
+ ~(0xF << 8), // Unused (Tunic)
+ (u16) ~(0xF << 12), // Unused (Boots)
+};
+
+// 3 = two bit masks
+// 7 = three bit masks
u32 gUpgradeMasks[] = {
- 0x00000007, 0x00000038, 0x000001C0, 0x00000E00, 0x00003000, 0x0001C000, 0x000E0000, 0x00700000,
+ 7 << 0, // Quivers
+ 7 << 3, // Bomb Bags
+ 7 << 6, // Unused (Strength)
+ 7 << 9, // Unused (Scale)
+ 3 << 12, // Wallets
+ 7 << 14, // Unused (Deku Seed Bullet Bags)
+ 7 << 17, // Unused (Deku Stick)
+ 7 << 20, // Unused (Deku Nut)
};
+
+// 3 = two-bit masks
+// 7 = three-bit masks
u32 gUpgradeNegMasks[] = {
- 0xFFFFFFF8, 0xFFFFFFC7, 0xFFFFFE3F, 0xFFFFF1FF, 0xFFFFCFFF, 0xFFFE3FFF, 0xFFF1FFFF, 0xFF8FFFFF,
+ ~(7 << 0), // Quivers
+ ~(7 << 3), // Bomb Bags
+ ~(7 << 6), // Unused (Strength)
+ ~(7 << 9), // Unused (Scale)
+ ~(3 << 12), // Wallets
+ ~(7 << 14), // Unused (Deku Seed Bullet Bags)
+ ~(7 << 17), // Unused (Deku Stick)
+ ~(7 << 20), // Unused (Deku Nut)
+};
+
+u8 gEquipShifts[] = {
+ 0, // Sword
+ 4, // Shield
+ 8, // Unused (Tunic)
+ 12, // Unused (Boots)
+};
+
+u8 gUpgradeShifts[] = {
+ 0, // Quivers
+ 3, // Bomb Bags
+ 6, // Unused (Strength)
+ 9, // Unused (Scale)
+ 12, // Wallets
+ 14, // Unused (Deku Seed Bullet Bags)
+ 17, // Unused (Deku Stick)
+ 20, // Unused (Deku Nut)
};
-u8 gEquipShifts[] = { 0, 4, 8, 12 };
-u8 gUpgradeShifts[] = { 0, 3, 6, 9, 12, 14, 17, 20 };
u16 gUpgradeCapacities[][4] = {
{ 0, 30, 40, 50 }, // Quivers
{ 0, 20, 30, 40 }, // Bomb Bags
- { 0, 0, 0, 0 }, // Unused (Scale)
{ 0, 0, 0, 0 }, // Unused (Strength)
+ { 0, 0, 0, 0 }, // Unused (Scale)
{ 99, 200, 500, 500 }, // Wallets
{ 0, 30, 40, 50 }, // Unused (Deku Seed Bullet Bags)
{ 0, 10, 20, 30 }, // Unused (Deku Stick)
{ 0, 20, 30, 40 }, // Unused (Deku Nut)
};
-u32 gGsFlagsMask[] = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 };
-u32 gGsFlagsShift[] = { 0, 8, 16, 24 };
+// eight-bit masks
+u32 gGsFlagsMask[] = {
+ 0xFF << 0,
+ 0xFF << 8,
+ 0xFF << 16,
+ 0xFF << 24,
+};
+
+u32 gGsFlagsShift[] = {
+ 0,
+ 8,
+ 16,
+ 24,
+};
// TODO: use symbols for these icon textures once textures are properly in C
void* gItemIcons[] = {
- 0x08000000, // ITEM_OCARINA
- 0x08001000, // ITEM_BOW
- 0x08002000, // ITEM_ARROW_FIRE
- 0x08003000, // ITEM_ARROW_ICE
- 0x08004000, // ITEM_ARROW_LIGHT
- 0x08005000, // ITEM_OCARINA_FAIRY
- 0x08006000, // ITEM_BOMB
- 0x08007000, // ITEM_BOMBCHU
- 0x08008000, // ITEM_STICK
- 0x08009000, // ITEM_NUT
- 0x0800A000, // ITEM_BEAN
- 0x0800B000, // ITEM_SLINGSHOT
- 0x0800C000, // ITEM_POWDER_KEG
- 0x0800D000, // ITEM_PICTO_BOX
- 0x0800E000, // ITEM_LENS
- 0x0800F000, // ITEM_HOOKSHOT
- 0x08010000, // ITEM_SWORD_GREAT_FAIRY
- 0x08011000, // ITEM_LONGSHOT
- 0x08012000, // ITEM_BOTTLE
- 0x08013000, // ITEM_POTION_RED
- 0x08014000, // ITEM_POTION_GREEN
- 0x08015000, // ITEM_POTION_BLUE
- 0x08016000, // ITEM_FAIRY
- 0x08017000, // ITEM_DEKU_PRINCESS
- 0x08018000, // ITEM_MILK_BOTTLE
- 0x08019000, // ITEM_MILK_HALF
- 0x0801A000, // ITEM_FISH
- 0x0801B000, // ITEM_BUG
- 0x0801C000, // ITEM_BLUE_FIRE
- 0x0801D000, // ITEM_POE
- 0x0801E000, // ITEM_BIG_POE
- 0x0801F000, // ITEM_SPRING_WATER
- 0x08020000, // ITEM_HOT_SPRING_WATER
- 0x08021000, // ITEM_ZORA_EGG
- 0x08022000, // ITEM_GOLD_DUST
- 0x08023000, // ITEM_MUSHROOM
- 0x08024000, // ITEM_SEA_HORSE
- 0x08025000, // ITEM_CHATEAU
- 0x08026000, // ITEM_HYLIAN_LOACH
- 0x08027000, // ITEM_OBABA_DRINK
- 0x08028000, // ITEM_MOON_TEAR
- 0x08029000, // ITEM_DEED_LAND
- 0x0802A000, // ITEM_DEED_SWAMP
- 0x0802B000, // ITEM_DEED_MOUNTAIN
- 0x0802C000, // ITEM_DEED_OCEAN
- 0x0802D000, // ITEM_ROOM_KEY
- 0x0802E000, // ITEM_LETTER_MAMA
- 0x0802F000, // ITEM_LETTER_TO_KAFEI
- 0x08030000, // ITEM_PENDANT_MEMORIES
- 0x08031000, // ITEM_TINGLE_MAP
- 0x08032000, // ITEM_MASK_DEKU
- 0x08033000, // ITEM_MASK_GORON
- 0x08034000, // ITEM_MASK_ZORA
- 0x08035000, // ITEM_MASK_FIERCE_DEITY
- 0x08036000, // ITEM_MASK_TRUTH
- 0x08037000, // ITEM_MASK_KAFEIS_MASK
- 0x08038000, // ITEM_MASK_ALL_NIGHT
- 0x08039000, // ITEM_MASK_BUNNY
- 0x0803A000, // ITEM_MASK_KEATON
- 0x0803B000, // ITEM_MASK_GARO
- 0x0803C000, // ITEM_MASK_ROMANI
- 0x0803D000, // ITEM_MASK_CIRCUS_LEADER
- 0x0803E000, // ITEM_MASK_POSTMAN
- 0x0803F000, // ITEM_MASK_COUPLE
- 0x08040000, // ITEM_MASK_GREAT_FAIRY
- 0x08041000, // ITEM_MASK_GIBDO
- 0x08042000, // ITEM_MASK_DON_GERO
- 0x08043000, // ITEM_MASK_KAMARO
- 0x08044000, // ITEM_MASK_CAPTAIN
- 0x08045000, // ITEM_MASK_STONE
- 0x08046000, // ITEM_MASK_BREMEN
- 0x08047000, // ITEM_MASK_BLAST
- 0x08048000, // ITEM_MASK_SCENTS
- 0x08049000, // ITEM_MASK_GIANT
- 0x0804A000, // ITEM_BOW_ARROW_FIRE
- 0x0804B000, // ITEM_BOW_ARROW_ICE
- 0x0804C000, // ITEM_BOW_ARROW_LIGHT
- 0x0804D000, // ITEM_SWORD_KOKIRI
- 0x0804E000, // ITEM_SWORD_RAZOR
- 0x0804F000, // ITEM_SWORD_GILDED
- 0x08050000, // ITEM_SWORD_DEITY
- 0x08051000, // ITEM_SHIELD_HERO
- 0x08052000, // ITEM_SHIELD_MIRROR
- 0x08053000, // ITEM_QUIVER_30
- 0x08054000, // ITEM_QUIVER_40
- 0x08055000, // ITEM_QUIVER_50
- 0x08056000, // ITEM_BOMB_BAG_20
- 0x08057000, // ITEM_BOMB_BAG_30
- 0x08058000, // ITEM_BOMB_BAG_40
- 0x08059000, // ITEM_WALLET_DEFAULT
- 0x0805A000, // ITEM_WALLET_ADULT
- 0x0805B000, // ITEM_WALLET_GIANT
- 0x0805C000, // ITEM_FISHING_POLE
- 0x0805D000, // ITEM_REMAINS_ODOLWA
- 0x0805E000, // ITEM_REMAINS_GOHT
- 0x0805F000, // ITEM_REMAINS_GYORG
- 0x08060000, // ITEM_REMAINS_TWINMOLD
- 0x08062000, // ITEM_SONG_SONATA
- 0x08062000, // ITEM_SONG_LULLABY
- 0x08062000, // ITEM_SONG_NOVA
- 0x08062000, // ITEM_SONG_ELEGY
- 0x08062000, // ITEM_SONG_OATH
- 0x08062000, // ITEM_SONG_SARIA
- 0x08062000, // ITEM_SONG_TIME
- 0x08062000, // ITEM_SONG_HEALING
- 0x08062000, // ITEM_SONG_EPONA
- 0x08062000, // ITEM_SONG_SOARING
- 0x08062000, // ITEM_SONG_STORMS
- 0x08062000, // ITEM_SONG_SUN
- 0x08061000, // ITEM_BOMBERS_NOTEBOOK
- 0x09000000, // ITEM_SKULL_TOKEN
- 0x09000900, // ITEM_HEART_CONTAINER
- 0x09001200, // ITEM_HEART_PIECE
- 0x08062000, //
- 0x08062000, //
- 0x08062000, // ITEM_SONG_LULLABY_INTRO
- 0x09003600, // ITEM_KEY_BOSS
- 0x09004800, // ITEM_COMPASS
- 0x09003F00, // ITEM_DUNGEON_MAP
- 0x09005100, // ITEM_STRAY_FAIRIES
- 0x09005A00, // ITEM_KEY_SMALL
- 0x09006300, // ITEM_MAGIC_SMALL
- 0x09006C00, // ITEM_MAGIC_LARGE
- 0x08062180, // ITEM_HEART_PIECE_2
- 0x08062A80, // ITEM_INVALID_1
- 0x08063380, // ITEM_INVALID_2
- 0x020028A0, // ITEM_INVALID_3
- 0x020025A0, // ITEM_INVALID_4
- 0x020027A0, // ITEM_INVALID_5
- 0x020026A0, // ITEM_INVALID_6
- 0x020024A0, // ITEM_INVALID_7
+ 0x08000000, // ITEM_OCARINA
+ 0x08001000, // ITEM_BOW
+ 0x08002000, // ITEM_ARROW_FIRE
+ 0x08003000, // ITEM_ARROW_ICE
+ 0x08004000, // ITEM_ARROW_LIGHT
+ 0x08005000, // ITEM_OCARINA_FAIRY
+ 0x08006000, // ITEM_BOMB
+ 0x08007000, // ITEM_BOMBCHU
+ 0x08008000, // ITEM_STICK
+ 0x08009000, // ITEM_NUT
+ 0x0800A000, // ITEM_MAGIC_BEANS
+ 0x0800B000, // ITEM_SLINGSHOT
+ 0x0800C000, // ITEM_POWDER_KEG
+ 0x0800D000, // ITEM_PICTO_BOX
+ 0x0800E000, // ITEM_LENS
+ 0x0800F000, // ITEM_HOOKSHOT
+ 0x08010000, // ITEM_SWORD_GREAT_FAIRY
+ 0x08011000, // ITEM_LONGSHOT
+ 0x08012000, // ITEM_BOTTLE
+ 0x08013000, // ITEM_POTION_RED
+ 0x08014000, // ITEM_POTION_GREEN
+ 0x08015000, // ITEM_POTION_BLUE
+ 0x08016000, // ITEM_FAIRY
+ 0x08017000, // ITEM_DEKU_PRINCESS
+ 0x08018000, // ITEM_MILK_BOTTLE
+ 0x08019000, // ITEM_MILK_HALF
+ 0x0801A000, // ITEM_FISH
+ 0x0801B000, // ITEM_BUG
+ 0x0801C000, // ITEM_BLUE_FIRE
+ 0x0801D000, // ITEM_POE
+ 0x0801E000, // ITEM_BIG_POE
+ 0x0801F000, // ITEM_SPRING_WATER
+ 0x08020000, // ITEM_HOT_SPRING_WATER
+ 0x08021000, // ITEM_ZORA_EGG
+ 0x08022000, // ITEM_GOLD_DUST
+ 0x08023000, // ITEM_MUSHROOM
+ 0x08024000, // ITEM_SEA_HORSE
+ 0x08025000, // ITEM_CHATEAU
+ 0x08026000, // ITEM_HYLIAN_LOACH
+ 0x08027000, // ITEM_OBABA_DRINK
+ 0x08028000, // ITEM_MOON_TEAR
+ 0x08029000, // ITEM_DEED_LAND
+ 0x0802A000, // ITEM_DEED_SWAMP
+ 0x0802B000, // ITEM_DEED_MOUNTAIN
+ 0x0802C000, // ITEM_DEED_OCEAN
+ 0x0802D000, // ITEM_ROOM_KEY
+ 0x0802E000, // ITEM_LETTER_MAMA
+ 0x0802F000, // ITEM_LETTER_TO_KAFEI
+ 0x08030000, // ITEM_PENDANT_MEMORIES
+ 0x08031000, // ITEM_TINGLE_MAP
+ 0x08032000, // ITEM_MASK_DEKU
+ 0x08033000, // ITEM_MASK_GORON
+ 0x08034000, // ITEM_MASK_ZORA
+ 0x08035000, // ITEM_MASK_FIERCE_DEITY
+ 0x08036000, // ITEM_MASK_TRUTH
+ 0x08037000, // ITEM_MASK_KAFEIS_MASK
+ 0x08038000, // ITEM_MASK_ALL_NIGHT
+ 0x08039000, // ITEM_MASK_BUNNY
+ 0x0803A000, // ITEM_MASK_KEATON
+ 0x0803B000, // ITEM_MASK_GARO
+ 0x0803C000, // ITEM_MASK_ROMANI
+ 0x0803D000, // ITEM_MASK_CIRCUS_LEADER
+ 0x0803E000, // ITEM_MASK_POSTMAN
+ 0x0803F000, // ITEM_MASK_COUPLE
+ 0x08040000, // ITEM_MASK_GREAT_FAIRY
+ 0x08041000, // ITEM_MASK_GIBDO
+ 0x08042000, // ITEM_MASK_DON_GERO
+ 0x08043000, // ITEM_MASK_KAMARO
+ 0x08044000, // ITEM_MASK_CAPTAIN
+ 0x08045000, // ITEM_MASK_STONE
+ 0x08046000, // ITEM_MASK_BREMEN
+ 0x08047000, // ITEM_MASK_BLAST
+ 0x08048000, // ITEM_MASK_SCENTS
+ 0x08049000, // ITEM_MASK_GIANT
+ 0x0804A000, // ITEM_BOW_ARROW_FIRE
+ 0x0804B000, // ITEM_BOW_ARROW_ICE
+ 0x0804C000, // ITEM_BOW_ARROW_LIGHT
+ 0x0804D000, // ITEM_SWORD_KOKIRI
+ 0x0804E000, // ITEM_SWORD_RAZOR
+ 0x0804F000, // ITEM_SWORD_GILDED
+ 0x08050000, // ITEM_SWORD_DEITY
+ 0x08051000, // ITEM_SHIELD_HERO
+ 0x08052000, // ITEM_SHIELD_MIRROR
+ 0x08053000, // ITEM_QUIVER_30
+ 0x08054000, // ITEM_QUIVER_40
+ 0x08055000, // ITEM_QUIVER_50
+ 0x08056000, // ITEM_BOMB_BAG_20
+ 0x08057000, // ITEM_BOMB_BAG_30
+ 0x08058000, // ITEM_BOMB_BAG_40
+ 0x08059000, // ITEM_WALLET_DEFAULT
+ 0x0805A000, // ITEM_WALLET_ADULT
+ 0x0805B000, // ITEM_WALLET_GIANT
+ 0x0805C000, // ITEM_FISHING_POLE
+ 0x0805D000, // ITEM_REMAINS_ODOLWA
+ 0x0805E000, // ITEM_REMAINS_GOHT
+ 0x0805F000, // ITEM_REMAINS_GYORG
+ 0x08060000, // ITEM_REMAINS_TWINMOLD
+ 0x08062000, // ITEM_SONG_SONATA
+ 0x08062000, // ITEM_SONG_LULLABY
+ 0x08062000, // ITEM_SONG_NOVA
+ 0x08062000, // ITEM_SONG_ELEGY
+ 0x08062000, // ITEM_SONG_OATH
+ 0x08062000, // ITEM_SONG_SARIA
+ 0x08062000, // ITEM_SONG_TIME
+ 0x08062000, // ITEM_SONG_HEALING
+ 0x08062000, // ITEM_SONG_EPONA
+ 0x08062000, // ITEM_SONG_SOARING
+ 0x08062000, // ITEM_SONG_STORMS
+ 0x08062000, // ITEM_SONG_SUN
+ 0x08061000, // ITEM_BOMBERS_NOTEBOOK
+ 0x09000000, // ITEM_SKULL_TOKEN
+ 0x09000900, // ITEM_HEART_CONTAINER
+ 0x09001200, // ITEM_HEART_PIECE
+ 0x08062000, //
+ 0x08062000, //
+ 0x08062000, // ITEM_SONG_LULLABY_INTRO
+ 0x09003600, // ITEM_KEY_BOSS
+ 0x09004800, // ITEM_COMPASS
+ 0x09003F00, // ITEM_DUNGEON_MAP
+ 0x09005100, // ITEM_STRAY_FAIRIES
+ 0x09005A00, // ITEM_KEY_SMALL
+ 0x09006300, // ITEM_MAGIC_SMALL
+ 0x09006C00, // ITEM_MAGIC_LARGE
+ 0x08062180, // ITEM_HEART_PIECE_2
+ 0x08062A80, // ITEM_INVALID_1
+ 0x08063380, // ITEM_INVALID_2
+ gOcarinaCUpTex, // ITEM_INVALID_3
+ gOcarinaCDownTex, // ITEM_INVALID_4
+ gOcarinaCLeftTex, // ITEM_INVALID_5
+ gOcarinaCRightTex, // ITEM_INVALID_6
+ gOcarinaATex, // ITEM_INVALID_7
};
// Used to map item IDs to inventory slots
@@ -412,7 +474,7 @@ u16 gScenesPerRegion[11][27] = {
},
};
-s32 func_8012EC80(GlobalContext* globalCtx) {
+s32 Inventory_GetBtnBItem(GlobalContext* globalCtx) {
if (gSaveContext.buttonStatus[0] == BTN_DISABLED) {
return ITEM_NONE;
} else if (gSaveContext.unk_1015 == ITEM_NONE) {
@@ -429,96 +491,190 @@ s32 func_8012EC80(GlobalContext* globalCtx) {
}
}
-void func_8012ED34(s16 equipment);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012ED34.s")
+/**
+ * Only changes shield
+ */
+void Inventory_ChangeEquipment(s16 value) {
+ SET_EQUIP_VALUE(EQUIP_SHIELD, value);
+}
-u8 func_8012ED78(GlobalContext* globalCtx, s16 equipment);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012ED78.s")
+/**
+ * Only deletes shield, equipment argument unused and is a remnant of OoT
+ */
+u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) {
+ Player* player = GET_PLAYER(globalCtx);
-void Inventory_ChangeUpgrade(s16 arg0, u32 arg1);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/Inventory_ChangeUpgrade.s")
+ if (CUR_EQUIP_VALUE_VOID(EQUIP_SHIELD) != 0) {
+ SET_EQUIP_VALUE(EQUIP_SHIELD, 0);
+ Player_SetEquipmentData(globalCtx, player);
+ return true;
+ }
-s32 func_8012EE34(s16 arg0) {
- s16 num = 0;
+ return false;
+}
- if (arg0 >= 0x20) {
- if (arg0 < 0x40) {
- num = 1;
- } else if (arg0 < 0x60) {
- num = 2;
- } else if (arg0 < 0x80) {
- num = 3;
- } else if (arg0 < 0xA0) {
- num = 4;
- } else if (arg0 < 0xC0) {
- num = 5;
- } else if (arg0 < 0xE0) {
- num = 6;
+void Inventory_ChangeUpgrade(s16 upgrade, u32 value) {
+ u32 upgrades = gSaveContext.save.inventory.upgrades;
+
+ upgrades &= gUpgradeNegMasks[upgrade];
+ upgrades |= value << gUpgradeShifts[upgrade];
+
+ gSaveContext.save.inventory.upgrades = upgrades;
+}
+
+s32 Inventory_IsMapVisible(s16 sceneNum) {
+ s16 index = 0;
+
+ /**
+ * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum,
+ * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible,
+ * 224 bits were allocated to this although there are only 112 scenes
+ */
+ if (sceneNum >= 0x20) {
+ if (sceneNum < 0x40) {
+ index = 1;
+ } else if (sceneNum < 0x60) {
+ index = 2;
+ } else if (sceneNum < 0x80) {
+ index = 3;
+ } else if (sceneNum < 0xA0) {
+ index = 4;
+ } else if (sceneNum < 0xC0) {
+ index = 5;
+ } else if (sceneNum < 0xE0) {
+ index = 6;
}
}
- if (gSaveContext.save.roomInf[125][num] & gBitFlags[arg0 - (num << 5)]) {
- return 1;
+ if (gSaveContext.save.scenesVisible[index] & gBitFlags[sceneNum - (index << 5)]) {
+ return true;
}
- return 0;
+ return false;
}
-static u16 D_801C2380[6][12] = {
- { SCENE_00KEIKOKU, SCENE_BOTI, SCENE_13HUBUKINOMITI, SCENE_24KEMONOMITI, SCENE_IKANAMAE, SCENE_TOWN, SCENE_ICHIBA,
- SCENE_BACKTOWN, SCENE_CLOCKTOWER, SCENE_ALLEY, -1 },
- { SCENE_20SICHITAI, SCENE_20SICHITAI2, SCENE_21MITURINMAE, SCENE_22DEKUCITY, SCENE_DEKU_KING, SCENE_KINSTA1, -1 },
- { SCENE_10YUKIYAMANOMURA, SCENE_10YUKIYAMANOMURA2, SCENE_11GORONNOSATO, SCENE_11GORONNOSATO2, SCENE_16GORON_HOUSE,
- SCENE_12HAKUGINMAE, SCENE_14YUKIDAMANOMITI, SCENE_GORONRACE, SCENE_17SETUGEN, SCENE_17SETUGEN2, -1 },
- { SCENE_F01, SCENE_ROMANYMAE, SCENE_OMOYA, SCENE_F01C, SCENE_F01_B, SCENE_KOEPONARACE, -1 },
- { SCENE_30GYOSON, SCENE_SINKAI, SCENE_31MISAKI, SCENE_TORIDE, SCENE_KAIZOKU, SCENE_33ZORACITY, SCENE_35TAKI, -1 },
- { SCENE_F40, SCENE_F41, SCENE_CASTLE, SCENE_IKANA, SCENE_REDEAD, -1 },
+static u16 sScenesPerTingleMap[6][12] = {
+ {
+ // Clock Town Tingle Map
+ SCENE_00KEIKOKU,
+ SCENE_BOTI,
+ SCENE_13HUBUKINOMITI,
+ SCENE_24KEMONOMITI,
+ SCENE_IKANAMAE,
+ SCENE_TOWN,
+ SCENE_ICHIBA,
+ SCENE_BACKTOWN,
+ SCENE_CLOCKTOWER,
+ SCENE_ALLEY,
+ -1,
+ },
+ {
+ // Woodfall Tingle Map
+ SCENE_20SICHITAI,
+ SCENE_20SICHITAI2,
+ SCENE_21MITURINMAE,
+ SCENE_22DEKUCITY,
+ SCENE_DEKU_KING,
+ SCENE_KINSTA1,
+ -1,
+ },
+ {
+ // Snowhead Tingle Map
+ SCENE_10YUKIYAMANOMURA,
+ SCENE_10YUKIYAMANOMURA2,
+ SCENE_11GORONNOSATO,
+ SCENE_11GORONNOSATO2,
+ SCENE_16GORON_HOUSE,
+ SCENE_12HAKUGINMAE,
+ SCENE_14YUKIDAMANOMITI,
+ SCENE_GORONRACE,
+ SCENE_17SETUGEN,
+ SCENE_17SETUGEN2,
+ -1,
+ },
+ {
+ // Romani Ranch Tingle Map
+ SCENE_F01,
+ SCENE_ROMANYMAE,
+ SCENE_OMOYA,
+ SCENE_F01C,
+ SCENE_F01_B,
+ SCENE_KOEPONARACE,
+ -1,
+ },
+ {
+ // Great Bay Tingle Map
+ SCENE_30GYOSON,
+ SCENE_SINKAI,
+ SCENE_31MISAKI,
+ SCENE_TORIDE,
+ SCENE_KAIZOKU,
+ SCENE_33ZORACITY,
+ SCENE_35TAKI,
+ -1,
+ },
+ {
+ // Stone Tower Tingle Map
+ SCENE_F40,
+ SCENE_F41,
+ SCENE_CASTLE,
+ SCENE_IKANA,
+ SCENE_REDEAD,
+ -1,
+ },
};
-void func_8012EF0C(s16 arg0) {
- s16 phi_v0 = 0;
- s16 phi_v1 = 0;
- u16(*new_var)[] = &D_801C2380[arg0];
+/**
+ * Map visibility is achieved by purchasing a tingle map
+ */
+void Inventory_SetMapVisibility(s16 tingleIndex) {
+ s16 i = 0;
+ s16 index = 0;
+ u16(*tingleMapSceneIndices)[] = &sScenesPerTingleMap[tingleIndex];
- if ((arg0 >= 0) && (arg0 < 6)) {
+ if ((tingleIndex >= 0) && (tingleIndex < 6)) {
while (true) {
- if ((*new_var)[phi_v0] == 0xFFFF) {
+ if ((*tingleMapSceneIndices)[i] == 0xFFFF) {
break;
}
- if (((s16)(*new_var)[phi_v0]) < 0x20) {
- phi_v1 = 0;
- } else if (((s16)(*new_var)[phi_v0]) < 0x40) {
- phi_v1 = 1;
- } else if (((s16)(*new_var)[phi_v0]) < 0x60) {
- phi_v1 = 2;
- } else if (((s16)(*new_var)[phi_v0]) < 0x80) {
- phi_v1 = 3;
- } else if (((s16)(*new_var)[phi_v0]) < 0xA0) {
- phi_v1 = 4;
- } else if (((s16)(*new_var)[phi_v0]) < 0xC0) {
- phi_v1 = 5;
- } else if (((s16)(*new_var)[phi_v0]) < 0xE0) {
- phi_v1 = 6;
+ /**
+ * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum,
+ * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible,
+ * 224 bits were allocated to this although there are only 112 scenes
+ */
+ if (((s16)(*tingleMapSceneIndices)[i]) < 0x20) {
+ index = 0;
+ } else if (((s16)(*tingleMapSceneIndices)[i]) < 0x40) {
+ index = 1;
+ } else if (((s16)(*tingleMapSceneIndices)[i]) < 0x60) {
+ index = 2;
+ } else if (((s16)(*tingleMapSceneIndices)[i]) < 0x80) {
+ index = 3;
+ } else if (((s16)(*tingleMapSceneIndices)[i]) < 0xA0) {
+ index = 4;
+ } else if (((s16)(*tingleMapSceneIndices)[i]) < 0xC0) {
+ index = 5;
+ } else if (((s16)(*tingleMapSceneIndices)[i]) < 0xE0) {
+ index = 6;
}
- // Required to match
- gSaveContext.save.roomInf[125][phi_v1] =
- gSaveContext.save.roomInf[125][phi_v1] | gBitFlags[(s16)(*new_var)[phi_v0] - (phi_v1 << 5)];
- phi_v0++;
+ gSaveContext.save.scenesVisible[index] =
+ gSaveContext.save.scenesVisible[index] | gBitFlags[(s16)(*tingleMapSceneIndices)[i] - (index << 5)];
+ i++;
}
- if ((*new_var) == D_801C2380[0]) {
+ if ((*tingleMapSceneIndices) == sScenesPerTingleMap[0]) {
gSaveContext.save.mapsVisible |= 3;
- } else if ((*new_var) == D_801C2380[1]) {
+ } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[1]) {
gSaveContext.save.mapsVisible |= 0x1C;
- } else if ((*new_var) == D_801C2380[2]) {
+ } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[2]) {
gSaveContext.save.mapsVisible |= 0xE0;
- } else if ((*new_var) == D_801C2380[3]) {
+ } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[3]) {
gSaveContext.save.mapsVisible |= 0x100;
- } else if ((*new_var) == D_801C2380[4]) {
+ } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[4]) {
gSaveContext.save.mapsVisible |= 0x1E00;
- } else if ((*new_var) == D_801C2380[5]) {
+ } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[5]) {
gSaveContext.save.mapsVisible |= 0x6000;
}
}
@@ -526,32 +682,46 @@ void func_8012EF0C(s16 arg0) {
XREG(95) = 0;
}
-void func_8012F0EC(s16 arg0);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012F0EC.s")
+/**
+ * Also stores the players filename into dekuPlaygroundPlayerName
+ */
+void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) {
+ s16 i;
-#ifdef NON_MATCHING
-// regalloc
-void func_8012F1BC(s16 sceneIndex) {
- if (sceneIndex == SCENE_KINSTA1) {
- gSaveContext.save.roomInf[126][0] = ((((gSaveContext.save.roomInf[126][0] & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
- (gSaveContext.save.roomInf[126][0] & 0xFFFF);
- } else {
- gSaveContext.save.roomInf[126][0] =
- ((gSaveContext.save.roomInf[126][0] + 1) & 0xFFFF) | (gSaveContext.save.roomInf[126][0] & 0xFFFF0000);
- }
-}
-#else
-void func_8012F1BC(s16 arg0);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012F1BC.s")
-#endif
+ gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.unk_3DE0[timerId];
-s16 func_8012F22C(s16 sceneIndex) {
- if (sceneIndex == SCENE_KINSTA1) {
- return (gSaveContext.save.roomInf[126][0] & 0xFFFF0000) >> 0x10;
- } else {
- return gSaveContext.save.roomInf[126][0] & 0xFFFF;
+ for (i = 0; i < 8; i++) {
+ gSaveContext.save.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = gSaveContext.save.playerData.playerName[i];
}
}
-void func_8012F278(GlobalContext* globalCtx);
-#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012F278.s")
+void Inventory_IncrementSkullTokenCount(s16 sceneIndex) {
+ if (sceneIndex == SCENE_KINSTA1) {
+ // Swamp Spider House (increment high bits of skullTokenCount)
+ gSaveContext.save.skullTokenCount = ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
+ (gSaveContext.save.skullTokenCount & 0xFFFF);
+ } else {
+ // Ocean Spider House (increment low bits of skullTokenCount)
+ gSaveContext.save.skullTokenCount =
+ (((u16)gSaveContext.save.skullTokenCount + 1) & 0xFFFF) | (gSaveContext.save.skullTokenCount & 0xFFFF0000);
+ }
+}
+
+s16 Inventory_GetSkullTokenCount(s16 sceneIndex) {
+ if (sceneIndex == SCENE_KINSTA1) {
+ // Swamp Spider House
+ return (gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10;
+ } else {
+ // Ocean Spider House
+ return gSaveContext.save.skullTokenCount & 0xFFFF;
+ }
+}
+
+void Inventory_SaveLotteryCodeGuess(GlobalContext* globalCtx) {
+ u16 lotteryCodeGuess;
+
+ lotteryCodeGuess = ((globalCtx->msgCtx.unk12054 & 0xF) << 8); // First Digit
+ lotteryCodeGuess |= ((globalCtx->msgCtx.unk12056 & 0xF) << 4); // Second Digit
+ lotteryCodeGuess |= (globalCtx->msgCtx.unk12058 & 0xF); // Third Digit
+ gSaveContext.save.lotteryCodeGuess = (gSaveContext.save.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF);
+}
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index c27a9b2c2..d9bb32bd3 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "interface/parameter_static/parameter_static.h"
static s16 sHeartsPrimColors[3][3] = { { 255, 70, 50 }, { 255, 190, 0 }, { 100, 100, 255 } };
static s16 sHeartsEnvColors[3][3] = { { 50, 40, 60 }, { 255, 0, 0 }, { 0, 0, 255 } };
@@ -14,24 +15,21 @@ s16 sBeatingHeartsDDEnv[3];
s16 sHeartsDDPrim[2][3];
s16 sHeartsDDEnv[2][3];
-extern TexturePtr D_02000000; // Empty heart texture
-extern TexturePtr D_02000100; // Quarter Heart Texture
-extern TexturePtr D_02000200; // Half Heart Texture
-extern TexturePtr D_02000300; // Three Quarter Heart Texture
-extern TexturePtr D_02000400; // Full heart texture
-extern TexturePtr D_02000500; // Empty Double Defense Heart texture
-extern TexturePtr D_02000600; // Quarter Double Defense Heart Texture
-extern TexturePtr D_02000700; // Half Double Defense Heart Texture
-extern TexturePtr D_02000800; // Three Quarter Double Defense Heart Texture
-extern TexturePtr D_02000900; // Full Double Defense Heart texture
+TexturePtr HeartTextures[] = {
+ gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex,
+ gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex,
+ gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex,
+ gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex,
+};
-TexturePtr HeartTextures[] = { &D_02000400, &D_02000100, &D_02000100, &D_02000100, &D_02000100, &D_02000100,
- &D_02000200, &D_02000200, &D_02000200, &D_02000200, &D_02000200, &D_02000300,
- &D_02000300, &D_02000300, &D_02000300, &D_02000300 };
-
-TexturePtr HeartDDTextures[] = { &D_02000900, &D_02000600, &D_02000600, &D_02000600, &D_02000600, &D_02000600,
- &D_02000700, &D_02000700, &D_02000700, &D_02000700, &D_02000700, &D_02000800,
- &D_02000800, &D_02000800, &D_02000800, &D_02000800 };
+TexturePtr HeartDDTextures[] = {
+ gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex,
+ gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex,
+ gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex,
+ gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartThreeQuarterTex,
+ gDefenseHeartThreeQuarterTex, gDefenseHeartThreeQuarterTex, gDefenseHeartThreeQuarterTex,
+ gDefenseHeartThreeQuarterTex,
+};
void LifeMeter_Init(GlobalContext* globalCtx) {
InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx;
@@ -276,11 +274,11 @@ void LifeMeter_Draw(GlobalContext* globalCtx) {
}
if (i < fullHeartCount) {
- heartTex = &D_02000400;
+ heartTex = gHeartFullTex;
} else if (i == fullHeartCount) {
heartTex = HeartTextures[fractionHeartCount];
} else {
- heartTex = &D_02000000;
+ heartTex = gHeartEmptyTex;
}
} else {
if (i < fullHeartCount) {
@@ -316,11 +314,11 @@ void LifeMeter_Draw(GlobalContext* globalCtx) {
gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[1][0], sHeartsDDEnv[1][1], sHeartsDDEnv[1][2], 255);
}
if (i < fullHeartCount) {
- heartTex = &D_02000900;
+ heartTex = gDefenseHeartFullTex;
} else if (i == fullHeartCount) {
heartTex = HeartDDTextures[fractionHeartCount];
} else {
- heartTex = &D_02000500;
+ heartTex = gDefenseHeartEmptyTex;
}
}
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index dd6db1a54..c959c4b9a 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -603,11 +603,11 @@ void Interface_NewDay(GlobalContext* globalCtx, s32 day) {
// i is used to store sceneId
for (i = 0; i < 120; i++) {
- gSaveContext.save.roomInf[i][0] = gSaveContext.cycleSceneFlags[i].chest;
- gSaveContext.save.roomInf[i][1] = gSaveContext.cycleSceneFlags[i].swch0;
- gSaveContext.save.roomInf[i][2] = gSaveContext.cycleSceneFlags[i].swch1;
- gSaveContext.save.roomInf[i][3] = gSaveContext.cycleSceneFlags[i].clearedRoom;
- gSaveContext.save.roomInf[i][4] = gSaveContext.cycleSceneFlags[i].collectible;
+ gSaveContext.cycleSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest;
+ gSaveContext.cycleSceneFlags[i].swch0 = gSaveContext.cycleSceneFlags[i].swch0;
+ gSaveContext.cycleSceneFlags[i].swch1 = gSaveContext.cycleSceneFlags[i].swch1;
+ gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom;
+ gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible;
}
}
@@ -2493,8 +2493,8 @@ void Interface_DrawClock(GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx);
if (REG(15) != 0) {
- if ((msgCtx->unk11F22 == 0) || ((globalCtx->actorCtx.unk5 & 2) && !func_801690CC(globalCtx)) ||
- (msgCtx->unk11F22 == 0) || ((msgCtx->unk11F04 >= 0x100) && (msgCtx->unk11F04 <= 0x200)) ||
+ if ((msgCtx->msgMode == 0) || ((globalCtx->actorCtx.unk5 & 2) && !func_801690CC(globalCtx)) ||
+ (msgCtx->msgMode == 0) || ((msgCtx->unk11F04 >= 0x100) && (msgCtx->unk11F04 <= 0x200)) ||
(gSaveContext.gameMode == 3)) {
if (FrameAdvance_IsEnabled(globalCtx) == 0) {
if (func_800FE4A8() == 0) {
@@ -3919,7 +3919,7 @@ void Interface_Update(GlobalContext* globalCtx) {
interfaceCtx->unk_218 = -15700.0f;
interfaceCtx->unk_210 = 2;
- if ((msgCtx->unk11F22 != 0) && (msgCtx->unk12006 == 0x26)) {
+ if ((msgCtx->msgMode != 0) && (msgCtx->unk12006 == 0x26)) {
gGameInfo->data[0x55F] = -14;
} else {
gGameInfo->data[0x55F] = 0;
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 2c04addf8..7ee7c130e 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -113,7 +113,7 @@ void func_801229FC(Player* player) {
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123C58.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123C90.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123D50.s")
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 46c627982..5675fc074 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -411,14 +411,17 @@ void Scene_HeaderCmdTimeSettings(GlobalContext* globalCtx, SceneCmd* cmd) {
if (globalCtx->envCtx.timeIncrement == 0 && gSaveContext.save.cutscene < 0xFFF0) {
gSaveContext.environmentTime = gSaveContext.save.time;
- if (gSaveContext.environmentTime >= 0x2AAA && gSaveContext.environmentTime < 0x4555) {
- gSaveContext.environmentTime = 0x3555;
- } else if (gSaveContext.environmentTime >= 0x4555 && gSaveContext.environmentTime < 0x5555) {
- gSaveContext.environmentTime = 0x5555;
- } else if (gSaveContext.environmentTime >= 0xAAAA && gSaveContext.environmentTime < 0xB555) {
- gSaveContext.environmentTime = 0xB555;
- } else if (gSaveContext.environmentTime >= 0xC000 && gSaveContext.environmentTime < 0xCAAA) {
- gSaveContext.environmentTime = 0xCAAA;
+ if (gSaveContext.environmentTime >= CLOCK_TIME(4, 0) && gSaveContext.environmentTime < CLOCK_TIME(6, 30)) {
+ gSaveContext.environmentTime = CLOCK_TIME(5, 0);
+ } else if (gSaveContext.environmentTime >= CLOCK_TIME(6, 30) &&
+ gSaveContext.environmentTime < CLOCK_TIME(8, 0)) {
+ gSaveContext.environmentTime = CLOCK_TIME(8, 0);
+ } else if (gSaveContext.environmentTime >= CLOCK_TIME(16, 0) &&
+ gSaveContext.environmentTime < CLOCK_TIME(17, 0)) {
+ gSaveContext.environmentTime = CLOCK_TIME(17, 0);
+ } else if (gSaveContext.environmentTime >= CLOCK_TIME(18, 0) &&
+ gSaveContext.environmentTime < CLOCK_TIME(19, 0)) {
+ gSaveContext.environmentTime = CLOCK_TIME(19, 0);
}
}
}
diff --git a/src/code/z_snap.c b/src/code/z_snap.c
index ee5f852f5..4eb327921 100644
--- a/src/code/z_snap.c
+++ b/src/code/z_snap.c
@@ -12,8 +12,8 @@ s32 func_8013A240(GlobalContext* globalCtx) {
s32 seen;
s32 count = 0;
- gSaveContext.save.roomInf[123][3] = 0;
- gSaveContext.save.roomInf[123][4] = 0;
+ gSaveContext.save.pictoFlags0 = 0;
+ gSaveContext.save.pictoFlags1 = 0;
if (globalCtx->sceneNum == SCENE_20SICHITAI) {
func_8013A41C(1);
@@ -76,19 +76,19 @@ s32 func_8013A240(GlobalContext* globalCtx) {
void func_8013A41C(s32 flag) {
if (flag < 0x20) {
- gSaveContext.save.roomInf[123][3] |= (1 << flag);
+ gSaveContext.save.pictoFlags0 |= (1 << flag);
} else {
flag &= 0x1F;
- gSaveContext.save.roomInf[123][4] |= (1 << flag);
+ gSaveContext.save.pictoFlags1 |= (1 << flag);
}
}
void func_8013A46C(s32 flag) {
if (flag < 0x20) {
- gSaveContext.save.roomInf[123][3] &= ~(1 << flag);
+ gSaveContext.save.pictoFlags0 &= ~(1 << flag);
} else {
flag &= 0x1F;
- gSaveContext.save.roomInf[123][4] &= ~(1 << flag);
+ gSaveContext.save.pictoFlags1 &= ~(1 << flag);
}
}
@@ -96,10 +96,10 @@ u32 func_8013A4C4(s32 flag) {
SaveContext* saveCtx = &gSaveContext;
if (flag < 0x20) {
- return saveCtx->save.roomInf[123][3] & (1 << flag);
+ return saveCtx->save.pictoFlags0 & (1 << flag);
} else {
flag &= 0x1F;
- return saveCtx->save.roomInf[123][4] & (1 << flag);
+ return saveCtx->save.pictoFlags1 & (1 << flag);
}
}
@@ -123,36 +123,36 @@ s32 func_8013A530(GlobalContext* globalCtx, Actor* actor, s32 flag, Vec3f* pos,
distance = OLib_Vec3fDist(pos, &camera->eye);
if ((distance < distanceMin) || (distanceMax < distance)) {
- func_8013A41C(0x3f);
- ret = 0x3f;
+ func_8013A41C(0x3F);
+ ret = 0x3F;
}
x = func_8013A504(func_800DFCB4(camera) + rot->x);
y = func_8013A504(func_800DFCDC(camera) - (s16)(rot->y - 0x7FFF));
if ((0 < angleError) && ((angleError < x) || (angleError < y))) {
- func_8013A41C(0x3e);
- ret |= 0x3e;
+ func_8013A41C(0x3E);
+ ret |= 0x3E;
}
Actor_GetProjectedPos(globalCtx, pos, &screenSpace, &distance);
x = (s16)(screenSpace.x * distance * 160.0f + 160.0f) - 85;
y = (s16)(screenSpace.y * distance * -120.0f + 120.0f) - 67;
if ((x < 0) || (0x96 < x) || (y < 0) || (0x69 < y)) {
- func_8013A41C(0x3d);
- ret |= 0x3d;
+ func_8013A41C(0x3D);
+ ret |= 0x3D;
}
if (BgCheck_ProjectileLineTest(&globalCtx->colCtx, pos, &camera->eye, &screenSpace, &poly, true, true, true, true,
&bgId)) {
- func_8013A41C(0x3c);
- ret |= 0x3c;
+ func_8013A41C(0x3C);
+ ret |= 0x3C;
}
actors[0] = actor;
actors[1] = &GET_PLAYER(globalCtx)->actor;
- if (CollisionCheck_LineOCCheck(globalCtx, &globalCtx->colChkCtx, pos, &camera->eye, actors, 2) != 0) {
- func_8013A41C(0x3b);
- ret |= 0x3b;
+ if (CollisionCheck_LineOCCheck(globalCtx, &globalCtx->colChkCtx, pos, &camera->eye, actors, 2)) {
+ func_8013A41C(0x3B);
+ ret |= 0x3B;
}
if (ret == 0) {
diff --git a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
index 2bea2f0ff..75002f17e 100644
--- a/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
+++ b/src/overlays/actors/ovl_Arrow_Ice/z_arrow_ice.c
@@ -178,7 +178,7 @@ void ArrowIce_Fly(ArrowIce* this, GlobalContext* globalCtx) {
void ArrowIce_Update(Actor* thisx, GlobalContext* globalCtx) {
ArrowIce* this = THIS;
- if ((globalCtx->msgCtx.unk11F22 == 0xE) || (globalCtx->msgCtx.unk11F22 == 0x12)) {
+ if ((globalCtx->msgCtx.msgMode == 0xE) || (globalCtx->msgCtx.msgMode == 0x12)) {
Actor_MarkForDeath(&this->actor);
return;
} else {
diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
index a3d109c91..4b94b31e2 100644
--- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
+++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c
@@ -1530,7 +1530,7 @@ void DmStk_Update(Actor* thisx, GlobalContext* globalCtx) {
break;
}
- if ((globalCtx->actorCtx.unk5 & 2) && (globalCtx->msgCtx.unk11F22 != 0) &&
+ if ((globalCtx->actorCtx.unk5 & 2) && (globalCtx->msgCtx.msgMode != 0) &&
(globalCtx->msgCtx.unk11F04 == 0x5E6) && !FrameAdvance_IsEnabled(globalCtx) &&
(globalCtx->sceneLoadFlag == 0) && (ActorCutscene_GetCurrentIndex() == -1) &&
(globalCtx->csCtx.state == 0)) {
diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
index e128fc945..0698b8a64 100644
--- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
+++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c
@@ -552,28 +552,27 @@ void func_808B9CE8(DoorWarp1* this, GlobalContext* globalCtx) {
switch (globalCtx->sceneNum) {
case SCENE_MITURIN_BS:
- gSaveContext.save.roomInf[126][3] = (((void)0, gSaveContext.save.roomInf[126][3]) & 0xFFFFFF00) |
- (((u8)gSaveContext.save.roomInf[126][4]) & 0xFF);
+ gSaveContext.save.unk_ECC[0] =
+ (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFFFFFF00) | (((u8)gSaveContext.save.unk_ECC[1]) & 0xFF);
break;
case SCENE_HAKUGIN_BS:
- gSaveContext.save.roomInf[126][3] = (((void)0, gSaveContext.save.roomInf[126][3]) & 0xFFFF00FF) |
- ((((u8)gSaveContext.save.roomInf[126][4]) & 0xFF) << 8);
+ gSaveContext.save.unk_ECC[0] =
+ (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFFFF00FF) | ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 8);
break;
case SCENE_INISIE_BS:
- gSaveContext.save.roomInf[126][3] = (((void)0, gSaveContext.save.roomInf[126][3]) & 0xFF00FFFF) |
- ((((u8)gSaveContext.save.roomInf[126][4]) & 0xFF) << 0x10);
+ gSaveContext.save.unk_ECC[0] =
+ (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFF00FFFF) | ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 0x10);
break;
case SCENE_SEA_BS:
- gSaveContext.save.roomInf[126][3] = (((void)0, gSaveContext.save.roomInf[126][3]) & 0x00FFFFFF) |
- ((((u8)gSaveContext.save.roomInf[126][4]) & 0xFF) << 0x18);
+ gSaveContext.save.unk_ECC[0] =
+ (((void)0, gSaveContext.save.unk_ECC[0]) & 0x00FFFFFF) | ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 0x18);
break;
}
- gSaveContext.save.roomInf[126][4] =
- (gSaveContext.save.roomInf[126][4] & 0xFFFFFF00) | ((((u8)gSaveContext.save.roomInf[126][4]) + 1) & 0xFF);
+ gSaveContext.save.unk_ECC[1] = (gSaveContext.save.unk_ECC[1] & 0xFFFFFF00) | ((((u8)gSaveContext.save.unk_ECC[1]) + 1) & 0xFF);
Item_Give(globalCtx, func_808B849C(this, globalCtx) + (ITEM_REMAINS_ODOLWA - 1));
DoorWarp1_SetupAction(this, func_808B9E94);
}
@@ -656,19 +655,19 @@ void func_808BA10C(DoorWarp1* this, GlobalContext* globalCtx) {
switch (phi_v0_2) {
case 0:
- phi_a0 = gSaveContext.save.roomInf[126][3] & 0xFF;
+ phi_a0 = gSaveContext.save.unk_ECC[0] & 0xFF;
break;
case 1:
- phi_a0 = (gSaveContext.save.roomInf[126][3] & 0xFF00) >> 8;
+ phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF00) >> 8;
break;
case 2:
- phi_a0 = (gSaveContext.save.roomInf[126][3] & 0xFF0000) >> 0x10;
+ phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF0000) >> 0x10;
break;
case 3:
- phi_a0 = (gSaveContext.save.roomInf[126][3] & 0xFF000000) >> 0x18;
+ phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF000000) >> 0x18;
break;
default:
diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
index 36791db1a..07353d3bd 100644
--- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
+++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c
@@ -414,7 +414,7 @@ void func_80BED3BC(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C &= ~0x1;
this->unk_32C |= 0x40;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -497,7 +497,7 @@ void func_80BED680(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -592,7 +592,7 @@ void func_80BED8A4(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -675,7 +675,7 @@ void func_80BEDB88(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -765,7 +765,7 @@ void func_80BEDDAC(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -843,7 +843,7 @@ void func_80BEE070(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x161A;
this->actionFunc = func_80BEF360;
@@ -926,7 +926,7 @@ void func_80BEE274(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x1629;
this->actionFunc = func_80BEF360;
@@ -1004,7 +1004,7 @@ void func_80BEE530(EnAkindonuts* this, GlobalContext* globalCtx) {
func_8019F208();
this->unk_32C |= 0x40;
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0x15EF;
this->actionFunc = func_80BEF360;
@@ -1235,7 +1235,7 @@ void func_80BEEFA8(EnAkindonuts* this, GlobalContext* globalCtx) {
if (func_80147624(globalCtx)) {
if (this->unk_32C & 1) {
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0;
this->actionFunc = func_80BEEE10;
@@ -1243,7 +1243,7 @@ void func_80BEEFA8(EnAkindonuts* this, GlobalContext* globalCtx) {
this->unk_32C &= ~0x20;
this->actor.flags &= ~1;
this->unk_32C &= ~0x4;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_338 = 8;
this->unk_33C = 0;
@@ -1275,7 +1275,7 @@ void func_80BEEFA8(EnAkindonuts* this, GlobalContext* globalCtx) {
void func_80BEF18C(EnAkindonuts* this, GlobalContext* globalCtx) {
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_33C = 0;
this->actionFunc = func_80BEEE10;
@@ -1302,7 +1302,7 @@ void func_80BEF20C(EnAkindonuts* this, GlobalContext* globalCtx) {
if ((sp27 == 5) && func_80147624(globalCtx)) {
if (this->unk_32C & 1) {
this->unk_32C &= ~0x1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_80BEF360;
} else {
diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c
index e973b7016..f906c073f 100644
--- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c
+++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c
@@ -394,7 +394,7 @@ void func_809C16DC(EnAob01* this, GlobalContext* globalCtx) {
this->unk_2D2 &= ~2;
Rupees_ChangeBy(-this->unk_434);
func_800B7298(globalCtx, NULL, 7);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_809C1C9C;
return;
@@ -455,7 +455,7 @@ void func_809C1D64(EnAob01* this, GlobalContext* globalCtx) {
}
}
} else if ((temp_v0 == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_210 = 0;
this->actionFunc = func_809C2060;
@@ -578,7 +578,7 @@ void func_809C21E0(EnAob01* this, GlobalContext* globalCtx) {
this->unk_2D2 &= ~0x40;
if (this->unk_2D2 & 0x10) {
this->unk_2D2 &= ~0x10;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_809C2060;
} else {
@@ -748,7 +748,7 @@ void func_809C2A64(EnAob01* this, GlobalContext* globalCtx) {
if (func_809C15BC(this)) {
if ((sp2F == 5) && func_80147624(globalCtx)) {
this->unk_434 = 0;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
}
diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
index 47d803e81..8cb9634a1 100644
--- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
+++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c
@@ -99,7 +99,7 @@ void func_809CCEE8(EnBji01* this, GlobalContext* globalCtx) {
}
}
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
- globalCtx->msgCtx.unk11F22 = 0;
+ globalCtx->msgCtx.msgMode = 0;
globalCtx->msgCtx.unk11F10 = 0;
func_809CD028(this, globalCtx);
} else {
diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c
index e04a3c98e..c15eac2a4 100644
--- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c
+++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c
@@ -323,7 +323,7 @@ void func_80A71C3C(EnDno* this, GlobalContext* globalCtx) {
}
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
- globalCtx->msgCtx.unk11F22 = 0;
+ globalCtx->msgCtx.msgMode = 0;
globalCtx->msgCtx.unk11F10 = 0;
func_80A71E54(this, globalCtx);
} else if (this->actor.xzDistToPlayer < 60.0f) {
@@ -419,7 +419,7 @@ void func_80A71F18(EnDno* this, GlobalContext* globalCtx) {
case 9:
if (func_80147624(globalCtx)) {
func_8013E1C8(&this->skelAnime, sAnimations, 10, &this->unk_32C);
- globalCtx->msgCtx.unk11F22 = 0x44;
+ globalCtx->msgCtx.msgMode = 0x44;
}
break;
@@ -602,7 +602,7 @@ void func_80A725F8(EnDno* this, GlobalContext* globalCtx) {
case 0x800:
case 0x801:
if (func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x44;
+ globalCtx->msgCtx.msgMode = 0x44;
this->unk_452 = 1;
this->unk_454 = 0.0f;
func_8013E1C8(&this->skelAnime, sAnimations, 8, &this->unk_32C);
diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
index 77365fefa..e6a928f00 100644
--- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
+++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c
@@ -833,7 +833,7 @@ void EnFishing_Init(Actor* thisx, GlobalContext* globalCtx2) {
if (sLinkAge != 1) {
// HIGH_SCORE(HS_FISHING) from OoT
- if (gSaveContext.save.roomInf[127][2] & 0x1000) {
+ if (gSaveContext.save.unk_EE4 & 0x1000) {
D_8090CD08 = 0;
} else {
D_8090CD08 = 1;
@@ -851,18 +851,18 @@ void EnFishing_Init(Actor* thisx, GlobalContext* globalCtx2) {
Audio_QueueSeqCmd(0x100100FF);
if (sLinkAge == 1) {
- if (gSaveContext.save.roomInf[127][2] & 0x7F) {
- D_809171CC = gSaveContext.save.roomInf[127][2] & 0x7F;
+ if (gSaveContext.save.unk_EE4 & 0x7F) {
+ D_809171CC = gSaveContext.save.unk_EE4 & 0x7F;
} else {
D_809171CC = 40.0f;
}
- } else if (gSaveContext.save.roomInf[127][2] & 0x7F000000) {
- D_809171CC = (gSaveContext.save.roomInf[127][2] & 0x7F000000) >> 0x18;
+ } else if (gSaveContext.save.unk_EE4 & 0x7F000000) {
+ D_809171CC = (gSaveContext.save.unk_EE4 & 0x7F000000) >> 0x18;
} else {
D_809171CC = 45.0f;
}
- D_809171D1 = (gSaveContext.save.roomInf[127][2] & 0xFF0000) >> 0x10;
+ D_809171D1 = (gSaveContext.save.unk_EE4 & 0xFF0000) >> 0x10;
if ((D_809171D1 & 7) == 7) {
globalCtx->roomCtx.unk7A[0] = 90;
D_809171CA = 1;
@@ -2812,8 +2812,8 @@ void func_80903C60(EnFishing* this, u8 arg1) {
void EnFishing_HandleAquariumDialog(EnFishing* this, GlobalContext* globalCtx) {
if (sLinkAge == 1) {
- if (gSaveContext.save.roomInf[127][2] & 0x7F) {
- if (gSaveContext.save.roomInf[127][2] & 0x80) {
+ if (gSaveContext.save.unk_EE4 & 0x7F) {
+ if (gSaveContext.save.unk_EE4 & 0x80) {
this->actor.textId = 0x40B1;
} else {
this->actor.textId = 0x4089;
@@ -2821,8 +2821,8 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, GlobalContext* globalCtx) {
} else {
this->actor.textId = 0x40AE;
}
- } else if (gSaveContext.save.roomInf[127][2] & 0x7F000000) {
- if (gSaveContext.save.roomInf[127][2] & 0x80000000) {
+ } else if (gSaveContext.save.unk_EE4 & 0x7F000000) {
+ if (gSaveContext.save.unk_EE4 & 0x80000000) {
this->actor.textId = 0x40B1;
} else {
this->actor.textId = 0x4089;
@@ -3762,8 +3762,8 @@ void EnFishing_UpdateFish(Actor* thisx, GlobalContext* globalCtx2) {
if ((D_80917272 == 0) && (D_80917274 == 0)) {
// Assignment of OoT's D_80B7E086 here removed in MM
- if (((sLinkAge == 1) && (gSaveContext.save.roomInf[127][2] & 0x400)) ||
- ((sLinkAge != 1) && (gSaveContext.save.roomInf[127][2] & 0x800))) {
+ if (((sLinkAge == 1) && (gSaveContext.save.unk_EE4 & 0x400)) ||
+ ((sLinkAge != 1) && (gSaveContext.save.unk_EE4 & 0x800))) {
// Assignment of OoT's D_80B7A67C here removed in MM, this is now an empty branch
}
} else {
@@ -4705,7 +4705,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, GlobalContext* globalCtx) {
case 0:
if (D_809171FC == 0) {
if (sLinkAge != 1) {
- if ((gSaveContext.save.roomInf[127][2] & 0x100) && !(gSaveContext.save.roomInf[127][2] & 0x200)) {
+ if ((gSaveContext.save.unk_EE4 & 0x100) && !(gSaveContext.save.unk_EE4 & 0x200)) {
this->actor.textId = 0x4093;
} else {
this->actor.textId = 0x407B;
@@ -4723,9 +4723,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, GlobalContext* globalCtx) {
if (D_809171FC == 0) {
this->unk_154 = 1;
if (sLinkAge != 1) {
- gSaveContext.save.roomInf[127][2] |= 0x200;
+ gSaveContext.save.unk_EE4 |= 0x200;
} else {
- gSaveContext.save.roomInf[127][2] |= 0x100;
+ gSaveContext.save.unk_EE4 |= 0x100;
}
} else {
this->unk_154 = 10;
@@ -4808,8 +4808,8 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, GlobalContext* globalCtx) {
D_8090CD04 = 20;
this->unk_154 = 0;
- if ((gSaveContext.save.roomInf[127][2] & 0xFF0000) < 0xFF0000) {
- gSaveContext.save.roomInf[127][2] += 0x10000;
+ if ((gSaveContext.save.unk_EE4 & 0xFF0000) < 0xFF0000) {
+ gSaveContext.save.unk_EE4 += 0x10000;
}
}
break;
@@ -4917,30 +4917,30 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, GlobalContext* globalCtx) {
if (sLinkAge == 1) {
f32 temp;
- gSaveContext.save.roomInf[127][2] &= 0xFFFFFF00;
- gSaveContext.save.roomInf[127][2] |= ((s16)D_809171CC & 0x7F);
+ gSaveContext.save.unk_EE4 &= 0xFFFFFF00;
+ gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F);
- temp = (gSaveContext.save.roomInf[127][2] & 0x7F000000) >> 0x18;
+ temp = (gSaveContext.save.unk_EE4 & 0x7F000000) >> 0x18;
if (temp < D_809171CC) {
- gSaveContext.save.roomInf[127][2] &= 0xFFFFFF;
- gSaveContext.save.roomInf[127][2] |= ((s16)D_809171CC & 0x7F) << 0x18;
+ gSaveContext.save.unk_EE4 &= 0xFFFFFF;
+ gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F) << 0x18;
if (D_809171D2 == 2) {
- gSaveContext.save.roomInf[127][2] |= 0x80000000;
+ gSaveContext.save.unk_EE4 |= 0x80000000;
}
}
if (D_809171D2 == 2) {
- gSaveContext.save.roomInf[127][2] |= 0x80;
+ gSaveContext.save.unk_EE4 |= 0x80;
this->unk_154 = 0;
break;
}
} else {
- gSaveContext.save.roomInf[127][2] &= 0xFFFFFF;
- gSaveContext.save.roomInf[127][2] |= ((s16)D_809171CC & 0x7F) << 0x18;
+ gSaveContext.save.unk_EE4 &= 0xFFFFFF;
+ gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F) << 0x18;
if (D_809171D2 == 2) {
- gSaveContext.save.roomInf[127][2] |= 0x80000000;
+ gSaveContext.save.unk_EE4 |= 0x80000000;
this->unk_154 = 0;
break;
}
@@ -4957,14 +4957,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, GlobalContext* globalCtx) {
}
if (sLinkAge == 1) {
- if ((D_809171CC >= 50.0f) && !(gSaveContext.save.roomInf[127][2] & 0x400)) {
- gSaveContext.save.roomInf[127][2] |= 0x400;
+ if ((D_809171CC >= 50.0f) && !(gSaveContext.save.unk_EE4 & 0x400)) {
+ gSaveContext.save.unk_EE4 |= 0x400;
getItemId = GI_HEART_PIECE;
sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f;
}
} else {
- if ((D_809171CC >= 60.0f) && !(gSaveContext.save.roomInf[127][2] & 0x800)) {
- gSaveContext.save.roomInf[127][2] |= 0x800;
+ if ((D_809171CC >= 60.0f) && !(gSaveContext.save.unk_EE4 & 0x800)) {
+ gSaveContext.save.unk_EE4 |= 0x800;
getItemId = GI_SCALE_GOLD;
sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f;
}
@@ -5130,9 +5130,9 @@ void EnFishing_UpdateOwner(Actor* thisx, GlobalContext* globalCtx2) {
}
if (D_8090CD08 == 0) {
- gSaveContext.save.roomInf[127][2] |= 0x1000;
+ gSaveContext.save.unk_EE4 |= 0x1000;
} else if (D_8090CD08 == 1) {
- gSaveContext.save.roomInf[127][2] &= ~0x1000;
+ gSaveContext.save.unk_EE4 &= ~0x1000;
}
if (D_8090CCFC != 0) {
diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
index c3a66b36c..b75c65c94 100644
--- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
+++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c
@@ -299,14 +299,13 @@ s16 EnFsn_GetStolenItemId(u32 stolenItem) {
s32 EnFsn_HasItemsToSell(void) {
if (CURRENT_DAY != 3) {
- if (((gSaveContext.save.roomInf[126][5] & 0xFF000000) >> 0x18) ||
- ((gSaveContext.save.roomInf[126][5] & 0xFF0000) >> 0x10)) {
+ if (((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18) || ((gSaveContext.save.stolenItems & 0xFF0000) >> 0x10)) {
return true;
}
return false;
} else {
- if (((gSaveContext.save.roomInf[126][5] & 0xFF000000) >> 0x18) ||
- ((gSaveContext.save.roomInf[126][5] & 0xFF0000) >> 0x10) || !(gSaveContext.save.weekEventReg[0x21] & 4)) {
+ if (((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18) || ((gSaveContext.save.stolenItems & 0xFF0000) >> 0x10) ||
+ !(gSaveContext.save.weekEventReg[0x21] & 4)) {
return true;
}
return false;
@@ -314,8 +313,8 @@ s32 EnFsn_HasItemsToSell(void) {
}
void EnFsn_GetShopItemIds(EnFsn* this) {
- u32 stolenItem1 = (gSaveContext.save.roomInf[126][5] & 0xFF000000) >> 0x18;
- u32 stolenItem2 = (gSaveContext.save.roomInf[126][5] & 0xFF0000) >> 0x10;
+ u32 stolenItem1 = (gSaveContext.save.stolenItems & 0xFF000000) >> 0x18;
+ u32 stolenItem2 = (gSaveContext.save.stolenItems & 0xFF0000) >> 0x10;
s16 itemId;
this->stolenItem1 = this->stolenItem2 = 0;
@@ -362,7 +361,7 @@ void EnFsn_EndInteraction(EnFsn* this, GlobalContext* globalCtx) {
this->cutsceneState = 0;
}
Actor_ProcessTalkRequest(&this->actor, &globalCtx->state);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
Interface_ChangeAlpha(50);
this->drawCursor = 0;
@@ -935,7 +934,7 @@ void EnFsn_MakeOffer(EnFsn* this, GlobalContext* globalCtx) {
switch (globalCtx->msgCtx.choiceIndex) {
case 0:
func_8019F208();
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
if (this->cutsceneState == 2) {
ActorCutscene_Stop(this->cutscene);
@@ -1135,7 +1134,7 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, GlobalContext* globalCtx) {
item = this->items[this->cursorIdx];
item->buyFanfareFunc(globalCtx, item);
Actor_PickUp(&this->actor, globalCtx, this->items[this->cursorIdx]->getItemId, 300.0f, 300.0f);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
Interface_ChangeAlpha(50);
this->drawCursor = 0;
@@ -1143,9 +1142,9 @@ void EnFsn_HandleCanPlayerBuyItem(EnFsn* this, GlobalContext* globalCtx) {
item = this->items[this->cursorIdx];
item->boughtFunc(globalCtx, item);
if (this->stolenItem1 == this->cursorIdx) {
- gSaveContext.save.roomInf[126][5] &= ~0xFF000000;
+ gSaveContext.save.stolenItems &= ~0xFF000000;
} else if (this->stolenItem2 == this->cursorIdx) {
- gSaveContext.save.roomInf[126][5] &= ~0xFF0000;
+ gSaveContext.save.stolenItems &= ~0xFF0000;
}
this->numSellingItems--;
this->itemIds[this->cursorIdx] = -1;
@@ -1172,7 +1171,7 @@ void EnFsn_SetupEndInteraction(EnFsn* this, GlobalContext* globalCtx) {
if (globalCtx->msgCtx.unk120B1 == 0) {
EnFsn_EndInteraction(this, globalCtx);
} else {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
}
} else {
@@ -1244,7 +1243,7 @@ void EnFsn_AskCanBuyMore(EnFsn* this, GlobalContext* globalCtx) {
if (globalCtx->msgCtx.unk120B1 == 0) {
EnFsn_EndInteraction(this, globalCtx);
} else {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
}
} else {
@@ -1291,7 +1290,7 @@ void EnFsn_AskCanBuyAterRunningOutOfItems(EnFsn* this, GlobalContext* globalCtx)
if (globalCtx->msgCtx.unk120B1 == 0) {
EnFsn_EndInteraction(this, globalCtx);
} else {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
}
} else {
@@ -1345,12 +1344,12 @@ void EnFsn_ConverseBackroom(EnFsn* this, GlobalContext* globalCtx) {
if (Message_GetState(&globalCtx->msgCtx) == 5 && func_80147624(globalCtx)) {
if (this->flags & ENFSN_END_CONVERSATION) {
this->flags &= ~ENFSN_END_CONVERSATION;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = EnFsn_IdleBackroom;
} else if (this->flags & ENFSN_GIVE_ITEM) {
this->flags &= ~ENFSN_GIVE_ITEM;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = EnFsn_GiveItem;
} else {
diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
index 5e6a2f133..83fed5e23 100644
--- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
+++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c
@@ -391,7 +391,7 @@ void func_80B0FFA8(EnGb2* this, GlobalContext* globalCtx) {
if (temp_v0 == 5) {
if (func_80147624(globalCtx)) {
if (this->unk_26C & 2) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_26E = 0x14D1;
this->unk_288 = 30;
@@ -431,7 +431,7 @@ void func_80B0FFA8(EnGb2* this, GlobalContext* globalCtx) {
case 0:
func_8019F208();
Rupees_ChangeBy(-this->unk_288);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
func_800B7298(globalCtx, NULL, 7);
this->actionFunc = func_80B11344;
@@ -553,7 +553,7 @@ void func_80B10634(EnGb2* this, GlobalContext* globalCtx) {
if (temp_v0 == 5) {
if (func_80147624(globalCtx)) {
if (this->unk_26C & 2) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_26C &= ~2;
if (this->unk_26E == 0x14DD) {
@@ -583,7 +583,7 @@ void func_80B10634(EnGb2* this, GlobalContext* globalCtx) {
} else {
func_8019F208();
Rupees_ChangeBy(-this->unk_288);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
func_800B7298(globalCtx, NULL, 7);
this->actionFunc = func_80B11344;
@@ -749,7 +749,7 @@ void func_80B10E98(EnGb2* this, GlobalContext* globalCtx) {
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
if (this->unk_26C & 2) {
this->unk_26C &= ~2;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
if ((this->unk_26E != 0x14E8) && (this->unk_26E != 0x14EA)) {
ActorCutscene_Stop(this->unk_282[this->unk_290]);
@@ -792,7 +792,7 @@ void func_80B11048(EnGb2* this, GlobalContext* globalCtx) {
void func_80B110F8(EnGb2* this, GlobalContext* globalCtx) {
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
if (this->unk_26C & 2) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_26C &= ~2;
this->actionFunc = func_80B10A48;
diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c
index 2a68ceed9..f90b0f2c4 100644
--- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c
+++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c
@@ -541,7 +541,7 @@ void func_80BB26EC(EnGeg* this, GlobalContext* globalCtx) {
case 0xD61:
ActorCutscene_Stop(this->unk_498);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_230 &= ~0x10;
this->actionFunc = func_80BB221C;
@@ -557,14 +557,14 @@ void func_80BB27D4(EnGeg* this, GlobalContext* globalCtx) {
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
switch (this->unk_496) {
case 0xD63:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_80BB221C;
break;
case 0xD69:
this->unk_49A = this->unk_49C[6];
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_80BB2520;
break;
@@ -572,7 +572,7 @@ void func_80BB27D4(EnGeg* this, GlobalContext* globalCtx) {
case 0xD6D:
case 0xD6F:
case 0xD8A:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_80BB31B8;
break;
@@ -580,7 +580,7 @@ void func_80BB27D4(EnGeg* this, GlobalContext* globalCtx) {
case 0xD72:
case 0xD75:
case 0xD8B:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_230 &= ~0x10;
this->unk_49A = this->unk_49C[7];
@@ -607,7 +607,7 @@ void func_80BB2944(EnGeg* this, GlobalContext* globalCtx) {
}
} else if ((sp27 == 5) && func_80147624(globalCtx)) {
if (this->unk_496 == 0xD67) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_49A = this->unk_49C[4];
this->actionFunc = func_80BB2520;
@@ -624,7 +624,7 @@ void func_80BB2A54(EnGeg* this, GlobalContext* globalCtx) {
ActorCutscene_Stop(this->unk_498);
this->unk_230 &= ~0x10;
this->unk_244 = 65;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_80BB347C;
} else {
diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c
index 47af78169..442336904 100644
--- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c
+++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c
@@ -80,8 +80,8 @@ void EnGinkoMan_Idle(EnGinkoMan* this, GlobalContext* globalCtx) {
s32 yaw = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
EnGinkoMan_SwitchAnimation(this, globalCtx);
- if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) { // Listen for dialogue start?
- if ((gSaveContext.save.roomInf[127][0] & 0xFFFF) == 0) {
+ if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
+ if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_FLOORSMACKING);
func_801518B0(globalCtx, 0x44C, &this->actor);
this->curTextId = 0x44C; // would you like to make an account
@@ -145,7 +145,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, GlobalContext* globalCtx) {
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_FLOORSMACKING);
}
- globalCtx->msgCtx.bankRupees = gSaveContext.save.roomInf[127][0] & 0xFFFF;
+ globalCtx->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF;
func_801518B0(globalCtx, 0x45A, &this->actor);
this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!"
}
@@ -156,22 +156,22 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, GlobalContext* globalCtx) {
this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees"
break;
case 0x45A: // "All right, little guy, now I've got a total of [rupees] from you!"
- if (((gSaveContext.save.roomInf[127][0] & 0xFFFF) >= 200) && (this->previousBankValue < 200) &&
+ if (((gSaveContext.save.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) &&
!(gSaveContext.save.weekEventReg[59] & 0x40)) {
gSaveContext.save.weekEventReg[59] |= 0x40;
func_801518B0(globalCtx, 0x45B, &this->actor);
this->curTextId = 0x45B; // "What's this? You've already saved up 200 Rupees!?!
- } else if (((gSaveContext.save.roomInf[127][0] & 0xFFFF) >= 1000) && ((this->previousBankValue) < 1000) &&
+ } else if (((gSaveContext.save.bankRupees & 0xFFFF) >= 1000) && ((this->previousBankValue) < 1000) &&
!(gSaveContext.save.weekEventReg[59] & 0x80)) {
gSaveContext.save.weekEventReg[59] |= 0x80;
func_801518B0(globalCtx, 0x45C, &this->actor);
this->curTextId = 0x45C; // "What's this? You've already saved up 1000 Rupees!?!
- } else if ((gSaveContext.save.roomInf[127][0] & 0xFFFF) >= 5000) {
+ } else if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) {
if ((this->previousBankValue < 5000) && !(gSaveContext.save.weekEventReg[60] & 1)) {
gSaveContext.save.weekEventReg[60] |= 1;
func_801518B0(globalCtx, 0x45D, &this->actor);
this->curTextId = 0x45D; // "What's this? You've already saved up 5000 Rupees?!
- } else if (this->previousBankValue < (s16)(gSaveContext.save.roomInf[127][0] & 0xFFFF)) {
+ } else if (this->previousBankValue < (s16)(gSaveContext.save.bankRupees & 0xFFFF)) {
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_SITTING);
func_801518B0(globalCtx, 0x45E, &this->actor);
this->curTextId =
@@ -208,12 +208,12 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, GlobalContext* globalCtx) {
this->curTextId = 0x464; // Hey, relax! It doesn't leave any marks
break;
case 0x464: // Hey, relax! It doesn't leave any marks
- globalCtx->msgCtx.unk11F22 = 0x44;
+ globalCtx->msgCtx.msgMode = 0x44;
EnGinkoMan_SetupStamp(this); // stamp player
break;
case 0x465: // "There! Now I'll know you when I see you!"
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_FLOORSMACKING);
- globalCtx->msgCtx.bankRupees = gSaveContext.save.roomInf[127][0] & 0xFFFF;
+ globalCtx->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF;
func_801518B0(globalCtx, 0x45A, &this->actor);
this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!"
break;
@@ -229,7 +229,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, GlobalContext* globalCtx) {
case 0x46C: // "Ah, yes...[Link], right? If I remember, you're the little guy who deposited [rupees]."
case 0x47E: // "Your deposits total [rupees]."
if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) {
- if ((u32)(gSaveContext.save.roomInf[127][0] & 0xFFFF) >= 5000) {
+ if ((u32)(gSaveContext.save.bankRupees & 0xFFFF) >= 5000) {
func_801518B0(globalCtx, 0x45F, &this->actor);
this->curTextId = 0x45F; // "Excuuuse me! But I can't take anymore deposits!
} else if (gSaveContext.save.playerData.rupees == 0) {
@@ -280,12 +280,12 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, GlobalContext* globalCtx) {
case 0x473: // Use it wisely...
case 0x474: // "Aw, you're taking out all that? If you spend it like that, it'll all be gone before you know
// it!"
- if ((gSaveContext.save.roomInf[127][0] & 0xFFFF) == 0) {
+ if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
func_801518B0(globalCtx, 0x478, &this->actor);
// "Look, little guy, all the Rupees you deposited are gone, so you can't use that stamp anymore."
this->curTextId = 0x478;
} else {
- globalCtx->msgCtx.bankRupees = gSaveContext.save.roomInf[127][0] & 0xFFFF;
+ globalCtx->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF;
func_801518B0(globalCtx, 0x45A, &this->actor);
this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!"
}
@@ -311,7 +311,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, GlobalContext* globalCtx)
switch (this->curTextId) {
case 0x44E: // "...So, what'll it be?
if (globalCtx->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if ((gSaveContext.save.roomInf[127][0] & 0xFFFF) >= 5000) {
+ if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) {
play_sound(NA_SE_SY_ERROR);
func_801518B0(globalCtx, 0x45F, &this->actor);
this->curTextId = 0x45F; // bank full, cannot accept more
@@ -353,21 +353,20 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, GlobalContext* globalCtx)
this->curTextId = 0x453; // That's it? That aint nothing at all
}
- if ((gSaveContext.save.roomInf[127][0] & 0xFFFF) == 0) {
+ if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
this->isNewAccount = true;
}
Rupees_ChangeBy((s16)-globalCtx->msgCtx.bankRupeesSelected);
- this->previousBankValue = gSaveContext.save.roomInf[127][0] & 0xFFFF;
- if (1) {} // Needed to match
- gSaveContext.save.roomInf[127][0] =
- (gSaveContext.save.roomInf[127][0] & 0xFFFF0000) |
- ((gSaveContext.save.roomInf[127][0] & 0xFFFF) + globalCtx->msgCtx.bankRupeesSelected);
+ this->previousBankValue = gSaveContext.save.bankRupees & 0xFFFF;
+ gSaveContext.save.bankRupees =
+ ((gSaveContext.save.bankRupees & 0xFFFF) + globalCtx->msgCtx.bankRupeesSelected) |
+ (gSaveContext.save.bankRupees & 0xFFFF0000);
}
} else { // GINKOMAN_CHOICE_NO
func_8019F230();
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_SITTING);
- if ((gSaveContext.save.roomInf[127][0] & 0xFFFF) == 0) {
+ if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) {
func_801518B0(globalCtx, 0x456, &this->actor);
this->curTextId = 0x456; // Is that so? think about it
} else {
@@ -396,7 +395,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, GlobalContext* globalCtx)
break;
case 0x471: // Are you really withdrawling [selected rupees]?
if (globalCtx->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) {
- if ((s32)((gSaveContext.save.roomInf[127][0] & 0xFFFF)) <
+ if ((s32)((gSaveContext.save.bankRupees & 0xFFFF)) <
((s32)(globalCtx->msgCtx.bankRupeesSelected + this->serviceFee))) {
play_sound(NA_SE_SY_ERROR);
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_FLOORSMACKING);
@@ -421,11 +420,11 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, GlobalContext* globalCtx)
this->curTextId = 0x472; // It's a waste to take out such a tiny bit
}
- this->previousBankValue = (s16)(gSaveContext.save.roomInf[127][0] & 0xFFFF);
- gSaveContext.save.roomInf[127][0] =
- (gSaveContext.save.roomInf[127][0] & 0xFFFF0000) |
- (((gSaveContext.save.roomInf[127][0] & 0xFFFF) - globalCtx->msgCtx.bankRupeesSelected) -
- this->serviceFee);
+ this->previousBankValue = (s16)(gSaveContext.save.bankRupees & 0xFFFF);
+ gSaveContext.save.bankRupees =
+ (((gSaveContext.save.bankRupees & 0xFFFF) - globalCtx->msgCtx.bankRupeesSelected) -
+ this->serviceFee) |
+ (gSaveContext.save.bankRupees & 0xFFFF0000);
Rupees_ChangeBy(globalCtx->msgCtx.bankRupeesSelected);
}
} else {
@@ -579,7 +578,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, GlobalContext* globalCtx) {
break;
case 0x469: // "Excuse me, but let me take a look at you..."
Actor_ChangeAnimation(&this->skelAnime, animations, GINKO_SITTING);
- globalCtx->msgCtx.bankRupees = (gSaveContext.save.roomInf[127][0] & 0xFFFF);
+ globalCtx->msgCtx.bankRupees = (gSaveContext.save.bankRupees & 0xFFFF);
if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == 1)) {
func_801518B0(globalCtx, 0x46C, &this->actor);
this->curTextId = 0x46C; // "Ah, yes...[Link], right?
diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
index dd28ab8e2..dbaa59828 100644
--- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c
+++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c
@@ -112,7 +112,7 @@ s8 func_80997A90(s16 arg0, s16 arg1) {
if ((arg0 == 0) || ((arg0 != 1) && (arg0 != 2) && (arg0 == 3))) {
phi_v1 = 0;
} else {
- phi_v1 = (gSaveContext.save.roomInf[126][1] >> (arg1 * 3)) & 7;
+ phi_v1 = (gSaveContext.save.unk_EC4 >> (arg1 * 3)) & 7;
}
return phi_v1;
}
@@ -388,8 +388,8 @@ void func_809985B8(EnGs* this, GlobalContext* globalCtx) {
Math_Vec3f_Sum(&player->actor.world.pos, &sp38, &player->actor.world.pos);
Math_Vec3f_Copy(&player->actor.prevPos, &player->actor.world.pos);
this->unk_200 = 0.0f;
- gSaveContext.save.roomInf[126][1] = (gSaveContext.save.roomInf[126][1] & ~(7 << (this->unk_198 * 3))) |
- ((this->unk_194 & 7) << (this->unk_198 * 3));
+ gSaveContext.save.unk_EC4 =
+ ((u32)gSaveContext.save.unk_EC4 & ~(7 << (this->unk_198 * 3))) | ((this->unk_194 & 7) << (this->unk_198 * 3));
gossipStone = NULL;
do {
@@ -450,7 +450,7 @@ void func_8099874C(EnGs* this, GlobalContext* globalCtx) {
phi_v0 = 1;
for (i = 0; i < 4; i++) {
- if (((gSaveContext.save.roomInf[126][1] >> (i * 3)) & 7) != (u32)this->unk_194) {
+ if (((gSaveContext.save.unk_EC4 >> (i * 3)) & 7) != (u32)this->unk_194) {
phi_v0 = 0;
}
}
@@ -1005,7 +1005,7 @@ void EnGs_Update(Actor* thisx, GlobalContext* globalCtx) {
EnGs* this = THIS;
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
- globalCtx->msgCtx.unk11F22 = 0;
+ globalCtx->msgCtx.msgMode = 0;
globalCtx->msgCtx.unk11F10 = 0;
this->collider.base.acFlags &= ~AC_HIT;
func_80997DEC(this, globalCtx);
diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
index b6d30391d..28225d2f6 100644
--- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
+++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c
@@ -392,7 +392,7 @@ void func_80C2077C(EnHintSkb* this, GlobalContext* globalCtx) {
func_801518B0(globalCtx, 0x1147, &this->actor);
this->unk_3E6 = 0x1147;
if (this->skelAnime.animation == &object_skb_Anim_00697C) {
- globalCtx->msgCtx.unk11F22 = 0x44;
+ globalCtx->msgCtx.msgMode = 0x44;
this->actor.speedXZ = 2.4f;
this->actor.gravity = -1.0f;
this->actor.velocity.y = 3.0f;
diff --git a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
index e5b52fe49..728297ea9 100644
--- a/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
+++ b/src/overlays/actors/ovl_En_Invadepoh/z_en_invadepoh.c
@@ -628,11 +628,9 @@ void func_80B439B0(s32 arg0, s32 arg1) {
}
if (!(arg0 & 1)) {
- gSaveContext.save.roomInf[124][arg0 >> 1] =
- (gSaveContext.save.roomInf[124][arg0 >> 1] & 0xFFFF0000) | (arg1 & 0xFFFF);
+ gSaveContext.save.unk_E88[arg0 >> 1] = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF0000) | (arg1 & 0xFFFF);
} else {
- gSaveContext.save.roomInf[124][arg0 >> 1] =
- (gSaveContext.save.roomInf[124][arg0 >> 1] & 0xFFFF) | ((arg1 & 0xFFFF) << 0x10);
+ gSaveContext.save.unk_E88[arg0 >> 1] = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF) | ((arg1 & 0xFFFF) << 0x10);
}
}
@@ -640,19 +638,19 @@ s32 func_80B43A24(s32 arg0) {
u32 phi_v1;
if ((arg0 & 1) == 0) {
- phi_v1 = gSaveContext.save.roomInf[124][arg0 >> 1] & 0xFFFF;
+ phi_v1 = gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF;
} else {
- phi_v1 = (gSaveContext.save.roomInf[124][arg0 >> 1] & 0xFFFF0000) >> 0x10;
+ phi_v1 = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF0000) >> 0x10;
}
return phi_v1 + 0x1AAA;
}
void func_80B43A74(s32 arg0) {
- gSaveContext.save.roomInf[124][4] = (gSaveContext.save.roomInf[124][4] & ~0xFF) | (arg0 & 0xFF);
+ gSaveContext.save.unk_E88[4] = (gSaveContext.save.unk_E88[4] & ~0xFF) | (arg0 & 0xFF);
}
s32 func_80B43A9C(void) {
- return (gSaveContext.save.roomInf[124][4] >> 0) & 0xFF;
+ return (gSaveContext.save.unk_E88[4] >> 0) & 0xFF;
}
s32 func_80B43AB0(void) {
@@ -3466,7 +3464,7 @@ void func_80B4B024(EnInvadepoh* this) {
void func_80B4B048(EnInvadepoh* this, GlobalContext* globalCtx) {
if (globalCtx->msgCtx.unk120B1 == 0) {
- if (globalCtx->msgCtx.unk11F22 == 0) {
+ if (globalCtx->msgCtx.msgMode == 0) {
D_80B4E998 = 1;
} else if ((Message_GetState(&globalCtx->msgCtx) == 6) || (Message_GetState(&globalCtx->msgCtx) == 5)) {
D_80B4E998 = 1;
diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
index 1895bea75..0998937e0 100644
--- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
+++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c
@@ -153,32 +153,33 @@ ObjIcePoly* EnKgy_FindIceBlock(GlobalContext* globalCtx) {
}
void func_80B40C74(GlobalContext* globalCtx) {
- gSaveContext.save.roomInf[globalCtx->sceneNum][5] |= 1;
+ gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 |= 1;
if (CURRENT_DAY == 1) {
- gSaveContext.save.roomInf[globalCtx->sceneNum][5] |= 2;
+ gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 |= 2;
} else {
- gSaveContext.save.roomInf[globalCtx->sceneNum][5] &= ~2;
+ gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 &= ~2;
}
}
void func_80B40D00(GlobalContext* globalCtx) {
- gSaveContext.save.roomInf[globalCtx->sceneNum][5] |= 4;
+ gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 |= 4;
}
void func_80B40D30(GlobalContext* globalCtx) {
- gSaveContext.save.roomInf[globalCtx->sceneNum][5] &= ~7;
+ gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 &= ~7;
}
s32 func_80B40D64(GlobalContext* globalCtx) {
- return gSaveContext.save.roomInf[globalCtx->sceneNum][5] & 1;
+ return gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 & 1;
}
s32 func_80B40D8C(GlobalContext* globalCtx) {
- return gSaveContext.save.roomInf[globalCtx->sceneNum][5] & 4;
+ return gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 & 4;
}
s32 func_80B40DB4(GlobalContext* globalCtx) {
- if ((CURRENT_DAY == 3) || ((CURRENT_DAY == 2) && (gSaveContext.save.roomInf[globalCtx->sceneNum][5] & 2))) {
+ if ((CURRENT_DAY == 3) ||
+ ((CURRENT_DAY == 2) && (gSaveContext.save.permanentSceneFlags[globalCtx->sceneNum].unk_14 & 2))) {
return true;
}
return false;
diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
index 264f9ba56..6f87fbab5 100644
--- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
+++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c
@@ -909,9 +909,9 @@ void EnMa4_StartDialogue(EnMa4* this, GlobalContext* globalCtx) {
this->textId = 0x336D;
} else {
time = gSaveContext.unk_3DE0[4];
- if ((s32)time < (s32)gSaveContext.save.roomInf[127][4]) {
+ if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) {
// [Score] New record!
- gSaveContext.save.roomInf[127][4] = time;
+ gSaveContext.save.horseBackBalloonHighScore = time;
EnMa4_SetFaceExpression(this, 0, 3);
func_801518B0(globalCtx, 0x3350, &this->actor);
this->textId = 0x3350;
@@ -953,8 +953,8 @@ void EnMa4_StartDialogue(EnMa4* this, GlobalContext* globalCtx) {
this->textId = 0x3356;
} else {
time = gSaveContext.unk_3DE0[4];
- if ((s32)time < (s32)gSaveContext.save.roomInf[127][4]) {
- gSaveContext.save.roomInf[127][4] = time;
+ if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) {
+ gSaveContext.save.horseBackBalloonHighScore = time;
EnMa4_SetFaceExpression(this, 0, 3);
func_801518B0(globalCtx, 0x3350, &this->actor);
this->textId = 0x3350;
@@ -980,9 +980,9 @@ void EnMa4_StartDialogue(EnMa4* this, GlobalContext* globalCtx) {
this->textId = 0x3356;
} else {
time = gSaveContext.unk_3DE0[4];
- if ((s32)time < (s32)gSaveContext.save.roomInf[127][4]) {
+ if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) {
// New record
- gSaveContext.save.roomInf[127][4] = time;
+ gSaveContext.save.horseBackBalloonHighScore = time;
func_801518B0(globalCtx, 0x335D, &this->actor);
this->textId = 0x335D;
} else {
diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
index fecbf05d3..afb1a80c7 100644
--- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
+++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c
@@ -198,7 +198,7 @@ void func_80A68B6C(EnMushi2* this) {
}
s32 func_80A68BA0(EnMushi2* this) {
- return (D_80A6B994 > 3) && this->unk_34C == 0;
+ return (D_80A6B994 > 3) && this->unk_34C == NULL;
}
void func_80A68BC8(EnMushi2* this) {
@@ -605,11 +605,11 @@ void func_80A69ADC(Actor* thisx) {
sp44 = Math3D_SignedDistanceFromPlane(
this->unk_310.x, this->unk_310.y, this->unk_310.z,
func_80A69AA8(this->unk_310.x, this->unk_310.y, this->unk_310.z, &this->actor.world.pos),
- &bean->actor.world.pos);
+ &bean->dyna.actor.world.pos);
sp40 = Math3D_SignedDistanceFromPlane(
this->unk_328.x, this->unk_328.y, this->unk_328.z,
func_80A69AA8(this->unk_328.x, this->unk_328.y, this->unk_328.z, &this->actor.world.pos),
- &bean->actor.world.pos);
+ &bean->dyna.actor.world.pos);
sp3C = Math3D_XZLength(sp44, sp40);
if (fabsf(sp3C) > 0.1f) {
@@ -651,11 +651,11 @@ void func_80A69D3C(EnMushi2* this) {
sp40 = Math3D_SignedDistanceFromPlane(
this->unk_310.x, this->unk_310.y, this->unk_310.z,
func_80A69AA8(this->unk_310.x, this->unk_310.y, this->unk_310.z, &this->actor.world.pos),
- &this->unk_34C->actor.world.pos);
+ &this->unk_34C->dyna.actor.world.pos);
sp3C = Math3D_SignedDistanceFromPlane(
this->unk_328.x, this->unk_328.y, this->unk_328.z,
func_80A69AA8(this->unk_328.x, this->unk_328.y, this->unk_328.z, &this->actor.world.pos),
- &this->unk_34C->actor.world.pos);
+ &this->unk_34C->dyna.actor.world.pos);
sp38 = Math3D_XZLengthSquared(sp40, sp3C);
if (fabsf(sp38) > 0.010000001f) {
@@ -840,7 +840,7 @@ void func_80A6A508(Actor* thisx) {
}
this->unk_368 = Rand_S16Offset(10, 30);
- if (this->unk_34C == 0) {
+ if (this->unk_34C == NULL) {
func_80A69CE0(thisx);
} else {
func_80A69ADC(thisx);
@@ -1118,7 +1118,7 @@ void EnMushi2_Update(Actor* thisx, GlobalContext* globalCtx) {
f32 phi_f0;
s32 temp;
- if ((this->unk_34C != NULL) && (this->unk_34C->actor.update == NULL)) {
+ if ((this->unk_34C != NULL) && (this->unk_34C->dyna.actor.update == NULL)) {
this->unk_34C = NULL;
}
@@ -1137,7 +1137,7 @@ void EnMushi2_Update(Actor* thisx, GlobalContext* globalCtx) {
this->unk_36A--;
}
- if ((this->unk_34C != 0) && ((this->actionFunc == func_80A6A5C0) || (this->actionFunc == func_80A6A824)) &&
+ if ((this->unk_34C != NULL) && ((this->actionFunc == func_80A6A5C0) || (this->actionFunc == func_80A6A824)) &&
(this->unk_354 < SQ(3.0f))) {
this->unk_30C |= 0x80;
func_80A6B078(this);
@@ -1176,15 +1176,15 @@ void EnMushi2_Update(Actor* thisx, GlobalContext* globalCtx) {
func_80A68BC8(this);
}
- if (this->unk_34C != 0) {
+ if (this->unk_34C != NULL) {
sp4C = 0.0f;
- this->unk_354 = Math3D_Vec3fDistSq(&this->actor.world.pos, &this->unk_34C->actor.world.pos);
+ this->unk_354 = Math3D_Vec3fDistSq(&this->actor.world.pos, &this->unk_34C->dyna.actor.world.pos);
if (this->unk_354 < this->unk_350) {
- f32 dist = Math3D_DistPlaneToPos(COLPOLY_GET_NORMAL(this->unk_34C->actor.floorPoly->normal.x),
- COLPOLY_GET_NORMAL(this->unk_34C->actor.floorPoly->normal.y),
- COLPOLY_GET_NORMAL(this->unk_34C->actor.floorPoly->normal.z),
- this->unk_34C->actor.floorPoly->dist, &this->actor.world.pos);
+ f32 dist = Math3D_DistPlaneToPos(COLPOLY_GET_NORMAL(this->unk_34C->dyna.actor.floorPoly->normal.x),
+ COLPOLY_GET_NORMAL(this->unk_34C->dyna.actor.floorPoly->normal.y),
+ COLPOLY_GET_NORMAL(this->unk_34C->dyna.actor.floorPoly->normal.z),
+ this->unk_34C->dyna.actor.floorPoly->dist, &this->actor.world.pos);
if (fabsf(dist) < 3.0f) {
sp4C = 1.9f;
@@ -1203,7 +1203,7 @@ void EnMushi2_Update(Actor* thisx, GlobalContext* globalCtx) {
!(this->unk_358 > 0.999f) || !(this->unk_354 < SQ(20.0f)))) {
s32 phi_v0 = true;
- if (this->unk_34C == 0) {
+ if (this->unk_34C == NULL) {
this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER;
} else {
this->collider.base.ocFlags1 &= ~OC1_TYPE_PLAYER;
diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
index 73ce4b8b6..54ca45a58 100644
--- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
+++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c
@@ -249,7 +249,7 @@ void EnOssan_EndInteraction(GlobalContext* globalCtx, EnOssan* this) {
Player* player = GET_PLAYER(globalCtx);
Actor_ProcessTalkRequest(&this->actor, &globalCtx->state);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
Interface_ChangeAlpha(50);
this->drawCursor = 0;
@@ -931,7 +931,7 @@ void EnOssan_SetupBuyItemWithFanfare(GlobalContext* globalCtx, EnOssan* this) {
Player* player = GET_PLAYER(globalCtx);
Actor_PickUp(&this->actor, globalCtx, this->items[this->cursorIdx]->getItemId, 300.0f, 300.0f);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->stateFlags2 &= ~0x20000000;
Interface_ChangeAlpha(50);
@@ -1048,7 +1048,7 @@ void EnOssan_BuyItemWithFanfare(EnOssan* this, GlobalContext* globalCtx) {
void EnOssan_SetupItemPurchased(EnOssan* this, GlobalContext* globalCtx) {
if (Message_GetState(&globalCtx->msgCtx) == 6 && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
EnOssan_SetupAction(this, EnOssan_ItemPurchased);
if (this->cutsceneState == ENOSSAN_CUTSCENESTATE_STOPPED) {
diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
index 058442b90..d3f9951cc 100644
--- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c
+++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c
@@ -307,7 +307,7 @@ void func_808FA4F4(EnRr* this, GlobalContext* globalCtx) {
if (((this->unk_1E2 == 0) && (gSaveContext.save.playerForm == PLAYER_FORM_HUMAN)) &&
(CUR_EQUIP_VALUE_VOID(EQUIP_SHIELD) == EQUIP_SHIELD)) {
sp34 = true;
- this->unk_1E2 = func_8012ED78(globalCtx, 1);
+ this->unk_1E2 = Inventory_DeleteEquipment(globalCtx, 1);
} else {
sp34 = false;
}
diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
index 7e8eea792..177dff76f 100644
--- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
+++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c
@@ -307,7 +307,7 @@ void func_80BCB6D0(EnScopenuts* this, GlobalContext* globalCtx) {
if (func_80147624(globalCtx)) {
if (this->unk_328 & 1) {
this->unk_328 &= ~1;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actor.flags &= ~ACTOR_FLAG_1;
this->unk_328 &= ~4;
@@ -330,7 +330,7 @@ void func_80BCB6D0(EnScopenuts* this, GlobalContext* globalCtx) {
func_801518B0(globalCtx, this->unk_33C, &this->actor);
} else {
func_8019F208();
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
Rupees_ChangeBy(this->unk_358 * -1);
this->actionFunc = func_80BCB90C;
diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
index a6f579f85..fa5739227 100644
--- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
+++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c
@@ -462,7 +462,7 @@ void func_80ADBAB8(EnSellnuts* this, GlobalContext* globalCtx) {
}
if ((sp27 == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = func_80ADBBEC;
func_800B7298(globalCtx, NULL, 0x13);
@@ -508,7 +508,7 @@ void func_80ADBD64(EnSellnuts* this, GlobalContext* globalCtx) {
}
if ((sp27 == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_338 &= ~2;
this->actor.flags &= ~1;
@@ -550,7 +550,7 @@ void func_80ADBE80(EnSellnuts* this, GlobalContext* globalCtx) {
void func_80ADBFA0(EnSellnuts* this, GlobalContext* globalCtx) {
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
if (this->unk_34C == 0) {
this->actionFunc = func_80ADB544;
@@ -713,7 +713,7 @@ void func_80ADC6D0(EnSellnuts* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
if (player->transformation == PLAYER_FORM_DEKU) {
if (gSaveContext.save.day == 3) {
@@ -743,7 +743,7 @@ void func_80ADC7B4(EnSellnuts* this, GlobalContext* globalCtx) {
ActorCutscene_SetIntentToPlay(this->cutscene);
}
} else if ((this->unk_366 == 1) && (temp == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_366 = 0;
ActorCutscene_Stop(this->cutscene);
diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
index a238e55dc..bad4bffe2 100644
--- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
+++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c
@@ -436,7 +436,7 @@ void EnSob1_EndInteraction(GlobalContext* globalCtx, EnSob1* this) {
this->cutsceneState = ENSOB1_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &globalCtx->state);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
Interface_ChangeAlpha(50);
this->drawCursor = 0;
@@ -927,7 +927,7 @@ void EnSob1_SetupBuyItemWithFanfare(GlobalContext* globalCtx, EnSob1* this) {
Player* player = GET_PLAYER(globalCtx);
Actor_PickUp(&this->actor, globalCtx, this->items[this->cursorIdx]->getItemId, 300.0f, 300.0f);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->stateFlags2 &= ~0x20000000;
Interface_ChangeAlpha(50);
@@ -1067,7 +1067,7 @@ void EnSob1_BuyItemWithFanfare(EnSob1* this, GlobalContext* globalCtx) {
void EnSob1_SetupItemPurchased(EnSob1* this, GlobalContext* globalCtx) {
if (Message_GetState(&globalCtx->msgCtx) == 6 && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
EnSob1_SetupAction(this, EnSob1_ItemPurchased);
if (this->cutsceneState == ENSOB1_CUTSCENESTATE_STOPPED) {
diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
index df1be3851..489e8f5c0 100644
--- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
+++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c
@@ -653,7 +653,7 @@ void EnSsh_Init(Actor* thisx, GlobalContext* globalCtx) {
this->actor.gravity = 0.0f;
this->initialYaw = this->actor.world.rot.y;
EnSsh_SetupAction(this, EnSsh_Start);
- if (func_8012F22C(globalCtx->sceneNum) >= 30) {
+ if (Inventory_GetSkullTokenCount(globalCtx->sceneNum) >= 30) {
Actor_MarkForDeath(&this->actor);
}
}
diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
index c58d780b9..d7b929dc5 100644
--- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
+++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c
@@ -1108,7 +1108,7 @@ void func_80BAD130(EnSuttari* this, GlobalContext* globalCtx) {
u8 talkState = Message_GetState(&globalCtx->msgCtx);
if ((talkState == 5 || talkState == 6) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
if (this->flags1 & 8) {
this->actionFunc = func_80BAD004;
@@ -1145,7 +1145,7 @@ void func_80BAD2B4(EnSuttari* this, GlobalContext* globalCtx) {
this->actionFunc = func_80BAD230;
} else {
ActorCutscene_Stop(this->cutscenes[1]);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->flags1 |= 0x40;
this->actionFunc = func_80BAD380;
@@ -1169,7 +1169,7 @@ void func_80BAD380(EnSuttari* this, GlobalContext* globalCtx) {
player->stateFlags1 &= ~0x10000000;
this->flags1 &= ~0x4000;
ActorCutscene_Stop(this->cutscenes[1]);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->flags1 |= 0x40;
}
@@ -1312,7 +1312,7 @@ void func_80BADA9C(EnSuttari* this, GlobalContext* globalCtx) {
((EnElf*)GET_PLAYER(globalCtx)->tatlActor)->unk_264 |= 0x10;
this->flags2 &= ~1;
}
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->textId = 0;
if (this->flags1 & 1) {
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
index 7f4e5f2ea..5f57ec177 100644
--- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
+++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
@@ -271,7 +271,7 @@ void func_809C6A04(EnSyatekiMan* this, GlobalContext* globalCtx) {
Rupees_ChangeBy(-20);
gSaveContext.save.weekEventReg[63] |= 1;
gSaveContext.save.weekEventReg[63] &= (u8)~2;
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_26A = 7;
player->stateFlags1 |= 0x20;
@@ -320,7 +320,7 @@ void func_809C6C2C(EnSyatekiMan* this, GlobalContext* globalCtx) {
case 0xA2B:
case 0xA2C:
case 0xA35:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->actor.freezeTimer = 0;
Interface_InitMinigame(globalCtx);
@@ -353,7 +353,7 @@ void func_809C6C2C(EnSyatekiMan* this, GlobalContext* globalCtx) {
break;
case 0xA34:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->actor.freezeTimer = 0;
gSaveContext.minigameState = 3;
@@ -388,7 +388,7 @@ void func_809C6E30(EnSyatekiMan* this, GlobalContext* globalCtx) {
case 6:
if (func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->stateFlags1 &= ~0x20;
gSaveContext.save.weekEventReg[63] &= (u8)~1;
@@ -628,7 +628,7 @@ void func_809C7620(EnSyatekiMan* this, GlobalContext* globalCtx) {
this->unk_284 = 0x400;
}
} else {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->actor.freezeTimer = 0;
this->unk_26A = 7;
@@ -641,7 +641,7 @@ void func_809C7620(EnSyatekiMan* this, GlobalContext* globalCtx) {
case 0x3FE:
case 0x400:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->actor.freezeTimer = 0;
this->unk_27E = 0;
@@ -688,7 +688,7 @@ void func_809C7620(EnSyatekiMan* this, GlobalContext* globalCtx) {
case 0x405:
case 0x406:
case 0x407:
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->actor.freezeTimer = 0;
gSaveContext.minigameState = 3;
@@ -974,9 +974,8 @@ void func_809C8488(EnSyatekiMan* this, GlobalContext* globalCtx) {
this->unk_274 = 0;
this->unk_276 = 0;
if (this->unk_270 <= 0) {
- if ((s32)((gSaveContext.save.roomInf[127][6] & 0xFFFF0000) >> 0x10) < this->unk_280) {
- gSaveContext.save.roomInf[127][6] =
- ((gSaveContext.save.roomInf[127][6]) & 0xFFFF) | ((u16)this->unk_280 << 0x10);
+ if ((s32)((gSaveContext.save.unk_EF4 & 0xFFFF0000) >> 0x10) < this->unk_280) {
+ gSaveContext.save.unk_EF4 = ((gSaveContext.save.unk_EF4) & 0xFFFF) | ((u16)this->unk_280 << 0x10);
}
this->unk_270 = 15;
if (this->unk_280 >= 0x848) {
@@ -1165,8 +1164,8 @@ void func_809C8BF0(EnSyatekiMan* this, GlobalContext* globalCtx) {
if ((this->unk_270 <= 0) && !globalCtx->interfaceCtx.isMinigamePerfect) {
Flags_SetAllTreasure(globalCtx, this->unk_280);
this->unk_270 = 15;
- if (((s32)(gSaveContext.save.roomInf[127][6] & 0xFFFF) < this->unk_280) || (this->unk_280 == 50)) {
- if ((s32)(gSaveContext.save.roomInf[127][6] & 0xFFFF) < this->unk_280) {
+ if (((s32)(gSaveContext.save.unk_EF4 & 0xFFFF) < this->unk_280) || (this->unk_280 == 50)) {
+ if ((s32)(gSaveContext.save.unk_EF4 & 0xFFFF) < this->unk_280) {
if (!(gSaveContext.save.weekEventReg[59] & 0x20)) {
func_801518B0(globalCtx, 0x407, &this->actor);
this->unk_284 = 0x407;
@@ -1181,7 +1180,7 @@ void func_809C8BF0(EnSyatekiMan* this, GlobalContext* globalCtx) {
func_801518B0(globalCtx, 0x406, &this->actor);
this->unk_284 = 0x406;
}
- gSaveContext.save.roomInf[127][6] = (gSaveContext.save.roomInf[127][6] & 0xFFFF0000) | (this->unk_280 & 0xFFFF);
+ gSaveContext.save.unk_EF4 = (gSaveContext.save.unk_EF4 & 0xFFFF0000) | (this->unk_280 & 0xFFFF);
this->unk_26A = 6;
} else {
if (CURRENT_DAY != 3) {
diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
index 6e626b752..952743c89 100644
--- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
+++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c
@@ -168,7 +168,7 @@ void EnThiefbird_Init(Actor* thisx, GlobalContext* globalCtx) {
D_80C1392C = 1;
Math_Vec3f_Copy(&D_80C13920, &this->actor.world.pos);
Actor_MarkForDeath(&this->actor);
- } else if ((gSaveContext.save.roomInf[126][5] & 0xFF000000) >> 0x18) {
+ } else if ((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18) {
Actor_MarkForDeath(&this->actor);
} else {
func_80C11538(this);
@@ -260,7 +260,7 @@ s32 func_80C10B0C(EnThiefbird* this, GlobalContext* globalCtx) {
itemId1 = ITEM_SWORD_GREAT_FAIRY;
} else {
CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE;
- TAKE_EQUIPPED_ITEM(EQUIP_SWORD);
+ SET_EQUIP_VALUE(EQUIP_SWORD, 0);
this->unk_3E8 = D_80C13680[phi_a3 - 1];
}
@@ -271,11 +271,10 @@ s32 func_80C10B0C(EnThiefbird* this, GlobalContext* globalCtx) {
return false;
}
- if (!((gSaveContext.save.roomInf[126][5] & 0xFF000000) >> 0x18)) {
- gSaveContext.save.roomInf[126][5] = (gSaveContext.save.roomInf[126][5] & 0xFFFFFF) | ((itemId1 & 0xFF) << 0x18);
+ if (!((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18)) {
+ gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & 0xFFFFFF) | ((itemId1 & 0xFF) << 0x18);
} else {
- gSaveContext.save.roomInf[126][5] =
- (gSaveContext.save.roomInf[126][5] & 0xFF00FFFF) | ((itemId1 & 0xFF) << 0x10);
+ gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & 0xFF00FFFF) | ((itemId1 & 0xFF) << 0x10);
}
return true;
@@ -571,8 +570,8 @@ void func_80C1193C(EnThiefbird* this, GlobalContext* globalCtx) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_THIEFBIRD_VOICE);
if (!(this->collider.base.atFlags & AT_BOUNCED)) {
if ((D_80C1392C != 0) && CUR_UPG_VALUE(UPG_QUIVER) &&
- (!((gSaveContext.save.roomInf[126][5] & 0xFF000000) >> 0x18) ||
- !((gSaveContext.save.roomInf[126][5] & 0xFF0000) >> 0x10)) &&
+ (!((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18) ||
+ !((gSaveContext.save.stolenItems & 0xFF0000) >> 0x10)) &&
(Rand_ZeroOne() < 0.5f) && func_80C10B0C(this, globalCtx)) {
func_80C1242C(this);
} else if (func_80C10E98(globalCtx)) {
diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
index 137012525..f740a8029 100644
--- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c
+++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c
@@ -291,7 +291,7 @@ void func_80AECA3C(EnTk* this, GlobalContext* globalCtx) {
void func_80AECA90(EnTk* this, GlobalContext* globalCtx) {
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
- globalCtx->msgCtx.unk11F22 = 0;
+ globalCtx->msgCtx.msgMode = 0;
globalCtx->msgCtx.unk11F10 = 0;
func_80AEDE10(this, globalCtx);
} else if (this->actor.xzDistToPlayer < 100.0f) {
@@ -318,7 +318,7 @@ void func_80AECB6C(EnTk* this, GlobalContext* globalCtx) {
this->actor.textId = 0;
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
- globalCtx->msgCtx.unk11F22 = 0;
+ globalCtx->msgCtx.msgMode = 0;
globalCtx->msgCtx.unk11F10 = 0;
func_80AED4F8(this, globalCtx);
return;
@@ -690,7 +690,7 @@ void func_80AED940(EnTk* this, GlobalContext* globalCtx) {
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
this->unk_2CA &= ~0x80;
this->actor.flags &= ~0x10000;
- globalCtx->msgCtx.unk11F22 = 0;
+ globalCtx->msgCtx.msgMode = 0;
globalCtx->msgCtx.unk11F10 = 0;
func_80AEDE10(this, globalCtx);
} else if (!(this->unk_2CA & 0x80)) {
@@ -871,7 +871,7 @@ void func_80AEDF5C(EnTk* this, GlobalContext* globalCtx) {
this->unk_2CA |= 2;
if (globalCtx->msgCtx.choiceIndex == 0) {
func_8019F208();
- globalCtx->msgCtx.unk11F22 = 0x44;
+ globalCtx->msgCtx.msgMode = 0x44;
func_80AEE2A8(this, globalCtx);
} else {
func_8019F230();
diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c
index e644b7322..e36dae75a 100644
--- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c
+++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c
@@ -199,7 +199,7 @@ void EnTrt_EndInteraction(GlobalContext* globalCtx, EnTrt* this) {
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
Actor_ProcessTalkRequest(&this->actor, &globalCtx->state);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
Interface_ChangeAlpha(50);
this->drawCursor = 0;
@@ -342,7 +342,7 @@ void EnTrt_GetMushroom(EnTrt* this, GlobalContext* globalCtx) {
ActorCutscene_Stop(this->cutscene);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = EnTrt_PayForMushroom;
break;
@@ -387,7 +387,7 @@ void EnTrt_SetupTryToGiveRedPotion(EnTrt* this, GlobalContext* globalCtx) {
ActorCutscene_Stop(this->cutscene);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = EnTrt_GiveRedPotionForKoume;
} else {
@@ -632,7 +632,7 @@ void EnTrt_SetupBuyItemWithFanfare(GlobalContext* globalCtx, EnTrt* this) {
Player* player = GET_PLAYER(globalCtx);
Actor_PickUp(&this->actor, globalCtx, this->items[this->cursorIdx]->getItemId, 300.0f, 300.0f);
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
player->stateFlags2 &= ~0x20000000;
Interface_ChangeAlpha(50);
@@ -950,7 +950,7 @@ void EnTrt_TryToGiveRedPotion(EnTrt* this, GlobalContext* globalCtx) {
ActorCutscene_Stop(this->cutscene);
this->cutsceneState = ENTRT_CUTSCENESTATE_STOPPED;
}
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->actionFunc = EnTrt_GiveRedPotionForKoume;
} else {
diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
index 296341f20..5ef7eddc7 100644
--- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
+++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c
@@ -328,7 +328,7 @@ void func_80AD3CEC(EnTrt2* this, GlobalContext* globalCtx) {
func_801518B0(globalCtx, this->unk_3A8, &this->actor);
this->unk_3D8 = false;
} else if ((sp27 == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
func_80AD3380(&this->skelAnime, sAnimations, 6);
this->unk_3B2 = 4;
@@ -356,7 +356,7 @@ void func_80AD3DA4(EnTrt2* this, GlobalContext* globalCtx) {
void func_80AD3E34(EnTrt2* this, GlobalContext* globalCtx) {
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
if (Inventory_HasEmptyBottle()) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_3B2 = 12;
} else {
@@ -384,7 +384,7 @@ void func_80AD3EF0(EnTrt2* this, GlobalContext* globalCtx) {
}
}
} else if ((temp_v0 == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
this->unk_3B2 = 12;
}
@@ -428,7 +428,7 @@ void func_80AD417C(EnTrt2* this, GlobalContext* globalCtx) {
func_80AD349C(this);
func_80AD3DA4(this, globalCtx);
} else {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
if (this->unk_3A8 == 0x84C) {
func_80AD3380(&this->skelAnime, sAnimations, 6);
@@ -510,7 +510,7 @@ void func_80AD4550(EnTrt2* this, GlobalContext* globalCtx) {
}
if ((sp23 == 5) && func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
}
}
diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
index 3aa692b90..c276b222a 100644
--- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
+++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c
@@ -485,7 +485,7 @@ void EnWeatherTag_Update(Actor* thisx, GlobalContext* globalCtx) {
u16 oldTime;
this->actionFunc(this, globalCtx);
- if ((globalCtx->actorCtx.unk5 & 2) && (globalCtx->msgCtx.unk11F22 != 0) && (globalCtx->msgCtx.unk11F04 == 0x5E6) &&
+ if ((globalCtx->actorCtx.unk5 & 2) && (globalCtx->msgCtx.msgMode != 0) && (globalCtx->msgCtx.unk11F04 == 0x5E6) &&
(!FrameAdvance_IsEnabled(globalCtx)) && (globalCtx->sceneLoadFlag == 0) &&
(ActorCutscene_GetCurrentIndex() == -1) && (globalCtx->csCtx.state == 0)) {
diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h
index 0c8bdc714..8360ae1e2 100644
--- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h
+++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h
@@ -4,6 +4,7 @@
#include "global.h"
#define AQUA_HOT(thisx) ((thisx)->params & 1)
+#define OBJAQUA_1 1
struct ObjAqua;
diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
index 18ff5d8dc..d61b3f771 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c
@@ -5,8 +5,10 @@
*/
#include "z_obj_bean.h"
+#include "objects/object_mamenoki/object_mamenoki.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS 0x00400000
+#define FLAGS (ACTOR_FLAG_400000)
#define THIS ((ObjBean*)thisx)
@@ -14,7 +16,50 @@ void ObjBean_Init(Actor* thisx, GlobalContext* globalCtx);
void ObjBean_Destroy(Actor* thisx, GlobalContext* globalCtx);
void ObjBean_Update(Actor* thisx, GlobalContext* globalCtx);
-#if 0
+void func_80937C10(ObjBean* this);
+void func_80937C24(ObjBean* this);
+void func_80937CA0(ObjBean* this);
+void func_80937CE4(ObjBean* this);
+void func_80937D54(ObjBean* this);
+void func_80937DD8(ObjBean* this);
+void func_80937DEC(ObjBean* this, GlobalContext* globalCtx);
+void func_80937FB0(ObjBean* this);
+void func_80937FC8(ObjBean* this, GlobalContext* globalCtx);
+void func_809381B0(ObjBean* this);
+void func_809381C4(ObjBean* this, GlobalContext* globalCtx);
+void func_80938284(ObjBean* this);
+void func_80938298(ObjBean* this, GlobalContext* globalCtx);
+void func_8093833C(ObjBean* this);
+void func_80938358(ObjBean* this, GlobalContext* globalCtx);
+void func_809383B4(ObjBean* this);
+void func_809383D0(ObjBean* this, GlobalContext* globalCtx);
+void func_80938408(ObjBean* this);
+void func_80938444(ObjBean* this, GlobalContext* globalCtx);
+void func_809384E8(ObjBean* this);
+void func_80938504(ObjBean* this, GlobalContext* globalCtx);
+void func_80938588(ObjBean* this);
+void func_809385A8(ObjBean* this, GlobalContext* globalCtx);
+void func_80938670(ObjBean* this);
+void func_8093868C(ObjBean* this, GlobalContext* globalCtx);
+void func_80938704(ObjBean* this);
+void func_80938728(ObjBean* this, GlobalContext* globalCtx);
+void func_8093876C(ObjBean* this);
+void func_80938780(ObjBean* this, GlobalContext* globalCtx);
+void func_80938804(ObjBean* this);
+void func_80938834(ObjBean* this, GlobalContext* globalCtx);
+void func_80938874(ObjBean* this);
+void func_809388A8(ObjBean* this, GlobalContext* globalCtx);
+void func_8093892C(ObjBean* this);
+void func_80938958(ObjBean* this, GlobalContext* globalCtx);
+void func_809389BC(ObjBean* this, GlobalContext* globalCtx);
+void func_80938A14(ObjBean* this);
+void func_80938A5C(ObjBean* this, GlobalContext* globalCtx);
+void func_80938AA4(ObjBean* this);
+void func_80938AD8(ObjBean* this, GlobalContext* globalCtx);
+void func_80938C1C(Actor* thisx, GlobalContext* globalCtx);
+void func_80938E00(Actor* thisx, GlobalContext* globalCtx);
+void func_80938F50(Actor* thisx, GlobalContext* globalCtx);
+
const ActorInit Obj_Bean_InitVars = {
ACTOR_OBJ_BEAN,
ACTORCAT_BG,
@@ -27,160 +72,895 @@ const ActorInit Obj_Bean_InitVars = {
(ActorFunc)NULL,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80938FA0 = {
- { COLTYPE_NONE, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_PLAYER, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit1 = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_NONE,
+ OC1_ON | OC1_TYPE_PLAYER,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
{ 64, 30, -31, { 0, 0, 0 } },
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80938FCC = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_OTHER, OC1_NONE, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
+static ColliderCylinderInit sCylinderInit2 = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_OTHER,
+ OC1_NONE,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
{ 10, 10, 0, { 0, 0, 0 } },
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_8093902C[] = {
+static Vec2f D_80938FF8[4] = {
+ { 3.0f, 0.3f },
+ { 10.0f, 0.5f },
+ { 30.0f, 0.5f },
+ { 3.0f, 0.3f },
+};
+
+void func_80936CF0(ObjBean* this, GlobalContext* globalCtx) {
+ Vec3f sp24;
+ s32 sp20;
+
+ sp24.x = this->dyna.actor.world.pos.x;
+ sp24.y = this->dyna.actor.world.pos.y + 29.999998f;
+ sp24.z = this->dyna.actor.world.pos.z;
+ this->dyna.actor.floorHeight =
+ BgCheck_EntityRaycastFloor5(&globalCtx->colCtx, &this->dyna.actor.floorPoly, &sp20, &this->dyna.actor, &sp24);
+}
+
+s32 func_80936D58(ObjBean* this, GlobalContext* globalCtx) {
+ static Vec3f D_80939018 = { 0.0f, 30.0f, 0.0f };
+ s32 pad;
+ s32 spB8;
+ Vec3f spAC;
+ Vec3f spA0;
+ Vec3f sp94;
+ Vec3f sp88;
+ MtxF sp48;
+
+ Matrix_RotateY(this->dyna.actor.shape.rot.y, MTXMODE_NEW);
+ Matrix_InsertXRotation_s(this->dyna.actor.shape.rot.x, MTXMODE_APPLY);
+ Matrix_InsertZRotation_s(this->dyna.actor.shape.rot.z, MTXMODE_APPLY);
+ Matrix_MultiplyVector3fByState(&D_80939018, &spAC);
+ Math_Vec3f_Sum(&this->dyna.actor.world.pos, &spAC, &spA0);
+ Math_Vec3f_Diff(&this->dyna.actor.world.pos, &spAC, &sp94);
+
+ if (BgCheck_EntityLineTest2(&globalCtx->colCtx, &spA0, &sp94, &sp88, &this->dyna.actor.floorPoly, 1, 1, 1, 1, &spB8,
+ &this->dyna.actor)) {
+ this->dyna.actor.world.pos.x = (COLPOLY_GET_NORMAL(this->dyna.actor.floorPoly->normal.x) * 1.9f) + sp88.x;
+ this->dyna.actor.world.pos.y = (COLPOLY_GET_NORMAL(this->dyna.actor.floorPoly->normal.y) * 1.9f) + sp88.y;
+ this->dyna.actor.world.pos.z = (COLPOLY_GET_NORMAL(this->dyna.actor.floorPoly->normal.z) * 1.9f) + sp88.z;
+ func_800C0094(this->dyna.actor.floorPoly, this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
+ this->dyna.actor.world.pos.z, &sp48);
+ Matrix_SetCurrentState(&sp48);
+ Matrix_RotateY(this->dyna.actor.shape.rot.y, MTXMODE_APPLY);
+ Matrix_CopyCurrentState(&sp48);
+ func_8018219C(&sp48, &this->dyna.actor.shape.rot, 0);
+ return true;
+ }
+ return false;
+}
+
+void func_80936F04(ObjBean* this) {
+ this->unk_1AC = this->unk_1AE = this->unk_1B0 = 0;
+ this->unk_1C8 = 0.0f;
+}
+
+void func_80936F24(ObjBean* this) {
+ this->unk_1AC += 0xB6;
+ this->unk_1AE += 0xFB;
+ this->unk_1B0 += 0x64;
+ Math_StepToF(&this->unk_1C8, 2.0f, 0.1f);
+ this->unk_1CC = (Math_SinS(this->unk_1AC * 3) + Math_SinS(this->unk_1AE * 3)) * this->unk_1C8;
+ this->unk_1D0 = (Math_CosS(this->unk_1AC * 4) + Math_CosS(this->unk_1AE * 4)) * this->unk_1C8;
+ this->dyna.actor.scale.z =
+ ((Math_SinS(this->unk_1B0 * 5) * 0.06f) + (Math_SinS(this->unk_1AE * 8) * 0.01f) + 1.07f) * 0.1f;
+ this->dyna.actor.scale.x = this->dyna.actor.scale.z;
+ this->dyna.actor.scale.y = ((Math_CosS(this->unk_1B0 * 10) * 0.2f) + 1.0f) * 0.1f;
+ this->dyna.actor.shape.rot.y = (this->dyna.actor.home.rot.y + (s32)(Math_SinS(this->unk_1AC * 3) * 1000.0f)) +
+ (s32)(Math_SinS(this->unk_1B0 * 2) * 2100.0f);
+}
+
+void func_80937130(ObjBean* this) {
+ this->unk_1AC = this->unk_1AE = this->unk_1B0 = 0;
+ Actor_SetScale(&this->dyna.actor, 0.0f);
+}
+
+void func_80937160(ObjBean* this) {
+ this->unk_1AC += 0x384;
+ if (this->unk_1AC > 0x5FFF) {
+ this->unk_1AC = 0x5FFF;
+ }
+
+ this->unk_1AE += 0x258;
+ if (this->unk_1AE > 0x4000) {
+ this->unk_1AE = 0x4000;
+ }
+
+ this->dyna.actor.scale.y = Math_SinS(this->unk_1AC) * 0.16970563f;
+ this->dyna.actor.scale.x = this->dyna.actor.scale.z = Math_SinS(this->unk_1AE) * 0.10700001f;
+ Math_StepToF(&this->unk_1CC, 0.0f, 0.1f);
+ Math_StepToF(&this->unk_1D0, 0.0f, 0.1f);
+ Math_ScaledStepToS(&this->dyna.actor.shape.rot.y, this->dyna.actor.home.rot.y, 100);
+}
+
+void func_80937238(ObjBean* this) {
+ this->dyna.actor.world.pos.x = this->unk_1BC.x + this->unk_1CC;
+ this->dyna.actor.world.pos.y = this->unk_1BC.y;
+ this->dyna.actor.world.pos.z = this->unk_1BC.z + this->unk_1D0;
+}
+
+void func_80937268(ObjBean* this, GlobalContext* globalCtx) {
+ this->unk_1D8 = globalCtx->setupPathList[OBJBEAN_GET_3F00(&this->dyna.actor)].count - 1;
+ this->unk_1DA = 0;
+ this->unk_1DC = 1;
+}
+
+void func_809372A8(ObjBean* this) {
+ Math_Vec3s_ToVec3f(&this->unk_1BC, this->unk_1D4);
+}
+
+void func_809372D0(ObjBean* this) {
+ Actor* actor = &this->dyna.actor;
+ Vec3f sp38;
+ f32 sp34;
+ f32 temp_f2;
+ f32 temp_f12;
+
+ Math_Vec3s_ToVec3f(&sp38, &this->unk_1D4[this->unk_1DC]);
+ Math_Vec3f_Diff(&sp38, &this->unk_1BC, &actor->velocity);
+
+ sp34 = Math3D_Vec3fMagnitude(&actor->velocity);
+ temp_f2 = D_80938FF8[this->unk_1DE].x;
+ temp_f12 = D_80938FF8[this->unk_1DE].y;
+ if (sp34 < (actor->speedXZ * 8.0f)) {
+ temp_f2 = ((temp_f2 - 2.0f) * 0.1f) + 2.0f;
+ temp_f12 *= 0.4f;
+ }
+
+ Math_StepToF(&actor->speedXZ, temp_f2, temp_f12);
+
+ if ((actor->speedXZ + 0.05f) < sp34) {
+ Math_Vec3f_Scale(&actor->velocity, actor->speedXZ / sp34);
+ this->unk_1BC.x += actor->velocity.x;
+ this->unk_1BC.y += actor->velocity.y;
+ this->unk_1BC.z += actor->velocity.z;
+ } else {
+ Math_Vec3f_Copy(&this->unk_1BC, &sp38);
+ this->unk_1DA = this->unk_1DC;
+ if (this->unk_1DA >= this->unk_1D8) {
+ this->unk_1DC = 0;
+ } else {
+ this->unk_1DC++;
+ }
+ actor->speedXZ *= 0.5f;
+ }
+}
+
+s32 func_80937468(ObjBean* this, GlobalContext* globalCtx) {
+ Actor* bgActor = globalCtx->actorCtx.actorLists[ACTORCAT_BG].first;
+
+ while (bgActor != NULL) {
+ if ((bgActor->id == ACTOR_EN_HORSE) &&
+ (Math3D_Vec3fDistSq(&bgActor->world.pos, &this->dyna.actor.world.pos) < SQ(100.0f))) {
+ return true;
+ }
+ bgActor = bgActor->next;
+ }
+
+ return false;
+}
+
+ObjBean* func_809374F8(ObjBean* this, GlobalContext* globalCtx) {
+ Actor* bgActor = globalCtx->actorCtx.actorLists[ACTORCAT_BG].first;
+ s32 params = OBJBEAN_GET_3F80(&this->dyna.actor, 0);
+
+ while (bgActor != NULL) {
+ if (bgActor->id == ACTOR_OBJ_BEAN) {
+ s32 params2 = OBJBEAN_GET_C000(bgActor);
+
+ if (!params2 && (bgActor->room == this->dyna.actor.room) && !OBJBEAN_GET_80(bgActor) &&
+ (params == OBJBEAN_GET_7F(bgActor, 0)) &&
+ (Math3D_Vec3fDistSq(&bgActor->world.pos, &this->dyna.actor.world.pos) < SQ(10.0f))) {
+ break;
+ }
+ }
+ bgActor = bgActor->next;
+ }
+
+ return (ObjBean*)bgActor;
+}
+
+void func_809375C8(ObjBean* this, GlobalContext* globalCtx) {
+ ObjBean* bean = func_809374F8(this, globalCtx);
+
+ if (bean != NULL) {
+ bean->unk_200 = 1;
+ }
+}
+
+void func_809375F4(ObjBean* this, GlobalContext* globalCtx) {
+ static Gfx* D_80939024[] = {
+ gameplay_keep_DL_0527F0,
+ gameplay_keep_DL_0528B0,
+ };
+ Vec3f spC4;
+ Vec3f spB8;
+ f32 temp_f20;
+ s32 temp_s2;
+ s16 temp_s1 = 0;
+ s32 phi_s3;
+ s32 phi_v0;
+ s32 i;
+
+ for (i = 0; i < 36; i++) {
+ temp_s1 += 0x4E20;
+ temp_f20 = Rand_ZeroOne() * 60.0f;
+
+ spC4.x = (Math_SinS(temp_s1) * temp_f20) + this->dyna.actor.world.pos.x;
+ spC4.y = this->dyna.actor.world.pos.y;
+ spC4.z = (Math_CosS(temp_s1) * temp_f20) + this->dyna.actor.world.pos.z;
+
+ spB8.x = Math_SinS(temp_s1) * 3.5f;
+ spB8.y = Rand_ZeroOne() * 13.0f;
+ spB8.z = Math_CosS(temp_s1) * 3.5f;
+
+ spB8.x += this->dyna.actor.world.pos.x - this->dyna.actor.prevPos.x;
+ spB8.y += this->dyna.actor.world.pos.y - this->dyna.actor.prevPos.y;
+ spB8.z += this->dyna.actor.world.pos.z - this->dyna.actor.prevPos.z;
+
+ temp_s2 = (s32)(Rand_ZeroOne() * 180.0f) + 30;
+
+ phi_v0 = 0x40;
+ if (temp_s2 < 0x5A) {
+ phi_s3 = -0x50;
+ if (Rand_ZeroOne() < 0.1f) {
+ phi_v0 = 0x60;
+ } else {
+ phi_v0 = 0x40;
+ }
+ } else {
+ phi_s3 = -100;
+ phi_v0 = 0x40;
+ }
+ EffectSsKakera_Spawn(globalCtx, &spC4, &spB8, &spC4, phi_s3, phi_v0, 40, 3, 0, temp_s2, 0, 0,
+ (temp_s2 >> 3) + 40, -1, 1, D_80939024[i & 1]);
+ }
+}
+
+static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneForward, 2500, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
ICHAIN_F32(uncullZoneDownward, 200, ICHAIN_STOP),
};
-#endif
-
-extern ColliderCylinderInit D_80938FA0;
-extern ColliderCylinderInit D_80938FCC;
-extern InitChainEntry D_8093902C[];
-
-extern UNK_TYPE D_06000090;
-extern UNK_TYPE D_060004BC;
-extern UNK_TYPE D_06002208;
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80936CF0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80936D58.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80936F04.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80936F24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937130.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937160.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937238.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937268.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809372A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809372D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937468.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809374F8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809375C8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809375F4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/ObjBean_Init.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/ObjBean_Destroy.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937B54.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937C10.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937C24.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937C30.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937CA0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937CE4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937D54.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937DD8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937DEC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937FB0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80937FC8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809381B0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809381C4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938284.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938298.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_8093833C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938358.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809383B4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809383D0.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938408.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938444.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809384E8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938504.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938588.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809385A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938670.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_8093868C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938704.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938728.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_8093876C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938780.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938804.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938834.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938874.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809388A8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_8093892C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938958.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938998.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_809389BC.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938A14.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938A5C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938AA4.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938AD8.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938C1C.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/ObjBean_Update.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938E00.s")
-
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Bean/func_80938F50.s")
+void ObjBean_Init(Actor* thisx, GlobalContext* globalCtx) {
+ s32 pad;
+ ObjBean* this = THIS;
+ s32 sp2C = OBJBEAN_GET_C000(&this->dyna.actor);
+
+ Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
+ this->unk_1FE = 0;
+ this->unk_1B8 = 0.1f;
+ DynaPolyActor_Init(&this->dyna, 3);
+ Collider_InitCylinder(globalCtx, &this->collider);
+
+ if ((sp2C == ENOBJBEAN_GET_C000_1) || (sp2C == ENOBJBEAN_GET_C000_2)) {
+ this->dyna.actor.update = func_80938C1C;
+ this->dyna.actor.textId = 0xFD;
+ if (sp2C == ENOBJBEAN_GET_C000_1) {
+ Collider_SetCylinder(globalCtx, &this->collider, &this->dyna.actor, &sCylinderInit2);
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+ }
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ func_80937C10(this);
+ if (!func_80936D58(this, globalCtx)) {
+ Actor_MarkForDeath(&this->dyna.actor);
+ } else {
+ func_800BC154(globalCtx, &globalCtx->actorCtx, &this->dyna.actor, 7);
+ func_80937DD8(this);
+ }
+ } else {
+ s32 params2 = OBJBEAN_GET_3F00(&this->dyna.actor);
+ Path* path = &globalCtx->setupPathList[params2];
+
+ this->unk_1DE = OBJBEAN_GET_3(&this->dyna.actor);
+ this->dyna.actor.world.rot.z = 0;
+ this->dyna.actor.home.rot.z = 0;
+ this->dyna.actor.shape.rot.z = 0;
+ this->unk_1FE |= 2;
+
+ DynaPolyActor_LoadMesh(globalCtx, &this->dyna, &object_mamenoki_Colheader_0004BC);
+ Collider_SetCylinder(globalCtx, &this->collider, &this->dyna.actor, &sCylinderInit1);
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+
+ this->unk_1D4 = Lib_SegmentedToVirtual(path->points);
+
+ func_80937268(this, globalCtx);
+ func_809372A8(this);
+ func_80937238(this);
+ ActorShape_Init(&this->dyna.actor.shape, 0.0f, ActorShadow_DrawCircle, 8.8f);
+ func_80936CF0(this, globalCtx);
+
+ if (!OBJBEAN_GET_80(&this->dyna.actor) && Flags_GetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 0)) &&
+ !Flags_GetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 1)) && func_800FE9B4(globalCtx)) {
+ Flags_SetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 1));
+ }
+
+ if (OBJBEAN_GET_80(&this->dyna.actor) || Flags_GetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 1))) {
+ func_80938804(this);
+ } else {
+ func_800C62BC(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
+ func_80938704(this);
+ }
+ }
+}
+
+void ObjBean_Destroy(Actor* thisx, GlobalContext* globalCtx) {
+ ObjBean* this = THIS;
+
+ DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
+ Collider_DestroyCylinder(globalCtx, &this->collider);
+}
+
+void func_80937B54(ObjBean* this) {
+ Math_StepToS(&this->unk_1EE, this->unk_1F0, this->unk_1F2);
+ Math_StepToS(&this->unk_1F4, this->unk_1F6, this->unk_1F8);
+ this->unk_1FA += this->unk_1F4;
+ this->unk_1FC = 6372.0f - (Math_SinS(this->unk_1FA) * this->unk_1EE);
+ this->dyna.actor.scale.y = Math_SinS(this->unk_1FC) * 0.17434467f;
+ this->dyna.actor.scale.x = this->dyna.actor.scale.z = Math_CosS(this->unk_1FC) * 0.12207746f;
+}
+
+void func_80937C10(ObjBean* this) {
+ this->unk_1E8 = func_80937C24;
+}
+
+void func_80937C24(ObjBean* this) {
+}
+
+void func_80937C30(ObjBean* this) {
+ this->unk_1E8 = func_80937CA0;
+ this->unk_1EC = Rand_S16Offset(12, 40);
+ this->unk_1F0 = Rand_S16Offset(200, 400);
+ this->unk_1F2 = 20;
+ this->unk_1F6 = Rand_S16Offset(100, 800);
+ this->unk_1F8 = 20;
+}
+
+void func_80937CA0(ObjBean* this) {
+ this->unk_1EC--;
+ func_80937B54(this);
+ if (this->unk_1EC < 0) {
+ func_80937CE4(this);
+ }
+}
+
+void func_80937CE4(ObjBean* this) {
+ this->unk_1E8 = func_80937D54;
+ this->unk_1EC = Rand_S16Offset(30, 4);
+ this->unk_1F0 = Rand_S16Offset(2000, 1000);
+ this->unk_1F2 = 200;
+ this->unk_1F6 = Rand_S16Offset(14000, 6000);
+ this->unk_1F8 = 4000;
+}
+
+void func_80937D54(ObjBean* this) {
+ this->unk_1EC--;
+ if (this->unk_1EC == 14) {
+ this->unk_1F0 = Rand_S16Offset(200, 400);
+ this->unk_1F6 = Rand_S16Offset(100, 500);
+ this->unk_1F8 = 2000;
+ }
+
+ func_80937B54(this);
+
+ if (this->unk_1EC < 0) {
+ func_80937C30(this);
+ }
+}
+
+void func_80937DD8(ObjBean* this) {
+ this->actionFunc = func_80937DEC;
+}
+
+void func_80937DEC(ObjBean* this, GlobalContext* globalCtx) {
+ s32 pad;
+ s32 sp20 = OBJBEAN_GET_C000(&this->dyna.actor);
+
+ if (sp20 == ENOBJBEAN_GET_C000_1) {
+ s32 pad2;
+
+ if (func_809374F8(this, globalCtx) == NULL) {
+ this->unk_1FF = false;
+ } else {
+ this->unk_1FF = true;
+ }
+ } else {
+ this->unk_1FF = false;
+ }
+
+ if (this->unk_1FF && !Flags_GetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 1)) &&
+ Flags_GetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 0)) && func_800FE9B4(globalCtx)) {
+ Flags_SetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 1));
+ }
+
+ if (this->unk_1FF && Flags_GetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 1))) {
+ Actor_MarkForDeath(&this->dyna.actor);
+ return;
+ }
+
+ if (sp20 == ENOBJBEAN_GET_C000_2) {
+ this->dyna.actor.draw = func_80938F50;
+ } else {
+ this->dyna.actor.draw = func_80938E00;
+ }
+
+ if (this->unk_1FF && Flags_GetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 0))) {
+ this->unk_1FE |= 5;
+ func_80937C30(this);
+ } else {
+ this->unk_1FE |= 1;
+ func_80937C10(this);
+ }
+
+ if (Flags_GetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 0))) {
+ this->unk_1E4 = 5;
+ } else {
+ this->unk_1E4 = 0;
+ }
+
+ func_80937FB0(this);
+}
+
+void func_80937FB0(ObjBean* this) {
+ this->unk_1E0 = 0;
+ this->actionFunc = func_80937FC8;
+}
+
+void func_80937FC8(ObjBean* this, GlobalContext* globalCtx) {
+ this->unk_1E8(this);
+
+ if (Actor_ProcessTalkRequest(&this->dyna.actor, &globalCtx->state)) {
+ if (Player_GetExchangeItemId(globalCtx) == EXCH_ITEM_2E) {
+ func_809383B4(this);
+ Flags_SetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 0));
+ }
+
+ if (Flags_GetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 0))) {
+ this->unk_1E4 = 5;
+ } else {
+ s32 pad;
+
+ this->unk_1E4 = 0;
+ }
+ } else if (this->unk_1E4 == 1) {
+ this->unk_1DF = 16;
+ func_809381B0(this);
+ } else if (((this->collider.base.acFlags & AC_HIT) && (this->collider.base.ac != NULL) &&
+ (this->collider.base.ac->id == ACTOR_OBJ_AQUA)) ||
+ ((this->unk_1FF != 0) && (this->unk_1FE & 4) && (this->dyna.actor.xzDistToPlayer < 300.0f) &&
+ func_800FE9B4(globalCtx))) {
+ func_809375C8(this, globalCtx);
+ Flags_SetSwitch(globalCtx, OBJBEAN_GET_3F80(&this->dyna.actor, 1));
+ this->unk_1E4 = 6;
+ func_80938670(this);
+ } else if (this->unk_1FF != 0) {
+ if (this->unk_1FE & 4) {
+ this->collider.base.acFlags &= ~AC_HIT;
+ if (this->dyna.actor.xzDistToPlayer < 150.0f) {
+ CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
+ }
+ } else {
+ func_800B85E0(&this->dyna.actor, globalCtx, 28.0f, 0x2E);
+ }
+ }
+}
+
+void func_809381B0(ObjBean* this) {
+ this->actionFunc = func_809381C4;
+}
+
+void func_809381C4(ObjBean* this, GlobalContext* globalCtx) {
+ this->unk_1E8(this);
+
+ if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (this->dyna.actor.cutscene >= 0) {
+ func_800B7298(globalCtx, &this->dyna.actor, 1);
+ }
+ this->unk_1E4 = 2;
+ func_80938284(this);
+ } else if (this->unk_1E4 == 4) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ play_sound(NA_SE_SY_ERROR);
+ this->unk_1E4 = 0;
+ func_80937FB0(this);
+ } else {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ }
+}
+
+void func_80938284(ObjBean* this) {
+ this->actionFunc = func_80938298;
+}
+
+void func_80938298(ObjBean* this, GlobalContext* globalCtx) {
+ this->unk_1E8(this);
+
+ if (this->unk_1E0 >= 3) {
+ this->unk_1E4 = 3;
+ Flags_SetSwitch(globalCtx, OBJBEAN_GET_7F(&this->dyna.actor, 0));
+ this->unk_1E4 = 5;
+ func_8093833C(this);
+ } else if (this->unk_1E4 == 4) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ play_sound(NA_SE_SY_ERROR);
+ this->unk_1E4 = 0;
+ func_80937FB0(this);
+ }
+}
+
+void func_8093833C(ObjBean* this) {
+ this->actionFunc = func_80938358;
+ this->unk_1B2 = 4;
+}
+
+void func_80938358(ObjBean* this, GlobalContext* globalCtx) {
+ this->unk_1E8(this);
+
+ if (this->unk_1B2 <= 0) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ func_80937FB0(this);
+ }
+}
+
+void func_809383B4(ObjBean* this) {
+ this->unk_1B2 = 60;
+ this->actionFunc = func_809383D0;
+}
+
+void func_809383D0(ObjBean* this, GlobalContext* globalCtx) {
+ if (this->unk_1B2 <= 0) {
+ this->unk_1FE |= 4;
+ func_80938408(this);
+ }
+}
+
+void func_80938408(ObjBean* this) {
+ Actor_SetScale(&this->dyna.actor, 0.01f);
+ this->actionFunc = func_80938444;
+}
+
+void func_80938444(ObjBean* this, GlobalContext* globalCtx) {
+ s32 pad;
+ s32 sp20 = Math_StepToF(&this->dyna.actor.scale.y, 0.16672663f, 0.01f) & 1;
+
+ sp20 &= Math_StepToF(&this->dyna.actor.scale.x, 0.03569199f, 0.00113f);
+
+ this->dyna.actor.scale.z = this->dyna.actor.scale.x;
+ if (sp20) {
+ if (this->unk_1B2 <= 0) {
+ func_809384E8(this);
+ }
+ } else {
+ this->unk_1B2 = 1;
+ }
+ func_800B9010(&this->dyna.actor, NA_SE_PL_PLANT_GROW_UP - SFX_FLAG);
+}
+
+void func_809384E8(ObjBean* this) {
+ this->unk_1AC = 0x33E9;
+ this->actionFunc = func_80938504;
+}
+
+void func_80938504(ObjBean* this, GlobalContext* globalCtx) {
+ this->unk_1AC -= 2400;
+ this->dyna.actor.scale.y = Math_SinS(this->unk_1AC) * 0.17434467f;
+ this->dyna.actor.scale.x = this->dyna.actor.scale.z = Math_CosS(this->unk_1AC) * 0.12207746f;
+ if (this->unk_1AC < 6372) {
+ func_80938588(this);
+ }
+}
+
+void func_80938588(ObjBean* this) {
+ this->unk_1AC = 0;
+ this->unk_1AE = 3000;
+ this->actionFunc = func_809385A8;
+}
+
+void func_809385A8(ObjBean* this, GlobalContext* globalCtx) {
+ s32 pad;
+ s16 sp22;
+
+ this->unk_1AC += 16000;
+ this->unk_1AE -= 200;
+ sp22 = 6372.0f - (Math_SinS(this->unk_1AC) * this->unk_1AE);
+ this->dyna.actor.scale.y = Math_SinS(sp22) * 0.17434467f;
+ this->dyna.actor.scale.x = this->dyna.actor.scale.z = Math_CosS(sp22) * 0.12207746f;
+ if (this->unk_1AE < 0) {
+ func_80937C30(this);
+ func_80937FB0(this);
+ }
+}
+
+void func_80938670(ObjBean* this) {
+ this->actionFunc = func_8093868C;
+ this->unk_1B2 = 73;
+}
+
+void func_8093868C(ObjBean* this, GlobalContext* globalCtx) {
+ if (this->unk_1B2 <= 0) {
+ Actor_MarkForDeath(&this->dyna.actor);
+ } else if (this->unk_1B2 <= 20) {
+ this->dyna.actor.scale.x *= 0.89f;
+ this->dyna.actor.scale.y *= 0.89f;
+ this->dyna.actor.scale.z *= 0.89f;
+ this->unk_1B8 *= 0.89f;
+ }
+}
+
+void func_80938704(ObjBean* this) {
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ this->dyna.actor.draw = NULL;
+ this->actionFunc = func_80938728;
+}
+
+void func_80938728(ObjBean* this, GlobalContext* globalCtx) {
+ if (this->unk_200 != 0) {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ func_8093876C(this);
+ }
+}
+
+void func_8093876C(ObjBean* this) {
+ this->actionFunc = func_80938780;
+}
+
+void func_80938780(ObjBean* this, GlobalContext* globalCtx) {
+ if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
+ if (this->dyna.actor.cutscene >= 0) {
+ func_800B7298(globalCtx, &this->dyna.actor, 1);
+ }
+ this->unk_1B4 = 36;
+ func_80937130(this);
+ func_80938AA4(this);
+ } else {
+ ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
+ }
+}
+
+void func_80938804(ObjBean* this) {
+ this->dyna.actor.flags &= ~ACTOR_FLAG_10;
+ this->dyna.actor.draw = func_80938E00;
+ this->actionFunc = func_80938834;
+}
+
+void func_80938834(ObjBean* this, GlobalContext* globalCtx) {
+ if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ func_80938874(this);
+ }
+ func_80936F24(this);
+}
+
+void func_80938874(ObjBean* this) {
+ this->actionFunc = func_809388A8;
+ this->dyna.actor.draw = func_80938E00;
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ this->dyna.actor.speedXZ = 0.0f;
+}
+
+void func_809388A8(ObjBean* this, GlobalContext* globalCtx) {
+ func_809372D0(this);
+ if (this->unk_1DA == this->unk_1D8) {
+ func_80937268(this, globalCtx);
+ func_809372A8(this);
+ func_8093892C(this);
+ } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ func_800B9010(&this->dyna.actor, NA_SE_PL_PLANT_MOVE - SFX_FLAG);
+ }
+ func_80936F24(this);
+}
+
+void func_8093892C(ObjBean* this) {
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ this->dyna.actor.draw = func_80938E00;
+ this->actionFunc = func_80938958;
+}
+
+void func_80938958(ObjBean* this, GlobalContext* globalCtx) {
+ if (!DynaPolyActor_IsInRidingRotatingState(&this->dyna)) {
+ func_80938804(this);
+ }
+ func_80936F24(this);
+}
+
+void func_80938998(ObjBean* this) {
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ this->dyna.actor.draw = NULL;
+ this->actionFunc = func_809389BC;
+}
+
+void func_809389BC(ObjBean* this, GlobalContext* globalCtx) {
+ if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) {
+ func_80937268(this, globalCtx);
+ func_809372A8(this);
+ func_80937238(this);
+ func_80938A14(this);
+ }
+}
+
+void func_80938A14(ObjBean* this) {
+ this->dyna.actor.draw = NULL;
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ this->unk_1B2 = 100;
+ func_80937130(this);
+ this->actionFunc = func_80938A5C;
+}
+
+void func_80938A5C(ObjBean* this, GlobalContext* globalCtx) {
+ if (func_80937468(this, globalCtx)) {
+ this->unk_1B2 = 100;
+ } else if (this->unk_1B2 <= 0) {
+ func_80938AA4(this);
+ }
+}
+
+void func_80938AA4(ObjBean* this) {
+ this->dyna.actor.flags |= ACTOR_FLAG_10;
+ this->dyna.actor.draw = func_80938E00;
+ this->unk_1B2 = 30;
+ this->actionFunc = func_80938AD8;
+}
+
+void func_80938AD8(ObjBean* this, GlobalContext* globalCtx) {
+ s32 pad;
+ s32 sp30 = func_80937468(this, globalCtx);
+
+ func_80937160(this);
+ if (this->unk_1B2 == 25) {
+ Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_PL_PLANT_GROW_BIG);
+ }
+
+ if (sp30 != 0) {
+ func_800C6314(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
+ } else {
+ func_800C6314(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
+ }
+
+ if (this->dyna.actor.xzDistToPlayer < 74.0f) {
+ Player* player = GET_PLAYER(globalCtx);
+ f32 sp28 = 74.0f - this->dyna.actor.xzDistToPlayer;
+ f32 sin;
+ f32 cos;
+
+ if (sp28 > 8.0f) {
+ sp28 = 8.0f;
+ }
+
+ sin = Math_SinS(this->dyna.actor.yawTowardsPlayer) * sp28;
+ cos = Math_CosS(this->dyna.actor.yawTowardsPlayer) * sp28;
+
+ player->actor.world.pos.x += sin;
+ player->actor.world.pos.z += cos;
+ }
+
+ if ((this->unk_1B2 <= 0) && (sp30 == 0)) {
+ func_80936F04(this);
+ func_80938804(this);
+ }
+}
+
+void func_80938C1C(Actor* thisx, GlobalContext* globalCtx) {
+ ObjBean* this = THIS;
+
+ if (this->unk_1B2 > 0) {
+ this->unk_1B2--;
+ }
+
+ if (this->unk_1DF > 0) {
+ this->unk_1DF--;
+ if (this->unk_1DF == 0) {
+ play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ }
+ }
+
+ this->actionFunc(this, globalCtx);
+}
+
+void ObjBean_Update(Actor* thisx, GlobalContext* globalCtx) {
+ s32 pad;
+ ObjBean* this = THIS;
+
+ if (this->unk_1B2 > 0) {
+ this->unk_1B2--;
+ }
+
+ this->actionFunc(this, globalCtx);
+
+ if (this->unk_1B4 > 0) {
+ this->unk_1B4--;
+ if (this->unk_1B4 == 0) {
+ ActorCutscene_Stop(this->dyna.actor.cutscene);
+ }
+ }
+
+ if (this->dyna.actor.draw != NULL) {
+ func_80937238(this);
+ if (this->dyna.actor.xzDistToPlayer < 150.0f) {
+ this->collider.dim.radius = (this->dyna.actor.scale.x * 640.0f) + 0.5f;
+ Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
+ CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
+ }
+ func_80936CF0(this, globalCtx);
+ this->dyna.actor.shape.shadowDraw = ActorShadow_DrawCircle;
+ this->dyna.actor.shape.shadowScale = this->dyna.actor.scale.x * 88.0f;
+ if (func_80937468(this, globalCtx)) {
+ func_809375F4(this, globalCtx);
+ func_800C62BC(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
+ func_80938998(this);
+ }
+ } else {
+ this->dyna.actor.shape.shadowDraw = NULL;
+ }
+ Actor_SetFocus(&this->dyna.actor, 6.0f);
+}
+
+void func_80938E00(Actor* thisx, GlobalContext* globalCtx) {
+ ObjBean* this = THIS;
+
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ func_8012C28C(globalCtx->state.gfxCtx);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ if (this->unk_1FE & 4) {
+ gSPDisplayList(POLY_OPA_DISP++, object_mamenoki_DL_000090);
+ }
+
+ if (this->unk_1FE & 2) {
+ gSPDisplayList(POLY_OPA_DISP++, object_mamenoki_DL_0002D0);
+ }
+
+ if (this->unk_1FE & 1) {
+ Matrix_SetStateRotationAndTranslation(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
+ this->dyna.actor.world.pos.z, &this->dyna.actor.shape.rot);
+ Matrix_Scale(this->unk_1B8, this->unk_1B8, this->unk_1B8, MTXMODE_APPLY);
+
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, object_mamenoki_DL_000530);
+ }
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
+
+void func_80938F50(Actor* thisx, GlobalContext* globalCtx) {
+ ObjBean* this = THIS;
+
+ Gfx_DrawDListXlu(globalCtx, object_mamenoki_DL_002208);
+}
diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
index 5156011ff..da6e4a22c 100644
--- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
+++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.h
@@ -6,9 +6,16 @@
struct ObjBean;
typedef void (*ObjBeanActionFunc)(struct ObjBean*, GlobalContext*);
+typedef void (*ObjBeanUnkFunc)(struct ObjBean*);
+#define OBJBEAN_GET_7F(thisx, x) (((thisx)->params + (x)) & 0x7F)
+#define OBJBEAN_GET_80(thisx) (((thisx)->params >> 7) & 1)
+#define OBJBEAN_GET_3F00(thisx) (((thisx)->params >> 8) & 0x3F)
+#define OBJBEAN_GET_3F80(thisx, x) ((((thisx)->params >> 7) + (x)) & 0x7F)
#define OBJBEAN_GET_C000(thisx) (((thisx)->params >> 0xE) & 3)
+#define OBJBEAN_GET_3(thisx) ((thisx)->home.rot.z & 3)
+
enum {
/* 0x00 */ ENOBJBEAN_GET_C000_0,
/* 0x01 */ ENOBJBEAN_GET_C000_1,
@@ -16,13 +23,40 @@ enum {
};
typedef struct ObjBean {
- /* 0x0000 */ Actor actor;
- /* 0x0144 */ char unk_144[0x18];
- /* 0x015C */ ObjBeanActionFunc actionFunc;
- /* 0x0160 */ char unk_160[0x80];
- /* 0x01E0 */ s8 unk_1E0;
- /* 0x01E4 */ s32 unk_1E4;
- /* 0x01E8 */ char unk_1E8[0x1C];
+ /* 0x000 */ DynaPolyActor dyna;
+ /* 0x15C */ ObjBeanActionFunc actionFunc;
+ /* 0x160 */ ColliderCylinder collider;
+ /* 0x1AC */ s16 unk_1AC;
+ /* 0x1AE */ s16 unk_1AE;
+ /* 0x1B0 */ s16 unk_1B0;
+ /* 0x1B2 */ s16 unk_1B2;
+ /* 0x1B4 */ s8 unk_1B4;
+ /* 0x1B8 */ f32 unk_1B8;
+ /* 0x1BC */ Vec3f unk_1BC;
+ /* 0x1C8 */ f32 unk_1C8;
+ /* 0x1CC */ f32 unk_1CC;
+ /* 0x1D0 */ f32 unk_1D0;
+ /* 0x1D4 */ Vec3s* unk_1D4;
+ /* 0x1D8 */ s16 unk_1D8;
+ /* 0x1DA */ s16 unk_1DA;
+ /* 0x1DC */ s16 unk_1DC;
+ /* 0x1DE */ s8 unk_1DE;
+ /* 0x1DF */ s8 unk_1DF;
+ /* 0x1E0 */ s8 unk_1E0;
+ /* 0x1E4 */ s32 unk_1E4;
+ /* 0x1E8 */ ObjBeanUnkFunc unk_1E8;
+ /* 0x1EC */ s16 unk_1EC;
+ /* 0x1EE */ s16 unk_1EE;
+ /* 0x1F0 */ s16 unk_1F0;
+ /* 0x1F2 */ s16 unk_1F2;
+ /* 0x1F4 */ s16 unk_1F4;
+ /* 0x1F6 */ s16 unk_1F6;
+ /* 0x1F8 */ s16 unk_1F8;
+ /* 0x1FA */ s16 unk_1FA;
+ /* 0x1FC */ s16 unk_1FC;
+ /* 0x1FE */ u8 unk_1FE;
+ /* 0x1FF */ u8 unk_1FF;
+ /* 0x200 */ u8 unk_200;
} ObjBean; // size = 0x204
extern const ActorInit Obj_Bean_InitVars;
diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
index 379d78c52..b7f0a8105 100644
--- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
+++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c
@@ -98,7 +98,7 @@ void func_80B3C4E0(ObjGhaka* this, GlobalContext* globalCtx) {
if (talkState == 5) {
if (func_80147624(globalCtx)) {
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
func_80B3C260(this);
}
@@ -117,7 +117,7 @@ void func_80B3C4E0(ObjGhaka* this, GlobalContext* globalCtx) {
break;
case 2:
func_8019F230();
- globalCtx->msgCtx.unk11F22 = 0x43;
+ globalCtx->msgCtx.msgMode = 0x43;
globalCtx->msgCtx.unk12023 = 4;
func_80B3C260(this);
}
diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
index 57092079a..6a4e8ce27 100644
--- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
+++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.c
@@ -5,8 +5,10 @@
*/
#include "z_obj_ice_poly.h"
+#include "overlays/actors/ovl_Obj_Aqua/z_obj_aqua.h"
+#include "objects/gameplay_keep/gameplay_keep.h"
-#define FLAGS 0x00000010
+#define FLAGS ACTOR_FLAG_10
#define THIS ((ObjIcePoly*)thisx)
@@ -15,11 +17,11 @@ void ObjIcePoly_Destroy(Actor* thisx, GlobalContext* globalCtx);
void ObjIcePoly_Update(Actor* thisx, GlobalContext* globalCtx);
void ObjIcePoly_Draw(Actor* thisx, GlobalContext* globalCtx);
+void func_80931828(ObjIcePoly* this, GlobalContext* globalCtx);
void func_80931A38(ObjIcePoly* this, GlobalContext* globalCtx);
void func_80931E58(ObjIcePoly* this, GlobalContext* globalCtx);
void func_80931EEC(ObjIcePoly* this, GlobalContext* globalCtx);
-#if 0
const ActorInit Obj_Ice_Poly_InitVars = {
ACTOR_OBJ_ICE_POLY,
ACTORCAT_ITEMACTION,
@@ -32,37 +34,327 @@ const ActorInit Obj_Ice_Poly_InitVars = {
(ActorFunc)ObjIcePoly_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80932320 = {
- { COLTYPE_HARD, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_HARD | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x02, 0x00 }, { 0xF7CFF7FF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NONE, BUMP_ON, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit1 = {
+ {
+ COLTYPE_HARD,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_HARD | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x02, 0x00 },
+ { 0xF7CFF7FF, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NONE,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 50, 105, 0, { 0, 0, 0 } },
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_8093234C = {
- { COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER | AC_TYPE_OTHER, OC1_NONE, OC2_TYPE_2, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK5, { 0xF7CFFFFF, 0x00, 0x00 }, { 0x00000800, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
+static ColliderCylinderInit sCylinderInit2 = {
+ {
+ COLTYPE_NONE,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER | AC_TYPE_OTHER,
+ OC1_NONE,
+ OC2_TYPE_2,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK5,
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ { 0x00000800, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_NONE,
+ },
{ 65, 105, 0, { 0, 0, 0 } },
};
-#endif
+static Color_RGBA8 D_80932378 = { 250, 250, 250, 255 };
+static Color_RGBA8 D_8093237C = { 180, 180, 180, 255 };
-extern ColliderCylinderInit D_80932320;
-extern ColliderCylinderInit D_8093234C;
+void ObjIcePoly_Init(Actor* thisx, GlobalContext* globalCtx) {
+ ObjIcePoly* this = THIS;
+ s32 i;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/ObjIcePoly_Init.s")
+ this->unk_149 = OBJICEPOLY_GET_FF00(thisx);
+ thisx->params &= 0xFF;
+ thisx->uncullZoneForward = 5600.0f;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/ObjIcePoly_Destroy.s")
+ Actor_SetScale(thisx, thisx->params * 0.01f);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/func_80931828.s")
+ for (i = 0; i < ARRAY_COUNT(this->colliders1); i++) {
+ Collider_InitAndSetCylinder(globalCtx, &this->colliders1[i], thisx, &sCylinderInit1);
+ Collider_InitAndSetCylinder(globalCtx, &this->colliders2[i], thisx, &sCylinderInit2);
+ Collider_UpdateCylinder(thisx, &this->colliders1[i]);
+ Collider_UpdateCylinder(thisx, &this->colliders2[i]);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/func_80931A38.s")
+ this->colliders1[0].dim.radius = thisx->scale.x * 48.0f;
+ this->colliders1[0].dim.height = thisx->scale.y * 58.0f;
+ this->colliders2[0].dim.height = this->colliders1[0].dim.height;
+ this->colliders2[0].dim.radius = this->colliders1[0].dim.radius + 17;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/func_80931E58.s")
+ this->colliders1[1].dim.radius = thisx->scale.x * 23.0f;
+ this->colliders1[1].dim.height = thisx->scale.y * 50.0f;
+ this->colliders2[1].dim.radius = this->colliders1[1].dim.radius;
+ this->colliders2[1].dim.height = this->colliders1[1].dim.height;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/func_80931EEC.s")
+ this->colliders1[1].dim.yShift = this->colliders1[0].dim.height;
+ this->colliders2[1].dim.yShift = this->colliders1[1].dim.yShift;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/ObjIcePoly_Update.s")
+ thisx->colChkInfo.mass = MASS_IMMOVABLE;
+ this->unk_148 = 255;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Obj_Ice_Poly/ObjIcePoly_Draw.s")
+ Actor_SetFocus(thisx, thisx->scale.y * 30.0f);
+
+ thisx->shape.rot.x = 0x500;
+ thisx->shape.rot.z = -0x500;
+
+ if (((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(globalCtx, this->unk_149)) ||
+ ((globalCtx->sceneNum == SCENE_KAJIYA) && (gSaveContext.save.weekEventReg[33] & 0x80))) {
+ Actor_MarkForDeath(thisx);
+ return;
+ }
+
+ this->actionFunc = func_80931A38;
+}
+
+void ObjIcePoly_Destroy(Actor* thisx, GlobalContext* globalCtx) {
+ ObjIcePoly* this = THIS;
+ s32 i;
+
+ for (i = 0; i < ARRAY_COUNT(this->colliders1); i++) {
+ Collider_DestroyCylinder(globalCtx, &this->colliders1[i]);
+ Collider_DestroyCylinder(globalCtx, &this->colliders2[i]);
+ }
+}
+
+void func_80931828(ObjIcePoly* this, GlobalContext* globalCtx) {
+ static Color_RGBA8 D_80932380 = { 170, 255, 255, 255 };
+ static Color_RGBA8 D_80932384 = { 0, 50, 100, 255 };
+ static Vec3f D_80932388 = { 0.0f, -1.0f, 0.0f };
+ f32 temp;
+ Vec3f spA0;
+ Vec3f sp94;
+ f32 sp90;
+ s32 i;
+ CollisionPoly* sp88;
+
+ spA0.x = this->actor.world.pos.x;
+ spA0.y = (this->colliders1[0].dim.height * 2) + this->actor.world.pos.y;
+ spA0.z = this->actor.world.pos.z;
+
+ sp90 = BgCheck_EntityRaycastFloor1(&globalCtx->colCtx, &sp88, &spA0);
+ if (sp90 < this->actor.world.pos.y) {
+ sp90 = this->actor.world.pos.y;
+ }
+ temp = spA0.y - sp90;
+
+ for (i = 0; i < 30; i++) {
+ sp94.x = randPlusMinusPoint5Scaled(12.0f);
+ sp94.y = Rand_ZeroFloat(15.0f);
+ sp94.z = randPlusMinusPoint5Scaled(12.0f);
+
+ spA0.x = (this->colliders1[0].dim.radius * (sp94.x * (1.0f / 12))) + this->actor.world.pos.x;
+ spA0.z = (this->colliders1[0].dim.radius * (sp94.z * (1.0f / 12))) + this->actor.world.pos.z;
+ spA0.y = Rand_ZeroFloat(temp) + sp90;
+ EffectSsEnIce_Spawn(globalCtx, &spA0, (Rand_ZeroFloat(0.4f) + 0.3f) * this->actor.scale.x, &sp94, &D_80932388,
+ &D_80932380, &D_80932384, 40);
+ }
+}
+
+void func_80931A38(ObjIcePoly* this, GlobalContext* globalCtx) {
+ s32 pad;
+ Player* player = GET_PLAYER(globalCtx);
+ Vec3f sp6C;
+ s32 i;
+ s32 pad2;
+ s32 phi_v0;
+ s32 pad3;
+ f32 sp58;
+
+ if (!(player->stateFlags2 & 0x4000) && (this->unk_14A != 0)) {
+ this->unk_14A--;
+ }
+
+ if ((this->colliders1[0].base.atFlags & AT_HIT) || (this->colliders1[1].base.atFlags & AT_HIT)) {
+ this->unk_14A = 40;
+ this->colliders1[0].base.atFlags &= ~AT_HIT;
+ this->colliders1[1].base.atFlags &= ~AT_HIT;
+ }
+
+ if (((this->colliders2[0].base.acFlags & AC_HIT) &&
+ ((this->colliders2[0].base.ac == NULL) ||
+ ((this->colliders2[0].base.ac->id != ACTOR_OBJ_AQUA) &&
+ (this->colliders2[0].info.acHitInfo->toucher.dmgFlags == 0x800)) ||
+ ((this->colliders2[0].base.ac->id == ACTOR_OBJ_AQUA) &&
+ (this->colliders2[0].base.ac->params == OBJAQUA_1)))) ||
+ ((this->colliders2[1].base.acFlags & AC_HIT) &&
+ ((this->colliders2[1].base.ac == NULL) ||
+ ((this->colliders2[1].base.ac->id != ACTOR_OBJ_AQUA) &&
+ (this->colliders2[1].info.acHitInfo->toucher.dmgFlags == 0x800)) ||
+ ((this->colliders2[1].base.ac->id == ACTOR_OBJ_AQUA) &&
+ (this->colliders2[1].base.ac->params == OBJAQUA_1))))) {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ this->unk_14A = 0;
+ this->actionFunc = func_80931E58;
+ this->actor.focus.rot.y = this->actor.yawTowardsPlayer;
+
+ if (globalCtx->sceneNum == SCENE_00KEIKOKU) {
+ Actor* actor = NULL;
+
+ do {
+ actor = SubS_FindActor(globalCtx, actor, ACTORCAT_ITEMACTION, ACTOR_OBJ_ICE_POLY);
+ if (actor != NULL) {
+ if ((&this->actor != actor) && (&this->actor != actor)) {
+ ((ObjIcePoly*)actor)->unk_14A = 0;
+ ((ObjIcePoly*)actor)->actionFunc = func_80931E58;
+ }
+ actor = actor->next;
+ }
+ } while (actor != NULL);
+ }
+ } else if ((this->unk_149 != OBJICEPOLY_FF_FF) && Flags_GetSwitch(globalCtx, this->unk_149)) {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ this->unk_14A = 1;
+ this->actionFunc = func_80931E58;
+ } else {
+ if ((this->actor.parent != NULL) && (this->actor.parent->update != NULL)) {
+ this->actor.parent->freezeTimer = 40;
+ } else {
+ this->actor.parent = NULL;
+ }
+
+ if (this->unk_14A == 0) {
+ CollisionCheck_SetAT(globalCtx, &globalCtx->colChkCtx, &this->colliders1[0].base);
+ CollisionCheck_SetAT(globalCtx, &globalCtx->colChkCtx, &this->colliders1[1].base);
+ }
+
+ for (i = 0; i < ARRAY_COUNT(this->colliders1); i++) {
+ CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->colliders1[i].base);
+ CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->colliders1[i].base);
+ CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->colliders2[i].base);
+ }
+ }
+
+ if (Rand_ZeroOne() < 0.05f) {
+ sp58 = Rand_ZeroOne();
+ if (Rand_ZeroOne() < 0.5f) {
+ phi_v0 = -1;
+ } else {
+ phi_v0 = 1;
+ }
+ sp6C.x = (phi_v0 * (15.0f + (sp58 * 15.0f)) * this->actor.scale.x) + this->actor.world.pos.x;
+ sp6C.y = (((Rand_ZeroOne() * 90.0f) + 10.0f) * this->actor.scale.y) + this->actor.world.pos.y;
+
+ sp58 = Rand_ZeroOne();
+ if (Rand_ZeroOne() < 0.5f) {
+ phi_v0 = -1;
+ } else {
+ phi_v0 = 1;
+ }
+ sp6C.z = (phi_v0 * (15.0f + (sp58 * 15.0f)) * this->actor.scale.z) + this->actor.world.pos.z;
+
+ EffectSsKiraKira_SpawnDispersed(globalCtx, &sp6C, &gZeroVec3f, &gZeroVec3f, &D_80932378, &D_8093237C, 2000, 5);
+ }
+}
+
+void func_80931E58(ObjIcePoly* this, GlobalContext* globalCtx) {
+ if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
+ ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, &this->actor);
+ if (this->unk_14A == 1) {
+ func_80931828(this, globalCtx);
+ Actor_MarkForDeath(&this->actor);
+ } else {
+ this->unk_14A = 40;
+ Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ICE_MELT);
+ this->actionFunc = func_80931EEC;
+ }
+ } else {
+ ActorCutscene_SetIntentToPlay(this->actor.cutscene);
+ }
+}
+
+void func_80931EEC(ObjIcePoly* this, GlobalContext* globalCtx) {
+ Vec3f spAC;
+ Vec3f spA0;
+ Vec3f sp94;
+ f32 temp_f20;
+ s32 i;
+ s32 phi_v0;
+
+ spAC.x = 0.0f;
+ spAC.y = this->actor.scale.y;
+ spAC.z = 0.0f;
+
+ spA0.x = 0.0f;
+ spA0.y = this->actor.scale.y;
+ spA0.z = 0.0f;
+
+ for (i = 0; i < 2; i++) {
+ temp_f20 = Rand_ZeroOne();
+ if (Rand_ZeroOne() < 0.5f) {
+ phi_v0 = -1;
+ } else {
+ phi_v0 = 1;
+ }
+ sp94.x = (phi_v0 * (20.0f + (20.0f * temp_f20)) * this->actor.scale.x) + this->actor.world.pos.x;
+ sp94.y = (Rand_ZeroOne() * this->actor.scale.y * 50.0f) + this->actor.world.pos.y;
+
+ temp_f20 = Rand_ZeroOne();
+ if (Rand_ZeroOne() < 0.5f) {
+ phi_v0 = -1;
+ } else {
+ phi_v0 = 1;
+ }
+ sp94.z = (phi_v0 * (20.0f + (20.0f * temp_f20)) * this->actor.scale.x) + this->actor.world.pos.z;
+
+ func_800B0DE0(globalCtx, &sp94, &spA0, &spAC, &D_80932378, &D_8093237C,
+ ((Rand_ZeroOne() * 100.0f) + 350.0f) * this->actor.scale.x, this->actor.scale.x * 20.0f);
+ }
+
+ if (this->unk_14A != 0) {
+ this->unk_14A--;
+ }
+
+ this->actor.scale.y = this->actor.params * 0.01f * (0.5f + (this->unk_14A * 0.0125f));
+ this->unk_148 -= 6;
+
+ if (this->unk_14A == 0) {
+ ActorCutscene_Stop(this->actor.cutscene);
+ if (this->unk_149 != OBJICEPOLY_FF_FF) {
+ Flags_SetSwitch(globalCtx, this->unk_149);
+ }
+ Actor_MarkForDeath(&this->actor);
+ }
+}
+
+void ObjIcePoly_Update(Actor* thisx, GlobalContext* globalCtx) {
+ ObjIcePoly* this = THIS;
+
+ this->actionFunc(this, globalCtx);
+}
+
+void ObjIcePoly_Draw(Actor* thisx, GlobalContext* globalCtx) {
+ s32 pad;
+ ObjIcePoly* this = THIS;
+
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ func_8012C2DC(globalCtx->state.gfxCtx);
+ func_800B8118(&this->actor, globalCtx, 0);
+
+ gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, globalCtx->gameplayFrames % 256, 0x20, 0x10, 1, 0,
+ (globalCtx->gameplayFrames * 2) % 256, 0x40, 0x20));
+ gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, this->unk_148);
+ gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_050D10);
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h
index 6870eccc9..b34866e3c 100644
--- a/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h
+++ b/src/overlays/actors/ovl_Obj_Ice_Poly/z_obj_ice_poly.h
@@ -7,11 +7,18 @@ struct ObjIcePoly;
typedef void (*ObjIcePolyActionFunc)(struct ObjIcePoly*, GlobalContext*);
+#define OBJICEPOLY_GET_FF00(thisx) (((thisx)->params >> 8) & 0xFF)
+
+#define OBJICEPOLY_FF_FF 0xFF
+
typedef struct ObjIcePoly {
/* 0x0000 */ Actor actor;
/* 0x0144 */ ObjIcePolyActionFunc actionFunc;
/* 0x0148 */ u8 unk_148;
- /* 0x0149 */ char unk_149[0x133];
+ /* 0x0149 */ u8 unk_149;
+ /* 0x014A */ s16 unk_14A;
+ /* 0x014C */ ColliderCylinder colliders1[2];
+ /* 0x01E4 */ ColliderCylinder colliders2[2];
} ObjIcePoly; // size = 0x27C
extern const ActorInit Obj_Ice_Poly_InitVars;
diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
index e8ec61d28..4832bc01a 100644
--- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
+++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c
@@ -141,7 +141,7 @@ void ObjWarpstone_Update(Actor* thisx, GlobalContext* globalCtx) {
} else if ((Message_GetState(&globalCtx->msgCtx) == 4) && (func_80147624(globalCtx))) {
if (globalCtx->msgCtx.choiceIndex != 0) {
func_8019F208();
- globalCtx->msgCtx.unk11F22 = 0x4D;
+ globalCtx->msgCtx.msgMode = 0x4D;
globalCtx->msgCtx.unk120D6 = 0;
globalCtx->msgCtx.unk120D4 = 0;
gSaveContext.save.owlSaveLocation = OBJ_WARPSTONE_GET_ID(this);
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 7bd647b78..f2141726a 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -2206,7 +2206,7 @@
0x80123AA4:("func_80123AA4",),
0x80123BD4:("func_80123BD4",),
0x80123C58:("func_80123C58",),
- 0x80123C90:("func_80123C90",),
+ 0x80123C90:("Player_SetEquipmentData",),
0x80123D50:("func_80123D50",),
0x80123DA4:("func_80123DA4",),
0x80123DC0:("func_80123DC0",),
@@ -2405,16 +2405,16 @@
0x8012EAA8:("Room_HandleLoadCallbacks",),
0x8012EBA8:("Room_Draw",),
0x8012EBF8:("func_8012EBF8",),
- 0x8012EC80:("func_8012EC80",),
- 0x8012ED34:("func_8012ED34",),
- 0x8012ED78:("func_8012ED78",),
+ 0x8012EC80:("Inventory_GetBtnBItem",),
+ 0x8012ED34:("Inventory_ChangeEquipment",),
+ 0x8012ED78:("Inventory_DeleteEquipment",),
0x8012EDE8:("Inventory_ChangeUpgrade",),
- 0x8012EE34:("func_8012EE34",),
- 0x8012EF0C:("func_8012EF0C",),
- 0x8012F0EC:("func_8012F0EC",),
- 0x8012F1BC:("func_8012F1BC",),
- 0x8012F22C:("func_8012F22C",),
- 0x8012F278:("func_8012F278",),
+ 0x8012EE34:("Inventory_IsMapVisible",),
+ 0x8012EF0C:("Inventory_SetMapVisibility",),
+ 0x8012F0EC:("Inventory_SaveDekuPlaygroundHighScore",),
+ 0x8012F1BC:("Inventory_IncrementSkullTokenCount",),
+ 0x8012F22C:("Inventory_GetSkullTokenCount",),
+ 0x8012F278:("Inventory_SaveLotteryCodeGuess",),
0x8012F2E0:("Object_Spawn",),
0x8012F3D0:("Object_InitBank",),
0x8012F4FC:("Object_UpdateBank",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index 49823cee3..1aa72e4c9 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -1369,7 +1369,7 @@
0x801C2078:("gItemSlots","u8","[80]",0x50),
0x801C20C8:("gItemPrices","UNK_TYPE1","",0x1),
0x801C212C:("gScenesPerRegion","SceneIdList","[]",0x252),
- 0x801C2380:("D_801C2380","u16","[]",0x90),
+ 0x801C2380:("sScenesPerTingleMap","u16","[]",0x90),
0x801C2410:("D_801C2410","UNK_TYPE1","",0x1),
0x801C2650:("tatlMessageFiles","RomFile","[2]",0x10),
0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48),
@@ -2232,32 +2232,30 @@
0x801D1E60:("initialgspUcodeText","UNK_PTR","",0x4),
0x801D1E64:("initialgspUcodeData","UNK_PTR","",0x4),
0x801D1E70:("D_801D1E70","UNK_TYPE1","",0x1),
- 0x801D2E80:("D_801D2E80","UNK_TYPE1","",0x1),
- 0x801D2F80:("D_801D2F80","UNK_TYPE1","",0x1),
- 0x801D3070:("D_801D3070","UNK_TYPE1","",0x1),
- 0x801D3700:("D_801D3700","UNK_TYPE1","",0x1),
- 0x801D3D90:("D_801D3D90","UNK_TYPE1","",0x1),
- 0x801D3F90:("D_801D3F90","UNK_TYPE1","",0x1),
- 0x801D4190:("D_801D4190","UNK_TYPE1","",0x1),
- 0x801D4390:("D_801D4390","UNK_TYPE1","",0x1),
- 0x801D4590:("D_801D4590","UNK_TYPE1","",0x1),
+ 0x801D2E80:("gLowPassFilterData","UNK_TYPE1","",0x1),
+ 0x801D2F80:("gHighPassFilterData","UNK_TYPE1","",0x1),
+ 0x801D3070:("gBandStopFilterData","UNK_TYPE1","",0x1),
+ 0x801D3700:("gBandPassFilterData","UNK_TYPE1","",0x1),
+ 0x801D3D90:("gSawtoothWaveSample","UNK_TYPE1","",0x1),
+ 0x801D3F90:("gTriangleWaveSample","UNK_TYPE1","",0x1),
+ 0x801D4190:("gSineWaveSample","UNK_TYPE1","",0x1),
+ 0x801D4390:("gSquareWaveSample","UNK_TYPE1","",0x1),
+ 0x801D4590:("gWhiteNoiseSample","UNK_TYPE1","",0x1),
0x801D4790:("D_801D4790","UNK_TYPE1","",0x1),
- 0x801D4990:("D_801D4990","UNK_TYPE1","",0x1),
- 0x801D4B90:("D_801D4B90","UNK_TYPE1","",0x1),
- 0x801D4D90:("gWaveSamples","UNK_PTR","",0x4),
- 0x801D4D98:("D_801D4D98","UNK_PTR","",0x4),
- 0x801D4DB0:("D_801D4DB0","UNK_PTR","",0x4),
+ 0x801D4990:("gEighthPulseWaveSample","UNK_TYPE1","",0x1),
+ 0x801D4B90:("gQuarterPulseWaveSample","UNK_TYPE1","",0x1),
+ 0x801D4D90:("gWaveSamples","s16*","[9]",0x24),
0x801D4DB4:("gBendPitchOneOctaveFrequencies","f32","[256]",0x400),
- 0x801D51B4:("D_801D51B4","f32","[256]",0x400),
- 0x801D55B4:("D_801D55B4","f32","[128]",0x200),
- 0x801D57B4:("D_801D57B4","UNK_TYPE1","",0x1),
- 0x801D57C4:("D_801D57C4","UNK_TYPE1","",0x1),
- 0x801D57D4:("D_801D57D4","UNK_TYPE1","",0x1),
+ 0x801D51B4:("gBendPitchTwoSemitonesFrequencies","f32","[256]",0x400),
+ 0x801D55B4:("gPitchFrequencies","f32","[128]",0x200),
+ 0x801D57B4:("gDefaultShortNoteVelocityTable","UNK_TYPE1","",0x1),
+ 0x801D57C4:("gDefaultShortNoteGateTimeTable","UNK_TYPE1","",0x1),
+ 0x801D57D4:("gDefaultEnvelope","UNK_TYPE1","",0x1),
0x801D57E4:("gZeroNoteSub","UNK_TYPE4","",0x4),
0x801D5804:("gDefaultNoteSub","UNK_TYPE4","",0x4),
- 0x801D5824:("gHeadsetPanQuantization","UNK_TYPE2","",0x2),
- 0x801D58A2:("D_801D58A2","UNK_TYPE2","",0x2),
- 0x801D58AA:("D_801D58AA","UNK_TYPE1","",0x1),
+ 0x801D5824:("gHeadsetPanQuantization","u16","[64]",0x80),
+ 0x801D58A4:("D_801D58A4","s32","",0x4),
+ 0x801D58A8:("D_801D58A8","s16","[64]",0x80),
0x801D5928:("gHeadsetPanVolume","f32","[128]",0x200),
0x801D5B28:("gStereoPanVolume","f32","[128]",0x200),
0x801D5D28:("gDefaultPanVolume","f32","[128]",0x200),
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index e1e6075fb..532fff5f4 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -1720,7 +1720,7 @@ asm/non_matchings/code/z_player_lib/func_801239AC.s,func_801239AC,0x801239AC,0x3
asm/non_matchings/code/z_player_lib/func_80123AA4.s,func_80123AA4,0x80123AA4,0x4C
asm/non_matchings/code/z_player_lib/func_80123BD4.s,func_80123BD4,0x80123BD4,0x21
asm/non_matchings/code/z_player_lib/func_80123C58.s,func_80123C58,0x80123C58,0xE
-asm/non_matchings/code/z_player_lib/func_80123C90.s,func_80123C90,0x80123C90,0x30
+asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s,Player_SetEquipmentData,0x80123C90,0x30
asm/non_matchings/code/z_player_lib/func_80123D50.s,func_80123D50,0x80123D50,0x15
asm/non_matchings/code/z_player_lib/func_80123DA4.s,func_80123DA4,0x80123DA4,0x7
asm/non_matchings/code/z_player_lib/func_80123DC0.s,func_80123DC0,0x80123DC0,0x34
@@ -1919,16 +1919,16 @@ asm/non_matchings/code/z_room/Room_StartRoomTransition.s,Room_StartRoomTransitio
asm/non_matchings/code/z_room/Room_HandleLoadCallbacks.s,Room_HandleLoadCallbacks,0x8012EAA8,0x40
asm/non_matchings/code/z_room/Room_Draw.s,Room_Draw,0x8012EBA8,0x14
asm/non_matchings/code/z_room/func_8012EBF8.s,func_8012EBF8,0x8012EBF8,0x22
-asm/non_matchings/code/code_8012EC80/func_8012EC80.s,func_8012EC80,0x8012EC80,0x2D
-asm/non_matchings/code/code_8012EC80/func_8012ED34.s,func_8012ED34,0x8012ED34,0x11
-asm/non_matchings/code/code_8012EC80/func_8012ED78.s,func_8012ED78,0x8012ED78,0x1C
+asm/non_matchings/code/code_8012EC80/Inventory_GetBtnBItem.s,Inventory_GetBtnBItem,0x8012EC80,0x2D
+asm/non_matchings/code/code_8012EC80/Inventory_ChangeEquipment.s,Inventory_ChangeEquipment,0x8012ED34,0x11
+asm/non_matchings/code/code_8012EC80/Inventory_DeleteEquipment.s,Inventory_DeleteEquipment,0x8012ED78,0x1C
asm/non_matchings/code/code_8012EC80/Inventory_ChangeUpgrade.s,Inventory_ChangeUpgrade,0x8012EDE8,0x13
-asm/non_matchings/code/code_8012EC80/func_8012EE34.s,func_8012EE34,0x8012EE34,0x36
-asm/non_matchings/code/code_8012EC80/func_8012EF0C.s,func_8012EF0C,0x8012EF0C,0x78
-asm/non_matchings/code/code_8012EC80/func_8012F0EC.s,func_8012F0EC,0x8012F0EC,0x34
-asm/non_matchings/code/code_8012EC80/func_8012F1BC.s,func_8012F1BC,0x8012F1BC,0x1C
-asm/non_matchings/code/code_8012EC80/func_8012F22C.s,func_8012F22C,0x8012F22C,0x13
-asm/non_matchings/code/code_8012EC80/func_8012F278.s,func_8012F278,0x8012F278,0x16
+asm/non_matchings/code/code_8012EC80/Inventory_IsMapVisible.s,Inventory_IsMapVisible,0x8012EE34,0x36
+asm/non_matchings/code/code_8012EC80/Inventory_SetMapVisibility.s,Inventory_SetMapVisibility,0x8012EF0C,0x78
+asm/non_matchings/code/code_8012EC80/Inventory_SaveDekuPlaygroundHighScore.s,Inventory_SaveDekuPlaygroundHighScore,0x8012F0EC,0x34
+asm/non_matchings/code/code_8012EC80/Inventory_IncrementSkullTokenCount.s,Inventory_IncrementSkullTokenCount,0x8012F1BC,0x1C
+asm/non_matchings/code/code_8012EC80/Inventory_GetSkullTokenCount.s,Inventory_GetSkullTokenCount,0x8012F22C,0x13
+asm/non_matchings/code/code_8012EC80/Inventory_SaveLotteryCodeGuess.s,Inventory_SaveLotteryCodeGuess,0x8012F278,0x16
asm/non_matchings/code/z_scene/Object_Spawn.s,Object_Spawn,0x8012F2E0,0x3C
asm/non_matchings/code/z_scene/Object_InitBank.s,Object_InitBank,0x8012F3D0,0x4B
asm/non_matchings/code/z_scene/Object_UpdateBank.s,Object_UpdateBank,0x8012F4FC,0x43
diff --git a/undefined_syms.txt b/undefined_syms.txt
index 2881bd48e..30b7873fa 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -2175,14 +2175,6 @@ D_0600033C = 0x0600033C;
D_06005948 = 0x06005948;
D_06005CF8 = 0x06005CF8;
-// ovl_Obj_Bean
-
-D_06000090 = 0x06000090;
-D_060002D0 = 0x060002D0;
-D_060004BC = 0x060004BC;
-D_06000530 = 0x06000530;
-D_06002208 = 0x06002208;
-
// ovl_Obj_Bigicicle
D_060009B0 = 0x060009B0;