From b6b8d14d0cc242a8217bffadb8f2d444ba7027fc Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 3 Feb 2024 18:09:07 -0500 Subject: [PATCH] d_meter work --- include/d/d_map.h | 45 ++++++++++++++-------- include/d/d_meter.h | 17 +++++++++ src/d/d_meter.cpp | 92 ++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 133 insertions(+), 21 deletions(-) diff --git a/include/d/d_map.h b/include/d/d_map.h index 70f94eb89..12f0d5761 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -35,10 +35,10 @@ public: /* 0x04 */ u8 field_0x4; /* 0x05 */ u8 field_0x5; /* 0x08 */ dMap_2DMtMapSpcl_tex_c* field_0x8; - /* 0x0C */ short field_0xc; - /* 0x0E */ short field_0xe; - /* 0x10 */ short field_0x10; - /* 0x12 */ short field_0x12; + /* 0x0C */ s16 field_0xc; + /* 0x0E */ s16 field_0xe; + /* 0x10 */ s16 field_0x10; + /* 0x12 */ s16 field_0x12; }; class dMap_2DAGBScrDsp_c : public dDlst_base_c { @@ -153,8 +153,20 @@ public: class dMap_c { public: + static void setMapAlpha(u8 alpha) { mAlpha = alpha; } + static void setIconFreeAlpha(u8 alpha) { mIconFreeAlpha = alpha; } + static void setMapDispMode(u8 mode) { mMapDispMode = mode; } + static void setMapDispPosLeftUpX(s16 x) { mDispPosLeftUpX = x; } + static void setMapDispPosLeftUpY(s16 y) { mDispPosLeftUpY = y; } + static void setIconFreePosX(s16 x) { mIconFreePosX = x; } + static void setIconFreePosY(s16 y) { mIconFreePosY = y; } + static void setIconFreeScale(f32 scale) { mIconFreeScale = scale; } + static void setIconSelfAlpha(u8 alpha) { mIconSelfAlpha = alpha; } + static void setIconSelfScale(f32 scale) { mIconSelfScale = scale; } + static u8 getIconDispMode() { return mIconDispMode; } + static void setIconDispMode(u8 mode) { mIconDispMode = mode; } + void clrAGBMapSendStopFlg() {} - void getIconDispMode() {} void getMapAlpha() {} void getMapDspPosLeftUpX() {} void getMapDspPosLeftUpY() {} @@ -165,19 +177,8 @@ public: void isMapDispTypeEnlargementSize() {} void isMapDispTypeRealSize() {} void setAGBMapSendStopFlg() {} - void setIconDispMode(u8) {} - void setIconFreeAlpha(u8) {} - void setIconFreePosX(s16) {} - void setIconFreePosY(s16) {} - void setIconFreeScale(f32) {} - void setIconSelfAlpha(u8) {} - void setIconSelfScale(f32) {} - void setMapAlpha(u8) {} void setMapChgSizeEnlargementSize() {} void setMapChgSizeRealSize() {} - void setMapDispMode(u8) {} - void setMapDispPosLeftUpX(s16) {} - void setMapDispPosLeftUpY(s16) {} static void create(); void isEnableEnlargementScroll(); @@ -244,6 +245,18 @@ public: void mapBufferSendAGB_dungeon(); void mapSetPointAll(); static void mapBufferSendAGB(int); + + static u8 mAlpha; + static u8 mIconFreeAlpha; + static u8 mMapDispMode; + static u16 mDispPosLeftUpX; + static u16 mDispPosLeftUpY; + static u16 mIconFreePosX; + static u16 mIconFreePosY; + static f32 mIconFreeScale; + static u8 mIconSelfAlpha; + static f32 mIconSelfScale; + static u8 mIconDispMode; }; inline void dMap_drawPoint(u8 param_1, f32 param_2, f32 param_3, f32 param_4, s8 param_5, s16 param_6, u8 param_7, u8 param_8, u8 param_9) { diff --git a/include/d/d_meter.h b/include/d/d_meter.h index 8b1bff726..817580341 100644 --- a/include/d/d_meter.h +++ b/include/d/d_meter.h @@ -518,9 +518,23 @@ public: class mapCtrlDisp_c { public: + // TODO: these two functions are supposed to be weak void initMapCtrlDisp(); void moveMapCtrlDisp(); + void Create() {} + void Delete() {} + void getAlpha() {} + void getHideOffsetX() {} + void getShowOffsetX() {} + void hideSEOff() {} + void hideSEOn() {} + void isMode() {} + void setAlpha(u8) {} + void setHide() {} + void showSEOff() {} + void showSEOn() {} + /* 0x00 */ u8 field_0x0; /* 0x01 */ u8 field_0x1; /* 0x02 */ u8 field_0x2; @@ -560,6 +574,9 @@ public: /* 0x2F60 */ ResTIMG* moveIconTex[3]; /* 0x2F6C */ u8 field_0x2f6c[0x3024 - 0x2F6C]; /* 0x3024 */ u8 field_0x3024; + /* 0x3025 */ u8 field_0x3025; + /* 0x3026 */ u8 field_0x3026; + /* 0x3027 */ u8 field_0x3027; }; extern dMeter_menuHIO_c g_menuHIO; diff --git a/src/d/d_meter.cpp b/src/d/d_meter.cpp index 006bf8043..895006579 100644 --- a/src/d/d_meter.cpp +++ b/src/d/d_meter.cpp @@ -15,7 +15,10 @@ #include "d/d_timer.h" #include "stdio.h" +u8 dummy_3569[0xC]; + dMeter_info_c dMeter_Info; +fopMsgM_pane_class item_parts; dMeter_map_HIO_c g_meter_mapHIO; dMeter_HIO_c g_meterHIO; dMeter_menuHIO_c g_menuHIO; @@ -59,6 +62,13 @@ dDlst_2DMETER2_c meter2; dDlst_2Dm_c tekari; dDlst_2Dm_c clock[3]; +static const char* arrowTexImage[] = { + "arrow_00.bti", + "arrow_01.bti", + "arrow_02.bti", + "arrow_03.bti", +}; + static void dummy(f32* m, u32 p2, s32 p3) { m[0] = 0.8f; m[1] = 0.0f; @@ -589,8 +599,6 @@ void dMeter_offAuctionFlag() { dMeter_auctionFlag = false; } -fopMsgM_pane_class item_parts; - /* 801EF9C4-801EFA38 .text dMeter_itemMoveSet__FP18fopMsgM_pane_classUcUc */ void dMeter_itemMoveSet(fopMsgM_pane_class* pane, u8 btn, u8 item) { dMeter_itemMoveFlag = 1; @@ -1133,6 +1141,18 @@ void dMeter_actionAlpha(sub_meter_class* i_this) { /* 801F4C80-801F4CC4 .text dMeter_numberSet__FP7J2DPaneUc */ void dMeter_numberSet(J2DPane*, u8) { /* Nonmatching */ + static const char* number[] = { + "count_num_0.bti", + "count_num_1.bti", + "count_num_2.bti", + "count_num_3.bti", + "count_num_4.bti", + "count_num_5.bti", + "count_num_6.bti", + "count_num_7.bti", + "count_num_8.bti", + "count_num_9.bti", + }; } /* 801F4CC4-801F4E04 .text dMeter_numberColor__FP7J2DPaneUcUc */ @@ -1507,12 +1527,17 @@ void dMeter_clockMultiMove(sub_meter_class* i_this) { /* 801FF184-801FF1F8 .text dMeter_mapInit__FP15sub_meter_class */ void dMeter_mapInit(sub_meter_class* i_this) { - /* Nonmatching */ + i_this->field_0x3027 = 0xFF; + i_this->field_0x0100[0].mUserArea = dComIfGs_isDungeonItemCompass(); + dMeter_mMapCtrlDisp.field_0x0 = 0; + dMeter_mMapCtrlDisp.field_0x4 = g_meter_mapHIO.field_0xc - g_meter_mapHIO.field_0x8; + dMeter_mMapCtrlDisp.initMapCtrlDisp(); } /* 801FF1F8-801FF684 .text dMeter_mapMove__FP15sub_meter_class */ void dMeter_mapMove(sub_meter_class* i_this) { /* Nonmatching */ + dMeter_mMapCtrlDisp.moveMapCtrlDisp(); } /* 801FF684-801FF76C .text dMeter_arwInit__FP15sub_meter_class */ @@ -1699,7 +1724,6 @@ BOOL dMeter_Draw(sub_meter_class* i_this) { /* 80204820-80204C20 .text dMeter_Execute__FP15sub_meter_class */ BOOL dMeter_Execute(sub_meter_class* i_this) { - /* Nonmatching */ JKRHeap* oldHeap = mDoExt_setCurrentHeap(i_this->heap); i_this->field_0x3024 = 0; dMeter_statusCheck(i_this); @@ -1710,6 +1734,50 @@ BOOL dMeter_Execute(sub_meter_class* i_this) { dMeter_xyMove(i_this); dMeter_rMove(i_this); + f32 f31 = g_meterHIO.field_0x40 / 100.0f; + f32 f30 = g_meterHIO.field_0x44 / 100.0f; + f32 f29 = g_meterHIO.field_0x46 / 100.0f; + + dMeter_parentPaneTrans(i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x14, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x15, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTransOnly(i_this->field_0x1638 + 0x1F, i_this->field_0x2438 + 0x16, f31, f30); + dMeter_childPaneTransOnly(i_this->field_0x2438 + 0x12, i_this->field_0x2438 + 0x16, f31, f29); + dMeter_childPaneTransChildTrans(i_this->field_0x2438 + 0x13, i_this->field_0x2438 + 0x16, i_this->field_0x2438 + 0x12, f31, f29); + dMeter_childPaneTransOnly(i_this->field_0x1d38 + 0x00, i_this->field_0x2438 + 0x16, f31, f30); + + for (int i = 0; i < 2; i++) { + dMeter_childPaneTrans(i_this->field_0x1d38 + 0x04 + i, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x1d38 + 0x02 + i, i_this->field_0x2438 + 0x16, f31); + } + + dMeter_childPaneTrans(i_this->field_0x2438 + 0x0E, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x0F, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x10, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x11, i_this->field_0x2438 + 0x16, f31); + + for (int i = 0; i < 3; i++) { + dMeter_childPaneTransOnly(i_this->field_0x1d38 + 0x0F + i, i_this->field_0x2438 + 0x16, f31, f29); + dMeter_childPaneTransChildTransOnly(i_this->field_0x1d38 + 0x0C + i, i_this->field_0x2438 + 0x16, i_this->field_0x1d38 + 0x0F + i, f31, f29); + dMeter_childPaneTransChildTransOnly(i_this->field_0x1d38 + 0x09 + i, i_this->field_0x2438 + 0x16, i_this->field_0x1d38 + 0x0F + i, f31, f29); + dMeter_childPaneTransChildTrans(i_this->field_0x1d38 + 0x12 + i, i_this->field_0x2438 + 0x16, i_this->field_0x1d38 + 0x0F + i, f31, f29); + dMeter_childPaneTransChildTrans(i_this->field_0x1d38 + 0x1B + i, i_this->field_0x2438 + 0x16, i_this->field_0x1d38 + 0x0F + i, f31, f29); + dMeter_childPaneTransChildTrans(i_this->field_0x1d38 + 0x1E + i, i_this->field_0x2438 + 0x16, i_this->field_0x1d38 + 0x0F + i, f31, f29); + dMeter_childPaneTransChildTrans(i_this->field_0x2438 + 0x01 + i, i_this->field_0x2438 + 0x16, i_this->field_0x1d38 + 0x0F + i, f31, f29); + } + + dMeter_childPaneTrans(i_this->field_0x2438 + 0x04, i_this->field_0x2438 + 0x16, f31); + + for (int i = 0; i < 2; i++) { + dMeter_childPaneTrans(i_this->field_0x2438 + 0x05 + i, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x07 + i, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x09 + i, i_this->field_0x2438 + 0x16, f31); + } + + dMeter_childPaneTransOnly(i_this->field_0x1638 + 0x1E, i_this->field_0x2438 + 0x16, f31, f29); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x0C, i_this->field_0x2438 + 0x16, f31); + dMeter_childPaneTrans(i_this->field_0x2438 + 0x0B, i_this->field_0x2438 + 0x16, f31); + dMeter_enemyMove(i_this); dMeter_magicMove(i_this); dMeter_windMove(i_this); @@ -1882,7 +1950,21 @@ dMeter_map_HIO_c::dMeter_map_HIO_c() { /* 802059E0-80205A44 .text initMapCtrlDisp__13mapCtrlDisp_cFv */ void mapCtrlDisp_c::initMapCtrlDisp() { - /* Nonmatching */ + dMap_c::setMapAlpha(0); + dMap_c::setIconFreeAlpha(0); + dMap_c::setMapDispMode(1); + dMap_c::setMapDispPosLeftUpX(g_meter_mapHIO.field_0x8); + dMap_c::setMapDispPosLeftUpY(g_meter_mapHIO.field_0xa); + dMap_c::setIconFreePosX(g_meter_mapHIO.field_0x14); + dMap_c::setIconFreePosY(g_meter_mapHIO.field_0x16); + dMap_c::setIconFreeScale(0.0f); + dMap_c::setIconSelfAlpha(0); + dMap_c::setIconSelfScale(0.0f); + dMap_c::setIconDispMode(0); + field_0x0 = 0; + field_0x1 = 0; + field_0x2 = 0; + field_0x4 = 0; } /* 80205A44-80205D24 .text moveMapCtrlDisp__13mapCtrlDisp_cFv */