Skip to content

Commit 545c09d

Browse files
committed
Added a cheat that allows the player to lock all GSWFs, LSWFs, and GFs
Also did the following: 1. Renamed CheatsForceItemDropAreas, CheatsForceItemDropAreasFullNames, and CheatsForceItemDropAreasSize to CheatsClearAreaFlagsAreas, CheatsClearAreaFlagsAreasFullNames, and CheatsClearAreaFlagsAreasSize respectively. 2. Updated the order of the bools set in setInitialSettings, as well as added in some missing entries to it.
1 parent 444d01e commit 545c09d

File tree

10 files changed

+261
-27
lines changed

10 files changed

+261
-27
lines changed

ttyd-tools/rel/include/codes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ void lockMarioHPToMax();
1919
void bobberyEarly();
2020
void spawnItem();
2121
void checkIfAreaFlagsShouldBeCleared();
22+
void lockFlags();
2223

2324
void displaySequenceInPauseMenu();
2425
void displayOnScreenTimer();

ttyd-tools/rel/include/draw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ void drawButtonCombo(uint32_t buttonCombo, int32_t posY, const char *description
9494
void drawChangeButtonCombo(uint16_t &currentButtonCombo);
9595
void drawCheatsForcedDropItem();
9696
void drawCheatsResolveFades();
97+
void drawCheatsLockFlags();
9798
void drawCheatsManageFlagsMain(uint32_t currentMenu);
9899
void drawCheatsClearArea();
99100
void drawWarpsOptions();

ttyd-tools/rel/include/global.h

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ enum MENU_NAMES
2323
CHEATS_NO_BUTTON_COMBO,
2424
CHEATS_NPC_FORCE_DROP,
2525
CHEATS_RESOLVE_FADES,
26+
CHEATS_LOCK_FLAGS,
2627
CHEATS_MANAGE_FLAGS,
2728
CHEATS_MANAGE_FLAGS_MAIN,
2829
CHEATS_CLEAR_AREA_FLAGS,
@@ -86,6 +87,7 @@ enum CHEATS_OPTIONS
8687
BOBBERY_EARLY,
8788
FORCE_ITEM_DROP,
8889
RESOLVE_FADES,
90+
LOCK_FLAGS,
8991
MANAGE_FLAGS,
9092
CLEAR_AREA_FLAGS,
9193
};
@@ -114,6 +116,13 @@ enum CHEATS_RESOLVE_FADES_RETURN_VALUES
114116
FADE_RESOLVE_SUCCESS = 1,
115117
};
116118

119+
120+
enum CHEATS_LOCK_FLAGS_SELECTION
121+
{
122+
LOCK_CURRENT_FLAGS = 1,
123+
SET_NEW_AREA,
124+
};
125+
117126
enum CHEATS_MANAGE_FLAGS_SELECTION
118127
{
119128
SET_GSW = 1,
@@ -589,6 +598,12 @@ struct ClearCacheForBattlesStruct
589598
bool PartnerStatsShouldBeCleared;
590599
};
591600

601+
struct LockFlagsStruct
602+
{
603+
uint8_t *FlagsToLockMemory;
604+
char AreaLocked[4]; // 3 bytes for the area, 1 byte for NULL
605+
};
606+
592607
struct TrickDisplay
593608
{
594609
uint32_t MainTimer;
@@ -747,8 +762,8 @@ struct MenuPrevMenuAndOption
747762
};
748763

749764
extern MenuVars MenuVar;
750-
extern Menus Menu[29];
751-
extern Cheats Cheat[23];
765+
extern Menus Menu[30];
766+
extern Cheats Cheat[24];
752767
extern bool Displays[12];
753768
extern char DisplayBuffer[256];
754769
extern char HeapBuffer[512];
@@ -766,6 +781,7 @@ extern ReloadRoomStruct ReloadRoom;
766781
extern SpawnItems SpawnItem;
767782
extern ClearAreaFlagsStruct ClearAreaFlags;
768783
extern ClearCacheForBattlesStruct ClearCacheForBattles;
784+
extern LockFlagsStruct LockFlags;
769785
extern TrickDisplay YoshiSkip;
770786
extern TrickDisplay PalaceSkip;
771787
extern BlimpTicketSkipStruct BlimpTicketSkip;
@@ -783,8 +799,8 @@ extern uint8_t DisplaysOrder[];
783799

784800
extern const char *VersionNumber;
785801
extern const char *CheatsLines[];
786-
extern const char *CheatsForceItemDropAreas[];
787-
extern const char *CheatsForceItemDropAreasFullNames[];
802+
extern const char *CheatsClearAreaFlagsAreas[];
803+
extern const char *CheatsClearAreaFlagsAreasFullNames[];
788804
extern const char *CheatsManageGlobalWordsOptions[];
789805
extern const char *CheatsManageGlobalFlagsOptions[];
790806
extern const char *StatsMarioOptionsLines[];
@@ -804,7 +820,7 @@ extern const char *WarpDescriptions[];
804820

805821
extern uint8_t CheatsManageGlobalWordsOptionsSize;
806822
extern uint8_t CheatsManageGlobalFlagsOptionsSize;
807-
extern uint8_t CheatsForceItemDropAreasSize;
823+
extern uint8_t CheatsClearAreaFlagsAreasSize;
808824
extern uint8_t StatsMarioOptionsLinesSize;
809825
extern uint8_t MarioStatsSpecialMovesOptionsSize;
810826
extern uint8_t StatsPartnerOptionsLinesSize;

ttyd-tools/rel/source/codes.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,38 @@ void checkIfAreaFlagsShouldBeCleared()
831831
}
832832
}
833833

834+
void lockFlags()
835+
{
836+
if (!Cheat[LOCK_FLAGS].Active)
837+
{
838+
return;
839+
}
840+
841+
uint8_t *tempFlagsToLockMemory = LockFlags.FlagsToLockMemory;
842+
if (!tempFlagsToLockMemory)
843+
{
844+
return;
845+
}
846+
847+
uint32_t GlobalWorkPtrRaw = reinterpret_cast<uint32_t>(ttyd::mariost::globalWorkPointer);
848+
849+
// Restore the GSWFs
850+
void *GSWFsAddresses = reinterpret_cast<void *>(GlobalWorkPtrRaw + 0x178);
851+
memcpy(GSWFsAddresses, tempFlagsToLockMemory, 0x400);
852+
853+
// Restore the GFs
854+
ttyd::evtmgr::EvtWork *EventWork = ttyd::evtmgr::evtGetWork();
855+
memcpy(EventWork->gfData, &tempFlagsToLockMemory[0x440], sizeof(EventWork->gfData));
856+
857+
// Restore the LSWFs
858+
// Only restore if currently in the original area where the code was enabled
859+
if (compareStrings(LockFlags.AreaLocked, ttyd::seq_mapchange::NextArea))
860+
{
861+
void *LSWFsAddresses = reinterpret_cast<void *>(GlobalWorkPtrRaw + 0xD78);
862+
memcpy(LSWFsAddresses, &tempFlagsToLockMemory[0x400], 0x40);
863+
}
864+
}
865+
834866
void displaySequenceInPauseMenu()
835867
{
836868
uint32_t SystemLevel = ttyd::mariost::marioStGetSystemLevel();

ttyd-tools/rel/source/draw.cpp

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3069,6 +3069,49 @@ void drawCheatsResolveFades()
30693069
}
30703070
}
30713071

3072+
void drawCheatsLockFlags()
3073+
{
3074+
// Draw the text indicating which area has its flags locked
3075+
uint32_t Color = 0xFFFFFFFF;
3076+
uint8_t Alpha = 0xFF;
3077+
int32_t PosX = -232;
3078+
int32_t PosY = 60;
3079+
float Scale = 0.6;
3080+
3081+
const char *String = "Current Area Local Flags Locked";
3082+
drawText(String, PosX, PosY, Alpha, Color, Scale);
3083+
PosY -= 20;
3084+
3085+
// Get the text for which area has its flags locked
3086+
char CurrentAreaLockedText[64];
3087+
char *tempAreaLockedText = LockFlags.AreaLocked;
3088+
3089+
// Make sure the current area with its flags locked is valid
3090+
if (!Cheat[LOCK_FLAGS].Active || tempAreaLockedText[0] == '\0')
3091+
{
3092+
strcpy(CurrentAreaLockedText, "None");
3093+
}
3094+
else
3095+
{
3096+
strcpy(CurrentAreaLockedText, tempAreaLockedText);
3097+
3098+
// Check to see if the current area is one that can have its flags cleared
3099+
const char **tempAreaText = CheatsClearAreaFlagsAreas;
3100+
uint32_t Size = CheatsClearAreaFlagsAreasSize;
3101+
for (uint32_t i = 0; i < Size; i++)
3102+
{
3103+
if (compareStrings(tempAreaLockedText, tempAreaText[i]))
3104+
{
3105+
strcpy(CurrentAreaLockedText, CheatsClearAreaFlagsAreasFullNames[i]);
3106+
break;
3107+
}
3108+
}
3109+
}
3110+
3111+
// Draw the text for which area has its flags locked
3112+
drawText(CurrentAreaLockedText, PosX, PosY, Alpha, Color, Scale);
3113+
}
3114+
30723115
void drawCheatsManageFlagsMain(uint32_t currentMenu)
30733116
{
30743117
bool ChangingWord = false;
@@ -3228,13 +3271,13 @@ void drawCheatsManageFlagsMain(uint32_t currentMenu)
32283271
void drawCheatsClearArea()
32293272
{
32303273
// Draw the main text
3231-
uint32_t tempCheatsForceItemDropAreasSize = CheatsForceItemDropAreasSize;
3232-
const char **tempCheatsForceItemDropAreas = CheatsForceItemDropAreas;
3274+
uint32_t tempCheatsClearAreaFlagsAreasSize = CheatsClearAreaFlagsAreasSize;
3275+
const char **tempCheatsClearAreaFlagsAreas = CheatsClearAreaFlagsAreas;
32333276

32343277
int32_t PosX = -232;
32353278
int32_t PosY = 120;
3236-
uint32_t Size = tempCheatsForceItemDropAreasSize;
3237-
uint32_t MaxOptionsPerPage = tempCheatsForceItemDropAreasSize;
3279+
uint32_t Size = tempCheatsClearAreaFlagsAreasSize;
3280+
uint32_t MaxOptionsPerPage = tempCheatsClearAreaFlagsAreasSize;
32383281
uint32_t MaxOptionsPerRow = 4;
32393282
uint32_t PosXIncrementAmount = 50;
32403283
uint32_t tempPage = 0;
@@ -3252,22 +3295,22 @@ void drawCheatsClearArea()
32523295

32533296
drawMultipleColumnsVertical(PosX, PosY, tempSecondaryMenuOption, tempPage,
32543297
Size, MaxOptionsPerPage, MaxOptionsPerRow, CurrentlySelectingOption,
3255-
PosXIncrementAmount, tempCheatsForceItemDropAreas);
3298+
PosXIncrementAmount, tempCheatsClearAreaFlagsAreas);
32563299

32573300
// Draw the description for the current option
32583301
if (CurrentlySelectingOption)
32593302
{
32603303
PosY -= 140;
32613304
drawSingleLineFromArray(PosX, PosY, tempSecondaryMenuOption,
3262-
CheatsForceItemDropAreasFullNames);
3305+
CheatsClearAreaFlagsAreasFullNames);
32633306
}
32643307

32653308
// Draw the current area selected
32663309
PosX = 0;
32673310
PosY = 160;
32683311
const char *String = "Current Area: ";
32693312
drawSingleLineFromStringAndArray(PosX, PosY, MenuVar.MenuSecondaryValue,
3270-
String, tempCheatsForceItemDropAreas);
3313+
String, tempCheatsClearAreaFlagsAreas);
32713314
}
32723315

32733316
void drawWarpsOptions()

ttyd-tools/rel/source/global.cpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ const char *CheatsLines[] =
5858
"Bobbery Early",
5959
"Force NPC Item Drop",
6060
"Resolve Fades",
61+
"Lock Flags",
6162
"Manage Flags",
6263
"Clear Area Flags",
6364
};
@@ -1014,6 +1015,12 @@ const char *CheatsManageGlobalWordsOptions[]
10141015
"Set New Value",
10151016
};
10161017

1018+
const char *CheatsLockFlagsOptions[]
1019+
{
1020+
"Toggle Value",
1021+
"Set New Area",
1022+
};
1023+
10171024
const char *CheatsManageGlobalFlagsOptions[]
10181025
{
10191026
"Toggle Value",
@@ -1025,7 +1032,7 @@ const char *CheatsClearAreaFlags[] =
10251032
"Clear Flags",
10261033
};
10271034

1028-
const char *CheatsForceItemDropAreas[] =
1035+
const char *CheatsClearAreaFlagsAreas[] =
10291036
{
10301037
"gor",
10311038
"tik",
@@ -1051,7 +1058,7 @@ const char *CheatsForceItemDropAreas[] =
10511058
"jon",
10521059
};
10531060

1054-
const char *CheatsForceItemDropAreasFullNames[] =
1061+
const char *CheatsClearAreaFlagsAreasFullNames[] =
10551062
{
10561063
"Rogueport",
10571064
"Rogueport Sewers",
@@ -1646,7 +1653,7 @@ const char ButtonInputDisplay[] =
16461653

16471654
uint8_t CheatsManageGlobalWordsOptionsSize = sizeof(CheatsManageGlobalWordsOptions) / sizeof(CheatsManageGlobalWordsOptions[0]);
16481655
uint8_t CheatsManageGlobalFlagsOptionsSize = sizeof(CheatsManageGlobalFlagsOptions) / sizeof(CheatsManageGlobalFlagsOptions[0]);
1649-
uint8_t CheatsForceItemDropAreasSize = sizeof(CheatsForceItemDropAreas) / sizeof(CheatsForceItemDropAreas[0]);
1656+
uint8_t CheatsClearAreaFlagsAreasSize = sizeof(CheatsClearAreaFlagsAreas) / sizeof(CheatsClearAreaFlagsAreas[0]);
16501657
uint8_t StatsMarioOptionsLinesSize = sizeof(StatsMarioOptionsLines) / sizeof(StatsMarioOptionsLines[0]);
16511658
uint8_t MarioStatsSpecialMovesOptionsSize = sizeof(MarioStatsSpecialMovesOptions) / sizeof(MarioStatsSpecialMovesOptions[0]);
16521659
uint8_t StatsPartnerOptionsLinesSize = sizeof(StatsPartnerOptionsLines) / sizeof(StatsPartnerOptionsLines[0]);
@@ -1786,6 +1793,7 @@ uint8_t CheatsOrder[] =
17861793
MANAGE_FLAGS,
17871794
RESOLVE_FADES,
17881795
FALL_THROUGH_FLOORS,
1796+
LOCK_FLAGS,
17891797
};
17901798

17911799
uint8_t DisplaysOrder[] =
@@ -1805,8 +1813,8 @@ uint8_t DisplaysOrder[] =
18051813
};
18061814

18071815
struct MenuVars MenuVar;
1808-
struct Menus Menu[29];
1809-
struct Cheats Cheat[23];
1816+
struct Menus Menu[30];
1817+
struct Cheats Cheat[24];
18101818
bool Displays[12];
18111819
char DisplayBuffer[256];
18121820
char HeapBuffer[512];
@@ -1824,6 +1832,7 @@ struct ReloadRoomStruct ReloadRoom;
18241832
struct SpawnItems SpawnItem;
18251833
struct ClearAreaFlagsStruct ClearAreaFlags;
18261834
struct ClearCacheForBattlesStruct ClearCacheForBattles;
1835+
struct LockFlagsStruct LockFlags;
18271836
struct TrickDisplay YoshiSkip;
18281837
struct TrickDisplay PalaceSkip;
18291838
struct BlimpTicketSkipStruct BlimpTicketSkip;
@@ -1868,6 +1877,10 @@ void initMenuVars()
18681877
Menu[CHEATS_NPC_FORCE_DROP].ColumnSplitAmount = Menu[CHEATS_NPC_FORCE_DROP].TotalMenuOptions;
18691878
Menu[CHEATS_NPC_FORCE_DROP].Line = CheatsForceItemDropOptionsLines;
18701879

1880+
Menu[CHEATS_LOCK_FLAGS].TotalMenuOptions = sizeof(CheatsLockFlagsOptions) / sizeof(CheatsLockFlagsOptions[0]);
1881+
Menu[CHEATS_LOCK_FLAGS].ColumnSplitAmount = Menu[CHEATS_LOCK_FLAGS].TotalMenuOptions;
1882+
Menu[CHEATS_LOCK_FLAGS].Line = CheatsLockFlagsOptions;
1883+
18711884
Menu[CHEATS_MANAGE_FLAGS].TotalMenuOptions = sizeof(CheatsManageFlagsOptions) / sizeof(CheatsManageFlagsOptions[0]);
18721885
Menu[CHEATS_MANAGE_FLAGS].ColumnSplitAmount = Menu[CHEATS_MANAGE_FLAGS].TotalMenuOptions;
18731886
Menu[CHEATS_MANAGE_FLAGS].Line = CheatsManageFlagsOptions;
@@ -1950,6 +1963,7 @@ void setInitialSettings()
19501963
Cheat[FALL_THROUGH_FLOORS].Active = false;
19511964
// Cheat[SAVE_COORDINATES].Active = false;
19521965
// Cheat[LOAD_COORDINATES].Active = false;
1966+
Cheat[SPAWN_ITEM].Active = false;
19531967
Cheat[SAVE_ANYWHERE].Active = false;
19541968
// Cheat[TEXT_STORAGE].Active = false;
19551969
// Cheat[TIME_STOP_TEXT_STORAGE].Active = false;
@@ -1961,16 +1975,17 @@ void setInitialSettings()
19611975
// Cheat[LEVITATE].Active = false;
19621976
Cheat[LOCK_MARIO_HP_TO_MAX].Active = false;
19631977
Cheat[RUN_FROM_BATTLES].Active = false;
1964-
Cheat[SPAWN_ITEM].Active = false;
19651978
// Cheat[DISABLE_MENU_SOUNDS].Active = false;
19661979
// Cheat[BOBBERY_EARLY].Active = false;
19671980
Cheat[FORCE_ITEM_DROP].Active = false;
1981+
Cheat[LOCK_FLAGS].Active = false;
19681982

19691983
// Set the Cheats button combos
19701984
Cheat[WALK_THROUGH_WALLS].ButtonCombo = PAD_Z;
19711985
Cheat[FALL_THROUGH_FLOORS].ButtonCombo = PAD_Y | PAD_Z;
19721986
Cheat[SAVE_COORDINATES].ButtonCombo = PAD_L | PAD_DPAD_LEFT;
19731987
Cheat[LOAD_COORDINATES].ButtonCombo = PAD_L | PAD_DPAD_UP;
1988+
Cheat[SPAWN_ITEM].ButtonCombo = PAD_L | PAD_DPAD_DOWN;
19741989
Cheat[SAVE_ANYWHERE].ButtonCombo = PAD_Y | PAD_B;
19751990
Cheat[TEXT_STORAGE].ButtonCombo = PAD_L | PAD_X;
19761991
Cheat[TIME_STOP_TEXT_STORAGE].ButtonCombo = PAD_L | PAD_R;
@@ -1980,7 +1995,6 @@ void setInitialSettings()
19801995
Cheat[INFINITE_ITEM_USAGE].ButtonCombo = PAD_Y;
19811996
Cheat[RELOAD_ROOM].ButtonCombo = PAD_L | PAD_B;
19821997
Cheat[LEVITATE].ButtonCombo = PAD_L | PAD_A;
1983-
Cheat[SPAWN_ITEM].ButtonCombo = PAD_L | PAD_DPAD_DOWN;
19841998

19851999
// Set the Displays bools
19862000
// Displays[ONSCREEN_TIMER] = true;
@@ -1994,6 +2008,7 @@ void setInitialSettings()
19942008
// Displays[ART_ATTACK_HITBOXES] = true;
19952009
// Displays[YOSHI_SKIP] = true;
19962010
// Displays[PALACE_SKIP] = true;
2011+
// Displays[BLIMP_TICKET_SKIP] = true;
19972012

19982013
// Set the Displays button combos
19992014
OnScreenTimer.ButtonCombo[START_PAUSE_RESUME] = PAD_L | PAD_Z;

ttyd-tools/rel/source/main.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,7 @@ void Mod::run()
776776
bobberyEarly();
777777
checkIfAreaFlagsShouldBeCleared();
778778
checkIfSystemLevelShouldBeLowered();
779+
lockFlags();
779780

780781
// Run each display function
781782
// Only run if the mod menu isn't currently open

0 commit comments

Comments
 (0)