diff options
-rw-r--r-- | asm/slot_machine.s | 743 | ||||
-rw-r--r-- | src/slot_machine.c | 350 | ||||
-rw-r--r-- | sym_ewram.txt | 4 |
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 |