summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2023-08-22 17:28:58 -0700
committerDerek Hensley <hensley.derek58@gmail.com>2023-08-22 17:28:58 -0700
commit014acf616ccd240bd61895335707e36f0cdd7f23 (patch)
treef67881e955cb7952d7e4cd2b61a91d74ebf10661 /src/code
parent90e45cce373256882807e7ef10be3f1a36d8e29f (diff)
parent108b482ad081a2ee2cccd1ddc47fed0f7e66f332 (diff)
Merge remote-tracking branch 'upstream/master' into sys_math3d_bss
Diffstat (limited to 'src/code')
-rw-r--r--src/code/audio_thread_manager.c49
-rw-r--r--src/code/code_8012EC80.c345
-rw-r--r--src/code/flg_set.c17
-rw-r--r--src/code/game.c191
-rw-r--r--src/code/graph.c74
-rw-r--r--src/code/jpegdecoder.c2
-rw-r--r--src/code/main.c86
-rw-r--r--src/code/pad_801DC9C0.c1
-rw-r--r--src/code/padmgr.c4
-rw-r--r--src/code/sched.c36
-rw-r--r--src/code/speed_meter.c5
-rw-r--r--src/code/sys_cfb.c22
-rw-r--r--src/code/sys_flashrom.c2
-rw-r--r--src/code/sys_initial_check.c3
-rw-r--r--src/code/sys_math3d.c90
-rw-r--r--src/code/sys_matrix.c1
-rw-r--r--src/code/sys_slowly.c2
-rw-r--r--src/code/sys_ucode.c6
-rw-r--r--src/code/z_DLF.c105
-rw-r--r--src/code/z_actor.c396
-rw-r--r--src/code/z_actor_dlftbls.c10
-rw-r--r--src/code/z_bgcheck.c126
-rw-r--r--src/code/z_camera.c14
-rw-r--r--src/code/z_collision_check.c40
-rw-r--r--src/code/z_demo.c65
-rw-r--r--src/code/z_draw.c14
-rw-r--r--src/code/z_eff_tire_mark.c3
-rw-r--r--src/code/z_effect_soft_sprite.c27
-rw-r--r--src/code/z_effect_soft_sprite_old_init.c4
-rw-r--r--src/code/z_elf_message.c6
-rw-r--r--src/code/z_en_a_keep.c2
-rw-r--r--src/code/z_en_hy_code.c119
-rw-r--r--src/code/z_en_item00.c493
-rw-r--r--src/code/z_eventmgr.c17
-rw-r--r--src/code/z_face_reaction.c18
-rw-r--r--src/code/z_fbdemo_circle.c1
-rw-r--r--src/code/z_fireobj.c2
-rw-r--r--src/code/z_game_dlftbls.c50
-rw-r--r--src/code/z_jpeg.c2
-rw-r--r--src/code/z_kaleido_manager.c15
-rw-r--r--src/code/z_kaleido_setup.c4
-rw-r--r--src/code/z_kankyo.c8
-rw-r--r--src/code/z_lib.c13
-rw-r--r--src/code/z_lifemeter.c3
-rw-r--r--src/code/z_lights.c1
-rw-r--r--src/code/z_map_exp.c4
-rw-r--r--src/code/z_message.c12
-rw-r--r--src/code/z_nmi_buff.c7
-rw-r--r--src/code/z_overlay.c8
-rw-r--r--src/code/z_parameter.c404
-rw-r--r--src/code/z_play.c70
-rw-r--r--src/code/z_play_hireso.c61
-rw-r--r--src/code/z_player_call.c1
-rw-r--r--src/code/z_player_lib.c47
-rw-r--r--src/code/z_prenmi.c4
-rw-r--r--src/code/z_rcp.c5
-rw-r--r--src/code/z_scene.c66
-rw-r--r--src/code/z_scene_proc.c1
-rw-r--r--src/code/z_skin.c3
-rw-r--r--src/code/z_sound_source.c13
-rw-r--r--src/code/z_sram_NES.c347
-rw-r--r--src/code/z_sub_s.c119
-rw-r--r--src/code/z_vimode.c9
-rw-r--r--src/code/z_viscvg.c7
-rw-r--r--src/code/z_vismono.c1
-rw-r--r--src/code/z_viszbuf.c3
66 files changed, 2120 insertions, 1566 deletions
diff --git a/src/code/audio_thread_manager.c b/src/code/audio_thread_manager.c
index 45fbcb87e..12941eb2d 100644
--- a/src/code/audio_thread_manager.c
+++ b/src/code/audio_thread_manager.c
@@ -1,6 +1,7 @@
#include "global.h"
+#include "audiomgr.h"
-void func_80172C30(AudioMgr* audioMgr) {
+void AudioMgr_NotifyTaskDone(AudioMgr* audioMgr) {
AudioTask* task = audioMgr->rspTask;
if (audioMgr->rspTask->taskQueue != NULL) {
@@ -9,7 +10,7 @@ void func_80172C30(AudioMgr* audioMgr) {
}
void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
- static s32 retryCount = 10;
+ static s32 sRetryCount = 10;
AudioTask* rspTask;
s32 timerMsgVal = 666;
OSTimer timer;
@@ -19,8 +20,8 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
audioMgr->rspTask = NULL;
}
- while (audioMgr->cmdQ.validCount != 0) {
- osRecvMesg(&audioMgr->cmdQ, NULL, OS_MESG_NOBLOCK);
+ while (!MQ_IS_EMPTY(&audioMgr->cmdQueue)) {
+ osRecvMesg(&audioMgr->cmdQueue, NULL, OS_MESG_NOBLOCK);
}
if (audioMgr->rspTask != NULL) {
@@ -29,7 +30,7 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
audioMgr->audioTask.framebuffer = NULL;
audioMgr->audioTask.list = audioMgr->rspTask->task;
- audioMgr->audioTask.msgQ = &audioMgr->cmdQ;
+ audioMgr->audioTask.msgQ = &audioMgr->cmdQueue;
audioMgr->audioTask.msg = NULL;
osSendMesg(&audioMgr->sched->cmdQ, &audioMgr->audioTask, OS_MESG_BLOCK);
@@ -44,13 +45,13 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
if (audioMgr->rspTask != NULL) {
while (true) {
- osSetTimer(&timer, OS_USEC_TO_CYCLES(32000), 0, &audioMgr->cmdQ, (OSMesg)timerMsgVal);
- osRecvMesg(&audioMgr->cmdQ, (OSMesg*)&msg, OS_MESG_BLOCK);
+ osSetTimer(&timer, OS_USEC_TO_CYCLES(32000), 0, &audioMgr->cmdQueue, (OSMesg)timerMsgVal);
+ osRecvMesg(&audioMgr->cmdQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
osStopTimer(&timer);
if (msg == timerMsgVal) {
osSyncPrintf("AUDIO SP TIMEOUT %08x %08x\n", audioMgr->rspTask, audioMgr->rspTask->task);
- if (retryCount >= 0) {
- retryCount--;
+ if (sRetryCount >= 0) {
+ sRetryCount--;
Sched_SendAudioCancelMsg(audioMgr->sched);
} else {
osSyncPrintf("audioMgr.c:もうダメ!死ぬ!\n");
@@ -62,13 +63,13 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
}
}
- func_80172C30(audioMgr);
+ AudioMgr_NotifyTaskDone(audioMgr);
}
audioMgr->rspTask = rspTask;
}
-void AudioMgr_HandlePRENMI(AudioMgr* audioMgr) {
+void AudioMgr_HandlePreNMI(AudioMgr* audioMgr) {
Audio_PreNMI();
}
@@ -81,32 +82,36 @@ void AudioMgr_ThreadEntry(void* arg) {
Audio_Init();
AudioLoad_SetDmaHandler(DmaMgr_DmaHandler);
Audio_InitSound();
- osSendMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
- IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptMsgQ);
+ osSendMesg(&audioMgr->lockQueue, NULL, OS_MESG_BLOCK);
+ IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptQueue);
exit = false;
while (!exit) {
- osRecvMesg(&audioMgr->interruptMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK);
+ osRecvMesg(&audioMgr->interruptQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
switch (*msg) {
case OS_SC_RETRACE_MSG:
AudioMgr_HandleRetrace(audioMgr);
- while (audioMgr->interruptMsgQ.validCount != 0) {
- osRecvMesg(&audioMgr->interruptMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK);
+ while (!MQ_IS_EMPTY(&audioMgr->interruptQueue)) {
+ osRecvMesg(&audioMgr->interruptQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
switch (*msg) {
case OS_SC_RETRACE_MSG:
break;
+
case OS_SC_PRE_NMI_MSG:
- AudioMgr_HandlePRENMI(audioMgr);
+ AudioMgr_HandlePreNMI(audioMgr);
break;
+
case OS_SC_NMI_MSG:
exit = true;
break;
}
}
break;
+
case OS_SC_PRE_NMI_MSG:
- AudioMgr_HandlePRENMI(audioMgr);
+ AudioMgr_HandlePreNMI(audioMgr);
break;
+
case OS_SC_NMI_MSG:
exit = true;
break;
@@ -117,7 +122,7 @@ void AudioMgr_ThreadEntry(void* arg) {
}
void AudioMgr_Unlock(AudioMgr* audioMgr) {
- osRecvMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
+ osRecvMesg(&audioMgr->lockQueue, NULL, OS_MESG_BLOCK);
}
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr) {
@@ -127,9 +132,9 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
audioMgr->irqMgr = irqMgr;
audioMgr->rspTask = NULL;
- osCreateMesgQueue(&audioMgr->cmdQ, audioMgr->cmdMsgBuf, ARRAY_COUNT(audioMgr->cmdMsgBuf));
- osCreateMesgQueue(&audioMgr->interruptMsgQ, audioMgr->interruptMsgBuf, ARRAY_COUNT(audioMgr->interruptMsgBuf));
- osCreateMesgQueue(&audioMgr->lockMsgQ, audioMgr->lockMsgBuf, ARRAY_COUNT(audioMgr->lockMsgBuf));
+ osCreateMesgQueue(&audioMgr->cmdQueue, audioMgr->cmdMsgBuf, ARRAY_COUNT(audioMgr->cmdMsgBuf));
+ osCreateMesgQueue(&audioMgr->interruptQueue, audioMgr->interruptMsgBuf, ARRAY_COUNT(audioMgr->interruptMsgBuf));
+ osCreateMesgQueue(&audioMgr->lockQueue, audioMgr->lockMsgBuf, ARRAY_COUNT(audioMgr->lockMsgBuf));
osCreateThread(&audioMgr->thread, id, AudioMgr_ThreadEntry, audioMgr, stack, pri);
osStartThread(&audioMgr->thread);
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c
index e10290356..9a2100d01 100644
--- a/src/code/code_8012EC80.c
+++ b/src/code/code_8012EC80.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "interface/parameter_static/parameter_static.h"
+#include "archives/icon_item_static/icon_item_static_yar.h"
+#include "archives/icon_item_24_static/icon_item_24_static_yar.h"
// Bit Flag array in which gBitFlags[n] is (1 << n)
u32 gBitFlags[] = {
@@ -41,14 +43,14 @@ u32 gUpgradeMasks[] = {
// 3 = two-bit masks
// 7 = three-bit masks
u32 gUpgradeNegMasks[] = {
- ~(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)
+ ~(7 << 0), // UPG_QUIVER
+ ~(7 << 3), // UPG_BOMB_BAG
+ ~(7 << 6), // UPG_STRENGTH
+ ~(7 << 9), // UPG_SCALE
+ ~(3 << 12), // UPG_WALLET
+ ~(7 << 14), // UPG_BULLET_BAG
+ ~(7 << 17), // UPG_DEKU_STICKS
+ ~(7 << 20), // UPG_DEKU_NUTS
};
u8 gEquipShifts[] = {
@@ -59,25 +61,25 @@ u8 gEquipShifts[] = {
};
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)
+ 0, // UPG_QUIVER
+ 3, // UPG_BOMB_BAG
+ 6, // UPG_STRENGTH
+ 9, // UPG_SCALE
+ 12, // UPG_WALLET
+ 14, // UPG_BULLET_BAG
+ 17, // UPG_DEKU_STICKS
+ 20, // UPG_DEKU_NUTS
};
u16 gUpgradeCapacities[][4] = {
- { 0, 30, 40, 50 }, // Quivers
- { 0, 20, 30, 40 }, // Bomb Bags
- { 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)
+ { 0, 30, 40, 50 }, // UPG_QUIVER
+ { 0, 20, 30, 40 }, // UPG_BOMB_BAG
+ { 0, 0, 0, 0 }, // UPG_STRENGTH
+ { 0, 0, 0, 0 }, // UPG_SCALE
+ { 99, 200, 500, 500 }, // UPG_WALLET
+ { 0, 30, 40, 50 }, // UPG_BULLET_BAG
+ { 0, 10, 20, 30 }, // UPG_DEKU_STICKS
+ { 0, 20, 30, 40 }, // UPG_DEKU_NUTS
};
// eight-bit masks
@@ -95,144 +97,143 @@ u32 gGsFlagsShift[] = {
24,
};
-// TODO: use symbols for these icon textures once textures are properly in C
TexturePtr 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_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_SEAHORSE
- 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_OF_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_ROD
- 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
+ gItemIconOcarinaOfTimeTex, // ITEM_OCARINA_OF_TIME
+ gItemIconBowTex, // ITEM_BOW
+ gItemIconFireArrowTex, // ITEM_ARROW_FIRE
+ gItemIconIceArrowTex, // ITEM_ARROW_ICE
+ gItemIconLightArrowTex, // ITEM_ARROW_LIGHT
+ gItemIconFairyOcarinaTex, // ITEM_OCARINA_FAIRY
+ gItemIconBombTex, // ITEM_BOMB
+ gItemIconBombchuTex, // ITEM_BOMBCHU
+ gItemIconDekuStickTex, // ITEM_DEKU_STICK
+ gItemIconDekuNutTex, // ITEM_DEKU_NUT
+ gItemIconMagicBeansTex, // ITEM_MAGIC_BEANS
+ gItemIconSlingshotTex, // ITEM_SLINGSHOT
+ gItemIconPowderKegTex, // ITEM_POWDER_KEG
+ gItemIconPictographBoxTex, // ITEM_PICTOGRAPH_BOX
+ gItemIconLensofTruthTex, // ITEM_LENS_OF_TRUTH
+ gItemIconHookshotTex, // ITEM_HOOKSHOT
+ gItemIconGreatFairysSwordTex, // ITEM_SWORD_GREAT_FAIRY
+ gItemIconLongshotTex, // ITEM_LONGSHOT
+ gItemIconEmptyBottleTex, // ITEM_BOTTLE
+ gItemIconRedPotionTex, // ITEM_POTION_RED
+ gItemIconGreenPotionTex, // ITEM_POTION_GREEN
+ gItemIconBluePotionTex, // ITEM_POTION_BLUE
+ gItemIconBottledFairyTex, // ITEM_FAIRY
+ gItemIconBottledDekuPrincessTex, // ITEM_DEKU_PRINCESS
+ gItemIconBottledFullMilkTex, // ITEM_MILK_BOTTLE
+ gItemIconBottledHalfMilkTex, // ITEM_MILK_HALF
+ gItemIconBottledFishTex, // ITEM_FISH
+ gItemIconBottledBugTex, // ITEM_BUG
+ gItemIconBottledBlueFireTex, // ITEM_BLUE_FIRE
+ gItemIconBottledPoeTex, // ITEM_POE
+ gItemIconBottledBigPoeTex, // ITEM_BIG_POE
+ gItemIconSpringWaterTex, // ITEM_SPRING_WATER
+ gItemIconHotSpringWaterTex, // ITEM_HOT_SPRING_WATER
+ gItemIconBottledZoraEggTex, // ITEM_ZORA_EGG
+ gItemIconBottledGoldDustTex, // ITEM_GOLD_DUST
+ gItemIconBottledMushroomTex, // ITEM_MUSHROOM
+ gItemIconBottledSeahorseTex, // ITEM_SEAHORSE
+ gItemIconChateauRomaniTex, // ITEM_CHATEAU
+ gItemIconBottledHylianLoachTex, // ITEM_HYLIAN_LOACH
+ gItemIconEmptyBottle2Tex, // ITEM_OBABA_DRINK
+ gItemIconMoonsTearTex, // ITEM_MOONS_TEAR
+ gItemIconLandDeedTex, // ITEM_DEED_LAND
+ gItemIconSwampDeedTex, // ITEM_DEED_SWAMP
+ gItemIconMountainDeedTex, // ITEM_DEED_MOUNTAIN
+ gItemIconOceanDeedTex, // ITEM_DEED_OCEAN
+ gItemIconRoomKeyTex, // ITEM_ROOM_KEY
+ gItemIconLetterToMamaTex, // ITEM_LETTER_MAMA
+ gItemIconLetterToKafeiTex, // ITEM_LETTER_TO_KAFEI
+ gItemIconPendantOfMemoriesTex, // ITEM_PENDANT_OF_MEMORIES
+ gItemIconTingleMapTex, // ITEM_TINGLE_MAP
+ gItemIconDekuMaskTex, // ITEM_MASK_DEKU
+ gItemIconGoronMaskTex, // ITEM_MASK_GORON
+ gItemIconZoraMaskTex, // ITEM_MASK_ZORA
+ gItemIconFierceDeityMaskTex, // ITEM_MASK_FIERCE_DEITY
+ gItemIconMaskOfTruthTex, // ITEM_MASK_TRUTH
+ gItemIconKafeisMaskTex, // ITEM_MASK_KAFEIS_MASK
+ gItemIconAllNightMaskTex, // ITEM_MASK_ALL_NIGHT
+ gItemIconBunnyHoodTex, // ITEM_MASK_BUNNY
+ gItemIconKeatonMaskTex, // ITEM_MASK_KEATON
+ gItemIconGaroMaskTex, // ITEM_MASK_GARO
+ gItemIconRomaniMaskTex, // ITEM_MASK_ROMANI
+ gItemIconCircusLeaderMaskTex, // ITEM_MASK_CIRCUS_LEADER
+ gItemIconPostmansHatTex, // ITEM_MASK_POSTMAN
+ gItemIconCouplesMaskTex, // ITEM_MASK_COUPLE
+ gItemIconGreatFairyMaskTex, // ITEM_MASK_GREAT_FAIRY
+ gItemIconGibdoMaskTex, // ITEM_MASK_GIBDO
+ gItemIconDonGeroMaskTex, // ITEM_MASK_DON_GERO
+ gItemIconKamaroMaskTex, // ITEM_MASK_KAMARO
+ gItemIconCaptainsHatTex, // ITEM_MASK_CAPTAIN
+ gItemIconStoneMaskTex, // ITEM_MASK_STONE
+ gItemIconBremenMaskTex, // ITEM_MASK_BREMEN
+ gItemIconBlastMaskTex, // ITEM_MASK_BLAST
+ gItemIconMaskOfScentsTex, // ITEM_MASK_SCENTS
+ gItemIconGiantsMaskTex, // ITEM_MASK_GIANT
+ gItemIconBowFireTex, // ITEM_BOW_FIRE
+ gItemIconBowIceTex, // ITEM_BOW_ICE
+ gItemIconBowLightTex, // ITEM_BOW_LIGHT
+ gItemIconKokiriSwordTex, // ITEM_SWORD_KOKIRI
+ gItemIconRazorSwordTex, // ITEM_SWORD_RAZOR
+ gItemIconGildedSwordTex, // ITEM_SWORD_GILDED
+ gItemIconFierceDeitySwordTex, // ITEM_SWORD_DEITY
+ gItemIconHerosShieldTex, // ITEM_SHIELD_HERO
+ gItemIconMirrorShieldTex, // ITEM_SHIELD_MIRROR
+ gItemIconQuiver30Tex, // ITEM_QUIVER_30
+ gItemIconQuiver40Tex, // ITEM_QUIVER_40
+ gItemIconQuiver50Tex, // ITEM_QUIVER_50
+ gItemIconBombBag20Tex, // ITEM_BOMB_BAG_20
+ gItemIconBombBag30Tex, // ITEM_BOMB_BAG_30
+ gItemIconBombBag40Tex, // ITEM_BOMB_BAG_40
+ gItemIconDefaultWalletTex, // ITEM_WALLET_DEFAULT
+ gItemIconAdultsWalletTex, // ITEM_WALLET_ADULT
+ gItemIconGiantsWalletTex, // ITEM_WALLET_GIANT
+ gItemIconFishingRodTex, // ITEM_FISHING_ROD
+ gItemIconOdolwasRemainsTex, // ITEM_REMAINS_ODOLWA
+ gItemIconGohtsRemainsTex, // ITEM_REMAINS_GOHT
+ gItemIconGyorgsRemainsTex, // ITEM_REMAINS_GYORG
+ gItemIconTwinmoldsRemainsTex, // ITEM_REMAINS_TWINMOLD
+ gItemIconSongNoteTex, // ITEM_SONG_SONATA
+ gItemIconSongNoteTex, // ITEM_SONG_LULLABY
+ gItemIconSongNoteTex, // ITEM_SONG_NOVA
+ gItemIconSongNoteTex, // ITEM_SONG_ELEGY
+ gItemIconSongNoteTex, // ITEM_SONG_OATH
+ gItemIconSongNoteTex, // ITEM_SONG_SARIA
+ gItemIconSongNoteTex, // ITEM_SONG_TIME
+ gItemIconSongNoteTex, // ITEM_SONG_HEALING
+ gItemIconSongNoteTex, // ITEM_SONG_EPONA
+ gItemIconSongNoteTex, // ITEM_SONG_SOARING
+ gItemIconSongNoteTex, // ITEM_SONG_STORMS
+ gItemIconSongNoteTex, // ITEM_SONG_SUN
+ gItemIconBombersNotebookTex, // ITEM_BOMBERS_NOTEBOOK
+ gQuestIconGoldSkulltulaTex, // ITEM_SKULL_TOKEN
+ gQuestIconHeartContainerTex, // ITEM_HEART_CONTAINER
+ gQuestIconPieceOfHeartTex, // ITEM_HEART_PIECE
+ gItemIconSongNoteTex, //
+ gItemIconSongNoteTex, //
+ gItemIconSongNoteTex, // ITEM_SONG_LULLABY_INTRO
+ gQuestIconBossKeyTex, // ITEM_KEY_BOSS
+ gQuestIconDungeonMapTex, // ITEM_COMPASS
+ gQuestIconCompassTex, // ITEM_DUNGEON_MAP
+ gQuestIconGoldSkulltula2Tex, // ITEM_STRAY_FAIRIES
+ gQuestIconSmallKeyTex, // ITEM_KEY_SMALL
+ gQuestIconSmallMagicJarTex, // ITEM_MAGIC_JAR_SMALL
+ gQuestIconBigMagicJarTex, // ITEM_MAGIC_JAR_BIG
+ gItemIconHeartPiece1Tex, // ITEM_HEART_PIECE_2
+ gItemIconHeartPiece2Tex, // ITEM_INVALID_1
+ gItemIconHeartPiece3Tex, // 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
u8 gItemSlots[] = {
- SLOT_OCARINA, // ITEM_OCARINA
+ SLOT_OCARINA, // ITEM_OCARINA_OF_TIME
SLOT_BOW, // ITEM_BOW
SLOT_ARROW_FIRE, // ITEM_ARROW_FIRE
SLOT_ARROW_ICE, // ITEM_ARROW_ICE
@@ -240,13 +241,13 @@ u8 gItemSlots[] = {
SLOT_TRADE_DEED, // ITEM_OCARINA_FAIRY
SLOT_BOMB, // ITEM_BOMB
SLOT_BOMBCHU, // ITEM_BOMBCHU
- SLOT_STICK, // ITEM_STICK
- SLOT_NUT, // ITEM_NUT
+ SLOT_DEKU_STICK, // ITEM_DEKU_STICK
+ SLOT_DEKU_NUT, // ITEM_DEKU_NUT
SLOT_MAGIC_BEANS, // ITEM_MAGIC_BEANS
SLOT_TRADE_KEY_MAMA, // ITEM_SLINGSHOT
SLOT_POWDER_KEG, // ITEM_POWDER_KEG
- SLOT_PICTO_BOX, // ITEM_PICTO_BOX
- SLOT_LENS, // ITEM_LENS
+ SLOT_PICTOGRAPH_BOX, // ITEM_PICTOGRAPH_BOX
+ SLOT_LENS_OF_TRUTH, // ITEM_LENS_OF_TRUTH
SLOT_HOOKSHOT, // ITEM_HOOKSHOT
SLOT_SWORD_GREAT_FAIRY, // ITEM_SWORD_GREAT_FAIRY
SLOT_BOTTLE_1, // ITEM_LONGSHOT
@@ -272,7 +273,7 @@ u8 gItemSlots[] = {
SLOT_BOTTLE_1, // ITEM_CHATEAU
SLOT_BOTTLE_1, // ITEM_HYLIAN_LOACH
SLOT_BOTTLE_1, // ITEM_OBABA_DRINK
- SLOT_TRADE_DEED, // ITEM_MOON_TEAR
+ SLOT_TRADE_DEED, // ITEM_MOONS_TEAR
SLOT_TRADE_DEED, // ITEM_DEED_LAND
SLOT_TRADE_DEED, // ITEM_DEED_SWAMP
SLOT_TRADE_DEED, // ITEM_DEED_MOUNTAIN
@@ -306,13 +307,13 @@ u8 gItemSlots[] = {
SLOT_MASK_BLAST, // ITEM_MASK_BLAST
SLOT_MASK_SCENTS, // ITEM_MASK_SCENTS
SLOT_MASK_GIANT, // ITEM_MASK_GIANT
- SLOT_BOW, // ITEM_BOW_ARROW_FIRE
- SLOT_BOW, // ITEM_BOW_ARROW_ICE
- SLOT_BOW, // ITEM_BOW_ARROW_LIGHT
+ SLOT_BOW, // ITEM_BOW_FIRE
+ SLOT_BOW, // ITEM_BOW_ICE
+ SLOT_BOW, // ITEM_BOW_LIGHT
};
s16 gItemPrices[] = {
- 0, // ITEM_OCARINA
+ 0, // ITEM_OCARINA_OF_TIME
0, // ITEM_BOW
0, // ITEM_ARROW_FIRE
0, // ITEM_ARROW_ICE
@@ -320,13 +321,13 @@ s16 gItemPrices[] = {
0, // ITEM_OCARINA_FAIRY
0, // ITEM_BOMB
0, // ITEM_BOMBCHU
- 0, // ITEM_STICK
- 0, // ITEM_NUT
+ 0, // ITEM_DEKU_STICK
+ 0, // ITEM_DEKU_NUT
0, // ITEM_MAGIC_BEANS
0, // ITEM_SLINGSHOT
0, // ITEM_POWDER_KEG
- 0, // ITEM_PICTO_BOX
- 0, // ITEM_LENS
+ 0, // ITEM_PICTOGRAPH_BOX
+ 0, // ITEM_LENS_OF_TRUTH
0, // ITEM_HOOKSHOT
0, // ITEM_SWORD_GREAT_FAIRY
0, // ITEM_LONGSHOT
@@ -352,7 +353,7 @@ s16 gItemPrices[] = {
200, // ITEM_CHATEAU
20, // ITEM_HYLIAN_LOACH
0, // ITEM_OBABA_DRINK
- 0, // ITEM_MOON_TEAR
+ 0, // ITEM_MOONS_TEAR
0, // ITEM_DEED_LAND
0, // ITEM_DEED_SWAMP
0, // ITEM_DEED_MOUNTAIN
@@ -511,7 +512,7 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
}
void Inventory_ChangeUpgrade(s16 upgrade, u32 value) {
- u32 upgrades = gSaveContext.save.saveInfo.inventory.upgrades;
+ u32 upgrades = GET_SAVE_INVENTORY_UPGRADES;
upgrades &= gUpgradeNegMasks[upgrade];
upgrades |= value << gUpgradeShifts[upgrade];
diff --git a/src/code/flg_set.c b/src/code/flg_set.c
index bb25818a6..d437fd8b6 100644
--- a/src/code/flg_set.c
+++ b/src/code/flg_set.c
@@ -12,6 +12,11 @@
#include "global.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
+typedef struct FlagSetEntry {
+ /* 0x0 */ u8* value;
+ /* 0x4 */ const char* name;
+} FlagSetEntry; // size = 0x8
+
static FlagSetEntry sFlagEntries[] = {
{ &gSaveContext.save.saveInfo.weekEventReg[0], "week_event_reg[0]" },
{ &gSaveContext.save.saveInfo.weekEventReg[1], "week_event_reg[1]" },
@@ -260,7 +265,7 @@ void FlagSet_Update(GameState* gameState) {
}
}
-extern s32 D_801ED890;
+s32 sFlagBitIndex;
void FlagSet_Draw(GameState* gameState) {
GraphicsContext* gfxCtx = gameState->gfxCtx;
@@ -283,23 +288,23 @@ void FlagSet_Draw(GameState* gameState) {
GfxPrint_SetPos(&printer, 12, 15);
// Print the flag bits in the current byte, largest to smallest
- for (D_801ED890 = 7; D_801ED890 >= 0; D_801ED890--) {
+ for (sFlagBitIndex = 7; sFlagBitIndex >= 0; sFlagBitIndex--) {
// Highlight current flag bit in white, rest in grey
- if ((u32)D_801ED890 == sCurrentBit) {
+ if (sFlagBitIndex == sCurrentBit) {
GfxPrint_SetColor(&printer, 200, 200, 200, 255);
} else {
GfxPrint_SetColor(&printer, 100, 100, 100, 255);
}
// Display 1 if flag set and 0 if not
- if (*sFlagEntries[sEntryIndex].value & (1 << D_801ED890)) {
+ if (*sFlagEntries[sEntryIndex].value & (1 << sFlagBitIndex)) {
GfxPrint_Printf(&printer, "1");
} else {
GfxPrint_Printf(&printer, "0");
}
// Add a space after each group of 4
- if ((D_801ED890 % 4) == 0) {
+ if ((sFlagBitIndex % 4) == 0) {
GfxPrint_Printf(&printer, " ");
}
}
@@ -313,3 +318,5 @@ void FlagSet_Draw(GameState* gameState) {
CLOSE_DISPS(gfxCtx);
}
+
+static const s32 sPad[5] = { 0 };
diff --git a/src/code/game.c b/src/code/game.c
index 8f4e0f44d..dc1e1b93e 100644
--- a/src/code/game.c
+++ b/src/code/game.c
@@ -1,7 +1,15 @@
#include "global.h"
+#include "audiomgr.h"
+#include "idle.h"
+#include "sys_cfb.h"
#include "system_malloc.h"
#include "z64debug_text.h"
#include "z64rumble.h"
+#include "z64speed_meter.h"
+#include "z64vimode.h"
+#include "z64viscvg.h"
+#include "z64vismono.h"
+#include "z64viszbuf.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
s32 gFramerateDivisor = 1;
@@ -9,93 +17,94 @@ f32 gFramerateDivisorF = 1.0f;
f32 gFramerateDivisorHalf = 1.0f / 2.0f;
f32 gFramerateDivisorThird = 1.0f / 3.0f;
-void Game_UpdateFramerateVariables(s32 divisor) {
+SpeedMeter sGameSpeedMeter;
+VisCvg sGameVisCvg;
+VisZbuf sGameVisZbuf;
+VisMono sGameVisMono;
+ViMode sGameViMode;
+
+void GameState_UpdateFramerateDivisors(s32 divisor) {
gFramerateDivisor = divisor;
gFramerateDivisorF = divisor;
gFramerateDivisorHalf = divisor / 2.0f;
gFramerateDivisorThird = divisor / 3.0f;
}
-void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) {
- R_UPDATE_RATE = (s16)divisor;
+void GameState_SetFramerateDivisor(GameState* gameState, s32 divisor) {
+ R_UPDATE_RATE = divisor;
gameState->framerateDivisor = divisor;
- Game_UpdateFramerateVariables(divisor);
+ GameState_UpdateFramerateDivisors(divisor);
}
-void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) {
- Gfx* dlist = *gfx;
+void GameState_SetFBFilter(Gfx** gfxP, void* zbuffer) {
+ Gfx* gfx = *gfxP;
if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) {
- D_801F8010.type = R_FB_FILTER_TYPE;
- D_801F8010.color.r = R_FB_FILTER_PRIM_COLOR(0);
- D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1);
- D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2);
- D_801F8010.color.a = R_FB_FILTER_A;
- VisCvg_Draw(&D_801F8010, &dlist);
+ sGameVisCvg.type = R_FB_FILTER_TYPE;
+ sGameVisCvg.color.r = R_FB_FILTER_PRIM_COLOR(0);
+ sGameVisCvg.color.g = R_FB_FILTER_PRIM_COLOR(1);
+ sGameVisCvg.color.b = R_FB_FILTER_PRIM_COLOR(2);
+ sGameVisCvg.color.a = R_FB_FILTER_A;
+ VisCvg_Draw(&sGameVisCvg, &gfx);
} else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) {
- sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6);
- sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
- sVisZbuf.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
- sVisZbuf.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
- sVisZbuf.primColor.a = R_FB_FILTER_A;
- sVisZbuf.envColor.r = R_FB_FILTER_ENV_COLOR(0);
- sVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1);
- sVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2);
- sVisZbuf.envColor.a = R_FB_FILTER_A;
- VisZbuf_Draw(&sVisZbuf, &dlist, zbuffer);
+ sGameVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6);
+ sGameVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
+ sGameVisZbuf.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
+ sGameVisZbuf.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
+ sGameVisZbuf.primColor.a = R_FB_FILTER_A;
+ sGameVisZbuf.envColor.r = R_FB_FILTER_ENV_COLOR(0);
+ sGameVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1);
+ sGameVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2);
+ sGameVisZbuf.envColor.a = R_FB_FILTER_A;
+ VisZbuf_Draw(&sGameVisZbuf, &gfx, zbuffer);
} else if (R_FB_FILTER_TYPE == 7) {
- sMonoColors.unk_00 = 0;
- sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
- sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
- sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
- sMonoColors.primColor.a = R_FB_FILTER_A;
- sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0);
- sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1);
- sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2);
- sMonoColors.envColor.a = R_FB_FILTER_A;
- VisMono_Draw(&sMonoColors, &dlist);
+ sGameVisMono.unk_00 = 0;
+ sGameVisMono.primColor.r = R_FB_FILTER_PRIM_COLOR(0);
+ sGameVisMono.primColor.g = R_FB_FILTER_PRIM_COLOR(1);
+ sGameVisMono.primColor.b = R_FB_FILTER_PRIM_COLOR(2);
+ sGameVisMono.primColor.a = R_FB_FILTER_A;
+ sGameVisMono.envColor.r = R_FB_FILTER_ENV_COLOR(0);
+ sGameVisMono.envColor.g = R_FB_FILTER_ENV_COLOR(1);
+ sGameVisMono.envColor.b = R_FB_FILTER_ENV_COLOR(2);
+ sGameVisMono.envColor.a = R_FB_FILTER_A;
+ VisMono_Draw(&sGameVisMono, &gfx);
}
- *gfx = dlist;
+ *gfxP = gfx;
}
-void Game_Nop80173534(GameState* gameState) {
+void GameState_Noop(GameState* gameState) {
}
void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
- Gfx* nextDisplayList;
- Gfx* polyOpa;
+ Gfx* gfx;
+ Gfx* gfxHead;
OPEN_DISPS(gfxCtx);
- nextDisplayList = Graph_GfxPlusOne(polyOpa = POLY_OPA_DISP);
- gSPDisplayList(OVERLAY_DISP++, nextDisplayList);
+ gfx = Graph_GfxPlusOne(gfxHead = POLY_OPA_DISP);
+ gSPDisplayList(OVERLAY_DISP++, gfx);
- if (R_FB_FILTER_TYPE && R_FB_FILTER_ENV_COLOR(3) == 0) {
- GameState_SetFBFilter(&nextDisplayList, gfxCtx->zbuffer);
+ if ((R_FB_FILTER_TYPE != 0) && (R_FB_FILTER_ENV_COLOR(3) == 0)) {
+ GameState_SetFBFilter(&gfx, gfxCtx->zbuffer);
}
if (R_ENABLE_ARENA_DBG < 0) {
R_ENABLE_ARENA_DBG = 0;
}
- gSPEndDisplayList(nextDisplayList++);
- Graph_BranchDlist(polyOpa, nextDisplayList);
- POLY_OPA_DISP = nextDisplayList;
+ gSPEndDisplayList(gfx++);
+ Graph_BranchDlist(gfxHead, gfx);
+ POLY_OPA_DISP = gfx;
- // Block prevents reordering, if(1) around the above block don't seem to help unlike in OoT
- {
- s32 requiredScopeTemp;
+ CLOSE_DISPS(gfxCtx);
- Debug_DrawText(gfxCtx);
- }
+ Debug_DrawText(gfxCtx);
if (R_ENABLE_ARENA_DBG != 0) {
- SpeedMeter_DrawTimeEntries(&D_801F7FF0, gfxCtx);
- SpeedMeter_DrawAllocEntries(&D_801F7FF0, gfxCtx, gameState);
+ SpeedMeter_DrawTimeEntries(&sGameSpeedMeter, gfxCtx);
+ SpeedMeter_DrawAllocEntries(&sGameSpeedMeter, gfxCtx, gameState);
}
-
- CLOSE_DISPS(gfxCtx);
}
void GameState_SetFrameBuffer(GraphicsContext* gfxCtx) {
@@ -111,27 +120,27 @@ void GameState_SetFrameBuffer(GraphicsContext* gfxCtx) {
CLOSE_DISPS(gfxCtx);
}
-void func_801736DC(GraphicsContext* gfxCtx) {
- Gfx* nextDisplayList;
- Gfx* polyOpa;
+void GameState_DrawEnd(GraphicsContext* gfxCtx) {
+ Gfx* gfx;
+ Gfx* gfxHead;
OPEN_DISPS(gfxCtx);
- nextDisplayList = Graph_GfxPlusOne(polyOpa = gfxCtx->polyOpa.p);
- gSPDisplayList(OVERLAY_DISP++, nextDisplayList);
- gSPEndDisplayList(nextDisplayList++);
- Graph_BranchDlist(polyOpa, nextDisplayList);
+ gfx = Graph_GfxPlusOne(gfxHead = POLY_OPA_DISP);
+ gSPDisplayList(OVERLAY_DISP++, gfx);
+ gSPEndDisplayList(gfx++);
+ Graph_BranchDlist(gfxHead, gfx);
- POLY_OPA_DISP = nextDisplayList;
+ POLY_OPA_DISP = gfx;
CLOSE_DISPS(gfxCtx);
}
-void Game_UpdateInput(GameState* gameState) {
+void GameState_GetInput(GameState* gameState) {
PadMgr_GetInput(gameState->input, true);
}
-void Game_Update(GameState* gameState) {
+void GameState_Update(GameState* gameState) {
GraphicsContext* gfxCtx = gameState->gfxCtx;
GameState_SetFrameBuffer(gameState->gfxCtx);
@@ -140,12 +149,12 @@ void Game_Update(GameState* gameState) {
if (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_PROCESS) {
GameState_Draw(gameState, gfxCtx);
- func_801736DC(gfxCtx);
+ GameState_DrawEnd(gfxCtx);
}
}
-void Game_IncrementFrameCount(GameState* gameState) {
- Game_Nop80173534(gameState);
+void GameState_IncrementFrameCount(GameState* gameState) {
+ GameState_Noop(gameState);
gameState->frames++;
}
@@ -163,27 +172,26 @@ void GameState_InitArena(GameState* gameState, size_t size) {
}
void GameState_Realloc(GameState* gameState, size_t size) {
- GameAlloc* alloc;
+ GameAlloc* alloc = &gameState->alloc;
void* gameArena;
size_t systemMaxFree;
size_t bytesFree;
size_t bytesAllocated;
- void* heapStart;
+ void* heapStart = gameState->heap.start;
- heapStart = gameState->heap.start;
- alloc = &gameState->alloc;
THA_Destroy(&gameState->heap);
GameAlloc_Free(alloc, heapStart);
SystemArena_GetSizes(&systemMaxFree, &bytesFree, &bytesAllocated);
- size = ((systemMaxFree - (sizeof(ArenaNode))) < size) ? (0) : (size);
+ size = ((systemMaxFree - sizeof(ArenaNode)) < size) ? 0 : size;
if (size == 0) {
- size = systemMaxFree - (sizeof(ArenaNode));
+ size = systemMaxFree - sizeof(ArenaNode);
}
- if ((gameArena = GameAlloc_Malloc(alloc, size)) != NULL) {
+ gameArena = GameAlloc_Malloc(alloc, size);
+ if (gameArena != NULL) {
THA_Init(&gameState->heap, gameArena, size);
} else {
- THA_Init(&gameState->heap, 0, 0);
+ THA_Init(&gameState->heap, NULL, 0);
__assert("../game.c", 1074);
}
}
@@ -193,7 +201,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
gameState->frames = 0;
gameState->main = NULL;
gameState->destroy = NULL;
- gameState->running = 1;
+ gameState->running = true;
gfxCtx->viMode = gActiveViMode;
gfxCtx->viConfigFeatures = gViConfigFeatures;
gfxCtx->xScale = gViConfigXScale;
@@ -205,20 +213,21 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
s32 requiredScopeTemp;
GameAlloc_Init(&gameState->alloc);
- GameState_InitArena(gameState, 0x100000);
- Game_SetFramerateDivisor(gameState, 3);
+ }
- init(gameState);
+ GameState_InitArena(gameState, 0x100000);
+ GameState_SetFramerateDivisor(gameState, 3);
- VisCvg_Init(&D_801F8010);
- VisZbuf_Init(&sVisZbuf);
- VisMono_Init(&sMonoColors);
- ViMode_Init(&D_801F8048);
- func_801773A0(&D_801F7FF0);
- Rumble_Init();
+ init(gameState);
- osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
- }
+ VisCvg_Init(&sGameVisCvg);
+ VisZbuf_Init(&sGameVisZbuf);
+ VisMono_Init(&sGameVisMono);
+ ViMode_Init(&sGameViMode);
+ SpeedMeter_Init(&sGameSpeedMeter);
+ Rumble_Init();
+
+ osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
}
void GameState_Destroy(GameState* gameState) {
@@ -231,11 +240,11 @@ void GameState_Destroy(GameState* gameState) {
}
Rumble_Destroy();
- func_801773C4(&D_801F7FF0);
- VisCvg_Destroy(&D_801F8010);
- VisZbuf_Destroy(&sVisZbuf);
- VisMono_Destroy(&sMonoColors);
- ViMode_Destroy(&D_801F8048);
+ SpeedMeter_Destroy(&sGameSpeedMeter);
+ VisCvg_Destroy(&sGameVisCvg);
+ VisZbuf_Destroy(&sGameVisZbuf);
+ VisMono_Destroy(&sGameVisMono);
+ ViMode_Destroy(&sGameViMode);
THA_Destroy(&gameState->heap);
GameAlloc_Cleanup(&gameState->alloc);
}
@@ -257,7 +266,7 @@ s32 GameState_GetArenaSize(GameState* gameState) {
}
s32 func_80173B48(GameState* gameState) {
- s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(D_801FBAF0);
+ s32 result = OS_CYCLES_TO_NSEC(gameState->framerateDivisor * sIrqMgrRetraceTime) - OS_CYCLES_TO_NSEC(gRDPTimeTotal);
return result;
}
diff --git a/src/code/graph.c b/src/code/graph.c
index eca40bbaf..bce162406 100644
--- a/src/code/graph.c
+++ b/src/code/graph.c
@@ -1,6 +1,20 @@
-#include "prevent_bss_reordering.h"
-#include "global.h"
+#include "z64.h"
+#include "regs.h"
+#include "functions.h"
+#include "fault.h"
+
+// Variables are put before most headers as a hacky way to bypass bss reordering
+FaultAddrConvClient sGraphFaultAddrConvClient;
+FaultClient sGraphFaultClient;
+GfxMasterList* gGfxMasterDL;
+CfbInfo sGraphCfbInfos[3];
+OSTime sGraphTaskStartTime;
+
+#include "variables.h"
+#include "macros.h"
#include "buffers.h"
+#include "idle.h"
+#include "sys_cfb.h"
#include "system_malloc.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
@@ -9,12 +23,6 @@
#include "overlays/gamestates/ovl_title/z_title.h"
#include "z_title_setup.h"
-FaultAddrConvClient sGraphFaultAddrConvClient;
-FaultClient sGraphFaultClient;
-GfxMasterList* gGfxMasterDL;
-CfbInfo sGraphCfbInfos[3];
-OSTime sGraphTaskStartTime;
-
void Graph_FaultClient(void) {
FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1");
osViSwapBuffer(SysCfb_GetFramebuffer(0));
@@ -67,32 +75,22 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
GameStateOverlay* Graph_GetNextGameState(GameState* gameState) {
GameStateFunc gameStateInit = GameState_GetInit(gameState);
- if (gameStateInit == Setup_Init) {
- return &gGameStateOverlayTable[0];
- }
- if (gameStateInit == MapSelect_Init) {
- return &gGameStateOverlayTable[1];
- }
- if (gameStateInit == ConsoleLogo_Init) {
- return &gGameStateOverlayTable[2];
- }
- if (gameStateInit == Play_Init) {
- return &gGameStateOverlayTable[3];
- }
- if (gameStateInit == TitleSetup_Init) {
- return &gGameStateOverlayTable[4];
- }
- if (gameStateInit == FileSelect_Init) {
- return &gGameStateOverlayTable[5];
- }
- if (gameStateInit == DayTelop_Init) {
- return &gGameStateOverlayTable[6];
+ // Generates code to match gameStateInit to a gamestate entry and returns it if found
+#define DEFINE_GAMESTATE_INTERNAL(typeName, enumName) \
+ if (gameStateInit == typeName##_Init) { \
+ return &gGameStateOverlayTable[enumName]; \
}
+#define DEFINE_GAMESTATE(typeName, enumName, name) DEFINE_GAMESTATE_INTERNAL(typeName, enumName)
+
+#include "tables/gamestate_table.h"
+
+#undef DEFINE_GAMESTATE
+#undef DEFINE_GAMESTATE_INTERNAL
return NULL;
}
-void* Graph_FaultAddrConv(void* address, void* param) {
+uintptr_t Graph_FaultAddrConv(uintptr_t address, void* param) {
uintptr_t addr = address;
GameStateOverlay* gameStateOvl = &gGameStateOverlayTable[0];
size_t ramConv;
@@ -101,7 +99,7 @@ void* Graph_FaultAddrConv(void* address, void* param) {
s32 i;
for (i = 0; i < gGraphNumGameStates; i++, gameStateOvl++) {
- diff = VRAM_PTR_SIZE(gameStateOvl);
+ diff = (uintptr_t)gameStateOvl->vramEnd - (uintptr_t)gameStateOvl->vramStart;
ramStart = gameStateOvl->loadedRamAddr;
ramConv = (uintptr_t)gameStateOvl->vramStart - (uintptr_t)ramStart;
@@ -111,7 +109,7 @@ void* Graph_FaultAddrConv(void* address, void* param) {
}
}
}
- return NULL;
+ return 0;
}
void Graph_Init(GraphicsContext* gfxCtx) {
@@ -123,7 +121,7 @@ void Graph_Init(GraphicsContext* gfxCtx) {
gfxCtx->xScale = gViConfigXScale;
gfxCtx->yScale = gViConfigYScale;
osCreateMesgQueue(&gfxCtx->queue, gfxCtx->msgBuff, ARRAY_COUNT(gfxCtx->msgBuff));
- Fault_AddClient(&sGraphFaultClient, Graph_FaultClient, NULL, NULL);
+ Fault_AddClient(&sGraphFaultClient, (void*)Graph_FaultClient, NULL, NULL);
Fault_AddAddrConvClient(&sGraphFaultAddrConvClient, Graph_FaultAddrConv, NULL);
}
@@ -230,8 +228,8 @@ retry:
}
void Graph_UpdateGame(GameState* gameState) {
- Game_UpdateInput(gameState);
- Game_IncrementFrameCount(gameState);
+ GameState_GetInput(gameState);
+ GameState_IncrementFrameCount(gameState);
if (SREG(20) < 3) {
Audio_Update();
}
@@ -247,7 +245,7 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
gameState->unk_A3 = 0;
Graph_SetNextGfxPool(gfxCtx);
- Game_Update(gameState);
+ GameState_Update(gameState);
OPEN_DISPS(gfxCtx);
@@ -314,10 +312,10 @@ void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
D_801FBAE8 = sRSPGFXTotalTime;
D_801FBAE0 = gRSPAudioTotalTime;
- D_801FBAF0 = gRDPTotalTime;
+ gRDPTimeTotal = gRDPTimeAcc;
sRSPGFXTotalTime = 0;
gRSPAudioTotalTime = 0;
- gRDPTotalTime = 0;
+ gRDPTimeAcc = 0;
if (sGraphTaskStartTime != 0) {
lastRenderFrameDuration = time - sGraphTaskStartTime;
@@ -353,7 +351,7 @@ void Graph_ThreadEntry(void* arg) {
gGfxSPTaskOutputBufferEndHiRes = (u8*)gGfxSPTaskOutputBufferHiRes + sizeof(*gGfxSPTaskOutputBufferHiRes);
SysCfb_Init();
- Fault_SetFB(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT);
+ Fault_SetFrameBuffer(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT);
Graph_Init(&gfxCtx);
while (nextOvl) {
diff --git a/src/code/jpegdecoder.c b/src/code/jpegdecoder.c
index 336e381f9..e6998adc9 100644
--- a/src/code/jpegdecoder.c
+++ b/src/code/jpegdecoder.c
@@ -156,7 +156,7 @@ s32 JpegDecoder_ParseNextSymbol(JpegHuffmanTable* hTable, s16* outCoeff, s8* out
if (sym) {
*outCoeff = JpegDecoder_ReadBits(sym);
if (*outCoeff < (1 << (sym - 1))) {
- *outCoeff += (-1 << sym) + 1;
+ *outCoeff += (0xFFFFFFFF << sym) + 1;
}
}
diff --git a/src/code/main.c b/src/code/main.c
index 186240489..7fbb7ccb8 100644
--- a/src/code/main.c
+++ b/src/code/main.c
@@ -1,32 +1,42 @@
-/**
- * This file has unmigrated bss. It is not practical to migrate it until we have a better way of dealing with bss
- * reordering than just prevent_bss_reordering.h: there is too much of it to control, and it cannot be split into
- * separate files since most of it is at addresses ending in 8.
- */
-
-#include "global.h"
-#include "buffers.h"
+#include "audiomgr.h"
+#include "fault.h"
+#include "idle.h"
+#include "irqmgr.h"
+#include "padmgr.h"
+#include "scheduler.h"
#include "stack.h"
#include "stackcheck.h"
+
+// Variables are put before most headers as a hacky way to bypass bss reordering
+OSMesgQueue sSerialEventQueue;
+OSMesg sSerialMsgBuf[1];
+u32 gSegments[NUM_SEGMENTS];
+SchedContext gSchedContext;
+IrqMgrClient sIrqClient;
+OSMesgQueue sIrqMgrMsgQueue;
+OSMesg sIrqMgrMsgBuf[60];
+OSThread gGraphThread;
+STACK(sGraphStack, 0x1800);
+STACK(sSchedStack, 0x600);
+STACK(sAudioStack, 0x800);
+STACK(sPadMgrStack, 0x500);
+StackEntry sGraphStackInfo;
+StackEntry sSchedStackInfo;
+StackEntry sAudioStackInfo;
+StackEntry sPadMgrStackInfo;
+AudioMgr sAudioMgr;
+static s32 sBssPad;
+PadMgr gPadMgr;
+
+#include "main.h"
+#include "buffers.h"
+#include "global.h"
#include "system_heap.h"
+#include "z64thread.h"
-extern OSMesgQueue sSiIntMsgQ;
-extern OSMesg sSiIntMsgBuf[1];
-extern u32 gSegments[NUM_SEGMENTS];
-extern SchedContext gSchedContext;
-extern IrqMgrClient irqClient;
-extern OSMesgQueue irqMgrMsgQ;
-extern OSMesg irqMgrMsgBuf[60];
-extern OSThread gGraphThread;
-extern STACK(sGraphStack, 0x1800);
-extern STACK(sSchedStack, 0x600);
-extern STACK(sAudioStack, 0x800);
-extern STACK(sPadMgrStack, 0x500);
-extern StackEntry sGraphStackInfo;
-extern StackEntry sSchedStackInfo;
-extern StackEntry sAudioStackInfo;
-extern StackEntry sPadMgrStackInfo;
-extern AudioMgr sAudioMgr;
+s32 gScreenWidth = SCREEN_WIDTH;
+s32 gScreenHeight = SCREEN_HEIGHT;
+size_t gSystemHeapSize = 0;
void Main(void* arg) {
intptr_t fb;
@@ -38,36 +48,37 @@ void Main(void* arg) {
gScreenHeight = SCREEN_HEIGHT;
Nmi_Init();
- Fault_Start();
+ Fault_Init();
Check_RegionIsSupported();
Check_ExpansionPak();
sysHeap = gSystemHeap;
fb = 0x80780000;
- startHeapSize = fb - sysHeap;
- SystemHeap_Init(sysHeap, startHeapSize);
+ gSystemHeapSize = fb - sysHeap;
+ SystemHeap_Init(sysHeap, gSystemHeapSize);
Regs_Init();
R_ENABLE_ARENA_DBG = 0;
- osCreateMesgQueue(&sSiIntMsgQ, sSiIntMsgBuf, ARRAY_COUNT(sSiIntMsgBuf));
- osSetEventMesg(OS_EVENT_SI, &sSiIntMsgQ, NULL);
+ osCreateMesgQueue(&sSerialEventQueue, sSerialMsgBuf, ARRAY_COUNT(sSerialMsgBuf));
+ osSetEventMesg(OS_EVENT_SI, &sSerialEventQueue, NULL);
- osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf));
+ osCreateMesgQueue(&sIrqMgrMsgQueue, sIrqMgrMsgBuf, ARRAY_COUNT(sIrqMgrMsgBuf));
StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched");
- Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr);
+ Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, gViConfigModeType, 1, &gIrqMgr);
CIC6105_AddRomInfoFaultPage();
- IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ);
+ IrqMgr_AddClient(&gIrqMgr, &sIrqClient, &sIrqMgrMsgQueue);
StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio");
- AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr);
+ AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, Z_THREAD_ID_AUDIOMGR, &gSchedContext,
+ &gIrqMgr);
StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr");
- PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack));
+ PadMgr_Init(&sSerialEventQueue, &gIrqMgr, Z_THREAD_ID_PADMGR, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack));
AudioMgr_Unlock(&sAudioMgr);
@@ -79,7 +90,7 @@ void Main(void* arg) {
while (!exit) {
msg = NULL;
- osRecvMesg(&irqMgrMsgQ, (OSMesg)&msg, OS_MESG_BLOCK);
+ osRecvMesg(&sIrqMgrMsgQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
if (msg == NULL) {
break;
}
@@ -88,12 +99,13 @@ void Main(void* arg) {
case OS_SC_PRE_NMI_MSG:
Nmi_SetPrenmiStart();
break;
+
case OS_SC_NMI_MSG:
exit = true;
break;
}
}
- IrqMgr_RemoveClient(&gIrqMgr, &irqClient);
+ IrqMgr_RemoveClient(&gIrqMgr, &sIrqClient);
osDestroyThread(&gGraphThread);
}
diff --git a/src/code/pad_801DC9C0.c b/src/code/pad_801DC9C0.c
deleted file mode 100644
index f386919de..000000000
--- a/src/code/pad_801DC9C0.c
+++ /dev/null
@@ -1 +0,0 @@
-static const char pad_801DC9C0[] = { 0 };
diff --git a/src/code/padmgr.c b/src/code/padmgr.c
index a04a14f57..eb6a811b7 100644
--- a/src/code/padmgr.c
+++ b/src/code/padmgr.c
@@ -30,9 +30,11 @@
* `osContStartReadData` to receiving the data. By running this on a separate thread to the game state, work can be
* done while waiting for this operation to complete.
*/
+
#include "global.h"
#include "io/controller.h"
#include "ultra64/motor.h"
+#include "fault.h"
#define PADMGR_RETRACE_MSG (1 << 0)
#define PADMGR_PRE_NMI_MSG (1 << 1)
@@ -641,7 +643,7 @@ void PadMgr_HandleRetrace(void) {
}
// Rumble Pak
- if (gFaultStruct.msgId != 0) {
+ if (gFaultMgr.msgId != 0) {
// If fault is active, no rumble
PadMgr_RumbleStop();
} else if (sPadMgrInstance->rumbleOffTimer > 0) {
diff --git a/src/code/sched.c b/src/code/sched.c
index c06eb41ba..f8dc2a35d 100644
--- a/src/code/sched.c
+++ b/src/code/sched.c
@@ -1,13 +1,8 @@
-#include "prevent_bss_reordering.h"
-#include "global.h"
-#include "stackcheck.h"
-
-#define RSP_DONE_MSG 667
-#define RDP_DONE_MSG 668
-#define ENTRY_MSG 670
-#define RDP_AUDIO_CANCEL_MSG 671
-#define RSP_GFX_CANCEL_MSG 672
+#include "fault.h"
+#include "idle.h"
+#include "z64.h"
+// Variables are put before most headers as a hacky way to bypass bss reordering
FaultClient sSchedFaultClient;
OSTime sRSPGFXStartTime;
@@ -18,15 +13,24 @@ OSTime sRDPStartTime;
u64* gAudioSPDataPtr;
u32 gAudioSPDataSize;
-void Sched_SwapFramebuffer(CfbInfo* cfbInfo) {
- s32 one = 1;
+#include "functions.h"
+#include "variables.h"
+#include "stackcheck.h"
+#include "z64thread.h"
+
+#define RSP_DONE_MSG 667
+#define RDP_DONE_MSG 668
+#define ENTRY_MSG 670
+#define RDP_AUDIO_CANCEL_MSG 671
+#define RSP_GFX_CANCEL_MSG 672
+void Sched_SwapFramebuffer(CfbInfo* cfbInfo) {
if (cfbInfo->swapBuffer != NULL) {
osViSwapBuffer(cfbInfo->swapBuffer);
cfbInfo->updateRate2 = cfbInfo->updateRate;
if ((SREG(62) == 0) && (cfbInfo->viMode != NULL)) {
- D_80096B20 = one;
+ D_80096B20 = 1;
osViSetMode(cfbInfo->viMode);
osViSetSpecialFeatures(cfbInfo->features);
osViSetXScale(cfbInfo->xScale);
@@ -42,7 +46,7 @@ void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo) {
sched->shouldUpdateVi = false;
if (gIrqMgrResetStatus == 0) {
- ViConfig_UpdateVi(0);
+ ViConfig_UpdateVi(false);
}
}
Sched_SwapFramebuffer(cfbInfo);
@@ -52,7 +56,7 @@ void Sched_HandleReset(SchedContext* sched) {
}
void Sched_HandleStop(SchedContext* sched) {
- ViConfig_UpdateVi(1);
+ ViConfig_UpdateVi(true);
}
/**
@@ -477,7 +481,7 @@ void Sched_HandleRDPDone(SchedContext* sched) {
}
// Log run time
- gRDPTotalTime = osGetTime() - sRDPStartTime;
+ gRDPTimeAcc = osGetTime() - sRDPStartTime;
// Mark task done
curRDP = sched->curRDPTask;
@@ -599,7 +603,7 @@ void Sched_ThreadEntry(void* arg) {
* Registers an IrqClient for the thread and fault client for the SchedContext.
* Directs the OS to send SP and DP OS messages to interruptQ when the RSP or RDP signal task completion.
*/
-void Sched_Init(SchedContext* sched, void* stack, OSPri pri, UNK_TYPE arg3, UNK_TYPE arg4, IrqMgr* irqMgr) {
+void Sched_Init(SchedContext* sched, void* stack, OSPri pri, u8 viModeType, UNK_TYPE arg4, IrqMgr* irqMgr) {
bzero(sched, sizeof(SchedContext));
sched->shouldUpdateVi = true;
diff --git a/src/code/speed_meter.c b/src/code/speed_meter.c
index 780a02c62..1e6f1f886 100644
--- a/src/code/speed_meter.c
+++ b/src/code/speed_meter.c
@@ -1,12 +1,13 @@
#include "global.h"
+#include "z64speed_meter.h"
#include "z64view.h"
#include "system_malloc.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_80177390.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801773A0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Init.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/func_801773C4.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_Destroy.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/speed_meter/SpeedMeter_DrawTimeEntries.s")
diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c
index 29d6e39c4..383a35cc9 100644
--- a/src/code/sys_cfb.c
+++ b/src/code/sys_cfb.c
@@ -1,11 +1,9 @@
-#include "prevent_bss_reordering.h"
-#include "global.h"
-#include "buffers.h"
-#include "system_malloc.h"
-
-extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
-extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
+#include "z64.h"
+#include "regs.h"
+#include "functions.h"
+#include "macros.h"
+// Variables are put before most headers as a hacky way to bypass bss reordering
OSViMode sNotebookViMode; // placeholder name
void* gFramebuffers[2];
OSViMode* gActiveViMode;
@@ -35,6 +33,16 @@ s16 gCfbUpperAdjust;
u8 gSysCfbHiResEnabled;
+#include "variables.h"
+#include "sys_cfb.h"
+#include "libc/stdbool.h"
+#include "buffers.h"
+#include "system_malloc.h"
+#include "z64vimode.h"
+
+extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
+extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
+
void SysCfb_SetLoResMode(void) {
gFramebuffers[1] = sCfbLoRes1;
gFramebuffers[0] = sCfbLoRes0;
diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c
index c2665741e..0f4e9f748 100644
--- a/src/code/sys_flashrom.c
+++ b/src/code/sys_flashrom.c
@@ -1,8 +1,10 @@
#include "prevent_bss_reordering.h"
#include "global.h"
+#include "fault.h"
#include "stack.h"
#include "stackcheck.h"
#include "system_malloc.h"
+#include "z64thread.h"
OSMesgQueue sFlashromMesgQueue;
OSMesg sFlashromMesg[1];
diff --git a/src/code/sys_initial_check.c b/src/code/sys_initial_check.c
index ec61d07b5..3f46a5818 100644
--- a/src/code/sys_initial_check.c
+++ b/src/code/sys_initial_check.c
@@ -7,6 +7,7 @@
* are DMA'd directly to fixed RAM addresses.
*/
#include "global.h"
+#include "fault.h"
#include "misc/locerrmsg/locerrmsg.h"
#include "misc/memerrmsg/memerrmsg.h"
@@ -23,7 +24,7 @@
// Address with enough room after to load either of the error message image files before the fault screen buffer at the
// end of RDRAM
-#define CHECK_ERRMSG_STATIC_SEGMENT (u8*)(FAULT_FB_ADDRESS - MAX(SIZEOF_LOCERRMSG, SIZEOF_MEMERRMSG))
+#define CHECK_ERRMSG_STATIC_SEGMENT (u8*)((uintptr_t)FAULT_FB_ADDRESS - MAX(SIZEOF_LOCERRMSG, SIZEOF_MEMERRMSG))
void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value) {
if (value & RGBA16_PIXEL_OPAQUE) {
diff --git a/src/code/sys_math3d.c b/src/code/sys_math3d.c
index 5c0062957..4a65f7dd3 100644
--- a/src/code/sys_math3d.c
+++ b/src/code/sys_math3d.c
@@ -1,4 +1,26 @@
#include "prevent_bss_reordering.h"
+// Partial structs taken from "prevent_bss_reordering.h"
+// clang-format off
+struct Dummy200 { int x; };
+struct Dummy201 { int x; };
+struct Dummy202 { int x; };
+struct Dummy203 { int x; };
+struct Dummy204 { int x; };
+struct Dummy205 { int x; };
+struct Dummy206 { int x; };
+struct Dummy207 { int x; };
+struct Dummy208 { int x; };
+struct Dummy209 { int x; };
+struct Dummy210 { int x; };
+struct Dummy211 { int x; };
+struct Dummy212 { int x; };
+struct Dummy213 { int x; };
+struct Dummy214 { int x; };
+struct Dummy215 { int x; };
+struct Dummy216 { int x; };
+struct Dummy217 { int x; };
+// clang-format on
+
#include "z64math.h"
#include "libc/stdbool.h"
#include "libc/math.h"
@@ -35,74 +57,6 @@
// extern Vec3f D_801FBDD8;
// extern Vec3f D_801FBDE8;
-// Partial structs taken from "prevent_bss_reordering.h"
-// clang-format off
-struct Dummy100 { int x; };
-struct Dummy101 { int x; };
-struct Dummy102 { int x; };
-struct Dummy103 { int x; };
-struct Dummy104 { int x; };
-struct Dummy105 { int x; };
-struct Dummy106 { int x; };
-struct Dummy107 { int x; };
-struct Dummy108 { int x; };
-struct Dummy109 { int x; };
-struct Dummy110 { int x; };
-struct Dummy111 { int x; };
-struct Dummy112 { int x; };
-struct Dummy113 { int x; };
-struct Dummy114 { int x; };
-struct Dummy115 { int x; };
-struct Dummy116 { int x; };
-struct Dummy117 { int x; };
-struct Dummy118 { int x; };
-struct Dummy119 { int x; };
-struct Dummy120 { int x; };
-struct Dummy121 { int x; };
-struct Dummy122 { int x; };
-struct Dummy123 { int x; };
-struct Dummy124 { int x; };
-struct Dummy125 { int x; };
-struct Dummy126 { int x; };
-struct Dummy127 { int x; };
-struct Dummy128 { int x; };
-struct Dummy129 { int x; };
-struct Dummy130 { int x; };
-struct Dummy131 { int x; };
-struct Dummy132 { int x; };
-struct Dummy133 { int x; };
-struct Dummy134 { int x; };
-struct Dummy135 { int x; };
-struct Dummy136 { int x; };
-struct Dummy137 { int x; };
-struct Dummy138 { int x; };
-struct Dummy139 { int x; };
-struct Dummy140 { int x; };
-struct Dummy141 { int x; };
-struct Dummy142 { int x; };
-struct Dummy143 { int x; };
-struct Dummy144 { int x; };
-struct Dummy145 { int x; };
-struct Dummy146 { int x; };
-struct Dummy147 { int x; };
-struct Dummy148 { int x; };
-struct Dummy149 { int x; };
-struct Dummy150 { int x; };
-struct Dummy151 { int x; };
-struct Dummy152 { int x; };
-struct Dummy153 { int x; };
-struct Dummy154 { int x; };
-struct Dummy155 { int x; };
-struct Dummy156 { int x; };
-struct Dummy157 { int x; };
-// struct Dummy158 { int x; };
-// struct Dummy159 { int x; };
-// struct Dummy160 { int x; };
-// struct Dummy161 { int x; };
-// struct Dummy162 { int x; };
-// typedef int Dummy163;
-// clang-format on
-
f32 Math3D_Normalize(Vec3f* vec) {
f32 magnitude = Math3D_Vec3fMagnitude(vec);
diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c
index de8da3def..6269add5f 100644
--- a/src/code/sys_matrix.c
+++ b/src/code/sys_matrix.c
@@ -39,6 +39,7 @@
* (APPLY), or to just overwrite it (NEW).
*/
+#include "prevent_bss_reordering.h"
#include "global.h"
/* data */
diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c
index 754c5d472..47170db62 100644
--- a/src/code/sys_slowly.c
+++ b/src/code/sys_slowly.c
@@ -8,9 +8,11 @@
*
* @note: `argCount` must be set manually, as this file implements no way to configure it.
*/
+
#include "slowly.h"
#include "global.h"
#include "stackcheck.h"
+#include "z64thread.h"
void Slowly_Main(SlowlyMgr* slowly) {
slowly->status |= SLOWLY_STATUS_STARTED;
diff --git a/src/code/sys_ucode.c b/src/code/sys_ucode.c
index f9433eab2..df59275e2 100644
--- a/src/code/sys_ucode.c
+++ b/src/code/sys_ucode.c
@@ -4,12 +4,6 @@
*/
#include "global.h"
-extern u64 rspbootTextStart[];
-extern u64 rspbootTextEnd[];
-
-extern u64 gspF3DZEX2_NoN_PosLight_fifoTextStart[];
-extern u64 gspF3DZEX2_NoN_PosLight_fifoDataStart[];
-
u64* initialgspUcodeText = gspF3DZEX2_NoN_PosLight_fifoTextStart;
u64* initialgspUcodeData = gspF3DZEX2_NoN_PosLight_fifoDataStart;
diff --git a/src/code/z_DLF.c b/src/code/z_DLF.c
index aa5c0325d..cb226b30c 100644
--- a/src/code/z_DLF.c
+++ b/src/code/z_DLF.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "system_malloc.h"
-#include "z64load.h"
+#include "loadfragment.h"
void Overlay_LoadGameState(GameStateOverlay* overlayEntry) {
void* vramStart;
@@ -13,30 +13,39 @@ void Overlay_LoadGameState(GameStateOverlay* overlayEntry) {
overlayEntry->unk_28 = 0;
return;
}
- overlayEntry->loadedRamAddr = Load2_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd,
- (uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd);
+ overlayEntry->loadedRamAddr = Overlay_AllocateAndLoad(overlayEntry->vromStart, overlayEntry->vromEnd,
+ (uintptr_t)vramStart, (uintptr_t)overlayEntry->vramEnd);
if (overlayEntry->loadedRamAddr != NULL) {
- overlayEntry->unk_14 = (uintptr_t)(
- (overlayEntry->unk_14 != NULL)
- ? (void*)((uintptr_t)overlayEntry->unk_14 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->init =
- (uintptr_t)((overlayEntry->init != NULL)
- ? (void*)((uintptr_t)overlayEntry->init - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->destroy = (uintptr_t)(
- (overlayEntry->destroy != NULL)
- ? (void*)((uintptr_t)overlayEntry->destroy - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->unk_20 = (uintptr_t)(
- (overlayEntry->unk_20 != NULL)
- ? (void*)((uintptr_t)overlayEntry->unk_20 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->unk_24 = (uintptr_t)(
- (overlayEntry->unk_24 != NULL)
- ? (void*)((uintptr_t)overlayEntry->unk_24 - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
+ overlayEntry->unk_14 = (void*)(uintptr_t)((overlayEntry->unk_14 != NULL)
+ ? (void*)((uintptr_t)overlayEntry->unk_14 -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->init = (void*)(uintptr_t)((overlayEntry->init != NULL)
+ ? (void*)((uintptr_t)overlayEntry->init -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->destroy = (void*)(uintptr_t)((overlayEntry->destroy != NULL)
+ ? (void*)((uintptr_t)overlayEntry->destroy -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->unk_20 = (void*)(uintptr_t)((overlayEntry->unk_20 != NULL)
+ ? (void*)((uintptr_t)overlayEntry->unk_20 -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->unk_24 = (void*)(uintptr_t)((overlayEntry->unk_24 != NULL)
+ ? (void*)((uintptr_t)overlayEntry->unk_24 -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
overlayEntry->unk_28 = 0;
}
@@ -48,26 +57,36 @@ void Overlay_FreeGameState(GameStateOverlay* overlayEntry) {
if (overlayEntry->loadedRamAddr != NULL) {
var_v0 = (overlayEntry->unk_28 != 0) ? -1 : 0;
if (var_v0 == 0) {
- overlayEntry->unk_14 = (uintptr_t)(
- (overlayEntry->unk_14 != NULL)
- ? (void*)((uintptr_t)overlayEntry->unk_14 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->init = (uintptr_t)(
- (overlayEntry->init != NULL)
- ? (void*)((uintptr_t)overlayEntry->init + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->destroy = (uintptr_t)(
- (overlayEntry->destroy != NULL)
- ? (void*)((uintptr_t)overlayEntry->destroy + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->unk_20 = (uintptr_t)(
- (overlayEntry->unk_20 != NULL)
- ? (void*)((uintptr_t)overlayEntry->unk_20 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
- overlayEntry->unk_24 = (uintptr_t)(
- (overlayEntry->unk_24 != NULL)
- ? (void*)((uintptr_t)overlayEntry->unk_24 + (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
+ overlayEntry->unk_14 = (void*)(uintptr_t)((overlayEntry->unk_14 != NULL)
+ ? (void*)((uintptr_t)overlayEntry->unk_14 +
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->init = (void*)(uintptr_t)((overlayEntry->init != NULL)
+ ? (void*)((uintptr_t)overlayEntry->init +
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->destroy = (uintptr_t)((overlayEntry->destroy != NULL)
+ ? (void*)((uintptr_t)overlayEntry->destroy +
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->unk_20 = (void*)(uintptr_t)((overlayEntry->unk_20 != NULL)
+ ? (void*)((uintptr_t)overlayEntry->unk_20 +
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
+ overlayEntry->unk_24 = (void*)(uintptr_t)((overlayEntry->unk_24 != NULL)
+ ? (void*)((uintptr_t)overlayEntry->unk_24 +
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
+
SystemArena_Free(overlayEntry->loadedRamAddr);
overlayEntry->loadedRamAddr = NULL;
}
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index 0c962d805..57c5ab100 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -4,8 +4,10 @@
*/
#include "global.h"
+#include "fault.h"
+#include "sys_cfb.h"
+#include "loadfragment.h"
#include "z64horse.h"
-#include "z64load.h"
#include "z64quake.h"
#include "z64rumble.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
@@ -32,6 +34,20 @@ extern s16 D_801ED8DC; // 2 funcs
extern Mtx D_801ED8E0; // 1 func
extern Actor* D_801ED920; // 2 funcs. 1 out of z_actor
+#define ACTOR_AUDIO_FLAG_SFX_ACTOR_POS (1 << 0)
+#define ACTOR_AUDIO_FLAG_SFX_CENTERED_1 (1 << 1)
+#define ACTOR_AUDIO_FLAG_SFX_CENTERED_2 (1 << 2)
+#define ACTOR_AUDIO_FLAG_SFX_CENTERED_3 (1 << 3)
+#define ACTOR_AUDIO_FLAG_SFX_TIMER (1 << 4)
+#define ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE (1 << 5)
+#define ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE (1 << 6)
+
+#define ACTOR_AUDIO_FLAG_SFX_ALL \
+ (ACTOR_AUDIO_FLAG_SFX_TIMER | ACTOR_AUDIO_FLAG_SFX_CENTERED_3 | ACTOR_AUDIO_FLAG_SFX_CENTERED_2 | \
+ ACTOR_AUDIO_FLAG_SFX_CENTERED_1 | ACTOR_AUDIO_FLAG_SFX_ACTOR_POS)
+#define ACTOR_AUDIO_FLAG_SEQ_ALL (ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE | ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE)
+#define ACTOR_AUDIO_FLAG_ALL (ACTOR_AUDIO_FLAG_SFX_ALL | ACTOR_AUDIO_FLAG_SEQ_ALL)
+
// Internal forward declarations
void Actor_KillAllOnHalfDayChange(PlayState* play, ActorContext* actorCtx);
Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayState* play);
@@ -663,7 +679,7 @@ void func_800B5814(TargetContext* targetCtx, Player* player, Actor* actor, GameS
sfxId =
CHECK_FLAG_ALL(actor->flags, ACTOR_FLAG_4 | ACTOR_FLAG_1) ? NA_SE_SY_LOCK_ON : NA_SE_SY_LOCK_ON_HUMAN;
- play_sound(sfxId);
+ Audio_PlaySfx(sfxId);
}
targetCtx->targetCenterPos.x = actor->world.pos.x;
@@ -941,33 +957,37 @@ f32 Actor_GetPlayerImpact(PlayState* play, f32 range, Vec3f* pos, PlayerImpactTy
}
/**
- * Initializes an element of the `play->actorCtx.unk_20C` array to the `arg2` pointer, or allocates one using the
- * `size` argument in case `arg2` is NULL. This element is associated to an `id`
+ * Initializes an element of the `play->actorCtx.actorSharedMemory` array to the `ptr` pointer, or allocates one using
+ * the `size` argument in case `ptr` is NULL. This element is associated to an `id`.
+ *
+ * This allows allows different actors the ability to access the varible, and thus communicate with each other by
+ * reading/setting the value.
*
- * In success returns the allocated pointer if `arg2` was NULL or the `arg2` pointer otherwise
- * In failure (There's no space left in `play->actorCtx.unk_20C` or an allocation error happened) returns NULL
+ * In success: returns the allocated pointer if `ptr` was NULL or the `ptr` pointer otherwise.
+ * In failure (There's no space left in `play->actorCtx.actorSharedMemory` or an allocation error happened): returns
+ * NULL.
*
* Note there are no duplicated id checks.
*
* Used only by EnLiftNuts.
*/
-void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size) {
- ActorContext_unk_20C* entry = play->actorCtx.unk_20C;
+void* Actor_AddSharedMemoryEntry(PlayState* play, s16 id, void* ptr, size_t size) {
+ ActorSharedMemoryEntry* entry = play->actorCtx.actorSharedMemory;
s32 i;
- for (i = 0; i < ARRAY_COUNT(play->actorCtx.unk_20C); i++) {
+ for (i = 0; i < ARRAY_COUNT(play->actorCtx.actorSharedMemory); i++) {
if (entry->id == 0) {
- if (arg2 == NULL) {
- arg2 = ZeldaArena_Malloc(size);
- if (arg2 == NULL) {
+ if (ptr == NULL) {
+ ptr = ZeldaArena_Malloc(size);
+ if (ptr == NULL) {
return NULL;
}
entry->isDynamicallyInitialised = true;
}
entry->id = id;
- entry->ptr = arg2;
- return arg2;
+ entry->ptr = ptr;
+ return ptr;
}
entry++;
@@ -977,18 +997,18 @@ void* func_800B6584(PlayState* play, s16 id, void* arg2, size_t size) {
}
/**
- * Frees the first element of `play->actorCtx.unk_20C` with id `id`.
+ * Frees the first element of `play->actorCtx.actorSharedMemory` with id `id`.
*
* If success, the free'd pointer is returned.
* If failure, NULL is returned.
*
* Used only by EnLiftNuts.
*/
-void* func_800B6608(PlayState* play, s16 id) {
- ActorContext_unk_20C* entry = play->actorCtx.unk_20C;
+void* Actor_FreeSharedMemoryEntry(PlayState* play, s16 id) {
+ ActorSharedMemoryEntry* entry = play->actorCtx.actorSharedMemory;
s32 i;
- for (i = 0; i < ARRAY_COUNT(play->actorCtx.unk_20C); i++) {
+ for (i = 0; i < ARRAY_COUNT(play->actorCtx.actorSharedMemory); i++) {
if (id == entry->id) {
entry->id = 0;
if (entry->isDynamicallyInitialised) {
@@ -1005,16 +1025,16 @@ void* func_800B6608(PlayState* play, s16 id) {
}
/**
- * Retrieves the first pointer stored with the id `id`.
+ * Retrieves the first pointer stored with the id `id` from `play->actorCtx.actorSharedMemory`.
* If there's no pointer stored with that id, NULL is returned.
*
* Used only by EnGamelupy.
*/
-void* func_800B6680(PlayState* play, s16 id) {
- ActorContext_unk_20C* entry = play->actorCtx.unk_20C;
+void* Actor_FindSharedMemoryEntry(PlayState* play, s16 id) {
+ ActorSharedMemoryEntry* entry = play->actorCtx.actorSharedMemory;
s32 i;
- for (i = 0; i < ARRAY_COUNT(play->actorCtx.unk_20C); i++) {
+ for (i = 0; i < ARRAY_COUNT(play->actorCtx.actorSharedMemory); i++) {
if (id == entry->id) {
return entry->ptr;
}
@@ -1356,7 +1376,8 @@ void Actor_MountHorse(PlayState* play, Player* player, Actor* horse) {
}
s32 func_800B7200(Player* player) {
- return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) || (player->csMode != PLAYER_CSMODE_0);
+ return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_20000000)) ||
+ (player->csMode != PLAYER_CSMODE_NONE);
}
void Actor_SpawnHorse(PlayState* play, Player* player) {
@@ -1366,13 +1387,14 @@ void Actor_SpawnHorse(PlayState* play, Player* player) {
s32 func_800B724C(PlayState* play, Actor* actor, u8 csMode) {
Player* player = GET_PLAYER(play);
- if ((player->csMode == PLAYER_CSMODE_5) || ((csMode == PLAYER_CSMODE_END) && (player->csMode == PLAYER_CSMODE_0))) {
+ if ((player->csMode == PLAYER_CSMODE_5) ||
+ ((csMode == PLAYER_CSMODE_END) && (player->csMode == PLAYER_CSMODE_NONE))) {
return false;
}
player->csMode = csMode;
- player->unk_398 = actor;
- player->doorBgCamIndex = 0;
+ player->csActor = actor;
+ player->unk_3BA = false;
return true;
}
@@ -1380,7 +1402,7 @@ s32 func_800B7298(PlayState* play, Actor* actor, u8 csMode) {
Player* player = GET_PLAYER(play);
if (func_800B724C(play, actor, csMode)) {
- player->doorBgCamIndex = 1;
+ player->unk_3BA = true;
return true;
}
return false;
@@ -1857,14 +1879,38 @@ s32 Actor_ProcessTalkRequest(Actor* actor, GameState* gameState) {
return false;
}
-// Actor_OfferTalk / Actor_OfferGetItemExchange? Seems to be called with PLAYER_IA_MINUS1 if the same actor used
-// Actor_OfferGetItem.
-// This function is also used to toggle the "Speak" action on the A button
-s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, PlayerItemAction exchangeItemId) {
+/**
+ * This function covers offering the ability to `Talk` with the player.
+ * Passing an exchangeItemAction (see `PlayerItemAction`) allows the player to also use the item to initiate the
+ * conversation.
+ *
+ * This function carries a talk exchange request to the player actor if context allows it (e.g. the player is in range
+ * and not busy with certain things). The player actor performs the requested action itself.
+ *
+ * The following description of what the `exchangeItemAction` values can do is provided here for completeness, but these
+ * behaviors are entirely out of the scope of this function. All behavior is defined by the player actor.
+ *
+ * - Positive values (`PLAYER_IA_NONE < exchangeItemAction < PLAYER_IA_MAX`):
+ * Offers the ability to initiate the conversation with an item from the player.
+ * Not all positive values are implemented properly for this to work.
+ * Working ones are PLAYER_IA_PICTO_BOX and PLAYER_IA_BOTTLE_MIN <= exchangeItemAction < PLAYER_IA_MASK_MIN
+ * Note: While PLAYER_IA_BEANS works, it is special cased to just plant the bean with no talking.
+ * - `PLAYER_IA_NONE`:
+ * Allows the player to speak to or check the actor (by pressing A).
+ * - `PLAYER_IA_MINUS1`:
+ * Used by actors/player to continue the current conversation after a textbox is closed.
+ *
+ * @return true If the player actor is capable of accepting the offer.
+ *
+ * Note: There is only one instance of using this for actually using an item to start the conversation with the player.
+ * Every other instance is to either offer to speak, or continue the current conversation.
+ */
+s32 Actor_OfferTalkExchange(Actor* actor, PlayState* play, f32 xzRange, f32 yRange,
+ PlayerItemAction exchangeItemAction) {
Player* player = GET_PLAYER(play);
if ((player->actor.flags & ACTOR_FLAG_TALK_REQUESTED) ||
- ((exchangeItemId > PLAYER_IA_NONE) && Player_InCsMode(play)) ||
+ ((exchangeItemAction > PLAYER_IA_NONE) && Player_InCsMode(play)) ||
(!actor->isTargeted &&
((fabsf(actor->playerHeightRel) > fabsf(yRange)) || (actor->xzDistToPlayer > player->talkActorDistance) ||
(xzRange < actor->xzDistToPlayer)))) {
@@ -1873,24 +1919,35 @@ s32 func_800B8500(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, Player
player->talkActor = actor;
player->talkActorDistance = actor->xzDistToPlayer;
- player->exchangeItemId = exchangeItemId;
+ player->exchangeItemAction = exchangeItemAction;
CutsceneManager_Queue(CS_ID_GLOBAL_TALK);
return true;
}
-s32 func_800B85E0(Actor* actor, PlayState* play, f32 radius, PlayerItemAction exchangeItemId) {
- return func_800B8500(actor, play, radius, radius, exchangeItemId);
+/**
+ * Offers a talk exchange request within an equilateral cylinder with the radius specified.
+ */
+s32 Actor_OfferTalkExchangeEquiCylinder(Actor* actor, PlayState* play, f32 radius,
+ PlayerItemAction exchangeItemAction) {
+ return Actor_OfferTalkExchange(actor, play, radius, radius, exchangeItemAction);
}
-s32 func_800B8614(Actor* actor, PlayState* play, f32 radius) {
- return func_800B85E0(actor, play, radius, PLAYER_IA_NONE);
+/**
+ * Offers a talk request within an equilateral cylinder with the radius specified.
+ */
+s32 Actor_OfferTalk(Actor* actor, PlayState* play, f32 radius) {
+ return Actor_OfferTalkExchangeEquiCylinder(actor, play, radius, PLAYER_IA_NONE);
}
-s32 func_800B863C(Actor* actor, PlayState* play) {
+/**
+ * Offers a talk request within an equilateral cylinder whose radius is determined by the actor's collision check
+ * cylinder's radius.
+ */
+s32 Actor_OfferTalkNearColChkInfoCylinder(Actor* actor, PlayState* play) {
f32 cylRadius = actor->colChkInfo.cylRadius + 50.0f;
- return func_800B8614(actor, play, cylRadius);
+ return Actor_OfferTalk(actor, play, cylRadius);
}
s32 Actor_TextboxIsClosing(Actor* actor, PlayState* play) {
@@ -1921,10 +1978,10 @@ s32 Actor_ChangeFocus(Actor* actor1, PlayState* play, Actor* actor2) {
return false;
}
-PlayerItemAction Player_GetExchangeItemId(PlayState* play) {
+PlayerItemAction Player_GetExchangeItemAction(PlayState* play) {
Player* player = GET_PLAYER(play);
- return player->exchangeItemId;
+ return player->exchangeItemAction;
}
s32 func_800B8718(Actor* actor, GameState* gameState) {
@@ -1936,7 +1993,7 @@ s32 func_800B8718(Actor* actor, GameState* gameState) {
return false;
}
-// Similar to func_800B8500
+// Similar to Actor_OfferTalkExchange
s32 func_800B874C(Actor* actor, PlayState* play, f32 xzRange, f32 yRange) {
Player* player = GET_PLAYER(play);
@@ -2164,7 +2221,7 @@ void func_800B8E1C(PlayState* play, Actor* actor, f32 arg2, s16 arg3, f32 arg4)
*/
void Player_PlaySfx(Player* player, u16 sfxId) {
if (player->currentMask == PLAYER_MASK_GIANT) {
- func_8019F170(&player->actor.projectedPos, sfxId);
+ Audio_PlaySfx_AtPosWithPresetLowFreqAndHighReverb(&player->actor.projectedPos, sfxId);
} else {
AudioSfx_PlaySfx(sfxId, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -2175,10 +2232,10 @@ void Player_PlaySfx(Player* player, u16 sfxId) {
* Play a sound effect at the actor's position
*/
void Actor_PlaySfx(Actor* actor, u16 sfxId) {
- Audio_PlaySfxAtPos(&actor->projectedPos, sfxId);
+ Audio_PlaySfx_AtPos(&actor->projectedPos, sfxId);
}
-void func_800B8EF4(PlayState* play, Actor* actor) {
+void Actor_PlaySfx_SurfaceBomb(PlayState* play, Actor* actor) {
SurfaceSfxOffset surfaceSfxOffset;
if (actor->bgCheckFlags & BGCHECKFLAG_WATER) {
@@ -2191,41 +2248,53 @@ void func_800B8EF4(PlayState* play, Actor* actor) {
surfaceSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, actor->floorPoly, actor->floorBgId);
}
- Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_EV_BOMB_BOUND);
- Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_PL_WALK_GROUND + surfaceSfxOffset);
+ Audio_PlaySfx_AtPos(&actor->projectedPos, NA_SE_EV_BOMB_BOUND);
+ Audio_PlaySfx_AtPos(&actor->projectedPos, NA_SE_PL_WALK_GROUND + surfaceSfxOffset);
}
-void func_800B8F98(Actor* actor, u16 sfxId) {
+/**
+ * Play a sfx at the center of the screen using the shared audioFlag system
+ */
+void Actor_PlaySfx_FlaggedCentered1(Actor* actor, u16 sfxId) {
actor->sfxId = sfxId;
- actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01);
- actor->audioFlags |= 0x02;
+ actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL;
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_CENTERED_1;
}
-void func_800B8FC0(Actor* actor, u16 sfxId) {
+/**
+ * Play a sfx at the center of the screen using the shared audioFlag system
+ */
+void Actor_PlaySfx_FlaggedCentered2(Actor* actor, u16 sfxId) {
actor->sfxId = sfxId;
- actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01);
- actor->audioFlags |= 4;
+ actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL;
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_CENTERED_2;
}
-void func_800B8FE8(Actor* actor, u16 sfxId) {
+/**
+ * Play a sfx at the center of the screen using the shared audioFlag system
+ */
+void Actor_PlaySfx_FlaggedCentered3(Actor* actor, u16 sfxId) {
actor->sfxId = sfxId;
- actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01);
- actor->audioFlags |= 0x08;
+ actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL;
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_CENTERED_3;
}
-void func_800B9010(Actor* actor, u16 sfxId) {
+/**
+ * Play a sfx at the actor's position using the shared audioFlag system
+ */
+void Actor_PlaySfx_Flagged(Actor* actor, u16 sfxId) {
actor->sfxId = sfxId;
- actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01);
- actor->audioFlags |= 0x01;
+ actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL;
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_ACTOR_POS;
}
-void func_800B9038(Actor* actor, s32 timer) {
- actor->audioFlags &= ~(0x10 | 0x08 | 0x04 | 0x02 | 0x01);
- actor->audioFlags |= 0x10;
+void Actor_PlaySfx_FlaggedTimer(Actor* actor, s32 timer) {
+ actor->audioFlags &= ~ACTOR_AUDIO_FLAG_SFX_ALL;
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SFX_TIMER;
// The sfxId here are not actually sound effects, but instead this is data that gets sent into
- // the io ports of the music macro language (func_801A0810 / Audio_PlaySfxAtPosWithSoundScriptIO is
- // the function that it's used for)
+ // the io ports of the music macro language (Audio_PlaySfx_AtPosWithChannelIO / Audio_PlaySfxAtPosWithSoundScriptIO
+ // is the function that it's used for)
if (timer < 40) {
actor->sfxId = 3;
} else if (timer < 100) {
@@ -2235,12 +2304,12 @@ void func_800B9038(Actor* actor, s32 timer) {
}
}
-void func_800B9084(Actor* actor) {
- actor->audioFlags |= 0x20;
+void Actor_PlaySeq_FlaggedKamaroDance(Actor* actor) {
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE;
}
-void func_800B9098(Actor* actor) {
- actor->audioFlags |= 0x40;
+void Actor_PlaySeq_FlaggedMusicBoxHouse(Actor* actor) {
+ actor->audioFlags |= ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE;
}
s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4) {
@@ -2368,7 +2437,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) {
}
actor->sfxId = 0;
- actor->audioFlags &= ~0x7F;
+ actor->audioFlags &= ~ACTOR_AUDIO_FLAG_ALL;
if (actor->init != NULL) {
if (Object_IsLoaded(&play->objectCtx, actor->objBankIndex)) {
@@ -2545,7 +2614,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) {
actor = NULL;
if (actorCtx->targetContext.unk4B != 0) {
actorCtx->targetContext.unk4B = 0;
- play_sound(NA_SE_SY_LOCK_OFF);
+ Audio_PlaySfx(NA_SE_SY_LOCK_OFF);
}
}
@@ -2630,31 +2699,32 @@ void Actor_Draw(PlayState* play, Actor* actor) {
CLOSE_DISPS(play->state.gfxCtx);
}
-void func_800B9D1C(Actor* actor) {
+void Actor_UpdateFlaggedAudio(Actor* actor) {
s32 sfxId = actor->sfxId;
- if (sfxId != 0) {
- if (actor->audioFlags & 2) {
+ if (sfxId != NA_SE_NONE) {
+ if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_CENTERED_1) {
AudioSfx_PlaySfx(sfxId, &actor->projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb);
- } else if (actor->audioFlags & 4) {
- play_sound(sfxId);
- } else if (actor->audioFlags & 8) {
- func_8019F128(sfxId);
- } else if (actor->audioFlags & 0x10) {
- func_801A0810(&gSfxDefaultPos, NA_SE_SY_TIMER - SFX_FLAG, (sfxId - 1));
- } else if (actor->audioFlags & 1) {
- Audio_PlaySfxAtPos(&actor->projectedPos, sfxId);
+ } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_CENTERED_2) {
+ Audio_PlaySfx(sfxId);
+ } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_CENTERED_3) {
+ Audio_PlaySfx_2(sfxId);
+ } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_TIMER) {
+ Audio_PlaySfx_AtPosWithChannelIO(&gSfxDefaultPos, NA_SE_SY_TIMER - SFX_FLAG, (sfxId - 1));
+ } else if (actor->audioFlags & ACTOR_AUDIO_FLAG_SFX_ACTOR_POS) {
+ Audio_PlaySfx_AtPos(&actor->projectedPos, sfxId);
}
}
- if (sfxId) {}
+ //! FAKE:
+ if (sfxId != NA_SE_NONE) {}
- if (actor->audioFlags & 0x40) {
+ if (actor->audioFlags & ACTOR_AUDIO_FLAG_SEQ_MUSIC_BOX_HOUSE) {
func_801A1FB4(SEQ_PLAYER_BGM_SUB, &actor->projectedPos, NA_BGM_MUSIC_BOX_HOUSE, 1500.0f);
}
- if (actor->audioFlags & 0x20) {
+ if (actor->audioFlags & ACTOR_AUDIO_FLAG_SEQ_KAMARO_DANCE) {
func_801A1FB4(SEQ_PLAYER_BGM_MAIN, &actor->projectedPos, NA_BGM_KAMARO_DANCE, 900.0f);
}
}
@@ -2866,8 +2936,8 @@ void Actor_DrawAll(PlayState* play, ActorContext* actorCtx) {
SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &actor->world.pos, &actor->projectedPos,
&actor->projectedW);
- if (actor->audioFlags & 0x7F) {
- func_800B9D1C(actor);
+ if (actor->audioFlags & ACTOR_AUDIO_FLAG_ALL) {
+ Actor_UpdateFlaggedAudio(actor);
}
if (func_800BA2D8(play, actor)) {
@@ -3130,7 +3200,7 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) {
ActorOverlay* overlayEntry = &gActorOverlayTable[index];
ActorInit* actorInit;
- overlaySize = VRAM_PTR_SIZE(overlayEntry);
+ overlaySize = (uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart;
if (overlayEntry->vramStart == NULL) {
actorInit = overlayEntry->initInfo;
@@ -3151,15 +3221,16 @@ ActorInit* Actor_LoadOverlay(ActorContext* actorCtx, s16 index) {
return NULL;
}
- Load2_LoadOverlay(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart,
- overlayEntry->vramEnd, overlayEntry->loadedRamAddr);
+ Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd,
+ overlayEntry->loadedRamAddr);
overlayEntry->numLoaded = 0;
}
- actorInit = (uintptr_t)(
- (overlayEntry->initInfo != NULL)
- ? (void*)((uintptr_t)overlayEntry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(overlayEntry))
- : NULL);
+ actorInit = (void*)(uintptr_t)((overlayEntry->initInfo != NULL)
+ ? (void*)((uintptr_t)overlayEntry->initInfo -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
}
return actorInit;
@@ -4092,7 +4163,7 @@ s32 Npc_UpdateTalking(PlayState* play, Actor* actor, s16* talkState, f32 interac
return false;
}
- if (!func_800B8614(actor, play, interactRange)) {
+ if (!Actor_OfferTalk(actor, play, interactRange)) {
return false;
}
@@ -4420,28 +4491,41 @@ s16 func_800BDB6C(Actor* actor, PlayState* play, s16 arg2, f32 arg3) {
return arg2;
}
-void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 animIndex) {
- f32 frameCount;
+void Actor_ChangeAnimationByInfo(SkelAnime* skelAnime, AnimationInfo* animInfo, s32 animIndex) {
+ f32 endFrame;
- animationInfo += animIndex;
- if (animationInfo->frameCount > 0.0f) {
- frameCount = animationInfo->frameCount;
+ animInfo += animIndex;
+
+ if (animInfo->frameCount > 0.0f) {
+ endFrame = animInfo->frameCount;
} else {
- frameCount = Animation_GetLastFrame(&animationInfo->animation->common);
+ endFrame = Animation_GetLastFrame(&animInfo->animation->common);
}
- Animation_Change(skelAnime, animationInfo->animation, animationInfo->playSpeed, animationInfo->startFrame,
- frameCount, animationInfo->mode, animationInfo->morphFrames);
+ Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
+ animInfo->mode, animInfo->morphFrames);
}
-// Unused
-void func_800BDCF4(PlayState* play, s16* arg1, s16* arg2, s32 size) {
+/**
+ * Fills two tables with rotation angles that can be used to simulate idle animations.
+ *
+ * The rotation angles are dependent on the current frame, so should be updated regularly, generally every frame.
+ *
+ * This is done for the desired limb by taking either the `sin` of the yTable value or the `cos` of the zTable value,
+ * multiplying by some scale factor (generally 200), and adding that to the already existing rotation.
+ *
+ * Note: With the common scale factor of 200, this effect is practically unnoticeable if the current animation already
+ * has motion involved.
+ *
+ * Note: This function goes unused in favor of `SubS_UpdateFidgetTables`.
+ */
+void Actor_UpdateFidgetTables(PlayState* play, s16* fidgetTableY, s16* fidgetTableZ, s32 tableLen) {
s32 frames = play->gameplayFrames;
s32 i;
- for (i = 0; i < size; i++) {
- arg1[i] = (0x814 + 50 * i) * frames;
- arg2[i] = (0x940 + 50 * i) * frames;
+ for (i = 0; i < tableLen; i++) {
+ fidgetTableY[i] = (i * 50 + 0x814) * frames;
+ fidgetTableZ[i] = (i * 50 + 0x940) * frames;
}
}
@@ -4622,20 +4706,20 @@ TexturePtr sElectricSparkTextures[] = {
};
/**
- * Draw common damage effects applied to each limb provided in limbPos
+ * Draw common damage effects applied to each body part provided in bodyPartsPos
*/
-void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16 limbPosCount, f32 effectScale,
+void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f bodyPartsPos[], s16 bodyPartsCount, f32 effectScale,
f32 frozenSteamScale, f32 effectAlpha, u8 type) {
if (effectAlpha > 0.001f) {
s32 twoTexScrollParam;
- s16 limbIndex;
+ s16 bodyPartIndex;
MtxF* currentMatrix;
f32 alpha;
f32 frozenScale;
f32 lightOrbsScale;
f32 electricSparksScale;
f32 steamScale;
- Vec3f* limbPosStart = limbPos;
+ Vec3f* bodyPartsPosStart = bodyPartsPos;
u32 gameplayFrames = play->gameplayFrames;
f32 effectAlphaScaled;
@@ -4663,7 +4747,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
case ACTOR_DRAW_DMGEFF_FROZEN_SFX:
frozenScale = ((KREG(19) * 0.01f) + 2.3f) * effectScale;
steamScale = ((KREG(28) * 0.0001f) + 0.035f) * frozenSteamScale;
- func_800BCC68(limbPos, play);
+ func_800BCC68(bodyPartsPos, play);
// Setup to draw ice over frozen actor
@@ -4675,11 +4759,11 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
effectAlphaScaled = effectAlpha * 255.0f;
- // Apply and draw ice over each limb of frozen actor
- for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
- alpha = limbIndex & 3;
+ // Apply and draw ice over each body part of frozen actor
+ for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) {
+ alpha = bodyPartIndex & 3;
alpha = effectAlphaScaled - (30.0f * alpha);
- if (effectAlphaScaled < (30.0f * (limbIndex & 3))) {
+ if (effectAlphaScaled < (30.0f * (bodyPartIndex & 3))) {
alpha = 0.0f;
}
if (alpha > 255.0f) {
@@ -4688,14 +4772,14 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gDPSetEnvColor(POLY_XLU_DISP++, KREG(20) + 200, KREG(21) + 200, KREG(22) + 255, (u8)alpha);
- Matrix_Translate(limbPos->x, limbPos->y, limbPos->z, MTXMODE_NEW);
+ Matrix_Translate(bodyPartsPos->x, bodyPartsPos->y, bodyPartsPos->z, MTXMODE_NEW);
Matrix_Scale(frozenScale, frozenScale, frozenScale, MTXMODE_APPLY);
- if (limbIndex & 1) {
+ if (bodyPartIndex & 1) {
Matrix_RotateYF(M_PI, MTXMODE_APPLY);
}
- if (limbIndex & 2) {
+ if (bodyPartIndex & 2) {
Matrix_RotateZF(M_PI, MTXMODE_APPLY);
}
@@ -4705,7 +4789,7 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment2ModelDL);
}
- limbPos = limbPosStart; // reset limbPos
+ bodyPartsPos = bodyPartsPosStart; // reset bodyPartsPos
// Setup to draw steam over frozen actor
@@ -4720,14 +4804,14 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)alpha);
- // Apply and draw steam over each limb of frozen actor
- for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
- twoTexScrollParam = ((limbIndex * 3) + gameplayFrames);
+ // Apply and draw steam over each body part of frozen actor
+ for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) {
+ twoTexScrollParam = ((bodyPartIndex * 3) + gameplayFrames);
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, twoTexScrollParam * 3, twoTexScrollParam * -12,
32, 64, 1, 0, 0, 32, 32));
- Matrix_Translate(limbPos->x, limbPos->y, limbPos->z, MTXMODE_NEW);
+ Matrix_Translate(bodyPartsPos->x, bodyPartsPos->y, bodyPartsPos->z, MTXMODE_NEW);
Matrix_ReplaceRotation(&play->billboardMtxF);
Matrix_Scale(steamScale, steamScale, 1.0f, MTXMODE_APPLY);
@@ -4754,11 +4838,11 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
effectAlphaScaled = effectAlpha * 255.0f;
- // Apply and draw fire on every limb
- for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
- alpha = limbIndex & 3;
+ // Apply and draw fire on every body part
+ for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) {
+ alpha = bodyPartIndex & 3;
alpha = effectAlphaScaled - 30.0f * alpha;
- if (effectAlphaScaled < 30.0f * (limbIndex & 3)) {
+ if (effectAlphaScaled < 30.0f * (bodyPartIndex & 3)) {
alpha = 0.0f;
}
if (alpha > 255.0f) {
@@ -4772,12 +4856,12 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0,
- ((limbIndex * 10 + gameplayFrames) * -20) & 0x1FF, 32, 128));
+ ((bodyPartIndex * 10 + gameplayFrames) * -20) & 0x1FF, 32, 128));
Matrix_RotateYF(M_PI, MTXMODE_APPLY);
- currentMatrix->mf[3][0] = limbPos->x;
- currentMatrix->mf[3][1] = limbPos->y;
- currentMatrix->mf[3][2] = limbPos->z;
+ currentMatrix->mf[3][0] = bodyPartsPos->x;
+ currentMatrix->mf[3][1] = bodyPartsPos->y;
+ currentMatrix->mf[3][2] = bodyPartsPos->z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -4814,12 +4898,12 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
Matrix_Put(&play->billboardMtxF);
Matrix_Scale(lightOrbsScale, lightOrbsScale, 1.0f, MTXMODE_APPLY);
- // Apply and draw a light orb over each limb of frozen actor
- for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
+ // Apply and draw a light orb over each body part of frozen actor
+ for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) {
Matrix_RotateZF(Rand_CenteredFloat(2 * M_PI), MTXMODE_APPLY);
- currentMatrix->mf[3][0] = limbPos->x;
- currentMatrix->mf[3][1] = limbPos->y;
- currentMatrix->mf[3][2] = limbPos->z;
+ currentMatrix->mf[3][0] = bodyPartsPos->x;
+ currentMatrix->mf[3][1] = bodyPartsPos->y;
+ currentMatrix->mf[3][2] = bodyPartsPos->z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -4852,14 +4936,14 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
Matrix_Put(&play->billboardMtxF);
Matrix_Scale(electricSparksScale, electricSparksScale, electricSparksScale, MTXMODE_APPLY);
- // Every limb draws two electric sparks at random orientations
- for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
+ // Every body part draws two electric sparks at random orientations
+ for (bodyPartIndex = 0; bodyPartIndex < bodyPartsCount; bodyPartIndex++, bodyPartsPos++) {
// first electric spark
Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI));
Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
- currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x;
- currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y;
- currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z;
+ currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->x;
+ currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->y;
+ currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -4869,9 +4953,9 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
// second electric spark
Matrix_RotateXFApply(Rand_ZeroFloat(2 * M_PI));
Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
- currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->x;
- currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->y;
- currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + limbPos->z;
+ currentMatrix->mf[3][0] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->x;
+ currentMatrix->mf[3][1] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->y;
+ currentMatrix->mf[3][2] = Rand_CenteredFloat((f32)sREG(24) + 30.0f) + bodyPartsPos->z;
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -4886,11 +4970,11 @@ void Actor_DrawDamageEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s16
}
}
-void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 limbPosCount, s32 effectsPerLimb,
- f32 scale, f32 scaleRange) {
- static Color_RGBA8 primColor = { 170, 255, 255, 255 };
- static Color_RGBA8 envColor = { 200, 200, 255, 255 };
- static Vec3f accel = { 0.0f, -1.0f, 0.0f };
+void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f bodyPartsPos[], s32 bodyPartsCount,
+ s32 effectsPerBodyPart, f32 scale, f32 scaleRange) {
+ static Color_RGBA8 sPrimColor = { 170, 255, 255, 255 };
+ static Color_RGBA8 sEnvColor = { 200, 200, 255, 255 };
+ static Vec3f sAccel = { 0.0f, -1.0f, 0.0f };
s32 i;
s32 pad;
Vec3f velocity;
@@ -4900,10 +4984,10 @@ void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 l
SoundSource_PlaySfxAtFixedWorldPos(play, &actor->world.pos, 30, NA_SE_EV_ICE_BROKEN);
- for (i = 0; i < limbPosCount; i++) {
- yaw = Actor_WorldYawTowardPoint(actor, limbPos);
+ for (i = 0; i < bodyPartsCount; i++) {
+ yaw = Actor_WorldYawTowardPoint(actor, bodyPartsPos);
- for (j = 0; j < effectsPerLimb; j++) {
+ for (j = 0; j < effectsPerBodyPart; j++) {
randomYaw = ((s32)Rand_Next() >> 0x13) + yaw;
velocity.z = Rand_ZeroFloat(5.0f);
@@ -4912,10 +4996,10 @@ void Actor_SpawnIceEffects(PlayState* play, Actor* actor, Vec3f limbPos[], s32 l
velocity.y = Rand_ZeroFloat(4.0f) + 8.0f;
velocity.z *= Math_CosS(randomYaw);
- EffectSsEnIce_Spawn(play, limbPos, Rand_ZeroFloat(scaleRange) + scale, &velocity, &accel, &primColor,
- &envColor, 30);
+ EffectSsEnIce_Spawn(play, bodyPartsPos, Rand_ZeroFloat(scaleRange) + scale, &velocity, &sAccel, &sPrimColor,
+ &sEnvColor, 30);
}
- limbPos++;
+ bodyPartsPos++;
}
}
diff --git a/src/code/z_actor_dlftbls.c b/src/code/z_actor_dlftbls.c
index 1008cceab..012c118fb 100644
--- a/src/code/z_actor_dlftbls.c
+++ b/src/code/z_actor_dlftbls.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "fault.h"
// Init Vars declarations (also used in the table below)
#define DEFINE_ACTOR(name, _enumValue, _allocType, _debugName) extern ActorInit name##_InitVars;
@@ -52,7 +53,7 @@ void ActorOverlayTable_FaultClient(void* arg0, void* arg1) {
FaultDrawer_Printf("No. RamStart- RamEnd cn Name\n");
for (actorId = 0, overlayEntry = &gActorOverlayTable[0]; actorId < gMaxActorId; actorId++, overlayEntry++) {
- overlaySize = VRAM_PTR_SIZE(overlayEntry);
+ overlaySize = (uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart;
if (overlayEntry->loadedRamAddr != NULL) {
FaultDrawer_Printf("%3d %08x-%08x %3d %s\n", actorId, overlayEntry->loadedRamAddr,
(u32)overlayEntry->loadedRamAddr + overlaySize, overlayEntry->numLoaded, "");
@@ -60,7 +61,7 @@ void ActorOverlayTable_FaultClient(void* arg0, void* arg1) {
}
}
-void* ActorOverlayTable_FaultAddrConv(void* address, void* param) {
+uintptr_t ActorOverlayTable_FaultAddrConv(uintptr_t address, void* param) {
uintptr_t addr = address;
ActorOverlay* actorOvl = &gActorOverlayTable[0];
size_t ramConv;
@@ -69,7 +70,7 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param) {
ActorId actorId;
for (actorId = 0; actorId < gMaxActorId; actorId++, actorOvl++) {
- diff = VRAM_PTR_SIZE(actorOvl);
+ diff = (uintptr_t)actorOvl->vramEnd - (uintptr_t)actorOvl->vramStart;
ramStart = actorOvl->loadedRamAddr;
ramConv = (uintptr_t)actorOvl->vramStart - (uintptr_t)ramStart;
@@ -79,7 +80,8 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param) {
}
}
}
- return NULL;
+
+ return 0;
}
void ActorOverlayTable_Init(void) {
diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c
index 50fa96a7a..11c994772 100644
--- a/src/code/z_bgcheck.c
+++ b/src/code/z_bgcheck.c
@@ -1,4 +1,6 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "fault.h"
#include "fixed_point.h"
#include "vt.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
@@ -80,24 +82,16 @@ BgSpecialSceneMaxObjects sCustomDynapolyMem[] = {
// TODO: All these bss variables are localized to one function and can
// likely be made into in-function static bss variables in the future
-Vec3f D_801ED9F0[3]; // polyVerts
-Vec3f D_801EDA18[3]; // polyVerts
-Vec3f D_801EDA80[3]; // polyVerts
-Vec3f D_801EDB48[3]; // polyVerts
-
-#ifndef NON_MATCHING
-Vec3f D_801EDB70[3]; // polyVerts;
-Plane D_801EDB98; // plane;
-Sphere16 D_801EDBA8; // sphere;
-TriNorm D_801EDBB0; // tri;
-#endif
-
char D_801ED950[80];
char D_801ED9A0[80];
+Vec3f D_801ED9F0[3]; // polyVerts
+Vec3f D_801EDA18[3]; // polyVerts
+MtxF sModelToWorldMtxF;
+Vec3f D_801EDA80[3]; // polyVerts
char D_801EDAA8[80];
char D_801EDAF8[80];
-MtxF sModelToWorldMtxF;
+Vec3f D_801EDB48[3]; // polyVerts
void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector);
f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast);
@@ -394,8 +388,6 @@ s32 CollisionPoly_CheckZIntersectApprox(CollisionPoly* poly, Vec3s* vtxList, f32
y, zIntersect);
}
-#ifdef NON_MATCHING
-// Matches, but needs in-function static bss
s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0) {
static Vec3f sPolyVerts[3]; // D_801EDB70
static Plane sPlane; // D_801EDB98
@@ -445,13 +437,7 @@ s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0) {
}
return false;
}
-#else
-s32 CollisionPoly_LineVsPoly(BgLineVsPolyTest* a0);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_LineVsPoly.s")
-#endif
-#ifdef NON_MATCHING
-// Matches, but needs in-function static bss
s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius) {
static Sphere16 sSphere; // D_801EDBA8
static TriNorm sTri; // D_801EDBB0
@@ -466,10 +452,6 @@ s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center,
sSphere.radius = radius;
return Math3D_TriVsSphIntersect(&sSphere, &sTri, &intersect);
}
-#else
-s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/CollisionPoly_SphVsPoly.s")
-#endif
/**
* Add poly to StaticLookup table
@@ -1897,7 +1879,6 @@ f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPol
return BgCheck_RaycastFloorImpl(NULL, colCtx, COLPOLY_IGNORE_ENTITY, outPoly, bgId, pos, NULL, 0x06, 1.0f, 0);
}
-#ifdef NON_MATCHING
/**
* Tests if moving from `posPrev` to `posNext` will collide with a "wall"
* `radius` is used to form a sphere for collision detection purposes
@@ -1908,7 +1889,7 @@ f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPol
s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev,
f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA) {
StaticLookup* lookupTbl;
- f32 temp_f0;
+ s32 pad;
s32 result;
CollisionPoly* poly;
// change between posPrev to posNext
@@ -1919,23 +1900,7 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
s32 dynaPolyCollision;
Vec3f posIntersect;
s32 bgId;
- f32 temp_f0_2;
f32 f32temp;
- f32 nx2;
- f32 nz2;
- Vec3f checkLineNext;
- Vec3f checkLinePrev;
- f32 n2XZDist;
- f32 n3XZDist;
- f32 nx3;
- f32 nz3;
- s32 bccFlags;
- Vec3f posIntersect2;
- s32 bgId2;
- // unit normal of polygon
- f32 nx;
- f32 ny;
- f32 nz;
result = false;
*outBgId = BGCHECK_SCENE;
@@ -1953,7 +1918,9 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
result = BgCheck_CheckLineImpl(colCtx, xpFlags, COLPOLY_IGNORE_NONE, posPrev, posNext, &posIntersect, &poly,
&bgId, actor, 1.0f, BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_CEILING);
if (result) {
- ny = COLPOLY_GET_NORMAL(poly->normal.y);
+ // unit normal of polygon
+ f32 ny = COLPOLY_GET_NORMAL(poly->normal.y);
+
// if poly is floor, push result underneath the floor
if (ny > 0.5f) {
posResult->x = posIntersect.x;
@@ -1969,8 +1936,9 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
}
// poly is wall
else {
- nx = COLPOLY_GET_NORMAL(poly->normal.x);
- nz = COLPOLY_GET_NORMAL(poly->normal.z);
+ f32 nx = COLPOLY_GET_NORMAL(poly->normal.x);
+ f32 nz = COLPOLY_GET_NORMAL(poly->normal.z);
+
posResult->x = radius * nx + posIntersect.x;
posResult->y = radius * ny + posIntersect.y;
posResult->z = radius * nz + posIntersect.z;
@@ -1980,9 +1948,12 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
}
} else {
// if the radius is less than the distance travelled on the xz plane, also test for floor collisions
- bccFlags = SQ(radius) < (SQ(dx) + SQ(dz))
- ? (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_CEILING)
- : (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_FLOOR & ~BGCHECK_CHECK_CEILING);
+ Vec3f checkLineNext;
+ Vec3f checkLinePrev;
+ s32 pad;
+ s32 bccFlags = SQ(radius) < (SQ(dx) + SQ(dz))
+ ? (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_CEILING)
+ : (BGCHECK_CHECK_ALL & ~BGCHECK_CHECK_FLOOR & ~BGCHECK_CHECK_CEILING);
// perform a straight line test to see if a line at posNext.y + checkHeight from posPrev.xz to posNext.xz
// passes through any wall and possibly floor polys
@@ -1994,21 +1965,23 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
&posIntersect, &poly, &bgId, actor, 1.0f, bccFlags);
if (result) {
- nx2 = COLPOLY_GET_NORMAL(poly->normal.x);
- nz2 = COLPOLY_GET_NORMAL(poly->normal.z);
- n2XZDist = sqrtf(SQ(nx2) + SQ(nz2));
+ f32 nx2 = COLPOLY_GET_NORMAL(poly->normal.x);
+ f32 nz2 = COLPOLY_GET_NORMAL(poly->normal.z);
+ f32 n2XZDist = sqrtf(SQ(nx2) + SQ(nz2));
// if poly is not a "flat" floor or "flat" ceiling
if (!IS_ZERO(n2XZDist)) {
// normalize nx,nz and multiply each by the radius to go back to the other side of the wall
+ f32 ny2;
+
f32temp = 1.0f / n2XZDist;
- temp_f0 = radius * f32temp;
- posResult->x = temp_f0 * nx2 + posIntersect.x;
- posResult->z = temp_f0 * nz2 + posIntersect.z;
+ posResult->x = radius * f32temp * nx2 + posIntersect.x;
+ posResult->z = radius * f32temp * nz2 + posIntersect.z;
*outPoly = poly;
*outBgId = bgId;
+ ny2 = COLPOLY_GET_NORMAL(poly->normal.y);
result = true;
- if (poly->normal.y * COLPOLY_NORMAL_FRAC > 0.5f) {
+ if (ny2 > 0.5f) {
if (actor != NULL) {
actor->bgCheckFlags |= BGCHECKFLAG_PLAYER_1000;
}
@@ -2042,19 +2015,21 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
}
// if a collision with a dyna poly was detected
if (dynaPolyCollision || (*outBgId != BGCHECK_SCENE)) {
+ Vec3f posIntersect2;
+ s32 bgId2;
+
if (BgCheck_CheckLineImpl(colCtx, xpFlags, COLPOLY_IGNORE_NONE, posPrev, posResult, &posIntersect2, &poly,
&bgId2, actor, 1.0f, BGCHECK_CHECK_ONE_FACE | BGCHECK_CHECK_WALL)) {
- nx3 = COLPOLY_GET_NORMAL(poly->normal.x);
- nz3 = COLPOLY_GET_NORMAL(poly->normal.z);
- n3XZDist = sqrtf(SQ(nx3) + SQ(nz3));
+ f32 nx3 = COLPOLY_GET_NORMAL(poly->normal.x);
+ f32 nz3 = COLPOLY_GET_NORMAL(poly->normal.z);
+ f32 n3XZDist = sqrtf(SQ(nx3) + SQ(nz3));
// if poly is not a "flat" floor or "flat" ceiling
if (!IS_ZERO(n3XZDist)) {
// normalize nx,nz and multiply each by the radius to go back to the other side of the wall
f32temp = 1.0f / n3XZDist;
- temp_f0_2 = radius * f32temp;
- posResult->x = temp_f0_2 * nx3 + posIntersect2.x;
- posResult->z = temp_f0_2 * nz3 + posIntersect2.z;
+ posResult->x = radius * f32temp * nx3 + posIntersect2.x;
+ posResult->z = radius * f32temp * nz3 + posIntersect2.z;
*outPoly = poly;
*outBgId = bgId2;
result = true;
@@ -2063,11 +2038,6 @@ s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResul
}
return result;
}
-#else
-s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev,
- f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_CheckWallImpl.s")
-#endif
/**
* Public. Tests if moving from `posPrev` to `posNext` will collide with a "wall"
@@ -3249,7 +3219,6 @@ f32 BgCheck_RaycastFloorDynaList(DynaRaycast* dynaRaycast, u32 listType) {
return result;
}
-#ifdef NON_MATCHING
/**
* Perform dyna poly raycast toward floor
* returns the yIntersect of the poly found, or BGCHECK_Y_MIN if no poly is found
@@ -3261,7 +3230,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
s32 i2;
s32 pauseState;
DynaPolyActor* dynaActor;
- s32 pad;
+ u32 bgId;
Vec3f polyVtx[3];
Vec3f polyNorm;
u32 polyIndex;
@@ -3270,10 +3239,10 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
f32 magnitude;
Vec3s* vtxList;
f32 polyDist;
+ CollisionPoly* poly;
Vec3f vtx;
f32 intersect;
ScaleRotPos* curTransform;
- CollisionPoly* poly;
result = BGCHECK_Y_MIN;
*dynaRaycast->bgId = BGCHECK_SCENE;
@@ -3334,12 +3303,12 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
pauseState = dynaRaycast->play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE;
}
if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & BGACTOR_1)) {
- curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform;
- polyMin = &dynaRaycast->dyna
- ->polyList[(u16)dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].dynaLookup.polyStartIndex];
+ bgId = *dynaRaycast->bgId;
+ polyMin = &dynaRaycast->dyna->polyList[(u16)dynaRaycast->dyna->bgActors[bgId].dynaLookup.polyStartIndex];
polyIndex = *dynaRaycast->resultPoly - polyMin;
poly = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].colHeader->polyList[polyIndex];
+ curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform;
SkinMatrix_SetScaleRotateYRPTranslate(&srpMtx, curTransform->scale.x, curTransform->scale.y,
curTransform->scale.z, curTransform->rot.x, curTransform->rot.y,
curTransform->rot.z, curTransform->pos.x, curTransform->pos.y,
@@ -3348,7 +3317,9 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
vtxList = dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].colHeader->vtxList;
for (i2 = 0; i2 < 3; i2++) {
- Math_Vec3s_ToVec3f(&vtx, &vtxList[COLPOLY_VTX_INDEX(poly->vtxData[i2])]);
+ Vec3s* src = &vtxList[COLPOLY_VTX_INDEX(poly->vtxData[i2])];
+
+ Math_Vec3s_ToVec3f(&vtx, src);
SkinMatrix_Vec3fMtxFMultXYZ(&srpMtx, &vtx, &polyVtx[i2]);
}
Math3D_SurfaceNorm(&polyVtx[0], &polyVtx[1], &polyVtx[2], &polyNorm);
@@ -3363,7 +3334,6 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
&polyVtx[0], &polyVtx[1], &polyVtx[2], polyNorm.x, polyNorm.y, polyNorm.z, polyDist,
dynaRaycast->pos->z, dynaRaycast->pos->x, &intersect, dynaRaycast->checkDist)) {
if (fabsf(intersect - result) < 1.0f) {
-
result = intersect;
}
}
@@ -3372,9 +3342,6 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) {
}
return result;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/BgCheck_RaycastFloorDyna.s")
-#endif
/**
* Performs collision detection on a BgActor's wall polys on sphere `pos`, `radius`
@@ -4200,6 +4167,9 @@ Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s
return BgCheck_GetBgCamFuncDataImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId);
}
+/**
+ * Returns one above the value indexed by `play->setupExitList[]`
+ */
u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 8 & 0x1F;
}
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index d97d3b4af..e7c7a780f 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -481,7 +481,7 @@ s32 Camera_GetFocalActorPos(Vec3f* dst, Camera* camera) {
Actor* focalActor = camera->focalActor;
if (camera->focalActor == &GET_PLAYER(camera->play)->actor) {
- *dst = ((Player*)focalActor)->bodyPartsPos[0];
+ *dst = ((Player*)focalActor)->bodyPartsPos[PLAYER_BODYPART_WAIST];
return dst;
} else {
Actor_GetWorldPosShapeRot(&focalPosRot, camera->focalActor);
@@ -7401,7 +7401,7 @@ void Camera_EarthquakeDay3(Camera* camera) {
if (sEarthquakeTimer != 0) {
sEarthquakeTimer--;
- func_8019F128(NA_SE_SY_EARTHQUAKE_OUTDOOR - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_SY_EARTHQUAKE_OUTDOOR - SFX_FLAG);
}
}
}
@@ -7867,24 +7867,24 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 forceChange) {
if (camera->status == CAM_STATUS_ACTIVE) {
switch (sModeChangeFlags) {
case CAM_CHANGE_MODE_0:
- play_sound(0);
+ Audio_PlaySfx(0);
break;
case CAM_CHANGE_MODE_1:
if (camera->play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) {
- play_sound(NA_SE_SY_ATTENTION_URGENCY);
+ Audio_PlaySfx(NA_SE_SY_ATTENTION_URGENCY);
} else {
- play_sound(NA_SE_SY_ATTENTION_ON);
+ Audio_PlaySfx(NA_SE_SY_ATTENTION_ON);
}
break;
case CAM_CHANGE_MODE_BATTLE:
- play_sound(NA_SE_SY_ATTENTION_URGENCY);
+ Audio_PlaySfx(NA_SE_SY_ATTENTION_URGENCY);
break;
case CAM_CHANGE_MODE_FOLLOW_TARGET:
- play_sound(NA_SE_SY_ATTENTION_ON);
+ Audio_PlaySfx(NA_SE_SY_ATTENTION_ON);
break;
default:
diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c
index cbd7f8b03..f80899820 100644
--- a/src/code/z_collision_check.c
+++ b/src/code/z_collision_check.c
@@ -1,4 +1,12 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
+#include "z64collision_check.h"
+
+typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*);
+typedef void (*ColChkBloodFunc)(struct PlayState*, Collider*, Vec3f*);
+typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Collider*);
+typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*);
+typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*);
Vec3f D_801EDE00;
Vec3f D_801EDE10;
@@ -1527,9 +1535,9 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll
if ((flags == TOUCH_SFX_NORMAL) && (collider->colType != COLTYPE_METAL)) {
EffectSsHitmark_SpawnFixedScale(play, 0, hitPos);
if (collider->actor == NULL) {
- play_sound(NA_SE_IT_SHIELD_BOUND);
+ Audio_PlaySfx(NA_SE_IT_SHIELD_BOUND);
} else {
- Audio_PlaySfxAtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND);
+ Audio_PlaySfx_AtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND);
}
} else if (flags == TOUCH_SFX_NORMAL) {
EffectSsHitmark_SpawnFixedScale(play, 3, hitPos);
@@ -1541,16 +1549,16 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll
} else if (flags == TOUCH_SFX_HARD) {
EffectSsHitmark_SpawnFixedScale(play, 0, hitPos);
if (collider->actor == NULL) {
- play_sound(NA_SE_IT_SHIELD_BOUND);
+ Audio_PlaySfx(NA_SE_IT_SHIELD_BOUND);
} else {
- Audio_PlaySfxAtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND);
+ Audio_PlaySfx_AtPos(&collider->actor->projectedPos, NA_SE_IT_SHIELD_BOUND);
}
} else if (flags == TOUCH_SFX_WOOD) {
EffectSsHitmark_SpawnFixedScale(play, 1, hitPos);
if (collider->actor == NULL) {
- play_sound(NA_SE_IT_REFLECTION_WOOD);
+ Audio_PlaySfx(NA_SE_IT_REFLECTION_WOOD);
} else {
- Audio_PlaySfxAtPos(&collider->actor->projectedPos, NA_SE_IT_REFLECTION_WOOD);
+ Audio_PlaySfx_AtPos(&collider->actor->projectedPos, NA_SE_IT_REFLECTION_WOOD);
}
}
}
@@ -1561,13 +1569,13 @@ void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* coll
s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo) {
if ((at->actor != NULL) && (at->actor->category == ACTORCAT_PLAYER)) {
if (acInfo->elemType == ELEMTYPE_UNK0) {
- Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE);
+ Audio_PlaySfx_AtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE);
} else if (acInfo->elemType == ELEMTYPE_UNK1) {
- Audio_PlaySfxAtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE_HARD);
+ Audio_PlaySfx_AtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE_HARD);
} else if (acInfo->elemType == ELEMTYPE_UNK2) {
- Audio_PlaySfxAtPos(&at->actor->projectedPos, 0);
+ Audio_PlaySfx_AtPos(&at->actor->projectedPos, 0);
} else if (acInfo->elemType == ELEMTYPE_UNK3) {
- Audio_PlaySfxAtPos(&at->actor->projectedPos, 0);
+ Audio_PlaySfx_AtPos(&at->actor->projectedPos, 0);
}
}
return 1;
@@ -1607,7 +1615,7 @@ void CollisionCheck_HitEffects(PlayState* play, Collider* at, ColliderInfo* atIn
} else if (sHitInfo[ac->colType].effect == HIT_WOOD) {
if (at->actor == NULL) {
CollisionCheck_SpawnShieldParticles(play, hitPos);
- play_sound(NA_SE_IT_REFLECTION_WOOD);
+ Audio_PlaySfx(NA_SE_IT_REFLECTION_WOOD);
} else {
CollisionCheck_SpawnShieldParticlesWood(play, hitPos, &at->actor->projectedPos);
}
@@ -1620,9 +1628,9 @@ void CollisionCheck_HitEffects(PlayState* play, Collider* at, ColliderInfo* atIn
} else {
EffectSsHitmark_SpawnFixedScale(play, 0, hitPos);
if (ac->actor == NULL) {
- play_sound(NA_SE_IT_SHIELD_BOUND);
+ Audio_PlaySfx(NA_SE_IT_SHIELD_BOUND);
} else {
- Audio_PlaySfxAtPos(&ac->actor->projectedPos, NA_SE_IT_SHIELD_BOUND);
+ Audio_PlaySfx_AtPos(&ac->actor->projectedPos, NA_SE_IT_SHIELD_BOUND);
}
}
}
@@ -3862,7 +3870,7 @@ void CollisionCheck_SpawnShieldParticles(PlayState* play, Vec3f* v) {
*/
void CollisionCheck_SpawnShieldParticlesMetal(PlayState* play, Vec3f* v) {
CollisionCheck_SpawnShieldParticles(play, v);
- play_sound(NA_SE_IT_SHIELD_REFLECT_SW);
+ Audio_PlaySfx(NA_SE_IT_SHIELD_REFLECT_SW);
}
/**
@@ -3870,7 +3878,7 @@ void CollisionCheck_SpawnShieldParticlesMetal(PlayState* play, Vec3f* v) {
*/
void CollisionCheck_SpawnShieldParticlesMetalSound(PlayState* play, Vec3f* v, Vec3f* pos) {
CollisionCheck_SpawnShieldParticles(play, v);
- Audio_PlaySfxAtPos(pos, NA_SE_IT_SHIELD_REFLECT_SW);
+ Audio_PlaySfx_AtPos(pos, NA_SE_IT_SHIELD_REFLECT_SW);
}
/**
@@ -3910,7 +3918,7 @@ void CollisionCheck_SpawnShieldParticlesWood(PlayState* play, Vec3f* v, Vec3f* p
shieldParticleInitWood.lightPoint.z = shieldParticleInitWood.position.z;
Effect_Add(play, &effectIndex, EFFECT_SHIELD_PARTICLE, 0, 1, &shieldParticleInitWood);
- Audio_PlaySfxAtPos(pos, NA_SE_IT_REFLECTION_WOOD);
+ Audio_PlaySfx_AtPos(pos, NA_SE_IT_REFLECTION_WOOD);
}
/**
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index 00ee877e9..b2757ee3c 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -1,8 +1,24 @@
+#include "prevent_bss_reordering.h"
+#include "prevent_bss_reordering2.h"
+#include "PR/ultratypes.h"
+
+// Variables are put before most headers as a hacky way to bypass bss reordering
+struct CutsceneCamera;
+
+s16 sCutsceneQuakeIndex;
+struct CutsceneCamera sCutsceneCameraInfo;
+u16 sCueTypeList[10];
+u8 D_801F4DDC;
+static s16 sBssPad;
+u8 gDisablePlayerCsModeStartPos;
+s16 gDungeonBossWarpSceneId;
+
#include "global.h"
#include "z64quake.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
+#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
void CutsceneHandler_DoNothing(PlayState* play, CutsceneContext* csCtx);
void CutsceneHandler_StartManual(PlayState* play, CutsceneContext* csCtx);
@@ -12,24 +28,12 @@ void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx);
void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx);
void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx);
-// Unused
-UNK_TYPE4 D_801BB120 = 0;
+static s32 sPad = 0;
u16 sCurTextId = 0;
u16 sCurOcarinaAction = 0;
u8 gOpeningEntranceIndex = 0;
u8 sCutsceneStoredPlayerForm = 0;
-// bss
-#ifndef NON_MATCHING
-static u16 sSeqId;
-#endif
-s16 sCutsceneQuakeIndex;
-CutsceneCamera sCutsceneCameraInfo;
-u16 sCueTypeList[10];
-UNK_TYPE D_801F4DDC;
-u8 gDisablePlayerCsModeStartPos;
-s16 gDungeonBossWarpSceneId;
-
void Cutscene_InitContext(PlayState* play, CutsceneContext* csCtx) {
s32 i;
@@ -43,7 +47,7 @@ void Cutscene_InitContext(PlayState* play, CutsceneContext* csCtx) {
sCueTypeList[i] = 0;
}
- gDisablePlayerCsModeStartPos = 0;
+ gDisablePlayerCsModeStartPos = false;
Audio_SetCutsceneFlag(false);
}
@@ -199,7 +203,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
break;
case CS_MISC_EARTHQUAKE_MEDIUM:
- func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG);
if (isFirstFrame) {
sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6);
Quake_SetSpeed(sCutsceneQuakeIndex, 22000);
@@ -260,7 +264,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
if (isFirstFrame) {
play->envCtx.sandstormState = 1;
}
- func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG);
break;
case CS_MISC_SUNSSONG_START:
@@ -301,13 +305,13 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
break;
case CS_MISC_PLAYER_FORM_HUMAN:
- sCutsceneStoredPlayerForm = gSaveContext.save.playerForm;
+ sCutsceneStoredPlayerForm = GET_PLAYER_FORM;
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
break;
case CS_MISC_EARTHQUAKE_STRONG:
- func_8019F128(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST2 - SFX_FLAG);
if (isFirstFrame) {
sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6);
Quake_SetSpeed(sCutsceneQuakeIndex, 30000);
@@ -368,7 +372,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
break;
case CS_MISC_EARTHQUAKE_WEAK:
- func_8019F128(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_EV_EARTHQUAKE_LAST - SFX_FLAG);
if (isFirstFrame) {
sCutsceneQuakeIndex = Quake_Request(GET_ACTIVE_CAM(play), QUAKE_TYPE_6);
Quake_SetSpeed(sCutsceneQuakeIndex, 22000);
@@ -442,20 +446,16 @@ void CutsceneCmd_StartAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdSta
void Cutscene_SetSfxReverbIndexTo2(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo2* cmd) {
if (csCtx->curFrame == cmd->startFrame) {
- // Audio_SetSfxReverbIndexExceptOcarinaBank
- func_801A4428(2);
+ Audio_SetSfxReverbIndexExceptOcarinaBank(2);
}
}
void Cutscene_SetSfxReverbIndexTo1(PlayState* play, CutsceneContext* csCtx, CsCmdSfxReverbIndexTo1* cmd) {
if (csCtx->curFrame == cmd->startFrame) {
- // Audio_SetSfxReverbIndexExceptOcarinaBank
- func_801A4428(1);
+ Audio_SetSfxReverbIndexExceptOcarinaBank(1);
}
}
-#ifdef NON_MATCHING
-// needs in-function static bss
void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd) {
static u16 sSeqId;
u8 dayMinusOne;
@@ -506,10 +506,6 @@ void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdMo
}
}
}
-#else
-void CutsceneCmd_ModifySequence(PlayState* play, CutsceneContext* csCtx, CsCmdModifySeq* cmd);
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_demo/CutsceneCmd_ModifySequence.s")
-#endif
void CutsceneCmd_FadeOutAmbience(PlayState* play, CutsceneContext* csCtx, CsCmdFadeOutAmbience* cmd) {
if ((csCtx->curFrame == cmd->startFrame) && (csCtx->curFrame < cmd->endFrame)) {
@@ -817,8 +813,9 @@ void CutsceneCmd_GiveTatlToPlayer(PlayState* play, CutsceneContext* csCtx, CsCmd
if (player->tatlActor != NULL) {
return;
}
- player->tatlActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, player->actor.world.pos.x,
- player->actor.world.pos.y, player->actor.world.pos.z, 0, 0, 0, 0);
+ player->tatlActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, player->actor.world.pos.x, player->actor.world.pos.y,
+ player->actor.world.pos.z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_0, false, 0));
}
}
}
@@ -840,7 +837,7 @@ void CutsceneCmd_Transition(PlayState* play, CutsceneContext* csCtx, CsCmdTransi
if (cmd->type == CS_TRANS_GRAY_FILL_IN) {
play->envCtx.screenFillColor[3] = 255.0f * lerp;
if (lerp == 0.0f) {
- func_8019F128(NA_SE_EV_S_STONE_FLASH);
+ Audio_PlaySfx_2(NA_SE_EV_S_STONE_FLASH);
}
} else {
play->envCtx.screenFillColor[3] = (1.0f - lerp) * 255.0f;
@@ -1064,7 +1061,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) {
if (play->msgCtx.choiceIndex == 0) {
if (cmd->textId == 0x33BD) {
// Gorman Track: do you understand?
- func_8019F230();
+ Audio_PlaySfx_MessageCancel();
}
if (cmd->altTextId1 != 0xFFFF) {
@@ -1082,7 +1079,7 @@ void CutsceneCmd_Text(PlayState* play, CutsceneContext* csCtx, CsCmdText* cmd) {
} else {
if (cmd->textId == 0x33BD) {
// Gorman Track: do you understand?
- func_8019F208();
+ Audio_PlaySfx_MessageDecide();
}
if (cmd->altTextId2 != 0xFFFF) {
diff --git a/src/code/z_draw.c b/src/code/z_draw.c
index e6a814e2a..2a56e0ba5 100644
--- a/src/code/z_draw.c
+++ b/src/code/z_draw.c
@@ -154,7 +154,7 @@ static DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawOpa01, { gGiBremenMaskDL, gGiBremenMaskEmptyDL } },
// GID_MASK_ALL_NIGHT, OBJECT_GI_MASK06
{ GetItem_DrawOpa0Xlu1, { gGiAllNightMaskEyesDL, gGiAllNightMaskFaceDL } },
- // GID_NUTS, OBJECT_GI_NUTS
+ // GID_DEKU_NUTS, OBJECT_GI_NUTS
{ GetItem_DrawDekuNuts, { gGiNutDL } },
// GID_HEART_CONTAINER, OBJECT_GI_HEARTS
{ GetItem_DrawXlu01, { gGiHeartBorderDL, gGiHeartContainerDL } },
@@ -172,13 +172,13 @@ static DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag30BagColorDL, gGiBombBag30RingColorDL, gGiBombBagRingDL } },
// GID_BOMB_BAG_40, OBJECT_GI_BOMBPOUCH
{ GetItem_DrawUpgrades, { gGiBombBagDL, gGiBombBag40BagColorDL, gGiBombBag40RingColorDL, gGiBombBagRingDL } },
- // GID_STICK, OBJECT_GI_STICK
+ // GID_DEKU_STICK, OBJECT_GI_STICK
{ GetItem_DrawOpa0, { gGiStickDL } },
// GID_DUNGEON_MAP, OBJECT_GI_MAP
{ GetItem_DrawOpa0, { gGiDungeonMapDL } },
- // GID_MAGIC_SMALL, OBJECT_GI_MAGICPOT
+ // GID_MAGIC_JAR_SMALL, OBJECT_GI_MAGICPOT
{ GetItem_DrawOpa0, { gGiMagicJarSmallDL } },
- // GID_MAGIC_LARGE, OBJECT_GI_MAGICPOT
+ // GID_MAGIC_JAR_BIG, OBJECT_GI_MAGICPOT
{ GetItem_DrawOpa0, { gGiMagicJarLargeDL } },
// GID_BOMB, OBJECT_GI_BOMB_1
{ GetItem_DrawOpa0, { gGiBombDL } },
@@ -313,7 +313,7 @@ static DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawOpa0Xlu1, { gGiRedPotionBottleEmptyDL, gGiRedPotionBottleDL } },
// GID_ZORA_EGG, OBJECT_GI_BOTTLE_15
{ GetItem_DrawOpa0Xlu1, { gGiZoraEggBottleContentsDL, gGiZoraEggBottleGlassAndCorkDL } },
- // GID_MOON_TEAR, OBJECT_GI_RESERVE00
+ // GID_MOONS_TEAR, OBJECT_GI_RESERVE00
{ GetItem_DrawMoonsTear, { gGiMoonsTearItemDL, gGiMoonsTearGlowDL } },
// GID_DEED_LAND, OBJECT_GI_RESERVE01
{ GetItem_DrawOpa01, { gGiTitleDeedEmptyDL, gGiTitleDeedLandColorDL } },
@@ -344,7 +344,7 @@ static DrawItemTableEntry sDrawItemTable[] = {
// GID_SWORD_GILDED, OBJECT_GI_SWORD_3
{ GetItem_DrawOpa01, { gGiGildedSwordDL, gGiGildedSwordEmptyDL } },
// GID_SWORD_GREAT_FAIRY, OBJECT_GI_SWORD_4
- { GetItem_DrawOpa0Xlu1, { gGiGreatFairySwordBladeDL, gGiGreatFairySwordHiltEmblemDL } },
+ { GetItem_DrawOpa0Xlu1, { gGiGreatFairysSwordBladeDL, gGiGreatFairysSwordHiltEmblemDL } },
// GID_MASK_GARO, OBJECT_GI_MASK09
{ GetItem_DrawOpa0Xlu1, { gGiGarosMaskCloakDL, gGiGarosMaskFaceDL } },
// GID_MASK_GREAT_FAIRY, OBJECT_GI_MASK14
@@ -367,7 +367,7 @@ static DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawOpa01, { gGiGiantMaskEmptyDL, gGiGiantMaskDL } },
// GID_CHATEAU, OBJECT_GI_BOTTLE_21
{ GetItem_DrawOpa0Xlu1, { gGiChateauRomaniBottleEmptyDL, gGiChateauRomaniBottleDL } },
- // GID_PICTO_BOX, OBJECT_GI_CAMERA
+ // GID_PICTOGRAPH_BOX, OBJECT_GI_CAMERA
{ GetItem_DrawOpa0Xlu1, { gGiPictoBoxFrameDL, gGiPictoBoxBodyAndLensDL } },
// GID_MASK_FIERCE_DEITY, OBJECT_GI_MASK03
{ GetItem_DrawOpa01, { gGiFierceDeityMaskFaceDL, gGiFierceDeityMaskHairAndHatDL } },
diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c
index a9f8a2562..5e8781a84 100644
--- a/src/code/z_eff_tire_mark.c
+++ b/src/code/z_eff_tire_mark.c
@@ -80,7 +80,8 @@ void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f
spAC->flags |= 1;
}
- if (spA8) {} // Necessary to match
+ //! FAKE:
+ if (spA8) {}
spA8 = &this->elements[this->numElements];
spA8->flags = 0;
diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c
index 186608729..870132a07 100644
--- a/src/code/z_effect_soft_sprite.c
+++ b/src/code/z_effect_soft_sprite.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "z64load.h"
+#include "loadfragment.h"
EffectSsInfo sEffectSsInfo = { NULL, 0, 0 };
@@ -164,7 +164,7 @@ void EffectSS_Copy(PlayState* play, EffectSs* effectsSs) {
void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) {
s32 index;
u32 overlaySize;
- EffectSsOverlay* entry = &gParticleOverlayTable[type];
+ EffectSsOverlay* overlayEntry = &gParticleOverlayTable[type];
EffectSsInit* initInfo;
if (EffectSS_FindFreeSpace(priority, &index) != 0) {
@@ -173,24 +173,27 @@ void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initData) {
}
sEffectSsInfo.searchIndex = index + 1;
- overlaySize = VRAM_PTR_SIZE(entry);
+ overlaySize = (uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart;
- if (entry->vramStart == NULL) {
- initInfo = entry->initInfo;
+ if (overlayEntry->vramStart == NULL) {
+ initInfo = overlayEntry->initInfo;
} else {
- if (entry->loadedRamAddr == NULL) {
- entry->loadedRamAddr = ZeldaArena_MallocR(overlaySize);
+ if (overlayEntry->loadedRamAddr == NULL) {
+ overlayEntry->loadedRamAddr = ZeldaArena_MallocR(overlaySize);
- if (entry->loadedRamAddr == NULL) {
+ if (overlayEntry->loadedRamAddr == NULL) {
return;
}
- Load2_LoadOverlay(entry->vromStart, entry->vromEnd, entry->vramStart, entry->vramEnd, entry->loadedRamAddr);
+ Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd,
+ overlayEntry->loadedRamAddr);
}
- initInfo = (uintptr_t)((entry->initInfo != NULL)
- ? (void*)((uintptr_t)entry->initInfo - (intptr_t)OVERLAY_RELOCATION_OFFSET(entry))
- : NULL);
+ initInfo = (void*)(uintptr_t)((overlayEntry->initInfo != NULL)
+ ? (void*)((uintptr_t)overlayEntry->initInfo -
+ (intptr_t)((uintptr_t)overlayEntry->vramStart -
+ (uintptr_t)overlayEntry->loadedRamAddr))
+ : NULL);
}
if (initInfo->init != NULL) {
diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index 17852c4c1..63b6861a7 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -925,14 +925,14 @@ void EffectSsEnFire_SpawnVec3s(PlayState* play, Actor* actor, Vec3s* pos, s16 sc
// EffectSsExtra Spawn Functions
-void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx) {
+void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIndex) {
EffectSsExtraInitParams initParams;
Math_Vec3f_Copy(&initParams.pos, pos);
Math_Vec3f_Copy(&initParams.velocity, velocity);
Math_Vec3f_Copy(&initParams.accel, accel);
initParams.scale = scale;
- initParams.scoreIdx = scoreIdx;
+ initParams.scoreIndex = scoreIndex;
EffectSs_Spawn(play, EFFECT_SS_EXTRA, 100, &initParams);
}
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index 1b005443d..a7e97c3bd 100644
--- a/src/code/z_elf_message.c
+++ b/src/code/z_elf_message.c
@@ -13,7 +13,7 @@
* Gets the relevant text ID for Tatl hints in first cycle.
*/
u16 QuestHint_GetTatlTextId(PlayState* play) {
- if (INV_CONTENT(ITEM_OCARINA) == ITEM_OCARINA) {
+ if (INV_CONTENT(ITEM_OCARINA_OF_TIME) == ITEM_OCARINA_OF_TIME) {
return 0;
}
@@ -26,7 +26,7 @@ u16 QuestHint_GetTatlTextId(PlayState* play) {
}
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_10)) {
- if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_40)) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED)) {
return 0;
}
@@ -57,7 +57,7 @@ u16 QuestHint_GetTatlTextId(PlayState* play) {
return 0;
}
- if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_MOON_TEAR) {
+ if (INV_CONTENT(ITEM_MOONS_TEAR) == ITEM_MOONS_TEAR) {
if (CHECK_WEEKEVENTREG(WEEKEVENTREG_86_04)) {
return 0x242;
}
diff --git a/src/code/z_en_a_keep.c b/src/code/z_en_a_keep.c
index a9bd49f6f..3f9f6b90e 100644
--- a/src/code/z_en_a_keep.c
+++ b/src/code/z_en_a_keep.c
@@ -77,7 +77,7 @@ void EnAObj_Idle(EnAObj* this, PlayState* play) {
yawDiff = ABS_ALT((s16)(this->actor.yawTowardsPlayer - this->actor.shape.rot.y));
if ((yawDiff < 0x2800) || ((this->actor.params == AOBJ_SIGNPOST_ARROW) && (yawDiff > 0x5800))) {
- func_800B863C(&this->actor, play);
+ Actor_OfferTalkNearColChkInfoCylinder(&this->actor, play);
}
}
}
diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c
index b5992dec4..02666fc4c 100644
--- a/src/code/z_en_hy_code.c
+++ b/src/code/z_en_hy_code.c
@@ -11,51 +11,100 @@
#include "objects/object_boj/object_boj.h"
#include "objects/object_os_anime/object_os_anime.h"
-static AnimationInfoS sAnimationInfo[] = {
- { &gMamamuYanUnusedIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
- { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
- { &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &gBbaIdleHoldingBagAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
- { &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 },
- { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
- { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
- { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
- { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
- { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 },
+static AnimationInfoS sAnimationInfo[ENHY_ANIM_MAX] = {
+ { &gMamamuYanUnusedIdleAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_AOB_0
+ { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_1
+ { &object_boj_Anim_001494, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_2
+ { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_3
+ { &object_boj_Anim_001908, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_4
+ { &object_boj_Anim_0008C0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_5
+ { &gBbaIdleHoldingBagAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BBA_6
+ { &object_bji_Anim_000FDC, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BJI_7
+ { &object_bji_Anim_000AB0, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BJI_8
+ { &object_bji_Anim_00066C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BJI_9
+ { &object_boj_Anim_00071C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_10
+ { &object_os_anime_Anim_001EE0, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_OS_ANIME_11
+ { &object_boj_Anim_00DED8, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, // ENHY_ANIM_BOJ_12
+ { &object_boj_Anim_00F920, 1.5f, 0, -1, ANIMMODE_ONCE, 0 }, // ENHY_ANIM_BOJ_13
+ { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_14
+ { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_15
+ { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, 0 }, // ENHY_ANIM_BOJ_16
+ { &object_boj_Anim_00FC1C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_17
+ { &object_boj_Anim_00FEE4, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_18
+ { &object_boj_Anim_010330, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_19
+ { &object_boj_Anim_005D9C, 1.0f, 0, -1, ANIMMODE_LOOP, -8 }, // ENHY_ANIM_BOJ_20
};
-s8 gEnHyBodyParts[] = { -1, 1, 12, 13, 14, 9, 10, 11, 0, 6, 7, 8, 3, 4, 5, 2 };
+s8 gEnHyLimbToBodyParts[ENHY_LIMB_MAX] = {
+ BODYPART_NONE, // ENHY_LIMB_NONE
+ ENHY_BODYPART_1, // ENHY_LIMB_PELVIS
+ ENHY_BODYPART_12, // ENHY_LIMB_LEFT_THIGH
+ ENHY_BODYPART_13, // ENHY_LIMB_LEFT_SHIN
+ ENHY_BODYPART_14, // ENHY_LIMB_LEFT_FOOT
+ ENHY_BODYPART_9, // ENHY_LIMB_RIGHT_THIGH
+ ENHY_BODYPART_10, // ENHY_LIMB_RIGHT_SHIN
+ ENHY_BODYPART_11, // ENHY_LIMB_RIGHT_FOOT
+ ENHY_BODYPART_0, // ENHY_LIMB_TORSO
+ ENHY_BODYPART_6, // ENHY_LIMB_LEFT_UPPER_ARM
+ ENHY_BODYPART_7, // ENHY_LIMB_LEFT_FOREARM
+ ENHY_BODYPART_8, // ENHY_LIMB_LEFT_HAND
+ ENHY_BODYPART_3, // ENHY_LIMB_RIGHT_UPPER_ARM
+ ENHY_BODYPART_4, // ENHY_LIMB_RIGHT_FOREARM
+ ENHY_BODYPART_5, // ENHY_LIMB_RIGHT_HAND
+ ENHY_BODYPART_2, // ENHY_LIMB_HEAD
+};
-s8 gEnHyParentBodyParts[] = { 0, 0, 0, 0, 3, 4, 0, 6, 7, 0, 9, 10, 0, 12, 13 };
+s8 gEnHyParentShadowBodyParts[ENHY_BODYPART_MAX] = {
+ ENHY_BODYPART_0, // ENHY_BODYPART_0
+ ENHY_BODYPART_0, // ENHY_BODYPART_1
+ ENHY_BODYPART_0, // ENHY_BODYPART_2
+ ENHY_BODYPART_0, // ENHY_BODYPART_3
+ ENHY_BODYPART_3, // ENHY_BODYPART_4
+ ENHY_BODYPART_4, // ENHY_BODYPART_5
+ ENHY_BODYPART_0, // ENHY_BODYPART_6
+ ENHY_BODYPART_6, // ENHY_BODYPART_7
+ ENHY_BODYPART_7, // ENHY_BODYPART_8
+ ENHY_BODYPART_0, // ENHY_BODYPART_9
+ ENHY_BODYPART_9, // ENHY_BODYPART_10
+ ENHY_BODYPART_10, // ENHY_BODYPART_11
+ ENHY_BODYPART_0, // ENHY_BODYPART_12
+ ENHY_BODYPART_12, // ENHY_BODYPART_13
+ ENHY_BODYPART_13, // ENHY_BODYPART_14
+};
-u8 gEnHyShadowSizes[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+u8 gEnHyShadowSizes[ENHY_BODYPART_MAX] = {
+ 0, // ENHY_BODYPART_0
+ 0, // ENHY_BODYPART_1
+ 0, // ENHY_BODYPART_2
+ 0, // ENHY_BODYPART_3
+ 0, // ENHY_BODYPART_4
+ 0, // ENHY_BODYPART_5
+ 0, // ENHY_BODYPART_6
+ 0, // ENHY_BODYPART_7
+ 0, // ENHY_BODYPART_8
+ 0, // ENHY_BODYPART_9
+ 0, // ENHY_BODYPART_10
+ 0, // ENHY_BODYPART_11
+ 0, // ENHY_BODYPART_12
+ 0, // ENHY_BODYPART_13
+ 0, // ENHY_BODYPART_14
+};
s32 EnHy_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) {
- s16 frameCount;
- s32 isChanged = false;
-
- if (animIndex >= ENHY_ANIM_AOB_0 && animIndex < ENHY_ANIM_MAX) {
- isChanged = true;
- frameCount = sAnimationInfo[animIndex].frameCount;
- if (frameCount < 0) {
- frameCount = Animation_GetLastFrame(&sAnimationInfo[animIndex].animation->common);
+ s16 endFrame;
+ s32 didAnimChange = false;
+
+ if ((animIndex > ENHY_ANIM_NONE) && (animIndex < ENHY_ANIM_MAX)) {
+ didAnimChange = true;
+ endFrame = sAnimationInfo[animIndex].frameCount;
+ if (endFrame < 0) {
+ endFrame = Animation_GetLastFrame(&sAnimationInfo[animIndex].animation->common);
}
Animation_Change(skelAnime, sAnimationInfo[animIndex].animation, sAnimationInfo[animIndex].playSpeed,
- sAnimationInfo[animIndex].startFrame, frameCount, sAnimationInfo[animIndex].mode,
+ sAnimationInfo[animIndex].startFrame, endFrame, sAnimationInfo[animIndex].mode,
sAnimationInfo[animIndex].morphFrames);
}
- return isChanged;
+ return didAnimChange;
}
EnDoor* EnHy_FindNearestDoor(Actor* actor, PlayState* play) {
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 886c3c942..55ab1a708 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_gi_hearts/object_gi_hearts.h"
+#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
#include "overlays/actors/ovl_En_Elforg/z_en_elforg.h"
#define FLAGS 0x00000000
@@ -59,6 +60,8 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 2000, ICHAIN_STOP),
};
+static s32 sBssPad;
+
void EnItem00_SetObject(EnItem00* this, PlayState* play, f32* shadowOffset, f32* shadowScale) {
Actor_SetObjectDependency(play, &this->actor);
Actor_SetScale(&this->actor, 0.5f);
@@ -74,43 +77,43 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
f32 shadowOffset = 980.0f;
f32 shadowScale = 6.0f;
s32 getItemId = GI_NONE;
- s32 sp30 = ENITEM00_GET_8000(&this->actor) ? 1 : 0;
+ s32 sp30 = ENITEM00_GET_8000(thisx) ? 1 : 0;
- this->collectibleFlag = ENITEM00_GET_7F00(&this->actor);
+ this->collectibleFlag = ENITEM00_GET_7F00(thisx);
- thisx->params &= 0xFF; // Has to be thisx to match
+ thisx->params &= 0xFF;
if (Flags_GetCollectible(play, this->collectibleFlag)) {
- if (this->actor.params == ITEM00_HEART_PIECE) {
+ if (thisx->params == ITEM00_HEART_PIECE) {
sp30 = 0;
this->collectibleFlag = 0;
- this->actor.params = ITEM00_RECOVERY_HEART;
+ thisx->params = ITEM00_RECOVERY_HEART;
} else {
- Actor_Kill(&this->actor);
+ Actor_Kill(thisx);
return;
}
}
- if (this->actor.params == ITEM00_3_HEARTS) {
- this->actor.params = ITEM00_RECOVERY_HEART;
+ if (thisx->params == ITEM00_3_HEARTS) {
+ thisx->params = ITEM00_RECOVERY_HEART;
}
- Actor_ProcessInitChain(&this->actor, sInitChain);
- Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
+ Actor_ProcessInitChain(thisx, sInitChain);
+ Collider_InitAndSetCylinder(play, &this->collider, thisx, &sCylinderInit);
this->unk150 = 1;
- switch (this->actor.params) {
+ switch (thisx->params) {
case ITEM00_RUPEE_GREEN:
case ITEM00_RUPEE_BLUE:
case ITEM00_RUPEE_RED:
- Actor_SetScale(&this->actor, 0.015f);
+ Actor_SetScale(thisx, 0.015f);
this->unk154 = 0.015f;
shadowOffset = 750.0f;
break;
case ITEM00_SMALL_KEY:
this->unk150 = 0;
- Actor_SetScale(&this->actor, 0.03f);
+ Actor_SetScale(thisx, 0.03f);
this->unk154 = 0.03f;
shadowOffset = 350.0f;
break;
@@ -118,18 +121,18 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
case ITEM00_HEART_PIECE:
case ITEM00_HEART_CONTAINER:
this->unk150 = 0;
- Actor_SetScale(&this->actor, 0.02f);
+ Actor_SetScale(thisx, 0.02f);
this->unk154 = 0.02f;
shadowOffset = 650.0f;
- if (this->actor.params == ITEM00_HEART_CONTAINER) {
+ if (thisx->params == ITEM00_HEART_CONTAINER) {
sp30 = -1;
}
break;
case ITEM00_RECOVERY_HEART:
- this->actor.home.rot.z = Rand_CenteredFloat(0xFFFF);
+ thisx->home.rot.z = Rand_CenteredFloat(0xFFFF);
shadowOffset = 430.0f;
- Actor_SetScale(&this->actor, 0.02f);
+ Actor_SetScale(thisx, 0.02f);
this->unk154 = 0.02f;
break;
@@ -137,37 +140,37 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
case ITEM00_ARROWS_30:
case ITEM00_ARROWS_40:
case ITEM00_ARROWS_50:
- Actor_SetScale(&this->actor, 0.035f);
+ Actor_SetScale(thisx, 0.035f);
this->unk154 = 0.035f;
shadowOffset = 250.0f;
break;
case ITEM00_BOMBS_A:
case ITEM00_BOMBS_B:
- case ITEM00_NUTS_1:
- case ITEM00_STICK:
- case ITEM00_MAGIC_SMALL:
- case ITEM00_NUTS_10:
+ case ITEM00_DEKU_NUTS_1:
+ case ITEM00_DEKU_STICK:
+ case ITEM00_MAGIC_JAR_SMALL:
+ case ITEM00_DEKU_NUTS_10:
case ITEM00_BOMBS_0:
- Actor_SetScale(&this->actor, 0.03f);
+ Actor_SetScale(thisx, 0.03f);
this->unk154 = 0.03f;
shadowOffset = 320.0f;
break;
- case ITEM00_MAGIC_LARGE:
- Actor_SetScale(&this->actor, 4.5f * 0.01f);
+ case ITEM00_MAGIC_JAR_BIG:
+ Actor_SetScale(thisx, 4.5f * 0.01f);
this->unk154 = 4.5f * 0.01f;
shadowOffset = 320.0f;
break;
case ITEM00_RUPEE_HUGE:
- Actor_SetScale(&this->actor, 4.5f * 0.01f);
+ Actor_SetScale(thisx, 4.5f * 0.01f);
this->unk154 = 4.5f * 0.01f;
shadowOffset = 750.0f;
break;
case ITEM00_RUPEE_PURPLE:
- Actor_SetScale(&this->actor, 0.03f);
+ Actor_SetScale(thisx, 0.03f);
this->unk154 = 0.03f;
shadowOffset = 750.0f;
break;
@@ -175,22 +178,22 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
case ITEM00_FLEXIBLE:
case ITEM00_BIG_FAIRY:
shadowOffset = 500.0f;
- Actor_SetScale(&this->actor, 0.01f);
+ Actor_SetScale(thisx, 0.01f);
this->unk154 = 0.01f;
break;
case ITEM00_SHIELD_HERO:
- this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2);
+ thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_SHIELD_2);
EnItem00_SetObject(this, play, &shadowOffset, &shadowScale);
break;
case ITEM00_MAP:
- this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP);
+ thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_MAP);
EnItem00_SetObject(this, play, &shadowOffset, &shadowScale);
break;
case ITEM00_COMPASS:
- this->actor.objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS);
+ thisx->objBankIndex = Object_GetIndex(&play->objectCtx, OBJECT_GI_COMPASS);
EnItem00_SetObject(this, play, &shadowOffset, &shadowScale);
break;
@@ -199,9 +202,9 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
}
this->unk14E = 0;
- ActorShape_Init(&this->actor.shape, shadowOffset, ActorShadow_DrawCircle, shadowScale);
- this->actor.shape.shadowAlpha = 180;
- this->actor.focus.pos = this->actor.world.pos;
+ ActorShape_Init(&thisx->shape, shadowOffset, ActorShadow_DrawCircle, shadowScale);
+ thisx->shape.shadowAlpha = 180;
+ thisx->focus.pos = thisx->world.pos;
this->getItemId = GI_NONE;
if (sp30 < 0) {
@@ -219,11 +222,11 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
this->unk152 = 15;
this->unk14C = 35;
- this->actor.speed = 0.0f;
- this->actor.velocity.y = 0.0f;
- this->actor.gravity = 0.0f;
+ thisx->speed = 0.0f;
+ thisx->velocity.y = 0.0f;
+ thisx->gravity = 0.0f;
- switch (this->actor.params) {
+ switch (thisx->params) {
case ITEM00_RUPEE_GREEN:
Item_Give(play, ITEM_RUPEE_GREEN);
break;
@@ -274,32 +277,32 @@ void EnItem00_Init(Actor* thisx, PlayState* play) {
Item_Give(play, ITEM_ARROWS_50);
break;
- case ITEM00_MAGIC_LARGE:
- Item_Give(play, ITEM_MAGIC_LARGE);
+ case ITEM00_MAGIC_JAR_BIG:
+ Item_Give(play, ITEM_MAGIC_JAR_BIG);
break;
- case ITEM00_MAGIC_SMALL:
- Item_Give(play, ITEM_MAGIC_SMALL);
+ case ITEM00_MAGIC_JAR_SMALL:
+ Item_Give(play, ITEM_MAGIC_JAR_SMALL);
break;
case ITEM00_SMALL_KEY:
Item_Give(play, ITEM_KEY_SMALL);
break;
- case ITEM00_NUTS_1:
- getItemId = GI_NUTS_1;
+ case ITEM00_DEKU_NUTS_1:
+ getItemId = GI_DEKU_NUTS_1;
break;
- case ITEM00_NUTS_10:
- getItemId = GI_NUTS_10;
+ case ITEM00_DEKU_NUTS_10:
+ getItemId = GI_DEKU_NUTS_10;
break;
default:
break;
}
- if ((getItemId != GI_NONE) && !Actor_HasParent(&this->actor, play)) {
- Actor_OfferGetItem(&this->actor, play, getItemId, 50.0f, 20.0f);
+ if ((getItemId != GI_NONE) && !Actor_HasParent(thisx, play)) {
+ Actor_OfferGetItem(thisx, play, getItemId, 50.0f, 20.0f);
}
this->actionFunc = func_800A6A40;
@@ -326,7 +329,7 @@ void func_800A640C(EnItem00* this, PlayState* play) {
((this->actor.params == ITEM00_RECOVERY_HEART) && (this->unk152 < 0)) ||
(this->actor.params == ITEM00_HEART_PIECE) || (this->actor.params == ITEM00_HEART_CONTAINER)) {
this->actor.shape.rot.y = this->actor.shape.rot.y + 960;
- } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_NUTS_10) &&
+ } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_DEKU_NUTS_10) &&
(this->actor.params < ITEM00_BOMBS_0)) {
if (this->unk152 == -1) {
if (!Math_SmoothStepToS(&this->actor.shape.rot.x, this->actor.world.rot.x - 0x4000, 2, 3000, 1500)) {
@@ -373,7 +376,7 @@ static Vec3f sEffectVelocity = { 0.0f, 0.1f, 0.0f };
static Vec3f sEffectAccel = { 0.0f, 0.01f, 0.0f };
void func_800A6650(EnItem00* this, PlayState* play) {
- u32 pad;
+ s32 pad;
Vec3f pos;
if (this->actor.params <= ITEM00_RUPEE_RED) {
@@ -421,7 +424,7 @@ void func_800A6780(EnItem00* this, PlayState* play) {
if (this->actor.params <= ITEM00_RUPEE_RED) {
this->actor.shape.rot.y += 0x3C0;
- } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_NUTS_10) &&
+ } else if ((this->actor.params >= ITEM00_SHIELD_HERO) && (this->actor.params != ITEM00_DEKU_NUTS_10) &&
(this->actor.params != ITEM00_BOMBS_0)) {
this->actor.world.rot.x -= 0x2BC;
this->actor.shape.rot.y += 0x190;
@@ -568,16 +571,16 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
Item_Give(play, ITEM_RUPEE_HUGE);
break;
- case ITEM00_STICK:
- getItemId = GI_STICKS_1;
+ case ITEM00_DEKU_STICK:
+ getItemId = GI_DEKU_STICKS_1;
break;
- case ITEM00_NUTS_1:
- getItemId = GI_NUTS_1;
+ case ITEM00_DEKU_NUTS_1:
+ getItemId = GI_DEKU_NUTS_1;
break;
- case ITEM00_NUTS_10:
- getItemId = GI_NUTS_10;
+ case ITEM00_DEKU_NUTS_10:
+ getItemId = GI_DEKU_NUTS_10;
break;
case ITEM00_RECOVERY_HEART:
@@ -622,12 +625,12 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
getItemId = GI_HEART_CONTAINER;
break;
- case ITEM00_MAGIC_LARGE:
- Item_Give(play, ITEM_MAGIC_LARGE);
+ case ITEM00_MAGIC_JAR_BIG:
+ Item_Give(play, ITEM_MAGIC_JAR_BIG);
break;
- case ITEM00_MAGIC_SMALL:
- Item_Give(play, ITEM_MAGIC_SMALL);
+ case ITEM00_MAGIC_JAR_SMALL:
+ Item_Give(play, ITEM_MAGIC_JAR_SMALL);
break;
case ITEM00_SHIELD_HERO:
@@ -670,7 +673,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
}
if ((this->actor.params <= ITEM00_RUPEE_RED) || (this->actor.params == ITEM00_RUPEE_HUGE)) {
- play_sound(NA_SE_SY_GET_RUPY);
+ Audio_PlaySfx(NA_SE_SY_GET_RUPY);
} else if (getItemId != GI_NONE) {
if (Actor_HasParent(&this->actor, play)) {
Flags_SetCollectible(play, this->collectibleFlag);
@@ -678,7 +681,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
}
return;
} else {
- play_sound(NA_SE_SY_GET_ITEM);
+ Audio_PlaySfx(NA_SE_SY_GET_ITEM);
}
Flags_SetCollectible(play, this->collectibleFlag);
@@ -741,12 +744,12 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) {
case ITEM00_ARROWS_40:
case ITEM00_ARROWS_50:
case ITEM00_BOMBS_B:
- case ITEM00_NUTS_1:
- case ITEM00_STICK:
- case ITEM00_MAGIC_LARGE:
- case ITEM00_MAGIC_SMALL:
+ case ITEM00_DEKU_NUTS_1:
+ case ITEM00_DEKU_STICK:
+ case ITEM00_MAGIC_JAR_BIG:
+ case ITEM00_MAGIC_JAR_SMALL:
case ITEM00_SMALL_KEY:
- case ITEM00_NUTS_10:
+ case ITEM00_DEKU_NUTS_10:
case ITEM00_BOMBS_0:
EnItem00_DrawSprite(this, play);
break;
@@ -823,7 +826,7 @@ void EnItem00_DrawSprite(EnItem00* this, PlayState* play) {
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
- if (this->actor.params == ITEM00_NUTS_10) {
+ if (this->actor.params == ITEM00_DEKU_NUTS_10) {
texIndex = 6;
} else if (this->actor.params == ITEM00_BOMBS_0) {
texIndex = 1;
@@ -884,7 +887,7 @@ s16 func_800A7650(s16 dropId) {
(((dropId == ITEM00_ARROWS_10) || (dropId == ITEM00_ARROWS_30) || (dropId == ITEM00_ARROWS_40) ||
(dropId == ITEM00_ARROWS_50)) &&
(INV_CONTENT(ITEM_BOW) == ITEM_NONE)) ||
- (((dropId == ITEM00_MAGIC_LARGE) || (dropId == ITEM00_MAGIC_SMALL)) &&
+ (((dropId == ITEM00_MAGIC_JAR_BIG) || (dropId == ITEM00_MAGIC_JAR_SMALL)) &&
(gSaveContext.save.saveInfo.playerData.magicLevel == 0))) {
return ITEM00_NO_DROP;
}
@@ -927,7 +930,7 @@ Actor* Item_DropCollectible(PlayState* play, Vec3f* spawnPos, u32 params) {
newParamFF = params & 0xFF;
if (newParamFF == ITEM00_FLEXIBLE) {
spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
- spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102);
+ spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8));
if (!Flags_GetCollectible(play, (param7F00 >> 8) & 0x7F)) {
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
}
@@ -988,7 +991,7 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
if ((((params & 0xFF) == ITEM00_FLEXIBLE) || ((params & 0xFF) == ITEM00_BIG_FAIRY)) && (param10000 == 0)) {
if ((params & 0xFF) == ITEM00_FLEXIBLE) {
spawnedActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f,
- spawnPos->z, 0, 0, 0, ((((param7F00 >> 8) & 0x7F) << 9) & 0xFE00) | 0x102);
+ spawnPos->z, 0, 0, 0, FAIRY_PARAMS(FAIRY_TYPE_2, true, param7F00 >> 8));
} else {
spawnedActor =
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELFORG, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0,
@@ -1022,61 +1025,278 @@ Actor* Item_DropCollectible2(PlayState* play, Vec3f* spawnPos, s32 params) {
}
u8 sDropTable[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = {
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A,
- ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART,
- ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_NO_DROP,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP, ITEM00_MASK, ITEM00_MASK,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_MAGIC_SMALL, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_MASK,
- ITEM00_MASK, ITEM00_MASK, ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_GREEN,
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_RUPEE_BLUE,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE,
- ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED,
- ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED, ITEM00_RUPEE_RED,
- ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10,
- ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10,
- ITEM00_ARROWS_30, ITEM00_ARROWS_30, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE,
- ITEM00_MAGIC_LARGE, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_BOMBS_A,
- ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_BOMBS_A,
- ITEM00_BOMBS_A, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE,
- ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_MAGIC_LARGE, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NUTS_1, ITEM00_NUTS_1,
- ITEM00_NO_DROP, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_STICK,
- ITEM00_STICK, ITEM00_NO_DROP, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_FLEXIBLE,
- ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_BLUE, ITEM00_RUPEE_RED, ITEM00_NO_DROP,
- ITEM00_ARROWS_10, ITEM00_ARROWS_10, ITEM00_ARROWS_30, ITEM00_BOMBS_A, ITEM00_NO_DROP,
- ITEM00_STICK, ITEM00_MAGIC_SMALL, ITEM00_MAGIC_LARGE, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART,
- ITEM00_FLEXIBLE, ITEM00_RUPEE_GREEN, ITEM00_RECOVERY_HEART, ITEM00_RECOVERY_HEART, ITEM00_MAGIC_SMALL,
- ITEM00_MASK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_BOMBS_A,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_NO_DROP,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_BOMBS_A,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_NO_DROP,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_NO_DROP,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_BOMBS_A,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_MASK,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_RUPEE_RED,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_30,
+ ITEM00_ARROWS_30,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_BOMBS_A,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_DEKU_NUTS_1,
+ ITEM00_DEKU_NUTS_1,
+ ITEM00_NO_DROP,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_DEKU_STICK,
+ ITEM00_DEKU_STICK,
+ ITEM00_NO_DROP,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_BLUE,
+ ITEM00_RUPEE_RED,
+ ITEM00_NO_DROP,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_10,
+ ITEM00_ARROWS_30,
+ ITEM00_BOMBS_A,
+ ITEM00_NO_DROP,
+ ITEM00_DEKU_STICK,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_BIG,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_FLEXIBLE,
+ ITEM00_RUPEE_GREEN,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_RECOVERY_HEART,
+ ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MASK,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
+ ITEM00_NO_DROP,
};
u8 sDropTableAmounts[DROP_TABLE_SIZE * DROP_TABLE_NUMBER] = {
@@ -1112,16 +1332,19 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
dropQuantity = sDropTableAmounts[params + dropTableIndex];
if (dropId == ITEM00_MASK) {
- switch (gSaveContext.save.playerForm) {
+ switch (GET_PLAYER_FORM) {
case PLAYER_FORM_HUMAN:
dropId = ITEM00_ARROWS_10;
break;
+
case PLAYER_FORM_ZORA:
dropId = ITEM00_RECOVERY_HEART;
break;
+
case PLAYER_FORM_GORON:
- dropId = ITEM00_MAGIC_SMALL;
+ dropId = ITEM00_MAGIC_JAR_SMALL;
break;
+
default:
dropId = ITEM00_RUPEE_GREEN;
break;
@@ -1151,7 +1374,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
if (dropId == ITEM00_FLEXIBLE) {
if (gSaveContext.save.saveInfo.playerData.health <= 0x10) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
- 2);
+ FAIRY_PARAMS(FAIRY_TYPE_2, false, 0));
SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY);
return;
}
@@ -1167,13 +1390,13 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
} else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) &&
(gSaveContext.save.saveInfo.playerData.magic == 0)) {
params = 0xD0;
- dropId = ITEM00_MAGIC_LARGE;
+ dropId = ITEM00_MAGIC_JAR_BIG;
dropQuantity = 1;
} else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) &&
((gSaveContext.save.saveInfo.playerData.magicLevel >> 1) >=
gSaveContext.save.saveInfo.playerData.magic)) {
params = 0xD0;
- dropId = ITEM00_MAGIC_LARGE;
+ dropId = ITEM00_MAGIC_JAR_BIG;
dropQuantity = 1;
} else if (AMMO(ITEM_BOW) < 6) {
params = 0xA0;
@@ -1228,10 +1451,10 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
s32 D_801AE194[32] = {
ITEM00_NO_DROP, ITEM00_RUPEE_GREEN, ITEM00_RUPEE_BLUE, ITEM00_NO_DROP, ITEM00_RUPEE_RED,
ITEM00_RUPEE_PURPLE, ITEM00_NO_DROP, ITEM00_RUPEE_HUGE, ITEM00_COMPASS, ITEM00_MUSHROOM_CLOUD,
- ITEM00_RECOVERY_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_SMALL,
- ITEM00_MAGIC_LARGE, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_NUTS_10,
+ ITEM00_RECOVERY_HEART, ITEM00_3_HEARTS, ITEM00_HEART_PIECE, ITEM00_HEART_CONTAINER, ITEM00_MAGIC_JAR_SMALL,
+ ITEM00_MAGIC_JAR_BIG, ITEM00_FLEXIBLE, ITEM00_BIG_FAIRY, ITEM00_NO_DROP, ITEM00_DEKU_NUTS_10,
ITEM00_NO_DROP, ITEM00_BOMBS_A, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
- ITEM00_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
+ ITEM00_DEKU_STICK, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP, ITEM00_NO_DROP,
ITEM00_ARROWS_10, ITEM00_ARROWS_30,
};
diff --git a/src/code/z_eventmgr.c b/src/code/z_eventmgr.c
index 121957396..88ec794fc 100644
--- a/src/code/z_eventmgr.c
+++ b/src/code/z_eventmgr.c
@@ -55,6 +55,13 @@ CutsceneManager sCutsceneMgr = {
CS_ID_NONE, 0, CS_ID_NONE, SUB_CAM_ID_DONE, NULL, CS_START_0, NULL, CAM_ID_MAIN, false,
};
+ActorCutscene* sSceneCutsceneList;
+s16 sSceneCutsceneCount;
+u8 sWaitingCutsceneList[16];
+static s32 sBssPad;
+u8 sNextCutsceneList[16];
+static s32 sBssPad2;
+
s16 CutsceneManager_SetHudVisibility(s16 csHudVisibility) {
u16 hudVisibility;
@@ -204,7 +211,7 @@ void CutsceneManager_End(void) {
sCutsceneMgr.targetActor->flags &= ~ACTOR_FLAG_100000;
// fallthrough
case CS_START_1:
- func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_END);
+ func_800B7298(sCutsceneMgr.play, NULL, PLAYER_CSMODE_END);
sCutsceneMgr.startMethod = CS_START_0;
break;
@@ -216,11 +223,11 @@ void CutsceneManager_End(void) {
switch (csEntry->endSfx) {
case CS_END_SFX_TRE_BOX_APPEAR:
- play_sound(NA_SE_SY_TRE_BOX_APPEAR);
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
break;
case CS_END_SFX_CORRECT_CHIME:
- play_sound(NA_SE_SY_CORRECT_CHIME);
+ Audio_PlaySfx(NA_SE_SY_CORRECT_CHIME);
break;
default: // CS_END_SFX_NONE
@@ -335,7 +342,7 @@ s16 CutsceneManager_StartWithPlayerCs(s16 csId, Actor* actor) {
s16 startCsId = CutsceneManager_Start(csId, actor);
if (startCsId >= 0) {
- func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT);
+ func_800B7298(sCutsceneMgr.play, NULL, PLAYER_CSMODE_WAIT);
if (sCutsceneMgr.length == 0) {
CutsceneManager_Stop(sCutsceneMgr.csId);
}
@@ -351,7 +358,7 @@ s16 CutsceneManager_StartWithPlayerCsAndSetFlag(s16 csId, Actor* actor) {
s16 startCsId = CutsceneManager_Start(csId, actor);
if (startCsId >= 0) {
- func_800B7298(sCutsceneMgr.play, 0, PLAYER_CSMODE_WAIT);
+ func_800B7298(sCutsceneMgr.play, NULL, PLAYER_CSMODE_WAIT);
if (sCutsceneMgr.length == 0) {
CutsceneManager_Stop(sCutsceneMgr.csId);
}
diff --git a/src/code/z_face_reaction.c b/src/code/z_face_reaction.c
index e6d985d65..0d2d632ab 100644
--- a/src/code/z_face_reaction.c
+++ b/src/code/z_face_reaction.c
@@ -43,15 +43,15 @@ static u16 sReactionTextIds[][PLAYER_MASK_GIANT - 1] = {
/* 0x10 */ { 0 },
/* 0x11 */ { 0x0000, 0x236B, 0x0000, 0x0000, 0x236C, 0x0000,
0x0000, 0x236D, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x236E, 0x0000, 0x0000, 0x0000 },
+ 0x0000, 0x0000, 0x0000, 0x236E, 0x0000, 0x0000, 0x0000 }, // FACE_REACTION_SET_JIM
/* 0x12 */ { 0x2348, 0x2349, 0x234A, 0x0000, 0x234B, 0x2348,
0x234C, 0x2348, 0x234D, 0x234E, 0x2348, 0x2348,
- 0x2348, 0x2348, 0x2348, 0x234F, 0x2348, 0x2348, 0x2350 },
+ 0x2348, 0x2348, 0x2348, 0x234F, 0x2348, 0x2348, 0x2350 }, // FACE_REACTION_SET_BOMBERS
/* 0x13 */ { 0 },
/* 0x14 */ { 0 },
/* 0x15 */ { 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356,
0x2357, 0x2356, 0x2358, 0x2359, 0x2356, 0x235A,
- 0x2353, 0x235A, 0x235A, 0x235B, 0x2354, 0x2351, 0x235C },
+ 0x2353, 0x235A, 0x235A, 0x235B, 0x2354, 0x2351, 0x235C }, // FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD
/* 0x16 */ { 0 },
/* 0x17 */ { 0 },
/* 0x18 */ { 0 },
@@ -77,24 +77,24 @@ static u16 sReactionTextIds[][PLAYER_MASK_GIANT - 1] = {
/* 0x2C */ { 0 },
/* 0x2D */ { 0x233B, 0x233C, 0x233D, 0x233E, 0x233F, 0x233B,
0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345,
- 0x2346, 0x233B, 0x2345, 0x2347, 0x233D, 0x233B, 0x233D },
+ 0x2346, 0x233B, 0x2345, 0x2347, 0x233D, 0x233B, 0x233D }, // FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL
/* 0x2E */ { 0 },
/* 0x2F */ { 0x2328, 0x2329, 0x232A, 0x232B, 0x2328, 0x2328,
0x232C, 0x2328, 0x232D, 0x232E, 0x2328, 0x2328,
- 0x2328, 0x232F, 0x2330, 0x2331, 0x2332, 0x2333, 0x2328 },
+ 0x2328, 0x232F, 0x2330, 0x2331, 0x2332, 0x2333, 0x2328 }, // FACE_REACTION_SET_CURIOSITY_SHOP_MAN
/* 0x30 */ { 0x236F, 0x2370, 0x236F, 0x0000, 0x236F, 0x236F,
0x236F, 0x236F, 0x0000, 0x236F, 0x236F, 0x236F,
- 0x236F, 0x236F, 0x2371, 0x2372, 0x236F, 0x236F, 0x236F },
+ 0x236F, 0x236F, 0x2371, 0x2372, 0x236F, 0x236F, 0x236F }, // FACE_REACTION_SET_TOWN_SHOOTING_GALLERY_MAN
/* 0x31 */ { 0x2373, 0x2374, 0x2373, 0x0000, 0x2373, 0x2373,
0x2373, 0x2373, 0x0000, 0x2375, 0x2376, 0x2373,
- 0x2373, 0x2373, 0x2377, 0x2378, 0x2373, 0x2373, 0x2373 },
+ 0x2373, 0x2373, 0x2377, 0x2378, 0x2373, 0x2373, 0x2373 }, // FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN
/* 0x32 */ { 0 },
/* 0x33 */ { 0 },
/* 0x34 */ { 0 },
/* 0x35 */ { 0 },
/* 0x36 */ { 0x0000, 0x2334, 0x0000, 0x0000, 0x0000, 0x0000,
0x2335, 0x0000, 0x2336, 0x2337, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x2338, 0x2339, 0x0000, 0x233A, 0x0000 },
+ 0x0000, 0x0000, 0x2338, 0x2339, 0x0000, 0x233A, 0x0000 }, // FACE_REACTION_SET_PART_TIMER
/* 0x37 */ { 0 },
/* 0x38 */ { 0 },
/* 0x39 */ { 0 },
@@ -178,7 +178,7 @@ static u16 sReactionTextIds[][PLAYER_MASK_GIANT - 1] = {
};
// clang-format on
-u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet) {
+u16 Text_GetFaceReaction(PlayState* play, FaceReactionSet reactionSet) {
if ((Player_GetMask(play) > PLAYER_MASK_NONE) && (Player_GetMask(play) < PLAYER_MASK_GIANT)) {
return sReactionTextIds[reactionSet][Player_GetMask(play) - 1];
}
diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c
index 185373e06..efd492d5c 100644
--- a/src/code/z_fbdemo_circle.c
+++ b/src/code/z_fbdemo_circle.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "sys_cfb.h"
typedef enum {
/* 0 */ TRANS_CIRCLE_DIR_IN,
diff --git a/src/code/z_fireobj.c b/src/code/z_fireobj.c
index d2fc4e1be..8f75a4d3e 100644
--- a/src/code/z_fireobj.c
+++ b/src/code/z_fireobj.c
@@ -112,7 +112,7 @@ void FireObj_UpdateStateTransitions(PlayState* play, FireObj* fire) {
(waterY - fire->position.y > 6500.0f * fire->yScale)) {
FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_NOT_LIT);
}
- if ((fire->flags & FIRE_FLAG_INTERACT_STICK) && (player->heldItemAction == PLAYER_IA_STICK)) {
+ if ((fire->flags & FIRE_FLAG_INTERACT_STICK) && (player->heldItemAction == PLAYER_IA_DEKU_STICK)) {
Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, &fire->position, &dist);
if (Math3D_Vec3fMagnitudeSq(&dist) < SQ(20.0f)) {
sp40 = true;
diff --git a/src/code/z_game_dlftbls.c b/src/code/z_game_dlftbls.c
index 7336b01f6..cb3aee317 100644
--- a/src/code/z_game_dlftbls.c
+++ b/src/code/z_game_dlftbls.c
@@ -6,22 +6,38 @@
#include "overlays/gamestates/ovl_title/z_title.h"
#include "z_title_setup.h"
-#define GAMESTATE_OVERLAY(name, init, destroy, size) \
- { \
- NULL, SEGMENT_ROM_START(ovl_##name), SEGMENT_ROM_END(ovl_##name), SEGMENT_START(ovl_##name), \
- SEGMENT_END(ovl_##name), 0, init, destroy, 0, 0, 0, size \
- }
-#define GAMESTATE_OVERLAY_INTERNAL(init, destroy, size) \
- { NULL, 0, 0, NULL, NULL, 0, init, destroy, 0, 0, 0, size }
-
-GameStateOverlay gGameStateOverlayTable[] = {
- GAMESTATE_OVERLAY_INTERNAL(Setup_Init, Setup_Destroy, sizeof(SetupState)),
- GAMESTATE_OVERLAY(select, MapSelect_Init, MapSelect_Destroy, sizeof(MapSelectState)),
- GAMESTATE_OVERLAY(title, ConsoleLogo_Init, ConsoleLogo_Destroy, sizeof(ConsoleLogoState)),
- GAMESTATE_OVERLAY_INTERNAL(Play_Init, Play_Destroy, sizeof(PlayState)),
- GAMESTATE_OVERLAY(opening, TitleSetup_Init, TitleSetup_Destroy, sizeof(TitleSetupState)),
- GAMESTATE_OVERLAY(file_choose, FileSelect_Init, FileSelect_Destroy, sizeof(FileSelectState)),
- GAMESTATE_OVERLAY(daytelop, DayTelop_Init, DayTelop_Destroy, sizeof(DayTelopState)),
+// Linker symbol declarations (used in the table below)
+#define DEFINE_GAMESTATE(_typeName, _enumName, segmentName) DECLARE_OVERLAY_SEGMENT(segmentName)
+#define DEFINE_GAMESTATE_INTERNAL(_typeName, _enumName)
+
+#include "tables/gamestate_table.h"
+
+#undef DEFINE_GAMESTATE
+#undef DEFINE_GAMESTATE_INTERNAL
+
+// Gamestate Overlay Table definition
+#define DEFINE_GAMESTATE_INTERNAL(typeName, _enumName) \
+ { NULL, 0, 0, NULL, NULL, NULL, typeName##_Init, typeName##_Destroy, NULL, NULL, 0, sizeof(typeName##State) },
+
+#define DEFINE_GAMESTATE(typeName, _enumName, segmentName) \
+ { NULL, \
+ (uintptr_t)SEGMENT_ROM_START(ovl_##segmentName), \
+ (uintptr_t)SEGMENT_ROM_END(ovl_##segmentName), \
+ SEGMENT_START(ovl_##segmentName), \
+ SEGMENT_END(ovl_##segmentName), \
+ NULL, \
+ typeName##_Init, \
+ typeName##_Destroy, \
+ NULL, \
+ NULL, \
+ 0, \
+ sizeof(typeName##State) },
+
+GameStateOverlay gGameStateOverlayTable[GAMESTATE_ID_MAX] = {
+#include "tables/gamestate_table.h"
};
-s32 gGraphNumGameStates = ARRAY_COUNT(gGameStateOverlayTable);
+#undef DEFINE_GAMESTATE
+#undef DEFINE_GAMESTATE_INTERNAL
+
+GameStateId gGraphNumGameStates = GAMESTATE_ID_MAX;
diff --git a/src/code/z_jpeg.c b/src/code/z_jpeg.c
index ad592a40e..5ccc5987d 100644
--- a/src/code/z_jpeg.c
+++ b/src/code/z_jpeg.c
@@ -65,7 +65,7 @@ void Jpeg_ScheduleDecoderTask(JpegContext* jpegCtx) {
jpegCtx->scTask.framebuffer = NULL;
jpegCtx->scTask.list.t = sJpegTask;
- osSendMesg(&gSchedContext.cmdQ, (OSMesg)&jpegCtx->scTask, OS_MESG_BLOCK);
+ osSendMesg(&gSchedContext.cmdQ, (OSMesg*)&jpegCtx->scTask, OS_MESG_BLOCK);
Sched_SendEntryMsg(&gSchedContext); // osScKickEntryMsg
osRecvMesg(&jpegCtx->mq, NULL, OS_MESG_BLOCK);
}
diff --git a/src/code/z_kaleido_manager.c b/src/code/z_kaleido_manager.c
index 0d9f30a08..e09492d4e 100644
--- a/src/code/z_kaleido_manager.c
+++ b/src/code/z_kaleido_manager.c
@@ -1,5 +1,6 @@
#include "global.h"
-#include "z64load.h"
+#include "fault.h"
+#include "loadfragment.h"
#define KALEIDO_OVERLAY(name) \
{ \
@@ -16,7 +17,7 @@ void* sKaleidoAreaPtr = NULL;
KaleidoMgrOverlay* gKaleidoMgrCurOvl = NULL;
FaultAddrConvClient sKaleidoMgrFaultAddrConvClient;
-void* KaleidoManager_FaultAddrConv(void* address, void* param) {
+uintptr_t KaleidoManager_FaultAddrConv(uintptr_t address, void* param) {
uintptr_t addr = address;
KaleidoMgrOverlay* kaleidoMgrOvl = gKaleidoMgrCurOvl;
size_t ramConv;
@@ -24,7 +25,7 @@ void* KaleidoManager_FaultAddrConv(void* address, void* param) {
size_t diff;
if (kaleidoMgrOvl != NULL) {
- diff = VRAM_PTR_SIZE(kaleidoMgrOvl);
+ diff = (uintptr_t)kaleidoMgrOvl->vramEnd - (uintptr_t)kaleidoMgrOvl->vramStart;
ramStart = kaleidoMgrOvl->loadedRamAddr;
ramConv = (uintptr_t)kaleidoMgrOvl->vramStart - (uintptr_t)ramStart;
@@ -34,12 +35,12 @@ void* KaleidoManager_FaultAddrConv(void* address, void* param) {
}
}
}
- return NULL;
+ return 0;
}
void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) {
ovl->loadedRamAddr = sKaleidoAreaPtr;
- Load2_LoadOverlay(ovl->vromStart, ovl->vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr);
+ Overlay_Load(ovl->vromStart, ovl->vromEnd, ovl->vramStart, ovl->vramEnd, ovl->loadedRamAddr);
ovl->offset = (uintptr_t)ovl->loadedRamAddr - (uintptr_t)ovl->vramStart;
gKaleidoMgrCurOvl = ovl;
}
@@ -47,7 +48,7 @@ void KaleidoManager_LoadOvl(KaleidoMgrOverlay* ovl) {
void KaleidoManager_ClearOvl(KaleidoMgrOverlay* ovl) {
if (ovl->loadedRamAddr != NULL) {
ovl->offset = 0;
- bzero(ovl->loadedRamAddr, VRAM_PTR_SIZE(ovl));
+ bzero(ovl->loadedRamAddr, (uintptr_t)ovl->vramEnd - (uintptr_t)ovl->vramStart);
ovl->loadedRamAddr = NULL;
gKaleidoMgrCurOvl = NULL;
}
@@ -59,7 +60,7 @@ void KaleidoManager_Init(PlayState* play) {
u32 i;
for (i = 0; i < ARRAY_COUNT(gKaleidoMgrOverlayTable); i++) {
- size = VRAM_PTR_SIZE(&gKaleidoMgrOverlayTable[i]);
+ size = (uintptr_t)gKaleidoMgrOverlayTable[i].vramEnd - (uintptr_t)gKaleidoMgrOverlayTable[i].vramStart;
if (size > largestSize) {
largestSize = size;
}
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 130fa88db..a08f2b56b 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -110,11 +110,11 @@ void KaleidoSetup_Update(PlayState* play) {
}
if (pauseCtx->state == PAUSE_STATE_OPENING_0) {
- Game_SetFramerateDivisor(&play->state, 2);
+ GameState_SetFramerateDivisor(&play->state, 2);
if (ShrinkWindow_Letterbox_GetSizeTarget() != 0) {
ShrinkWindow_Letterbox_SetSizeTarget(0);
}
- func_801A3AEC(1);
+ Audio_PlaySfx_PauseMenuOpenOrClose(SFX_PAUSE_MENU_OPEN);
}
}
}
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 2191498a3..9346af59a 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -90,13 +90,13 @@
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD59C.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD5E0.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD654.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s")
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD698.s")
+#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s")
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s")
diff --git a/src/code/z_lib.c b/src/code/z_lib.c
index f3e67e5f3..553c5d133 100644
--- a/src/code/z_lib.c
+++ b/src/code/z_lib.c
@@ -639,16 +639,17 @@ void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src) {
dst->a = src->a;
}
-void func_801000A4(u16 sfxId) {
- play_sound(sfxId);
+void Lib_PlaySfx(u16 sfxId) {
+ Audio_PlaySfx(sfxId);
}
-void func_801000CC(u16 sfxId) {
- func_8019F128(sfxId);
+void Lib_PlaySfx_2(u16 sfxId) {
+ Audio_PlaySfx_2(sfxId);
}
-void Lib_PlaySfxAtPos(Vec3f* pos, u16 sfxId) {
- Audio_PlaySfxAtPos(pos, sfxId);
+// Unused
+void Lib_PlaySfx_AtPos(Vec3f* pos, u16 sfxId) {
+ Audio_PlaySfx_AtPos(pos, sfxId);
}
void Lib_Vec3f_TranslateAndRotateY(Vec3f* translation, s16 rotAngle, Vec3f* src, Vec3f* dst) {
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index 7226a6719..d9abe151d 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "interface/parameter_static/parameter_static.h"
@@ -407,7 +408,7 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) {
interfaceCtx->lifeSizeChangeDirection = 0;
if (!Player_InCsMode(play) && (play->pauseCtx.state == PAUSE_STATE_OFF) &&
(play->pauseCtx.debugEditor == DEBUG_EDITOR_NONE) && LifeMeter_IsCritical() && !Play_InCsMode(play)) {
- play_sound(NA_SE_SY_HITPOINT_ALARM);
+ Audio_PlaySfx(NA_SE_SY_HITPOINT_ALARM);
}
}
} else {
diff --git a/src/code/z_lights.c b/src/code/z_lights.c
index e82c3a9b2..ef1af66f5 100644
--- a/src/code/z_lights.c
+++ b/src/code/z_lights.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "sys_cfb.h"
#include "objects/gameplay_keep/gameplay_keep.h"
LightsBuffer sLightsBuffer;
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index 912926cbb..c087fe059 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -230,9 +230,9 @@ void Map_Update(PlayState* play) {
if ((play->pauseCtx.state <= PAUSE_STATE_OPENING_2) && (CHECK_BTN_ALL(controller->press.button, BTN_L)) &&
!Play_InCsMode(play) && !func_80106530(play)) {
if (!R_MINIMAP_DISABLED) {
- play_sound(NA_SE_SY_CAMERA_ZOOM_UP);
+ Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_UP);
} else {
- play_sound(NA_SE_SY_CAMERA_ZOOM_DOWN);
+ Audio_PlaySfx(NA_SE_SY_CAMERA_ZOOM_DOWN);
}
R_MINIMAP_DISABLED ^= 1;
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 03fadc9c9..cf88c60df 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -93,13 +93,13 @@ s32 Message_ShouldAdvance(PlayState* play) {
if ((msgCtx->unk12020 == 0x10) || (msgCtx->unk12020 == 0x11)) {
if (CHECK_BTN_ALL(controller->press.button, BTN_A)) {
- play_sound(NA_SE_SY_MESSAGE_PASS);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
}
return CHECK_BTN_ALL(controller->press.button, BTN_A);
} else {
if (CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) ||
CHECK_BTN_ALL(controller->press.button, BTN_CUP)) {
- play_sound(NA_SE_SY_MESSAGE_PASS);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_PASS);
}
return CHECK_BTN_ALL(controller->press.button, BTN_A) || CHECK_BTN_ALL(controller->press.button, BTN_B) ||
CHECK_BTN_ALL(controller->press.button, BTN_CUP);
@@ -125,7 +125,7 @@ void Message_CloseTextbox(PlayState* play) {
msgCtx->stateTimer = 2;
msgCtx->msgMode = 0x43;
msgCtx->unk12020 = 0;
- play_sound(NA_SE_NONE);
+ Audio_PlaySfx(NA_SE_NONE);
}
}
@@ -147,7 +147,7 @@ void func_80148B98(PlayState* play, u8 arg1) {
if (msgCtx->choiceIndex > 128) {
msgCtx->choiceIndex = 0;
} else {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
}
return;
} else if ((curInput->rel.stick_y < -29) && held == 0) {
@@ -156,7 +156,7 @@ void func_80148B98(PlayState* play, u8 arg1) {
if (msgCtx->choiceIndex > arg1) {
msgCtx->choiceIndex = arg1;
} else {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
}
return;
} else {
@@ -422,7 +422,7 @@ u32 func_80151C9C(PlayState* play) {
Message_ContinueTextbox(
play, sBombersNotebookEventMessages
[msgCtx->bombersNotebookEventQueue[msgCtx->bombersNotebookEventQueueCount]]);
- play_sound(NA_SE_SY_SCHEDULE_WRITE);
+ Audio_PlaySfx(NA_SE_SY_SCHEDULE_WRITE);
return true;
}
}
diff --git a/src/code/z_nmi_buff.c b/src/code/z_nmi_buff.c
index 205bd8d0f..eacfc5f46 100644
--- a/src/code/z_nmi_buff.c
+++ b/src/code/z_nmi_buff.c
@@ -3,6 +3,13 @@
#define COLD_RESET 0
#define NMI 1
+typedef struct {
+ /* 0x00 */ u32 resetting;
+ /* 0x04 */ u32 resetCount;
+ /* 0x08 */ OSTime duration;
+ /* 0x10 */ OSTime resetTime;
+} NmiBuff; // size >= 0x18
+
NmiBuff* gNMIBuffer;
void Nmi_Init(void) {
diff --git a/src/code/z_overlay.c b/src/code/z_overlay.c
index 2c8c8d6d7..2e348c336 100644
--- a/src/code/z_overlay.c
+++ b/src/code/z_overlay.c
@@ -13,7 +13,7 @@
*/
#include "global.h"
-#include "z64load.h"
+#include "loadfragment.h"
void* TransitionOverlay_VramToRam(TransitionOverlay* overlayEntry, void* vramAddr) {
void* loadedRamAddr = Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr);
@@ -40,13 +40,13 @@ s32 TransitionOverlay_Load(TransitionOverlay* overlayEntry) {
return 3;
}
if (Lib_PhysicalToVirtual(overlayEntry->loadInfo.addr) == NULL) {
- loadedRamAddr = ZeldaArena_Malloc(VRAM_PTR_SIZE(overlayEntry));
+ loadedRamAddr = ZeldaArena_Malloc((uintptr_t)overlayEntry->vramEnd - (uintptr_t)overlayEntry->vramStart);
if (loadedRamAddr == NULL) {
return -1;
}
- Load2_LoadOverlay(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart,
- overlayEntry->vramEnd, loadedRamAddr);
+ Overlay_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd,
+ loadedRamAddr);
overlayEntry->loadInfo.addr = Lib_VirtualToPhysical(loadedRamAddr);
overlayEntry->loadInfo.count = 1;
return 0;
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index e63c9d8e5..cd458e331 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1,6 +1,8 @@
#include "global.h"
+#include "sys_cfb.h"
#include "z64snap.h"
#include "z64view.h"
+#include "archives/icon_item_static/icon_item_static_yar.h"
#include "interface/parameter_static/parameter_static.h"
#include "interface/do_action_static/do_action_static.h"
#include "misc/story_static/story_static.h"
@@ -8,8 +10,6 @@
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "overlays/actors/ovl_En_Mm3/z_en_mm3.h"
-extern TexturePtr D_08095AC0; // gMagicArrowEquipEffectTex
-
typedef enum {
/* 0 */ PICTO_BOX_STATE_OFF, // Not using the pictograph
/* 1 */ PICTO_BOX_STATE_LENS, // Looking through the lens of the pictograph
@@ -105,25 +105,25 @@ s16 sMagicBorderRatio = 2;
s16 sMagicBorderStep = 1;
s16 sExtraItemBases[] = {
- ITEM_STICK, // ITEM_STICKS_5
- ITEM_STICK, // ITEM_STICKS_10
- ITEM_NUT, // ITEM_NUTS_5
- ITEM_NUT, // ITEM_NUTS_10
- ITEM_BOMB, // ITEM_BOMBS_5
- ITEM_BOMB, // ITEM_BOMBS_10
- ITEM_BOMB, // ITEM_BOMBS_20
- ITEM_BOMB, // ITEM_BOMBS_30
- ITEM_BOW, // ITEM_ARROWS_10
- ITEM_BOW, // ITEM_ARROWS_30
- ITEM_BOW, // ITEM_ARROWS_40
- ITEM_BOMBCHU, // ITEM_ARROWS_50 !@bug this data is missing an ITEM_BOW, offsetting the rest by 1
- ITEM_BOMBCHU, // ITEM_BOMBCHUS_20
- ITEM_BOMBCHU, // ITEM_BOMBCHUS_10
- ITEM_BOMBCHU, // ITEM_BOMBCHUS_1
- ITEM_STICK, // ITEM_BOMBCHUS_5
- ITEM_STICK, // ITEM_STICK_UPGRADE_20
- ITEM_NUT, // ITEM_STICK_UPGRADE_30
- ITEM_NUT, // ITEM_NUT_UPGRADE_30
+ ITEM_DEKU_STICK, // ITEM_DEKU_STICKS_5
+ ITEM_DEKU_STICK, // ITEM_DEKU_STICKS_10
+ ITEM_DEKU_NUT, // ITEM_DEKU_NUTS_5
+ ITEM_DEKU_NUT, // ITEM_DEKU_NUTS_10
+ ITEM_BOMB, // ITEM_BOMBS_5
+ ITEM_BOMB, // ITEM_BOMBS_10
+ ITEM_BOMB, // ITEM_BOMBS_20
+ ITEM_BOMB, // ITEM_BOMBS_30
+ ITEM_BOW, // ITEM_ARROWS_10
+ ITEM_BOW, // ITEM_ARROWS_30
+ ITEM_BOW, // ITEM_ARROWS_40
+ ITEM_BOMBCHU, // ITEM_ARROWS_50 !@bug this data is missing an ITEM_BOW, offsetting the rest by 1
+ ITEM_BOMBCHU, // ITEM_BOMBCHUS_20
+ ITEM_BOMBCHU, // ITEM_BOMBCHUS_10
+ ITEM_BOMBCHU, // ITEM_BOMBCHUS_1
+ ITEM_DEKU_STICK, // ITEM_BOMBCHUS_5
+ ITEM_DEKU_STICK, // ITEM_DEKU_STICK_UPGRADE_20
+ ITEM_DEKU_NUT, // ITEM_DEKU_STICK_UPGRADE_30
+ ITEM_DEKU_NUT, // ITEM_DEKU_NUT_UPGRADE_30
};
s16 sEnvHazard = PLAYER_ENV_HAZARD_NONE;
@@ -160,16 +160,33 @@ static Gfx sScreenFillSetupDL[] = {
s16 D_801BF9B0 = 0;
f32 D_801BF9B4[] = { 100.0f, 109.0f };
-s16 D_801BF9BC[] = { 0x226, 0x2A8, 0x2A8, 0x2A8 };
+s16 D_801BF9BC[] = {
+ 0x226, // EQUIP_SLOT_B
+ 0x2A8, // EQUIP_SLOT_C_LEFT
+ 0x2A8, // EQUIP_SLOT_C_DOWN
+ 0x2A8, // EQUIP_SLOT_C_RIGHT
+};
s16 D_801BF9C4[] = { 0x9E, 0x9B };
s16 D_801BF9C8[] = { 0x17, 0x16 };
f32 D_801BF9CC[] = { -380.0f, -350.0f };
-s16 D_801BF9D4[] = { 0xA7, 0xE3 };
-s16 D_801BF9D8[] = { 0xF9, 0x10F };
-s16 D_801BF9DC[] = { 0x11, 0x12 };
-s16 D_801BF9E0[] = { 0x22, 0x12 };
-s16 D_801BF9E4[] = { 0x23F, 0x26C };
-s16 D_801BF9E8[] = { 0x26C, 0x26C };
+s16 D_801BF9D4[] = {
+ 0xA7, // EQUIP_SLOT_B
+ 0xE3, // EQUIP_SLOT_C_LEFT
+ 0xF9, // EQUIP_SLOT_C_DOWN
+ 0x10F, // EQUIP_SLOT_C_RIGHT
+};
+s16 D_801BF9DC[] = {
+ 0x11, // EQUIP_SLOT_B
+ 0x12, // EQUIP_SLOT_C_LEFT
+ 0x22, // EQUIP_SLOT_C_DOWN
+ 0x12, // EQUIP_SLOT_C_RIGHT
+};
+s16 D_801BF9E4[] = {
+ 0x23F, // EQUIP_SLOT_B
+ 0x26C, // EQUIP_SLOT_C_LEFT
+ 0x26C, // EQUIP_SLOT_C_DOWN
+ 0x26C, // EQUIP_SLOT_C_RIGHT
+};
s16 sFinalHoursClockDigitsRed = 0;
s16 sFinalHoursClockFrameEnvRed = 0;
@@ -1691,7 +1708,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
if (CHECK_EVENTINF(EVENTINF_41)) {
// Related to swamp boat (non-minigame)?
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
- if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX) || (msgCtx->msgMode != 0)) {
+ if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != 0)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
@@ -1776,8 +1793,8 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
} else if (CHECK_EVENTINF(EVENTINF_34)) {
// Deku playground minigame
if (player->stateFlags3 & PLAYER_STATE3_1000000) {
- if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT;
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_DEKU_NUT] == ITEM_DEKU_NUT) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_DEKU_NUT;
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
} else {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
@@ -1804,9 +1821,9 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
} else if (player->stateFlags3 & PLAYER_STATE3_1000000) {
// Nuts on B (from flying as Deku Link)
- if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) {
- if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NUT) {
- BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT;
+ if (gSaveContext.save.saveInfo.inventory.items[SLOT_DEKU_NUT] == ITEM_DEKU_NUT) {
+ if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_DEKU_NUT) {
+ BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_DEKU_NUT;
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
restoreHudVisibility = true;
@@ -1822,7 +1839,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
}
} else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) &&
- (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NUT)) {
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_DEKU_NUT)) {
// Nuts on B (as Deku Link)
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_FD;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
@@ -1893,7 +1910,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
} else if (player->stateFlags1 & PLAYER_STATE1_200000) {
// First person view
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
- if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_LENS) {
+ if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_LENS_OF_TRUTH) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
@@ -2004,10 +2021,10 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
// C buttons
- if (gSaveContext.save.playerForm == player->transformation) {
+ if (GET_PLAYER_FORM == player->transformation) {
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
// Individual C button
- if (!gPlayerFormItemRestrictions[(void)0, gSaveContext.save.playerForm][GET_CUR_FORM_BTN_ITEM(i)]) {
+ if (!gPlayerFormItemRestrictions[GET_PLAYER_FORM][GET_CUR_FORM_BTN_ITEM(i)]) {
// Item not usable in current playerForm
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
@@ -2057,22 +2074,22 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
} else {
// End of special item cases. Apply restrictions to buttons
if (interfaceCtx->restrictions.tradeItems != 0) {
- if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) ||
((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) ||
- (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA)) {
+ (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA_OF_TIME)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (interfaceCtx->restrictions.tradeItems == 0) {
- if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) ||
((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) ||
- (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA)) {
+ (GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA_OF_TIME)) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
@@ -2099,14 +2116,14 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
if (interfaceCtx->restrictions.pictoBox != 0) {
- if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTO_BOX) {
+ if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTOGRAPH_BOX) {
if (!gSaveContext.buttonStatus[i]) { // == BTN_ENABLED
restoreHudVisibility = true;
}
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (interfaceCtx->restrictions.pictoBox == 0) {
- if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTO_BOX) {
+ if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTOGRAPH_BOX) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
@@ -2115,14 +2132,14 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
if (interfaceCtx->restrictions.all != 0) {
- if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) &&
!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) &&
- (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA) &&
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA_OF_TIME) &&
!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) &&
- (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX)) {
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX)) {
if ((gSaveContext.buttonStatus[i] == BTN_ENABLED)) {
restoreHudVisibility = true;
@@ -2130,14 +2147,14 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
}
} else if (interfaceCtx->restrictions.all == 0) {
- if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOON_TEAR) &&
+ if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_PENDANT_OF_MEMORIES)) &&
!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) &&
- (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA) &&
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_OCARINA_OF_TIME) &&
!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) &&
- (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTO_BOX)) {
+ (GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX)) {
if ((gSaveContext.buttonStatus[i] == BTN_DISABLED)) {
restoreHudVisibility = true;
@@ -2166,7 +2183,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
gSaveContext.hudVisibilityForceButtonAlphasByStatus = false;
if ((player->stateFlags1 & PLAYER_STATE1_800000) || CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01) ||
- (!(CHECK_EVENTINF(EVENTINF_41)) && (play->unk_1887C >= 2))) {
+ (!CHECK_EVENTINF(EVENTINF_41) && (play->unk_1887C >= 2))) {
// Riding Epona OR Honey & Darling minigame OR Horseback balloon minigame OR related to swamp boat
// (non-minigame?)
if ((player->stateFlags1 & PLAYER_STATE1_800000) && (player->currentMask == PLAYER_MASK_BLAST) &&
@@ -2239,8 +2256,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
(gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0)) &&
(Cutscene_GetSceneLayer(play) != 0) && (play->transitionTrigger == TRANS_TRIGGER_OFF)) {
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
- } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) &&
- (CHECK_EVENTINF(EVENTINF_35))) {
+ } else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && CHECK_EVENTINF(EVENTINF_35)) {
Interface_SetHudVisibility(HUD_VISIBILITY_B_MINIMAP);
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08) &&
(gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE)) {
@@ -2329,9 +2345,9 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
restoreHudVisibility = true;
sPictoState = PICTO_BOX_STATE_OFF;
} else if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_A) || (func_801A5100() == 1)) {
- if (!(CHECK_EVENTINF(EVENTINF_41)) ||
- ((CHECK_EVENTINF(EVENTINF_41)) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) {
- play_sound(NA_SE_SY_CAMERA_SHUTTER);
+ if (!CHECK_EVENTINF(EVENTINF_41) ||
+ (CHECK_EVENTINF(EVENTINF_41) && (CutsceneManager_GetCurrentCsId() == CS_ID_NONE))) {
+ Audio_PlaySfx(NA_SE_SY_CAMERA_SHUTTER);
SREG(89) = 1;
play->haltAllActors = true;
sPictoState = PICTO_BOX_STATE_SETUP_PHOTO;
@@ -2344,13 +2360,13 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
player->stateFlags1 &= ~PLAYER_STATE1_200;
Message_CloseTextbox(play);
if (play->msgCtx.choiceIndex != 0) {
- func_8019F230();
+ Audio_PlaySfx_MessageCancel();
func_80115844(play, DO_ACTION_STOP);
Interface_SetHudVisibility(HUD_VISIBILITY_A_B);
sPictoState = PICTO_BOX_STATE_LENS;
REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH);
} else {
- func_8019F208();
+ Audio_PlaySfx_MessageDecide();
interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0;
restoreHudVisibility = true;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
@@ -2501,8 +2517,8 @@ u8 Item_Give(PlayState* play, u8 item) {
u8 slot;
slot = SLOT(item);
- if (item >= ITEM_STICKS_5) {
- slot = SLOT(sExtraItemBases[item - ITEM_STICKS_5]);
+ if (item >= ITEM_DEKU_STICKS_5) {
+ slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]);
}
if (item == ITEM_SKULL_TOKEN) {
@@ -2626,84 +2642,84 @@ u8 Item_Give(PlayState* play, u8 item) {
Inventory_ChangeUpgrade(UPG_WALLET, 2);
return ITEM_NONE;
- } else if (item == ITEM_STICK_UPGRADE_20) {
- if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) {
- INV_CONTENT(ITEM_STICK) = ITEM_STICK;
+ } else if (item == ITEM_DEKU_STICK_UPGRADE_20) {
+ if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) {
+ INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK;
}
- Inventory_ChangeUpgrade(UPG_STICKS, 2);
- AMMO(ITEM_STICK) = CAPACITY(UPG_STICKS, 2);
+ Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 2);
+ AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 2);
return ITEM_NONE;
- } else if (item == ITEM_STICK_UPGRADE_30) {
- if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) {
- INV_CONTENT(ITEM_STICK) = ITEM_STICK;
+ } else if (item == ITEM_DEKU_STICK_UPGRADE_30) {
+ if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) {
+ INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK;
}
- Inventory_ChangeUpgrade(UPG_STICKS, 3);
- AMMO(ITEM_STICK) = CAPACITY(UPG_STICKS, 3);
+ Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 3);
+ AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 3);
return ITEM_NONE;
- } else if (item == ITEM_NUT_UPGRADE_30) {
- if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) {
- INV_CONTENT(ITEM_NUT) = ITEM_NUT;
+ } else if (item == ITEM_DEKU_NUT_UPGRADE_30) {
+ if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) {
+ INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
}
- Inventory_ChangeUpgrade(UPG_NUTS, 2);
- AMMO(ITEM_NUT) = CAPACITY(UPG_NUTS, 2);
+ Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 2);
+ AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 2);
return ITEM_NONE;
- } else if (item == ITEM_NUT_UPGRADE_40) {
- if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) {
- INV_CONTENT(ITEM_NUT) = ITEM_NUT;
+ } else if (item == ITEM_DEKU_NUT_UPGRADE_40) {
+ if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) {
+ INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
}
- Inventory_ChangeUpgrade(UPG_NUTS, 3);
- AMMO(ITEM_NUT) = CAPACITY(UPG_NUTS, 3);
+ Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 3);
+ AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 3);
return ITEM_NONE;
- } else if (item == ITEM_STICK) {
- if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) {
- Inventory_ChangeUpgrade(UPG_STICKS, 1);
- AMMO(ITEM_STICK) = 1;
+ } else if (item == ITEM_DEKU_STICK) {
+ if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) {
+ Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1);
+ AMMO(ITEM_DEKU_STICK) = 1;
} else {
- AMMO(ITEM_STICK)++;
- if (AMMO(ITEM_STICK) > CUR_CAPACITY(UPG_STICKS)) {
- AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS);
+ AMMO(ITEM_DEKU_STICK)++;
+ if (AMMO(ITEM_DEKU_STICK) > CUR_CAPACITY(UPG_DEKU_STICKS)) {
+ AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS);
}
}
- } else if ((item == ITEM_STICKS_5) || (item == ITEM_STICKS_10)) {
- if (INV_CONTENT(ITEM_STICK) != ITEM_STICK) {
- Inventory_ChangeUpgrade(UPG_STICKS, 1);
- AMMO(ITEM_STICK) = sAmmoRefillCounts[item - ITEM_STICKS_5];
+ } else if ((item == ITEM_DEKU_STICKS_5) || (item == ITEM_DEKU_STICKS_10)) {
+ if (INV_CONTENT(ITEM_DEKU_STICK) != ITEM_DEKU_STICK) {
+ Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1);
+ AMMO(ITEM_DEKU_STICK) = sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5];
} else {
- AMMO(ITEM_STICK) += sAmmoRefillCounts[item - ITEM_STICKS_5];
- if (AMMO(ITEM_STICK) > CUR_CAPACITY(UPG_STICKS)) {
- AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS);
+ AMMO(ITEM_DEKU_STICK) += sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5];
+ if (AMMO(ITEM_DEKU_STICK) > CUR_CAPACITY(UPG_DEKU_STICKS)) {
+ AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS);
}
}
- item = ITEM_STICK;
+ item = ITEM_DEKU_STICK;
- } else if (item == ITEM_NUT) {
- if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) {
- Inventory_ChangeUpgrade(UPG_NUTS, 1);
- AMMO(ITEM_NUT) = 1;
+ } else if (item == ITEM_DEKU_NUT) {
+ if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) {
+ Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1);
+ AMMO(ITEM_DEKU_NUT) = 1;
} else {
- AMMO(ITEM_NUT)++;
- if (AMMO(ITEM_NUT) > CUR_CAPACITY(UPG_NUTS)) {
- AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS);
+ AMMO(ITEM_DEKU_NUT)++;
+ if (AMMO(ITEM_DEKU_NUT) > CUR_CAPACITY(UPG_DEKU_NUTS)) {
+ AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS);
}
}
- } else if ((item == ITEM_NUTS_5) || (item == ITEM_NUTS_10)) {
- if (INV_CONTENT(ITEM_NUT) != ITEM_NUT) {
- Inventory_ChangeUpgrade(UPG_NUTS, 1);
- AMMO(ITEM_NUT) += sAmmoRefillCounts[item - ITEM_NUTS_5];
+ } else if ((item == ITEM_DEKU_NUTS_5) || (item == ITEM_DEKU_NUTS_10)) {
+ if (INV_CONTENT(ITEM_DEKU_NUT) != ITEM_DEKU_NUT) {
+ Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1);
+ AMMO(ITEM_DEKU_NUT) += sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5];
} else {
- AMMO(ITEM_NUT) += sAmmoRefillCounts[item - ITEM_NUTS_5];
- if (AMMO(ITEM_NUT) > CUR_CAPACITY(UPG_NUTS)) {
- AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS);
+ AMMO(ITEM_DEKU_NUT) += sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5];
+ if (AMMO(ITEM_DEKU_NUT) > CUR_CAPACITY(UPG_DEKU_NUTS)) {
+ AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS);
}
}
- item = ITEM_NUT;
+ item = ITEM_DEKU_NUT;
} else if (item == ITEM_POWDER_KEG) {
if (INV_CONTENT(ITEM_POWDER_KEG) != ITEM_POWDER_KEG) {
@@ -2766,8 +2782,8 @@ u8 Item_Give(PlayState* play, u8 item) {
}
return ITEM_BOW;
- } else if (item == ITEM_OCARINA) {
- INV_CONTENT(ITEM_OCARINA) = ITEM_OCARINA;
+ } else if (item == ITEM_OCARINA_OF_TIME) {
+ INV_CONTENT(ITEM_OCARINA_OF_TIME) = ITEM_OCARINA_OF_TIME;
return ITEM_NONE;
} else if (item == ITEM_MAGIC_BEANS) {
@@ -2789,7 +2805,7 @@ u8 Item_Give(PlayState* play, u8 item) {
Health_ChangeBy(play, 0x10);
return item;
- } else if (item == ITEM_MAGIC_SMALL) {
+ } else if (item == ITEM_MAGIC_JAR_SMALL) {
Magic_Add(play, MAGIC_NORMAL_METER / 2);
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) {
SET_WEEKEVENTREG(WEEKEVENTREG_12_80);
@@ -2797,7 +2813,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
return item;
- } else if (item == ITEM_MAGIC_LARGE) {
+ } else if (item == ITEM_MAGIC_JAR_BIG) {
Magic_Add(play, MAGIC_NORMAL_METER);
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) {
SET_WEEKEVENTREG(WEEKEVENTREG_12_80);
@@ -2899,10 +2915,10 @@ u8 Item_Give(PlayState* play, u8 item) {
}
}
- } else if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_MASK_GIANT)) {
+ } else if ((item >= ITEM_MOONS_TEAR) && (item <= ITEM_MASK_GIANT)) {
temp = INV_CONTENT(item);
INV_CONTENT(item) = item;
- if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_PENDANT_OF_MEMORIES) && (temp != ITEM_NONE)) {
+ if ((item >= ITEM_MOONS_TEAR) && (item <= ITEM_PENDANT_OF_MEMORIES) && (temp != ITEM_NONE)) {
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (temp == GET_CUR_FORM_BTN_ITEM(i)) {
SET_CUR_FORM_BTN_ITEM(i, item);
@@ -2925,8 +2941,8 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
u8 bottleSlot;
slot = SLOT(item);
- if (item >= ITEM_STICKS_5) {
- slot = SLOT(sExtraItemBases[item - ITEM_STICKS_5]);
+ if (item >= ITEM_DEKU_STICKS_5) {
+ slot = SLOT(sExtraItemBases[item - ITEM_DEKU_STICKS_5]);
}
if (item == ITEM_SKULL_TOKEN) {
@@ -2953,8 +2969,8 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
} else if (item == ITEM_KEY_SMALL) {
return ITEM_NONE;
- } else if ((item == ITEM_OCARINA) || (item == ITEM_BOMBCHU) || (item == ITEM_HOOKSHOT) || (item == ITEM_LENS) ||
- (item == ITEM_SWORD_GREAT_FAIRY) || (item == ITEM_PICTO_BOX)) {
+ } else if ((item == ITEM_OCARINA_OF_TIME) || (item == ITEM_BOMBCHU) || (item == ITEM_HOOKSHOT) ||
+ (item == ITEM_LENS_OF_TRUTH) || (item == ITEM_SWORD_GREAT_FAIRY) || (item == ITEM_PICTOGRAPH_BOX)) {
if (INV_CONTENT(item) == ITEM_NONE) {
return ITEM_NONE;
}
@@ -2988,7 +3004,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
}
return 0;
- } else if ((item >= ITEM_STICK_UPGRADE_20) && (item <= ITEM_NUT_UPGRADE_40)) {
+ } else if ((item >= ITEM_DEKU_STICK_UPGRADE_20) && (item <= ITEM_DEKU_NUT_UPGRADE_40)) {
return ITEM_NONE;
} else if ((item >= ITEM_BOMB_BAG_30) && (item <= ITEM_WALLET_GIANT)) {
@@ -3009,7 +3025,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
} else if (item == ITEM_RECOVERY_HEART) {
return ITEM_RECOVERY_HEART;
- } else if ((item == ITEM_MAGIC_SMALL) || (item == ITEM_MAGIC_LARGE)) {
+ } else if ((item == ITEM_MAGIC_JAR_SMALL) || (item == ITEM_MAGIC_JAR_BIG)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_12_80)) {
return ITEM_NONE;
}
@@ -3066,7 +3082,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) {
}
}
}
- } else if ((item >= ITEM_MOON_TEAR) && (item <= ITEM_MASK_GIANT)) {
+ } else if ((item >= ITEM_MOONS_TEAR) && (item <= ITEM_MASK_GIANT)) {
return ITEM_NONE;
}
@@ -3129,10 +3145,8 @@ void Inventory_UpdateDeitySwordEquip(PlayState* play) {
interfaceCtx->unk_21C = 0;
interfaceCtx->bButtonDoAction = 0;
- // Is simply checking if (gSaveContext.save.playerForm == PLAYER_FORM_FIERCE_DEITY)
- if ((((gSaveContext.save.playerForm > 0) && (gSaveContext.save.playerForm < 4))
- ? 1
- : gSaveContext.save.playerForm >> 1) == 0) {
+ // Is simply checking if (GET_PLAYER_FORM == PLAYER_FORM_FIERCE_DEITY)
+ if ((((GET_PLAYER_FORM > 0) && (GET_PLAYER_FORM < 4)) ? 1 : GET_PLAYER_FORM >> 1) == 0) {
CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_SWORD_DEITY;
} else if (CUR_FORM_EQUIP(EQUIP_SLOT_B) == ITEM_SWORD_DEITY) {
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
@@ -3250,7 +3264,7 @@ void func_80115428(InterfaceContext* interfaceCtx, u16 doAction, s16 loadOffset)
*/
s32 Health_ChangeBy(PlayState* play, s16 healthChange) {
if (healthChange > 0) {
- play_sound(NA_SE_SY_HP_RECOVER);
+ Audio_PlaySfx(NA_SE_SY_HP_RECOVER);
} else if (gSaveContext.save.saveInfo.playerData.doubleDefense && (healthChange < 0)) {
healthChange >>= 1;
}
@@ -3279,22 +3293,22 @@ void Rupees_ChangeBy(s16 rupeeChange) {
}
void Inventory_ChangeAmmo(s16 item, s16 ammoChange) {
- if (item == ITEM_STICK) {
- AMMO(ITEM_STICK) += ammoChange;
+ if (item == ITEM_DEKU_STICK) {
+ AMMO(ITEM_DEKU_STICK) += ammoChange;
- if (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) {
- AMMO(ITEM_STICK) = CUR_CAPACITY(UPG_STICKS);
- } else if (AMMO(ITEM_STICK) < 0) {
- AMMO(ITEM_STICK) = 0;
+ if (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS)) {
+ AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS);
+ } else if (AMMO(ITEM_DEKU_STICK) < 0) {
+ AMMO(ITEM_DEKU_STICK) = 0;
}
- } else if (item == ITEM_NUT) {
- AMMO(ITEM_NUT) += ammoChange;
+ } else if (item == ITEM_DEKU_NUT) {
+ AMMO(ITEM_DEKU_NUT) += ammoChange;
- if (AMMO(ITEM_NUT) >= CUR_CAPACITY(UPG_NUTS)) {
- AMMO(ITEM_NUT) = CUR_CAPACITY(UPG_NUTS);
- } else if (AMMO(ITEM_NUT) < 0) {
- AMMO(ITEM_NUT) = 0;
+ if (AMMO(ITEM_DEKU_NUT) >= CUR_CAPACITY(UPG_DEKU_NUTS)) {
+ AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS);
+ } else if (AMMO(ITEM_DEKU_NUT) < 0) {
+ AMMO(ITEM_DEKU_NUT) = 0;
}
} else if (item == ITEM_BOMBCHU) {
@@ -3369,7 +3383,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
// Not enough magic available to consume
if ((gSaveContext.save.saveInfo.playerData.magic - magicToConsume) < 0) {
if (gSaveContext.magicCapacity != 0) {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
}
return false;
}
@@ -3390,7 +3404,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
return true;
} else {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
return false;
}
@@ -3409,7 +3423,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_3;
return true;
} else {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
return false;
}
@@ -3440,7 +3454,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_2;
return true;
} else {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
return false;
}
@@ -3484,7 +3498,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
gSaveContext.save.saveInfo.playerData.magic -= magicToConsume;
return true;
} else {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
return false;
}
}
@@ -3495,7 +3509,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) {
void Magic_UpdateAddRequest(void) {
if (gSaveContext.isMagicRequested) {
gSaveContext.save.saveInfo.playerData.magic += 4;
- play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG);
+ Audio_PlaySfx(NA_SE_SY_GAUGE_UP - SFX_FLAG);
if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) {
gSaveContext.save.saveInfo.playerData.magic = gSaveContext.magicCapacity;
@@ -3599,7 +3613,7 @@ void Magic_Update(PlayState* play) {
gSaveContext.save.saveInfo.playerData.magic += 0x10;
if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.sceneLayer < 4)) {
- play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG);
+ Audio_PlaySfx(NA_SE_SY_GAUGE_UP - SFX_FLAG);
}
if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicFillTarget)) {
@@ -3649,13 +3663,13 @@ void Magic_Update(PlayState* play) {
if ((gSaveContext.save.saveInfo.playerData.magic == 0) ||
((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
(Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) ||
- ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS) &&
- (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS) &&
- (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS)) ||
+ ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS_OF_TRUTH) &&
+ (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS_OF_TRUTH) &&
+ (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS_OF_TRUTH)) ||
!play->actorCtx.lensActive) {
// Deactivate Lens of Truth and set magic state to idle
play->actorCtx.lensActive = false;
- play_sound(NA_SE_SY_GLASSMODE_OFF);
+ Audio_PlaySfx(NA_SE_SY_GLASSMODE_OFF);
gSaveContext.magicState = MAGIC_STATE_IDLE;
sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255;
break;
@@ -3849,8 +3863,12 @@ void Interface_DrawItemButtons(PlayState* play) {
// Remnant of OoT
130, 136, 136, 136, 136,
};
- static s16 D_801BFAF4[] = { 0x1D, 0x1B };
- static s16 D_801BFAF8[] = { 0x1B, 0x1B };
+ static s16 D_801BFAF4[] = {
+ 0x1D, // EQUIP_SLOT_B
+ 0x1B, // EQUIP_SLOT_C_LEFT
+ 0x1B, // EQUIP_SLOT_C_DOWN
+ 0x1B, // EQUIP_SLOT_C_RIGHT
+ };
InterfaceContext* interfaceCtx = &play->interfaceCtx;
Player* player = GET_PLAYER(play);
PauseContext* pauseCtx = &play->pauseCtx;
@@ -3864,21 +3882,27 @@ void Interface_DrawItemButtons(PlayState* play) {
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
// B Button Color & Texture
- OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[0],
- D_801BF9DC[0], D_801BFAF4[0], D_801BFAF4[0], D_801BF9E4[0] * 2,
- D_801BF9E4[0] * 2, 100, 255, 120, interfaceCtx->bAlpha);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(
+ OVERLAY_DISP, gButtonBackgroundTex, 0x20, 0x20, D_801BF9D4[EQUIP_SLOT_B], D_801BF9DC[EQUIP_SLOT_B],
+ D_801BFAF4[EQUIP_SLOT_B], D_801BFAF4[EQUIP_SLOT_B], D_801BF9E4[EQUIP_SLOT_B] * 2, D_801BF9E4[EQUIP_SLOT_B] * 2,
+ 100, 255, 120, interfaceCtx->bAlpha);
gDPPipeSync(OVERLAY_DISP++);
// C-Left Button Color & Texture
- OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[1], D_801BF9DC[1], D_801BFAF4[1], D_801BFAF4[1],
- D_801BF9E4[1] * 2, D_801BF9E4[1] * 2, 255, 240, 0, interfaceCtx->cLeftAlpha);
+ OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[EQUIP_SLOT_C_LEFT], D_801BF9DC[EQUIP_SLOT_C_LEFT],
+ D_801BFAF4[EQUIP_SLOT_C_LEFT], D_801BFAF4[EQUIP_SLOT_C_LEFT],
+ D_801BF9E4[EQUIP_SLOT_C_LEFT] * 2, D_801BF9E4[EQUIP_SLOT_C_LEFT] * 2, 255,
+ 240, 0, interfaceCtx->cLeftAlpha);
// C-Down Button Color & Texture
- OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D8[0], D_801BF9E0[0], D_801BFAF8[0], D_801BFAF8[0],
- D_801BF9E4[2] * 2, D_801BF9E4[2] * 2, 255, 240, 0, interfaceCtx->cDownAlpha);
+ OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[EQUIP_SLOT_C_DOWN], D_801BF9DC[EQUIP_SLOT_C_DOWN],
+ D_801BFAF4[EQUIP_SLOT_C_DOWN], D_801BFAF4[EQUIP_SLOT_C_DOWN],
+ D_801BF9E4[EQUIP_SLOT_C_DOWN] * 2, D_801BF9E4[EQUIP_SLOT_C_DOWN] * 2, 255,
+ 240, 0, interfaceCtx->cDownAlpha);
// C-Right Button Color & Texture
- OVERLAY_DISP =
- Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D8[1], D_801BF9E0[1], D_801BFAF8[1], D_801BFAF8[1],
- D_801BF9E4[3] * 2, D_801BF9E4[3] * 2, 255, 240, 0, interfaceCtx->cRightAlpha);
+ OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, D_801BF9D4[EQUIP_SLOT_C_RIGHT], D_801BF9DC[EQUIP_SLOT_C_RIGHT],
+ D_801BFAF4[EQUIP_SLOT_C_RIGHT], D_801BFAF4[EQUIP_SLOT_C_RIGHT],
+ D_801BF9E4[EQUIP_SLOT_C_RIGHT] * 2, D_801BF9E4[EQUIP_SLOT_C_RIGHT] * 2, 255,
+ 240, 0, interfaceCtx->cRightAlpha);
if (!IS_PAUSE_STATE_GAMEOVER) {
if ((play->pauseCtx.state != PAUSE_STATE_OFF) || (play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE)) {
@@ -3984,17 +4008,17 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
i = ((void)0, GET_CUR_FORM_BTN_ITEM(button));
- if ((i == ITEM_STICK) || (i == ITEM_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) ||
- ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) || (i == ITEM_BOMBCHU) || (i == ITEM_POWDER_KEG) ||
- (i == ITEM_MAGIC_BEANS) || (i == ITEM_PICTO_BOX)) {
+ if ((i == ITEM_DEKU_STICK) || (i == ITEM_DEKU_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) ||
+ ((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) || (i == ITEM_BOMBCHU) || (i == ITEM_POWDER_KEG) ||
+ (i == ITEM_MAGIC_BEANS) || (i == ITEM_PICTOGRAPH_BOX)) {
- if ((i >= ITEM_BOW_ARROW_FIRE) && (i <= ITEM_BOW_ARROW_LIGHT)) {
+ if ((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) {
i = ITEM_BOW;
}
ammo = AMMO(i);
- if (i == ITEM_PICTO_BOX) {
+ if (i == ITEM_PICTOGRAPH_BOX) {
if (!CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) {
ammo = 0;
} else {
@@ -4010,10 +4034,10 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
ammo = play->unk_1887C - 1;
} else if (((i == ITEM_BOW) && (AMMO(i) == CUR_CAPACITY(UPG_QUIVER))) ||
((i == ITEM_BOMB) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
- ((i == ITEM_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_STICKS))) ||
- ((i == ITEM_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_NUTS))) ||
+ ((i == ITEM_DEKU_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_DEKU_STICKS))) ||
+ ((i == ITEM_DEKU_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_DEKU_NUTS))) ||
((i == ITEM_BOMBCHU) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
- ((i == ITEM_POWDER_KEG) && (ammo == 1)) || ((i == ITEM_PICTO_BOX) && (ammo == 1)) ||
+ ((i == ITEM_POWDER_KEG) && (ammo == 1)) || ((i == ITEM_PICTOGRAPH_BOX) && (ammo == 1)) ||
((i == ITEM_MAGIC_BEANS) && (ammo == 20))) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, alpha);
}
@@ -4064,7 +4088,7 @@ void Interface_DrawBButtonIcons(PlayState* play) {
((BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) < ITEM_SWORD_KOKIRI) ||
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) > ITEM_SWORD_GILDED)) &&
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) &&
- (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NUT))) {
+ (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_DEKU_NUT))) {
if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) || (player->transformation == PLAYER_FORM_HUMAN)) {
if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment, EQUIP_SLOT_B);
@@ -4078,7 +4102,7 @@ void Interface_DrawBButtonIcons(PlayState* play) {
(play->sceneId != SCENE_BOWLING) &&
((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) ||
(gSaveContext.save.entrance != ENTRANCE(ROMANI_RANCH, 0))) &&
- ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) || !(CHECK_EVENTINF(EVENTINF_35))) &&
+ ((gSaveContext.minigameStatus != MINIGAME_STATUS_ACTIVE) || !CHECK_EVENTINF(EVENTINF_35)) &&
(!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_80) || (play->unk_1887C != 100))) {
Interface_DrawAmmoCount(play, EQUIP_SLOT_B, interfaceCtx->bAlpha);
}
@@ -4295,7 +4319,7 @@ void Interface_DrawPauseMenuEquippingIcons(PlayState* play) {
}
gSPVertex(OVERLAY_DISP++, &pauseCtx->cursorVtx[16], 4, 0);
- gDPLoadTextureBlock(OVERLAY_DISP++, &D_08095AC0, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0,
+ gDPLoadTextureBlock(OVERLAY_DISP++, gMagicArrowEquipEffectTex, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK,
G_TX_NOLOD, G_TX_NOLOD);
}
@@ -5761,16 +5785,16 @@ void Interface_DrawTimers(PlayState* play) {
// Use seconds to determine when to beep
if (gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(60)) {
if ((sTimerBeepSfxSeconds != sTimerDigits[4]) && (sTimerDigits[4] == 1)) {
- play_sound(NA_SE_SY_MESSAGE_WOMAN);
+ Audio_PlaySfx(NA_SE_SY_MESSAGE_WOMAN);
sTimerBeepSfxSeconds = sTimerDigits[4];
}
} else if (gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(10)) {
if ((sTimerBeepSfxSeconds != sTimerDigits[4]) && ((sTimerDigits[4] % 2) != 0)) {
- play_sound(NA_SE_SY_WARNING_COUNT_N);
+ Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_N);
sTimerBeepSfxSeconds = sTimerDigits[4];
}
} else if (sTimerBeepSfxSeconds != sTimerDigits[4]) {
- play_sound(NA_SE_SY_WARNING_COUNT_E);
+ Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E);
sTimerBeepSfxSeconds = sTimerDigits[4];
}
} else { // TIMER_COUNT_UP
@@ -5814,7 +5838,7 @@ void Interface_DrawTimers(PlayState* play) {
(gSaveContext.save.entrance == ENTRANCE(ROMANI_RANCH, 0))) {
if ((gSaveContext.timerCurTimes[sTimerId] > SECONDS_TO_TIMER(110)) &&
(sTimerBeepSfxSeconds != sTimerDigits[4])) {
- play_sound(NA_SE_SY_WARNING_COUNT_E);
+ Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E);
sTimerBeepSfxSeconds = sTimerDigits[4];
}
} else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) {
@@ -5822,7 +5846,7 @@ void Interface_DrawTimers(PlayState* play) {
(gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] -
SECONDS_TO_TIMER(9))) &&
(sTimerBeepSfxSeconds != sTimerDigits[4])) {
- play_sound(NA_SE_SY_WARNING_COUNT_E);
+ Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E);
sTimerBeepSfxSeconds = sTimerDigits[4];
}
}
@@ -6383,7 +6407,7 @@ void Interface_Draw(PlayState* play) {
Interface_DrawItemButtons(play);
- if (player->transformation == ((void)0, gSaveContext.save.playerForm)) {
+ if (player->transformation == GET_PLAYER_FORM) {
Interface_DrawBButtonIcons(play);
}
Interface_DrawCButtonIcons(play);
@@ -6606,7 +6630,7 @@ void Interface_Update(PlayState* play) {
case HUD_VISIBILITY_NONE:
case HUD_VISIBILITY_NONE_ALT:
case HUD_VISIBILITY_B:
- dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32);
if (dimmingAlpha < 0) {
dimmingAlpha = 0;
}
@@ -6637,7 +6661,7 @@ void Interface_Update(PlayState* play) {
case HUD_VISIBILITY_B_MAGIC:
case HUD_VISIBILITY_A_B:
case HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP:
- dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32);
if (dimmingAlpha < 0) {
dimmingAlpha = 0;
}
@@ -6650,7 +6674,7 @@ void Interface_Update(PlayState* play) {
break;
case HUD_VISIBILITY_ALL:
- dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5);
+ dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32);
if (dimmingAlpha < 0) {
dimmingAlpha = 0;
}
@@ -6716,7 +6740,7 @@ void Interface_Update(PlayState* play) {
gSaveContext.save.saveInfo.playerData.health += 4;
if ((gSaveContext.save.saveInfo.playerData.health & 0xF) < 4) {
- play_sound(NA_SE_SY_HP_RECOVER);
+ Audio_PlaySfx(NA_SE_SY_HP_RECOVER);
}
if (((void)0, gSaveContext.save.saveInfo.playerData.health) >=
@@ -6749,7 +6773,7 @@ void Interface_Update(PlayState* play) {
if (gSaveContext.save.saveInfo.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) {
gSaveContext.rupeeAccumulator--;
gSaveContext.save.saveInfo.playerData.rupees++;
- play_sound(NA_SE_SY_RUPY_COUNT);
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
} else {
// Max rupees
gSaveContext.save.saveInfo.playerData.rupees = CUR_CAPACITY(UPG_WALLET);
@@ -6762,11 +6786,11 @@ void Interface_Update(PlayState* play) {
if (gSaveContext.save.saveInfo.playerData.rupees < 0) {
gSaveContext.save.saveInfo.playerData.rupees = 0;
}
- play_sound(NA_SE_SY_RUPY_COUNT);
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
} else {
gSaveContext.rupeeAccumulator++;
gSaveContext.save.saveInfo.playerData.rupees--;
- play_sound(NA_SE_SY_RUPY_COUNT);
+ Audio_PlaySfx(NA_SE_SY_RUPY_COUNT);
}
} else {
gSaveContext.rupeeAccumulator = 0;
@@ -6799,9 +6823,9 @@ void Interface_Update(PlayState* play) {
interfaceCtx->minigameState++;
if (interfaceCtx->minigameState == MINIGAME_STATE_COUNTDOWN_GO) {
interfaceCtx->minigameCountdownScale = 160;
- play_sound(NA_SE_SY_START_SHOT);
+ Audio_PlaySfx(NA_SE_SY_START_SHOT);
} else {
- play_sound(NA_SE_SY_WARNING_COUNT_E);
+ Audio_PlaySfx(NA_SE_SY_WARNING_COUNT_E);
}
break;
@@ -6924,7 +6948,7 @@ void Interface_Update(PlayState* play) {
gSaveContext.magicFillTarget = gSaveContext.save.saveInfo.playerData.magic;
gSaveContext.save.saveInfo.playerData.magic = 0;
gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY;
- BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_NUT;
+ BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_DEKU_NUT;
}
Magic_Update(play);
diff --git a/src/code/z_play.c b/src/code/z_play.c
index b2e0fc0a6..cef76a1db 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -1,11 +1,33 @@
-#include "global.h"
+#include "z64.h"
+#include "regs.h"
+#include "functions.h"
+#include "z64vismono.h"
+
+// Variables are put before most headers as a hacky way to bypass bss reordering
+s16 sTransitionFillTimer;
+Input D_801F6C18;
+TransitionTile sTransitionTile;
+s32 gTransitionTileState;
+VisMono sPlayVisMono;
+Color_RGBA8_u32 gVisMonoColor;
+Struct_80140E80 D_801F6D38;
+Struct_80140E80* D_801F6D4C;
+BombersNotebook sBombersNotebook;
+u8 sBombersNotebookOpen;
+u8 sMotionBlurStatus;
+
+#include "variables.h"
+#include "macros.h"
#include "buffers.h"
+#include "idle.h"
+#include "sys_cfb.h"
#include "z64bombers_notebook.h"
#include "z64debug_display.h"
#include "z64quake.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
#include "z64view.h"
+
#include "overlays/gamestates/ovl_daytelop/z_daytelop.h"
#include "overlays/gamestates/ovl_opening/z_opening.h"
#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
@@ -14,18 +36,6 @@
s32 gDbgCamEnabled = false;
u8 D_801D0D54 = false;
-s16 sTransitionFillTimer;
-Input D_801F6C18;
-TransitionTile sTransitionTile;
-s32 gTransitionTileState;
-VisMono sVisMono;
-Color_RGBA8_u32 gVisMonoColor;
-Struct_80140E80 D_801F6D38;
-Struct_80140E80* D_801F6D4C;
-BombersNotebook sBombersNotebook;
-u8 sBombersNotebookOpen;
-u8 sMotionBlurStatus;
-
typedef enum {
/* 0 */ MOTION_BLUR_OFF,
/* 1 */ MOTION_BLUR_SETUP,
@@ -404,7 +414,7 @@ void Play_Destroy(GameState* thisx) {
ShrinkWindow_Destroy();
TransitionFade_Destroy(&this->unk_18E48);
- VisMono_Destroy(&sVisMono);
+ VisMono_Destroy(&sPlayVisMono);
func_80140EA0(D_801F6D4C);
D_801F6D4C = NULL;
@@ -718,7 +728,7 @@ void Play_UpdateTransition(PlayState* this) {
if (gTransitionTileState == TRANS_TILE_READY) {
TransitionTile_Destroy(&sTransitionTile);
gTransitionTileState = TRANS_TILE_OFF;
- Game_SetFramerateDivisor(&this->state, 3);
+ GameState_SetFramerateDivisor(&this->state, 3);
}
}
this->transitionTrigger = TRANS_TRIGGER_OFF;
@@ -765,7 +775,7 @@ void Play_UpdateTransition(PlayState* this) {
if (sTransitionFillTimer >= 20) {
gTransitionTileState = TRANS_TILE_OFF;
- Game_SetFramerateDivisor(&this->state, 3);
+ GameState_SetFramerateDivisor(&this->state, 3);
this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF;
this->envCtx.fillScreen = false;
@@ -799,7 +809,7 @@ void Play_UpdateTransition(PlayState* this) {
this->transitionMode = TRANS_MODE_OFF;
} else {
gTransitionTileState = TRANS_TILE_OFF;
- Game_SetFramerateDivisor(&this->state, 3);
+ GameState_SetFramerateDivisor(&this->state, 3);
this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF;
}
@@ -824,11 +834,11 @@ void Play_UpdateTransition(PlayState* this) {
break;
case TRANS_MODE_SANDSTORM:
- func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG);
if (this->transitionTrigger == TRANS_TRIGGER_END) {
if (this->envCtx.sandstormPrimA < 110) {
gTransitionTileState = TRANS_TILE_OFF;
- Game_SetFramerateDivisor(&this->state, 3);
+ GameState_SetFramerateDivisor(&this->state, 3);
this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF;
}
@@ -859,12 +869,12 @@ void Play_UpdateTransition(PlayState* this) {
break;
case TRANS_MODE_SANDSTORM_END:
- func_8019F128(NA_SE_EV_SAND_STORM - SFX_FLAG);
+ Audio_PlaySfx_2(NA_SE_EV_SAND_STORM - SFX_FLAG);
if (this->transitionTrigger == TRANS_TRIGGER_END) {
if (this->envCtx.sandstormPrimA <= 0) {
gTransitionTileState = TRANS_TILE_OFF;
- Game_SetFramerateDivisor(&this->state, 3);
+ GameState_SetFramerateDivisor(&this->state, 3);
this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF;
}
@@ -887,7 +897,7 @@ void Play_UpdateTransition(PlayState* this) {
if (gSaveContext.cutsceneTransitionControl <= 100) {
gTransitionTileState = TRANS_TILE_OFF;
- Game_SetFramerateDivisor(&this->state, 3);
+ GameState_SetFramerateDivisor(&this->state, 3);
this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF;
}
@@ -935,7 +945,7 @@ void Play_UpdateMain(PlayState* this) {
} else {
sTransitionTile.zBuffer = gZBufferPtr;
gTransitionTileState = TRANS_TILE_READY;
- Game_SetFramerateDivisor(&this->state, 1);
+ GameState_SetFramerateDivisor(&this->state, 1);
}
break;
@@ -1064,7 +1074,7 @@ void Play_Update(PlayState* this) {
this->msgCtx.msgMode = 0;
this->msgCtx.currentTextId = 0;
this->msgCtx.stateTimer = 0;
- play_sound(NA_SE_SY_CANCEL);
+ Audio_PlaySfx(NA_SE_SY_CANCEL);
}
if (sBombersNotebookOpen) {
BombersNotebook_Update(this, &sBombersNotebook, this->state.input);
@@ -1225,8 +1235,8 @@ void Play_DrawMain(PlayState* this) {
TransitionFade_Draw(&this->unk_18E48, &sp218);
if (gVisMonoColor.a != 0) {
- sVisMono.primColor.rgba = gVisMonoColor.rgba;
- VisMono_Draw(&sVisMono, &sp218);
+ sPlayVisMono.primColor.rgba = gVisMonoColor.rgba;
+ VisMono_Draw(&sPlayVisMono, &sp218);
}
gSPEndDisplayList(sp218++);
@@ -2090,8 +2100,8 @@ void Play_Init(GameState* thisx) {
s32 scene;
if ((gSaveContext.respawnFlag == -4) || (gSaveContext.respawnFlag == -0x63)) {
- if (CHECK_EVENTINF(EVENTINF_27)) {
- CLEAR_EVENTINF(EVENTINF_27);
+ if (CHECK_EVENTINF(EVENTINF_TRIGGER_DAYTELOP)) {
+ CLEAR_EVENTINF(EVENTINF_TRIGGER_DAYTELOP);
STOP_GAMESTATE(&this->state);
SET_NEXT_GAMESTATE(&this->state, DayTelop_Init, sizeof(DayTelopState));
return;
@@ -2148,7 +2158,7 @@ void Play_Init(GameState* thisx) {
}
// "First cycle" Termina Field
- if (INV_CONTENT(ITEM_OCARINA) != ITEM_OCARINA) {
+ if (INV_CONTENT(ITEM_OCARINA_OF_TIME) != ITEM_OCARINA_OF_TIME) {
if ((scene == ENTR_SCENE_TERMINA_FIELD) &&
(((void)0, gSaveContext.save.entrance) != ENTRANCE(TERMINA_FIELD, 10))) {
gSaveContext.nextCutsceneIndex = 0xFFF4;
@@ -2297,7 +2307,7 @@ void Play_Init(GameState* thisx) {
TransitionFade_SetType(&this->unk_18E48, 3);
TransitionFade_SetColor(&this->unk_18E48, RGBA8(160, 160, 160, 255));
TransitionFade_Start(&this->unk_18E48);
- VisMono_Init(&sVisMono);
+ VisMono_Init(&sPlayVisMono);
gVisMonoColor.a = 0;
D_801F6D4C = &D_801F6D38;
diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c
index b995028ca..1b2572ea8 100644
--- a/src/code/z_play_hireso.c
+++ b/src/code/z_play_hireso.c
@@ -1,31 +1,8 @@
#include "global.h"
+#include "sys_cfb.h"
#include "z64bombers_notebook.h"
#include "interface/schedule_static/schedule_static.h"
-
-// TODO: Needs YAZ0
-// Segment 0x07 schedule_dma_static_test
-extern TexturePtr D_07000000;
-extern TexturePtr D_07000800;
-extern TexturePtr D_07001000;
-extern TexturePtr D_07001800;
-extern TexturePtr D_07002000;
-extern TexturePtr D_07002800;
-extern TexturePtr D_07003000;
-extern TexturePtr D_07003800;
-extern TexturePtr D_07004000;
-extern TexturePtr D_07004800;
-extern TexturePtr D_07005000;
-extern TexturePtr D_07005800;
-extern TexturePtr D_07006000;
-extern TexturePtr D_07006800;
-extern TexturePtr D_07007000;
-extern TexturePtr D_07007800;
-extern TexturePtr D_07008000;
-extern TexturePtr D_07008800;
-extern TexturePtr D_07009000;
-extern TexturePtr D_07009800;
-extern TexturePtr D_0700AC00;
-extern TexturePtr D_0700AEA0;
+#include "archives/schedule_dma_static/schedule_dma_static_yar.h"
#define BOMBERS_NOTEBOOK_ENTRY_SIZE 3
#define BOMBERS_NOTEBOOK_ENTRY_MAX 10
@@ -276,9 +253,9 @@ u16 sBombersNotebookEntries[BOMBERS_NOTEBOOK_PERSON_MAX][BOMBERS_NOTEBOOK_ENTRY_
s16 sBombersNotebookDayRectRectLeft[] = { 120, 120, 270, 420 };
TexturePtr sBombersNotebookDayTextures[] = {
- gBombersNotebookDay1stTex,
- gBombersNotebookDay2ndTex,
- gBombersNotebookDayFinalTex,
+ gBombersNotebookDay1stENGTex,
+ gBombersNotebookDay2ndENGTex,
+ gBombersNotebookDayFinalENGTex,
};
#define DEFINE_EVENT(_enum, icon, _colorFlag, _description, _completedMessage, _completedFlag) icon,
@@ -395,8 +372,8 @@ void BombersNotebook_DrawColumns(Gfx** gfxP) {
TexturePtr sBombersNotebookEventIconTextures[] = {
gBombersNotebookEntryIconExclamationPointTex,
- &D_0700AC00,
- &D_0700AEA0,
+ gBombersNotebookEntryIconMaskTex,
+ gBombersNotebookEntryIconRibbonTex,
};
s16 sBombersNotebookEntryIconColors[][3] = {
{ 255, 255, 0 },
@@ -574,7 +551,7 @@ void BombersNotebook_DrawEntries(Gfx** gfxP, s32 row, u32 rectTop) {
*gfxP = gfx;
}
-#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) &photo,
+#define DEFINE_PERSON(_enum, photo, _description, _metEnum, _metMessage, _metFlag) photo,
TexturePtr sBombersNotebookPhotoTextures[] = {
#include "tables/bombers_notebook/person_table.h"
@@ -745,7 +722,7 @@ void BombersNotebook_DrawTimeOfDay(Gfx** gfxP) {
gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, 255);
gDPPipeSync(gfx++);
gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
- gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP,
+ gDPLoadTextureBlock_4b(gfx++, gBombersNotebookTimeOfDayENGTex, G_IM_FMT_I, 96, 20, 0, G_TX_MIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
BombersNotebook_DrawScisTexRect(&gfx, (timeOfDayRectLeft + 16) * 4, 47 * 4, (timeOfDayRectLeft + 112) * 4, 67 * 4,
@@ -1163,8 +1140,8 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
s32 stickAdjY = input->rel.stick_y;
s32 cursorEntryScan;
- this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_test);
- this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_old);
+ this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_yar);
+ this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_syms);
this->scheduleSegmentStart = SEGMENT_ROM_START(schedule_static);
this->scheduleSegmentSize = SEGMENT_ROM_SIZE(schedule_static);
@@ -1247,13 +1224,13 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
while (true) {
cursorEntryScan -= BOMBERS_NOTEBOOK_ENTRY_SIZE;
if (cursorEntryScan == 0) {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
break;
}
if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
this->cursorPageRow + this->cursorPage,
cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
break;
}
}
@@ -1262,7 +1239,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
this->cursorPageRow + this->cursorPage,
cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
break;
}
}
@@ -1274,7 +1251,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
if (CHECK_WEEKEVENTREG(gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_ENTRY_GET_EVENT(
this->cursorPageRow + this->cursorPage,
cursorEntryScan - BOMBERS_NOTEBOOK_ENTRY_SIZE)])) {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
break;
}
} while (cursorEntryScan != 0);
@@ -1300,7 +1277,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
if (stickAdjY < -30) {
if (this->cursorPageRow < 3) {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
this->cursorEntry = 0;
this->cursorPageRow++;
} else if (this->cursorPage < (BOMBERS_NOTEBOOK_PERSON_MAX - 4)) {
@@ -1314,11 +1291,11 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
}
} else if (stickAdjY > 30) {
if (this->cursorPageRow > 0) {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
this->cursorEntry = 0;
this->cursorPageRow--;
} else if (this->cursorPage != 0) {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
this->cursorPage--;
if (sStickYRepeatState == 1) {
this->scrollAmount = 24;
@@ -1332,7 +1309,7 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input
} else if (this->scrollAmount < 0) {
this->scrollOffset += this->scrollAmount;
if (ABS_ALT(this->scrollOffset) >= 48) {
- play_sound(NA_SE_SY_CURSOR);
+ Audio_PlaySfx(NA_SE_SY_CURSOR);
this->scrollOffset = 0;
this->scrollAmount = 0;
this->cursorPage++;
diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c
index 6aee18baf..a109dab17 100644
--- a/src/code/z_player_call.c
+++ b/src/code/z_player_call.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#define FLAGS \
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 2e2d2222d..cd91ee42d 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -3,7 +3,6 @@
* Description: Set of library functions to interact with the Player system
*/
-#include "prevent_bss_reordering.h"
#include "global.h"
#include "objects/gameplay_keep/gameplay_keep.h"
@@ -495,7 +494,7 @@ void func_80123140(PlayState* play, Player* player) {
s32 Player_InBlockingCsMode(PlayState* play, Player* player) {
return (player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_200 | PLAYER_STATE1_20000000)) ||
- (player->csMode != PLAYER_CSMODE_0) || (play->transitionTrigger == TRANS_TRIGGER_START) ||
+ (player->csMode != PLAYER_CSMODE_NONE) || (play->transitionTrigger == TRANS_TRIGGER_START) ||
(play->transitionMode != TRANS_MODE_OFF) || (player->stateFlags1 & PLAYER_STATE1_1) ||
(player->stateFlags3 & PLAYER_STATE3_80) || (play->actorCtx.unk268 != 0);
}
@@ -637,7 +636,7 @@ PlayerItemAction func_80123810(PlayState* play) {
Interface_SetHudVisibility(play->msgCtx.unk_120BC);
if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) {
- play_sound(NA_SE_SY_ERROR);
+ Audio_PlaySfx(NA_SE_SY_ERROR);
return PLAYER_IA_MINUS1;
} else {
s32 pad;
@@ -655,12 +654,12 @@ PlayerItemAction func_80123810(PlayState* play) {
u8 sActionModelGroups[PLAYER_IA_MAX] = {
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NONE
PLAYER_MODELGROUP_13, // PLAYER_IA_LAST_USED
- PLAYER_MODELGROUP_STICK, // PLAYER_IA_FISHING_ROD
+ PLAYER_MODELGROUP_DEKU_STICK, // PLAYER_IA_FISHING_ROD
PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_KOKIRI
PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_RAZOR
PLAYER_MODELGROUP_ONE_HAND_SWORD, // PLAYER_IA_SWORD_GILDED
PLAYER_MODELGROUP_TWO_HAND_SWORD, // PLAYER_IA_SWORD_TWO_HANDED
- PLAYER_MODELGROUP_STICK, // PLAYER_IA_STICK
+ PLAYER_MODELGROUP_DEKU_STICK, // PLAYER_IA_DEKU_STICK
PLAYER_MODELGROUP_ZORA_FINS, // PLAYER_IA_ZORA_FINS
PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW
PLAYER_MODELGROUP_BOW, // PLAYER_IA_BOW_FIRE
@@ -671,8 +670,8 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_POWDER_KEG
PLAYER_MODELGROUP_EXPLOSIVES, // PLAYER_IA_BOMBCHU
PLAYER_MODELGROUP_8, // PLAYER_IA_11
- PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NUT
- PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTO_BOX
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEKU_NUT
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTOGRAPH_BOX
PLAYER_MODELGROUP_INSTRUMENT, // PLAYER_IA_OCARINA
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FISH
@@ -695,7 +694,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_MILK_HALF
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_CHATEAU
PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FAIRY
- PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MOON_TEAR
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MOONS_TEAR
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_DEED_LAND
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_ROOM_KEY
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LETTER_TO_KAFEI
@@ -735,7 +734,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = {
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_GORON
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_ZORA
PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_MASK_DEKU
- PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS
+ PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_LENS_OF_TRUTH
};
PlayerModelGroup Player_ActionToModelGroup(Player* player, PlayerItemAction itemAction) {
@@ -808,7 +807,7 @@ PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = {
/* PLAYER_MODELGROUP_HOOKSHOT */
{ PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_HOOKSHOT, PLAYER_MODELTYPE_SHEATH_14,
PLAYER_MODELTYPE_WAIST },
- /* PLAYER_MODELGROUP_STICK */
+ /* PLAYER_MODELGROUP_DEKU_STICK */
{ PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14,
PLAYER_MODELTYPE_WAIST },
/* PLAYER_MODELGROUP_INSTRUMENT */
@@ -1287,7 +1286,7 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup) {
void func_80123C58(Player* player) {
player->itemAction = player->heldItemAction;
Player_SetModelGroup(player, Player_ActionToModelGroup(player, player->heldItemAction));
- player->unk_AA5 = 0;
+ player->unk_AA5 = PLAYER_UNKAA5_0;
}
void Player_SetEquipmentData(PlayState* play, Player* player) {
@@ -1367,7 +1366,7 @@ s32 Player_IsBurningStickInRange(PlayState* play, Vec3f* pos, f32 xzRange, f32 y
Vec3f diff;
s32 pad;
- if ((player->heldItemAction == PLAYER_IA_STICK) && (player->unk_B28 != 0)) {
+ if ((player->heldItemAction == PLAYER_IA_DEKU_STICK) && (player->unk_B28 != 0)) {
Math_Vec3f_Diff(&player->meleeWeaponInfo[0].tip, pos, &diff);
return (SQXZ(diff) <= SQ(xzRange)) && (0.0f <= diff.y) && (diff.y <= yRange);
}
@@ -1446,7 +1445,7 @@ PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) {
s32 Player_IsHoldingTwoHandedWeapon(Player* player) {
// Relies on the itemActions for two-handed weapons being contiguous.
- if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_STICK)) {
+ if ((player->heldItemAction >= PLAYER_IA_SWORD_TWO_HANDED) && (player->heldItemAction <= PLAYER_IA_DEKU_STICK)) {
return true;
}
@@ -2314,7 +2313,7 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
Player* player = (Player*)actor;
if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, actor)) {
- if (player->unk_AA5 != 3) {
+ if (player->unk_AA5 != PLAYER_UNKAA5_3) {
*dList = NULL;
} else if (limbIndex == PLAYER_LIMB_LEFT_FOREARM) {
*dList = sPlayerFirstPersonLeftForearmDLs[player->transformation];
@@ -2529,9 +2528,9 @@ Gfx* D_801C0B20[] = {
object_mask_bakuretu_DL_0005C0, // PLAYER_MASK_BLAST
object_mask_bu_san_DL_000710, // PLAYER_MASK_SCENTS
object_mask_kyojin_DL_000380, // PLAYER_MASK_GIANT
- gameplay_keep_DL_00B260, // PLAYER_MASK_FIERCE_DEITY
- gameplay_keep_DL_005A10, // PLAYER_MASK_GORON
- gameplay_keep_DL_005360, // PLAYER_MASK_ZORA
+ gFierceDeityMaskDL, // PLAYER_MASK_FIERCE_DEITY
+ gGoronMaskDL, // PLAYER_MASK_GORON
+ gZoraMaskDL, // PLAYER_MASK_ZORA
gDekuMaskDL, // PLAYER_MASK_DEKU
object_mask_boy_DL_000900,
object_mask_goron_DL_0014A0,
@@ -3291,7 +3290,7 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) {
CLOSE_DISPS(play->state.gfxCtx);
}
- } else if (player->itemAction == PLAYER_IA_STICK) {
+ } else if (player->itemAction == PLAYER_IA_DEKU_STICK) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Push();
@@ -3322,10 +3321,10 @@ s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) {
Color_RGB8* bottleColor = &sPlayerBottleColors[bottle];
gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0);
- gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_000320);
+ gSPDisplayList(POLY_XLU_DISP++, gBottleContentsDL);
}
- gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0003E0);
+ gSPDisplayList(POLY_XLU_DISP++, gBottleGlassDL);
Matrix_Pop();
@@ -3415,17 +3414,17 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
3000.0f, // PLAYER_MELEEWEAPON_SWORD_RAZOR
4000.0f, // PLAYER_MELEEWEAPON_SWORD_GILDED
5500.0f, // PLAYER_MELEEWEAPON_SWORD_TWO_HANDED
- -1.0f, // PLAYER_MELEEWEAPON_STICK
+ -1.0f, // PLAYER_MELEEWEAPON_DEKU_STICK
2500.0f, // PLAYER_MELEEWEAPON_ZORA_FINS
};
if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) ||
((player->transformation != PLAYER_FORM_ZORA) &&
- ((player->itemAction == PLAYER_IA_STICK) ||
+ ((player->itemAction == PLAYER_IA_DEKU_STICK) ||
((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
(player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_RIGHT) &&
(player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))))) {
- if (player->itemAction == PLAYER_IA_STICK) {
+ if (player->itemAction == PLAYER_IA_DEKU_STICK) {
D_801C0994->x = player->unk_B0C * 5000.0f;
} else {
D_801C0994->x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(player)];
@@ -3527,7 +3526,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, G
if ((player->getItemDrawIdPlusOne != (GID_NONE + 1)) ||
((func_800B7118(player) == 0) && (heldActor != NULL))) {
if (!(player->stateFlags1 & PLAYER_STATE1_400) && (player->getItemDrawIdPlusOne != (GID_NONE + 1)) &&
- (player->exchangeItemId != PLAYER_IA_NONE)) {
+ (player->exchangeItemAction != PLAYER_IA_NONE)) {
Math_Vec3f_Copy(&sPlayerGetItemRefPos, &player->leftHandWorld.pos);
} else {
sPlayerGetItemRefPos.x =
diff --git a/src/code/z_prenmi.c b/src/code/z_prenmi.c
index 097d4d946..e1282db6b 100644
--- a/src/code/z_prenmi.c
+++ b/src/code/z_prenmi.c
@@ -8,7 +8,7 @@ void PreNMI_Stop(PreNMIState* this) {
void PreNMI_Update(PreNMIState* this) {
if (this->timer == 0) {
- ViConfig_UpdateVi(1);
+ ViConfig_UpdateVi(true);
PreNMI_Stop(this);
} else {
this->timer--;
@@ -50,5 +50,5 @@ void PreNMI_Init(GameState* thisx) {
this->timer = 30;
this->unk_A8 = 10;
- Game_SetFramerateDivisor(&this->state, 1);
+ GameState_SetFramerateDivisor(&this->state, 1);
}
diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c
index 4b5787129..0830fa572 100644
--- a/src/code/z_rcp.c
+++ b/src/code/z_rcp.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "sys_cfb.h"
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
Gfx gSetupDLs[SETUPDL_MAX][6] = {
@@ -1538,10 +1539,10 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
gSPDisplayList(DEBUG_DISP++, gGfxMasterDL->setupBuffers);
if (clearZb) {
- gSPDisplayList(gfxCtx->polyOpa.p++, D_0E000000.clearZBuffer);
+ gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearZBuffer);
}
if (clearFb) {
- gSPDisplayList(gfxCtx->polyOpa.p++, D_0E000000.clearFrameBuffer);
+ gSPDisplayList(POLY_OPA_DISP++, D_0E000000.clearFrameBuffer);
}
CLOSE_DISPS(gfxCtx);
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 368b4509e..529458f83 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -526,7 +526,7 @@ void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
// SceneTableEntry Header Command 0x1A: Material Animations
void Scene_CommandAnimatedMaterials(PlayState* play, SceneCmd* cmd) {
- play->sceneMaterialAnims = (AnimatedMaterial*)Lib_SegmentedToVirtual(cmd->textureAnimations.segment);
+ play->sceneMaterialAnims = Lib_SegmentedToVirtual(cmd->textureAnimations.segment);
}
/**
@@ -536,38 +536,38 @@ void Scene_SetExitFade(PlayState* play) {
play->transitionType = Entrance_GetTransitionFlags(play->nextEntrance) & 0x7F;
}
-void (*sSceneCmdHandlers[])(PlayState*, SceneCmd*) = {
- Scene_CommandSpawnList,
- Scene_CommandActorList,
- Scene_CommandActorCutsceneCamList,
- Scene_CommandCollisionHeader,
- Scene_CommandRoomList,
- Scene_CommandWindSettings,
- Scene_CommandEntranceList,
- Scene_CommandSpecialFiles,
- Scene_CommandRoomBehavior,
- Scene_Command09,
- Scene_CommandMesh,
- Scene_CommandObjectList,
- Scene_CommandLightList,
- Scene_CommandPathList,
- Scene_CommandTransiActorList,
- Scene_CommandEnvLightSettings,
- Scene_CommandTimeSettings,
- Scene_CommandSkyboxSettings,
- Scene_CommandSkyboxDisables,
- Scene_CommandExitList,
- NULL,
- Scene_CommandSoundSettings,
- Scene_CommandEchoSetting,
- Scene_CommandCutsceneScriptList,
- Scene_CommandAltHeaderList,
- Scene_CommandSetRegionVisitedFlag,
- Scene_CommandAnimatedMaterials,
- Scene_CommandCutsceneList,
- Scene_CommandMiniMap,
- Scene_Command1D,
- Scene_CommandMiniMapCompassInfo,
+void (*sSceneCmdHandlers[SCENE_CMD_MAX])(PlayState*, SceneCmd*) = {
+ Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST
+ Scene_CommandActorList, // SCENE_CMD_ID_ACTOR_LIST
+ Scene_CommandActorCutsceneCamList, // SCENE_CMD_ID_ACTOR_CUTSCENE_CAM_LIST
+ Scene_CommandCollisionHeader, // SCENE_CMD_ID_COL_HEADER
+ Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST
+ Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS
+ Scene_CommandEntranceList, // SCENE_CMD_ID_ENTRANCE_LIST
+ Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES
+ Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR
+ Scene_Command09, // SCENE_CMD_ID_UNK_09
+ Scene_CommandMesh, // SCENE_CMD_ID_ROOM_SHAPE
+ Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST
+ Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST
+ Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST
+ Scene_CommandTransiActorList, // SCENE_CMD_ID_TRANSI_ACTOR_LIST
+ Scene_CommandEnvLightSettings, // SCENE_CMD_ID_ENV_LIGHT_SETTINGS
+ Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS
+ Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS
+ Scene_CommandSkyboxDisables, // SCENE_CMD_ID_SKYBOX_DISABLES
+ Scene_CommandExitList, // SCENE_CMD_ID_EXIT_LIST
+ NULL, // SCENE_CMD_ID_END
+ Scene_CommandSoundSettings, // SCENE_CMD_ID_SOUND_SETTINGS
+ Scene_CommandEchoSetting, // SCENE_CMD_ID_ECHO_SETTINGS
+ Scene_CommandCutsceneScriptList, // SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST
+ Scene_CommandAltHeaderList, // SCENE_CMD_ID_ALTERNATE_HEADER_LIST
+ Scene_CommandSetRegionVisitedFlag, // SCENE_CMD_ID_SET_REGION_VISITED
+ Scene_CommandAnimatedMaterials, // SCENE_CMD_ID_ANIMATED_MATERIAL_LIST
+ Scene_CommandCutsceneList, // SCENE_CMD_ID_ACTOR_CUTSCENE_LIST
+ Scene_CommandMiniMap, // SCENE_CMD_ID_MINIMAP_INFO
+ Scene_Command1D, // SCENE_CMD_ID_UNUSED_1D
+ Scene_CommandMiniMapCompassInfo, // SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO
};
/**
diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c
index b4597a5c2..2daa0ee78 100644
--- a/src/code/z_scene_proc.c
+++ b/src/code/z_scene_proc.c
@@ -1,3 +1,4 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
s32 sMatAnimStep;
diff --git a/src/code/z_skin.c b/src/code/z_skin.c
index 0d3e0bf85..5569c886b 100644
--- a/src/code/z_skin.c
+++ b/src/code/z_skin.c
@@ -1,10 +1,11 @@
+#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64skin.h"
// 60 is an arbitrary number which specifies the max amount of limbs per skeleton this system supports
MtxF gSkinLimbMatrices[60];
-static s32 sUnused;
+static s32 sBssPad;
void Skin_UpdateVertices(MtxF* mtx, SkinVertex* skinVertices, SkinLimbModif* modifEntry, Vtx* vtxBuf, Vec3f* pos) {
SkinVertex* vertexEntry;
diff --git a/src/code/z_sound_source.c b/src/code/z_sound_source.c
index 15ebd018a..3a5a31c59 100644
--- a/src/code/z_sound_source.c
+++ b/src/code/z_sound_source.c
@@ -1,11 +1,12 @@
#include "global.h"
+#include "z64sound_source.h"
void SoundSource_InitAll(PlayState* play) {
SoundSource* sources = &play->soundSources[0];
s32 i;
// clang-format off
- for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) { sources[i].countdown = 0; }
+ for (i = 0; i < SOUND_SOURCE_COUNT; i++) { sources[i].countdown = 0; }
// clang-format on
}
@@ -13,14 +14,14 @@ void SoundSource_UpdateAll(PlayState* play) {
SoundSource* source = &play->soundSources[0];
s32 i;
- for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) {
+ for (i = 0; i < SOUND_SOURCE_COUNT; i++) {
if (source->countdown != 0) {
if (DECR(source->countdown) == 0) {
AudioSfx_StopByPos(&source->projectedPos);
} else {
SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &source->worldPos, &source->projectedPos);
if (source->playSfxEachFrame) {
- Audio_PlaySfxAtPos(&source->projectedPos, source->sfxId);
+ Audio_PlaySfx_AtPos(&source->projectedPos, source->sfxId);
}
}
}
@@ -37,7 +38,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId,
s32 i;
source = &play->soundSources[0];
- for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) {
+ for (i = 0; i < SOUND_SOURCE_COUNT; i++) {
if (source->countdown == 0) {
break;
}
@@ -52,7 +53,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId,
}
// If no sound source is available, replace the sound source with the smallest remaining countdown
- if (i >= ARRAY_COUNT(play->soundSources)) {
+ if (i >= SOUND_SOURCE_COUNT) {
source = backupSource;
AudioSfx_StopByPos(&source->projectedPos);
}
@@ -63,7 +64,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId,
source->sfxId = sfxId;
SkinMatrix_Vec3fMtxFMultXYZ(&play->viewProjectionMtxF, &source->worldPos, &source->projectedPos);
- Audio_PlaySfxAtPos(&source->projectedPos, sfxId);
+ Audio_PlaySfx_AtPos(&source->projectedPos, sfxId);
}
void SoundSource_PlaySfxAtFixedWorldPos(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId) {
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index fa690758c..768314490 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -1,4 +1,3 @@
-#include "prevent_bss_reordering.h"
#include "global.h"
#include "z64horse.h"
#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
@@ -87,9 +86,9 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve
/* 9 */ 0,
/* 10 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_10_08),
/* 11 */ 0,
- /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_12_10),
+ /* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_KOTAKE_BOTTLE),
/* 13 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE),
- /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_14_80),
+ /* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DEKU_PLAYGROUND_HEART_PIECE),
/* 15 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_15_20),
/* 16 */ 0,
/* 17 */ 0,
@@ -112,14 +111,18 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_02) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_20),
/* 32 */
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_02) |
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_04),
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE),
/* 33 */ 0,
/* 34 */ 0,
/* 35 */
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_02) |
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_08) |
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_20) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_CLOCK_TOWN) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_WOODFALL) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_SNOWHEAD) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_ROMANI_RANCH) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_GREAT_BAY) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_TINGLE_MAP_BOUGHT_STONE_TOWER) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_80),
/* 36 */ 0,
/* 37 */ 0,
@@ -146,7 +149,8 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve
/* 58 */ 0,
/* 59 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_08) |
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_20),
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE),
/* 60 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_60_10),
/* 61 */ 0,
/* 62 */ 0,
@@ -266,30 +270,30 @@ u32 gSramSlotOffsets[] = {
};
u8 gAmmoItems[] = {
- ITEM_NONE, // SLOT_OCARINA
- ITEM_BOW, // SLOT_BOW
- ITEM_NONE, // SLOT_ARROW_FIRE
- ITEM_NONE, // SLOT_ARROW_ICE
- ITEM_NONE, // SLOT_ARROW_LIGHT
- ITEM_NONE, // SLOT_TRADE_DEED
- ITEM_BOMB, // SLOT_BOMB
- ITEM_BOMBCHU, // SLOT_BOMBCHU
- ITEM_STICK, // SLOT_STICK
- ITEM_NUT, // SLOT_NUT
- ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS
- ITEM_NONE, // SLOT_TRADE_KEY_MAMA
- ITEM_POWDER_KEG, // SLOT_POWDER_KEG
- ITEM_PICTO_BOX, // SLOT_PICTO_BOX
- ITEM_NONE, // SLOT_LENS
- ITEM_NONE, // SLOT_HOOKSHOT
- ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY
- ITEM_NONE, // SLOT_TRADE_COUPLE
- ITEM_NONE, // SLOT_BOTTLE_1
- ITEM_NONE, // SLOT_BOTTLE_2
- ITEM_NONE, // SLOT_BOTTLE_3
- ITEM_NONE, // SLOT_BOTTLE_4
- ITEM_NONE, // SLOT_BOTTLE_5
- ITEM_NONE, // SLOT_BOTTLE_6
+ ITEM_NONE, // SLOT_OCARINA
+ ITEM_BOW, // SLOT_BOW
+ ITEM_NONE, // SLOT_ARROW_FIRE
+ ITEM_NONE, // SLOT_ARROW_ICE
+ ITEM_NONE, // SLOT_ARROW_LIGHT
+ ITEM_NONE, // SLOT_TRADE_DEED
+ ITEM_BOMB, // SLOT_BOMB
+ ITEM_BOMBCHU, // SLOT_BOMBCHU
+ ITEM_DEKU_STICK, // SLOT_DEKU_STICK
+ ITEM_DEKU_NUT, // SLOT_DEKU_NUT
+ ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS
+ ITEM_NONE, // SLOT_TRADE_KEY_MAMA
+ ITEM_POWDER_KEG, // SLOT_POWDER_KEG
+ ITEM_PICTOGRAPH_BOX, // SLOT_PICTOGRAPH_BOX
+ ITEM_NONE, // SLOT_LENS_OF_TRUTH
+ ITEM_NONE, // SLOT_HOOKSHOT
+ ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY
+ ITEM_NONE, // SLOT_TRADE_COUPLE
+ ITEM_NONE, // SLOT_BOTTLE_1
+ ITEM_NONE, // SLOT_BOTTLE_2
+ ITEM_NONE, // SLOT_BOTTLE_3
+ ITEM_NONE, // SLOT_BOTTLE_4
+ ITEM_NONE, // SLOT_BOTTLE_5
+ ITEM_NONE, // SLOT_BOTTLE_6
};
// Stores flash start page number
@@ -489,44 +493,44 @@ void Sram_SaveEndOfCycle(PlayState* play) {
gSaveContext.eventInf[i] = 0;
}
- CLEAR_EVENTINF(EVENTINF_70);
- CLEAR_EVENTINF(EVENTINF_71);
- CLEAR_EVENTINF(EVENTINF_72);
- CLEAR_EVENTINF(EVENTINF_73);
- CLEAR_EVENTINF(EVENTINF_74);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO);
+ CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO);
if (gSaveContext.save.saveInfo.playerData.rupees != 0) {
- SET_EVENTINF(EVENTINF_70);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES);
}
if (INV_CONTENT(ITEM_BOMB) == ITEM_BOMB) {
item = INV_CONTENT(ITEM_BOMB);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_71);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO);
}
}
- if (INV_CONTENT(ITEM_NUT) == ITEM_NUT) {
- item = INV_CONTENT(ITEM_NUT);
+ if (INV_CONTENT(ITEM_DEKU_NUT) == ITEM_DEKU_NUT) {
+ item = INV_CONTENT(ITEM_DEKU_NUT);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_72);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO);
}
}
- if (INV_CONTENT(ITEM_STICK) == ITEM_STICK) {
- item = INV_CONTENT(ITEM_STICK);
+ if (INV_CONTENT(ITEM_DEKU_STICK) == ITEM_DEKU_STICK) {
+ item = INV_CONTENT(ITEM_DEKU_STICK);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_73);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO);
}
}
if (INV_CONTENT(ITEM_BOW) == ITEM_BOW) {
item = INV_CONTENT(ITEM_BOW);
if (AMMO(item) != 0) {
- SET_EVENTINF(EVENTINF_74);
+ SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO);
}
}
for (i = 0; i < ARRAY_COUNT(gAmmoItems); i++) {
if (gAmmoItems[i] != ITEM_NONE) {
- if ((gSaveContext.save.saveInfo.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) {
+ if ((gSaveContext.save.saveInfo.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTOGRAPH_BOX)) {
item = gSaveContext.save.saveInfo.inventory.items[i];
AMMO(item) = 0;
}
@@ -606,7 +610,7 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Inventory_DeleteItem(ITEM_LONGSHOT, SLOT_TRADE_COUPLE);
for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) {
- if (GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOON_TEAR && GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES) {
+ if ((GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR) && (GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES)) {
SET_CUR_FORM_BTN_ITEM(j, ITEM_NONE);
Interface_LoadItemIconImpl(play, j);
}
@@ -799,16 +803,91 @@ ItemEquips sSaveDefaultItemEquips = {
Inventory sSaveDefaultInventory = {
// items
{
- ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
- ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
- ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
- ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
- ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
+ ITEM_NONE, // SLOT_OCARINA
+ ITEM_NONE, // SLOT_BOW
+ ITEM_NONE, // SLOT_ARROW_FIRE
+ ITEM_NONE, // SLOT_ARROW_ICE
+ ITEM_NONE, // SLOT_ARROW_LIGHT
+ ITEM_NONE, // SLOT_TRADE_DEED
+ ITEM_NONE, // SLOT_BOMB
+ ITEM_NONE, // SLOT_BOMBCHU
+ ITEM_NONE, // SLOT_DEKU_STICK
+ ITEM_NONE, // SLOT_DEKU_NUT
+ ITEM_NONE, // SLOT_MAGIC_BEANS
+ ITEM_NONE, // SLOT_TRADE_KEY_MAMA
+ ITEM_NONE, // SLOT_POWDER_KEG
+ ITEM_NONE, // SLOT_PICTOGRAPH_BOX
+ ITEM_NONE, // SLOT_LENS_OF_TRUTH
+ ITEM_NONE, // SLOT_HOOKSHOT
+ ITEM_NONE, // SLOT_SWORD_GREAT_FAIRY
+ ITEM_NONE, // SLOT_TRADE_COUPLE
+ ITEM_NONE, // SLOT_BOTTLE_1
+ ITEM_NONE, // SLOT_BOTTLE_2
+ ITEM_NONE, // SLOT_BOTTLE_3
+ ITEM_NONE, // SLOT_BOTTLE_4
+ ITEM_NONE, // SLOT_BOTTLE_5
+ ITEM_NONE, // SLOT_BOTTLE_6
+ ITEM_NONE, // SLOT_MASK_POSTMAN
+ ITEM_NONE, // SLOT_MASK_ALL_NIGHT
+ ITEM_NONE, // SLOT_MASK_BLAST
+ ITEM_NONE, // SLOT_MASK_STONE
+ ITEM_NONE, // SLOT_MASK_GREAT_FAIRY
+ ITEM_NONE, // SLOT_MASK_DEKU
+ ITEM_NONE, // SLOT_MASK_KEATON
+ ITEM_NONE, // SLOT_MASK_BREMEN
+ ITEM_NONE, // SLOT_MASK_BUNNY
+ ITEM_NONE, // SLOT_MASK_DON_GERO
+ ITEM_NONE, // SLOT_MASK_SCENTS
+ ITEM_NONE, // SLOT_MASK_GORON
+ ITEM_NONE, // SLOT_MASK_ROMANI
+ ITEM_NONE, // SLOT_MASK_CIRCUS_LEADER
+ ITEM_NONE, // SLOT_MASK_KAFEIS_MASK
+ ITEM_NONE, // SLOT_MASK_COUPLE
+ ITEM_NONE, // SLOT_MASK_TRUTH
+ ITEM_NONE, // SLOT_MASK_ZORA
+ ITEM_NONE, // SLOT_MASK_KAMARO
+ ITEM_NONE, // SLOT_MASK_GIBDO
+ ITEM_NONE, // SLOT_MASK_GARO
+ ITEM_NONE, // SLOT_MASK_CAPTAIN
+ ITEM_NONE, // SLOT_MASK_GIANT
+ ITEM_NONE, // SLOT_MASK_FIERCE_DEITY
},
// ammo
- { 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, // SLOT_OCARINA
+ 0, // SLOT_BOW
+ 0, // SLOT_ARROW_FIRE
+ 0, // SLOT_ARROW_ICE
+ 0, // SLOT_ARROW_LIGHT
+ 0, // SLOT_TRADE_DEED
+ 0, // SLOT_BOMB
+ 0, // SLOT_BOMBCHU
+ 0, // SLOT_DEKU_STICK
+ 0, // SLOT_DEKU_NUT
+ 0, // SLOT_MAGIC_BEANS
+ 0, // SLOT_TRADE_KEY_MAMA
+ 0, // SLOT_POWDER_KEG
+ 0, // SLOT_PICTOGRAPH_BOX
+ 0, // SLOT_LENS_OF_TRUTH
+ 0, // SLOT_HOOKSHOT
+ 0, // SLOT_SWORD_GREAT_FAIRY
+ 0, // SLOT_TRADE_COUPLE
+ 0, // SLOT_BOTTLE_1
+ 0, // SLOT_BOTTLE_2
+ 0, // SLOT_BOTTLE_3
+ 0, // SLOT_BOTTLE_4
+ 0, // SLOT_BOTTLE_5
+ 0, // SLOT_BOTTLE_6
+ },
// upgrades
- 0x120000,
+ (0 << 0) | // UPG_QUIVER
+ (0 << 3) | // UPG_BOMB_BAG
+ (0 << 6) | // UPG_STRENGTH
+ (0 << 9) | // UPG_SCALE
+ (0 << 12) | // UPG_WALLET
+ (0 << 14) | // UPG_BULLET_BAG
+ (1 << 17) | // UPG_DEKU_STICKS
+ (1 << 20), // UPG_DEKU_NUTS
// questItems
0,
// dungeonItems
@@ -883,10 +962,10 @@ SavePlayerData sSaveDebugPlayerData = {
ItemEquips sSaveDebugItemEquips = {
{
- { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_POTION_RED, ITEM_OCARINA },
- { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_GORON, ITEM_OCARINA },
- { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_ZORA, ITEM_OCARINA },
- { ITEM_NUT, ITEM_NUT, ITEM_MASK_DEKU, ITEM_OCARINA },
+ { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_POTION_RED, ITEM_OCARINA_OF_TIME },
+ { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_GORON, ITEM_OCARINA_OF_TIME },
+ { ITEM_SWORD_KOKIRI, ITEM_BOW, ITEM_MASK_ZORA, ITEM_OCARINA_OF_TIME },
+ { ITEM_DEKU_NUT, ITEM_DEKU_NUT, ITEM_MASK_DEKU, ITEM_OCARINA_OF_TIME },
},
{
{ SLOT_OCARINA, SLOT_BOW, SLOT_BOTTLE_2, SLOT_OCARINA },
@@ -900,59 +979,91 @@ ItemEquips sSaveDebugItemEquips = {
Inventory sSaveDebugInventory = {
// items
{
- ITEM_OCARINA,
- ITEM_BOW,
- ITEM_ARROW_FIRE,
- ITEM_ARROW_ICE,
- ITEM_ARROW_LIGHT,
- ITEM_MOON_TEAR,
- ITEM_BOMB,
- ITEM_BOMBCHU,
- ITEM_STICK,
- ITEM_NUT,
- ITEM_MAGIC_BEANS,
- ITEM_ROOM_KEY,
- ITEM_POWDER_KEG,
- ITEM_PICTO_BOX,
- ITEM_LENS,
- ITEM_HOOKSHOT,
- ITEM_SWORD_GREAT_FAIRY,
- ITEM_LETTER_TO_KAFEI,
- ITEM_BOTTLE,
- ITEM_POTION_RED,
- ITEM_POTION_GREEN,
- ITEM_POTION_BLUE,
- ITEM_NONE,
- ITEM_NONE,
- ITEM_MASK_POSTMAN,
- ITEM_MASK_ALL_NIGHT,
- ITEM_MASK_BLAST,
- ITEM_MASK_STONE,
- ITEM_MASK_GREAT_FAIRY,
- ITEM_MASK_DEKU,
- ITEM_MASK_KEATON,
- ITEM_MASK_BREMEN,
- ITEM_MASK_BUNNY,
- ITEM_MASK_DON_GERO,
- ITEM_MASK_SCENTS,
- ITEM_MASK_GORON,
- ITEM_MASK_ROMANI,
- ITEM_MASK_CIRCUS_LEADER,
- ITEM_MASK_KAFEIS_MASK,
- ITEM_MASK_COUPLE,
- ITEM_MASK_TRUTH,
- ITEM_MASK_ZORA,
- ITEM_MASK_KAMARO,
- ITEM_MASK_GIBDO,
- ITEM_MASK_GARO,
- ITEM_MASK_CAPTAIN,
- ITEM_MASK_GIANT,
- ITEM_MASK_FIERCE_DEITY,
+ ITEM_OCARINA_OF_TIME, // SLOT_OCARINA
+ ITEM_BOW, // SLOT_BOW
+ ITEM_ARROW_FIRE, // SLOT_ARROW_FIRE
+ ITEM_ARROW_ICE, // SLOT_ARROW_ICE
+ ITEM_ARROW_LIGHT, // SLOT_ARROW_LIGHT
+ ITEM_MOONS_TEAR, // SLOT_TRADE_DEED
+ ITEM_BOMB, // SLOT_BOMB
+ ITEM_BOMBCHU, // SLOT_BOMBCHU
+ ITEM_DEKU_STICK, // SLOT_DEKU_STICK
+ ITEM_DEKU_NUT, // SLOT_DEKU_NUT
+ ITEM_MAGIC_BEANS, // SLOT_MAGIC_BEANS
+ ITEM_ROOM_KEY, // SLOT_TRADE_KEY_MAMA
+ ITEM_POWDER_KEG, // SLOT_POWDER_KEG
+ ITEM_PICTOGRAPH_BOX, // SLOT_PICTOGRAPH_BOX
+ ITEM_LENS_OF_TRUTH, // SLOT_LENS_OF_TRUTH
+ ITEM_HOOKSHOT, // SLOT_HOOKSHOT
+ ITEM_SWORD_GREAT_FAIRY, // SLOT_SWORD_GREAT_FAIRY
+ ITEM_LETTER_TO_KAFEI, // SLOT_TRADE_COUPLE
+ ITEM_BOTTLE, // SLOT_BOTTLE_1
+ ITEM_POTION_RED, // SLOT_BOTTLE_2
+ ITEM_POTION_GREEN, // SLOT_BOTTLE_3
+ ITEM_POTION_BLUE, // SLOT_BOTTLE_4
+ ITEM_NONE, // SLOT_BOTTLE_5
+ ITEM_NONE, // SLOT_BOTTLE_6
+ ITEM_MASK_POSTMAN, // SLOT_MASK_POSTMAN
+ ITEM_MASK_ALL_NIGHT, // SLOT_MASK_ALL_NIGHT
+ ITEM_MASK_BLAST, // SLOT_MASK_BLAST
+ ITEM_MASK_STONE, // SLOT_MASK_STONE
+ ITEM_MASK_GREAT_FAIRY, // SLOT_MASK_GREAT_FAIRY
+ ITEM_MASK_DEKU, // SLOT_MASK_DEKU
+ ITEM_MASK_KEATON, // SLOT_MASK_KEATON
+ ITEM_MASK_BREMEN, // SLOT_MASK_BREMEN
+ ITEM_MASK_BUNNY, // SLOT_MASK_BUNNY
+ ITEM_MASK_DON_GERO, // SLOT_MASK_DON_GERO
+ ITEM_MASK_SCENTS, // SLOT_MASK_SCENTS
+ ITEM_MASK_GORON, // SLOT_MASK_GORON
+ ITEM_MASK_ROMANI, // SLOT_MASK_ROMANI
+ ITEM_MASK_CIRCUS_LEADER, // SLOT_MASK_CIRCUS_LEADER
+ ITEM_MASK_KAFEIS_MASK, // SLOT_MASK_KAFEIS_MASK
+ ITEM_MASK_COUPLE, // SLOT_MASK_COUPLE
+ ITEM_MASK_TRUTH, // SLOT_MASK_TRUTH
+ ITEM_MASK_ZORA, // SLOT_MASK_ZORA
+ ITEM_MASK_KAMARO, // SLOT_MASK_KAMARO
+ ITEM_MASK_GIBDO, // SLOT_MASK_GIBDO
+ ITEM_MASK_GARO, // SLOT_MASK_GARO
+ ITEM_MASK_CAPTAIN, // SLOT_MASK_CAPTAIN
+ ITEM_MASK_GIANT, // SLOT_MASK_GIANT
+ ITEM_MASK_FIERCE_DEITY, // SLOT_MASK_FIERCE_DEITY
},
// ammo
- { 1, 30, 1, 1, 1, 1, 30, 30, 30, 30, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
+ {
+ 1, // SLOT_OCARINA
+ 30, // SLOT_BOW
+ 1, // SLOT_ARROW_FIRE
+ 1, // SLOT_ARROW_ICE
+ 1, // SLOT_ARROW_LIGHT
+ 1, // SLOT_TRADE_DEED
+ 30, // SLOT_BOMB
+ 30, // SLOT_BOMBCHU
+ 30, // SLOT_DEKU_STICK
+ 30, // SLOT_DEKU_NUT
+ 1, // SLOT_MAGIC_BEANS
+ 1, // SLOT_TRADE_KEY_MAMA
+ 1, // SLOT_POWDER_KEG
+ 1, // SLOT_PICTOGRAPH_BOX
+ 30, // SLOT_LENS_OF_TRUTH
+ 1, // SLOT_HOOKSHOT
+ 1, // SLOT_SWORD_GREAT_FAIRY
+ 1, // SLOT_TRADE_COUPLE
+ 1, // SLOT_BOTTLE_1
+ 1, // SLOT_BOTTLE_2
+ 1, // SLOT_BOTTLE_3
+ 1, // SLOT_BOTTLE_4
+ 0, // SLOT_BOTTLE_5
+ 0, // SLOT_BOTTLE_6
+ },
// upgrades
- 0x120009,
+ (1 << 0) | // UPG_QUIVER
+ (1 << 3) | // UPG_BOMB_BAG
+ (0 << 6) | // UPG_STRENGTH
+ (0 << 9) | // UPG_SCALE
+ (0 << 12) | // UPG_WALLET
+ (0 << 14) | // UPG_BULLET_BAG
+ (1 << 17) | // UPG_DEKU_STICKS
+ (1 << 20), // UPG_DEKU_NUTS
// questItems
(1 << QUEST_SONG_SONATA) | (1 << QUEST_SONG_LULLABY) | (1 << QUEST_SONG_BOSSA_NOVA) | (1 << QUEST_SONG_ELEGY) |
(1 << QUEST_SONG_OATH) | (1 << QUEST_SONG_TIME) | (1 << QUEST_SONG_HEALING) | (1 << QUEST_SONG_EPONA) |
@@ -990,12 +1101,20 @@ Inventory sSaveDebugInventory = {
u16 sSaveDebugChecksum = 0;
-u8 D_801C6A48[] = {
- ITEM_MASK_FIERCE_DEITY, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_MASK_DEKU, ITEM_MASK_FIERCE_DEITY,
+u8 D_801C6A48[PLAYER_FORM_MAX] = {
+ ITEM_MASK_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY
+ ITEM_MASK_GORON, // PLAYER_FORM_GORON
+ ITEM_MASK_ZORA, // PLAYER_FORM_ZORA
+ ITEM_MASK_DEKU, // PLAYER_FORM_DEKU
+ ITEM_MASK_FIERCE_DEITY, // PLAYER_FORM_HUMAN
};
-u8 D_801C6A50[] = {
- SLOT_MASK_FIERCE_DEITY, SLOT_MASK_GORON, SLOT_MASK_ZORA, SLOT_MASK_DEKU, SLOT_MASK_FIERCE_DEITY,
+u8 D_801C6A50[PLAYER_FORM_MAX] = {
+ SLOT_MASK_FIERCE_DEITY, // PLAYER_FORM_FIERCE_DEITY
+ SLOT_MASK_GORON, // PLAYER_FORM_GORON
+ SLOT_MASK_ZORA, // PLAYER_FORM_ZORA
+ SLOT_MASK_DEKU, // PLAYER_FORM_DEKU
+ SLOT_MASK_FIERCE_DEITY, // PLAYER_FORM_HUMAN
};
/**
diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c
index 8280f9c8a..85488dcf1 100644
--- a/src/code/z_sub_s.c
+++ b/src/code/z_sub_s.c
@@ -209,8 +209,8 @@ s32 SubS_UpdateLimb(s16 newRotZ, s16 newRotY, Vec3f* pos, Vec3s* rot, s32 stepRo
return true;
}
-void SubS_UpdateFlags(u16* flags, u16 setBits, u16 unsetBits) {
- *flags = (*flags & ~unsetBits) | setBits;
+void SubS_SetOfferMode(u16* flags, u16 offerMode, u16 mask) {
+ *flags = (*flags & ~mask) | offerMode;
}
/**
@@ -815,60 +815,68 @@ s32 SubS_CopyPointFromPathCheckBounds(Path* path, s32 pointIndex, Vec3f* dst) {
return true;
}
-//! TODO: Needs docs with func_800B8500
-s32 func_8013C964(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemId, s32 type) {
- s32 ret = false;
+/**
+ * Attempt to extend different offers to the player based on different checks
+ * and on the provided mode (see SubSOfferMode).
+ *
+ * The offer types are either GetItem (see Actor_OfferGetItem) or TalkExchange (see Actor_OfferTalkExchange),
+ * with more check variants provided for TalkExchange offers.
+ *
+ * @return `true` if offer was extended and the player can accept it
+ */
+s32 SubS_Offer(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 itemId, SubSOfferMode mode) {
+ s32 canAccept = false;
s16 x;
s16 y;
f32 xzDistToPlayerTemp;
Actor_GetScreenPos(play, actor, &x, &y);
- switch (type) {
- case 1:
+ switch (mode) {
+ case SUBS_OFFER_MODE_GET_ITEM:
yRange = fabsf(actor->playerHeightRel) + 1.0f;
xzRange = actor->xzDistToPlayer + 1.0f;
- ret = Actor_OfferGetItem(actor, play, itemId, xzRange, yRange);
+ canAccept = Actor_OfferGetItem(actor, play, itemId, xzRange, yRange);
break;
- case 2:
+ case SUBS_OFFER_MODE_NEARBY:
if ((fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange)) {
- ret = func_800B8500(actor, play, xzRange, yRange, itemId);
+ canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId);
}
break;
- case 3:
+ case SUBS_OFFER_MODE_ONSCREEN:
//! @bug: Both x and y conditionals are always true, || should be an &&
if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT))) {
- ret = func_800B8500(actor, play, xzRange, yRange, itemId);
+ canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId);
}
break;
- case 4:
+ case SUBS_OFFER_MODE_AUTO:
yRange = fabsf(actor->playerHeightRel) + 1.0f;
xzRange = actor->xzDistToPlayer + 1.0f;
xzDistToPlayerTemp = actor->xzDistToPlayer;
actor->xzDistToPlayer = 0.0f;
actor->flags |= ACTOR_FLAG_10000;
- ret = func_800B8500(actor, play, xzRange, yRange, itemId);
+ canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId);
actor->xzDistToPlayer = xzDistToPlayerTemp;
break;
- case 5:
+ case SUBS_OFFER_MODE_AUTO_TARGETED:
//! @bug: Both x and y conditionals are always true, || should be an &&
if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) &&
(fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange) && actor->isTargeted) {
actor->flags |= ACTOR_FLAG_10000;
- ret = func_800B8500(actor, play, xzRange, yRange, itemId);
+ canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId);
}
break;
- case 6:
+ case SUBS_OFFER_MODE_AUTO_NEARBY_ONSCREEN:
//! @bug: Both x and y conditionals are always true, || should be an &&
if (((x >= 0) || (x < SCREEN_WIDTH)) && ((y >= 0) || (y < SCREEN_HEIGHT)) &&
(fabsf(actor->playerHeightRel) <= yRange) && (actor->xzDistToPlayer <= xzRange)) {
actor->flags |= ACTOR_FLAG_10000;
- ret = func_800B8500(actor, play, xzRange, yRange, itemId);
+ canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, itemId);
}
break;
@@ -876,7 +884,7 @@ s32 func_8013C964(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 it
break;
}
- return ret;
+ return canAccept;
}
const u8 sShadowMaps[4][12][12] = {
@@ -966,7 +974,7 @@ void SubS_GenShadowTex(Vec3f bodyPartsPos[], Vec3f* worldPos, u8* tex, f32 tween
s32 startRow;
for (i = 0; i < bodyPartsNum; i++) {
- if (parentBodyParts[i] >= 0) {
+ if (parentBodyParts[i] > BODYPART_NONE) {
parentBodyPart = parentBodyParts[i];
bodyPartPos = &bodyPartsPos[i];
@@ -1186,13 +1194,24 @@ Actor* SubS_FindActor(PlayState* play, Actor* actorListStart, u8 actorCategory,
return actor;
}
-s32 SubS_FillLimbRotTables(PlayState* play, s16* limbRotTableY, s16* limbRotTableZ, s32 numLimbs) {
- s32 i;
+/**
+ * Fills two tables with rotation angles that can be used to simulate idle animations.
+ *
+ * The rotation angles are dependent on the current frame, so should be updated regularly, generally every frame.
+ *
+ * This is done for the desired limb by taking either the `sin` of the yTable value or the `cos` of the zTable value,
+ * multiplying by some scale factor (generally 200), and adding that to the already existing rotation.
+ *
+ * Note: With the common scale factor of 200, this effect is practically unnoticeable if the current animation already
+ * has motion involved.
+ */
+s32 SubS_UpdateFidgetTables(PlayState* play, s16* fidgetTableY, s16* fidgetTableZ, s32 tableLen) {
u32 frames = play->gameplayFrames;
+ s32 i;
- for (i = 0; i < numLimbs; i++) {
- limbRotTableY[i] = (i * 50 + 0x814) * frames;
- limbRotTableZ[i] = (i * 50 + 0x940) * frames;
+ for (i = 0; i < tableLen; i++) {
+ fidgetTableY[i] = (i * 50 + 0x814) * frames;
+ fidgetTableZ[i] = (i * 50 + 0x940) * frames;
}
return true;
@@ -1493,10 +1512,10 @@ s32 SubS_LineSegVsPlane(Vec3f* point, Vec3s* rot, Vec3f* unitVec, Vec3f* linePoi
/**
* Finds the first actor instance of a specified Id and category verified with a custom callback.
- * The callback should return `true` when the actor is succesfully verified.
+ * The callback should return `true` when the actor is successfully verified.
*/
Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart, u8 actorCategory, s16 actorId,
- void* verifyData, VerifyActor verifyActor) {
+ void* verifyData, VerifyFindActorFunc verifyActorFunc) {
Actor* actorIter = actorListStart;
if (actorListStart == NULL) {
@@ -1506,36 +1525,40 @@ Actor* SubS_FindActorCustom(PlayState* play, Actor* actor, Actor* actorListStart
while ((actorIter != NULL) &&
((actorId != actorIter->id) ||
((actorId == actorIter->id) &&
- ((verifyActor == NULL) || ((verifyActor != NULL) && !verifyActor(play, actor, actorIter, verifyData)))))) {
+ ((verifyActorFunc == NULL) ||
+ ((verifyActorFunc != NULL) && !verifyActorFunc(play, actor, actorIter, verifyData)))))) {
actorIter = actorIter->next;
}
return actorIter;
}
-//! TODO: Needs docs with func_800B8500
-s32 func_8013E748(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemId, void* data,
- func_8013E748_VerifyFunc verifyFunc) {
- s32 ret = false;
+/**
+ * Will extend a TalkExchange offer to the player if the actor is verified with a custom callback.
+ * The callback should return `true` when the actor is successfully verified.
+ */
+s32 SubS_OfferTalkExchangeCustom(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction,
+ void* data, VerifyTalkExchangeActorFunc verifyActorFunc) {
+ s32 canAccept = false;
- if ((verifyFunc == NULL) || ((verifyFunc != NULL) && verifyFunc(play, actor, data))) {
- ret = func_800B8500(actor, play, xzRange, yRange, exchangeItemId);
+ if ((verifyActorFunc == NULL) || ((verifyActorFunc != NULL) && verifyActorFunc(play, actor, data))) {
+ canAccept = Actor_OfferTalkExchange(actor, play, xzRange, yRange, exchangeItemAction);
}
- return ret;
+ return canAccept;
}
s32 SubS_ActorAndPlayerFaceEachOther(PlayState* play, Actor* actor, void* data) {
Player* player = GET_PLAYER(play);
- Vec3s* yawTols = (Vec3s*)data;
+ Vec3s* yawRanges = (Vec3s*)data;
s16 playerYaw = ABS(BINANG_SUB(Actor_WorldYawTowardActor(&player->actor, actor), player->actor.shape.rot.y));
s16 actorYaw = ABS(BINANG_SUB(actor->yawTowardsPlayer, actor->shape.rot.y));
s32 areFacing = false;
- s32 actorYawTol = ABS(yawTols->y);
- s32 playerYawTol;
+ s32 actorYawRange = ABS(yawRanges->y);
+ s32 playerYawRange;
- if (actorYaw < (s16)actorYawTol) {
- playerYawTol = ABS(yawTols->x);
- if (playerYaw < (s16)playerYawTol) {
+ if (actorYaw < (s16)actorYawRange) {
+ playerYawRange = ABS(yawRanges->x);
+ if (playerYaw < (s16)playerYawRange) {
areFacing = true;
}
}
@@ -1543,14 +1566,14 @@ s32 SubS_ActorAndPlayerFaceEachOther(PlayState* play, Actor* actor, void* data)
return areFacing;
}
-//! TODO: Needs docs with func_800B8500
-s32 func_8013E8F8(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exhangeItemId, s16 playerYawTol,
- s16 actorYawTol) {
- Vec3s yawTols;
+s32 SubS_OfferTalkExchangeFacing(Actor* actor, PlayState* play, f32 xzRange, f32 yRange, s32 exchangeItemAction,
+ s16 playerYawRange, s16 actorYawRange) {
+ Vec3s yawRanges;
- yawTols.x = playerYawTol;
- yawTols.y = actorYawTol;
- return func_8013E748(actor, play, xzRange, yRange, exhangeItemId, &yawTols, SubS_ActorAndPlayerFaceEachOther);
+ yawRanges.x = playerYawRange;
+ yawRanges.y = actorYawRange;
+ return SubS_OfferTalkExchangeCustom(actor, play, xzRange, yRange, exchangeItemAction, &yawRanges,
+ SubS_ActorAndPlayerFaceEachOther);
}
/**
diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c
index 2ddd27775..778c89c14 100644
--- a/src/code/z_vimode.c
+++ b/src/code/z_vimode.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "z64vimode.h"
#include "ultra64/viint.h"
typedef struct {
@@ -153,14 +154,14 @@ void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 ant
viMode->comRegs.vSync++;
if (tvType == OS_TV_MPAL) {
viMode->comRegs.hSync += HSYNC(1, 4);
- viMode->comRegs.leap += LEAP((u16)-4, (u16)-2);
+ viMode->comRegs.leap += LEAP(-4, -2);
}
} else {
- viMode->fldRegs[0].vStart += START((u16)-3, (u16)-2);
+ viMode->fldRegs[0].vStart += START(-3, -2);
if (tvType == OS_TV_MPAL) {
- viMode->fldRegs[0].vBurst += BURST((u8)-2, (u8)-1, 12, -1);
+ viMode->fldRegs[0].vBurst += BURST(-2, -1, 12, -1);
} else if (tvType == OS_TV_PAL) {
- viMode->fldRegs[1].vBurst += BURST((u8)-2, (u8)-1, 2, 0);
+ viMode->fldRegs[1].vBurst += BURST(-2, -1, 2, 0);
}
}
diff --git a/src/code/z_viscvg.c b/src/code/z_viscvg.c
index 888fa19b3..1821805ee 100644
--- a/src/code/z_viscvg.c
+++ b/src/code/z_viscvg.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "z64viscvg.h"
Gfx D_801C5DD0[] = {
gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
@@ -39,7 +40,7 @@ Gfx D_801C5E00[] = {
gsSPBranchList(D_0E000000.fillRect),
};
-void VisCvg_Init(struct_801F8010* this) {
+void VisCvg_Init(VisCvg* this) {
this->type = 0;
this->setScissor = false;
this->color.r = 255;
@@ -48,10 +49,10 @@ void VisCvg_Init(struct_801F8010* this) {
this->color.a = 255;
}
-void VisCvg_Destroy(struct_801F8010* this) {
+void VisCvg_Destroy(VisCvg* this) {
}
-void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp) {
+void VisCvg_Draw(VisCvg* this, Gfx** gfxp) {
Gfx* gfx = *gfxp;
gDPPipeSync(gfx++);
diff --git a/src/code/z_vismono.c b/src/code/z_vismono.c
index b28ed2aa6..86937c315 100644
--- a/src/code/z_vismono.c
+++ b/src/code/z_vismono.c
@@ -4,6 +4,7 @@
*/
#include "global.h"
+#include "z64vismono.h"
#include "system_malloc.h"
// Height of the fragments the color frame buffer (CFB) is split into.
diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c
index cf603f324..17c734cb0 100644
--- a/src/code/z_viszbuf.c
+++ b/src/code/z_viszbuf.c
@@ -1,4 +1,7 @@
#include "global.h"
+#include "z64viszbuf.h"
+#include "sys_cfb.h"
+#include "libc/stdbool.h"
#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (gCfbWidth * G_IM_SIZ_16b_BYTES))