mirror of https://github.com/zeldaret/tmc.git
Merge pull request #567 from hatal175/DrawHearts
This commit is contained in:
commit
3c84ddf3d9
|
|
@ -1,196 +0,0 @@
|
|||
.syntax unified
|
||||
push {r4, r5, r6, r7, lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
ldr r2, _0801C6CC @ =gUnk_0200AF00
|
||||
ldrb r1, [r2, #1]
|
||||
movs r0, #0x10
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
beq _0801C6D0
|
||||
bl sub_0801C824
|
||||
bl sub_0801C66C
|
||||
b _0801C802
|
||||
.align 2, 0
|
||||
_0801C6CC: .4byte gUnk_0200AF00
|
||||
_0801C6D0:
|
||||
ldr r5, _0801C6F8 @ =gSave
|
||||
adds r0, r5, #0
|
||||
adds r0, #0xab
|
||||
ldrb r0, [r0]
|
||||
lsrs r4, r0, #1
|
||||
ldrb r0, [r2, #4]
|
||||
cmp r4, r0
|
||||
beq _0801C6EA
|
||||
strb r4, [r2, #4]
|
||||
bl sub_0801C824
|
||||
bl sub_0801C66C
|
||||
_0801C6EA:
|
||||
adds r1, r5, #0
|
||||
adds r1, #0xaa
|
||||
ldrb r0, [r1]
|
||||
cmp r0, #1
|
||||
beq _0801C6FC
|
||||
lsrs r1, r0, #1
|
||||
b _0801C6FE
|
||||
.align 2, 0
|
||||
_0801C6F8: .4byte gSave
|
||||
_0801C6FC:
|
||||
movs r1, #1
|
||||
_0801C6FE:
|
||||
cmp r1, r4
|
||||
ble _0801C704
|
||||
adds r1, r4, #0
|
||||
_0801C704:
|
||||
movs r4, #0
|
||||
ldr r0, _0801C748 @ =gUnk_0200AF00
|
||||
ldrb r2, [r0, #3]
|
||||
adds r7, r0, #0
|
||||
cmp r1, r2
|
||||
beq _0801C718
|
||||
movs r4, #1
|
||||
cmp r1, r2
|
||||
ble _0801C718
|
||||
movs r4, #2
|
||||
_0801C718:
|
||||
cmp r4, #1
|
||||
beq _0801C750
|
||||
cmp r4, #2
|
||||
bne _0801C756
|
||||
ldrb r0, [r7, #5]
|
||||
adds r1, r0, #1
|
||||
strb r1, [r7, #5]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r1, r0, #0x18
|
||||
movs r0, #1
|
||||
ands r0, r1
|
||||
cmp r0, #0
|
||||
bne _0801C74C
|
||||
movs r0, #7
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
bne _0801C740
|
||||
movs r0, #0x71
|
||||
bl SoundReq
|
||||
_0801C740:
|
||||
ldrb r0, [r7, #3]
|
||||
adds r0, #1
|
||||
strb r0, [r7, #3]
|
||||
b _0801C75A
|
||||
.align 2, 0
|
||||
_0801C748: .4byte gUnk_0200AF00
|
||||
_0801C74C:
|
||||
movs r4, #0
|
||||
b _0801C75A
|
||||
_0801C750:
|
||||
ldrb r0, [r7, #3]
|
||||
subs r0, #1
|
||||
strb r0, [r7, #3]
|
||||
_0801C756:
|
||||
movs r0, #0
|
||||
strb r0, [r7, #5]
|
||||
_0801C75A:
|
||||
ldrb r0, [r7, #2]
|
||||
cmp r0, #0
|
||||
beq _0801C764
|
||||
cmp r4, #0
|
||||
beq _0801C802
|
||||
_0801C764:
|
||||
movs r0, #2
|
||||
strb r0, [r7, #2]
|
||||
ldrb r0, [r7, #3]
|
||||
lsrs r3, r0, #2
|
||||
cmp r3, #0xa
|
||||
ble _0801C77A
|
||||
movs r1, #0xa
|
||||
mov r8, r1
|
||||
adds r6, r3, #0
|
||||
subs r6, #0xa
|
||||
b _0801C77E
|
||||
_0801C77A:
|
||||
mov r8, r3
|
||||
movs r6, #0
|
||||
_0801C77E:
|
||||
ldrb r0, [r7, #4]
|
||||
lsrs r4, r0, #2
|
||||
adds r1, r4, #0
|
||||
cmp r4, #0xa
|
||||
ble _0801C78A
|
||||
movs r4, #0xa
|
||||
_0801C78A:
|
||||
adds r2, r1, #0
|
||||
subs r2, #0xa
|
||||
ldr r0, _0801C808 @ =gUnk_080C8F2C
|
||||
mov ip, r0
|
||||
cmp r2, #0
|
||||
ble _0801C7B8
|
||||
ldr r5, _0801C80C @ =gUnk_02034D30
|
||||
ldr r1, _0801C810 @ =0x0000F010
|
||||
adds r0, r1, #0
|
||||
strh r0, [r5]
|
||||
ldr r1, _0801C814 @ =0x040000D4
|
||||
movs r0, #0xa
|
||||
subs r0, r0, r6
|
||||
lsls r0, r0, #1
|
||||
add r0, ip
|
||||
str r0, [r1]
|
||||
adds r0, r5, #2
|
||||
str r0, [r1, #4]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x18
|
||||
orrs r2, r0
|
||||
str r2, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
_0801C7B8:
|
||||
ldr r5, _0801C818 @ =gUnk_02034CF0
|
||||
ldr r2, _0801C810 @ =0x0000F010
|
||||
adds r0, r2, #0
|
||||
strh r0, [r5]
|
||||
ldr r1, _0801C814 @ =0x040000D4
|
||||
movs r0, #0xa
|
||||
mov r2, r8
|
||||
subs r0, r0, r2
|
||||
lsls r0, r0, #1
|
||||
add r0, ip
|
||||
str r0, [r1]
|
||||
adds r0, r5, #2
|
||||
str r0, [r1, #4]
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #0x18
|
||||
orrs r4, r0
|
||||
str r4, [r1, #8]
|
||||
ldr r0, [r1, #8]
|
||||
ldrb r0, [r7, #3]
|
||||
movs r1, #3
|
||||
ands r1, r0
|
||||
cmp r1, #0
|
||||
beq _0801C7FC
|
||||
cmp r3, #9
|
||||
ble _0801C7EE
|
||||
subs r3, #0xa
|
||||
adds r5, #0x40
|
||||
_0801C7EE:
|
||||
lsls r0, r3, #1
|
||||
adds r0, r0, r5
|
||||
adds r1, #0x11
|
||||
ldr r3, _0801C81C @ =0xFFFFF000
|
||||
adds r2, r3, #0
|
||||
orrs r1, r2
|
||||
strh r1, [r0, #2]
|
||||
_0801C7FC:
|
||||
ldr r1, _0801C820 @ =gScreen
|
||||
movs r0, #1
|
||||
strh r0, [r1, #0xe]
|
||||
_0801C802:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4, r5, r6, r7, pc}
|
||||
.align 2, 0
|
||||
_0801C808: .4byte gUnk_080C8F2C
|
||||
_0801C80C: .4byte gUnk_02034D30
|
||||
_0801C810: .4byte 0x0000F010
|
||||
_0801C814: .4byte 0x040000D4
|
||||
_0801C818: .4byte gUnk_02034CF0
|
||||
_0801C81C: .4byte 0xFFFFF000
|
||||
_0801C820: .4byte gScreen
|
||||
.syntax divided
|
||||
97
src/ui.c
97
src/ui.c
|
|
@ -60,6 +60,7 @@ typedef struct {
|
|||
|
||||
extern struct_020350E2 gUnk_020350E2;
|
||||
|
||||
extern const u16 gUnk_080C8F2C[];
|
||||
extern u32 gUnk_085C4620[];
|
||||
extern Frame* gSpriteAnimations_322[];
|
||||
|
||||
|
|
@ -95,6 +96,7 @@ void sub_0801CB20(UIElement*, UIElementDefinition*);
|
|||
UIElement* FindUIElement(u32);
|
||||
void sub_0801CAD0(UIElement*);
|
||||
void sub_0801CAB8(UIElement*, Frame*);
|
||||
void sub_0801C824(void);
|
||||
|
||||
void UpdateUIElements(void) {
|
||||
u32 index;
|
||||
|
|
@ -374,7 +376,100 @@ void sub_0801C66C(void) {
|
|||
}
|
||||
}
|
||||
|
||||
ASM_FUNC("asm/non_matching/ui/DrawHearts.inc", void DrawHearts())
|
||||
void DrawHearts(void) {
|
||||
s32 health;
|
||||
s32 uVar1;
|
||||
s32 uVar2;
|
||||
s32 uVar4;
|
||||
u32 uVar6;
|
||||
s32 maxHealth;
|
||||
const u16* ptr;
|
||||
s32 tmp1;
|
||||
u16* ptr2;
|
||||
|
||||
if ((gUnk_0200AF00.unk_1 & 0x10) != 0) {
|
||||
sub_0801C824();
|
||||
sub_0801C66C();
|
||||
return;
|
||||
}
|
||||
maxHealth = gSave.stats.maxHealth / 2;
|
||||
if (maxHealth != gUnk_0200AF00.maxHealth) {
|
||||
gUnk_0200AF00.maxHealth = maxHealth;
|
||||
sub_0801C824();
|
||||
sub_0801C66C();
|
||||
}
|
||||
if (gSave.stats.health != 1) {
|
||||
health = gSave.stats.health / 2;
|
||||
} else {
|
||||
health = 1;
|
||||
}
|
||||
if (health > maxHealth) {
|
||||
health = maxHealth;
|
||||
}
|
||||
maxHealth = 0;
|
||||
if (health != gUnk_0200AF00.health) {
|
||||
maxHealth = 1;
|
||||
if (health > gUnk_0200AF00.health) {
|
||||
maxHealth = 2;
|
||||
}
|
||||
}
|
||||
|
||||
switch (maxHealth) {
|
||||
case 2:
|
||||
uVar1 = gUnk_0200AF00.unk_5++;
|
||||
if ((uVar1 & 1) == 0) {
|
||||
if ((uVar1 & 7) == 0) {
|
||||
SoundReq(SFX_HEART_GET);
|
||||
}
|
||||
gUnk_0200AF00.health++;
|
||||
} else {
|
||||
maxHealth = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
gUnk_0200AF00.health--;
|
||||
// fallthough
|
||||
default:
|
||||
gUnk_0200AF00.unk_5 = 0;
|
||||
break;
|
||||
}
|
||||
if ((gUnk_0200AF00.unk_2 == 0) || (maxHealth != 0)) {
|
||||
gUnk_0200AF00.unk_2 = 2;
|
||||
uVar2 = gUnk_0200AF00.health >> 2;
|
||||
if (uVar2 > 10) {
|
||||
tmp1 = 10;
|
||||
uVar6 = uVar2 - 10;
|
||||
} else {
|
||||
tmp1 = uVar2;
|
||||
uVar6 = 0;
|
||||
}
|
||||
|
||||
maxHealth = gUnk_0200AF00.maxHealth >> 2;
|
||||
uVar1 = maxHealth;
|
||||
if (maxHealth > 10) {
|
||||
maxHealth = 10;
|
||||
}
|
||||
|
||||
if (uVar1 - 10 > 0) {
|
||||
ptr2 = (u16*)&gUnk_02034D30;
|
||||
*ptr2 = 0xf010;
|
||||
DmaSet(3, gUnk_080C8F2C + (10 - uVar6), ptr2 + 1, (uVar1 - 10) | 0x80000000);
|
||||
}
|
||||
ptr2 = (u16*)&gUnk_02034CF0[0].unk_0;
|
||||
*ptr2 = 0xf010;
|
||||
|
||||
DmaSet(3, gUnk_080C8F2C + (10 - tmp1), ptr2 + 1, maxHealth | 0x80000000);
|
||||
|
||||
if ((gUnk_0200AF00.health & 3) != 0) {
|
||||
if (9 < uVar2) {
|
||||
uVar2 -= 10;
|
||||
ptr2 += 0x20;
|
||||
}
|
||||
ptr2[uVar2 + 1] = ((gUnk_0200AF00.health & 3) + 0x11) | 0xf000;
|
||||
}
|
||||
gScreen.bg0.updated = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0801C824(void) {
|
||||
struct_02034CF0* ptr;
|
||||
|
|
|
|||
Loading…
Reference in New Issue