diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-26 21:25:47 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-26 21:25:47 -0500 |
commit | da62907ec54f400646416f38ef02bd7f03d5dbc4 (patch) | |
tree | e4787e36b1062bcfe16d7eecb2e1bf946922778f | |
parent | 3a51ad2c81b0c479c2621e81ae13d28f3f90fc48 (diff) |
through sub_8103008
-rw-r--r-- | asm/slot_machine.s | 214 | ||||
-rw-r--r-- | data/slot_machine.s | 2 | ||||
-rw-r--r-- | include/slot_machine.h | 3 | ||||
-rw-r--r-- | src/field/slot_machine.c | 63 |
4 files changed, 66 insertions, 216 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index da1413838..945f894f9 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,220 +5,6 @@ .text - thumb_func_start sub_8102EC0 -sub_8102EC0: @ 8102EC0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - movs r2, 0 - strh r0, [r4, 0x8] - ldr r3, _08102F40 @ =gSharedMem - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r0, 1 - adds r1, r3, 0 - adds r1, 0x34 - adds r0, r1 - strh r2, [r0] - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r0, 1 - adds r1, r3, 0 - adds r1, 0x2E - adds r0, r1 - strh r2, [r0] - ldrb r0, [r3, 0xA] - cmp r0, 0 - bne _08102F28 - ldrb r0, [r3, 0x4] - cmp r0, 0 - beq _08102F12 - ldrb r0, [r3, 0x6] - cmp r0, 0 - beq _08102F12 - ldr r1, _08102F44 @ =gUnknown_083ECB40 - movs r2, 0x26 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - cmp r0, 0 - bne _08102F28 -_08102F12: - ldr r1, _08102F40 @ =gSharedMem - movs r0, 0 - strb r0, [r1, 0x6] - ldr r1, _08102F48 @ =gUnknown_083ECB4C - movs r2, 0x26 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 -_08102F28: - ldr r0, _08102F40 @ =gSharedMem - movs r2, 0x26 - ldrsh r1, [r4, r2] - lsls r1, 1 - adds r0, 0x2E - adds r1, r0 - ldrh r0, [r1] - strh r0, [r4, 0xA] - movs r0, 0x1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08102F40: .4byte gSharedMem -_08102F44: .4byte gUnknown_083ECB40 -_08102F48: .4byte gUnknown_083ECB4C - thumb_func_end sub_8102EC0 - - thumb_func_start sub_8102F4C -sub_8102F4C: @ 8102F4C - push {r4-r7,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r1, _08102F8C @ =gUnknown_083ECB58 - mov r0, sp - movs r2, 0xA - bl memcpy - ldr r5, _08102F90 @ =gSharedMem - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r6, r0, 1 - adds r7, r5, 0 - adds r7, 0x1C - adds r0, r6, r7 - movs r2, 0 - ldrsh r0, [r0, r2] - movs r1, 0x18 - bl __modsi3 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r0, 0 - beq _08102F94 - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r6, 0x1A - ldrsh r1, [r5, r6] - bl sub_8102CCC - b _08102FC8 - .align 2, 0 -_08102F8C: .4byte gUnknown_083ECB58 -_08102F90: .4byte gSharedMem -_08102F94: - adds r0, r5, 0 - adds r0, 0x2E - adds r1, r6, r0 - ldrh r3, [r1] - movs r6, 0 - ldrsh r0, [r1, r6] - cmp r0, 0 - beq _08102FCC - subs r0, r3, 0x1 - strh r0, [r1] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x1A - ldrsh r1, [r5, r2] - bl sub_8102C84 - movs r6, 0x26 - ldrsh r0, [r4, r6] - lsls r0, 1 - adds r0, r7 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x18 - bl __modsi3 -_08102FC8: - lsls r0, 16 - lsrs r2, r0, 16 -_08102FCC: - cmp r2, 0 - bne _08102FF8 - ldr r1, _08103004 @ =gSharedMem - movs r2, 0x26 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r1, 0x2E - adds r0, r1 - movs r6, 0 - ldrsh r1, [r0, r6] - cmp r1, 0 - bne _08102FF8 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r4, 0xA] - strh r1, [r4, 0xC] -_08102FF8: - movs r0, 0 - add sp, 0xC - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08103004: .4byte gSharedMem - thumb_func_end sub_8102F4C - - thumb_func_start sub_8103008 -sub_8103008: @ 8103008 - push {r4,lr} - adds r2, r0, 0 - ldr r1, _08103058 @ =gSharedMem - movs r3, 0x26 - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r4, r1, 0 - adds r4, 0x22 - adds r0, r4 - ldrh r1, [r2, 0xA] - strh r1, [r0] - ldrh r0, [r2, 0xA] - negs r3, r0 - strh r3, [r2, 0xA] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08103038 - lsls r0, r3, 16 - asrs r0, 17 - strh r0, [r2, 0xA] -_08103038: - movs r0, 0xA - ldrsh r3, [r2, r0] - cmp r3, 0 - bne _0810304E - strh r3, [r2, 0x8] - strh r3, [r2, 0x24] - movs r1, 0x26 - ldrsh r0, [r2, r1] - lsls r0, 1 - adds r0, r4 - strh r3, [r0] -_0810304E: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08103058: .4byte gSharedMem - thumb_func_end sub_8103008 - thumb_func_start sub_810305C sub_810305C: @ 810305C push {r4,r5,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 827d27747..3d7c6253c 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -30,7 +30,7 @@ gUnknown_083ECB4C:: @ 83ECB4C .4byte sub_810380C .align 1 -gUnknown_083ECB58:: @ 83ECB58 +gUnknown_083ECB58:: @ 83ECB58 (sub_8102F4C) .2byte 2, 4, 4, 4, 8 .align 2 diff --git a/include/slot_machine.h b/include/slot_machine.h index c5e14f719..7fc47bb12 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -24,7 +24,8 @@ struct SlotMachineEwramStruct { /*0x1C*/ s16 unk1C[3]; /*0x22*/ u16 unk22[3]; /*0x28*/ s16 unk28[3]; - /*0x2E*/ u8 filler2E[12]; + /*0x2E*/ s16 unk2E[3]; + /*0x34*/ u16 unk34[3]; /*0x3A*/ u8 unk3A[3]; /*0x3D*/ u8 unk3D; /*0x3E*/ u8 filler3E[26]; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 55bbaef3a..96fa2e18b 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -1339,6 +1339,69 @@ bool8 sub_8102EA4(struct Task *task) return FALSE; } +extern bool8 (*const gUnknown_083ECB40[])(void); +extern void (*const gUnknown_083ECB4C[])(void); + +bool8 sub_8102EC0(struct Task *task) +{ + task->data[0]++; + eSlotMachine->unk34[task->data[15]] = 0; + eSlotMachine->unk2E[task->data[15]] = 0; + if (eSlotMachine->unk0A == 0 && (eSlotMachine->unk04 == 0 || eSlotMachine->unk06 == 0 || !gUnknown_083ECB40[task->data[15]]())) + { + eSlotMachine->unk06 = 0; + gUnknown_083ECB4C[task->data[15]](); + } + task->data[1] = eSlotMachine->unk2E[task->data[15]]; + return TRUE; +} + +extern const u16 gUnknown_083ECB58[5]; // don't move this + +bool8 sub_8102F4C(struct Task *task) +{ + s16 r2; + u16 sp[5]; + memcpy(sp, gUnknown_083ECB58, sizeof gUnknown_083ECB58); + // u16 sp[] = {2, 4, 4, 4, 8}; + r2 = eSlotMachine->unk1C[task->data[15]] % 24; + if (r2 != 0) + { + r2 = sub_8102CCC(task->data[15], eSlotMachine->unk1A); + } + else if (eSlotMachine->unk2E[task->data[15]]) + { + eSlotMachine->unk2E[task->data[15]]--; + sub_8102C84(task->data[15], eSlotMachine->unk1A); + r2 = eSlotMachine->unk1C[task->data[15]] % 24; + } + if (r2 == 0 && eSlotMachine->unk2E[task->data[15]] == 0) + { + task->data[0]++; + task->data[1] = sp[task->data[1]]; + task->data[2] = 0; + } + return FALSE; +} + +bool8 sub_8103008(struct Task *task) +{ + eSlotMachine->unk22[task->data[15]] = task->data[1]; + task->data[1] = -task->data[1]; + task->data[2]++; + if ((task->data[2] & 0x3) == 0) + { + task->data[1] >>= 1; + } + if (task->data[1] == 0) + { + task->data[0] = 0; + task->data[14] = 0; + eSlotMachine->unk22[task->data[15]] = 0; + } + return FALSE; +} + asm(".section .text_a"); static void LoadSlotMachineWheelOverlay(void); |