demo progress for d_menu_fmap and ghostship

This commit is contained in:
LagoLunatic
2026-09-04 19:36:03 -04:00
parent 7735a21e14
commit 56528e2e29
5 changed files with 371 additions and 251 deletions
+5 -5
View File
@@ -18,8 +18,8 @@ public:
};
bool checkInShip() { return mbCanEnterShip; }
void getAlpha() {}
void setMtx() {}
f32 getAlpha() { return mAlpha; }
inline void setMtx();
inline cPhs_State _create();
inline bool _delete();
@@ -38,7 +38,7 @@ public:
void createInit();
void getArg();
public:
private:
/* 0x290 */ u32 mMode;
/* 0x294 */ s32 mPathNo;
/* 0x298 */ u8 moonPhase;
@@ -52,8 +52,8 @@ public:
/* 0x2C8 */ u32 field_0x2C8;
/* 0x2CC */ request_of_phase_process_class mPhs;
/* 0x2D4 */ request_of_phase_process_class mClothPhs;
/* 0x2DC */ dCloth_packet_c* mpCloth;
/* 0x2E0 */ dCloth_packet_c* mpCloth2;
/* 0x2DC */ dCloth_packetXlu_c* mpCloth;
/* 0x2E0 */ dCloth_packetXlu_c* mpCloth2;
/* 0x2E4 */ J3DModel* mpModel;
/* 0x2E8 */ mDoExt_btkAnm mBtk;
/* 0x2FC */ f32 mAlpha;
+20 -14
View File
@@ -5,6 +5,7 @@
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/JUtility/JUTTexture.h"
#include "SSystem/SComponent/c_xyz.h"
#include "d/d_kankyo.h"
class dKy_tevstr_c;
@@ -57,11 +58,11 @@ public:
return false;
}
cXyz* getPosP() const { return mpPosArr[mCurArr]; }
cXyz* getNrmP() const { return mpNrmArr[mCurArr]; }
cXyz* getBackNrmP() const { return mpNrmArrBack[mCurArr]; }
cXyz* getSpdP() const { return mpSpeedArr; }
u32 getVerticalNum() const { return mHoistGridSize; }
cXyz* getPosP() { return mpPosArr[mCurArr]; }
cXyz* getNrmP() { return mpNrmArr[mCurArr]; }
cXyz* getBackNrmP() { return mpNrmArrBack[mCurArr]; }
cXyz* getSpdP() { return mpSpeedArr; }
u32 getVarticalNum() const { return mHoistGridSize; }
GXTexObj* getTexObjP() { return &mTexObj; }
GXTexObj* getToonTexObjP() { return &mToonTex; }
@@ -100,15 +101,20 @@ protected:
/* 0xF6 */ s16 mRotateY;
/* 0xF8 */ u8 mCurArr;
}; // Size: 0xFC
dCloth_packet_c* dCloth_packet_create(
ResTIMG* i_flagimage, ResTIMG* i_toonimage, int flyGridSize, int hoistGridSize, float flyLength, float hoistLength, dKy_tevstr_c* tevstr, cXyz** posArr
);
class dCloth_packetXlu_c : public dCloth_packet_c {
public:
virtual void cloth_draw();
virtual void TevSetting();
private:
void setAlpha(dKy_tevstr_c* tevStr, u8 alpha) {
tevStr->mColorC0.a = alpha;
}
dCloth_packetXlu_c(ResTIMG* i_toonimage, int flyGridSize, int hoistGridSize, float flyLength, float hoistLength, dKy_tevstr_c* tevstr, cXyz** posArr)
: dCloth_packet_c(i_toonimage, flyGridSize, hoistGridSize, flyLength, hoistLength, tevstr, posArr) {}
@@ -123,13 +129,13 @@ dCloth_packetXlu_c* dCloth_packetXlu_create(
);
class dClothVobj03_c : public dCloth_packet_c {
public:
virtual void init();
virtual void cloth_move();
virtual void TexObjInit(ResTIMG*);
virtual void TexObjLoad();
void cloth_copy();
private:
dClothVobj03_c(ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr)
: dCloth_packet_c(i_toonimage, 5, 5, 120.0f, 60.0f, tevstr, posArr) {
if (posArr) {
@@ -139,7 +145,6 @@ private:
}
}
private:
static dClothVobj03_c* top_pointer;
static s32 cloth_counter;
@@ -150,16 +155,17 @@ private:
bool mIsStandItem;
bool mIsIndoors;
};
dClothVobj03_c* dClothVobj03_create(ResTIMG* i_flagimage, ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr);
class dClothVobj04_c : public dCloth_packet_c {
public:
virtual void init();
virtual void cloth_move();
virtual void TexObjInit(ResTIMG*);
virtual void TexObjLoad();
void cloth_copy();
private:
dClothVobj04_c(ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr)
: dCloth_packet_c(i_toonimage, 5, 5, 120.0f, 60.0f, tevstr, posArr) {
if (posArr) {
@@ -169,7 +175,6 @@ private:
}
};
private:
static dClothVobj04_c* top_pointer;
static s32 cloth_counter;
@@ -180,16 +185,17 @@ private:
bool mIsStandItem;
bool mIsIndoors;
};
dClothVobj04_c* dClothVobj04_create(ResTIMG* i_flagimage, ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr);
class dClothVobj05_c : public dCloth_packet_c {
public:
virtual void init();
virtual void cloth_move();
virtual void TexObjInit(ResTIMG*);
virtual void TexObjLoad();
void cloth_copy();
private:
dClothVobj05_c(ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr)
: dCloth_packet_c(i_toonimage, 5, 5, 50.0f, 120.0f, tevstr, posArr) {
if (posArr) {
@@ -199,7 +205,6 @@ private:
}
}
private:
static dClothVobj05_c* top_pointer;
static s32 cloth_counter;
@@ -210,16 +215,17 @@ private:
bool mIsStandItem;
bool mIsIndoors;
};
dClothVobj05_c* dClothVobj05_create(ResTIMG* i_flagimage, ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr);
class dClothVobj07_0_c : public dCloth_packet_c {
public:
virtual void init();
virtual void cloth_move();
virtual void TexObjInit(ResTIMG*);
virtual void TexObjLoad();
void cloth_copy();
private:
dClothVobj07_0_c(ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr)
: dCloth_packet_c(i_toonimage, 5, 5, 120.0f, 70.0f, tevstr, posArr) {
if (posArr) {
@@ -229,7 +235,6 @@ private:
}
}
private:
static dClothVobj07_0_c* top_pointer;
static s32 cloth_counter;
@@ -240,6 +245,7 @@ private:
bool mIsStandItem;
bool mIsIndoors;
};
dClothVobj07_0_c* dClothVobj07_0_create(ResTIMG* i_flagimage, ResTIMG* i_toonimage, dKy_tevstr_c* tevstr, cXyz** posArr);
#endif /* D_A_CLOTH_PACKET_H */
+39 -24
View File
@@ -52,6 +52,12 @@ enum dMf_WarpSel {
FMAP_WARP_SEL_NO = 1,
};
#if VERSION == VERSION_DEMO
#define FMAP_WARP_COUNT 7
#else
#define FMAP_WARP_COUNT 9
#endif
class dDlst_FMAP_c : public dDlst_base_c {
public:
virtual ~dDlst_FMAP_c() {}
@@ -68,75 +74,75 @@ public:
void draw() { _draw(); }
u8 getCtDispMode() {
JUT_ASSERT(VERSION_SELECT(456, 456, 467, 467), fmapSv != NULL);
return fmapSv->dispMode;
return fmapSv->getDispMode();
}
void setCtDispMode(u8 val) {
JUT_ASSERT(VERSION_SELECT(461, 461, 472, 472), fmapSv != NULL);
fmapSv->dispMode = val;
fmapSv->setDispMode(val);
}
u8 getCtFmapZoom() {
JUT_ASSERT(VERSION_SELECT(467, 467, 478, 478), fmapSv != NULL);
return fmapSv->fmapZoom;
return fmapSv->getFmapZoom();
}
void setCtFmapZoom(u8 val) {
JUT_ASSERT(VERSION_SELECT(472, 472, 483, 483), fmapSv != NULL);
fmapSv->fmapZoom = val;
fmapSv->setFmapZoom(val);
}
s8 getCtCurX() {
JUT_ASSERT(VERSION_SELECT(478, 478, 489, 489), fmapSv != NULL);
return fmapSv->curX;
return fmapSv->getCurX();
}
void setCtCurX(s8 val) {
JUT_ASSERT(VERSION_SELECT(483, 483, 494, 494), fmapSv != NULL);
fmapSv->curX = val;
fmapSv->setCurX(val);
}
s8 getCtCurY() {
JUT_ASSERT(VERSION_SELECT(489, 489, 500, 500), fmapSv != NULL);
return fmapSv->curY;
return fmapSv->getCurY();
}
void setCtCurY(s8 val) {
JUT_ASSERT(VERSION_SELECT(494, 494, 505, 505), fmapSv != NULL);
fmapSv->curY = val;
fmapSv->setCurY(val);
}
s8 getCtCurWX() {
JUT_ASSERT(VERSION_SELECT(500, 500, 511, 511), fmapSv != NULL);
return fmapSv->curWX;
return fmapSv->getCurWX();
}
void setCtCurWX(s8 val) {
JUT_ASSERT(VERSION_SELECT(505, 505, 516, 516), fmapSv != NULL);
fmapSv->curWX = val;
fmapSv->setCurWX(val);
}
s8 getCtCurWY() {
JUT_ASSERT(VERSION_SELECT(511, 511, 522, 522), fmapSv != NULL);
return fmapSv->curWY;
return fmapSv->getCurWY();
}
void setCtCurWY(s8 val) {
JUT_ASSERT(VERSION_SELECT(516, 516, 527, 527), fmapSv != NULL);
fmapSv->curWY = val;
fmapSv->setCurWY(val);
}
s8 getCtZoomGridX() {
JUT_ASSERT(VERSION_SELECT(522, 522, 533, 533), fmapSv != NULL);
return fmapSv->zoomGridX;
return fmapSv->getZoomGridX();
}
void setCtZoomGridX(s8 val) {
JUT_ASSERT(VERSION_SELECT(527, 527, 538, 538), fmapSv != NULL);
fmapSv->zoomGridX = val;
fmapSv->setZoomGridX(val);
}
s8 getCtZoomGridY() {
JUT_ASSERT(VERSION_SELECT(532, 532, 543, 543), fmapSv != NULL);
return fmapSv->zoomGridY;
return fmapSv->getZoomGridY();
}
void setCtZoomGridY(s8 val) {
JUT_ASSERT(VERSION_SELECT(537, 537, 548, 548), fmapSv != NULL);
fmapSv->zoomGridY = val;
fmapSv->setZoomGridY(val);
}
void setCtCurHX(s8 val) {
JUT_ASSERT(VERSION_SELECT(548, 548, 559, 559), fmapSv != NULL);
fmapSv->curHX = val;
fmapSv->setCurHX(val);
}
void setCtCurHY(s8 val) {
JUT_ASSERT(VERSION_SELECT(558, 558, 569, 569), fmapSv != NULL);
fmapSv->curHY = val;
fmapSv->setCurHY(val);
}
void lineInter0to1(f32, f32, f32) {}
void lineInter0to1ForU8(u8, u8, f32) {}
@@ -200,6 +206,10 @@ public:
void windArrowColorAnime();
void checkMarkAnimeInit();
void checkMarkAnime();
#if VERSION == VERSION_DEMO
void krogMarkAnimeInit();
void krogMarkAnime();
#endif
u32 readFmapTexture(const char*);
void aramCmapDatRead();
void initCmapDatPnt(aramCmapDatPat_t*);
@@ -301,6 +311,9 @@ public:
/* 0x0018 */ ResTIMG * mChkPntTxt_p;
/* 0x001C */ dDlst_FMAP_c fmapDl;
/* 0x0024 */ dMenu_Fmap2_c mFmap2;
#if VERSION == VERSION_DEMO
u8 pad4[0x38 * 2];
#endif
/* 0x2874 */ u8 padding_0x2874[0x2878 - 0x2874];
/* 0x2878 */ dMenu_FmapSv_c* fmapSv;
/* 0x287C */ aramCmapDat_c mCmapDatPnt;
@@ -366,12 +379,15 @@ public:
/* 0x4F0C */ fopMsgM_pane_class mCur1Pane;
#if VERSION > VERSION_JPN
/* 0x4F44 */ fopMsgM_pane_class mGsPanes[7];
#endif
#if VERSION == VERSION_DEMO
u8 pad [0x340 + 8];
#endif
/* 0x50CC */ STControl* stick;
/* 0x50D0 */ JUTFont* mFont;
/* 0x50D4 */ JUTFont* mRFont;
/* 0x50D8 */ JPABaseEmitter* mWrapBackEmitter;
/* 0x50DC */ JPABaseEmitter* mWrapSpotEmitters[9];
/* 0x50DC */ JPABaseEmitter* mWrapSpotEmitters[FMAP_WARP_COUNT];
/* 0x5100 */ u8 padding_0x5100[0x510C - 0x5100];
/* 0x510C */ bool mMapClose;
/* 0x510D */ u8 mSelCursorBufIdx;
@@ -423,7 +439,8 @@ public:
/* 0x517A */ u8 mFishmanTimer3;
/* 0x517B */ u8 mCheckMarkTimer;
/* 0x517C */ u8 mCheckMarkToggle;
/* 0x517D */ u8 padding_0x517D[0x517F-0x517D];
/* 0x517D */ u8 field_0x517D;
/* 0x517E */ u8 field_0x517E;
/* 0x517F */ bool mFishmanActive;
/* 0x5180 */ u8 mSalvagePntIdx;
/* 0x5181 */ u8 mButtonIconMode;
@@ -451,8 +468,6 @@ public:
#endif
}; // Size: 0x51B4
STATIC_ASSERT(sizeof(dMenu_Fmap_c) == VERSION_SELECT(0x4E54, 0x4E54, 0x51B4, 0x51B4));
class dMf_HIO_c : public JORReflexible {
public:
dMf_HIO_c();
@@ -509,8 +524,8 @@ public:
/* 0x04D */ u8 mWarpCursorAlphaMin;
/* 0x04E */ u8 mWarpCursorAlphaMax;
/* 0x04F */ u8 padding_0x4F[0x50 - 0x4F];
/* 0x050 */ f32 mWarpSpotPosX[9];
/* 0x074 */ f32 mWarpSpotPosY[9];
/* 0x050 */ f32 mWarpSpotPosX[FMAP_WARP_COUNT];
/* 0x074 */ f32 mWarpSpotPosY[FMAP_WARP_COUNT];
/* 0x098 */ f32 mWarpSpotScaleSel;
/* 0x09C */ f32 mWarpSpotScale;
/* 0x0A0 */ f32 field_0xA0;
+75 -80
View File
@@ -166,6 +166,38 @@ static u32 dummyFunc() {
return dummy[0];
}
inline void daGhostship_c::setMtx() {
dLib_waveRot(&current.pos, 0.0f, &mWave);
shape_angle.x = mWave.mRotX;
shape_angle.z = mWave.mRotZ;
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::XYZrotM(shape_angle.x, 0, shape_angle.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
mDoMtx_stack_c::push();
#if VERSION == VERSION_DEMO
mDoMtx_stack_c::transM(0.0f + REG10_F(0), 3200.0f + REG10_F(1), 75.0f);
mDoMtx_stack_c::YrotM(REG10_S(0));
#else
mDoMtx_stack_c::transM(0.0f, 3200.0f, 75.0f);
#endif
mpCloth->setMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::pop();
#if VERSION == VERSION_DEMO
mDoMtx_stack_c::transM(-900.0f + REG10_F(3), 2080.0f + REG10_F(4), 85.0f + REG10_F(5));
mDoMtx_stack_c::YrotM(0x4000 + REG10_S(1));
#else
mDoMtx_stack_c::transM(-900.0f, 2080.0f, 85.0f);
mDoMtx_stack_c::YrotM(0x4000);
#endif
mpCloth2->setMtx(mDoMtx_stack_c::get());
}
/* 00000874-00000C78 .text createInit__13daGhostship_cFv */
void daGhostship_c::createInit() {
mPathPos = current.pos;
@@ -193,7 +225,7 @@ void daGhostship_c::createInit() {
}
if(mPathNo != 0xFF) {
mPath = dPath_GetRoomPath(mPathNo, fopAcM_GetRoomNo(this));
mPath = dPath_GetRoomPath(mPathNo, current.roomNo);
modePathMoveInit();
}
else {
@@ -204,26 +236,8 @@ void daGhostship_c::createInit() {
mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mCir, fopAcM_GetSpeed_p(this));
mAcch.SetWallNone();
mAcch.SetRoofNone();
dLib_waveRot(&current.pos, 0.0f, &mWave);
shape_angle.x = mWave.mRotX;
shape_angle.z = mWave.mRotZ;
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::XYZrotM(shape_angle.x, 0, shape_angle.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
mDoMtx_stack_c::push();
mDoMtx_stack_c::transM(0.0f, 3200.0f, 75.0f);
mpCloth->setMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::pop();
mDoMtx_stack_c::transM(-900.0f, 2080.0f, 85.0f);
mDoMtx_stack_c::YrotM(0x4000);
mpCloth2->setMtx(mDoMtx_stack_c::get());
setMtx();
}
/* 00000C78-00000C8C .text getArg__13daGhostship_cFv */
@@ -236,27 +250,38 @@ void daGhostship_c::getArg() {
cPhs_State daGhostship_c::_create() {
fopAcM_ct(this, daGhostship_c);
cPhs_State result = dComIfG_resLoad(&mPhs, m_arc_name);
if(result != cPhs_COMPLEATE_e) {
return result;
cPhs_State res = dComIfG_resLoad(&mPhs, m_arc_name);
#if VERSION > VERSION_DEMO
if (res != cPhs_COMPLEATE_e) {
return res;
}
result = dComIfG_resLoad(&mClothPhs, m_cloth_arc_name);
if(result != cPhs_COMPLEATE_e) {
return result;
}
getArg();
if((s32)dComIfGs_getEventReg(dSv_event_flag_c::GHOST_SHIP) == 3) {
#endif
cPhs_State res2 = dComIfG_resLoad(&mClothPhs, m_cloth_arc_name);
#if VERSION == VERSION_DEMO
if (res == cPhs_ERROR_e || res2 == cPhs_ERROR_e) {
return cPhs_ERROR_e;
}
if (!fopAcM_entrySolidHeap(this, createHeap_CB, m_heapsize)) {
return cPhs_ERROR_e;
if (res != cPhs_COMPLEATE_e) {
return res;
}
#endif
if (res2 != cPhs_COMPLEATE_e) {
return res2;
}
int r0 = cPhs_COMPLEATE_e;
if (r0 == cPhs_COMPLEATE_e) {
getArg();
createInit();
if((s32)dComIfGs_getEventReg(dSv_event_flag_c::GHOST_SHIP) == 3) {
return cPhs_ERROR_e;
}
if (!fopAcM_entrySolidHeap(this, createHeap_CB, m_heapsize)) {
return cPhs_ERROR_e;
}
createInit();
}
return cPhs_COMPLEATE_e;
}
@@ -266,16 +291,18 @@ static cPhs_State daGhostshipCreate(void* i_this) {
return ((daGhostship_c*)i_this)->_create();
}
/* 00000FD8-00001024 .text daGhostshipDelete__FPv */
static BOOL daGhostshipDelete(void* i_actor) {
daGhostship_c* i_this = static_cast<daGhostship_c*>(i_actor);
dComIfG_resDelete(&i_this->mPhs, daGhostship_c::m_arc_name);
dComIfG_resDelete(&i_this->mClothPhs, daGhostship_c::m_cloth_arc_name);
inline bool daGhostship_c::_delete() {
dComIfG_resDelete(&mPhs, daGhostship_c::m_arc_name);
dComIfG_resDelete(&mClothPhs, daGhostship_c::m_cloth_arc_name);
return true;
}
/* 00000FD8-00001024 .text daGhostshipDelete__FPv */
static BOOL daGhostshipDelete(void* i_this) {
return ((daGhostship_c*)i_this)->_delete();
}
/* 00001024-00001048 .text daGhostshipExecute__FPv */
static BOOL daGhostshipExecute(void* i_this) {
return static_cast<daGhostship_c*>(i_this)->_execute();
@@ -285,7 +312,7 @@ static BOOL daGhostshipExecute(void* i_this) {
bool daGhostship_c::_execute() {
f32 time = dComIfGs_getTime();
fopAc_ac_c* player = dComIfGp_getPlayer(0);
// Fakematch, debug map says fopAcM_searchPlayerDistanceXZ was used
// Fakematch, debug map says fopAcM_searchPlayerDistanceXZ was used, but that causes regalloc
f32 dist = fopAcM_searchActorDistanceXZ(this, player);
mbCanEnterShip = false;
@@ -379,35 +406,7 @@ bool daGhostship_c::_execute() {
modeProcCall();
mBtk.play();
dLib_waveRot(&current.pos, 0.0f, &mWave);
shape_angle.x = mWave.mRotX;
shape_angle.z = mWave.mRotZ;
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::XYZrotM(shape_angle.x, 0, shape_angle.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::copy(mpModel->getBaseTRMtx());
mDoMtx_stack_c::push();
#if VERSION == VERSION_DEMO
mDoMtx_stack_c::transM(0.0f + REG10_F(0), 3200.0f + REG10_F(1), 75.0f);
mDoMtx_stack_c::YrotM(REG10_S(0));
#else
mDoMtx_stack_c::transM(0.0f, 3200.0f, 75.0f);
#endif
mpCloth->setMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::pop();
#if VERSION == VERSION_DEMO
mDoMtx_stack_c::transM(-900.0f + REG10_F(3), 2080.0f + REG10_F(4), 85.0f + REG10_F(5));
mDoMtx_stack_c::YrotM(0x4000 + REG10_S(1));
#else
mDoMtx_stack_c::transM(-900.0f, 2080.0f, 85.0f);
mDoMtx_stack_c::YrotM(0x4000);
#endif
mpCloth2->setMtx(mDoMtx_stack_c::get());
setMtx();
mpCloth->setParam(0.45f, -1.5f, 0.875f, 1.0f, 1.0f, 0x100, 0, 900, -800, 7.0f, 6.0f);
mpCloth->setGlobalWind(dKyw_get_wind_vec());
@@ -449,22 +448,18 @@ bool daGhostship_c::_draw() {
mDoExt_modelUpdateDL(mpModel);
mBtk.remove(modelData);
tevStr.mColorC0.a = alpha;
mpCloth->setAlpha(&tevStr, alpha);
mpCloth->cloth_draw();
tevStr.mColorC0.a = alpha;
mpCloth2->setAlpha(&tevStr, alpha);
mpCloth2->cloth_draw();
}
return true;
}
bool daGhostship_c::_delete() {
return true;
}
/* 000019A4-000019AC .text daGhostshipIsDelete__FPv */
static BOOL daGhostshipIsDelete(void* i_this) {
return ((daGhostship_c*)i_this)->_delete();
return TRUE;
}
static actor_method_class daGhostshipMethodTable = {
+232 -128
View File
@@ -20,7 +20,18 @@
dMf_HIO_c g_mfHIO;
extern const cursorTable_t g_cursorTable[9] = {
#if VERSION == VERSION_DEMO
extern const cursorTable_t g_cursorTable[FMAP_WARP_COUNT] = {
/* 0 */ {-2, -2, 0, -1, 1, -1, 3},
/* 1 */ { 0, -2, 1, 0, 2, -1, 4},
/* 2 */ { 2, -2, 2, 1, -1, 0, 4},
/* 3 */ {-2, 0, 3, -1, 4, 0, 5},
/* 4 */ { 1, 0, 4, 3, -1, 2, 5},
/* 5 */ { 2, 2, 5, -1, -1, 4, 6},
/* 6 */ {-2, 3, 6, 5, -1, 5, -1},
};
#else
extern const cursorTable_t g_cursorTable[FMAP_WARP_COUNT] = {
/* 0 */ {-2, -2, 0, -1, 1, -1, 7},
/* 1 */ { 0, -2, 1, 0, 2, -1, 7},
/* 2 */ { 2, -2, 2, 1, -1, 0, 7},
@@ -31,6 +42,7 @@ extern const cursorTable_t g_cursorTable[9] = {
/* 7 */ {-1, -1, 7, -1, -1, 0, 3},
/* 8 */ { 0, 2, 8, -1, 5, 3, 6},
};
#endif
extern const u32 hist[] = {
'mR01', 'mR02', 'mR03', 'mR04', 'mR05', 'mR06', 'mR07',
@@ -42,28 +54,6 @@ extern const u32 hist[] = {
'mR2B', 'mR2C', 'mR2D', 'mR2E', 'mR2F', 'mR30', 'mR31',
};
const u32 l_island[] = {
'R01', 'R04', 'R0B', 'R0D', 'R14', 'R17',
'R1A', 'R28', 'R29', 'R2C', 'R2D',
};
const u32 endSalv[] = {
'ST01', 'ST02', 'ST03', 'ST04', 'ST05', 'ST06', 'ST07',
'ST08', 'ST09', 'ST10', 'ST11', 'ST12', 'ST13', 'ST14',
'ST15', 'ST16', 'ST17', 'ST18', 'ST19', 'ST20', 'ST21',
'ST22', 'ST23', 'ST24', 'ST25', 'ST26', 'ST27', 'ST28',
'ST29', 'ST30', 'ST31', 'ST32', 'ST33', 'ST34', 'ST35',
'ST36', 'ST37', 'ST38', 'ST39', 'ST40', 'ST41', 'ST42',
'ST43', 'ST44', 'ST45', 'ST46', 'ST47', 'ST48', 'ST49',
};
#if VERSION > VERSION_JPN
const u32 gsShip[] = {
'gs07', 'gs01', 'gs02', 'gs03', 'gs04', 'gs05', 'gs06',
};
#endif
/* 801AF4F0-801AF848 .text __ct__9dMf_HIO_cFv */
dMf_HIO_c::dMf_HIO_c() {
mWarpBackColorCycle = 20;
@@ -125,10 +115,12 @@ dMf_HIO_c::dMf_HIO_c() {
mWarpSpotPosY[5] = 86.0f;
mWarpSpotPosX[6] = -193.0f;
mWarpSpotPosY[6] = 145.0f;
#if VERSION > VERSION_DEMO
mWarpSpotPosX[7] = -137.0f;
mWarpSpotPosY[7] = -80.0f;
mWarpSpotPosX[8] = -83.0f;
mWarpSpotPosY[8] = 86.0f;
#endif
mWarpSpotScaleSel = 1.6f;
mWarpSpotScale = 0.75f;
field_0xA0 = 30.0f;
@@ -237,7 +229,7 @@ static const char* rollmapTex[] = {
"cmap_phantomship.bti",
"cmap_treasure.bti",
"cmap_treasure.bti",
"cmap_tingle.bti",
DEMO_SELECT("cmap_hint.bti", "cmap_tingle.bti"),
"cmap_treasure.bti",
"cmap_hint.bti",
"cmap_hint.bti",
@@ -252,8 +244,8 @@ static const char* rollmapTex[] = {
const char* salvItemex[] = {
"f_item_tri.bti",
"f_get_rupy.bti",
"f_heart_up_02.bti",
DEMO_SELECT("get_rupy.bti", "f_get_rupy.bti"),
DEMO_SELECT("heart_up_02.bti", "f_heart_up_02.bti"),
"cmap_tingle.bti",
"cmap_phantomship.bti",
"cmap_treasure.bti",
@@ -271,36 +263,11 @@ const char* salvItemex[] = {
"cmap_hint.bti",
};
static u32 tag00[] = {
'fmn1','fmn2','fmn3','fmn4','fmn5','fmn6','fmn7','fmn8',
'fmna','fmnb','fmnc','fmnd','fmne','fmnf','fmnh',
};
static u32 tagkr[] = {
'KR03','KR05','KR01','KR08','KR06','KR02','KR07','KR04',
};
static u32 txtnm[] = { 'txt1', 'txt3', 'txt2' };
static int islandPos[] = {1, 4, 11, 13, 20, 23, 26, 40, 41, 44, 45};
const char* korogStat[] = {
"f_korog_kare.bti",
"f_korog_saki.bti",
};
typedef void (dMenu_Fmap_c::*fmapProcFunc)();
fmapProcFunc fmapProcMain[] = {
&dMenu_Fmap_c::SelectGrid,
&dMenu_Fmap_c::ZoomGridLv1In,
&dMenu_Fmap_c::ZoomGridLv1Proc,
&dMenu_Fmap_c::ZoomGridLv1Out,
&dMenu_Fmap_c::ZoomGridLv2In,
&dMenu_Fmap_c::ZoomGridLv2Proc,
&dMenu_Fmap_c::ZoomGridLv2Out,
};
enum ZoomProcIdx {
FMAP_ZOOM_PROC_SELECT_GRID,
FMAP_ZOOM_PROC_LV1_IN,
@@ -311,42 +278,17 @@ enum ZoomProcIdx {
FMAP_ZOOM_PROC_LV2_OUT,
};
typedef void (dMenu_Fmap_c::*mainProcFunc)();
static mainProcFunc mainProc[] = {
&dMenu_Fmap_c::FmapProc,
&dMenu_Fmap_c::HikakuProc,
};
enum MainProcIdx {
MAIN_PROC_FMAP,
MAIN_PROC_HIKAKU,
};
typedef void (dMenu_Fmap_c::*hikakuProcFunc)();
hikakuProcFunc HikakuProcMain[] = {
&dMenu_Fmap_c::fmap2Open,
&dMenu_Fmap_c::fmap2Move,
&dMenu_Fmap_c::fmap2Close,
};
enum HikakuProcIdx {
HIKAKU_PROC_OPEN,
HIKAKU_PROC_MOVE,
HIKAKU_PROC_CLOSE,
};
typedef void (dMenu_Fmap_c::*warpProcFunc)();
warpProcFunc warpProcMain[] = {
&dMenu_Fmap_c::wrapMove,
&dMenu_Fmap_c::wrapSelWinFadeIn1,
&dMenu_Fmap_c::wrapSelect,
&dMenu_Fmap_c::wrapSelWinFadeOut,
&dMenu_Fmap_c::wrapSelWarp,
};
enum WarpProcIdx {
WARP_PROC_MOVE,
WARP_PROC_SEL_WIN_FADE_IN,
@@ -355,19 +297,6 @@ enum WarpProcIdx {
WARP_PROC_SEL_WARP,
};
typedef void (dMenu_Fmap_c::*fishManProcFunc)();
fishManProcFunc FishManProcMain[] = {
&dMenu_Fmap_c::fmDispArea,
&dMenu_Fmap_c::fmZoomGridLv1In,
&dMenu_Fmap_c::fmZoomGridLv2In,
&dMenu_Fmap_c::fmMapWrite,
&dMenu_Fmap_c::fmMapWait,
&dMenu_Fmap_c::fmZoomGridLv2Out,
&dMenu_Fmap_c::fmZoomGridLv1Out,
&dMenu_Fmap_c::fmEndWait,
};
enum FishmanProcIdx {
FISHMAN_PROC_DISP_AREA,
FISHMAN_PROC_ZOOM_LV1_IN,
@@ -381,29 +310,35 @@ enum FishmanProcIdx {
/* 801AF848-801AFB64 .text _create__12dMenu_Fmap_cFv */
void dMenu_Fmap_c::_create() {
#if VERSION == VERSION_DEMO
mSalvagePntIdx = dComIfGs_getRandomSalvagePoint();
#endif
fmapDl.scrn = new J2DScreen();
JUT_ASSERT(VERSION_SELECT(560, 560, 571, 571), fmapDl.scrn != NULL);
JUT_ASSERT(VERSION_SELECT(594, 560, 571, 571), fmapDl.scrn != NULL);
fmapDl.scrn->set("f_map.blo", dComIfGp_getFmapResArchive());
outFont = new dDlst_2DOutFont_c();
JUT_ASSERT(VERSION_SELECT(564, 564, 575, 575), outFont != NULL);
JUT_ASSERT(VERSION_SELECT(598, 564, 575, 575), outFont != NULL);
#if VERSION > VERSION_JPN
outFont->m74 = 1;
#endif
outFont2 = new dDlst_2DOutFont_c();
JUT_ASSERT(VERSION_SELECT(567, 567, 579, 579), outFont2 != NULL);
JUT_ASSERT(VERSION_SELECT(601, 567, 579, 579), outFont2 != NULL);
stick = new STControl(5, 2, 3, 2, 0.9f, 0.5f, 0, 0x2000);
JUT_ASSERT(VERSION_SELECT(570, 570, 582, 582), stick != NULL);
JUT_ASSERT(VERSION_SELECT(604, 570, 582, 582), stick != NULL);
stick->setWaitParm(5, 2, 3, 2, 0.9f, 0.5f, 0, 0x800);
mChkPntTxt_p = (ResTIMG*)operator new (0x2c00, 0x20);
JUT_ASSERT(VERSION_SELECT(574, 574, 586, 586), mChkPntTxt_p != NULL);
JUT_ASSERT(VERSION_SELECT(608, 574, 586, 586), mChkPntTxt_p != NULL);
screenSet();
#if VERSION > VERSION_DEMO
aramCmapDatRead();
mSalvagePntIdx = dComIfGs_getRandomSalvagePoint();
#endif
initialize();
displayinit();
phantomShipCheck();
@@ -414,7 +349,7 @@ void dMenu_Fmap_c::_create() {
/* 801AFB64-801AFBDC .text phantomShipCheck__12dMenu_Fmap_cFv */
void dMenu_Fmap_c::phantomShipCheck() {
daGhostship_c* gship = (daGhostship_c*)fopAcM_searchFromName("Ayush", 0, 0);
if (gship != NULL && gship->mAlpha) {
if (gship != NULL && gship->getAlpha()) {
mDoAud_seStart(JA_SE_CV_YUUREISEN_SONG);
}
}
@@ -522,6 +457,10 @@ void dMenu_Fmap_c::screenSet() {
fopMsgM_setPaneData(&mFmxxPanes[4], fmapDl.scrn, 'fmw4');
for (i = 0; i < 15; i++) {
static u32 tag00[] = {
'fmn1','fmn2','fmn3','fmn4','fmn5','fmn6','fmn7','fmn8',
'fmna','fmnb','fmnc','fmnd','fmne','fmnf','fmnh',
};
fopMsgM_setPaneData(&mFmnPanes[i], fmapDl.scrn, tag00[i]);
}
@@ -544,16 +483,35 @@ void dMenu_Fmap_c::screenSet() {
mCk1Color2.set(((J2DPicture*)mCk1xPanes[0].pane)->getWhite());
for (i = 0; i < 8; i++) {
static u32 tagkr[] = {
'KR03','KR05','KR01','KR08','KR06','KR02','KR07','KR04',
};
fopMsgM_setPaneData(&mKr0xPanes[i], fmapDl.scrn, tagkr[i]);
}
mKr0Color.set(((J2DPicture*)mKr0xPanes[0].pane)->getBlack());
mKr0Color2.set(((J2DPicture*)mKr0xPanes[0].pane)->getWhite());
for (i = 0; i < 11; i++) {
static const u32 l_island[] = {
'R01', 'R04', 'R0B', 'R0D', 'R14', 'R17',
#if VERSION > VERSION_DEMO
'R1A',
#endif
'R28', 'R29', 'R2C', 'R2D',
};
fopMsgM_setPaneData(&mR0xPanes[i], fmapDl.scrn, l_island[i]);
}
for (i = 0; i < 49; i++) {
static const u32 endSalv[] = {
'ST01', 'ST02', 'ST03', 'ST04', 'ST05', 'ST06', 'ST07',
'ST08', 'ST09', 'ST10', 'ST11', 'ST12', 'ST13', 'ST14',
'ST15', 'ST16', 'ST17', 'ST18', 'ST19', 'ST20', 'ST21',
'ST22', 'ST23', 'ST24', 'ST25', 'ST26', 'ST27', 'ST28',
'ST29', 'ST30', 'ST31', 'ST32', 'ST33', 'ST34', 'ST35',
'ST36', 'ST37', 'ST38', 'ST39', 'ST40', 'ST41', 'ST42',
'ST43', 'ST44', 'ST45', 'ST46', 'ST47', 'ST48', 'ST49',
};
fopMsgM_setPaneData(&mStxxPanes[i], fmapDl.scrn->search(endSalv[i]));
}
@@ -564,6 +522,7 @@ void dMenu_Fmap_c::screenSet() {
str2[0x7F] = 0;
for (i = 0; i < 3; i++) {
static u32 txtnm[] = { 'txt1', 'txt3', 'txt2' };
fopMsgM_setPaneData(&mAreaTxtPanes[i], fmapDl.scrn, txtnm[i]);
((J2DTextBox*)mAreaTxtPanes[i].pane)->setFont(mFont);
((J2DTextBox*)mAreaTxtPanes[i].pane)->setString(str2);
@@ -645,6 +604,9 @@ void dMenu_Fmap_c::screenSet() {
#if VERSION > VERSION_JPN
for (i = 0; i < 7; i++) {
static const u32 gsShip[] = {
'gs07', 'gs01', 'gs02', 'gs03', 'gs04', 'gs05', 'gs06',
};
fopMsgM_setPaneData(&mGsPanes[i], fmapDl.scrn, gsShip[i]);
}
#endif
@@ -652,6 +614,9 @@ void dMenu_Fmap_c::screenSet() {
/* 801B06D4-801B0FB4 .text initialize__12dMenu_Fmap_cFv */
void dMenu_Fmap_c::initialize() {
#if VERSION == VERSION_DEMO
aramCmapDatRead();
#endif
mFrameTimer = 0;
mInputDisabled = false;
fopAc_ac_c* player = dComIfGp_getPlayer(0);
@@ -761,6 +726,21 @@ void dMenu_Fmap_c::displayinit() {
}
for (i = 0; i < 11; i++) {
static int islandPos[] = {
dIsleRoom_ForsakenFortress_e,
dIsleRoom_GaleIsle_e,
dIsleRoom_WindfallIsland_e,
dIsleRoom_DragonRoostIsland_e,
dIsleRoom_FireMountain_e,
dIsleRoom_GreatfishIsle_e,
#if VERSION > VERSION_DEMO
dIsleRoom_ToweroftheGods_e,
#endif
dIsleRoom_IceRingIsle_e,
dIsleRoom_ForestHaven_e,
dIsleRoom_OutsetIsland_e,
dIsleRoom_HeadstoneIsland_e,
};
if (dComIfGs_isSaveArriveGrid(islandPos[i] - 1)) {
mR0xPanes[i].pane->show();
} else {
@@ -793,12 +773,62 @@ void dMenu_Fmap_c::displayinit() {
#endif
mFmap2.fmapSv = fmapSv;
mFmap2._create();
mFmap2.mpFmapDatPnt = &mCmapDatPnt;
mFmap2.setAramCmapDat(&mCmapDatPnt);
mFmap2.initialize();
mFmap2.displayInit();
g_mfHIO.mNo = mDoHIO_createChild("フィールドマップ画面", &g_mfHIO);
}
typedef void (dMenu_Fmap_c::*fmapProcFunc)();
fmapProcFunc fmapProcMain[] = {
&dMenu_Fmap_c::SelectGrid,
&dMenu_Fmap_c::ZoomGridLv1In,
&dMenu_Fmap_c::ZoomGridLv1Proc,
&dMenu_Fmap_c::ZoomGridLv1Out,
&dMenu_Fmap_c::ZoomGridLv2In,
&dMenu_Fmap_c::ZoomGridLv2Proc,
&dMenu_Fmap_c::ZoomGridLv2Out,
};
typedef void (dMenu_Fmap_c::*mainProcFunc)();
static mainProcFunc mainProc[] = {
&dMenu_Fmap_c::FmapProc,
&dMenu_Fmap_c::HikakuProc,
};
typedef void (dMenu_Fmap_c::*hikakuProcFunc)();
hikakuProcFunc HikakuProcMain[] = {
&dMenu_Fmap_c::fmap2Open,
&dMenu_Fmap_c::fmap2Move,
&dMenu_Fmap_c::fmap2Close,
};
typedef void (dMenu_Fmap_c::*warpProcFunc)();
warpProcFunc warpProcMain[] = {
&dMenu_Fmap_c::wrapMove,
&dMenu_Fmap_c::wrapSelWinFadeIn1,
&dMenu_Fmap_c::wrapSelect,
&dMenu_Fmap_c::wrapSelWinFadeOut,
&dMenu_Fmap_c::wrapSelWarp,
};
typedef void (dMenu_Fmap_c::*fishManProcFunc)();
fishManProcFunc FishManProcMain[] = {
&dMenu_Fmap_c::fmDispArea,
&dMenu_Fmap_c::fmZoomGridLv1In,
&dMenu_Fmap_c::fmZoomGridLv2In,
&dMenu_Fmap_c::fmMapWrite,
&dMenu_Fmap_c::fmMapWait,
&dMenu_Fmap_c::fmZoomGridLv2Out,
&dMenu_Fmap_c::fmZoomGridLv1Out,
&dMenu_Fmap_c::fmEndWait,
};
/* 801B1200-801B1210 .text backClothDispInit__12dMenu_Fmap_cFv */
void dMenu_Fmap_c::backClothDispInit() {
mClPane.pane->hide();
@@ -930,6 +960,7 @@ void dMenu_Fmap_c::checkMarkCheck3() {
((J2DPicture*)mKr0xPanes[i].pane)->changeTexture(korogStat[stat], 0);
mKr0xPanes[i].pane->show();
#if VERSION > VERSION_DEMO
if (dComIfGs_checkBottle(dItemNo_FOREST_WATER_e)) {
mKr0xPanes[i].mInitAlpha = 0xC0;
mKr0xPanes[i].mNowAlpha = 0xC0;
@@ -939,6 +970,7 @@ void dMenu_Fmap_c::checkMarkCheck3() {
mKr0xPanes[i].mNowAlpha = 0x30;
fopMsgM_paneScaleXY(&mKr0xPanes[i], 1.0f);
}
#endif
fopMsgM_setAlpha(&mKr0xPanes[i]);
}
@@ -964,10 +996,9 @@ void dMenu_Fmap_c::setPaneOnOff(J2DScreen* i_screen, u32 i_arg2, bool i_arg3) {
/* 801B1978-801B19F0 .text childPaneMoveSp__12dMenu_Fmap_cFP18fopMsgM_pane_classP18fopMsgM_pane_classfff */
void dMenu_Fmap_c::childPaneMoveSp(fopMsgM_pane_class* i_pane1, fopMsgM_pane_class* i_pane2, f32 i_scale, f32 i_x, f32 i_y) {
f32 half = 0.5f;
f32 ySize = i_pane2->mSize.y * half;
i_pane1->mPosCenter.x = i_pane2->mSize.x * half + i_scale * (i_pane1->mPosCenterOrig.x - i_pane2->mSizeOrig.x * half);
i_pane1->mPosCenter.y = ySize + i_scale * (i_pane1->mPosCenterOrig.y - i_pane2->mSizeOrig.y * half);
f32 ySize = i_pane2->mSize.y / 2.0f;
i_pane1->mPosCenter.x = i_pane2->mSize.x / 2.0f + i_scale * (i_pane1->mPosCenterOrig.x - i_pane2->mSizeOrig.x / 2.0f);
i_pane1->mPosCenter.y = ySize + i_scale * (i_pane1->mPosCenterOrig.y - i_pane2->mSizeOrig.y / 2.0f);
fopMsgM_paneScale(i_pane1, i_x, i_y);
}
@@ -1138,7 +1169,8 @@ void dMenu_Fmap_c::SalvItmDispChgFast() {
void dMenu_Fmap_c::changeSalvageGetItem(u8 i_no) {
s8 wy = getCtCurY();
s8 wx = getCtCurX();
aramCmapDatPnt_t* pnt = getGridNumToCmapDatPnt(wx + (wy + 3) * 7 + 3);
int grid = wx + (wy + 3) * 7 + 3;
aramCmapDatPnt_t* pnt = getGridNumToCmapDatPnt(grid);
if (dComIfGs_isCompleteCollectMap(pnt->collectMapNo)) {
mFullMapMode = true;
@@ -1242,11 +1274,10 @@ void dMenu_Fmap_c::windArrowColorAnime() {
s16 holdA = g_mfHIO.mWindArrowHold1;
s16 holdB = g_mfHIO.mWindArrowHold2;
s16 cycle = holdA + period * 2 + holdB;
JUtility::TColor colorA;
JUtility::TColor colorB;
mWnd1Pane.mUserArea++;
s16 cycle = holdA + period * 2 + holdB;
if (mWnd1Pane.mUserArea > cycle) {
mWnd1Pane.mUserArea = 0;
}
@@ -1340,6 +1371,57 @@ void dMenu_Fmap_c::checkMarkAnime() {
}
}
#if VERSION == VERSION_DEMO
void dMenu_Fmap_c::krogMarkAnimeInit() {
field_0x517D = g_mfHIO.field_0xE9;
field_0x517E = 1;
}
#endif
#if VERSION == VERSION_DEMO
void dMenu_Fmap_c::krogMarkAnime() {
/* Nonmatching */
JUtility::TColor white;
JUtility::TColor black;
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_0102)) {
return;
}
f32 alpha = fopMsgM_valueIncrease(g_mfHIO.mCheckMarkAnimFrame, mCheckMarkTimer, 2);
if (mCheckMarkToggle == 0) {
alpha = 1.0f - alpha;
}
white.r = g_mfHIO.mCheckMarkWhite.r + alpha * (mCk1Color2.r - g_mfHIO.mCheckMarkWhite.r);
white.g = g_mfHIO.mCheckMarkWhite.g + alpha * (mCk1Color2.g - g_mfHIO.mCheckMarkWhite.g);
white.b = g_mfHIO.mCheckMarkWhite.b + alpha * (mCk1Color2.b - g_mfHIO.mCheckMarkWhite.b);
white.a = mCk1Color2.a;
black.r = g_mfHIO.mCheckMarkBlack.r + alpha * (mCk1Color.r - g_mfHIO.mCheckMarkBlack.r);
black.g = g_mfHIO.mCheckMarkBlack.g + alpha * (mCk1Color.g - g_mfHIO.mCheckMarkBlack.g);
black.b = g_mfHIO.mCheckMarkBlack.b + alpha * (mCk1Color.b - g_mfHIO.mCheckMarkBlack.b);
black.a = mCk1Color.a;
if (mCheckMarkTimer == 0) {
mCheckMarkTimer = g_mfHIO.mCheckMarkAnimFrame;
mCheckMarkToggle ^= 1;
} else {
mCheckMarkTimer--;
}
for (int i = 0; i < 8; i++) {
if (mKr0xPanes[i].pane->isVisible()) {
u32 bit = i & 7;
bool stat = dComIfGs_isEventBit(dSv_event_flag_c::UNK_0102) ||
((dComIfGs_getEventReg(dSv_event_flag_c::UNK_9EFF) & 0xFF) >> bit & 1);
if (stat == 0) {
((J2DPicture*)mKr0xPanes[i].pane)->setBlackWhite(black, white);
}
}
}
}
#endif
/* 801B3658-801B3698 .text readFmapTexture__12dMenu_Fmap_cFPCc */
u32 dMenu_Fmap_c::readFmapTexture(const char* i_filename) {
JKRArchive* archive = dComIfGp_getFmapArchive();
@@ -1387,10 +1469,9 @@ void dMenu_Fmap_c::setDispIslandPos(s8 i_x, s8 i_y) {
/* 801B392C-801B3984 .text setIslandPos__12dMenu_Fmap_cFP18fopMsgM_pane_classff */
void dMenu_Fmap_c::setIslandPos(fopMsgM_pane_class* i_pane, f32 i_x, f32 i_y) {
f32 scale = 0.5f;
f32 newX = mClbPane.mSizeOrig.x * scale;
f32 newX = mClbPane.mSizeOrig.x / 2.0f;
i_pane->mPosCenterOrig.x = newX + i_x;
f32 newY = mClbPane.mSizeOrig.y * scale;
f32 newY = mClbPane.mSizeOrig.y / 2.0f;
i_pane->mPosCenterOrig.y = newY + i_y;
i_pane->mPosCenter = i_pane->mPosCenterOrig;
@@ -1399,8 +1480,9 @@ void dMenu_Fmap_c::setIslandPos(fopMsgM_pane_class* i_pane, f32 i_x, f32 i_y) {
/* 801B3984-801B3A2C .text changeFmapTexture__12dMenu_Fmap_cFScSc */
void dMenu_Fmap_c::changeFmapTexture(s8 i_x, s8 i_y) {
int grid = i_x + (i_y + 3) * 7 + 3;
char filename[64];
sprintf(filename, "R%02X_b.bti", i_x + (i_y + 3) * 7 + 4);
sprintf(filename, "R%02X_b.bti", grid + 1);
if (readFmapTexture(filename) == NULL) {
mR01bPane.pane->hide();
mR01gPane.pane->hide();
@@ -1453,11 +1535,10 @@ void dMenu_Fmap_c::setDspLargeMapLink() {
f32 x = mPlayerPos.x - 100000.0f * mGridX;
f32 y = mPlayerPos.y - 100000.0f * mGridY;
f32 scale = 0.5f;
f32 size = mClbPane.mSizeOrig.x;
mLnk2Pane.mPosCenterOrig.x = size * scale + x * ((size - 50.0f) / 100000.0f);
mLnk2Pane.mPosCenterOrig.x = size / 2.0f + x * ((size - 50.0f) / 100000.0f);
size = mClbPane.mSizeOrig.y;
mLnk2Pane.mPosCenterOrig.y = size * scale + y * ((size - 50.0f) / 100000.0f);
mLnk2Pane.mPosCenterOrig.y = size / 2.0f + y * ((size - 50.0f) / 100000.0f);
mLnk2Pane.mPosCenter.x = mLnk2Pane.mPosCenterOrig.x;
mLnk2Pane.mPosCenter.y = mLnk2Pane.mPosCenterOrig.y;
fopMsgM_cposMove(&mLnk2Pane);
@@ -1467,9 +1548,9 @@ void dMenu_Fmap_c::setDspLargeMapLink() {
y = mShipPos.y - 100000.0f * mTargetGridY;
size = mClbPane.mSizeOrig.x;
mSpi2Pane.mPosCenterOrig.x = size * scale + x * ((size - 50.0f) / 100000.0f);
mSpi2Pane.mPosCenterOrig.x = size / 2.0f + x * ((size - 50.0f) / 100000.0f);
size = mClbPane.mSizeOrig.y;
mSpi2Pane.mPosCenterOrig.y = size * scale + y * ((size - 50.0f) / 100000.0f);
mSpi2Pane.mPosCenterOrig.y = size / 2.0f + y * ((size - 50.0f) / 100000.0f);
mSpi2Pane.mPosCenter.x = mSpi2Pane.mPosCenterOrig.x;
mSpi2Pane.mPosCenter.y = mSpi2Pane.mPosCenterOrig.y;
fopMsgM_cposMove(&mSpi2Pane);
@@ -1537,8 +1618,10 @@ void dMenu_Fmap_c::setDspHugeMapLink() {
#if VERSION <= VERSION_JPN
if (!mFishmanActive) {
mStl1Pane.pane->hide();
#if VERSION > VERSION_DEMO
mLnk3Pane.pane->hide();
mDspHugeMapLink = false;
#endif
return;
}
#endif
@@ -1568,9 +1651,8 @@ void dMenu_Fmap_c::setDspHugeMapLink() {
mMapSelectActive = false;
}
f32 scale = 0.5f;
f32 baseX = mR01gPane.mPosTopLeftOrig.x + mR01gPane.mSizeOrig.x * scale;
f32 baseY = mR01gPane.mPosTopLeftOrig.y + mR01gPane.mSizeOrig.y * scale;
f32 baseX = mR01gPane.mPosTopLeftOrig.x + mR01gPane.mSizeOrig.x / 2.0f;
f32 baseY = mR01gPane.mPosTopLeftOrig.y + mR01gPane.mSizeOrig.y / 2.0f;
mLnk3Pane.mPosCenterOrig.x = baseX + dx * (mR01gPane.mSizeOrig.x / 20000.0f);
mLnk3Pane.mPosCenterOrig.y = baseY + dy * (mR01gPane.mSizeOrig.y / 20000.0f);
mLnk3Pane.mPosCenter.x = mLnk3Pane.mPosCenterOrig.x;
@@ -1584,11 +1666,15 @@ void dMenu_Fmap_c::setDspHugeMapLink() {
if (shipDx <= 10000.0f && shipDx >= -10000.0f && shipDy <= 10000.0f &&
shipDy >= -10000.0f) {
mDspHugeMapShip = true;
#if VERSION > VERSION_DEMO
mShipOpenWater = false;
#endif
} else {
mDspHugeMapShip = false;
#if VERSION > VERSION_DEMO
mShipOpenWater = true;
mSpi3Pane.pane->hide();
#endif
}
mSpi3Pane.mPosCenterOrig.x = baseX + shipDx * (mR01gPane.mSizeOrig.x / 20000.0f);
@@ -1757,7 +1843,9 @@ void dMenu_Fmap_c::_delete() {
delete outFont2;
}
dComIfGp_getFmapResArchive()->removeResourceAll();
#if VERSION > VERSION_DEMO
dComIfGp_getFmapArchive()->removeResourceAll();
#endif
mDoHIO_deleteChild(g_mfHIO.mNo);
}
@@ -1773,6 +1861,9 @@ void dMenu_Fmap_c::FmapProcMain() {
(this->*fmapProcMain[mFmapProcIdx])();
windArrowColorAnime();
checkMarkAnime();
#if VERSION == VERSION_DEMO
krogMarkAnime();
#endif
#if VERSION > VERSION_JPN
gShipMarkAnime();
#endif
@@ -2161,10 +2252,15 @@ BOOL dMenu_Fmap_c::paneTranceZoomMap(s16 i_frame, u8 i_max, f32 i_transStartX, f
J2DTextBox::TFontSize ktx1FontSize;
J2DTextBox::TFontSize ktx2FontSize;
f32 scaleAdj = alpha * (i_scaleEnd - i_scaleStart);
f32 f0 = i_transEndX - i_transStartX;
f32 f1 = i_transEndY - i_transStartY;
f32 f2 = i_scaleEnd - i_scaleStart;
f32 f29 = alpha * f0;
f32 f28 = alpha * f1;
f32 scaleAdj = alpha * f2;
fopMsgM_paneScaleXY(&mClbPane, i_scaleStart + scaleAdj);
scale = i_scaleStart + scaleAdj;
fopMsgM_paneTrans(&mClbPane, (i_transStartX + alpha * (i_transEndX - i_transStartX)), i_transStartY + alpha * (i_transEndY - i_transStartY));
fopMsgM_paneTrans(&mClbPane, i_transStartX + f29, i_transStartY + f28);
if (i_flag == 1) {
alpha = 1.0f - alpha;
}
@@ -2211,7 +2307,7 @@ BOOL dMenu_Fmap_c::paneTranceZoomMap(s16 i_frame, u8 i_max, f32 i_transStartX, f
if (mClb2Pane.pane->isVisible()) {
childPaneMoveSp(&mClb2Pane, &mClbPane, alpha, scale, scale);
}
for (int i = 0; i < 9; i++) {
for (int i = 0; i < ARRAY_SSIZE(mSc1xPanes); i++) {
childPaneMoveSp(&mSc1xPanes[i], &mClbPane, alpha, scale, scale);
}
@@ -2432,7 +2528,7 @@ bool dMenu_Fmap_c::_open_warpMode() {
if (ret == TRUE) {
mFrameTimer = 0;
for (int i = 0; i < 9; i++) {
for (int i = 0; i < FMAP_WARP_COUNT; i++) {
mWrapSpotEmitters[i]->playDrawParticle();
}
mWrapBackEmitter->clearStatus(JPAEmtrStts_StopDraw);
@@ -2446,7 +2542,9 @@ bool dMenu_Fmap_c::_open_warpMode() {
void dMenu_Fmap_c::init_warpMode() {
mDoAud_seStart(JA_SE_SHIPPU_CHART_OPEN);
mFmapMode = FMAP_MODE_WARP;
#if VERSION > VERSION_DEMO
mButtonIconMode = FMAP_BTN_ICON_WARP;
#endif
if (dComIfGs_getOptRuby()) {
mWt1Pane.pane->hide();
@@ -2461,6 +2559,10 @@ void dMenu_Fmap_c::init_warpMode() {
}
selCursorInit();
selCursorMoveWarp();
#if VERSION == VERSION_DEMO
krogMarkAnimeInit();
krogMarkAnime();
#endif
mWarpSubState = FMAP_WARP_SEL_YES;
cXyz spotEmitter;
@@ -2470,10 +2572,10 @@ void dMenu_Fmap_c::init_warpMode() {
mWrapBackEmitter->setStatus(JPAEmtrStts_StopDraw);
int i = 0;
dMf_HIO_c& hio = g_mfHIO;
for (; i < 9; i++) {
spotEmitter.x = hio.mWarpSpotPosX[i];
spotEmitter.y = hio.mWarpSpotPosY[i];
for (; i < DEMO_SELECT(8, FMAP_WARP_COUNT); i++) {
// !@bug Demo iterates 8 times instead of 7, accessing out of bounds of these three arrays.
spotEmitter.x = g_mfHIO.mWarpSpotPosX[i];
spotEmitter.y = g_mfHIO.mWarpSpotPosY[i];
spotEmitter.z = 0.0f;
setWrapSpotEmitter(i, spotEmitter);
mWrapSpotEmitters[i]->stopDrawParticle();
@@ -2560,7 +2662,7 @@ void dMenu_Fmap_c::wrapMove() {
paneTranceWarpMsg(&mYsk0Pane, mFrameTimer, g_mfHIO.mWarpMsgAnimFrame, g_mfHIO.mWarpYesNoPosY, 0.0f, 0, 0);
paneTranceWarpMsg(&mNok0Pane, mFrameTimer, g_mfHIO.mWarpMsgAnimFrame, g_mfHIO.mWarpYesNoPosY, 0.0f, 0, 0);
areaTextChangeAnimeInit();
for (int i = 0; i < 9; i++) {
for (int i = 0; i < FMAP_WARP_COUNT; i++) {
mWrapSpotEmitters[i]->stopDrawParticle();
}
mWarpProcIdx = WARP_PROC_SEL_WIN_FADE_IN;
@@ -2572,7 +2674,7 @@ void dMenu_Fmap_c::wrapMove() {
}
mMapClose = true;
stopWrapBackEmitter();
for (int i = 0; i < 9; i++) {
for (int i = 0; i < FMAP_WARP_COUNT; i++) {
mWrapSpotEmitters[i]->stopDrawParticle();
stopWrapSpotEmitter(i);
}
@@ -2685,7 +2787,7 @@ void dMenu_Fmap_c::wrapSelWinFadeOut() {
mFrameTimer++;
if (backAlpha == TRUE && msg == TRUE && msg2 == TRUE && yesMove == TRUE && noMove == TRUE) {
mFrameTimer = 0;
for (int i = 0; i < 9; i++) {
for (int i = 0; i < FMAP_WARP_COUNT; i++) {
mWrapSpotEmitters[i]->playDrawParticle();
}
mWarpProcIdx = WARP_PROC_MOVE;
@@ -2709,7 +2811,7 @@ void dMenu_Fmap_c::wrapSelWarp() {
mMapClose = true;
stopWrapBackEmitter();
for (int i = 0; i < 9; i++) {
for (int i = 0; i < FMAP_WARP_COUNT; i++) {
mWrapSpotEmitters[i]->stopDrawParticle();
stopWrapSpotEmitter(i);
}
@@ -2725,7 +2827,7 @@ void dMenu_Fmap_c::warpAreaAnime0() {
cXyz pos;
scale.z = 0.0f;
pos.z = 0.0f;
for (int i = 0; i < 9; i++) {
for (int i = 0; i < FMAP_WARP_COUNT; i++) {
pos.x = g_mfHIO.mWarpSpotPosX[i];
pos.y = g_mfHIO.mWarpSpotPosY[i];
mWrapSpotEmitters[i]->setGlobalTranslation(pos);
@@ -3278,7 +3380,9 @@ void dMenu_Fmap_c::fmEndWait() {
/* 801BAF18-801BAFCC .text _open_wallPaper__12dMenu_Fmap_cFv */
bool dMenu_Fmap_c::_open_wallPaper() {
if (mFrameTimer == 0) {
#if VERSION > VERSION_DEMO
mButtonIconMode = FMAP_BTN_ICON_WALLPAPER;
#endif
selCursorHide();
}
BOOL ret = paneTransBase(mFrameTimer, g_mfHIO.mBaseAnimFrame, g_mfHIO.mOpenPosY, 0.0, 0, 0);