e_hb equivalent / some pal work (#2577)

* some pal work

* e_hb equivalent

* update config
This commit is contained in:
TakaRikka
2025-08-10 09:27:45 -07:00
committed by GitHub
parent 2ec9bd75a7
commit ed04f85412
30 changed files with 2249 additions and 1398 deletions
+83 -87
View File
@@ -150,93 +150,89 @@ void Z2SeqMgr::bgmStop(u32 i_count, s32 param_1) {
}
}
/* ############################################################################################## */
/* 8039BA08-8039BA08 028068 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039BA08 = "F_SP00";
SECTION_DEAD static char const* const stringBase_8039BA0F = "F_SP103";
SECTION_DEAD static char const* const stringBase_8039BA17 = "R_SP01";
SECTION_DEAD static char const* const stringBase_8039BA1E = "F_SP104";
SECTION_DEAD static char const* const stringBase_8039BA26 = "R_SP107";
SECTION_DEAD static char const* const stringBase_8039BA2E = "F_SP108";
SECTION_DEAD static char const* const stringBase_8039BA36 = "R_SP108";
SECTION_DEAD static char const* const stringBase_8039BA3E = "F_SP117";
SECTION_DEAD static char const* const stringBase_8039BA46 = "F_SP109";
SECTION_DEAD static char const* const stringBase_8039BA4E = "R_SP109";
SECTION_DEAD static char const* const stringBase_8039BA56 = "R_SP209";
SECTION_DEAD static char const* const stringBase_8039BA5E = "F_SP110";
SECTION_DEAD static char const* const stringBase_8039BA66 = "R_SP110";
SECTION_DEAD static char const* const stringBase_8039BA6E = "F_SP111";
SECTION_DEAD static char const* const stringBase_8039BA76 = "F_SP128";
SECTION_DEAD static char const* const stringBase_8039BA7E = "R_SP128";
SECTION_DEAD static char const* const stringBase_8039BA86 = "F_SP115";
SECTION_DEAD static char const* const stringBase_8039BA8E = "F_SP112";
SECTION_DEAD static char const* const stringBase_8039BA96 = "F_SP126";
SECTION_DEAD static char const* const stringBase_8039BA9E = "F_SP127";
SECTION_DEAD static char const* const stringBase_8039BAA6 = "R_SP127";
SECTION_DEAD static char const* const stringBase_8039BAAE = "F_SP113";
SECTION_DEAD static char const* const stringBase_8039BAB6 = "F_SP116";
SECTION_DEAD static char const* const stringBase_8039BABE = "R_SP116";
SECTION_DEAD static char const* const stringBase_8039BAC6 = "R_SP160";
SECTION_DEAD static char const* const stringBase_8039BACE = "R_SP161";
SECTION_DEAD static char const* const stringBase_8039BAD6 = "F_SP114";
SECTION_DEAD static char const* const stringBase_8039BADE = "F_SP118";
SECTION_DEAD static char const* const stringBase_8039BAE6 = "F_SP124";
SECTION_DEAD static char const* const stringBase_8039BAEE = "F_SP125";
SECTION_DEAD static char const* const stringBase_8039BAF6 = "F_SP121";
SECTION_DEAD static char const* const stringBase_8039BAFE = "F_SP122";
SECTION_DEAD static char const* const stringBase_8039BB06 = "F_SP123";
SECTION_DEAD static char const* const stringBase_8039BB0E = "F_SP200";
SECTION_DEAD static char const* const stringBase_8039BB16 = "F_SP102";
SECTION_DEAD static char const* const stringBase_8039BB1E = "";
SECTION_DEAD static char const* const stringBase_8039BB1F = "R_SP300";
SECTION_DEAD static char const* const stringBase_8039BB27 = "R_SP301";
SECTION_DEAD static char const* const stringBase_8039BB2F = "T_ENEMY";
SECTION_DEAD static char const* const stringBase_8039BB37 = "D_MN54";
SECTION_DEAD static char const* const stringBase_8039BB3E = "D_MN05";
SECTION_DEAD static char const* const stringBase_8039BB45 = "D_MN05B";
SECTION_DEAD static char const* const stringBase_8039BB4D = "D_MN05A";
SECTION_DEAD static char const* const stringBase_8039BB55 = "D_MN04";
SECTION_DEAD static char const* const stringBase_8039BB5C = "D_MN04B";
SECTION_DEAD static char const* const stringBase_8039BB64 = "D_MN04A";
SECTION_DEAD static char const* const stringBase_8039BB6C = "D_MN01";
SECTION_DEAD static char const* const stringBase_8039BB73 = "D_MN01B";
SECTION_DEAD static char const* const stringBase_8039BB7B = "D_MN01A";
SECTION_DEAD static char const* const stringBase_8039BB83 = "D_MN10";
SECTION_DEAD static char const* const stringBase_8039BB8A = "D_MN10B";
SECTION_DEAD static char const* const stringBase_8039BB92 = "D_MN10A";
SECTION_DEAD static char const* const stringBase_8039BB9A = "D_MN11";
SECTION_DEAD static char const* const stringBase_8039BBA1 = "D_MN11B";
SECTION_DEAD static char const* const stringBase_8039BBA9 = "D_MN11A";
SECTION_DEAD static char const* const stringBase_8039BBB1 = "D_MN06";
SECTION_DEAD static char const* const stringBase_8039BBB8 = "D_MN06B";
SECTION_DEAD static char const* const stringBase_8039BBC0 = "D_MN06A";
SECTION_DEAD static char const* const stringBase_8039BBC8 = "D_MN07";
SECTION_DEAD static char const* const stringBase_8039BBCF = "D_MN07B";
SECTION_DEAD static char const* const stringBase_8039BBD7 = "D_MN07A";
SECTION_DEAD static char const* const stringBase_8039BBDF = "D_MN08";
SECTION_DEAD static char const* const stringBase_8039BBE6 = "D_MN08B";
SECTION_DEAD static char const* const stringBase_8039BBEE = "D_MN08C";
SECTION_DEAD static char const* const stringBase_8039BBF6 = "D_MN08A";
SECTION_DEAD static char const* const stringBase_8039BBFE = "D_MN08D";
SECTION_DEAD static char const* const stringBase_8039BC06 = "D_MN09";
SECTION_DEAD static char const* const stringBase_8039BC0D = "D_MN09A";
SECTION_DEAD static char const* const stringBase_8039BC15 = "D_MN09B";
SECTION_DEAD static char const* const stringBase_8039BC1D = "D_MN09C";
SECTION_DEAD static char const* const stringBase_8039BC25 = "D_SB00";
SECTION_DEAD static char const* const stringBase_8039BC2C = "D_SB01";
SECTION_DEAD static char const* const stringBase_8039BC33 = "D_SB02";
SECTION_DEAD static char const* const stringBase_8039BC3A = "D_SB03";
SECTION_DEAD static char const* const stringBase_8039BC41 = "D_SB04";
SECTION_DEAD static char const* const stringBase_8039BC48 = "D_SB05";
SECTION_DEAD static char const* const stringBase_8039BC4F = "D_SB06";
SECTION_DEAD static char const* const stringBase_8039BC56 = "D_SB07";
SECTION_DEAD static char const* const stringBase_8039BC5D = "D_SB08";
SECTION_DEAD static char const* const stringBase_8039BC64 = "D_SB09";
SECTION_DEAD static char const* const stringBase_8039BC6B = "D_SB10";
SECTION_DEAD static char const* const stringBase_8039BC72 = "force_start";
#pragma pop
static void dummyString() {
DEAD_STRING("F_SP00");
DEAD_STRING("F_SP103");
DEAD_STRING("R_SP01");
DEAD_STRING("F_SP104");
DEAD_STRING("R_SP107");
DEAD_STRING("F_SP108");
DEAD_STRING("R_SP108");
DEAD_STRING("F_SP117");
DEAD_STRING("F_SP109");
DEAD_STRING("R_SP109");
DEAD_STRING("R_SP209");
DEAD_STRING("F_SP110");
DEAD_STRING("R_SP110");
DEAD_STRING("F_SP111");
DEAD_STRING("F_SP128");
DEAD_STRING("R_SP128");
DEAD_STRING("F_SP115");
DEAD_STRING("F_SP112");
DEAD_STRING("F_SP126");
DEAD_STRING("F_SP127");
DEAD_STRING("R_SP127");
DEAD_STRING("F_SP113");
DEAD_STRING("F_SP116");
DEAD_STRING("R_SP116");
DEAD_STRING("R_SP160");
DEAD_STRING("R_SP161");
DEAD_STRING("F_SP114");
DEAD_STRING("F_SP118");
DEAD_STRING("F_SP124");
DEAD_STRING("F_SP125");
DEAD_STRING("F_SP121");
DEAD_STRING("F_SP122");
DEAD_STRING("F_SP123");
DEAD_STRING("F_SP200");
DEAD_STRING("F_SP102");
DEAD_STRING("");
DEAD_STRING("R_SP300");
DEAD_STRING("R_SP301");
DEAD_STRING("T_ENEMY");
DEAD_STRING("D_MN54");
DEAD_STRING("D_MN05");
DEAD_STRING("D_MN05B");
DEAD_STRING("D_MN05A");
DEAD_STRING("D_MN04");
DEAD_STRING("D_MN04B");
DEAD_STRING("D_MN04A");
DEAD_STRING("D_MN01");
DEAD_STRING("D_MN01B");
DEAD_STRING("D_MN01A");
DEAD_STRING("D_MN10");
DEAD_STRING("D_MN10B");
DEAD_STRING("D_MN10A");
DEAD_STRING("D_MN11");
DEAD_STRING("D_MN11B");
DEAD_STRING("D_MN11A");
DEAD_STRING("D_MN06");
DEAD_STRING("D_MN06B");
DEAD_STRING("D_MN06A");
DEAD_STRING("D_MN07");
DEAD_STRING("D_MN07B");
DEAD_STRING("D_MN07A");
DEAD_STRING("D_MN08");
DEAD_STRING("D_MN08B");
DEAD_STRING("D_MN08C");
DEAD_STRING("D_MN08A");
DEAD_STRING("D_MN08D");
DEAD_STRING("D_MN09");
DEAD_STRING("D_MN09A");
DEAD_STRING("D_MN09B");
DEAD_STRING("D_MN09C");
DEAD_STRING("D_SB00");
DEAD_STRING("D_SB01");
DEAD_STRING("D_SB02");
DEAD_STRING("D_SB03");
DEAD_STRING("D_SB04");
DEAD_STRING("D_SB05");
DEAD_STRING("D_SB06");
DEAD_STRING("D_SB07");
DEAD_STRING("D_SB08");
DEAD_STRING("D_SB09");
DEAD_STRING("D_SB10");
}
/* 802AF49C-802AF884 2A9DDC 03E8+00 3/2 6/6 65/65 .text subBgmStart__8Z2SeqMgrFUl */
void Z2SeqMgr::subBgmStart(u32 i_bgmID) {
+1445 -988
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -13,10 +13,10 @@ static int CheckCreateHeap(fopAc_ac_c* i_this) {
}
/* 80BB60F8-80BB618C 000098 0094+00 2/2 0/0 0/0 .text setBokkuri__10daBkLeaf_cFv */
// fake match?
void daBkLeaf_c::setBokkuri() {
csXyz currentAngle = current.angle;
daObjCarry_c::make_prm(&currentAngle, 6, getItem(), getItemBit(), 1, 2);
u32 sp10 = 0;
csXyz currentAngle(current.angle);
daObjCarry_c::make_prm(&sp10, &currentAngle, 6, getItem(), getItemBit(), 1, 2);
field_0x578 = fopAcM_createChild(PROC_Obj_Carry, fopAcM_GetID(this), 0, &current.pos,
fopAcM_GetRoomNo(this), &currentAngle, &scale, -1, 0);
}
+2 -2
View File
@@ -100,7 +100,7 @@ static u8 cNullVec__6Z2Calc[12] = {
/* 803BBBC8-803BBC34 018CE8 006C+00 2/3 0/0 0/0 .data init_process */
typedef void (dGameover_c::*initFunc)();
initFunc init_process[] = {
static initFunc init_process[] = {
&dGameover_c::playerAnmWait_init, &dGameover_c::dispFadeOut_init, &dGameover_c::dispWait_init,
&dGameover_c::demoFadeIn_init, &dGameover_c::demoFadeOut_init, &dGameover_c::saveOpen_init,
&dGameover_c::saveMove_init, &dGameover_c::saveClose_init, &dGameover_c::deleteWait_init,
@@ -108,7 +108,7 @@ initFunc init_process[] = {
/* 803BBCA0-803BBD0C 018DC0 006C+00 1/2 0/0 0/0 .data move_process */
typedef void (dGameover_c::*moveFunc)();
moveFunc move_process[] = {
static moveFunc move_process[] = {
&dGameover_c::playerAnmWait_proc, &dGameover_c::dispFadeOut_proc, &dGameover_c::dispWait_proc,
&dGameover_c::demoFadeIn_proc, &dGameover_c::demoFadeOut_proc, &dGameover_c::saveOpen_proc,
&dGameover_c::saveMove_proc, &dGameover_c::saveClose_proc, &dGameover_c::deleteWait_proc,
+222 -5
View File
@@ -6,6 +6,7 @@
#include "d/d_s_logo.h"
#include "JSystem/JKernel/JKRAram.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JKernel/JKRMemArchive.h"
#include "c/c_dylink.h"
#include "d/d_com_inf_game.h"
#include "d/d_item.h"
@@ -18,11 +19,22 @@
#if VERSION == VERSION_GCN_JPN
#define LOGO_ARC "Logo"
#define MSG_PATH "/res/Msgjp/bmgres.arc"
#elif VERSION == VERSION_GCN_PAL
#define LOGO_ARC "LogoPal"
#define MSG_PATH "/res/Msgus/bmgres.arc"
#else
#define LOGO_ARC "LogoUs"
#define MSG_PATH "/res/Msgus/bmgres.arc"
#endif
#if VERSION == VERSION_GCN_PAL
#define PROGRESSIVE_MODE_OFF OS_EURGB60_OFF
#define PROGRESSIVE_MODE_ON OS_EURGB60_ON
#else
#define PROGRESSIVE_MODE_OFF OS_PROGRESSIVE_MODE_OFF
#define PROGRESSIVE_MODE_ON OS_PROGRESSIVE_MODE_ON
#endif
/* 803C2E38-803C2E44 01FF58 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -80,12 +92,24 @@ bool dScnLogo_c::preLoad_dyl() {
/* 80256198-80256210 250AD8 0078+00 1/1 0/0 0/0 .text checkProgSelect__10dScnLogo_cFv */
void dScnLogo_c::checkProgSelect() {
#if VERSION == VERSION_GCN_PAL
if (mDoRst::getProgSeqFlag() == 0) {
field_0x20a = 1;
if (isProgressiveMode()) {
field_0x209 = 0;
} else {
field_0x209 = 1;
}
}
#else
if (mDoRst::getProgSeqFlag() == 0 && VIGetDTVStatus() != 0) {
if (isProgressiveMode() || mDoCPd_c::getHoldB(PAD_1)) {
field_0x20a = 1;
field_0x209 = 0;
}
}
#endif
}
/* 80256210-80256264 250B50 0054+00 1/1 0/0 0/0 .text draw__10dScnLogo_cFv */
@@ -139,12 +163,12 @@ void dScnLogo_c::progSelDraw() {
if (mDoCPd_c::getTrigA(PAD_1) || mTimer == 0) {
if (field_0x209 == 0) {
mProgressiveSel->getPicture()->changeTexture(mProgressivePro, 0);
setProgressiveMode(1);
setProgressiveMode(PROGRESSIVE_MODE_ON);
mDoRst::setProgChgFlag(1);
mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0);
} else {
mProgressiveSel->getPicture()->changeTexture(mProgressiveInter, 0);
setProgressiveMode(0);
setProgressiveMode(PROGRESSIVE_MODE_OFF);
mDoAud_seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0);
}
@@ -210,7 +234,11 @@ void dScnLogo_c::progOutDraw() {
dComIfGd_set2DOpa(mProgressiveNo);
if (mTimer == 0) {
#if VERSION == VERSION_GCN_PAL
if (field_0x218 == 1 && field_0x209 == 0) {
#else
if (field_0x218 != 0 && field_0x209 == 0) {
#endif
mExecCommand = EXEC_PROG_CHANGE;
mTimer = 150;
} else if (field_0x218 == 0 && field_0x209 != 0) {
@@ -427,6 +455,12 @@ dScnLogo_c::~dScnLogo_c() {
delete mProgressiveNo;
delete mProgressiveSel;
#if VERSION == VERSION_GCN_PAL
mpPalLogoResCommand->getArchive()->removeResourceAll();
mpPalLogoResCommand->getArchive()->unmount();
mpPalLogoResCommand->destroy();
#endif
preLoad_dyl_remove();
dComIfG_deleteObjectResMain(LOGO_ARC);
@@ -513,6 +547,27 @@ static int phase_0(dScnLogo_c* i_this) {
i_this->field_0x1d0 = JKRExpHeap::create(i_this->dummyGameAlloc, 0x340000, NULL, false);
i_this->field_0x1d4 = JKRExpHeap::create(0x130000, i_this->field_0x1d0, false);
#if VERSION == VERSION_GCN_PAL
switch (i_this->getPalLanguage()) {
case 1:
i_this->mpPalLogoResCommand = mDoDvdThd_mountArchive_c::create("/res/Layout/LogoPalGm.arc", 0, NULL);
break;
case 2:
i_this->mpPalLogoResCommand = mDoDvdThd_mountArchive_c::create("/res/Layout/LogoPalFr.arc", 0, NULL);
break;
case 3:
i_this->mpPalLogoResCommand = mDoDvdThd_mountArchive_c::create("/res/Layout/LogoPalSp.arc", 0, NULL);
break;
case 4:
i_this->mpPalLogoResCommand = mDoDvdThd_mountArchive_c::create("/res/Layout/LogoPalIt.arc", 0, NULL);
break;
case 0:
default:
i_this->mpPalLogoResCommand = mDoDvdThd_mountArchive_c::create("/res/Layout/LogoPalUk.arc", 0, NULL);
break;
}
#endif
return cPhs_NEXT_e;
}
@@ -526,6 +581,16 @@ static int phase_1(dScnLogo_c* i_this) {
return cPhs_INIT_e;
}
#if VERSION == VERSION_GCN_PAL
if (!SyncWidthSound) {
return cPhs_INIT_e;
}
if (!i_this->mpPalLogoResCommand->sync()) {
return cPhs_INIT_e;
}
#endif
dComIfG_setObjectRes(LOGO_ARC, (u8)0, i_this->field_0x1d0);
mDoRst::setLogoScnFlag(1);
archiveHeap->dump_sort();
@@ -605,6 +670,89 @@ void dScnLogo_c::logoInitGC() {
ResTIMG* dolbyImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 3);
mDolbyLogo = new dDlst_2D_c(dolbyImg, 189, 150, 232, 112, 255);
#if VERSION == VERSION_GCN_PAL
u8 language = getPalLanguage();
if (language >= 5) {
language = 0;
}
static const char* choice[] = {
"50_60_choice_eng.bti",
"50_60_choice_ger.bti",
"50_60_choice_fra.bti",
"50_60_choice_spa.bti",
"50_60_choice_ita.bti",
};
static const char* yes[] = {
"60_set_eng.bti",
"60_set_ger.bti",
"60_set_fra.bti",
"60_set_spa.bti",
"60_set_ita.bti",
};
static const char* no[] = {
"50_set_eng.bti",
"50_set_ger.bti",
"50_set_fra.bti",
"50_set_spa.bti",
"50_set_ita.bti",
};
static const char* prog[] = {
"progressive_pro.bti",
"progressive_pro_gm.bti",
"progressive_pro_fr.bti",
"progressive_pro_sp.bti",
"progressive_pro_it.bti",
};
static const char* intr[] = {
"progressive_inter.bti",
"progressive_inter_gm.bti",
"progressive_inter_fr.bti",
"progressive_inter_sp.bti",
"progressive_inter_it.bti",
};
static const char* warning[] = {
"warning.bti",
"warning_gm.bti",
"warning_fr.bti",
"warning_sp.bti",
"warning_it.bti",
};
static const char* warningPs[] = {
"warning_pstart.bti",
"warning_pstart_gm.bti",
"warning_pstart_fr.bti",
"warning_pstart_sp.bti",
"warning_pstart_it.bti",
};
ResTIMG* warningImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', warning[language]);
mWarning = new dDlst_2D_c(warningImg, 0, 0, 608, 448, 255);
ResTIMG* warnStartImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', warningPs[language]);
mWarningStart = new dDlst_2D_c(warnStartImg, 0, 359, 608, 48, 255);
ResTIMG* progChoiceImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', choice[language]);
mProgressiveChoice = new dDlst_2D_c(progChoiceImg, 113, 143, 416, 210, 255);
ResTIMG* progYesImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', yes[language]);
mProgressiveYes = new dDlst_2D_c(progYesImg, 121, 352, 200, 72, 255);
mProgressiveYes->getPicture()->setWhite(JUtility::TColor(160, 160, 160, 255));
ResTIMG* progNoImg = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', no[language]);
mProgressiveNo = new dDlst_2D_c(progNoImg, 320, 352, 200, 72, 255);
mProgressiveNo->getPicture()->setWhite(JUtility::TColor(160, 160, 160, 255));
mProgressivePro = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', prog[language]);
mProgressiveInter = (ResTIMG*)mpPalLogoResCommand->getArchive()->getResource('DAT ', intr[language]);
mProgressiveSel = new dDlst_2D_c(mProgressivePro, 153, 309, 336, 88, 255);
#else
ResTIMG* warningImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 10);
mWarning = new dDlst_2D_c(warningImg, 0, 0, 608, 448, 255);
@@ -625,6 +773,7 @@ void dScnLogo_c::logoInitGC() {
mProgressivePro = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 8);
mProgressiveInter = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 6);
mProgressiveSel = new dDlst_2D_c(mProgressivePro, 153, 309, 336, 88, 255);
#endif
}
/* 80257FEC-80258420 25292C 0434+00 1/1 0/0 0/0 .text dvdDataLoad__10dScnLogo_cFv */
@@ -656,8 +805,30 @@ void dScnLogo_c::dvdDataLoad() {
"/res/Layout/button.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpCardIconCommand = mDoDvdThd_mountXArchive_c::create(
"/res/CardIcon/cardicon.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpBmgResCommand =
mDoDvdThd_mountXArchive_c::create(MSG_PATH, 0, JKRArchive::MOUNT_MEM, NULL);
#if VERSION == VERSION_GCN_PAL
switch (getPalLanguage()) {
case 1:
mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgde/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL);
break;
case 2:
mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgfr/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL);
break;
case 3:
mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgsp/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL);
break;
case 4:
mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msgit/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL);
break;
case 0:
default:
mpBmgResCommand = mDoDvdThd_mountXArchive_c::create("/res/Msguk/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL);
break;
}
#else
mpBmgResCommand = mDoDvdThd_mountXArchive_c::create(MSG_PATH, 0, JKRArchive::MOUNT_MEM, NULL);
#endif
mpMsgComCommand = mDoDvdThd_mountXArchive_c::create(
"/res/Layout/msgcom.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpMsgResCommand[0] = mDoDvdThd_mountXArchive_c::create(
@@ -681,11 +852,17 @@ void dScnLogo_c::dvdDataLoad() {
"/res/Layout/msgres06.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpMain2DCommand =
mDoDvdThd_mountXArchive_c::create("/res/Layout/main2D.arc", 0, JKRArchive::MOUNT_MEM, NULL);
#if VERSION == VERSION_GCN_JPN
mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/fontres.arc", 1,
JKRArchive::MOUNT_MEM, NULL);
mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontjp/rubyres.arc", 0,
JKRArchive::MOUNT_MEM, NULL);
#elif VERSION == VERSION_GCN_PAL
mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fonteu/fontres.arc", 0,
JKRArchive::MOUNT_MEM, NULL);
mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fonteu/rubyres.arc", 0,
JKRArchive::MOUNT_MEM, NULL);
#else
mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/fontres.arc", 0,
JKRArchive::MOUNT_MEM, NULL);
@@ -732,22 +909,62 @@ static int dScnLogo_IsDelete(dScnLogo_c* i_this) {
return 1;
}
#if VERSION == VERSION_GCN_PAL
u8 dScnLogo_c::getPalLanguage() {
u8 language;
switch (OSGetLanguage()) {
case OS_LANGUAGE_ENGLISH:
language = 0;
break;
case OS_LANGUAGE_GERMAN:
language = 1;
break;
case OS_LANGUAGE_FRENCH:
language = 2;
break;
case OS_LANGUAGE_SPANISH:
language = 3;
break;
case OS_LANGUAGE_ITALIAN:
language = 4;
break;
case OS_LANGUAGE_DUTCH:
language = 5;
break;
}
return language;
}
#endif
/* 802584D8-802584FC 252E18 0024+00 1/1 0/0 0/0 .text setProgressiveMode__10dScnLogo_cFUc
*/
void dScnLogo_c::setProgressiveMode(u8 mode) {
#if VERSION == VERSION_GCN_PAL
OSSetEuRgb60Mode(mode);
#else
OSSetProgressiveMode(mode);
#endif
}
/* 802584FC-80258520 252E3C 0024+00 3/3 0/0 0/0 .text getProgressiveMode__10dScnLogo_cFv
*/
u8 dScnLogo_c::getProgressiveMode() {
#if VERSION == VERSION_GCN_PAL
return OSGetEuRgb60Mode();
#else
return OSGetProgressiveMode();
#endif
}
/* 80258520-8025854C 252E60 002C+00 1/1 0/0 0/0 .text isProgressiveMode__10dScnLogo_cFv
*/
bool dScnLogo_c::isProgressiveMode() {
return OSGetProgressiveMode() == 1;
#if VERSION == VERSION_GCN_PAL
return OSGetEuRgb60Mode() == OS_EURGB60_ON;
#else
return OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_ON;
#endif
}
/* 8025854C-8025855C 252E8C 0010+00 1/1 0/0 0/0 .text setRenderMode__10dScnLogo_cFv */
+10 -9
View File
@@ -15,6 +15,7 @@
#include "d/actor/d_a_tag_stream.h"
#include "d/d_item.h"
#include "d/d_path.h"
#include "d/actor/d_a_obj_carry.h"
#include "f_op/f_op_scene_mng.h"
#include "m_Do/m_Do_lib.h"
@@ -1571,18 +1572,18 @@ fopAc_ac_c* fopAcM_fastCreateItem(const cXyz* i_pos, int i_itemNo, int i_roomNo,
/* 8001C870-8001C95C 0171B0 00EC+00 0/0 0/0 1/1 .text fopAcM_createBokkuri__FUsPC4cXyziiiPC4cXyzii
*/
fpc_ProcID fopAcM_createBokkuri(u16 i_setId, const cXyz* i_pos, int param_3, int param_4,
int i_roomNo, const cXyz* param_6, int param_7, int param_8) {
csXyz angle(0, 0, 0);
fpc_ProcID fopAcM_createBokkuri(u16 i_setId, const cXyz* i_pos, int i_itemNo, int i_itemBit,
int i_roomNo, const cXyz* param_6, int i_itemType, int param_8) {
csXyz params_ex(0, 0, 0);
if (param_6 != NULL) {
angle.y = param_6->atan2sX_Z();
angle.y += (s16)(2048.0f * cM_rndFX(1.0f));
params_ex.y = param_6->atan2sX_Z();
params_ex.y += (s16)(2048.0f * cM_rndFX(1.0f));
param_8 = 1;
}
u32 actorParams = 0;
make_prm_bokkuri(&actorParams, &angle, 6, param_3, param_4, param_7, param_8);
return fopAcM_create(PROC_Obj_Carry, i_setId, actorParams, i_pos, i_roomNo, &angle, NULL, -1,
NULL);
u32 params = 0;
daObjCarry_c::make_prm_bokkuri(&params, &params_ex, i_itemNo, i_itemBit, i_itemType, param_8);
return fopAcM_create(PROC_Obj_Carry, i_setId, params, i_pos, i_roomNo, &params_ex, NULL, -1, NULL);
}
/* 8001C95C-8001C9CC 01729C 0070+00 0/0 0/0 12/12 .text
+150 -137
View File
@@ -3,19 +3,25 @@
* Memory Card Control
*/
#include <dolphin/card.h>
#include "m_Do/m_Do_MemCard.h"
#include "JSystem/JKernel/JKRAssertHeap.h"
#include "dolphin/card.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_MemCardRWmng.h"
#include "m_Do/m_Do_Reset.h"
#define SLOT_A 0
#define CHECKSPACE_RESULT_READY 0
#define CHECKSPACE_RESULT_INSSPACE 1
#define CHECKSPACE_RESULT_NOENT 2
#define CHECKSPACE_RESULT_ERROR 3
/* 8001672C-80016730 01106C 0004+00 1/1 0/0 0/0 .text __ct__15mDoMemCd_Ctrl_cFv */
mDoMemCd_Ctrl_c::mDoMemCd_Ctrl_c() {}
/* ############################################################################################## */
/* 803DFC20-803E0C20 00C940 1000+00 1/1 0/0 0/0 .bss MemCardStack */
static u8 MemCardStack[4096];
static u8 MemCardStack[0x1000];
/* 803E0C20-803E0F40 00D940 0318+08 1/1 0/0 0/0 .bss MemCardThread */
static OSThread MemCardThread;
@@ -25,9 +31,9 @@ void mDoMemCd_Ctrl_c::ThdInit() {
CARDInit();
mCopyToPos = 0;
mProbeStat = 2;
mCardState = 0;
mCardCommand = CARD_NO_COMMAND;
mChannel = 0;
mCardState = CARD_STATE_NO_CARD_e;
mCardCommand = COMM_NONE_e;
mChannel = SLOT_A;
OSInitMutex(&mMutex);
OSInitCond(&mCond);
@@ -36,37 +42,40 @@ void mDoMemCd_Ctrl_c::ThdInit() {
OSCreateThread(&MemCardThread, (void*(*)(void*))mDoMemCd_main, NULL, MemCardStack + sizeof(MemCardStack),
sizeof(MemCardStack), priority + 1, 1);
OSResumeThread(&MemCardThread);
// "Memory Card Thread Init\n"
OS_REPORT("メモリーカードスレッド起動\n");
}
/* 800167D0-80016894 011110 00C4+00 1/1 0/0 0/0 .text main__15mDoMemCd_Ctrl_cFv */
void mDoMemCd_Ctrl_c::main() {
do {
OSLockMutex(&mMutex);
while (mCardCommand == CARD_NO_COMMAND) {
while (mCardCommand == COMM_NONE_e) {
OSWaitCond(&mCond, &mMutex);
}
OSUnlockMutex(&mMutex);
switch (mCardCommand) {
case CARD_RESTORE:
case COMM_RESTORE_e:
restore();
break;
case CARD_STORE:
case COMM_STORE_e:
store();
break;
case CARD_FORMAT:
case COMM_FORMAT_e:
format();
break;
case CARD_ATTACH:
case COMM_ATTACH_e:
attach();
break;
case CARD_DETACH:
case COMM_DETACH_e:
detach();
break;
}
OSLockMutex(&mMutex);
mCardCommand = CARD_NO_COMMAND;
mCardCommand = COMM_NONE_e;
OSUnlockMutex(&mMutex);
} while (true);
}
@@ -75,23 +84,23 @@ void mDoMemCd_Ctrl_c::main() {
void mDoMemCd_Ctrl_c::update() {
if (mDoRst::isReset()) {
OSLockMutex(&mMutex);
mCardCommand = CARD_DETACH;
mCardCommand = COMM_DETACH_e;
mProbeStat = 3;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
} else if (getStatus(0) != 14) {
if (CARDProbe(0) && getStatus(0) == 0) {
if (CARDProbe(SLOT_A) && getStatus(0) == 0) {
OSLockMutex(&mMutex);
mProbeStat = 0;
mCardState = 13;
mCardCommand = CARD_ATTACH;
mCardState = CARD_STATE_13_e;
mCardCommand = COMM_ATTACH_e;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
} else if (!CARDProbe(0) && getStatus(0) != 0) {
} else if (!CARDProbe(SLOT_A) && getStatus(0) != 0) {
OSLockMutex(&mMutex);
mProbeStat = 1;
mCardState = 13;
mCardCommand = CARD_DETACH;
mCardState = CARD_STATE_13_e;
mCardCommand = COMM_DETACH_e;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
}
@@ -102,7 +111,7 @@ void mDoMemCd_Ctrl_c::update() {
void mDoMemCd_Ctrl_c::load() {
if (OSTryLockMutex(&mMutex)) {
field_0x1fc8 = 0;
mCardCommand = CARD_RESTORE;
mCardCommand = COMM_RESTORE_e;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
}
@@ -113,16 +122,19 @@ void mDoMemCd_Ctrl_c::restore() {
CARDFileInfo file;
field_0x1fc8 = 0;
s32 card_state = CARDOpen(mChannel, "gczelda2", &file);
if (card_state == CARD_RESULT_READY) {
if (!mDoMemCdRWm_Restore(&file, this, sizeof(mData))) {
mCardState = 3;
s32 ret = CARDOpen(mChannel, "gczelda2", &file);
OS_REPORT("\x1b[43;30mCret=%d\n\x1b[m", ret);
if (ret == CARD_RESULT_READY) {
s32 ret2 = mDoMemCdRWm_Restore(&file, this, sizeof(mData));
OS_REPORT("\x1b[43;30mret2=%d\n\x1b[m", ret2);
if (ret2 == CARD_RESULT_READY) {
mCardState = CARD_STATE_READ_e;
} else {
setCardState(card_state);
setCardState(ret);
}
CARDClose(&file);
} else {
setCardState(card_state);
setCardState(ret);
}
field_0x1fc8 = 1;
@@ -130,7 +142,7 @@ void mDoMemCd_Ctrl_c::restore() {
/* 80016AB0-80016B58 0113F0 00A8+00 0/0 2/2 0/0 .text LoadSync__15mDoMemCd_Ctrl_cFPvUlUl
*/
s32 mDoMemCd_Ctrl_c::LoadSync(void* buffer, u32 size, u32 index) {
s32 mDoMemCd_Ctrl_c::LoadSync(void* i_buffer, u32 i_size, u32 i_position) {
int ret = 0;
if (field_0x1fc8 == 0) {
@@ -138,12 +150,12 @@ s32 mDoMemCd_Ctrl_c::LoadSync(void* buffer, u32 size, u32 index) {
}
if (OSTryLockMutex(&mMutex)) {
if (mCardState == 3) {
memcpy(buffer, &mData[index], size);
mCardState = 1;
if (mCardState == CARD_STATE_READ_e) {
memcpy(i_buffer, &mData[i_position], i_size);
mCardState = CARD_STATE_READY_e;
ret = 1;
} else {
mCardState = 2;
mCardState = CARD_STATE_NO_FILE_e;
ret = 2;
}
OSUnlockMutex(&mMutex);
@@ -153,11 +165,11 @@ s32 mDoMemCd_Ctrl_c::LoadSync(void* buffer, u32 size, u32 index) {
}
/* 80016B58-80016BD4 011498 007C+00 0/0 2/2 0/0 .text save__15mDoMemCd_Ctrl_cFPvUlUl */
void mDoMemCd_Ctrl_c::save(void* buffer, u32 size, u32 index) {
void mDoMemCd_Ctrl_c::save(void* i_buffer, u32 i_size, u32 i_position) {
if (OSTryLockMutex(&mMutex)) {
memcpy(&mData[index], buffer, size);
memcpy(&mData[i_position], i_buffer, i_size);
field_0x1fc8 = 0;
mCardCommand = CARD_STORE;
mCardCommand = COMM_STORE_e;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
}
@@ -166,33 +178,35 @@ void mDoMemCd_Ctrl_c::save(void* buffer, u32 size, u32 index) {
/* 80016BD4-80016CE0 011514 010C+00 1/1 0/0 0/0 .text store__15mDoMemCd_Ctrl_cFv */
void mDoMemCd_Ctrl_c::store() {
CARDFileInfo file;
s32 card_state;
s32 ret;
field_0x1fc8 = 0;
if (mCardState == 2) {
card_state = CARDCreate(mChannel, "gczelda2", 0x8000, &file);
if (card_state == CARD_RESULT_READY || card_state == CARD_RESULT_EXIST) {
mCardState = 1;
if (mCardState == CARD_STATE_NO_FILE_e) {
ret = CARDCreate(mChannel, "gczelda2", SAVEDATA_FILE_SIZE, &file);
if (ret == CARD_RESULT_READY || ret == CARD_RESULT_EXIST) {
mCardState = CARD_STATE_READY_e;
} else {
setCardState(card_state);
setCardState(ret);
}
}
if (mCardState == 1) {
card_state = CARDOpen(mChannel, "gczelda2", &file);
if (card_state == CARD_RESULT_READY) {
card_state = mDoMemCdRWm_Store(&file, this, sizeof(mData));
if (card_state != CARD_RESULT_READY) {
setCardState(card_state);
if (mCardState == CARD_STATE_READY_e) {
ret = CARDOpen(mChannel, "gczelda2", &file);
if (ret == CARD_RESULT_READY) {
ret = mDoMemCdRWm_Store(&file, this, sizeof(mData));
if (ret != CARD_RESULT_READY) {
setCardState(ret);
OS_REPORT("CARD Write ERR ret:%d\n", ret);
} else {
mCardState = 4;
mCardState = CARD_STATE_WRITE_e;
OS_REPORT("CARD Write OK ret:%d stat:%d\n", ret, mCardState);
}
CARDClose(&file);
} else {
setCardState(card_state);
setCardState(ret);
}
} else {
setCardState(card_state);
setCardState(ret);
}
field_0x1fc8 = 1;
@@ -207,14 +221,16 @@ s32 mDoMemCd_Ctrl_c::SaveSync() {
}
if (OSTryLockMutex(&mMutex)) {
if (mCardState == 4) {
mCardState = 1;
if (mCardState == CARD_STATE_WRITE_e) {
mCardState = CARD_STATE_READY_e;
ret = 1;
} else if (mCardState == 1) {
} else if (mCardState == CARD_STATE_READY_e) {
ret = 0;
} else {
ret = 2;
}
OS_REPORT("CARD Save Sync ret:%d stat:%d\n", ret, mCardState);
OSUnlockMutex(&mMutex);
}
@@ -226,46 +242,46 @@ u32 mDoMemCd_Ctrl_c::getStatus(u32) {
u32 status;
if (OSTryLockMutex(&mMutex)) {
switch (mCardState) {
case 1:
case CARD_STATE_READY_e:
status = 2;
break;
case 2:
case CARD_STATE_NO_FILE_e:
status = 1;
break;
case 3:
case CARD_STATE_READ_e:
status = 3;
break;
case 4:
case CARD_STATE_WRITE_e:
status = 4;
break;
case 5:
case CARD_STATE_FORMAT_e:
status = 5;
break;
case 0:
case CARD_STATE_NO_CARD_e:
status = 0;
break;
case 6:
case CARD_STATE_WRONG_ENCODING_e:
status = 7;
break;
case 7:
case CARD_STATE_BROKEN_e:
status = 6;
break;
case 8:
case CARD_STATE_INSSPACE_e:
status = 11;
break;
case 9:
case CARD_STATE_NOENT_e:
status = 12;
break;
case 10:
case CARD_STATE_WRONG_DEVICE_e:
status = 9;
break;
case 11:
case CARD_STATE_WRONG_SECTORSIZE_e:
status = 10;
break;
case 12:
case CARD_STATE_FATAL_ERROR_e:
status = 8;
break;
case 13:
case CARD_STATE_13_e:
status = 14;
break;
}
@@ -281,7 +297,7 @@ u32 mDoMemCd_Ctrl_c::getStatus(u32) {
*/
void mDoMemCd_Ctrl_c::command_format() {
if (OSTryLockMutex(&mMutex)) {
mCardCommand = CARD_FORMAT;
mCardCommand = COMM_FORMAT_e;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
}
@@ -291,12 +307,12 @@ void mDoMemCd_Ctrl_c::command_format() {
void mDoMemCd_Ctrl_c::format() {
field_0x1fc8 = 0;
s32 card_state = CARDFormat(mChannel);
s32 ret = CARDFormat(mChannel);
if (OSTryLockMutex(&mMutex)) {
if (card_state == CARD_RESULT_READY) {
mCardState = 5;
if (ret == CARD_RESULT_READY) {
mCardState = CARD_STATE_FORMAT_e;
} else {
setCardState(card_state);
setCardState(ret);
}
field_0x1fc8 = 1;
@@ -313,9 +329,9 @@ s32 mDoMemCd_Ctrl_c::FormatSync() {
}
if (OSTryLockMutex(&mMutex)) {
if (mCardState != 13) {
if (mCardState == 5) {
mCardState = 2;
if (mCardState != CARD_STATE_13_e) {
if (mCardState == CARD_STATE_FORMAT_e) {
mCardState = CARD_STATE_NO_FILE_e;
ret = 1;
} else {
ret = 2;
@@ -330,33 +346,33 @@ s32 mDoMemCd_Ctrl_c::FormatSync() {
/* 80016FB8-800170B8 0118F8 0100+00 1/1 0/0 0/0 .text attach__15mDoMemCd_Ctrl_cFv */
void mDoMemCd_Ctrl_c::attach() {
s32 mem_size;
s32 sect_size;
s32 sector_size;
s32 card_state = CARDProbeEx(mChannel, &mem_size, &sect_size);
if (card_state == CARD_RESULT_NOCARD) {
mCardState = 0;
} else if (card_state == CARD_RESULT_FATAL_ERROR) {
mCardState = 12;
} else if (card_state == CARD_RESULT_WRONGDEVICE) {
mCardState = 10;
} else if (sect_size != 0x2000) {
mCardState = 11;
s32 ret = CARDProbeEx(mChannel, &mem_size, &sector_size);
if (ret == CARD_RESULT_NOCARD) {
mCardState = CARD_STATE_NO_CARD_e;
} else if (ret == CARD_RESULT_FATAL_ERROR) {
mCardState = CARD_STATE_FATAL_ERROR_e;
} else if (ret == CARD_RESULT_WRONGDEVICE) {
mCardState = CARD_STATE_WRONG_DEVICE_e;
} else if (sector_size != SECTOR_SIZE) {
mCardState = CARD_STATE_WRONG_SECTORSIZE_e;
} else {
if (mount()) {
if (loadfile()) {
mCardState = 1;
mCardState = CARD_STATE_READY_e;
} else {
switch (checkspace()) {
case 0:
mCardState = 2;
case CHECKSPACE_RESULT_READY:
mCardState = CARD_STATE_NO_FILE_e;
break;
case 1:
mCardState = 8;
case CHECKSPACE_RESULT_INSSPACE:
mCardState = CARD_STATE_INSSPACE_e;
break;
case 2:
mCardState = 9;
case CHECKSPACE_RESULT_NOENT:
mCardState = CARD_STATE_NOENT_e;
break;
case 3:
case CHECKSPACE_RESULT_ERROR:
break;
}
}
@@ -368,8 +384,8 @@ void mDoMemCd_Ctrl_c::attach() {
*/
void mDoMemCd_Ctrl_c::command_attach() {
if (OSTryLockMutex(&mMutex)) {
mCardState = 13;
mCardCommand = CARD_ATTACH;
mCardState = CARD_STATE_13_e;
mCardCommand = COMM_ATTACH_e;
OSUnlockMutex(&mMutex);
OSSignalCond(&mCond);
}
@@ -378,64 +394,62 @@ void mDoMemCd_Ctrl_c::command_attach() {
/* 80017110-80017148 011A50 0038+00 1/1 0/0 0/0 .text detach__15mDoMemCd_Ctrl_cFv */
void mDoMemCd_Ctrl_c::detach() {
CARDUnmount(mChannel);
mCardState = 0;
mCardState = CARD_STATE_NO_CARD_e;
}
/* ############################################################################################## */
/* 803E0F40-803EAF40 00DC60 A000+00 1/1 0/0 0/0 .bss MemCardWorkArea0 */
static u8 MemCardWorkArea0[5 * 8 * 1024] ALIGN_DECL(32);
static u8 MemCardWorkArea0[CARD_WORKAREA_SIZE] ALIGN_DECL(32);
/* 80017148-80017274 011A88 012C+00 2/1 0/0 0/0 .text mount__15mDoMemCd_Ctrl_cFv */
s32 mDoMemCd_Ctrl_c::mount() {
s32 result = CARDMount(mChannel, MemCardWorkArea0, 0);
s32 result = CARDMount(mChannel, MemCardWorkArea0, NULL);
switch (result) {
case CARD_RESULT_IOERROR:
case CARD_RESULT_FATAL_ERROR:
mCardState = 12;
return 0;
mCardState = CARD_STATE_FATAL_ERROR_e;
return FALSE;
case CARD_RESULT_NOCARD:
mCardState = 0;
return 0;
mCardState = CARD_STATE_NO_CARD_e;
return FALSE;
case CARD_RESULT_BROKEN:
case CARD_RESULT_READY:
switch (CARDCheck(mChannel)) {
case CARD_RESULT_READY:
return 1;
return TRUE;
case CARD_RESULT_BROKEN:
mCardState = 7;
return 0;
mCardState = CARD_STATE_BROKEN_e;
return FALSE;
case CARD_RESULT_IOERROR:
mCardState = 12;
return 0;
mCardState = CARD_STATE_FATAL_ERROR_e;
return FALSE;
case CARD_RESULT_NOCARD:
mCardState = 0;
return 0;
mCardState = CARD_STATE_NO_CARD_e;
return FALSE;
case CARD_RESULT_ENCODING:
mCardState = 6;
return 0;
mCardState = CARD_STATE_WRONG_ENCODING_e;
return FALSE;
}
break;
case CARD_RESULT_ENCODING:
mCardState = 6;
return 0;
mCardState = CARD_STATE_WRONG_ENCODING_e;
return FALSE;
}
return 0;
return FALSE;
}
/* 80017274-800172D4 011BB4 0060+00 1/1 0/0 0/0 .text loadfile__15mDoMemCd_Ctrl_cFv */
s32 mDoMemCd_Ctrl_c::loadfile() {
CARDFileInfo file;
s32 card_state = CARDOpen(mChannel, "gczelda2", &file);
if (card_state == CARD_RESULT_READY) {
s32 ret = CARDOpen(mChannel, "gczelda2", &file);
if (ret == CARD_RESULT_READY) {
CARDClose(&file);
return CARD_RESULT_UNLOCKED;
return TRUE;
} else {
setCardState(card_state);
return CARD_RESULT_READY;
setCardState(ret);
return FALSE;
}
}
@@ -443,51 +457,50 @@ s32 mDoMemCd_Ctrl_c::loadfile() {
//
s32 mDoMemCd_Ctrl_c::checkspace() {
s32 bytesNotUsed, filesNotUsed;
s32 result = CARDFreeBlocks(mChannel,&bytesNotUsed,&filesNotUsed);
s32 result = CARDFreeBlocks(mChannel, &bytesNotUsed, &filesNotUsed);
if (result != 0) {
if (result != CARD_RESULT_READY) {
setCardState(result);
return 3;
return CHECKSPACE_RESULT_ERROR;
}
if (bytesNotUsed < 0x8000) {
return 1;
if (bytesNotUsed < SAVEDATA_FILE_SIZE) {
return CHECKSPACE_RESULT_INSSPACE;
}
if (filesNotUsed < 1) {
return 2;
return CHECKSPACE_RESULT_NOENT;
}
return 0;
return CHECKSPACE_RESULT_READY;
}
/* 80017360-8001741C 011CA0 00BC+00 5/5 0/0 0/0 .text setCardState__15mDoMemCd_Ctrl_cFl
*/
void mDoMemCd_Ctrl_c::setCardState(s32 param_0) {
switch (param_0) {
void mDoMemCd_Ctrl_c::setCardState(s32 i_result) {
switch (i_result) {
case CARD_RESULT_IOERROR:
case CARD_RESULT_FATAL_ERROR:
mCardState = 12;
mCardState = CARD_STATE_FATAL_ERROR_e;
break;
case CARD_RESULT_NOCARD:
mCardState = 0;
mCardState = CARD_STATE_NO_CARD_e;
break;
case CARD_RESULT_BROKEN:
case CARD_RESULT_READY:
if (CARDCheck(mChannel) != 0) {
mCardState = 7;
if (CARDCheck(mChannel) != CARD_RESULT_READY) {
mCardState = CARD_STATE_BROKEN_e;
}
break;
case CARD_RESULT_ENCODING:
mCardState = 6;
mCardState = CARD_STATE_WRONG_ENCODING_e;
break;
case CARD_RESULT_NOFILE:
mCardState = 2;
mCardState = CARD_STATE_NO_FILE_e;
break;
}
}
/* ############################################################################################## */
/* 803EAF40-803ECF40 017C60 2000+00 2/2 27/27 0/0 .bss g_mDoMemCd_control */
mDoMemCd_Ctrl_c g_mDoMemCd_control;
+86 -94
View File
@@ -4,12 +4,11 @@
*/
#include "m_Do/m_Do_MemCardRWmng.h"
#include "m_Do/m_Do_MemCard.h"
#include "JSystem/JUtility/JUTTexture.h"
#include "stdio.h"
#include "d/d_com_inf_game.h"
#include "d/d_save.h"
#include "dolphin/card.h"
#include "m_Do/m_Do_MemCard.h"
#include <stdio.h>
#if VERSION == VERSION_GCN_JPN
#define HEADER_TITLE "ゼルダの伝説 トワイライトプリンセス"
@@ -19,123 +18,118 @@
#define HEADER_COMMENT "%d/%d Save Data"
#endif
struct data_s {
int unk_0x0;
int data_version;
u8 data[(SAVEDATA_SIZE * 3) + 0x38]; // unsure what the extra 0x38 is
u32 checksum;
};
/* 803ECF40-803F0F40 019C60 4000+00 2/2 0/0 0/0 .bss sTmpBuf */
static u8 sTmpBuf[0x4000];
static u8 sTmpBuf[SECTOR_SIZE * 2];
/* 80017498-8001769C 011DD8 0204+00 0/0 1/1 0/0 .text mDoMemCdRWm_Store__FP12CARDFileInfoPvUl */
s32 mDoMemCdRWm_Store(CARDFileInfo* file, void* data, u32 length) {
mDoMemCdRWm_BuildHeader((mDoMemCdRWm_HeaderData*)sTmpBuf);
s32 card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf), 0);
if (card_state != CARD_RESULT_READY) {
return card_state;
s32 ret = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf), 0);
if (ret != CARD_RESULT_READY) {
return ret;
}
if (!mDoMemCdRWm_CheckCardStat(file)) {
memset(sTmpBuf, 0, sizeof(sTmpBuf));
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDWrite(file, sTmpBuf, SECTOR_SIZE, 0x4000);
if (ret != CARD_RESULT_READY) {
return ret;
}
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDWrite(file, sTmpBuf, SECTOR_SIZE, 0x6000);
if (ret != CARD_RESULT_READY) {
return ret;
}
}
struct data_s {
int field_0x0;
int field_0x4;
u8 mData[0x1FF4];
u32 mChecksum;
};
memset(sTmpBuf, 0, sizeof(sTmpBuf));
data_s* tmp_data = (data_s*)sTmpBuf;
tmp_data->field_0x4 = 6;
memcpy(tmp_data->mData, data, length);
tmp_data->field_0x0 = 0;
u32 checksum = mDoMemCdRWm_CalcCheckSum(tmp_data, 0x1FFC);
tmp_data->mChecksum = checksum;
tmp_data->data_version = SAVEDATA_VERSION;
memcpy(tmp_data->data, data, length);
tmp_data->unk_0x0 = 0;
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
u32 checksum = mDoMemCdRWm_CalcCheckSum(tmp_data, sizeof(data_s) - 4);
tmp_data->checksum = checksum;
ret = CARDWrite(file, sTmpBuf, SECTOR_SIZE, 0x4000);
if (ret != CARD_RESULT_READY) {
return ret;
}
card_state = CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDRead(file, sTmpBuf, SECTOR_SIZE, 0x4000);
if (ret != CARD_RESULT_READY) {
return ret;
}
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) {
return card_state;
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, sizeof(data_s) - 4)) {
return ret;
}
card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDWrite(file, sTmpBuf, SECTOR_SIZE, 0x6000);
if (ret != CARD_RESULT_READY) {
return ret;
}
card_state = CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDRead(file, sTmpBuf, SECTOR_SIZE, 0x6000);
if (ret != CARD_RESULT_READY) {
return ret;
}
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) {
return card_state;
if (checksum != mDoMemCdRWm_CalcCheckSum(sTmpBuf, sizeof(data_s) - 4)) {
return ret;
}
mDoMemCdRWm_SetCardStat(file);
return card_state;
return ret;
}
/* 8001769C-8001787C 011FDC 01E0+00 0/0 1/1 0/0 .text mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl */
s32 mDoMemCdRWm_Restore(CARDFileInfo* file, void* data, u32 length) {
BOOL rewrite = FALSE;
struct save_data_s {
u8 field_0x0[4];
u32 mDataVersion;
u8 mSave1[QUEST_LOG_SIZE];
u8 mSave2[QUEST_LOG_SIZE];
u8 mSave3[QUEST_LOG_SIZE];
};
data_s* saves = (data_s*)sTmpBuf;
data_s* backup_saves = (data_s*)(sTmpBuf + SECTOR_SIZE);
save_data_s* saves = (save_data_s*)sTmpBuf;
save_data_s* backup_saves = (save_data_s*)(sTmpBuf + sizeof(sTmpBuf) / 2);
s32 card_state = CARDRead(file, saves, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
s32 ret = CARDRead(file, saves, SECTOR_SIZE, 0x4000);
if (ret != CARD_RESULT_READY) {
return ret;
}
BOOL test_save1 = mDoMemCdRWm_TestCheckSumGameData(saves->mSave1);
BOOL test_save2 = mDoMemCdRWm_TestCheckSumGameData(saves->mSave2);
BOOL test_save3 = mDoMemCdRWm_TestCheckSumGameData(saves->mSave3);
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]);
card_state = CARDRead(file, backup_saves, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDRead(file, backup_saves, SECTOR_SIZE, 0x6000);
if (ret != CARD_RESULT_READY) {
return ret;
}
BOOL test_backup1 = mDoMemCdRWm_TestCheckSumGameData(backup_saves->mSave1);
BOOL test_backup2 = mDoMemCdRWm_TestCheckSumGameData(backup_saves->mSave2);
BOOL test_backup3 = mDoMemCdRWm_TestCheckSumGameData(backup_saves->mSave3);
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 (!test_save1 && test_backup1) {
memcpy(saves->mSave1, backup_saves->mSave1, QUEST_LOG_SIZE);
if (!save1_valid && backup1_valid) {
memcpy(&saves->data[SAVEDATA_SIZE * 0], &backup_saves->data[SAVEDATA_SIZE * 0], SAVEDATA_SIZE);
rewrite = TRUE;
}
if (!test_save2 && test_backup2) {
memcpy(saves->mSave2, backup_saves->mSave2, QUEST_LOG_SIZE);
if (!save2_valid && backup2_valid) {
memcpy(&saves->data[SAVEDATA_SIZE * 1], &backup_saves->data[SAVEDATA_SIZE * 1], SAVEDATA_SIZE);
rewrite = TRUE;
}
if (!test_save3 && test_backup3) {
memcpy(saves->mSave3, backup_saves->mSave3, QUEST_LOG_SIZE);
if (!save3_valid && backup3_valid) {
memcpy(&saves->data[SAVEDATA_SIZE * 2], &backup_saves->data[SAVEDATA_SIZE * 2], SAVEDATA_SIZE);
rewrite = TRUE;
}
@@ -144,19 +138,19 @@ s32 mDoMemCdRWm_Restore(CARDFileInfo* file, void* data, u32 length) {
}
if (rewrite) {
card_state = CARDWrite(file, saves, sizeof(sTmpBuf) / 2, 0x4000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDWrite(file, saves, SECTOR_SIZE, 0x4000);
if (ret != CARD_RESULT_READY) {
return ret;
}
card_state = CARDWrite(file, saves, sizeof(sTmpBuf) / 2, 0x6000);
if (card_state != CARD_RESULT_READY) {
return card_state;
ret = CARDWrite(file, saves, SECTOR_SIZE, 0x6000);
if (ret != CARD_RESULT_READY) {
return ret;
}
}
memcpy(data, saves->mSave1, length);
mDoMemCd_setDataVersion(saves->mDataVersion);
memcpy(data, saves->data, length);
mDoMemCd_setDataVersion(saves->data_version);
mDoMemCd_setSerialNo();
return CARD_RESULT_READY;
@@ -192,26 +186,24 @@ static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header) {
snprintf(header->mComment, sizeof(header->mComment), HEADER_COMMENT, time.mon + 1, time.mday);
#endif
ResTIMG* banner_data =
(ResTIMG*)g_dComIfG_gameInfo.play.mCardIconResArchive->getResource("zelda2_gc_banner.bti");
ResTIMG* icon_data =
(ResTIMG*)g_dComIfG_gameInfo.play.mCardIconResArchive->getResource("zelda2_gc_icon.bti");
ResTIMG* banner_data = (ResTIMG*)dComIfGp_getCardIconResArchive()->getResource("zelda2_gc_banner.bti");
ResTIMG* icon_data = (ResTIMG*)dComIfGp_getCardIconResArchive()->getResource("zelda2_gc_icon.bti");
memcpy(header->mBannerTexData, (u8*)banner_data + banner_data->imageOffset,
(banner_data->numColors * 2) + 0xC00);
memcpy(header->mBannerTexData, (u8*)banner_data + banner_data->imageOffset, (banner_data->numColors * 2) + 0xC00);
memcpy(header->mIconTexData0, (u8*)icon_data + icon_data->imageOffset, 0x400);
memcpy(header->mIconTexData1, (u8*)icon_data + icon_data->imageOffset, 0x400);
memcpy(header->mIconTexData2, (u8*)icon_data + icon_data->imageOffset, 0x400);
memcpy(header->mIconTexData3, (u8*)icon_data + icon_data->imageOffset, 0x400);
memcpy(header->mIconTexData4, (u8*)icon_data + icon_data->imageOffset,
(icon_data->numColors * 2) + 0x400);
g_dComIfG_gameInfo.play.mCardIconResArchive->removeResourceAll();
memcpy(header->mIconTexData4, (u8*)icon_data + icon_data->imageOffset, (icon_data->numColors * 2) + 0x400);
dComIfGp_getCardIconResArchive()->removeResourceAll();
}
/* 800179E4-80017B4C 012324 0168+00 1/1 0/0 0/0 .text mDoMemCdRWm_SetCardStat__FP12CARDFileInfo */
static void mDoMemCdRWm_SetCardStat(CARDFileInfo* file) {
CARDStat stat;
mDoMemCd_getCardStatus(file->fileNo, &stat);
stat.iconAddr = 0;
stat.commentAddr = 0x2400;
CARDSetBannerFormat(&stat, CARD_STAT_BANNER_C8);
@@ -232,6 +224,7 @@ static void mDoMemCdRWm_SetCardStat(CARDFileInfo* file) {
CARDSetIconSpeed(&stat, 5, CARD_STAT_SPEED_END);
CARDSetIconSpeed(&stat, 6, CARD_STAT_SPEED_END);
CARDSetIconSpeed(&stat, 7, CARD_STAT_SPEED_END);
mDoMemCd_setCardStatus(file->fileNo, &stat);
}
@@ -240,6 +233,7 @@ static void mDoMemCdRWm_SetCardStat(CARDFileInfo* file) {
static BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* file) {
CARDStat stat;
mDoMemCd_getCardStatus(file->fileNo, &stat);
if (stat.iconAddr != 0 || stat.commentAddr != 0x2400
|| CARDGetBannerFormat(&stat) != CARD_STAT_BANNER_C8
|| CARDGetIconAnim(&stat) != CARD_STAT_ANIM_BOUNCE
@@ -262,6 +256,7 @@ static BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* file) {
{
return FALSE;
}
return TRUE;
}
@@ -303,15 +298,12 @@ static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size) {
/* 80017CEC-80017D38 01262C 004C+00 1/1 4/4 0/0 .text mDoMemCdRWm_TestCheckSumGameData__FPv */
BOOL mDoMemCdRWm_TestCheckSumGameData(void* data) {
u64 checksum = mDoMemCdRWm_CalcCheckSumGameData(data, 0xA8C);
return checksum == *(u64*)((u8*)data + 0xA8C);
u64 checksum = mDoMemCdRWm_CalcCheckSumGameData(data, (SAVEDATA_SIZE - sizeof(u64)));
return checksum == *(u64*)((u8*)data + (SAVEDATA_SIZE - sizeof(u64)));
}
/* 80017D38-80017D7C 012678 0044+00 0/0 4/4 0/0 .text mDoMemCdRWm_SetCheckSumGameData__FPUcUc */
void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum) {
u8* file_ptr = data + (dataNum * QUEST_LOG_SIZE);
*(u64*)(file_ptr + 0xA8C) = mDoMemCdRWm_CalcCheckSumGameData(file_ptr, 0xA8C);
u8* file_ptr = data + (dataNum * SAVEDATA_SIZE);
*(u64*)(file_ptr + (SAVEDATA_SIZE - sizeof(u64))) = mDoMemCdRWm_CalcCheckSumGameData(file_ptr, (SAVEDATA_SIZE - sizeof(u64)));
}
/* 80374408-80374408 000A68 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+69 -1
View File
@@ -418,6 +418,7 @@ void my_SysPrintHeap(char const* message, void* start, u32 size) {
(u32)start + size, size / 1024);
}
#if VERSION != VERSION_GCN_PAL
/* 803A2F60-803A2F9C 000080 003C+00 1/0 0/0 0/0 .data g_ntscZeldaIntDf */
extern GXRenderModeObj g_ntscZeldaIntDf = {
VI_TVMODE_NTSC_INT,
@@ -473,6 +474,63 @@ extern GXRenderModeObj g_ntscZeldaProg = {
{6, 6}},
{0, 0, 21, 22, 21, 0, 0},
};
#else
/* 803A2F60-803A2F9C 000080 003C+00 1/0 0/0 0/0 .data g_ntscZeldaIntDf */
extern GXRenderModeObj g_ntscZeldaIntDf = {
VI_TVMODE_PAL_INT,
608,
448,
538,
25,
18,
670,
538,
VI_XFBMODE_DF,
0,
0,
{{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6}},
{8, 8, 10, 12, 10, 8, 8},
};
/* 803A2F9C-803A2FD8 0000BC 003C+00 1/1 1/1 0/0 .data g_ntscZeldaProg */
extern GXRenderModeObj g_ntscZeldaProg = {
VI_TVMODE_EURGB60_INT,
608,
448,
448,
27,
16,
666,
448,
VI_XFBMODE_DF,
0,
0,
{{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6},
{6, 6}},
{8, 8, 10, 12, 10, 8, 8},
};
#endif
/* 804505A0-804505A8 -00001 0004+04 1/1 3/3 0/0 .sdata mRenderModeObj__15mDoMch_render_c
*/
@@ -533,7 +591,8 @@ int mDoMch_Create() {
JFWSystem::setAramAudioBufSize(0xA00000);
JFWSystem::setAramGraphBufSize(-1);
if (!(OSGetResetCode() >> 0x1F)) {
#if VERSION != VERSION_GCN_PAL
if ((OSGetResetCode() >> 31) == 0) {
if (VIGetDTVStatus() == 0) {
OSSetProgressiveMode(0);
}
@@ -542,6 +601,15 @@ int mDoMch_Create() {
mDoMch_render_c::setProgressiveMode();
}
}
#else
if ((int)(OSGetResetCode() >> 31) == 1) {
if (mDoRst::getProgSeqFlag() != 0) {
if (OSGetEuRgb60Mode() == OS_EURGB60_ON) {
mDoMch_render_c::setProgressiveMode();
}
}
}
#endif
JFWSystem::setRenderMode(mDoMch_render_c::getRenderModeObj());
JFWSystem::firstInit();