diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-29 19:35:05 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-29 19:35:05 -0500 |
commit | d05e72b6b269defef8d9b1bbce42adaf48f4ed8f (patch) | |
tree | 27bfc8067988772cf90939e751cf52f9b810fdcd | |
parent | 8e79fd9e13e42961cfb1de4c44714960ae3ac668 (diff) |
through sub_8103E7C
-rw-r--r-- | asm/slot_machine.s | 239 | ||||
-rw-r--r-- | include/slot_machine.h | 4 | ||||
-rw-r--r-- | src/field/slot_machine.c | 98 |
3 files changed, 93 insertions, 248 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 53423e9e4..500441c75 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,245 +5,6 @@ .text - thumb_func_start sub_8103D00 -sub_8103D00: @ 8103D00 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08103D20 @ =gUnknown_083EDD08 - lsls r1, r0, 2 - adds r1, r2 - ldr r2, [r1] - ldr r1, _08103D24 @ =gUnknown_083EDD30 - adds r0, r1 - ldrb r1, [r0] - adds r0, r2, 0 - movs r2, 0x2 - bl LoadPalette - pop {r0} - bx r0 - .align 2, 0 -_08103D20: .4byte gUnknown_083EDD08 -_08103D24: .4byte gUnknown_083EDD30 - thumb_func_end sub_8103D00 - - thumb_func_start sub_8103D28 -sub_8103D28: @ 8103D28 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08103D48 @ =gUnknown_083EDD1C - lsls r1, r0, 2 - adds r1, r2 - ldr r2, [r1] - ldr r1, _08103D4C @ =gUnknown_083EDD30 - adds r0, r1 - ldrb r1, [r0] - adds r0, r2, 0 - movs r2, 0x2 - bl LoadPalette - pop {r0} - bx r0 - .align 2, 0 -_08103D48: .4byte gUnknown_083EDD1C -_08103D4C: .4byte gUnknown_083EDD30 - thumb_func_end sub_8103D28 - - thumb_func_start sub_8103D50 -sub_8103D50: @ 8103D50 - push {r4-r7,lr} - lsls r0, 24 - lsrs r1, r0, 24 - movs r4, 0 - ldr r0, _08103D84 @ =gUnknown_083EDD3B - adds r0, r1, r0 - ldrb r0, [r0] - cmp r4, r0 - bcs _08103D7C - ldr r7, _08103D88 @ =gUnknown_083EDD35 - adds r6, r0, 0 - lsls r5, r1, 1 -_08103D68: - adds r0, r4, r5 - adds r0, r7 - ldrb r0, [r0] - bl sub_8103D00 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r6 - bcc _08103D68 -_08103D7C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08103D84: .4byte gUnknown_083EDD3B -_08103D88: .4byte gUnknown_083EDD35 - thumb_func_end sub_8103D50 - - thumb_func_start sub_8103D8C -sub_8103D8C: @ 8103D8C - push {r4-r7,lr} - lsls r0, 24 - lsrs r1, r0, 24 - movs r4, 0 - ldr r0, _08103DC0 @ =gUnknown_083EDD3B - adds r0, r1, r0 - ldrb r0, [r0] - cmp r4, r0 - bcs _08103DB8 - ldr r7, _08103DC4 @ =gUnknown_083EDD35 - adds r6, r0, 0 - lsls r5, r1, 1 -_08103DA4: - adds r0, r4, r5 - adds r0, r7 - ldrb r0, [r0] - bl sub_8103D28 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r6 - bcc _08103DA4 -_08103DB8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08103DC0: .4byte gUnknown_083EDD3B -_08103DC4: .4byte gUnknown_083EDD35 - thumb_func_end sub_8103D8C - - thumb_func_start sub_8103DC8 -sub_8103DC8: @ 8103DC8 - push {r4-r6,lr} - movs r4, 0 - ldr r6, _08103DF8 @ =gSprites - ldr r5, _08103DFC @ =gSharedMem + 0x44 -_08103DD0: - ldr r0, _08103E00 @ =sub_8103EE4 - bl CreateInvisibleSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - strh r4, [r1, 0x2E] - adds r1, r4, r5 - strb r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - bls _08103DD0 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08103DF8: .4byte gSprites -_08103DFC: .4byte gSharedMem + 0x44 -_08103E00: .4byte sub_8103EE4 - thumb_func_end sub_8103DC8 - - thumb_func_start sub_8103E04 -sub_8103E04: @ 8103E04 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08103E30 @ =gSharedMem - adds r1, 0x44 - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08103E34 @ =gSprites - adds r0, r1 - movs r2, 0 - movs r1, 0x1 - strh r1, [r0, 0x30] - movs r1, 0x4 - strh r1, [r0, 0x32] - strh r2, [r0, 0x34] - strh r2, [r0, 0x36] - movs r1, 0x2 - strh r1, [r0, 0x38] - strh r2, [r0, 0x3C] - bx lr - .align 2, 0 -_08103E30: .4byte gSharedMem -_08103E34: .4byte gSprites - thumb_func_end sub_8103E04 - - thumb_func_start sub_8103E38 -sub_8103E38: @ 8103E38 - push {r4,r5,lr} - movs r2, 0 - ldr r4, _08103E60 @ =gSharedMem + 0x44 - ldr r3, _08103E64 @ =gSprites -_08103E40: - adds r0, r2, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r3 - movs r5, 0x30 - ldrsh r0, [r1, r5] - cmp r0, 0 - beq _08103E68 - movs r5, 0x32 - ldrsh r0, [r1, r5] - cmp r0, 0 - beq _08103E68 - movs r0, 0 - b _08103E74 - .align 2, 0 -_08103E60: .4byte gSharedMem + 0x44 -_08103E64: .4byte gSprites -_08103E68: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x4 - bls _08103E40 - movs r0, 0x1 -_08103E74: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8103E38 - - thumb_func_start sub_8103E7C -sub_8103E7C: @ 8103E7C - push {r4,r5,lr} - movs r4, 0 - ldr r5, _08103E94 @ =gSharedMem + 0x44 -_08103E82: - adds r0, r4, r5 - ldrb r0, [r0] - bl sub_8103EAC - lsls r0, 24 - cmp r0, 0 - bne _08103E98 - movs r0, 0 - b _08103EA4 - .align 2, 0 -_08103E94: .4byte gSharedMem + 0x44 -_08103E98: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x4 - bls _08103E82 - movs r0, 0x1 -_08103EA4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8103E7C - thumb_func_start sub_8103EAC sub_8103EAC: @ 8103EAC push {lr} diff --git a/include/slot_machine.h b/include/slot_machine.h index 203f3bbfc..b04ee6377 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -28,7 +28,9 @@ struct SlotMachineEwramStruct { /*0x34*/ s16 unk34[3]; /*0x3A*/ u8 unk3A[3]; /*0x3D*/ u8 unk3D; - /*0x3E*/ u8 filler3E[26]; + /*0x3E*/ u8 filler3E[6]; + /*0x44*/ u8 unk44[5]; + /*0x49*/ u8 filler49[15]; /*0x58*/ u16 win0h; /*0x5a*/ u16 win0v; /*0x5c*/ u16 winIn; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 922ab0c4d..82ac4e9e7 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -103,13 +103,15 @@ static void sub_8102E1C(u8 a0); static bool8 sub_8102E40(u8 a0); static void sub_8102E68(u8 taskId); static void sub_8103C14(u8 a0); -void sub_8103C48(u8 taskId); -void sub_8103D50(u8 a0); -void sub_8103D8C(u8 a0); -void sub_8103DC8(void); -void sub_8103E04(u8 a0); -bool8 sub_8103E38(void); -bool8 sub_8103E7C(void); +static void sub_8103C48(u8 taskId); +static void sub_8103D50(u8 a0); +static void sub_8103D8C(u8 a0); +static void sub_8103DC8(void); +static void sub_8103E04(u8 a0); +static bool8 sub_8103E38(void); +static bool8 sub_8103E7C(void); +bool8 sub_8103EAC(u8 a0); +void sub_8103EE4(struct Sprite *sprite); void sub_8103F70(void); bool8 sub_8103FA0(void); void sub_8104048(void); @@ -2083,7 +2085,7 @@ static void sub_8103C14(u8 a0) extern void (*const gUnknown_083ECBA0[])(struct Task *task, u8 taskId); -void sub_8103C48(u8 taskId) +static void sub_8103C48(u8 taskId) { gUnknown_083ECBA0[gTasks[taskId].data[0]](gTasks + taskId, taskId); } @@ -2108,6 +2110,86 @@ void sub_8103CC8(struct Task *task, u8 taskId) DestroyTask(taskId); } +extern const u16 *const gUnknown_083EDD08[]; +extern const u16 *const gUnknown_083EDD1C[]; +extern const u8 gUnknown_083EDD30[]; + +static void sub_8103D00(u8 a0) +{ + LoadPalette(gUnknown_083EDD08[a0], gUnknown_083EDD30[a0], 2); +} + +static void sub_8103D28(u8 a0) +{ + LoadPalette(gUnknown_083EDD1C[a0], gUnknown_083EDD30[a0], 2); +} + +extern const u8 gUnknown_083EDD3B[]; +extern const u8 gUnknown_083EDD35[][2]; + +static void sub_8103D50(u8 a0) +{ + u8 i; + for (i = 0; i < gUnknown_083EDD3B[a0]; i++) + { + sub_8103D00(gUnknown_083EDD35[a0][i]); + } +} + +static void sub_8103D8C(u8 a0) +{ + u8 i; + for (i = 0; i < gUnknown_083EDD3B[a0]; i++) + { + sub_8103D28(gUnknown_083EDD35[a0][i]); + } +} + +static void sub_8103DC8(void) +{ + u8 i; + for (i = 0; i < 5; i++) + { + u8 spriteId = CreateInvisibleSprite(sub_8103EE4); + gSprites[spriteId].data[0] = i; + eSlotMachine->unk44[i] = spriteId; + } +} + +static void sub_8103E04(u8 a0) +{ + struct Sprite *sprite = gSprites + eSlotMachine->unk44[a0]; + sprite->data[1] = 1; + sprite->data[2] = 4; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 2; + sprite->data[7] = 0; +} + +static bool8 sub_8103E38(void) +{ + u8 i; + for (i = 0; i < 5; i++) + { + struct Sprite *sprite = gSprites + eSlotMachine->unk44[i]; + if (sprite->data[1] && sprite->data[2]) + return FALSE; + } + return TRUE; +} + +static bool8 sub_8103E7C(void) +{ + u8 i; + for (i = 0; i < 5; i++) + { + if (!sub_8103EAC(eSlotMachine->unk44[i])) + return FALSE; + } + return TRUE; +} + asm(".section .text_a"); static void LoadSlotMachineWheelOverlay(void); |