mirror of https://github.com/zeldaret/tmc.git
match some playerUtils functions
This commit is contained in:
parent
62134a6884
commit
2f87c65df4
|
|
@ -1,21 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, lr}
|
||||
adds r3, r0, #0
|
||||
lsrs r4, r3, #2
|
||||
ldr r0, _0807CAC4 @ =gUnk_02002B32
|
||||
adds r4, r4, r0
|
||||
movs r0, #3
|
||||
ands r3, r0
|
||||
lsls r3, r3, #1
|
||||
lsls r1, r3
|
||||
ldrb r2, [r4]
|
||||
lsls r0, r3
|
||||
ands r0, r2
|
||||
eors r2, r0
|
||||
orrs r2, r1
|
||||
strb r2, [r4]
|
||||
lsrs r0, r3
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0807CAC4: .4byte gUnk_02002B32
|
||||
.syntax divided
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
.syntax unified
|
||||
ldr r2, _0807CAE0 @ =gSave
|
||||
ldr r1, _0807CAE4 @ =gArea
|
||||
ldr r3, _0807CAE8 @ =0x0000047C
|
||||
adds r2, r2, r3
|
||||
ldrb r1, [r1, #3]
|
||||
adds r2, r2, r1
|
||||
movs r1, #1
|
||||
lsls r1, r0
|
||||
ldrb r0, [r2]
|
||||
orrs r1, r0
|
||||
strb r1, [r2]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0807CAE0: .4byte gSave
|
||||
_0807CAE4: .4byte gArea
|
||||
_0807CAE8: .4byte 0x0000047C
|
||||
.syntax divided
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
.syntax unified
|
||||
adds r2, r0, #0
|
||||
ldr r0, _0807CB04 @ =gSave
|
||||
ldr r1, _0807CB08 @ =gArea
|
||||
ldr r3, _0807CB0C @ =0x0000047C
|
||||
adds r0, r0, r3
|
||||
ldrb r1, [r1, #3]
|
||||
adds r0, r0, r1
|
||||
ldrb r0, [r0]
|
||||
asrs r0, r2
|
||||
movs r1, #1
|
||||
ands r0, r1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0807CB04: .4byte gSave
|
||||
_0807CB08: .4byte gArea
|
||||
_0807CB0C: .4byte 0x0000047C
|
||||
.syntax divided
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
.syntax unified
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
adds r3, r1, #0
|
||||
cmp r2, #0x11
|
||||
bhi _0807CB84
|
||||
lsls r0, r2, #2
|
||||
ldr r1, _0807CB38 @ =_0807CB3C
|
||||
adds r0, r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0807CB38: .4byte _0807CB3C
|
||||
_0807CB3C: @ jump table
|
||||
.4byte _0807CB84 @ case 0
|
||||
.4byte _0807CB88 @ case 1
|
||||
.4byte _0807CB88 @ case 2
|
||||
.4byte _0807CB88 @ case 3
|
||||
.4byte _0807CB88 @ case 4
|
||||
.4byte _0807CB88 @ case 5
|
||||
.4byte _0807CB88 @ case 6
|
||||
.4byte _0807CB88 @ case 7
|
||||
.4byte _0807CB88 @ case 8
|
||||
.4byte _0807CB88 @ case 9
|
||||
.4byte _0807CB88 @ case 10
|
||||
.4byte _0807CB88 @ case 11
|
||||
.4byte _0807CB88 @ case 12
|
||||
.4byte _0807CB88 @ case 13
|
||||
.4byte _0807CB84 @ case 14
|
||||
.4byte _0807CBA0 @ case 15
|
||||
.4byte _0807CBAE @ case 16
|
||||
.4byte _0807CBBC @ case 17
|
||||
_0807CB84:
|
||||
movs r1, #0
|
||||
b _0807CBCA
|
||||
_0807CB88:
|
||||
ldr r0, _0807CB9C @ =gLocalFlagBanks
|
||||
lsls r1, r2, #1
|
||||
adds r1, r1, r0
|
||||
ldrh r0, [r1]
|
||||
adds r1, r3, #0
|
||||
bl CheckLocalFlagByBank
|
||||
_0807CB96:
|
||||
adds r1, r0, #0
|
||||
b _0807CBCA
|
||||
.align 2, 0
|
||||
_0807CB9C: .4byte gLocalFlagBanks
|
||||
_0807CBA0:
|
||||
adds r0, r3, #0
|
||||
bl GetInventoryValue
|
||||
cmp r0, #0
|
||||
beq _0807CB96
|
||||
movs r0, #1
|
||||
b _0807CB96
|
||||
_0807CBAE:
|
||||
adds r0, r3, #0
|
||||
bl GetInventoryValue
|
||||
movs r1, #0
|
||||
cmp r0, #1
|
||||
bne _0807CBCA
|
||||
b _0807CBC8
|
||||
_0807CBBC:
|
||||
adds r0, r3, #0
|
||||
bl GetInventoryValue
|
||||
movs r1, #0
|
||||
cmp r0, #2
|
||||
bne _0807CBCA
|
||||
_0807CBC8:
|
||||
movs r1, #1
|
||||
_0807CBCA:
|
||||
adds r0, r1, #0
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
.syntax divided
|
||||
|
|
@ -365,7 +365,7 @@ u32 IsItemEquipped(u32);
|
|||
/** @see Item */
|
||||
u32 GetInventoryValue(u32);
|
||||
/** @see Item */
|
||||
void SetInventoryValue(u32, u32);
|
||||
u32 SetInventoryValue(u32, u32);
|
||||
s32 ModHealth(s32 delta);
|
||||
void ModRupees(s32 delta);
|
||||
void ModBombs(s32 delta);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,8 @@ typedef struct {
|
|||
/*0x24E*/ u8 unk24E[14];
|
||||
/*0x25C*/ u8 flags[0x200]; /**< Flags. */
|
||||
/*0x45C*/ u8 unk45C[0x10];
|
||||
/*0x46C*/ u8 unk46C[0x20];
|
||||
/*0x46C*/ u8 unk46C[0x10];
|
||||
/*0x46C*/ u8 unk47C[0x10];
|
||||
/*0x48C*/ u32 timers[7];
|
||||
/*0x4A8*/ u32 demo_timer; /**< Demo timer. */
|
||||
/*0x4AC*/ u8 filler4ac[0x8];
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ SECTIONS {
|
|||
. = 0x00002A40; gSave = .;
|
||||
. = 0x00002AC0; gUnk_02002AC0 = .;
|
||||
. = 0x00002B0E; gUnk_02002B0E = .;
|
||||
. = 0x00002B32; gUnk_02002B32 = .;
|
||||
. = 0x00002B54; gUnk_02002B54 = .;
|
||||
. = 0x00002B58; gUnk_02002B58 = .;
|
||||
. = 0x00002B6B; gUnk_02002B6B = .;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue