mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 15:01:53 -04:00
c434c2edde
* map work * various meter work * d_meter_button ShieldD almost equivalent * error fix
910 lines
31 KiB
C++
910 lines
31 KiB
C++
/**
|
|
* d_meter_map.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel.h" // IWYU pragma: keep
|
|
|
|
#include "d/d_meter_map.h"
|
|
#include "JSystem/J2DGraph/J2DGrafContext.h"
|
|
#include "JSystem/JHostIO/JORServer.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_map.h"
|
|
#include "d/d_menu_window.h"
|
|
#include "d/d_meter2_info.h"
|
|
#include "d/d_msg_object.h"
|
|
#include "f_op/f_op_overlap_mng.h"
|
|
#include "m_Do/m_Do_controller_pad.h"
|
|
#include "d/d_camera.h"
|
|
|
|
#if (PLATFORM_WII || PLATFORM_SHIELD)
|
|
dMeter_map_HIO_c g_meter_mapHIO;
|
|
#endif
|
|
|
|
#if DEBUG
|
|
dMeter_map_HIO_c* dMeter_map_HIO_c::mMySelfPointer = NULL;
|
|
dMeterMap_c* dMeterMap_c::mMySelfPointer = NULL;
|
|
|
|
dMeter_map_HIO_c::dMeter_map_HIO_c() {
|
|
dMeter_map_HIO_c::mMySelfPointer = this;
|
|
mAreaMap = dMap_HIO_c::mMySelfPointer;
|
|
mDebugMapExpansion = 0;
|
|
mMapDisplayLocation = 0;
|
|
mWideBottomLeftX = -38;
|
|
mWideY = 380;
|
|
mNormalBottomLeftX = 35;
|
|
mNormalY = 380;
|
|
mGcBottomLeftX = 35;
|
|
mGcY = 421;
|
|
mHiddenRightX = -36;
|
|
field_0x16 = 0;
|
|
mSizeTypeChange = 0;
|
|
field_0x18 = 1;
|
|
mMediumHorizontal = 144;
|
|
mMediumVertical = 144;
|
|
mBigHorizontal = 216;
|
|
mBigVertical = 216;
|
|
mSmallHorizontal = 96;
|
|
mSmallVertical = 96;
|
|
mMapDisplaySize = 0;
|
|
field_0x2a = 144;
|
|
mMapAlphaTest = 0;
|
|
mAlpha = 180;
|
|
mTextureResolutionHalved = 0;
|
|
mForcedMapTopEdgeChange = 0;
|
|
field_0x30 = 144;
|
|
mMapDisplayProhibited = 0;
|
|
mMapRenderingProhibited = 0;
|
|
}
|
|
|
|
void dMeter_map_HIO_c::genMessage(JORMContext* ctx) {
|
|
ctx->genLabel("■デバック用マップ拡大■",0,0,(JOREventListener *)0x0,0xffff, 0xffff,0x200,0x18);
|
|
ctx->genCheckBox("ONで拡大", &mDebugMapExpansion,'\x01',0,(JOREventListener *)0x0,0xffff ,0xffff,0x200,0x18);
|
|
ctx->genLabel("■マップ表示位置■",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genCheckBox("ONで調整有効", &mMapDisplayLocation,'\x01',0,(JOREventListener *)0x0 ,0xffff,0xffff,0x200,0x18);
|
|
ctx->genLabel("*Wide(16:9)",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("左下X", &mWideBottomLeftX,-200,0x280,0,(JOREventListener *)0x0,0xffff, 0xffff,0x200,0x18);
|
|
ctx->genSlider(" Y", &mWideY,0,0x1e0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genLabel("*Normal(4:3)",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("左下X", &mNormalBottomLeftX,-200,0x280,0,(JOREventListener *)0x0,0xffff ,0xffff,0x200,0x18);
|
|
ctx->genSlider(" Y", &mNormalY,0,0x1e0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genLabel("*GC(4:3) WiiでMAPアイコン無しの場合のY座標にも使用します", 0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("左下X", &mGcBottomLeftX,-200,0x280,0,(JOREventListener *)0x0,0xffff, 0xffff,0x200,0x18);
|
|
ctx->genSlider(" Y", &mGcY,0,0x1e0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18)
|
|
;
|
|
ctx->genSlider("隠右X", &mHiddenRightX,-600,800,0,(JOREventListener *)0x0,0xffff,0xffff ,0x200,0x18);
|
|
ctx->genLabel("■マップ表示サイズ■",0,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genCheckBox("・ON変更", &mMapDisplaySize,'\x01',0,(JOREventListener *)0x0,0xffff, 0xffff,0x200,0x18);
|
|
ctx->genSlider("", &field_0x2a,1,400,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genLabel("■マップサイズ■",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genCheckBox( "・サイズタイプの変更<サイズ変更後はテクスチャーサイズ変更をして下さい>" , &mSizeTypeChange,'\x01',0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->startRadioButton("", &field_0x18,1,(JOREventListener *)0x0,0xffff,0xffff,0x100,0xffff);
|
|
ctx->genRadioButtonItem("中",1,0,0xffff,0xffff,0x80,0x10);
|
|
ctx->genRadioButtonItem("大",2,0,0xffff,0xffff,0x80,0x10);
|
|
ctx->genRadioButtonItem("小",3,0,0xffff,0xffff,0x80,0x10);
|
|
ctx->endRadioButton();
|
|
ctx->genLabel( "・各サイズ<サイズ変更後はテクスチャーサイズ変更をして下さい>" ,0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genLabel("・中",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("横", &mMediumHorizontal,1,0x90,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genSlider("縦", &mMediumVertical,1,0x90,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genLabel("・大",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("横", &mBigHorizontal,1,0xd8,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genSlider("縦", &mBigVertical,1,0xd8,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genLabel("・小",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("横", &mSmallHorizontal,1,0x90,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genSlider("縦", &mSmallVertical,1,0x90,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genCheckBox("・テクスチャー解像度半分", &mTextureResolutionHalved,'\x01',0 ,(JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genButton("テクスチャーサイズ変更",0x4000001,0,(JOREventListener *)0x0,0xffff, 0xffff,0x200,0x18);
|
|
ctx->genLabel("■マップアルファ■",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genCheckBox("マップアルファテストONで有効", &mMapAlphaTest,'\x01',0, (JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("アルファ", &mAlpha,'\0',0xff,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
|
|
if (dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 1 && field_0x18 != 1) {
|
|
field_0x18 = 1;
|
|
update();
|
|
}
|
|
|
|
ctx->genLabel("■強制マップ上端変更■",0,0,(JOREventListener *)0x0,0xffff,0xffff, 0x200,0x18);
|
|
ctx->genCheckBox("ONで有効", &mForcedMapTopEdgeChange,'\x01',0,(JOREventListener *)0x0, 0xffff,0xffff,0x200,0x18);
|
|
ctx->genSlider("", &field_0x30,-1,0x1e0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genLabel("ONからOFFにする場合は-1にしてからOFFにして下さい",0,0, (JOREventListener *)0x0,0xffff,0xffff,0x200,0x18);
|
|
|
|
mAreaMap = dMap_HIO_c::mMySelfPointer;
|
|
if (mAreaMap != NULL) {
|
|
ctx->genNode("エリアマップ",this->mAreaMap,0,0);
|
|
}
|
|
|
|
ctx->genLabel("■マップ表示禁止■",0,0,(JOREventListener *)0x0,0xffff,0xffff,0x200, 0x18);
|
|
ctx->genCheckBox("ONで有効", &mMapDisplayProhibited,'\x01',0,(JOREventListener *)0x0, 0xffff,0xffff,0x200,0x18);
|
|
ctx->genLabel("■マップレンダリング禁止■",0,0,(JOREventListener *)0x0,0xffff, 0xffff,0x200,0x18);
|
|
ctx->genCheckBox("ONで有効", &mMapRenderingProhibited,'\x01',0,(JOREventListener *)0x0, 0xffff,0xffff,0x200,0x18);
|
|
}
|
|
|
|
void dMeter_map_HIO_c::listenPropertyEvent(const JORPropertyEvent* evt) {
|
|
// DEBUG NONMATCHING
|
|
JORReflexible::listenPropertyEvent(evt);
|
|
|
|
switch ((u32)evt->id) {
|
|
case 0x4000001:
|
|
int mapDispType = dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo());
|
|
if (dMeterMap_c::mMySelfPointer != NULL) {
|
|
dMeterMap_c* map_p = dMeterMap_c::mMySelfPointer->getMapPointer();
|
|
if (map_p != NULL) {
|
|
int sizeType = map_p->getMapDispSizeTypeNo();
|
|
s16 width;
|
|
s16 height;
|
|
|
|
switch (sizeType) {
|
|
case dMeterMap_c::MAP_SIZE_TYPE_BIG:
|
|
width = g_meter_mapHIO.mBigHorizontal;
|
|
height = g_meter_mapHIO.mBigVertical;
|
|
break;
|
|
|
|
case 4:
|
|
if (mapDispType != dStage_stagInfo_c::UB_D_MAP) {
|
|
width = g_meter_mapHIO.mMediumHorizontal;
|
|
height = g_meter_mapHIO.mMediumVertical;
|
|
break;
|
|
}
|
|
|
|
// You cannot specify a large size for the dungeon map
|
|
OS_REPORT("ダンジョンマップは大サイズ指定できません\n");
|
|
break;
|
|
|
|
case 1:
|
|
case dMeterMap_c::MAP_SIZE_TYPE_SMALL:
|
|
width = g_meter_mapHIO.mSmallHorizontal;
|
|
height = g_meter_mapHIO.mSmallVertical;
|
|
break;
|
|
}
|
|
|
|
if (g_meter_mapHIO.mTextureResolutionHalved) {
|
|
dMeterMap_c::mMySelfPointer->field_0x8_debug = 1;
|
|
} else {
|
|
dMeterMap_c::mMySelfPointer->field_0x8_debug = 0;
|
|
}
|
|
|
|
field_0x28 = (s16)width;
|
|
dMeterMap_c::mMySelfPointer->setSizeW(width);
|
|
dMeterMap_c::mMySelfPointer->setSizeH(height);
|
|
dMeterMap_c::mMySelfPointer->field_0x4_debug = 1;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void dMeter_map_HIO_c::update() {
|
|
JORMContext* mctx = attachJORMContext(8);
|
|
mctx->startUpdateNode(this);
|
|
mctx->updateRadioButton(2, &field_0x18, 1);
|
|
mctx->endUpdateNode();
|
|
releaseJORMContext(mctx);
|
|
}
|
|
#endif
|
|
|
|
bool dMeterMap_c::isEnableDispMap() {
|
|
bool minimapEnable = false;
|
|
stage_stag_info_class* pstag = dComIfGp_getStage()->getStagInfo();
|
|
|
|
if (pstag != NULL && getMapDispSizeTypeNo() != 0) {
|
|
minimapEnable = dStage_stagInfo_GetMiniMap(pstag) != 0;
|
|
}
|
|
|
|
bool enableMap = false;
|
|
if (minimapEnable && dMpath_c::isExistMapPathData()) {
|
|
enableMap = true;
|
|
}
|
|
|
|
return enableMap;
|
|
}
|
|
|
|
int dMeterMap_c::getMapDispSizeTypeNo() {
|
|
int uvar6 = 7;
|
|
|
|
dStage_FileList_dt_c* fList =
|
|
dComIfGp_roomControl_getStatusRoomDt(dComIfGp_roomControl_getStayNo())->getFileListInfo();
|
|
if (fList != NULL) {
|
|
uvar6 = dStage_FileList_dt_getMiniMap(fList);
|
|
}
|
|
|
|
u32 stageMapSizeTypeNo = dStage_stagInfo_GetMiniMap(dComIfGp_getStage()->getStagInfo());
|
|
JUT_ASSERT(536, stageMapSizeTypeNo != MAP_SIZE_TYPE_STAGE);
|
|
s32 mapDispType = dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo());
|
|
|
|
if (mapDispType == 1) {
|
|
uvar6 = 1;
|
|
JUT_ASSERT(544, stageMapSizeTypeNo != MAP_SIZE_TYPE_SMALL);
|
|
JUT_ASSERT(545, stageMapSizeTypeNo != MAP_SIZE_TYPE_BIG);
|
|
} else if (uvar6 == 7) {
|
|
uvar6 = stageMapSizeTypeNo;
|
|
}
|
|
|
|
int mapDispSizeType = 0;
|
|
|
|
#if DEBUG
|
|
if (g_meter_mapHIO.mSizeTypeChange) {
|
|
uvar6 = g_meter_mapHIO.field_0x18;
|
|
}
|
|
#endif
|
|
|
|
switch (uvar6) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
if (mapDispType == 1) {
|
|
mapDispSizeType = 4;
|
|
} else {
|
|
mapDispSizeType = 1;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (mapDispType == 1) {
|
|
JUT_ASSERT(573, mapDispType != dStage_stagInfo_c::UB_D_MAP);
|
|
break;
|
|
}
|
|
|
|
mapDispSizeType = 2;
|
|
break;
|
|
case 3:
|
|
if (mapDispType == 1) {
|
|
mapDispSizeType = 5;
|
|
} else {
|
|
mapDispSizeType = 3;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return mapDispSizeType;
|
|
}
|
|
|
|
bool dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo() {
|
|
if (isEnableDispMap() && getMapDispSizeTypeNo()) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
f32 dMeterMap_c::getMapDispEdgeBottomY_Layout() {
|
|
#if (PLATFORM_WII || PLATFORM_SHIELD)
|
|
if (dComIfGs_getOptPointer() == 0) {
|
|
return g_meter_mapHIO.mGcY;
|
|
}
|
|
|
|
if (mDoGph_gInf_c::isWide()) {
|
|
return g_meter_mapHIO.mWideY;
|
|
}
|
|
|
|
return g_meter_mapHIO.mNormalY;
|
|
#else
|
|
return 421.0f;
|
|
#endif
|
|
}
|
|
|
|
bool dMeterMap_c::isEventRunCheck() {
|
|
if (dComIfGp_event_runCheck()) {
|
|
return true;
|
|
}
|
|
|
|
if (dMsgObject_isTalkNowCheck()) {
|
|
return true;
|
|
}
|
|
|
|
if (dComIfGp_event_runCheck() != field_0x30) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
f32 dMeterMap_c::getMapDispEdgeLeftX_Layout() {
|
|
#if (PLATFORM_WII || PLATFORM_SHIELD)
|
|
if (mDoGph_gInf_c::isWide()) {
|
|
return g_meter_mapHIO.mWideBottomLeftX + field_0x28;
|
|
}
|
|
|
|
return g_meter_mapHIO.mNormalBottomLeftX + field_0x28;
|
|
#else
|
|
return field_0x28 + 35;
|
|
#endif
|
|
}
|
|
|
|
f32 dMeterMap_c::getMapDispEdgeTop() {
|
|
f32 tmp = 0.0f;
|
|
if (mMap != NULL) {
|
|
tmp = mMap->getTexSizeY() -
|
|
mMap->getTexelPerCm() * (mMap->getPackZ() + -mMap->getPackPlusZ()) -
|
|
mMap->getTopEdgePlus();
|
|
}
|
|
f32 rv = getMapDispEdgeBottomY_Layout() - tmp;
|
|
return rv;
|
|
}
|
|
|
|
s16 dMeterMap_c::getDispPosInside_OffsetX() {
|
|
return 0;
|
|
}
|
|
|
|
s16 dMeterMap_c::getDispPosOutSide_OffsetX() {
|
|
#if DEBUG
|
|
f32 fVar1 = g_meter_mapHIO.mHiddenRightX + mDoGph_gInf_c::getMinXF();
|
|
#endif
|
|
f32 dvar3 =
|
|
#if DEBUG
|
|
fVar1
|
|
#else
|
|
-36.0f
|
|
#endif
|
|
- mSizeW;
|
|
f32 offset = 0.0f;
|
|
if (mMap != NULL) {
|
|
offset = mMap->getTexelPerCm() * mMap->getPackX();
|
|
offset += (mMap->getRightEdgePlus() + (mMap->getTexelPerCm() * mMap->getPackPlusZ()));
|
|
}
|
|
dvar3 += offset;
|
|
return dvar3 - getMapDispEdgeLeftX_Layout();
|
|
}
|
|
|
|
void dMeterMap_c::setDispPosInsideFlg_SE_On() {
|
|
if (isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
dComIfGp_mapShow();
|
|
field_0x2d = 1;
|
|
field_0x2e = 7;
|
|
}
|
|
}
|
|
|
|
void dMeterMap_c::setDispPosOutsideFlg_SE_On() {
|
|
dComIfGp_mapHide();
|
|
field_0x2d = 0;
|
|
field_0x2e = 7;
|
|
}
|
|
|
|
void dMeterMap_c::setMapAlpha(u8 i_alpha) {
|
|
mMapAlpha = i_alpha;
|
|
}
|
|
|
|
bool dMeterMap_c::isMapOpenCheck() {
|
|
#if DEBUG
|
|
if (dCam_getBody()->Gear() == 1) {
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
if (dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 7) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
dMeterMap_c::dMeterMap_c(J2DScreen* i_scrn) {
|
|
#if DEBUG
|
|
i_scrn = i_scrn;
|
|
field_0x4_debug = 0;
|
|
field_0x8_debug = 0;
|
|
dMeterMap_c::mMySelfPointer = this;
|
|
#endif
|
|
_create(i_scrn);
|
|
}
|
|
|
|
dMeterMap_c::~dMeterMap_c() {
|
|
#if DEBUG
|
|
field_0x4_debug = 0;
|
|
field_0x8_debug = 0;
|
|
#endif
|
|
|
|
_delete();
|
|
}
|
|
|
|
void dMeterMap_c::_create(J2DScreen* unused) {
|
|
s32 sizeX;
|
|
s32 sizeY;
|
|
s32 dispSizeW;
|
|
s32 dispSizeH;
|
|
|
|
getMapDispSizeTypeNo();
|
|
switch (getMapDispSizeTypeNo()) {
|
|
case 1:
|
|
dispSizeW = 216;
|
|
dispSizeH = 216;
|
|
sizeX = 144;
|
|
sizeY = 144;
|
|
break;
|
|
case 2:
|
|
dispSizeW = 216;
|
|
dispSizeH = 216;
|
|
sizeX = 216;
|
|
sizeY = 216;
|
|
break;
|
|
case 3:
|
|
dispSizeW = 216;
|
|
dispSizeH = 216;
|
|
sizeX = 96;
|
|
sizeY = 96;
|
|
break;
|
|
case 0:
|
|
case 4:
|
|
dispSizeW = 144;
|
|
dispSizeH = 144;
|
|
sizeX = 144;
|
|
sizeY = 144;
|
|
break;
|
|
case 5:
|
|
dispSizeW = 144;
|
|
dispSizeH = 144;
|
|
sizeX = 96;
|
|
sizeY = 96;
|
|
break;
|
|
default:
|
|
JUT_ASSERT(988, FALSE);
|
|
break;
|
|
}
|
|
|
|
mSizeW = (s16)sizeX;
|
|
mSizeH = (s16)sizeY;
|
|
|
|
mMap = new dMap_c(sizeX, sizeY, dispSizeW, dispSizeH);
|
|
JUT_ASSERT(999, mMap != NULL);
|
|
|
|
mMapJ2DPicture = new J2DPicture(mMap->getResTIMGPointer());
|
|
JUT_ASSERT(1002, mMapJ2DPicture != NULL);
|
|
|
|
mIsCompass = dComIfGs_isDungeonItemCompass();
|
|
mIsMap = dComIfGs_isDungeonItemMap();
|
|
field_0x14 = 0;
|
|
field_0x2a = 0;
|
|
|
|
if (dComIfGp_checkMapShow()) {
|
|
field_0x2d = 1;
|
|
|
|
if (!isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
field_0x2d = 0;
|
|
}
|
|
|
|
if (!isMapOpenCheck()) {
|
|
field_0x2d = 0;
|
|
}
|
|
} else {
|
|
field_0x2d = 0;
|
|
}
|
|
|
|
if (field_0x2d != 0) {
|
|
field_0x2d = 1;
|
|
field_0x28 = getDispPosInside_OffsetX();
|
|
dMeter2Info_setMapStatus(1);
|
|
} else {
|
|
field_0x2d = 0;
|
|
field_0x28 = getDispPosOutSide_OffsetX();
|
|
dMeter2Info_setMapStatus(0);
|
|
}
|
|
|
|
field_0x2e = 0;
|
|
field_0x28 = 0;
|
|
field_0x30 = 0;
|
|
/* dSv_event_flag_c::M_085 - Twilight Hyrule Field - Midna dialogue right before Boss Bug's Tear of Light appears */
|
|
field_0x2b = dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[118]);
|
|
}
|
|
|
|
void dMeterMap_c::setDispPosOutSide() {
|
|
field_0x2d = 0;
|
|
field_0x28 = getDispPosOutSide_OffsetX();
|
|
}
|
|
|
|
void dMeterMap_c::setDispPosInSide() {
|
|
field_0x2d = 1;
|
|
field_0x28 = getDispPosInside_OffsetX();
|
|
}
|
|
|
|
void dMeterMap_c::_delete() {
|
|
if (mMapJ2DPicture != NULL) {
|
|
delete mMapJ2DPicture;
|
|
}
|
|
|
|
if (mMap != NULL) {
|
|
delete mMap;
|
|
}
|
|
|
|
if (isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
if (field_0x2d != 0) {
|
|
dComIfGp_mapShow();
|
|
} else {
|
|
dComIfGp_mapHide();
|
|
}
|
|
}
|
|
}
|
|
|
|
void dMeterMap_c::_move(u32 param_0) {
|
|
/* dSv_event_flag_c::M_085 - Twilight Hyrule Field - Midna dialogue right before Boss Bug's Tear of Light appears */
|
|
if (!field_0x2b && dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[118])) {
|
|
if (strcmp(dComIfGp_getStartStageName(), "F_SP115") == 0) {
|
|
/* dSv_event_flag_c::M_086 - Twilight Hyrule Field - Show Boss Bug's Tear of Light on the map */
|
|
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[119]);
|
|
} else {
|
|
/* dSv_event_flag_c::M_085 - Twilight Hyrule Field - Midna dialogue right before Boss Bug's Tear of Light appears */
|
|
field_0x2b = dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[118]);
|
|
dMeter2Info_setPauseStatus(2);
|
|
}
|
|
}
|
|
|
|
#if DEBUG
|
|
if (field_0x4_debug) {
|
|
mMap->changeTextureSize(mSizeW, mSizeH, field_0x8_debug);
|
|
mMapJ2DPicture->changeTexture(mMap->getResTIMGPointer(), 0);
|
|
field_0x4_debug = 0;
|
|
}
|
|
#endif
|
|
|
|
int stayNo = dComIfGp_roomControl_getStayNo();
|
|
|
|
field_0x14 = param_0;
|
|
field_0x2a = checkMoveStatus();
|
|
|
|
if (field_0x2a == 1 || field_0x2a == 2 || field_0x2a == 3 ||
|
|
dMeter2Info_getPauseStatus() == 7 || dMeter2Info_getPauseStatus() == 2 ||
|
|
dMeter2Info_getPauseStatus() == 6 || dMeter2Info_getPauseStatus() == 4 ||
|
|
dMeter2Info_getPauseStatus() == 3 || dMeter2Info_getPauseStatus() == 5)
|
|
{
|
|
ctrlShowMap();
|
|
}
|
|
|
|
if (field_0x2d != 0) {
|
|
if (field_0x28 != getDispPosInside_OffsetX()) {
|
|
if (!cLib_addCalcAngleS(&field_0x28, getDispPosInside_OffsetX(), 2, 60, 10)) {
|
|
#if DEBUG
|
|
cLib_checkBit<u8>((int)field_0x2e, 4);
|
|
#endif
|
|
}
|
|
}
|
|
} else {
|
|
cLib_addCalcAngleS(&field_0x28, getDispPosOutSide_OffsetX(), 2, 60, 10);
|
|
}
|
|
|
|
Vec map_pos = dMapInfo_n::getMapPlayerPos();
|
|
|
|
#if DEBUG
|
|
f32 sizeW = g_meter_mapHIO.field_0x28;
|
|
f32 sizeH = g_meter_mapHIO.field_0x28;
|
|
if (g_meter_mapHIO.mDebugMapExpansion) {
|
|
sizeW = 400.0f;
|
|
sizeH = 400.0f;
|
|
}
|
|
|
|
if (g_meter_mapHIO.mMapDisplaySize && mMap != NULL) {
|
|
sizeW = g_meter_mapHIO.field_0x2a;
|
|
sizeH = g_meter_mapHIO.field_0x2a;
|
|
}
|
|
|
|
mSizeW = (s16)sizeW;
|
|
mSizeH = (s16)sizeH;
|
|
#endif
|
|
|
|
field_0x18 = field_0x28 + getMapDispEdgeLeftX_Layout();
|
|
field_0x1c = getMapDispEdgeBottomY_Layout() - mSizeH;
|
|
|
|
mMap->_move(map_pos.x, map_pos.z, stayNo, map_pos.y);
|
|
field_0x30 = dComIfGp_event_runCheck();
|
|
}
|
|
|
|
void dMeterMap_c::_draw() {
|
|
#if DEBUG
|
|
if (!g_meter_mapHIO.mMapRenderingProhibited) {
|
|
mMap->_draw();
|
|
dComIfGd_set2DOpa(this);
|
|
}
|
|
#else
|
|
mMap->_draw();
|
|
dComIfGd_set2DOpa(this);
|
|
#endif
|
|
}
|
|
|
|
void dMeterMap_c::draw() {
|
|
if (
|
|
#if DEBUG
|
|
!g_meter_mapHIO.mMapDisplayProhibited &&
|
|
#endif
|
|
mMap != NULL && mMap->isDraw()
|
|
) {
|
|
J2DGrafContext* graf = dComIfGp_getCurrentGrafPort();
|
|
graf->setup2D();
|
|
f32 sizeX = mSizeW;
|
|
f32 sizeY = mSizeH;
|
|
f32 tmp2 = field_0x18;
|
|
f32 tmp3 = field_0x1c;
|
|
|
|
u8 alpha = mMapAlpha;
|
|
#if DEBUG
|
|
if (g_meter_mapHIO.mMapAlphaTest) {
|
|
alpha = g_meter_mapHIO.mAlpha;
|
|
}
|
|
#endif
|
|
mMapJ2DPicture->setAlpha(alpha);
|
|
|
|
mMapJ2DPicture->draw(tmp2, tmp3, sizeX, sizeY, false, false, false);
|
|
mMapJ2DPicture->calcMtx();
|
|
}
|
|
}
|
|
|
|
void dMeterMap_c::ctrlShowMap() {
|
|
int unused = 0;
|
|
if (!dMeter2Info_isGameStatus(1)) {
|
|
if (!isMapOpenCheck() && !isEventRunCheck()) {
|
|
if (dMw_LEFT_TRIGGER() || dMw_RIGHT_TRIGGER()) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (dMeter2Info_getPauseStatus() == 1 || dMeter2Info_getPauseStatus() == 7 ||
|
|
dMeter2Info_getPauseStatus() == 3 || dMeter2Info_getPauseStatus() == 5 ||
|
|
dMeter2Info_getPauseStatus() == 2 || dMeter2Info_getPauseStatus() == 6)
|
|
{
|
|
#if !DEBUG
|
|
if (dMeter2Info_getMapStatus() == 0 && field_0x2d == 0) {
|
|
setDispPosInsideFlg_SE_On();
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
|
|
-1.0f, 0);
|
|
dMeter2Info_set2DVibration();
|
|
dMeter2Info_setMapStatus(1);
|
|
}
|
|
#endif
|
|
|
|
if (
|
|
#if DEBUG
|
|
dMeter2Info_getMapStatus() == 0 &&
|
|
#else
|
|
dMeter2Info_getMapStatus() == 1 && field_0x2d != 0 &&
|
|
#endif
|
|
isFmapScreen()
|
|
) {
|
|
switch (dMeter2Info_getPauseStatus()) {
|
|
case 1:
|
|
dMeter2Info_setMapStatus(4);
|
|
break;
|
|
case 7:
|
|
dMeter2Info_setMapStatus(7);
|
|
break;
|
|
case 3:
|
|
dMeter2Info_setMapStatus(8);
|
|
break;
|
|
case 5:
|
|
dMeter2Info_setMapStatus(9);
|
|
break;
|
|
case 2:
|
|
dMeter2Info_setMapStatus(5);
|
|
break;
|
|
case 6:
|
|
dMeter2Info_setMapStatus(3);
|
|
break;
|
|
}
|
|
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
|
|
-1.0f, 0);
|
|
#if !DEBUG
|
|
dMeter2Info_set2DVibration();
|
|
#endif
|
|
}
|
|
dMeter2Info_resetPauseStatus();
|
|
} else if (dMeter2Info_getPauseStatus() == 4) {
|
|
dMeter2Info_resetPauseStatus();
|
|
if (isDmapScreen()) {
|
|
#if !DEBUG
|
|
if (dMeter2Info_getMapStatus() == 0 && field_0x2d == 0) {
|
|
setDispPosInsideFlg_SE_On();
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f,
|
|
-1.0f, -1.0f, 0);
|
|
dMeter2Info_set2DVibration();
|
|
dMeter2Info_setMapStatus(1);
|
|
}
|
|
#endif
|
|
|
|
if (
|
|
#if DEBUG
|
|
dMeter2Info_getMapStatus() == 0
|
|
#else
|
|
dMeter2Info_getMapStatus() == 1 && field_0x2d != 0
|
|
#endif
|
|
) {
|
|
dMeter2Info_setMapStatus(6);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f,
|
|
-1.0f, -1.0f, 0);
|
|
dMeter2Info_set2DVibration();
|
|
}
|
|
}
|
|
|
|
} else if (!mDoCPd_c::getTrigUp(PAD_1) && !mDoCPd_c::getTrigDown(PAD_1)) {
|
|
keyCheck();
|
|
}
|
|
|
|
if (mIsCompass != dComIfGs_isDungeonItemCompass()) {
|
|
if (!isDispPosInsideFlg()) {
|
|
setDispPosInsideFlg_SE_On();
|
|
#if !DEBUG
|
|
dMeter2Info_setMapStatus(1);
|
|
#endif
|
|
}
|
|
|
|
mIsCompass = dComIfGs_isDungeonItemCompass();
|
|
unused = 0;
|
|
}
|
|
|
|
if (mIsMap != dComIfGs_isDungeonItemMap()) {
|
|
if (!isDispPosInsideFlg()) {
|
|
setDispPosInsideFlg_SE_On();
|
|
#if !DEBUG
|
|
dMeter2Info_setMapStatus(1);
|
|
#endif
|
|
}
|
|
|
|
mIsMap = dComIfGs_isDungeonItemMap();
|
|
unused = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
u8 dMeterMap_c::checkMoveStatus() {
|
|
u8 rv;
|
|
if (isShow(field_0x14)) {
|
|
if (isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
if (isDispPosInsideFlg()) {
|
|
rv = 1;
|
|
} else {
|
|
rv = 2;
|
|
}
|
|
} else {
|
|
rv = 3;
|
|
}
|
|
} else {
|
|
rv = 0;
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
bool dMeterMap_c::isShow(u32 param_0) {
|
|
if ((param_0 & 0x4000) || fopOvlpM_IsDoingReq() ||
|
|
((param_0 & 0x40) && dComIfGp_event_checkHind(0x100) &&
|
|
!dComIfGp_event_chkEventFlag(0x40)) ||
|
|
daPy_getPlayerActorClass()->getSumouMode() || (param_0 & 0x200000) || (param_0 & 0x100) ||
|
|
(param_0 & 0x80) || (param_0 & 0x40000000) || (param_0 & 0x1000) || (param_0 & 0x100000) ||
|
|
(param_0 & 0x20000) || (param_0 & 8) || (param_0 & 0x10) || (param_0 & 0x1000000) ||
|
|
(param_0 & 0x800000) || (param_0 & 0x20) || (param_0 & 0x4000000) ||
|
|
(param_0 & 0x10000000) || (param_0 & 0x800) || (param_0 & 0x20000000) ||
|
|
daPy_getPlayerActorClass()->checkEnemyAttentionLock() || dMeter2Info_isGameStatus(2))
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool dMeterMap_c::isFmapScreen() {
|
|
if (dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 0 ||
|
|
dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 5 ||
|
|
dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 3 ||
|
|
dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 4 ||
|
|
dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 6)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool dMeterMap_c::isDmapScreen() {
|
|
if (dStage_stagInfo_GetUpButton(dComIfGp_getStage()->getStagInfo()) == 1) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void dMeterMap_c::meter_map_move(u32 param_0) {
|
|
if (isShow(param_0) && isMapOpenCheck()) {
|
|
if (dMeter2Info_getPauseStatus() == 6) {
|
|
if (!dMeter2Info_isSub2DStatus(1) && isFmapScreen()) {
|
|
dMeter2Info_setMapStatus(3);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_set2DVibration();
|
|
}
|
|
dMeter2Info_resetPauseStatus();
|
|
} else if (
|
|
#if DEBUG
|
|
dMw_RIGHT_TRIGGER() &&
|
|
#else
|
|
dMw_LEFT_TRIGGER() &&
|
|
#endif
|
|
!dComIfGp_event_runCheck() &&
|
|
!dMsgObject_isTalkNowCheck() &&
|
|
(dMeter2Info_getMapStatus() == 0 || dMeter2Info_getMapStatus() == 1))
|
|
{
|
|
#if !DEBUG
|
|
if (dMeter2Info_getMapStatus() == 0 && !dMeter2Info_isSub2DStatus(1)) {
|
|
if (isFmapScreen() || isDmapScreen()) {
|
|
dMeter2Info_setMapStatus(2);
|
|
dMeter2Info_setMapKeyDirection(0x200);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
|
|
-1.0f, 0);
|
|
dMeter2Info_set2DVibration();
|
|
}
|
|
}
|
|
} else if (dMw_RIGHT_TRIGGER() && !dComIfGp_event_runCheck() &&
|
|
!dMsgObject_isTalkNowCheck() &&
|
|
(dMeter2Info_getMapStatus() == 0 || dMeter2Info_getMapStatus() == 1))
|
|
{
|
|
#endif
|
|
if (!dMeter2Info_isSub2DStatus(1)) {
|
|
if (isFmapScreen() || isDmapScreen()) {
|
|
dMeter2Info_setMapStatus(2);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
|
|
-1.0f, 0);
|
|
dMeter2Info_set2DVibration();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void dMeterMap_c::keyCheck() {
|
|
if (dMw_LEFT_TRIGGER() && !isEventRunCheck() &&
|
|
(dMeter2Info_getMapStatus() == 0 || dMeter2Info_getMapStatus() == 1))
|
|
{
|
|
if (dMeter2Info_getMapStatus() == 1) {
|
|
if (isDispPosInsideFlg()) {
|
|
setDispPosOutsideFlg_SE_On();
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_CLOSE_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_setMapStatus(0);
|
|
}
|
|
} else if (dMeter2Info_getMapStatus() == 0) {
|
|
if (!dMeter2Info_isSub2DStatus(1) && (isFmapScreen() || isDmapScreen())) {
|
|
dMeter2Info_setMapStatus(2);
|
|
dMeter2Info_setMapKeyDirection(0x200);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_set2DVibration();
|
|
} else {
|
|
setDispPosInsideFlg_SE_On();
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_set2DVibration();
|
|
dMeter2Info_setMapStatus(1);
|
|
}
|
|
}
|
|
} else if (dMw_RIGHT_TRIGGER() && !isEventRunCheck() &&
|
|
(dMeter2Info_getMapStatus() == 0 || dMeter2Info_getMapStatus() == 1))
|
|
{
|
|
if (dMeter2Info_getMapStatus() == 0) {
|
|
if (isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
if (!isDispPosInsideFlg()) {
|
|
setDispPosInsideFlg_SE_On();
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
|
|
-1.0f, 0);
|
|
dMeter2Info_set2DVibration();
|
|
dMeter2Info_setMapStatus(1);
|
|
}
|
|
} else if (!dMeter2Info_isSub2DStatus(1) && (isFmapScreen() || isDmapScreen())) {
|
|
dMeter2Info_setMapStatus(2);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_set2DVibration();
|
|
}
|
|
} else if (dMeter2Info_getMapStatus() == 1 && isDispPosInsideFlg()) {
|
|
if (!dMeter2Info_isSub2DStatus(1) && (isFmapScreen() || isDmapScreen())) {
|
|
dMeter2Info_setMapStatus(2);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_OPEN_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_set2DVibration();
|
|
} else {
|
|
setDispPosOutsideFlg_SE_On();
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_CLOSE_S, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
|
|
0);
|
|
dMeter2Info_setMapStatus(0);
|
|
}
|
|
}
|
|
}
|
|
}
|