summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s436
-rw-r--r--data/slot_machine.s15
-rw-r--r--ld_script.txt2
-rw-r--r--src/slot_machine.c173
4 files changed, 169 insertions, 457 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
deleted file mode 100644
index e5aa4ff05..000000000
--- a/asm/slot_machine.s
+++ /dev/null
@@ -1,436 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_814191C
-sub_814191C: @ 814191C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _08141940 @ =gTasks+0x8
- adds r5, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _08141984
- cmp r0, 0x1
- bgt _08141944
- cmp r0, 0
- beq _08141952
- b _08141AA8
- .align 2, 0
-_08141940: .4byte gTasks+0x8
-_08141944:
- cmp r0, 0x2
- bne _0814194A
- b _08141A58
-_0814194A:
- cmp r0, 0x3
- bne _08141950
- b _08141A98
-_08141950:
- b _08141AA8
-_08141952:
- ldr r0, _08141980 @ =gUnknown_84664BC
- movs r1, 0x60
- movs r2, 0x20
- bl LoadPalette
- movs r4, 0
-_0814195E:
- adds r0, r4, 0
- bl sub_8140BF8
- cmp r0, 0
- beq _08141978
- movs r0, 0x2
- bl GetBgTilemapBuffer
- lsls r1, r4, 16
- lsrs r1, 16
- movs r2, 0x6
- bl sub_81418C4
-_08141978:
- adds r4, 0x1
- cmp r4, 0x4
- ble _0814195E
- b _08141A84
- .align 2, 0
-_08141980: .4byte gUnknown_84664BC
-_08141984:
- ldrh r1, [r5, 0x2]
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _081419C4
- ldr r1, _081419BC @ =gSineTable
- movs r2, 0x4
- ldrsh r0, [r5, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 16
- asrs r0, 23
- lsls r0, 16
- lsrs r0, 11
- ldr r1, _081419C0 @ =gUnknown_84664DC
- adds r0, r1
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r5, 0x4]
- adds r0, 0x20
- movs r1, 0x7F
- ands r0, r1
- strh r0, [r5, 0x4]
- movs r0, 0x8
- b _081419C6
- .align 2, 0
-_081419BC: .4byte gSineTable
-_081419C0: .4byte gUnknown_84664DC
-_081419C4:
- subs r0, r1, 0x1
-_081419C6:
- strh r0, [r5, 0x2]
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08141A00
- ldrh r0, [r5, 0x8]
- adds r0, 0x8
- movs r1, 0x7F
- ands r0, r1
- strh r0, [r5, 0x8]
- ldr r1, _081419FC @ =gSineTable
- movs r2, 0x8
- ldrsh r0, [r5, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 16
- asrs r1, 21
- strh r1, [r5, 0xA]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x40
- movs r2, 0
- bl BlendPalettes
- b _08141A2C
- .align 2, 0
-_081419FC: .4byte gSineTable
-_08141A00:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _08141A2C
- movs r0, 0
- strh r0, [r5, 0x8]
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- movs r1, 0x1
- ands r0, r1
- strh r0, [r5, 0xA]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r1, 27
- lsrs r1, 24
- movs r0, 0x40
- movs r2, 0
- bl BlendPalettes
-_08141A2C:
- movs r4, 0
- ldr r5, _08141A4C @ =gPlttBufferFaded
- ldr r3, _08141A50 @ =gUnknown_8466C34
- ldr r2, _08141A54 @ =gPlttBufferUnfaded
-_08141A34:
- adds r0, r4, r3
- ldrb r0, [r0]
- adds r0, 0x60
- lsls r0, 1
- adds r1, r0, r5
- adds r0, r2
- ldrh r0, [r0]
- strh r0, [r1]
- adds r4, 0x1
- cmp r4, 0x1
- bls _08141A34
- b _08141AA8
- .align 2, 0
-_08141A4C: .4byte gPlttBufferFaded
-_08141A50: .4byte gUnknown_8466C34
-_08141A54: .4byte gPlttBufferUnfaded
-_08141A58:
- movs r4, 0
-_08141A5A:
- adds r0, r4, 0
- bl sub_8140BF8
- cmp r0, 0
- beq _08141A74
- movs r0, 0x2
- bl GetBgTilemapBuffer
- lsls r1, r4, 16
- lsrs r1, 16
- movs r2, 0x4
- bl sub_81418C4
-_08141A74:
- adds r4, 0x1
- cmp r4, 0x4
- ble _08141A5A
- ldr r0, _08141A94 @ =gUnknown_8465950
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
-_08141A84:
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _08141AA8
- .align 2, 0
-_08141A94: .4byte gUnknown_8465950
-_08141A98:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08141AA8
- adds r0, r4, 0
- bl DestroyTask
-_08141AA8:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_814191C
-
- thumb_func_start sub_8141AB0
-sub_8141AB0: @ 8141AB0
- push {lr}
- ldr r0, _08141AD0 @ =sub_814191C
- bl FindTaskIdByFunc
- ldr r2, _08141AD4 @ =gTasks
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x2
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_08141AD0: .4byte sub_814191C
-_08141AD4: .4byte gTasks
- thumb_func_end sub_8141AB0
-
- thumb_func_start sub_8141AD8
-sub_8141AD8: @ 8141AD8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08141B14 @ =gUnknown_8466C38
- movs r1, 0xA
- str r1, [sp]
- movs r1, 0xD
- str r1, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- lsls r4, 24
- asrs r4, 24
- adds r0, r4, 0
- bl Menu_MoveCursorNoWrapAround
- bl sub_814112C
- movs r1, 0x1
- str r1, [r0, 0x28]
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08141B14: .4byte gUnknown_8466C38
- thumb_func_end sub_8141AD8
-
- thumb_func_start sub_8141B18
-sub_8141B18: @ 8141B18
- push {r4,lr}
- bl sub_814112C
- adds r4, r0, 0
- ldr r0, [r4, 0x28]
- cmp r0, 0
- beq _08141B2E
- bl DestroyYesNoMenu
- movs r0, 0
- str r0, [r4, 0x28]
-_08141B2E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8141B18
-
- thumb_func_start sub_8141B34
-sub_8141B34: @ 8141B34
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- bl sub_814112C
- adds r4, r0, 0
- movs r0, 0x2
- bl GetBgTilemapBuffer
- mov r12, r0
- movs r1, 0
- movs r0, 0x44
- adds r0, r4
- mov r8, r0
- adds r7, r4, 0
- adds r7, 0x2C
- ldr r0, _08141B9C @ =gUnknown_8466C40
- mov r9, r0
-_08141B5A:
- movs r5, 0
- lsls r0, r1, 3
- adds r6, r1, 0x1
- mov r1, r8
- adds r4, r0, r1
- mov r1, r9
- adds r3, r0, r1
- adds r2, r0, 0
-_08141B6A:
- ldrh r0, [r3]
- lsls r0, 1
- add r0, r12
- ldrh r0, [r0]
- strh r0, [r4]
- adds r1, r7, r2
- adds r0, r5, 0
- adds r0, 0xC0
- strh r0, [r1]
- adds r4, 0x2
- adds r3, 0x2
- adds r2, 0x2
- adds r5, 0x1
- cmp r5, 0x3
- ble _08141B6A
- adds r1, r6, 0
- cmp r1, 0x2
- ble _08141B5A
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08141B9C: .4byte gUnknown_8466C40
- thumb_func_end sub_8141B34
-
- thumb_func_start sub_8141BA0
-sub_8141BA0: @ 8141BA0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bhi _08141BD8
- bl sub_814112C
- adds r4, r0, 0
- movs r0, 0x2
- bl GetBgTilemapBuffer
- adds r6, r0, 0
- lsls r0, r5, 3
- ldr r1, _08141BE0 @ =gUnknown_8466C40
- adds r4, 0x2C
- adds r3, r0, r4
- adds r2, r0, r1
- movs r4, 0x3
-_08141BC4:
- ldrh r0, [r2]
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r3]
- strh r1, [r0]
- adds r3, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _08141BC4
-_08141BD8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08141BE0: .4byte gUnknown_8466C40
- thumb_func_end sub_8141BA0
-
- thumb_func_start sub_8141BE4
-sub_8141BE4: @ 8141BE4
- push {r4-r7,lr}
- bl sub_814112C
- adds r4, r0, 0
- movs r0, 0x2
- bl GetBgTilemapBuffer
- adds r6, r0, 0
- movs r1, 0
- adds r7, r4, 0
- adds r7, 0x44
- ldr r0, _08141C2C @ =gUnknown_8466C40
- mov r12, r0
-_08141BFE:
- lsls r0, r1, 3
- adds r5, r1, 0x1
- adds r3, r0, r7
- mov r1, r12
- adds r2, r0, r1
- movs r4, 0x3
-_08141C0A:
- ldrh r0, [r2]
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r3]
- strh r1, [r0]
- adds r3, 0x2
- adds r2, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _08141C0A
- adds r1, r5, 0
- cmp r1, 0x2
- ble _08141BFE
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08141C2C: .4byte gUnknown_8466C40
- thumb_func_end sub_8141BE4
-
- thumb_func_start sub_8141C30
-sub_8141C30: @ 8141C30
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- bl sub_814112C
- adds r0, 0x20
- strb r4, [r0]
- movs r0, 0xC
- adds r1, r5, 0
- bl sub_8141148
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8141C30
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/slot_machine.s b/data/slot_machine.s
deleted file mode 100644
index 1ff90742f..000000000
--- a/data/slot_machine.s
+++ /dev/null
@@ -1,15 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_8466C34:: @ 8466C34
- .byte 0x02, 0x04
-
- .align 2
-gUnknown_8466C38:: @ 8466C38
- window_template 0x00, 0x13, 0x09, 0x06, 0x04, 0x0f, 0x009f
-
-gUnknown_8466C40:: @ 8466C40
- .2byte 0x0229, 0x022a, 0x0249, 0x024a, 0x022e, 0x022f, 0x024e, 0x024f, 0x0233, 0x0234, 0x0253, 0x0254
diff --git a/ld_script.txt b/ld_script.txt
index 0fcc799e3..faa82e34e 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -255,7 +255,6 @@ SECTIONS {
asm/itemfinder.o(.text);
src/buy_menu_helpers.o(.text);
src/slot_machine.o(.text);
- asm/slot_machine.o(.text);
src/roamer.o(.text);
src/mystery_gift_menu.o(.text);
src/mevent.o(.text);
@@ -454,7 +453,6 @@ SECTIONS {
data/itemfinder.o(.rodata);
src/buy_menu_helpers.o(.rodata);
src/slot_machine.o(.rodata);
- data/slot_machine.o(.rodata);
src/roamer.o(.rodata);
src/mystery_gift_menu.o(.rodata);
src/mevent.o(.rodata);
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 5b4020a5f..6d0db130d 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -16,6 +16,7 @@
#include "new_menu_helpers.h"
#include "text_window.h"
#include "random.h"
+#include "trig.h"
#include "constants/songs.h"
extern const u8 gUnknown_841B747[];
@@ -67,7 +68,9 @@ struct SlotMachineSetupTaskData
// align 2
s32 field_0024;
u32 field_0028;
- u8 filler_002C[0x830];
+ u16 field_002C[3][4];
+ u16 field_0044[3][4];
+ u8 field_005C[0x800];
u8 field_085C[0x800];
u8 field_105C[0x800];
u8 field_185C[0x800];
@@ -525,9 +528,7 @@ const u16 gUnknown_84659B0[] = INCBIN_U16("graphics/slot_machine/unk_84659b0.gba
const u32 gUnknown_84659D0[] = INCBIN_U32("graphics/slot_machine/unk_84659d0.4bpp.lz");
const u32 gUnknown_84661D4[] = INCBIN_U32("graphics/slot_machine/unk_84661d4.bin.lz");
const u16 gUnknown_84664BC[] = INCBIN_U16("graphics/slot_machine/unk_84664bc.gbapal");
-const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal");
-const u16 gUnknown_84664FC[] = INCBIN_U16("graphics/slot_machine/unk_84664fc.gbapal");
-const u16 gUnknown_846651C[] = INCBIN_U16("graphics/slot_machine/unk_846651c.gbapal");
+const u16 gUnknown_84664DC[] = INCBIN_U16("graphics/slot_machine/unk_84664dc.gbapal","graphics/slot_machine/unk_84664fc.gbapal", "graphics/slot_machine/unk_846651c.gbapal");
const u32 gUnknown_846653C[] = INCBIN_U32("graphics/slot_machine/unk_846653c.4bpp.lz");
const u16 gUnknown_84665C0[] = INCBIN_U16("graphics/slot_machine/unk_84665c0.gbapal");
const u16 gUnknown_84665E0[] = INCBIN_U16("graphics/slot_machine/unk_84665e0.gbapal");
@@ -620,6 +621,24 @@ const struct UnkStruct_8466C0C gUnknown_8466C0C[] = {
{ gUnknown_8466BE4, NELEMS(gUnknown_8466BE4) }
};
+const u8 gUnknown_8466C34[2] = {2, 4};
+
+const struct WindowTemplate gUnknown_8466C38 = {
+ .bg = 0,
+ .tilemapLeft = 19,
+ .tilemapTop = 9,
+ .width = 6,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x9F
+};
+
+const u16 gUnknown_8466C40[][4] = {
+ {0x0229, 0x022a, 0x0249, 0x024a},
+ {0x022e, 0x022f, 0x024e, 0x024f},
+ {0x0233, 0x0234, 0x0253, 0x0254}
+};
+
void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback)
{
ResetTasks();
@@ -2722,3 +2741,149 @@ void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum)
tileIdxs++;
}
}
+
+void sub_814191C(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+ s32 i;
+
+ switch (data[0])
+ {
+ case 0:
+ LoadPalette(gUnknown_84664BC, 0x60, 0x20);
+ for (i = 0; i < 5; i++)
+ {
+ if (sub_8140BF8(i))
+ sub_81418C4(GetBgTilemapBuffer(2), i, 6);
+ }
+ CopyBgTilemapBufferToVram(2);
+ data[0]++;
+ break;
+ case 1:
+ if (data[1] == 0)
+ {
+ u16 y = gSineTable[data[2]] >> 7;
+ LoadPalette(&gUnknown_84664DC[16 * y], 0x10, 0x20);
+ data[2] += 32;
+ data[2] &= 0x7F;
+ data[1] = 8;
+ }
+ else
+ data[1]--;
+
+ if (data[3] == 0)
+ {
+ data[4] += 8;
+ data[4] &= 0x7F;
+ data[5] = gSineTable[data[4]] >> 5;
+ BlendPalettes(0x00000040, data[5], RGB_BLACK);
+ }
+ else
+ {
+ data[4]++;
+ if (data[4] > 1)
+ {
+ data[4] = 0;
+ data[5]++;
+ data[5] &= 1;
+ BlendPalettes(0x00000040, data[5] * 8, RGB_BLACK);
+ }
+ }
+
+ for (i = 0; i < NELEMS(gUnknown_8466C34); i++)
+ {
+ gPlttBufferFaded[gUnknown_8466C34[i] + 0x60] = gPlttBufferUnfaded[gUnknown_8466C34[i] + 0x60];
+ }
+ break;
+ case 2:
+ for (i = 0; i < 5; i++)
+ {
+ if (sub_8140BF8(i))
+ sub_81418C4(GetBgTilemapBuffer(2), i, 4);
+ }
+ LoadPalette(gUnknown_8465950, 0x10, 0x20);
+ CopyBgTilemapBufferToVram(2);
+ data[0]++;
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_8141AB0(void)
+{
+ gTasks[FindTaskIdByFunc(sub_814191C)].data[0] = 2;
+}
+
+void sub_8141AD8(u8 cursorPos)
+{
+ CreateYesNoMenu(&gUnknown_8466C38, 2, 0, 2, 10, 13, cursorPos);
+ Menu_MoveCursorNoWrapAround(cursorPos);
+ sub_814112C()->field_0028 = TRUE;
+}
+
+void sub_8141B18(void)
+{
+ struct SlotMachineSetupTaskData * data = sub_814112C();
+ if (data->field_0028)
+ {
+ DestroyYesNoMenu();
+ data->field_0028 = FALSE;
+ }
+}
+
+void sub_8141B34(void)
+{
+ s32 i, j;
+ struct SlotMachineSetupTaskData * data = sub_814112C();
+ u16 * buffer = GetBgTilemapBuffer(2);
+
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ u16 idx = gUnknown_8466C40[i][j];
+ data->field_0044[i][j] = buffer[idx];
+ data->field_002C[i][j] = j + 0xC0;
+ }
+ }
+}
+
+void sub_8141BA0(u8 reel)
+{
+ if (reel < 3)
+ {
+ s32 i;
+ struct SlotMachineSetupTaskData * data = sub_814112C();
+ u16 * buffer = GetBgTilemapBuffer(2);
+ for (i = 0; i < 4; i++)
+ {
+ u16 idx = gUnknown_8466C40[reel][i];
+ buffer[idx] = data->field_002C[reel][i];
+ }
+ }
+}
+
+void sub_8141BE4(void)
+{
+ s32 i, j;
+ struct SlotMachineSetupTaskData * data = sub_814112C();
+ u16 * buffer = GetBgTilemapBuffer(2);
+
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ u16 idx = gUnknown_8466C40[i][j];
+ buffer[idx] = data->field_0044[i][j];
+ }
+ }
+}
+
+void sub_8141C30(u8 a0, u8 a1)
+{
+ sub_814112C()->field_0020 = a0;
+ sub_8141148(12, a1);
+}