summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s130
-rw-r--r--src/field/slot_machine.c50
2 files changed, 43 insertions, 137 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 3fdbadee9..53423e9e4 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,136 +5,6 @@
.text
- thumb_func_start sub_8103C14
-sub_8103C14: @ 8103C14
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08103C40 @ =sub_8103C48
- adds r0, r5, 0
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08103C44 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x26]
- bl _call_via_r5
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08103C40: .4byte sub_8103C48
-_08103C44: .4byte gTasks
- thumb_func_end sub_8103C14
-
- thumb_func_start sub_8103C48
-sub_8103C48: @ 8103C48
- push {r4,lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08103C70 @ =gUnknown_083ECBA0
- ldr r2, _08103C74 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r4, 0x8
- ldrsh r2, [r0, r4]
- lsls r2, 2
- adds r2, r3
- ldr r2, [r2]
- bl _call_via_r2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08103C70: .4byte gUnknown_083ECBA0
-_08103C74: .4byte gTasks
- thumb_func_end sub_8103C48
-
- thumb_func_start sub_8103C78
-sub_8103C78: @ 8103C78
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r1, _08103CA8 @ =gUnknown_083ECBAC
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r1, 0x73
- str r1, [sp]
- movs r1, 0x62
- movs r2, 0x63
- movs r3, 0x72
- bl sub_81065A8
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08103CA8: .4byte gUnknown_083ECBAC
- thumb_func_end sub_8103C78
-
- thumb_func_start sub_8103CAC
-sub_8103CAC: @ 8103CAC
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- ble _08103CC4
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_08103CC4:
- pop {r0}
- bx r0
- thumb_func_end sub_8103CAC
-
- thumb_func_start sub_8103CC8
-sub_8103CC8: @ 8103CC8
- push {r4,lr}
- sub sp, 0x4
- lsls r4, r1, 24
- lsrs r4, 24
- ldr r1, _08103CFC @ =gUnknown_083ECBAC
- movs r2, 0x26
- ldrsh r0, [r0, r2]
- lsls r0, 1
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r1, 0x53
- str r1, [sp]
- movs r1, 0x42
- movs r2, 0x43
- movs r3, 0x52
- bl sub_81065A8
- adds r0, r4, 0
- bl DestroyTask
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08103CFC: .4byte gUnknown_083ECBAC
- thumb_func_end sub_8103CC8
-
thumb_func_start sub_8103D00
sub_8103D00: @ 8103D00
push {lr}
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 04cd699d3..922ab0c4d 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -95,14 +95,15 @@ static void sub_810290C(void);
static u8 sub_81029D4(u8 c1, u8 c2, u8 c3);
static void sub_8102A24(void);
static void sub_8102A64(u8 taskId);
-bool8 sub_8102A44(void);
+static bool8 sub_8102A44(void);
u8 sub_8102BA4(u8 x, s16 y);
static void sub_8102DA8(void);
static void sub_8102DEC(u8 a0);
static void sub_8102E1C(u8 a0);
-bool8 sub_8102E40(u8 a0);
-void sub_8102E68(u8 taskId);
-void sub_8103C14(u8 a0);
+static bool8 sub_8102E40(u8 a0);
+static void sub_8102E68(u8 taskId);
+static void sub_8103C14(u8 a0);
+void sub_8103C48(u8 taskId);
void sub_8103D50(u8 a0);
void sub_8103D8C(u8 a0);
void sub_8103DC8(void);
@@ -128,6 +129,7 @@ void sub_81050C4(void);
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);
static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = {
sub_8101D5C,
@@ -1148,7 +1150,7 @@ static void sub_8102A24(void)
sub_8102A64(CreateTask(sub_8102A64, 4));
}
-bool8 sub_8102A44(void)
+static bool8 sub_8102A44(void)
{
if (FindTaskIdByFunc(sub_8102A64) == 0xff)
{
@@ -1316,14 +1318,14 @@ static void sub_8102E1C(u8 a0)
gTasks[eSlotMachine->unk3A[a0]].data[0] = 2;
}
-bool8 sub_8102E40(u8 a0)
+static bool8 sub_8102E40(u8 a0)
{
return gTasks[eSlotMachine->unk3A[a0]].data[14];
}
extern bool8 (*const gUnknown_083ECB2C[])(struct Task *task);
-void sub_8102E68(u8 taskId)
+static void sub_8102E68(u8 taskId)
{
while (gUnknown_083ECB2C[gTasks[taskId].data[0]](gTasks + taskId));
}
@@ -2072,6 +2074,40 @@ void sub_8103A78(void)
}
}
+static void sub_8103C14(u8 a0)
+{
+ u8 taskId = CreateTask(sub_8103C48, 5);
+ gTasks[taskId].data[15] = a0;
+ sub_8103C48(taskId);
+}
+
+extern void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId);
+
+void sub_8103C48(u8 taskId)
+{
+ gUnknown_083ECBA0[gTasks[taskId].data[0]](gTasks + taskId, taskId);
+}
+
+extern const s16 gUnknown_083ECBAC[];
+
+void sub_8103C78(struct Task *task, u8 taskId)
+{
+ sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x62, 0x63, 0x72, 0x73);
+ task->data[0]++;
+}
+
+void sub_8103CAC(struct Task *task, u8 taskId)
+{
+ if (++task->data[1] > 11)
+ task->data[0]++;
+}
+
+void sub_8103CC8(struct Task *task, u8 taskId)
+{
+ sub_81065A8(gUnknown_083ECBAC[task->data[15]], 0x42, 0x43, 0x52, 0x53);
+ DestroyTask(taskId);
+}
+
asm(".section .text_a");
static void LoadSlotMachineWheelOverlay(void);