Files
tp/src/d/d_meter_map.cpp
T
Carco_21 c434c2edde Various d_ work (#2968)
* map work

* various meter work

* d_meter_button ShieldD almost equivalent

* error fix
2025-12-20 18:06:17 -08:00

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);
}
}
}
}