diff options
-rw-r--r-- | asm/slot_machine.s | 243 | ||||
-rw-r--r-- | src/slot_machine.c | 59 |
2 files changed, 41 insertions, 261 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 0a6d0cf10..b3634a4b5 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,249 +5,6 @@ .text - thumb_func_start sub_81401F0 -sub_81401F0: @ 81401F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl sub_81401B4 - lsls r0, 16 - lsrs r1, r0, 16 - movs r0, 0 - mov r8, r0 - ldr r0, _0814023C @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - cmp r0, 0 - bne _08140294 - mov r2, r9 - cmp r2, 0 - bne _08140294 - movs r7, 0 - lsls r1, 16 - str r1, [sp, 0xC] - movs r0, 0 - str r0, [sp, 0x8] - mov r10, r0 -_0814022A: - movs r6, 0 - ldr r1, [sp, 0xC] - asrs r0, r1, 16 - subs r0, r7 - adds r0, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - adds r5, r7, 0x1 - b _08140248 - .align 2, 0 -_0814023C: .4byte sSlotMachineState -_08140240: - adds r6, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 -_08140248: - cmp r6, 0x2 - bgt _0814026E - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08140256 - movs r2, 0 -_08140256: - lsls r0, r2, 16 - asrs r4, r0, 16 - mov r2, r10 - adds r0, r4, r2 - ldr r1, _08140284 @ =gUnknown_8464926 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - beq _08140240 -_0814026E: - cmp r6, 0x3 - bne _0814027C - mov r0, sp - add r0, r8 - strb r7, [r0] - movs r2, 0x1 - add r8, r2 -_0814027C: - adds r7, r5, 0 - cmp r7, 0x4 - ble _0814022A - b _08140348 - .align 2, 0 -_08140284: .4byte gUnknown_8464926 -_08140288: - mov r1, sp - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - mov r8, r0 - b _081402FE -_08140294: - ldr r0, _08140364 @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - cmp r0, 0x1 - bne _081402AE - lsls r2, r1, 16 - str r2, [sp, 0xC] - mov r0, r9 - lsls r0, 1 - str r0, [sp, 0x8] - mov r2, r9 - cmp r2, 0 - bne _08140348 -_081402AE: - movs r7, 0 - lsls r1, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r1, r2 - lsrs r2, r0, 16 - str r1, [sp, 0xC] - mov r0, r9 - lsls r6, r0, 2 - lsls r0, 1 - str r0, [sp, 0x8] - ldr r1, _08140368 @ =gUnknown_8464926 - mov r10, r1 - mov r1, r9 - adds r0, r6, r1 - lsls r0, 2 - adds r5, r0, r1 -_081402D0: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _081402DA - movs r2, 0 -_081402DA: - ldr r0, _08140364 @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r1, r4, r5 - add r1, r10 - ldrb r1, [r1] - bl sub_81408F4 - cmp r0, 0 - bne _08140288 - adds r7, 0x1 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r7, 0x2 - ble _081402D0 -_081402FE: - movs r7, 0 - ldr r0, [sp, 0xC] - lsrs r2, r0, 16 - ldr r1, _08140368 @ =gUnknown_8464926 - mov r10, r1 - mov r1, r9 - adds r0, r6, r1 - lsls r0, 2 - adds r6, r0, r1 -_08140310: - lsls r0, r2, 16 - cmp r0, 0 - bge _08140318 - movs r2, 0x14 -_08140318: - ldr r0, _08140364 @ =sSlotMachineState - ldr r0, [r0] - ldrh r0, [r0, 0x8] - lsls r1, r2, 16 - asrs r4, r1, 16 - adds r1, r4, r6 - add r1, r10 - ldrb r1, [r1] - bl sub_81408F4 - adds r5, r7, 0x1 - cmp r0, 0 - beq _0814033C - mov r0, sp - add r0, r8 - strb r5, [r0] - movs r2, 0x1 - add r8, r2 -_0814033C: - adds r7, r5, 0 - subs r0, r4, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r7, 0x3 - ble _08140310 -_08140348: - mov r0, r8 - cmp r0, 0 - bne _0814036C - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x5 - bl __umodsi3 - lsls r0, 16 - lsrs r2, r0, 16 - b _0814037E - .align 2, 0 -_08140364: .4byte sSlotMachineState -_08140368: .4byte gUnknown_8464926 -_0814036C: - bl Random - lsls r0, 16 - lsrs r0, 16 - mov r1, r8 - bl __modsi3 - add r0, sp - ldrb r2, [r0] -_0814037E: - ldr r0, [sp, 0xC] - 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 _08140398 - adds r0, 0x15 - lsls r0, 16 - lsrs r2, r0, 16 -_08140398: - ldr r0, _081403B8 @ =sSlotMachineState - ldr r0, [r0] - mov r1, r9 - strh r1, [r0, 0x32] - adds r0, 0x2C - ldr r1, [sp, 0x8] - adds r0, r1 - strh r2, [r0] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081403B8: .4byte sSlotMachineState - thumb_func_end sub_81401F0 - thumb_func_start sub_81403BC sub_81403BC: @ 81403BC push {r4-r7,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index 3a19fdbd5..af80f1bfc 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -9,6 +9,7 @@ #include "overworld.h" #include "slot_machine.h" #include "menu.h" +#include "random.h" #include "constants/songs.h" struct SlotMachineState @@ -26,7 +27,8 @@ struct SlotMachineState s16 field_20[3]; s16 field_26[3]; s16 field_2C[3]; - u8 filler_32[0x1E]; + u16 field_32; + u8 filler_34[0x1C]; u16 payout; }; @@ -547,34 +549,26 @@ s16 sub_81401B4(u16 whichReel) return position; } -/* void sub_81401F0(u16 whichReel) { - s32 i; + s32 i, j; s16 r2; - s16 r6; - s16 sp0C = sub_81401B4(whichReel); - u32 r8 = 0; - u32 sp08; - u32 r10; u8 sp0[5]; + s16 sp0C = sub_81401B4(whichReel); + s32 r8 = 0; if (sSlotMachineState->field_08 == 0 && whichReel == 0) { - sp08 = 0; - r10 = 0; for (i = 0; i < 5; i++) { - r6 = 0; - r2 = sp0C - i + 1; - for (; r6 < 3; r6++) + for (j = 0, r2 = sp0C - i + 1; j < 3; j++, r2++) { if (r2 >= 21) r2 = 0; - if (sub_81408F4(1, gUnknown_8464926[r10][r2])) + if (sub_81408F4(1, gUnknown_8464926[whichReel][r2])) break; } - if (r6 == 3) + if (j == 3) { sp0[r8] = i; r8++; @@ -583,10 +577,39 @@ void sub_81401F0(u16 whichReel) } else if (sSlotMachineState->field_08 != 1 || whichReel == 0) { - for (i = 0, r2 = whichReel + 1; i < 3; i++) + for (i = 0, r2 = sp0C + 1; i < 3; i++, r2++) { - if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[])) + if (r2 >= 21) + r2 = 0; + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[whichReel][r2])) + { + sp0[0] = 0; + r8 = 1; + break; + } } + for (i = 0, r2 = sp0C; i < 4; i++, r2--) + { + if (r2 < 0) + r2 = 20; + if (sub_81408F4(sSlotMachineState->field_08, gUnknown_8464926[whichReel][r2])) + { + sp0[r8] = i + 1; + r8++; + } + } + } + if (r8 == 0) + { + r2 = Random() % 5; + } + else + { + r2 = sp0[Random() % r8]; } + r2 = sp0C - r2; + if (r2 < 0) + r2 += 21; + sSlotMachineState->field_32 = whichReel; + sSlotMachineState->field_2C[whichReel] = r2; } -*/ |