diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-23 17:16:32 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-23 17:16:32 -0400 |
commit | f111acf92a56bed70b15df882857d8081a092889 (patch) | |
tree | 07f1351e56d195fbac99860974cda778bc6d7604 | |
parent | dcdabbf6f2feeebece89114aa9e537a78ec14601 (diff) |
slot_machine through sub_8141180
-rw-r--r-- | asm/slot_machine.s | 175 | ||||
-rw-r--r-- | data/slot_machine.s | 18 | ||||
-rw-r--r-- | src/slot_machine.c | 114 |
3 files changed, 114 insertions, 193 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index e234387a0..3d675083b 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,181 +5,6 @@ .text - thumb_func_start sub_814104C -sub_814104C: @ 814104C - push {r4,lr} - ldr r0, _0814108C @ =0x0000285c - bl Alloc - adds r4, r0, 0 - cmp r4, 0 - beq _08141082 - ldr r2, _08141090 @ =sub_81410CC - movs r1, 0 - adds r0, r4, 0 - adds r0, 0x1C -_08141062: - strb r1, [r0, 0x3] - subs r0, 0x4 - cmp r0, r4 - bge _08141062 - movs r0, 0 - str r0, [r4, 0x28] - adds r0, r2, 0 - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - adds r2, r4, 0 - bl SetWordTaskArg -_08141082: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0814108C: .4byte 0x0000285c -_08141090: .4byte sub_81410CC - thumb_func_end sub_814104C - - thumb_func_start sub_8141094 -sub_8141094: @ 8141094 - push {r4,lr} - ldr r4, _081410C8 @ =sub_81410CC - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _081410BA - bl sub_814112C - bl Free - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_081410BA: - bl sub_8140C50 - bl FreeAllWindowBuffers - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081410C8: .4byte sub_81410CC - thumb_func_end sub_8141094 - - thumb_func_start sub_81410CC -sub_81410CC: @ 81410CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - adds r6, r0, 0 - ldr r0, _08141114 @ =gUnknown_84658F0 - mov r8, r0 - adds r4, r6, 0x2 - adds r5, r6, 0 - movs r7, 0x7 -_081410E8: - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _08141100 - ldrh r0, [r5] - lsls r0, 2 - add r0, r8 - ldr r2, [r0] - adds r0, r4, 0 - adds r1, r6, 0 - bl _call_via_r2 - strb r0, [r4, 0x1] -_08141100: - adds r4, 0x4 - adds r5, 0x4 - subs r7, 0x1 - cmp r7, 0 - bge _081410E8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08141114: .4byte gUnknown_84658F0 - thumb_func_end sub_81410CC - - thumb_func_start sub_8141118 -sub_8141118: @ 8141118 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - pop {r0} - bx r0 - thumb_func_end sub_8141118 - - thumb_func_start sub_814112C -sub_814112C: @ 814112C - push {lr} - ldr r0, _08141144 @ =sub_81410CC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl GetWordTaskArg - pop {r1} - bx r1 - .align 2, 0 -_08141144: .4byte sub_81410CC - thumb_func_end sub_814112C - - thumb_func_start sub_8141148 -sub_8141148: @ 8141148 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - bl sub_814112C - adds r1, r0, 0 - lsls r5, 2 - adds r5, r1, r5 - movs r0, 0 - strh r4, [r5] - strb r0, [r5, 0x2] - ldr r0, _0814117C @ =gUnknown_84658F0 - lsls r4, 2 - adds r4, r0 - adds r0, r5, 0x2 - ldr r2, [r4] - bl _call_via_r2 - strb r0, [r5, 0x3] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0814117C: .4byte gUnknown_84658F0 - thumb_func_end sub_8141148 - - thumb_func_start sub_8141180 -sub_8141180: @ 8141180 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_814112C - lsls r4, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141180 - thumb_func_start sub_8141198 sub_8141198: @ 8141198 push {r4-r7,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index b6212ba71..c2854d6e4 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -4,24 +4,6 @@ .section .rodata .align 2 -gUnknown_84658F0:: @ 84658F0 - .4byte sub_8141198 - .4byte sub_8141460 - .4byte sub_81414AC - .4byte sub_81414EC - .4byte sub_81414FC - .4byte sub_8141518 - .4byte sub_8141558 - .4byte sub_8141568 - .4byte sub_8141578 - .4byte sub_8141584 - .4byte sub_81415C8 - .4byte sub_8141610 - .4byte sub_8141650 - .4byte sub_8141690 - .4byte sub_81416C8 - .4byte sub_8141764 - gUnknown_8465930:: @ 8465930 .incbin "graphics/slot_machine/unk_8465930.gbapal" diff --git a/src/slot_machine.c b/src/slot_machine.c index acac324e2..1b1bff7e8 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -44,6 +44,21 @@ struct SlotMachineGfxManager vu16 * field_70; }; +struct SlotMachineReelActionTaskDataSub_0000 +{ + u16 unk0; + u8 unk2; + u8 unk3; +}; + +struct SlotMachineReelActionTaskData +{ + struct SlotMachineReelActionTaskDataSub_0000 field_0000[8]; + u8 filler_0020[8]; + u32 field_0028; + u8 filler_002C[0x2830]; +}; + EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; @@ -76,6 +91,24 @@ void sub_8140C6C(struct SlotMachineGfxManager * manager); void sub_8140D7C(const s16 *, const s16 *); bool32 sub_814104C(void); void sub_8141094(void); +struct SlotMachineReelActionTaskData * sub_814112C(void); +void sub_81410CC(u8 taskId); +bool8 sub_8141198(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141460(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81414AC(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81414EC(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81414FC(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141518(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141558(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141568(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141578(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141584(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81415C8(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141610(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141650(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141690(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_81416C8(u8 *, struct SlotMachineReelActionTaskData *); +bool8 sub_8141764(u8 *, struct SlotMachineReelActionTaskData *); void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); void sub_8141C30(u8, u8); @@ -433,6 +466,25 @@ const struct SpriteTemplate gUnknown_84658D8 = { 1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; +bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineReelActionTaskData *) = { + sub_8141198, + sub_8141460, + sub_81414AC, + sub_81414EC, + sub_81414FC, + sub_8141518, + sub_8141558, + sub_8141568, + sub_8141578, + sub_8141584, + sub_81415C8, + sub_8141610, + sub_8141650, + sub_8141690, + sub_81416C8, + sub_8141764 +}; + void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { ResetTasks(); @@ -1804,3 +1856,65 @@ void sub_8141020(u8 a0) StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0); } } + +bool32 sub_814104C(void) +{ + s32 i; + + struct SlotMachineReelActionTaskData * ptr = Alloc(sizeof(struct SlotMachineReelActionTaskData)); + if (ptr == NULL) + return FALSE; + for (i = 0; i < 8; i++) + ptr->field_0000[i].unk3 = 0; + ptr->field_0028 = 0; + SetWordTaskArg(CreateTask(sub_81410CC, 2), 0, (uintptr_t)ptr); + return FALSE; +} + +void sub_8141094(void) +{ + if (FuncIsActiveTask(sub_81410CC)) + { + Free(sub_814112C()); + DestroyTask(FindTaskIdByFunc(sub_81410CC)); + } + sub_8140C50(); + FreeAllWindowBuffers(); +} + +void sub_81410CC(u8 taskId) +{ + struct SlotMachineReelActionTaskData * ptr = (void *)GetWordTaskArg(taskId, 0); + s32 i; + + for (i = 0; i < 8; i++) + { + if (ptr->field_0000[i].unk3) + ptr->field_0000[i].unk3 = gUnknown_84658F0[ptr->field_0000[i].unk0](&ptr->field_0000[i].unk2, ptr); + } +} + +void sub_8141118(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +struct SlotMachineReelActionTaskData * sub_814112C(void) +{ + return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0); +} + +void sub_8141148(u16 a0, u8 a1) +{ + struct SlotMachineReelActionTaskData * ptr = sub_814112C(); + ptr->field_0000[a1].unk0 = a0; + ptr->field_0000[a1].unk2 = 0; + ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr); +} + +bool32 sub_8141180(u8 a0) +{ + return sub_814112C()->field_0000[a0].unk3; +} |