From 7883248acc883990c869d0b8b855283207340519 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sun, 25 Jan 2026 21:17:59 -0800 Subject: [PATCH] d_map debug (#3066) --- config/RZDE01_00/symbols.txt | 4 +- config/RZDE01_02/symbols.txt | 4 +- config/RZDJ01/symbols.txt | 4 +- config/RZDP01/symbols.txt | 4 +- config/Shield/symbols.txt | 4 +- config/ShieldD/symbols.txt | 4 +- include/d/d_map.h | 142 ++++-- include/d/d_map_path.h | 96 +++- include/d/d_map_path_dmap.h | 4 +- include/d/d_stage.h | 4 +- include/d/d_tresure.h | 23 +- src/d/d_map.cpp | 930 +++++++++++++++++++++++++++-------- src/d/d_map_path.cpp | 45 +- src/d/d_tresure.cpp | 11 +- 14 files changed, 992 insertions(+), 287 deletions(-) diff --git a/config/RZDE01_00/symbols.txt b/config/RZDE01_00/symbols.txt index 3622853600..a6b7ac287f 100644 --- a/config/RZDE01_00/symbols.txt +++ b/config/RZDE01_00/symbols.txt @@ -28251,9 +28251,9 @@ lbl_8053AA90 = .sbss:0x8053AA90; // type:object size:0x1 data:byte lbl_8053AA91 = .sbss:0x8053AA91; // type:object size:0x1 data:byte it$98928 = .sbss:0x8053AA94; // type:object size:0x4 scope:local align:4 data:4byte lbl_8053AA98 = .sbss:0x8053AA98; // type:object size:0x8 data:byte -lbl_8053AAA0 = .sbss:0x8053AAA0; // type:object size:0x1 data:byte +mNowStayFloorNo__10dMapInfo_c = .sbss:0x8053AAA0; // type:object size:0x1 data:byte mNowStayRoomNo__10dMapInfo_c = .sbss:0x8053AAA4; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8053AAA8 = .sbss:0x8053AAA8; // type:object size:0x1 data:byte +mNowStayFloorNoDecisionFlg__10dMapInfo_c = .sbss:0x8053AAA8; // type:object size:0x1 data:byte mLayerList__8dMpath_c = .sbss:0x8053AAAC; // type:object size:0x4 scope:global align:4 data:4byte mAllCenterX__8dMpath_c = .sbss:0x8053AAB0; // type:object size:0x4 scope:global align:4 data:float mAllCenterZ__8dMpath_c = .sbss:0x8053AAB4; // type:object size:0x4 scope:global align:4 data:float diff --git a/config/RZDE01_02/symbols.txt b/config/RZDE01_02/symbols.txt index 92a073689e..eadd9d0d4d 100644 --- a/config/RZDE01_02/symbols.txt +++ b/config/RZDE01_02/symbols.txt @@ -27776,9 +27776,9 @@ lbl_80520A98 = .sbss:0x80520A98; // type:object size:0x1 data:byte lbl_80520A99 = .sbss:0x80520A99; // type:object size:0x1 data:byte it$98965 = .sbss:0x80520A9C; // type:object size:0x4 scope:global align:4 data:4byte lbl_80520AA0 = .sbss:0x80520AA0; // type:object size:0x8 data:byte -lbl_80520AA8 = .sbss:0x80520AA8; // type:object size:0x1 data:byte +mNowStayFloorNo__10dMapInfo_c = .sbss:0x80520AA8; // type:object size:0x1 data:byte mNowStayRoomNo__10dMapInfo_c = .sbss:0x80520AAC; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80520AB0 = .sbss:0x80520AB0; // type:object size:0x1 data:byte +mNowStayFloorNoDecisionFlg__10dMapInfo_c = .sbss:0x80520AB0; // type:object size:0x1 data:byte mLayerList__8dMpath_c = .sbss:0x80520AB4; // type:object size:0x4 scope:global align:4 data:4byte mAllCenterX__8dMpath_c = .sbss:0x80520AB8; // type:object size:0x4 scope:global align:4 data:float mAllCenterZ__8dMpath_c = .sbss:0x80520ABC; // type:object size:0x4 scope:global align:4 data:float diff --git a/config/RZDJ01/symbols.txt b/config/RZDJ01/symbols.txt index 00357054ee..c4fe2be4bc 100644 --- a/config/RZDJ01/symbols.txt +++ b/config/RZDJ01/symbols.txt @@ -27782,9 +27782,9 @@ lbl_8051E918 = .sbss:0x8051E918; // type:object size:0x1 data:byte lbl_8051E919 = .sbss:0x8051E919; // type:object size:0x1 data:byte it$98965 = .sbss:0x8051E91C; // type:object size:0x4 scope:local align:4 data:4byte lbl_8051E920 = .sbss:0x8051E920; // type:object size:0x8 data:byte -lbl_8051E928 = .sbss:0x8051E928; // type:object size:0x1 data:byte +mNowStayFloorNo__10dMapInfo_c = .sbss:0x8051E928; // type:object size:0x1 data:byte mNowStayRoomNo__10dMapInfo_c = .sbss:0x8051E92C; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8051E930 = .sbss:0x8051E930; // type:object size:0x1 data:byte +mNowStayFloorNoDecisionFlg__10dMapInfo_c = .sbss:0x8051E930; // type:object size:0x1 data:byte mLayerList__8dMpath_c = .sbss:0x8051E934; // type:object size:0x4 scope:global align:4 data:4byte mAllCenterX__8dMpath_c = .sbss:0x8051E938; // type:object size:0x4 scope:global align:4 data:float mAllCenterZ__8dMpath_c = .sbss:0x8051E93C; // type:object size:0x4 scope:global align:4 data:float diff --git a/config/RZDP01/symbols.txt b/config/RZDP01/symbols.txt index f0e971c366..94dab2fdfd 100644 --- a/config/RZDP01/symbols.txt +++ b/config/RZDP01/symbols.txt @@ -27667,9 +27667,9 @@ lbl_80521258 = .sbss:0x80521258; // type:object size:0x1 data:byte lbl_80521259 = .sbss:0x80521259; // type:object size:0x1 data:byte it$98965 = .sbss:0x8052125C; // type:object size:0x4 scope:local align:4 data:4byte lbl_80521260 = .sbss:0x80521260; // type:object size:0x8 data:byte -lbl_80521268 = .sbss:0x80521268; // type:object size:0x1 data:byte +mNowStayFloorNo__10dMapInfo_c = .sbss:0x80521268; // type:object size:0x1 data:byte mNowStayRoomNo__10dMapInfo_c = .sbss:0x8052126C; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80521270 = .sbss:0x80521270; // type:object size:0x1 data:byte +mNowStayFloorNoDecisionFlg__10dMapInfo_c = .sbss:0x80521270; // type:object size:0x1 data:byte mLayerList__8dMpath_c = .sbss:0x80521274; // type:object size:0x4 scope:global align:4 data:4byte mAllCenterX__8dMpath_c = .sbss:0x80521278; // type:object size:0x4 scope:global align:4 data:float mAllCenterZ__8dMpath_c = .sbss:0x8052127C; // type:object size:0x4 scope:global align:4 data:float diff --git a/config/Shield/symbols.txt b/config/Shield/symbols.txt index f79dab20f7..a80d8b0f8e 100644 --- a/config/Shield/symbols.txt +++ b/config/Shield/symbols.txt @@ -25340,9 +25340,9 @@ lbl_80508C71 = .sbss:0x80508C71; // type:object size:0x1 data:byte hash:0x7EAE93 @LOCAL@getDemoIDData__13dDemo_actor_cFPiPiPiPUsPUc@it@0 = .sbss:0x80508C74; // type:object size:0x4 scope:local data:4byte hash:0x7437A06F dhash:0xD35046F1 lbl_80508C78 = .sbss:0x80508C78; // type:object size:0x1 data:byte hash:0xCB27AC4D dhash:0x3A9725EA sDrawStage = .sbss:0x80508C80; // type:object size:0x4 scope:global data:4byte hash:0x32D6CDF2 -lbl_80508C88 = .sbss:0x80508C88; // type:object size:0x1 data:byte hash:0xBAF1AF73 dhash:0x8E0D0072 +mNowStayFloorNo__10dMapInfo_c = .sbss:0x80508C88; // type:object size:0x1 data:byte hash:0xBAF1AF73 dhash:0x8E0D0072 mNowStayRoomNo__10dMapInfo_c = .sbss:0x80508C8C; // type:object size:0x4 scope:global data:4byte hash:0xAB465BF4 dhash:0xA4A954B5 -lbl_80508C90 = .sbss:0x80508C90; // type:object size:0x1 data:byte hash:0x991A382E dhash:0x1A2339EF +mNowStayFloorNoDecisionFlg__10dMapInfo_c = .sbss:0x80508C90; // type:object size:0x1 data:byte hash:0x991A382E dhash:0x1A2339EF mLayerList__8dMpath_c = .sbss:0x80508C94; // type:object size:0x4 scope:global data:4byte hash:0x10631C09 dhash:0x89F28E31 mAllCenterX__8dMpath_c = .sbss:0x80508C98; // type:object size:0x4 scope:global align:4 data:float hash:0x4FEB5F9A dhash:0x67799F02 mAllCenterZ__8dMpath_c = .sbss:0x80508C9C; // type:object size:0x4 scope:global align:4 data:float hash:0x1B7B1558 dhash:0x67799F00 diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index 13235f88d5..d4bb01c40a 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -64390,9 +64390,9 @@ lbl_8074C6B3 = .sbss:0x8074C6B3; // type:object size:0x1 data:byte hash:0x7EAE93 lbl_8074C6B8 = .sbss:0x8074C6B8; // type:object size:0x8 data:byte hash:0xCB27AC4D dhash:0x3A9725EA lbl_8074C6C0 = .sbss:0x8074C6C0; // type:object size:0x1 data:byte hash:0x04D34995 mMySelfPointer__14dMapInfo_HIO_c = .sbss:0x8074C6C8; // type:object size:0x4 scope:global data:4byte hash:0x42174B45 dhash:0x5B0F4B00 -lbl_8074C6CC = .sbss:0x8074C6CC; // type:object size:0x1 data:byte hash:0xBAF1AF73 dhash:0x8E0D0072 +mNowStayFloorNo__10dMapInfo_c = .sbss:0x8074C6CC; // type:object size:0x1 data:byte hash:0xBAF1AF73 dhash:0x8E0D0072 mNowStayRoomNo__10dMapInfo_c = .sbss:0x8074C6D0; // type:object size:0x4 scope:global data:4byte hash:0xAB465BF4 dhash:0xA4A954B5 -lbl_8074C6D4 = .sbss:0x8074C6D4; // type:object size:0x1 data:byte hash:0x991A382E dhash:0x1A2339EF +mNowStayFloorNoDecisionFlg__10dMapInfo_c = .sbss:0x8074C6D4; // type:object size:0x1 data:byte hash:0x991A382E dhash:0x1A2339EF mLayerList__8dMpath_c = .sbss:0x8074C6D8; // type:object size:0x4 scope:global data:4byte hash:0x10631C09 dhash:0x89F28E31 mAllCenterX__8dMpath_c = .sbss:0x8074C6DC; // type:object size:0x4 scope:global align:4 data:float hash:0x4FEB5F9A dhash:0x67799F02 mAllCenterZ__8dMpath_c = .sbss:0x8074C6E0; // type:object size:0x4 scope:global align:4 data:float hash:0x1B7B1558 dhash:0x67799F00 diff --git a/include/d/d_map.h b/include/d/d_map.h index 0b055dd7a4..bbd21787ca 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -4,33 +4,45 @@ #include "d/d_map_path_dmap.h" #include "JSystem/JHostIO/JORReflexible.h" -struct dMap_HIO_prm_res_src_s { - -}; - -class dMap_HIO_list_c : public dMpath_HIO_n::hioList_c { -public: - virtual void copySrcToHio(); - virtual void copyHioToDst(); - virtual void copyBufToHio(const char*); -}; - -class dMap_HIO_c : public dMpath_HIO_file_base_c { -public: - dMap_HIO_c(); - virtual void listenPropertyEvent(const JORPropertyEvent*); - virtual void genMessage(JORMContext*); - virtual u32 addString(char*, u32, u32); - virtual u32 addData(char*, u32, u32); - virtual void copyReadBufToData(const char*, s32); - virtual u32 addStringBinary(char*, u32, u32); - - /* 0x04 */ u8 field_0x4[0x08 - 0x04]; - /* 0x08 */ dMap_HIO_list_c mList; - - static dMap_HIO_c* mMySelfPointer; - static dMpath_HIO_n::list_s l_list; - static dMap_HIO_prm_res_src_s* m_res_src_p; +struct dMap_HIO_prm_other_s { + /* 0x00 */ u8 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ u8 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u8 field_0x12; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ u8 field_0x1c; + /* 0x1D */ u8 field_0x1d; + /* 0x1E */ u8 field_0x1e; + /* 0x1F */ u8 field_0x1f; + /* 0x20 */ u8 field_0x20; + /* 0x21 */ u8 field_0x21; + /* 0x22 */ u8 field_0x22; + /* 0x23 */ u8 field_0x23; + /* 0x24 */ u8 field_0x24[0x2C - 0x24]; + /* 0x2C */ u8 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ u8 field_0x34; + /* 0x35 */ u8 field_0x35; + /* 0x36 */ s16 field_0x36; + /* 0x38 */ u8 field_0x38; + /* 0x38 */ s16 field_0x3a; + /* 0x3C */ u8 field_0x3c; + /* 0x3D */ u8 field_0x3d; + /* 0x3E */ s16 field_0x3e; + /* 0x40 */ u8 field_0x40; + /* 0x41 */ u8 field_0x41[0x44 - 0x41]; + /* 0x44 */ f32 field_0x44[17]; + /* 0x88 */ u8 field_0x88; + /* 0x89 */ u8 field_0x89; + /* 0x8A */ u8 field_0x8a; + /* 0x8C */ f32 field_0x8c[17]; + /* 0xD0 */ u8 field_0xd0[0x114 - 0xD0]; + /* 0x114 */ dTres_c::typeGroupData_c field_0x114[1]; + /* 0x130 */ u8 field_0x130[0x2f0 - 0x130]; }; struct dMap_prm_res_s { @@ -63,8 +75,19 @@ struct dMap_prm_res_s { /* 0x1B8 */ f32 cursor_size; }; +struct dMap_prm_hio_s { + /* 0x00 */ GXColor field_0x0[51]; + /* 0xCC */ u8 field_0xcc[0x24]; + /* 0xF0 */ dMap_HIO_prm_other_s field_0xf0; +}; + +struct dMap_HIO_prm_res_src_s { + static const u8 m_other[0x2f0]; +}; + struct dMap_HIO_prm_res_dst_s { static dMap_prm_res_s* m_res; + static dMap_HIO_prm_other_s m_other; }; class renderingAmap_c : public renderingPlusDoorAndCursor_c { @@ -104,7 +127,11 @@ public: virtual void setAmapPaletteColor(int, u8, u8, u8, u8) = 0; virtual bool isSpecialOutline() = 0; +#if DEBUG + static const int PALETTE_NUMBER = 51; +#else static const int PALETTE_NUMBER = 50; +#endif private: /* 0x34 */ s32 m_outSideBlackLineCnt; @@ -130,7 +157,12 @@ public: void _move(f32, f32, int, f32); void _draw(); - virtual ~dMap_c() { _remove(); } + virtual ~dMap_c() { +#if DEBUG + m_mySelfPointer = NULL; +#endif + _remove(); + } virtual bool isDrawType(int); virtual const GXColor* getColor(int); virtual bool isRendAllRoom() const; @@ -143,6 +175,11 @@ public: virtual void setAmapPaletteColor(int, u8, u8, u8, u8); virtual bool isSpecialOutline(); +#if DEBUG + virtual bool isSwitch(const dDrawPath_c::group_class*); + virtual void beforeDrawPath(); +#endif + bool isDraw() const { return renderingDAmap_c::isDraw(); } ResTIMG* getResTIMGPointer() { return mResTIMG; } @@ -150,7 +187,7 @@ public: f32 getPackPlusZ() { return mPackPlusZ; } f32 getPackZ() const { return mPackZ; } f32 getTexelPerCm() const { return 1.0f / field_0x58; } - u16 getTexSizeY() const { return mTexSizeH; } + u16 getTexSizeY() const { return mTexSizeY; } f32 getRightEdgePlus() { return mRightEdgePlus; } f32 getPackX() const { return mPackX; } int getStayRoomNo() const { return mStayRoomNo; } @@ -173,8 +210,8 @@ private: /* 0x6C */ f32 mRightEdgePlus; /* 0x70 */ f32 mTopEdgePlus; /* 0x74 */ int field_0x74; - /* 0x78 */ u16 mTexSizeW; - /* 0x7A */ u16 mTexSizeH; + /* 0x78 */ u16 mTexSizeX; + /* 0x7A */ u16 mTexSizeY; /* 0x7C */ int mStayRoomNo; /* 0x80 */ int field_0x80; /* 0x84 */ int field_0x84; @@ -184,17 +221,44 @@ private: /* 0x8E */ u8 field_0x8e; /* 0x8F */ u8 field_0x8f; /* 0x90 */ u8 field_0x90; + /* 0x91 */ u8 field_0x91; }; // Size: 0x94 -#if DEBUG -class dMpath_RGBA_c { +class dMap_HIO_list_c : public dMpath_HIO_n::hioList_c { public: - GXColor getGXColor() { return mColor; } - - GXColor mColor; - - virtual ~dMpath_RGBA_c() {} + virtual void copySrcToHio(); + virtual void copyHioToDst(); + virtual void copyBufToHio(const char*); +}; + +class dMap_HIO_c : public dMpath_HIO_file_base_c { +public: + dMap_HIO_c(); + virtual void listenPropertyEvent(const JORPropertyEvent*); + virtual void genMessage(JORMContext*); + virtual u32 addString(char* param_1, u32 param_2, u32 param_3) { return mList.addString(param_1, param_2, param_3); } + virtual u32 addData(char* param_1, u32 param_2, u32 param_3) { + UNUSED(param_2); + UNUSED(param_3); + memcpy(param_1, dMap_HIO_prm_res_dst_s::m_res, 0x1bc); + return 0x1bc; + } + virtual void copyReadBufToData(const char* param_1, s32 param_2) { + UNUSED(param_2); + mList.copyBufToHio(param_1); + } + virtual u32 addStringBinary(char* param_1, u32 param_2, u32 param_3) { + return mList.addStringBinary(param_1, param_2, param_3); + } + + /* 0x04 */ u8 field_0x4[0x08 - 0x04]; + /* 0x08 */ dMap_HIO_list_c mList; + + static dMap_HIO_c* mMySelfPointer; + static const u8 l_listData[]; + static const dMpath_HIO_n::list_s l_list; + static dMap_prm_res_s* m_res_src_p; + static dMap_prm_hio_s m_prm_hio; }; -#endif #endif /* D_MAP_D_MAP_H */ diff --git a/include/d/d_map_path.h b/include/d/d_map_path.h index d461783150..a082a3c2e7 100644 --- a/include/d/d_map_path.h +++ b/include/d/d_map_path.h @@ -4,22 +4,50 @@ #include "d/d_drawlist.h" #include "JSystem/JHostIO/JORMContext.h" +struct dMpath_RGB5A3_s { + u16 color; +}; + +namespace dMpath_ColorCnv_n { + void convertRGB5A3_To_GXColor(_GXColor&, const dMpath_RGB5A3_s&); +} + +struct dMpath_RGB5A3_palDt_s { + /* 0x0 */ dMpath_RGB5A3_s field_0x0; + /* 0x2 */ dMpath_RGB5A3_s field_0x2; + /* 0x4 */ dMpath_RGB5A3_s field_0x4; + /* 0x6 */ dMpath_RGB5A3_s field_0x6; +}; + +class dMpath_RGBA_c { +public: + GXColor mColor; + + dMpath_RGBA_c() {} + virtual ~dMpath_RGBA_c() {} + GXColor getGXColor() const { return mColor; } + void setGXColor(const GXColor&); + void setRGB5A3_palDt(const dMpath_RGB5A3_palDt_s&); +}; + namespace dMpath_HIO_n { struct list_s { - /* 0x00 */ void* field_0x0; + /* 0x00 */ const void* field_0x0; /* 0x04 */ u32 field_0x4; }; - class hioList_c { - public: - /* 0x00 */ list_s mList; + struct resData_s {}; + struct hioList_s : public list_s, resData_s {}; + // RTTI does not match debug + class hioList_c : public hioList_s { + public: virtual ~hioList_c() {} virtual void copySrcToHio() = 0; virtual void copyHioToDst() = 0; virtual void copyBufToHio(const char*) = 0; - void set(const list_s& param_1) { mList = param_1; } + void set(const list_s& param_1) { *static_cast(this) = param_1; } void gen(JORMContext*); void update(JORMContext*); u32 addString(char*, u32, u32) const; @@ -44,6 +72,42 @@ public: bool readBinaryFile(const char*); }; +class dMpath_RGB5A3_c { +public: + dMpath_RGB5A3_s mColor; + + dMpath_RGB5A3_c(GXColor c) { set(c); } + virtual ~dMpath_RGB5A3_c() {} + void set(u8 r, u8 g, u8 b, u8 a) { + u32 color; + if (a >= 224) { + color = (r & 0xf8) << 7 | (g & 0xf8) << 2 | (b & 0xf8) >> 3 | 0x8000; + } else { + color = (r & 0xf0) << 4 | g & 0xf0 | (b & 0xf0) >> 4 | (a & 0xe0) << 7; + } + mColor.color = color; + } + void set(const GXColor& c) { set(c.r, c.g, c.b, c.a); } + const dMpath_RGB5A3_s& getRGB5A3() const { return mColor; } +}; + +class dMpath_RGB5A3_palDt_c { +public: + dMpath_RGB5A3_palDt_s field_0x0; + + dMpath_RGB5A3_palDt_c() {} + virtual ~dMpath_RGB5A3_palDt_c() {} + dMpath_RGB5A3_palDt_s& getRGB5A3_palDt_s() { return field_0x0; } + + void setGXColor(const GXColor& c) { + dMpath_RGB5A3_c rgb5a3(c); + field_0x0.field_0x0 = rgb5a3.getRGB5A3(); + field_0x0.field_0x2 = rgb5a3.getRGB5A3(); + field_0x0.field_0x4 = rgb5a3.getRGB5A3(); + field_0x0.field_0x6 = rgb5a3.getRGB5A3(); + } +}; + class dDrawPath_c : public dDlst_base_c { public: struct line_class { @@ -176,19 +240,24 @@ public: struct dMpath_n { class dTexObjAggregate_c { public: + static const int TEX_OBJ_NUMBER = 7; + void create(); void remove(); ~dTexObjAggregate_c() { remove(); }; - GXTexObj* getTexObjPointer(int i_no) { return mp_texObj[i_no]; } + GXTexObj* getTexObjPointer(int i_no) { + JUT_ASSERT(44, i_no >= 0 && i_no < TEX_OBJ_NUMBER); + return mp_texObj[i_no]; + } dTexObjAggregate_c() { - for (int i = 0; i < 7; i++) { + for (int i = 0; i < TEX_OBJ_NUMBER; i++) { mp_texObj[i] = NULL; } } - /* 0x0 */ GXTexObj* mp_texObj[7]; + /* 0x0 */ GXTexObj* mp_texObj[TEX_OBJ_NUMBER]; }; static dTexObjAggregate_c m_texObjAgg; @@ -196,15 +265,4 @@ struct dMpath_n { STATIC_ASSERT(sizeof(dMpath_n::dTexObjAggregate_c) == 28); -struct dMpath_RGB5A3_s { - u16 color; -}; - -struct dMpath_RGB5A3_palDt_s { - /* 0x0 */ dMpath_RGB5A3_s field_0x0; - /* 0x2 */ dMpath_RGB5A3_s field_0x2; - /* 0x4 */ dMpath_RGB5A3_s field_0x4; - /* 0x6 */ dMpath_RGB5A3_s field_0x6; -}; - #endif /* D_MAP_D_MAP_PATH_H */ diff --git a/include/d/d_map_path_dmap.h b/include/d/d_map_path_dmap.h index 9176860b49..c66d4861f8 100644 --- a/include/d/d_map_path_dmap.h +++ b/include/d/d_map_path_dmap.h @@ -74,9 +74,9 @@ public: static void remove(); static s8 getNowStayFloorNo() { - JUT_ASSERT(0, mNowStayFloorNoDecisionFlg); - s8 floor_no = 0; + JUT_ASSERT(195, mNowStayFloorNoDecisionFlg); + if (mNowStayFloorNoDecisionFlg) { floor_no = mNowStayFloorNo; } diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 87c6cec2bb..9d9c1b3633 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1543,11 +1543,11 @@ inline u16 dStage_FileList_dt_GetMsg(dStage_FileList_dt_c* p_fList) { return p_fList->mMsg; } -inline f32 dStage_FileList2_dt_GetLeftRmX(dStage_FileList2_dt_c* p_fList2) { +inline f32 dStage_FileList2_dt_GetLeftRmX(const dStage_FileList2_dt_c* p_fList2) { return p_fList2->mLeftRmX; } -inline f32 dStage_FileList2_dt_GetRightRmX(dStage_FileList2_dt_c* p_fList2) { +inline f32 dStage_FileList2_dt_GetRightRmX(const dStage_FileList2_dt_c* p_fList2) { return p_fList2->mRightRmX; } diff --git a/include/d/d_tresure.h b/include/d/d_tresure.h index 73375e461f..53315bacdc 100644 --- a/include/d/d_tresure.h +++ b/include/d/d_tresure.h @@ -5,6 +5,8 @@ class dTres_c { public: + static const int TYPE_GROUP_ENUM_NUMBER = 17; + struct data_s { /* 0x00 */ u8 mNo; /* 0x01 */ s8 mRoomNo; @@ -21,18 +23,25 @@ public: public: data_s* getDataPointer() { return (data_s*)this; } const data_s* getConstDataPointer() const { return (data_s*)this; } - typeGroupData_c* getNextDataPointer() const { return mNextData; } - void setNextDataPointer(typeGroupData_c* data) { mNextData = data; } - void setTypeGroupNo(u8 no) { mTypeGroupNo = no; } u8 getNo() const { return mNo; } + void setNo(u8 no) { mNo = no; } + s8 getRoomNo() const { return mRoomNo; } + void setRoomNo(s8 roomNo) { mRoomNo = roomNo; } u8 getStatus() const { return mStatus; } void setStatus(u8 status) { mStatus = status; } - void setRoomNo(s8 roomNo) { mRoomNo = roomNo; } - s8 getRoomNo() const { return mRoomNo; } + void setArg1(u8 arg1) { mArg1 = arg1; } + const Vec* getPos() const { return &mPos; } void setPos(const Vec& pos) { mPos = pos; } u8 getSwBit() const { return mSwBit; } - const Vec* getPos() const { return &mPos; } + void setSwBit(u8 swBit) { mSwBit = swBit; } + void setType(u8 type) { mType = type; } + void setArg2(u8 arg2) { mArg2 = arg2; } int getAngleY() const { return mAngleY; } + void setAngleY(s8 angleY) { mAngleY = angleY; } + typeGroupData_c* getNextDataPointer() const { return mNextData; } + void setNextDataPointer(typeGroupData_c* data) { mNextData = data; } + u8 getTypeGroupNo() { return mTypeGroupNo; } + void setTypeGroupNo(u8 no) { mTypeGroupNo = no; } /* 0x14 */ typeGroupData_c* mNextData; /* 0x18 */ u8 mTypeGroupNo; @@ -63,7 +72,7 @@ public: static typeGroupData_c* getNextData(dTres_c::typeGroupData_c*); static typeGroupData_c* getNextData(dTres_c::typeGroupData_c const*); static void setPosition(int, u8, Vec const*, int); - static int getTypeGroupNoToType(u8); + static u8 getTypeGroupNoToType(u8); static u8 getTypeToTypeGroupNo(u8); static int getTypeGroupNumber(int index) { diff --git a/src/d/d_map.cpp b/src/d/d_map.cpp index 783b83fcae..6678e6d9af 100644 --- a/src/d/d_map.cpp +++ b/src/d/d_map.cpp @@ -11,11 +11,10 @@ #include "JSystem/JUtility/JUTTexture.h" #include "SSystem/SComponent/c_counter.h" #include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #if DEBUG -dMap_HIO_c g_dMap_HIO; - void dMap_HIO_c::genMessage(JORMContext* mctx) { mctx->genLabel("エリアマップ パスマップ 調整項目", 0); mctx->genLabel("初期化等は 下位フォルダ[パレット]込み です", 0); @@ -39,101 +38,299 @@ void dMap_HIO_c::listenPropertyEvent(const JORPropertyEvent* evt) { // DEBUG NONMATCHING JORReflexible::listenPropertyEvent(evt); - if (dMap_HIO_prm_res_dst_s::m_res != NULL) { - JORFile jorFile; - switch ((u32)evt->id) { - case 0x4000002: - if (dMap_c::m_mySelfPointer != NULL) { - f32 packX, packZ; - dMap_c::m_mySelfPointer->getPack(dMap_c::m_mySelfPointer->getStayRoomNo(), &packX, &packZ); - OS_REPORT("mNowCenterRoomNo<%d>packX<%11.3f>packZ<%11.3f>\n", packX, packZ, dMap_c::m_mySelfPointer->getStayRoomNo()); - } - break; + if (!dMap_HIO_prm_res_dst_s::m_res) { + return; + } - case 0x4000004: - writeHostioTextFile(NULL); - break; - - case 0x4000005: - writeBinaryTextFile(NULL); - break; - - case 0x4000006: - writeBinaryFile(NULL); - break; - - case 0x4000007: { - readBinaryFile(NULL); - JORMContext* ctx_p = attachJORMContext(8); - ctx_p->startUpdateNode(this); - mList.update(ctx_p); - ctx_p->endUpdateNode(); - releaseJORMContext(ctx_p); - break; + JORFile jorFile; + JORMContext* ctx_p; + switch ((u32)evt->id) { + case 0x4000002: + if (dMap_c::m_mySelfPointer != NULL) { + f32 packX, packZ; + dMap_c::m_mySelfPointer->getPack(dMap_c::m_mySelfPointer->getStayRoomNo(), &packX, &packZ); + OS_REPORT("mNowCenterRoomNo<%d>packX<%11.3f>packZ<%11.3f>\n", packX, packZ, dMap_c::m_mySelfPointer->getStayRoomNo()); } + break; - case 0x4000003: { - JORMContext* ctx_p = attachJORMContext(8); - ctx_p->startUpdateNode(this); - mList.update(ctx_p); - ctx_p->endUpdateNode(); - releaseJORMContext(ctx_p); - break; - } + case 0x4000004: + writeHostioTextFile(NULL); + break; - case 0x4000008: - binaryDump(dMap_HIO_prm_res_dst_s::m_res, 0x1BC); - break; + case 0x4000005: + writeBinaryTextFile(NULL); + break; - case 0x4000009: - if (dMap_c::m_mySelfPointer != NULL) { - f32 stageTexelMinZ = -3.4028235e38f; - f32 stageTexelMaxZ = -3.4028235e38f; - for (int i = 0; i < 64; i++) { - dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(i); - if (fileList2_p != NULL) { - f32 texelMaxZ = dStage_FileList2_dt_GetInnerRmZ(fileList2_p); - f32 frontRmZ = dStage_FileList2_dt_GetFrontRmZ(fileList2_p); - f32 cmPerTexel = dMap_c::m_mySelfPointer->getCmPerTexel(); - f32 texelMinZ = (dMap_c::m_mySelfPointer->getCenterZ() - texelMaxZ) / cmPerTexel; - texelMaxZ = dMap_c::m_mySelfPointer->getCmPerTexel(); - texelMaxZ = (frontRmZ - dMap_c::m_mySelfPointer->getCenterZ()) / texelMaxZ; - OS_REPORT("<%2d>texelMinZ<%10.3f>texelMaxZ<%10.3f>\n", texelMinZ, texelMaxZ, i); + case 0x4000006: + writeBinaryFile(NULL); + break; - if (texelMinZ > stageTexelMinZ) { - stageTexelMinZ = texelMinZ; - } + case 0x4000007: { + readBinaryFile(NULL); + ctx_p = attachJORMContext(8); + ctx_p->startUpdateNode(this); + mList.update(ctx_p); + ctx_p->endUpdateNode(); + releaseJORMContext(ctx_p); + break; + } - if (texelMaxZ > stageTexelMaxZ) { - stageTexelMaxZ = texelMaxZ; - } + case 0x4000003: { + mList.copySrcToHio(); + ctx_p = attachJORMContext(8); + ctx_p->startUpdateNode(this); + mList.update(ctx_p); + ctx_p->endUpdateNode(); + releaseJORMContext(ctx_p); + break; + } + + case 0x4000008: + binaryDump(dMap_HIO_prm_res_dst_s::m_res, 0x1BC); + break; + + case 0x4000009: + if (dMap_c::m_mySelfPointer != NULL) { + f32 stageTexelMinZ = -3.4028235e38f; + f32 stageTexelMaxZ = -3.4028235e38f; + for (int i = 0; i < 64; i++) { + dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(i); + if (fileList2_p != NULL) { + f32 innerRmZ = dStage_FileList2_dt_GetInnerRmZ(fileList2_p); + f32 frontRmZ = dStage_FileList2_dt_GetFrontRmZ(fileList2_p); + f32 texelMinZ = (dMap_c::m_mySelfPointer->getCenterZ() - innerRmZ) / dMap_c::m_mySelfPointer->getCmPerTexel(); + f32 texelMaxZ = (frontRmZ - dMap_c::m_mySelfPointer->getCenterZ()) / dMap_c::m_mySelfPointer->getCmPerTexel(); + OS_REPORT("<%2d>texelMinZ<%10.3f>texelMaxZ<%10.3f>\n", i, texelMinZ, texelMaxZ); + + if (texelMinZ > stageTexelMinZ) { + stageTexelMinZ = texelMinZ; + } + + if (texelMaxZ > stageTexelMaxZ) { + stageTexelMaxZ = texelMaxZ; } } - - OS_REPORT("stageTexelMinZ<%10.3f>\n", stageTexelMinZ); } - } + + OS_REPORT("stageTexelMinZ<%10.3f>\n", stageTexelMinZ); + } + } + mList.copyHioToDst(); +} + +static void dummy() { + DEAD_STRING("リソース[パレット]"); + DEAD_STRING("■背景■"); + DEAD_STRING("■背景[アイコン]■"); + DEAD_STRING("・背景<アイコン>"); + DEAD_STRING("■背景[ダンジョン]■"); + DEAD_STRING("・背景<ダンジョン時>"); + DEAD_STRING("■背景[フィールド]■"); + DEAD_STRING("・背景<フィールド時>"); + DEAD_STRING("■未到達部屋■"); + DEAD_STRING("・黒<奈落>"); + DEAD_STRING("・入禁<進入禁止>"); + DEAD_STRING("・ライン<領域色には含まれません>"); + DEAD_STRING("■到達部屋■"); + DEAD_STRING("■プレイヤー在籍部屋■"); + DEAD_STRING("■ドア <プレイヤー在籍部屋>■"); + DEAD_STRING("■ドア <プレイヤー在籍部屋以外>■"); + DEAD_STRING("■宝箱■"); + DEAD_STRING("・本体<プレイヤー在籍部屋以外>"); + DEAD_STRING("■プレイヤーカーソル■"); + DEAD_STRING("・カーソル"); + DEAD_STRING("■入室位置■"); + DEAD_STRING("・入室位置"); + DEAD_STRING("・入室位置<プレイヤー在籍部屋以外>"); + DEAD_STRING("・鍵[本体]"); + DEAD_STRING("■ボス■"); + DEAD_STRING("・ボス[本体]"); + DEAD_STRING("・NPC[本体]"); + DEAD_STRING("■目的地■"); + DEAD_STRING("・目的地[本体]"); + DEAD_STRING("■ステージ出入り口■"); + DEAD_STRING("■ステージ出入り口LV8■"); + DEAD_STRING("・はぐれ天空人[本体]"); + DEAD_STRING("■ナイトストーカ結界■"); + DEAD_STRING("■ナイトストーカ結界<実際にはこのパレット色は未使用>■"); + DEAD_STRING("・境界線0"); + DEAD_STRING("・境界線1"); + DEAD_STRING("■フィールドマップ時縁取り■"); + DEAD_STRING("パレット"); + DEAD_STRING("リソース[パレット以外]"); + DEAD_STRING("■枠線の縁取り■\r\n"); + DEAD_STRING("・枠線の縁取りの線の本数"); + DEAD_STRING("・枠線の縁取りの線の太さ"); + DEAD_STRING(" 枠線に対しての加算値になっています。ただし0=描画無し"); + DEAD_STRING(" 値は1/6ピクセル単位です"); + DEAD_STRING(" 外枠は自分の居る場所が12それ以外は6です"); + DEAD_STRING("↓下になるほど描画優先順位が高くなります"); + DEAD_STRING("■フィールドマップの縁取り0■"); + DEAD_STRING("■フィールドマップの縁取り1■"); + DEAD_STRING("■フィールドマップの縁取り2■"); + DEAD_STRING("■フィールドマップの縁取り3■"); + DEAD_STRING("■カーソルの大きさ調節■"); + DEAD_STRING("みかけ上のドットの大きさを指定できます"); + DEAD_STRING("mCursorSize"); + DEAD_STRING("■ナイトストーカー結界■"); + DEAD_STRING("■ナイトストーカー結界1"); + DEAD_STRING("点滅周期"); + DEAD_STRING("■ナイトストーカー結界2"); + DEAD_STRING("■■エリアマップ関連[リソース以外]■■"); + DEAD_STRING("■スイッチ地形の強制ONOFF■\r\n"); + DEAD_STRING("・ONで↓有効"); + DEAD_STRING("・強制的にON,OFF"); + DEAD_STRING("■地形位置確認用■\r\n"); + DEAD_STRING("・ONで有効"); + DEAD_STRING("■マップOFFSET変更■\r\n"); + DEAD_STRING("■テスト■\r\n"); + DEAD_STRING("■フィールド屋外部屋切り替えスムーススクロール■\r\n"); + DEAD_STRING("・以下フレーム数\r\n"); + DEAD_STRING("・ウエイト"); + DEAD_STRING("・縁取り消失"); + DEAD_STRING("・スクロール"); + DEAD_STRING("・縁取り出現"); + DEAD_STRING("■デバック用全部屋表示スイッチ■\r\n"); + DEAD_STRING("ONで有効"); + DEAD_STRING("■マップの表示範囲調整■"); + DEAD_STRING("・フィールドマップ時"); + DEAD_STRING("表示範囲を調整するときはONにする"); + DEAD_STRING("・ダンジョンマップ時"); + DEAD_STRING("■マップデバック用■"); + DEAD_STRING("マップの中心をプレイヤーの座標にする"); + DEAD_STRING("■マップサイズチェック用■"); + DEAD_STRING("ラインの太さ"); + DEAD_STRING("■ステージサイズチェック用■"); + DEAD_STRING("■部屋サイズチェック用■"); + DEAD_STRING("■アイコンサイズ■"); + DEAD_STRING("ダンジョン出入り口"); + DEAD_STRING("小さな鍵"); + DEAD_STRING("ダンジョン出入口LV8"); + DEAD_STRING("あやつり石像"); + DEAD_STRING("はぐれ天空人"); + DEAD_STRING("部屋単独描画チェック"); + DEAD_STRING("部屋番号"); + DEAD_STRING("■アイコン優先順位チェック■"); + DEAD_STRING("ステージ出入り口"); + DEAD_STRING("Lv8出入り口"); + DEAD_STRING(""); + DEAD_STRING("・床1"); + DEAD_STRING("・床2"); + DEAD_STRING("・水"); + DEAD_STRING("・毒"); + DEAD_STRING("・炎"); + DEAD_STRING("・背景"); + DEAD_STRING("・本体"); + DEAD_STRING("■鍵■"); + DEAD_STRING("■NPC■"); + DEAD_STRING("・色1"); + DEAD_STRING("・色2"); + DEAD_STRING("・黒縁0"); + DEAD_STRING("・黒縁1"); + DEAD_STRING("・黒縁2"); + DEAD_STRING("・黒縁3"); + DEAD_STRING("0"); + DEAD_STRING("1"); + DEAD_STRING("2"); + DEAD_STRING("3"); + DEAD_STRING("・線1"); + DEAD_STRING("線太さ"); + DEAD_STRING("・色0"); + DEAD_STRING("・線2"); + DEAD_STRING("太さ"); + DEAD_STRING("・right"); + DEAD_STRING("・top"); + DEAD_STRING("宝箱"); + DEAD_STRING("ボス"); + DEAD_STRING("光の雫"); + DEAD_STRING("目的地"); + DEAD_STRING("NPC(猿)"); + DEAD_STRING("馬車"); + DEAD_STRING("鉄玉"); + DEAD_STRING("光の玉"); + DEAD_STRING("雪男"); + DEAD_STRING("雪女"); +} + +dMap_prm_hio_s dMap_HIO_c::m_prm_hio; +dMap_HIO_c g_dMap_HIO; +dMap_HIO_prm_other_s dMap_HIO_prm_res_dst_s::m_other; +dMap_HIO_c* dMap_HIO_c::mMySelfPointer; +dMap_prm_res_s* dMap_HIO_c::m_res_src_p; +dMap_c* dMap_c::m_mySelfPointer; + +const u8 dMap_HIO_prm_res_src_s::m_other[0x2f0] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x05, 0x14, + 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x9C, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x28, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x40, 0x00, 0x00, 0x41, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x41, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x80, 0x00, 0x00, 0x41, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x40, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +const dMpath_HIO_n::list_s dMap_HIO_c::l_list = {dMap_HIO_c::l_listData, 0xb1}; + +void dMap_HIO_list_c::copySrcToHio() { + if (!dMap_HIO_c::m_res_src_p) { + return; + } + + dMpath_RGBA_c color; + for (int i = 0; i < 51; i++) { + color.setRGB5A3_palDt(dMap_HIO_c::m_res_src_p->palette_data[i]); + dMap_HIO_c::m_prm_hio.field_0x0[i] = color.getGXColor(); + } + memcpy(dMap_HIO_c::m_prm_hio.field_0xcc, &dMap_HIO_c::m_res_src_p->field_0x198, 0x24); + memcpy(&dMap_HIO_c::m_prm_hio.field_0xf0, &dMap_HIO_prm_res_src_s::m_other, 0x2f0); +} + +void dMap_HIO_list_c::copyHioToDst() { + if (!dMap_HIO_prm_res_dst_s::m_res) { + return; + } + + dMpath_RGB5A3_palDt_c pal_data; + for (int i = 0; i < 51; i++) { + pal_data.setGXColor(dMap_HIO_c::m_prm_hio.field_0x0[i]); + dMap_HIO_prm_res_dst_s::m_res->palette_data[i] = pal_data.getRGB5A3_palDt_s(); + } + memcpy(&dMap_HIO_prm_res_dst_s::m_res->field_0x198, dMap_HIO_c::m_prm_hio.field_0xcc, 0x24); + memcpy(&dMap_HIO_prm_res_dst_s::m_other, &dMap_HIO_c::m_prm_hio.field_0xf0, 0x2f0); + if (dMap_c::m_mySelfPointer && dMap_c::m_mySelfPointer->getStayType() == 0) { + pal_data.setGXColor(dMap_HIO_c::m_prm_hio.field_0x0[44]); + dMap_HIO_prm_res_dst_s::m_res->palette_data[1] = pal_data.getRGB5A3_palDt_s(); } } -void dMap_HIO_list_c::copySrcToHio() { - // DEBUG NONMATCHING - if (dMap_HIO_c::m_res_src_p != NULL) { - dMpath_RGBA_c color; - for (int i = 0; i < 51; i++) { - - } +void dMap_HIO_list_c::copyBufToHio(const char* param_1) { + dMap_prm_res_s* r29 = dMap_HIO_prm_res_dst_s::m_res; + memcpy(r29, param_1, 0x1bc); + dMpath_RGBA_c color; + for (int i = 0; i < 51; i++) { + color.setRGB5A3_palDt(r29->palette_data[i]); + dMap_HIO_c::m_prm_hio.field_0x0[i] = color.getGXColor(); } + memcpy(dMap_HIO_c::m_prm_hio.field_0xcc, &r29->field_0x198, 0x24); } #endif -f32 renderingAmap_c::getIconSize(u8 i_icon) const { +f32 renderingAmap_c::getIconSize(u8 i_typeGroup) const { static f32 const l_iconSize[] = { 0.12f, 0.12f, 0.08f, 0.12f, 0.08f, 0.16f, 0.12f, 0.0f, 0.12f, 0.08f, 0.08f, 0.08f, 0.08f, 0.08f, 0.08f, 0.08f, 0.08f, }; - return l_iconSize[i_icon]; + JUT_ASSERT(1012, (i_typeGroup >= 0) && (i_typeGroup < dTres_c::TYPE_GROUP_ENUM_NUMBER)); + + f32 iconSize = l_iconSize[i_typeGroup]; +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x40) { + iconSize = dMap_HIO_prm_res_dst_s::m_other.field_0x44[i_typeGroup] / 100.0f; + } +#endif + return iconSize; } dMap_prm_res_s* dMap_HIO_prm_res_dst_s::m_res; @@ -147,35 +344,35 @@ void renderingAmap_c::draw() { (f32)dMap_HIO_prm_res_dst_s::m_res->field_0x1aa); tmp = tmp; - f32 temp_f1 = 0.5f + ((0.5f * cM_ssin(65536.0f * tmp - 32768.0f))); + tmp = 0.5f + ((0.5f * cM_ssin(65536.0f * tmp - 32768.0f))); u8 temp_r31 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x198, - dMap_HIO_prm_res_dst_s::m_res->field_0x19c, temp_f1); + dMap_HIO_prm_res_dst_s::m_res->field_0x19c, tmp); u8 temp_r30 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x199, - dMap_HIO_prm_res_dst_s::m_res->field_0x19d, temp_f1); + dMap_HIO_prm_res_dst_s::m_res->field_0x19d, tmp); u8 temp_r29 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x19a, - dMap_HIO_prm_res_dst_s::m_res->field_0x19e, temp_f1); + dMap_HIO_prm_res_dst_s::m_res->field_0x19e, tmp); u8 temp_r28 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x19b, - dMap_HIO_prm_res_dst_s::m_res->field_0x19f, temp_f1); + dMap_HIO_prm_res_dst_s::m_res->field_0x19f, tmp); setAmapPaletteColor(0x2D, temp_r31, temp_r30, temp_r29, temp_r28); - f32 tmp2 = (f32)(g_Counter.mCounter0 % dMap_HIO_prm_res_dst_s::m_res->field_0x1ac) / + tmp = (f32)(g_Counter.mCounter0 % dMap_HIO_prm_res_dst_s::m_res->field_0x1ac) / (f32)dMap_HIO_prm_res_dst_s::m_res->field_0x1ac; - tmp2 = tmp2; + tmp = tmp; - f32 temp_f1_2 = 0.5f + (0.5f * cM_ssin(65536.0f * tmp2 - 32768.0f)); - u8 temp_r31_2 = + tmp = 0.5f + (0.5f * cM_ssin(65536.0f * tmp - 32768.0f)); + temp_r31 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x1a0, - dMap_HIO_prm_res_dst_s::m_res->field_0x1a4, temp_f1_2); - u8 temp_r30_2 = + dMap_HIO_prm_res_dst_s::m_res->field_0x1a4, tmp); + temp_r30 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x1a1, - dMap_HIO_prm_res_dst_s::m_res->field_0x1a5, temp_f1_2); - u8 temp_r29_2 = + dMap_HIO_prm_res_dst_s::m_res->field_0x1a5, tmp); + temp_r29 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x1a2, - dMap_HIO_prm_res_dst_s::m_res->field_0x1a6, temp_f1_2); - u8 temp_r28_2 = + dMap_HIO_prm_res_dst_s::m_res->field_0x1a6, tmp); + temp_r28 = twoValueLineInterpolation(dMap_HIO_prm_res_dst_s::m_res->field_0x1a3, - dMap_HIO_prm_res_dst_s::m_res->field_0x1a7, temp_f1_2); - setAmapPaletteColor(0x2E, temp_r31_2, temp_r30_2, temp_r29_2, temp_r28_2); + dMap_HIO_prm_res_dst_s::m_res->field_0x1a7, tmp); + setAmapPaletteColor(0x2E, temp_r31, temp_r30, temp_r29, temp_r28); renderingDAmap_c::draw(); } @@ -183,7 +380,11 @@ void renderingAmap_c::draw() { int renderingAmap_c::getDispType() const { int disp_type; - switch (dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo())) { + s32 upButton = dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()); + switch (upButton) { + default: + JUT_ASSERT(1075, FALSE); + break; case 7: disp_type = 1; break; @@ -206,15 +407,20 @@ int renderingAmap_c::getDispType() const { case 6: disp_type = 5; break; - default: - JUT_ASSERT(0, FALSE); - break; } return disp_type; } void renderingAmap_c::beforeDrawPath() { + static const GXColor roomSizeColor = {92, 0, 0, 0}; + +#if DEBUG + if (!dMap_HIO_prm_res_dst_s::m_other.field_0x22) { + field_0x38 = 2; + return; + } +#endif if (isDrawOutSideTrim()) { field_0x38 = 0; getOutSideBlackLineNumber(); @@ -225,6 +431,38 @@ void renderingAmap_c::beforeDrawPath() { field_0x38 = 2; } +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x34) { + GXSetMisc(GX_MT_XF_FLUSH, 0); + f32 f31 = dMpath_c::getMinX(); + f32 f30 = dMpath_c::getMinZ(); + f32 f29 = dMpath_c::getMaxX(); + f32 f28 = dMpath_c::getMaxZ(); + if (getStayType() == 0 && dMap_HIO_prm_res_dst_s::m_res->field_0x1ae > 0) { + f31 -= dMap_HIO_prm_res_dst_s::m_res->field_0x1b0 / 12 * mCmPerTexel; + f30 -= dMap_HIO_prm_res_dst_s::m_res->field_0x1b0 / 12 * mCmPerTexel; + f29 += dMap_HIO_prm_res_dst_s::m_res->field_0x1b0 / 12 * mCmPerTexel; + f28 += dMap_HIO_prm_res_dst_s::m_res->field_0x1b0 / 12 * mCmPerTexel; + } + setTevSettingNonTextureDirectColor(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS,GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetLineWidth(dMap_HIO_prm_res_dst_s::m_other.field_0x36, GX_TO_ZERO); + GXSetTevColor(GX_TEVREG0, roomSizeColor); + GXBegin(GX_LINESTRIP, GX_VTXFMT0, 5); + GXPosition2f32(f31, f30); + GXPosition2f32(f29, f30); + GXPosition2f32(f29, f28); + GXPosition2f32(f31, f28); + GXPosition2f32(f31, f30); + GXEnd(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetMisc(GX_MT_XF_FLUSH, 8); + } +#endif } void renderingAmap_c::afterDrawPath() { @@ -232,6 +470,34 @@ void renderingAmap_c::afterDrawPath() { } void renderingAmap_c::rendering(dDrawPath_c::room_class const* i_room) { + static const GXColor roomSizeColor = {92, 0, 0, 0}; +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x3c) { + GXSetMisc(GX_MT_XF_FLUSH, 0); + dStage_FileList2_dt_c* fileList = dStage_roomControl_c::getFileList2(mRoomNo); + f32 f31 = dStage_FileList2_dt_GetLeftRmX(fileList); + f32 f30 = dStage_FileList2_dt_GetInnerRmZ(fileList); + f32 f29 = dStage_FileList2_dt_GetRightRmX(fileList); + f32 f28 = dStage_FileList2_dt_GetFrontRmZ(fileList); + setTevSettingNonTextureDirectColor(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetLineWidth(dMap_HIO_prm_res_dst_s::m_other.field_0x3e, GX_TO_ZERO); + GXSetTevColor(GX_TEVREG0, roomSizeColor); + GXBegin(GX_LINESTRIP, GX_VTXFMT0, 5); + GXPosition2f32(f31, f30); + GXPosition2f32(f29, f30); + GXPosition2f32(f29, f28); + GXPosition2f32(f31, f28); + GXPosition2f32(f31, f30); + GXEnd(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetMisc(GX_MT_XF_FLUSH, 8); + } +#endif dDrawPath_c::rendering(i_room); } @@ -279,6 +545,11 @@ bool renderingAmap_c::isDrawOutSideTrim() { getDispType() == 5) { rt = dMap_HIO_prm_res_dst_s::m_res->field_0x1ae > 0; +#if DEBUG + if (!dMap_HIO_prm_res_dst_s::m_other.field_0x22) { + rt = 0; + } +#endif } return rt; @@ -313,6 +584,11 @@ int renderingAmap_c::getLineWidthSub(int i_no) { pat = l_lineWidthPatOn; } +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x38 && i_no == 3) { + return dMap_HIO_prm_res_dst_s::m_other.field_0x3a; + } +#endif return pat[i_no]; } @@ -345,6 +621,9 @@ s32 renderingAmap_c::getDecorationLineWidth(int param_0) { case 3: var_r31 = dMap_HIO_prm_res_dst_s::m_res->field_0x1b6; break; + default: + JUT_ASSERT(1484, FALSE); + break; } if (var_r31 > 0) { @@ -359,7 +638,12 @@ s32 renderingAmap_c::getDecorationLineWidth(int param_0) { } int renderingAmap_c::getLineWidth(int i_no) { - return getLineWidthSub(i_no); + int r30 = 0; + int r31 = 0; + if (r30 == 0) { + r31 = getLineWidthSub(i_no); + } + return r31; } const GXColor* dMap_c::getColor(int i_no) { @@ -406,21 +690,20 @@ const GXColor* dMap_c::getColor(int i_no) { GXColor* renderingAmap_c::getLineColor(int param_0, int param_1) { static GXColor backColor = {0x04, 0x00, 0x00, 0x00}; - static const GXColor borderColor0 = {0xB4, 0x00, 0x00, 0x00}; - static const GXColor borderColor1 = {0xB8, 0x00, 0x00, 0x00}; - GXColor* color = &backColor; if (param_1 == 4) { switch (field_0x3c) { case 0: + static const GXColor borderColor0 = {0xB4, 0x00, 0x00, 0x00}; *color = borderColor0; break; case 1: + static const GXColor borderColor1 = {0xB8, 0x00, 0x00, 0x00}; *color = borderColor1; break; default: - JUT_ASSERT(0, FALSE); + JUT_ASSERT(1636, FALSE); break; } } else { @@ -431,36 +714,50 @@ GXColor* renderingAmap_c::getLineColor(int param_0, int param_1) { } const GXColor* renderingAmap_c::getDecoLineColor(int param_0, int param_1) { - static GXColor const colorTable[] = { - {0xBC, 0x00, 0x00, 0x00}, - {0xC0, 0x00, 0x00, 0x00}, - {0xC4, 0x00, 0x00, 0x00}, - {0xC8, 0x00, 0x00, 0x00}, - }; - - const GXColor* color; if (isDrawOutSideTrim() && field_0x38 != 2) { - JUT_ASSERT(0, m_outSideBlackLineCnt < ARRAY_SIZEU(colorTable)); - color = &colorTable[m_outSideBlackLineCnt]; + static GXColor const colorTable[] = { + {0xBC, 0x00, 0x00, 0x00}, + {0xC0, 0x00, 0x00, 0x00}, + {0xC4, 0x00, 0x00, 0x00}, + {0xC8, 0x00, 0x00, 0x00}, + }; + JUT_ASSERT(1690, m_outSideBlackLineCnt < ARRAY_SIZEU(colorTable)); + return &colorTable[m_outSideBlackLineCnt]; } else { - color = getLineColor(param_0, param_1); + return getLineColor(param_0, param_1); } - - return color; } const Vec* dMap_c::getIconPosition(dTres_c::typeGroupData_c* i_data) const { +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x8a && i_data) { + u8 r29 = i_data->getTypeGroupNo(); + if (r29 < 17) { + Vec local_24 = *i_data->getPos(); + local_24.x += dMap_HIO_prm_res_dst_s::m_other.field_0x8c[r29]; + i_data->setPos(local_24); + } + } +#endif return renderingPlusDoorAndCursor_c::getIconPosition(i_data); } int renderingAmap_c::getIconGroupNumber(u8 param_0) const { - return renderingDAmap_c::getIconGroupNumber(param_0); + if (DEBUG && dMap_HIO_prm_res_dst_s::m_other.field_0x8a) { + return true; + } else { + return renderingDAmap_c::getIconGroupNumber(param_0); + } } bool renderingAmap_c::hasMap() const { int stay_type = getStayType(); - return stay_type == 1 && dMapInfo_n::chkGetMap(); + bool result = false; + if (stay_type == 1 && dMapInfo_n::chkGetMap()) { + result = true; + } + return result; } bool renderingAmap_c::isRendDoor() const { @@ -481,19 +778,51 @@ bool renderingAmap_c::isRendCursor() const { } bool renderingAmap_c::isRendAllRoom() const { +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x21) { + return true; + } +#endif int disp_type = getDispType(); - return disp_type != 2 && disp_type != 3 && disp_type != 5; + bool result = disp_type != 2 && disp_type != 3 && disp_type != 5; + return result; } +#if DEBUG +bool dMap_c::isSwitch(const dDrawPath_c::group_class* group) { + if (group->mSwbit == 0xff) { + return true; + } + if (dMap_HIO_prm_res_dst_s::m_other.field_0x10) { + if (group->mSwbit == 0xb2 && getStayType() == 0 && dComIfGs_isSaveDunSwitch(0x32)) { + if (!strcmp(dComIfGp_getStartStageName(), "F_SP121")) { + return renderingDAmap_c::isSwitch(group); + } + } + return dMap_HIO_prm_res_dst_s::m_other.field_0x11; + } + return renderingDAmap_c::isSwitch(group); +} +#endif + +const int MAP_DISP_TYPE_ENUM_END = 7; + int renderingAmap_c::getStayType() const { static int const l_stayType[] = {0, 1, 0, 0, 0, 0, 0}; - return l_stayType[getDispType()]; + int mapDispType = getDispType(); + JUT_ASSERT(1825, mapDispType < MAP_DISP_TYPE_ENUM_END); + return l_stayType[mapDispType]; } bool renderingAmap_c::isDrawIconSingle2(dTres_c::data_s const* i_data, bool param_1, bool param_2, int param_3) const { - JUT_ASSERT(0, i_data != NULL); +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x8a) { + return true; + } +#endif + JUT_ASSERT(1869, i_data != NULL); bool var_r31 = false; int disp_type = getDispType(); @@ -507,9 +836,12 @@ bool renderingAmap_c::isDrawIconSingle2(dTres_c::data_s const* i_data, bool para } switch (group_no) { + default: + JUT_ASSERT(1884, FALSE); + break; case 0: if (stay_type == 1) { - JUT_ASSERT(0, i_data->mNo != 255); + JUT_ASSERT(1888, i_data->mNo != 255); if (var_r23 && i_data->mNo != 255 && !dComIfGs_isTbox(i_data->mNo) && param_1) { var_r31 = true; @@ -559,7 +891,7 @@ bool renderingAmap_c::isDrawIconSingle2(dTres_c::data_s const* i_data, bool para } if (temp_r23_2) { - JUT_ASSERT(0, i_data->mNo != 255); + JUT_ASSERT(1982, i_data->mNo != 255); bool temp_r23_3 = false; if (i_data->mNo != 255 && !dComIfGs_isTbox(i_data->mNo)) { temp_r23_3 = true; @@ -658,15 +990,68 @@ bool renderingAmap_c::isDrawIconSingle2(dTres_c::data_s const* i_data, bool para var_r31 = true; } break; - default: - JUT_ASSERT(0, FALSE); + case 6: + case 7: break; } return var_r31; } +#if DEBUG +void dMap_c::beforeDrawPath() { + if (dMap_HIO_c::m_prm_hio.field_0xf0.field_0x0) { + static const GXColor roomSizeColor = {92, 0, 0, 0}; + GXSetMisc(GX_MT_XF_FLUSH,0); + f32 f31 = dMap_HIO_c::m_prm_hio.field_0xf0.field_0x4; + f32 f29 = dMpath_c::getMinZ(); + f32 f28 = dMpath_c::getMaxZ(); + setTevSettingNonTextureDirectColor(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetLineWidth(dMap_HIO_prm_res_dst_s::m_other.field_0x36, GX_TO_ZERO); + GXSetTevColor(GX_TEVREG0, roomSizeColor); + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition2f32(f31, f29); + GXPosition2f32(f31, f28); + GXEnd(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetMisc(GX_MT_XF_FLUSH, 8); + } + if (dMap_HIO_c::m_prm_hio.field_0xf0.field_0x8) { + static const GXColor roomSizeColor = {92, 0, 0, 0}; + GXSetMisc(GX_MT_XF_FLUSH,0); + f32 f30 = dMap_HIO_c::m_prm_hio.field_0xf0.field_0xc; + f32 f27 = dMpath_c::getMinX(); + f32 f26 = dMpath_c::getMaxX(); + setTevSettingNonTextureDirectColor(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetLineWidth(dMap_HIO_prm_res_dst_s::m_other.field_0x36, GX_TO_ZERO); + GXSetTevColor(GX_TEVREG0, roomSizeColor); + GXBegin(GX_LINESTRIP, GX_VTXFMT0, 2); + GXPosition2f32(f27, f30); + GXPosition2f32(f26, f30); + GXEnd(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); + GXSetMisc(GX_MT_XF_FLUSH, 8); + } + renderingAmap_c::beforeDrawPath(); +} +#endif + bool dMap_c::isDrawType(int param_0) { +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x1c) { + return false; + } +#endif return (param_0 & 0x80) == 0; } @@ -684,7 +1069,7 @@ bool dMap_c::isSpecialOutline() { } void dMap_c::copyPalette() { - JUT_ASSERT(0, m_res != NULL); + JUT_ASSERT(2435, m_res != NULL); cLib_memCpy(m_res, m_res_src, sizeof(dMap_HIO_prm_res_dst_s::m_res->palette_data)); if (getStayType() == 0) { @@ -726,8 +1111,8 @@ dMap_c::dMap_c(int param_0, int param_1, int param_2, int param_3) { mTopEdgePlus = 0.0f; field_0x74 = 0; - mTexSizeW = 0; - mTexSizeH = 0; + mTexSizeX = 0; + mTexSizeY = 0; mStayRoomNo = -1; field_0x80 = -1; field_0x84 = -1; @@ -739,16 +1124,50 @@ dMap_c::dMap_c(int param_0, int param_1, int param_2, int param_3) { field_0x8f = 0; field_0x90 = 0; +#if DEBUG + field_0x91 = 0; + m_mySelfPointer = this; +#endif + m_res = new (0x20) dMap_prm_res_s; - JUT_ASSERT(0, m_res != NULL); + JUT_ASSERT(2559, m_res != NULL); dMap_HIO_prm_res_dst_s::m_res = m_res; +#if DEBUG + int stayNo = dComIfGp_roomControl_getStayNo(); + if (stayNo != 50 && stayNo != 51 && getDispType() == 1) { + f32 f31 = 0.0f; + stage_stag_info_class* stageInfo = dComIfGp_getStage()->getStagInfo(); + if (stageInfo) { + f31 = stageInfo->field_0x20; + } + if (f31 == 0.0f) { + const char* stageName = dComIfGp_getStartStageName(); + char buf[3]; + buf[0] = stageName[0]; + buf[1] = stageName[1]; + buf[2] = 0; + if (strcmp(buf, "T_")) { + JUT_WARN(2585, "Area map disp area size zero."); + } + } + } +#endif + m_res_src = (dMap_prm_res_s*)dComIfG_getObjectRes("Always", 0x45); + +#if DEBUG + cLib_memCpy(&dMap_HIO_prm_res_dst_s::m_other, &dMap_HIO_prm_res_src_s::m_other, 0x2f0); + dMap_HIO_c::m_res_src_p = m_res_src; + g_dMap_HIO.mList.copySrcToHio(); + g_dMap_HIO.mList.copyHioToDst(); +#endif + resCopy(); - mTexSizeW = param_0; - mTexSizeH = param_1; + mTexSizeX = param_0; + mTexSizeY = param_1; if (dMap_HIO_prm_res_dst_s::m_res->field_0x1ae > 0) { field_0x74 = dMap_HIO_prm_res_dst_s::m_res->field_0x1b0 / 6; @@ -756,14 +1175,14 @@ dMap_c::dMap_c(int param_0, int param_1, int param_2, int param_3) { int buffer_size = GXGetTexBufferSize(param_2, param_3, 9, GX_FALSE, 0); mImage_p = new (0x20) u8[buffer_size]; - JUT_ASSERT(0, mImage_p != NULL); + JUT_ASSERT(2638, mImage_p != NULL); - renderingDAmap_c::init(mImage_p, mTexSizeW, mTexSizeH, mTexSizeW, mTexSizeH); + renderingDAmap_c::init(mImage_p, mTexSizeX, mTexSizeY, mTexSizeX, mTexSizeY); mResTIMG = new (0x20) ResTIMG; - JUT_ASSERT(0, mResTIMG != NULL); + JUT_ASSERT(2647, mResTIMG != NULL); - makeResTIMG(mResTIMG, mTexSizeW, mTexSizeH, mImage_p, (u8*)m_res, 0x33); + makeResTIMG(mResTIMG, mTexSizeX, mTexSizeY, mImage_p, (u8*)m_res, 0x33); } #if DEBUG @@ -771,16 +1190,16 @@ void dMap_c::changeTextureSize(int param_1, int param_2, int param_3) { JUT_ASSERT(2672, mImage_p != NULL); JUT_ASSERT(2673, mResTIMG != NULL); - mTexSizeW = param_1 >> param_3; - mTexSizeH = param_2 >> param_3; + mTexSizeX = param_1 >> param_3; + mTexSizeY = param_2 >> param_3; - u32 imageSize = GXGetTexBufferSize(mTexSizeW, mTexSizeH, 9, 0, 0); - OS_REPORT("imageSize<%d> <%d kbyte>mTexSizeW<%d>mTexSizeH<%d>\n", imageSize, imageSize * (1.0f / 1024.f), mTexSizeW, mTexSizeH); + u32 imageSize = GXGetTexBufferSize(mTexSizeX, mTexSizeY, 9, 0, 0); + OS_REPORT("imageSize<%d> <%d kbyte>mTexSizeW<%d>mTexSizeH<%d>\n", imageSize, int(imageSize * (1.0f / 1024.f)), mTexSizeX, mTexSizeY); JUT_ASSERT(2682, mImage_p != NULL); - - init(mImage_p, mTexSizeW, mTexSizeH, param_1, param_2); - makeResTIMG(mResTIMG, mTexSizeW, mTexSizeH, mImage_p, (u8*)m_res, 0x33); + + init(mImage_p, mTexSizeX, mTexSizeY, param_1, param_2); + makeResTIMG(mResTIMG, mTexSizeX, mTexSizeY, mImage_p, (u8*)m_res, 0x33); } #endif @@ -807,7 +1226,7 @@ void dMap_c::getMapMinMaxXZ(int i_roomNo, f32* param_1, f32* param_2, f32* param f32 var_f2 = 0.0f; f32 var_f3 = 0.0f; - JUT_ASSERT(0, i_roomNo >= 0); + JUT_ASSERT(2749, i_roomNo >= 0); if (i_roomNo >= 0) { f32 temp_f31 = dMpath_c::getMinX(); @@ -821,7 +1240,7 @@ void dMap_c::getMapMinMaxXZ(int i_roomNo, f32* param_1, f32* param_2, f32* param f32 sp8 = 0.0f; dStage_FileList2_dt_c* fileList2_p = dStage_roomControl_c::getFileList2(i_roomNo); - JUT_ASSERT(0, fileList2_p != NULL); + JUT_ASSERT(2766, fileList2_p != NULL); if (fileList2_p != NULL) { dMapInfo_n::getRoomMinMaxXZ(i_roomNo, &sp14, &sp10, &spC, &sp8); @@ -829,7 +1248,7 @@ void dMap_c::getMapMinMaxXZ(int i_roomNo, f32* param_1, f32* param_2, f32* param switch (getDispType()) { default: - JUT_ASSERT(0, FALSE); + JUT_ASSERT(2773, FALSE); case 4: case 0: var_f0 = temp_f31; @@ -914,7 +1333,7 @@ void dMap_c::calcMapCenterXZ(int i_roomNo, f32* param_1, f32* param_2) { f32 var_f31 = 0.0f; f32 var_f30 = 0.0f; - JUT_ASSERT(0, i_roomNo >= 0); + JUT_ASSERT(2892, i_roomNo >= 0); if (i_roomNo >= 0) { f32 sp14 = 0.0f; @@ -937,11 +1356,11 @@ void dMap_c::calcMapCenterXZ(int i_roomNo, f32* param_1, f32* param_2) { } void dMap_c::calcMapCmPerTexel(int i_roomNo, f32* ip_cmPerTexel) { - JUT_ASSERT(0, i_roomNo >= 0); - JUT_ASSERT(0, ip_cmPerTexel != NULL); + JUT_ASSERT(2928, i_roomNo >= 0); + JUT_ASSERT(2929, ip_cmPerTexel != NULL); f32 cmPerTexel = 0.0f; - JUT_ASSERT(0, mTexSizeH != 0); + JUT_ASSERT(2931, mTexSizeY != 0); if (i_roomNo >= 0) { if (getStayType() == 0) { @@ -960,12 +1379,12 @@ void dMap_c::calcMapCmPerTexel(int i_roomNo, f32* ip_cmPerTexel) { var_f3 = temp_f0; } - cmPerTexel = var_f3 / ((f32)mTexSizeH - (f32)(field_0x74 + 4)); + cmPerTexel = var_f3 / ((f32)mTexSizeY - (f32)(field_0x74 + 4)); } else { f32 var_f31 = 0.0f; stage_stag_info_class* pstag = dComIfGp_getStage()->getStagInfo(); - JUT_ASSERT(0, pstag != NULL); + JUT_ASSERT(2952, pstag != NULL); if (pstag != NULL) { var_f31 = pstag->field_0x20; @@ -973,13 +1392,18 @@ void dMap_c::calcMapCmPerTexel(int i_roomNo, f32* ip_cmPerTexel) { if (var_f31 == 0.0f) { var_f31 = 10800.0f; +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x2c) { + var_f31 = dMap_HIO_prm_res_dst_s::m_other.field_0x30; + } +#endif } - cmPerTexel = var_f31 / (f32)mTexSizeH; + cmPerTexel = var_f31 / (f32)mTexSizeY; } } - JUT_ASSERT(0, cmPerTexel != 0.0f); + JUT_ASSERT(2967, cmPerTexel != 0.0f); if (ip_cmPerTexel != NULL) { *ip_cmPerTexel = cmPerTexel; @@ -995,15 +1419,22 @@ inline void getRGBA_RGB5A3(const dMpath_RGB5A3_palDt_s& palette, u8& r, u8& g, u temp_r0 = palette.field_0x0.color; if (temp_r0 & 0x8000) { - t_r = ((temp_r0 >> 7) & 0xF8) | (r >> 5); - t_g = ((temp_r0 >> 2) & 0xF8) | (g >> 5); - t_b = ((temp_r0 << 3) & 0xF8) | (b >> 5); + t_r = (temp_r0 >> 7) & 0xF8; + t_r |= r >> 5; + t_g = (temp_r0 >> 2) & 0xF8; + t_g |= g >> 5; + t_b = (temp_r0 << 3) & 0xF8; + t_b |= b >> 5; t_a = 0xFF; } else { - t_r = ((temp_r0 >> 4) & 0xF0) | (r >> 4); - t_g = ((temp_r0 >> 0) & 0xF0) | (g >> 4); - t_b = ((temp_r0 << 4) & 0xF0) | (b >> 4); - t_a = ((temp_r0 >> 7) & 0xE0) | (a >> 3) | (a >> 6); + t_r = (temp_r0 >> 4) & 0xF0; + t_r |= r >> 4; + t_g = (temp_r0 >> 0) & 0xF0; + t_g |= g >> 4; + t_b = (temp_r0 << 4) & 0xF0; + t_b |= b >> 4; + t_a = (temp_r0 >> 7) & 0xE0; + t_a |= a >> 3 | a >> 6; } r = t_r; @@ -1013,38 +1444,38 @@ inline void getRGBA_RGB5A3(const dMpath_RGB5A3_palDt_s& palette, u8& r, u8& g, u } void dMap_c::setMapPaletteColorAlphaPer(int i_paletteNo, f32 param_1) { - JUT_ASSERT(0, i_paletteNo < renderingAmap_c::PALETTE_NUMBER); + JUT_ASSERT(3027, i_paletteNo < renderingAmap_c::PALETTE_NUMBER); int pixel; - u8 scaled_a = 0; u8 r = 0; u8 g = 0; u8 b = 0; u8 a = 0; - dMpath_RGB5A3_palDt_s& temp_r31 = dMap_HIO_prm_res_dst_s::m_res->palette_data[i_paletteNo]; - getRGBA_RGB5A3(m_res_src->palette_data[i_paletteNo], r, g, b, a); + int paletteNo = i_paletteNo; + dMpath_RGB5A3_palDt_s& temp_r31 = dMap_HIO_prm_res_dst_s::m_res->palette_data[paletteNo]; + getRGBA_RGB5A3(m_res_src->palette_data[paletteNo], r, g, b, a); - scaled_a = a * param_1; - if (scaled_a >= 0xE0) { - pixel = ((r & 0xF8) << 7) | ((g & 0xF8) << 2) | ((b & 0xF8) >> 3) | 0x8000; + a = a * param_1; + if (a >= 0xE0) { + pixel = (r & 0xF8) << 7 | (g & 0xF8) << 2 | (b & 0xF8) >> 3 | 0x8000; } else { - pixel = ((r & 0xF0) << 4) | (g & 0xF0) | ((b & 0xF0) >> 4) | ((scaled_a & 0xE0) << 7); + pixel = (r & 0xF0) << 4 | (g & 0xF0) | (b & 0xF0) >> 4 | (a & 0xE0) << 7; } - temp_r31.field_0x0.color = pixel; - temp_r31.field_0x2.color = pixel; - temp_r31.field_0x4.color = pixel; - temp_r31.field_0x6.color = pixel; - DCStoreRange(&dMap_HIO_prm_res_dst_s::m_res->palette_data[i_paletteNo], + u16 r30 = pixel; + temp_r31.field_0x0.color = r30; + temp_r31.field_0x2.color = r30; + temp_r31.field_0x4.color = r30; + temp_r31.field_0x6.color = r30; + DCStoreRange(&dMap_HIO_prm_res_dst_s::m_res->palette_data[paletteNo], sizeof(dMpath_RGB5A3_palDt_s)); } void dMap_c::copyPalette(int i_dstPaletteNo, int i_srcPaletteNo, f32 param_2) { - JUT_ASSERT(0, i_dstPaletteNo < renderingAmap_c::PALETTE_NUMBER); - JUT_ASSERT(0, i_srcPaletteNo < renderingAmap_c::PALETTE_NUMBER); + JUT_ASSERT(3052, i_srcPaletteNo < renderingAmap_c::PALETTE_NUMBER); + JUT_ASSERT(3053, i_dstPaletteNo < renderingAmap_c::PALETTE_NUMBER); int pixel; - u8 scaled_a = 0; u8 r = 0; u8 g = 0; u8 b = 0; @@ -1052,23 +1483,24 @@ void dMap_c::copyPalette(int i_dstPaletteNo, int i_srcPaletteNo, f32 param_2) { dMpath_RGB5A3_palDt_s& temp_r31 = dMap_HIO_prm_res_dst_s::m_res->palette_data[i_dstPaletteNo]; getRGBA_RGB5A3(m_res_src->palette_data[i_srcPaletteNo], r, g, b, a); - scaled_a = a * param_2; - if (scaled_a >= 0xE0) { + a = a * param_2; + if (a >= 0xE0) { pixel = ((r & 0xF8) << 7) | ((g & 0xF8) << 2) | ((b & 0xF8) >> 3) | 0x8000; } else { - pixel = ((r & 0xF0) << 4) | (g & 0xF0) | ((b & 0xF0) >> 4) | ((scaled_a & 0xE0) << 7); + pixel = ((r & 0xF0) << 4) | (g & 0xF0) | ((b & 0xF0) >> 4) | ((a & 0xE0) << 7); } - temp_r31.field_0x0.color = pixel; - temp_r31.field_0x2.color = pixel; - temp_r31.field_0x4.color = pixel; - temp_r31.field_0x6.color = pixel; + u16 r30 = pixel; + temp_r31.field_0x0.color = r30; + temp_r31.field_0x2.color = r30; + temp_r31.field_0x4.color = r30; + temp_r31.field_0x6.color = r30; DCStoreRange(&dMap_HIO_prm_res_dst_s::m_res->palette_data[i_dstPaletteNo], sizeof(dMpath_RGB5A3_palDt_s)); } void dMap_c::setAmapPaletteColor(int i_paletteNo, u8 i_r, u8 i_g, u8 i_b, u8 i_scaledA) { - JUT_ASSERT(0, i_paletteNo < renderingAmap_c::PALETTE_NUMBER); + JUT_ASSERT(3088, i_paletteNo < renderingAmap_c::PALETTE_NUMBER); int pixel; if (i_scaledA >= 0xE0) { @@ -1078,11 +1510,12 @@ void dMap_c::setAmapPaletteColor(int i_paletteNo, u8 i_r, u8 i_g, u8 i_b, u8 i_s ((i_r & 0xF0) << 4) | (i_g & 0xF0) | ((i_b & 0xF0) >> 4) | ((i_scaledA & 0xE0) << 7); } + u16 r30 = pixel; dMpath_RGB5A3_palDt_s& temp_r31 = dMap_HIO_prm_res_dst_s::m_res->palette_data[i_paletteNo]; - temp_r31.field_0x0.color = pixel; - temp_r31.field_0x2.color = pixel; - temp_r31.field_0x4.color = pixel; - temp_r31.field_0x6.color = pixel; + temp_r31.field_0x0.color = r30; + temp_r31.field_0x2.color = r30; + temp_r31.field_0x4.color = r30; + temp_r31.field_0x6.color = r30; DCStoreRange(&dMap_HIO_prm_res_dst_s::m_res->palette_data[i_paletteNo], sizeof(dMpath_RGB5A3_palDt_s)); } @@ -1092,15 +1525,24 @@ int dMap_c::getDispType() const { } bool dMap_c::isDrawRoom(int param_0, int param_1) const { +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x88) { + if (!dMap_HIO_prm_res_dst_s::m_other.field_0x89) { + return true; + } else { + return false; + } + } +#endif if (field_0x8e == 2) { if (field_0x8f >= 3 && field_0x8f <= 3) { return param_0 == field_0x84 || param_0 == field_0x88; } else { return param_0 == field_0x80; } - } else { - return renderingDAmap_c::isDrawRoom(param_0, param_1); } + + return renderingDAmap_c::isDrawRoom(param_0, param_1); } int dMap_c::getRoomNoSingle() { @@ -1146,11 +1588,19 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { if (getStayType() == 0 && dComIfGs_isSaveDunSwitch(0x32) && strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) { +#if DEBUG + field_0x64 = 33830.0f; +#else field_0x64 = 0.0f; +#endif mPackPlusZ = -3710.0f; f32 temp = (field_0x58 * (f32)(field_0x74 + 4)) * 0.5f; +#if DEBUG + mRightEdgePlus = -(((dMpath_c::getMinZ() - (-127103.67f)) - temp) / field_0x58); +#else mRightEdgePlus = 0.0f; +#endif mTopEdgePlus = ((-22397.0f - dMpath_c::getMinZ()) - temp) / field_0x58; } else { mRightEdgePlus = 0.0f; @@ -1165,8 +1615,7 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { switch (getDispType()) { default: - case 0: - JUT_ASSERT(0, FALSE); + JUT_ASSERT(3384, FALSE); break; case 5: field_0x8e = 2; @@ -1174,6 +1623,11 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { case 1: field_0x8e = 1; break; + case 0: + case 2: + case 3: + case 4: + break; } switch (field_0x8e) { @@ -1217,9 +1671,20 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { if (field_0x80 != dMapInfo_c::getNextRoomNoForMapPat0()) { field_0x84 = (s8)dMapInfo_c::getNextRoomNoForMapPat0(); field_0x88 = field_0x80; +#if DEBUG + field_0x90 = dMap_HIO_prm_res_dst_s::m_other.field_0x1d; + if (!dMap_HIO_prm_res_dst_s::m_other.field_0x1d) { + field_0x8f = 2; + field_0x90 = dMap_HIO_prm_res_dst_s::m_other.field_0x1e; + } else { + field_0x8f = 1; + field_0x90 = dMap_HIO_prm_res_dst_s::m_other.field_0x1d; + } +#else field_0x90 = 30; field_0x8f = 1; field_0x90 = 30; +#endif } break; case 1: @@ -1229,14 +1694,22 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { if (field_0x90 == 0 && mStayRoomNo != field_0x88) { field_0x8f = 2; +#if DEBUG + field_0x90 = dMap_HIO_prm_res_dst_s::m_other.field_0x1e; +#else field_0x90 = 5; +#endif } break; case 2: field_0x90--; if (field_0x90 == 0) { field_0x8f = 3; +#if DEBUG + field_0x90 = dMap_HIO_prm_res_dst_s::m_other.field_0x1f; +#else field_0x90 = 20; +#endif } break; case 3: @@ -1251,7 +1724,11 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { mCenterX += mPackX; mCenterZ -= mPackZ; field_0x8f = 4; +#if DEBUG + field_0x90 = dMap_HIO_prm_res_dst_s::m_other.field_0x20; +#else field_0x90 = 5; +#endif } break; case 4: @@ -1292,10 +1769,16 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { break; case 2: switch (field_0x8f) { + case 1: + break; case 2: { - f32 temp_f31 = (f32)field_0x90 / 5.0f; - setMapPaletteColorAlphaPer(0x2F, 0x32, temp_f31); - setMapPaletteColorAlphaPer(0x21, 0x2B, temp_f31); +#if DEBUG + f32 local_68 = f32(field_0x90) / dMap_HIO_prm_res_dst_s::m_other.field_0x1e; +#else + f32 local_68 = f32(field_0x90) / 5.0f; +#endif + setMapPaletteColorAlphaPer(0x2F, 0x32, local_68); + setMapPaletteColorAlphaPer(0x21, 0x2B, local_68); break; } case 3: { @@ -1303,7 +1786,11 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { f32 sp24, sp20; calcMapCenterXZ(field_0x84, &sp24, &sp20); - f32 temp_f31_2 = 1.0f - ((f32)field_0x90 / 20.0f); +#if DEBUG + f32 temp_f31_2 = 1.0f - (f32(field_0x90) / dMap_HIO_prm_res_dst_s::m_other.field_0x1f); +#else + f32 temp_f31_2 = 1.0f - (f32(field_0x90) / 20.0f); +#endif mCenterX += temp_f31_2 * (sp24 - mCenterX); mCenterZ += temp_f31_2 * (sp20 - mCenterZ); @@ -1331,9 +1818,13 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { break; } case 4: { - f32 temp_f31_3 = 1.0f - ((f32)field_0x90 / 5.0f); - setMapPaletteColorAlphaPer(0x2F, 0x32, temp_f31_3); - setMapPaletteColorAlphaPer(0x21, 0x2B, temp_f31_3); +#if DEBUG + f32 local_8c = 1.0f - (f32(field_0x90) / dMap_HIO_prm_res_dst_s::m_other.field_0x20); +#else + f32 local_8c = 1.0f - (f32(field_0x90) / 5.0f); +#endif + setMapPaletteColorAlphaPer(0x2F, 0x32, local_8c); + setMapPaletteColorAlphaPer(0x21, 0x2B, local_8c); break; } case 6: @@ -1344,19 +1835,60 @@ void dMap_c::_move(f32 i_centerX, f32 i_centerZ, int i_roomNo, f32 param_3) { } field_0x8d = 1; +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x23) { + mCenterX = i_centerX; + mCenterZ = i_centerZ; + } + if (dMap_HIO_c::m_prm_hio.field_0xf0.field_0x12) { + calcMapCenterXZ(field_0x80, &mCenterX, &mCenterZ); + calcMapCmPerTexel(field_0x80, &field_0x58); + f32 local_90, local_94; + getPack(field_0x80, &local_90, &local_94); + local_90 += dMap_HIO_c::m_prm_hio.field_0xf0.field_0x14; + local_94 += dMap_HIO_c::m_prm_hio.field_0xf0.field_0x18; + mCenterX += local_90; + mCenterZ -= local_94; + OS_REPORT("mCenterX<%10.3f>mCenterZ<%10.3f>\n", mCenterX, mCenterZ); + } +#endif } void dMap_c::_draw() { if (mStayRoomNo >= 0 && field_0x8d != 0) { - s8 floor_no = dMapInfo_c::getNowStayFloorNo(); - entry(mCenterX, mCenterZ, field_0x58, mStayRoomNo, floor_no); + entry(mCenterX, mCenterZ, field_0x58, mStayRoomNo, dMapInfo_c::getNowStayFloorNo()); +#if DEBUG + field_0x91 = 0; +#endif } } dTres_c::typeGroupData_c* dMap_c::getFirstData(u8 param_0) { +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x8a) { + dTres_c::typeGroupData_c* typeGroupData = &dMap_HIO_prm_res_dst_s::m_other.field_0x114[param_0]; + typeGroupData->setNo(0); + typeGroupData->setRoomNo(dComIfGp_roomControl_getStayNo()); + typeGroupData->setStatus(0); + typeGroupData->setArg1(0); + typeGroupData->setPos(daPy_getPlayerActorClass()->current.pos); + typeGroupData->setSwBit(0xff); + typeGroupData->setType(dTres_c::getTypeGroupNoToType(param_0)); + typeGroupData->setArg2(0xff); + typeGroupData->setAngleY(0); + typeGroupData->setTypeGroupNo(param_0); + typeGroupData->setNextDataPointer(NULL); + return typeGroupData; + } +#endif return renderingPlusDoorAndCursor_c::getFirstData(param_0); } dTres_c::typeGroupData_c* dMap_c::getNextData(dTres_c::typeGroupData_c* param_0) { +#if DEBUG + if (dMap_HIO_prm_res_dst_s::m_other.field_0x8a) { + return NULL; + } +#endif return renderingPlusDoorAndCursor_c::getNextData(param_0); } diff --git a/src/d/d_map_path.cpp b/src/d/d_map_path.cpp index d34b981e89..ca95a043fd 100644 --- a/src/d/d_map_path.cpp +++ b/src/d/d_map_path.cpp @@ -36,6 +36,43 @@ void dMpath_n::dTexObjAggregate_c::remove() { } } +void dMpath_ColorCnv_n::convertRGB5A3_To_GXColor(_GXColor& color32, const dMpath_RGB5A3_s& color16) { + int r, g, b, a; + u16 color = color16.color; + if (color & 0x8000) { + r = color16.color >> 7 & 0xf8; + r |= r >> 5; + g = color16.color >> 2 & 0xf8; + g |= g >> 5; + b = color16.color << 3 & 0xf8; + b |= b >> 5; + a = 255; + } else { + r = color16.color >> 4 & 0xf0; + r |= r >> 4; + g = color16.color & 0xf0; + g |= g >> 4; + b = color16.color << 4 & 0xf0; + b |= b >> 4; + a = color16.color >> 7 & 0xe0; + a |= a >> 3 | a >> 6; + } + color32.r = r; + color32.g = g; + color32.b = b; + color32.a = a; +} + +void dMpath_RGBA_c::setGXColor(const GXColor& color) { + mColor = color; +} + +void dMpath_RGBA_c::setRGB5A3_palDt(const dMpath_RGB5A3_palDt_s& pal_data) { + GXColor color; + dMpath_ColorCnv_n::convertRGB5A3_To_GXColor(color, pal_data.field_0x0); + setGXColor(color); +} + #if DEBUG void dMpath_HIO_n::hioList_c::gen(JORMContext* mctx) { static const char* number[] = { @@ -381,7 +418,7 @@ void dRenderingFDAmap_c::preRenderingMap() { Mtx44 matrix; C_MTXOrtho(matrix, top, -top, -right, right, 0.0f, 10000.0f); GXSetProjection(matrix, GX_ORTHOGRAPHIC); - GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); + GXLoadPosMtxImm(cMtx_getIdentity(), GX_PNMTX0); GXSetCurrentMtx(0); drawBack(); } @@ -418,7 +455,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0); GXSetNumTevStages(1); - GXLoadTexObj(dMpath_n::m_texObjAgg.mp_texObj[6], GX_TEXMAP0); + GXLoadTexObj(dMpath_n::m_texObjAgg.getTexObjPointer(6), GX_TEXMAP0); u16* data_p = p_line->mpData; s32 data_num = p_line->mDataNum; @@ -429,7 +466,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li lineColor.r = lineColor.r - 4; GXSetTevColor(GX_TEVREG1, lineColor); - for (int i = 0; i < data_num; data_p++, i++) { + for (int i = 0; i < data_num; i++) { #ifndef HYRULE_FIELD_SPEEDHACK if (i < data_num - 1) { GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); @@ -443,6 +480,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li GXTexCoord2f32(0, 0); GXPosition1x16(data_p[1]); GXTexCoord2f32(0, 0); + GXEnd(); } GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_KONST, GX_CC_TEXC, GX_CC_C1); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); @@ -453,6 +491,7 @@ void dRenderingFDAmap_c::renderingDecoration(dDrawPath_c::line_class const* p_li GXPosition1x16(data_p[0]); GXTexCoord2f32(0, 0); GXEnd(); + data_p++; } setTevSettingNonTextureDirectColor(); diff --git a/src/d/d_tresure.cpp b/src/d/d_tresure.cpp index bf4150d3ce..b6083b6294 100644 --- a/src/d/d_tresure.cpp +++ b/src/d/d_tresure.cpp @@ -235,18 +235,21 @@ u8 const dTres_c::typeToTypeGroup[17][2] = { {0x83, 0x0C}, {0x84, 0x0D}, {0x85, 0x0E}, {0x87, 0x0F}, {0x88, 0x10}, }; -int dTres_c::getTypeGroupNoToType(u8 i_typeGroupNo) { +u8 dTres_c::getTypeGroupNoToType(u8 i_typeGroupNo) { + JUT_ASSERT(651, i_typeGroupNo < TYPE_GROUP_ENUM_NUMBER); return typeToTypeGroup[i_typeGroupNo][0]; } u8 dTres_c::getTypeToTypeGroupNo(u8 i_type) { - int groupNo = 17; + int rt = 17; for (int i = 0; i < 17; i++) { if (i_type == typeToTypeGroup[i][0]) { - groupNo = typeToTypeGroup[i][1]; + rt = typeToTypeGroup[i][1]; break; } } - return groupNo; + JUT_ASSERT(674, rt < TYPE_GROUP_ENUM_NUMBER); + + return rt; }