diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-21 18:34:43 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-21 18:34:43 -0500 |
commit | 6369dca42b4a0cab379b5ecfdc5b8235e64f79cc (patch) | |
tree | e35a9060e947447dbb8f02179d0c30bef02bb065 | |
parent | 2fe7a0e1542fa24731d233ed3b9e97ce4efa9c31 (diff) |
sub_81020C8
-rw-r--r-- | asm/slot_machine.s | 136 | ||||
-rw-r--r-- | include/slot_machine.h | 2 | ||||
-rw-r--r-- | src/field/slot_machine.c | 69 |
3 files changed, 70 insertions, 137 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 75202fc81..f4d0202a4 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,142 +5,6 @@ .text - thumb_func_start sub_81020C8 -sub_81020C8: @ 81020C8 - push {r4,lr} - ldr r4, _08102128 @ =gSharedMem - ldrb r1, [r4, 0x4] - movs r0, 0xC0 - ands r0, r1 - strb r0, [r4, 0x4] - bl sub_81027A0 - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _081020E8 - subs r0, 0x1 - strb r0, [r4, 0xA] - ldrb r0, [r4, 0xB] - adds r0, 0x1 - strb r0, [r4, 0xB] -_081020E8: - ldrh r0, [r4, 0x8] - cmp r0, 0 - beq _081021B4 - movs r0, 0xF - strb r0, [r4] - bl sub_8102A24 - bl sub_8103F70 - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0xE] - subs r0, r1 - strh r0, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - bge _0810210C - movs r0, 0 - strh r0, [r4, 0x10] -_0810210C: - ldrh r1, [r4, 0x8] - movs r0, 0xC0 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08102130 - ldr r0, _0810212C @ =0x00000185 - bl PlayFanfare - movs r0, 0x6 - bl sub_8104CAC - b _0810215A - .align 2, 0 -_08102128: .4byte gSharedMem -_0810212C: .4byte 0x00000185 -_08102130: - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0810214C - ldr r0, _08102148 @ =0x00000185 - bl PlayFanfare - movs r0, 0x5 - bl sub_8104CAC - b _0810215A - .align 2, 0 -_08102148: .4byte 0x00000185 -_0810214C: - movs r0, 0xC3 - lsls r0, 1 - bl PlayFanfare - movs r0, 0x2 - bl sub_8104CAC -_0810215A: - ldr r1, _081021B0 @ =gSharedMem - ldrh r3, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 1 - ands r0, r3 - adds r2, r1, 0 - cmp r0, 0 - beq _08102192 - ldrb r1, [r2, 0x4] - movs r0, 0x3F - ands r0, r1 - movs r1, 0 - strb r0, [r2, 0x4] - movs r0, 0xC0 - lsls r0, 1 - ands r0, r3 - cmp r0, 0 - beq _08102192 - strb r1, [r2, 0xA] - strb r1, [r2, 0xB] - strb r1, [r2, 0x3] - movs r0, 0x80 - lsls r0, 1 - ands r0, r3 - cmp r0, 0 - beq _08102192 - movs r0, 0x1 - strb r0, [r2, 0x3] -_08102192: - ldrh r1, [r2, 0x8] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081021D2 - ldrb r0, [r2, 0x2] - cmp r0, 0xF - bhi _081021D2 - adds r0, 0x1 - strb r0, [r2, 0x2] - ldrb r0, [r2, 0x2] - bl sub_8104064 - b _081021D2 - .align 2, 0 -_081021B0: .4byte gSharedMem -_081021B4: - movs r0, 0x3 - bl sub_8104CAC - movs r0, 0x14 - strb r0, [r4] - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0x10] - adds r0, r1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - ldr r1, _081021DC @ =0x0000270f - cmp r0, r1 - ble _081021D2 - strh r1, [r4, 0x10] -_081021D2: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081021DC: .4byte 0x0000270f - thumb_func_end sub_81020C8 - thumb_func_start sub_81021E0 sub_81021E0: @ 81021E0 push {lr} diff --git a/include/slot_machine.h b/include/slot_machine.h index 057713a1b..880fe6f1f 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -13,7 +13,7 @@ struct SlotMachineEwramStruct { /*0x0B*/ u8 unk0B; /*0x0C*/ s16 coins; /*0x0E*/ u16 unk0E; - /*0x10*/ u16 unk10; + /*0x10*/ s16 unk10; /*0x12*/ s16 bet; /*0x14*/ u8 filler14[4]; /*0x18*/ s16 unk18; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 94dd5b08f..65d7e21ba 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -54,6 +54,8 @@ static void sub_8101D24(u8 taskId); void sub_8102484(void); void sub_81024F0(void); +void sub_81027A0(void); +void sub_8102A24(void); void sub_8102DA8(void); void sub_8102DEC(u8 a0); void sub_8102E1C(u8 a0); @@ -61,7 +63,9 @@ bool8 sub_8102E40(u8 a0); void sub_8103C14(u8 a0); void sub_8103D50(u8 a0); void sub_8103DC8(void); +void sub_8103F70(void); void sub_8104048(void); +void sub_8104064(u8 a0); void sub_810423C(u8 a0); void sub_810430C(void); bool8 sub_810432C(void); @@ -507,6 +511,71 @@ bool8 sub_8102090(struct Task *task) return FALSE; } +bool8 sub_81020C8(struct Task *task) +{ + eSlotMachine->unk04 &= 0xc0; + sub_81027A0(); + if (eSlotMachine->unk0A) + { + eSlotMachine->unk0A--; + eSlotMachine->unk0B++; + } + if (eSlotMachine->unk08) + { + eSlotMachine->state = 15; + sub_8102A24(); + sub_8103F70(); + if ((eSlotMachine->unk10 -= eSlotMachine->unk0E) < 0) + { + eSlotMachine->unk10 = 0; + } + if (eSlotMachine->unk08 & 0x180) + { + PlayFanfare(BGM_ME_B_BIG); + sub_8104CAC(6); + } + else if (eSlotMachine->unk08 & 0x40) + { + PlayFanfare(BGM_ME_B_BIG); + sub_8104CAC(5); + } + else + { + PlayFanfare(BGM_ME_B_SMALL); + sub_8104CAC(2); + } + if (eSlotMachine->unk08 & 0x1c0) + { + eSlotMachine->unk04 &= 0x3f; + if (eSlotMachine->unk08 & 0x180) + { + eSlotMachine->unk0A = 0; + eSlotMachine->unk0B = 0; + eSlotMachine->unk03 = 0; + if (eSlotMachine->unk08 & 0x100) + { + eSlotMachine->unk03 = 1; + } + } + } + if (eSlotMachine->unk08 & 0x20 && eSlotMachine->unk02 < 16) + { + eSlotMachine->unk02++; + sub_8104064(eSlotMachine->unk02); + } + } + else + { + sub_8104CAC(3); + eSlotMachine->state = 20; + if ((eSlotMachine->unk10 += eSlotMachine->bet) > 9999) + { + eSlotMachine->unk10 = 9999; + } + } + return FALSE; +} + asm(".section .text_a"); static void LoadSlotMachineWheelOverlay(void); |