diff options
-rw-r--r-- | asm/slot_machine.s | 312 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle_anim.c | 1 | ||||
-rw-r--r-- | src/slot_machine.c | 154 |
4 files changed, 158 insertions, 312 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 32abb287d..46af5bc0f 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -7048,72 +7048,7 @@ _08104CA4: .4byte gTasks _08104CA8: .4byte 0x0000ffff thumb_func_end sub_8104C5C - thumb_func_start sub_8104CAC -sub_8104CAC: @ 8104CAC - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8104DA4 - ldr r0, _08104D24 @ =0x02000000 - adds r0, 0x3D - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08104D28 @ =gTasks - adds r7, r0, r1 - strh r4, [r7, 0xA] - movs r6, 0 - ldr r1, _08104D2C @ =gUnknown_083ED048 - lsls r5, r4, 2 - adds r0, r5, r1 - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0xFF - beq _08104D18 - mov r8, r1 -_08104CE0: - mov r0, r8 - adds r4, r5, r0 - ldr r0, [r4] - lsls r2, r6, 2 - adds r2, r0 - ldrb r0, [r2] - ldrb r1, [r2, 0x1] - movs r3, 0x2 - ldrsh r2, [r2, r3] - bl sub_8105BB4 - lsls r0, 24 - lsrs r0, 24 - adds r2, r6, 0x4 - lsls r2, 1 - adds r1, r7, 0 - adds r1, 0x8 - adds r1, r2 - strh r0, [r1] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, [r4] - lsls r0, r6, 2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08104CE0 -_08104D18: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08104D24: .4byte 0x02000000 -_08104D28: .4byte gTasks -_08104D2C: .4byte gUnknown_083ED048 - thumb_func_end sub_8104CAC +.section .text_8104D30 thumb_func_start sub_8104D30 sub_8104D30: @ 8104D30 @@ -10221,249 +10156,4 @@ _08106440: .4byte gUnknown_083EDCDC _08106444: .4byte gUnknown_083EDCE4 thumb_func_end sub_8106404 - thumb_func_start sub_8106448 -sub_8106448: @ 8106448 - push {r4-r7,lr} - ldr r0, _081064A0 @ =gSlotMachine_Gfx - ldr r4, _081064A4 @ =0x02010000 - adds r1, r4, 0 - bl sub_800D238 - movs r3, 0xC0 - lsls r3, 19 - movs r5, 0xE9 - lsls r5, 5 - ldr r1, _081064A8 @ =0x040000d4 - ldr r6, _081064AC @ =0x80000800 - movs r2, 0x80 - lsls r2, 5 - movs r7, 0x80 - lsls r7, 24 -_08106468: - str r4, [r1] - str r3, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r4, r2 - adds r3, r2 - subs r5, r2 - cmp r5, r2 - bhi _08106468 - str r4, [r1] - str r3, [r1, 0x4] - lsrs r0, r5, 1 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r0, _081064B0 @ =gUnknown_08E95A18 - movs r1, 0 - movs r2, 0xA0 - bl LoadPalette - ldr r0, _081064B4 @ =gPalette_83EDE24 - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081064A0: .4byte gSlotMachine_Gfx -_081064A4: .4byte 0x02010000 -_081064A8: .4byte 0x040000d4 -_081064AC: .4byte 0x80000800 -_081064B0: .4byte gUnknown_08E95A18 -_081064B4: .4byte gPalette_83EDE24 - thumb_func_end sub_8106448 - - thumb_func_start sub_81064B8 -sub_81064B8: @ 81064B8 - push {lr} - ldr r0, _081064D0 @ =gUnknown_08E95AB8 - ldr r1, _081064D4 @ =0x0600e800 - movs r2, 0xA0 - lsls r2, 2 - bl CpuSet - bl sub_81064D8 - pop {r0} - bx r0 - .align 2, 0 -_081064D0: .4byte gUnknown_08E95AB8 -_081064D4: .4byte 0x0600e800 - thumb_func_end sub_81064B8 - - thumb_func_start sub_81064D8 -sub_81064D8: @ 81064D8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r6, _0810658C @ =0x0600f000 - movs r3, 0x4 - movs r0, 0xC0 - lsls r0, 1 - mov r12, r0 - movs r1, 0xC0 - lsls r1, 2 - mov r9, r1 - movs r2, 0xA0 - lsls r2, 1 - mov r8, r2 -_081064F6: - movs r0, 0 - lsls r4, r3, 16 - asrs r5, r4, 16 -_081064FC: - lsls r2, r0, 16 - asrs r2, 16 - adds r1, r5, r2 - lsls r1, 1 - adds r1, r6 - mov r7, r8 - adds r3, r1, r7 - ldr r7, _08106590 @ =0x00002051 - adds r0, r7, 0 - strh r0, [r3] - movs r0, 0xD0 - lsls r0, 2 - adds r3, r1, r0 - ldr r7, _08106594 @ =0x00002851 - adds r0, r7, 0 - strh r0, [r3] - mov r0, r12 - adds r3, r1, r0 - ldr r7, _08106598 @ =0x00002061 - adds r0, r7, 0 - strh r0, [r3] - add r1, r9 - ldr r3, _0810659C @ =0x00002861 - adds r0, r3, 0 - strh r0, [r1] - adds r2, 0x1 - lsls r2, 16 - lsrs r0, r2, 16 - asrs r2, 16 - cmp r2, 0x3 - ble _081064FC - asrs r3, r4, 16 - lsls r1, r3, 1 - adds r1, r6 - mov r5, r12 - adds r2, r1, r5 - adds r7, 0x5D - adds r0, r7, 0 - strh r0, [r2] - add r1, r9 - ldr r2, _081065A0 @ =0x000028be - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x7 - ldr r5, _081065A4 @ =0x000020bf - adds r2, r5, 0 -_08106558: - lsls r1, r0, 16 - asrs r1, 16 - lsls r0, r1, 5 - adds r0, r3 - lsls r0, 1 - adds r0, r6 - strh r2, [r0] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - asrs r1, 16 - cmp r1, 0xB - ble _08106558 - movs r7, 0xA0 - lsls r7, 11 - adds r0, r4, r7 - lsrs r3, r0, 16 - asrs r0, 16 - cmp r0, 0x11 - ble _081064F6 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810658C: .4byte 0x0600f000 -_08106590: .4byte 0x00002051 -_08106594: .4byte 0x00002851 -_08106598: .4byte 0x00002061 -_0810659C: .4byte 0x00002861 -_081065A0: .4byte 0x000028be -_081065A4: .4byte 0x000020bf - thumb_func_end sub_81064D8 - - thumb_func_start sub_81065A8 -sub_81065A8: @ 81065A8 - push {r4-r6,lr} - ldr r5, [sp, 0x10] - lsls r0, 16 - asrs r0, 15 - ldr r6, _081065D0 @ =0x0600ebc0 - adds r4, r0, r6 - strh r1, [r4] - ldr r4, _081065D4 @ =0x0600ebc2 - adds r1, r0, r4 - strh r2, [r1] - adds r6, 0x40 - adds r1, r0, r6 - strh r3, [r1] - ldr r1, _081065D8 @ =0x0600ec02 - adds r0, r1 - strh r5, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081065D0: .4byte 0x0600ebc0 -_081065D4: .4byte 0x0600ebc2 -_081065D8: .4byte 0x0600ec02 - thumb_func_end sub_81065A8 - - thumb_func_start sub_81065DC -sub_81065DC: @ 81065DC - push {r4,r5,lr} - ldr r0, _08106624 @ =gUnknown_08E95FB8 - ldr r1, _08106628 @ =0x0600e800 - movs r2, 0xA0 - lsls r2, 2 - bl CpuSet - ldr r5, _0810662C @ =0x0600f000 - movs r1, 0 - movs r4, 0 -_081065F0: - movs r0, 0 - lsls r3, r1, 16 - asrs r2, r3, 11 -_081065F6: - lsls r1, r0, 16 - asrs r1, 16 - adds r0, r2, r1 - lsls r0, 1 - adds r0, r5 - strh r4, [r0] - adds r1, 0x1 - lsls r1, 16 - lsrs r0, r1, 16 - asrs r1, 16 - cmp r1, 0x1D - ble _081065F6 - movs r1, 0x80 - lsls r1, 9 - adds r0, r3, r1 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _081065F0 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08106624: .4byte gUnknown_08E95FB8 -_08106628: .4byte 0x0600e800 -_0810662C: .4byte 0x0600f000 - thumb_func_end sub_81065DC - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index af5678637..c5ab999fe 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -211,6 +211,9 @@ SECTIONS { src/decoration.o(.text); asm/decoration.o(.text_80FE868); asm/slot_machine.o(.text); + src/slot_machine.o(.text); + asm/slot_machine.o(.text_8104D30) + src/slot_machine.o(.text_b); src/contest_painting.o(.text); src/battle_ai.o(.text); asm/trader.o(.text); diff --git a/src/battle_anim.c b/src/battle_anim.c index b9aa5b898..bdb34365f 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -65,7 +65,6 @@ extern u8 sub_8078874(u8); extern void sub_8078914(); extern u8 sub_80AEB1C(); extern void sub_80E4EF8(int, int, int, int, u16, u8, int); -extern void sub_800D238(); extern u8 sub_80789BC(); extern void sub_80AB2AC(void); extern void sub_800D7B8(void); diff --git a/src/slot_machine.c b/src/slot_machine.c new file mode 100644 index 000000000..c087bf6b4 --- /dev/null +++ b/src/slot_machine.c @@ -0,0 +1,154 @@ +#include "global.h" +#include "decompress.h" +#include "palette.h" +#include "task.h" + +struct UnkStruct2000000 { + /*0x00*/ u8 filler00[61]; + /*0x3D*/ u8 unk3D; +}; + +struct UnkStruct1 { + /*0x00*/ u8 unk00; + /*0x01*/ u8 unk01; + /*0x02*/ s16 unk02; +}; + +extern struct UnkStruct2000000 unk_2000000; + +extern struct UnkStruct1 *gUnknown_083ED048[]; +extern const u16 gPalette_83EDE24[]; + +extern const u8 gSlotMachine_Gfx[]; +#if ENGLISH +#define SLOTMACHINE_GFX_TILES 233 +#elif GERMAN +#define SLOTMACHINE_GFX_TILES 236 +#endif + +extern const u16 gUnknown_08E95A18[]; + +extern u16 gUnknown_08E95AB8[]; +extern u16 gUnknown_08E95FB8[]; + + +void sub_8104DA4(void); + +u8 sub_8105BB4(u8, u8, s16); + +static void LoadSlotMachineWheelOverlay(void); + +void sub_8104CAC(u8 arg0) { + u8 i; + struct Task *task; + + sub_8104DA4(); + + task = &gTasks[unk_2000000.unk3D]; + task->data[1] = arg0; + + i = 0; + while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) + { + u8 spriteId; + spriteId = sub_8105BB4( + gUnknown_083ED048[arg0][i].unk00, + gUnknown_083ED048[arg0][i].unk01, + gUnknown_083ED048[arg0][i].unk02 + ); + task->data[4 + i] = spriteId; + +#ifdef GERMAN + if (arg0 == 5 && i <= 2) + { + gSprites[spriteId].invisible = TRUE; + } +#endif + + i += 1; + } +} + +asm(".section .text_b"); + +void sub_8106448(void) { + u32 offsetRead, offsetWrite; + u32 size; + + sub_800D238(gSlotMachine_Gfx, (void *) 0x02010000); + + offsetRead = 0x02010000; + offsetWrite = BG_VRAM; + size = SLOTMACHINE_GFX_TILES * 32; + while (TRUE) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000); + offsetRead += 0x1000; + offsetWrite += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), size); + break; + } + } + + LoadPalette(gUnknown_08E95A18, 0, 160); + LoadPalette(gPalette_83EDE24, 208, 32); +} + +void sub_81064B8(void) { + CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + LoadSlotMachineWheelOverlay(); +} + +static void LoadSlotMachineWheelOverlay(void) { + s16 x, y, dx; + u16 *screen; + + screen = (u16 *) BG_SCREEN_ADDR(30); + + for (x = 4; x < 18; x += 5) + { + for (dx = 0; dx < 4; dx++) + { + screen[5 * 32 + dx + x] = 0x2051; + screen[13 * 32 + dx + x] = 0x2851; + screen[6 * 32 + dx + x] = 0x2061; + screen[12 * 32 + dx + x] = 0x2861; + } + + screen[6 * 32 + x] = 0x20BE; + screen[12 * 32 + x] = 0x28BE; + + for (y = 7; y <= 11; y++) + { + screen[y * 32 + x] = 0x20BF; + } + } +} + +void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { + u16 *vram = (u16 *) BG_SCREEN_ADDR(29); + + vram[15 * 32 + arg0] = arg1; + vram[15 * 32 + 1 + arg0] = arg2; + vram[16 * 32 + arg0] = arg3; + vram[16 * 32 + 1 + arg0] = arg4; +} + +void sub_81065DC(void) { + s16 y, x; + u16 *screen; + + CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); + + screen = (u16 *) BG_SCREEN_ADDR(30); + for (y = 0; y < 20; y++) + { + for (x = 0; x < 30; x++) + { + screen[x + y * 32] = 0; + } + } +} |