summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-05-23 17:16:32 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-05-23 17:16:32 -0400
commitf111acf92a56bed70b15df882857d8081a092889 (patch)
tree07f1351e56d195fbac99860974cda778bc6d7604
parentdcdabbf6f2feeebece89114aa9e537a78ec14601 (diff)
slot_machine through sub_8141180
-rw-r--r--asm/slot_machine.s175
-rw-r--r--data/slot_machine.s18
-rw-r--r--src/slot_machine.c114
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;
+}