Skip to content

Commit 4d8a00e

Browse files
committed
Warps - Added option to warp by index
1 parent 2ca9000 commit 4d8a00e

File tree

15 files changed

+831
-52
lines changed

15 files changed

+831
-52
lines changed

ttyd-tools/rel/include/codes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,6 @@ void actionCommandsTimingsInit();
3535
void displayActionCommandsTiming();
3636

3737
int32_t warpToMap(uint32_t value);
38+
int32_t warpToMapByString(const char *map);
3839

3940
}

ttyd-tools/rel/include/draw.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ void drawCheatsForcedDropItem();
9999
void drawCheatsManageFlagsMain(uint32_t currentMenu);
100100
void drawCheatsClearArea();
101101
void drawWarpsOptions();
102+
void drawWarpIndexMapAndEntrance();
103+
void drawWarpIndexEntranceList();
102104
void drawOnScreenTimerButtonCombos();
103105

104106
void drawOnScreenTimer();

ttyd-tools/rel/include/global.h

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ enum MENU_NAMES
3434
BATTLES_STATUSES,
3535
DISPLAYS_ONSCREEN_TIMER,
3636
DISPLAYS_NO_BUTTON_COMBO,
37+
WARPS_INDEX,
3738
};
3839

3940
enum INVENTORY_MENU_NAMES
@@ -341,7 +342,8 @@ enum ONSCREEN_TIMER_BUTTON_CODES
341342

342343
enum WARPS_OPTIONS
343344
{
344-
SELECT_WARP = 1,
345+
WARP_BY_INDEX = 1,
346+
SELECT_WARP,
345347
};
346348

347349
enum WARPS_SELECTION_OPTIONS
@@ -378,6 +380,14 @@ enum WARPS_IN_ADJUSTABLE_VALUE_MENU_OPTIONS
378380
SELECTING_VALUE = 1,
379381
};
380382

383+
enum WARPS_INDEX_OPTIONS
384+
{
385+
INDEX_SELECT_MAP = 1,
386+
INDEX_SELECT_ENTRANCE,
387+
INDEX_VIEW_CURRENT_MAP_ENTRANCES,
388+
INDEX_WARP_NOW,
389+
};
390+
381391
enum CODE_RETURN_VALUES
382392
{
383393
UNKNOWN_BEHAVIOR = -4,
@@ -603,13 +613,21 @@ struct SettingsStruct
603613
MemoryWatchStruct MemoryWatchSettings[60];
604614
};
605615

616+
struct WarpByIndexStruct
617+
{
618+
bool RunIndexWarpCode;
619+
uint16_t MapId;
620+
uint8_t EntranceId;
621+
const char *EntranceList[32];
622+
};
623+
606624
struct CheckHeaps
607625
{
608626
const char **StandardHeapArray;
609627
const char **SmartHeapArray;
610628
};
611629

612-
extern Menus Menu[26];
630+
extern Menus Menu[27];
613631
extern Cheats Cheat[20];
614632
extern bool Displays[9];
615633
extern char DisplayBuffer[256];
@@ -632,6 +650,7 @@ extern TrickDisplay PalaceSkip;
632650
extern OnScreenTimerDisplay OnScreenTimer;
633651
extern DisplayActionCommandTiming DisplayActionCommands;
634652
extern MemoryCardStruct MenuSettings;
653+
extern WarpByIndexStruct WarpByIndex;
635654
extern CheckHeaps CheckHeap;
636655

637656
extern const char *VersionNumber;
@@ -712,6 +731,7 @@ extern uint32_t seqMainAddress;
712731
extern uint32_t WorkAreaAddress;
713732
extern uint32_t SmartWorkAddress;
714733
extern uint32_t FieldItemsAddressesStart;
734+
extern uint32_t unkMapDataPtr;
715735

716736
extern uint32_t GlobalWorkPointer;
717737
extern uint32_t titleMainAddress;

ttyd-tools/rel/include/menufunctions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ bool getGF(uint32_t gf);
5757
void setGF(uint32_t gf);
5858
int32_t getGlobalFlagValue(uint32_t currentMenu, uint32_t flag);
5959
void cheatClearAreaFlags(uint32_t currentMenuOption);
60+
const char *getMapFromIndex(int32_t index);
61+
int32_t getMapIndex();
6062

6163
// uint8_t *getButtonsPressedDynamic(uint8_t *buttonArray, uint16_t currentButtonCombo);
6264
uint8_t *getButtonsPressed(uint8_t *buttonArray, uint16_t currentButtonCombo);
@@ -79,6 +81,7 @@ void adjustMemoryChangeAddressOrPointerSelection(uint32_t button);
7981
void adjustBattlesActorSelection(uint32_t button);
8082
void adjustBattlesStatusSelection(uint32_t button);
8183
void adjustWarpsSelection(uint32_t button);
84+
void adjustIndexWarpCurrentMapEntrancesPage(uint32_t button);
8285

8386
void adjustMenuSelectionVertical(uint32_t button, uint8_t &currentMenuOption,
8487
uint8_t &currentPage, uint32_t totalMenuOptions,

ttyd-tools/rel/include/mod.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Mod
1919
int32_t preventMenuSounds(int32_t, uint32_t, uint32_t, uint32_t);
2020
const char *getCustomMessage(const char *);
2121
uint32_t pauseArtAttackTimer();
22+
uint32_t setIndexWarpEntrance(void *, uint32_t);
2223

2324
private:
2425
void (*mPFN_makeKey_trampoline)() = nullptr;
@@ -30,6 +31,7 @@ class Mod
3031
uint32_t, uint32_t) = nullptr;
3132
const char *(*mPFN_msgSearch_trampoline)(const char *) = nullptr;
3233
uint32_t (*mPFN_scissor_timer_main_trampoline)() = nullptr;
34+
uint32_t (*mPFN_evt_bero_get_info_trampoline)(void *, uint32_t) = nullptr;
3335
};
3436

3537
}

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,60 @@
403403
80078E98:fontmgrTexSetup
404404
80078EC4:fontmgrInit
405405

406+
// evt_bero.o
407+
// 80079D30:evt_camera_change_event_from_road
408+
// 80079ED8:evt_bero_1stcheck
409+
// 80079F4C:evt_bero_mario_go_wait
410+
// 80079F68:evt_bero_mario_go
411+
// 80079F78:evt_bero_mario_go_init
412+
// 80079F88:evt_bero_cam_shift_init
413+
// 80079FB0:evt_bero_cam3d_change
414+
// 8007A0C4:evt_bero_overwrite
415+
// 8007A1A4:evt_bero_move_mario_speed
416+
// 8007A454:evt_bero_disppos_load
417+
// 8007A4A8:evt_bero_disppos_save
418+
// 8007A4EC:evt_bero_case_id_load
419+
// 8007A548:evt_bero_case_id_save
420+
// 8007A5A8:evt_bero_get_number
421+
// 8007A668:evt_bero_switch_off
422+
// 8007A76C:evt_bero_switch_on
423+
// 8007A870:bero_set_disp_position_pipe
424+
// 8007A940:bero_get_position_pipe2
425+
// 8007AA8C:bero_get_position_pipe_pure
426+
// 8007AB74:bero_get_position_pipe_sub
427+
// 8007AE30:bero_get_position_normal
428+
// 8007B140:evt_bero_get_info_num
429+
// 8007B344:evt_bero_id_filter
430+
// 8007B410:evt_bero_read_mario_pera
431+
// 8007B4D0:evt_bero_get_into_info
432+
8007B7C8:evt_bero_get_info
433+
// 8007B8C8:evt_bero_get_now_number
434+
// 8007B8F8:evt_bero_set_now_number
435+
// 8007B928:evt_bero_get_info_nextarea
436+
// 8007B9A0:evt_bero_get_info_kinddir
437+
// 8007BA28:evt_bero_get_info_length
438+
// 8007BB1C:evt_bero_get_info_anime
439+
// 8007BBB4:evt_bero_get_end_position
440+
// 8007BC18:evt_bero_get_start_position
441+
// 8007BC7C:evt_bero_exec_wait
442+
// 8007BCC0:evt_bero_exec_get
443+
// 8007BCF0:evt_bero_exec_onoff
444+
// 8007BD58:evt_bero_get_entername
445+
// 8007BD8C:evt_bero_mapchange
446+
// 8007BE00:bero_id_filter
447+
// 8007BEA4:bero_clear_Offset
448+
// 8007BEB8:bero_get_ptr
449+
// 8007BEC4:bero_get_BeroEZ
450+
// 8007BECC:bero_get_BeroEY
451+
// 8007BED4:bero_get_BeroEX
452+
// 8007BEDC:bero_get_BeroSZ
453+
// 8007BEE4:bero_get_BeroSY
454+
// 8007BEEC:bero_get_BeroSX
455+
// 8007BEF4:bero_get_BeroNUM
456+
// 8007BEFC:bero_get_BeroEXEC
457+
// 8007BF04:unk_JP_US_PAL_06
458+
// 8007BF38:unk_JP_US_PAL_07
459+
406460
// windowdrv.o
407461
// 8007BFEC:getWakuTexObj
408462
// 8007BFFC:windowGetPointer

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,60 @@
398398
80076E98:fontmgrTexSetup
399399
8007711C:fontmgrInit
400400

401+
// evt_bero.o
402+
// 80077F88:evt_camera_change_event_from_road
403+
// 80078130:evt_bero_1stcheck
404+
// 800781A4:evt_bero_mario_go_wait
405+
// 800781C0:evt_bero_mario_go
406+
// 800781D0:evt_bero_mario_go_init
407+
// 800781E0:evt_bero_cam_shift_init
408+
// 80078208:evt_bero_cam3d_change
409+
// 8007831C:evt_bero_overwrite
410+
// 800783FC:evt_bero_move_mario_speed
411+
// 800786AC:evt_bero_disppos_load
412+
// 80078700:evt_bero_disppos_save
413+
// 80078744:evt_bero_case_id_load
414+
// 800787A0:evt_bero_case_id_save
415+
// 80078800:evt_bero_get_number
416+
// 800788C0:evt_bero_switch_off
417+
// 800789C4:evt_bero_switch_on
418+
// 80078AC8:bero_set_disp_position_pipe
419+
// 80078B98:bero_get_position_pipe2
420+
// 80078CE4:bero_get_position_pipe_pure
421+
// 80078DCC:bero_get_position_pipe_sub
422+
// 80079088:bero_get_position_normal
423+
// 80079398:evt_bero_get_info_num
424+
// 8007959C:evt_bero_id_filter
425+
// 80079668:evt_bero_read_mario_pera
426+
// 80079728:evt_bero_get_into_info
427+
80079A20:evt_bero_get_info
428+
// 80079B20:evt_bero_get_now_number
429+
// 80079B50:evt_bero_set_now_number
430+
// 80079B80:evt_bero_get_info_nextarea
431+
// 80079BF8:evt_bero_get_info_kinddir
432+
// 80079C80:evt_bero_get_info_length
433+
// 80079D74:evt_bero_get_info_anime
434+
// 80079E0C:evt_bero_get_end_position
435+
// 80079E70:evt_bero_get_start_position
436+
// 80079ED4:evt_bero_exec_wait
437+
// 80079F18:evt_bero_exec_get
438+
// 80079F48:evt_bero_exec_onoff
439+
// 80079FB0:evt_bero_get_entername
440+
// 80079FE4:evt_bero_mapchange
441+
// 8007A058:bero_id_filter
442+
// 8007A0FC:bero_clear_Offset
443+
// 8007A110:bero_get_ptr
444+
// 8007A11C:bero_get_BeroEZ
445+
// 8007A124:bero_get_BeroEY
446+
// 8007A12C:bero_get_BeroEX
447+
// 8007A134:bero_get_BeroSZ
448+
// 8007A13C:bero_get_BeroSY
449+
// 8007A144:bero_get_BeroSX
450+
// 8007A14C:bero_get_BeroNUM
451+
// 8007A154:bero_get_BeroEXEC
452+
// 8007A15C:unk_JP_US_PAL_06
453+
// 8007A190:unk_JP_US_PAL_07
454+
401455
// windowdrv.o
402456
// 8007A244:getWakuTexObj
403457
// 8007A254:windowGetPointer

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,60 @@
402402
80077BDC:fontmgrTexSetup
403403
80077C08:fontmgrInit
404404

405+
// evt_bero.o
406+
// 80078A74:evt_camera_change_event_from_road
407+
// 80078C1C:evt_bero_1stcheck
408+
// 80078C90:evt_bero_mario_go_wait
409+
// 80078CAC:evt_bero_mario_go
410+
// 80078CBC:evt_bero_mario_go_init
411+
// 80078CCC:evt_bero_cam_shift_init
412+
// 80078CF4:evt_bero_cam3d_change
413+
// 80078E08:evt_bero_overwrite
414+
// 80078EE8:evt_bero_move_mario_speed
415+
// 80079198:evt_bero_disppos_load
416+
// 800791EC:evt_bero_disppos_save
417+
// 80079230:evt_bero_case_id_load
418+
// 8007928C:evt_bero_case_id_save
419+
// 800792EC:evt_bero_get_number
420+
// 800793AC:evt_bero_switch_off
421+
// 800794B0:evt_bero_switch_on
422+
// 800795B4:bero_set_disp_position_pipe
423+
// 80079684:bero_get_position_pipe2
424+
// 800797D0:bero_get_position_pipe_pure
425+
// 800798B8:bero_get_position_pipe_sub
426+
// 80079B74:bero_get_position_normal
427+
// 80079E84:evt_bero_get_info_num
428+
// 8007A088:evt_bero_id_filter
429+
// 8007A154:evt_bero_read_mario_pera
430+
// 8007A214:evt_bero_get_into_info
431+
8007A50C:evt_bero_get_info
432+
// 8007A60C:evt_bero_get_now_number
433+
// 8007A63C:evt_bero_set_now_number
434+
// 8007A66C:evt_bero_get_info_nextarea
435+
// 8007A6E4:evt_bero_get_info_kinddir
436+
// 8007A76C:evt_bero_get_info_length
437+
// 8007A860:evt_bero_get_info_anime
438+
// 8007A8F8:evt_bero_get_end_position
439+
// 8007A95C:evt_bero_get_start_position
440+
// 8007A9C0:evt_bero_exec_wait
441+
// 8007AA04:evt_bero_exec_get
442+
// 8007AA34:evt_bero_exec_onoff
443+
// 8007AA9C:evt_bero_get_entername
444+
// 8007AAD0:evt_bero_mapchange
445+
// 8007AB44:bero_id_filter
446+
// 8007ABE8:bero_clear_Offset
447+
// 8007ABFC:bero_get_ptr
448+
// 8007AC08:bero_get_BeroEZ
449+
// 8007AC10:bero_get_BeroEY
450+
// 8007AC18:bero_get_BeroEX
451+
// 8007AC20:bero_get_BeroSZ
452+
// 8007AC28:bero_get_BeroSY
453+
// 8007AC30:bero_get_BeroSX
454+
// 8007AC38:bero_get_BeroNUM
455+
// 8007AC40:bero_get_BeroEXEC
456+
// 8007AC48:unk_JP_US_PAL_06
457+
// 8007AC7C:unk_JP_US_PAL_07
458+
405459
// windowdrv.o
406460
// 8007AD30:getWakuTexObj
407461
// 8007AD40:windowGetPointer

ttyd-tools/rel/include/ttyd/evt_bero.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ namespace ttyd::evt_bero {
66

77
extern "C" {
88

9-
109
// evt_camera_change_event_from_road
1110
// evt_bero_1stcheck
1211
// evt_bero_mario_go_wait

ttyd-tools/rel/source/codes.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,4 +1447,80 @@ int32_t warpToMap(uint32_t value)
14471447
return SUCCESS;
14481448
}
14491449

1450+
int32_t warpToMapByString(const char *map)
1451+
{
1452+
// Make sure the player is currently in the game
1453+
if (!checkIfInGame())
1454+
{
1455+
return NOT_IN_GAME;
1456+
}
1457+
1458+
setNextMap(map);
1459+
reloadRoomMain();
1460+
1461+
return SUCCESS;
1462+
}
1463+
1464+
uint32_t Mod::setIndexWarpEntrance(void *scriptContext, uint32_t waitMode)
1465+
{
1466+
// Clear the array holding the loading zone names
1467+
clearMemory(WarpByIndex.EntranceList, sizeof(WarpByIndex.EntranceList));
1468+
1469+
// Get the start of the loading zone addresses
1470+
uint32_t ScriptContextLZAddresses = *reinterpret_cast<uint32_t *>(
1471+
reinterpret_cast<uint32_t>(scriptContext) + 0x9C);
1472+
1473+
// Loop through the loading zones and get the total amount of them
1474+
uint32_t tempScriptContextAddress = ScriptContextLZAddresses;
1475+
uint32_t LoadingZoneTotal = 0;
1476+
1477+
while (*reinterpret_cast<uint32_t *>(tempScriptContextAddress))
1478+
{
1479+
tempScriptContextAddress += 0x3C;
1480+
LoadingZoneTotal++;
1481+
}
1482+
1483+
// Copy each loading zone to the array
1484+
const char **tempEntranceArray = WarpByIndex.EntranceList;
1485+
for (uint32_t i = 0; i < LoadingZoneTotal; i++)
1486+
{
1487+
tempEntranceArray[i] = reinterpret_cast<const char *>(
1488+
*reinterpret_cast<uint32_t *>(
1489+
ScriptContextLZAddresses + (i * 0x3C)));
1490+
}
1491+
1492+
// Check to see if warping by index
1493+
if (WarpByIndex.RunIndexWarpCode)
1494+
{
1495+
WarpByIndex.RunIndexWarpCode = false;
1496+
1497+
// Make sure the chosen entrance exists for the chosen map
1498+
uint32_t ChosenEntrance = WarpByIndex.EntranceId;
1499+
const char *ChosenEntranceName;
1500+
1501+
if (ChosenEntrance < LoadingZoneTotal)
1502+
{
1503+
// Valid entrance chosen
1504+
ChosenEntranceName = reinterpret_cast<const char *>(
1505+
*reinterpret_cast<uint32_t *>(
1506+
ScriptContextLZAddresses + (ChosenEntrance * 0x3C)));
1507+
}
1508+
else
1509+
{
1510+
// Invalid entrance chosen
1511+
ChosenEntranceName = "";
1512+
}
1513+
1514+
// Set the chosen entrance
1515+
char *NextBeroGSW = reinterpret_cast<char *>(
1516+
*reinterpret_cast<uint32_t *>(GlobalWorkPointer) + 0x11C);
1517+
1518+
ttyd::string::strcpy(NextBeroGSW, ChosenEntranceName);
1519+
ttyd::string::strcpy(NextBero, ChosenEntranceName);
1520+
}
1521+
1522+
// Call original function
1523+
return mPFN_evt_bero_get_info_trampoline(scriptContext, waitMode);
1524+
}
1525+
14501526
}

0 commit comments

Comments
 (0)