diff --git a/asm/non_matching/subtask2/sub_080A5F48.inc b/asm/non_matching/subtask2/sub_080A5F48.inc deleted file mode 100644 index 50fad184..00000000 --- a/asm/non_matching/subtask2/sub_080A5F48.inc +++ /dev/null @@ -1,94 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - cmp r4, #0x1f - bhi _080A5F5C - cmp r4, #0x1c - blo _080A5F5C - ldr r0, _080A5F9C @ =gSave - adds r0, r0, r4 - adds r0, #0x9a - ldrb r4, [r0] -_080A5F5C: - lsls r0, r1, #5 - ldr r1, _080A5FA0 @ =0x06010000 - adds r5, r0, r1 - ldr r1, _080A5FA4 @ =gSpriteAnimations_322 - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldrb r1, [r0] - ldr r3, _080A5FA8 @ =gMoreSpritePtrs - lsls r1, r1, #2 - ldr r0, [r3, #4] - adds r0, r0, r1 - ldr r2, _080A5FAC @ =0x040000D4 - ldrh r1, [r0, #2] - lsls r1, r1, #5 - ldr r0, [r3, #8] - adds r0, r0, r1 - str r0, [r2] - str r5, [r2, #4] - ldr r0, _080A5FB0 @ =0x84000040 - str r0, [r2, #8] - ldr r0, [r2, #8] - movs r0, #1 - rsbs r0, r0, #0 - cmp r4, #7 - blo _080A5FBE - cmp r4, #8 - bhi _080A5FB4 - ldr r0, _080A5F9C @ =gSave - adds r0, #0xac - b _080A5FBC - .align 2, 0 -_080A5F9C: .4byte gSave -_080A5FA0: .4byte 0x06010000 -_080A5FA4: .4byte gSpriteAnimations_322 -_080A5FA8: .4byte gMoreSpritePtrs -_080A5FAC: .4byte 0x040000D4 -_080A5FB0: .4byte 0x84000040 -_080A5FB4: - cmp r4, #0xa - bhi _080A5FBE - ldr r0, _080A5FF8 @ =gSave - adds r0, #0xad -_080A5FBC: - ldrb r0, [r0] -_080A5FBE: - cmp r0, #0 - blt _080A5FF6 - movs r1, #0xa - bl Div - adds r4, r1, #0 - cmp r0, #9 - ble _080A5FD0 - movs r0, #9 -_080A5FD0: - ldr r1, _080A5FFC @ =0x040000D4 - lsls r0, r0, #5 - ldr r2, _080A6000 @ =gUnk_085C4620 - adds r0, r0, r2 - str r0, [r1] - str r5, [r1, #4] - ldr r3, _080A6004 @ =0x84000008 - str r3, [r1, #8] - ldr r0, [r1, #8] - adds r0, r4, #0 - adds r0, #0xa - lsls r0, r0, #5 - adds r0, r0, r2 - str r0, [r1] - adds r0, r5, #0 - adds r0, #0x20 - str r0, [r1, #4] - str r3, [r1, #8] - ldr r0, [r1, #8] -_080A5FF6: - pop {r4, r5, pc} - .align 2, 0 -_080A5FF8: .4byte gSave -_080A5FFC: .4byte 0x040000D4 -_080A6000: .4byte gUnk_085C4620 -_080A6004: .4byte 0x84000008 - .syntax divided diff --git a/src/subtask2.c b/src/subtask2.c index d6ab2956..1a9d51c5 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -27,6 +27,9 @@ extern u16 gUnk_02017830[]; extern u8 gUnk_080C9C6C[]; extern u8 gUnk_020350F0[]; extern u8 gUnk_08128C00[]; +extern Frame* gSpriteAnimations_322[]; +extern u32 gUnk_085C4620[]; +extern u16* gMoreSpritePtrs[]; void sub_080A5CFC(u32, void*, u32); void sub_080A6FB4(u32, u32); @@ -452,7 +455,49 @@ bool32 sub_080A5F24(void) { return result; } -ASM_FUNC("asm/non_matching/subtask2/sub_080A5F48.inc", void sub_080A5F48(u32 param_1, u32 param_2)) +void sub_080A5F48(u32 param_1, u32 param_2) { + extern u32 gSprite_082E68F4[]; + u32 ammoCount; + u32 tensDigit; + u8* puVar2; + u32 temp1; + u16* temp2; + u32 temp3; + register u32 rem asm("r1"); + + switch (param_1) { + case 0x1c ... 0x1f: + param_1 = (u32)gSave.saved_status.field_0x24[param_1 - 6]; + break; + } + + temp1 = param_2 * 0x20 + 0x6010000; + temp3 = gSpriteAnimations_322[param_1]->index; + temp2 = &gMoreSpritePtrs[1][temp3 * 2]; + DmaSet(3, &gMoreSpritePtrs[2][temp2[1] * 0x10], temp1, 0x84000040); + ammoCount = -1; + + switch (param_1) { + case 7: + case 8: + ammoCount = gSave.stats.bombCount; + break; + case 9: + case 10: + ammoCount = gSave.stats.arrowCount; + break; + } + + if (-1 < (int)ammoCount) { + tensDigit = Div(ammoCount, 10); + param_1 = rem; + if ((int)tensDigit >= 10) { + tensDigit = 9; + } + DmaSet(3, gUnk_085C4620 + tensDigit * 0x8, temp1, 0x84000008); + DmaSet(3, gUnk_085C4620 + (param_1 + 10) * 0x8, temp1 + 0x20, 0x84000008); + } +} void sub_080A6008(void) { gUnk_08128D58[gMenu.menuType]();