summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s215
-rw-r--r--src/slot_machine.c94
2 files changed, 91 insertions, 218 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index b3634a4b5..a69c3ada1 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,221 +5,6 @@
.text
- thumb_func_start sub_81403BC
-sub_81403BC: @ 81403BC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r0, _08140470 @ =sSlotMachineState
- ldr r0, [r0]
- ldrh r1, [r0, 0x32]
- lsls r7, r1, 16
- asrs r1, r7, 15
- adds r0, 0x20
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _081403EC
- movs r4, 0
-_081403EC:
- mov r0, r8
- bl sub_81401B4
- lsls r1, r0, 16
- movs r2, 0x80
- lsls r2, 9
- adds r0, r1, r2
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08140404
- movs r2, 0
-_08140404:
- movs r6, 0
- movs r5, 0
- mov r10, r7
- lsls r4, 16
- mov r9, r4
- str r1, [sp, 0x10]
- mov r0, r8
- lsls r0, 1
- str r0, [sp, 0xC]
-_08140416:
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r7, _08140470 @ =sSlotMachineState
- ldr r0, [r7]
- ldrh r0, [r0, 0x8]
- str r0, [sp]
- mov r1, r10
- asrs r0, r1, 16
- mov r2, r9
- asrs r1, r2, 16
- mov r2, r8
- adds r3, r4, 0
- bl sub_814054C
- cmp r0, 0
- beq _08140440
- mov r0, sp
- adds r0, r6
- adds r0, 0x4
- strb r5, [r0]
- adds r6, 0x1
-_08140440:
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r0, 0
- bge _0814044C
- movs r2, 0x14
-_0814044C:
- adds r5, 0x1
- cmp r5, 0x4
- ble _08140416
- cmp r6, 0
- bne _08140474
- ldr r0, [r7]
- str r6, [r0, 0x38]
- ldrh r0, [r0, 0x8]
- subs r0, 0x5
- lsls r0, 16
- lsrs r0, 16
- movs r2, 0
- adds r3, r7, 0
- cmp r0, 0x1
- bhi _08140480
- movs r2, 0x4
- b _08140480
- .align 2, 0
-_08140470: .4byte sSlotMachineState
-_08140474:
- ldr r0, [r7]
- movs r1, 0x1
- str r1, [r0, 0x38]
- add r0, sp, 0x4
- ldrb r2, [r0]
- adds r3, r7, 0
-_08140480:
- ldr r0, [sp, 0x10]
- asrs r1, r0, 16
- lsls r0, r2, 16
- asrs r0, 16
- subs r1, r0
- lsls r1, 16
- lsrs r2, r1, 16
- asrs r0, r1, 16
- cmp r0, 0
- bge _0814049A
- adds r0, 0x15
- lsls r0, 16
- lsrs r2, r0, 16
-_0814049A:
- ldr r0, [r3]
- mov r1, r8
- strh r1, [r0, 0x34]
- adds r0, 0x2C
- ldr r1, [sp, 0xC]
- adds r0, r1
- strh r2, [r0]
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81403BC
-
- thumb_func_start sub_81404B8
-sub_81404B8: @ 81404B8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- bl sub_81401B4
- lsls r0, 16
- asrs r0, 16
- mov r9, r0
- mov r4, r9
- movs r6, 0
- movs r5, 0
-_081404D8:
- ldr r7, _0814051C @ =sSlotMachineState
- ldr r0, [r7]
- ldrh r2, [r0, 0x8]
- mov r0, r8
- adds r1, r4, 0
- bl sub_81406E8
- cmp r0, 0
- beq _081404F2
- mov r1, sp
- adds r0, r1, r6
- strb r5, [r0]
- adds r6, 0x1
-_081404F2:
- subs r4, 0x1
- cmp r4, 0
- bge _081404FA
- movs r4, 0x14
-_081404FA:
- adds r5, 0x1
- cmp r5, 0x4
- ble _081404D8
- cmp r6, 0
- bne _08140520
- ldr r0, [r7]
- ldrh r0, [r0, 0x8]
- subs r0, 0x5
- lsls r0, 16
- lsrs r0, 16
- movs r2, 0
- adds r1, r7, 0
- cmp r0, 0x1
- bhi _08140526
- movs r2, 0x4
- b _08140526
- .align 2, 0
-_0814051C: .4byte sSlotMachineState
-_08140520:
- mov r0, sp
- ldrb r2, [r0]
- adds r1, r7, 0
-_08140526:
- mov r3, r9
- subs r2, r3, r2
- cmp r2, 0
- bge _08140530
- adds r2, 0x15
-_08140530:
- ldr r0, [r1]
- mov r3, r8
- lsls r1, r3, 1
- adds r0, 0x2C
- adds r0, r1
- strh r2, [r0]
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81404B8
-
thumb_func_start sub_814054C
sub_814054C: @ 814054C
push {r4-r7,lr}
diff --git a/src/slot_machine.c b/src/slot_machine.c
index af80f1bfc..f1f16d848 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -27,8 +27,9 @@ struct SlotMachineState
s16 field_20[3];
s16 field_26[3];
s16 field_2C[3];
- u16 field_32;
- u8 filler_34[0x1C];
+ s16 field_32[3];
+ u32 field_38;
+ u8 filler_3C[0x14];
u16 payout;
};
@@ -54,6 +55,8 @@ void sub_81401F0(u16 whichReel);
void sub_81403BC(u16 whichReel);
void sub_81404B8(u16 whichReel);
bool32 sub_81408F4(u32 a0, u32 a1);
+bool32 sub_814054C(u32, u32, u32, u32, u32);
+bool32 sub_81406E8(u32, u32, u32);
void sub_81409B4(void);
void sub_8140A70(void);
u16 sub_8140A80(void);
@@ -610,6 +613,91 @@ void sub_81401F0(u16 whichReel)
r2 = sp0C - r2;
if (r2 < 0)
r2 += 21;
- sSlotMachineState->field_32 = whichReel;
+ sSlotMachineState->field_32[0] = whichReel;
+ sSlotMachineState->field_2C[whichReel] = r2;
+}
+
+void sub_81403BC(u16 whichReel)
+{
+ s16 r2, r4, r7, sp10;
+ s32 i;
+ u32 r6;
+ u8 sp4[5];
+
+ r7 = sSlotMachineState->field_32[0];
+ r4 = sSlotMachineState->field_20[r7] + 1;
+ if (r4 >= 21)
+ r4 = 0;
+ sp10 = sub_81401B4(whichReel);
+ r2 = sp10 + 1;
+ if (r2 >= 21)
+ r2 = 0;
+ r6 = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (sub_814054C(r7, r4, whichReel, r2, sSlotMachineState->field_08))
+ {
+ sp4[r6] = i;
+ r6++;
+ }
+ r2--;
+ if (r2 < 0)
+ r2 = 20;
+ }
+ if (r6 == 0)
+ {
+ sSlotMachineState->field_38 = 0;
+ if (sSlotMachineState->field_08 == 5 || sSlotMachineState->field_08 == 6)
+ r2 = 4;
+ else
+ r2 = 0;
+ }
+ else
+ {
+ sSlotMachineState->field_38 = 1;
+ r2 = sp4[0];
+ }
+ r2 = sp10 - r2;
+ if (r2 < 0)
+ r2 += 21;
+ sSlotMachineState->field_32[1] = whichReel;
+ sSlotMachineState->field_2C[whichReel] = r2;
+}
+
+void sub_81404B8(u16 whichReel)
+{
+ s32 i;
+ u32 r6;
+ s32 r9;
+ s32 r4;
+ s32 r2;
+ u8 sp0[5];
+
+ r9 = sub_81401B4(whichReel);
+ r4 = r9;
+ r6 = 0;
+ for (i = 0; i < 5; i++)
+ {
+ if (sub_81406E8(whichReel, r4, sSlotMachineState->field_08))
+ {
+ sp0[r6] = i;
+ r6++;
+ }
+ r4--;
+ if (r4 < 0)
+ r4 = 20;
+ }
+ if (r6 == 0)
+ {
+ if (sSlotMachineState->field_08 == 5 || sSlotMachineState->field_08 == 6)
+ r2 = 4;
+ else
+ r2 = 0;
+ }
+ else
+ r2 = sp0[0];
+ r2 = r9 - r2;
+ if (r2 < 0)
+ r2 += 21;
sSlotMachineState->field_2C[whichReel] = r2;
}