diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2023-08-22 17:28:58 -0700 |
|---|---|---|
| committer | Derek Hensley <hensley.derek58@gmail.com> | 2023-08-22 17:28:58 -0700 |
| commit | 014acf616ccd240bd61895335707e36f0cdd7f23 (patch) | |
| tree | f67881e955cb7952d7e4cd2b61a91d74ebf10661 /src/code | |
| parent | 90e45cce373256882807e7ef10be3f1a36d8e29f (diff) | |
| parent | 108b482ad081a2ee2cccd1ddc47fed0f7e66f332 (diff) | |
Merge remote-tracking branch 'upstream/master' into sys_math3d_bss
Diffstat (limited to 'src/code')
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)) |
