GCN pal / jpn support, some debug work (#2375)

* d_save debug cleanup / d_s_menu debug

* gameinfo / kankyo struct debug fixes

* pal building ok

* jp building ok

* some tests with jp

* some more pal/jp tests
This commit is contained in:
TakaRikka
2025-04-06 11:08:25 -07:00
committed by GitHub
parent 4361019959
commit 54dd764096
3082 changed files with 262786 additions and 1577 deletions
-2
View File
@@ -16,8 +16,6 @@
#include "JSystem/JUtility/JUTResFont.h"
#include "JSystem/JUtility/JUTDbPrint.h"
extern u8 const JUTResFONT_Ascfont_fix12[16736];
/* 80450770-80450774 0001F0 0004+00 1/1 1/1 0/0 .sdata maxStdHeaps__Q29JFWSystem11CSetUpParam */
s32 JFWSystem::CSetUpParam::maxStdHeaps = 2;
+13
View File
@@ -4218,7 +4218,10 @@ void daAlink_c::checkWarpStart() {
if (dMeter2Info_getWarpStatus() == WARP_STATUS_DECIDED_e ||
dComIfGp_event_compulsory(this, 0, 0xFFFF))
{
#if VERSION != VERSION_GCN_JPN
onNoResetFlg0(FLG0_UNK_4000);
#endif
if (dMeter2Info_getWarpStatus() == WARP_STATUS_DECIDED_e) {
const char* portal;
if (!checkMidnaRide()) {
@@ -4244,6 +4247,10 @@ void daAlink_c::checkWarpStart() {
fopAcM_orderOtherEvent(this, portal, 0xFFFF, 1, 1);
} else {
mDemo.setSpecialDemoType();
#if VERSION == VERSION_GCN_JPN
onNoResetFlg0(FLG0_UNK_4000);
#endif
if (dMeter2Info_getWarpStatus() == 1) {
stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo();
u32 exitID = dStage_stagInfo_GetEscapeWarp(stag_info);
@@ -4327,6 +4334,12 @@ int daAlink_c::procCoWarpInit(int param_0, int param_1) {
var_r29 = Z2SE_WOLF_WARP_IN_TATE;
}
#if VERSION == VERSION_GCN_JPN
if (param_1) {
onNoResetFlg0(FLG0_UNK_4000);
}
#endif
if (param_1) {
if (!checkMidnaRide()) {
onPlayerNoDraw();
+2 -2
View File
@@ -730,7 +730,7 @@ SECTION_DATA u8 daNpc_Hanjo_c::mStoneCcDSph[64] = {
/* 809F908C-809F9278 0000EC 01EC+00 1/0 0/0 0/0 .text __dt__13daNpc_Hanjo_cFv */
daNpc_Hanjo_c::~daNpc_Hanjo_c() {
OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> デストラクト\n", g_Counter, this);
OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> デストラクト\n", g_Counter.mCounter0, this);
if (mpMorf[0] != 0) {
mpMorf[0]->stopZelAnime();
}
@@ -902,7 +902,7 @@ int daNpc_Hanjo_c::CreateHeap() {
/* 809F9B38-809F9B6C 000B98 0034+00 1/1 0/0 0/0 .text Delete__13daNpc_Hanjo_cFv */
int daNpc_Hanjo_c::Delete() {
OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daNpc_Hanjo_c -> Delete\n", g_Counter.mCounter0, this);
fopAcM_GetID(this);
this->~daNpc_Hanjo_c();
return 1;
+3 -2
View File
@@ -4,6 +4,7 @@
*/
#include "d/actor/d_a_npc_midp.h"
#include "SSystem/SComponent/c_counter.h"
UNK_REL_DATA
@@ -64,7 +65,7 @@ daNpc_midP_c::cutFunc daNpc_midP_c::mCutList[1] = { 0 };
/* 80A70C6C-80A70D90 0000EC 0124+00 1/0 0/0 0/0 .text __dt__12daNpc_midP_cFv */
daNpc_midP_c::~daNpc_midP_c() {
OS_REPORT("|%06d:%x|daNpc_midP_c -> デストラクト\n", g_Counter, this);
OS_REPORT("|%06d:%x|daNpc_midP_c -> デストラクト\n", g_Counter.mCounter0, this);
if (heap != 0) {
mpMorf[0]->stopZelAnime();
}
@@ -131,7 +132,7 @@ int daNpc_midP_c::create() {
OS_REPORT("\n");
OS_REPORT("\t(%s:%d) flowNo:%d, PathID:%02x<%08x> ", fopAcM_getProcNameString(this), mType,
mFlowNodeNo, getPathID(), fopAcM_GetParam(this));
mFlowNodeNo, fopAcM_GetParam(this));
if (isDelete()) {
OS_REPORT("===>isDelete:TRUE\n");
return cPhs_ERROR_e;
+3 -2
View File
@@ -5,6 +5,7 @@
#include "d/actor/d_a_npc_zant.h"
#include "f_op/f_op_actor_mng.h"
#include "SSystem/SComponent/c_counter.h"
/* 80B6ED28-80B6ED34 000008 000C+00 1/1 0/0 0/0 .bss @3811 */
static u8 lit_3811[12];
@@ -73,7 +74,7 @@ daNpc_Zant_c::cutFunc daNpc_Zant_c::mCutList[1] = {
/* 80B6C1AC-80B6C2D0 0000EC 0124+00 1/0 0/0 0/0 .text __dt__12daNpc_Zant_cFv */
daNpc_Zant_c::~daNpc_Zant_c() {
OS_REPORT("|%06d:%x|daNpc_Zant_c -> デストラクト\n", g_counter, this);
OS_REPORT("|%06d:%x|daNpc_Zant_c -> デストラクト\n", g_Counter.mCounter0, this);
if (heap != NULL) {
mpMorf[0]->stopZelAnime();
}
@@ -168,7 +169,7 @@ int daNpc_Zant_c::CreateHeap() {
/* 80B6C700-80B6C734 000640 0034+00 1/1 0/0 0/0 .text Delete__12daNpc_Zant_cFv */
int daNpc_Zant_c::Delete() {
OS_REPORT("|%06d:%x|daNpc_Zant_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daNpc_Zant_c -> Delete\n", g_Counter.mCounter0, this);
fopAcM_GetID(this);
this->~daNpc_Zant_c();
return 1;
+2 -2
View File
@@ -72,7 +72,7 @@ static dCcD_SrcSph l_ccDSph = {
/* 80BA56EC-80BA5990 0000EC 02A4+00 1/0 0/0 0/0 .text __dt__16daObj_AutoMata_cFv */
daObj_AutoMata_c::~daObj_AutoMata_c() {
OS_REPORT("|%06d:%x|daObj_AutoMata_c -> デストラクト\n", g_Counter, this);
OS_REPORT("|%06d:%x|daObj_AutoMata_c -> デストラクト\n", g_Counter.mCounter0, this);
if (mpMorf != NULL) {
mpMorf->stopZelAnime();
}
@@ -131,7 +131,7 @@ int daObj_AutoMata_c::CreateHeap() {
/* 80BA60A0-80BA60D4 000AA0 0034+00 1/1 0/0 0/0 .text Delete__16daObj_AutoMata_cFv */
int daObj_AutoMata_c::Delete() {
OS_REPORT("|%06d:%x|daObj_AutoMata_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daObj_AutoMata_c -> Delete\n", g_Counter.mCounter0, this);
this->~daObj_AutoMata_c();
return 1;
}
+2 -2
View File
@@ -52,7 +52,7 @@ static dJntColData_c jntCoData = {
/* 80BBAFEC-80BBB1F4 0000EC 0208+00 1/0 0/0 0/0 .text __dt__15daObj_BouMato_cFv */
daObj_BouMato_c::~daObj_BouMato_c() {
OS_REPORT("|%06d:%x|daObj_BouMato_c -> デストラクト\n", g_Counter, this);
OS_REPORT("|%06d:%x|daObj_BouMato_c -> デストラクト\n", g_Counter.mCounter0, this);
dComIfG_resDelete(&mPhase, getResName());
}
@@ -106,7 +106,7 @@ int daObj_BouMato_c::CreateHeap() {
/* 80BBB800-80BBB834 000900 0034+00 1/1 0/0 0/0 .text Delete__15daObj_BouMato_cFv */
int daObj_BouMato_c::Delete() {
OS_REPORT("|%06d:%x|daObj_BouMato_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daObj_BouMato_c -> Delete\n", g_Counter.mCounter0, this);
this->~daObj_BouMato_c();
return 1;
}
+2 -2
View File
@@ -31,7 +31,7 @@ SECTION_DATA static s8 l_tileMoveData[21][4] = {
/* 80CDD2AC-80CDD3AC 0000EC 0100+00 1/0 0/0 0/0 .text __dt__14daObj_SMTile_cFv */
daObj_SMTile_c::~daObj_SMTile_c() {
OS_REPORT("|%06d:%x|daObj_SMTile_c -> デストラクト\n", g_Counter, this);
OS_REPORT("|%06d:%x|daObj_SMTile_c -> デストラクト\n", g_Counter.mCounter0, this);
dComIfG_resDelete(
&mPhase,
l_resNameList[l_bmdData[mType][1]]);
@@ -93,7 +93,7 @@ int daObj_SMTile_c::CreateHeap() {
/* 80CDD6E8-80CDD71C 000528 0034+00 1/1 0/0 0/0 .text Delete__14daObj_SMTile_cFv */
int daObj_SMTile_c::Delete() {
OS_REPORT("|%06d:%x|daObj_SMTile_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daObj_SMTile_c -> Delete\n", g_Counter.mCounter0, this);
this->~daObj_SMTile_c();
return 1;
}
+2 -2
View File
@@ -115,7 +115,7 @@ daPeru_c::cutAppearFunc daPeru_c::mCutList[3] = {
/* 80D46EEC-80D46FCC 0000EC 00E0+00 1/0 0/0 0/0 .text __dt__8daPeru_cFv */
daPeru_c::~daPeru_c() {
OS_REPORT("|%06d:%x|daPeru_c -> デストラクト\n", g_Counter, this);
OS_REPORT("|%06d:%x|daPeru_c -> デストラクト\n", g_Counter.mCounter0, this);
if (heap != NULL) {
mpMorf[0]->stopZelAnime();
}
@@ -280,7 +280,7 @@ int daPeru_c::typeInitialize() {
/* 80D47750-80D47784 000950 0034+00 1/1 0/0 0/0 .text Delete__8daPeru_cFv */
int daPeru_c::Delete() {
OS_REPORT("|%06d:%x|daPeru_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daPeru_c -> Delete\n", g_Counter.mCounter0, this);
fopAcM_GetID(this);
this->~daPeru_c();
return 1;
+1 -1
View File
@@ -55,7 +55,7 @@ int daTag_KMsg_c::create() {
/* 8048DFDC-8048E010 0001DC 0034+00 1/1 0/0 0/0 .text Delete__12daTag_KMsg_cFv */
int daTag_KMsg_c::Delete() {
OS_REPORT("|%06d:%x|daTag_KMsg_c -> Delete\n", g_Counter, this);
OS_REPORT("|%06d:%x|daTag_KMsg_c -> Delete\n", g_Counter.mCounter0, this);
fopAcM_GetID(this);
this->~daTag_KMsg_c();
return 1;
+184 -23
View File
@@ -13,7 +13,10 @@
#include "d/d_map_path_dmap.h"
#include "d/d_menu_fmap.h"
#include "d/d_meter2_info.h"
#include "d/d_meter_HIO.h"
#include "d/d_menu_window_HIO.h"
#include "f_op/f_op_scene_mng.h"
#include "f_op/f_op_msg_mng.h"
#include "m_Do/m_Do_Reset.h"
#include "m_Do/m_Do_controller_pad.h"
#include "m_Do/m_Do_graphic.h"
@@ -43,10 +46,10 @@ void dComIfG_play_c::init() {
mPlayerPtr[i] = NULL;
}
if (mGameoverStatus == 2) {
if (mItemInfo.mGameoverStatus == 2) {
dComIfGp_roomControl_initZone();
}
mGameoverStatus = 0;
mItemInfo.mGameoverStatus = 0;
}
BOOL dComIfGp_checkItemGet(u8 i_itemNo, int param_1) {
@@ -56,41 +59,41 @@ BOOL dComIfGp_checkItemGet(u8 i_itemNo, int param_1) {
void dComIfG_play_c::itemInit() {
dMeter2Info_Initialize();
JKRExpHeap* heap = mExpHeap2D;
memset(&mMsgObjectClass, 0, 300);
mExpHeap2D = heap;
mOxygen = 600;
mNowOxygen = 600;
mMaxOxygen = 600;
JKRExpHeap* heap = mItemInfo.mExpHeap2D;
memset(&mItemInfo.mMsgObjectClass, 0, 300);
mItemInfo.mExpHeap2D = heap;
mItemInfo.mOxygen = 600;
mItemInfo.mNowOxygen = 600;
mItemInfo.mMaxOxygen = 600;
if (dComIfGs_checkGetItem(fpcNm_ITEM_HAWK_EYE)) {
field_0x4f4b = 0;
mItemInfo.field_0x4f4b = 0;
} else {
field_0x4f4b = 21;
mItemInfo.field_0x4f4b = 21;
}
field_0x4f4c = 7;
mItemInfo.field_0x4f4c = 7;
mNowVibration = dComIfGs_getOptVibration();
mItemInfo.mNowVibration = dComIfGs_getOptVibration();
}
void dComIfG_play_c::setItemBombNumCount(u8 i_item, s16 count) {
mItemBombNumCount[i_item] += count;
mItemInfo.mItemBombNumCount[i_item] += count;
}
s16 dComIfG_play_c::getItemBombNumCount(u8 i_item) {
return mItemBombNumCount[i_item];
return mItemInfo.mItemBombNumCount[i_item];
}
void dComIfG_play_c::clearItemBombNumCount(u8 i_item) {
mItemBombNumCount[i_item] = 0;
mItemInfo.mItemBombNumCount[i_item] = 0;
}
void dComIfG_play_c::setNowVibration(u8 i_vibration) {
mNowVibration = i_vibration;
mItemInfo.mNowVibration = i_vibration;
}
u32 dComIfG_play_c::getNowVibration() {
return mNowVibration;
return mItemInfo.mNowVibration;
}
void dComIfG_play_c::setStartStage(dStage_startStage_c* i_startStage) {
@@ -1467,6 +1470,14 @@ u16 dComIfGs_getMaxLifeGauge() {
return (dComIfGs_getMaxLife() / 5) * 4;
}
void dComIfGs_onGetMagicUseFlag() {
g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().onMagicFlag(0);
if (dComIfGs_getMaxMagic() == 0) {
dComIfGp_setItemMaxMagicCount(16);
dComIfGp_setItemMagicCount(16);
}
}
void dComIfGs_setSelectItemIndex(int i_no, u8 i_slotNo) {
g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().setSelectItemIndex(i_no, i_slotNo);
dComIfGp_setSelectItem(i_no);
@@ -1828,6 +1839,156 @@ void dComIfGs_gameStart() {
dComIfGp_setNextStage(name, point, roomNo, -1, 0.0f, 0, 1, 0, 0, 0, 0);
}
#ifdef DEBUG
void dComIfG_playerStatusD() {
dComIfGs_setDataNum(0);
dComIfGs_setMaxLife(50);
dComIfGs_setLife(20);
dComIfGs_setRupee(64);
dComIfGs_setMaxMagic(32);
dComIfGs_setMagic(16);
dComIfGs_setWalletSize(1);
dComIfGs_setMaxOil(21600);
dComIfGs_setOil(21600);
dComIfGp_setMaxOxygen(600);
dComIfGp_setOxygen(600);
for (int i = 0; i < 4; i++) {
dComIfGs_setMixItemIndex(i, 0xFF);
}
dComIfGs_setSelectItemIndex(0, SLOT_0);
dComIfGs_setSelectItemIndex(1, SLOT_4);
dComIfGs_setSelectItemIndex(2, 0xFF);
dComIfGs_setSelectItemIndex(3, 0xFF);
for (int i = 23; i >= 0; i--) {
dComIfGs_setItem(i, fopMsgM_itemNumIdx(i));
}
for (int i = 0; i < 0x100; i++) {
dComIfGs_onItemFirstBit(i);
}
dComIfGs_offItemFirstBit(fpcNm_ITEM_L2_KEY_PIECES1);
dComIfGs_offItemFirstBit(fpcNm_ITEM_L2_KEY_PIECES2);
dComIfGs_offItemFirstBit(fpcNm_ITEM_L2_KEY_PIECES3);
dComIfGs_offItemFirstBit(fpcNm_ITEM_LV2_BOSS_KEY);
dComIfGs_offItemFirstBit(fpcNm_ITEM_BOMB_BAG_LV2);
dComIfGs_offItemFirstBit(fpcNm_ITEM_TOMATO_PUREE);
dComIfGs_offItemFirstBit(fpcNm_ITEM_TASTE);
dComIfGs_offItemFirstBit(fpcNm_ITEM_POU_FIRE1);
dComIfGs_offItemFirstBit(fpcNm_ITEM_POU_FIRE2);
dComIfGs_offItemFirstBit(fpcNm_ITEM_POU_FIRE3);
dComIfGs_offItemFirstBit(fpcNm_ITEM_POU_FIRE4);
for (int i = 0; i < 24; i++) {
dComIfGs_offItemFirstBit(i + fpcNm_ITEM_M_BEETLE);
}
dComIfGs_offItemFirstBit(fpcNm_ITEM_LIGHT_SWORD);
dComIfGs_offItemFirstBit(fpcNm_ITEM_SHIELD);
dComIfGs_offItemFirstBit(fpcNm_ITEM_ZORAS_JEWEL);
for (int i = 0; i < 19; i++) {
dComIfGs_offItemFirstBit(i);
}
dComIfGs_setCollectSmell(fpcNm_ITEM_SMELL_PUMPKIN);
if (!mDoCPd_c::isConnect(PAD_3)) {
dComIfGs_offItemFirstBit(fpcNm_ITEM_SMELL_POH);
}
dComIfGs_setArrowNum(30);
dComIfGs_setArrowMax(30);
dComIfGs_setPachinkoNum(dComIfGs_getPachinkoMax());
dComIfGs_setBombNum(0, 30);
dComIfGs_setBombNum(1, 15);
dComIfGs_setBombNum(2, 10);
for (int i = 0; i < 4; i++) {
dComIfGs_setBottleNum(i, dComIfGs_getBottleMax());
}
dComIfGs_setSaveTotalTime(dComIfGs_getTotalTime());
dComIfGs_setSaveStartTime(OSGetTime());
dComIfGs_setBombNum(8, 30);
dComIfGs_setBombMax(fpcNm_ITEM_NORMAL_BOMB, 30);
dComIfGs_setBombMax(fpcNm_ITEM_WATER_BOMB, 15);
dComIfGs_setBombMax(fpcNm_ITEM_POKE_BOMB, 10);
dMeter2Info_setCloth(fpcNm_ITEM_WEAR_KOKIRI, false);
dMeter2Info_setSword(fpcNm_ITEM_SWORD, false);
dMeter2Info_setShield(fpcNm_ITEM_HYLIA_SHIELD, false);
dComIfGs_onGetMagicUseFlag();
dComIfGs_onEventBit(0x540);
dComIfGs_onEventBit(0xc10);
dComIfGs_onEventBit(0x510);
dMeter2Info_offTempBit(0);
dComIfGs_onEventBit(0x5c01);
dComIfGs_onEventBit(0x5d80);
if (!mDoCPd_c::isConnect(PAD_3)) {
g_fmapHIO.mRangeCheckInterval = 0;
} else {
g_fmapHIO.mRangeCheckInterval = 1;
}
g_fmapHIO.mRegionImageDebug = 1;
g_fmapHIO.update();
g_mwHIO.setArrowFlag(1);
g_mwHIO.setPachinkoFlag(1);
g_mwHIO.setBombFlag(1);
g_mwHIO.update();
g_mwHIO.setBombFlag(1);
}
void dComIfG_playerStatusD_pre_clear() {
dComIfGs_setDataNum(0);
dComIfGs_setMaxLife(15);
dComIfGs_setLife(12);
dComIfGs_setRupee(0);
dComIfGs_setMaxMagic(0);
dComIfGs_setMagic(0);
dComIfGs_setWalletSize(0);
dComIfGs_setMaxOil(21600);
dComIfGs_setOil(21600);
dComIfGp_setMaxOxygen(600);
dComIfGp_setOxygen(600);
for (int i = 0; i < 4; i++) {
dComIfGs_setMixItemIndex(i, 0xFF);
dComIfGs_setSelectItemIndex(i, 0xFF);
}
dComIfGs_setSelectEquipClothes(fpcNm_ITEM_WEAR_CASUAL);
dComIfGp_setSelectEquipClothes(fpcNm_ITEM_WEAR_CASUAL);
dComIfGs_setSelectEquipSword(fpcNm_ITEM_NONE);
dComIfGp_setSelectEquipSword(fpcNm_ITEM_NONE);
dComIfGs_setSelectEquipShield(fpcNm_ITEM_NONE);
dComIfGp_setSelectEquipShield(fpcNm_ITEM_NONE);
for (int i = 0; i < 24; i++) {
dComIfGs_setItem(i, fpcNm_ITEM_NONE);
}
for (int i = 0; i < 0x100; i++) {
dComIfGs_offItemFirstBit(i);
}
dComIfGs_setArrowNum(0);
dComIfGs_setBombNum(0);
dComIfGs_setArrowMax(0);
dComIfGs_setBombMax(0);
dComIfGs_setSelectEquipShield(fpcNm_ITEM_SHIELD);
dComIfGp_setSelectEquipShield(fpcNm_ITEM_SHIELD);
}
#endif
u32 dComIfG_getTrigA(u32 i_padNo) {
return mDoCPd_c::getTrigA(i_padNo);
}
@@ -2045,12 +2206,12 @@ static void dComIfGs_setWarpItemData(int, char const* i_stage, cXyz i_pos, s16 i
void dComIfG_play_c::setWarpItemData(char const* i_stage, cXyz i_pos, s16 i_angle, s8 i_roomNo,
u8 param_4, u8 param_5) {
strcpy(mWarpItemStage, i_stage);
mWarpItemPos.set(i_pos);
mWarpItemAngle = i_angle;
mWarpItemRoom = i_roomNo;
field_0x4fac = param_5;
field_0x4fab = param_4;
strcpy(mItemInfo.mWarpItemData.mWarpItemStage, i_stage);
mItemInfo.mWarpItemData.mWarpItemPos.set(i_pos);
mItemInfo.mWarpItemData.mWarpItemAngle = i_angle;
mItemInfo.mWarpItemData.mWarpItemRoom = i_roomNo;
mItemInfo.mWarpItemData.field_0x4fac = param_5;
mItemInfo.mWarpItemData.field_0x4fab = param_4;
}
void dComIfGs_setWarpItemData(char const* i_stage, cXyz i_pos, s16 i_angle, s8 i_roomNo, u8 param_4,
+5 -17
View File
@@ -83,18 +83,6 @@ public:
/* 0x28 */ f32 field_0x28;
};
class dDlst_2DQuad_c {
public:
dDlst_2DQuad_c() {}
/* 80051CF0 */ virtual void draw();
/* 0x04 */ s16 field_0x4;
/* 0x06 */ s16 field_0x6;
/* 0x08 */ s16 field_0x8;
/* 0x0A */ s16 field_0xa;
/* 0x0C */ GXColor field_0xc;
};
class dDlst_2DPoint_c {
public:
/* 80051E5C */ virtual void draw();
@@ -242,7 +230,7 @@ void dDlst_2DQuad_c::draw() {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
GXSetChanMatColor(GX_COLOR0A0, field_0xc);
GXSetChanMatColor(GX_COLOR0A0, mColor);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
@@ -251,10 +239,10 @@ void dDlst_2DQuad_c::draw() {
GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3s16((s32)field_0x4, (s32)field_0x6, 0);
GXPosition3s16((s32)field_0x8, (s32)field_0x6, 0);
GXPosition3s16((s32)field_0x8, (s32)field_0xa, 0);
GXPosition3s16((s32)field_0x4, (s32)field_0xa, 0);
GXPosition3s16((s32)mPosX, (s32)mPosY, 0);
GXPosition3s16((s32)mSizeX, (s32)mPosY, 0);
GXPosition3s16((s32)mSizeX, (s32)mSizeY, 0);
GXPosition3s16((s32)mPosX, (s32)mSizeY, 0);
GXEnd();
dComIfGp_getCurrentGrafPort()->setup2D();
}
+12
View File
@@ -1209,6 +1209,18 @@ void dMenu_Fmap_c::spot_map_proc() {
{
mpDraw2DBack->stageMapMove(mpStick, 1, true);
} else if (dMw_Z_TRIGGER() && mpDraw2DTop->isWarpAccept()) {
#if VERSION >= VERSION_GCN_JPN
//! JPN version added a check to make sure if Arbiter's Grounds is cleared that
//! the Mirror Chamber Statue has been spun before allowing portal warping from the map screen.
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[265]) && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361])) {
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x8B4, 0, 0, 0xff, true);
mPrevProcessAlt = mProcess;
setProcess(PROC_PORTAL_WARP_FORBID);
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
} else
#endif
if (mpDraw2DTop->checkPlayerWarpAccept()) {
mIsWarpMap = true;
setProcess(PROC_ZOOM_SPOT_TO_REGION);
+1 -1
View File
@@ -1023,7 +1023,7 @@ void dMeter2_c::moveRupee() {
draw_rupee = false;
// using dComIfGp_getItemRupeeCount() here swaps r3/r4 reg alloc?
if (g_dComIfG_gameInfo.play.mItemRupeeCount != 0) {
if (g_dComIfG_gameInfo.play.mItemInfo.mItemRupeeCount != 0) {
var_r6 = dComIfGs_getRupee() + dComIfGp_getItemRupeeCount();
if (var_r6 > temp_r5) {
var_r6 = temp_r5;
+43 -12
View File
@@ -15,6 +15,14 @@
#include "m_Do/m_Do_graphic.h"
#include "m_Do/m_Do_machine.h"
#if VERSION == VERSION_GCN_JPN
#define LOGO_ARC "Logo"
#define MSG_PATH "/res/Msgjp/bmgres.arc"
#else
#define LOGO_ARC "LogoUs"
#define MSG_PATH "/res/Msgus/bmgres.arc"
#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,
@@ -420,7 +428,7 @@ dScnLogo_c::~dScnLogo_c() {
delete mProgressiveSel;
preLoad_dyl_remove();
dComIfG_deleteObjectResMain("LogoUs");
dComIfG_deleteObjectResMain(LOGO_ARC);
field_0x1d4->destroy();
field_0x1d0->destroy();
@@ -477,6 +485,13 @@ dScnLogo_c::~dScnLogo_c() {
mDoExt_getRubyFont();
mDoExt_setAraCacheSize(free_size - aram_heap->getTotalFreeSize());
#if VERSION == VERSION_GCN_JPN
if (dComIfGp_getFontArchive() != NULL) {
dComIfGp_getFontArchive()->unmount();
dComIfGp_setFontArchive(NULL);
}
#endif
dComIfGp_setItemTable(mItemTableCommand->getMemAddress());
mItemTableCommand->destroy();
@@ -510,7 +525,7 @@ static int phase_1(dScnLogo_c* i_this) {
return cPhs_INIT_e;
}
dComIfG_setObjectRes("LogoUs", (u8)0, i_this->field_0x1d0);
dComIfG_setObjectRes(LOGO_ARC, (u8)0, i_this->field_0x1d0);
mDoRst::setLogoScnFlag(1);
archiveHeap->dump_sort();
return cPhs_NEXT_e;
@@ -578,32 +593,36 @@ int dScnLogo_c::create() {
/* 80257C64-80257FEC 2525A4 0388+00 1/1 0/0 0/0 .text logoInitGC__10dScnLogo_cFv */
void dScnLogo_c::logoInitGC() {
ResTIMG* nintendoImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 4);
ResTIMG* nintendoImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 4);
mNintendoLogo = new dDlst_2D_c(nintendoImg, 117, 154, 376, 104, 255);
#if VERSION == VERSION_GCN_JPN
mNintendoLogo->getPicture()->setWhite(JUtility::TColor(0, 70, 255, 255));
#else
mNintendoLogo->getPicture()->setWhite(JUtility::TColor(220, 0, 0, 255));
#endif
ResTIMG* dolbyImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 3);
ResTIMG* dolbyImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 3);
mDolbyLogo = new dDlst_2D_c(dolbyImg, 189, 150, 232, 112, 255);
ResTIMG* warningImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 10);
ResTIMG* warningImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 10);
mWarning = new dDlst_2D_c(warningImg, 0, 0, 608, 448, 255);
ResTIMG* warnStartImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 11);
ResTIMG* warnStartImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 11);
mWarningStart = new dDlst_2D_c(warnStartImg, 0, 359, 608, 48, 255);
ResTIMG* progChoiceImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 5);
ResTIMG* progChoiceImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 5);
mProgressiveChoice = new dDlst_2D_c(progChoiceImg, 113, 281, 416, 72, 255);
ResTIMG* progYesImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 9);
ResTIMG* progYesImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 9);
mProgressiveYes = new dDlst_2D_c(progYesImg, 211, 372, 80, 32, 255);
mProgressiveYes->getPicture()->setWhite(JUtility::TColor(160, 160, 160, 255));
ResTIMG* progNoImg = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 7);
ResTIMG* progNoImg = (ResTIMG*)dComIfG_getObjectRes(LOGO_ARC, 7);
mProgressiveNo = new dDlst_2D_c(progNoImg, 350, 372, 80, 32, 255);
mProgressiveNo->getPicture()->setWhite(JUtility::TColor(160, 160, 160, 255));
mProgressivePro = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 8);
mProgressiveInter = (ResTIMG*)dComIfG_getObjectRes("LogoUs", 6);
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);
}
@@ -637,7 +656,7 @@ void dScnLogo_c::dvdDataLoad() {
mpCardIconCommand = mDoDvdThd_mountXArchive_c::create(
"/res/CardIcon/cardicon.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpBmgResCommand =
mDoDvdThd_mountXArchive_c::create("/res/Msgus/bmgres.arc", 0, JKRArchive::MOUNT_MEM, NULL);
mDoDvdThd_mountXArchive_c::create(MSG_PATH, 0, JKRArchive::MOUNT_MEM, NULL);
mpMsgComCommand = mDoDvdThd_mountXArchive_c::create(
"/res/Layout/msgcom.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpMsgResCommand[0] = mDoDvdThd_mountXArchive_c::create(
@@ -648,18 +667,30 @@ void dScnLogo_c::dvdDataLoad() {
"/res/Layout/msgres02.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpMsgResCommand[3] = mDoDvdThd_mountXArchive_c::create(
"/res/Layout/msgres03.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
#if VERSION == VERSION_GCN_JPN
mpMsgResCommand[4] = mDoDvdThd_mountXArchive_c::create(
"/res/Layout/msgres04.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
#else
mpMsgResCommand[4] = mDoDvdThd_mountXArchive_c::create(
"/res/Layout/msgres04F.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
#endif
mpMsgResCommand[5] = mDoDvdThd_mountXArchive_c::create(
"/res/Layout/msgres05.arc", 0, JKRArchive::MOUNT_ARAM, mDoExt_getJ2dHeap());
mpMsgResCommand[6] = mDoDvdThd_mountXArchive_c::create(
"/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);
#else
mpFontResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/fontres.arc", 0,
JKRArchive::MOUNT_MEM, NULL);
mpRubyResCommand = mDoDvdThd_mountXArchive_c::create("/res/Fontus/rubyres.arc", 0,
JKRArchive::MOUNT_MEM, NULL);
#endif
mParticleCommand = mDoDvdThd_toMainRam_c::create("/res/Particle/common.jpc", 0,
dComIfGp_particle_getResHeap());
mItemTableCommand = mDoDvdThd_toMainRam_c::create("/res/ItemTable/item_table.bin", 0, NULL);
+1970 -2
View File
File diff suppressed because it is too large Load Diff
+4
View File
@@ -574,6 +574,10 @@ dScnPly_reg_HIO_c g_regHIO;
/* 8043079C-804307E0 05D4BC 0044+00 1/2 3/3 0/0 .bss g_envHIO */
dScnPly_env_HIO_c g_envHIO;
#ifdef DEBUG
dScnPly_preset_HIO_c g_presetHIO;
#endif
/* 8025A654-8025A9F4 254F94 03A0+00 1/0 0/0 0/0 .text phase_4__FP9dScnPly_c */
static int phase_4(dScnPly_c* i_this) {
if (i_this->sceneCommand) {
+639 -147
View File
File diff suppressed because it is too large Load Diff
+9
View File
@@ -251,6 +251,15 @@ fpc_ProcID fopMsgM_Create(s16 i_procName, FastCreateReqFunc i_createFunc, void*
return fpcM_Create(i_procName, i_createFunc, i_append);
}
u8 fopMsgM_itemNumIdx(u8 i_no) {
static const u8 itemicon[] = {
0x40, 0x48, 0x41, 0x45, 0x43, 0x3e, 0x42, 0xff, 0x46, 0x44, 0x47, 0x60,
0x61, 0x62, 0x6a, 0x70, 0x71, 0x72, 0x25, 0x90, 0x4a, 0xff, 0xff, 0x4b,
};
return itemicon[i_no] & 0xFF;
}
/* 80020158-80020160 -00001 0008+00 0/0 0/0 0/0 .text setAlpha__7J2DPaneFUc */
void J2DPane::setAlpha(u8 alpha) {
mAlpha = alpha;
+31 -3
View File
@@ -11,6 +11,14 @@
#include "dolphin/card.h"
#include "m_Do/m_Do_MemCard.h"
#if VERSION == VERSION_GCN_JPN
#define HEADER_TITLE "ゼルダの伝説 トワイライトプリンセス"
#define HEADER_COMMENT "%d月%d日のセーブデータです"
#else
#define HEADER_TITLE "Zelda: Twilight Princess"
#define HEADER_COMMENT "%d/%d Save Data"
#endif
/* 803ECF40-803F0F40 019C60 4000+00 2/2 0/0 0/0 .bss sTmpBuf */
static u8 sTmpBuf[0x4000];
@@ -157,12 +165,32 @@ s32 mDoMemCdRWm_Restore(CARDFileInfo* file, void* data, u32 length) {
/* 8001787C-800179E4 0121BC 0168+00 1/1 0/0 0/0 .text
* mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData */
static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header) {
snprintf(header->mTitle, sizeof(header->mTitle), "Zelda: Twilight Princess");
snprintf(header->mTitle, sizeof(header->mTitle), HEADER_TITLE);
OSCalendarTime time;
OSTicksToCalendarTime(OSGetTime(), &time);
snprintf(header->mComment, sizeof(header->mComment), "%d/%d Save Data", time.mon + 1,
time.mday);
#if VERSION == VERSION_GCN_PAL
switch (dComIfGs_getPalLanguage()) {
case dSv_player_config_c::LANGAUGE_ENGLISH:
snprintf(header->mComment, sizeof(header->mComment), "%d/%d Save Data", time.mon + 1, time.mday);
break;
case dSv_player_config_c::LANGAUGE_GERMAN:
snprintf(header->mComment, sizeof(header->mComment), "%d/%d Spielstand", time.mday, time.mon + 1);
break;
case dSv_player_config_c::LANGAUGE_FRENCH:
snprintf(header->mComment, sizeof(header->mComment), "Donn%ces de jeu %d/%d", 0xE9, time.mday, time.mon + 1);
break;
case dSv_player_config_c::LANGAUGE_SPANISH:
snprintf(header->mComment, sizeof(header->mComment), "Datos guardados el %d/%d", time.mday, time.mon + 1);
break;
case dSv_player_config_c::LANGAUGE_ITALIAN:
snprintf(header->mComment, sizeof(header->mComment), "Dati salvati: %d/%d", time.mday, time.mon + 1);
break;
}
#else
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");
+8
View File
@@ -617,6 +617,14 @@ JKRExpHeap* mDoExt_getZeldaHeap() {
return zeldaHeap;
}
#if VERSION == VERSION_SHIELD_DEBUG
s32 safeZeldaHeapSize = -1;
s32 mDoExt_getSafeZeldaHeapSize() {
return safeZeldaHeapSize;
}
#endif
/* 80450C30-80450C34 000130 0004+00 2/1 1/1 0/0 .sbss commandHeap */
JKRExpHeap* commandHeap;
+3
View File
@@ -9,6 +9,7 @@
#include "JSystem/JUtility/JUTAssert.h"
#include "SSystem/SComponent/c_m3d.h"
#include "SSystem/SComponent/c_math.h"
#include "global.h"
/* ############################################################################################## */
/* 803DD470-803DD4A0 00A190 0030+00 12/12 142/142 1820/1820 .bss now__14mDoMtx_stack_c
@@ -38,9 +39,11 @@ extern Mtx g_mDoMtx_identity = {
{0.0f, 0.0f, 1.0f, 0.0f},
};
#if VERSION != VERSION_GCN_JPN
static void dummy() {
OSReport("mDoMtx_Dump %s\n");
}
#endif
/* 8000C0CC-8000C164 006A0C 0098+00 1/1 0/0 0/0 .text mDoMtx_XYZrotS__FPA4_fsss */
void mDoMtx_XYZrotS(Mtx mtx, s16 x, s16 y, s16 z) {