Merge pull request #1904 from GriffinRichards/temp-alias
Add temp flag and var aliases
This commit is contained in:
@@ -737,7 +737,7 @@ static void SetArenaData(void)
|
||||
static void SaveArenaChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
@@ -3020,7 +3020,7 @@ static void SetDomeOpponentGraphicsId(void)
|
||||
static void SaveDomeChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ static void SetBattleFactoryData(void)
|
||||
static void SaveFactoryChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
@@ -181,7 +181,7 @@ static void IncrementPalaceStreak(void)
|
||||
static void SavePalaceChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
@@ -708,7 +708,7 @@ static void ClearInWildMonRoom(void)
|
||||
static void SavePikeChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveMapView();
|
||||
TrySavingData(SAVE_LINK);
|
||||
|
||||
@@ -931,7 +931,7 @@ static void SetBattlePyramidData(void)
|
||||
static void SavePyramidChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveMapView();
|
||||
TrySavingData(SAVE_LINK);
|
||||
@@ -1441,7 +1441,7 @@ void PausePyramidChallenge(void)
|
||||
{
|
||||
RestorePyramidPlayerParty();
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED;
|
||||
VarSet(VAR_TEMP_E, 0);
|
||||
VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0);
|
||||
LoadPlayerParty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -407,7 +407,7 @@ static void DoStandardWildBattle(void)
|
||||
gBattleTypeFlags = 0;
|
||||
if (InBattlePyramid())
|
||||
{
|
||||
VarSet(VAR_TEMP_E, 0);
|
||||
VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0);
|
||||
gBattleTypeFlags |= BATTLE_TYPE_PYRAMID;
|
||||
}
|
||||
CreateBattleStartTask(GetWildBattleTransition(), 0);
|
||||
@@ -1277,7 +1277,7 @@ void BattleSetup_StartTrainerBattle(void)
|
||||
|
||||
if (InBattlePyramid())
|
||||
{
|
||||
VarSet(VAR_TEMP_E, 0);
|
||||
VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0);
|
||||
gBattleTypeFlags |= BATTLE_TYPE_PYRAMID;
|
||||
|
||||
if (gNoOfApproachingTrainers == 2)
|
||||
|
||||
@@ -140,7 +140,7 @@ static void BufferVerdanturfTentTrainerIntro(void)
|
||||
static void SaveVerdanturfTentChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
@@ -190,7 +190,7 @@ static void SetFallarborTentPrize(void)
|
||||
static void SaveFallarborTentChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
@@ -245,7 +245,7 @@ static void SetSlateportTentPrize(void)
|
||||
static void SaveSlateportTentChallenge(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
@@ -2200,7 +2200,7 @@ static void SaveTowerChallenge(void)
|
||||
SaveBattleTowerRecord();
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0);
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
@@ -278,6 +278,8 @@ bool8 FldEff_UsePuzzleEffect(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// The puzzle to unlock Regice's cave requires the player to interact with the braille message on the back wall,
|
||||
// step on every space on the perimeter of the cave (and only those spaces) then return to the back wall.
|
||||
bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
{
|
||||
u8 i;
|
||||
@@ -287,9 +289,11 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
{
|
||||
if (FlagGet(FLAG_SYS_BRAILLE_REGICE_COMPLETED))
|
||||
return FALSE;
|
||||
if (FlagGet(FLAG_TEMP_2) == FALSE)
|
||||
// Set when the player interacts with the braille message
|
||||
if (FlagGet(FLAG_TEMP_REGICE_PUZZLE_STARTED) == FALSE)
|
||||
return FALSE;
|
||||
if (FlagGet(FLAG_TEMP_3) == TRUE)
|
||||
// Cleared when the player interacts with the braille message
|
||||
if (FlagGet(FLAG_TEMP_REGICE_PUZZLE_FAILED) == TRUE)
|
||||
return FALSE;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sRegicePathCoords); i++)
|
||||
@@ -298,8 +302,7 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
u8 yPos = sRegicePathCoords[i][1];
|
||||
if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos)
|
||||
{
|
||||
u16 varValue;
|
||||
|
||||
// Player is standing on a correct space, set the corresponding bit
|
||||
if (i < 16)
|
||||
{
|
||||
u16 val = VarGet(VAR_REGICE_STEPS_1);
|
||||
@@ -319,11 +322,11 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
VarSet(VAR_REGICE_STEPS_3, val);
|
||||
}
|
||||
|
||||
varValue = VarGet(VAR_REGICE_STEPS_1);
|
||||
if (varValue != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF)
|
||||
// Make sure a full lap has been completed. There are 36 steps in a lap, so 16+16+4 bits to check across the 3 vars.
|
||||
if (VarGet(VAR_REGICE_STEPS_1) != 0xFFFF || VarGet(VAR_REGICE_STEPS_2) != 0xFFFF || VarGet(VAR_REGICE_STEPS_3) != 0xF)
|
||||
return FALSE;
|
||||
|
||||
// This final check is redundant.
|
||||
// A lap has been completed, the puzzle is complete when the player returns to the braille message.
|
||||
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21)
|
||||
return TRUE;
|
||||
else
|
||||
@@ -331,8 +334,9 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
|
||||
}
|
||||
}
|
||||
|
||||
FlagSet(FLAG_TEMP_3);
|
||||
FlagClear(FLAG_TEMP_2);
|
||||
// Player stepped on an incorrect space, puzzle failed.
|
||||
FlagSet(FLAG_TEMP_REGICE_PUZZLE_FAILED);
|
||||
FlagClear(FLAG_TEMP_REGICE_PUZZLE_STARTED);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
@@ -2,11 +2,6 @@
|
||||
#include "event_data.h"
|
||||
#include "pokedex.h"
|
||||
|
||||
#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1)
|
||||
#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1)
|
||||
#define NUM_DAILY_FLAGS (DAILY_FLAGS_END - DAILY_FLAGS_START + 1)
|
||||
#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1)
|
||||
|
||||
#define SPECIAL_FLAGS_SIZE (NUM_SPECIAL_FLAGS / 8) // 8 flags per byte
|
||||
#define TEMP_FLAGS_SIZE (NUM_TEMP_FLAGS / 8)
|
||||
#define DAILY_FLAGS_SIZE (NUM_DAILY_FLAGS / 8)
|
||||
@@ -43,8 +38,8 @@ void InitEventData(void)
|
||||
|
||||
void ClearTempFieldEventData(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags + (TEMP_FLAGS_START / 8), 0, TEMP_FLAGS_SIZE);
|
||||
memset(gSaveBlock1Ptr->vars + ((TEMP_VARS_START - VARS_START) * 2), 0, TEMP_VARS_SIZE);
|
||||
memset(&gSaveBlock1Ptr->flags[TEMP_FLAGS_START / 8], 0, TEMP_FLAGS_SIZE);
|
||||
memset(&gSaveBlock1Ptr->vars[TEMP_VARS_START - VARS_START], 0, TEMP_VARS_SIZE);
|
||||
FlagClear(FLAG_SYS_ENC_UP_ITEM);
|
||||
FlagClear(FLAG_SYS_ENC_DOWN_ITEM);
|
||||
FlagClear(FLAG_SYS_USE_STRENGTH);
|
||||
@@ -54,7 +49,7 @@ void ClearTempFieldEventData(void)
|
||||
|
||||
void ClearDailyFlags(void)
|
||||
{
|
||||
memset(gSaveBlock1Ptr->flags + (DAILY_FLAGS_START / 8), 0, DAILY_FLAGS_SIZE);
|
||||
memset(&gSaveBlock1Ptr->flags[DAILY_FLAGS_START / 8], 0, DAILY_FLAGS_SIZE);
|
||||
}
|
||||
|
||||
void DisableNationalPokedex(void)
|
||||
|
||||
@@ -3192,8 +3192,8 @@ void GetBattleFrontierTutorMoveIndex(void)
|
||||
u16 moveIndex = 0;
|
||||
gSpecialVar_0x8005 = 0;
|
||||
|
||||
moveTutor = VarGet(VAR_TEMP_E);
|
||||
moveIndex = VarGet(VAR_TEMP_D);
|
||||
moveTutor = VarGet(VAR_TEMP_FRONTIER_TUTOR_ID);
|
||||
moveIndex = VarGet(VAR_TEMP_FRONTIER_TUTOR_SELECTION);
|
||||
|
||||
if (moveTutor != 0)
|
||||
{
|
||||
|
||||
@@ -100,6 +100,9 @@ static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] =
|
||||
};
|
||||
|
||||
// Each element corresponds to a y coordinate row in the sootopolis gym 1F map.
|
||||
// The rows with ice each have a temp var used to track the ice steps. Each bit in the var
|
||||
// represents whether ice at that x coordinate (starting from the left edge) has been visited.
|
||||
// This method of tracking steps will break if the ice puzzle is more than 16 map spaces wide.
|
||||
static const u16 sSootopolisGymIceRowVars[] =
|
||||
{
|
||||
0,
|
||||
|
||||
@@ -789,28 +789,28 @@ void CallFrontierUtilFunc(void)
|
||||
sFrontierUtilFuncs[gSpecialVar_0x8004]();
|
||||
}
|
||||
|
||||
// Buffers into VAR_TEMP_0 specifically because this is used to react to the status in OnFrame map scripts
|
||||
// VAR_TEMP_CHALLENGE_STATUS is used to react to the status in OnFrame map scripts
|
||||
static void GetChallengeStatus(void)
|
||||
{
|
||||
VarSet(VAR_TEMP_0, 0xFF);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, 0xFF);
|
||||
switch (gSaveBlock2Ptr->frontier.challengeStatus)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case CHALLENGE_STATUS_SAVING:
|
||||
FrontierGamblerSetWonOrLost(FALSE);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
case CHALLENGE_STATUS_LOST:
|
||||
FrontierGamblerSetWonOrLost(FALSE);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
case CHALLENGE_STATUS_WON:
|
||||
FrontierGamblerSetWonOrLost(TRUE);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
case CHALLENGE_STATUS_PAUSED:
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
VarSet(VAR_TEMP_CHALLENGE_STATUS, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,7 +318,7 @@ static void Task_RecordMixing_Main(u8 taskId)
|
||||
sSentRecord = Alloc(sizeof(*sSentRecord));
|
||||
sReceivedRecords = Alloc(sizeof(*sReceivedRecords) * MAX_LINK_PLAYERS);
|
||||
SetLocalLinkPlayerId(gSpecialVar_0x8005);
|
||||
VarSet(VAR_TEMP_0, 1);
|
||||
VarSet(VAR_TEMP_MIXED_RECORDS, 1);
|
||||
sReadyToReceive = FALSE;
|
||||
PrepareExchangePacket();
|
||||
CreateRecordMixingLights();
|
||||
@@ -972,14 +972,14 @@ static void ReceiveGiftItem(u16 *item, u8 multiplayerId)
|
||||
{
|
||||
if (!CheckBagHasItem(*item, 1) && !CheckPCHasItem(*item, 1) && AddBagItem(*item, 1))
|
||||
{
|
||||
VarSet(VAR_TEMP_1, *item);
|
||||
VarSet(VAR_TEMP_RECORD_MIX_GIFT_ITEM, *item);
|
||||
StringCopy(gStringVar1, gLinkPlayers[0].name);
|
||||
if (*item == ITEM_EON_TICKET)
|
||||
FlagSet(FLAG_ENABLE_SHIP_SOUTHERN_ISLAND);
|
||||
}
|
||||
else
|
||||
{
|
||||
VarSet(VAR_TEMP_1, ITEM_NONE);
|
||||
VarSet(VAR_TEMP_RECORD_MIX_GIFT_ITEM, ITEM_NONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,12 +17,10 @@
|
||||
#define GATE_ROT_ACW(arm, longArm) GATE_ROT(ROTATE_ANTICLOCKWISE, arm, longArm)
|
||||
#define GATE_ROT_NONE 255
|
||||
|
||||
// static functions
|
||||
static void SpriteCallback_RotatingGate(struct Sprite *sprite);
|
||||
static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY);
|
||||
static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite);
|
||||
|
||||
// enums
|
||||
enum
|
||||
{
|
||||
/*
|
||||
@@ -180,7 +178,6 @@ enum
|
||||
PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6,
|
||||
};
|
||||
|
||||
// structure
|
||||
struct RotatingGatePuzzle
|
||||
{
|
||||
s16 x;
|
||||
@@ -189,7 +186,6 @@ struct RotatingGatePuzzle
|
||||
u8 orientation;
|
||||
};
|
||||
|
||||
// .rodata
|
||||
// Fortree
|
||||
static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] =
|
||||
{
|
||||
@@ -219,6 +215,15 @@ static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] =
|
||||
{10, 19, GATE_SHAPE_L3, GATE_ORIENTATION_180},
|
||||
};
|
||||
|
||||
#define MAX_GATES max(ARRAY_COUNT(sRotatingGate_FortreePuzzleConfig), \
|
||||
ARRAY_COUNT(sRotatingGate_TrickHousePuzzleConfig))
|
||||
|
||||
// Rotating gate puzzles use the temp vars as a byte array to track the orientation of each gate.
|
||||
// The assert below makes sure the existing puzzles don't have too many gates, and aren't quietly
|
||||
// using vars outside the temp vars. Aside from potentially reading/writing vars being used for
|
||||
// something else, using vars that persist when exiting the map could softlock the puzzle.
|
||||
STATIC_ASSERT(MAX_GATES <= (2 * NUM_TEMP_VARS), TooManyRotatingGates)
|
||||
|
||||
static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/l1.4bpp");
|
||||
static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/l2.4bpp");
|
||||
static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/l3.4bpp");
|
||||
@@ -639,9 +644,7 @@ static void RotatingGate_ResetAllGateOrientations(void)
|
||||
u8 *ptr = (u8 *)GetVarPointer(VAR_TEMP_0);
|
||||
|
||||
for (i = 0; i < sRotatingGate_PuzzleCount; i++)
|
||||
{
|
||||
ptr[i] = sRotatingGate_PuzzleConfig[i].orientation;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 RotatingGate_GetGateOrientation(u8 gateId)
|
||||
|
||||
12
src/tv.c
12
src/tv.c
@@ -940,9 +940,8 @@ void GabbyAndTyBeforeInterview(void)
|
||||
gSaveBlock1Ptr->gabbyAndTyData.mon2 = gBattleResults.playerMon2Species;
|
||||
gSaveBlock1Ptr->gabbyAndTyData.lastMove = gBattleResults.lastUsedMovePlayer;
|
||||
if (gSaveBlock1Ptr->gabbyAndTyData.battleNum != 0xFF)
|
||||
{
|
||||
gSaveBlock1Ptr->gabbyAndTyData.battleNum++;
|
||||
}
|
||||
|
||||
gSaveBlock1Ptr->gabbyAndTyData.battleTookMoreThanOneTurn = gBattleResults.playerMonWasDamaged;
|
||||
|
||||
if (gBattleResults.playerFaintCounter != 0)
|
||||
@@ -974,9 +973,7 @@ void GabbyAndTyBeforeInterview(void)
|
||||
|
||||
TakeGabbyAndTyOffTheAir();
|
||||
if (gSaveBlock1Ptr->gabbyAndTyData.lastMove == MOVE_NONE)
|
||||
{
|
||||
FlagSet(FLAG_TEMP_1);
|
||||
}
|
||||
FlagSet(FLAG_TEMP_SKIP_GABBY_INTERVIEW);
|
||||
}
|
||||
|
||||
void GabbyAndTyAfterInterview(void)
|
||||
@@ -3386,6 +3383,7 @@ u8 CheckForPlayersHouseNews(void)
|
||||
|
||||
void GetMomOrDadStringForTVMessage(void)
|
||||
{
|
||||
// If the player is checking the TV in their house it will only refer to their Mom.
|
||||
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_1F))
|
||||
{
|
||||
if (gSaveBlock2Ptr->playerGender == MALE)
|
||||
@@ -3415,6 +3413,7 @@ void GetMomOrDadStringForTVMessage(void)
|
||||
}
|
||||
else if (VarGet(VAR_TEMP_3) > 2)
|
||||
{
|
||||
// Should only happen if VAR_TEMP_3 is already in use by something else.
|
||||
if (VarGet(VAR_TEMP_3) % 2 == 0)
|
||||
StringCopy(gStringVar1, gText_Mom);
|
||||
else
|
||||
@@ -3422,6 +3421,9 @@ void GetMomOrDadStringForTVMessage(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Randomly choose whether to refer to Mom or Dad.
|
||||
// NOTE: Because of this, any map that has a TV in it shouldn't rely on VAR_TEMP_3.
|
||||
// If its value is 0, checking the TV will set it to 1 or 2.
|
||||
if (Random() % 2 != 0)
|
||||
{
|
||||
StringCopy(gStringVar1, gText_Mom);
|
||||
|
||||
Reference in New Issue
Block a user