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