summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s161
-rw-r--r--data/slot_machine.s26
-rw-r--r--include/menu.h1
-rw-r--r--src/slot_machine.c85
4 files changed, 86 insertions, 187 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 5dbf01acc..028457d86 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,167 +5,6 @@
.text
- thumb_func_start sub_81417E4
-sub_81417E4: @ 81417E4
- push {r4,lr}
- sub sp, 0x14
- adds r4, r0, 0
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x1
- movs r2, 0xF
- bl DrawTextBorderOuter
- movs r1, 0x2
- str r1, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x1
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- movs r0, 0
- adds r2, r4, 0
- movs r3, 0x1
- bl sub_812E62C
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81417E4
-
- thumb_func_start sub_8141828
-sub_8141828: @ 8141828
- push {lr}
- movs r0, 0
- bl rbox_fill_rectangle
- pop {r0}
- bx r0
- thumb_func_end sub_8141828
-
- thumb_func_start sub_8141834
-sub_8141834: @ 8141834
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8140BEC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081418B4
- cmp r0, 0x1
- bgt _0814184E
- cmp r0, 0
- beq _08141858
- b _081418BE
-_0814184E:
- cmp r0, 0x2
- beq _081418A0
- cmp r0, 0x3
- beq _0814188C
- b _081418BE
-_08141858:
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x4
- bl sub_81418C4
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x4
- bl sub_81418C4
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0x4
- bl sub_81418C4
- adds r0, r4, 0
- movs r1, 0x3
- movs r2, 0x4
- bl sub_81418C4
- adds r0, r4, 0
- movs r1, 0x4
- movs r2, 0x4
- bl sub_81418C4
- b _081418BE
-_0814188C:
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x5
- bl sub_81418C4
- adds r0, r4, 0
- movs r1, 0x4
- movs r2, 0x5
- bl sub_81418C4
-_081418A0:
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x5
- bl sub_81418C4
- adds r0, r4, 0
- movs r1, 0x3
- movs r2, 0x5
- bl sub_81418C4
-_081418B4:
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0x5
- bl sub_81418C4
-_081418BE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8141834
-
- thumb_func_start sub_81418C4
-sub_81418C4: @ 81418C4
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 16
- ldr r3, _08141914 @ =gUnknown_8466C0C
- lsrs r1, 13
- adds r0, r1, r3
- ldr r4, [r0]
- lsls r2, 28
- lsrs r7, r2, 16
- movs r5, 0
- adds r3, 0x4
- adds r1, r3
- ldr r1, [r1]
- cmp r5, r1
- bcs _0814190C
- ldr r0, _08141918 @ =0x00000fff
- mov r12, r0
- adds r3, r1, 0
-_081418E8:
- ldrh r1, [r4]
- lsls r1, 1
- adds r1, r6
- ldrh r2, [r1]
- mov r0, r12
- ands r0, r2
- strh r0, [r1]
- ldrh r1, [r4]
- lsls r1, 1
- adds r1, r6
- ldrh r2, [r1]
- adds r0, r7, 0
- orrs r0, r2
- strh r0, [r1]
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r3
- bcc _081418E8
-_0814190C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08141914: .4byte gUnknown_8466C0C
-_08141918: .4byte 0x00000fff
- thumb_func_end sub_81418C4
-
thumb_func_start sub_814191C
sub_814191C: @ 814191C
push {r4,r5,lr}
diff --git a/data/slot_machine.s b/data/slot_machine.s
index 5c95ae7bf..1ff90742f 100644
--- a/data/slot_machine.s
+++ b/data/slot_machine.s
@@ -2,34 +2,8 @@
.include "constants/constants.inc"
.section .rodata
-gUnknown_8466B38::
- .2byte 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218
- .2byte 0x0219, 0x0237, 0x0238, 0x0239
-
-gUnknown_8466B60::
- .2byte 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119
- .2byte 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139
-
-gUnknown_8466B8C::
- .2byte 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179
- .2byte 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199
-
-gUnknown_8466BB8::
- .2byte 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9
- .2byte 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9
-
-gUnknown_8466BE4::
- .2byte 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8
- .2byte 0x00b9, 0x00d7, 0x00d8, 0x00d9
.align 2
-gUnknown_8466C0C:: @ 8466C0C
- .4byte gUnknown_8466B38, 0x14
- .4byte gUnknown_8466B60, 0x16
- .4byte gUnknown_8466B8C, 0x16
- .4byte gUnknown_8466BB8, 0x16
- .4byte gUnknown_8466BE4, 0x14
-
gUnknown_8466C34:: @ 8466C34
.byte 0x02, 0x04
diff --git a/include/menu.h b/include/menu.h
index 40c7ffc12..172944064 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -50,5 +50,6 @@ void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_st
bool8 IsBlendTaskActive(void);
void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8);
void sub_810F260(u8 windowId, u8 a1);
+void sub_812E62C(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing);
#endif // GUARD_MENU_H
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 93714311c..bc3baf621 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -74,6 +74,12 @@ struct SlotMachineSetupTaskData
u8 field_205C[0x800];
}; // size: 285C
+struct UnkStruct_8466C0C
+{
+ const u16 * tiles;
+ u32 count;
+};
+
EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL;
EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL;
@@ -129,6 +135,7 @@ bool8 sub_8141764(u8 *, struct SlotMachineSetupTaskData *);
void sub_81417E4(const u8 * str);
void sub_8141828(void);
void sub_8141834(u16 * bgTilemapBuffer);
+void sub_81418C4(u16 * bgTilemapBuffer, u16 a0, u16 a1);
void sub_814191C(u8 taskId);
void sub_8141AB0(void);
void sub_8141AD8(u8 a0);
@@ -585,6 +592,34 @@ const struct WindowTemplate gUnknown_8466B20[] = {
DUMMY_WIN_TEMPLATE
};
+const u16 gUnknown_8466B38[] = {
+ 0x00a4, 0x00a5, 0x00a6, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00e7, 0x012c, 0x014c, 0x0191, 0x01b1, 0x01f6, 0x0216, 0x0217, 0x0218, 0x0219, 0x0237, 0x0238, 0x0239
+};
+
+const u16 gUnknown_8466B60[] = {
+ 0x00e4, 0x00e5, 0x00e6, 0x00f7, 0x00f8, 0x00f9, 0x0104, 0x0105, 0x0106, 0x0107, 0x010c, 0x0111, 0x0116, 0x0117, 0x0118, 0x0119, 0x0124, 0x0125, 0x0126, 0x0137, 0x0138, 0x0139
+};
+
+const u16 gUnknown_8466B8C[] = {
+ 0x0144, 0x0145, 0x0146, 0x0157, 0x0158, 0x0159, 0x0164, 0x0165, 0x0166, 0x0167, 0x016c, 0x0171, 0x0176, 0x0177, 0x0178, 0x0179, 0x0184, 0x0185, 0x0186, 0x0197, 0x0198, 0x0199
+};
+
+const u16 gUnknown_8466BB8[] = {
+ 0x01a4, 0x01a5, 0x01a6, 0x01b7, 0x01b8, 0x01b9, 0x01c4, 0x01c5, 0x01c6, 0x01c7, 0x01cc, 0x01d1, 0x01d6, 0x01d7, 0x01d8, 0x01d9, 0x01e4, 0x01e5, 0x01e6, 0x01f7, 0x01f8, 0x01f9
+};
+
+const u16 gUnknown_8466BE4[] = {
+ 0x0204, 0x0205, 0x0206, 0x0224, 0x0225, 0x0226, 0x01e7, 0x0207, 0x018c, 0x01ac, 0x0131, 0x0151, 0x00d6, 0x00f6, 0x00b7, 0x00b8, 0x00b9, 0x00d7, 0x00d8, 0x00d9
+};
+
+const struct UnkStruct_8466C0C gUnknown_8466C0C[] = {
+ { gUnknown_8466B38, NELEMS(gUnknown_8466B38) },
+ { gUnknown_8466B60, NELEMS(gUnknown_8466B60) },
+ { gUnknown_8466B8C, NELEMS(gUnknown_8466B8C) },
+ { gUnknown_8466BB8, NELEMS(gUnknown_8466BB8) },
+ { gUnknown_8466BE4, NELEMS(gUnknown_8466BE4) }
+};
+
void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback)
{
ResetTasks();
@@ -2637,3 +2672,53 @@ bool8 sub_8141764(u8 * state, struct SlotMachineSetupTaskData * ptr)
}
return TRUE;
}
+
+void sub_81417E4(const u8 * str)
+{
+ FillWindowPixelBuffer(0, 0x11);
+ PutWindowTilemap(0);
+ DrawTextBorderOuter(0, 0x001, 15);
+ sub_812E62C(0, 2, str, 1, 2, -1, NULL, 1, 2);
+}
+
+void sub_8141828(void)
+{
+ rbox_fill_rectangle(0);
+}
+
+void sub_8141834(u16 * bgTilemapBuffer)
+{
+ switch (sub_8140BEC())
+ {
+ case 0:
+ sub_81418C4(bgTilemapBuffer, 0, 4);
+ sub_81418C4(bgTilemapBuffer, 1, 4);
+ sub_81418C4(bgTilemapBuffer, 2, 4);
+ sub_81418C4(bgTilemapBuffer, 3, 4);
+ sub_81418C4(bgTilemapBuffer, 4, 4);
+ break;
+ case 3:
+ sub_81418C4(bgTilemapBuffer, 0, 5);
+ sub_81418C4(bgTilemapBuffer, 4, 5);
+ case 2:
+ sub_81418C4(bgTilemapBuffer, 1, 5);
+ sub_81418C4(bgTilemapBuffer, 3, 5);
+ case 1:
+ sub_81418C4(bgTilemapBuffer, 2, 5);
+ break;
+ }
+}
+
+void sub_81418C4(u16 * bgTilemapBuffer, u16 whichLine, u16 paletteNum)
+{
+ s32 i;
+ const u16 * tileIdxs = gUnknown_8466C0C[whichLine].tiles;
+ u16 palMask = (paletteNum & 0xF) << 12;
+
+ for (i = 0; i < gUnknown_8466C0C[whichLine].count; i++)
+ {
+ bgTilemapBuffer[*tileIdxs] &= 0x0FFF;
+ bgTilemapBuffer[*tileIdxs] |= palMask;
+ tileIdxs++;
+ }
+}