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 0b99197789
commit 8785882261
30 changed files with 2249 additions and 1398 deletions
@@ -64,4 +64,4 @@ __vt__10dCcD_GStts = .data:0x00000138; // type:object size:0xC scope:global
__vt__8cM3dGAab = .data:0x00000144; // type:object size:0xC scope:global
__vt__8cM3dGCyl = .data:0x00000150; // type:object size:0xC scope:global
__vt__13daObjThDoor_c = .data:0x0000015C; // type:object size:0x28 scope:global
init$1622 = .bss:0x00000000; // type:object size:0x1 data:byte scope:local
init$1622 = .bss:0x00000000; // type:object size:0x1 scope:local data:byte
+1 -1
View File
@@ -98,7 +98,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte scope:local
l_HIOInit = .bss:0x00000045; // type:object size:0x1 scope:local data:byte
@3801 = .bss:0x00000048; // type:object size:0xC scope:local
l_HIO = .bss:0x00000054; // type:object size:0xC scope:local data:byte
hz_check_pos_x = .bss:0x00000060; // type:object size:0x4 scope:local align:4 data:float
@@ -89,7 +89,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
init$1832 = .bss:0x00000045; // type:object size:0x1 data:byte scope:local
init$1832 = .bss:0x00000045; // type:object size:0x1 scope:local data:byte
@4351 = .bss:0x00000048; // type:object size:0xC scope:local
l_shotSmokeScale$4350 = .bss:0x00000058; // type:object size:0xC scope:local
sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x00000064; // type:object size:0x4 scope:global
@@ -78,4 +78,4 @@ __vt__14mDoHIO_entry_c = .data:0x00000184; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
@3647 = .bss:0x00000008; // type:object size:0xC scope:local
l_HIO = .bss:0x00000014; // type:object size:0x20 scope:local align:4 data:float
init$1675 = .bss:0x00000034; // type:object size:0x1 data:byte scope:local
init$1675 = .bss:0x00000034; // type:object size:0x1 scope:local data:byte
+1 -1
View File
@@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global
__vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global
__vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local
l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte
@3770 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float
@@ -122,5 +122,5 @@ __vt__8cM3dGAab = .data:0x000001F0; // type:object size:0xC scope:global
__vt__12dBgS_ObjAcch = .data:0x000001FC; // type:object size:0x24 scope:global
__vt__12J3DFrameCtrl = .data:0x00000220; // type:object size:0xC scope:global
__vt__14daObjVolcBom_c = .data:0x0000022C; // type:object size:0x28 scope:global
init$1712 = .bss:0x00000000; // type:object size:0x1 data:byte scope:local
init$2146 = .bss:0x00000001; // type:object size:0x1 data:byte scope:local
init$1712 = .bss:0x00000000; // type:object size:0x1 scope:local data:byte
init$2146 = .bss:0x00000001; // type:object size:0x1 scope:local data:byte
@@ -64,4 +64,4 @@ __vt__10dCcD_GStts = .data:0x00000138; // type:object size:0xC scope:global
__vt__8cM3dGAab = .data:0x00000144; // type:object size:0xC scope:global
__vt__8cM3dGCyl = .data:0x00000150; // type:object size:0xC scope:global
__vt__13daObjThDoor_c = .data:0x0000015C; // type:object size:0x28 scope:global
init$1622 = .bss:0x00000000; // type:object size:0x1 data:byte scope:local
init$1622 = .bss:0x00000000; // type:object size:0x1 scope:local data:byte
+1 -1
View File
@@ -98,7 +98,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
l_HIOInit = .bss:0x00000045; // type:object size:0x1 data:byte scope:local
l_HIOInit = .bss:0x00000045; // type:object size:0x1 scope:local data:byte
@3801 = .bss:0x00000048; // type:object size:0xC scope:local
l_HIO = .bss:0x00000054; // type:object size:0xC scope:local data:byte
hz_check_pos_x = .bss:0x00000060; // type:object size:0x4 scope:local align:4 data:float
@@ -89,7 +89,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa
@1012 = .bss:0x0000003C; // type:object size:0x1 scope:local
@1010 = .bss:0x00000040; // type:object size:0x1 scope:local
@1009 = .bss:0x00000044; // type:object size:0x1 scope:local
init$1832 = .bss:0x00000045; // type:object size:0x1 data:byte scope:local
init$1832 = .bss:0x00000045; // type:object size:0x1 scope:local data:byte
@4351 = .bss:0x00000048; // type:object size:0xC scope:local
l_shotSmokeScale$4350 = .bss:0x00000058; // type:object size:0xC scope:local
sInstance__40JASGlobalInstance<19JASDefaultBankTable> = .bss:0x00000064; // type:object size:0x4 scope:global
@@ -78,4 +78,4 @@ __vt__14mDoHIO_entry_c = .data:0x00000184; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
@3647 = .bss:0x00000008; // type:object size:0xC scope:local
l_HIO = .bss:0x00000014; // type:object size:0x20 scope:local align:4 data:float
init$1675 = .bss:0x00000034; // type:object size:0x1 data:byte scope:local
init$1675 = .bss:0x00000034; // type:object size:0x1 scope:local data:byte
+1 -1
View File
@@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global
__vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global
__vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local
l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte
@3770 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float
@@ -122,5 +122,5 @@ __vt__8cM3dGAab = .data:0x000001F0; // type:object size:0xC scope:global
__vt__12dBgS_ObjAcch = .data:0x000001FC; // type:object size:0x24 scope:global
__vt__12J3DFrameCtrl = .data:0x00000220; // type:object size:0xC scope:global
__vt__14daObjVolcBom_c = .data:0x0000022C; // type:object size:0x28 scope:global
init$1712 = .bss:0x00000000; // type:object size:0x1 data:byte scope:local
init$2146 = .bss:0x00000001; // type:object size:0x1 data:byte scope:local
init$1712 = .bss:0x00000000; // type:object size:0x1 scope:local data:byte
init$2146 = .bss:0x00000001; // type:object size:0x1 scope:local data:byte
+1 -1
View File
@@ -1545,7 +1545,7 @@ config.libs = [
ActorRel(Equivalent, "d_a_e_dn"), # weak func order
ActorRel(Equivalent, "d_a_e_fm"),
ActorRel(MatchingFor("GZ2E01"), "d_a_e_ga"),
ActorRel(NonMatching, "d_a_e_hb"),
ActorRel(Equivalent, "d_a_e_hb"),
ActorRel(MatchingFor("GZ2E01"), "d_a_e_nest"),
ActorRel(Equivalent, "d_a_e_rd"),
ActorRel(MatchingFor("GZ2E01"), "d_a_econt"),
+73 -4
View File
@@ -1,6 +1,10 @@
#ifndef D_A_E_HB_H
#define D_A_E_HB_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
/**
* @ingroup actors-enemies
@@ -10,16 +14,81 @@
* @details
*
*/
class e_hb_class : public fopEn_enemy_c {
private:
/* 0x5ac */ u8 field_0x5ac[0x1268 - 0x5ac];
class e_hb_class {
public:
/* 0x0000 */ fopEn_enemy_c enemy;
/* 0x05AC */ request_of_phase_process_class phase;
/* 0x05B4 */ u8 arg0;
/* 0x05B5 */ u8 arg3;
/* 0x05B6 */ u8 arg1;
/* 0x05B7 */ u8 arg2;
/* 0x05B8 */ mDoExt_McaMorfSO* modelMorf;
/* 0x05BC */ Z2CreatureEnemy sound;
/* 0x0660 */ int anm;
/* 0x0664 */ u32 shadowId;
/* 0x0668 */ s16 counter;
/* 0x066A */ s16 action;
/* 0x066C */ s16 mode;
/* 0x0670 */ f32 pl_search_range;
/* 0x0674 */ cXyz field_0x674;
/* 0x0680 */ s16 field_0x680;
/* 0x0682 */ u8 field_0x682[0x0684 - 0x0682];
/* 0x0684 */ s16 angle_to_player;
/* 0x0688 */ f32 dist_to_player;
/* 0x068C */ s16 field_0x68c;
/* 0x0690 */ f32 field_0x690;
/* 0x0694 */ f32 size;
/* 0x0698 */ s16 timers[3];
/* 0x069E */ s16 invulnerabilityTimer;
/* 0x06A0 */ cXyz field_0x6a0[12];
/* 0x0730 */ csXyz field_0x730[12];
/* 0x0778 */ J3DModel* thornModel[11];
/* 0x07A4 */ u8 field_0x7A4[0x7D8 - 0x7A4];
/* 0x07D8 */ f32 thorn_size[12];
/* 0x0808 */ mDoExt_3DlineMat1_c stalkLine;
/* 0x0844 */ f32 field_0x844;
/* 0x0848 */ f32 field_0x848;
/* 0x084C */ f32 field_0x84c;
/* 0x0850 */ s8 field_0x850;
/* 0x0851 */ s8 field_0x851;
/* 0x0852 */ s8 field_0x852;
/* 0x0854 */ f32 field_0x854;
/* 0x0858 */ u8 field_0x858[0x860 - 0x858];
/* 0x0860 */ dCcD_Stts ccStts;
/* 0x089C */ dCcD_Sph ccSph;
/* 0x09D4 */ dCcD_Sph atSph;
/* 0x0B0C */ s8 field_0xb0c;
/* 0x0B0D */ s8 field_0xb0d;
/* 0x0B10 */ dCcD_Sph kukiSph[4];
/* 0x0FF0 */ dCcU_AtInfo atInfo;
/* 0x1014 */ dBgS_AcchCir acchcir;
/* 0x1054 */ dBgS_ObjAcch acch;
/* 0x122C */ u32 leaf_actor_id;
/* 0x1230 */ s8 field_0x1230;
/* 0x1231 */ s8 field_0x1231;
/* 0x1234 */ u32 field_0x1234[3];
/* 0x1240 */ u32 field_0x1240;
/* 0x1244 */ u32 field_0x1244;
/* 0x1248 */ u32 field_0x1248;
/* 0x124C */ f32 field_0x124c;
/* 0x1250 */ u8 field_0x1250[0x1264 - 0x1250];
/* 0x1264 */ u8 HIOInit;
};
STATIC_ASSERT(sizeof(e_hb_class) == 0x1268);
class daE_HB_HIO_c {
public:
/* 804FBD6C */ daE_HB_HIO_c();
/* 805005D0 */ ~daE_HB_HIO_c();
/* 805005D0 */ virtual ~daE_HB_HIO_c() {}
/* 0x04 */ s8 id;
/* 0x08 */ f32 base_size;
/* 0x0C */ f32 flower_size;
/* 0x10 */ f32 appear_size;
/* 0x14 */ s16 roof_reappear_interval;
/* 0x16 */ s16 attack_freq;
/* 0x18 */ u8 bite_pattern;
};
+7 -4
View File
@@ -290,10 +290,13 @@ public:
field_0xdea = 1;
}
static void make_prm(csXyz* param_1, u8 param_2, u8 param_3, u8 param_4, u8 param_5,
u8 param_6 = 0) {
param_1->x = (param_4 << 8) | param_3;
param_1->z = param_5 | (param_6 << 13) | ((u32(param_2) & 0xFF) << 1);
static void make_prm(u32* o_params, csXyz* o_paramsEx, u8 param_2, u8 i_itemNo, u8 i_itemBit, u8 i_itemType, u8 param_6) {
o_paramsEx->x = (i_itemBit << 8) | (i_itemNo & 0xFF);
o_paramsEx->z = (param_6 << 13) | (param_2 << 1) | i_itemType;
}
static void make_prm_bokkuri(u32* o_params, csXyz* o_paramsEx, u8 i_itemNo, u8 i_itemBit, u8 i_itemType, u8 param_5) {
make_prm(o_params, o_paramsEx, 6, i_itemNo, i_itemBit, i_itemType, param_5);
}
static const daObjCarry_dt_t mData[];
+5
View File
@@ -604,6 +604,7 @@ public:
JKRArchive* getRubyArchive() { return mRubyArchive; }
JKRArchive* getMeterButtonArchive() { return mMeterButtonArchive; }
JKRArchive* getAllMapArchive() { return mAllMapArchive; }
JKRArchive* getCardIconResArchive() { return mCardIconResArchive; }
void setFieldMapArchive2(JKRArchive* arc) { mFieldMapArchive2 = arc; }
void setAnmArchive(JKRArchive* arc) { mAnmArchive = arc; }
@@ -2293,6 +2294,10 @@ inline JKRArchive* dComIfGp_getMsgCommonArchive() {
return g_dComIfG_gameInfo.play.getMsgCommonArchive();
}
inline JKRArchive* dComIfGp_getCardIconResArchive() {
return g_dComIfG_gameInfo.play.getCardIconResArchive();
}
inline void dComIfGp_setFieldMapArchive2(JKRArchive* arc) {
g_dComIfG_gameInfo.play.setFieldMapArchive2(arc);
}
+8
View File
@@ -8,6 +8,7 @@ class JKRHeap;
struct ResTIMG;
class dDlst_2D_c;
class mDoDvdThd_mountXArchive_c;
class mDoDvdThd_mountArchive_c;
class mDoDvdThd_toMainRam_c;
class dLog_HIO_c {
@@ -68,6 +69,10 @@ public:
/* 80258520 */ bool isProgressiveMode();
/* 8025854C */ void setRenderMode();
#if VERSION == VERSION_GCN_PAL
u8 getPalLanguage();
#endif
public:
/* 0x1C4 */ request_of_phase_process_class field_0x1c4;
/* 0x1CC */ mDoDvdThd_toMainRam_c* sceneCommand;
@@ -82,6 +87,9 @@ public:
/* 0x1F0 */ dDlst_2D_c* mProgressiveYes;
/* 0x1F4 */ dDlst_2D_c* mProgressiveNo;
/* 0x1F8 */ dDlst_2D_c* mProgressiveSel;
#if VERSION == VERSION_GCN_PAL
/* 0x1FC */ mDoDvdThd_mountArchive_c* mpPalLogoResCommand;
#endif
/* 0x1FC */ request_of_phase_process_class* m_preLoad_dylPhase;
/* 0x200 */ ResTIMG* mProgressivePro;
/* 0x204 */ ResTIMG* mProgressiveInter;
+7
View File
@@ -21,6 +21,13 @@ extern "C" {
#define OS_EURGB60_OFF 0
#define OS_EURGB60_ON 1
#define OS_LANGUAGE_ENGLISH 0
#define OS_LANGUAGE_GERMAN 1
#define OS_LANGUAGE_FRENCH 2
#define OS_LANGUAGE_SPANISH 3
#define OS_LANGUAGE_ITALIAN 4
#define OS_LANGUAGE_DUTCH 5
typedef struct OSSram {
u16 checkSum;
u16 checkSumInv;
+2 -8
View File
@@ -664,8 +664,8 @@ fopAc_ac_c* fopAcM_fastCreateItem(const cXyz* i_pos, int i_itemNo, int i_roomNo,
f32* i_speedY, int i_itemBitNo, int param_9,
createFunc i_createFunc);
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);
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);
fpc_ProcID fopAcM_createWarpHole(const cXyz* i_pos, const csXyz* i_angle, int i_roomNo, u8 param_4,
u8 param_5, u8 param_6);
@@ -708,12 +708,6 @@ inline void make_prm_warp_hole(u32* o_params, u8 prm1, u8 prm2, u8 prm3) {
*o_params = pprm2 | pprm3 | pprm1;
}
inline void make_prm_bokkuri(u32* i_params, csXyz* i_angle, u8 param_2, u8 param_3, u8 param_4,
u8 param_5, u8 param_6) {
i_angle->x = (param_4 << 0x8) | (param_3 & 0xFF);
i_angle->z = (param_6 << 0xD) | (param_2 << 0x1) | param_5;
}
inline fopAc_ac_c* dComIfGp_getPlayer(int);
inline s16 fopAcM_searchPlayerAngleY(const fopAc_ac_c* actor) {
+61 -38
View File
@@ -1,47 +1,70 @@
#ifndef M_DO_M_DO_MEMCARD_H
#define M_DO_M_DO_MEMCARD_H
#include "card.h"
#include <dolphin/card.h>
#include <dolphin/os.h>
#include "global.h"
#define SAVEDATA_SIZE 0xA94
#define SECTOR_SIZE 0x2000
#define SAVEDATA_FILE_SIZE 0x8000
#define SAVEDATA_VERSION 6
class mDoMemCd_Ctrl_c {
public:
enum CardCommand {
CARD_NO_COMMAND,
CARD_RESTORE,
CARD_STORE,
CARD_FORMAT,
CARD_ATTACH,
CARD_DETACH,
enum Command_e {
COMM_NONE_e,
COMM_RESTORE_e,
COMM_STORE_e,
COMM_FORMAT_e,
COMM_ATTACH_e,
COMM_DETACH_e,
};
/* 8001672C */ mDoMemCd_Ctrl_c();
/* 80016730 */ void ThdInit();
/* 800167D0 */ void main();
/* 80016894 */ void update();
/* 800169B4 */ void load();
/* 80016A0C */ void restore();
/* 80016AB0 */ s32 LoadSync(void*, u32, u32);
/* 80016B58 */ void save(void*, u32, u32);
/* 80016BD4 */ void store();
/* 80016CE0 */ s32 SaveSync();
/* 80016D74 */ u32 getStatus(u32);
/* 80016E58 */ void command_format();
/* 80016EA8 */ void format();
/* 80016F2C */ s32 FormatSync();
/* 80016FB8 */ void attach();
/* 800170B8 */ void command_attach();
/* 80017110 */ void detach();
/* 80017148 */ s32 mount();
/* 80017274 */ s32 loadfile();
/* 800172D4 */ s32 checkspace();
/* 80017360 */ void setCardState(s32);
enum CardState_e {
CARD_STATE_NO_CARD_e,
CARD_STATE_READY_e,
CARD_STATE_NO_FILE_e,
CARD_STATE_READ_e,
CARD_STATE_WRITE_e,
CARD_STATE_FORMAT_e,
CARD_STATE_WRONG_ENCODING_e,
CARD_STATE_BROKEN_e,
CARD_STATE_INSSPACE_e,
CARD_STATE_NOENT_e,
CARD_STATE_WRONG_DEVICE_e,
CARD_STATE_WRONG_SECTORSIZE_e,
CARD_STATE_FATAL_ERROR_e,
CARD_STATE_13_e,
};
bool isCardCommNone() { return mCardCommand == CARD_NO_COMMAND; }
mDoMemCd_Ctrl_c();
void ThdInit();
void main();
void update();
void load();
void restore();
s32 LoadSync(void* i_buffer, u32 i_size, u32 i_position);
void save(void* i_buffer, u32 i_size, u32 i_position);
void store();
s32 SaveSync();
u32 getStatus(u32);
void command_format();
void format();
s32 FormatSync();
void attach();
void command_attach();
void detach();
s32 mount();
s32 loadfile();
s32 checkspace();
void setCardState(s32);
bool isCardCommNone() { return mCardCommand == COMM_NONE_e; }
u8 getProbeStat() { return mProbeStat; }
void clearProbeStat() { mProbeStat = 2; }
void setCopyToPos(u8 param_0) { mCopyToPos = param_0; }
void setCopyToPos(u8 i_pos) { mCopyToPos = i_pos; }
u32 getDataVersion() { return mDataVersion; }
void setDataVersion(u32 version) { mDataVersion = version; }
void getCardStatus(s32 fileNo, CARDStat* stat) { CARDGetStatus(mChannel, fileNo, stat); }
@@ -52,7 +75,7 @@ public:
mSerialNo = serial_no;
}
/* 0x0000 */ u8 mData[0x1FBC];
/* 0x0000 */ u8 mData[SAVEDATA_SIZE * 3];
/* 0x1FBC */ u8 mChannel;
/* 0x1FBD */ u8 mCopyToPos;
/* 0x1FBE */ u8 mProbeStat;
@@ -108,24 +131,24 @@ inline void mDoMemCd_Load() {
g_mDoMemCd_control.load();
}
inline void mDoMemCd_setCopyToPos(u8 param_0) {
g_mDoMemCd_control.setCopyToPos(param_0);
inline void mDoMemCd_setCopyToPos(u8 i_pos) {
g_mDoMemCd_control.setCopyToPos(i_pos);
}
inline u32 mDoMemCd_getStatus(u8 param_0) {
return g_mDoMemCd_control.getStatus(param_0);
}
inline u32 mDoMemCd_LoadSync(void* buffer, u32 size, u32 index) {
return g_mDoMemCd_control.LoadSync(buffer, size, index);
inline u32 mDoMemCd_LoadSync(void* i_buffer, u32 i_size, u32 i_position) {
return g_mDoMemCd_control.LoadSync(i_buffer, i_size, i_position);
}
inline u32 mDoMemCd_getDataVersion() {
return g_mDoMemCd_control.getDataVersion();
}
inline void mDoMemCd_setDataVersion(u32 version) {
g_mDoMemCd_control.setDataVersion(version);
inline void mDoMemCd_setDataVersion(u32 i_version) {
g_mDoMemCd_control.setDataVersion(i_version);
}
inline void mDoMemCd_setSerialNo() {
+1 -3
View File
@@ -1,9 +1,7 @@
#ifndef M_DO_M_DO_MEMCARDRWMNG_H
#define M_DO_M_DO_MEMCARDRWMNG_H
#include "dolphin/types.h"
typedef struct CARDFileInfo CARDFileInfo;
#include <dolphin/card.h>
struct mDoMemCdRWm_HeaderData {
/* 0x0000 */ u8 mBannerTexData[0xC00];
+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();