Match sub_08087F94

This commit is contained in:
Tal Hayon 2022-09-01 14:24:08 +03:00
parent 7f6d0f64e6
commit 137ce4b6e2
2 changed files with 118 additions and 267 deletions

View File

@ -1,265 +0,0 @@
.syntax unified
.ifdef JP
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r4, r1, #0
movs r0, #0x5f
bl CheckLocalFlag
cmp r0, #0
bne _08087E3E
adds r0, r5, #0
adds r0, #0x83
movs r7, #0
ldrsb r7, [r0, r7]
adds r3, r7, r4
mov ip, r0
cmp r4, #0
bge _08087E0A
adds r2, r5, #0
adds r2, #0x82
movs r0, #0
ldrsb r0, [r2, r0]
cmp r3, r0
bge _08087DF4
mov r0, ip
movs r1, #0
ldrsb r1, [r0, r1]
ldrb r3, [r2]
movs r0, #0
ldrsb r0, [r2, r0]
cmp r1, r0
beq _08087E3E
mov r2, ip
strb r3, [r2]
adds r1, r5, #0
adds r1, #0x81
movs r0, #1
b _08087E00
_08087DF4:
mov r0, ip
strb r3, [r0]
adds r1, r5, #0
adds r1, #0x81
ldrb r0, [r1]
adds r0, r0, r4
_08087E00:
strb r0, [r1]
movs r0, #0x69
bl SoundReq
b _08087E58
_08087E0A:
adds r1, r5, #0
adds r1, #0x81
ldrb r6, [r1]
adds r2, r6, r4
ldr r0, _08087E2C @ =0x02002A40
adds r0, #0xc2
ldrh r0, [r0]
cmp r2, r0
ble _08087E30
cmp r0, r6
beq _08087E3E
adds r2, r0, #0
subs r4, r2, r6
adds r3, r7, r4
cmp r3, #0x64
ble _08087E4C
b _08087E46
.align 2, 0
_08087E2C: .4byte 0x02002A40
_08087E30:
cmp r3, #0x64
ble _08087E4C
mov r2, ip
movs r0, #0
ldrsb r0, [r2, r0]
cmp r0, #0x64
bne _08087E46
_08087E3E:
adds r0, r5, #0
bl sub_08088034
b _08087E58
_08087E46:
movs r3, #0x64
subs r4, r3, r7
adds r2, r6, r4
_08087E4C:
mov r0, ip
strb r3, [r0]
strb r2, [r1]
movs r0, #0x69
bl SoundReq
_08087E58:
pop {r4, r5, r6, r7, pc}
.align 2, 0
.else
.ifdef EU
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r6, r1, #0
adds r7, r5, #0
adds r7, #0x83
ldrb r0, [r7]
adds r4, r0, r6
movs r0, #0x5f
bl CheckLocalFlag
cmp r0, #0
bne _080879CE
cmp r6, #0
bge _0808799E
adds r0, r5, #0
adds r0, #0x82
ldrb r1, [r0]
cmp r4, r1
bhs _0808798A
ldrb r0, [r7]
cmp r0, r1
beq _080879CE
strb r1, [r7]
adds r1, r5, #0
adds r1, #0x81
movs r0, #1
b _08087994
_0808798A:
strb r4, [r7]
adds r1, r5, #0
adds r1, #0x81
ldrb r0, [r1]
adds r0, r0, r6
_08087994:
strb r0, [r1]
movs r0, #0x69
bl SoundReq
b _080879EC
_0808799E:
adds r1, r5, #0
adds r1, #0x81
ldrb r3, [r1]
adds r2, r3, r6
ldr r0, _080879C0 @ =gSave
adds r0, #0xc2
ldrh r0, [r0]
cmp r2, r0
bls _080879C4
cmp r0, r3
beq _080879CE
adds r2, r0, #0
subs r0, r2, r3
ldrb r7, [r7]
adds r4, r0, r7
b _080879DE
.align 2, 0
_080879C0: .4byte gSave
_080879C4:
cmp r4, #0x64
bls _080879DE
ldrb r0, [r7]
cmp r0, #0x64
bne _080879D6
_080879CE:
adds r0, r5, #0
bl sub_08088034
b _080879EC
_080879D6:
movs r4, #0x64
ldrb r0, [r7]
subs r6, r4, r0
adds r2, r3, r6
_080879DE:
adds r0, r5, #0
adds r0, #0x83
strb r4, [r0]
strb r2, [r1]
movs r0, #0x69
bl SoundReq
_080879EC:
pop {r4, r5, r6, r7, pc}
.align 2, 0
.else
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r4, r1, #0
movs r0, #0x5f
bl CheckLocalFlag
cmp r0, #0
bne _08088014
adds r0, r5, #0
adds r0, #0x83
movs r1, #0
ldrsb r1, [r0, r1]
mov ip, r1
adds r3, r1, r4
adds r7, r0, #0
cmp r4, #0
bge _08087FEA
adds r2, r5, #0
adds r2, #0x82
movs r0, #0
ldrsb r0, [r2, r0]
cmp r3, r0
bge _08087FD6
movs r1, #0
ldrsb r1, [r7, r1]
ldrb r3, [r2]
cmp r1, r0
beq _08088014
strb r3, [r7]
adds r1, r5, #0
adds r1, #0x81
movs r0, #1
b _08087FE0
_08087FD6:
strb r3, [r7]
adds r1, r5, #0
adds r1, #0x81
ldrb r0, [r1]
adds r0, r0, r4
_08087FE0:
strb r0, [r1]
movs r0, #0x69
bl SoundReq
b _08088032
_08087FEA:
adds r1, r5, #0
adds r1, #0x81
ldrb r6, [r1]
adds r2, r6, r4
ldr r0, _0808801C @ =gSave
adds r0, #0xc2
ldrh r0, [r0]
cmp r2, r0
ble _08088008
cmp r0, r6
beq _08088014
adds r2, r0, #0
subs r4, r2, r6
mov r0, ip
adds r3, r0, r4
_08088008:
cmp r3, #0x64
ble _08088028
movs r0, #0
ldrsb r0, [r7, r0]
cmp r0, #0x64
bne _08088020
_08088014:
adds r0, r5, #0
bl sub_08088034
b _08088032
.align 2, 0
_0808801C: .4byte gSave
_08088020:
movs r3, #0x64
mov r0, ip
subs r4, r3, r0
adds r2, r6, r4
_08088028:
strb r3, [r7]
strb r2, [r1]
movs r0, #0x69
bl SoundReq
_08088032:
pop {r4, r5, r6, r7, pc}
.endif
.endif
.syntax divided

View File

@ -32,10 +32,11 @@ typedef struct {
/*0x80*/ u8 unk_80;
#endif
/*0x81*/ u8 unk_81;
/*0x82*/ s8 unk_82;
#ifdef EU
/*0x82*/ u8 unk_82;
/*0x83*/ u8 unk_83;
#else
/*0x82*/ s8 unk_82;
/*0x83*/ s8 unk_83;
#endif
} FigurineDeviceEntity;
@ -319,7 +320,122 @@ void sub_08087F58(FigurineDeviceEntity* this) {
}
}
ASM_FUNC("asm/non_matching/figurineDevice/sub_08087F94.inc", void sub_08087F94(FigurineDeviceEntity* this, s32 param_2))
void sub_08087F94(FigurineDeviceEntity* this, s32 param_2) {
#ifdef EU
u32 uVar8;
u32 iVar9;
iVar9 = this->unk_83 + param_2;
if (CheckLocalFlag(SHOP07_COMPLETE)) {
sub_08088034(this);
return;
}
if (param_2 < 0) {
if (iVar9 < this->unk_82) {
if (this->unk_83 != this->unk_82) {
this->unk_83 = this->unk_82;
this->unk_81 = 1;
SoundReq(SFX_TEXTBOX_CHOICE);
} else {
sub_08088034(this);
}
} else {
this->unk_83 = iVar9;
this->unk_81 += param_2;
SoundReq(SFX_TEXTBOX_CHOICE);
}
return;
}
uVar8 = this->unk_81 + param_2;
if (uVar8 > (s32)gSave.stats.shells) {
if (gSave.stats.shells != this->unk_81) {
uVar8 = gSave.stats.shells;
param_2 = (gSave.stats.shells - this->unk_81);
iVar9 = this->unk_83 + param_2;
} else {
sub_08088034(this);
return;
}
} else if (iVar9 > 100) {
if (this->unk_83 == 100) {
sub_08088034(this);
return;
} else {
iVar9 = 100;
param_2 = (iVar9 - this->unk_83);
uVar8 = this->unk_81 + param_2;
}
}
#else
s32 uVar8;
s32 iVar9;
s32 t1, t2;
if (CheckLocalFlag(SHOP07_COMPLETE)) {
sub_08088034(this);
return;
}
// This could probably be done without t1 and t2
t1 = this->unk_83;
iVar9 = t1 + param_2;
if (param_2 < 0) {
if (iVar9 < this->unk_82) {
if (this->unk_83 != this->unk_82) {
this->unk_83 = this->unk_82;
this->unk_81 = 1;
SoundReq(SFX_TEXTBOX_CHOICE);
} else {
sub_08088034(this);
}
} else {
this->unk_83 = iVar9;
this->unk_81 += param_2;
SoundReq(SFX_TEXTBOX_CHOICE);
}
return;
}
t2 = this->unk_81;
uVar8 = t2 + param_2;
if (uVar8 > gSave.stats.shells) {
if (gSave.stats.shells != this->unk_81) {
uVar8 = gSave.stats.shells;
param_2 = (gSave.stats.shells - this->unk_81);
iVar9 = t1 + param_2;
#ifdef JP
if (iVar9 > 100) {
iVar9 = 100;
param_2 = (iVar9 - t1);
uVar8 = t2 + param_2;
}
#endif
} else {
sub_08088034(this);
return;
}
}
#ifdef JP
else if (iVar9 > 100) {
#else
if (iVar9 > 100) {
#endif
if (this->unk_83 == 100) {
sub_08088034(this);
return;
} else {
iVar9 = 100;
param_2 = (iVar9 - t1);
uVar8 = t2 + param_2;
}
}
#endif
this->unk_83 = iVar9;
this->unk_81 = uVar8;
SoundReq(SFX_TEXTBOX_CHOICE);
}
void sub_08088034(FigurineDeviceEntity* this) {
if (super->timer == 0) {