mirror of
https://github.com/encounter/tp.git
synced 2026-07-11 06:18:46 -07:00
m_Do_MemCard/d_file_select wii/debug work (#2976)
* m_Do_MemCard/d_file_select wii/debug work * fix builds
This commit is contained in:
@@ -109,7 +109,7 @@ m_Do/m_Do_dvd_thread.cpp:
|
||||
.ctors start:0x803CE254 end:0x803CE258
|
||||
.data start:0x803F6A80 end:0x803F6DC8
|
||||
.bss start:0x804539E0 end:0x80455D60
|
||||
.sdata start:0x80537770 end:0x805377B8
|
||||
.sdata start:0x80537770 end:0x805377B0
|
||||
|
||||
m_Do/m_Do_DVDError.cpp:
|
||||
.text start:0x8001B8E8 end:0x8001BA54
|
||||
@@ -120,6 +120,7 @@ m_Do/m_Do_MemCard.cpp:
|
||||
.ctors start:0x803CE258 end:0x803CE25C
|
||||
.data start:0x803F6DC8 end:0x803F6FB8
|
||||
.bss start:0x804580C0 end:0x8046A3E0
|
||||
.sdata start:0x805377B0 end:0x805377B8
|
||||
|
||||
m_Do/m_Do_MemCardRWmng.cpp:
|
||||
.text start:0x8001CDAC end:0x8001D9F8
|
||||
|
||||
@@ -426,6 +426,9 @@ if config.version != "ShieldD":
|
||||
else:
|
||||
cflags_framework.extend(["-inline noauto", "-O3,s", "-sym on", "-str reuse,pool,readonly"])
|
||||
|
||||
if config.version in ["RZDE01_00", "RZDE01_02", "RZDP01", "RZDJ01"]:
|
||||
cflags_framework.extend(["-DSDK_SEP2006"])
|
||||
|
||||
# REL flags
|
||||
cflags_rel = [
|
||||
*cflags_framework,
|
||||
|
||||
@@ -1216,8 +1216,8 @@ inline void dComIfGs_setCollectClothes(u8 i_clothesNo) {
|
||||
g_dComIfG_gameInfo.info.getPlayer().getCollect().setCollect(COLLECT_CLOTHING, i_clothesNo);
|
||||
}
|
||||
|
||||
inline void dComIfGs_setCardToMemory(char* card_ptr, int dataNum) {
|
||||
g_dComIfG_gameInfo.info.card_to_memory(card_ptr, dataNum);
|
||||
inline void dComIfGs_setCardToMemory(u8* card_ptr, int dataNum) {
|
||||
g_dComIfG_gameInfo.info.card_to_memory((char*)card_ptr, dataNum);
|
||||
}
|
||||
|
||||
inline void dComIfGs_setRodTypeLevelUp() {
|
||||
|
||||
@@ -38,7 +38,7 @@ public:
|
||||
|
||||
virtual ~dFile_warning_c();
|
||||
|
||||
u8 getStatus() { return mStatus; }
|
||||
BOOL getStatus() { return mStatus != 0; }
|
||||
void draw() { _draw(); }
|
||||
|
||||
/* 0x04 */ JKRArchive* mpArchive;
|
||||
|
||||
+294
-138
File diff suppressed because it is too large
Load Diff
@@ -469,6 +469,7 @@ class dSv_player_info_c {
|
||||
public:
|
||||
void init();
|
||||
char* getLinkName() { return mPlayerName; }
|
||||
const char* getPlayerName() const { return mPlayerName; }
|
||||
char* getHorseName() { return mHorseName; }
|
||||
void setPlayerName(const char* i_name) { strcpy((char*)mPlayerName, i_name); }
|
||||
void setHorseName(const char* i_name) { strcpy((char*)mHorseName, i_name); }
|
||||
|
||||
@@ -5,10 +5,13 @@
|
||||
#include <dolphin/os.h>
|
||||
#include "global.h"
|
||||
|
||||
#define SAVEDATA_SIZE 0xA94
|
||||
#define SECTOR_SIZE 0x2000
|
||||
#define SAVEDATA_FILE_SIZE 0x8000
|
||||
#define SAVEDATA_VERSION 6
|
||||
#define SAVEDATA_SIZE 0xA94 // Size of 1 Quest Log
|
||||
#define SAVEDATA_NUM 3 // Max number of Quest Logs
|
||||
#define SECTOR_SIZE 0x2000 // MemCard sector size
|
||||
#define CARD_FILE_SIZE 0x8000 // MemCard file size
|
||||
#define SAVEDATA_VERSION 6 // Save Data version
|
||||
|
||||
#define SAVEFILE_SIZE (SAVEDATA_SIZE * SAVEDATA_NUM)
|
||||
|
||||
class mDoMemCd_Ctrl_c {
|
||||
public:
|
||||
@@ -19,6 +22,12 @@ public:
|
||||
COMM_FORMAT_e,
|
||||
COMM_ATTACH_e,
|
||||
COMM_DETACH_e,
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
COMM_RESTORE_NAND_e,
|
||||
COMM_STORE_NAND_e,
|
||||
COMM_STORE_SETUP_NAND_e,
|
||||
#endif
|
||||
};
|
||||
|
||||
enum CardState_e {
|
||||
@@ -38,6 +47,20 @@ public:
|
||||
CARD_STATE_13_e,
|
||||
};
|
||||
|
||||
enum NANDState_e {
|
||||
NAND_STATE_AUTHENTICATION_e,
|
||||
NAND_STATE_READY_e,
|
||||
NAND_STATE_NO_FILE_e,
|
||||
NAND_STATE_READ_e,
|
||||
NAND_STATE_WRITE_e,
|
||||
NAND_STATE_FORMAT_e,
|
||||
NAND_STATE_BROKEN_e,
|
||||
NAND_STATE_INSSPACE_e,
|
||||
NAND_STATE_NOENT_e,
|
||||
NAND_STATE_FATAL_ERROR_e,
|
||||
NAND_STATE_10_e,
|
||||
};
|
||||
|
||||
mDoMemCd_Ctrl_c();
|
||||
|
||||
void ThdInit();
|
||||
@@ -61,6 +84,20 @@ public:
|
||||
s32 checkspace();
|
||||
void setCardState(s32);
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
void loadNAND();
|
||||
void restoreNAND();
|
||||
s32 LoadSyncNAND(void* i_buffer, u32 i_size, u32 i_position);
|
||||
void saveNAND(void* i_buffer, u32 i_size, u32 i_position);
|
||||
void storeNAND();
|
||||
s32 SaveSyncNAND();
|
||||
void storeSetUpNAND();
|
||||
void setNandState(s32);
|
||||
u32 getStatusNAND();
|
||||
s32 chekNANDFile();
|
||||
s32 checkspaceNAND();
|
||||
#endif
|
||||
|
||||
bool isCardCommNone() { return mCardCommand == COMM_NONE_e; }
|
||||
u8 getProbeStat() { return mProbeStat; }
|
||||
void clearProbeStat() { mProbeStat = 2; }
|
||||
@@ -75,7 +112,7 @@ public:
|
||||
mSerialNo = serial_no;
|
||||
}
|
||||
|
||||
/* 0x0000 */ u8 mData[SAVEDATA_SIZE * 3];
|
||||
/* 0x0000 */ u8 mData[SAVEFILE_SIZE];
|
||||
/* 0x1FBC */ u8 mChannel;
|
||||
/* 0x1FBD */ u8 mCopyToPos;
|
||||
/* 0x1FBE */ u8 mProbeStat;
|
||||
@@ -84,7 +121,7 @@ public:
|
||||
/* 0x1FC8 */ s32 field_0x1fc8;
|
||||
/* 0x1FCC */ OSMutex mMutex;
|
||||
/* 0x1FE4 */ OSCond mCond;
|
||||
/* 0x1FEC */ u32 mNandState;
|
||||
/* 0x1FEC */ s32 mNandState;
|
||||
/* 0x1FF0 */ u64 mSerialNo;
|
||||
/* 0x1FF8 */ u32 mDataVersion;
|
||||
}; // Size: 0x2000
|
||||
@@ -135,7 +172,7 @@ inline void mDoMemCd_setCopyToPos(u8 i_pos) {
|
||||
g_mDoMemCd_control.setCopyToPos(i_pos);
|
||||
}
|
||||
|
||||
inline u32 mDoMemCd_getStatus(u8 param_0) {
|
||||
inline u32 mDoMemCd_getStatus(u32 param_0) {
|
||||
return g_mDoMemCd_control.getStatus(param_0);
|
||||
}
|
||||
|
||||
@@ -167,4 +204,30 @@ inline void mDoMemCd_UpDate() {
|
||||
g_mDoMemCd_control.update();
|
||||
}
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
inline void mDoMemCd_saveNAND(void* data, u32 length, u32 position) {
|
||||
g_mDoMemCd_control.saveNAND(data, length, position);
|
||||
}
|
||||
|
||||
inline s32 mDoMemCd_SaveSyncNAND() {
|
||||
return g_mDoMemCd_control.SaveSyncNAND();
|
||||
}
|
||||
|
||||
inline u32 mDoMemCd_LoadSyncNAND(void* i_buffer, u32 i_size, u32 i_position) {
|
||||
return g_mDoMemCd_control.LoadSyncNAND(i_buffer, i_size, i_position);
|
||||
}
|
||||
|
||||
inline u32 mDoMemCd_getStatusNAND() {
|
||||
return g_mDoMemCd_control.getStatusNAND();
|
||||
}
|
||||
|
||||
inline void mDoMemCd_LoadNAND() {
|
||||
g_mDoMemCd_control.loadNAND();
|
||||
}
|
||||
|
||||
inline s32 mDoMemCd_checkNANDFile() {
|
||||
return g_mDoMemCd_control.chekNANDFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* M_DO_M_DO_MEMCARD_H */
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
#ifndef M_DO_M_DO_MEMCARDRWMNG_H
|
||||
#define M_DO_M_DO_MEMCARDRWMNG_H
|
||||
|
||||
#include "global.h"
|
||||
#include <dolphin/card.h>
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
#include <revolution/nand.h>
|
||||
#endif
|
||||
|
||||
struct mDoMemCdRWm_HeaderData {
|
||||
/* 0x0000 */ u8 mBannerTexData[0xC00];
|
||||
/* 0x0C00 */ u8 mBannerPalData[0x200];
|
||||
@@ -26,4 +31,10 @@ static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size);
|
||||
BOOL mDoMemCdRWm_TestCheckSumGameData(void* data);
|
||||
void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum);
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
s32 mDoMemCdRWm_RestoreNAND(NANDFileInfo* param_0, void* param_1, u32 param_2);
|
||||
s32 mDoMemCdRWm_StoreNAND(NANDFileInfo* param_0, void* param_1, u32 param_2);
|
||||
s32 mDoMemCdRWm_StoreBannerNAND(NANDFileInfo*);
|
||||
#endif
|
||||
|
||||
#endif /* M_DO_M_DO_MEMCARDRWMNG_H */
|
||||
|
||||
@@ -120,6 +120,16 @@ typedef struct {
|
||||
u8 iconTexture[8][48 * 48 * 2];
|
||||
} NANDBanner;
|
||||
|
||||
#define NAND_STAT_SPEED_END 0
|
||||
#define NAND_STAT_SPEED_FAST 1
|
||||
#define NAND_STAT_SPEED_MIDDLE 2
|
||||
#define NAND_STAT_SPEED_SLOW 3
|
||||
#define NAND_STAT_SPEED_MASK 3
|
||||
|
||||
#define NANDSetIconSpeed(stat, n, f) \
|
||||
((stat).iconSpeed = \
|
||||
(u16)(((stat).iconSpeed & ~(NAND_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n)))))
|
||||
|
||||
typedef void (*NANDCallback)(s32, NANDCommandBlock*);
|
||||
typedef void (*NANDAsyncCallback)(s32 result, struct NANDCommandBlock* block);
|
||||
|
||||
@@ -181,8 +191,14 @@ s32 NANDPrivateOpenAsync(const char*, NANDFileInfo*, const u8, NANDCallback, NAN
|
||||
s32 NANDClose(NANDFileInfo*);
|
||||
s32 NANDCloseAsync(NANDFileInfo*, NANDCallback, NANDCommandBlock*);
|
||||
|
||||
#ifdef SDK_SEP2006
|
||||
s32 NANDSafeOpen(const char* path, NANDFileInfo* info, const u8 accType, void* buf, const u32 length);
|
||||
s32 NANDSafeClose(NANDFileInfo* info);
|
||||
#else
|
||||
s32 NANDSimpleSafeOpen(const char* path, NANDFileInfo* info, const u8 accType, void* buf, const u32 length);
|
||||
s32 NANDSimpleSafeClose(NANDFileInfo* info);
|
||||
#endif
|
||||
|
||||
s32 NANDPrivateSafeOpenAsync(const char* path, NANDFileInfo* info, const u8 accType, void* buf, const u32 length, NANDCallback cb, NANDCommandBlock* block);
|
||||
s32 NANDSafeCloseAsync(NANDFileInfo* info, NANDCallback cb, NANDCommandBlock* block);
|
||||
|
||||
|
||||
@@ -147,6 +147,8 @@ BOOL SCReplaceU8Item(u8 data, SCItemID id);
|
||||
u32 SCCheckStatus(void);
|
||||
s32 SCReloadConfFileAsync(u8* bufp, u32 bufSize, SCReloadConfFileCallback callback);
|
||||
|
||||
BOOL SCFlush(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
+2961
-1609
File diff suppressed because it is too large
Load Diff
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "d/d_map.h"
|
||||
#include "JSystem/JHostIO/JORFile.h"
|
||||
#include "JSystem/JHostIO/JORServer.h"
|
||||
#include "JSystem/JUtility/JUTTexture.h"
|
||||
#include "SSystem/SComponent/c_counter.h"
|
||||
#include "SSystem/SComponent/c_math.h"
|
||||
|
||||
@@ -1030,7 +1030,7 @@ void dMenu_Option_c::confirm_open_init() {
|
||||
}
|
||||
|
||||
void dMenu_Option_c::confirm_open_move() {
|
||||
bool status = mpWarning->getStatus();
|
||||
u32 status = mpWarning->getStatus();
|
||||
bool yesNoMenuMove = yesnoMenuMoveAnm();
|
||||
|
||||
if (field_0x374 != 1.0f) {
|
||||
@@ -1113,7 +1113,7 @@ void dMenu_Option_c::confirm_close_init() {
|
||||
}
|
||||
|
||||
void dMenu_Option_c::confirm_close_move() {
|
||||
bool status = mpWarning->getStatus();
|
||||
u32 status = mpWarning->getStatus();
|
||||
yesnoMenuMoveAnm();
|
||||
if (field_0x374 != 0.0f) {
|
||||
cLib_addCalc2(&field_0x374, 0.0f, 0.4f, 0.5);
|
||||
|
||||
@@ -1296,7 +1296,7 @@ void dMenu_save_c::memCardCommandEnd2() {
|
||||
bool headerTxtChanged = headerTxtChangeAnm();
|
||||
bool ketteiDispAnm = ketteiTxtDispAnm();
|
||||
bool modoruDispAnm = modoruTxtDispAnm();
|
||||
u32 check = mWarning->getStatus() != 0;
|
||||
u32 check = mWarning->getStatus();
|
||||
|
||||
if (headerTxtChanged == true && ketteiDispAnm == true && modoruDispAnm == true && check == 1) {
|
||||
mpErrFunc = NULL;
|
||||
@@ -1388,7 +1388,7 @@ void dMenu_save_c::gameContinueDisp() {
|
||||
bool headerTxtChanged = headerTxtChangeAnm();
|
||||
bool moveAnm = yesnoMenuMoveAnm();
|
||||
bool ketteiDispAnm = ketteiTxtDispAnm();
|
||||
u32 check = mWarning->getStatus() != 0;
|
||||
u32 check = mWarning->getStatus();
|
||||
|
||||
if (headerTxtChanged == true && moveAnm == true && ketteiDispAnm == true && check == 1) {
|
||||
yesnoCursorShow();
|
||||
@@ -1466,7 +1466,7 @@ void dMenu_save_c::gameContinue3() {
|
||||
void dMenu_save_c::saveEnd() {
|
||||
bool headerTxtChanged = headerTxtChangeAnm();
|
||||
bool ketteiDispAnm = ketteiTxtDispAnm();
|
||||
u32 check = mWarning->getStatus() != 0;
|
||||
u32 check = mWarning->getStatus();
|
||||
|
||||
if (headerTxtChanged == true && ketteiDispAnm == true && check == 1) {
|
||||
if (mUseType == TYPE_BLACK_EVENT) {
|
||||
@@ -1938,7 +1938,7 @@ void dMenu_save_c::saveMoveDisp() {
|
||||
bool yesnoAnmComplete = yesnoMenuMoveAnm();
|
||||
bool ketteiAnmComplete = ketteiTxtDispAnm();
|
||||
bool modoruAnmComplete = modoruTxtDispAnm();
|
||||
u32 check = mWarning->getStatus() != 0;
|
||||
u32 check = mWarning->getStatus();
|
||||
|
||||
if (headerTxtChanged == true && yesnoAnmComplete == true && ketteiAnmComplete == true &&
|
||||
modoruAnmComplete == 1 && check == 1) {
|
||||
@@ -1956,7 +1956,7 @@ void dMenu_save_c::saveMoveDisp2() {
|
||||
bool wakuAnmComplete = selectWakuAlpahAnm(mSelectedFile);
|
||||
bool ketteiAnmComplete = ketteiTxtDispAnm();
|
||||
bool modoruAnmComplete = modoruTxtDispAnm();
|
||||
u32 check = mWarning->getStatus() != 0;
|
||||
u32 check = mWarning->getStatus();
|
||||
|
||||
if (headerTxtChanged == true && dataMoveAnm == true && wakuAnmComplete == true &&
|
||||
ketteiAnmComplete == true && modoruAnmComplete == 1 && check == 1) {
|
||||
|
||||
+393
-12
File diff suppressed because it is too large
Load Diff
@@ -13,6 +13,9 @@
|
||||
#if VERSION == VERSION_GCN_JPN
|
||||
#define HEADER_TITLE "ゼルダの伝説 トワイライトプリンセス"
|
||||
#define HEADER_COMMENT "%d月%d日のセーブデータです"
|
||||
#elif PLATFORM_WII
|
||||
#define HEADER_TITLE "The Legend of Zelda: TP"
|
||||
#define HEADER_COMMENT "%d/%d Save Data"
|
||||
#else
|
||||
#define HEADER_TITLE "Zelda: Twilight Princess"
|
||||
#define HEADER_COMMENT "%d/%d Save Data"
|
||||
@@ -21,12 +24,13 @@
|
||||
struct data_s {
|
||||
int unk_0x0;
|
||||
int data_version;
|
||||
u8 data[(SAVEDATA_SIZE * 3) + 0x38]; // unsure what the extra 0x38 is
|
||||
u8 data[(SAVEFILE_SIZE) + 0x38]; // unsure what the extra 0x38 is
|
||||
u32 checksum;
|
||||
};
|
||||
|
||||
static u8 sTmpBuf[SECTOR_SIZE * 2];
|
||||
|
||||
#if !PLATFORM_SHIELD
|
||||
s32 mDoMemCdRWm_Store(CARDFileInfo* file, void* data, u32 length) {
|
||||
mDoMemCdRWm_BuildHeader((mDoMemCdRWm_HeaderData*)sTmpBuf);
|
||||
|
||||
@@ -152,6 +156,160 @@ s32 mDoMemCdRWm_Restore(CARDFileInfo* file, void* data, u32 length) {
|
||||
|
||||
return CARD_RESULT_READY;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
s32 mDoMemCdRWm_StoreNAND(NANDFileInfo* file, void* data, u32 length) {
|
||||
s32 ret;
|
||||
|
||||
memset(sTmpBuf, 0, sizeof(sTmpBuf));
|
||||
|
||||
data_s* tmp_data = (data_s*)sTmpBuf;
|
||||
tmp_data->unk_0x0 = 0;
|
||||
tmp_data->data_version = SAVEDATA_VERSION;
|
||||
memcpy(tmp_data->data, data, length);
|
||||
|
||||
u32 checksum = tmp_data->checksum = mDoMemCdRWm_CalcCheckSum(tmp_data, sizeof(data_s) - 4);
|
||||
|
||||
ret = NANDWrite(file, sTmpBuf, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
NANDSeek(file, 0, 0);
|
||||
|
||||
ret = NANDRead(file, sTmpBuf, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, sizeof(data_s) - 4)) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
NANDSeek(file, 0x2000, 0);
|
||||
|
||||
ret = NANDWrite(file, sTmpBuf, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
NANDSeek(file, 0x2000, 0);
|
||||
|
||||
ret = NANDRead(file, sTmpBuf, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, sizeof(data_s) - 4)) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return NAND_RESULT_OK;
|
||||
}
|
||||
|
||||
s32 mDoMemCdRWm_RestoreNAND(NANDFileInfo* file, void* data, u32 length) {
|
||||
BOOL rewrite = FALSE;
|
||||
|
||||
data_s* saves = (data_s*)sTmpBuf;
|
||||
data_s* backup_saves = (data_s*)(sTmpBuf + SECTOR_SIZE);
|
||||
|
||||
NANDSeek(file, 0, 0);
|
||||
s32 ret = NANDRead(file, saves, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL save1_valid = mDoMemCdRWm_TestCheckSumGameData(&saves->data[SAVEDATA_SIZE * 0]);
|
||||
BOOL save2_valid = mDoMemCdRWm_TestCheckSumGameData(&saves->data[SAVEDATA_SIZE * 1]);
|
||||
BOOL save3_valid = mDoMemCdRWm_TestCheckSumGameData(&saves->data[SAVEDATA_SIZE * 2]);
|
||||
|
||||
NANDSeek(file, 0x2000, 0);
|
||||
ret = NANDRead(file, backup_saves, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL backup1_valid = mDoMemCdRWm_TestCheckSumGameData(&backup_saves->data[SAVEDATA_SIZE * 0]);
|
||||
BOOL backup2_valid = mDoMemCdRWm_TestCheckSumGameData(&backup_saves->data[SAVEDATA_SIZE * 1]);
|
||||
BOOL backup3_valid = mDoMemCdRWm_TestCheckSumGameData(&backup_saves->data[SAVEDATA_SIZE * 2]);
|
||||
|
||||
if (!save1_valid && backup1_valid) {
|
||||
memcpy(&saves->data[SAVEDATA_SIZE * 0], &backup_saves->data[SAVEDATA_SIZE * 0], SAVEDATA_SIZE);
|
||||
rewrite = TRUE;
|
||||
}
|
||||
|
||||
if (!save2_valid && backup2_valid) {
|
||||
memcpy(&saves->data[SAVEDATA_SIZE * 1], &backup_saves->data[SAVEDATA_SIZE * 1], SAVEDATA_SIZE);
|
||||
rewrite = TRUE;
|
||||
}
|
||||
|
||||
if (!save3_valid && backup3_valid) {
|
||||
memcpy(&saves->data[SAVEDATA_SIZE * 2], &backup_saves->data[SAVEDATA_SIZE * 2], SAVEDATA_SIZE);
|
||||
rewrite = TRUE;
|
||||
}
|
||||
|
||||
BOOL sp10 = FALSE;
|
||||
if (!save1_valid && !backup1_valid &&
|
||||
!save2_valid && !backup2_valid &&
|
||||
!save3_valid && !backup3_valid)
|
||||
{
|
||||
sp10 = TRUE;
|
||||
}
|
||||
|
||||
if (rewrite) {
|
||||
NANDSeek(file, 0, 0);
|
||||
ret = NANDWrite(file, saves, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
NANDSeek(file, 0x2000, 0);
|
||||
ret = NANDWrite(file, saves, 0x2000);
|
||||
if (ret != 0x2000) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(data, saves->data, length);
|
||||
mDoMemCd_setDataVersion(saves->data_version);
|
||||
|
||||
return NAND_RESULT_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if PLATFORM_WII || PLATFORM_SHIELD
|
||||
s32 mDoMemCdRWm_StoreBannerNAND(NANDFileInfo* file) {
|
||||
static NANDBanner info;
|
||||
static wchar_t titleTxt[] = L"The Legend of Zelda:";
|
||||
static wchar_t commentTxt[] = L"Twilight Princess";
|
||||
u32 size;
|
||||
s32 ret;
|
||||
|
||||
NANDInitBanner(&info, 0, (u16*)titleTxt, (u16*)commentTxt);
|
||||
|
||||
ResTIMG* banner_data = (ResTIMG*)dComIfGp_getCardIconResArchive()->getResource("zelda2_wii_banner.bti");
|
||||
ResTIMG* icon_data = (ResTIMG*)dComIfGp_getCardIconResArchive()->getResource("zelda2_wii_icon.bti");
|
||||
|
||||
u8* banner_base_ptr = (u8*)banner_data;
|
||||
u8* icon_base_ptr = (u8*)icon_data;
|
||||
|
||||
memcpy(info.bannerTexture, banner_base_ptr + banner_data->imageOffset, sizeof(info.bannerTexture));
|
||||
memcpy(info.iconTexture, icon_base_ptr + icon_data->imageOffset, 0x1200);
|
||||
dComIfGp_getCardIconResArchive()->removeResourceAll();
|
||||
|
||||
NANDSetIconSpeed(info, 0, NAND_STAT_SPEED_MIDDLE);
|
||||
NANDSetIconSpeed(info, 1, NAND_STAT_SPEED_END);
|
||||
|
||||
size = 0x72A0;
|
||||
ret = NANDWrite(file, &info, size);
|
||||
if (ret != size) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return NAND_RESULT_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header) {
|
||||
snprintf(header->mTitle, sizeof(header->mTitle), HEADER_TITLE);
|
||||
|
||||
Reference in New Issue
Block a user