summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhondew <pokehondew@gmail.com>2019-02-07 11:24:09 -0500
committerhuderlem <huderlem@gmail.com>2019-02-28 21:21:56 -0600
commit5c8cc5225ff7c11533f8421039e6e9e75adcee90 (patch)
treef8cb9ba1f8a9a08537a2f2ade3dd93d1ec81d6bb /src
parentbaf95a8e7ab5bf295f10c4e30d043c9629f2d2a3 (diff)
document slot machine
Diffstat (limited to 'src')
-rw-r--r--src/roulette.c4
-rw-r--r--src/slot_machine.c1872
-rw-r--r--src/task.c3
-rw-r--r--src/tv.c16
4 files changed, 996 insertions, 899 deletions
diff --git a/src/roulette.c b/src/roulette.c
index a6a020f39..b19750f2a 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -996,7 +996,7 @@ static void sub_81405CC(void)
taskId = gUnknown_0203AB88->varA4 = CreateTask(sub_81408A8, 0);
gTasks[taskId].data[6] = 6;
gTasks[taskId].data[13] = GetCoins();
- sub_80EDE84(GetCoins());
+ reportPlayedRoulette(GetCoins());
gUnknown_0203AB88->varA5 = CreateTask(sub_8140814, 1);
SetMainCallback2(sub_8140238);
return;
@@ -1964,7 +1964,7 @@ static void sub_8141DE4(u8 taskId)
gSpecialVar_0x8004 = TRUE;
else
gSpecialVar_0x8004 = FALSE;
- sub_80EDD78(GetCoins());
+ reportNewCoinTotal(GetCoins());
BeginHardwarePaletteFade(0xFF, 0, 0, 16, 0);
gTasks[taskId].func = sub_8141E7C;
}
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 0871506cd..7552e755c 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -59,34 +59,34 @@ enum
struct SlotMachineEwramStruct
{
- /*0x00*/ u8 state;
- /*0x01*/ u8 unk01;
+ /*0x00*/ u8 slotActionPtr;
+ /*0x01*/ u8 machineId;
/*0x02*/ u8 pikaPower;
- /*0x03*/ u8 unk03;
- /*0x04*/ u8 unk04;
- /*0x05*/ u8 unk05;
- /*0x06*/ u8 unk06;
- /*0x07*/ u8 unk07;
+ /*0x03*/ u8 luckyGame;
+ /*0x04*/ u8 luckyFlags;
+ /*0x05*/ u8 reelTimeDraw;
+ /*0x06*/ u8 isBiasTagMatchPossible; // tentative
+ /*0x07*/ u8 biasTag;
/*0x08*/ u16 matchedSymbols;
- /*0x0A*/ u8 unk0A;
- /*0x0B*/ u8 unk0B;
+ /*0x0A*/ u8 fairRollsLeft;
+ /*0x0B*/ u8 fairRollsUsed;
/*0x0C*/ s16 coins;
/*0x0E*/ s16 payout;
- /*0x10*/ s16 unk10;
+ /*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0)
/*0x12*/ s16 bet;
- /*0x14*/ s16 unk14;
- /*0x16*/ s16 unk16;
- /*0x18*/ s16 unk18;
- /*0x1A*/ s16 unk1A;
- /*0x1C*/ s16 unk1C[3];
- /*0x22*/ u16 unk22[3];
+ /*0x14*/ s16 reelTimePixelOffset;
+ /*0x16*/ s16 reelTimePosition;
+ /*0x18*/ s16 currReel;
+ /*0x1A*/ s16 reelIncrement;
+ /*0x1C*/ s16 reelPixelOffsets[3];
+ /*0x22*/ u16 stopReelPixelOffset[3];
/*0x28*/ s16 reelPositions[3];
- /*0x2E*/ s16 unk2E[3];
- /*0x34*/ s16 unk34[3];
+ /*0x2E*/ s16 reelExtraTurns[3];
+ /*0x34*/ s16 biasTagFinalPositions[3];
/*0x3A*/ u8 reelTasks[3];
- /*0x3D*/ u8 unk3D;
- /*0x3E*/ u8 unk3E;
- /*0x3F*/ u8 unk3F;
+ /*0x3D*/ u8 unkTaskPointer3D;
+ /*0x3E*/ u8 unkTaskPointer;
+ /*0x3F*/ u8 reelTimeSprite3F;
/*0x40*/ u8 unk40;
/*0x41*/ u8 unk41;
/*0x42*/ u8 unk42;
@@ -95,8 +95,8 @@ struct SlotMachineEwramStruct
/*0x49*/ u8 unk49[2];
/*0x49*/ u8 unk4B[3];
/*0x4E*/ u8 unk4E[2];
- /*0x50*/ u8 unk50[2];
- /*0x52*/ u8 unk52[2];
+ /*0x50*/ u8 reelTimeSprites1[2];
+ /*0x52*/ u8 reelTimeSprites2[2];
/*0x54*/ u8 unk54[4];
/*0x58*/ u16 win0h;
/*0x5a*/ u16 win0v;
@@ -117,7 +117,7 @@ struct UnkStruct1
/*static */void CB2_SlotMachineSetup(void);
/*static */void CB2_SlotMachineLoop(void);
-/*static */void PlaySlotMachine_Internal(u8 arg0, MainCallback cb);
+/*static */void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback CB2_ReturnToFieldContinueScriptPlayMapMusic);
/*static */void SlotMachineDummyTask(u8 taskId);
/*static */void SlotMachineSetup_0_0(void);
/*static */void SlotMachineSetup_6_2(void);
@@ -133,88 +133,88 @@ struct UnkStruct1
/*static */void SlotMachineSetup_8_0(void);
/*static */void SlotMachineSetup_9_0(void);
/*static */void SlotMachineSetup_10_0(void);
-/*static */void SlotMachineSetup_10_1(void);
-/*static */void sub_8101D04(void);
+/*static */void SlotMachineSetupGameplayTasks(void);
+/*static */void GameplayTasks_Slot(void);
/*static */void sub_8104DA4(void);
-/*static */void sub_8101D24(u8 taskId);
-/*static */bool8 sub_8101D5C(struct Task *task);
-/*static */bool8 sub_8101D8C(struct Task *task);
-/*static */bool8 sub_8101DB0(struct Task *task);
-/*static */bool8 sub_8101DF4(struct Task *task);
-/*static */bool8 sub_8101E10(struct Task *task);
-/*static */bool8 sub_8101E3C(struct Task *task);
-/*static */bool8 sub_8101F44(struct Task *task);
-/*static */bool8 sub_8101F60(struct Task *task);
-/*static */bool8 sub_8101F88(struct Task *task);
-/*static */bool8 sub_8101FA4(struct Task *task);
-/*static */bool8 sub_8102008(struct Task *task);
-/*static */bool8 sub_8102034(struct Task *task);
-/*static */bool8 sub_8102058(struct Task *task);
-/*static */bool8 sub_8102090(struct Task *task);
-/*static */bool8 sub_81020C8(struct Task *task);
-/*static */bool8 sub_81021E0(struct Task *task);
-/*static */bool8 sub_81021FC(struct Task *task);
-/*static */bool8 sub_8102264(struct Task *task);
-/*static */bool8 sub_81022A0(struct Task *task);
-/*static */bool8 sub_81022CC(struct Task *task);
-/*static */bool8 sub_81022F0(struct Task *task);
-/*static */bool8 sub_8102318(struct Task *task);
-/*static */bool8 sub_8102344(struct Task *task);
-/*static */bool8 sub_810239C(struct Task *task);
-/*static */bool8 sub_81023B8(struct Task *task);
-/*static */bool8 sub_81023E0_(struct Task *task);
-/*static */bool8 sub_81023FC(struct Task *task);
-/*static */bool8 sub_8102424(struct Task *task);
-/*static */bool8 sub_8102460(struct Task *task);
-/*static */void sub_8102484(void);
-/*static */void sub_81024F0(void);
-/*static */bool8 sub_8102540_(void);
-/*static */u8 sub_8102578(void);
-/*static */u16 dp15_jump_random_unknown(void);
-/*static */u8 sub_81025BC(void);
+/*static */void RunSlotActions(u8 taskId);
+/*static */bool8 SlotAction_UnfadeScreen(struct Task *task);
+/*static */bool8 SlotAction_WaitForUnfade(struct Task *task);
+/*static */bool8 SlotAction_SetSlotMachineVars(struct Task *task);
+/*static */bool8 SlotAction3(struct Task *task);
+/*static */bool8 SlotAction4(struct Task *task);
+/*static */bool8 SlotAction_AwaitPlayerInput(struct Task *task);
+/*static */bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task);
+/*static */bool8 SlotAction_PlayerAcceptsNotHavingThreeCoins(struct Task *task);
+/*static */bool8 SlotAction_GivingInformation(struct Task *task);
+/*static */bool8 SlotAction9(struct Task *task);
+/*static */bool8 SlotAction10(struct Task *task);
+/*static */bool8 SlotAction11(struct Task *task);
+/*static */bool8 SlotAction_AwaitReelStop(struct Task *task);
+/*static */bool8 SlotAction_WaitForAllReelsToStop(struct Task *task);
+/*static */bool8 SlotAction_CheckMatches(struct Task *task);
+/*static */bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task);
+/*static */bool8 SlotAction_EndOfRoll(struct Task *task);
+/*static */bool8 SlotAction17(struct Task *task);
+/*static */bool8 SlotAction18(struct Task *task);
+/*static */bool8 SlotAction_Loop(struct Task *task);
+/*static */bool8 SlotAction_NoMatches(struct Task *task);
+/*static */bool8 SlotAction_PrintQuitTheGame(struct Task *task);
+/*static */bool8 SlotAction_SeeIfPlayerQuits(struct Task *task);
+/*static */bool8 SlotAction_Print9999CoinMessage(struct Task *task);
+/*static */bool8 SlotAction_Escape9999CoinMessage(struct Task *task);
+/*static */bool8 SlotAction_PrintNoMoreCoins(struct Task *task);
+/*static */bool8 SlotAction_EscapeNoMoreCoins(struct Task *task);
+/*static */bool8 SlotAction_EndGame(struct Task *task);
+/*static */bool8 SlotAction_FreeDataStructures(struct Task *task);
+/*static */void DrawForLuckyFlags(void);
+/*static */void AnyLuckyFlagsSet(void);
+/*static */bool8 IsLuckyRound(void);
+/*static */u8 AttemptsAtLuckiness1(void);
+/*static */u16 DrawNewReelIncrement(void);
+/*static */u8 AttemptsAtLuckiness2(void);
/*static */void CheckMatch(void);
/*static */void CheckMatch_CenterRow(void);
/*static */void CheckMatch_TopAndBottom(void);
/*static */void CheckMatch_Diagonals(void);
/*static */u8 GetMatchFromSymbolsInRow(u8 c1, u8 c2, u8 c3);
-/*static */void sub_8102A24(void);
-/*static */void sub_8102A64(u8 taskId);
-/*static */bool8 sub_8102A44(void);
-/*static */bool8 sub_8102A9C(struct Task *task);
-/*static */bool8 sub_8102AD0(struct Task *task);
-/*static */bool8 sub_8102B80(struct Task *task);
-/*static */u8 GetTagOfReelSymbolOnScreenAtPos(u8 x, s16 y);
-/*static */void sub_8102DA8(void);
-/*static */void sub_8102DEC(u8 a0);
+/*static */void AwardPayout(void);
+/*static */void RunAwardPayoutActions(u8 taskId);
+/*static */bool8 IsFinalTask_RunAwardPayoutActions(void);
+/*static */bool8 AwardPayoutAction1(struct Task *task);
+/*static */bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task);
+/*static */bool8 AwardPayoutAction_FreeTask(struct Task *task);
+/*static */u8 GetNearbyTag(u8 x, s16 y);
+/*static */void GameplayTask_StopReel(void);
+/*static */void ReelTasks_8102DEC(u8 a0);
/*static */void sub_8102E1C(u8 a0);
-/*static */bool8 sub_8102E40(u8 a0);
-/*static */void sub_8102E68(u8 taskId);
-/*static */bool8 sub_8102EA0(struct Task *task);
-/*static */bool8 sub_8102EA4(struct Task *task);
-/*static */bool8 sub_8102EC0(struct Task *task);
-/*static */bool8 sub_8102F4C(struct Task *task);
-/*static */bool8 sub_8103008(struct Task *task);
-/*static */bool8 sub_810305C(void);
-/*static */bool8 sub_8103154(u8 a0, u8 a1);
-/*static */bool8 sub_81031B4(u8 a0, u8 a1);
-/*static */bool8 sub_81032C0(void);
-/*static */bool8 sub_81032E8(void);
-/*static */bool8 sub_810333C(void);
-/*static */bool8 sub_81033DC(void);
-/*static */bool8 sub_810341C(u8 a0);
-/*static */bool8 sub_810347C(u8 a0);
-/*static */void sub_81034F4(void);
-/*static */void sub_8103540(void);
-/*static */void sub_8103564(void);
-/*static */void j5_08111E84(void);
-/*static */void sub_8103668(void);
-/*static */void sub_810380C(void);
+/*static */bool8 IsReelMoving(u8 a0);
+/*static */void RunReelActions(u8 taskId);
+/*static */bool8 ReelAction_StayStill(struct Task *task);
+/*static */bool8 ReelAction_Spin(struct Task *task);
+/*static */bool8 ReelAction_DecideWhereToStop(struct Task *task);
+/*static */bool8 ReelAction_TurnToSelectedTag(struct Task *task);
+/*static */bool8 ReelAction_OscillatingStop(struct Task *task);
+/*static */bool8 DecideReelTurns_BiasTag_Reel1(void);
+/*static */bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 a0, u8 a1);
+/*static */bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 a0, u8 a1);
+/*static */bool8 DecideReelTurns_BiasTag_Reel2(void);
+/*static */bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void);
+/*static */bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void);
+/*static */bool8 DecideReelTurns_BiasTag_Reel3(void);
+/*static */bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 a0);
+/*static */bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8 a0);
+/*static */void DecideReelTurns_NoBiasTag_Reel1(void);
+/*static */void DecideReelTurns_NoBiasTag_Reel2(void);
+/*static */void DecideReelTurns_NoBiasTag_Reel2_Bet1(void);
+/*static */void DecideReelTurns_NoBiasTag_Reel2_Bet2(void);
+/*static */void DecideReelTurns_NoBiasTag_Reel2_Bet3(void);
+/*static */void DecideReelTurns_NoBiasTag_Reel3(void);
/*static */void sub_8103830(void);
/*static */void sub_8103910(void);
/*static */void sub_8103A78(void);
/*static */void sub_8103C14(u8 a0);
/*static */void sub_8103C48(u8 taskId);
-/*static */void sub_8103D50(u8 a0);
+/*static */void LoadBetTiles(u8 a0);
/*static */void sub_8103C78(struct Task *task, u8 taskId);
/*static */void sub_8103CAC(struct Task *task, u8 taskId);
/*static */void sub_8103CC8(struct Task *task, u8 taskId);
@@ -229,50 +229,50 @@ struct UnkStruct1
/*static */bool8 sub_8103FA0(void);
/*static */void sub_8103FE8_(u8 taskId);
/*static */void sub_8104048(void);
-/*static */void sub_8104064(u8 pikaPower);
+/*static */void DisplayPikaPower(u8 pikaPower);
/*static */bool8 sub_81040C8(void);
/*static */void sub_81040E8(u8 taskId);
/*static */void nullsub_68(struct Task *task);
/*static */void sub_810411C(struct Task *task);
/*static */void sub_8104144(struct Task *task);
/*static */void sub_81041AC(struct Task *task);
-/*static */void sub_812D394(struct Task *task);
+/*static */void ClearTaskDataFields_2orHigher(struct Task *task);
/*static */void sub_810423C(u8 pikaPower);
-/*static */void sub_810430C(void);
-/*static */bool8 sub_810432C(void);
-/*static */void sub_810434C(u8 taskId);
-/*static */void sub_810437C(struct Task *task);
-/*static */void sub_81043EC(struct Task *task);
-/*static */void sub_8104468(struct Task *task);
-/*static */void sub_8104498(struct Task *task);
-/*static */void sub_8104548(struct Task *task);
-/*static */void sub_8104598(struct Task *task);
-/*static */void sub_81045CC(struct Task *task);
-/*static */void sub_810463C(struct Task *task);
-/*static */void sub_81046C0(struct Task *task);
-/*static */void sub_8104764(struct Task *task);
-/*static */void sub_8104794(struct Task *task);
-/*static */void sub_81047EC(struct Task *task);
-/*static */void sub_8104860(struct Task *task);
-/*static */void sub_81048A8(struct Task *task);
-/*static */void sub_81048CC(struct Task *task);
-/*static */void sub_8104940(struct Task *task);
-/*static */void sub_81049C8(struct Task *task);
-/*static */void sub_81049F8(struct Task *task);
+/*static */void BeginReelTime(void);
+/*static */bool8 IsFinalTask_RunReelTimeActions(void);
+/*static */void RunReelTimeActions(u8 taskId);
+/*static */void ReelTimeAction1(struct Task *task);
+/*static */void ReelTimeAction2(struct Task *task);
+/*static */void ReelTimeAction3(struct Task *task);
+/*static */void ReelTimeAction4(struct Task *task);
+/*static */void ReelTimeAction5(struct Task *task);
+/*static */void ReelTimeAction6(struct Task *task);
+/*static */void ReelTimeAction7(struct Task *task);
+/*static */void ReelTimeAction_LandOnOutcome(struct Task *task);
+/*static */void ReelTimeAction9(struct Task *task);
+/*static */void ReelTimeAction10(struct Task *task);
+/*static */void ReelTimeAction11(struct Task *task);
+/*static */void ReelTimeAction12(struct Task *task);
+/*static */void ReelTimeAction13(struct Task *task);
+/*static */void ReelTimeAction14(struct Task *task);
+/*static */void ReelTimeAction15(struct Task *task);
+/*static */void ReelTimeAction16(struct Task *task);
+/*static */void ReelTimeAction17(struct Task *task);
+/*static */void ReelTimeAction18(struct Task *task);
/*static */void sub_8104A40(s16 a0, s16 a1);
/*static */void sub_8104A88(s16 a0);
-/*static */void sub_8104AB8(u8 a0);
-/*static */bool8 sub_8104AEC(void);
-/*static */void sub_8104B0C(u8 taskId);
-/*static */void sub_8104B3C(struct Task *task);
-/*static */void sub_8104B60(struct Task *task);
-/*static */void sub_8104B80(struct Task *task);
-/*static */void sub_8104BC8(struct Task *task);
-/*static */void sub_812DD78(struct Task *task);
-/*static */void sub_8104BFC(struct Task *task);
-/*static */void sub_812DE14(struct Task *task);
-/*static */void sub_812DE30(struct Task *task);
-/*static */void sub_8104C44(struct Task *task);
+/*static */void OpenInfoBox(u8 a0);
+/*static */bool8 ClosedInfoBox(void);
+/*static */void RunInfoBoxActions(u8 taskId);
+/*static */void InfoBox_FadeIn(struct Task *task);
+/*static */void InfoBox_WaitForFade(struct Task *task);
+/*static */void InfoBox_8104B80(struct Task *task);
+/*static */void InfoBox_AwaitPlayerInput(struct Task *task);
+/*static */void InfoBox_AddText(struct Task *task);
+/*static */void InfoBox_8104BFC(struct Task *task);
+/*static */void InfoBox_812DE14(struct Task *task);
+/*static */void InfoBox_812DE30(struct Task *task);
+/*static */void InfoBox_FreeTask(struct Task *task);
/*static */void sub_8104C5C(void);
/*static */void sub_8104CAC(u8 arg0);
/*static */bool8 sub_8104E18(void);
@@ -292,10 +292,10 @@ struct UnkStruct1
/*static */void sub_81054B8(void);
/*static */void sub_8105524(void);
/*static */void sub_8105554(void);
-/*static */void sub_8105578(void);
+/*static */void CreateReelTimeSprites1(void);
/*static */void sub_8105688(s16 a0);
/*static */void sub_81056C0(void);
-/*static */void sub_81056F0(void);
+/*static */void CreateReelTimeSprite2(void);
/*static */void sub_81057E8(s16 a0);
/*static */void sub_8105804(void);
/*static */void sub_8105854(void);
@@ -321,7 +321,7 @@ struct UnkStruct1
// Ewram variables
static EWRAM_DATA u16 *gUnknown_0203AAC8 = NULL;
-static EWRAM_DATA u16 *gUnknown_0203AACC = NULL;
+static EWRAM_DATA u16 *selectedPikaPowerTile = NULL;
static EWRAM_DATA u16 *gUnknown_0203AAD0 = NULL;
static EWRAM_DATA u8 *gUnknown_0203AAD4 = NULL;
static EWRAM_DATA u8 *gUnknown_0203AAD8 = NULL;
@@ -355,10 +355,10 @@ static IWRAM_DATA struct SpriteFrameImage *gUnknown_03001188[26];
// Const rom data.
extern const struct UnkStruct1 *const gUnknown_083ED048[];
extern const u16 gPalette_83EDE24[];
-extern const u8 gUnknown_083ECD04[][3];
-extern const u8 gUnknown_083ECE3A[];
-extern const u16 gUnknown_083ECE42[];
-extern const u16 gUnknown_083ECE48[];
+extern const u8 sSlotLuckinessTable1[][3];
+extern const u8 LuckyFlagTagOutput[];
+extern const u16 FlagsAttemptAtLuckiness1[];
+extern const u16 FlagsAttemptAtLuckiness2[];
extern const s16 gUnknown_083ECE7E[][2];
extern const SpriteCallback gUnknown_083ECF0C[];
extern const struct SpriteTemplate *const gUnknown_083EDB5C[];
@@ -369,10 +369,10 @@ extern const struct SpriteTemplate gSpriteTemplate_83ED54C;
extern const struct SpriteTemplate gSpriteTemplate_83ED534;
extern const u8 gUnknown_083ECC58[2];
extern const struct SpriteTemplate gSpriteTemplate_83ED51C;
-extern const u16 gUnknown_083ECE12[];
+extern const u16 ProbabilityTable_SkipToReelTimeAction14[];
extern const u16 *const gUnknown_083EDE10[];
-extern const u16 gUnknown_083ECE1C[][2];
-extern const u16 gUnknown_083ECE30[];
+extern const u16 ReelIncrementTable[][2];
+extern const u16 ReelTimeBonusIncrementTable[];
extern const u16 sSlotMatchFlags[];
extern const u16 sSlotPayouts[];
extern const u8 *const gUnknown_083EDCE4;
@@ -381,21 +381,21 @@ extern const u32 sReelTimeGfx[];
extern const struct SpriteSheet sSlotMachineSpriteSheets[];
extern const struct SpritePalette gSlotMachineSpritePalettes[];
extern const u16 *const gUnknown_083EDE20;
-extern const s16 gUnknown_083ECCF8[][2];
+extern const s16 sInitialReelPositions[][2];
extern const struct BgTemplate gUnknown_085A7424[4];
extern const struct WindowTemplate gUnknown_085A7434[];
-extern const u8 gUnknown_083ECD16[][6];
-extern const u8 gUnknown_083ECD28[][6];
-extern const u8 gUnknown_083ECD46[][17];
-extern const u8 gUnknown_083ECDAC[][17];
+extern const u8 sSlotLuckinessTable2[][6];
+extern const u8 sSlotLuckinessTable3[][6];
+extern const u8 ReelTimeProbabilityTable0[][17];
+extern const u8 ReelTimeProbabilityTable1[][17];
extern const u8 sSym2Match[];
extern const u8 gUnknown_083ECCF1[];
-extern const u8 sReelSymbols[][21];
+extern const u8 sReelSymbols[][REEL_NUM_TAGS];
extern const u16 *const gUnknown_083EDD08[];
extern const u16 *const gUnknown_083EDD1C[];
extern const u8 gUnknown_083EDD30[];
-extern const u8 gUnknown_083EDD35[][2];
-extern const u8 gUnknown_083EDD3B[];
+extern const u8 gBettingTilesId[][2];
+extern const u8 gNumberBettingTiles[];
extern const u16 *const gUnknown_083EDDA0[];
extern const u16 *const gUnknown_083EDDAC;
extern const u16 sReelTimeWindowTilemap[];
@@ -453,99 +453,101 @@ const struct WindowTemplate gUnknown_085A7444 =
0, 1, 3, 20, 13, 13, 1
};
-const u8 gUnknown_085A744C[] = {3, 1, 2, 0};
-
-bool8 (*const gUnknown_083ECAAC[])(struct Task *task) =
-{
- sub_8101D5C,
- sub_8101D8C,
- sub_8101DB0,
- sub_8101DF4,
- sub_8101E10,
- sub_8101E3C,
- sub_8101F44,
- sub_8101F60,
- sub_8101F88,
- sub_8101FA4,
- sub_8102008,
- sub_8102034,
- sub_8102058,
- sub_8102090,
- sub_81020C8,
- sub_81021E0,
- sub_81021FC,
- sub_8102264,
- sub_81022A0,
- sub_81022CC,
- sub_81022F0,
- sub_8102318,
- sub_8102344,
- sub_810239C,
- sub_81023B8,
- sub_81023E0_,
- sub_81023FC,
- sub_8102424,
- sub_8102460,
+const u8 gColors_ReelTimeHelp[] = {3, 1, 2, 0};
+
+bool8 (*const SlotActions[])(struct Task *task) =
+{
+ SlotAction_UnfadeScreen,
+ SlotAction_WaitForUnfade,
+ SlotAction_SetSlotMachineVars,
+ SlotAction3,
+ SlotAction4,
+ SlotAction_AwaitPlayerInput,
+ SlotAction_PrintYouDontHaveThreeCoins,
+ SlotAction_PlayerAcceptsNotHavingThreeCoins,
+ SlotAction_GivingInformation,
+ SlotAction9,
+ SlotAction10,
+ SlotAction11,
+ SlotAction_AwaitReelStop,
+ SlotAction_WaitForAllReelsToStop,
+ SlotAction_CheckMatches,
+ SlotAction_WaitForPayoutToBeAwarded,
+ SlotAction_EndOfRoll,
+ SlotAction17,
+ SlotAction18,
+ SlotAction_Loop,
+ SlotAction_NoMatches,
+ SlotAction_PrintQuitTheGame,
+ SlotAction_SeeIfPlayerQuits,
+ SlotAction_Print9999CoinMessage,
+ SlotAction_Escape9999CoinMessage,
+ SlotAction_PrintNoMoreCoins,
+ SlotAction_EscapeNoMoreCoins,
+ SlotAction_EndGame,
+ SlotAction_FreeDataStructures,
};
-bool8 (*const gUnknown_083ECB20[])(struct Task *task) =
+bool8 (*const AwardPayoutActions[])(struct Task *task) =
{
- sub_8102A9C,
- sub_8102AD0,
- sub_8102B80
+ AwardPayoutAction1,
+ AwardPayoutAction_GivePayoutToPlayer,
+ AwardPayoutAction_FreeTask
};
-bool8 (*const gUnknown_083ECB2C[])(struct Task *task) =
+bool8 (*const ReelActions[])(struct Task *task) =
{
- sub_8102EA0,
- sub_8102EA4,
- sub_8102EC0,
- sub_8102F4C,
- sub_8103008
+ ReelAction_StayStill,
+ ReelAction_Spin,
+ ReelAction_DecideWhereToStop,
+ ReelAction_TurnToSelectedTag,
+ ReelAction_OscillatingStop
};
-bool8 (*const gUnknown_083ECB40[])(void) =
+// returns True if a match with the biasTag is possible in that reel
+// also modifies data in sSlotMachine reel arrays to indicate how to get to the matching state
+bool8 (*const DecideReelTurns_BiasTag[])(void) =
{
- sub_810305C,
- sub_81032C0,
- sub_81033DC
+ DecideReelTurns_BiasTag_Reel1,
+ DecideReelTurns_BiasTag_Reel2,
+ DecideReelTurns_BiasTag_Reel3
};
-void (*const gUnknown_083ECB4C[])(void) =
+void (*const DecideReelTurns_NoBiasTag[])(void) =
{
- sub_81034F4,
- sub_8103540,
- sub_810380C
+ DecideReelTurns_NoBiasTag_Reel1,
+ DecideReelTurns_NoBiasTag_Reel2,
+ DecideReelTurns_NoBiasTag_Reel3
};
-const u16 gUnknown_085A74FC[] = {2, 4, 4, 4, 8};
+const u16 ReelStopShocks[] = {2, 4, 4, 4, 8};
-bool8 (*const gUnknown_083ECB64[])(u8 a0, u8 a1) =
+bool8 (*const DecideReelTurns_BiasTag_Reel1_Bets[])(u8 tag1, u8 tag2) =
{
- sub_8103154,
- sub_81031B4,
- sub_81031B4
+ DecideReelTurns_BiasTag_Reel1_Bet1,
+ DecideReelTurns_BiasTag_Reel1_Bet2or3,
+ DecideReelTurns_BiasTag_Reel1_Bet2or3
};
-bool8 (*const gUnknown_083ECB70[])(void) =
+bool8 (*const DecideReelTurns_BiasTag_Reel2_Bets[])(void) =
{
- sub_81032E8,
- sub_81032E8,
- sub_810333C
+ DecideReelTurns_BiasTag_Reel2_Bet1or2,
+ DecideReelTurns_BiasTag_Reel2_Bet1or2,
+ DecideReelTurns_BiasTag_Reel2_Bet3
};
-bool8 (*const gUnknown_083ECB7C[])(u8 a0) =
+bool8 (*const DecideReelTurns_BiasTag_Reel3_Bets[])(u8 biasTag) =
{
- sub_810341C,
- sub_810341C,
- sub_810347C
+ DecideReelTurns_BiasTag_Reel3_Bet1or2,
+ DecideReelTurns_BiasTag_Reel3_Bet1or2,
+ DecideReelTurns_BiasTag_Reel3_Bet3
};
-void (*const gUnknown_083ECB88[])(void) =
+void (*const DecideReelTurns_NoBiasTag_Reel2_Bets[])(void) =
{
- sub_8103564,
- j5_08111E84,
- sub_8103668
+ DecideReelTurns_NoBiasTag_Reel2_Bet1,
+ DecideReelTurns_NoBiasTag_Reel2_Bet2,
+ DecideReelTurns_NoBiasTag_Reel2_Bet3
};
void (*const gUnknown_083ECB94[])(void) =
@@ -572,57 +574,57 @@ void (*const gUnknown_083ECBB4[])(struct Task *task) =
sub_81041AC
};
-const u16 gUnknown_083ECBC4[][2] =
+const u16 pikaPowerTileTable[][2] =
{
- {0x9e, 0x6e},
- {0x9f, 0x6f},
- {0xaf, 0x7f},
+ {0x9e, 0x6e}, // {0b10011110, 0b1101110}
+ {0x9f, 0x6f}, // {0b10011111, 0b1101111}
+ {0xaf, 0x7f}, // {0b10101111, 0b1111111}
};
-void (*const gUnknown_083ECBD0[])(struct Task *task) =
-{
- sub_810437C,
- sub_81043EC,
- sub_8104468,
- sub_8104498,
- sub_8104548,
- sub_8104598,
- sub_81045CC,
- sub_810463C,
- sub_81046C0,
- sub_8104764,
- sub_8104794,
- sub_81047EC,
- sub_8104860,
- sub_81048A8,
- sub_81048CC,
- sub_8104940,
- sub_81049C8,
- sub_8104794,
- sub_81049F8
+void (*const ReelTimeActions[])(struct Task *task) =
+{
+ ReelTimeAction1,
+ ReelTimeAction2,
+ ReelTimeAction3,
+ ReelTimeAction4,
+ ReelTimeAction5,
+ ReelTimeAction6,
+ ReelTimeAction7, // does stuff with reel time data
+ ReelTimeAction_LandOnOutcome,
+ ReelTimeAction9,
+ ReelTimeAction10,
+ ReelTimeAction11,
+ ReelTimeAction12,
+ ReelTimeAction13,
+ ReelTimeAction14,
+ ReelTimeAction15,
+ ReelTimeAction16,
+ ReelTimeAction17,
+ ReelTimeAction11,
+ ReelTimeAction18
};
const u8 gUnknown_085A75C0[] = {1, 1, 2, 2};
const s16 gUnknown_085A75C4[] = {0x40, 0x30, 0x18, 0x08};
const s16 gUnknown_085A75CC[] = {10, 8, 6, 4};
-void (*const gUnknown_083ECC30[])(struct Task *task) =
-{
- sub_8104B3C,
- sub_8104B60,
- sub_8104B80,
- sub_8104B60,
- sub_812DD78,
- sub_8104B60,
- sub_8104BC8,
- sub_8104B60,
- sub_812DE14,
- sub_8104B60,
- sub_812DE30,
- sub_8104B60,
- sub_8104BFC,
- sub_8104B60,
- sub_8104C44,
+void (*const InfoBoxActions[])(struct Task *task) =
+{
+ InfoBox_FadeIn,
+ InfoBox_WaitForFade,
+ InfoBox_8104B80,
+ InfoBox_WaitForFade,
+ InfoBox_AddText,
+ InfoBox_WaitForFade,
+ InfoBox_AwaitPlayerInput,
+ InfoBox_WaitForFade,
+ InfoBox_812DE14,
+ InfoBox_WaitForFade,
+ InfoBox_812DE30,
+ InfoBox_WaitForFade,
+ InfoBox_8104BFC,
+ InfoBox_WaitForFade,
+ InfoBox_FreeTask,
};
void (*const gUnknown_083ECC54[])(struct Task *task) =
@@ -669,12 +671,12 @@ extern const struct SpriteTemplate gSpriteTemplate_83ED45C;
}
}
-void PlaySlotMachine(u8 arg0, MainCallback cb)
+void PlaySlotMachine(u8 slotMachineIndex, MainCallback CB2_ReturnToFieldContinueScriptPlayMapMusic)
{
u8 taskId;
sSlotMachine = AllocZeroed(sizeof(*sSlotMachine));
- PlaySlotMachine_Internal(arg0, cb);
+ PlaySlotMachine_Internal(slotMachineIndex, CB2_ReturnToFieldContinueScriptPlayMapMusic);
taskId = CreateTask(Task_FadeToSlotMachine, 0);
gTasks[taskId].tState = 0;
}
@@ -733,7 +735,7 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
break;
case 10:
SlotMachineSetup_10_0();
- SlotMachineSetup_10_1();
+ SlotMachineSetupGameplayTasks();
gMain.state++;
break;
case 11:
@@ -761,17 +763,18 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
SetGpuReg(REG_OFFSET_WINOUT, sSlotMachine->winOut);
}
-/*static */void PlaySlotMachine_Internal(u8 arg0, MainCallback cb)
+/*static */void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback CB2_ReturnToFieldContinueScriptPlayMapMusic)
{
struct Task *task = gTasks + CreateTask(SlotMachineDummyTask, 0xFF);
- task->data[0] = arg0;
- StoreWordInTwoHalfwords(task->data + 1, (intptr_t)cb);
+ task->data[0] = slotMachineIndex;
+ StoreWordInTwoHalfwords(task->data + 1, (intptr_t)CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
+
/*static */void sub_81019EC(void)
{
struct Task *task = gTasks + FindTaskIdByFunc(SlotMachineDummyTask);
- sSlotMachine->unk01 = task->data[0];
+ sSlotMachine->machineId = task->data[0];
LoadWordFromTwoHalfwords((u16 *)(task->data + 1), (u32 *)&sSlotMachine->prevMainCb);
}
@@ -827,37 +830,40 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(9, 8));
}
+// set up initial state of slot machine
/*static */void SlotMachineSetup_0_1(void)
{
u8 i;
- sub_81019EC();
- sSlotMachine->state = 0;
+ sub_81019EC(); // assigns sSlotMachine->machineId and other stuff
+ sSlotMachine->slotActionPtr = 0;
sSlotMachine->pikaPower = 0;
- sSlotMachine->unk03 = Random() & 1;
- sSlotMachine->unk04 = 0;
+ sSlotMachine->luckyGame = Random() & 1;
+ sSlotMachine->luckyFlags = 0;
sSlotMachine->matchedSymbols = 0;
- sSlotMachine->unk0A = 0;
- sSlotMachine->unk0B = 0;
+ sSlotMachine->fairRollsLeft = 0;
+ sSlotMachine->fairRollsUsed = 0;
sSlotMachine->coins = GetCoins();
sSlotMachine->payout = 0;
- sSlotMachine->unk10 = 0;
+ sSlotMachine->netCoinLoss = 0;
sSlotMachine->bet = 0;
- sSlotMachine->unk18 = 0;
- sSlotMachine->unk1A = 8;
+ sSlotMachine->currReel = 0;
+ sSlotMachine->reelIncrement = 8;
sSlotMachine->win0h = 0xf0;
sSlotMachine->win0v = 0xa0;
sSlotMachine->winIn = 0x3f;
sSlotMachine->winOut = 0x3f;
sSlotMachine->backupMapMusic = GetCurrentMapMusic();
+
+ // for each reel...
for (i = 0; i < 3; i++)
{
- sSlotMachine->unk22[i] = 0;
- sSlotMachine->reelPositions[i] = gUnknown_083ECCF8[i][sSlotMachine->unk03] % 21;
- sSlotMachine->unk1C[i] = 0x1f8 - sSlotMachine->reelPositions[i] * 24;
- sSlotMachine->unk1C[i] %= 0x1f8;
+ sSlotMachine->stopReelPixelOffset[i] = 0;
+ sSlotMachine->reelPositions[i] = sInitialReelPositions[i][sSlotMachine->luckyGame] % REEL_NUM_TAGS;
+ sSlotMachine->reelPixelOffsets[i] = 0x1f8 - sSlotMachine->reelPositions[i] * 24;
+ sSlotMachine->reelPixelOffsets[i] %= 0x1f8; // 0x1f8 is 540
}
- sub_80EDE70(GetCoins());
+ reportPlayedSlotMachine(GetCoins());
}
/*static */void SlotMachineSetup_3_0(void)
@@ -871,10 +877,11 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
/*static */void SlotMachineSetup_4_0(void)
{
- gUnknown_0203AACC = Alloc(8);
+ selectedPikaPowerTile = Alloc(8);
gUnknown_0203AAD0 = AllocZeroed(0xE);
gUnknown_0203AADC = AllocZeroed(8);
+ // several of these are 1 bit off from each other
gUnknown_0203AAD0[0] = 0x2051;
gUnknown_0203AAD0[1] = 0x2851;
gUnknown_0203AAD0[2] = 0x2061;
@@ -884,6 +891,7 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
gUnknown_0203AAD0[6] = 0x20BF;
}
+// machine wheel stuff
/*static */void SlotMachineSetup_5_0(void)
{
sub_8106448();
@@ -902,98 +910,100 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
sub_81050C4();
}
-/*static */void SlotMachineSetup_10_1(void)
+// create next gameplay task
+/*static */void SlotMachineSetupGameplayTasks(void)
{
sub_8104048();
- sub_8102DA8();
+ GameplayTask_StopReel();
sub_8104C5C();
- sub_8101D04();
+ GameplayTasks_Slot();
}
-/*static */void sub_8101D04(void)
+/*static */void GameplayTasks_Slot(void)
{
- sub_8101D24(CreateTask(sub_8101D24, 0));
+ RunSlotActions(CreateTask(RunSlotActions, 0));
}
-/*static */void sub_8101D24(u8 taskId)
+// task->data[0] is a timer
+/*static */void RunSlotActions(u8 taskId)
{
- while (gUnknown_083ECAAC[sSlotMachine->state](gTasks + taskId))
+ while (SlotActions[sSlotMachine->slotActionPtr](gTasks + taskId))
;
}
-/*static */bool8 sub_8101D5C(struct Task *task)
+/*static */bool8 SlotAction_UnfadeScreen(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
sub_810423C(sSlotMachine->pikaPower);
- sSlotMachine->state++;
+ sSlotMachine->slotActionPtr++;
return FALSE;
}
-/*static */bool8 sub_8101D8C(struct Task *task)
+/*static */bool8 SlotAction_WaitForUnfade(struct Task *task)
{
if (!gPaletteFade.active)
- sSlotMachine->state++;
+ sSlotMachine->slotActionPtr++;
return FALSE;
}
-/*static */bool8 sub_8101DB0(struct Task *task)
+/*static */bool8 SlotAction_SetSlotMachineVars(struct Task *task)
{
sSlotMachine->payout = 0;
sSlotMachine->bet = 0;
- sSlotMachine->unk18 = 0;
- sSlotMachine->unk04 &= 0xc0;
- sSlotMachine->state = 4;
+ sSlotMachine->currReel = 0;
+ sSlotMachine->luckyFlags &= 0xc0; // discard all but top 2 flags
+ sSlotMachine->slotActionPtr = 4;
if (sSlotMachine->coins <= 0)
{
- sSlotMachine->state = 25;
+ sSlotMachine->slotActionPtr = 25;
}
- else if (sSlotMachine->unk0A)
+ else if (sSlotMachine->fairRollsLeft)
{
- sSlotMachine->state = 3;
+ sSlotMachine->slotActionPtr = 3;
sub_8104CAC(4);
}
return TRUE;
}
-/*static */bool8 sub_8101DF4(struct Task *task)
+/*static */bool8 SlotAction3(struct Task *task)
{
if (sub_8104E18())
- sSlotMachine->state = 4;
+ sSlotMachine->slotActionPtr = 4;
return FALSE;
}
-/*static */bool8 sub_8101E10(struct Task *task)
+/*static */bool8 SlotAction4(struct Task *task)
{
sub_8104CAC(0);
- sSlotMachine->state = 5;
+ sSlotMachine->slotActionPtr = 5;
if (sSlotMachine->coins >= 9999)
- sSlotMachine->state = 23;
+ sSlotMachine->slotActionPtr = 23;
return TRUE;
}
-/*static */bool8 sub_8101E3C(struct Task *task)
+/*static */bool8 SlotAction_AwaitPlayerInput(struct Task *task)
{
s16 i;
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_8104AB8(0);
- sSlotMachine->state = 8;
+ OpenInfoBox(0);
+ sSlotMachine->slotActionPtr = 8;
}
- else if (gMain.newKeys & R_BUTTON)
+ else if (gMain.newKeys & R_BUTTON) // bet the max amount
{
if (sSlotMachine->coins - (3 - sSlotMachine->bet) >= 0)
{
for (i = sSlotMachine->bet; i < 3; i++)
- sub_8103D50(i);
+ LoadBetTiles(i);
sSlotMachine->coins -= (3 - sSlotMachine->bet);
sSlotMachine->bet = 3;
- sSlotMachine->state = 9;
+ sSlotMachine->slotActionPtr = 9;
PlaySE(SE_REGI);
}
- else
+ else // you didn't have enough coins to bet the max
{
- sSlotMachine->state = 6;
+ sSlotMachine->slotActionPtr = 6;
}
}
else
@@ -1001,135 +1011,145 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
if (gMain.newKeys & DPAD_DOWN && sSlotMachine->coins != 0)
{
PlaySE(SE_REGI);
- sub_8103D50(sSlotMachine->bet);
+ LoadBetTiles(sSlotMachine->bet);
sSlotMachine->coins--;
sSlotMachine->bet++;
}
+ // if player maxed out or finished betting
if (sSlotMachine->bet >= 3 || (sSlotMachine->bet != 0 && gMain.newKeys & A_BUTTON))
- sSlotMachine->state = 9;
+ sSlotMachine->slotActionPtr = 9;
+ // if player wants to quit
if (gMain.newKeys & B_BUTTON)
- sSlotMachine->state = 21;
+ sSlotMachine->slotActionPtr = 21;
}
return FALSE;
}
-/*static */bool8 sub_8101F44(struct Task *task)
+/*static */bool8 SlotAction_PrintYouDontHaveThreeCoins(struct Task *task)
{
NewMenuHelpers_DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
- sSlotMachine->state = 7;
+ sSlotMachine->slotActionPtr = 7;
return FALSE;
}
-/*static */bool8 sub_8101F60(struct Task *task)
+/*static */bool8 SlotAction_PlayerAcceptsNotHavingThreeCoins(struct Task *task)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
sub_8197434(0, TRUE);
- sSlotMachine->state = 5;
+ sSlotMachine->slotActionPtr = 5;
}
return FALSE;
}
-/*static */bool8 sub_8101F88(struct Task *task)
+/*static */bool8 SlotAction_GivingInformation(struct Task *task)
{
- if (sub_8104AEC())
- sSlotMachine->state = 5;
+ if (ClosedInfoBox())
+ sSlotMachine->slotActionPtr = 5;
return FALSE;
}
-/*static */bool8 sub_8101FA4(struct Task *task)
+// probably make all the slots roll
+/*static */bool8 SlotAction9(struct Task *task)
{
- sub_8102484();
+ DrawForLuckyFlags();
sub_8104DA4();
- sub_8102DEC(0);
- sub_8102DEC(1);
- sub_8102DEC(2);
- sub_80EEC80();
+ // for each reel...
+ //...do a reel task
+ ReelTasks_8102DEC(0);
+ ReelTasks_8102DEC(1);
+ ReelTasks_8102DEC(2);
+ sub_80EEC80(); // something with daily slot variable
task->data[0] = 0;
- if (sSlotMachine->unk04 & 0x20)
+ if (sSlotMachine->luckyFlags & 0x20) // bit 5 of luckyFlag set
{
- sub_810430C();
- sSlotMachine->state = 10;
+ // enter into reel time
+ BeginReelTime();
+ sSlotMachine->slotActionPtr = 10;
}
else
{
sub_8104CAC(1);
- sSlotMachine->state = 11;
+ sSlotMachine->slotActionPtr = 11;
}
- sSlotMachine->unk1A = 8;
- if (sSlotMachine->unk0A)
- sSlotMachine->unk1A = dp15_jump_random_unknown();
+ sSlotMachine->reelIncrement = 8;
+ if (sSlotMachine->fairRollsLeft)
+ // slow down the reel speed if you're really losing
+ sSlotMachine->reelIncrement = DrawNewReelIncrement();
return FALSE;
}
-/*static */bool8 sub_8102008(struct Task *task)
+/*static */bool8 SlotAction10(struct Task *task)
{
- if (sub_810432C())
+ if (IsFinalTask_RunReelTimeActions())
{
sub_8104CAC(1);
- sSlotMachine->unk04 &= 0xDF;
- sSlotMachine->state = 11;
+ // unset enter reel time flag
+ sSlotMachine->luckyFlags &= 0xDF;
+ sSlotMachine->slotActionPtr = 11;
}
return FALSE;
}
-/*static */bool8 sub_8102034(struct Task *task)
+/*static */bool8 SlotAction11(struct Task *task)
{
if (++task->data[0] >= 30)
{
- sub_81024F0();
- sSlotMachine->state = 12;
+ AnyLuckyFlagsSet();
+ sSlotMachine->slotActionPtr = 12;
}
return FALSE;
}
-/*static */bool8 sub_8102058(struct Task *task)
+/*static */bool8 SlotAction_AwaitReelStop(struct Task *task)
{
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_JYUNI);
- sub_8102E1C(sSlotMachine->unk18);
- sub_8103C14(sSlotMachine->unk18);
- sSlotMachine->state = 13;
+ sub_8102E1C(sSlotMachine->currReel);
+ sub_8103C14(sSlotMachine->currReel);
+ sSlotMachine->slotActionPtr = 13;
}
return FALSE;
}
-/*static */bool8 sub_8102090(struct Task *task)
+/*static */bool8 SlotAction_WaitForAllReelsToStop(struct Task *task)
{
- if (!sub_8102E40(sSlotMachine->unk18))
+ if (!IsReelMoving(sSlotMachine->currReel))
{
- sSlotMachine->unk18++;
- sSlotMachine->state = 12;
- if (sSlotMachine->unk18 > 2)
+ sSlotMachine->currReel++;
+ sSlotMachine->slotActionPtr = 12;
+ if (sSlotMachine->currReel > 2)
{
- sSlotMachine->state = 14;
+ sSlotMachine->slotActionPtr = 14;
}
return TRUE;
}
return FALSE;
}
-/*static */bool8 sub_81020C8(struct Task *task)
+// once all reels have stopped
+/*static */bool8 SlotAction_CheckMatches(struct Task *task)
{
- sSlotMachine->unk04 &= 0xc0;
+ // keep top 2 bits of luckyFlags
+ sSlotMachine->luckyFlags &= 0xc0;
CheckMatch();
- if (sSlotMachine->unk0A)
+ if (sSlotMachine->fairRollsLeft)
{
- sSlotMachine->unk0A--;
- sSlotMachine->unk0B++;
+ sSlotMachine->fairRollsLeft--;
+ sSlotMachine->fairRollsUsed++;
}
if (sSlotMachine->matchedSymbols)
{
- sSlotMachine->state = 15;
- sub_8102A24();
+ sSlotMachine->slotActionPtr = 15;
+ AwardPayout();
sub_8103F70();
- if ((sSlotMachine->unk10 -= sSlotMachine->payout) < 0)
+ if ((sSlotMachine->netCoinLoss -= sSlotMachine->payout) < 0)
{
- sSlotMachine->unk10 = 0;
+ sSlotMachine->netCoinLoss = 0;
}
if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED)))
{
@@ -1148,190 +1168,193 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
}
if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_MIXED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED)))
{
- sSlotMachine->unk04 &= 0x3f;
+ // clear top bits 6 and 7
+ sSlotMachine->luckyFlags &= 0x3f;
if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_BLUE) | (1 << SLOT_MACHINE_MATCHED_777_RED)))
{
- sSlotMachine->unk0A = 0;
- sSlotMachine->unk0B = 0;
- sSlotMachine->unk03 = 0;
+ sSlotMachine->fairRollsLeft = 0;
+ sSlotMachine->fairRollsUsed = 0;
+ sSlotMachine->luckyGame = 0;
if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_777_BLUE))
- sSlotMachine->unk03 = 1;
+ // this may be a bug, but if you get blue 777, the game becomes lucky
+ sSlotMachine->luckyGame = 1;
}
}
if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER) && sSlotMachine->pikaPower < 16)
{
sSlotMachine->pikaPower++;
- sub_8104064(sSlotMachine->pikaPower);
+ DisplayPikaPower(sSlotMachine->pikaPower);
}
}
else
{
sub_8104CAC(3);
- sSlotMachine->state = 20;
- if ((sSlotMachine->unk10 += sSlotMachine->bet) > 9999)
- sSlotMachine->unk10 = 9999;
+ sSlotMachine->slotActionPtr = 20;
+ if ((sSlotMachine->netCoinLoss += sSlotMachine->bet) > 9999)
+ sSlotMachine->netCoinLoss = 9999;
}
return FALSE;
}
-/*static */bool8 sub_81021E0(struct Task *task)
+/*static */bool8 SlotAction_WaitForPayoutToBeAwarded(struct Task *task)
{
- if (sub_8102A44())
- sSlotMachine->state = 16;
+ if (IsFinalTask_RunAwardPayoutActions())
+ sSlotMachine->slotActionPtr = 16;
return FALSE;
}
-/*static */bool8 sub_81021FC(struct Task *task)
+/*static */bool8 SlotAction_EndOfRoll(struct Task *task)
{
if (sub_8103FA0())
{
- sSlotMachine->state = 19;
+ sSlotMachine->slotActionPtr = 19;
if (sSlotMachine->matchedSymbols & ((1 << SLOT_MACHINE_MATCHED_777_RED) | (1 << SLOT_MACHINE_MATCHED_777_BLUE)))
IncrementGameStat(GAME_STAT_SLOT_JACKPOTS);
if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
{
- sSlotMachine->unk18 = 0;
- sSlotMachine->state = 9;
+ sSlotMachine->currReel = 0;
+ sSlotMachine->slotActionPtr = 9;
}
if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_POWER))
- sSlotMachine->state = 17;
- if (sSlotMachine->unk0A && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
+ sSlotMachine->slotActionPtr = 17;
+ if (sSlotMachine->fairRollsLeft && sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
{
sub_8104CAC(4);
- sSlotMachine->state = 18;
+ sSlotMachine->slotActionPtr = 18;
}
}
return FALSE;
}
-/*static */bool8 sub_8102264(struct Task *task)
+/*static */bool8 SlotAction17(struct Task *task)
{
if (!sub_81040C8())
{
- sSlotMachine->state = 19;
+ sSlotMachine->slotActionPtr = 19;
if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
{
- sSlotMachine->state = 9;
- if (sSlotMachine->unk0A)
+ sSlotMachine->slotActionPtr = 9;
+ if (sSlotMachine->fairRollsLeft)
{
sub_8104CAC(4);
- sSlotMachine->state = 18;
+ sSlotMachine->slotActionPtr = 18;
}
}
}
return FALSE;
}
-/*static */bool8 sub_81022A0(struct Task *task)
+/*static */bool8 SlotAction18(struct Task *task)
{
if (sub_8104E18())
{
- sSlotMachine->state = 19;
+ sSlotMachine->slotActionPtr = 19;
if (sSlotMachine->matchedSymbols & (1 << SLOT_MACHINE_MATCHED_REPLAY))
{
- sSlotMachine->state = 9;
+ sSlotMachine->slotActionPtr = 9;
}
}
return FALSE;
}
-/*static */bool8 sub_81022CC(struct Task *task)
+/*static */bool8 SlotAction_Loop(struct Task *task)
{
sub_8103D8C(0);
sub_8103D8C(1);
sub_8103D8C(2);
- sSlotMachine->state = 2;
+ sSlotMachine->slotActionPtr = 2;
return FALSE;
}
-/*static */bool8 sub_81022F0(struct Task *task)
+/*static */bool8 SlotAction_NoMatches(struct Task *task)
{
if (++task->data[1] > 64)
{
task->data[1] = 0;
- sSlotMachine->state = 19;
+ sSlotMachine->slotActionPtr = 19;
}
return FALSE;
}
-/*static */bool8 sub_8102318(struct Task *task)
+/*static */bool8 SlotAction_PrintQuitTheGame(struct Task *task)
{
NewMenuHelpers_DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_QuitTheGame, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
CreateYesNoMenuParameterized(0x15, 7, 0x214, 0x180, 0xE, 0xF);
- sSlotMachine->state = 22;
+ sSlotMachine->slotActionPtr = 22;
return FALSE;
}
-/*static */bool8 sub_8102344(struct Task *task)
+/*static */bool8 SlotAction_SeeIfPlayerQuits(struct Task *task)
{
s8 input = Menu_ProcessInputNoWrapClearOnChoose();
- if (input == 0)
+ if (input == 0) // player chooses to quit
{
sub_8197434(0, TRUE);
sub_8103D8C(0);
sub_8103D8C(1);
sub_8103D8C(2);
sSlotMachine->coins += sSlotMachine->bet;
- sSlotMachine->state = 27;
+ sSlotMachine->slotActionPtr = 27;
}
- else if (input == 1 || input == -1)
+ else if (input == 1 || input == -1) // player chooses not to quit
{
sub_8197434(0, TRUE);
- sSlotMachine->state = 5;
+ sSlotMachine->slotActionPtr = 5;
}
return FALSE;
}
-/*static */bool8 sub_810239C(struct Task *task)
+/*static */bool8 SlotAction_Print9999CoinMessage(struct Task *task)
{
NewMenuHelpers_DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
- sSlotMachine->state = 24;
+ sSlotMachine->slotActionPtr = 24;
return FALSE;
}
-/*static */bool8 sub_81023B8(struct Task *task)
+/*static */bool8 SlotAction_Escape9999CoinMessage(struct Task *task)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
sub_8197434(0, TRUE);
- sSlotMachine->state = 5;
+ sSlotMachine->slotActionPtr = 5;
}
return FALSE;
}
-/*static */bool8 sub_81023E0_(struct Task *task)
+/*static */bool8 SlotAction_PrintNoMoreCoins(struct Task *task)
{
NewMenuHelpers_DrawDialogueFrame(0, 0);
AddTextPrinterParameterized(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0);
CopyWindowToVram(0, 3);
- sSlotMachine->state = 26;
+ sSlotMachine->slotActionPtr = 26;
return FALSE;
}
-/*static */bool8 sub_81023FC(struct Task *task)
+/*static */bool8 SlotAction_EscapeNoMoreCoins(struct Task *task)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
sub_8197434(0, TRUE);
- sSlotMachine->state = 27;
+ sSlotMachine->slotActionPtr = 27;
}
return FALSE;
}
-/*static */bool8 sub_8102424(struct Task *task)
+// possibly end game
+/*static */bool8 SlotAction_EndGame(struct Task *task)
{
SetCoins(sSlotMachine->coins);
- sub_80EDD78(GetCoins());
+ reportNewCoinTotal(GetCoins());
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
- sSlotMachine->state++;
+ sSlotMachine->slotActionPtr++;
return FALSE;
}
-/*static */bool8 sub_8102460(struct Task *task)
+/*static */bool8 SlotAction_FreeDataStructures(struct Task *task)
{
if (!gPaletteFade.active)
{
@@ -1359,7 +1382,7 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
if (gUnknown_0203AAF0 != NULL)
FREE_AND_SET_NULL(gUnknown_0203AAF0);
FREE_AND_SET_NULL(gUnknown_0203AAC8);
- FREE_AND_SET_NULL(gUnknown_0203AACC);
+ FREE_AND_SET_NULL(selectedPikaPowerTile);
FREE_AND_SET_NULL(gUnknown_0203AAD0);
FREE_AND_SET_NULL(gUnknown_0203AAD4);
FREE_AND_SET_NULL(gUnknown_0203AAD8);
@@ -1373,157 +1396,161 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
return FALSE;
}
-/*static */void sub_8102484(void)
+/*static */void DrawForLuckyFlags(void)
{
- u8 r3;
+ u8 luckyAttempts;
- if (sSlotMachine->unk0A == 0)
+ if (sSlotMachine->fairRollsLeft == 0)
{
- if (!(sSlotMachine->unk04 & 0xc0))
+ if (!(sSlotMachine->luckyFlags & 0xc0)) // top 2 flags set to 0
{
- if (sub_8102540_())
+ if (IsLuckyRound())
{
- r3 = sub_8102578();
- if (r3 != 3)
+ luckyAttempts = AttemptsAtLuckiness1();
+ if (luckyAttempts != 3) // if you found a lucky number
{
- sSlotMachine->unk04 |= gUnknown_083ECE42[r3];
- if (r3 != 1)
+ // luckyAttempts == 1: reelTime flag set
+ sSlotMachine->luckyFlags |= FlagsAttemptAtLuckiness1[luckyAttempts];
+ if (luckyAttempts != 1)
{
return;
}
}
}
- r3 = sub_81025BC();
- if (r3 != 5)
+ // if you got it your first try, you get to try again for the lower lucky flags
+ luckyAttempts = AttemptsAtLuckiness2();
+ if (luckyAttempts != 5) // if you found a lucky number
{
- sSlotMachine->unk04 |= gUnknown_083ECE48[r3];
+ sSlotMachine->luckyFlags |= FlagsAttemptAtLuckiness2[luckyAttempts];
}
}
}
}
-/*static */void sub_81024F0(void)
+/*static */void AnyLuckyFlagsSet(void)
{
- sSlotMachine->unk06 = 0;
- if (sSlotMachine->unk04)
- sSlotMachine->unk06 = 1;
+ sSlotMachine->isBiasTagMatchPossible = 0;
+ if (sSlotMachine->luckyFlags)
+ sSlotMachine->isBiasTagMatchPossible = 1;
}
-/*static */u8 sub_810250C(u8 a0)
+/*static */u8 GetLuckyFlagTagOutput(u8 luckyFlags)
{
u8 i;
for (i = 0; i < 8; i++)
{
- if (a0 & 1)
- return gUnknown_083ECE3A[i];
- a0 >>= 1;
+ if (luckyFlags & 1)
+ return LuckyFlagTagOutput[i];
+ luckyFlags >>= 1;
}
return 0;
}
-/*static */bool8 sub_8102540_(void)
+/*static */bool8 IsLuckyRound(void)
{
u8 rval = Random();
- if (gUnknown_083ECD04[sSlotMachine->unk01][sSlotMachine->bet - 1] > rval)
+ if (sSlotLuckinessTable1[sSlotMachine->machineId][sSlotMachine->bet - 1] > rval)
return TRUE;
return FALSE;
}
-/*static */u8 sub_8102578(void)
+/*static */u8 AttemptsAtLuckiness1(void)
{
- s16 i;
+ s16 countAttempts;
- for (i = 0; i < 3; i++)
+ for (countAttempts = 0; countAttempts < 3; countAttempts++)
{
s16 rval = Random() & 0xff;
- s16 value = gUnknown_083ECD16[i][sSlotMachine->unk01];
+ s16 value = sSlotLuckinessTable2[countAttempts][sSlotMachine->machineId];
if (value > rval)
break;
}
- return i;
+ return countAttempts;
}
-/*static */u8 sub_81025BC(void)
+/*static */u8 AttemptsAtLuckiness2(void)
{
- s16 i;
+ s16 countAttempts;
- for (i = 0; i < 5; i++)
+ for (countAttempts = 0; countAttempts < 5; countAttempts++)
{
- s16 rval = Random() & 0xff;
- s16 r3 = gUnknown_083ECD28[i][sSlotMachine->unk01];
- if (i == 0 && sSlotMachine->unk03 == 1)
+ s16 rval = Random() & 0xff; // random byte
+ s16 value = sSlotLuckinessTable3[countAttempts][sSlotMachine->machineId];
+ // make first attempt easier if it's a lucky game
+ if (countAttempts == 0 && sSlotMachine->luckyGame == 1)
{
- r3 += 10;
- if (r3 > 0x100)
- r3 = 0x100;
+ value += 10;
+ if (value > 0x100)
+ value = 0x100;
}
- else if (i == 4 && sSlotMachine->unk03 == 1)
+ // make last attempt harder if it's a lucky game
+ else if (countAttempts == 4 && sSlotMachine->luckyGame == 1)
{
- r3 -= 10;
- if (r3 < 0)
- r3 = 0;
+ value -= 10;
+ if (value < 0)
+ value = 0;
}
- if (r3 > rval)
+ if (value > rval)
break;
}
- return i;
+ return countAttempts;
}
-/*static */u8 sub_810264C(u8 a0)
+/*static */u8 GetReelTimeProbability(u8 reelTimeDraw)
{
- if (sSlotMachine->unk03 == 0)
- return gUnknown_083ECD46[a0][sSlotMachine->pikaPower];
+ if (sSlotMachine->luckyGame == 0)
+ return ReelTimeProbabilityTable0[reelTimeDraw][sSlotMachine->pikaPower];
else
- return gUnknown_083ECDAC[a0][sSlotMachine->pikaPower];
+ return ReelTimeProbabilityTable1[reelTimeDraw][sSlotMachine->pikaPower];
}
-/*static */void sub_8102680(void)
+/*static */void DrawReelTimeOutcome(void)
{
u8 rval;
- s16 i;
+ s16 reelTimeDraw;
- sSlotMachine->unk05 = 0;
+ sSlotMachine->reelTimeDraw = 0;
rval = Random();
- if (rval < sub_810264C(0))
+ if (rval < GetReelTimeProbability(0))
return;
- for (i = 5; i > 0; i--)
+ for (reelTimeDraw = 5; reelTimeDraw > 0; reelTimeDraw--)
{
rval = Random();
- if (rval < sub_810264C(i))
+ if (rval < GetReelTimeProbability(reelTimeDraw))
break;
}
- sSlotMachine->unk05 = i;
+ sSlotMachine->reelTimeDraw = reelTimeDraw;
}
-/*static */bool8 sub_81026DC(u16 a0)
+/*static */bool8 SkipToReelTimeAction14(u16 i)
{
u16 rval = Random() & 0xff;
- if (rval < gUnknown_083ECE12[a0])
+ if (rval < ProbabilityTable_SkipToReelTimeAction14[i])
return TRUE;
else
return FALSE;
}
-/*static */u16 dp15_jump_random_unknown(void)
+/*static */u16 DrawNewReelIncrement(void)
{
- u8 r4 = 0;
+ u8 i = 0;
u8 rval;
u8 value;
- if (sSlotMachine->unk10 >= 300)
- r4 = 4;
- else if (sSlotMachine->unk10 >= 250)
- r4 = 3;
- else if (sSlotMachine->unk10 >= 200)
- r4 = 2;
- else if (sSlotMachine->unk10 >= 150)
- r4 = 1;
+ if (sSlotMachine->netCoinLoss >= 300)
+ i = 4;
+ else if (sSlotMachine->netCoinLoss >= 250)
+ i = 3;
+ else if (sSlotMachine->netCoinLoss >= 200)
+ i = 2;
+ else if (sSlotMachine->netCoinLoss >= 150)
+ i = 1;
rval = Random() % 100;
- value = gUnknown_083ECE1C[r4][0];
+ value = ReelIncrementTable[i][0];
if (rval < value)
return 4;
rval = Random() % 100;
- value = gUnknown_083ECE1C[r4][1] + gUnknown_083ECE30[sSlotMachine->unk0B];
+ value = ReelIncrementTable[i][1] + ReelTimeBonusIncrementTable[sSlotMachine->fairRollsUsed];
if (rval < value)
return 2;
return 8;
@@ -1543,9 +1570,9 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
{
u8 c1, c2, c3, match;
- c1 = GetTagOfReelSymbolOnScreenAtPos(0, 2);
- c2 = GetTagOfReelSymbolOnScreenAtPos(1, 2);
- c3 = GetTagOfReelSymbolOnScreenAtPos(2, 2);
+ c1 = GetNearbyTag(0, 2);
+ c2 = GetNearbyTag(1, 2);
+ c3 = GetNearbyTag(2, 2);
match = GetMatchFromSymbolsInRow(c1, c2, c3);
if (match != SLOT_MACHINE_MATCHED_NONE)
{
@@ -1559,9 +1586,9 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
{
u8 c1, c2, c3, match;
- c1 = GetTagOfReelSymbolOnScreenAtPos(0, 1);
- c2 = GetTagOfReelSymbolOnScreenAtPos(1, 1);
- c3 = GetTagOfReelSymbolOnScreenAtPos(2, 1);
+ c1 = GetNearbyTag(0, 1);
+ c2 = GetNearbyTag(1, 1);
+ c3 = GetNearbyTag(2, 1);
match = GetMatchFromSymbolsInRow(c1, c2, c3);
if (match != SLOT_MACHINE_MATCHED_NONE)
{
@@ -1571,9 +1598,9 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
sSlotMachine->matchedSymbols |= sSlotMatchFlags[match];
sub_8103E04(1);
}
- c1 = GetTagOfReelSymbolOnScreenAtPos(0, 3);
- c2 = GetTagOfReelSymbolOnScreenAtPos(1, 3);
- c3 = GetTagOfReelSymbolOnScreenAtPos(2, 3);
+ c1 = GetNearbyTag(0, 3);
+ c2 = GetNearbyTag(1, 3);
+ c3 = GetNearbyTag(2, 3);
match = GetMatchFromSymbolsInRow(c1, c2, c3);
if (match != SLOT_MACHINE_MATCHED_NONE)
{
@@ -1589,9 +1616,9 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
{
u8 c1, c2, c3, match;
- c1 = GetTagOfReelSymbolOnScreenAtPos(0, 1);
- c2 = GetTagOfReelSymbolOnScreenAtPos(1, 2);
- c3 = GetTagOfReelSymbolOnScreenAtPos(2, 3);
+ c1 = GetNearbyTag(0, 1);
+ c2 = GetNearbyTag(1, 2);
+ c3 = GetNearbyTag(2, 3);
match = GetMatchFromSymbolsInRow(c1, c2, c3);
if (match != SLOT_MACHINE_MATCHED_NONE)
{
@@ -1602,9 +1629,9 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
}
sub_8103E04(3);
}
- c1 = GetTagOfReelSymbolOnScreenAtPos(0, 3);
- c2 = GetTagOfReelSymbolOnScreenAtPos(1, 2);
- c3 = GetTagOfReelSymbolOnScreenAtPos(2, 1);
+ c1 = GetNearbyTag(0, 3);
+ c2 = GetNearbyTag(1, 2);
+ c3 = GetNearbyTag(2, 1);
match = GetMatchFromSymbolsInRow(c1, c2, c3);
if (match != SLOT_MACHINE_MATCHED_NONE)
{
@@ -1630,26 +1657,26 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
return SLOT_MACHINE_MATCHED_NONE;
}
-/*static */void sub_8102A24(void)
+/*static */void AwardPayout(void)
{
- sub_8102A64(CreateTask(sub_8102A64, 4));
+ RunAwardPayoutActions(CreateTask(RunAwardPayoutActions, 4));
}
-/*static */bool8 sub_8102A44(void)
+/*static */bool8 IsFinalTask_RunAwardPayoutActions(void)
{
- if (FindTaskIdByFunc(sub_8102A64) == 0xFF)
+ if (FindTaskIdByFunc(RunAwardPayoutActions) == TAIL_SENTINEL)
return TRUE;
else
return FALSE;
}
-/*static */void sub_8102A64(u8 taskId)
+/*static */void RunAwardPayoutActions(u8 taskId)
{
- while (gUnknown_083ECB20[gTasks[taskId].data[0]](gTasks + taskId))
+ while (AwardPayoutActions[gTasks[taskId].data[0]](gTasks + taskId))
;
}
-/*static */bool8 sub_8102A9C(struct Task *task)
+/*static */bool8 AwardPayoutAction1(struct Task *task)
{
if (sub_8103E38())
{
@@ -1662,8 +1689,8 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
}
return FALSE;
}
-
-/*static */bool8 sub_8102AD0(struct Task *task)
+// task->data[1]: timer
+/*static */bool8 AwardPayoutAction_GivePayoutToPlayer(struct Task *task)
{
if (!task->data[1]--)
{
@@ -1689,165 +1716,177 @@ void PlaySlotMachine(u8 arg0, MainCallback cb)
return FALSE;
}
-/*static */bool8 sub_8102B80(struct Task *task)
+/*static */bool8 AwardPayoutAction_FreeTask(struct Task *task)
{
if (sub_8103E7C())
- DestroyTask(FindTaskIdByFunc(sub_8102A64));
+ DestroyTask(FindTaskIdByFunc(RunAwardPayoutActions));
return FALSE;
}
-/*static */u8 GetTagOfReelSymbolOnScreenAtPos(u8 x, s16 y)
+/*static */u8 GetNearbyTag(u8 reelIndex, s16 posOffset)
{
- s16 offset = (sSlotMachine->reelPositions[x] + y) % 21;
- if (offset < 0)
- offset += 21;
- return sReelSymbols[x][offset];
+ /*
+ Returns the tag that is posOffset below the tag at the top of reelIndex's tape
+ */
+ s16 tagIndex = (sSlotMachine->reelPositions[reelIndex] + posOffset) % REEL_NUM_TAGS;
+ if (tagIndex < 0)
+ tagIndex += REEL_NUM_TAGS;
+ return sReelSymbols[reelIndex][tagIndex];
}
-/*static */u8 GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(u8 x, s16 y)
+// TODO: find out how rounding works
+/*static */u8 GetNearbyTag_PixelOffset(u8 reelIndex, s16 posOffset)
{
- s16 r6 = 0;
- s16 result = sSlotMachine->unk1C[x] % 24;
+ s16 tagOffset = 0;
+ s16 result = sSlotMachine->reelPixelOffsets[reelIndex] % 24;
if (result != 0)
- r6 = -1;
- return GetTagOfReelSymbolOnScreenAtPos(x, y + r6);
+ tagOffset = -1; // tag will be posOffset - 1
+ return GetNearbyTag(reelIndex, posOffset + tagOffset);
}
-/*static */u8 sub_8102C48(s16 a0)
+// TODO: make sure this is actually what's happening
+/*static */u8 GetNthNextReelTimePosition(s16 n)
{
- s16 r1 = (sSlotMachine->unk16 + a0) % 6;
- if (r1 < 0)
- r1 += 6;
- return gUnknown_083ECCF1[r1];
+ s16 newPosition = (sSlotMachine->reelTimePosition + n) % 6;
+ if (newPosition < 0)
+ newPosition += 6;
+ return gUnknown_083ECCF1[newPosition];
}
-/*static */void sub_8102C84(u8 a0, s16 a1)
+/*static */void IncrementReelPixelOffset(u8 reelIndex, s16 value)
{
- sSlotMachine->unk1C[a0] += a1;
- sSlotMachine->unk1C[a0] %= 504;
- sSlotMachine->reelPositions[a0] = 21 - sSlotMachine->unk1C[a0] / 24;
+ sSlotMachine->reelPixelOffsets[reelIndex] += value;
+ sSlotMachine->reelPixelOffsets[reelIndex] %= 504;
+ sSlotMachine->reelPositions[reelIndex] = REEL_NUM_TAGS - sSlotMachine->reelPixelOffsets[reelIndex] / 24;
}
-s16 sub_8102CCC(u8 a0, s16 a1)
+// TODO: make sure that's actually what's happening
+s16 AdvanceReelNextTag(u8 reelIndex, s16 reelIncrement)
{
- s16 r1 = sSlotMachine->unk1C[a0] % 24;
- if (r1 != 0)
+ s16 value = sSlotMachine->reelPixelOffsets[reelIndex] % 24;
+ if (value != 0)
{
- if (r1 < a1)
- a1 = r1;
- sub_8102C84(a0, a1);
- r1 = sSlotMachine->unk1C[a0] % 24;
+ if (value < reelIncrement)
+ reelIncrement = value;
+ IncrementReelPixelOffset(reelIndex, reelIncrement);
+ value = sSlotMachine->reelPixelOffsets[reelIndex] % 24;
}
- return r1;
+ return value;
}
-/*static */void sub_8102D28(s16 a0)
+/*static */void IncrementReelTimePixelOffset(s16 value)
{
- sSlotMachine->unk14 += a0;
- sSlotMachine->unk14 %= 120;
- sSlotMachine->unk16 = 6 - sSlotMachine->unk14 / 20;
+ sSlotMachine->reelTimePixelOffset += value;
+ sSlotMachine->reelTimePixelOffset %= 120;
+ sSlotMachine->reelTimePosition = 6 - sSlotMachine->reelTimePixelOffset / 20;
}
-s16 sub_8102D5C(s16 a0)
+s16 AdvanceReelTimeNextNumber(s16 reelIncrement)
{
- s16 r1 = sSlotMachine->unk14 % 20;
- if (r1 != 0)
+ s16 value = sSlotMachine->reelTimePixelOffset % 20;
+ if (value != 0)
{
- if (r1 < a0)
- a0 = r1;
- sub_8102D28(a0);
- r1 = sSlotMachine->unk14 % 20;
+ if (value < reelIncrement)
+ reelIncrement = value;
+ IncrementReelTimePixelOffset(reelIncrement);
+ value = sSlotMachine->reelTimePixelOffset % 20;
}
- return r1;
+ return value;
}
-/*static */void sub_8102DA8(void)
+/*static */void GameplayTask_StopReel(void)
{
u8 i;
for (i = 0; i < 3; i++)
{
- u8 taskId = CreateTask(sub_8102E68, 2);
+ u8 taskId = CreateTask(RunReelActions, 2);
gTasks[taskId].data[15] = i;
sSlotMachine->reelTasks[i] = taskId;
- sub_8102E68(taskId);
+ RunReelActions(taskId);
}
}
-/*static */void sub_8102DEC(u8 a0)
+/*static */void ReelTasks_8102DEC(u8 reelIndex)
{
- gTasks[sSlotMachine->reelTasks[a0]].data[0] = 1;
- gTasks[sSlotMachine->reelTasks[a0]].data[14] = 1;
+ gTasks[sSlotMachine->reelTasks[reelIndex]].data[0] = 1;
+ gTasks[sSlotMachine->reelTasks[reelIndex]].data[14] = 1;
}
-/*static */void sub_8102E1C(u8 a0)
+/*static */void sub_8102E1C(u8 reelIndex)
{
- gTasks[sSlotMachine->reelTasks[a0]].data[0] = 2;
+ gTasks[sSlotMachine->reelTasks[reelIndex]].data[0] = 2;
}
-/*static */bool8 sub_8102E40(u8 a0)
+/*static */bool8 IsReelMoving(u8 reelIndex)
{
- return gTasks[sSlotMachine->reelTasks[a0]].data[14];
+ return gTasks[sSlotMachine->reelTasks[reelIndex]].data[14];
}
-/*static */void sub_8102E68(u8 taskId)
+/*static */void RunReelActions(u8 taskId)
{
- while (gUnknown_083ECB2C[gTasks[taskId].data[0]](gTasks + taskId))
+ while (ReelActions[gTasks[taskId].data[0]](gTasks + taskId))
;
}
-/*static */bool8 sub_8102EA0(struct Task *task)
+// task->data[1] reel turns
+// task->data[15] reelIndex
+/*static */bool8 ReelAction_StayStill(struct Task *task)
{
return FALSE;
}
-/*static */bool8 sub_8102EA4(struct Task *task)
+/*static */bool8 ReelAction_Spin(struct Task *task)
{
- sub_8102C84(task->data[15], sSlotMachine->unk1A);
+ IncrementReelPixelOffset(task->data[15], sSlotMachine->reelIncrement);
return FALSE;
}
-/*static */bool8 sub_8102EC0(struct Task *task)
+/*static */bool8 ReelAction_DecideWhereToStop(struct Task *task)
{
task->data[0]++;
- sSlotMachine->unk34[task->data[15]] = 0;
- sSlotMachine->unk2E[task->data[15]] = 0;
- if (sSlotMachine->unk0A == 0 && (sSlotMachine->unk04 == 0 || sSlotMachine->unk06 == 0 || !gUnknown_083ECB40[task->data[15]]()))
+ // initialize data for that reel --> these will be manipulated if biasTags can be lined up
+ sSlotMachine->biasTagFinalPositions[task->data[15]] = 0;
+ sSlotMachine->reelExtraTurns[task->data[15]] = 0;
+
+ if (sSlotMachine->fairRollsLeft == 0 && (sSlotMachine->luckyFlags == 0 || sSlotMachine->isBiasTagMatchPossible == 0 || !DecideReelTurns_BiasTag[task->data[15]]()))
{
- sSlotMachine->unk06 = 0;
- gUnknown_083ECB4C[task->data[15]]();
+ sSlotMachine->isBiasTagMatchPossible = 0;
+ DecideReelTurns_NoBiasTag[task->data[15]]();
}
- task->data[1] = sSlotMachine->unk2E[task->data[15]];
+ task->data[1] = sSlotMachine->reelExtraTurns[task->data[15]];
return TRUE;
}
-/*static */bool8 sub_8102F4C(struct Task *task)
+// go to next tag and then do any additional turns
+/*static */bool8 ReelAction_TurnToSelectedTag(struct Task *task)
{
- u16 sp[ARRAY_COUNT(gUnknown_085A74FC)];
- s16 r2;
+ u16 reelStopShocks[ARRAY_COUNT(ReelStopShocks)];
+ s16 reelPixelPos;
- memcpy(sp, gUnknown_085A74FC, sizeof(gUnknown_085A74FC));
- r2 = sSlotMachine->unk1C[task->data[15]] % 24;
- if (r2 != 0)
- r2 = sub_8102CCC(task->data[15], sSlotMachine->unk1A);
- else if (sSlotMachine->unk2E[task->data[15]])
+ memcpy(reelStopShocks, ReelStopShocks, sizeof(ReelStopShocks));
+ reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24;
+ if (reelPixelPos != 0)
+ reelPixelPos = AdvanceReelNextTag(task->data[15], sSlotMachine->reelIncrement);
+ else if (sSlotMachine->reelExtraTurns[task->data[15]])
{
- sSlotMachine->unk2E[task->data[15]]--;
- sub_8102C84(task->data[15], sSlotMachine->unk1A);
- r2 = sSlotMachine->unk1C[task->data[15]] % 24;
+ sSlotMachine->reelExtraTurns[task->data[15]]--;
+ IncrementReelPixelOffset(task->data[15], sSlotMachine->reelIncrement);
+ reelPixelPos = sSlotMachine->reelPixelOffsets[task->data[15]] % 24;
}
- if (r2 == 0 && sSlotMachine->unk2E[task->data[15]] == 0)
+ if (reelPixelPos == 0 && sSlotMachine->reelExtraTurns[task->data[15]] == 0)
{
task->data[0]++;
- task->data[1] = sp[task->data[1]];
+ task->data[1] = reelStopShocks[task->data[1]];
task->data[2] = 0;
}
return FALSE;
}
-/*static */bool8 sub_8103008(struct Task *task)
+// make selected tag oscillate before it becomes still
+/*static */bool8 ReelAction_OscillatingStop(struct Task *task)
{
- sSlotMachine->unk22[task->data[15]] = task->data[1];
+ sSlotMachine->stopReelPixelOffset[task->data[15]] = task->data[1];
task->data[1] = -task->data[1];
task->data[2]++;
if ((task->data[2] & 0x3) == 0)
@@ -1856,103 +1895,111 @@ s16 sub_8102D5C(s16 a0)
{
task->data[0] = 0;
task->data[14] = 0;
- sSlotMachine->unk22[task->data[15]] = 0;
+ sSlotMachine->stopReelPixelOffset[task->data[15]] = 0;
}
return FALSE;
}
-/*static */bool8 sub_810305C(void)
+/*static */bool8 DecideReelTurns_BiasTag_Reel1(void)
{
- u8 r3 = sub_810250C(sSlotMachine->unk04);
- u8 r5 = r3;
- if (sSlotMachine->unk04 & 0xc0)
+ u8 tag2 = GetLuckyFlagTagOutput(sSlotMachine->luckyFlags);
+ u8 tag1 = tag2;
+ if (sSlotMachine->luckyFlags & 0xc0) // if either of top 2 bits are set
{
- r5 = 0;
- r3 = 1;
+ tag1 = SLOT_MACHINE_TAG_7_RED;
+ tag2 = SLOT_MACHINE_TAG_7_BLUE;
}
- return gUnknown_083ECB64[sSlotMachine->bet - 1](r5, r3);
+ return DecideReelTurns_BiasTag_Reel1_Bets[sSlotMachine->bet - 1](tag1, tag2);
}
-/*static */bool8 sub_81030A4(s16 y, u8 tag1, u8 tag2)
+/*static */bool8 IsTag1orTag2AtPosInReel1(s16 pos, u8 tag1, u8 tag2)
{
- u8 tag = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, y);
+ u8 tag = GetNearbyTag_PixelOffset(0, pos);
if (tag == tag1 || tag == tag2)
{
- sSlotMachine->unk07 = tag;
+ sSlotMachine->biasTag = tag;
return TRUE;
}
return FALSE;
}
-/*static */bool8 sub_81030E0(s16 y)
+/*static */bool8 AreCherriesOnScreen_Reel1(s16 offsetFromCenter)
{
- if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 1 - y) == 4 || GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - y) == 4 || GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 3 - y) == 4)
+ if (GetNearbyTag_PixelOffset(0, 1 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetNearbyTag_PixelOffset(0, 2 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY || GetNearbyTag_PixelOffset(0, 3 - offsetFromCenter) == SLOT_MACHINE_TAG_CHERRY)
return TRUE;
else
return FALSE;
}
-/*static */bool8 sub_8103134(void)
+/*static */bool8 LuckyFlags_BiasCherryOr7s(void)
{
- if (sSlotMachine->unk04 & 0xc2)
+ if (sSlotMachine->luckyFlags & 0xc2) // if any of bits 6, 7, or 1 are set
return TRUE;
else
return FALSE;
}
-/*static */bool8 sub_8103154(u8 a0, u8 a1)
+/*static */bool8 DecideReelTurns_BiasTag_Reel1_Bet1(u8 tag1, u8 tag2)
{
s16 i;
for (i = 0; i < 5; i++)
{
- if (sub_81030A4(2 - i, a0, a1))
+ // if a lucky tag appears in the center row within the next 5 turns
+ if (IsTag1orTag2AtPosInReel1(2 - i, tag1, tag2))
{
- sSlotMachine->unk34[0] = 2;
- sSlotMachine->unk2E[0] = i;
+ sSlotMachine->biasTagFinalPositions[0] = 2;
+ sSlotMachine->reelExtraTurns[0] = i;
return TRUE;
}
}
return FALSE;
}
-/*static */bool8 sub_81031B4(u8 tag1, u8 tag2)
+/*static */bool8 DecideReelTurns_BiasTag_Reel1_Bet2or3(u8 tag1, u8 tag2)
{
s16 i;
- bool8 r6 = sub_8103134();
- if (r6 || !sub_81030E0(0))
+ bool8 areLuckyBitsSet = LuckyFlags_BiasCherryOr7s();
+ // if lucky numbers or no cherries are currently on screen in reel 1...
+ if (areLuckyBitsSet || !AreCherriesOnScreen_Reel1(0))
{
for (i = 1; i < 4; i++)
{
- if (sub_81030A4(i, tag1, tag2))
+ //...and if a bias tag is currently on the screen
+ if (IsTag1orTag2AtPosInReel1(i, tag1, tag2))
{
- sSlotMachine->unk34[0] = i;
- sSlotMachine->unk2E[0] = 0;
+ sSlotMachine->biasTagFinalPositions[0] = i;
+ sSlotMachine->reelExtraTurns[0] = 0;
return TRUE;
}
}
}
for (i = 1; i < 5; i++)
{
- bool8 r7 = r6;
- if (r7 || !sub_81030E0(i))
+ bool8 areLuckyBitsSetCopy = areLuckyBitsSet; // redundant
+ // if lucky numbers or if in the next 4 turns there is a screen with no cherries...
+ if (areLuckyBitsSetCopy || !AreCherriesOnScreen_Reel1(i))
{
- if (sub_81030A4(1 - i, tag1, tag2))
+ //...and if a bias tag is in top row of that screen
+ if (IsTag1orTag2AtPosInReel1(1 - i, tag1, tag2))
{
- if (i == 1 && (r7 || !sub_81030E0(3)))
+ //...and if it only took 1 turn and the lucky tag could also be the bottom row of a screen with no cherries...
+ if (i == 1 && (areLuckyBitsSetCopy || !AreCherriesOnScreen_Reel1(3)))
{
- sSlotMachine->unk34[0] = 3;
- sSlotMachine->unk2E[0] = 3;
+ sSlotMachine->biasTagFinalPositions[0] = 3; // maybe how many paths to check
+ sSlotMachine->reelExtraTurns[0] = 3; // maybe upper limit of turns to advance
return TRUE;
}
- if (i < 4 && (r7 || !sub_81030E0(i + 1)))
+ //...or if it isn't the last turn and the lucky tag could be in the center row of a screen with no cherries...
+ if (i < 4 && (areLuckyBitsSetCopy || !AreCherriesOnScreen_Reel1(i + 1)))
{
- sSlotMachine->unk34[0] = 2;
- sSlotMachine->unk2E[0] = i + 1;
+ sSlotMachine->biasTagFinalPositions[0] = 2;
+ sSlotMachine->reelExtraTurns[0] = i + 1;
return TRUE;
}
- sSlotMachine->unk34[0] = 1;
- sSlotMachine->unk2E[0] = i;
+ //...else
+ sSlotMachine->biasTagFinalPositions[0] = 1;
+ sSlotMachine->reelExtraTurns[0] = i;
return TRUE;
}
}
@@ -1960,55 +2007,61 @@ s16 sub_8102D5C(s16 a0)
return FALSE;
}
-/*static */bool8 sub_81032C0(void)
+/*static */bool8 DecideReelTurns_BiasTag_Reel2(void)
{
- return gUnknown_083ECB70[sSlotMachine->bet - 1]();
+ return DecideReelTurns_BiasTag_Reel2_Bets[sSlotMachine->bet - 1]();
}
-/*static */bool8 sub_81032E8(void)
+/*static */bool8 DecideReelTurns_BiasTag_Reel2_Bet1or2(void)
{
s16 i;
- s16 unk34_0 = sSlotMachine->unk34[0];
+ s16 reel1BiasTagFinalPos = sSlotMachine->biasTagFinalPositions[0];
for (i = 0; i < 5; i++)
{
- if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, unk34_0 - i) == sSlotMachine->unk07)
+ // if biasTag appears in the same row within 5 turns
+ if (GetNearbyTag_PixelOffset(1, reel1BiasTagFinalPos - i) == sSlotMachine->biasTag)
{
- sSlotMachine->unk34[1] = unk34_0;
- sSlotMachine->unk2E[1] = i;
+ sSlotMachine->biasTagFinalPositions[1] = reel1BiasTagFinalPos;
+ sSlotMachine->reelExtraTurns[1] = i;
return TRUE;
}
}
return FALSE;
}
-/*static */bool8 sub_810333C(void)
+/*static */bool8 DecideReelTurns_BiasTag_Reel2_Bet3(void)
{
s16 i;
- if (sub_81032E8())
+ // if biasTag appears in the same row within 5 turns...
+ if (DecideReelTurns_BiasTag_Reel2_Bet1or2())
{
- if (sSlotMachine->unk34[0] != 2 && sSlotMachine->unk2E[1] > 1 && sSlotMachine->unk2E[1] != 4)
+ //...and if the biasTag is not in row 2 of reel 1 and if it requires between either 2 or 3 turns to line up the biasTag in row 2...
+ if (sSlotMachine->biasTagFinalPositions[0] != 2 && sSlotMachine->reelExtraTurns[1] > 1 && sSlotMachine->reelExtraTurns[1] != 4)
{
for (i = 0; i < 5; i++)
{
- if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - i) == sSlotMachine->unk07)
+ //...and if the bias tag will appear in the center row within 5 turns
+ if (GetNearbyTag_PixelOffset(1, 2 - i) == sSlotMachine->biasTag)
{
- sSlotMachine->unk34[1] = 2;
- sSlotMachine->unk2E[1] = i;
+ sSlotMachine->biasTagFinalPositions[1] = 2;
+ sSlotMachine->reelExtraTurns[1] = i;
break;
}
}
}
return TRUE;
}
- if (sSlotMachine->unk34[0] != 2)
+ // else if the biasTag is not in row 2 of reel 1...
+ if (sSlotMachine->biasTagFinalPositions[0] != 2)
{
for (i = 0; i < 5; i++)
{
- if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - i) == sSlotMachine->unk07)
+ //...and if the biasTag will appear in the center row of reel 2 within 5 turns
+ if (GetNearbyTag_PixelOffset(1, 2 - i) == sSlotMachine->biasTag)
{
- sSlotMachine->unk34[1] = 2;
- sSlotMachine->unk2E[1] = i;
+ sSlotMachine->biasTagFinalPositions[1] = 2;
+ sSlotMachine->reelExtraTurns[1] = i;
return TRUE;
}
}
@@ -2016,102 +2069,117 @@ s16 sub_8102D5C(s16 a0)
return FALSE;
}
-/*static */bool8 sub_81033DC(void)
+/*static */bool8 DecideReelTurns_BiasTag_Reel3(void)
{
- u8 r3 = sSlotMachine->unk07;
- if (sSlotMachine->unk04 & 0x40)
+ u8 biasTag = sSlotMachine->biasTag;
+ // if bit 6 of luckyFlags is set...
+ if (sSlotMachine->luckyFlags & 0x40)
{
- r3 = 0;
- if (sSlotMachine->unk07 == 0)
+ // make biasTag the opposite color of the 7 in sSlotMachine->biasTag
+ biasTag = 0;
+ if (sSlotMachine->biasTag == 0)
{
- r3 = 1;
+ biasTag = 1;
}
}
- return gUnknown_083ECB7C[sSlotMachine->bet - 1](r3);
+ return DecideReelTurns_BiasTag_Reel3_Bets[sSlotMachine->bet - 1](biasTag);
}
-/*static */bool8 sub_810341C(u8 a0)
+/*static */bool8 DecideReelTurns_BiasTag_Reel3_Bet1or2(u8 biasTag)
{
s16 i;
- s16 unk34_1 = sSlotMachine->unk34[1];
+ s16 reel2BiasTagPos = sSlotMachine->biasTagFinalPositions[1];
for (i = 0; i < 5; i++)
{
- if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, unk34_1 - i) == a0)
+ // if the biasTag appears in the same row as in reel 2 within 5 turns
+ if (GetNearbyTag_PixelOffset(2, reel2BiasTagPos - i) == biasTag)
{
- sSlotMachine->unk34[2] = unk34_1;
- sSlotMachine->unk2E[2] = i;
+ sSlotMachine->biasTagFinalPositions[2] = reel2BiasTagPos;
+ sSlotMachine->reelExtraTurns[2] = i;
return TRUE;
}
}
return FALSE;
}
-/*static */bool8 sub_810347C(u8 a0)
+/*static */bool8 DecideReelTurns_BiasTag_Reel3_Bet3(u8 biasTag)
{
s16 i;
- s16 r8;
- if (sSlotMachine->unk34[0] == sSlotMachine->unk34[1])
- return sub_810341C(a0);
- if (sSlotMachine->unk34[0] == 1)
- r8 = 3;
+ s16 biasTagFinalPos;
+ // if the final position of the biasTag matches in reel 1 and reel 2...
+ if (sSlotMachine->biasTagFinalPositions[0] == sSlotMachine->biasTagFinalPositions[1])
+ //...then try to line it up in reel 3
+ return DecideReelTurns_BiasTag_Reel3_Bet1or2(biasTag);
+ // else place it in the row opposite reel 1's
+ if (sSlotMachine->biasTagFinalPositions[0] == 1)
+ biasTagFinalPos = 3;
else
- r8 = 1;
+ biasTagFinalPos = 1;
for (i = 0; i < 5; i++)
{
- if (GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, r8 - i) == a0)
+ // if in the biasTag lands in that position within the next 5 turns
+ if (GetNearbyTag_PixelOffset(2, biasTagFinalPos - i) == biasTag)
{
- sSlotMachine->unk2E[2] = i;
- sSlotMachine->unk34[2] = r8;
+ sSlotMachine->reelExtraTurns[2] = i;
+ sSlotMachine->biasTagFinalPositions[2] = biasTagFinalPos;
return TRUE;
}
}
return FALSE;
}
-/*static */void sub_81034F4(void)
+/*
+Advance until there are no cherries on screen in reel 1
+*/
+/*static */void DecideReelTurns_NoBiasTag_Reel1(void)
{
s16 i = 0;
- while (sub_81030E0(i) != 0)
+ while (AreCherriesOnScreen_Reel1(i) != 0)
i++;
- sSlotMachine->unk2E[0] = i;
+ sSlotMachine->reelExtraTurns[0] = i;
}
-/*static */bool8 sub_8103520(u8 *a0)
+/*static */bool8 IsBiasTag7AndIfSoChangeColor(u8 *biasTagPtr)
{
- if (*a0 == 0)
+ if (*biasTagPtr == SLOT_MACHINE_TAG_7_RED)
{
- *a0 = 1;
+ *biasTagPtr = SLOT_MACHINE_TAG_7_BLUE;
return TRUE;
}
- if (*a0 == 1)
+ if (*biasTagPtr == SLOT_MACHINE_TAG_7_BLUE)
{
- *a0 = 0;
+ *biasTagPtr = SLOT_MACHINE_TAG_7_RED;
return TRUE;
}
return FALSE;
}
-/*static */void sub_8103540(void)
+/*static */void DecideReelTurns_NoBiasTag_Reel2(void)
{
- gUnknown_083ECB88[sSlotMachine->bet - 1]();
+ DecideReelTurns_NoBiasTag_Reel2_Bets[sSlotMachine->bet - 1]();
}
-/*static */void sub_8103564(void)
+// only does stuff if the biasTag is one of the 7's, plus other conditions
+/*static */void DecideReelTurns_NoBiasTag_Reel2_Bet1(void)
{
- if (sSlotMachine->unk34[0] != 0 && sSlotMachine->unk04 & 0x80)
+ // if reel 1 has a biasTag and bit 7 is set in luckyFlags...
+ if (sSlotMachine->biasTagFinalPositions[0] != 0 && sSlotMachine->luckyFlags & 0x80)
{
- u8 sp0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - sSlotMachine->unk2E[0]);
- if (sub_8103520(&sp0))
+ u8 biasTag = GetNearbyTag_PixelOffset(0, 2 - sSlotMachine->reelExtraTurns[0]);
+ //...and if biasTag is one of the 7's...
+ if (IsBiasTag7AndIfSoChangeColor(&biasTag))
+ //...swap the color of the 7...
{
s16 i;
for (i = 0; i < 5; i++)
{
- if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - i))
+ //...and if the biasTag appears in the next 5 turns
+ if (biasTag == GetNearbyTag_PixelOffset(1, 2 - i))
{
- sSlotMachine->unk34[1] = 2;
- sSlotMachine->unk2E[1] = i;
+ sSlotMachine->biasTagFinalPositions[1] = 2;
+ sSlotMachine->reelExtraTurns[1] = i;
break;
}
}
@@ -2119,20 +2187,24 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void j5_08111E84(void)
+/*static */void DecideReelTurns_NoBiasTag_Reel2_Bet2(void)
{
- if (sSlotMachine->unk34[0] != 0 && sSlotMachine->unk04 & 0x80)
+ // if reel 1 has a biasTag and bit 7 is set in luckyFlags...
+ if (sSlotMachine->biasTagFinalPositions[0] != 0 && sSlotMachine->luckyFlags & 0x80)
{
- u8 sp0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, sSlotMachine->unk34[0] - sSlotMachine->unk2E[0]);
- if (sub_8103520(&sp0))
+ u8 biasTag = GetNearbyTag_PixelOffset(0, sSlotMachine->biasTagFinalPositions[0] - sSlotMachine->reelExtraTurns[0]);
+ //...and if biasTag is one of the 7's...
+ if (IsBiasTag7AndIfSoChangeColor(&biasTag))
+ //...swap the color of the 7...
{
s16 i;
for (i = 0; i < 5; i++)
{
- if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, sSlotMachine->unk34[0] - i))
+ //...and if in the next 5 turns the biasTag appears in reel 2
+ if (biasTag == GetNearbyTag_PixelOffset(1, sSlotMachine->biasTagFinalPositions[0] - i))
{
- sSlotMachine->unk34[1] = sSlotMachine->unk34[0];
- sSlotMachine->unk2E[1] = i;
+ sSlotMachine->biasTagFinalPositions[1] = sSlotMachine->biasTagFinalPositions[0];
+ sSlotMachine->reelExtraTurns[1] = i;
break;
}
}
@@ -2140,61 +2212,65 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_8103668(void)
+/*static */void DecideReelTurns_NoBiasTag_Reel2_Bet3(void)
{
s16 i;
s16 j;
- if (sSlotMachine->unk34[0] != 0 && sSlotMachine->unk04 & 0x80)
+ // if reel 1 has a biasTag and bit 7 is set in luckyFlags...
+ if (sSlotMachine->biasTagFinalPositions[0] != 0 && sSlotMachine->luckyFlags & 0x80)
{
- if (sSlotMachine->unk34[0] == 2)
+ //...and if biasTag appeared in the center row of reel 1
+ if (sSlotMachine->biasTagFinalPositions[0] == 2)
{
- j5_08111E84();
+ DecideReelTurns_NoBiasTag_Reel2_Bet2();
}
else
{
- u8 sp0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, sSlotMachine->unk34[0] - sSlotMachine->unk2E[0]);
- if (sub_8103520(&sp0))
+ u8 biasTag = GetNearbyTag_PixelOffset(0, sSlotMachine->biasTagFinalPositions[0] - sSlotMachine->reelExtraTurns[0]);
+ //...and if biasTag is one of the 7's...
+ if (IsBiasTag7AndIfSoChangeColor(&biasTag))
+ //...swap the color of the 7...
{
j = 2;
- if (sSlotMachine->unk34[0] == 3)
+ if (sSlotMachine->biasTagFinalPositions[0] == 3)
j = 3;
for (i = 0; i < 2; i++, j--)
{
- if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, j))
+ if (biasTag == GetNearbyTag_PixelOffset(1, j))
{
- sSlotMachine->unk34[1] = j;
- sSlotMachine->unk2E[1] = 0;
+ sSlotMachine->biasTagFinalPositions[1] = j;
+ sSlotMachine->reelExtraTurns[1] = 0;
return;
}
}
for (j = 1; j < 5; j++)
{
- if (sp0 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, sSlotMachine->unk34[0] - j))
+ if (biasTag == GetNearbyTag_PixelOffset(1, sSlotMachine->biasTagFinalPositions[0] - j))
{
- if (sSlotMachine->unk34[0] == 1)
+ if (sSlotMachine->biasTagFinalPositions[0] == 1)
{
if (j < 3)
{
- sSlotMachine->unk34[1] = 2;
- sSlotMachine->unk2E[1] = j + 1;
+ sSlotMachine->biasTagFinalPositions[1] = 2;
+ sSlotMachine->reelExtraTurns[1] = j + 1;
}
else
{
- sSlotMachine->unk34[1] = 1;
- sSlotMachine->unk2E[1] = j;
+ sSlotMachine->biasTagFinalPositions[1] = 1;
+ sSlotMachine->reelExtraTurns[1] = j;
}
}
else
{
if (j < 3)
{
- sSlotMachine->unk34[1] = 3;
- sSlotMachine->unk2E[1] = j;
+ sSlotMachine->biasTagFinalPositions[1] = 3;
+ sSlotMachine->reelExtraTurns[1] = j;
}
else
{
- sSlotMachine->unk34[1] = 2;
- sSlotMachine->unk2E[1] = j - 1;
+ sSlotMachine->biasTagFinalPositions[1] = 2;
+ sSlotMachine->reelExtraTurns[1] = j - 1;
}
}
return;
@@ -2234,7 +2310,7 @@ s16 sub_8102D5C(s16 a0)
return TRUE;
}
-/*static */void sub_810380C(void)
+/*static */void DecideReelTurns_NoBiasTag_Reel3(void)
{
gUnknown_083ECB94[sSlotMachine->bet - 1]();
}
@@ -2242,27 +2318,27 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_8103830(void)
{
s16 i = 0;
- u8 r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 2 - sSlotMachine->unk2E[0]);
- u8 r1 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - sSlotMachine->unk2E[1]);
+ u8 r5 = GetNearbyTag_PixelOffset(0, 2 - sSlotMachine->reelExtraTurns[0]);
+ u8 r1 = GetNearbyTag_PixelOffset(1, 2 - sSlotMachine->reelExtraTurns[1]);
if (r5 == r1)
{
while (1)
{
u8 r0;
- if (!(r5 == (r0 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i)) || (r5 == 0 && r0 == 1) || (r5 == 1 && r0 == 0)))
+ if (!(r5 == (r0 = GetNearbyTag_PixelOffset(2, 2 - i)) || (r5 == 0 && r0 == 1) || (r5 == 1 && r0 == 0)))
break;
i++;
}
}
else if (sub_8103764(r5, r1))
{
- if (sSlotMachine->unk04 & 0x80)
+ if (sSlotMachine->luckyFlags & 0x80)
{
for (i = 0; i < 5; i++)
{
- if (r5 == GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i))
+ if (r5 == GetNearbyTag_PixelOffset(2, 2 - i))
{
- sSlotMachine->unk2E[2] = i;
+ sSlotMachine->reelExtraTurns[2] = i;
return;
}
}
@@ -2270,12 +2346,12 @@ s16 sub_8102D5C(s16 a0)
i = 0;
while (1)
{
- if (r5 != GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 2 - i))
+ if (r5 != GetNearbyTag_PixelOffset(2, 2 - i))
break;
i++;
}
}
- sSlotMachine->unk2E[2] = i;
+ sSlotMachine->reelExtraTurns[2] = i;
}
/*static */void sub_8103910(void)
@@ -2286,15 +2362,15 @@ s16 sub_8102D5C(s16 a0)
u8 r6;
u8 r4;
- if (sSlotMachine->unk34[1] != 0 && sSlotMachine->unk34[0] == sSlotMachine->unk34[1] && sSlotMachine->unk04 & 0x80)
+ if (sSlotMachine->biasTagFinalPositions[1] != 0 && sSlotMachine->biasTagFinalPositions[0] == sSlotMachine->biasTagFinalPositions[1] && sSlotMachine->luckyFlags & 0x80)
{
- r7 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, sSlotMachine->unk34[0] - sSlotMachine->unk2E[0]);
- r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, sSlotMachine->unk34[1] - sSlotMachine->unk2E[1]);
+ r7 = GetNearbyTag_PixelOffset(0, sSlotMachine->biasTagFinalPositions[0] - sSlotMachine->reelExtraTurns[0]);
+ r6 = GetNearbyTag_PixelOffset(1, sSlotMachine->biasTagFinalPositions[1] - sSlotMachine->reelExtraTurns[1]);
if (sub_8103764(r7, r6))
{
for (i = 0; i < 5; i++)
{
- r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, sSlotMachine->unk34[1] - i);
+ r4 = GetNearbyTag_PixelOffset(2, sSlotMachine->biasTagFinalPositions[1] - i);
if (r7 == r4)
{
sp0 = i;
@@ -2308,10 +2384,10 @@ s16 sub_8102D5C(s16 a0)
s16 r8;
for (i = 1, r8 = 0; i < 4; i++)
{
- r7 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, i - sSlotMachine->unk2E[0]);
- r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, i - sSlotMachine->unk2E[1]);
- r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, i - sp0);
- if (!sub_81037BC(r7, r6, r4) && (!sub_810378C(r7, r6, r4) || !(sSlotMachine->unk04 & 0x80)))
+ r7 = GetNearbyTag_PixelOffset(0, i - sSlotMachine->reelExtraTurns[0]);
+ r6 = GetNearbyTag_PixelOffset(1, i - sSlotMachine->reelExtraTurns[1]);
+ r4 = GetNearbyTag_PixelOffset(2, i - sp0);
+ if (!sub_81037BC(r7, r6, r4) && (!sub_810378C(r7, r6, r4) || !(sSlotMachine->luckyFlags & 0x80)))
{
r8++;
break;
@@ -2321,7 +2397,7 @@ s16 sub_8102D5C(s16 a0)
break;
sp0++;
}
- sSlotMachine->unk2E[2] = sp0;
+ sSlotMachine->reelExtraTurns[2] = sp0;
}
/*static */void sub_8103A78(void)
@@ -2333,21 +2409,21 @@ s16 sub_8102D5C(s16 a0)
s16 i;
sub_8103910();
- if (sSlotMachine->unk34[1] != 0 && sSlotMachine->unk34[0] != sSlotMachine->unk34[1] && sSlotMachine->unk04 & 0x80)
+ if (sSlotMachine->biasTagFinalPositions[1] != 0 && sSlotMachine->biasTagFinalPositions[0] != sSlotMachine->biasTagFinalPositions[1] && sSlotMachine->luckyFlags & 0x80)
{
- r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, sSlotMachine->unk34[0] - sSlotMachine->unk2E[0]);
- r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, sSlotMachine->unk34[1] - sSlotMachine->unk2E[1]);
+ r6 = GetNearbyTag_PixelOffset(0, sSlotMachine->biasTagFinalPositions[0] - sSlotMachine->reelExtraTurns[0]);
+ r5 = GetNearbyTag_PixelOffset(1, sSlotMachine->biasTagFinalPositions[1] - sSlotMachine->reelExtraTurns[1]);
if (sub_8103764(r6, r5))
{
r8 = 1;
- if (sSlotMachine->unk34[0] == 1)
+ if (sSlotMachine->biasTagFinalPositions[0] == 1)
r8 = 3;
for (i = 0; i < 5; i++)
{
- r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, r8 - (sSlotMachine->unk2E[2] + i));
+ r4 = GetNearbyTag_PixelOffset(2, r8 - (sSlotMachine->reelExtraTurns[2] + i));
if (r6 == r4)
{
- sSlotMachine->unk2E[2] += i;
+ sSlotMachine->reelExtraTurns[2] += i;
break;
}
}
@@ -2355,21 +2431,21 @@ s16 sub_8102D5C(s16 a0)
}
while (1)
{
- r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 1 - sSlotMachine->unk2E[0]);
- r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - sSlotMachine->unk2E[1]);
- r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 3 - sSlotMachine->unk2E[2]);
- if (sub_81037BC(r6, r5, r4) || (sub_810378C(r6, r5, r4) && sSlotMachine->unk04 & 0x80))
+ r6 = GetNearbyTag_PixelOffset(0, 1 - sSlotMachine->reelExtraTurns[0]);
+ r5 = GetNearbyTag_PixelOffset(1, 2 - sSlotMachine->reelExtraTurns[1]);
+ r4 = GetNearbyTag_PixelOffset(2, 3 - sSlotMachine->reelExtraTurns[2]);
+ if (sub_81037BC(r6, r5, r4) || (sub_810378C(r6, r5, r4) && sSlotMachine->luckyFlags & 0x80))
break;
- sSlotMachine->unk2E[2]++;
+ sSlotMachine->reelExtraTurns[2]++;
}
while (1)
{
- r6 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(0, 3 - sSlotMachine->unk2E[0]);
- r5 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(1, 2 - sSlotMachine->unk2E[1]);
- r4 = GetTagOfReelSymbolOnScreenAtPos_AdjustForPixelOffset(2, 1 - sSlotMachine->unk2E[2]);
- if (sub_81037BC(r6, r5, r4) || (sub_810378C(r6, r5, r4) && sSlotMachine->unk04 & 0x80))
+ r6 = GetNearbyTag_PixelOffset(0, 3 - sSlotMachine->reelExtraTurns[0]);
+ r5 = GetNearbyTag_PixelOffset(1, 2 - sSlotMachine->reelExtraTurns[1]);
+ r4 = GetNearbyTag_PixelOffset(2, 1 - sSlotMachine->reelExtraTurns[2]);
+ if (sub_81037BC(r6, r5, r4) || (sub_810378C(r6, r5, r4) && sSlotMachine->luckyFlags & 0x80))
break;
- sSlotMachine->unk2E[2]++;
+ sSlotMachine->reelExtraTurns[2]++;
}
}
@@ -2403,9 +2479,9 @@ s16 sub_8102D5C(s16 a0)
DestroyTask(taskId);
}
-/*static */void sub_8103D00(u8 a0)
+/*static */void LoadLightedTile(u8 tileId)
{
- LoadPalette(gUnknown_083EDD08[a0], gUnknown_083EDD30[a0], 2);
+ LoadPalette(gUnknown_083EDD08[tileId], gUnknown_083EDD30[tileId], 2);
}
/*static */void sub_8103D28(u8 a0)
@@ -2413,18 +2489,19 @@ s16 sub_8102D5C(s16 a0)
LoadPalette(gUnknown_083EDD1C[a0], gUnknown_083EDD30[a0], 2);
}
-/*static */void sub_8103D50(u8 a0)
+// probably light the bet number
+/*static */void LoadBetTiles(u8 betVal)
{
u8 i;
- for (i = 0; i < gUnknown_083EDD3B[a0]; i++)
- sub_8103D00(gUnknown_083EDD35[a0][i]);
+ for (i = 0; i < gNumberBettingTiles[betVal]; i++)
+ LoadLightedTile(gBettingTilesId[betVal][i]);
}
/*static */void sub_8103D8C(u8 a0)
{
u8 i;
- for (i = 0; i < gUnknown_083EDD3B[a0]; i++)
- sub_8103D28(gUnknown_083EDD35[a0][i]);
+ for (i = 0; i < gNumberBettingTiles[a0]; i++)
+ sub_8103D28(gBettingTilesId[a0][i]);
}
/*static */void sub_8103DC8(void)
@@ -2449,6 +2526,7 @@ s16 sub_8102D5C(s16 a0)
sprite->data[7] = 0;
}
+// something with payout digits
/*static */bool8 sub_8103E38(void)
{
u8 i;
@@ -2545,32 +2623,33 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_8104048(void)
{
- sSlotMachine->unk3E = CreateTask(sub_81040E8, 8);
+ sSlotMachine->unkTaskPointer = CreateTask(sub_81040E8, 8);
}
-/*static */void sub_8104064(u8 pikaPower)
+// possibly clear pikaPower
+/*static */void DisplayPikaPower(u8 pikaPower)
{
- struct Task *task = gTasks + sSlotMachine->unk3E;
- sub_812D394(task);
+ struct Task *task = gTasks + sSlotMachine->unkTaskPointer;
+ ClearTaskDataFields_2orHigher(task);
task->data[0] = 1;
task->data[1]++;
- task->data[15] = 1;
+ task->data[15] = 1; // points to a reelIndex
}
/*static */void sub_8104098(void)
{
- struct Task *task = gTasks + sSlotMachine->unk3E;
- sub_812D394(task);
+ struct Task *task = gTasks + sSlotMachine->unkTaskPointer;
+ ClearTaskDataFields_2orHigher(task);
task->data[0] = 3;
- task->data[15] = 1;
+ task->data[15] = 1; // points to a reelIndex
}
/*static */bool8 sub_81040C8(void)
{
- return gTasks[sSlotMachine->unk3E].data[15];
+ return gTasks[sSlotMachine->unkTaskPointer].data[15];
}
-/*static */void sub_81040E8(u8 taskId)
+/*static */void sub_81040E8(u8 taskId) // debug to see if taskId is machineId
{
gUnknown_083ECBB4[gTasks[taskId].data[0]](gTasks + taskId);
}
@@ -2596,11 +2675,11 @@ s16 sub_8102D5C(s16 a0)
r3 = 1, r2 = 1;
else if (task->data[1] == 16)
r3 = 2, r2 = 2;
- gUnknown_0203AACC[r2] = gUnknown_083ECBC4[r3][0];
- LoadBgTilemap(2, &gUnknown_0203AACC[r2], 2, r5 + 0x40);
+ selectedPikaPowerTile[r2] = pikaPowerTileTable[r3][0];
+ LoadBgTilemap(2, &selectedPikaPowerTile[r2], 2, r5 + 0x40);
sub_8105B88(task->data[2]);
task->data[0] = 0;
- task->data[15] = 0;
+ task->data[15] = 0; // points to a reelIndex
}
}
@@ -2615,8 +2694,8 @@ s16 sub_8102D5C(s16 a0)
r3 = 2, r2 = 2;
if (task->data[2] == 0)
{
- gUnknown_0203AACC[r2] = gUnknown_083ECBC4[r3][1];
- LoadBgTilemap(2, &gUnknown_0203AACC[r2], 2, r5 + 0x40);
+ selectedPikaPowerTile[r2] = pikaPowerTileTable[r3][1];
+ LoadBgTilemap(2, &selectedPikaPowerTile[r2], 2, r5 + 0x40);
task->data[1]--;
}
if (++task->data[2] >= 20)
@@ -2628,7 +2707,7 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_812D394(struct Task *task)
+/*static */void ClearTaskDataFields_2orHigher(struct Task *task)
{
u8 i;
@@ -2636,6 +2715,7 @@ s16 sub_8102D5C(s16 a0)
task->data[i] = 0;
}
+// possibly load tiles for pika power meter
/*static */void sub_810423C(u8 pikaPower)
{
s16 i;
@@ -2646,10 +2726,10 @@ s16 sub_8102D5C(s16 a0)
r3 = 0, r1 = 0;
if (i == 0)
r3 = 1, r1 = 1;
- else if (i == 15)
+ else if (i == 15) // pikaPower meter is full
r3 = 2, r1 = 2;
- gUnknown_0203AACC[r1] = gUnknown_083ECBC4[r3][0];
- LoadBgTilemap(2, &gUnknown_0203AACC[r1], 2, r4 + 0x40);
+ selectedPikaPowerTile[r1] = pikaPowerTileTable[r3][0];
+ LoadBgTilemap(2, &selectedPikaPowerTile[r1], 2, r4 + 0x40);
}
for (; i < 16; i++, r4++)
{
@@ -2658,35 +2738,39 @@ s16 sub_8102D5C(s16 a0)
r3 = 1, r1 = 1;
else if (i == 15)
r3 = 2, r1 = 2;
- gUnknown_0203AACC[r1] = gUnknown_083ECBC4[r3][1];
- LoadBgTilemap(2, &gUnknown_0203AACC[r1], 2, r4 + 0x40);
+ selectedPikaPowerTile[r1] = pikaPowerTileTable[r3][1];
+ LoadBgTilemap(2, &selectedPikaPowerTile[r1], 2, r4 + 0x40);
}
- gTasks[sSlotMachine->unk3E].data[1] = pikaPower;
+ gTasks[sSlotMachine->unkTaskPointer].data[1] = pikaPower;
}
-/*static */void sub_810430C(void)
+/*static */void BeginReelTime(void)
{
- u8 taskId = CreateTask(sub_810434C, 7);
- sub_810434C(taskId);
+ u8 taskId = CreateTask(RunReelTimeActions, 7);
+ RunReelTimeActions(taskId);
}
-/*static */bool8 sub_810432C(void)
+/*static */bool8 IsFinalTask_RunReelTimeActions(void)
{
- if (FindTaskIdByFunc(sub_810434C) == 0xFF)
+ if (FindTaskIdByFunc(RunReelTimeActions) == TAIL_SENTINEL)
return TRUE;
return FALSE;
}
-/*static */void sub_810434C(u8 taskId)
+/*static */void RunReelTimeActions(u8 taskId)
{
- gUnknown_083ECBD0[gTasks[taskId].data[0]](gTasks + taskId);
+ // task.data[0] points to which ReelTimeAction to do, and starts at 0
+ // task.data[1] has something to do with the threshold
+ // task.data[4] says how many pixels to advance the reel
+ // task.data[5] is a timer
+ ReelTimeActions[gTasks[taskId].data[0]](gTasks + taskId);
}
-/*static */void sub_810437C(struct Task *task)
+/*static */void ReelTimeAction1(struct Task *task)
{
- sSlotMachine->unk0A = 0;
- sSlotMachine->unk14 = 0;
- sSlotMachine->unk16 = 0;
+ sSlotMachine->fairRollsLeft = 0;
+ sSlotMachine->reelTimePixelOffset = 0;
+ sSlotMachine->reelTimePosition = 0;
task->data[0]++;
task->data[1] = 0;
task->data[2] = 30;
@@ -2701,16 +2785,18 @@ s16 sub_8102D5C(s16 a0)
sub_81052EC();
sub_81053A0();
sub_810545C();
- sub_8102680();
+ DrawReelTimeOutcome();
StopMapMusic();
PlayNewMapMusic(MUS_BD_TIME);
}
-/*static */void sub_81043EC(struct Task *task)
+/*static */void ReelTimeAction2(struct Task *task)
{
s16 r3;
gSpriteCoordOffsetX -= 8;
+ // boost threshold by 8
task->data[1] += 8;
+ // only consider lower 8 bits, and then shift them right 3
r3 = ((task->data[1] + 240) & 0xff) >> 3;
SetGpuReg(REG_OFFSET_BG1HOFS, task->data[1] & 0x1ff);
if (r3 != task->data[2] && task->data[3] <= 18)
@@ -2724,21 +2810,22 @@ s16 sub_8102D5C(s16 a0)
task->data[0]++;
task->data[3] = 0;
}
- sub_8102D28(task->data[4] >> 8);
+ // move ReelTime reel by the value in the upper 8 bits of task->data[4]
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
}
-/*static */void sub_8104468(struct Task *task)
+/*static */void ReelTimeAction3(struct Task *task)
{
- sub_8102D28(task->data[4] >> 8);
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
if (++task->data[5] >= 60)
{
task->data[0]++;
- sub_8105578();
- sub_81056F0();
+ CreateReelTimeSprites1();
+ CreateReelTimeSprite2();
}
}
-/*static */void sub_8104498(struct Task *task)
+/*static */void ReelTimeAction4(struct Task *task)
{
int r5;
u8 sp0[ARRAY_COUNT(gUnknown_085A75C0)];
@@ -2749,12 +2836,14 @@ s16 sub_8102D5C(s16 a0)
memcpy(sp4, gUnknown_085A75C4, sizeof(gUnknown_085A75C4));
memcpy(spC, gUnknown_085A75CC, sizeof(gUnknown_085A75CC));
- sub_8102D28(task->data[4] >> 8);
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
+ // gradually slow down the reel
task->data[4] -= 4;
r5 = 4 - (task->data[4] >> 8);
sub_8105688(sp4[r5]);
sub_81057E8(spC[r5]);
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->unk3F, sp0[r5]);
+ StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, sp0[r5]);
+ // once speed goes below 256, go to next ReelTimeAction and keep the speed level
if (task->data[4] <= 0x100)
{
task->data[0]++;
@@ -2763,21 +2852,21 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_8104548(struct Task *task)
+/*static */void ReelTimeAction5(struct Task *task)
{
- sub_8102D28(task->data[4] >> 8);
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
if (++task->data[5] >= 80)
{
task->data[0]++;
task->data[5] = 0;
sub_81057E8(2);
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->unk3F, 3);
+ StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 3);
}
}
-/*static */void sub_8104598(struct Task *task)
+/*static */void ReelTimeAction6(struct Task *task)
{
- sub_8102D28(task->data[4] >> 8);
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x80;
if (++task->data[5] >= 80)
{
@@ -2786,23 +2875,23 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_81045CC(struct Task *task)
+/*static */void ReelTimeAction7(struct Task *task)
{
- sub_8102D28(task->data[4] >> 8);
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x40;
if (++task->data[5] >= 40)
{
task->data[5] = 0;
- if (sSlotMachine->unk05)
- {
- if (sSlotMachine->unk0A <= task->data[6])
+ if (sSlotMachine->reelTimeDraw)
+ { // TODO: check if fairRollsLeft differs from reelTimeDraw
+ if (sSlotMachine->fairRollsLeft <= task->data[6])
task->data[0]++;
}
else if (task->data[6] > 3)
{
task->data[0]++;
}
- else if (sub_81026DC(task->data[6]))
+ else if (SkipToReelTimeAction14(task->data[6]))
{
task->data[0] = 14;
}
@@ -2810,28 +2899,28 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_810463C(struct Task *task)
+/*static */void ReelTimeAction_LandOnOutcome(struct Task *task)
{
- s16 r5 = sSlotMachine->unk14 % 20;
- if (r5)
+ s16 reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20;
+ if (reelTimePixelOffset)
{
- r5 = sub_8102D5C(task->data[4] >> 8);
+ reelTimePixelOffset = AdvanceReelTimeNextNumber(task->data[4] >> 8);
task->data[4] = (u8)task->data[4] + 0x40;
}
- else if (sub_8102C48(1) != sSlotMachine->unk05)
+ else if (GetNthNextReelTimePosition(1) != sSlotMachine->reelTimeDraw)
{
- sub_8102D28(task->data[4] >> 8);
- r5 = sSlotMachine->unk14 % 20;
+ IncrementReelTimePixelOffset(task->data[4] >> 8);
+ reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20;
task->data[4] = (u8)task->data[4] + 0x40;
}
- if (r5 == 0 && sub_8102C48(1) == sSlotMachine->unk05)
+ if (reelTimePixelOffset == 0 && GetNthNextReelTimePosition(1) == sSlotMachine->reelTimeDraw)
{
- task->data[4] = 0;
+ task->data[4] = 0; // stop moving
task->data[0]++;
}
}
-/*static */void sub_81046C0(struct Task *task)
+/*static */void ReelTimeAction9(struct Task *task)
{
if (++task->data[4] >= 60)
{
@@ -2839,17 +2928,17 @@ s16 sub_8102D5C(s16 a0)
sub_81056C0();
sub_8105804();
task->data[0]++;
- if(sSlotMachine->unk05 == 0)
+ if(sSlotMachine->reelTimeDraw == 0)
{
task->data[4] = 0xa0;
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->unk3F, 5);
+ StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5);
PlayFanfare(MUS_ME_ZANNEN);
}
else
{
task->data[4] = 0xc0;
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->unk3F, 4);
- gSprites[sSlotMachine->unk3F].animCmdIndex = 0;
+ StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 4);
+ gSprites[sSlotMachine->reelTimeSprite3F].animCmdIndex = 0;
if (sSlotMachine->pikaPower)
{
sub_8104098();
@@ -2860,13 +2949,13 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_8104764(struct Task *task)
+/*static */void ReelTimeAction10(struct Task *task)
{
if ((task->data[4] == 0 || --task->data[4] == 0) && !sub_81040C8())
task->data[0]++;
}
-/*static */void sub_8104794(struct Task *task)
+/*static */void ReelTimeAction11(struct Task *task)
{
s16 r4;
gSpriteCoordOffsetX -= 8;
@@ -2880,53 +2969,53 @@ s16 sub_8102D5C(s16 a0)
task->data[0]++;
}
-/*static */void sub_81047EC(struct Task *task)
+/*static */void ReelTimeAction12(struct Task *task)
{
- sSlotMachine->unk0B = 0;
- sSlotMachine->unk0A = sSlotMachine->unk05;
+ sSlotMachine->fairRollsUsed = 0;
+ sSlotMachine->fairRollsLeft = sSlotMachine->reelTimeDraw;
gSpriteCoordOffsetX = 0;
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
- sSlotMachine->unk1A = 8;
+ sSlotMachine->reelIncrement = 8;
sub_810514C();
sub_81054B8();
sub_8105524();
PlayNewMapMusic(sSlotMachine->backupMapMusic);
- if (sSlotMachine->unk0A == 0)
+ if (sSlotMachine->fairRollsLeft == 0)
{
- DestroyTask(FindTaskIdByFunc(sub_810434C));
+ DestroyTask(FindTaskIdByFunc(RunReelTimeActions));
}
else
{
sub_8104CAC(4);
- task->data[1] = dp15_jump_random_unknown();
+ task->data[1] = DrawNewReelIncrement();
task->data[2] = 0;
task->data[3] = 0;
task->data[0]++;
}
}
-/*static */void sub_8104860(struct Task *task)
+/*static */void ReelTimeAction13(struct Task *task)
{
- if (sSlotMachine->unk1A == task->data[1])
+ if (sSlotMachine->reelIncrement == task->data[1])
task->data[0]++;
- else if (sSlotMachine->unk1C[0] % 24 == 0 && (++task->data[2]& 0x07) == 0)
- sSlotMachine->unk1A >>= 1;
+ else if (sSlotMachine->reelPixelOffsets[0] % 24 == 0 && (++task->data[2]& 0x07) == 0)
+ sSlotMachine->reelIncrement >>= 1;
}
-/*static */void sub_81048A8(struct Task *task)
+/*static */void ReelTimeAction14(struct Task *task)
{
if (sub_8104E18())
- DestroyTask(FindTaskIdByFunc(sub_810434C));
+ DestroyTask(FindTaskIdByFunc(RunReelTimeActions));
}
-/*static */void sub_81048CC(struct Task *task)
+/*static */void ReelTimeAction15(struct Task *task)
{
sub_81054B8();
sub_81056C0();
sub_8105804();
sub_8105854();
gSprites[sSlotMachine->unk4E[0]].invisible = TRUE;
- StartSpriteAnimIfDifferent(gSprites + sSlotMachine->unk3F, 5);
+ StartSpriteAnimIfDifferent(gSprites + sSlotMachine->reelTimeSprite3F, 5);
task->data[0]++;
task->data[4] = 4;
task->data[5] = 0;
@@ -2935,7 +3024,7 @@ s16 sub_8102D5C(s16 a0)
PlaySE(SE_W153);
}
-/*static */void sub_8104940(struct Task *task)
+/*static */void ReelTimeAction16(struct Task *task)
{
gSpriteCoordOffsetY = task->data[4];
SetGpuReg(REG_OFFSET_BG1VOFS, task->data[4]);
@@ -2955,7 +3044,7 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_81049C8(struct Task *task)
+/*static */void ReelTimeAction17(struct Task *task)
{
gSpriteCoordOffsetY = 0;
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
@@ -2966,7 +3055,7 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_81049F8(struct Task *task)
+/*static */void ReelTimeAction18(struct Task *task)
{
gSpriteCoordOffsetX = 0;
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
@@ -2975,7 +3064,7 @@ s16 sub_8102D5C(s16 a0)
sub_8105554();
sub_8105524();
sub_81059B8();
- DestroyTask(FindTaskIdByFunc(sub_810434C));
+ DestroyTask(FindTaskIdByFunc(RunReelTimeActions));
}
/*static */void sub_8104A40(s16 a0, s16 a1)
@@ -2998,39 +3087,39 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_8104AB8(u8 a0)
+/*static */void OpenInfoBox(u8 seemsUnused)
{
- u8 taskId = CreateTask(sub_8104B0C, 1);
- gTasks[taskId].data[1] = a0;
- sub_8104B0C(taskId);
+ u8 taskId = CreateTask(RunInfoBoxActions, 1);
+ gTasks[taskId].data[1] = seemsUnused;
+ RunInfoBoxActions(taskId);
}
-/*static */bool8 sub_8104AEC(void)
+/*static */bool8 ClosedInfoBox(void)
{
- if (FindTaskIdByFunc(sub_8104B0C) == 0xFF)
+ if (FindTaskIdByFunc(RunInfoBoxActions) == 0xFF)
return TRUE;
else
return FALSE;
}
-/*static */void sub_8104B0C(u8 taskId)
+/*static */void RunInfoBoxActions(u8 taskId)
{
- gUnknown_083ECC30[gTasks[taskId].data[0]](gTasks + taskId);
+ InfoBoxActions[gTasks[taskId].data[0]](gTasks + taskId);
}
-/*static */void sub_8104B3C(struct Task *task)
+/*static */void InfoBox_FadeIn(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
task->data[0]++;
}
-/*static */void sub_8104B60(struct Task *task)
+/*static */void InfoBox_WaitForFade(struct Task *task)
{
if (!gPaletteFade.active)
task->data[0]++;
}
-/*static */void sub_8104B80(struct Task *task)
+/*static */void InfoBox_8104B80(struct Task *task)
{
sub_8104DA4();
sub_81065DC();
@@ -3040,15 +3129,15 @@ s16 sub_8102D5C(s16 a0)
task->data[0]++;
}
-/*static */void sub_812DD78(struct Task *task)
+/*static */void InfoBox_AddText(struct Task *task)
{
- AddTextPrinterParameterized3(1, 1, 2, 5, gUnknown_085A744C, 0, gText_ReelTimeHelp);
+ AddTextPrinterParameterized3(1, 1, 2, 5, gColors_ReelTimeHelp, 0, gText_ReelTimeHelp);
CopyWindowToVram(1, 3);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
task->data[0]++;
}
-/*static */void sub_8104BC8(struct Task *task)
+/*static */void InfoBox_AwaitPlayerInput(struct Task *task)
{
if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
{
@@ -3061,29 +3150,29 @@ s16 sub_8102D5C(s16 a0)
}
}
-/*static */void sub_812DE14(struct Task *task)
+/*static */void InfoBox_812DE14(struct Task *task)
{
sub_812F968();
ShowBg(3);
task->data[0]++;
}
-/*static */void sub_812DE30(struct Task *task)
+/*static */void InfoBox_812DE30(struct Task *task)
{
sub_8104CAC(task->data[1]);
task->data[0]++;
}
-/*static */void sub_8104BFC(struct Task *task)
+/*static */void InfoBox_8104BFC(struct Task *task)
{
sub_810423C(sSlotMachine->pikaPower);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
task->data[0]++;
}
-/*static */void sub_8104C44(struct Task *task)
+/*static */void InfoBox_FreeTask(struct Task *task)
{
- DestroyTask(FindTaskIdByFunc(sub_8104B0C));
+ DestroyTask(FindTaskIdByFunc(RunInfoBoxActions));
}
/*static */void sub_8104C5C(void)
@@ -3091,13 +3180,14 @@ s16 sub_8102D5C(s16 a0)
u8 i;
struct Task *task;
i = CreateTask(sub_8104E74_, 3);
- sSlotMachine->unk3D = i;
+ sSlotMachine->unkTaskPointer3D = i;
task = gTasks + i;
task->data[1] = -1;
for (i = 4; i < 16; i++)
task->data[i] = MAX_SPRITES;
}
+// possibly initialize each wheel
/*static */void sub_8104CAC(u8 arg0)
{
u8 i;
@@ -3105,7 +3195,7 @@ s16 sub_8102D5C(s16 a0)
sub_8104DA4();
- task = gTasks + sSlotMachine->unk3D;
+ task = gTasks + sSlotMachine->unkTaskPointer3D;
task->data[1] = arg0;
for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++)
@@ -3123,7 +3213,7 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_8104D30(u8 a0, SpriteCallback a1, s16 a2, s16 a3, s16 a4)
{
u8 i;
- struct Task *task = gTasks + sSlotMachine->unk3D;
+ struct Task *task = gTasks + sSlotMachine->unkTaskPointer3D;
for (i = 4; i < 16; i++)
{
if (task->data[i] == MAX_SPRITES)
@@ -3137,7 +3227,7 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_8104DA4(void)
{
u8 i;
- struct Task *task = gTasks + sSlotMachine->unk3D;
+ struct Task *task = gTasks + sSlotMachine->unkTaskPointer3D;
if ((u16)task->data[1] != 0xFFFF)
gUnknown_083ED064[task->data[1]]();
for (i = 4; i < 16; i++)
@@ -3153,7 +3243,7 @@ s16 sub_8102D5C(s16 a0)
/*static */bool8 sub_8104E18(void)
{
u8 i;
- struct Task *task = gTasks + sSlotMachine->unk3D;
+ struct Task *task = gTasks + sSlotMachine->unkTaskPointer3D;
for (i = 4; i < 16; i++)
{
if (task->data[i] != MAX_SPRITES)
@@ -3192,12 +3282,14 @@ s16 sub_8102D5C(s16 a0)
}
}
+// debug this to find out what sprite->data[0] and sprite->data[2] are holding
+// I would guess this updates the sprite location in the reel
/*static */void sub_8104F18(struct Sprite *sprite)
{
- sprite->data[2] = sSlotMachine->unk1C[sprite->data[0]] + sprite->data[1];
+ sprite->data[2] = sSlotMachine->reelPixelOffsets[sprite->data[0]] + sprite->data[1];
sprite->data[2] %= 120;
- sprite->pos1.y = sSlotMachine->unk22[sprite->data[0]] + 28 + sprite->data[2];
- sprite->sheetTileStart = GetSpriteTileStartByTag(GetTagOfReelSymbolOnScreenAtPos(sprite->data[0], sprite->data[2] / 24));
+ sprite->pos1.y = sSlotMachine->stopReelPixelOffset[sprite->data[0]] + 28 + sprite->data[2];
+ sprite->sheetTileStart = GetSpriteTileStartByTag(GetNearbyTag(sprite->data[0], sprite->data[2] / 24));
SetSpriteSheetFrameTileNum(sprite);
}
@@ -3268,12 +3360,12 @@ s16 sub_8102D5C(s16 a0)
spriteId = CreateSprite(&spriteTemplate, 280, 80, 1);
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].coordOffsetEnabled = TRUE;
- sSlotMachine->unk3F = spriteId;
+ sSlotMachine->reelTimeSprite3F = spriteId;
}
/*static */void sub_810514C(void)
{
- DestroySprite(gSprites + sSlotMachine->unk3F);
+ DestroySprite(gSprites + sSlotMachine->reelTimeSprite3F);
if (gUnknown_0203AAE4 != NULL)
FREE_AND_SET_NULL(gUnknown_0203AAE4);
}
@@ -3362,10 +3454,10 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_810535C(struct Sprite *sprite)
{
- s16 r0 = (u16)(sSlotMachine->unk14 + sprite->data[7]);
+ s16 r0 = (u16)(sSlotMachine->reelTimePixelOffset + sprite->data[7]);
r0 %= 40;
sprite->pos1.y = r0 + 59;
- StartSpriteAnimIfDifferent(sprite, sub_8102C48(r0 / 20));
+ StartSpriteAnimIfDifferent(sprite, GetNthNextReelTimePosition(r0 / 20));
}
/*static */void sub_81053A0(void)
@@ -3427,13 +3519,14 @@ s16 sub_8102D5C(s16 a0)
FREE_AND_SET_NULL(gUnknown_0203AAF0);
}
-/*static */void sub_8105578(void)
+// TODO: check if this is true
+/*static */void CreateReelTimeSprites1(void)
{
u8 spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0x98, 0x20, 5);
struct Sprite *sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
sprite->hFlip = TRUE;
- sSlotMachine->unk50[0] = spriteId;
+ sSlotMachine->reelTimeSprites1[0] = spriteId;
sprite->data[0] = 8;
sprite->data[1] = -1;
sprite->data[2] = -1;
@@ -3442,7 +3535,7 @@ s16 sub_8102D5C(s16 a0)
spriteId = CreateSprite(&gSpriteTemplate_83ED504, 0xb8, 0x20, 5);
sprite = &gSprites[spriteId];
sprite->oam.priority = 1;
- sSlotMachine->unk50[1] = spriteId;
+ sSlotMachine->reelTimeSprites1[1] = spriteId;
sprite->data[1] = 1;
sprite->data[2] = -1;
sprite->data[7] = 0x20;
@@ -3472,8 +3565,8 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_8105688(s16 a0)
{
- gSprites[sSlotMachine->unk50[0]].data[7] = a0;
- gSprites[sSlotMachine->unk50[1]].data[7] = a0;
+ gSprites[sSlotMachine->reelTimeSprites1[0]].data[7] = a0;
+ gSprites[sSlotMachine->reelTimeSprites1[1]].data[7] = a0;
}
/*static */void sub_81056C0(void)
@@ -3481,10 +3574,10 @@ s16 sub_8102D5C(s16 a0)
u8 i;
for (i = 0; i < 2; i++)
- DestroySprite(&gSprites[sSlotMachine->unk50[i]]);
+ DestroySprite(&gSprites[sSlotMachine->reelTimeSprites1[i]]);
}
-/*static */void sub_81056F0(void)
+/*static */void CreateReelTimeSprite2(void)
{
u8 spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x48, 0x50, 3);
gSprites[spriteId].oam.priority = 1;
@@ -3492,12 +3585,12 @@ s16 sub_8102D5C(s16 a0)
gSprites[spriteId].data[5] = 0;
gSprites[spriteId].data[6] = 16;
gSprites[spriteId].data[7] = 8;
- sSlotMachine->unk52[0] = spriteId;
+ sSlotMachine->reelTimeSprites2[0] = spriteId;
spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x68, 0x50, 3);
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].hFlip = TRUE;
- sSlotMachine->unk52[1] = spriteId;
+ sSlotMachine->reelTimeSprites2[1] = spriteId;
}
/*static */void sub_8105784(struct Sprite *sprite)
@@ -3514,7 +3607,7 @@ s16 sub_8102D5C(s16 a0)
/*static */void sub_81057E8(s16 a0)
{
- gSprites[sSlotMachine->unk52[0]].data[7] = a0;
+ gSprites[sSlotMachine->reelTimeSprites2[0]].data[7] = a0;
}
/*static */void sub_8105804(void)
@@ -3522,7 +3615,7 @@ s16 sub_8102D5C(s16 a0)
u8 i;
MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0);
for (i = 0; i < 2; i++)
- DestroySprite(&gSprites[sSlotMachine->unk52[i]]);
+ DestroySprite(&gSprites[sSlotMachine->reelTimeSprites2[i]]);
}
/*static */void sub_8105854(void)
@@ -3782,7 +3875,7 @@ s16 sub_8102D5C(s16 a0)
switch (sprite->data[0])
{
case 0:
- StartSpriteAnim(sprite, sSlotMachine->unk0A - 1);
+ StartSpriteAnim(sprite, sSlotMachine->fairRollsLeft - 1);
sprite->data[0]++;
// fallthrough
case 1:
@@ -4271,7 +4364,7 @@ extern const u16 gSlotMachineMenu_Pal[];
gUnknown_0203AB28[1].size = 0x180;
}
-const u8 sReelSymbols[][21] =
+const u8 sReelSymbols[][REEL_NUM_TAGS] =
{
{
SLOT_MACHINE_TAG_7_RED,
@@ -4348,13 +4441,13 @@ const u8 gUnknown_083ECCF1[] = {
1, 0, 5, 4, 3, 2
};
-const s16 gUnknown_083ECCF8[][2] = {
+const s16 sInitialReelPositions[][2] = {
{0, 6},
{0, 10},
{0, 2}
};
-const u8 gUnknown_083ECD04[][3] = {
+const u8 sSlotLuckinessTable1[][3] = {
{1, 1, 12},
{1, 1, 14},
{2, 2, 14},
@@ -4363,13 +4456,13 @@ const u8 gUnknown_083ECD04[][3] = {
{3, 3, 16}
};
-const u8 gUnknown_083ECD16[][6] = {
+const u8 sSlotLuckinessTable2[][6] = {
{25, 25, 30, 40, 40, 50},
{25, 25, 30, 30, 35, 35},
{25, 25, 30, 25, 25, 30}
};
-const u8 gUnknown_083ECD28[][6] = {
+const u8 sSlotLuckinessTable3[][6] = {
{20, 25, 25, 20, 25, 25},
{12, 15, 15, 18, 19, 22},
{25, 25, 25, 30, 30, 40},
@@ -4377,7 +4470,7 @@ const u8 gUnknown_083ECD28[][6] = {
{40, 40, 35, 35, 40, 40}
};
-const u8 gUnknown_083ECD46[][17] = {
+const u8 ReelTimeProbabilityTable0[][17] = {
{243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5},
{ 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5},
{ 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40},
@@ -4386,7 +4479,7 @@ const u8 gUnknown_083ECD46[][17] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6}
};
-const u8 gUnknown_083ECDAC[][17] = {
+const u8 ReelTimeProbabilityTable1[][17] = {
{ 243, 243, 243, 200, 200, 200, 200, 160, 160, 160, 160, 160, 160, 70, 70, 70, 5},
{ 5, 5, 5, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 2, 2, 2, 6},
{ 4, 4, 4, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 40, 40, 40, 35},
@@ -4395,11 +4488,11 @@ const u8 gUnknown_083ECDAC[][17] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 60}
};
-const u16 gUnknown_083ECE12[] = {
- 0x80, 0xaf, 0xc8, 0xe1, 0x100
+const u16 ProbabilityTable_SkipToReelTimeAction14[] = {
+ 128, 175, 200, 225, 256
};
-const u16 gUnknown_083ECE1C[][2] = {
+const u16 ReelIncrementTable[][2] = {
{10, 5},
{10, 10},
{10, 15},
@@ -4407,19 +4500,26 @@ const u16 gUnknown_083ECE1C[][2] = {
{10, 35}
};
-const u16 gUnknown_083ECE30[] = {
+const u16 ReelTimeBonusIncrementTable[] = {
0, 5, 10, 15, 20
};
-const u8 gUnknown_083ECE3A[] = {
- 6, 4, 3, 2, 5, 0, 0, 0
+// tentative name
+const u8 LuckyFlagTagOutput[] = {
+ SLOT_MACHINE_TAG_REPLAY, SLOT_MACHINE_TAG_CHERRY, SLOT_MACHINE_TAG_LOTAD, SLOT_MACHINE_TAG_AZURILL, SLOT_MACHINE_TAG_POWER, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED, SLOT_MACHINE_TAG_7_RED
};
-const u16 gUnknown_083ECE42[] = {
+/*
+sSlotMachine->luckyFlags: 7, 6, 5, 4, 3, 2, 1, 0
+If you got Lucky2 in 1 attempt, flag 7 gets set.
+If you got Lucky2 in 2 attempts, flag 5 gets set.
+If you got Lucky2 in 3 attempts, flag 6 gets set.
+*/
+const u16 FlagsAttemptAtLuckiness1[] = { // order seems buggy
0x80, 0x20, 0x40
};
-const u16 gUnknown_083ECE48[] = {
+const u16 FlagsAttemptAtLuckiness2[] = {
0x10, 0x08, 0x04, 0x02, 0x01
};
diff --git a/src/task.c b/src/task.c
index 14b97a361..a2df66de8 100644
--- a/src/task.c
+++ b/src/task.c
@@ -1,9 +1,6 @@
#include "global.h"
#include "task.h"
-#define HEAD_SENTINEL 0xFE
-#define TAIL_SENTINEL 0xFF
-
struct Task gTasks[NUM_TASKS];
static void InsertTask(u8 newTaskId);
diff --git a/src/tv.c b/src/tv.c
index f282b09f0..cbeb189a8 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -62,7 +62,7 @@ IWRAM_DATA s8 sTVShowMixingCurSlot;
EWRAM_DATA u16 sPokemonAnglerSpecies = 0;
EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0;
EWRAM_DATA u16 sFindThatGamerCoinsSpent = 0;
-EWRAM_DATA bool8 sFindThatGamerWhichGame = FALSE;
+EWRAM_DATA bool8 sFindThatGamerWhichGame = SLOT_MACHINE;
EWRAM_DATA ALIGNED(4) u8 sRecordMixingPartnersWithoutShowsToShare = 0;
EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0;
EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {};
@@ -2019,7 +2019,7 @@ void sub_80EDCE8(void)
}
}
-void sub_80EDD78(u16 nCoinsPaidOut)
+void reportNewCoinTotal(u16 nCoinsPaidOut)
{
TVShow *show;
bool8 flag;
@@ -2031,7 +2031,7 @@ void sub_80EDD78(u16 nCoinsPaidOut)
flag = FALSE;
switch (sFindThatGamerWhichGame)
{
- case FALSE:
+ case SLOT_MACHINE:
if (nCoinsPaidOut >= sFindThatGamerCoinsSpent + 200)
{
flag = TRUE;
@@ -2044,7 +2044,7 @@ void sub_80EDD78(u16 nCoinsPaidOut)
break;
}
return;
- case TRUE:
+ case ROULETTE:
if (nCoinsPaidOut >= sFindThatGamerCoinsSpent + 50)
{
flag = TRUE;
@@ -2072,15 +2072,15 @@ void sub_80EDD78(u16 nCoinsPaidOut)
}
}
-void sub_80EDE70(u16 nCoinsSpent)
+void reportPlayedSlotMachine(u16 nCoinsSpent)
{
- sFindThatGamerWhichGame = FALSE;
+ sFindThatGamerWhichGame = SLOT_MACHINE;
sFindThatGamerCoinsSpent = nCoinsSpent;
}
-void sub_80EDE84(u16 nCoinsSpent)
+void reportPlayedRoulette(u16 nCoinsSpent)
{
- sFindThatGamerWhichGame = TRUE;
+ sFindThatGamerWhichGame = ROULETTE;
sFindThatGamerCoinsSpent = nCoinsSpent;
}