d_salvage work

This commit is contained in:
Jasper St. Pierre
2024-02-25 19:17:12 -08:00
parent f835d2b98f
commit 6b94b80c17
4 changed files with 288 additions and 71 deletions
+13 -2
View File
@@ -5,7 +5,7 @@
#include "f_op/f_op_scene.h"
class J2DScreen;
class J2DTextBox;
class dScnOpen_message_c {
public:
@@ -26,7 +26,18 @@ public:
/* 0x004 */ JKRExpHeap* exp_heap;
/* 0x008 */ dScnOpen_message_c* m_message;
/* 0x00C */ J2DScreen* m_Screen;
/* 0x010 */ u8 pad[0x2a0];
/* 0x010 */ J2DPane* d1;
/* 0x014 */ J2DPane* d2;
/* 0x018 */ J2DPane* d3;
/* 0x01C */ J2DPane* d4;
/* 0x020 */ J2DPane* d42;
/* 0x024 */ J2DPane* d5;
/* 0x028 */ J2DPane* d6;
/* 0x02C */ J2DPane* mak1;
/* 0x030 */ J2DPane* mak2;
/* 0x034 */ J2DTextBox* tx1;
/* 0x038 */ J2DTextBox* tx2;
/* 0x03C */ u8 pad[0x2B0 - 0x03C];
/* 0x2B0 */ s32 field_0x2b0;
/* 0x010 */ u8 pad2[0x014];
};
+47 -16
View File
@@ -6,6 +6,26 @@
class JPABaseEmitter;
class fopAc_ac_c;
struct dSalvage_info_c {
/* 0x00 */ cXyz mPos;
/* 0x0C */ cXyz mScale;
/* 0x18 */ f32 mR;
/* 0x1C */ f32 mH;
/* 0x20 */ s32 mSwitchNo;
/* 0x24 */ JPABaseEmitter* mEmtr;
/* 0x28 */ f32 mDistance;
/* 0x2C */ s8 mRoomNo;
/* 0x2D */ u8 mSaveNo;
/* 0x2E */ u8 mType;
/* 0x2F */ u8 mKind;
/* 0x30 */ u8 mItemNo;
/* 0x31 */ u8 mFlag;
/* 0x32 */ u8 field_0x32;
/* 0x33 */ u8 mNowAlpha;
/* 0x34 */ u8 mDrawMode;
/* 0x35 */ u8 field_0x35;
};
class dSalvage_control_c {
public:
void init();
@@ -15,27 +35,38 @@ public:
void init_one(int);
void init_one_sub(int);
void calcDistanceXZ();
void getPos(int);
void getPosP(int);
void getScale(int);
void getR(int);
void getH(int);
void getRoomNo(int);
void getItemNo(int);
void getSwitchNo(int);
void getSaveNo(int);
void getType(int);
void getKind(int);
void getDistance(int);
void getAlphaPtr(int);
void getDrawMode(int);
void checkRegist(int);
void checkUsed(int);
cXyz getPos(int);
cXyz* getPosP(int);
cXyz getScale(int);
f32 getR(int);
f32 getH(int);
u8 getRoomNo(int);
u8 getItemNo(int);
s32 getSwitchNo(int);
u8 getSaveNo(int);
u8 getType(int);
u8 getKind(int);
f32 getDistance(int);
u8* getAlphaPtr(int);
u8 getDrawMode(int);
BOOL checkRegist(int);
bool checkUsed(int);
void setPos(int, cXyz);
void setFlag(int, u8);
void clrFlag(int, u8);
void setNowAlpha(int, u8);
void setDrawMode(int, int);
public:
enum {
MAX_SEA = 128,
MAX_ROOM = 32,
MAX_TOTAL = MAX_ROOM + MAX_SEA,
};
/* 0x00 */ u8 mSeaNum;
/* 0x01 */ u8 mRoomNum;
/* 0x04 */ dSalvage_info_c mInfo[MAX_TOTAL];
};
#endif /* D_SALVAGE_H */
+29 -2
View File
@@ -4,7 +4,12 @@
//
#include "d/d_s_open.h"
#include "dolphin/types.h"
#include "d/d_com_inf_game.h"
#include "f_op/f_op_msg_mng.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
/* 80232EFC-8023334C .text set_message__18dScnOpen_message_cFUli */
void dScnOpen_message_c::set_message(u32, int) {
@@ -29,6 +34,28 @@ dScnOpen_message_c::~dScnOpen_message_c() {
/* 80233698-80233B0C .text __ct__15dScnOpen_proc_cFv */
dScnOpen_proc_c::dScnOpen_proc_c() {
/* Nonmatching */
exp_heap = fopMsgM_createExpHeap(0x20000);
JUT_ASSERT(0xe2, exp_heap != 0);
JKRHeap* oldHeap = mDoExt_setCurrentHeap(exp_heap);
m_Screen = new J2DScreen();
JUT_ASSERT(0xe7, m_Screen != 0);
m_message = new dScnOpen_message_c(exp_heap);
JUT_ASSERT(0xe9, m_message != 0);
dRes_info_c* resInfo = dComIfG_getObjectResInfo("Opening");
JUT_ASSERT(0xeb, resInfo != 0);
m_Screen->set("Opening.blo", resInfo->getArchive());
d1 = m_Screen->search('\0\0d1');
d2 = m_Screen->search('\0\0d2');
d3 = m_Screen->search('\0\0d3');
d4 = m_Screen->search('\0\0d4');
d42 = m_Screen->search('\0d42');
d5 = m_Screen->search('\0\0d5');
d6 = m_Screen->search('\0\0d6');
mak1 = m_Screen->search('mak1');
mak2 = m_Screen->search('mak2');
tx1 = (J2DTextBox*)m_Screen->search('\0tx1');
tx2 = (J2DTextBox*)m_Screen->search('\0tx2');
tx1->move(tx1->mBounds.i.x, 376.0f);
}
/* 80233B0C-80233BE4 .text __dt__15dScnOpen_proc_cFv */
@@ -48,5 +75,5 @@ void dScnOpen_proc_c::proc_draw() {
/* 80234550-80234570 .text draw__15dScnOpen_proc_cFv */
void dScnOpen_proc_c::draw() {
/* Nonmatching */
proc_draw();
}
+199 -51
View File
@@ -4,143 +4,291 @@
//
#include "d/d_salvage.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_salvage.h"
// maybe belongs in d_a_salvage.h?
namespace daSalvage_prm {
// 0011c008 000010 80121748 4 getKindCmapNo__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
// 0011c058 00000c 80121798 4 getSwitchNo__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
// 0011c064 000030 801217a4 4 getRoomNo__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
// 0011c094 000030 801217d4 4 getSvNo__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
// 0011c0c4 000030 80121804 4 getType__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
// 0011c0f4 000030 80121834 4 getItemNo__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
// 0011c124 000030 80121864 4 getKind__13daSalvage_prmFP10fopAc_ac_c d_salvage.o
inline u8 getKindCmapNo(fopAc_ac_c* pact) { return pact->home.angle.z & 0x03; }
inline s32 getSwitchNo(fopAc_ac_c* pact) { return pact->home.angle.z & 0xFF; }
inline u8 getRoomNo(fopAc_ac_c* pact) { return fopAcM_GetParam(pact) >> 12; }
inline u8 getSvNo(fopAc_ac_c* pact) { return fopAcM_GetParam(pact) >> 20; }
inline u8 getType(fopAc_ac_c* pact) { return fopAcM_GetParam(pact) & 0x0F; }
inline u8 getItemNo(fopAc_ac_c* pact) { return fopAcM_GetParam(pact) >> 4; }
inline u8 getKind(fopAc_ac_c* pact) { return fopAcM_GetParam(pact) >> 28; }
};
/* 800CC734-800CC76C .text init__18dSalvage_control_cFv */
void dSalvage_control_c::init() {
/* Nonmatching */
for (s32 i = 0; i < (s32)ARRAY_SIZE(mInfo); i++) {
mInfo[i].mRoomNo = -1;
mInfo[i].mEmtr = NULL;
}
mSeaNum = 0;
mRoomNum = 0;
}
/* 800CC76C-800CC7C4 .text init_end__18dSalvage_control_cFv */
void dSalvage_control_c::init_end() {
/* Nonmatching */
for (s32 i = 0; i < (s32)ARRAY_SIZE(mInfo); i++)
init_one_sub(i);
mSeaNum = 0;
mRoomNum = 0;
}
/* 800CC7C4-800CCB70 .text entry__18dSalvage_control_cFP10fopAc_ac_cP14JPABaseEmitter */
void dSalvage_control_c::entry(fopAc_ac_c*, JPABaseEmitter*) {
void dSalvage_control_c::entry(fopAc_ac_c* pact, JPABaseEmitter* emtr) {
/* Nonmatching */
JUT_ASSERT(0x8b, pact != 0);
s8 roomNo = fopAcM_GetRoomNo(pact);
u8 kind = daSalvage_prm::getKind(pact);
u8 itemNo = daSalvage_prm::getItemNo(pact);
u8 type = daSalvage_prm::getType(pact);
u8 saveNo = daSalvage_prm::getSvNo(pact);
s8 cmapNo = daSalvage_prm::getRoomNo(pact);
s32 switchNo = daSalvage_prm::getSwitchNo(pact);
s32 no;
bool invalid = false;
if (roomNo != 0) {
no = mRoomNum + MAX_SEA;
cmapNo = roomNo;
if (mRoomNum > MAX_ROOM)
invalid = true;
} else {
no = mSeaNum;
if (mSeaNum > MAX_SEA)
invalid = true;
}
if (cmapNo <= 0 || cmapNo > 64)
invalid = true;
if (kind == 2 || kind == 3) {
if (saveNo > 15)
invalid = true;
} else if (kind == 0) {
if (saveNo <= 0 || saveNo > 128)
invalid = true;
}
if (kind == 2 && switchNo == 0xFF)
invalid = true;
if (invalid)
return;
mInfo[no].mFlag = 0;
mInfo[no].mFlag &= ~1;
switch (kind) {
case 0:
if (dComIfGs_isCompleteCollectMap(cmapNo))
return;
if (daSalvage_prm::getKindCmapNo(pact) != dComIfGs_getRandomSalvagePoint())
return;
mInfo[no].mFlag |= 1;
break;
case 2:
if (!fopAcM_isSwitch(pact, switchNo))
mInfo[no].mFlag |= 1;
case 3:
if (cmapNo != 31 && dComIfGs_isOceanSvBit(cmapNo, saveNo))
return;
break;
case 4:
if (cmapNo != 31 && dComIfGs_isOceanSvBit(cmapNo, saveNo))
return;
if (!dKy_daynight_check())
mInfo[no].mFlag |= 1;
break;
case 6:
if (dKy_moon_type_chk() || dComIfGs_isEventBit(daSalvage_c::m_savelabel[saveNo]))
mInfo[no].mFlag |= 1;
break;
}
mInfo[no].mRoomNo = roomNo;
mInfo[no].mPos = pact->current.pos;
mInfo[no].mScale = pact->mScale;
mInfo[no].mSaveNo = saveNo;
mInfo[no].mType = type;
mInfo[no].mKind = kind;
mInfo[no].mItemNo = itemNo;
mInfo[no].mSwitchNo = switchNo;
mInfo[no].mEmtr = emtr;
switch (kind) {
case 0:
mInfo[no].mH = pact->mScale.y * 1000.0f;
mInfo[no].mR = pact->mScale.x * 500.0f;
break;
case 5:
mInfo[no].mH = pact->mScale.y * 1000.0f;
mInfo[no].mR = pact->mScale.x * 700.0f;
break;
default:
mInfo[no].mH = pact->mScale.y * 500.0f;
mInfo[no].mR = pact->mScale.x * 400.0f;
break;
}
if (roomNo != 0)
mRoomNum++;
else
mSeaNum++;
}
/* 800CCB70-800CCBC4 .text init_room__18dSalvage_control_cFSc */
void dSalvage_control_c::init_room(s8) {
/* Nonmatching */
void dSalvage_control_c::init_room(s8 roomNo) {
for (s32 i = MAX_SEA; i < (s32)ARRAY_SIZE(mInfo); i++)
init_one_sub(i);
mRoomNum = 0;
}
/* 800CCBC4-800CCC20 .text init_one__18dSalvage_control_cFi */
void dSalvage_control_c::init_one(int) {
/* Nonmatching */
void dSalvage_control_c::init_one(int no) {
init_one_sub(no);
if (no < MAX_SEA)
mSeaNum--;
else
mRoomNum--;
}
/* 800CCC20-800CCCA8 .text init_one_sub__18dSalvage_control_cFi */
void dSalvage_control_c::init_one_sub(int) {
/* Nonmatching */
void dSalvage_control_c::init_one_sub(int no) {
JPABaseEmitter* emtr = mInfo[no].mEmtr;
if (emtr != NULL)
emtr->becomeInvalidEmitter();
mInfo[no].mRoomNo = -1;
mInfo[no].mPos = cXyz::Zero;
mInfo[no].mScale = cXyz::Zero;
mInfo[no].mSaveNo = 0;
mInfo[no].mType = 0;
mInfo[no].mItemNo = 0;
mInfo[no].mSwitchNo = 0;
mInfo[no].mEmtr = NULL;
mInfo[no].mFlag = 0;
}
/* 800CCCA8-800CCDAC .text calcDistanceXZ__18dSalvage_control_cFv */
void dSalvage_control_c::calcDistanceXZ() {
/* Nonmatching */
fopAc_ac_c* player = dComIfGp_getPlayer(0);
for (s32 i = 0; i < (s32)ARRAY_SIZE(mInfo); i++) {
if (!checkRegist(i))
continue;
mInfo[i].mDistance = (player->current.pos - mInfo[i].mPos).absXZ();
}
}
/* 800CCDAC-800CCDD0 .text getPos__18dSalvage_control_cFi */
void dSalvage_control_c::getPos(int) {
/* Nonmatching */
cXyz dSalvage_control_c::getPos(int no) {
return mInfo[no].mPos;
}
/* 800CCDD0-800CCDE4 .text getPosP__18dSalvage_control_cFi */
void dSalvage_control_c::getPosP(int) {
/* Nonmatching */
cXyz* dSalvage_control_c::getPosP(int no) {
return &mInfo[no].mPos;
}
/* 800CCDE4-800CCE08 .text getScale__18dSalvage_control_cFi */
void dSalvage_control_c::getScale(int) {
/* Nonmatching */
cXyz dSalvage_control_c::getScale(int no) {
return mInfo[no].mScale;
}
/* 800CCE08-800CCE18 .text getR__18dSalvage_control_cFi */
void dSalvage_control_c::getR(int) {
/* Nonmatching */
f32 dSalvage_control_c::getR(int no) {
return mInfo[no].mR;
}
/* 800CCE18-800CCE28 .text getH__18dSalvage_control_cFi */
void dSalvage_control_c::getH(int) {
/* Nonmatching */
f32 dSalvage_control_c::getH(int no) {
return mInfo[no].mH;
}
/* 800CCE28-800CCE38 .text getRoomNo__18dSalvage_control_cFi */
void dSalvage_control_c::getRoomNo(int) {
/* Nonmatching */
u8 dSalvage_control_c::getRoomNo(int no) {
return mInfo[no].mRoomNo;
}
/* 800CCE38-800CCE48 .text getItemNo__18dSalvage_control_cFi */
void dSalvage_control_c::getItemNo(int) {
/* Nonmatching */
u8 dSalvage_control_c::getItemNo(int no) {
return mInfo[no].mItemNo;
}
/* 800CCE48-800CCE58 .text getSwitchNo__18dSalvage_control_cFi */
void dSalvage_control_c::getSwitchNo(int) {
/* Nonmatching */
s32 dSalvage_control_c::getSwitchNo(int no) {
return mInfo[no].mSwitchNo;
}
/* 800CCE58-800CCE68 .text getSaveNo__18dSalvage_control_cFi */
void dSalvage_control_c::getSaveNo(int) {
/* Nonmatching */
u8 dSalvage_control_c::getSaveNo(int no) {
return mInfo[no].mSaveNo;
}
/* 800CCE68-800CCE78 .text getType__18dSalvage_control_cFi */
void dSalvage_control_c::getType(int) {
/* Nonmatching */
u8 dSalvage_control_c::getType(int no) {
return mInfo[no].mType;
}
/* 800CCE78-800CCE88 .text getKind__18dSalvage_control_cFi */
void dSalvage_control_c::getKind(int) {
/* Nonmatching */
u8 dSalvage_control_c::getKind(int no) {
return mInfo[no].mKind;
}
/* 800CCE88-800CCE98 .text getDistance__18dSalvage_control_cFi */
void dSalvage_control_c::getDistance(int) {
/* Nonmatching */
f32 dSalvage_control_c::getDistance(int no) {
return mInfo[no].mDistance;
}
/* 800CCE98-800CCEAC .text getAlphaPtr__18dSalvage_control_cFi */
void dSalvage_control_c::getAlphaPtr(int) {
/* Nonmatching */
u8* dSalvage_control_c::getAlphaPtr(int no) {
return &mInfo[no].mNowAlpha;
}
/* 800CCEAC-800CCEBC .text getDrawMode__18dSalvage_control_cFi */
void dSalvage_control_c::getDrawMode(int) {
/* Nonmatching */
u8 dSalvage_control_c::getDrawMode(int no) {
return mInfo[no].mNowAlpha; // ???
}
/* 800CCEBC-800CCEDC .text checkRegist__18dSalvage_control_cFi */
void dSalvage_control_c::checkRegist(int) {
BOOL dSalvage_control_c::checkRegist(int no) {
/* Nonmatching */
}
/* 800CCEDC-800CCEF8 .text checkUsed__18dSalvage_control_cFi */
void dSalvage_control_c::checkUsed(int) {
/* Nonmatching */
bool dSalvage_control_c::checkUsed(int no) {
return !(mInfo[no].mFlag & 1);
}
/* 800CCEF8-800CCF1C .text setPos__18dSalvage_control_cFi4cXyz */
void dSalvage_control_c::setPos(int, cXyz) {
/* Nonmatching */
void dSalvage_control_c::setPos(int no, cXyz pos) {
mInfo[no].mPos = pos;
}
/* 800CCF1C-800CCF34 .text setFlag__18dSalvage_control_cFiUc */
void dSalvage_control_c::setFlag(int, u8) {
/* Nonmatching */
void dSalvage_control_c::setFlag(int no, u8 v) {
mInfo[no].mFlag |= v;
}
/* 800CCF34-800CCF4C .text clrFlag__18dSalvage_control_cFiUc */
void dSalvage_control_c::clrFlag(int, u8) {
/* Nonmatching */
void dSalvage_control_c::clrFlag(int no, u8 v) {
mInfo[no].mFlag &= ~v;
}
/* 800CCF4C-800CCF5C .text setNowAlpha__18dSalvage_control_cFiUc */
void dSalvage_control_c::setNowAlpha(int, u8) {
/* Nonmatching */
void dSalvage_control_c::setNowAlpha(int no, u8 v) {
mInfo[no].mNowAlpha = v;
}
/* 800CCF5C-800CCF6C .text setDrawMode__18dSalvage_control_cFii */
void dSalvage_control_c::setDrawMode(int, int) {
/* Nonmatching */
void dSalvage_control_c::setDrawMode(int no, int v) {
mInfo[no].mDrawMode = v;
}