diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-21 22:35:46 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-21 22:35:46 -0500 |
commit | 388a4cc729c84e334819db165eb5aab99233ee9c (patch) | |
tree | 76f850f3ed2756841b3e86ffddd011ad25da04d5 | |
parent | 683862fbd5fdcd9b1c60f926553db0cbe2847422 (diff) |
sub_8102540
-rw-r--r-- | asm/slot_machine.s | 136 | ||||
-rw-r--r-- | include/slot_machine.h | 4 | ||||
-rw-r--r-- | src/field/slot_machine.c | 98 |
3 files changed, 92 insertions, 146 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 6552f3a7c..6a7775a2e 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,142 +5,6 @@ .text - thumb_func_start sub_8102484 -sub_8102484: @ 8102484 - push {r4,lr} - ldr r4, _081024E4 @ =gSharedMem - ldrb r0, [r4, 0xA] - cmp r0, 0 - bne _081024DC - ldrb r1, [r4, 0x4] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - bne _081024DC - bl sub_8102540 - lsls r0, 24 - cmp r0, 0 - beq _081024C0 - bl sub_8102578 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - beq _081024C0 - ldr r1, _081024E8 @ =gUnknown_083ECE42 - lsls r0, r3, 1 - adds r0, r1 - ldrb r1, [r0] - ldrb r0, [r4, 0x4] - orrs r0, r1 - strb r0, [r4, 0x4] - cmp r3, 0x1 - bne _081024DC -_081024C0: - bl sub_81025BC - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - beq _081024DC - ldr r2, _081024E4 @ =gSharedMem - ldr r1, _081024EC @ =gUnknown_083ECE48 - lsls r0, r3, 1 - adds r0, r1 - ldrb r1, [r0] - ldrb r0, [r2, 0x4] - orrs r0, r1 - strb r0, [r2, 0x4] -_081024DC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081024E4: .4byte gSharedMem -_081024E8: .4byte gUnknown_083ECE42 -_081024EC: .4byte gUnknown_083ECE48 - thumb_func_end sub_8102484 - - thumb_func_start sub_81024F0 -sub_81024F0: @ 81024F0 - push {lr} - ldr r1, _08102508 @ =gSharedMem - movs r0, 0 - strb r0, [r1, 0x6] - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08102502 - movs r0, 0x1 - strb r0, [r1, 0x6] -_08102502: - pop {r0} - bx r0 - .align 2, 0 -_08102508: .4byte gSharedMem - thumb_func_end sub_81024F0 - - thumb_func_start sub_810250C -sub_810250C: @ 810250C - push {r4,lr} - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0 - movs r3, 0x1 - ldr r4, _08102528 @ =gUnknown_083ECE3A -_08102518: - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _0810252C - adds r0, r2, r4 - ldrb r0, [r0] - b _0810253A - .align 2, 0 -_08102528: .4byte gUnknown_083ECE3A -_0810252C: - lsrs r1, 1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _08102518 - movs r0, 0 -_0810253A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_810250C - - thumb_func_start sub_8102540 -sub_8102540: @ 8102540 - push {r4,lr} - bl Random - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08102568 @ =gUnknown_083ECD04 - ldr r1, _0810256C @ =gSharedMem - movs r3, 0x12 - ldrsh r2, [r1, r3] - ldrb r3, [r1, 0x1] - lsls r1, r3, 1 - adds r1, r3 - subs r1, 0x1 - adds r2, r1 - adds r2, r4 - ldrb r1, [r2] - cmp r1, r0 - bhi _08102570 - movs r0, 0 - b _08102572 - .align 2, 0 -_08102568: .4byte gUnknown_083ECD04 -_0810256C: .4byte gSharedMem -_08102570: - movs r0, 0x1 -_08102572: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8102540 - thumb_func_start sub_8102578 sub_8102578: @ 8102578 push {r4-r6,lr} diff --git a/include/slot_machine.h b/include/slot_machine.h index 4dde64aa7..0e7efaf29 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -7,7 +7,9 @@ struct SlotMachineEwramStruct { /*0x02*/ u8 unk02; /*0x03*/ u8 unk03; /*0x04*/ u8 unk04; - /*0x05*/ u8 filler05[3]; + /*0x05*/ u8 unk05; + /*0x06*/ u8 unk06; + /*0x07*/ u8 unk07; /*0x08*/ u16 unk08; /*0x0A*/ u8 unk0A; /*0x0B*/ u8 unk0B; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 2bf8e9c97..b72c749d0 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -82,9 +82,11 @@ static bool8 sub_81023E0(struct Task *task); static bool8 sub_81023FC(struct Task *task); static bool8 sub_8102424(struct Task *task); static bool8 sub_8102460(struct Task *task); - -void sub_8102484(void); -void sub_81024F0(void); +static void sub_8102484(void); +static void sub_81024F0(void); +bool8 sub_8102540(void); +u8 sub_8102578(void); +u8 sub_81025BC(void); void sub_81027A0(void); void sub_8102A24(void); bool8 sub_8102A44(void); @@ -113,7 +115,7 @@ void sub_8104EA8(void); void sub_8104F8C(void); void sub_81050C4(void); void sub_81063C0(void); -void sub_8106448(void); +static void sub_8106448(void); void sub_81064B8(void); u16 dp15_jump_random_unknown(void); @@ -149,6 +151,11 @@ static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = { sub_8102460 }; +extern const u8 gUnknown_083ECD04[][3]; +extern const u8 gUnknown_083ECE3A[]; +extern const u16 gUnknown_083ECE42[]; +extern const u16 gUnknown_083ECE48[]; + void PlaySlotMachine(u8 arg0, void *ptr) { sub_81019B0(arg0, ptr); @@ -807,6 +814,82 @@ static bool8 sub_8102460(struct Task *task) return FALSE; } +static void sub_8102484(void) +{ + u8 r3; + + if (eSlotMachine->unk0A == 0 && !(eSlotMachine->unk04 & 0xc0)) + { + if (sub_8102540()) + { + r3 = sub_8102578(); + if (r3 != 3) + { + eSlotMachine->unk04 |= gUnknown_083ECE42[r3]; + if (r3 != 1) + { + return; + } + } + } + r3 = sub_81025BC(); + if (r3 != 5) + { + eSlotMachine->unk04 |= gUnknown_083ECE48[r3]; + } + } +} + +static void sub_81024F0(void) +{ + eSlotMachine->unk06 = 0; + if (eSlotMachine->unk04) + { + eSlotMachine->unk06 = 1; + } +} + +u8 sub_810250C(u8 a0) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (a0 & 1) + { + return gUnknown_083ECE3A[i]; + } + a0 >>= 1; + } + return 0; +} + +bool8 sub_8102540(void) +{ + u8 rval = Random(); + if (gUnknown_083ECD04[eSlotMachine->unk01][eSlotMachine->bet - 1] > rval) + { + return TRUE; + } + 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; +//} + asm(".section .text_a"); static void LoadSlotMachineWheelOverlay(void); @@ -820,8 +903,7 @@ void sub_8104CAC(u8 arg0) { task = &gTasks[eSlotMachine->unk3D]; task->data[1] = arg0; - i = 0; - while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) + for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++) { u8 spriteId; spriteId = sub_8105BB4( @@ -837,14 +919,12 @@ void sub_8104CAC(u8 arg0) { gSprites[spriteId].invisible = TRUE; } #endif - - i += 1; } } asm(".section .text_b"); -void sub_8106448(void) { +static void sub_8106448(void) { u32 offsetRead, offsetWrite; u32 size; |