diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-26 11:34:02 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-26 11:34:02 -0400 |
commit | c37b93e8a6973e0f2cecbbc3eef628a1709b298a (patch) | |
tree | 4dfc07e838442abd0617fab6adc375937815935d | |
parent | 36fc72f25e178d53342acff66870e518ed7a144a (diff) |
slot_machine through sub_8141764
-rw-r--r-- | asm/slot_machine.s | 498 | ||||
-rw-r--r-- | src/slot_machine.c | 245 |
2 files changed, 244 insertions, 499 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 3240a8045..5dbf01acc 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,504 +5,6 @@ .text - thumb_func_start sub_8141460 -sub_8141460: @ 8141460 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141472 - cmp r0, 0x1 - beq _0814148A - b _081414A0 -_08141472: - movs r1, 0x1 - negs r1, r1 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081414A0 -_0814148A: - ldr r0, _0814149C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081414A0 - movs r0, 0 - b _081414A2 - .align 2, 0 -_0814149C: .4byte gPaletteFade -_081414A0: - movs r0, 0x1 -_081414A2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141460 - - thumb_func_start sub_81414AC -sub_81414AC: @ 81414AC - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081414BC - cmp r0, 0x1 - beq _081414D4 - b _081414E2 -_081414BC: - movs r0, 0x2 - bl GetBgTilemapBuffer - bl sub_8141834 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081414E2 -_081414D4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081414E2 - movs r0, 0 - b _081414E4 -_081414E2: - movs r0, 0x1 -_081414E4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81414AC - - thumb_func_start sub_81414EC -sub_81414EC: @ 81414EC - push {lr} - movs r0, 0x1 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_81414EC - - thumb_func_start sub_81414FC -sub_81414FC: @ 81414FC - push {lr} - movs r0, 0x2 - bl sub_8141020 - ldr r0, _08141514 @ =sub_814191C - movs r1, 0x3 - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08141514: .4byte sub_814191C - thumb_func_end sub_81414FC - - thumb_func_start sub_8141518 -sub_8141518: @ 8141518 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141528 - cmp r0, 0x1 - beq _08141534 - b _08141550 -_08141528: - bl sub_8141AB0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141550 -_08141534: - ldr r0, _0814154C @ =sub_814191C - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08141550 - movs r0, 0 - bl sub_8141020 - movs r0, 0 - b _08141552 - .align 2, 0 -_0814154C: .4byte sub_814191C -_08141550: - movs r0, 0x1 -_08141552: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141518 - - thumb_func_start sub_8141558 -sub_8141558: @ 8141558 - push {lr} - movs r0, 0x3 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141558 - - thumb_func_start sub_8141568 -sub_8141568: @ 8141568 - push {lr} - movs r0, 0 - bl sub_8141020 - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141568 - - thumb_func_start sub_8141578 -sub_8141578: @ 8141578 - push {lr} - bl sub_8140F2C - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8141578 - - thumb_func_start sub_8141584 -sub_8141584: @ 8141584 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141594 - cmp r0, 0x1 - beq _081415B0 - b _081415BE -_08141594: - ldr r0, _081415AC @ =gUnknown_841B747 - bl sub_81417E4 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081415BE - .align 2, 0 -_081415AC: .4byte gUnknown_841B747 -_081415B0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081415BE - movs r0, 0 - b _081415C0 -_081415BE: - movs r0, 0x1 -_081415C0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141584 - - thumb_func_start sub_81415C8 -sub_81415C8: @ 81415C8 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081415D8 - cmp r0, 0x1 - beq _081415F8 - b _08141606 -_081415D8: - ldr r0, _081415F4 @ =gUnknown_841B76B - bl sub_81417E4 - movs r0, 0 - bl sub_8141AD8 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141606 - .align 2, 0 -_081415F4: .4byte gUnknown_841B76B -_081415F8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141606 - movs r0, 0 - b _08141608 -_08141606: - movs r0, 0x1 -_08141608: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81415C8 - - thumb_func_start sub_8141610 -sub_8141610: @ 8141610 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08141620 - cmp r0, 0x1 - beq _08141638 - b _08141646 -_08141620: - bl sub_8141828 - bl sub_8141B18 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141646 -_08141638: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141646 - movs r0, 0 - b _08141648 -_08141646: - movs r0, 0x1 -_08141648: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141610 - - thumb_func_start sub_8141650 -sub_8141650: @ 8141650 - push {r4,lr} - adds r4, r0, 0 - ldrb r2, [r4] - cmp r2, 0 - beq _08141660 - cmp r2, 0x1 - beq _08141678 - b _08141686 -_08141660: - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - bl sub_8141BA0 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08141686 -_08141678: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08141686 - movs r0, 0 - b _08141688 -_08141686: - movs r0, 0x1 -_08141688: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141650 - - thumb_func_start sub_8141690 -sub_8141690: @ 8141690 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _081416A0 - cmp r0, 0x1 - beq _081416B2 - b _081416C0 -_081416A0: - bl sub_8141BE4 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081416C0 -_081416B2: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _081416C0 - movs r0, 0 - b _081416C2 -_081416C0: - movs r0, 0x1 -_081416C2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8141690 - - thumb_func_start sub_81416C8 -sub_81416C8: @ 81416C8 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldrb r4, [r6] - cmp r4, 0x1 - beq _08141724 - cmp r4, 0x1 - bgt _081416DE - cmp r4, 0 - beq _081416E4 - b _0814175A -_081416DE: - cmp r4, 0x2 - beq _08141756 - b _0814175A -_081416E4: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3D - bl SetGpuReg - movs r0, 0x40 - movs r1, 0 - bl SetGpuReg - movs r0, 0x42 - movs r1, 0xA0 - bl SetGpuReg - movs r0, 0x1 - bl ShowBg - movs r0, 0x6 - bl PlaySE - str r4, [r5, 0x24] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _0814175A -_08141724: - ldr r0, [r5, 0x24] - adds r0, 0x10 - str r0, [r5, 0x24] - cmp r0, 0xFF - ble _0814173A - movs r0, 0x80 - lsls r0, 1 - str r0, [r5, 0x24] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0814173A: - ldr r0, [r5, 0x24] - movs r1, 0x80 - lsls r1, 1 - subs r1, r0 - lsls r1, 8 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r5, 0x24] - movs r0, 0x40 - bl SetGpuReg - b _0814175A -_08141756: - movs r0, 0 - b _0814175C -_0814175A: - movs r0, 0x1 -_0814175C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81416C8 - - thumb_func_start sub_8141764 -sub_8141764: @ 8141764 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08141790 - cmp r0, 0x1 - bgt _0814177A - cmp r0, 0 - beq _08141784 - b _081417DC -_0814177A: - cmp r0, 0x2 - beq _081417C0 - cmp r0, 0x3 - beq _081417D8 - b _081417DC -_08141784: - movs r0, 0x6 - bl PlaySE - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08141790: - ldr r0, [r5, 0x24] - subs r0, 0x10 - str r0, [r5, 0x24] - cmp r0, 0 - bgt _081417A4 - movs r0, 0 - str r0, [r5, 0x24] - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_081417A4: - ldr r0, [r5, 0x24] - movs r1, 0x80 - lsls r1, 1 - subs r1, r0 - lsls r1, 8 - movs r0, 0x1 - movs r2, 0 - bl ChangeBgX - ldrh r1, [r5, 0x24] - movs r0, 0x40 - bl SetGpuReg - b _081417DC -_081417C0: - movs r0, 0x1 - bl HideBg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _081417DC -_081417D8: - movs r0, 0 - b _081417DE -_081417DC: - movs r0, 0x1 -_081417DE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8141764 - thumb_func_start sub_81417E4 sub_81417E4: @ 81417E4 push {r4,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index bf0cb8020..93714311c 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -18,6 +18,8 @@ #include "random.h" #include "constants/songs.h" +extern const u8 gUnknown_841B747[]; +extern const u8 gUnknown_841B76B[]; extern const u8 gUnknown_841B779[]; struct SlotMachineState @@ -61,7 +63,9 @@ struct SlotMachineSetupTaskDataSub_0000 struct SlotMachineSetupTaskData { struct SlotMachineSetupTaskDataSub_0000 field_0000[8]; - u8 filler_0020[8]; + u8 field_0020; + // align 2 + s32 field_0024; u32 field_0028; u8 filler_002C[0x830]; u8 field_085C[0x800]; @@ -122,7 +126,16 @@ bool8 sub_8141650(u8 *, struct SlotMachineSetupTaskData *); bool8 sub_8141690(u8 *, struct SlotMachineSetupTaskData *); bool8 sub_81416C8(u8 *, struct SlotMachineSetupTaskData *); bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *); +void sub_81417E4(const u8 * str); +void sub_8141828(void); +void sub_8141834(u16 * bgTilemapBuffer); +void sub_814191C(u8 taskId); +void sub_8141AB0(void); +void sub_8141AD8(u8 a0); +void sub_8141B18(void); void sub_8141B34(void); +void sub_8141BA0(u8 a0); +void sub_8141BE4(void); void sub_8141C30(u8, u8); const u8 gUnknown_8464890[][2] = { @@ -2394,3 +2407,233 @@ bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) "\tbx r1"); } #endif //NONMATCHING + +bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, 0); + (*state)++; + break; + case 1: + if (!gPaletteFade.active) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81414AC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141834(GetBgTilemapBuffer(2)); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81414EC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(1); + return FALSE; +} + +bool8 sub_81414FC(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(2); + CreateTask(sub_814191C, 3); + return FALSE; +} + +bool8 sub_8141518(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141AB0(); + (*state)++; + break; + case 1: + if (!FuncIsActiveTask(sub_814191C)) + { + sub_8141020(0); + return FALSE; + } + break; + } + return TRUE; +} + +bool8 sub_8141558(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(3); + return FALSE; +} + +bool8 sub_8141568(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8141020(FALSE); + return FALSE; +} + +bool8 sub_8141578(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + sub_8140F2C(); + return FALSE; +} + +bool8 sub_8141584(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_81417E4(gUnknown_841B747); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81415C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_81417E4(gUnknown_841B76B); + sub_8141AD8(0); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_8141610(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141828(); + sub_8141B18(); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_8141650(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141BA0(ptr->field_0020); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_8141690(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + sub_8141BE4(); + CopyBgTilemapBufferToVram(2); + (*state)++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + return FALSE; + break; + } + return TRUE; +} + +bool8 sub_81416C8(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, 0x3D); + SetGpuReg(REG_OFFSET_WIN0H, 0x00); + SetGpuReg(REG_OFFSET_WIN1H, 0xA0); + ShowBg(1); + PlaySE(SE_WIN_OPEN); + ptr->field_0024 = 0; + (*state)++; + break; + case 1: + ptr->field_0024 += 16; + if (ptr->field_0024 >= 256) + { + ptr->field_0024 = 256; + (*state)++; + } + ChangeBgX(1, 256 * (256 - ptr->field_0024), 0); + SetGpuReg(REG_OFFSET_WIN0H, ptr->field_0024); + break; + case 2: + return FALSE; + } + return TRUE; +} + +bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr) +{ + switch (*state) + { + case 0: + PlaySE(SE_WIN_OPEN); + (*state)++; + // fallthrough + case 1: + ptr->field_0024 -= 16; + if (ptr->field_0024 <= 0) + { + ptr->field_0024 = 0; + (*state)++; + } + ChangeBgX(1, 256 * (256 - ptr->field_0024), 0); + SetGpuReg(REG_OFFSET_WIN0H, ptr->field_0024); + break; + case 2: + HideBg(1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + (*state)++; + break; + case 3: + return FALSE; + } + return TRUE; +} |