summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-12-24 21:42:08 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2017-12-24 21:42:08 -0500
commit7d311d0f747dc5c7c194f436d1b90181bee3cc66 (patch)
tree8ae147a66af48996f93d0f99bfa5c9b5ac0d9281
parent64c3afb438eb712cca11a374d0025bf3492ccb82 (diff)
through sub_8102BA4
-rw-r--r--asm/slot_machine.s300
-rw-r--r--include/slot_machine.h2
-rw-r--r--src/field/slot_machine.c121
3 files changed, 121 insertions, 302 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index e15bd0b0f..1159eb897 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,306 +5,6 @@
.text
- thumb_func_start sub_81029D4
-sub_81029D4: @ 81029D4
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- cmp r3, r1
- bne _081029F8
- cmp r3, r2
- bne _081029F8
- ldr r0, _081029F4 @ =gUnknown_083ECE52
- adds r0, r3, r0
- ldrb r0, [r0]
- b _08102A1E
- .align 2, 0
-_081029F4: .4byte gUnknown_083ECE52
-_081029F8:
- cmp r3, 0
- bne _08102A04
- cmp r1, 0
- bne _08102A04
- cmp r2, 0x1
- beq _08102A10
-_08102A04:
- cmp r3, 0x1
- bne _08102A14
- cmp r1, 0x1
- bne _08102A14
- cmp r2, 0
- bne _08102A14
-_08102A10:
- movs r0, 0x6
- b _08102A1E
-_08102A14:
- cmp r3, 0x4
- beq _08102A1C
- movs r0, 0x9
- b _08102A1E
-_08102A1C:
- movs r0, 0
-_08102A1E:
- pop {r1}
- bx r1
- thumb_func_end sub_81029D4
-
- thumb_func_start sub_8102A24
-sub_8102A24: @ 8102A24
- push {r4,lr}
- ldr r4, _08102A40 @ =sub_8102A64
- adds r0, r4, 0
- movs r1, 0x4
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08102A40: .4byte sub_8102A64
- thumb_func_end sub_8102A24
-
- thumb_func_start sub_8102A44
-sub_8102A44: @ 8102A44
- push {lr}
- ldr r0, _08102A58 @ =sub_8102A64
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08102A5C
- movs r0, 0
- b _08102A5E
- .align 2, 0
-_08102A58: .4byte sub_8102A64
-_08102A5C:
- movs r0, 0x1
-_08102A5E:
- pop {r1}
- bx r1
- thumb_func_end sub_8102A44
-
- thumb_func_start sub_8102A64
-sub_8102A64: @ 8102A64
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _08102A94 @ =gUnknown_083ECB20
- ldr r2, _08102A98 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_08102A76:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _08102A76
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08102A94: .4byte gUnknown_083ECB20
-_08102A98: .4byte gTasks
- thumb_func_end sub_8102A64
-
- thumb_func_start sub_8102A9C
-sub_8102A9C: @ 8102A9C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8103E38
- lsls r0, 24
- cmp r0, 0
- beq _08102AC8
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldr r0, _08102AC4 @ =gSharedMem
- movs r1, 0xE
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08102AC8
- movs r0, 0x2
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _08102ACA
- .align 2, 0
-_08102AC4: .4byte gSharedMem
-_08102AC8:
- movs r0, 0
-_08102ACA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8102A9C
-
- thumb_func_start sub_8102AD0
-sub_8102AD0: @ 8102AD0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _08102B22
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _08102AF6
- movs r0, 0x15
- bl PlaySE
-_08102AF6:
- ldr r2, _08102B70 @ =gSharedMem
- ldrh r0, [r2, 0xE]
- subs r0, 0x1
- strh r0, [r2, 0xE]
- ldrh r3, [r2, 0xC]
- movs r0, 0xC
- ldrsh r1, [r2, r0]
- ldr r0, _08102B74 @ =0x0000270e
- cmp r1, r0
- bgt _08102B0E
- adds r0, r3, 0x1
- strh r0, [r2, 0xC]
-_08102B0E:
- movs r0, 0x8
- strh r0, [r4, 0xA]
- ldr r0, _08102B78 @ =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08102B22
- movs r0, 0x4
- strh r0, [r4, 0xA]
-_08102B22:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _08102B58
- ldr r0, _08102B78 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08102B58
- movs r0, 0x15
- bl PlaySE
- ldr r1, _08102B70 @ =gSharedMem
- ldrh r0, [r1, 0xE]
- ldrh r2, [r1, 0xC]
- adds r0, r2
- strh r0, [r1, 0xC]
- lsls r0, 16
- asrs r0, 16
- ldr r2, _08102B7C @ =0x0000270f
- cmp r0, r2
- ble _08102B54
- strh r2, [r1, 0xC]
-_08102B54:
- movs r0, 0
- strh r0, [r1, 0xE]
-_08102B58:
- ldr r0, _08102B70 @ =gSharedMem
- movs r1, 0xE
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08102B68
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_08102B68:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08102B70: .4byte gSharedMem
-_08102B74: .4byte 0x0000270e
-_08102B78: .4byte gMain
-_08102B7C: .4byte 0x0000270f
- thumb_func_end sub_8102AD0
-
- thumb_func_start sub_8102B80
-sub_8102B80: @ 8102B80
- push {lr}
- bl sub_8103E7C
- lsls r0, 24
- cmp r0, 0
- beq _08102B9A
- ldr r0, _08102BA0 @ =sub_8102A64
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_08102B9A:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08102BA0: .4byte sub_8102A64
- thumb_func_end sub_8102B80
-
- thumb_func_start sub_8102BA4
-sub_8102BA4: @ 8102BA4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r0, _08102BF0 @ =gSharedMem
- lsls r2, r4, 1
- adds r0, 0x28
- adds r2, r0
- movs r3, 0
- ldrsh r0, [r2, r3]
- lsls r1, 16
- asrs r1, 16
- adds r0, r1
- movs r1, 0x15
- bl __modsi3
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _08102BD4
- adds r0, 0x15
- lsls r0, 16
- lsrs r1, r0, 16
-_08102BD4:
- ldr r2, _08102BF4 @ =gUnknown_083ECCB2
- lsls r1, 16
- asrs r1, 16
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 2
- adds r0, r4
- adds r1, r0
- adds r1, r2
- ldrb r0, [r1]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08102BF0: .4byte gSharedMem
-_08102BF4: .4byte gUnknown_083ECCB2
- thumb_func_end sub_8102BA4
-
thumb_func_start sub_8102BF8
sub_8102BF8: @ 8102BF8
push {r4-r6,lr}
diff --git a/include/slot_machine.h b/include/slot_machine.h
index 0e7efaf29..738866318 100644
--- a/include/slot_machine.h
+++ b/include/slot_machine.h
@@ -14,7 +14,7 @@ struct SlotMachineEwramStruct {
/*0x0A*/ u8 unk0A;
/*0x0B*/ u8 unk0B;
/*0x0C*/ s16 coins;
- /*0x0E*/ u16 unk0E;
+ /*0x0E*/ s16 unk0E;
/*0x10*/ s16 unk10;
/*0x12*/ s16 bet;
/*0x14*/ u8 filler14[4];
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 0a1ab8bb1..bd259129d 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -95,7 +95,7 @@ void sub_810290C(void);
u8 sub_81029D4(u8 a0, u8 a1, u8 a2);
void sub_8102A24(void);
bool8 sub_8102A44(void);
-u8 sub_8102BA4(u8 a0, u8 a1);
+u8 sub_8102BA4(u8 a0, s16 a1);
void sub_8102DA8(void);
void sub_8102DEC(u8 a0);
void sub_8102E1C(u8 a0);
@@ -105,6 +105,8 @@ void sub_8103D50(u8 a0);
void sub_8103D8C(u8 a0);
void sub_8103DC8(void);
void sub_8103E04(u8 a0);
+bool8 sub_8103E38(void);
+bool8 sub_8103E7C(void);
void sub_8103F70(void);
bool8 sub_8103FA0(void);
void sub_8104048(void);
@@ -1116,6 +1118,123 @@ void sub_810290C(void)
}
}
+extern const u8 gUnknown_083ECE52[];
+
+u8 sub_81029D4(u8 c1, u8 c2, u8 c3)
+{
+ if (c1 == c2 && c1 == c3)
+ {
+ return gUnknown_083ECE52[c1];
+ }
+ if (c1 == 0 && c2 == 0 && c3 == 1)
+ {
+ return 6;
+ }
+ if (c1 == 1 && c2 == 1 && c3 == 0)
+ {
+ return 6;
+ }
+ if (c1 == 4)
+ {
+ return 0;
+ }
+ return 9;
+}
+
+void sub_8102A64(u8 taskId);
+
+void sub_8102A24(void)
+{
+ sub_8102A64(CreateTask(sub_8102A64, 4));
+}
+
+bool8 sub_8102A44(void)
+{
+ if (FindTaskIdByFunc(sub_8102A64) == 0xff)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+extern bool8 (*const gUnknown_083ECB20[])(struct Task *task);
+
+void sub_8102A64(u8 taskId)
+{
+ while (gUnknown_083ECB20[gTasks[taskId].data[0]](gTasks + taskId));
+}
+
+bool8 sub_8102A9C(struct Task *task)
+{
+ if (sub_8103E38())
+ {
+ task->data[0]++;
+ if (eSlotMachine->unk0E == 0)
+ {
+ task->data[0] = 2;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool8 sub_8102AD0(struct Task *task)
+{
+ if (!task->data[1]--)
+ {
+ if (IsFanfareTaskInactive())
+ {
+ PlaySE(SE_PIN);
+ }
+ eSlotMachine->unk0E--;
+ if (eSlotMachine->coins < 9999)
+ {
+ eSlotMachine->coins++;
+ }
+ task->data[1] = 8;
+ if (gMain.heldKeys & A_BUTTON)
+ {
+ task->data[1] = 4;
+ }
+ }
+ if (IsFanfareTaskInactive() && gMain.newKeys & START_BUTTON)
+ {
+ PlaySE(SE_PIN);
+ eSlotMachine->coins += eSlotMachine->unk0E;
+ if (eSlotMachine->coins > 9999)
+ {
+ eSlotMachine->coins = 9999;
+ }
+ eSlotMachine->unk0E = 0;
+ }
+ if (eSlotMachine->unk0E == 0)
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_8102B80(struct Task *task)
+{
+ if (sub_8103E7C())
+ {
+ DestroyTask(FindTaskIdByFunc(sub_8102A64));
+ }
+ return FALSE;
+}
+
+extern const u8 gUnknown_083ECCB2[][21];
+
+u8 sub_8102BA4(u8 x, s16 y)
+{
+ s16 offset = (eSlotMachine->unk28[x] + y) % 21;
+ if (offset < 0)
+ {
+ offset += 21;
+ }
+ return gUnknown_083ECCB2[x][offset];
+}
+
asm(".section .text_a");
static void LoadSlotMachineWheelOverlay(void);