summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorengineer124 <47598039+engineer124@users.noreply.github.com>2022-02-05 12:49:21 +1100
committerGitHub <noreply@github.com>2022-02-05 01:49:21 +0000
commit2104c163628b1e6fbea36cd5c648fca515960a39 (patch)
tree101de7d2633ea069212ca8a02c1f3ec6b59f25cf /src/code
parentbcdd99df08f58fed2cb7f99331b21550fda1f1ca (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.c636
-rw-r--r--src/code/z_actor.c16
-rw-r--r--src/code/z_lifemeter.c42
-rw-r--r--src/code/z_parameter.c4
-rw-r--r--src/code/z_player_lib.c2
-rw-r--r--src/code/z_scene.c33
-rw-r--r--src/code/z_snap.c38
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) {