summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHenny022p <info@henny022.de>2022-05-20 19:24:49 +0200
committerHenny022p <info@henny022.de>2022-05-20 19:24:49 +0200
commit2f87c65df4c3b4a571fd758292cff15ca769e813 (patch)
tree2a449b92586c070327b389856a7c2c84ea787864 /src
parent62134a6884a409ceae6e2d5d76d02a505c487b19 (diff)
match some playerUtils functions
Diffstat (limited to 'src')
-rw-r--r--src/game.c4
-rw-r--r--src/playerUtils.c49
2 files changed, 22 insertions, 31 deletions
diff --git a/src/game.c b/src/game.c
index 607c7f42..8d047356 100644
--- a/src/game.c
+++ b/src/game.c
@@ -180,10 +180,6 @@ extern u8 gUnk_0200AF14;
extern u8 gUnk_080FE1C6[];
extern void (*const gUnk_080FE2AC[])(void);
-/** @see Item */
-void ForceEquipItem(u32, u32);
-extern void SetInventoryValue(u32, u32);
-
extern u8 gUnk_080FE1DD[];
extern void (*const gUnk_080FE2A0[])(void);
diff --git a/src/playerUtils.c b/src/playerUtils.c
index 09a3852a..59575041 100644
--- a/src/playerUtils.c
+++ b/src/playerUtils.c
@@ -38,7 +38,6 @@ typedef struct {
extern u8 gMapData;
extern const u8 gUnk_020176E0[];
extern const ScreenTransitionData gUnk_0813AD88[];
-extern u8 gUnk_02002B32[];
bool32 sub_08077758(PlayerEntity*);
bool32 sub_080777A0();
@@ -3000,27 +2999,36 @@ u32 FinalizeSave(void) {
}
u32 GetInventoryValue(u32 item) {
- u32 tmp = item / 4;
- return gUnk_02002B32[tmp] >> ((item & 3) << 1) & 3;
+ u8* address = &gSave.inventory[item / 4];
+ return *address >> ((item & 3) << 1) & 3;
}
-ASM_FUNC("asm/non_matching/playerUtils/SetInventoryValue.inc", void SetInventoryValue(u32 a, u32 b))
+u32 SetInventoryValue(u32 item, u32 value) {
+ u32 masked_value, value_update, old_value, offset;
+ u8* address;
-NONMATCH("asm/non_matching/playerUtils/sub_0807CAC8.inc", void sub_0807CAC8(u32 param_1)) {
- gSave.unk46C[gArea.dungeon_idx + 0x10] |= (1 << param_1);
+ address = &gSave.inventory[item / 4];
+ offset = (item % 4) * 2;
+ value_update = value << offset;
+ old_value = *address;
+ masked_value = old_value & (3 << offset);
+ *address = (old_value ^ masked_value) | value_update;
+ return masked_value >> offset;
}
-END_NONMATCH
-NONMATCH("asm/non_matching/playerUtils/sub_0807CAEC.inc", u32 sub_0807CAEC(u32 param_1)) {
- return gSave.unk46C[gArea.dungeon_idx + 0x10] >> param_1 & 1;
+void sub_0807CAC8(u32 param_1) {
+ gSave.unk47C[gArea.dungeon_idx] |= (1 << param_1);
+}
+
+u32 sub_0807CAEC(u32 param_1) {
+ return gSave.unk47C[gArea.dungeon_idx] >> param_1 & 1;
}
-END_NONMATCH
u32 CheckLocalFlagByBank(u32 bank, u32 flag) {
return ReadBit(gSave.flags, bank + flag);
}
-NONMATCH("asm/non_matching/playerUtils/sub_0807CB24.inc", bool32 sub_0807CB24(s32 param_1, u32 param_2)) {
+bool32 sub_0807CB24(s32 param_1, u32 param_2) {
bool32 result = TRUE;
switch (param_1) {
case 0:
@@ -3043,27 +3051,14 @@ NONMATCH("asm/non_matching/playerUtils/sub_0807CB24.inc", bool32 sub_0807CB24(s3
result = CheckLocalFlagByBank(gLocalFlagBanks[param_1], param_2);
break;
case 0xf:
- if (GetInventoryValue(param_2) == 0) {
- result = FALSE;
- } else {
- result = TRUE;
- }
+ result = GetInventoryValue(param_2) != 0;
break;
case 0x10:
- if (GetInventoryValue(param_2) == 1) {
- result = TRUE;
- } else {
- result = FALSE;
- }
+ result = GetInventoryValue(param_2) == 1;
break;
case 0x11:
- if (GetInventoryValue(param_2) == 2) {
- result = TRUE;
- } else {
- result = FALSE;
- }
+ result = GetInventoryValue(param_2) == 2;
break;
}
return result;
}
-END_NONMATCH