summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s743
-rw-r--r--src/slot_machine.c350
-rw-r--r--sym_ewram.txt4
3 files changed, 334 insertions, 763 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 659b8901c..a543a18fe 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,672 +5,11 @@
.text
- thumb_func_start sub_813FC2C
-sub_813FC2C: @ 813FC2C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0813FC50 @ =gTasks+0x8
- adds r4, r1, r0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0813FC62
- cmp r0, 0x1
- bgt _0813FC54
- cmp r0, 0
- beq _0813FC5E
- b _0813FCA0
- .align 2, 0
-_0813FC50: .4byte gTasks+0x8
-_0813FC54:
- cmp r0, 0x2
- beq _0813FC6E
- cmp r0, 0x3
- beq _0813FC90
- b _0813FCA0
-_0813FC5E:
- movs r0, 0xE
- b _0813FC7C
-_0813FC62:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FCA0
- b _0813FC82
-_0813FC6E:
- ldr r0, _0813FC8C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0813FCA0
- movs r0, 0xF
-_0813FC7C:
- movs r1, 0
- bl sub_8141148
-_0813FC82:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0813FCA0
- .align 2, 0
-_0813FC8C: .4byte gMain
-_0813FC90:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FCA0
- ldr r0, _0813FCA8 @ =sub_813F964
- bl sub_8140030
-_0813FCA0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813FCA8: .4byte sub_813F964
- thumb_func_end sub_813FC2C
-
- thumb_func_start sub_813FCAC
-sub_813FCAC: @ 813FCAC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0813FCD0 @ =gTasks+0x8
- adds r4, r1, r0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _0813FD78
- lsls r0, 2
- ldr r1, _0813FCD4 @ =_0813FCD8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813FCD0: .4byte gTasks+0x8
-_0813FCD4: .4byte _0813FCD8
- .align 2, 0
-_0813FCD8:
- .4byte _0813FCEC
- .4byte _0813FCF6
- .4byte _0813FD08
- .4byte _0813FD52
- .4byte _0813FD68
-_0813FCEC:
- movs r0, 0xA
- movs r1, 0
- bl sub_8141148
- b _0813FD00
-_0813FCF6:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FD78
-_0813FD00:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0813FD78
-_0813FD08:
- bl Menu_ProcessInputNoWrapClearOnChoose
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _0813FD28
- cmp r1, 0
- bgt _0813FD22
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0813FD44
- b _0813FD78
-_0813FD22:
- cmp r1, 0x1
- beq _0813FD44
- b _0813FD78
-_0813FD28:
- ldr r0, _0813FD40 @ =gUnknown_203F3A0
- ldr r0, [r0]
- ldrh r0, [r0, 0xE]
- bl GiveCoins
- movs r0, 0x8
- movs r1, 0
- bl sub_8141148
- movs r0, 0x3
- strh r0, [r4]
- b _0813FD78
- .align 2, 0
-_0813FD40: .4byte gUnknown_203F3A0
-_0813FD44:
- movs r0, 0xB
- movs r1, 0
- bl sub_8141148
- movs r0, 0x4
- strh r0, [r4]
- b _0813FD78
-_0813FD52:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FD78
- ldr r0, _0813FD64 @ =sub_813FFD8
- bl sub_8140030
- b _0813FD78
- .align 2, 0
-_0813FD64: .4byte sub_813FFD8
-_0813FD68:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FD78
- ldr r0, _0813FD80 @ =sub_813F964
- bl sub_8140030
-_0813FD78:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813FD80: .4byte sub_813F964
- thumb_func_end sub_813FCAC
-
- thumb_func_start sub_813FD84
-sub_813FD84: @ 813FD84
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0813FDA8 @ =gTasks+0x8
- adds r5, r1, r0
- movs r0, 0
- ldrsh r4, [r5, r0]
- cmp r4, 0x1
- beq _0813FDBE
- cmp r4, 0x1
- bgt _0813FDAC
- cmp r4, 0
- beq _0813FDB2
- b _0813FE10
- .align 2, 0
-_0813FDA8: .4byte gTasks+0x8
-_0813FDAC:
- cmp r4, 0x2
- beq _0813FDEC
- b _0813FE10
-_0813FDB2:
- movs r0, 0x6
- movs r1, 0
- bl sub_8141148
- strh r4, [r5, 0x2]
- b _0813FDE4
-_0813FDBE:
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- ble _0813FE10
- movs r0, 0x7
- movs r1, 0
- bl sub_8141148
- movs r0, 0x2
- movs r1, 0x1
- bl sub_8141148
- movs r0, 0xD
- movs r1, 0x2
- bl sub_8141148
-_0813FDE4:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0813FE10
-_0813FDEC:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FE10
- movs r0, 0x1
- bl sub_8141180
- cmp r0, 0
- bne _0813FE10
- movs r0, 0x2
- bl sub_8141180
- cmp r0, 0
- bne _0813FE10
- ldr r0, _0813FE18 @ =sub_813F964
- bl sub_8140030
-_0813FE10:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813FE18: .4byte sub_813F964
- thumb_func_end sub_813FD84
-
- thumb_func_start sub_813FE1C
-sub_813FE1C: @ 813FE1C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0813FE40 @ =gTasks+0x8
- adds r5, r1, r0
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x5
- bls _0813FE36
- b _0813FFCE
-_0813FE36:
- lsls r0, 2
- ldr r1, _0813FE44 @ =_0813FE48
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813FE40: .4byte gTasks+0x8
-_0813FE44: .4byte _0813FE48
- .align 2, 0
-_0813FE48:
- .4byte _0813FE60
- .4byte _0813FEA0
- .4byte _0813FECC
- .4byte _0813FF78
- .4byte _0813FF92
- .4byte _0813FFB4
-_0813FE60:
- ldr r0, _0813FE7C @ =gUnknown_203F3A0
- ldr r0, [r0]
- ldrh r0, [r0, 0xA]
- subs r0, 0x5
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0813FE80
- movs r0, 0x86
- lsls r0, 1
- bl PlayFanfare
- b _0813FE86
- .align 2, 0
-_0813FE7C: .4byte gUnknown_203F3A0
-_0813FE80:
- ldr r0, _0813FE9C @ =0x0000010d
- bl PlayFanfare
-_0813FE86:
- movs r0, 0x8
- movs r1, 0
- bl sub_8141148
- movs r0, 0x4
- movs r1, 0x1
- bl sub_8141148
- movs r0, 0x8
- strh r0, [r5, 0x2]
- b _0813FFAC
- .align 2, 0
-_0813FE9C: .4byte 0x0000010d
-_0813FEA0:
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- bgt _0813FEB0
- b _0813FFCE
-_0813FEB0:
- movs r0, 0x8
- strh r0, [r5, 0x2]
- ldr r0, _0813FEC8 @ =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0813FFAC
- movs r0, 0x2
- strh r0, [r5, 0x2]
- b _0813FFAC
- .align 2, 0
-_0813FEC8: .4byte gMain
-_0813FECC:
- movs r0, 0
- bl sub_8141180
- adds r6, r0, 0
- cmp r6, 0
- bne _0813FFCE
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _0813FF0C
- ldr r0, _0813FF04 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0813FF0C
- ldr r4, _0813FF08 @ =gUnknown_203F3A0
- ldr r0, [r4]
- adds r0, 0x50
- ldrh r0, [r0]
- bl GiveCoins
- ldr r0, [r4]
- adds r0, 0x50
- strh r6, [r0]
- b _0813FF58
- .align 2, 0
-_0813FF04: .4byte gMain
-_0813FF08: .4byte gUnknown_203F3A0
-_0813FF0C:
- ldrh r0, [r5, 0x2]
- subs r0, 0x1
- strh r0, [r5, 0x2]
- lsls r0, 16
- cmp r0, 0
- bne _0813FF58
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _0813FF28
- movs r0, 0x15
- bl PlaySE
-_0813FF28:
- ldr r4, _0813FF70 @ =gUnknown_203F3A0
- ldr r0, [r4]
- adds r0, 0x50
- ldrh r0, [r0]
- cmp r0, 0
- beq _0813FF44
- movs r0, 0x1
- bl GiveCoins
- ldr r1, [r4]
- adds r1, 0x50
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
-_0813FF44:
- movs r0, 0x8
- strh r0, [r5, 0x2]
- ldr r0, _0813FF74 @ =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0813FF58
- movs r0, 0x2
- strh r0, [r5, 0x2]
-_0813FF58:
- movs r0, 0x8
- movs r1, 0
- bl sub_8141148
- ldr r0, _0813FF70 @ =gUnknown_203F3A0
- ldr r0, [r0]
- adds r0, 0x50
- ldrh r0, [r0]
- cmp r0, 0
- bne _0813FFCE
- b _0813FFAC
- .align 2, 0
-_0813FF70: .4byte gUnknown_203F3A0
-_0813FF74: .4byte gMain
-_0813FF78:
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _0813FFCE
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FFCE
- movs r0, 0x5
- movs r1, 0
- b _0813FFA8
-_0813FF92:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FFCE
- movs r0, 0x2
- movs r1, 0
- bl sub_8141148
- movs r0, 0xD
- movs r1, 0x1
-_0813FFA8:
- bl sub_8141148
-_0813FFAC:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0813FFCE
-_0813FFB4:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _0813FFCE
- movs r0, 0x1
- bl sub_8141180
- cmp r0, 0
- bne _0813FFCE
- ldr r0, _0813FFD4 @ =sub_813F964
- bl sub_8140030
-_0813FFCE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813FFD4: .4byte sub_813F964
- thumb_func_end sub_813FE1C
-
- thumb_func_start sub_813FFD8
-sub_813FFD8: @ 813FFD8
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0813FFF8 @ =gTasks+0x8
- adds r4, r1, r0
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0813FFFC
- cmp r0, 0x1
- beq _0814000C
- b _08140024
- .align 2, 0
-_0813FFF8: .4byte gTasks+0x8
-_0813FFFC:
- movs r0, 0x1
- movs r1, 0
- bl sub_8141148
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _08140024
-_0814000C:
- movs r0, 0
- bl sub_8141180
- cmp r0, 0
- bne _08140024
- ldr r0, _0814002C @ =gUnknown_203F3A0
- ldr r0, [r0]
- ldr r0, [r0]
- bl SetMainCallback2
- bl sub_813F92C
-_08140024:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0814002C: .4byte gUnknown_203F3A0
- thumb_func_end sub_813FFD8
-
- thumb_func_start sub_8140030
-sub_8140030: @ 8140030
- push {r4,lr}
- ldr r4, _08140058 @ =gTasks
- ldr r1, _0814005C @ =gUnknown_203F3A0
- ldr r3, [r1]
- ldrb r2, [r3, 0x10]
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r4
- str r0, [r1]
- ldrb r1, [r3, 0x10]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0
- strh r1, [r0, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08140058: .4byte gTasks
-_0814005C: .4byte gUnknown_203F3A0
- thumb_func_end sub_8140030
-
- thumb_func_start sub_8140060
-sub_8140060: @ 8140060
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r12, r0
- ldr r1, _08140144 @ =gUnknown_203F3A0
- mov r10, r1
- mov r8, r10
- mov r9, r0
- movs r6, 0
- movs r7, 0
-_0814007A:
- mov r2, r8
- ldr r3, [r2]
- adds r0, r3, 0
- adds r0, 0x14
- adds r0, r7
- ldr r0, [r0]
- mov r1, r12
- lsls r4, r1, 1
- cmp r0, 0
- bne _0814009C
- adds r0, r3, 0
- adds r0, 0x26
- adds r0, r6
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- beq _0814011A
-_0814009C:
- adds r0, r3, 0
- adds r0, 0x26
- adds r2, r0, r6
- ldrh r5, [r2]
- movs r1, 0
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _081400C4
- adds r1, r3, 0
- adds r1, 0x20
- adds r1, r4
- adds r0, r3, 0
- adds r0, 0x2C
- adds r0, r4
- movs r4, 0
- ldrsh r1, [r1, r4]
- movs r4, 0
- ldrsh r0, [r0, r4]
- cmp r1, r0
- beq _08140104
-_081400C4:
- adds r0, r5, 0x1
- movs r1, 0
- strh r0, [r2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _081400EA
- strh r1, [r2]
- adds r0, r3, 0
- adds r0, 0x20
- adds r1, r0, r6
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- bge _081400EA
- movs r0, 0x14
- strh r0, [r1]
-_081400EA:
- mov r1, r8
- ldr r0, [r1]
- adds r1, r0, 0
- adds r1, 0x20
- adds r1, r6
- adds r0, 0x2C
- adds r0, r6
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r4, 0
- ldrsh r0, [r0, r4]
- cmp r1, r0
- bne _0814011A
-_08140104:
- mov r1, r8
- ldr r0, [r1]
- adds r1, r0, 0
- adds r1, 0x2C
- adds r1, r6
- movs r2, 0x15
- strh r2, [r1]
- adds r0, 0x14
- adds r0, r7
- mov r2, r9
- str r2, [r0]
-_0814011A:
- adds r6, 0x2
- adds r7, 0x4
- movs r4, 0x1
- add r12, r4
- mov r0, r12
- cmp r0, 0x2
- ble _0814007A
- mov r2, r10
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0x20
- adds r1, 0x26
- bl sub_8140D7C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08140144: .4byte gUnknown_203F3A0
- thumb_func_end sub_8140060
-
thumb_func_start sub_8140148
sub_8140148: @ 8140148
push {r4,lr}
movs r2, 0
- ldr r4, _08140168 @ =gUnknown_203F3A0
+ ldr r4, _08140168 @ =sSlotMachineState
movs r3, 0x1
_08140150:
ldr r0, [r4]
@@ -685,7 +24,7 @@ _08140150:
pop {r0}
bx r0
.align 2, 0
-_08140168: .4byte gUnknown_203F3A0
+_08140168: .4byte sSlotMachineState
thumb_func_end sub_8140148
thumb_func_start sub_814016C
@@ -723,7 +62,7 @@ _0814019C:
thumb_func_start sub_81401A0
sub_81401A0: @ 81401A0
lsls r0, 16
- ldr r1, _081401B0 @ =gUnknown_203F3A0
+ ldr r1, _081401B0 @ =sSlotMachineState
ldr r1, [r1]
lsrs r0, 14
adds r1, 0x14
@@ -731,14 +70,14 @@ sub_81401A0: @ 81401A0
ldr r0, [r1]
bx lr
.align 2, 0
-_081401B0: .4byte gUnknown_203F3A0
+_081401B0: .4byte sSlotMachineState
thumb_func_end sub_81401A0
thumb_func_start sub_81401B4
sub_81401B4: @ 81401B4
push {lr}
lsls r0, 16
- ldr r1, _081401E8 @ =gUnknown_203F3A0
+ ldr r1, _081401E8 @ =sSlotMachineState
ldr r2, [r1]
lsrs r0, 15
adds r1, r2, 0
@@ -764,7 +103,7 @@ _081401E0:
pop {r1}
bx r1
.align 2, 0
-_081401E8: .4byte gUnknown_203F3A0
+_081401E8: .4byte sSlotMachineState
_081401EC: .4byte 0xffff0000
thumb_func_end sub_81401B4
@@ -784,7 +123,7 @@ sub_81401F0: @ 81401F0
lsrs r1, r0, 16
movs r0, 0
mov r8, r0
- ldr r0, _0814023C @ =gUnknown_203F3A0
+ ldr r0, _0814023C @ =sSlotMachineState
ldr r0, [r0]
ldrh r0, [r0, 0x8]
cmp r0, 0
@@ -809,7 +148,7 @@ _0814022A:
adds r5, r7, 0x1
b _08140248
.align 2, 0
-_0814023C: .4byte gUnknown_203F3A0
+_0814023C: .4byte sSlotMachineState
_08140240:
adds r6, 0x1
adds r0, r4, 0x1
@@ -858,7 +197,7 @@ _08140288:
mov r8, r0
b _081402FE
_08140294:
- ldr r0, _08140364 @ =gUnknown_203F3A0
+ ldr r0, _08140364 @ =sSlotMachineState
ldr r0, [r0]
ldrh r0, [r0, 0x8]
cmp r0, 0x1
@@ -896,7 +235,7 @@ _081402D0:
ble _081402DA
movs r2, 0
_081402DA:
- ldr r0, _08140364 @ =gUnknown_203F3A0
+ ldr r0, _08140364 @ =sSlotMachineState
ldr r0, [r0]
ldrh r0, [r0, 0x8]
lsls r1, r2, 16
@@ -929,7 +268,7 @@ _08140310:
bge _08140318
movs r2, 0x14
_08140318:
- ldr r0, _08140364 @ =gUnknown_203F3A0
+ ldr r0, _08140364 @ =sSlotMachineState
ldr r0, [r0]
ldrh r0, [r0, 0x8]
lsls r1, r2, 16
@@ -966,7 +305,7 @@ _08140348:
lsrs r2, r0, 16
b _0814037E
.align 2, 0
-_08140364: .4byte gUnknown_203F3A0
+_08140364: .4byte sSlotMachineState
_08140368: .4byte gUnknown_8464926
_0814036C:
bl Random
@@ -991,7 +330,7 @@ _0814037E:
lsls r0, 16
lsrs r2, r0, 16
_08140398:
- ldr r0, _081403B8 @ =gUnknown_203F3A0
+ ldr r0, _081403B8 @ =sSlotMachineState
ldr r0, [r0]
mov r1, r9
strh r1, [r0, 0x32]
@@ -1008,7 +347,7 @@ _08140398:
pop {r0}
bx r0
.align 2, 0
-_081403B8: .4byte gUnknown_203F3A0
+_081403B8: .4byte sSlotMachineState
thumb_func_end sub_81401F0
thumb_func_start sub_81403BC
@@ -1022,7 +361,7 @@ sub_81403BC: @ 81403BC
lsls r0, 16
lsrs r0, 16
mov r8, r0
- ldr r0, _08140470 @ =gUnknown_203F3A0
+ ldr r0, _08140470 @ =sSlotMachineState
ldr r0, [r0]
ldrh r1, [r0, 0x32]
lsls r7, r1, 16
@@ -1062,7 +401,7 @@ _08140404:
_08140416:
lsls r0, r2, 16
asrs r4, r0, 16
- ldr r7, _08140470 @ =gUnknown_203F3A0
+ ldr r7, _08140470 @ =sSlotMachineState
ldr r0, [r7]
ldrh r0, [r0, 0x8]
str r0, [sp]
@@ -1106,7 +445,7 @@ _0814044C:
movs r2, 0x4
b _08140480
.align 2, 0
-_08140470: .4byte gUnknown_203F3A0
+_08140470: .4byte sSlotMachineState
_08140474:
ldr r0, [r7]
movs r1, 0x1
@@ -1164,7 +503,7 @@ sub_81404B8: @ 81404B8
movs r6, 0
movs r5, 0
_081404D8:
- ldr r7, _0814051C @ =gUnknown_203F3A0
+ ldr r7, _0814051C @ =sSlotMachineState
ldr r0, [r7]
ldrh r2, [r0, 0x8]
mov r0, r8
@@ -1199,7 +538,7 @@ _081404FA:
movs r2, 0x4
b _08140526
.align 2, 0
-_0814051C: .4byte gUnknown_203F3A0
+_0814051C: .4byte sSlotMachineState
_08140520:
mov r0, sp
ldrb r2, [r0]
@@ -1464,7 +803,7 @@ sub_81406E8: @ 81406E8
adds r7, r0, 0
adds r5, r1, 0
mov r8, r2
- ldr r0, _081407C8 @ =gUnknown_203F3A0
+ ldr r0, _081407C8 @ =sSlotMachineState
ldr r2, [r0]
movs r1, 0x32
ldrsh r0, [r2, r1]
@@ -1575,7 +914,7 @@ _081407AE:
beq _081407D8
b _081408A0
.align 2, 0
-_081407C8: .4byte gUnknown_203F3A0
+_081407C8: .4byte sSlotMachineState
_081407CC: .4byte gUnknown_8464926
_081407D0:
mov r6, r8
@@ -1851,7 +1190,7 @@ sub_81409B4: @ 81409B4
bl Random
lsls r0, 16
lsrs r2, r0, 18
- ldr r0, _08140A60 @ =gUnknown_203F3A0
+ ldr r0, _08140A60 @ =sSlotMachineState
ldr r0, [r0]
ldrh r1, [r0, 0x4]
lsls r0, r1, 3
@@ -1873,7 +1212,7 @@ _081409D8:
cmp r2, r1
bcs _081409D8
_081409E6:
- ldr r6, _08140A60 @ =gUnknown_203F3A0
+ ldr r6, _08140A60 @ =sSlotMachineState
ldr r1, [r6]
ldrh r0, [r1, 0x8]
cmp r0, 0x4
@@ -1898,7 +1237,7 @@ _081409E6:
_08140A16:
strh r0, [r4, 0xC]
_08140A18:
- ldr r0, _08140A60 @ =gUnknown_203F3A0
+ ldr r0, _08140A60 @ =sSlotMachineState
ldr r1, [r0]
ldrh r1, [r1, 0xC]
cmp r1, 0
@@ -1912,7 +1251,7 @@ _08140A22:
ldr r0, _08140A6C @ =0x00002ccb
cmp r1, r0
bhi _08140A4A
- ldr r0, _08140A60 @ =gUnknown_203F3A0
+ ldr r0, _08140A60 @ =sSlotMachineState
ldr r4, [r0]
bl Random
movs r1, 0x1
@@ -1924,7 +1263,7 @@ _08140A22:
_08140A48:
strh r0, [r4, 0xC]
_08140A4A:
- ldr r2, _08140A60 @ =gUnknown_203F3A0
+ ldr r2, _08140A60 @ =sSlotMachineState
ldr r1, [r2]
ldrh r0, [r1, 0xC]
subs r0, 0x1
@@ -1938,7 +1277,7 @@ _08140A5A:
pop {r0}
bx r0
.align 2, 0
-_08140A60: .4byte gUnknown_203F3A0
+_08140A60: .4byte sSlotMachineState
_08140A64: .4byte gUnknown_84648D2
_08140A68: .4byte 0x00003fff
_08140A6C: .4byte 0x00002ccb
@@ -1946,13 +1285,13 @@ _08140A6C: .4byte 0x00002ccb
thumb_func_start sub_8140A70
sub_8140A70: @ 8140A70
- ldr r0, _08140A7C @ =gUnknown_203F3A0
+ ldr r0, _08140A7C @ =sSlotMachineState
ldr r1, [r0]
movs r0, 0
strh r0, [r1, 0x8]
bx lr
.align 2, 0
-_08140A7C: .4byte gUnknown_203F3A0
+_08140A7C: .4byte sSlotMachineState
thumb_func_end sub_8140A70
thumb_func_start sub_8140A80
@@ -1967,7 +1306,7 @@ sub_8140A80: @ 8140A80
movs r2, 0x9
bl memset
movs r5, 0
- ldr r2, _08140B58 @ =gUnknown_203F3A0
+ ldr r2, _08140B58 @ =sSlotMachineState
movs r3, 0
adds r4, r2, 0
_08140A9C:
@@ -2028,7 +1367,7 @@ _08140AE8:
subs r5, 0x1
cmp r5, 0
bge _08140AD0
- ldr r0, _08140B58 @ =gUnknown_203F3A0
+ ldr r0, _08140B58 @ =sSlotMachineState
ldr r0, [r0]
adds r0, 0x50
movs r1, 0
@@ -2038,7 +1377,7 @@ _08140AE8:
movs r6, 0
movs r5, 0x4
_08140B18:
- ldr r0, _08140B58 @ =gUnknown_203F3A0
+ ldr r0, _08140B58 @ =sSlotMachineState
ldr r1, [r0]
mov r0, r8
adds r0, 0x3
@@ -2069,7 +1408,7 @@ _08140B18:
movs r3, 0x2
b _08140B92
.align 2, 0
-_08140B58: .4byte gUnknown_203F3A0
+_08140B58: .4byte sSlotMachineState
_08140B5C: .4byte gUnknown_8464926
_08140B60: .4byte gUnknown_84648BD
_08140B64:
@@ -2098,7 +1437,7 @@ _08140B8E:
cmp r3, 0
beq _08140BB0
_08140B92:
- ldr r0, _08140BD4 @ =gUnknown_203F3A0
+ ldr r0, _08140BD4 @ =sSlotMachineState
ldr r2, [r0]
adds r0, r2, 0
adds r0, 0x3C
@@ -2134,34 +1473,34 @@ _08140BB6:
pop {r1}
bx r1
.align 2, 0
-_08140BD4: .4byte gUnknown_203F3A0
+_08140BD4: .4byte sSlotMachineState
_08140BD8: .4byte gUnknown_8464966
thumb_func_end sub_8140A80
thumb_func_start sub_8140BDC
sub_8140BDC: @ 8140BDC
- ldr r0, _08140BE8 @ =gUnknown_203F3A0
+ ldr r0, _08140BE8 @ =sSlotMachineState
ldr r0, [r0]
adds r0, 0x50
ldrh r0, [r0]
bx lr
.align 2, 0
-_08140BE8: .4byte gUnknown_203F3A0
+_08140BE8: .4byte sSlotMachineState
thumb_func_end sub_8140BDC
thumb_func_start sub_8140BEC
sub_8140BEC: @ 8140BEC
- ldr r0, _08140BF4 @ =gUnknown_203F3A0
+ ldr r0, _08140BF4 @ =sSlotMachineState
ldr r0, [r0]
ldrb r0, [r0, 0xE]
bx lr
.align 2, 0
-_08140BF4: .4byte gUnknown_203F3A0
+_08140BF4: .4byte sSlotMachineState
thumb_func_end sub_8140BEC
thumb_func_start sub_8140BF8
sub_8140BF8: @ 8140BF8
- ldr r1, _08140C08 @ =gUnknown_203F3A0
+ ldr r1, _08140C08 @ =sSlotMachineState
ldr r1, [r1]
lsls r0, 2
adds r1, 0x3C
@@ -2169,7 +1508,7 @@ sub_8140BF8: @ 8140BF8
ldr r0, [r1]
bx lr
.align 2, 0
-_08140C08: .4byte gUnknown_203F3A0
+_08140C08: .4byte sSlotMachineState
thumb_func_end sub_8140BF8
thumb_func_start sub_8140C0C
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 5a69512c5..d4d0ab90d 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -8,6 +8,7 @@
#include "quest_log.h"
#include "overworld.h"
#include "slot_machine.h"
+#include "menu.h"
#include "constants/songs.h"
struct SlotMachineState
@@ -16,33 +17,33 @@ struct SlotMachineState
u16 machineidx;
u16 field_06;
u8 filler_08[2];
- u16 field_0A;
+ u16 slotRewardClass;
u8 filler_0C[2];
u16 bet;
u8 field_10;
u8 field_11;
TaskFunc field_14[3];
- u16 field_20[3];
- u16 field_26[3];
- u16 field_2C[3];
+ s16 field_20[3];
+ s16 field_26[3];
+ s16 field_2C[3];
u8 filler_32[0x1E];
- u16 field_50;
+ u16 payout;
};
-EWRAM_DATA struct SlotMachineState * gUnknown_203F3A0 = NULL;
+EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL;
void sub_813F84C(struct SlotMachineState * ptr);
void sub_813F898(void);
void sub_813F92C(void);
void sub_813F94C(void);
-void sub_813F964(u8 taskId);
-void sub_813FBC0(u8 taskId);
-void sub_813FC2C(u8 taskId);
-void sub_813FCAC(u8 taskId);
-void sub_813FD84(u8 taskId);
-void sub_813FE1C(u8 taskId);
-void sub_813FFD8(u8 taskId);
-void sub_8140030(TaskFunc taskFunc);
+void MainTask_SlotsGameLoop(u8 taskId);
+void MainTask_NoCoinsGameOver(u8 taskId);
+void MainTask_ShowHelp(u8 taskId);
+void MainTask_ConfirmExitGame(u8 taskId);
+void MainTask_DarnNoPayout(u8 taskId);
+void MainTask_WinHandlePayout(u8 taskId);
+void MainTask_ExitSlots(u8 taskId);
+static void SetMainTask(TaskFunc taskFunc);
void sub_8140060(u8 taskId);
void sub_8140148(void);
void sub_814016C(u16, u16);
@@ -50,6 +51,7 @@ bool32 sub_81401A0(u16);
void sub_81409B4(void);
void sub_8140A70(void);
u16 sub_8140A80(void);
+void sub_8140D7C(s16 *, s16 *);
bool32 sub_814104C(void);
void sub_8141094(void);
void sub_8141148(u16 a0, u8 a1);
@@ -59,16 +61,16 @@ void sub_8141C30(u8, u8);
void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback)
{
ResetTasks();
- gUnknown_203F3A0 = Alloc(sizeof(*gUnknown_203F3A0));
- if (gUnknown_203F3A0 == NULL)
+ sSlotMachineState = Alloc(sizeof(*sSlotMachineState));
+ if (sSlotMachineState == NULL)
SetMainCallback2(savedCallback);
else
{
if (machineIdx > 5)
machineIdx = 0;
- gUnknown_203F3A0->machineidx = machineIdx;
- gUnknown_203F3A0->savedCallback = savedCallback;
- sub_813F84C(gUnknown_203F3A0);
+ sSlotMachineState->machineidx = machineIdx;
+ sSlotMachineState->savedCallback = savedCallback;
+ sub_813F84C(sSlotMachineState);
SetMainCallback2(sub_813F898);
}
}
@@ -79,14 +81,14 @@ void sub_813F84C(struct SlotMachineState * ptr)
ptr->field_06 = 0;
ptr->bet = 0;
- ptr->field_50 = 0;
+ ptr->payout = 0;
// for whatever reason, the loop does not use the ptr param
for (i = 0; i < 3; i++)
{
- gUnknown_203F3A0->field_14[i] = NULL;
- gUnknown_203F3A0->field_20[i] = 0;
- gUnknown_203F3A0->field_26[i] = 0;
- gUnknown_203F3A0->field_2C[i] = 21;
+ sSlotMachineState->field_14[i] = NULL;
+ sSlotMachineState->field_20[i] = 0;
+ sSlotMachineState->field_26[i] = 0;
+ sSlotMachineState->field_2C[i] = 21;
}
}
@@ -101,7 +103,7 @@ void sub_813F898(void)
case 0:
if (sub_814104C())
{
- SetMainCallback2(gUnknown_203F3A0->savedCallback);
+ SetMainCallback2(sSlotMachineState->savedCallback);
sub_813F92C();
}
else
@@ -111,10 +113,10 @@ void sub_813F898(void)
}
break;
case 1:
- if (sub_8141180(0) == 0)
+ if (!sub_8141180(0))
{
- gUnknown_203F3A0->field_10 = CreateTask(sub_813F964, 0);
- gUnknown_203F3A0->field_11 = CreateTask(sub_8140060, 1);
+ sSlotMachineState->field_10 = CreateTask(MainTask_SlotsGameLoop, 0);
+ sSlotMachineState->field_11 = CreateTask(sub_8140060, 1);
SetMainCallback2(sub_813F94C);
}
break;
@@ -124,10 +126,10 @@ void sub_813F898(void)
void sub_813F92C(void)
{
sub_8141094();
- if (gUnknown_203F3A0 != NULL)
+ if (sSlotMachineState != NULL)
{
- Free(gUnknown_203F3A0);
- gUnknown_203F3A0 = NULL;
+ Free(sSlotMachineState);
+ sSlotMachineState = NULL;
}
}
@@ -139,7 +141,7 @@ void sub_813F94C(void)
UpdatePaletteFade();
}
-void sub_813F964(u8 taskId)
+void MainTask_SlotsGameLoop(u8 taskId)
{
s16 * data = gTasks[taskId].data;
@@ -148,11 +150,11 @@ void sub_813F964(u8 taskId)
case 0:
if (GetCoins() == 0)
{
- sub_8140030(sub_813FBC0);
+ SetMainTask(MainTask_NoCoinsGameOver);
}
else if (JOY_NEW(DPAD_DOWN))
{
- gUnknown_203F3A0->bet++;
+ sSlotMachineState->bet++;
TakeCoins(1);
PlaySE(SE_T_KAMI2);
sub_8141148(8, 0);
@@ -161,15 +163,15 @@ void sub_813F964(u8 taskId)
}
else if (JOY_NEW(R_BUTTON))
{
- s32 toAdd = 3 - gUnknown_203F3A0->bet;
+ s32 toAdd = 3 - sSlotMachineState->bet;
if (GetCoins() >= toAdd)
{
- gUnknown_203F3A0->bet = 3;
+ sSlotMachineState->bet = 3;
TakeCoins(toAdd);
}
else
{
- gUnknown_203F3A0->bet += GetCoins();
+ sSlotMachineState->bet += GetCoins();
SetCoins(0);
}
PlaySE(SE_T_KAMI2);
@@ -177,23 +179,23 @@ void sub_813F964(u8 taskId)
sub_8141148(2, 1);
data[0] = 1;
}
- else if (JOY_NEW(A_BUTTON) && gUnknown_203F3A0->bet != 0)
+ else if (JOY_NEW(A_BUTTON) && sSlotMachineState->bet != 0)
{
data[0] = 2;
}
else if (JOY_NEW(B_BUTTON))
{
- sub_8140030(sub_813FCAC);
+ SetMainTask(MainTask_ConfirmExitGame);
}
else if (JOY_NEW(DPAD_RIGHT))
{
- sub_8140030(sub_813FC2C);
+ SetMainTask(MainTask_ShowHelp);
}
break;
case 1:
- if (sub_8141180(0) == 0 && sub_8141180(1) == 0)
+ if (!sub_8141180(0) && !sub_8141180(1))
{
- if (gUnknown_203F3A0->bet == 3 || GetCoins() == 0)
+ if (sSlotMachineState->bet == 3 || GetCoins() == 0)
data[0] = 2;
else
data[0] = 0;
@@ -203,39 +205,39 @@ void sub_813F964(u8 taskId)
sub_811539C();
sub_81409B4();
sub_8140148();
- gUnknown_203F3A0->field_06 = 0;
+ sSlotMachineState->field_06 = 0;
sub_8141148(3, 0);
data[0] = 3;
break;
case 3:
- if (sub_8141180(0) == 0)
+ if (!sub_8141180(0))
{
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_JYUNI);
- sub_814016C(gUnknown_203F3A0->field_06, gUnknown_203F3A0->field_06);
- sub_8141C30(gUnknown_203F3A0->field_06, 0);
+ sub_814016C(sSlotMachineState->field_06, sSlotMachineState->field_06);
+ sub_8141C30(sSlotMachineState->field_06, 0);
data[0] = 4;
}
}
break;
case 4:
- if (sub_81401A0(gUnknown_203F3A0->field_06) == 0 && sub_8141180(0) == 0)
+ if (sub_81401A0(sSlotMachineState->field_06) == 0 && !sub_8141180(0))
{
- gUnknown_203F3A0->field_06++;
- if (gUnknown_203F3A0->field_06 >= 3)
+ sSlotMachineState->field_06++;
+ if (sSlotMachineState->field_06 >= 3)
{
- gUnknown_203F3A0->field_0A = sub_8140A80();
- gUnknown_203F3A0->bet = 0;
- gUnknown_203F3A0->field_06 = 0;
- if (gUnknown_203F3A0->field_0A == 0)
- sub_8140030(sub_813FD84);
+ sSlotMachineState->slotRewardClass = sub_8140A80();
+ sSlotMachineState->bet = 0;
+ sSlotMachineState->field_06 = 0;
+ if (sSlotMachineState->slotRewardClass == 0)
+ SetMainTask(MainTask_DarnNoPayout);
else
{
- if (gUnknown_203F3A0->field_0A == 6)
+ if (sSlotMachineState->slotRewardClass == 6)
IncrementGameStat(GAME_STAT_SLOT_JACKPOTS);
sub_8140A70();
- sub_8140030(sub_813FE1C);
+ SetMainTask(MainTask_WinHandlePayout);
}
}
else
@@ -245,7 +247,7 @@ void sub_813F964(u8 taskId)
}
}
-void sub_813FBC0(u8 taskId)
+void MainTask_NoCoinsGameOver(u8 taskId)
{
s16 * data = gTasks[taskId].data;
@@ -256,12 +258,242 @@ void sub_813FBC0(u8 taskId)
data[0]++;
break;
case 1:
- if (sub_8141180(0) == 0)
+ if (!sub_8141180(0))
data[0]++;
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
- sub_8140030(sub_813FFD8);
+ SetMainTask(MainTask_ExitSlots);
break;
}
}
+
+void MainTask_ShowHelp(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_8141148(14, 0);
+ data[0]++;
+ break;
+ case 1:
+ if (!sub_8141180(0))
+ data[0]++;
+ break;
+ case 2:
+ if (JOY_NEW(DPAD_LEFT))
+ {
+ sub_8141148(15, 0);
+ data[0]++;
+ }
+ break;
+ case 3:
+ if (!sub_8141180(0))
+ SetMainTask(MainTask_SlotsGameLoop);
+ break;
+ }
+}
+
+void MainTask_ConfirmExitGame(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_8141148(10, 0);
+ data[0]++;
+ break;
+ case 1:
+ if (!sub_8141180(0))
+ data[0]++;
+ break;
+ case 2:
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ GiveCoins(sSlotMachineState->bet);
+ sub_8141148(8, 0);
+ data[0] = 3;
+ break;
+ case 1:
+ case -1:
+ sub_8141148(11, 0);
+ data[0] = 4;
+ break;
+ }
+ break;
+ case 3:
+ if (!sub_8141180(0))
+ SetMainTask(MainTask_ExitSlots);
+ break;
+ case 4:
+ if (!sub_8141180(0))
+ SetMainTask(MainTask_SlotsGameLoop);
+ break;
+ }
+}
+
+void MainTask_DarnNoPayout(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_8141148(6, 0);
+ data[1] = 0;
+ data[0]++;
+ break;
+ case 1:
+ data[1]++;
+ if (data[1] > 60)
+ {
+ sub_8141148(7, 0);
+ sub_8141148(2, 1);
+ sub_8141148(13, 2);
+ data[0]++;
+ }
+ break;
+ case 2:
+ if (!sub_8141180(0) && !sub_8141180(1) && !sub_8141180(2))
+ SetMainTask(MainTask_SlotsGameLoop);
+ break;
+ }
+}
+
+void MainTask_WinHandlePayout(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ if (sSlotMachineState->slotRewardClass == 5 || sSlotMachineState->slotRewardClass == 6)
+ PlayFanfare(MUS_ME_B_BIG);
+ else
+ PlayFanfare(MUS_ME_B_SMALL);
+ sub_8141148(8, 0);
+ sub_8141148(4, 1);
+ data[1] = 8;
+ data[0]++;
+ break;
+ case 1:
+ data[1]++;
+ if (data[1] > 120)
+ {
+ data[1] = 8;
+ if (JOY_HELD(A_BUTTON))
+ data[1] = 2;
+ data[0]++;
+ }
+ break;
+ case 2:
+ if (!sub_8141180(0))
+ {
+ if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON))
+ {
+ GiveCoins(sSlotMachineState->payout);
+ sSlotMachineState->payout = 0;
+ }
+ else
+ {
+ data[1]--;
+ if (data[1] == 0)
+ {
+ if (IsFanfareTaskInactive())
+ PlaySE(SE_PIN);
+ if (sSlotMachineState->payout != 0)
+ {
+ GiveCoins(1);
+ sSlotMachineState->payout--;
+ }
+ data[1] = 8;
+ if (JOY_HELD(A_BUTTON))
+ data[1] = 2;
+ }
+ }
+ sub_8141148(8, 0);
+ if (sSlotMachineState->payout == 0)
+ data[0]++;
+ }
+ break;
+ case 3:
+ if (IsFanfareTaskInactive() && !sub_8141180(0))
+ {
+ sub_8141148(5, 0);
+ data[0]++;
+ }
+ break;
+ case 4:
+ if (!sub_8141180(0))
+ {
+ sub_8141148(2, 0);
+ sub_8141148(13, 1);
+ data[0]++;
+ }
+ break;
+ case 5:
+ if (!sub_8141180(0) && !sub_8141180(1))
+ SetMainTask(MainTask_SlotsGameLoop);
+ break;
+ }
+}
+
+void MainTask_ExitSlots(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_8141148(1, 0);
+ data[0]++;
+ break;
+ case 1:
+ if (!sub_8141180(0))
+ {
+ SetMainCallback2(sSlotMachineState->savedCallback);
+ sub_813F92C();
+ }
+ break;
+ }
+}
+
+static void SetMainTask(TaskFunc taskFunc)
+{
+ gTasks[sSlotMachineState->field_10].func = taskFunc;
+ gTasks[sSlotMachineState->field_10].data[0] = 0;
+}
+
+void sub_8140060(u8 taskId)
+{
+ // taskId is never used
+
+ s32 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (sSlotMachineState->field_14[i] != NULL || sSlotMachineState->field_26[i] != 0)
+ {
+ if (sSlotMachineState->field_26[i] != 0 || sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i])
+ {
+ sSlotMachineState->field_26[i]++;
+ if (sSlotMachineState->field_26[i] > 2)
+ {
+ sSlotMachineState->field_26[i] = 0;
+ sSlotMachineState->field_20[i]--;
+ if (sSlotMachineState->field_20[i] < 0)
+ sSlotMachineState->field_20[i] = 20;
+ }
+ if (sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i])
+ continue;
+ }
+ sSlotMachineState->field_2C[i] = 21;
+ sSlotMachineState->field_14[i] = NULL;
+ }
+ }
+ sub_8140D7C(sSlotMachineState->field_20, sSlotMachineState->field_26);
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index a5151ebc0..fa2499ace 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1589,8 +1589,8 @@ gUnknown_203F38C: @ 203F38C
gUnknown_203F39C: @ 203F39C
.space 0x4
-gUnknown_203F3A0: @ 203F3A0
- .space 0x4
+ .align 2
+ .include "src/slot_machine.o"
gUnknown_203F3A4: @ 203F3A4
.space 0x4