Start documenting slot machines

This commit is contained in:
PikalaxALT
2020-04-08 08:55:39 -04:00
parent 54559c2e08
commit d7c165d8fe
+220 -200
View File
@@ -31,12 +31,12 @@ struct SlotMachineState
u8 field_10; u8 field_10;
u8 field_11; u8 field_11;
bool32 field_14[3]; bool32 field_14[3];
s16 field_20[3]; s16 reelPositions[3];
s16 field_26[3]; s16 field_26[3];
s16 field_2C[3]; s16 field_2C[3];
s16 field_32[3]; s16 field_32[3];
u32 field_38; u32 field_38;
u32 field_3C[5]; bool32 winFlags[5];
u16 payout; u16 payout;
}; };
@@ -52,14 +52,14 @@ struct SlotMachineGfxManager
struct SlotMachineSetupTaskDataSub_0000 struct SlotMachineSetupTaskDataSub_0000
{ {
u16 unk0; u16 funcno;
u8 unk2; u8 state;
u8 unk3; bool8 active;
}; };
struct SlotMachineSetupTaskData struct SlotMachineSetupTaskData
{ {
struct SlotMachineSetupTaskDataSub_0000 field_0000[8]; struct SlotMachineSetupTaskDataSub_0000 tasks[8];
u8 field_0020; u8 field_0020;
// align 2 // align 2
s32 field_0024; s32 field_0024;
@@ -70,7 +70,7 @@ struct SlotMachineSetupTaskData
u8 field_085C[0x800]; u8 field_085C[0x800];
u8 field_105C[0x800]; u8 field_105C[0x800];
u8 field_185C[0x800]; u8 field_185C[0x800];
u8 field_205C[0x800]; u8 reelPositions5C[0x800];
}; // size: 285C }; // size: 285C
struct UnkStruct_8466C0C struct UnkStruct_8466C0C
@@ -106,15 +106,15 @@ static bool32 sub_81406E8(s32, s32, s32);
static bool32 sub_81408F4(s32, s32); static bool32 sub_81408F4(s32, s32);
static void sub_81409B4(void); static void sub_81409B4(void);
static void sub_8140A70(void); static void sub_8140A70(void);
static u16 sub_8140A80(void); static u16 CalcPayout(void);
static void sub_8140C6C(struct SlotMachineGfxManager * manager); static void sub_8140C6C(struct SlotMachineGfxManager * manager);
static void sub_8140D7C(const s16 *, const s16 *); static void sub_8140D7C(const s16 *, const s16 *);
static bool32 sub_814104C(void); static bool32 sub_814104C(void);
static void sub_8141094(void); static void sub_8141094(void);
static struct SlotMachineSetupTaskData * sub_814112C(void); static struct SlotMachineSetupTaskData * GetSlotMachineSetupTaskDataPtr(void);
static void sub_81410CC(u8 taskId); static void sub_81410CC(u8 taskId);
static void sub_8141148(u16 a0, u8 a1); static void SetSlotMachineSetupTask(u16 a0, u8 a1);
static bool32 sub_8141180(u8 a0); static bool32 IsSlotMachineSetupTaskActive(u8 a0);
static bool8 sub_8141198(u8 *, struct SlotMachineSetupTaskData *); static bool8 sub_8141198(u8 *, struct SlotMachineSetupTaskData *);
static bool8 sub_8141460(u8 *, struct SlotMachineSetupTaskData *); static bool8 sub_8141460(u8 *, struct SlotMachineSetupTaskData *);
static bool8 sub_81414AC(u8 *, struct SlotMachineSetupTaskData *); static bool8 sub_81414AC(u8 *, struct SlotMachineSetupTaskData *);
@@ -197,7 +197,7 @@ static const u8 gUnknown_8464926[][21] = {
{0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01}, {0x00, 0x03, 0x06, 0x05, 0x02, 0x03, 0x06, 0x05, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x02, 0x03, 0x05, 0x06, 0x01},
}; };
static const u16 gUnknown_8464966[] = { static const u16 sPayoutTable[] = {
0, 0,
2, 2,
6, 6,
@@ -207,37 +207,37 @@ static const u16 gUnknown_8464966[] = {
300 300
}; };
static const u16 gUnknown_8464974[] = INCBIN_U16("graphics/slot_machine/unk_8464974.gbapal"); static const u16 sSpritePal_ReelIcons[] = INCBIN_U16("graphics/slot_machine/unk_8464974.gbapal");
static const u16 gUnknown_8464994[] = INCBIN_U16("graphics/slot_machine/unk_8464994.gbapal"); static const u16 gUnknown_8464994[] = INCBIN_U16("graphics/slot_machine/unk_8464994.gbapal");
static const u16 gUnknown_84649B4[] = INCBIN_U16("graphics/slot_machine/unk_84649b4.gbapal"); static const u16 gUnknown_84649B4[] = INCBIN_U16("graphics/slot_machine/unk_84649b4.gbapal");
static const u16 gUnknown_84649D4[] = INCBIN_U16("graphics/slot_machine/unk_84649d4.gbapal"); static const u16 gUnknown_84649D4[] = INCBIN_U16("graphics/slot_machine/unk_84649d4.gbapal");
static const u16 gUnknown_84649F4[] = INCBIN_U16("graphics/slot_machine/unk_84649f4.gbapal"); static const u16 gUnknown_84649F4[] = INCBIN_U16("graphics/slot_machine/unk_84649f4.gbapal");
#if defined(FIRERED) #if defined(FIRERED)
static const u32 gUnknown_8464A14[] = INCBIN_U32("graphics/slot_machine/unk_8464a14.4bpp.lz"); static const u32 sSpriteTiles_ReelIcons[] = INCBIN_U32("graphics/slot_machine/unk_8464a14.4bpp.lz");
static const u16 gUnknown_846504C[] = INCBIN_U16("graphics/slot_machine/unk_846506c.gbapal"); static const u16 sSpritePal_Clefairy[] = INCBIN_U16("graphics/slot_machine/unk_846506c.gbapal");
static const u32 gUnknown_846506C[] = INCBIN_U32("graphics/slot_machine/unk_846506c.4bpp.lz"); static const u32 sSpriteTiles_Clefairy[] = INCBIN_U32("graphics/slot_machine/unk_846506c.4bpp.lz");
#elif defined(LEAFGREEN) #elif defined(LEAFGREEN)
static const u32 gUnknown_8464A14[] = INCBIN_U32("graphics/slot_machine/unk_lg_8464434.4bpp.lz"); static const u32 sSpriteTiles_ReelIcons[] = INCBIN_U32("graphics/slot_machine/unk_lg_8464434.4bpp.lz");
static const u16 gUnknown_846504C[] = INCBIN_U16("graphics/slot_machine/unk_lg_8464a3c.gbapal"); static const u16 sSpritePal_Clefairy[] = INCBIN_U16("graphics/slot_machine/unk_lg_8464a3c.gbapal");
static const u32 gUnknown_846506C[] = INCBIN_U32("graphics/slot_machine/unk_lg_8464a3c.4bpp.lz"); static const u32 sSpriteTiles_Clefairy[] = INCBIN_U32("graphics/slot_machine/unk_lg_8464a3c.4bpp.lz");
#endif #endif
static const u16 gUnknown_8465524[] = INCBIN_U16("graphics/slot_machine/unk_8465524.gbapal"); static const u16 sSpritePal_Digits[] = INCBIN_U16("graphics/slot_machine/unk_8465524.gbapal");
static const u32 gUnknown_8465544[] = INCBIN_U32("graphics/slot_machine/unk_8465544.4bpp.lz"); static const u32 sSpriteTiles_Digits[] = INCBIN_U32("graphics/slot_machine/unk_8465544.4bpp.lz");
static const struct CompressedSpriteSheet gUnknown_84655B0[] = { static const struct CompressedSpriteSheet sSpriteSheets[] = {
{(const void *)gUnknown_8464A14, 0xe00, 0}, {(const void *)sSpriteTiles_ReelIcons, 0xe00, 0},
{(const void *)gUnknown_846506C, 0xc00, 1}, {(const void *)sSpriteTiles_Clefairy, 0xc00, 1},
{(const void *)gUnknown_8465544, 0x280, 2}, {(const void *)sSpriteTiles_Digits, 0x280, 2},
}; };
static const struct SpritePalette gUnknown_84655C8[] = { static const struct SpritePalette sSpritePalettes[] = {
{gUnknown_8464974, 0}, {sSpritePal_ReelIcons, 0},
{gUnknown_8464994, 1}, {gUnknown_8464994, 1},
{gUnknown_84649B4, 2}, {gUnknown_84649B4, 2},
{gUnknown_84649D4, 3}, {gUnknown_84649D4, 3},
{gUnknown_84649F4, 4}, {gUnknown_84649F4, 4},
{gUnknown_846504C, 5}, {sSpritePal_Clefairy, 5},
{gUnknown_8465524, 6}, {sSpritePal_Digits, 6},
{NULL} {NULL}
}; };
@@ -278,7 +278,7 @@ static const u8 gUnknown_84656D6[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x09, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f
}; };
static const struct OamData gUnknown_8465738 = { static const struct OamData sOamData_ReelIcons = {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL, .affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = ST_OAM_OBJ_NORMAL, .objMode = ST_OAM_OBJ_NORMAL,
@@ -294,79 +294,79 @@ static const struct OamData gUnknown_8465738 = {
.affineParam = 0 .affineParam = 0
}; };
static const union AnimCmd gUnknown_8465740[] = { static const union AnimCmd sAnimCmd_ReelIcon_7[] = {
ANIMCMD_FRAME(0x00, 4), ANIMCMD_FRAME(0x00, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465748[] = { static const union AnimCmd sAnimCmd_ReelIcon_Rocket[] = {
ANIMCMD_FRAME(0x10, 4), ANIMCMD_FRAME(0x10, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465750[] = { static const union AnimCmd sAnimCmd_ReelIcon_Pikachu[] = {
ANIMCMD_FRAME(0x20, 4), ANIMCMD_FRAME(0x20, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465758[] = { static const union AnimCmd sAnimCmd_ReelIcon_Psyduck[] = {
ANIMCMD_FRAME(0x30, 4), ANIMCMD_FRAME(0x30, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465760[] = { static const union AnimCmd sAnimCmd_ReelIcon_Cherries[] = {
ANIMCMD_FRAME(0x40, 4), ANIMCMD_FRAME(0x40, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465768[] = { static const union AnimCmd sAnimCmd_ReelIcon_Magnemite[] = {
ANIMCMD_FRAME(0x50, 4), ANIMCMD_FRAME(0x50, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465770[] = { static const union AnimCmd sAnimCmd_ReelIcon_Shellder[] = {
ANIMCMD_FRAME(0x60, 4), ANIMCMD_FRAME(0x60, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465778[] = { static const union AnimCmd sAnimCmd_ReelIcon_Pikachu_2[] = {
ANIMCMD_FRAME(0x20, 4), ANIMCMD_FRAME(0x20, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465780[] = { static const union AnimCmd sAnimCmd_ReelIcon_Psyduck_2[] = {
ANIMCMD_FRAME(0x30, 4), ANIMCMD_FRAME(0x30, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465788[] = { static const union AnimCmd sAnimCmd_ReelIcon_Cherries_2[] = {
ANIMCMD_FRAME(0x40, 4), ANIMCMD_FRAME(0x40, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465790[] = { static const union AnimCmd sAnimCmd_ReelIcon_Magnemite_2[] = {
ANIMCMD_FRAME(0x50, 4), ANIMCMD_FRAME(0x50, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465798[] = { static const union AnimCmd sAnimCmd_ReelIcon_Shellder_2[] = {
ANIMCMD_FRAME(0x60, 4), ANIMCMD_FRAME(0x60, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd *const gUnknown_84657A0[] = { static const union AnimCmd *const sAnimTable_ReelIcons[] = {
gUnknown_8465740, sAnimCmd_ReelIcon_7,
gUnknown_8465748, sAnimCmd_ReelIcon_Rocket,
gUnknown_8465750, sAnimCmd_ReelIcon_Pikachu,
gUnknown_8465758, sAnimCmd_ReelIcon_Psyduck,
gUnknown_8465760, sAnimCmd_ReelIcon_Cherries,
gUnknown_8465768, sAnimCmd_ReelIcon_Magnemite,
gUnknown_8465770, sAnimCmd_ReelIcon_Shellder,
gUnknown_8465778, sAnimCmd_ReelIcon_Pikachu_2,
gUnknown_8465780, sAnimCmd_ReelIcon_Psyduck_2,
gUnknown_8465788, sAnimCmd_ReelIcon_Cherries_2,
gUnknown_8465790, sAnimCmd_ReelIcon_Magnemite_2,
gUnknown_8465798 sAnimCmd_ReelIcon_Shellder_2
}; };
static const union AffineAnimCmd gUnknown_84657D0[] = { static const union AffineAnimCmd gUnknown_84657D0[] = {
@@ -378,11 +378,17 @@ static const union AffineAnimCmd *const gUnknown_84657E0[] = {
gUnknown_84657D0 gUnknown_84657D0
}; };
static const struct SpriteTemplate gUnknown_84657E4 = { static const struct SpriteTemplate sSpriteTemplate_ReelIcons = {
0, 0, &gUnknown_8465738, gUnknown_84657A0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy .tileTag = 0,
.paletteTag = 0,
.oam = &sOamData_ReelIcons,
.anims = sAnimTable_ReelIcons,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
}; };
static const struct OamData gUnknown_84657FC = { static const struct OamData sOamData_Digits = {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL, .objMode = ST_OAM_OBJ_NORMAL,
@@ -398,71 +404,77 @@ static const struct OamData gUnknown_84657FC = {
.affineParam = 0 .affineParam = 0
}; };
static const union AnimCmd gUnknown_8465804[] = { static const union AnimCmd sSpriteAnim_Digit0[] = {
ANIMCMD_FRAME(0x00, 4), ANIMCMD_FRAME(0x00, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_846580C[] = { static const union AnimCmd sSpriteAnim_Digit1[] = {
ANIMCMD_FRAME(0x02, 4), ANIMCMD_FRAME(0x02, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465814[] = { static const union AnimCmd sSpriteAnim_Digit2[] = {
ANIMCMD_FRAME(0x04, 4), ANIMCMD_FRAME(0x04, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_846581C[] = { static const union AnimCmd sSpriteAnim_Digit3[] = {
ANIMCMD_FRAME(0x06, 4), ANIMCMD_FRAME(0x06, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465824[] = { static const union AnimCmd sSpriteAnim_Digit4[] = {
ANIMCMD_FRAME(0x08, 4), ANIMCMD_FRAME(0x08, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_846582C[] = { static const union AnimCmd sSpriteAnim_Digit5[] = {
ANIMCMD_FRAME(0x0a, 4), ANIMCMD_FRAME(0x0a, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465834[] = { static const union AnimCmd sSpriteAnim_Digit6[] = {
ANIMCMD_FRAME(0x0c, 4), ANIMCMD_FRAME(0x0c, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_846583C[] = { static const union AnimCmd sSpriteAnim_Digit7[] = {
ANIMCMD_FRAME(0x0e, 4), ANIMCMD_FRAME(0x0e, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_8465844[] = { static const union AnimCmd sSpriteAnim_Digit8[] = {
ANIMCMD_FRAME(0x10, 4), ANIMCMD_FRAME(0x10, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gUnknown_846584C[] = { static const union AnimCmd sSpriteAnim_Digit9[] = {
ANIMCMD_FRAME(0x12, 4), ANIMCMD_FRAME(0x12, 4),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd *const gUnknown_8465854[] = { static const union AnimCmd *const sAnimTable_Digits[] = {
gUnknown_8465804, sSpriteAnim_Digit0,
gUnknown_846580C, sSpriteAnim_Digit1,
gUnknown_8465814, sSpriteAnim_Digit2,
gUnknown_846581C, sSpriteAnim_Digit3,
gUnknown_8465824, sSpriteAnim_Digit4,
gUnknown_846582C, sSpriteAnim_Digit5,
gUnknown_8465834, sSpriteAnim_Digit6,
gUnknown_846583C, sSpriteAnim_Digit7,
gUnknown_8465844, sSpriteAnim_Digit8,
gUnknown_846584C sSpriteAnim_Digit9
}; };
static const struct SpriteTemplate gUnknown_846587C = { static const struct SpriteTemplate sSpriteTemplate_Digits = {
2, 6, &gUnknown_84657FC, gUnknown_8465854, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy .tileTag = 2,
.paletteTag = 6,
.oam = &sOamData_Digits,
.anims = sAnimTable_Digits,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
}; };
static const struct OamData gUnknown_8465894 = { static const struct OamData gUnknown_8465894 = {
@@ -512,7 +524,13 @@ static const union AnimCmd *const gUnknown_84658C8[] = {
}; };
static const struct SpriteTemplate gUnknown_84658D8 = { static const struct SpriteTemplate gUnknown_84658D8 = {
1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy .tileTag = 1,
.paletteTag = 5,
.oam = &gUnknown_8465894,
.anims = gUnknown_84658C8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
}; };
bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineSetupTaskData *) = { bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineSetupTaskData *) = {
@@ -698,7 +716,7 @@ static void sub_813F84C(struct SlotMachineState * ptr)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
sSlotMachineState->field_14[i] = FALSE; sSlotMachineState->field_14[i] = FALSE;
sSlotMachineState->field_20[i] = 0; sSlotMachineState->reelPositions[i] = 0;
sSlotMachineState->field_26[i] = 0; sSlotMachineState->field_26[i] = 0;
sSlotMachineState->field_2C[i] = 21; sSlotMachineState->field_2C[i] = 21;
} }
@@ -720,12 +738,12 @@ static void sub_813F898(void)
} }
else else
{ {
sub_8141148(0, 0); SetSlotMachineSetupTask(0, 0);
gMain.state++; gMain.state++;
} }
break; break;
case 1: case 1:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
{ {
sSlotMachineState->field_10 = CreateTask(MainTask_SlotsGameLoop, 0); sSlotMachineState->field_10 = CreateTask(MainTask_SlotsGameLoop, 0);
sSlotMachineState->field_11 = CreateTask(sub_8140060, 1); sSlotMachineState->field_11 = CreateTask(sub_8140060, 1);
@@ -760,6 +778,7 @@ static void MainTask_SlotsGameLoop(u8 taskId)
switch (data[0]) switch (data[0])
{ {
case 0: case 0:
// Betting Phase
if (GetCoins() == 0) if (GetCoins() == 0)
{ {
SetMainTask(MainTask_NoCoinsGameOver); SetMainTask(MainTask_NoCoinsGameOver);
@@ -769,8 +788,8 @@ static void MainTask_SlotsGameLoop(u8 taskId)
sSlotMachineState->bet++; sSlotMachineState->bet++;
RemoveCoins(1); RemoveCoins(1);
PlaySE(SE_REGI); PlaySE(SE_REGI);
sub_8141148(8, 0); SetSlotMachineSetupTask(8, 0);
sub_8141148(2, 1); SetSlotMachineSetupTask(2, 1);
data[0] = 1; data[0] = 1;
} }
else if (JOY_NEW(R_BUTTON)) else if (JOY_NEW(R_BUTTON))
@@ -787,8 +806,8 @@ static void MainTask_SlotsGameLoop(u8 taskId)
SetCoins(0); SetCoins(0);
} }
PlaySE(SE_REGI); PlaySE(SE_REGI);
sub_8141148(8, 0); SetSlotMachineSetupTask(8, 0);
sub_8141148(2, 1); SetSlotMachineSetupTask(2, 1);
data[0] = 1; data[0] = 1;
} }
else if (JOY_NEW(A_BUTTON) && sSlotMachineState->bet != 0) else if (JOY_NEW(A_BUTTON) && sSlotMachineState->bet != 0)
@@ -805,7 +824,7 @@ static void MainTask_SlotsGameLoop(u8 taskId)
} }
break; break;
case 1: case 1:
if (!sub_8141180(0) && !sub_8141180(1)) if (!IsSlotMachineSetupTaskActive(0) && !IsSlotMachineSetupTaskActive(1))
{ {
if (sSlotMachineState->bet == 3 || GetCoins() == 0) if (sSlotMachineState->bet == 3 || GetCoins() == 0)
data[0] = 2; data[0] = 2;
@@ -818,11 +837,11 @@ static void MainTask_SlotsGameLoop(u8 taskId)
sub_81409B4(); sub_81409B4();
sub_8140148(); sub_8140148();
sSlotMachineState->field_06 = 0; sSlotMachineState->field_06 = 0;
sub_8141148(3, 0); SetSlotMachineSetupTask(3, 0);
data[0] = 3; data[0] = 3;
break; break;
case 3: case 3:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
{ {
if (JOY_NEW(A_BUTTON)) if (JOY_NEW(A_BUTTON))
{ {
@@ -834,12 +853,12 @@ static void MainTask_SlotsGameLoop(u8 taskId)
} }
break; break;
case 4: case 4:
if (sub_81401A0(sSlotMachineState->field_06) == 0 && !sub_8141180(0)) if (sub_81401A0(sSlotMachineState->field_06) == 0 && !IsSlotMachineSetupTaskActive(0))
{ {
sSlotMachineState->field_06++; sSlotMachineState->field_06++;
if (sSlotMachineState->field_06 >= 3) if (sSlotMachineState->field_06 >= 3)
{ {
sSlotMachineState->slotRewardClass = sub_8140A80(); sSlotMachineState->slotRewardClass = CalcPayout();
sSlotMachineState->bet = 0; sSlotMachineState->bet = 0;
sSlotMachineState->field_06 = 0; sSlotMachineState->field_06 = 0;
if (sSlotMachineState->slotRewardClass == 0) if (sSlotMachineState->slotRewardClass == 0)
@@ -866,11 +885,11 @@ static void MainTask_NoCoinsGameOver(u8 taskId)
switch (data[0]) switch (data[0])
{ {
case 0: case 0:
sub_8141148(9, 0); SetSlotMachineSetupTask(9, 0);
data[0]++; data[0]++;
break; break;
case 1: case 1:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
data[0]++; data[0]++;
break; break;
case 2: case 2:
@@ -887,22 +906,22 @@ static void MainTask_ShowHelp(u8 taskId)
switch (data[0]) switch (data[0])
{ {
case 0: case 0:
sub_8141148(14, 0); SetSlotMachineSetupTask(14, 0);
data[0]++; data[0]++;
break; break;
case 1: case 1:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
data[0]++; data[0]++;
break; break;
case 2: case 2:
if (JOY_NEW(DPAD_LEFT)) if (JOY_NEW(DPAD_LEFT))
{ {
sub_8141148(15, 0); SetSlotMachineSetupTask(15, 0);
data[0]++; data[0]++;
} }
break; break;
case 3: case 3:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
SetMainTask(MainTask_SlotsGameLoop); SetMainTask(MainTask_SlotsGameLoop);
break; break;
} }
@@ -915,11 +934,11 @@ static void MainTask_ConfirmExitGame(u8 taskId)
switch (data[0]) switch (data[0])
{ {
case 0: case 0:
sub_8141148(10, 0); SetSlotMachineSetupTask(10, 0);
data[0]++; data[0]++;
break; break;
case 1: case 1:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
data[0]++; data[0]++;
break; break;
case 2: case 2:
@@ -927,22 +946,22 @@ static void MainTask_ConfirmExitGame(u8 taskId)
{ {
case 0: case 0:
AddCoins(sSlotMachineState->bet); AddCoins(sSlotMachineState->bet);
sub_8141148(8, 0); SetSlotMachineSetupTask(8, 0);
data[0] = 3; data[0] = 3;
break; break;
case 1: case 1:
case -1: case -1:
sub_8141148(11, 0); SetSlotMachineSetupTask(11, 0);
data[0] = 4; data[0] = 4;
break; break;
} }
break; break;
case 3: case 3:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
SetMainTask(MainTask_ExitSlots); SetMainTask(MainTask_ExitSlots);
break; break;
case 4: case 4:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
SetMainTask(MainTask_SlotsGameLoop); SetMainTask(MainTask_SlotsGameLoop);
break; break;
} }
@@ -955,7 +974,7 @@ static void MainTask_DarnNoPayout(u8 taskId)
switch (data[0]) switch (data[0])
{ {
case 0: case 0:
sub_8141148(6, 0); SetSlotMachineSetupTask(6, 0);
data[1] = 0; data[1] = 0;
data[0]++; data[0]++;
break; break;
@@ -963,14 +982,14 @@ static void MainTask_DarnNoPayout(u8 taskId)
data[1]++; data[1]++;
if (data[1] > 60) if (data[1] > 60)
{ {
sub_8141148(7, 0); SetSlotMachineSetupTask(7, 0);
sub_8141148(2, 1); SetSlotMachineSetupTask(2, 1);
sub_8141148(13, 2); SetSlotMachineSetupTask(13, 2);
data[0]++; data[0]++;
} }
break; break;
case 2: case 2:
if (!sub_8141180(0) && !sub_8141180(1) && !sub_8141180(2)) if (!IsSlotMachineSetupTaskActive(0) && !IsSlotMachineSetupTaskActive(1) && !IsSlotMachineSetupTaskActive(2))
SetMainTask(MainTask_SlotsGameLoop); SetMainTask(MainTask_SlotsGameLoop);
break; break;
} }
@@ -987,8 +1006,8 @@ static void MainTask_WinHandlePayout(u8 taskId)
PlayFanfare(MUS_ME_B_BIG); PlayFanfare(MUS_ME_B_BIG);
else else
PlayFanfare(MUS_ME_B_SMALL); PlayFanfare(MUS_ME_B_SMALL);
sub_8141148(8, 0); SetSlotMachineSetupTask(8, 0);
sub_8141148(4, 1); SetSlotMachineSetupTask(4, 1);
data[1] = 8; data[1] = 8;
data[0]++; data[0]++;
break; break;
@@ -1003,7 +1022,7 @@ static void MainTask_WinHandlePayout(u8 taskId)
} }
break; break;
case 2: case 2:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
{ {
if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON)) if (IsFanfareTaskInactive() && JOY_NEW(START_BUTTON))
{ {
@@ -1027,28 +1046,28 @@ static void MainTask_WinHandlePayout(u8 taskId)
data[1] = 2; data[1] = 2;
} }
} }
sub_8141148(8, 0); SetSlotMachineSetupTask(8, 0);
if (sSlotMachineState->payout == 0) if (sSlotMachineState->payout == 0)
data[0]++; data[0]++;
} }
break; break;
case 3: case 3:
if (IsFanfareTaskInactive() && !sub_8141180(0)) if (IsFanfareTaskInactive() && !IsSlotMachineSetupTaskActive(0))
{ {
sub_8141148(5, 0); SetSlotMachineSetupTask(5, 0);
data[0]++; data[0]++;
} }
break; break;
case 4: case 4:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
{ {
sub_8141148(2, 0); SetSlotMachineSetupTask(2, 0);
sub_8141148(13, 1); SetSlotMachineSetupTask(13, 1);
data[0]++; data[0]++;
} }
break; break;
case 5: case 5:
if (!sub_8141180(0) && !sub_8141180(1)) if (!IsSlotMachineSetupTaskActive(0) && !IsSlotMachineSetupTaskActive(1))
SetMainTask(MainTask_SlotsGameLoop); SetMainTask(MainTask_SlotsGameLoop);
break; break;
} }
@@ -1061,11 +1080,11 @@ static void MainTask_ExitSlots(u8 taskId)
switch (data[0]) switch (data[0])
{ {
case 0: case 0:
sub_8141148(1, 0); SetSlotMachineSetupTask(1, 0);
data[0]++; data[0]++;
break; break;
case 1: case 1:
if (!sub_8141180(0)) if (!IsSlotMachineSetupTaskActive(0))
{ {
SetMainCallback2(sSlotMachineState->savedCallback); SetMainCallback2(sSlotMachineState->savedCallback);
sub_813F92C(); sub_813F92C();
@@ -1090,24 +1109,24 @@ static void sub_8140060(u8 taskId)
{ {
if (sSlotMachineState->field_14[i] || sSlotMachineState->field_26[i] != 0) if (sSlotMachineState->field_14[i] || sSlotMachineState->field_26[i] != 0)
{ {
if (sSlotMachineState->field_26[i] != 0 || sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) if (sSlotMachineState->field_26[i] != 0 || sSlotMachineState->reelPositions[i] != sSlotMachineState->field_2C[i])
{ {
sSlotMachineState->field_26[i]++; sSlotMachineState->field_26[i]++;
if (sSlotMachineState->field_26[i] > 2) if (sSlotMachineState->field_26[i] > 2)
{ {
sSlotMachineState->field_26[i] = 0; sSlotMachineState->field_26[i] = 0;
sSlotMachineState->field_20[i]--; sSlotMachineState->reelPositions[i]--;
if (sSlotMachineState->field_20[i] < 0) if (sSlotMachineState->reelPositions[i] < 0)
sSlotMachineState->field_20[i] = 20; sSlotMachineState->reelPositions[i] = 20;
} }
if (sSlotMachineState->field_20[i] != sSlotMachineState->field_2C[i]) if (sSlotMachineState->reelPositions[i] != sSlotMachineState->field_2C[i])
continue; continue;
} }
sSlotMachineState->field_2C[i] = 21; sSlotMachineState->field_2C[i] = 21;
sSlotMachineState->field_14[i] = FALSE; sSlotMachineState->field_14[i] = FALSE;
} }
} }
sub_8140D7C(sSlotMachineState->field_20, sSlotMachineState->field_26); sub_8140D7C(sSlotMachineState->reelPositions, sSlotMachineState->field_26);
} }
static void sub_8140148(void) static void sub_8140148(void)
@@ -1143,7 +1162,7 @@ static bool32 sub_81401A0(u16 whichReel)
static s16 sub_81401B4(u16 whichReel) static s16 sub_81401B4(u16 whichReel)
{ {
s16 position = sSlotMachineState->field_20[whichReel]; s16 position = sSlotMachineState->reelPositions[whichReel];
if (sSlotMachineState->field_26[whichReel] != 0) if (sSlotMachineState->field_26[whichReel] != 0)
{ {
position--; position--;
@@ -1226,7 +1245,7 @@ static void sub_81403BC(u16 whichReel)
u8 sp4[5]; u8 sp4[5];
r7 = sSlotMachineState->field_32[0]; r7 = sSlotMachineState->field_32[0];
r4 = sSlotMachineState->field_20[r7] + 1; r4 = sSlotMachineState->reelPositions[r7] + 1;
if (r4 >= 21) if (r4 >= 21)
r4 = 0; r4 = 0;
sp10 = sub_81401B4(whichReel); sp10 = sub_81401B4(whichReel);
@@ -1384,8 +1403,8 @@ static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2)
s32 i; s32 i;
r6++; r6--; r6++; r6--;
r6 = sSlotMachineState->field_20[sSlotMachineState->field_32[0]] + 1; r6 = sSlotMachineState->reelPositions[sSlotMachineState->field_32[0]] + 1;
r3 = sSlotMachineState->field_20[sSlotMachineState->field_32[1]] + 1; r3 = sSlotMachineState->reelPositions[sSlotMachineState->field_32[1]] + 1;
a1++; a1++;
if (r6 >= 21) if (r6 >= 21)
r6 = 0; r6 = 0;
@@ -1521,81 +1540,82 @@ static void sub_8140A70(void)
sSlotMachineState->field_08 = 0; sSlotMachineState->field_08 = 0;
} }
static u16 sub_8140A80(void) static u16 CalcPayout(void)
{ {
u8 sp0[9] = {}; u8 sp0[9] = {};
s32 i; s32 i;
s32 r4, r3, r2; s32 reel1pos, reel2pos, reel3pos;
s32 r9; s32 bestMatch;
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
sSlotMachineState->field_3C[i] = 0; sSlotMachineState->winFlags[i] = FALSE;
r9 = 0; bestMatch = 0;
r4 = sSlotMachineState->field_20[0]; reel1pos = sSlotMachineState->reelPositions[0];
r3 = sSlotMachineState->field_20[1]; reel2pos = sSlotMachineState->reelPositions[1];
r2 = sSlotMachineState->field_20[2]; reel3pos = sSlotMachineState->reelPositions[2];
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
r4++; reel1pos++;
if (r4 >= 21) if (reel1pos >= 21)
r4 = 0; reel1pos = 0;
r3++; reel2pos++;
if (r3 >= 21) if (reel2pos >= 21)
r3 = 0; reel2pos = 0;
r2++; reel3pos++;
if (r2 >= 21) if (reel3pos >= 21)
r2 = 0; reel3pos = 0;
sp0[0 * 3 + i] = gUnknown_8464926[0][r4]; sp0[0 * 3 + i] = gUnknown_8464926[0][reel1pos];
sp0[1 * 3 + i] = gUnknown_8464926[1][r3]; sp0[1 * 3 + i] = gUnknown_8464926[1][reel2pos];
sp0[2 * 3 + i] = gUnknown_8464926[2][r2]; sp0[2 * 3 + i] = gUnknown_8464926[2][reel3pos];
} }
sSlotMachineState->payout = 0; sSlotMachineState->payout = 0;
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
if (sSlotMachineState->bet >= gUnknown_84648BD[i][3]) if (sSlotMachineState->bet >= gUnknown_84648BD[i][3])
{ {
int curMatch;
if (sub_81408F4(1, sp0[gUnknown_84648BD[i][0]])) if (sub_81408F4(1, sp0[gUnknown_84648BD[i][0]]))
r3 = sub_81408F4(2, sp0[gUnknown_84648BD[i][1]]) ? 2 : 1; curMatch = sub_81408F4(2, sp0[gUnknown_84648BD[i][1]]) ? 2 : 1;
else if (sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][1]] && sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][2]]) else if (sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][1]] && sp0[gUnknown_84648BD[i][0]] == sp0[gUnknown_84648BD[i][2]])
r3 = sub_814096C(sp0[gUnknown_84648BD[i][0]]); curMatch = sub_814096C(sp0[gUnknown_84648BD[i][0]]);
else else
r3 = 0; curMatch = 0;
if (r3 != 0) if (curMatch != 0)
{ {
sSlotMachineState->field_3C[i] = 1; sSlotMachineState->winFlags[i] = TRUE;
sSlotMachineState->payout += gUnknown_8464966[r3]; sSlotMachineState->payout += sPayoutTable[curMatch];
} }
if (r3 > r9) if (curMatch > bestMatch)
r9 = r3; bestMatch = curMatch;
} }
} }
return r9; return bestMatch;
} }
static u16 sub_8140BDC(void) static u16 GetPayout(void)
{ {
return sSlotMachineState->payout; return sSlotMachineState->payout;
} }
static u8 sub_8140BEC(void) static u8 GetPlayerBet(void)
{ {
return sSlotMachineState->bet; return sSlotMachineState->bet;
} }
static bool32 sub_8140BF8(s32 a0) static bool32 GetWinFlagByLine(int a0)
{ {
return sSlotMachineState->field_3C[a0]; return sSlotMachineState->winFlags[a0];
} }
static bool32 sub_8140C0C(void) static bool32 sub_8140C0C(void)
{ {
s32 i; s32 i;
for (i = 0; i < NELEMS(gUnknown_84655B0); i++) for (i = 0; i < NELEMS(sSpriteSheets); i++)
LoadCompressedSpriteSheet(&gUnknown_84655B0[i]); LoadCompressedSpriteSheet(&sSpriteSheets[i]);
LoadSpritePalettes(gUnknown_84655C8); LoadSpritePalettes(sSpritePalettes);
sSlotMachineGfxManager = Alloc(sizeof(*sSlotMachineGfxManager)); sSlotMachineGfxManager = Alloc(sizeof(*sSlotMachineGfxManager));
if (sSlotMachineGfxManager == NULL) if (sSlotMachineGfxManager == NULL)
return FALSE; return FALSE;
@@ -1636,7 +1656,7 @@ static void sub_8140CA0(void)
{ {
for (j = 0; j < 5; j++) for (j = 0; j < 5; j++)
{ {
spriteId = CreateSprite(&gUnknown_84657E4, 80 + 40 * i, 44 + 24 * j, 2); spriteId = CreateSprite(&sSpriteTemplate_ReelIcons, 80 + 40 * i, 44 + 24 * j, 2);
animId = gUnknown_8464926[i][j]; animId = gUnknown_8464926[i][j];
sprite = &gSprites[spriteId]; sprite = &gSprites[spriteId];
StartSpriteAnim(sprite, animId); StartSpriteAnim(sprite, animId);
@@ -1684,7 +1704,7 @@ static void sub_8140D7C(const s16 * a0, const s16 * a1)
} }
} }
static void sub_8140E40(void) static void HBlankCB_SlotMachine(void)
{ {
s32 vcount = REG_VCOUNT - 0x2B; s32 vcount = REG_VCOUNT - 0x2B;
if (vcount >= 0 && vcount < 0x54) if (vcount >= 0 && vcount < 0x54)
@@ -1706,9 +1726,9 @@ static void sub_8140E9C(void)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
spriteId = CreateSprite(&gUnknown_846587C, 0x55 + 7 * i, 30, 0); spriteId = CreateSprite(&sSpriteTemplate_Digits, 0x55 + 7 * i, 30, 0);
sSlotMachineGfxManager->field_48[i] = &gSprites[spriteId]; sSlotMachineGfxManager->field_48[i] = &gSprites[spriteId];
spriteId = CreateSprite(&gUnknown_846587C, 0x85 + 7 * i, 30, 0); spriteId = CreateSprite(&sSpriteTemplate_Digits, 0x85 + 7 * i, 30, 0);
sSlotMachineGfxManager->field_58[i] = &gSprites[spriteId]; sSlotMachineGfxManager->field_58[i] = &gSprites[spriteId];
} }
} }
@@ -1716,7 +1736,7 @@ static void sub_8140E9C(void)
static void sub_8140F2C(void) static void sub_8140F2C(void)
{ {
s32 coins = GetCoins(); s32 coins = GetCoins();
s32 payout = sub_8140BDC(); s32 payout = GetPayout();
s32 i; s32 i;
s32 divisor = 1000; s32 divisor = 1000;
s32 quotient; s32 quotient;
@@ -1761,7 +1781,7 @@ static bool32 sub_814104C(void)
if (ptr == NULL) if (ptr == NULL)
return FALSE; return FALSE;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
ptr->field_0000[i].unk3 = 0; ptr->tasks[i].active = 0;
ptr->field_0028 = 0; ptr->field_0028 = 0;
SetWordTaskArg(CreateTask(sub_81410CC, 2), 0, (uintptr_t)ptr); SetWordTaskArg(CreateTask(sub_81410CC, 2), 0, (uintptr_t)ptr);
return FALSE; return FALSE;
@@ -1771,7 +1791,7 @@ static void sub_8141094(void)
{ {
if (FuncIsActiveTask(sub_81410CC)) if (FuncIsActiveTask(sub_81410CC))
{ {
Free(sub_814112C()); Free(GetSlotMachineSetupTaskDataPtr());
DestroyTask(FindTaskIdByFunc(sub_81410CC)); DestroyTask(FindTaskIdByFunc(sub_81410CC));
} }
sub_8140C50(); sub_8140C50();
@@ -1785,34 +1805,34 @@ static void sub_81410CC(u8 taskId)
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
if (ptr->field_0000[i].unk3) if (ptr->tasks[i].active)
ptr->field_0000[i].unk3 = gUnknown_84658F0[ptr->field_0000[i].unk0](&ptr->field_0000[i].unk2, ptr); ptr->tasks[i].active = gUnknown_84658F0[ptr->tasks[i].funcno](&ptr->tasks[i].state, ptr);
} }
} }
static void sub_8141118(void) static void VBlankCB_SlotMachine(void)
{ {
TransferPlttBuffer(); TransferPlttBuffer();
LoadOam(); LoadOam();
ProcessSpriteCopyRequests(); ProcessSpriteCopyRequests();
} }
static struct SlotMachineSetupTaskData * sub_814112C(void) static struct SlotMachineSetupTaskData * GetSlotMachineSetupTaskDataPtr(void)
{ {
return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0); return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0);
} }
static void sub_8141148(u16 a0, u8 a1) static void SetSlotMachineSetupTask(u16 funcno, u8 taskId)
{ {
struct SlotMachineSetupTaskData * ptr = sub_814112C(); struct SlotMachineSetupTaskData * ptr = GetSlotMachineSetupTaskDataPtr();
ptr->field_0000[a1].unk0 = a0; ptr->tasks[taskId].funcno = funcno;
ptr->field_0000[a1].unk2 = 0; ptr->tasks[taskId].state = 0;
ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr); ptr->tasks[taskId].active = gUnknown_84658F0[funcno](&ptr->tasks[taskId].state, ptr);
} }
static bool32 sub_8141180(u8 a0) static bool32 IsSlotMachineSetupTaskActive(u8 taskId)
{ {
return sub_814112C()->field_0000[a0].unk3; return GetSlotMachineSetupTaskDataPtr()->tasks[taskId].active;
} }
static inline void LoadColor(u16 color, u16 *pal) static inline void LoadColor(u16 color, u16 *pal)
@@ -1846,7 +1866,7 @@ static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr)
InitBgsFromTemplates(0, gUnknown_8466B10, NELEMS(gUnknown_8466B10)); InitBgsFromTemplates(0, gUnknown_8466B10, NELEMS(gUnknown_8466B10));
InitWindows(gUnknown_8466B20); InitWindows(gUnknown_8466B20);
SetBgTilemapBuffer(3, ptr->field_205C); SetBgTilemapBuffer(3, ptr->reelPositions5C);
FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32);
CopyBgTilemapBufferToVram(3); CopyBgTilemapBufferToVram(3);
@@ -1888,8 +1908,8 @@ static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr)
sub_8140FC4(); sub_8140FC4();
sub_8140F2C(); sub_8140F2C();
BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
SetVBlankCallback(sub_8141118); SetVBlankCallback(VBlankCB_SlotMachine);
SetHBlankCallback(sub_8140E40); SetHBlankCallback(HBlankCB_SlotMachine);
(*state)++; (*state)++;
break; break;
case 2: case 2:
@@ -2160,7 +2180,7 @@ static void sub_8141828(void)
static void sub_8141834(u16 * bgTilemapBuffer) static void sub_8141834(u16 * bgTilemapBuffer)
{ {
switch (sub_8140BEC()) switch (GetPlayerBet())
{ {
case 0: case 0:
sub_81418C4(bgTilemapBuffer, 0, 4); sub_81418C4(bgTilemapBuffer, 0, 4);
@@ -2206,7 +2226,7 @@ static void sub_814191C(u8 taskId)
LoadPalette(gUnknown_84664BC, 0x60, 0x20); LoadPalette(gUnknown_84664BC, 0x60, 0x20);
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
if (sub_8140BF8(i)) if (GetWinFlagByLine(i))
sub_81418C4(GetBgTilemapBuffer(2), i, 6); sub_81418C4(GetBgTilemapBuffer(2), i, 6);
} }
CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(2);
@@ -2251,7 +2271,7 @@ static void sub_814191C(u8 taskId)
case 2: case 2:
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
{ {
if (sub_8140BF8(i)) if (GetWinFlagByLine(i))
sub_81418C4(GetBgTilemapBuffer(2), i, 4); sub_81418C4(GetBgTilemapBuffer(2), i, 4);
} }
LoadPalette(gUnknown_8465950, 0x10, 0x20); LoadPalette(gUnknown_8465950, 0x10, 0x20);
@@ -2274,12 +2294,12 @@ static void sub_8141AD8(u8 cursorPos)
{ {
CreateYesNoMenu(&gUnknown_8466C38, 2, 0, 2, 10, 13, cursorPos); CreateYesNoMenu(&gUnknown_8466C38, 2, 0, 2, 10, 13, cursorPos);
Menu_MoveCursorNoWrapAround(cursorPos); Menu_MoveCursorNoWrapAround(cursorPos);
sub_814112C()->field_0028 = TRUE; GetSlotMachineSetupTaskDataPtr()->field_0028 = TRUE;
} }
static void sub_8141B18(void) static void sub_8141B18(void)
{ {
struct SlotMachineSetupTaskData * data = sub_814112C(); struct SlotMachineSetupTaskData * data = GetSlotMachineSetupTaskDataPtr();
if (data->field_0028) if (data->field_0028)
{ {
DestroyYesNoMenu(); DestroyYesNoMenu();
@@ -2290,7 +2310,7 @@ static void sub_8141B18(void)
static void sub_8141B34(void) static void sub_8141B34(void)
{ {
s32 i, j; s32 i, j;
struct SlotMachineSetupTaskData * data = sub_814112C(); struct SlotMachineSetupTaskData * data = GetSlotMachineSetupTaskDataPtr();
u16 * buffer = GetBgTilemapBuffer(2); u16 * buffer = GetBgTilemapBuffer(2);
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
@@ -2309,7 +2329,7 @@ static void sub_8141BA0(u8 reel)
if (reel < 3) if (reel < 3)
{ {
s32 i; s32 i;
struct SlotMachineSetupTaskData * data = sub_814112C(); struct SlotMachineSetupTaskData * data = GetSlotMachineSetupTaskDataPtr();
u16 * buffer = GetBgTilemapBuffer(2); u16 * buffer = GetBgTilemapBuffer(2);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
@@ -2322,7 +2342,7 @@ static void sub_8141BA0(u8 reel)
static void sub_8141BE4(void) static void sub_8141BE4(void)
{ {
s32 i, j; s32 i, j;
struct SlotMachineSetupTaskData * data = sub_814112C(); struct SlotMachineSetupTaskData * data = GetSlotMachineSetupTaskDataPtr();
u16 * buffer = GetBgTilemapBuffer(2); u16 * buffer = GetBgTilemapBuffer(2);
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
@@ -2337,6 +2357,6 @@ static void sub_8141BE4(void)
static void sub_8141C30(u8 a0, u8 a1) static void sub_8141C30(u8 a0, u8 a1)
{ {
sub_814112C()->field_0020 = a0; GetSlotMachineSetupTaskDataPtr()->field_0020 = a0;
sub_8141148(12, a1); SetSlotMachineSetupTask(12, a1);
} }