diff options
| author | Henny022p <info@henny022.de> | 2022-05-20 19:24:49 +0200 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2022-05-20 19:24:49 +0200 |
| commit | 2f87c65df4c3b4a571fd758292cff15ca769e813 (patch) | |
| tree | 2a449b92586c070327b389856a7c2c84ea787864 /src | |
| parent | 62134a6884a409ceae6e2d5d76d02a505c487b19 (diff) | |
match some playerUtils functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/game.c | 4 | ||||
| -rw-r--r-- | src/playerUtils.c | 49 |
2 files changed, 22 insertions, 31 deletions
@@ -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 |
