diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-21 16:40:30 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-21 16:40:30 -0400 |
commit | 3ce8764b195ab3137b5ee96da7b3c1bede5a0c51 (patch) | |
tree | 1c64ed1575c71230f338a60bd6e7b529fefb41fc | |
parent | d7832f2182f3f6673aded56d73b3e53c5931ba92 (diff) |
slot_machine sub_814054C
-rw-r--r-- | asm/slot_machine.s | 227 | ||||
-rw-r--r-- | src/slot_machine.c | 85 |
2 files changed, 80 insertions, 232 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index a69c3ada1..62ff4a784 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,233 +5,6 @@ .text - thumb_func_start sub_814054C -sub_814054C: @ 814054C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - adds r7, r0, 0 - adds r6, r1, 0 - mov r8, r2 - adds r5, r3, 0 - ldr r0, [sp, 0x34] - mov r9, r0 - mov r0, sp - movs r1, 0 - movs r2, 0x9 - bl memset - movs r1, 0x7 - add r0, sp, 0x8 -_08140572: - strb r1, [r0] - subs r0, 0x1 - cmp r0, sp - bge _08140572 - movs r4, 0 - lsls r2, r7, 1 - lsls r0, r7, 2 - mov r1, r8 - lsls r1, 1 - str r1, [sp, 0x10] - mov r3, r8 - lsls r1, r3, 2 - ldr r3, _081405E8 @ =gUnknown_8464926 - mov r12, r3 - adds r0, r7 - lsls r0, 2 - adds r0, r7 - mov r10, r0 - adds r2, r7 - add r2, sp - ldr r3, [sp, 0x10] - add r3, r8 - add r1, r8 - lsls r1, 2 - add r1, r8 - str r1, [sp, 0xC] - add r3, sp -_081405A8: - mov r1, r10 - adds r0, r6, r1 - add r0, r12 - ldrb r0, [r0] - strb r0, [r2] - ldr r1, [sp, 0xC] - adds r0, r5, r1 - add r0, r12 - ldrb r0, [r0] - strb r0, [r3] - adds r6, 0x1 - cmp r6, 0x14 - ble _081405C4 - movs r6, 0 -_081405C4: - adds r5, 0x1 - cmp r5, 0x14 - ble _081405CC - movs r5, 0 -_081405CC: - adds r2, 0x1 - adds r3, 0x1 - adds r4, 0x1 - cmp r4, 0x2 - ble _081405A8 - mov r3, r9 - cmp r3, 0x1 - beq _08140630 - cmp r3, 0x1 - bgt _081405EC - cmp r3, 0 - beq _081405F4 - b _081406A8 - .align 2, 0 -_081405E8: .4byte gUnknown_8464926 -_081405EC: - mov r5, r9 - cmp r5, 0x2 - beq _08140680 - b _081406A8 -_081405F4: - movs r4, 0 -_081405F6: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - movs r0, 0x1 - bl sub_81408F4 - cmp r0, 0 - bne _081406D2 - adds r4, 0x1 - cmp r4, 0x2 - ble _081405F6 - movs r4, 0 - ldr r3, _0814062C @ =gUnknown_8464890 -_08140610: - ldrb r0, [r3] - mov r5, sp - adds r2, r5, r0 - ldrb r0, [r3, 0x1] - adds r1, r5, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081406A4 - adds r3, 0x2 - adds r4, 0x1 - cmp r4, 0xE - ble _08140610 - b _081406D2 - .align 2, 0 -_0814062C: .4byte gUnknown_8464890 -_08140630: - cmp r7, 0 - beq _0814063A - mov r0, r8 - cmp r0, 0 - bne _081406A4 -_0814063A: - cmp r7, 0x1 - beq _08140644 - mov r1, r8 - cmp r1, 0x1 - bne _08140662 -_08140644: - movs r4, 0 - ldr r3, _0814067C @ =gUnknown_8464890 -_08140648: - ldrb r0, [r3] - mov r5, sp - adds r2, r5, r0 - ldrb r0, [r3, 0x1] - adds r1, r5, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _081406D2 - adds r3, 0x6 - adds r4, 0x3 - cmp r4, 0xE - ble _08140648 -_08140662: - movs r4, 0 -_08140664: - mov r1, sp - adds r0, r1, r4 - ldrb r1, [r0] - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 - adds r4, 0x1 - cmp r4, 0x2 - ble _08140664 - b _081406D2 - .align 2, 0 -_0814067C: .4byte gUnknown_8464890 -_08140680: - cmp r7, 0x2 - beq _0814068A - mov r3, r8 - cmp r3, 0x2 - bne _081406A8 -_0814068A: - movs r4, 0 -_0814068C: - mov r5, sp - adds r0, r5, r4 - ldrb r1, [r0] - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 - adds r4, 0x1 - cmp r4, 0x8 - ble _0814068C - b _081406D2 -_081406A4: - movs r0, 0x1 - b _081406D4 -_081406A8: - movs r4, 0 - ldr r5, _081406E4 @ =gUnknown_8464890 -_081406AC: - ldrb r0, [r5] - mov r1, sp - adds r2, r1, r0 - ldrb r0, [r5, 0x1] - adds r1, r0 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - bne _081406CA - adds r1, r0, 0 - mov r0, r9 - bl sub_81408F4 - cmp r0, 0 - bne _081406A4 -_081406CA: - adds r5, 0x2 - adds r4, 0x1 - cmp r4, 0xE - ble _081406AC -_081406D2: - movs r0, 0 -_081406D4: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081406E4: .4byte gUnknown_8464890 - thumb_func_end sub_814054C - thumb_func_start sub_81406E8 sub_81406E8: @ 81406E8 push {r4-r7,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index f1f16d848..41271b425 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -54,9 +54,9 @@ bool32 sub_81401A0(u16); 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); +bool32 sub_814054C(s32, s32, s32, s32, s32); +bool32 sub_81406E8(s32, s32, s32); +bool32 sub_81408F4(s32, s32); void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); @@ -67,6 +67,7 @@ void sub_8141148(u16 a0, u8 a1); bool32 sub_8141180(u8 a0); void sub_8141C30(u8, u8); +extern const u8 gUnknown_8464890[][2]; extern const u8 gUnknown_8464926[][21]; void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) @@ -621,7 +622,7 @@ void sub_81403BC(u16 whichReel) { s16 r2, r4, r7, sp10; s32 i; - u32 r6; + s32 r6; u8 sp4[5]; r7 = sSlotMachineState->field_32[0]; @@ -667,7 +668,7 @@ void sub_81403BC(u16 whichReel) void sub_81404B8(u16 whichReel) { s32 i; - u32 r6; + s32 r6; s32 r9; s32 r4; s32 r2; @@ -701,3 +702,77 @@ void sub_81404B8(u16 whichReel) r2 += 21; sSlotMachineState->field_2C[whichReel] = r2; } + +bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) +{ + s32 i; + s32 r5; + u8 sp0[9] = {}; + + for (i = 0; i < 9; i++) + sp0[i] = 7; + + for (i = 0; i < 3; i++) + { + sp0[3 * a0 + i] = gUnknown_8464926[a0][a1]; + sp0[3 * a2 + i] = gUnknown_8464926[a2][a3]; + a1++; + if (a1 >= 21) + a1 = 0; + a3++; + if (a3 >= 21) + a3 = 0; + } + + switch (a4) + { + case 0: + for (i = 0; i < 3; i++) + { + if (sub_81408F4(1, sp0[i])) + return FALSE; + } + for (i = 0; i < 15; i++) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]]) + return TRUE; + } + return FALSE; + case 1: + if (a0 == 0 || a2 == 0) + { + if (a0 == 1 || a2 == 1) + { + for (i = 0; i < 15; i += 3) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]]) + return FALSE; + } + } + for (i = 0; i < 3; i++) + { + if (sub_81408F4(a4, sp0[i])) + return TRUE; + } + return FALSE; + } + else + return TRUE; + case 2: + if (a0 == 2 || a2 == 2) + { + for (i = 0; i < 9; i++) + { + if (sub_81408F4(a4, sp0[i])) + return TRUE; + } + return FALSE; // wrong level + } + } + for (i = 0; i < 15; i++) + { + if (sp0[gUnknown_8464890[i][0]] == sp0[gUnknown_8464890[i][1]] && sub_81408F4(a4, sp0[gUnknown_8464890[i][0]])) + return TRUE; + } + return FALSE; +} |