mirror of
https://github.com/zeldaret/tp
synced 2026-07-07 06:04:58 -04:00
e_hb equivalent / some pal work (#2577)
* some pal work * e_hb equivalent * update config
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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"),
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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,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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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,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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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(¤tAngle, 6, getItem(), getItemBit(), 1, 2);
|
||||
u32 sp10 = 0;
|
||||
csXyz currentAngle(current.angle);
|
||||
daObjCarry_c::make_prm(&sp10, ¤tAngle, 6, getItem(), getItemBit(), 1, 2);
|
||||
field_0x578 = fopAcM_createChild(PROC_Obj_Carry, fopAcM_GetID(this), 0, ¤t.pos,
|
||||
fopAcM_GetRoomNo(this), ¤tAngle, &scale, -1, 0);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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(¶ms, ¶ms_ex, i_itemNo, i_itemBit, i_itemType, param_8);
|
||||
return fopAcM_create(PROC_Obj_Carry, i_setId, params, i_pos, i_roomNo, ¶ms_ex, NULL, -1, NULL);
|
||||
}
|
||||
|
||||
/* 8001C95C-8001C9CC 01729C 0070+00 0/0 0/0 12/12 .text
|
||||
|
||||
+150
-137
@@ -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, §_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, §or_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;
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user