d_menu_dmap mostly done (#2456)

* d_menu_dmap mostly done

* d_npc_lib equivalent

* m_Do_printf matching
This commit is contained in:
TakaRikka 2025-05-25 13:29:53 -07:00 committed by GitHub
parent de30e871af
commit 0e35bbddb9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 2154 additions and 1375 deletions

View File

@ -417,7 +417,7 @@ config.libs = [
"host": True,
"objects": [
Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_main.cpp"),
Object(NonMatching, "m_Do/m_Do_printf.cpp"),
Object(MatchingFor("GZ2E01"), "m_Do/m_Do_printf.cpp"),
Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_audio.cpp"),
Object(MatchingFor("GZ2E01", "GZ2J01"), "m_Do/m_Do_controller_pad.cpp"),
Object(Equivalent, "m_Do/m_Do_graphic.cpp"), # weak func order

View File

@ -47,6 +47,7 @@ public:
void setFirstWaitTime(s16 time) { mFirstWaitTime = time; }
s16 getYwaitTimer() { return mYwaitTimer; }
s16 getXwaitTimer() { return mXwaitTimer; }
/* 0x04 */ f32 mThreshold;
/* 0x08 */ f32 field_0x08;

View File

@ -25,7 +25,7 @@ struct dMenu_DmapMapCtrl_c;
class renderingDmap_c : public renderingPlusDoor_c {
public:
/* 801C0380 */ virtual ~renderingDmap_c() {}
/* 801C051C */ renderingDmap_c();
/* 801C051C */ renderingDmap_c() {}
/* 801C0C48 */ virtual const GXColor* getColor(int);
/* 801C0C10 */ virtual int getLineWidth(int);
@ -53,7 +53,8 @@ public:
/* 0x34 */ f32 field_0x34;
};
struct dMenu_DmapBg_c : public dDlst_base_c, public dMenuMapCommon_c {
class dMenu_DmapBg_c : public dDlst_base_c, public dMenuMapCommon_c {
public:
/* 801B7F20 */ dMenu_DmapBg_c(JKRExpHeap*, STControl*);
/* 801B8110 */ void mapScreenInit();
/* 801B884C */ void mapScreenAnime();
@ -81,13 +82,21 @@ struct dMenu_DmapBg_c : public dDlst_base_c, public dMenuMapCommon_c {
/* 801BB464 */ void calcCursor();
/* 801BB468 */ void drawCursor();
f32 getMapWidth() { return field_0xda0; }
f32 getMapHeight() { return field_0xda4; }
J2DPicture* getMapPane() { return field_0xcc4; }
void setDPDFloorSelCurPos(s8 i_pos) { field_0xdd6 = i_pos; }
/* 0xC98 */ JKRExpHeap* field_0xc98;
f32 getMapWidth() { return mMapWidth; }
f32 getMapHeight() { return mMapHeight; }
J2DPicture* getMapPane() { return mMapPane; }
dMenu_ItemExplain_c* getItemExplainPtr() { return mpItemExplain; }
void setAllTrans(f32 param_0, f32 param_1) {
field_0xd94 = param_0;
field_0xd98 = param_1;
}
/* 0xC98 */ JKRExpHeap* mpHeap;
/* 0xC9C */ JKRExpHeap* mpTalkHeap;
/* 0xCA0 */ STControl* field_0xca0;
/* 0xCA0 */ STControl* mpStick;
/* 0xCA4 */ J2DScreen* mBaseScreen;
/* 0xCA8 */ J2DScreen* mMapScreen[2];
/* 0xCB0 */ int field_0xcb0;
@ -95,7 +104,7 @@ struct dMenu_DmapBg_c : public dDlst_base_c, public dMenuMapCommon_c {
/* 0xCB8 */ J2DScreen* mDecorateScreen;
/* 0xCBC */ J2DScreen* mFloorScreen;
/* 0xCC0 */ dSelect_cursor_c* mpDrawCursor;
/* 0xCC4 */ J2DPicture* field_0xcc4;
/* 0xCC4 */ J2DPicture* mMapPane;
/* 0xCC8 */ dMsgString_c* mString;
/* 0xCCC */ CPaneMgrAlphaMorf* mpBaseRoot;
/* 0xCD0 */ CPaneMgrAlphaMorf* mpMapRoot[2];
@ -113,14 +122,16 @@ struct dMenu_DmapBg_c : public dDlst_base_c, public dMenuMapCommon_c {
/* 0xD08 */ CPaneMgr* mpButtonAB[2];
/* 0xD10 */ CPaneMgr* mpButtonText[2];
/* 0xD18 */ dMenu_ItemExplain_c* mpItemExplain;
/* 0xD1C */ mDoDvdThd_mountArchive_c* field_0xd1c;
/* 0xD20 */ JKRArchive* field_0xd20;
/* 0xD1C */ mDoDvdThd_mountArchive_c* mpArchiveMount;
/* 0xD20 */ JKRArchive* mpArchive;
/* 0xD24 */ J2DPicture* mpBackTexture;
/* 0xD28 */ J2DAnmTextureSRTKey* field_0xd28[1];
/* 0xD2C */ u8 field_0xd2c[0xd30 - 0xd2c];
/* 0xD30 */ dMeterHaihai_c* mpMeterHaihai;
/* 0xD34 */ dMsgFlow_c field_0xd34;
/* 0xD80 */ u8 field_0xd80[0xc];
/* 0xD34 */ dMsgFlow_c mMsgFlow;
/* 0xD80 */ f32 field_0xd80;
/* 0xD84 */ f32 field_0xd84;
/* 0xD88 */ f32 field_0xd88;
/* 0xD8C */ u8 field_0xd8c;
/* 0xD8D */ u8 field_0xd8d;
/* 0xD8E */ u8 field_0xd8e;
@ -132,8 +143,8 @@ struct dMenu_DmapBg_c : public dDlst_base_c, public dMenuMapCommon_c {
/* 0xD94 */ f32 field_0xd94;
/* 0xD98 */ f32 field_0xd98;
/* 0xD9C */ f32 field_0xd9c;
/* 0xDA0 */ f32 field_0xda0;
/* 0xDA4 */ f32 field_0xda4;
/* 0xDA0 */ f32 mMapWidth;
/* 0xDA4 */ f32 mMapHeight;
/* 0xDA8 */ f32 field_0xda8;
/* 0xDAC */ f32 field_0xdac;
/* 0xDB0 */ f32 field_0xdb0;
@ -181,7 +192,7 @@ public:
/* 801BEAFC */ void itemInfo_init_proc();
/* 801BEB0C */ void itemInfo_proc();
/* 801BEB44 */ void itemSelect();
/* 801BEF28 */ void getNextItem(int);
/* 801BEF28 */ int getNextItem(int);
/* 801BEFCC */ void itemSelectAnmInit();
/* 801BF030 */ void itemSelectAnm();
/* 801BF180 */ void itemInfoOpenAnm();
@ -189,7 +200,7 @@ public:
/* 801BF278 */ void itemInfoCloseAnm();
/* 801BF334 */ u8 getNextStatus();
/* 801BF410 */ bool isSync();
/* 801BF464 */ void isKeyCheck();
/* 801BF464 */ bool isKeyCheck();
/* 801BF4A4 */ void infoModeChange_init_proc();
/* 801BF528 */ void infoModeChange_proc();
/* 801BF688 */ void mapModeChange_init_proc();
@ -200,7 +211,7 @@ public:
/* 801BF9E0 */ void mapMode_proc();
/* 801BFA84 */ void floorSelect_init_proc();
/* 801BFA88 */ void floorSelect_proc();
/* 801BFC78 */ void itemCarryCheck();
/* 801BFC78 */ int itemCarryCheck();
/* 801BFCAC */ void floorChange_init_proc();
/* 801BFD5C */ void floorChange_proc();
/* 801BFF84 */ void zoomWait_init_proc();
@ -216,13 +227,16 @@ public:
u8 getZoomState() { return mZoomState; }
u16 getCMessasgeNum() { return mCMessageNum; }
s8 getBottomFloor() { return mBottomFloor; }
s8 getFloorAll() { return mFloorAll; }
s8 getFloorAll() { return (mFloorAll - mBottomFloor) + 1; }
s8 getFloorPos(s8 param_0) { return param_0 - mBottomFloor; }
u16 getCMessageNum() { return mCMessageNum; }
static dMenu_Dmap_c* myclass;
private:
/* 0x004 */ dMenu_DmapMapCtrl_c* mMapCtrl;
/* 0x008 */ dMenu_DmapBg_c* mpDrawBg[2];
/* 0x008 */ dMenu_DmapBg_c* mpDrawBg;
/* 0x00C */ u8 field_0xc[0x10 - 0xC];
/* 0x010 */ CPaneMgr* field_0x10;
/* 0x014 */ CPaneMgr* mSelFloor[8];
/* 0x034 */ CPaneMgr* mIconLinkPos[8];
@ -233,8 +247,8 @@ private:
/* 0x094 */ CPaneMgr* field_0x94;
/* 0x098 */ CPaneMgr* field_0x98;
/* 0x09C */ u8 field_0x9c[0x44];
/* 0x0E0 */ mDoDvdThd_mountArchive_c* field_0xe0;
/* 0x0E4 */ JKRArchive* field_0xe4;
/* 0x0E0 */ mDoDvdThd_mountArchive_c* mpDresArchiveMount;
/* 0x0E4 */ JKRArchive* mpDresArchive;
/* 0x0E8 */ JKRExpHeap* field_0xe8;
/* 0x0EC */ JKRExpHeap* mDmapHeap;
/* 0x0F0 */ STControl* mSelStick;
@ -260,7 +274,7 @@ private:
/* 0x16A */ u16 field_0x16a;
/* 0x16C */ s8 field_0x16c;
/* 0x16D */ s8 field_0x16d;
/* 0x16E */ u8 field_0x16e;
/* 0x16E */ s8 field_0x16e;
/* 0x16F */ u8 field_0x16f;
/* 0x170 */ s8 mFloorAll;
/* 0x171 */ s8 mBottomFloor;
@ -271,8 +285,8 @@ private:
/* 0x178 */ u8 field_0x178;
/* 0x179 */ u8 field_0x179;
/* 0x17A */ u8 mInOutDir;
/* 0x17B */ u8 field_0x17b;
/* 0x17C */ u8 field_0x17c;
/* 0x17B */ u8 m_process;
/* 0x17C */ u8 m_itemSubProcess;
/* 0x17D */ u8 field_0x17d;
/* 0x17E */ u8 field_0x17e;
/* 0x17F */ u8 mZoomState;
@ -281,7 +295,7 @@ private:
/* 0x182 */ u8 field_0x182;
/* 0x183 */ u8 field_0x183;
/* 0x184 */ bool field_0x184;
/* 0x185 */ u8 field_0x185;
/* 0x185 */ bool field_0x185;
};
#endif /* D_MENU_D_MENU_DMAP_H */

View File

@ -6,13 +6,14 @@
class dMenu_DmapMap_c {
public:
/* 801C04AC */ virtual ~dMenu_DmapMap_c();
/* 801C04AC */ virtual ~dMenu_DmapMap_c() {}
/* 801C0CD8 */ void _create(u16, u16, u16, u16, void*);
/* 801C0D04 */ void _delete();
/* 801C0D70 */ void setTexture(u16, u16, u16, u16);
/* 801C0E4C */ void setPos(int, int, f32, f32, f32, bool, f32);
const renderingDmap_c* getRendPointer(int i_no) const { return &mRend[i_no]; }
ResTIMG* getResTIMGPointer(int i_no) const { return mResTIMG[i_no]; }
/* 0x04 */ renderingDmap_c mRend[2];
/* 0x74 */ ResTIMG* mResTIMG[2];
@ -22,13 +23,57 @@ public:
class dMenu_StageMapCtrl_c : public dMenu_DmapMap_c {
public:
dMenu_StageMapCtrl_c() {
field_0x8c = NULL;
field_0x90 = 0.0f;
field_0x94 = 0.0f;
field_0x98 = 0.0f;
field_0x9c = 0.0f;
field_0xa0 = 0.0f;
field_0xa4 = 0.0f;
field_0xa8 = 0.0f;
field_0xac = 0.0f;
field_0xb0 = 0.0f;
field_0xb4 = 0.0f;
field_0xb8 = 0.0f;
field_0xbc = 0.0f;
field_0xc0 = 0.0f;
field_0xc4 = 0.0f;
field_0xc8 = 0.0f;
field_0xcc = 0.0f;
field_0xd0 = 0.0f;
field_0xd4 = 0.0f;
field_0xd8 = 0.0f;
field_0xe4 = 0;
field_0xe6 = 0;
field_0xe7 = 0;
field_0xe8 = 0;
field_0xe9 = 0;
field_0xea = 0;
field_0xeb = 0;
field_0xec = 0;
field_0xed = 0;
field_0xee = 0;
field_0xef = 0;
field_0xf0 = 0;
field_0xf1 = 0;
field_0xf2 = 0;
field_0xf3 = 0;
field_0xf4 = 0;
field_0xf5 = 0;
field_0xf6 = 0;
field_0xf7 = 0;
field_0xf8 = false;
field_0xf9 = false;
}
virtual ~dMenu_StageMapCtrl_c() {}
virtual bool isEnableZoomMove() const;
virtual void calcZoomCenter(f32*, f32*);
virtual void getInitWholeMapScale(f32*, f32, f32, f32, f32);
virtual void getInitDispCenter(f32*, f32*);
virtual void getZoomMinMaxCheck(f32*, f32*, f32*, f32*, bool*, bool*);
virtual f32 getZoomCmPerPixel();
virtual bool isEnableZoomMove() const = 0;
virtual void calcZoomCenter(f32*, f32*) = 0;
virtual void getInitWholeMapScale(f32*, f32, f32, f32, f32) = 0;
virtual void getInitDispCenter(f32*, f32*) = 0;
virtual void getZoomMinMaxCheck(f32*, f32*, f32*, f32*, bool*, bool*) = 0;
virtual f32 getZoomCmPerPixel() = 0;
virtual void draw();
/* 801C0EE0 */ f32 getMapBlendPer() const;
@ -70,6 +115,25 @@ public:
u8 getDisableZoomMoveFlgX() const { return field_0xf8; }
u8 getDisableZoomMoveFlgZ() const { return field_0xf9; }
s8 getNowStayFloorNo() const { return field_0xe7; }
s8 getTopFloorNo() const { return field_0xed; }
s8 getBottomFloorNo() const { return field_0xee; }
s8 getDispFloorNo() const { return field_0xeb; }
s8 getDispFloor2No() const { return field_0xec; }
f32 getDispCenterX() const { return field_0x9c; }
f32 getDispCenterZ() const { return field_0xa0; }
f32 getStageMapSizeX() const { return dMpath_c::getSizeX(); }
f32 getStageMapSizeZ() const { return dMpath_c::getSizeZ(); }
f32 getZoomCenterMaxX() { return field_0xcc; }
f32 getZoomCenterMinX() { return field_0xc8; }
f32 getZoomCenterMaxZ() { return field_0xd4; }
f32 getZoomCenterMinZ() { return field_0xd0; }
f32 getPixelPerCm() const { return 1.0f / field_0xbc; }
f32 makeStayFloorBlendPer(int param_0, f32 param_1) {
return param_0 + param_1;
}
@ -82,6 +146,11 @@ public:
return std::fmod(param_0, 1.0f);
}
bool isEndZoomIn() const { return field_0xf5 == 2; }
bool isEndZoomOut() const { return field_0xf5 == 0; }
ResTIMG* getResTIMGPointer(int i_no) const { return dMenu_DmapMap_c::getResTIMGPointer(i_no); }
static f32 m_zoomCenterMinX;
static f32 m_zoomCenterMaxX;
static f32 m_zoomCenterMinZ;

View File

@ -7,7 +7,46 @@ class J2DPicture;
class JKRArchive;
class dSelect_cursor_c;
struct dMenuMapCommon_c {
enum dMenuMapIcon_e {
ICON_UNK_0_e,
ICON_UNK_1_e,
ICON_DUNGEON_WARP_e,
ICON_BOSS_GANON_e,
ICON_BOSS_e,
ICON_LIGHT_DROP_e,
ICON_LIGHT_BALL_e,
ICON_CANNON_BALL_e,
ICON_COPY_STATUE_e,
ICON_YETO_e,
ICON_YETA_e,
ICON_GOLD_WOLF_e,
ICON_MONKEY_e,
ICON_COACH_e,
ICON_KEY_e,
ICON_OOCCOO_e,
ICON_OOCCOO_JR_e,
ICON_LINK_e,
ICON_DESTINATION_e,
ICON_TREASURE_CHEST_e,
ICON_DUNGEON_ENTER_e,
ICON_LINK_ENTER_e,
ICON_LV8_WARP_e,
ICON_MAX_e,
};
class dMenuMapCommon_c {
public:
struct IconInfo_s {
/* 0x00 */ f32 pos_x;
/* 0x04 */ f32 pos_y;
/* 0x08 */ f32 scale;
/* 0x0C */ f32 rotation;
/* 0x10 */ f32 alpha_rate;
/* 0x14 */ u8 icon_no;
/* 0x15 */ u8 _15;
};
/* 801C2718 */ dMenuMapCommon_c();
/* 801C27B4 */ virtual ~dMenuMapCommon_c();
/* 801C28D8 */ void initiate(JKRArchive*);
@ -18,8 +57,8 @@ struct dMenuMapCommon_c {
/* 801C4494 */ void setBlendRatio(u8, f32, f32);
/* 801C452C */ void blinkMove(s16);
/* 801C4600 */ void moveLightDropAnime();
/* 801C4738 */ float getIconSizeX(u8 index);
/* 801C4778 */ float getIconSizeY(u8 index);
/* 801C4738 */ f32 getIconSizeX(u8 index);
/* 801C4778 */ f32 getIconSizeY(u8 index);
/* 801C47C4 */ void debugIcon();
void setCenterPosX(f32 center_pos, u8 param_2) {
@ -27,16 +66,6 @@ struct dMenuMapCommon_c {
_c90 = param_2;
}
struct data {
/* 0x00 */ float _0;
/* 0x04 */ float _4;
/* 0x08 */ float _8;
/* 0x0C */ float _C;
/* 0x10 */ float _10;
/* 0x14 */ u8 _14;
/* 0x15 */ u8 _15;
};
struct Stage_c {
// Incomplete class
@ -73,21 +102,21 @@ struct dMenuMapCommon_c {
};
/* 0x004 */ J2DPicture* mPictures[23];
/* 0x060 */ J2DPicture* _60;
/* 0x060 */ J2DPicture* mLightDropPic;
/* 0x064 */ dSelect_cursor_c* mpDrawCursor;
/* 0x068 */ dSelect_cursor_c* mpPortalIcon;
/* 0x06C */ u32 _6c;
/* 0x070 */ data _70[128];
/* 0x070 */ IconInfo_s mIconInfo[128];
/* 0xC70 */ u16 mIconNum;
/* 0xC72 */ s16 _c72;
/* 0xC74 */ s16 _c74;
/* 0xC72 */ s16 mBlinkTimer;
/* 0xC74 */ s16 mLightDropFlashTimer;
/* 0xC76 */ u16 _c76;
/* 0xC78 */ float _c78;
/* 0xC7C */ float _c7c;
/* 0xC80 */ float _c80;
/* 0xC84 */ float _c84;
/* 0xC88 */ float _c88;
/* 0xC8C */ float mCenterPosX;
/* 0xC78 */ f32 mBlinkAlpha;
/* 0xC7C */ f32 _c7c;
/* 0xC80 */ f32 _c80;
/* 0xC84 */ f32 _c84;
/* 0xC88 */ f32 _c88;
/* 0xC8C */ f32 mCenterPosX;
/* 0xC90 */ u8 _c90;
};

View File

@ -178,7 +178,7 @@ public:
mCollectCursorPosX = x;
mCollectCursorPosY = y;
}
void setMapDrugFlag(u8 flag) { mMapDrugFlag = flag; }
void setMapDrugFlag(bool flag) { mMapDrugFlag = flag; }
void offTempBit(int i_bit) { mTempBits &= ~(1 << i_bit); }
void onTempBit(int i_bit) { mTempBits |= (1 << i_bit); }
bool isTempBit(int bit) { return mTempBits & (1 << bit); }
@ -276,7 +276,7 @@ public:
/* 0xE8 */ u8 mItemExplainWindowStatus;
/* 0xE9 */ char mSaveStageName[8];
/* 0xF1 */ bool mFloatingMessageWakuVisible;
/* 0xF2 */ u8 mMapDrugFlag;
/* 0xF2 */ bool mMapDrugFlag;
/* 0xF3 */ u8 unk243[5];
};
@ -731,7 +731,7 @@ inline bool dMeter2Info_isShopTalkFlag() {
return g_meter2_info.isShopTalkFlag();
}
inline void dMeter2Info_setMapDrugFlag(u8 flag) {
inline void dMeter2Info_setMapDrugFlag(bool flag) {
g_meter2_info.setMapDrugFlag(flag);
}

View File

@ -58,7 +58,7 @@ public:
/* 8009BE28 */ static void checkTreasureBox(dTres_c::data_s*);
/* 8009C168 */ static void onStatus(u8, int, int);
/* 8009C1F0 */ static void offStatus(u8, int, int);
/* 8009C27C */ static int getBossIconFloorNo(int*);
/* 8009C27C */ static bool getBossIconFloorNo(int*);
/* 8009C360 */ static typeGroupData_c* getFirstData(u8);
/* 8009C39C */ static typeGroupData_c* getNextData(dTres_c::typeGroupData_c*);
/* 8009C3B4 */ static typeGroupData_c* getNextData(dTres_c::typeGroupData_c const*);

File diff suppressed because it is too large Load Diff

View File

@ -396,8 +396,8 @@ inline static s16 rightModeCnvRot(s16 param_0) {
/* 801C0FF8-801C1128 1BB938 0130+00 0/0 1/1 0/0 .text
* getTreasureList__20dMenu_StageMapCtrl_cFPfPfPScPUcPSc */
bool dMenu_StageMapCtrl_c::getTreasureList(f32* param_0, f32* param_1, s8* param_2, u8* param_3,
s8* param_4) {
bool dMenu_StageMapCtrl_c::getTreasureList(f32* o_posX, f32* o_posY, s8* param_2, u8* o_swbit,
s8* o_roomNo) {
bool var_r30 = false;
while (field_0xe4 != 0 && !var_r30) {
@ -405,18 +405,18 @@ bool dMenu_StageMapCtrl_c::getTreasureList(f32* param_0, f32* param_1, s8* param
sp10 = *field_0x8c->getPos();
if (getRendPointer(0)->isDrawIconSingle(field_0x8c->getDataPointer(), (s8)dComIfGp_roomControl_getStayNo(), field_0xf7, true, true, &sp10)) {
cnvPosTo2Dpos(sp10.x, sp10.z, param_0, param_1);
cnvPosTo2Dpos(sp10.x, sp10.z, o_posX, o_posY);
if (param_2 != NULL) {
*param_2 = rightModeCnvRot((s8)field_0x8c->getAngleY()) >> 8;
}
if (param_3 != NULL) {
*param_3 = field_0x8c->getSwBit();
if (o_swbit != NULL) {
*o_swbit = field_0x8c->getSwBit();
}
if (param_4 != NULL) {
*param_4 = field_0x8c->getRoomNo();
if (o_roomNo != NULL) {
*o_roomNo = field_0x8c->getRoomNo();
}
var_r30 = true;

File diff suppressed because it is too large Load Diff

View File

@ -1,58 +1,6 @@
//
// Generated By: dol2asm
// Translation Unit: d/d_npc_lib
//
#include "d/d_npc_lib.h"
#include "dol2asm.h"
#include "SSystem/SComponent/c_math.h"
//
// Forward References:
//
extern "C" void __ct__16dNpcLib_lookat_cFv();
extern "C" void init__16dNpcLib_lookat_cFP8J3DModelPiP5csXyzP5csXyz();
extern "C" void action__16dNpcLib_lookat_cF4cXyz4cXyzP10fopAc_ac_cPA4_fi();
extern "C" void dbView__16dNpcLib_lookat_cFv();
extern "C" void setPrm__16dNpcLib_lookat_cFv();
extern "C" void update__16dNpcLib_lookat_cFv();
extern "C" void limitter__16dNpcLib_lookat_cFPssss();
extern "C" void __dt__16dNpcLib_lookat_cFv();
//
// External References:
//
extern "C" void __dt__4cXyzFv();
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
extern "C" void XYZrotS__14mDoMtx_stack_cFRC5csXyz();
extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
extern "C" void __ct__4cXyzFv();
extern "C" void __dt__5csXyzFv();
extern "C" void __ct__5csXyzFv();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void normalize__4cXyzFv();
extern "C" void isZero__4cXyzCFv();
extern "C" void __apl__5csXyzFR5csXyz();
extern "C" void cM_atan2s__Fff();
extern "C" void __dl__FPv();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void _savegpr_22();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _restgpr_22();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 Zero__5csXyz[4];
extern "C" extern u8 data_80451164[4];
//
// Declarations:
//
/* 80251314-8025140C 24BC54 00F8+00 0/0 0/0 4/4 .text __ct__16dNpcLib_lookat_cFv */
dNpcLib_lookat_c::dNpcLib_lookat_c() {}
@ -71,6 +19,8 @@ void dNpcLib_lookat_c::init(J3DModel* i_mdl_p, int* param_1, csXyz* param_2, csX
break;
}
JUT_ASSERT(649, a_jntNum < i_mdl_p->getModelData()->getJointNum());
mDoMtx_stack_c::copy(i_mdl_p->getAnmMtx(a_jntNum));
mDoMtx_stack_c::multVecZero(&field_0x04[mCount]);
field_0xbc[i] = a_jntNum;
@ -80,105 +30,72 @@ void dNpcLib_lookat_c::init(J3DModel* i_mdl_p, int* param_1, csXyz* param_2, csX
}
}
/* ############################################################################################## */
/* 80454DE8-80454DEC 0033E8 0004+00 3/3 0/0 0/0 .sdata2 @3864 */
SECTION_SDATA2 static u8 lit_3864[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80454DEC-80454DF0 0033EC 0004+00 1/1 0/0 0/0 .sdata2 @3865 */
SECTION_SDATA2 static f32 lit_3865 = 1.0f;
/* 80454DF0-80454DF8 0033F0 0008+00 2/2 0/0 0/0 .sdata2 @3866 */
SECTION_SDATA2 static f64 lit_3866 = 0.5;
/* 80454DF8-80454E00 0033F8 0008+00 2/2 0/0 0/0 .sdata2 @3867 */
SECTION_SDATA2 static f64 lit_3867 = 3.0;
/* 80454E00-80454E08 003400 0008+00 2/2 0/0 0/0 .sdata2 @3868 */
SECTION_SDATA2 static u8 lit_3868[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80454E08-80454E10 003408 0004+04 1/1 0/0 0/0 .sdata2 @3869 */
SECTION_SDATA2 static f32 lit_3869[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 80454E10-80454E18 003410 0008+00 2/2 0/0 0/0 .sdata2 @3873 */
SECTION_SDATA2 static f64 lit_3873 = 4503601774854144.0 /* cast s32 to float */;
/* 80251534-80251B60 24BE74 062C+00 0/0 0/0 2/2 .text
* action__16dNpcLib_lookat_cF4cXyz4cXyzP10fopAc_ac_cPA4_fi */
// NONMATCHING - regswap, equivalent
void dNpcLib_lookat_c::action(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, Mtx param_3,
int param_4) {
cXyz spA0;
cXyz sp90;
int i;
Mtx sp90;
cMtx_copy(param_3, sp90);
sp90[2][3] = 0.0f;
sp90[1][3] = 0.0f;
sp90[0][3] = 0.0f;
Mtx spA0;
cMtx_copy(param_3, spA0);
spA0[0][3] = spA0[1][3] = spA0[2][3] = 0.0f;
mDoMtx_stack_c::copy(sp90);
mDoMtx_stack_c::copy(spA0);
mDoMtx_stack_c::inverse();
cMtx_copy(mDoMtx_stack_c::get(), sp90);
cMtx_copy(mDoMtx_stack_c::get(), spA0);
for (int i = 0; i < mCount; i++) {
spA0 = field_0x04[i] - param_2->current.pos;
sp90 = field_0x04[i] - param_2->current.pos;
mDoMtx_stack_c::transS(param_2->current.pos);
mDoMtx_stack_c::concat(sp90);
mDoMtx_stack_c::multVec(&spA0, &field_0x04[i]);
mDoMtx_stack_c::concat(spA0);
mDoMtx_stack_c::multVec(&sp90, &field_0x04[i]);
}
spA0 = param_0 - param_2->current.pos;
sp90 = param_0 - param_2->current.pos;
mDoMtx_stack_c::transS(param_2->current.pos);
mDoMtx_stack_c::concat(sp90);
mDoMtx_stack_c::multVec(&spA0, &param_0);
mDoMtx_stack_c::concat(spA0);
mDoMtx_stack_c::multVec(&sp90, &param_0);
spA0 = param_1 - param_2->current.pos;
sp90 = param_1 - param_2->current.pos;
mDoMtx_stack_c::transS(param_2->current.pos);
mDoMtx_stack_c::concat(sp90);
mDoMtx_stack_c::multVec(&spA0, &field_0x04[mCount]);
mDoMtx_stack_c::concat(spA0);
mDoMtx_stack_c::multVec(&sp90, &field_0x04[mCount]);
setPrm();
update();
cXyz spAC;
cXyz spB8;
cXyz sp84;
cXyz sp78;
f32 tmp = 1.0f;
f32 var_f30 = 0.0f;
f32 var_f31 = 1.0f;
for (int i = mCount - 1; i >= 0 && param_4 == 1; i--) {
spAC = param_0 - field_0x04[i];
sp84 = param_0 - field_0x04[i];
if (!spAC.isZero()) {
spAC.normalize();
if (!sp84.isZero()) {
sp84.normalize();
spB8 = field_0x04[mCount] - field_0x04[i];
if (!spB8.isZero()) {
spB8.normalize();
sp78 = field_0x04[mCount] - field_0x04[i];
if (!sp78.isZero()) {
sp78.normalize();
s16 svar7 = -cM_atan2s(spAC.y, spAC.absXZ());
s16 svar8 = cM_atan2s(spAC.x, spAC.z);
s16 sp1A = -cM_atan2s(sp84.y, sp84.absXZ());
s16 sp18 = cM_atan2s(sp84.x, sp84.z);
s16 svar9 = -cM_atan2s(spB8.y, spB8.absXZ());
s16 svar10 = cM_atan2s(spB8.x, spB8.z);
s16 sp16 = -cM_atan2s(sp78.y, sp78.absXZ());
s16 sp14 = cM_atan2s(sp78.x, sp78.z);
field_0x4c[i].x += (s16)(tmp * (f32)(svar7 - svar9));
field_0x4c[i].y += (s16)(tmp * (f32)(svar8 - svar10));
field_0x4c[i].x += (s16)(var_f31 * (f32)(sp1A - sp16));
field_0x4c[i].y += (s16)(var_f31 * (f32)(sp18 - sp14));
limitter(&field_0x4c[i].x, field_0x34[i].x, field_0x94[i].x, field_0x7c[i].x);
limitter(&field_0x4c[i].y, field_0x34[i].y, field_0x94[i].y, field_0x7c[i].y);
}
}
tmp *= 0.5f;
var_f31 *= 0.5f;
update();
}
@ -194,17 +111,26 @@ void dNpcLib_lookat_c::action(cXyz param_0, cXyz param_1, fopAc_ac_c* param_2, M
/* 80251B60-80251B64 24C4A0 0004+00 0/0 0/0 2/2 .text dbView__16dNpcLib_lookat_cFv */
void dNpcLib_lookat_c::dbView() {}
/* ############################################################################################## */
/* 80454E18-80454E20 003418 0004+04 1/1 0/0 0/0 .sdata2 @3970 */
SECTION_SDATA2 static f32 lit_3970[1 + 1 /* padding */] = {
2.0f / 5.0f,
/* padding */
0.0f,
};
/* 80251B64-80251EF8 24C4A4 0394+00 1/1 0/0 0/0 .text setPrm__16dNpcLib_lookat_cFv */
void dNpcLib_lookat_c::setPrm() {
// NONMATCHING
cXyz sp14;
int i;
for (i = 0; i < mCount; i++) {
field_0x34[i] = csXyz::Zero;
field_0xac[i] = 0.0f;
}
for (i = 0; i < mCount; i++) {
field_0x4c[i].x = 0.4f * field_0x4c[i].x;
field_0x4c[i].y = 0.4f * field_0x4c[i].y;
sp14 = field_0x04[i + 1] - field_0x04[i];
field_0x34[i].x = -cM_atan2s(sp14.y, sp14.absXZ());
field_0x34[i].y = cM_atan2s(sp14.x, sp14.z);
field_0xac[i] = sp14.abs();
}
}
/* 80251EF8-80252018 24C838 0120+00 1/1 0/0 0/0 .text update__16dNpcLib_lookat_cFv */
@ -212,8 +138,9 @@ void dNpcLib_lookat_c::update() {
cXyz sp50;
csXyz sp58(csXyz::Zero);
Mtx m;
int i;
for (int i = 0; i < mCount; i++) {
for (i = 0; i < mCount; i++) {
mDoMtx_stack_c::XYZrotS(field_0x34[i]);
cMtx_copy(mDoMtx_stack_c::get(), m);
@ -233,11 +160,14 @@ void dNpcLib_lookat_c::update() {
/* 80252018-80252094 24C958 007C+00 1/1 0/0 0/0 .text limitter__16dNpcLib_lookat_cFPssss */
int dNpcLib_lookat_c::limitter(s16* o_value, s16 param_1, s16 param_2, s16 param_3) {
int limit = param_1 + *o_value;
BOOL rt = FALSE;
if (param_2 <= limit) {
if (param_2 <= param_1) {
*o_value = 0;
} else {
*o_value -= (s16)(limit - param_2);
rt = TRUE;
}
}
@ -246,6 +176,7 @@ int dNpcLib_lookat_c::limitter(s16* o_value, s16 param_1, s16 param_2, s16 param
*o_value = 0;
} else {
*o_value -= (s16)(limit - param_3);
rt = TRUE;
}
}

View File

@ -172,8 +172,8 @@ void dTres_c::offStatus(u8 listIdx, int param_1, int flag) {
}
/* 8009C27C-8009C360 096BBC 00E4+00 0/0 1/1 0/0 .text getBossIconFloorNo__7dTres_cFPi */
int dTres_c::getBossIconFloorNo(int* o_floorNo) {
int ret;
bool dTres_c::getBossIconFloorNo(int* o_floorNo) {
bool ret;
if (o_floorNo == NULL) {
return 0;

View File

@ -21,10 +21,33 @@ u8 __OSReport_System_disable;
u8 __OSReport_enable;
/* 80006798-800067C8 0010D8 0030+00 1/1 0/0 0/0 .text OSSwitchFiberEx__FUlUlUlUlUlUl */
void OSSwitchFiberEx(u32 param_0, u32 param_1, u32 param_2, u32 param_3, u32 param_4,
u32 param_5) {
// NONMATCHING
#ifdef __GEKKO__
asm void OSSwitchFiberEx(register u32 param_0, register u32 param_1, register u32 param_2, register u32 param_3, register u32 code, register u32 stack) {
nofralloc
mflr r0
// Back chain
mr r9, r1
stwu r9, -8(stack)
// LR save
mr r1, stack
stw r0, 4(r9)
// Call function
mtlr code
blrl
// Switch back
lwz r5, 0(r1)
lwz r0, 4(r5)
mtlr r0
mr r1, r5
blr
}
#endif
/* 800067C8-800067F4 001108 002C+00 3/3 0/0 0/0 .text my_PutString__FPCc */
void my_PutString(const char* string) {