diff options
-rw-r--r-- | asm/slot_machine.s | 38 | ||||
-rw-r--r-- | src/field/slot_machine.c | 75 |
2 files changed, 57 insertions, 56 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 6a7775a2e..a6201c22e 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,44 +5,6 @@ .text - thumb_func_start sub_8102578 -sub_8102578: @ 8102578 - push {r4-r6,lr} - movs r5, 0 - ldr r6, _081025B4 @ =gUnknown_083ECD16 -_0810257E: - bl Random - movs r2, 0xFF - ldr r3, _081025B8 @ =gSharedMem - lsls r1, r5, 16 - asrs r4, r1, 16 - lsls r1, r4, 1 - adds r1, r4 - lsls r1, 1 - ldrb r3, [r3, 0x1] - adds r1, r3 - adds r1, r6 - ldrb r1, [r1] - ands r2, r0 - cmp r1, r2 - bgt _081025AA - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _0810257E -_081025AA: - lsls r0, r5, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081025B4: .4byte gUnknown_083ECD16 -_081025B8: .4byte gSharedMem - thumb_func_end sub_8102578 - thumb_func_start sub_81025BC sub_81025BC: @ 81025BC push {r4-r7,lr} diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index b72c749d0..f6d58e592 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -84,8 +84,8 @@ static bool8 sub_8102424(struct Task *task); static bool8 sub_8102460(struct Task *task); static void sub_8102484(void); static void sub_81024F0(void); -bool8 sub_8102540(void); -u8 sub_8102578(void); +static bool8 sub_8102540(void); +static u8 sub_8102578(void); u8 sub_81025BC(void); void sub_81027A0(void); void sub_8102A24(void); @@ -864,7 +864,7 @@ u8 sub_810250C(u8 a0) return 0; } -bool8 sub_8102540(void) +static bool8 sub_8102540(void) { u8 rval = Random(); if (gUnknown_083ECD04[eSlotMachine->unk01][eSlotMachine->bet - 1] > rval) @@ -874,21 +874,60 @@ bool8 sub_8102540(void) return FALSE; } -//extern const u8 gUnknown_083ECD16[][3]; -// -//u8 sub_8102578(void) -//{ -// s16 i; -// -// for (i = 0; i < 3; i++) -// { -// if ((Random() & 0xff) <= (int)gUnknown_083ECD16[i][eSlotMachine->unk01]) -// { -// break; -// } -// } -// return i; -//} +extern const u8 gUnknown_083ECD16[][3]; + +#ifdef NONMATCHING +static u8 sub_8102578(void) +{ + s16 i; + + for (i = 0; i < 3; i++) + { + if ((Random() & 0xff) <= gUnknown_083ECD16[i][eSlotMachine->unk01]) + { + break; + } + } + return i; +} +#else +static __attribute__((naked)) u8 sub_8102578(void) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tmovs r5, 0\n" + "\tldr r6, =gUnknown_083ECD16\n" + "_0810257E:\n" + "\tbl Random\n" + "\tmovs r2, 0xFF\n" + "\tldr r3, =gSharedMem\n" + "\tlsls r1, r5, 16\n" + "\tasrs r4, r1, 16\n" + "\tlsls r1, r4, 1\n" + "\tadds r1, r4\n" + "\tlsls r1, 1\n" + "\tldrb r3, [r3, 0x1]\n" + "\tadds r1, r3\n" + "\tadds r1, r6\n" + "\tldrb r1, [r1]\n" + "\tands r2, r0\n" + "\tcmp r1, r2\n" + "\tbgt _081025AA\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0810257E\n" + "_081025AA:\n" + "\tlsls r0, r5, 24\n" + "\tlsrs r0, 24\n" + "\tpop {r4-r6}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "\t.pool"); +} +#endif asm(".section .text_a"); |