diff options
| author | engineer124 <47598039+engineer124@users.noreply.github.com> | 2022-02-05 12:49:21 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-05 01:49:21 +0000 |
| commit | 2104c163628b1e6fbea36cd5c648fca515960a39 (patch) | |
| tree | 101de7d2633ea069212ca8a02c1f3ec6b59f25cf /src/code | |
| parent | bcdd99df08f58fed2cb7f99331b21550fda1f1ca (diff) | |
code_8012EC80.c OK and Documented + parameter_static extraction (#534)
* Match remaining functions of code_8012EC80.c
* parameter_static extracted and OK
* Small Progress
* Documentation all over the place
* Finish Documenting
* Cleanup
* Name more textures
* Update knowledge on deku playground player name
* All textures from parameter_static known now
* Finish documenting and validating parameter_static
* More up-to-date SaveContext docs
* More docs
* More cleanup
* Sun -> Star
* Minor touchup
* More cleanup
* pictograph -> pictoBox
* Remove the "unused" part
* More accurate name: hour lines
* It's gsDPLoadTextureBlock, not gsDPSetTextureImage
* Fix parameter_static and merge issues
* More docs from new PRs and Parameter WIP
* Missed a name
* Move parameter_static to interface assets
* Clean up code_8012EC80.c data
* Fix comment
* Add comments to parameter_static
* Oops
* fix merge
* Missed a PR review suggestion
* Fix merge
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/code_8012EC80.c | 636 | ||||
| -rw-r--r-- | src/code/z_actor.c | 16 | ||||
| -rw-r--r-- | src/code/z_lifemeter.c | 42 | ||||
| -rw-r--r-- | src/code/z_parameter.c | 4 | ||||
| -rw-r--r-- | src/code/z_player_lib.c | 2 | ||||
| -rw-r--r-- | src/code/z_scene.c | 33 | ||||
| -rw-r--r-- | src/code/z_snap.c | 38 |
7 files changed, 471 insertions, 300 deletions
diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index 34ad973f6..c65697483 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -1,6 +1,7 @@ #include "global.h" +#include "interface/parameter_static/parameter_static.h" -// Bit Flag array in which gBitFlags[n] is literally (1 << n) +// Bit Flag array in which gBitFlags[n] is (1 << n) u32 gBitFlags[] = { (1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6), (1 << 7), (1 << 8), (1 << 9), (1 << 10), (1 << 11), (1 << 12), (1 << 13), (1 << 14), (1 << 15), @@ -8,164 +9,225 @@ u32 gBitFlags[] = { (1 << 24), (1 << 25), (1 << 26), (1 << 27), (1 << 28), (1 << 29), (1 << 30), (1 << 31), }; -u16 gEquipMasks[] = { 0x000F, 0x00F0, 0x0F00, 0xF000 }; -u16 gEquipNegMasks[] = { 0xFFF0, 0xFF0F, 0xF0FF, 0x0FFF }; +// four-bit masks +u16 gEquipMasks[] = { + 0xF << 0, // Sword + 0xF << 4, // Shield + 0xF << 8, // Unused (Tunic) + 0xF << 12, // Unused (Boots) +}; + +// four-bit masks +u16 gEquipNegMasks[] = { + ~(0xF << 0), // Sword + ~(0xF << 4), // Shield + ~(0xF << 8), // Unused (Tunic) + (u16) ~(0xF << 12), // Unused (Boots) +}; + +// 3 = two bit masks +// 7 = three bit masks u32 gUpgradeMasks[] = { - 0x00000007, 0x00000038, 0x000001C0, 0x00000E00, 0x00003000, 0x0001C000, 0x000E0000, 0x00700000, + 7 << 0, // Quivers + 7 << 3, // Bomb Bags + 7 << 6, // Unused (Strength) + 7 << 9, // Unused (Scale) + 3 << 12, // Wallets + 7 << 14, // Unused (Deku Seed Bullet Bags) + 7 << 17, // Unused (Deku Stick) + 7 << 20, // Unused (Deku Nut) }; + +// 3 = two-bit masks +// 7 = three-bit masks u32 gUpgradeNegMasks[] = { - 0xFFFFFFF8, 0xFFFFFFC7, 0xFFFFFE3F, 0xFFFFF1FF, 0xFFFFCFFF, 0xFFFE3FFF, 0xFFF1FFFF, 0xFF8FFFFF, + ~(7 << 0), // Quivers + ~(7 << 3), // Bomb Bags + ~(7 << 6), // Unused (Strength) + ~(7 << 9), // Unused (Scale) + ~(3 << 12), // Wallets + ~(7 << 14), // Unused (Deku Seed Bullet Bags) + ~(7 << 17), // Unused (Deku Stick) + ~(7 << 20), // Unused (Deku Nut) +}; + +u8 gEquipShifts[] = { + 0, // Sword + 4, // Shield + 8, // Unused (Tunic) + 12, // Unused (Boots) +}; + +u8 gUpgradeShifts[] = { + 0, // Quivers + 3, // Bomb Bags + 6, // Unused (Strength) + 9, // Unused (Scale) + 12, // Wallets + 14, // Unused (Deku Seed Bullet Bags) + 17, // Unused (Deku Stick) + 20, // Unused (Deku Nut) }; -u8 gEquipShifts[] = { 0, 4, 8, 12 }; -u8 gUpgradeShifts[] = { 0, 3, 6, 9, 12, 14, 17, 20 }; u16 gUpgradeCapacities[][4] = { { 0, 30, 40, 50 }, // Quivers { 0, 20, 30, 40 }, // Bomb Bags - { 0, 0, 0, 0 }, // Unused (Scale) { 0, 0, 0, 0 }, // Unused (Strength) + { 0, 0, 0, 0 }, // Unused (Scale) { 99, 200, 500, 500 }, // Wallets { 0, 30, 40, 50 }, // Unused (Deku Seed Bullet Bags) { 0, 10, 20, 30 }, // Unused (Deku Stick) { 0, 20, 30, 40 }, // Unused (Deku Nut) }; -u32 gGsFlagsMask[] = { 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 }; -u32 gGsFlagsShift[] = { 0, 8, 16, 24 }; +// eight-bit masks +u32 gGsFlagsMask[] = { + 0xFF << 0, + 0xFF << 8, + 0xFF << 16, + 0xFF << 24, +}; + +u32 gGsFlagsShift[] = { + 0, + 8, + 16, + 24, +}; // TODO: use symbols for these icon textures once textures are properly in C void* gItemIcons[] = { - 0x08000000, // ITEM_OCARINA - 0x08001000, // ITEM_BOW - 0x08002000, // ITEM_ARROW_FIRE - 0x08003000, // ITEM_ARROW_ICE - 0x08004000, // ITEM_ARROW_LIGHT - 0x08005000, // ITEM_OCARINA_FAIRY - 0x08006000, // ITEM_BOMB - 0x08007000, // ITEM_BOMBCHU - 0x08008000, // ITEM_STICK - 0x08009000, // ITEM_NUT - 0x0800A000, // ITEM_MAGIC_BEANS - 0x0800B000, // ITEM_SLINGSHOT - 0x0800C000, // ITEM_POWDER_KEG - 0x0800D000, // ITEM_PICTO_BOX - 0x0800E000, // ITEM_LENS - 0x0800F000, // ITEM_HOOKSHOT - 0x08010000, // ITEM_SWORD_GREAT_FAIRY - 0x08011000, // ITEM_LONGSHOT - 0x08012000, // ITEM_BOTTLE - 0x08013000, // ITEM_POTION_RED - 0x08014000, // ITEM_POTION_GREEN - 0x08015000, // ITEM_POTION_BLUE - 0x08016000, // ITEM_FAIRY - 0x08017000, // ITEM_DEKU_PRINCESS - 0x08018000, // ITEM_MILK_BOTTLE - 0x08019000, // ITEM_MILK_HALF - 0x0801A000, // ITEM_FISH - 0x0801B000, // ITEM_BUG - 0x0801C000, // ITEM_BLUE_FIRE - 0x0801D000, // ITEM_POE - 0x0801E000, // ITEM_BIG_POE - 0x0801F000, // ITEM_SPRING_WATER - 0x08020000, // ITEM_HOT_SPRING_WATER - 0x08021000, // ITEM_ZORA_EGG - 0x08022000, // ITEM_GOLD_DUST - 0x08023000, // ITEM_MUSHROOM - 0x08024000, // ITEM_SEA_HORSE - 0x08025000, // ITEM_CHATEAU - 0x08026000, // ITEM_HYLIAN_LOACH - 0x08027000, // ITEM_OBABA_DRINK - 0x08028000, // ITEM_MOON_TEAR - 0x08029000, // ITEM_DEED_LAND - 0x0802A000, // ITEM_DEED_SWAMP - 0x0802B000, // ITEM_DEED_MOUNTAIN - 0x0802C000, // ITEM_DEED_OCEAN - 0x0802D000, // ITEM_ROOM_KEY - 0x0802E000, // ITEM_LETTER_MAMA - 0x0802F000, // ITEM_LETTER_TO_KAFEI - 0x08030000, // ITEM_PENDANT_MEMORIES - 0x08031000, // ITEM_TINGLE_MAP - 0x08032000, // ITEM_MASK_DEKU - 0x08033000, // ITEM_MASK_GORON - 0x08034000, // ITEM_MASK_ZORA - 0x08035000, // ITEM_MASK_FIERCE_DEITY - 0x08036000, // ITEM_MASK_TRUTH - 0x08037000, // ITEM_MASK_KAFEIS_MASK - 0x08038000, // ITEM_MASK_ALL_NIGHT - 0x08039000, // ITEM_MASK_BUNNY - 0x0803A000, // ITEM_MASK_KEATON - 0x0803B000, // ITEM_MASK_GARO - 0x0803C000, // ITEM_MASK_ROMANI - 0x0803D000, // ITEM_MASK_CIRCUS_LEADER - 0x0803E000, // ITEM_MASK_POSTMAN - 0x0803F000, // ITEM_MASK_COUPLE - 0x08040000, // ITEM_MASK_GREAT_FAIRY - 0x08041000, // ITEM_MASK_GIBDO - 0x08042000, // ITEM_MASK_DON_GERO - 0x08043000, // ITEM_MASK_KAMARO - 0x08044000, // ITEM_MASK_CAPTAIN - 0x08045000, // ITEM_MASK_STONE - 0x08046000, // ITEM_MASK_BREMEN - 0x08047000, // ITEM_MASK_BLAST - 0x08048000, // ITEM_MASK_SCENTS - 0x08049000, // ITEM_MASK_GIANT - 0x0804A000, // ITEM_BOW_ARROW_FIRE - 0x0804B000, // ITEM_BOW_ARROW_ICE - 0x0804C000, // ITEM_BOW_ARROW_LIGHT - 0x0804D000, // ITEM_SWORD_KOKIRI - 0x0804E000, // ITEM_SWORD_RAZOR - 0x0804F000, // ITEM_SWORD_GILDED - 0x08050000, // ITEM_SWORD_DEITY - 0x08051000, // ITEM_SHIELD_HERO - 0x08052000, // ITEM_SHIELD_MIRROR - 0x08053000, // ITEM_QUIVER_30 - 0x08054000, // ITEM_QUIVER_40 - 0x08055000, // ITEM_QUIVER_50 - 0x08056000, // ITEM_BOMB_BAG_20 - 0x08057000, // ITEM_BOMB_BAG_30 - 0x08058000, // ITEM_BOMB_BAG_40 - 0x08059000, // ITEM_WALLET_DEFAULT - 0x0805A000, // ITEM_WALLET_ADULT - 0x0805B000, // ITEM_WALLET_GIANT - 0x0805C000, // ITEM_FISHING_POLE - 0x0805D000, // ITEM_REMAINS_ODOLWA - 0x0805E000, // ITEM_REMAINS_GOHT - 0x0805F000, // ITEM_REMAINS_GYORG - 0x08060000, // ITEM_REMAINS_TWINMOLD - 0x08062000, // ITEM_SONG_SONATA - 0x08062000, // ITEM_SONG_LULLABY - 0x08062000, // ITEM_SONG_NOVA - 0x08062000, // ITEM_SONG_ELEGY - 0x08062000, // ITEM_SONG_OATH - 0x08062000, // ITEM_SONG_SARIA - 0x08062000, // ITEM_SONG_TIME - 0x08062000, // ITEM_SONG_HEALING - 0x08062000, // ITEM_SONG_EPONA - 0x08062000, // ITEM_SONG_SOARING - 0x08062000, // ITEM_SONG_STORMS - 0x08062000, // ITEM_SONG_SUN - 0x08061000, // ITEM_BOMBERS_NOTEBOOK - 0x09000000, // ITEM_SKULL_TOKEN - 0x09000900, // ITEM_HEART_CONTAINER - 0x09001200, // ITEM_HEART_PIECE - 0x08062000, // - 0x08062000, // - 0x08062000, // ITEM_SONG_LULLABY_INTRO - 0x09003600, // ITEM_KEY_BOSS - 0x09004800, // ITEM_COMPASS - 0x09003F00, // ITEM_DUNGEON_MAP - 0x09005100, // ITEM_STRAY_FAIRIES - 0x09005A00, // ITEM_KEY_SMALL - 0x09006300, // ITEM_MAGIC_SMALL - 0x09006C00, // ITEM_MAGIC_LARGE - 0x08062180, // ITEM_HEART_PIECE_2 - 0x08062A80, // ITEM_INVALID_1 - 0x08063380, // ITEM_INVALID_2 - 0x020028A0, // ITEM_INVALID_3 - 0x020025A0, // ITEM_INVALID_4 - 0x020027A0, // ITEM_INVALID_5 - 0x020026A0, // ITEM_INVALID_6 - 0x020024A0, // ITEM_INVALID_7 + 0x08000000, // ITEM_OCARINA + 0x08001000, // ITEM_BOW + 0x08002000, // ITEM_ARROW_FIRE + 0x08003000, // ITEM_ARROW_ICE + 0x08004000, // ITEM_ARROW_LIGHT + 0x08005000, // ITEM_OCARINA_FAIRY + 0x08006000, // ITEM_BOMB + 0x08007000, // ITEM_BOMBCHU + 0x08008000, // ITEM_STICK + 0x08009000, // ITEM_NUT + 0x0800A000, // ITEM_MAGIC_BEANS + 0x0800B000, // ITEM_SLINGSHOT + 0x0800C000, // ITEM_POWDER_KEG + 0x0800D000, // ITEM_PICTO_BOX + 0x0800E000, // ITEM_LENS + 0x0800F000, // ITEM_HOOKSHOT + 0x08010000, // ITEM_SWORD_GREAT_FAIRY + 0x08011000, // ITEM_LONGSHOT + 0x08012000, // ITEM_BOTTLE + 0x08013000, // ITEM_POTION_RED + 0x08014000, // ITEM_POTION_GREEN + 0x08015000, // ITEM_POTION_BLUE + 0x08016000, // ITEM_FAIRY + 0x08017000, // ITEM_DEKU_PRINCESS + 0x08018000, // ITEM_MILK_BOTTLE + 0x08019000, // ITEM_MILK_HALF + 0x0801A000, // ITEM_FISH + 0x0801B000, // ITEM_BUG + 0x0801C000, // ITEM_BLUE_FIRE + 0x0801D000, // ITEM_POE + 0x0801E000, // ITEM_BIG_POE + 0x0801F000, // ITEM_SPRING_WATER + 0x08020000, // ITEM_HOT_SPRING_WATER + 0x08021000, // ITEM_ZORA_EGG + 0x08022000, // ITEM_GOLD_DUST + 0x08023000, // ITEM_MUSHROOM + 0x08024000, // ITEM_SEA_HORSE + 0x08025000, // ITEM_CHATEAU + 0x08026000, // ITEM_HYLIAN_LOACH + 0x08027000, // ITEM_OBABA_DRINK + 0x08028000, // ITEM_MOON_TEAR + 0x08029000, // ITEM_DEED_LAND + 0x0802A000, // ITEM_DEED_SWAMP + 0x0802B000, // ITEM_DEED_MOUNTAIN + 0x0802C000, // ITEM_DEED_OCEAN + 0x0802D000, // ITEM_ROOM_KEY + 0x0802E000, // ITEM_LETTER_MAMA + 0x0802F000, // ITEM_LETTER_TO_KAFEI + 0x08030000, // ITEM_PENDANT_MEMORIES + 0x08031000, // ITEM_TINGLE_MAP + 0x08032000, // ITEM_MASK_DEKU + 0x08033000, // ITEM_MASK_GORON + 0x08034000, // ITEM_MASK_ZORA + 0x08035000, // ITEM_MASK_FIERCE_DEITY + 0x08036000, // ITEM_MASK_TRUTH + 0x08037000, // ITEM_MASK_KAFEIS_MASK + 0x08038000, // ITEM_MASK_ALL_NIGHT + 0x08039000, // ITEM_MASK_BUNNY + 0x0803A000, // ITEM_MASK_KEATON + 0x0803B000, // ITEM_MASK_GARO + 0x0803C000, // ITEM_MASK_ROMANI + 0x0803D000, // ITEM_MASK_CIRCUS_LEADER + 0x0803E000, // ITEM_MASK_POSTMAN + 0x0803F000, // ITEM_MASK_COUPLE + 0x08040000, // ITEM_MASK_GREAT_FAIRY + 0x08041000, // ITEM_MASK_GIBDO + 0x08042000, // ITEM_MASK_DON_GERO + 0x08043000, // ITEM_MASK_KAMARO + 0x08044000, // ITEM_MASK_CAPTAIN + 0x08045000, // ITEM_MASK_STONE + 0x08046000, // ITEM_MASK_BREMEN + 0x08047000, // ITEM_MASK_BLAST + 0x08048000, // ITEM_MASK_SCENTS + 0x08049000, // ITEM_MASK_GIANT + 0x0804A000, // ITEM_BOW_ARROW_FIRE + 0x0804B000, // ITEM_BOW_ARROW_ICE + 0x0804C000, // ITEM_BOW_ARROW_LIGHT + 0x0804D000, // ITEM_SWORD_KOKIRI + 0x0804E000, // ITEM_SWORD_RAZOR + 0x0804F000, // ITEM_SWORD_GILDED + 0x08050000, // ITEM_SWORD_DEITY + 0x08051000, // ITEM_SHIELD_HERO + 0x08052000, // ITEM_SHIELD_MIRROR + 0x08053000, // ITEM_QUIVER_30 + 0x08054000, // ITEM_QUIVER_40 + 0x08055000, // ITEM_QUIVER_50 + 0x08056000, // ITEM_BOMB_BAG_20 + 0x08057000, // ITEM_BOMB_BAG_30 + 0x08058000, // ITEM_BOMB_BAG_40 + 0x08059000, // ITEM_WALLET_DEFAULT + 0x0805A000, // ITEM_WALLET_ADULT + 0x0805B000, // ITEM_WALLET_GIANT + 0x0805C000, // ITEM_FISHING_POLE + 0x0805D000, // ITEM_REMAINS_ODOLWA + 0x0805E000, // ITEM_REMAINS_GOHT + 0x0805F000, // ITEM_REMAINS_GYORG + 0x08060000, // ITEM_REMAINS_TWINMOLD + 0x08062000, // ITEM_SONG_SONATA + 0x08062000, // ITEM_SONG_LULLABY + 0x08062000, // ITEM_SONG_NOVA + 0x08062000, // ITEM_SONG_ELEGY + 0x08062000, // ITEM_SONG_OATH + 0x08062000, // ITEM_SONG_SARIA + 0x08062000, // ITEM_SONG_TIME + 0x08062000, // ITEM_SONG_HEALING + 0x08062000, // ITEM_SONG_EPONA + 0x08062000, // ITEM_SONG_SOARING + 0x08062000, // ITEM_SONG_STORMS + 0x08062000, // ITEM_SONG_SUN + 0x08061000, // ITEM_BOMBERS_NOTEBOOK + 0x09000000, // ITEM_SKULL_TOKEN + 0x09000900, // ITEM_HEART_CONTAINER + 0x09001200, // ITEM_HEART_PIECE + 0x08062000, // + 0x08062000, // + 0x08062000, // ITEM_SONG_LULLABY_INTRO + 0x09003600, // ITEM_KEY_BOSS + 0x09004800, // ITEM_COMPASS + 0x09003F00, // ITEM_DUNGEON_MAP + 0x09005100, // ITEM_STRAY_FAIRIES + 0x09005A00, // ITEM_KEY_SMALL + 0x09006300, // ITEM_MAGIC_SMALL + 0x09006C00, // ITEM_MAGIC_LARGE + 0x08062180, // ITEM_HEART_PIECE_2 + 0x08062A80, // ITEM_INVALID_1 + 0x08063380, // ITEM_INVALID_2 + gOcarinaCUpTex, // ITEM_INVALID_3 + gOcarinaCDownTex, // ITEM_INVALID_4 + gOcarinaCLeftTex, // ITEM_INVALID_5 + gOcarinaCRightTex, // ITEM_INVALID_6 + gOcarinaATex, // ITEM_INVALID_7 }; // Used to map item IDs to inventory slots @@ -412,7 +474,7 @@ u16 gScenesPerRegion[11][27] = { }, }; -s32 func_8012EC80(GlobalContext* globalCtx) { +s32 Inventory_GetBtnBItem(GlobalContext* globalCtx) { if (gSaveContext.buttonStatus[0] == BTN_DISABLED) { return ITEM_NONE; } else if (gSaveContext.unk_1015 == ITEM_NONE) { @@ -429,129 +491,237 @@ s32 func_8012EC80(GlobalContext* globalCtx) { } } -void func_8012ED34(s16 equipment); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012ED34.s") - -u8 func_8012ED78(GlobalContext* globalCtx, s16 equipment); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012ED78.s") - -void func_8012EDE8(s16 arg0, u32 arg1); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012EDE8.s") - -s32 func_8012EE34(s16 arg0) { - s16 num = 0; - - if (arg0 >= 0x20) { - if (arg0 < 0x40) { - num = 1; - } else if (arg0 < 0x60) { - num = 2; - } else if (arg0 < 0x80) { - num = 3; - } else if (arg0 < 0xA0) { - num = 4; - } else if (arg0 < 0xC0) { - num = 5; - } else if (arg0 < 0xE0) { - num = 6; +/** + * Only changes shield + */ +void Inventory_ChangeEquipment(s16 value) { + SET_EQUIP_VALUE(EQUIP_SHIELD, value); +} + +/** + * Only deletes shield, equipment argument unused and is a remnant of OoT + */ +u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) { + Player* player = GET_PLAYER(globalCtx); + + if (CUR_EQUIP_VALUE_VOID(EQUIP_SHIELD) != 0) { + SET_EQUIP_VALUE(EQUIP_SHIELD, 0); + Player_SetEquipmentData(globalCtx, player); + return true; + } + + return false; +} + +void Inventory_ChangeUpgrade(s16 upgrade, u32 value) { + u32 upgrades = gSaveContext.inventory.upgrades; + + upgrades &= gUpgradeNegMasks[upgrade]; + upgrades |= value << gUpgradeShifts[upgrade]; + + gSaveContext.inventory.upgrades = upgrades; +} + +s32 Inventory_IsMapVisible(s16 sceneNum) { + s16 index = 0; + + /** + * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum, + * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible, + * 224 bits were allocated to this although there are only 112 scenes + */ + if (sceneNum >= 0x20) { + if (sceneNum < 0x40) { + index = 1; + } else if (sceneNum < 0x60) { + index = 2; + } else if (sceneNum < 0x80) { + index = 3; + } else if (sceneNum < 0xA0) { + index = 4; + } else if (sceneNum < 0xC0) { + index = 5; + } else if (sceneNum < 0xE0) { + index = 6; } } - if (gSaveContext.roomInf[125][num] & gBitFlags[arg0 - (num << 5)]) { - return 1; + if (gSaveContext.scenesVisible[index] & gBitFlags[sceneNum - (index << 5)]) { + return true; } - return 0; + return false; } -static u16 D_801C2380[6][12] = { - { SCENE_00KEIKOKU, SCENE_BOTI, SCENE_13HUBUKINOMITI, SCENE_24KEMONOMITI, SCENE_IKANAMAE, SCENE_TOWN, SCENE_ICHIBA, - SCENE_BACKTOWN, SCENE_CLOCKTOWER, SCENE_ALLEY, -1 }, - { SCENE_20SICHITAI, SCENE_20SICHITAI2, SCENE_21MITURINMAE, SCENE_22DEKUCITY, SCENE_DEKU_KING, SCENE_KINSTA1, -1 }, - { SCENE_10YUKIYAMANOMURA, SCENE_10YUKIYAMANOMURA2, SCENE_11GORONNOSATO, SCENE_11GORONNOSATO2, SCENE_16GORON_HOUSE, - SCENE_12HAKUGINMAE, SCENE_14YUKIDAMANOMITI, SCENE_GORONRACE, SCENE_17SETUGEN, SCENE_17SETUGEN2, -1 }, - { SCENE_F01, SCENE_ROMANYMAE, SCENE_OMOYA, SCENE_F01C, SCENE_F01_B, SCENE_KOEPONARACE, -1 }, - { SCENE_30GYOSON, SCENE_SINKAI, SCENE_31MISAKI, SCENE_TORIDE, SCENE_KAIZOKU, SCENE_33ZORACITY, SCENE_35TAKI, -1 }, - { SCENE_F40, SCENE_F41, SCENE_CASTLE, SCENE_IKANA, SCENE_REDEAD, -1 }, +static u16 sScenesPerTingleMap[6][12] = { + { + // Clock Town Tingle Map + SCENE_00KEIKOKU, + SCENE_BOTI, + SCENE_13HUBUKINOMITI, + SCENE_24KEMONOMITI, + SCENE_IKANAMAE, + SCENE_TOWN, + SCENE_ICHIBA, + SCENE_BACKTOWN, + SCENE_CLOCKTOWER, + SCENE_ALLEY, + -1, + }, + { + // Woodfall Tingle Map + SCENE_20SICHITAI, + SCENE_20SICHITAI2, + SCENE_21MITURINMAE, + SCENE_22DEKUCITY, + SCENE_DEKU_KING, + SCENE_KINSTA1, + -1, + }, + { + // Snowhead Tingle Map + SCENE_10YUKIYAMANOMURA, + SCENE_10YUKIYAMANOMURA2, + SCENE_11GORONNOSATO, + SCENE_11GORONNOSATO2, + SCENE_16GORON_HOUSE, + SCENE_12HAKUGINMAE, + SCENE_14YUKIDAMANOMITI, + SCENE_GORONRACE, + SCENE_17SETUGEN, + SCENE_17SETUGEN2, + -1, + }, + { + // Romani Ranch Tingle Map + SCENE_F01, + SCENE_ROMANYMAE, + SCENE_OMOYA, + SCENE_F01C, + SCENE_F01_B, + SCENE_KOEPONARACE, + -1, + }, + { + // Great Bay Tingle Map + SCENE_30GYOSON, + SCENE_SINKAI, + SCENE_31MISAKI, + SCENE_TORIDE, + SCENE_KAIZOKU, + SCENE_33ZORACITY, + SCENE_35TAKI, + -1, + }, + { + // Stone Tower Tingle Map + SCENE_F40, + SCENE_F41, + SCENE_CASTLE, + SCENE_IKANA, + SCENE_REDEAD, + -1, + }, }; -void func_8012EF0C(s16 arg0) { - s16 phi_v0 = 0; - s16 phi_v1 = 0; - u16(*new_var)[] = &D_801C2380[arg0]; +/** + * Map visibility is achieved by purchasing a tingle map + */ +void Inventory_SetMapVisibility(s16 tingleIndex) { + s16 i = 0; + s16 index = 0; + u16(*tingleMapSceneIndices)[] = &sScenesPerTingleMap[tingleIndex]; - if ((arg0 >= 0) && (arg0 < 6)) { + if ((tingleIndex >= 0) && (tingleIndex < 6)) { while (true) { - if ((*new_var)[phi_v0] == 0xFFFF) { + if ((*tingleMapSceneIndices)[i] == 0xFFFF) { break; } - if (((s16)(*new_var)[phi_v0]) < 0x20) { - phi_v1 = 0; - } else if (((s16)(*new_var)[phi_v0]) < 0x40) { - phi_v1 = 1; - } else if (((s16)(*new_var)[phi_v0]) < 0x60) { - phi_v1 = 2; - } else if (((s16)(*new_var)[phi_v0]) < 0x80) { - phi_v1 = 3; - } else if (((s16)(*new_var)[phi_v0]) < 0xA0) { - phi_v1 = 4; - } else if (((s16)(*new_var)[phi_v0]) < 0xC0) { - phi_v1 = 5; - } else if (((s16)(*new_var)[phi_v0]) < 0xE0) { - phi_v1 = 6; + /** + * a single index of scenesVisible can only hold 32 bits. So for every 32 scenes in the scene enum, + * increment to the next index of scenesVisible so that every scene gets a unique flag in scenesVisible, + * 224 bits were allocated to this although there are only 112 scenes + */ + if (((s16)(*tingleMapSceneIndices)[i]) < 0x20) { + index = 0; + } else if (((s16)(*tingleMapSceneIndices)[i]) < 0x40) { + index = 1; + } else if (((s16)(*tingleMapSceneIndices)[i]) < 0x60) { + index = 2; + } else if (((s16)(*tingleMapSceneIndices)[i]) < 0x80) { + index = 3; + } else if (((s16)(*tingleMapSceneIndices)[i]) < 0xA0) { + index = 4; + } else if (((s16)(*tingleMapSceneIndices)[i]) < 0xC0) { + index = 5; + } else if (((s16)(*tingleMapSceneIndices)[i]) < 0xE0) { + index = 6; } - // Required to match - gSaveContext.roomInf[125][phi_v1] = - gSaveContext.roomInf[125][phi_v1] | gBitFlags[(s16)(*new_var)[phi_v0] - (phi_v1 << 5)]; - phi_v0++; + gSaveContext.scenesVisible[index] = + gSaveContext.scenesVisible[index] | gBitFlags[(s16)(*tingleMapSceneIndices)[i] - (index << 5)]; + i++; } - if ((*new_var) == D_801C2380[0]) { - gSaveContext.unk_F60 |= 3; - } else if ((*new_var) == D_801C2380[1]) { - gSaveContext.unk_F60 |= 0x1C; - } else if ((*new_var) == D_801C2380[2]) { - gSaveContext.unk_F60 |= 0xE0; - } else if ((*new_var) == D_801C2380[3]) { - gSaveContext.unk_F60 |= 0x100; - } else if ((*new_var) == D_801C2380[4]) { - gSaveContext.unk_F60 |= 0x1E00; - } else if ((*new_var) == D_801C2380[5]) { - gSaveContext.unk_F60 |= 0x6000; + if ((*tingleMapSceneIndices) == sScenesPerTingleMap[0]) { + gSaveContext.mapsVisible |= 3; + } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[1]) { + gSaveContext.mapsVisible |= 0x1C; + } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[2]) { + gSaveContext.mapsVisible |= 0xE0; + } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[3]) { + gSaveContext.mapsVisible |= 0x100; + } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[4]) { + gSaveContext.mapsVisible |= 0x1E00; + } else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[5]) { + gSaveContext.mapsVisible |= 0x6000; } } XREG(95) = 0; } -void func_8012F0EC(s16 arg0); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012F0EC.s") +/** + * Also stores the players filename into dekuPlaygroundPlayerName + */ +void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) { + s16 i; + + gSaveContext.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.unk_3DE0[timerId]; -#ifdef NON_MATCHING -// regalloc -void func_8012F1BC(s16 sceneIndex) { + for (i = 0; i < 8; i++) { + gSaveContext.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = gSaveContext.playerName[i]; + } +} + +void Inventory_IncrementSkullTokenCount(s16 sceneIndex) { if (sceneIndex == SCENE_KINSTA1) { - gSaveContext.roomInf[126][0] = ((((gSaveContext.roomInf[126][0] & 0xFFFF0000) >> 0x10) + 1) << 0x10) | - (gSaveContext.roomInf[126][0] & 0xFFFF); + // Swamp Spider House (increment high bits of skullTokenCount) + gSaveContext.skullTokenCount = ((u16)(((gSaveContext.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | + (gSaveContext.skullTokenCount & 0xFFFF); } else { - gSaveContext.roomInf[126][0] = - ((gSaveContext.roomInf[126][0] + 1) & 0xFFFF) | (gSaveContext.roomInf[126][0] & 0xFFFF0000); + // Ocean Spider House (increment low bits of skullTokenCount) + gSaveContext.skullTokenCount = + (((u16)gSaveContext.skullTokenCount + 1) & 0xFFFF) | (gSaveContext.skullTokenCount & 0xFFFF0000); } } -#else -void func_8012F1BC(s16 arg0); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012F1BC.s") -#endif -s16 func_8012F22C(s16 sceneIndex) { +s16 Inventory_GetSkullTokenCount(s16 sceneIndex) { if (sceneIndex == SCENE_KINSTA1) { - return (gSaveContext.roomInf[126][0] & 0xFFFF0000) >> 0x10; + // Swamp Spider House + return (gSaveContext.skullTokenCount & 0xFFFF0000) >> 0x10; } else { - return gSaveContext.roomInf[126][0] & 0xFFFF; + // Ocean Spider House + return gSaveContext.skullTokenCount & 0xFFFF; } } -void func_8012F278(GlobalContext* globalCtx); -#pragma GLOBAL_ASM("asm/non_matchings/code/code_8012EC80/func_8012F278.s") +void Inventory_SaveLotteryCodeGuess(GlobalContext* globalCtx) { + u16 lotteryCodeGuess; + + lotteryCodeGuess = ((globalCtx->msgCtx.unk12054 & 0xF) << 8); // First Digit + lotteryCodeGuess |= ((globalCtx->msgCtx.unk12056 & 0xF) << 4); // Second Digit + lotteryCodeGuess |= (globalCtx->msgCtx.unk12058 & 0xF); // Third Digit + gSaveContext.lotteryCodeGuess = (gSaveContext.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF); +} diff --git a/src/code/z_actor.c b/src/code/z_actor.c index d433ae12c..d4f1def2f 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2233,11 +2233,11 @@ void func_800B9120(ActorContext* actorCtx) { void Actor_InitContext(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEntry* actorEntry) { ActorOverlay* overlayEntry; - u32* cycleFlags; + CycleSceneFlags* cycleFlags; s32 i; gSaveContext.weekEventReg[92] |= 0x80; - cycleFlags = gSaveContext.cycleSceneFlags[convert_scene_number_among_shared_scenes(globalCtx->sceneNum)]; + cycleFlags = &gSaveContext.cycleSceneFlags[convert_scene_number_among_shared_scenes(globalCtx->sceneNum)]; bzero(actorCtx, sizeof(ActorContext)); ActorOverlayTable_Init(); @@ -2251,14 +2251,14 @@ void Actor_InitContext(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEn overlayEntry++; } - actorCtx->flags.chest = cycleFlags[0]; - actorCtx->flags.switches[0] = cycleFlags[1]; - actorCtx->flags.switches[1] = cycleFlags[2]; + actorCtx->flags.chest = cycleFlags->chest; + actorCtx->flags.switches[0] = cycleFlags->swch0; + actorCtx->flags.switches[1] = cycleFlags->swch1; if (globalCtx->sceneNum == SCENE_INISIE_R) { - cycleFlags = gSaveContext.cycleSceneFlags[globalCtx->sceneNum]; + cycleFlags = &gSaveContext.cycleSceneFlags[globalCtx->sceneNum]; } - actorCtx->flags.collectible[0] = cycleFlags[4]; - actorCtx->flags.clearedRoom = cycleFlags[3]; + actorCtx->flags.collectible[0] = cycleFlags->collectible; + actorCtx->flags.clearedRoom = cycleFlags->clearedRoom; TitleCard_ContextInit(&globalCtx->state, &actorCtx->titleCtxt); func_800B6468(globalCtx); diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index 738f9373e..386adeb13 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -1,4 +1,5 @@ #include "global.h" +#include "interface/parameter_static/parameter_static.h" static s16 sHeartsPrimColors[3][3] = { { 255, 70, 50 }, { 255, 190, 0 }, { 100, 100, 255 } }; static s16 sHeartsEnvColors[3][3] = { { 50, 40, 60 }, { 255, 0, 0 }, { 0, 0, 255 } }; @@ -14,24 +15,21 @@ s16 sBeatingHeartsDDEnv[3]; s16 sHeartsDDPrim[2][3]; s16 sHeartsDDEnv[2][3]; -extern TexturePtr D_02000000; // Empty heart texture -extern TexturePtr D_02000100; // Quarter Heart Texture -extern TexturePtr D_02000200; // Half Heart Texture -extern TexturePtr D_02000300; // Three Quarter Heart Texture -extern TexturePtr D_02000400; // Full heart texture -extern TexturePtr D_02000500; // Empty Double Defense Heart texture -extern TexturePtr D_02000600; // Quarter Double Defense Heart Texture -extern TexturePtr D_02000700; // Half Double Defense Heart Texture -extern TexturePtr D_02000800; // Three Quarter Double Defense Heart Texture -extern TexturePtr D_02000900; // Full Double Defense Heart texture - -TexturePtr HeartTextures[] = { &D_02000400, &D_02000100, &D_02000100, &D_02000100, &D_02000100, &D_02000100, - &D_02000200, &D_02000200, &D_02000200, &D_02000200, &D_02000200, &D_02000300, - &D_02000300, &D_02000300, &D_02000300, &D_02000300 }; - -TexturePtr HeartDDTextures[] = { &D_02000900, &D_02000600, &D_02000600, &D_02000600, &D_02000600, &D_02000600, - &D_02000700, &D_02000700, &D_02000700, &D_02000700, &D_02000700, &D_02000800, - &D_02000800, &D_02000800, &D_02000800, &D_02000800 }; +TexturePtr HeartTextures[] = { + gHeartFullTex, gHeartQuarterTex, gHeartQuarterTex, gHeartQuarterTex, + gHeartQuarterTex, gHeartQuarterTex, gHeartHalfTex, gHeartHalfTex, + gHeartHalfTex, gHeartHalfTex, gHeartHalfTex, gHeartThreeQuarterTex, + gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, gHeartThreeQuarterTex, +}; + +TexturePtr HeartDDTextures[] = { + gDefenseHeartFullTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, + gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, gDefenseHeartQuarterTex, + gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartHalfTex, + gDefenseHeartHalfTex, gDefenseHeartHalfTex, gDefenseHeartThreeQuarterTex, + gDefenseHeartThreeQuarterTex, gDefenseHeartThreeQuarterTex, gDefenseHeartThreeQuarterTex, + gDefenseHeartThreeQuarterTex, +}; void LifeMeter_Init(GlobalContext* globalCtx) { InterfaceContext* interfaceCtx = &globalCtx->interfaceCtx; @@ -276,11 +274,11 @@ void LifeMeter_Draw(GlobalContext* globalCtx) { } if (i < fullHeartCount) { - heartTex = &D_02000400; + heartTex = gHeartFullTex; } else if (i == fullHeartCount) { heartTex = HeartTextures[fractionHeartCount]; } else { - heartTex = &D_02000000; + heartTex = gHeartEmptyTex; } } else { if (i < fullHeartCount) { @@ -316,11 +314,11 @@ void LifeMeter_Draw(GlobalContext* globalCtx) { gDPSetEnvColor(OVERLAY_DISP++, sHeartsDDEnv[1][0], sHeartsDDEnv[1][1], sHeartsDDEnv[1][2], 255); } if (i < fullHeartCount) { - heartTex = &D_02000900; + heartTex = gDefenseHeartFullTex; } else if (i == fullHeartCount) { heartTex = HeartDDTextures[fractionHeartCount]; } else { - heartTex = &D_02000500; + heartTex = gDefenseHeartEmptyTex; } } diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index ec227aaa9..44b1de152 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -72,9 +72,9 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80114CA0.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80114E90.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_HasEmptyBottle.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80114F2C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/Interface_HasItemInBottle.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_parameter/func_80114FD0.s") diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 99253188c..cb3d14e8b 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -68,7 +68,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123C58.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123C90.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_SetEquipmentData.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80123D50.s") diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 6bebcf938..ce75624d3 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -388,17 +388,17 @@ void Scene_HeaderCmdTimeSettings(GlobalContext* globalCtx, SceneCmd* cmd) { } if (cmd->timeSettings.unk6 != 0xFF) { - globalCtx->envCtx.unk_2 = cmd->timeSettings.unk6; + globalCtx->envCtx.timeIncrement = cmd->timeSettings.unk6; } else { - globalCtx->envCtx.unk_2 = 0; + globalCtx->envCtx.timeIncrement = 0; } - if ((gSaveContext.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (globalCtx->envCtx.unk_2 != 0)) { - globalCtx->envCtx.unk_2 = 5; + if ((gSaveContext.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (globalCtx->envCtx.timeIncrement != 0)) { + globalCtx->envCtx.timeIncrement = 5; } - if (gSaveContext.unk_3F58 == 0) { - REG(15) = globalCtx->envCtx.unk_2; + if (gSaveContext.sunsSongState == SUNSSONG_INACTIVE) { + REG(15) = globalCtx->envCtx.timeIncrement; } dayTime = gSaveContext.time; @@ -408,17 +408,20 @@ void Scene_HeaderCmdTimeSettings(GlobalContext* globalCtx, SceneCmd* cmd) { dayTime = gSaveContext.time; globalCtx->envCtx.unk_C = (Math_CosS(dayTime - 0x8000) * 20.0f) * 25.0f; - if (globalCtx->envCtx.unk_2 == 0 && gSaveContext.cutscene < 0xFFF0) { + if (globalCtx->envCtx.timeIncrement == 0 && gSaveContext.cutscene < 0xFFF0) { gSaveContext.environmentTime = gSaveContext.time; - if (gSaveContext.environmentTime >= 0x2AAA && gSaveContext.environmentTime < 0x4555) { - gSaveContext.environmentTime = 0x3555; - } else if (gSaveContext.environmentTime >= 0x4555 && gSaveContext.environmentTime < 0x5555) { - gSaveContext.environmentTime = 0x5555; - } else if (gSaveContext.environmentTime >= 0xAAAA && gSaveContext.environmentTime < 0xB555) { - gSaveContext.environmentTime = 0xB555; - } else if (gSaveContext.environmentTime >= 0xC000 && gSaveContext.environmentTime < 0xCAAA) { - gSaveContext.environmentTime = 0xCAAA; + if (gSaveContext.environmentTime >= CLOCK_TIME(4, 0) && gSaveContext.environmentTime < CLOCK_TIME(6, 30)) { + gSaveContext.environmentTime = CLOCK_TIME(5, 0); + } else if (gSaveContext.environmentTime >= CLOCK_TIME(6, 30) && + gSaveContext.environmentTime < CLOCK_TIME(8, 0)) { + gSaveContext.environmentTime = CLOCK_TIME(8, 0); + } else if (gSaveContext.environmentTime >= CLOCK_TIME(16, 0) && + gSaveContext.environmentTime < CLOCK_TIME(17, 0)) { + gSaveContext.environmentTime = CLOCK_TIME(17, 0); + } else if (gSaveContext.environmentTime >= CLOCK_TIME(18, 0) && + gSaveContext.environmentTime < CLOCK_TIME(19, 0)) { + gSaveContext.environmentTime = CLOCK_TIME(19, 0); } } } diff --git a/src/code/z_snap.c b/src/code/z_snap.c index 6d206eea5..639505aec 100644 --- a/src/code/z_snap.c +++ b/src/code/z_snap.c @@ -12,8 +12,8 @@ s32 func_8013A240(GlobalContext* globalCtx) { s32 seen; s32 count = 0; - gSaveContext.roomInf[123][3] = 0; - gSaveContext.roomInf[123][4] = 0; + gSaveContext.pictoFlags0 = 0; + gSaveContext.pictoFlags1 = 0; if (globalCtx->sceneNum == SCENE_20SICHITAI) { func_8013A41C(1); @@ -76,19 +76,19 @@ s32 func_8013A240(GlobalContext* globalCtx) { void func_8013A41C(s32 flag) { if (flag < 0x20) { - gSaveContext.roomInf[123][3] |= (1 << flag); + gSaveContext.pictoFlags0 |= (1 << flag); } else { flag &= 0x1F; - gSaveContext.roomInf[123][4] |= (1 << flag); + gSaveContext.pictoFlags1 |= (1 << flag); } } void func_8013A46C(s32 flag) { if (flag < 0x20) { - gSaveContext.roomInf[123][3] &= ~(1 << flag); + gSaveContext.pictoFlags0 &= ~(1 << flag); } else { flag &= 0x1F; - gSaveContext.roomInf[123][4] &= ~(1 << flag); + gSaveContext.pictoFlags1 &= ~(1 << flag); } } @@ -96,10 +96,10 @@ u32 func_8013A4C4(s32 flag) { SaveContext* saveCtx = &gSaveContext; if (flag < 0x20) { - return saveCtx->roomInf[123][3] & (1 << flag); + return saveCtx->pictoFlags0 & (1 << flag); } else { flag &= 0x1F; - return saveCtx->roomInf[123][4] & (1 << flag); + return saveCtx->pictoFlags1 & (1 << flag); } } @@ -123,36 +123,36 @@ s32 func_8013A530(GlobalContext* globalCtx, Actor* actor, s32 flag, Vec3f* pos, distance = OLib_Vec3fDist(pos, &camera->eye); if ((distance < distanceMin) || (distanceMax < distance)) { - func_8013A41C(0x3f); - ret = 0x3f; + func_8013A41C(0x3F); + ret = 0x3F; } x = func_8013A504(func_800DFCB4(camera) + rot->x); y = func_8013A504(func_800DFCDC(camera) - (s16)(rot->y - 0x7FFF)); if ((0 < angleError) && ((angleError < x) || (angleError < y))) { - func_8013A41C(0x3e); - ret |= 0x3e; + func_8013A41C(0x3E); + ret |= 0x3E; } Actor_GetProjectedPos(globalCtx, pos, &screenSpace, &distance); x = (s16)(screenSpace.x * distance * 160.0f + 160.0f) - 85; y = (s16)(screenSpace.y * distance * -120.0f + 120.0f) - 67; if ((x < 0) || (0x96 < x) || (y < 0) || (0x69 < y)) { - func_8013A41C(0x3d); - ret |= 0x3d; + func_8013A41C(0x3D); + ret |= 0x3D; } if (BgCheck_ProjectileLineTest(&globalCtx->colCtx, pos, &camera->eye, &screenSpace, &poly, true, true, true, true, &bgId)) { - func_8013A41C(0x3c); - ret |= 0x3c; + func_8013A41C(0x3C); + ret |= 0x3C; } actors[0] = actor; actors[1] = &GET_PLAYER(globalCtx)->actor; - if (CollisionCheck_LineOCCheck(globalCtx, &globalCtx->colChkCtx, pos, &camera->eye, actors, 2) != 0) { - func_8013A41C(0x3b); - ret |= 0x3b; + if (CollisionCheck_LineOCCheck(globalCtx, &globalCtx->colChkCtx, pos, &camera->eye, actors, 2)) { + func_8013A41C(0x3B); + ret |= 0x3B; } if (ret == 0) { |
