Skip to content

Commit 20a9721

Browse files
committed
Save Anywhere - Use custom script to call evt_memcard_save
evt_memcard_save requires LW(0) to be set to 0 to work properly, so a custom script is now being used to handle that.
1 parent 3d0c500 commit 20a9721

File tree

6 files changed

+86
-13
lines changed

6 files changed

+86
-13
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2032,6 +2032,21 @@
20322032
// 8023706C:scissor_intersection
20332033
802376C4:GetScissorPtr
20342034

2035+
// evt_memcard.o
2036+
// text
2037+
// 8025FC80:memcard_write
2038+
// 8025FCC8:memcard_file_existance
2039+
// 8025FD50:memcard_ipl
2040+
// 8025FD64:memcard_header_write
2041+
// 8025FDA4:memcard_copy
2042+
// 8025FE28:memcard_delete
2043+
// 8025FE84:memcard_create
2044+
// 8025FEC4:memcard_format
2045+
// 8025FF04:memcard_load
2046+
// 8026001C:memcard_code
2047+
// data
2048+
803C6454:evt_memcard_save
2049+
20352050
// runtime.c
20362051
8026849C:_savefpr_14
20372052
802684A0:_savefpr_15

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2027,6 +2027,21 @@
20272027
// 8022DF2C:scissor_intersection
20282028
8022E584:GetScissorPtr
20292029

2030+
// evt_memcard.o
2031+
// text
2032+
// 8025613C:memcard_write
2033+
// 80256184:memcard_file_existance
2034+
// 8025620C:memcard_ipl
2035+
// 80256220:memcard_header_write
2036+
// 80256260:memcard_copy
2037+
// 802562E4:memcard_delete
2038+
// 80256340:memcard_create
2039+
// 80256380:memcard_format
2040+
// 802563C0:memcard_load
2041+
// 802564D8:memcard_code
2042+
// data
2043+
803B68BC:evt_memcard_save
2044+
20302045
// runtime.c
20312046
8025E90C:_savefpr_14
20322047
8025E910:_savefpr_15

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2028,6 +2028,21 @@
20282028
// 802335DC:scissor_intersection
20292029
80233C34:GetScissorPtr
20302030

2031+
// evt_memcard.o
2032+
// text
2033+
// 8025C0B8:memcard_write
2034+
// 8025C100:memcard_file_existance
2035+
// 8025C188:memcard_ipl
2036+
// 8025C19C:memcard_header_write
2037+
// 8025C1DC:memcard_copy
2038+
// 8025C260:memcard_delete
2039+
// 8025C2BC:memcard_create
2040+
// 8025C2FC:memcard_format
2041+
// 8025C33C:memcard_load
2042+
// 8025C454:memcard_code
2043+
// data
2044+
803BA444:evt_memcard_save
2045+
20312046
// runtime.c
20322047
802648BC:_savefpr_14
20332048
802648C0:_savefpr_15
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#include <cstdint>
4+
5+
#include <ttyd/evtmgr.h>
6+
7+
namespace ttyd::evt_memcard {
8+
9+
extern "C" {
10+
11+
// memcard_write
12+
// memcard_file_existance
13+
// memcard_ipl
14+
// memcard_header_write
15+
// memcard_copy
16+
// memcard_delete
17+
// memcard_create
18+
// memcard_format
19+
// memcard_load
20+
// memcard_code
21+
22+
extern const int32_t evt_memcard_save[]; // Script
23+
24+
}
25+
26+
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@ void evtmgrMain();
8787

8888
EvtWork *evtGetWork();
8989

90-
EvtEntry *evtEntry(void *evtCode, int32_t executionOrder, uint32_t flags);
91-
EvtEntry *evtEntryType(void *evtCode, int8_t priority, uint32_t flags, uint32_t types);
92-
EvtEntry *evtChildEntry(EvtEntry *parentEvt, void *evtCode, uint32_t flags);
93-
EvtEntry *evtBrotherEntry(EvtEntry *parentEvt, void *evtCode, uint32_t flags);
90+
EvtEntry *evtEntry(const void *evtCode, int32_t executionOrder, uint32_t flags);
91+
EvtEntry *evtEntryType(const void *evtCode, int8_t priority, uint32_t flags, uint32_t types);
92+
EvtEntry *evtChildEntry(EvtEntry *parentEvt, const void *evtCode, uint32_t flags);
93+
EvtEntry *evtBrotherEntry(EvtEntry *parentEvt, const void *evtCode, uint32_t flags);
9494
EvtEntry *evtRestart(EvtEntry *evt);
9595
void evtDelete(EvtEntry *evt);
9696
void evtDeleteID(int32_t threadId);

ttyd-tools/rel/source/codes.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
#include "draw.h"
77
#include "patch.h"
88
#include "assembly.h"
9+
#include "evt_cmd.h"
910

1011
#include <gc/OSTime.h>
1112
#include <ttyd/npcdrv.h>
1213
#include <ttyd/item_data.h>
1314
#include <ttyd/mariost.h>
1415
#include <ttyd/system.h>
1516
#include <ttyd/mario.h>
17+
#include <ttyd/evt_memcard.h>
1618
#include <ttyd/evtmgr.h>
1719
#include <ttyd/seqdrv.h>
1820
#include <ttyd/seq_mapchange.h>
@@ -288,6 +290,14 @@ void loadMarioAndPartnerPositions()
288290
*reinterpret_cast<float *>(PartnerPointer + 0x110) = MarioPartnerPositions.PartnerPosition[6]; // Partner Direction
289291
}
290292

293+
// Create a script to call evt_memcard_save
294+
// LW(0) needs to be set to 0 before evt_memcard_save can be called
295+
EVT_BEGIN(MemcardSaveScriptInit)
296+
SET(LW(0), 0)
297+
RUN_CHILD_EVT(ttyd::evt_memcard::evt_memcard_save)
298+
RETURN()
299+
EVT_END()
300+
291301
void saveAnywhere()
292302
{
293303
if (!SaveAnywhere.ScriptIsRunning)
@@ -320,16 +330,8 @@ void saveAnywhere()
320330
return;
321331
}
322332

323-
#ifdef TTYD_US
324-
void *SaveScriptEvtCode = reinterpret_cast<void *>(0x803BAC3C);
325-
#elif defined TTYD_JP
326-
void *SaveScriptEvtCode = reinterpret_cast<void *>(0x803B68BC);
327-
#elif defined TTYD_EU
328-
void *SaveScriptEvtCode = reinterpret_cast<void *>(0x803C6C4C);
329-
#endif
330-
331333
// Take away control from the player and start the Save script
332-
ttyd::evtmgr::EvtEntry *SaveScriptEvt = ttyd::evtmgr::evtEntryType(SaveScriptEvtCode, 0, 0, 0);
334+
ttyd::evtmgr::EvtEntry *SaveScriptEvt = ttyd::evtmgr::evtEntryType(MemcardSaveScriptInit, 0, 0, 0);
333335
SaveAnywhere.ThreadID = SaveScriptEvt->threadId;
334336

335337
SaveAnywhere.ScriptIsRunning = true;

0 commit comments

Comments
 (0)