diff options
-rw-r--r-- | asm/slot_machine.s | 215 | ||||
-rw-r--r-- | src/slot_machine.c | 94 |
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; } |