diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-30 17:11:00 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-30 17:11:00 -0500 |
commit | 1989ffb9a856ebebde994b5af53860436c6606a0 (patch) | |
tree | 04374e34fd79b7a6ef0941fc228719d56a66825e | |
parent | b628d68bae049d3798142acbf4182b121e51a232 (diff) |
through sub_8104C5C
-rw-r--r-- | asm/slot_machine.s | 334 | ||||
-rw-r--r-- | data/slot_machine.s | 12 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field/slot_machine.c | 126 |
4 files changed, 125 insertions, 349 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 82494dc98..0e18f4380 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,340 +5,6 @@ .text - thumb_func_start sub_8104A40 -sub_8104A40: @ 8104A40 - push {r4-r7,lr} - movs r3, 0x4 - ldr r7, _08104A80 @ =gReelTimeWindowTilemap - lsls r1, 16 - asrs r5, r1, 16 - lsls r0, 16 - asrs r4, r0, 16 - ldr r6, _08104A84 @ =0x0600e000 -_08104A50: - lsls r2, r3, 16 - asrs r2, 16 - subs r1, r2, 0x4 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r5, r0 - lsls r0, 1 - adds r0, r7 - ldrh r1, [r0] - lsls r0, r2, 5 - adds r0, r4 - lsls r0, 1 - adds r0, r6 - strh r1, [r0] - adds r2, 0x1 - lsls r2, 16 - lsrs r3, r2, 16 - asrs r2, 16 - cmp r2, 0xE - ble _08104A50 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08104A80: .4byte gReelTimeWindowTilemap -_08104A84: .4byte 0x0600e000 - thumb_func_end sub_8104A40 - - thumb_func_start sub_8104A88 -sub_8104A88: @ 8104A88 - push {r4,r5,lr} - movs r2, 0x4 - lsls r0, 16 - asrs r3, r0, 16 - ldr r5, _08104AB4 @ =0x0600e000 - movs r4, 0 -_08104A94: - lsls r1, r2, 16 - asrs r1, 16 - lsls r0, r1, 5 - adds r0, r3 - lsls r0, 1 - adds r0, r5 - strh r4, [r0] - adds r1, 0x1 - lsls r1, 16 - lsrs r2, r1, 16 - asrs r1, 16 - cmp r1, 0xE - ble _08104A94 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08104AB4: .4byte 0x0600e000 - thumb_func_end sub_8104A88 - - thumb_func_start sub_8104AB8 -sub_8104AB8: @ 8104AB8 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _08104AE4 @ =sub_8104B0C - adds r0, r5, 0 - movs r1, 0x1 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08104AE8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0xA] - bl _call_via_r5 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08104AE4: .4byte sub_8104B0C -_08104AE8: .4byte gTasks - thumb_func_end sub_8104AB8 - - thumb_func_start sub_8104AEC -sub_8104AEC: @ 8104AEC - push {lr} - ldr r0, _08104B00 @ =sub_8104B0C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _08104B04 - movs r0, 0 - b _08104B06 - .align 2, 0 -_08104B00: .4byte sub_8104B0C -_08104B04: - movs r0, 0x1 -_08104B06: - pop {r1} - bx r1 - thumb_func_end sub_8104AEC - - thumb_func_start sub_8104B0C -sub_8104B0C: @ 8104B0C - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08104B34 @ =gUnknown_083ECC30 - ldr r2, _08104B38 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08104B34: .4byte gUnknown_083ECC30 -_08104B38: .4byte gTasks - thumb_func_end sub_8104B0C - - thumb_func_start sub_8104B3C -sub_8104B3C: @ 8104B3C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8104B3C - - thumb_func_start sub_8104B60 -sub_8104B60: @ 8104B60 - push {lr} - adds r2, r0, 0 - ldr r0, _08104B7C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08104B76 - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_08104B76: - pop {r0} - bx r0 - .align 2, 0 -_08104B7C: .4byte gPaletteFade - thumb_func_end sub_8104B60 - - thumb_func_start sub_8104B80 -sub_8104B80: @ 8104B80 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - bl sub_8104DA4 - bl sub_81065DC - ldr r0, _08104BC0 @ =gWindowConfig_81E7144 - bl BasicInitMenuWindow - ldr r0, _08104BC4 @ =gOtherText_ReelTime - movs r1, 0xA - movs r2, 0x20 - movs r3, 0x1 - bl MenuPrint_PixelCoords - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08104BC0: .4byte gWindowConfig_81E7144 -_08104BC4: .4byte gOtherText_ReelTime - thumb_func_end sub_8104B80 - - thumb_func_start sub_8104BC8 -sub_8104BC8: @ 8104BC8 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r0, _08104BF8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _08104BF0 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08104BF0: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08104BF8: .4byte gMain - thumb_func_end sub_8104BC8 - - thumb_func_start sub_8104BFC -sub_8104BFC: @ 8104BFC - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - bl MenuZeroFillScreen - ldr r0, _08104C3C @ =gWindowConfig_81E7128 - bl BasicInitMenuWindow - bl sub_81064B8 - ldrb r0, [r4, 0xA] - bl sub_8104CAC - ldr r0, _08104C40 @ =gSharedMem - ldrb r0, [r0, 0x2] - bl sub_810423C - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08104C3C: .4byte gWindowConfig_81E7128 -_08104C40: .4byte gSharedMem - thumb_func_end sub_8104BFC - - thumb_func_start sub_8104C44 -sub_8104C44: @ 8104C44 - push {lr} - ldr r0, _08104C58 @ =sub_8104B0C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - pop {r0} - bx r0 - .align 2, 0 -_08104C58: .4byte sub_8104B0C - thumb_func_end sub_8104C44 - - thumb_func_start sub_8104C5C -sub_8104C5C: @ 8104C5C - push {lr} - ldr r0, _08104C9C @ =sub_8104E74 - movs r1, 0x3 - bl CreateTask - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _08104CA0 @ =gSharedMem - adds r0, 0x3D - strb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08104CA4 @ =gTasks - adds r0, r1 - ldr r1, _08104CA8 @ =0x0000ffff - strh r1, [r0, 0xA] - movs r1, 0x4 - adds r2, r0, 0 - adds r2, 0x8 - movs r3, 0x40 -_08104C86: - lsls r0, r1, 1 - adds r0, r2, r0 - strh r3, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xF - bls _08104C86 - pop {r0} - bx r0 - .align 2, 0 -_08104C9C: .4byte sub_8104E74 -_08104CA0: .4byte gSharedMem -_08104CA4: .4byte gTasks -_08104CA8: .4byte 0x0000ffff - thumb_func_end sub_8104C5C - -.section .text_8104D30 - thumb_func_start sub_8104D30 sub_8104D30: @ 8104D30 push {r4-r7,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 91b3b0ebf..9b9ba021e 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -3,18 +3,6 @@ .section .rodata - .align 2 -gUnknown_083ECC30:: @ 83ECC30 - .4byte sub_8104B3C - .4byte sub_8104B60 - .4byte sub_8104B80 - .4byte sub_8104B60 - .4byte sub_8104BC8 - .4byte sub_8104B60 - .4byte sub_8104BFC - .4byte sub_8104B60 - .4byte sub_8104C44 - gUnknown_083ECC54:: @ 83ECC54 .4byte nullsub_69 diff --git a/ld_script.txt b/ld_script.txt index 9b2100529..86728ae95 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -321,8 +321,6 @@ SECTIONS { src/field/decoration.o(.text); src/field/slot_machine.o(.text); asm/slot_machine.o(.text); - src/field/slot_machine.o(.text_a); - asm/slot_machine.o(.text_8104D30) src/field/slot_machine.o(.text_b); src/scene/contest_painting.o(.text); src/battle/battle_ai.o(.text); diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index b57f0cfaf..4076d7770 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -172,9 +172,17 @@ void sub_8104A40(s16 a0, s16 a1); void sub_8104A88(s16 a0); void sub_8104AB8(u8 a0); bool8 sub_8104AEC(void); +void sub_8104B0C(u8 taskId); +void sub_8104B3C(struct Task *task); +void sub_8104B60(struct Task *task); +void sub_8104B80(struct Task *task); +void sub_8104BC8(struct Task *task); +void sub_8104BFC(struct Task *task); +void sub_8104C44(struct Task *task); void sub_8104C5C(void); void sub_8104CAC(u8 arg0); bool8 sub_8104E18(void); +void sub_8104E74(u8 taskId); void sub_8104EA8(void); void sub_8104F8C(void); void sub_81050C4(void); @@ -207,6 +215,7 @@ void sub_81063C0(void); static void sub_8106448(void); void sub_81064B8(void); void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4); +void sub_81065DC(void); extern struct UnkStruct1 *gUnknown_083ED048[]; extern const u16 gPalette_83EDE24[]; @@ -2862,7 +2871,122 @@ void sub_81049F8(struct Task *task) DestroyTask(FindTaskIdByFunc(sub_810434C)); } -asm(".section .text_a"); +extern const u16 gReelTimeWindowTilemap[]; + +void sub_8104A40(s16 a0, s16 a1) +{ + s16 i; + + for (i = 4; i < 15; i++) + { + u16 tile = gReelTimeWindowTilemap[a1 + (i - 4) * 20]; + ((u16 *)BG_SCREEN_ADDR(28))[32 * i + a0] = tile; + } +} + +void sub_8104A88(s16 a0) +{ + s16 i; + + for (i = 4; i < 15; i++) + { + ((u16 *)BG_SCREEN_ADDR(28))[32 * i + a0] = 0; + } +} + +void sub_8104AB8(u8 a0) +{ + u8 taskId = CreateTask(sub_8104B0C, 1); + gTasks[taskId].data[1] = a0; + sub_8104B0C(taskId); +} + +bool8 sub_8104AEC(void) +{ + if (FindTaskIdByFunc(sub_8104B0C) == 0xFF) + return TRUE; + return FALSE; +} + +void (*const gUnknown_083ECC30[])(struct Task *task) = { + sub_8104B3C, + sub_8104B60, + sub_8104B80, + sub_8104B60, + sub_8104BC8, + sub_8104B60, + sub_8104BFC, + sub_8104B60, + sub_8104C44 +}; + +void sub_8104B0C(u8 taskId) +{ + gUnknown_083ECC30[gTasks[taskId].data[0]](gTasks + taskId); +} + +void sub_8104B3C(struct Task *task) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + task->data[0]++; +} + +void sub_8104B60(struct Task *task) +{ + if (!gPaletteFade.active) + { + task->data[0]++; + } +} + +void sub_8104B80(struct Task *task) +{ + sub_8104DA4(); + sub_81065DC(); + BasicInitMenuWindow(&gWindowConfig_81E7144); + MenuPrint_PixelCoords(gOtherText_ReelTime, 10, 32, 1); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + task->data[0]++; +} + +void sub_8104BC8(struct Task *task) +{ + if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON)) + { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + task->data[0]++; + } +} + +void sub_8104BFC(struct Task *task) +{ + MenuZeroFillScreen(); + BasicInitMenuWindow(&gWindowConfig_81E7128); + sub_81064B8(); + sub_8104CAC(task->data[1]); + sub_810423C(eSlotMachine->unk02); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + task->data[0]++; +} + +void sub_8104C44(struct Task *task) +{ + DestroyTask(FindTaskIdByFunc(sub_8104B0C)); +} + +void sub_8104C5C(void) +{ + u8 i; + struct Task *task; + i = CreateTask(sub_8104E74, 3); + eSlotMachine->unk3D = i; + task = gTasks + i; + task->data[1] = -1; + for (i = 4; i < 16; i++) + { + task->data[i] = 0x40; + } +} static void LoadSlotMachineWheelOverlay(void); |