Skip to content

Commit ebef48e

Browse files
committed
Cheats - Add option for modifying Mario's coordinates
1 parent 1f29cf4 commit ebef48e

File tree

10 files changed

+641
-10
lines changed

10 files changed

+641
-10
lines changed

ttyd-tools/rel/include/draw.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ void drawResolveFadesMessage();
8080
void drawWarpsErrorMessage(int32_t textPosY);
8181
void drawPartnerFollowerMessage(int32_t textPosY, bool drawForPartner);
8282
void drawNotInBattleErrorMessage();
83+
void drawMarioCoordinatesErrorMessage();
8384
void drawConfirmationWindow(const char *message);
8485

8586
void drawSingleLineFromArray(int32_t posX, int32_t posY,
@@ -95,6 +96,7 @@ void drawAdjustableValueSpawnItem();
9596
void drawAdjustableValueMemoryEditor();
9697
void drawAdjustableValue(bool changingItem, uint32_t currentMenu);
9798
void drawAdjustableValueHex(uint32_t currentMenu);
99+
void drawAdjustableValueDouble(uint32_t currentMenu, const char *value);
98100
void drawAddByIconMain(uint32_t currentMenu);
99101
void drawAddByIcon(uint32_t currentMenu);
100102
void drawAddById(uint32_t currentMenu);
@@ -104,6 +106,7 @@ void drawPageNumber(int32_t posX, int32_t posY, uint32_t currentPage);
104106
void drawBoolOnOrOff(bool tempBool, const char *currentLine, int32_t posY);
105107

106108
void drawCheatsChangeSequence();
109+
void drawCheatsModifyMarioCoordinates();
107110
void drawCheatsBool(int32_t posY);
108111
void drawButtonCombo(uint32_t buttonCombo, int32_t posY, const char *description);
109112
void drawChangeButtonCombo(uint16_t *currentButtonCombo);

ttyd-tools/rel/include/global.h

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ enum MENU_NAMES
2323
WARPS,
2424
INVENTORY_MAIN,
2525
CHEATS_CHANGE_SEQUENCE,
26+
CHEATS_MODIFY_COORDINATES,
2627
CHEATS_STANDARD,
2728
CHEATS_NO_BUTTON_COMBO,
2829
CHEATS_FRAME_ADVANCE,
@@ -80,6 +81,7 @@ enum CHEATS_OPTIONS
8081
FALL_THROUGH_FLOORS,
8182
SAVE_COORDINATES,
8283
LOAD_COORDINATES,
84+
MODIFY_COORDINATES,
8385
SPAWN_ITEM,
8486
SAVE_ANYWHERE,
8587
TEXT_STORAGE,
@@ -109,6 +111,14 @@ enum CHEATS_CHANGE_SEQUENCE_SELECTION
109111
CHANGE_SEQUENCE_VALUE = 1,
110112
};
111113

114+
enum CHEATS_MODIFY_COORDINATES_SELECTION
115+
{
116+
CHANGE_X_COORDINATE_VALUE = 1,
117+
CHANGE_Y_COORDINATE_VALUE,
118+
CHANGE_Z_COORDINATE_VALUE,
119+
CHANGE_COORDINATES_MODIFY_AS_HEX,
120+
};
121+
112122
enum CHEATS_STANDARD_SELECTION
113123
{
114124
CHEATS_STANDARD_TURN_ON_OR_OFF = 1,
@@ -641,6 +651,13 @@ struct CheatsManageFlags
641651
int32_t ValueToSet;
642652
};
643653

654+
struct ChangeMarioCoordinatesStruct
655+
{
656+
#define CHANGE_MARIO_COORDINATES_MAX_CHARACTERS_DISPLAYED 21
657+
char ValueString[64];
658+
bool ModifyAsHex;
659+
};
660+
644661
struct MarioPartnerPositionsStruct
645662
{
646663
float MarioPosition[7];
@@ -1078,8 +1095,8 @@ struct UnusedMapStruct
10781095
};
10791096

10801097
extern MenuVars MenuVar;
1081-
extern Menus Menu[37];
1082-
extern Cheats Cheat[27];
1098+
extern Menus Menu[38];
1099+
extern Cheats Cheat[28];
10831100
extern bool Displays[18];
10841101
extern char DisplayBuffer[256];
10851102
extern MemoryWatchStruct MemoryWatch[60];
@@ -1090,6 +1107,7 @@ extern AutoIncrement MemoryWatchAdjustableValueMenu;
10901107
extern AutoIncrementCoordinates MemoryWatchPosition;
10911108
extern CheatsHandleDisplayButtons CheatsDisplayButtons;
10921109
extern CheatsManageFlags ManageFlags;
1110+
extern ChangeMarioCoordinatesStruct ChangeMarioCoordinates;
10931111
extern MarioPartnerPositionsStruct MarioPartnerPositions;
10941112
extern SaveAnywhereStruct SaveAnywhere;
10951113
extern SpeedUpMarioStruct SpeedUpMario;

ttyd-tools/rel/include/lst/ttyd.eu.lst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2237,6 +2237,12 @@
22372237
// 8026F850:long2str
22382238
// 8026FAA8:parse_format
22392239

2240+
// scanf.c
2241+
80270138:sscanf
2242+
// 802701FC:__StringRead
2243+
// 8027028C:__sformatter
2244+
// 80270C38:parse_format
2245+
22402246
// string.c
22412247
// 80271180:strstr
22422248
// 802711E8:strchr

ttyd-tools/rel/include/lst/ttyd.jp.lst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2232,6 +2232,12 @@
22322232
// 80265AAC:long2str
22332233
// 80265D04:parse_format
22342234

2235+
// scanf.c
2236+
80266394:sscanf
2237+
// 80266458:__StringRead
2238+
// 802664E8:__sformatter
2239+
// 80266E94:parse_format
2240+
22352241
// string.c
22362242
// unused:strstr
22372243
// 802673DC:strchr

ttyd-tools/rel/include/lst/ttyd.us.lst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2233,6 +2233,12 @@
22332233
// 8026BA5C:long2str
22342234
// 8026BCB4:parse_format
22352235

2236+
// scanf.c
2237+
8026C344:sscanf
2238+
// 8026C408:__StringRead
2239+
// 8026C498:__sformatter
2240+
// 8026CE44:parse_format
2241+
22362242
// string.c
22372243
// 8026D38C:strstr
22382244
// 8026D3F4:strchr

ttyd-tools/rel/include/menufunctions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ void adjustMenuItemBoundsMain(int32_t valueChangedBy, int32_t lowerBound, int32_
5353
void adjustMenuItemBoundsMainUnsigned(int32_t valueChangedBy, uint32_t lowerBound, uint32_t upperBound);
5454
void adjustMenuItemBounds(int32_t valueChangedBy, uint32_t currentMenu);
5555
void adjustAddByIdValue(int32_t value, uint32_t currentMenu, bool handleAsHex, bool handleAsUnsigned);
56+
void adjustAddByIdDoubleValue(int32_t valueChangedBy, char *valueSource);
5657

5758
uint32_t getMarioStatsValueOffset(uint32_t currentMenuOption);
5859
void setMarioStatsValue(uint32_t currentMenuOption);
@@ -107,6 +108,8 @@ void getButtonsPressed(uint8_t *buttonArrayOut, uint32_t currentButtonCombo);
107108
void createButtonStringArray(uint8_t *buttonArray, char *stringOut, uint32_t stringOutSize);
108109
bool incrementCheatsBButtonCounter(uint32_t buttonInput);
109110
bool cheatsManageTimer(uint32_t buttonInput);
111+
int32_t convertDoubleToString(char *strOut, int32_t totalLength, int32_t decimalCount, double value);
112+
float *getMarioCoordinateFromIndex(int32_t index);
110113

111114
bool checkForDPADInput();
112115
uint32_t checkButtonSingleFrame();

ttyd-tools/rel/source/draw.cpp

Lines changed: 186 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2742,6 +2742,26 @@ void drawNotInBattleErrorMessage()
27422742
drawErrorWindow(CurrentLine, TextPosX, TextPosY, WindowWidth);
27432743
}
27442744

2745+
void drawMarioCoordinatesErrorMessage()
2746+
{
2747+
if (!checkErrorMessageReqs())
2748+
{
2749+
return;
2750+
}
2751+
2752+
const char *CurrentLine = "This value must be modified as a hex value.";
2753+
int32_t TextPosX = -181;
2754+
int32_t TextPosY = -17;
2755+
int32_t WindowWidth = 392;
2756+
2757+
#ifdef TTYD_JP
2758+
TextPosX += 1;
2759+
WindowWidth -= 7;
2760+
#endif
2761+
2762+
drawErrorWindow(CurrentLine, TextPosX, TextPosY, WindowWidth);
2763+
}
2764+
27452765
void drawResolveFadesMessage()
27462766
{
27472767
int32_t tempFunctionReturnCode = MenuVar.FunctionReturnCode;
@@ -3243,7 +3263,8 @@ void drawAdjustableValueHex(uint32_t currentMenu)
32433263
}
32443264

32453265
// Adjust the current value if necessary
3246-
if (currentMenu != MEMORY_WATCH_CHANGE_ADDRESS)
3266+
if ((currentMenu != CHEATS_MODIFY_COORDINATES) &&
3267+
(currentMenu != MEMORY_WATCH_CHANGE_ADDRESS))
32473268
{
32483269
adjustMenuItemBounds(0, currentMenu);
32493270
}
@@ -3282,6 +3303,11 @@ void drawAdjustableValueHex(uint32_t currentMenu)
32823303

32833304
switch (currentMenu)
32843305
{
3306+
case CHEATS_MODIFY_COORDINATES:
3307+
{
3308+
AmountOfNumbers = 8;
3309+
break;
3310+
}
32853311
case MEMORY_WATCH_CHANGE_ADDRESS:
32863312
{
32873313
AmountOfNumbers = 8;
@@ -3390,6 +3416,103 @@ void drawAdjustableValueHex(uint32_t currentMenu)
33903416
}
33913417
}
33923418

3419+
void drawAdjustableValueDouble(uint32_t currentMenu, const char *value)
3420+
{
3421+
// Check for button inputs
3422+
uint32_t ReturnCode;
3423+
if (currentMenu == CHEATS_MODIFY_COORDINATES)
3424+
{
3425+
ReturnCode = adjustableValueButtonControls(currentMenu);
3426+
}
3427+
else
3428+
{
3429+
// Nothing else currently uses this yet
3430+
return;
3431+
}
3432+
3433+
switch (ReturnCode)
3434+
{
3435+
case NO_NUMBERS_TO_DISPLAY: // There are no numbers to display, so close the menu
3436+
{
3437+
return;
3438+
}
3439+
default:
3440+
{
3441+
break;
3442+
}
3443+
}
3444+
3445+
// Draw the window
3446+
uint32_t Color = 0x151515E0;
3447+
int32_t PosX = -189;
3448+
int32_t PosY = 72;
3449+
int32_t Width = 377;
3450+
int32_t Curve = 10;
3451+
int32_t Height = 138;
3452+
3453+
#ifdef TTYD_JP
3454+
PosX += 4;
3455+
Width -= 6;
3456+
#endif
3457+
3458+
drawWindow(Color, PosX, PosY, Width, Height, Curve);
3459+
3460+
// Draw the help text
3461+
uint8_t Alpha = 0xFF;
3462+
float Scale = 0.6f;
3463+
PosX += 15;
3464+
PosY -= 13;
3465+
Color = 0xFFFFFFFF;
3466+
const char *HelpText = "Press D-Pad Up/Down to adjust the value\nPress D-Pad Left/Right to change digits\nPress A to confirm\nPress B to cancel";
3467+
drawTextAndInit(HelpText, PosX, PosY, Alpha, Color, false, Scale);
3468+
3469+
PosX += 166;
3470+
PosY -= 90;
3471+
3472+
#ifdef TTYD_JP
3473+
Scale = 1.f;
3474+
PosX -= 1;
3475+
PosY += 3;
3476+
#else
3477+
Scale = 0.9f;
3478+
#endif
3479+
3480+
uint32_t StringLength = strlen(value);
3481+
3482+
// Calculate the X offset
3483+
int32_t tempPosX = 0;
3484+
for (uint32_t i = 0; i < (StringLength - 1); i++)
3485+
{
3486+
tempPosX += 17;
3487+
}
3488+
PosX -= (tempPosX / 2);
3489+
3490+
// Draw each digit of the number
3491+
uint32_t tempSecondaryMenuOption = MenuVar.SecondaryMenuOption;
3492+
3493+
char *tempDisplayBuffer = DisplayBuffer;
3494+
for (uint32_t i = 0; i < StringLength; i++)
3495+
{
3496+
bool CurrentOptionCheck = tempSecondaryMenuOption == i;
3497+
Color = getSelectedTextColor(CurrentOptionCheck);
3498+
3499+
char CurrentChar = value[i];
3500+
sprintf(tempDisplayBuffer,
3501+
"%c",
3502+
CurrentChar);
3503+
3504+
// If drawing the decimal point, move it further right
3505+
tempPosX = PosX;
3506+
if (CurrentChar == '.')
3507+
{
3508+
tempPosX += 5;
3509+
}
3510+
3511+
drawText(tempDisplayBuffer, tempPosX, PosY, Color, Scale);
3512+
PosX += 17;
3513+
}
3514+
}
3515+
33933516
void drawAddByIconMain(uint32_t currentMenu)
33943517
{
33953518
// Check for button inputs
@@ -3613,6 +3736,68 @@ void drawCheatsChangeSequence()
36133736
drawText(String, PosX, PosY, Color, Scale);
36143737
}
36153738

3739+
void drawCheatsModifyMarioCoordinates()
3740+
{
3741+
uint32_t Color;
3742+
// uint8_t Alpha = 0xFF;
3743+
int32_t PosX = -232;
3744+
int32_t PosY = 80;
3745+
float Scale = 0.6f;
3746+
3747+
// Draw the value for the bool
3748+
const char *YesNoText;
3749+
getYesNoTextAndColor(ChangeMarioCoordinates.ModifyAsHex, &YesNoText, &Color);
3750+
drawText(YesNoText, PosX + 130, PosY + 40, Color, Scale);
3751+
3752+
// Draw each of the coordinates, both as a float and as hex
3753+
Color = 0xFFFFFFFF;
3754+
char CoordinateLetter = 'X';
3755+
char *tempDisplayBuffer = DisplayBuffer;
3756+
ttyd::mario::Player *player = ttyd::mario::marioGetPtr();
3757+
3758+
for (uint32_t i = 0; i < 3; i++)
3759+
{
3760+
float Coordinate = player->playerPosition[i];
3761+
3762+
// Get the coordinate in text form first
3763+
const char *CoordinateText;
3764+
char CoordinateStringBuffer[128];
3765+
3766+
int32_t StringLength = sprintf(
3767+
CoordinateStringBuffer,
3768+
"%.6f",
3769+
Coordinate);
3770+
3771+
// Make sure the text wont go offscreen
3772+
int32_t CoordinateMaxStringLength = 34;
3773+
3774+
#ifdef TTYD_JP
3775+
CoordinateMaxStringLength += 4;
3776+
#endif
3777+
3778+
if ((StringLength <= 0) || (StringLength > CoordinateMaxStringLength))
3779+
{
3780+
CoordinateText = "Too Big";
3781+
}
3782+
else
3783+
{
3784+
CoordinateText = CoordinateStringBuffer;
3785+
}
3786+
3787+
// Get the actual text to draw
3788+
uint32_t *CoordinateHex = reinterpret_cast<uint32_t *>(&Coordinate);
3789+
sprintf(tempDisplayBuffer,
3790+
"%c = %s, 0x%08" PRIX32,
3791+
CoordinateLetter,
3792+
CoordinateText,
3793+
*CoordinateHex);
3794+
3795+
drawText(tempDisplayBuffer, PosX, PosY, Color, Scale);
3796+
CoordinateLetter++;
3797+
PosY -= 20;
3798+
}
3799+
}
3800+
36163801
void drawCheatsBool(int32_t posY)
36173802
{
36183803
uint32_t tempMenuSelectedOption = MenuVar.MenuSelectedOption;

0 commit comments

Comments
 (0)