tp/src/d/d_menu_fmap2D.cpp

2997 lines
108 KiB
C++

#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_menu_fmap2D.h"
#include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JUtility/JUTTexture.h"
#include "SSystem/SComponent/c_math.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "d/d_lib.h"
#include "d/d_menu_fmap.h"
#include "d/d_meter2_info.h"
#include "d/d_meter_HIO.h"
#include "d/d_msg_class.h"
#include "d/d_msg_scrn_explain.h"
#include "m_Do/m_Do_graphic.h"
#include "d/actor/d_a_midna.h"
dMenu_Fmap2DBack_c::dMenu_Fmap2DBack_c() {
dMeter2Info_setMapDrugFlag(0);
for (int i = 0; i < 8; i++) {
mpAreaTex[i] = NULL;
mRegionMinMapX[i] = 0.0;
mRegionMinMapY[i] = 0.0;
mRegionMapSizeX[i] = 0.0;
mRegionMapSizeY[i] = 0.0;
field_0xf0c[i] = 0.0;
field_0xf2c[i] = 0.0;
field_0xf4c[i] = 0.0;
field_0xf6c[i] = 0.0;
mRegionOriginX[i] = 0.0;
mRegionOriginZ[i] = 0.0;
mRegionTexData[i].mMinX = 0.0;
mRegionTexData[i].mMinZ = 0.0;
mRegionTexData[i].mMaxX = 0.0;
mRegionTexData[i].mMaxZ = 0.0;
mRegionTexData[i].mScale = 0.0;
mRegionTextureReadNum[i] = 0xff;
field_0x1230[i] = 0xff;
mRegionScrollMinX[i] = 0.0;
mRegionScrollMinZ[i] = 0.0;
mRegionScrollMaxX[i] = 0.0;
mRegionScrollMaxZ[i] = 0.0;
mRegionScrollMapMinX[i] = 0.0;
mRegionScrollMapMinY[i] = 0.0;
mRegionScrollMapMaxX[i] = 0.0;
mRegionScrollMapMaxY[i] = 0.0;
}
for (int i = 0; i < 20; i++) {
mStageOriginX[i] = 0.0;
mStageOriginZ[i] = 0.0;
mStageOriginPathX[i] = 0.0;
mStageOriginPathZ[i] = 0.0;
}
mpStages = NULL;
mTexMinX = 0.0;
mTexMinZ = 0.0;
mTexMaxX = 0.0;
mTexMaxZ = 0.0;
mAllMapScaleRate = 0.0;
mWorldMinX = 0.0;
mWorldMinZ = 0.0;
mWorldMaxX = 0.0;
mWorldMaxZ = 0.0;
field_0x1184 = 0.0;
field_0x1188 = 0.0;
mRenderingPosX = 0.0;
mRenderingPosZ = 0.0;
mRenderingScale = 1.0;
field_0xf98 = 1.0;
mMapZoomRate = 0.0;
mZoom = getAllMapZoomRate();
field_0xfa4 = 1.0;
field_0xfa8 = 0.0;
mpBackTex = NULL;
mpSpotTexture = NULL;
mTransX = 0.0;
mTransZ = 0.0;
mAlphaRate = 0.0;
mpMenuFmapMap = NULL;
mpMeterHaihai = NULL;
field_0x122d = 0;
field_0x122e = false;
mSpotNum = 0;
mStageDataNum = 0;
mStageTransX = 0.0;
mStageTransZ = 0.0;
field_0xfd0 = 0.0;
field_0xfd4 = 0.0;
field_0xfd8 = 0.0;
field_0xfdc = 0.0;
control_xpos = 0.0;
control_ypos = 0.0;
field_0x11b4 = 0.0;
field_0x11b8 = 0.0;
field_0x11bc = 0.0;
field_0x11c0 = 0.0;
field_0x11c4 = 0.0;
field_0x11c8 = 0.0;
field_0x11cc = 0.0;
field_0x11d0 = 0.0;
mRegionFlag = 0;
mMapDrawFlag = false;
field_0x1238 = 0;
field_0x1218 = 0;
field_0x121a = 0;
mSelectRegion = 0xff;
mRegionCursor = 0;
field_0x1228 = 0;
mSpotCursor = 0;
field_0x122a = 0;
field_0x122b = 1;
field_0xfb0 = 0.0;
field_0xfb4 = 0.0;
field_0xfb8 = 1.0;
mArrowPos3DX = mArrowPos3DZ = mArrowAlpha = 0.0;
field_0x11a4 = field_0x11a8 = 0.0;
field_0x11ac = field_0x11b0 = 0.0;
mArrowPos2DX = mArrowPos2DY = 0.0;
mSpotTextureFadeAlpha = 0.0;
field_0x11dc = 0.0;
field_0x11e0 = 360.0;
mBackAlpha = 0.0;
field_0x11e8 = 0.0;
field_0x11ec = 0.0;
mSelectedRegionBlack.set(0, 0, 0, 0);
mSelectedRegionWhite.set(255, 255, 255, 255);
mUnselectedRegionBlack.set(0, 0, 0, 0);
mUnselectedRegionWhite.set(255, 255, 255, 255);
mUnreachedRegionBlack.set(0, 0, 0, 0);
mUnreachedRegionWhite.set(0, 0, 0, 255);
field_0x1208.set(0, 0, 0, 0);
field_0x120c.set(0, 0, 0, 255);
field_0x1210 = 1.0;
field_0x1214 = 1.0;
mArrowDrawFlag = true;
#if DEBUG
mAllPathShowFlag = g_fmapHIO.mDisplayAllPaths;
#else
mAllPathShowFlag = false;
#endif
initiate(dComIfGp_getFmapResArchive());
mpBackScreen = new J2DScreen();
JUT_ASSERT(238, mpBackScreen != NULL);
bool fg = mpBackScreen->setPriority("zelda_map_screen_stone_base.blo", 0x20000,
dComIfGp_getFmapResArchive());
JUT_ASSERT(242, fg != false);
dPaneClass_showNullPane(mpBackScreen);
mpBaseScreen = new J2DScreen();
JUT_ASSERT(248, mpBaseScreen != NULL)
fg = mpBaseScreen->setPriority("zelda_map_screen_base.blo", 0x20000,
dComIfGp_getFmapResArchive());
JUT_ASSERT(252, fg != false);
dPaneClass_showNullPane(mpBaseScreen);
void* r = JKRGetNameResource("zelda_map_screen_base.btk", dComIfGp_getFmapResArchive());
mpBaseAnm = (J2DAnmTextureSRTKey*)J2DAnmLoaderDataBase::load(r);
mpBaseAnm->searchUpdateMaterialID(mpBaseScreen);
mAnmFrame = 0.0;
mpBaseRoot = new CPaneMgrAlphaMorf(mpBaseScreen, 'ROOT', 2, NULL);
JUT_ASSERT(264, mpBaseRoot != NULL);
mpMapArea = new CPaneMgr(mpBaseScreen, 'center_n', 0, NULL);
JUT_ASSERT(269, mpMapArea != NULL);
mpMapBlack = new CPaneMgr(mpBaseScreen, 'map_blak', 0, NULL);
JUT_ASSERT(273, mpMapBlack != NULL);
mpMeterHaihai = new dMeterHaihai_c(1);
JUT_ASSERT(277, mpMeterHaihai != NULL);
ResTIMG* backTexResource =
(ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti");
mpBackTex = new J2DPicture(backTexResource);
JUT_ASSERT(282, mpBackTex != NULL);
mpBackTex->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(0, 0, 0, 255));
mpBackTex->setAlpha(0);
mpPointScreen = new J2DScreen();
JUT_ASSERT(293, mpPointScreen != NULL);
mpPointScreen->setPriority("zelda_field_map_point_cursor.blo", 0x20000,
dComIfGp_getFmapResArchive());
JUT_ASSERT(297, fg != false);
dPaneClass_showNullPane(mpPointScreen);
mpPointParent = new CPaneMgr(mpPointScreen, 'f_po_n', 2, NULL);
JUT_ASSERT(301, mpPointParent != NULL);
mpPointParent->scale(g_fmapHIO.mCursorScale, g_fmapHIO.mCursorScale);
static const u64 cur_tag[4] = {'f_po_ru', 'f_po_rd', 'f_po_ld', 'f_po_lu'};
for (int i = 0; i < 4; i++) {
J2DPicture* picture = static_cast<J2DPicture*>(mpPointScreen->search(cur_tag[i]));
picture->setBlackWhite(g_fmapHIO.mCursorBlack, g_fmapHIO.mCursorWhite);
}
dMeter2Info_set2DWidth(getMapScissorAreaSizeX());
dMeter2Info_set2DHeight(getMapScissorAreaSizeY());
dMeter2Info_set2DPosH(getMapScissorAreaLX());
dMeter2Info_set2DPosV(getMapScissorAreaLY());
setDebugData(NULL, NULL, 0);
}
dMenu_Fmap2DBack_c::~dMenu_Fmap2DBack_c() {
delete mpBackScreen;
mpBackScreen = NULL;
delete mpBaseScreen;
mpBaseScreen = NULL;
delete mpBaseAnm;
mpBaseAnm = NULL;
delete mpBaseRoot;
mpBaseRoot = NULL;
delete mpMapArea;
mpMapArea = NULL;
delete mpMapBlack;
mpMapBlack = NULL;
delete mpMeterHaihai;
mpMeterHaihai = NULL;
delete mpBackTex;
mpBackTex = NULL;
delete mpPointScreen;
mpPointScreen = NULL;
delete mpPointParent;
mpPointParent = NULL;
for (int i = 0; i < 8; i++) {
if (mpAreaTex[i] != NULL) {
delete mpAreaTex[i];
mpAreaTex[i] = NULL;
}
}
deleteSpotPane();
dMeter2Info_setMapDrugFlag(0);
}
void dMenu_Fmap2DBack_c::draw() {
calcBlink();
J2DGrafContext* grafPort = dComIfGp_getCurrentGrafPort();
grafPort->setup2D();
u32 scissorLeft, scissorTop, scissorWidth, scissorHeight;
GXGetScissor(&scissorLeft, &scissorTop, &scissorWidth, &scissorHeight);
grafPort->scissor(mTransX, 0.0f, FB_WIDTH, FB_HEIGHT);
grafPort->setScissor();
mpBackTex->setBlackWhite(field_0x1208, field_0x120c);
mpBackTex->setAlpha(mAlphaRate * 255.0f * g_fmapHIO.mBackgroundAlpha);
mpBackTex->draw(mTransX + mDoGph_gInf_c::getMinXF(),
mTransZ + mDoGph_gInf_c::getMinYF(), mDoGph_gInf_c::getWidthF(),
mDoGph_gInf_c::getHeightF(), false, false, false);
mpBackScreen->draw(mTransX, mTransZ, grafPort);
mpBaseScreen->draw(mTransX, mTransZ, grafPort);
Mtx mtx;
Vec vec1 = mpMapArea->getGlobalVtx(&mtx, 0, false, 0);
Vec vec2 = mpMapArea->getGlobalVtx(&mtx, 3, false, 0);
f32 width = mDoGph_gInf_c::getWidthF() / FB_WIDTH;
f32 height = mDoGph_gInf_c::getHeightF() / FB_HEIGHT;
grafPort->scissor(mTransX + ((vec1.x - mDoGph_gInf_c::getMinXF()) / width),
mTransZ + (vec1.y / height), (vec2.x - vec1.x) / width,
(vec2.y - vec1.y) / height);
grafPort->setScissor();
field_0x11dc = (mTransX + getMapScissorAreaLX()) + (getMapScissorAreaSizeRealX() * 0.5f);
if (g_fmapHIO.mRangeCheck && g_fmapHIO.mRangeCheckDrawPriority) {
drawDebugRegionArea();
}
regionTextureDraw();
if (g_fmapHIO.mRangeCheck && g_fmapHIO.mRangeCheckDrawPriority) {
drawDebugStageArea();
}
if (mMapDrawFlag && mpSpotTexture) {
if (g_fmapHIO.mDisplayRegionGrid && g_fmapHIO.mRegionGridWidth > 0.0f) {
regionGridDraw();
}
stageTextureDraw();
if (g_fmapHIO.mDisplayStageOrigin) {
stageOriginDraw();
}
}
if (g_fmapHIO.mDisplayRegionOrigin) {
regionOriginDraw();
}
if (g_fmapHIO.mDisplayWorldGrid && g_fmapHIO.mWorldGridWidth > 0.0f) {
worldGridDraw();
}
if (g_fmapHIO.mDisplayWorldOrigin) {
worldOriginDraw();
}
if (g_fmapHIO.mScrollRangeDisplay) {
scrollAreaDraw();
}
blinkMove(30);
moveLightDropAnime();
setCenterPosX(field_0x11dc, 1);
drawIcon(mTransX, mTransZ, mAlphaRate, field_0xfa8 * mSpotTextureFadeAlpha);
if (g_fmapHIO.mRangeCheck && !g_fmapHIO.mRangeCheckDrawPriority) {
drawDebugRegionArea();
}
grafPort->scissor(scissorLeft, scissorTop, scissorWidth, scissorHeight);
grafPort->setScissor();
if (isArrowDrawFlag()) {
f32 fVar2 = 0.0f;
f32 fVar3 = 0.0f;
f32 fVar4, fVar5;
if (mMapZoomRate > 1.0f && mMapZoomRate < 2.0f) {
f32 tmp = 2.0f - mMapZoomRate;
if (field_0x11a4 != 0.0f) {
fVar2 = field_0x11a4 * tmp;
}
if (field_0x11a8 != 0.0f) {
fVar3 = field_0x11a8 * tmp;
}
fVar4 = field_0x11ac;
fVar5 = field_0x11b0;
} else {
fVar4 = mStageTransX;
fVar5 = mStageTransZ;
}
calcAllMapPos2D((mArrowPos3DX + control_xpos + fVar2) - fVar4,
(mArrowPos3DZ + control_ypos + fVar3) - fVar5, &mArrowPos2DX,
&mArrowPos2DY);
field_0x11e0 -= g_fmapHIO.mCursorSpeed;
if (field_0x11e0 < 0.0f) {
field_0x11e0 += 360.0f;
}
mpPointParent->getPanePtr()->rotate(mpPointParent->getSizeX() / 2.0f,
mpPointParent->getSizeY() / 2.0f, ROTATE_Z,
field_0x11e0);
if (g_fmapHIO.mCursorDebugON) {
mpPointParent->scale(g_fmapHIO.mCursorScale, g_fmapHIO.mCursorScale);
static const u64 cur_tag[4] = {'f_po_ru', 'f_po_rd', 'f_po_ld', 'f_po_lu'};
for (int i = 0; i < 4; i++) {
J2DPicture* picture = static_cast<J2DPicture*>(mpPointScreen->search(cur_tag[i]));
picture->setBlackWhite(g_fmapHIO.mCursorBlack, g_fmapHIO.mCursorWhite);
}
}
mpPointParent->setAlphaRate(mArrowAlpha * mSpotTextureFadeAlpha);
mpPointParent->translate(mArrowPos2DX + mTransX, mArrowPos2DY + mTransZ);
mpPointScreen->draw(0.0f, 0.0f, grafPort);
}
if (g_fmapHIO.mDisplayReferenceArea) {
J2DDrawFrame(mTransX + getMapAreaGlobalPosX(), mTransZ + getMapAreaGlobalPosY(),
getMapAreaSizeX(), getMapAreaSizeY(), JUtility::TColor(255, 255, 255, 255), 6);
J2DFillBox(getMapAreaGlobalCenterPosX() - 3.0f, getMapAreaGlobalCenterPosY() - 3.0f, 6.0f,
6.0f, JUtility::TColor(255, 255, 255, 255));
}
if (field_0x122d) {
mpMeterHaihai->drawHaihai(field_0x122d);
field_0x122d = 0;
}
if (g_fmapHIO.mRangeCheck && !g_fmapHIO.mRangeCheckDrawPriority) {
drawDebugStageArea();
}
mpBackTex->setBlackWhite(field_0x1208, field_0x120c);
mpBackTex->setAlpha((mAlphaRate * 255.0f) * g_fmapHIO.mBackgroundFrontAlpha * mBackAlpha);
mpBackTex->draw(mTransX + mDoGph_gInf_c::getMinXF(),
mTransZ + mDoGph_gInf_c::getMinYF(), mDoGph_gInf_c::getWidthF(),
mDoGph_gInf_c::getHeightF(), false, false, false);
}
void dMenu_Fmap2DBack_c::setRegionTexData(u8 i_areaType, ResTIMG* i_timg, f32 i_originX,
f32 i_originZ, f32 i_posX, f32 i_posZ, f32 i_scale,
f32 i_scrollMinX, f32 i_scrollMinZ, f32 i_scrollMaxX,
f32 i_scrollMaxZ) {
if (i_scale == 0.0f) {
i_scale = 100.0f;
}
mpAreaTex[i_areaType] = new J2DPicture(i_timg);
JUT_ASSERT(763, mpAreaTex[i_areaType] != NULL);
mRegionOriginX[i_areaType] = i_originX;
mRegionOriginZ[i_areaType] = i_originZ;
mRegionTexData[i_areaType].mScale = i_scale * 100.0f;
f32 width = i_timg->width;
f32 height = i_timg->height;
f32 min_x = (mRegionOriginX[i_areaType] + i_posX) -
((width * 0.5f) * mRegionTexData[i_areaType].mScale);
f32 min_z = (mRegionOriginZ[i_areaType] + i_posZ) -
((height * 0.5f) * mRegionTexData[i_areaType].mScale);
f32 max_x = (mRegionOriginX[i_areaType] + i_posX) +
((width * 0.5f) * mRegionTexData[i_areaType].mScale);
f32 max_z = (mRegionOriginZ[i_areaType] + i_posZ) +
((height * 0.5f) * mRegionTexData[i_areaType].mScale);
mRegionTexData[i_areaType].mMinX = min_x;
mRegionTexData[i_areaType].mMinZ = min_z;
mRegionTexData[i_areaType].mMaxX = max_x;
mRegionTexData[i_areaType].mMaxZ = max_z;
mRegionScrollMinX[i_areaType] = i_scrollMinX;
mRegionScrollMinZ[i_areaType] = i_scrollMinZ;
mRegionScrollMaxX[i_areaType] = i_scrollMaxX;
mRegionScrollMaxZ[i_areaType] = i_scrollMaxZ;
bool first = false;
mTexMinX = 0.0f;
mTexMinZ = 0.0f;
mTexMaxX = 0.0f;
mTexMaxZ = 0.0f;
bool bVar14 = false;
for (int i = 0; i < 8; i++) {
if (mpAreaTex[i] != NULL) {
if (!first) {
mTexMinX = mRegionTexData[i].mMinX;
mTexMinZ = mRegionTexData[i].mMinZ;
mTexMaxX = mRegionTexData[i].mMaxX;
mTexMaxZ = mRegionTexData[i].mMaxZ;
first = true;
} else {
if (mTexMinX > mRegionTexData[i].mMinX) {
mTexMinX = mRegionTexData[i].mMinX;
}
if (mTexMinZ > mRegionTexData[i].mMinZ) {
mTexMinZ = mRegionTexData[i].mMinZ;
}
if (mTexMaxX < mRegionTexData[i].mMaxX) {
mTexMaxX = mRegionTexData[i].mMaxX;
}
if (mTexMaxZ < mRegionTexData[i].mMaxZ) {
mTexMaxZ = mRegionTexData[i].mMaxZ;
}
}
}
if ((!bVar14) && (field_0x1230[i] == 0xff)) {
field_0x1230[i] = i_areaType;
bVar14 = true;
}
}
}
void dMenu_Fmap2DBack_c::setRegionTexData(u8 i_areaType, f32 i_originX, f32 i_originZ, f32 i_posX,
f32 i_posZ, f32 i_scale, f32 i_scrollMinX,
f32 i_scrollMinZ, f32 i_scrollMaxX, f32 i_scrollMaxZ) {
if (i_scale == 0.0f) {
i_scale = 100.0f;
}
mRegionOriginX[i_areaType] = i_originX;
mRegionOriginZ[i_areaType] = i_originZ;
mRegionTexData[i_areaType].mScale = i_scale * 100.0f;
f32 width = mpAreaTex[i_areaType]->getTexture(0)->getTexInfo()->width;
f32 height = mpAreaTex[i_areaType]->getTexture(0)->getTexInfo()->height;
f32 min_x = (mRegionOriginX[i_areaType] + i_posX) -
((width * 0.5f) * mRegionTexData[i_areaType].mScale);
f32 min_z = (mRegionOriginZ[i_areaType] + i_posZ) -
((height * 0.5f) * mRegionTexData[i_areaType].mScale);
f32 max_x = (mRegionOriginX[i_areaType] + i_posX) +
((width * 0.5f) * mRegionTexData[i_areaType].mScale);
f32 max_z = (mRegionOriginZ[i_areaType] + i_posZ) +
((height * 0.5f) * mRegionTexData[i_areaType].mScale);
mRegionTexData[i_areaType].mMinX = min_x;
mRegionTexData[i_areaType].mMinZ = min_z;
mRegionTexData[i_areaType].mMaxX = max_x;
mRegionTexData[i_areaType].mMaxZ = max_z;
mRegionScrollMinX[i_areaType] = i_scrollMinX;
mRegionScrollMinZ[i_areaType] = i_scrollMinZ;
mRegionScrollMaxX[i_areaType] = i_scrollMaxX;
mRegionScrollMaxZ[i_areaType] = i_scrollMaxZ;
bool first = false;
mTexMinX = 0.0f;
mTexMinZ = 0.0f;
mTexMaxX = 0.0f;
mTexMaxZ = 0.0f;
for (int i = 0; i < 8; i++) {
if (mpAreaTex[i] != NULL) {
if (!first) {
mTexMinX = mRegionTexData[i].mMinX;
mTexMinZ = mRegionTexData[i].mMinZ;
mTexMaxX = mRegionTexData[i].mMaxX;
mTexMaxZ = mRegionTexData[i].mMaxZ;
first = true;
} else {
if (mTexMinX > mRegionTexData[i].mMinX) {
mTexMinX = mRegionTexData[i].mMinX;
}
if (mTexMinZ > mRegionTexData[i].mMinZ) {
mTexMinZ = mRegionTexData[i].mMinZ;
}
if (mTexMaxX < mRegionTexData[i].mMaxX) {
mTexMaxX = mRegionTexData[i].mMaxX;
}
if (mTexMaxZ < mRegionTexData[i].mMaxZ) {
mTexMaxZ = mRegionTexData[i].mMaxZ;
}
}
}
}
}
void dMenu_Fmap2DBack_c::calcAllMapPos() {
bool set = false;
calcAllMapScaleRate();
for (int i = 0; i < 8; i++) {
if (mpAreaTex[i] != NULL) {
f32 min_x, min_y, max_x, max_y;
calcAllMapPos2DFirst(mRegionTexData[i].mMinX, mRegionTexData[i].mMinZ, &min_x, &min_y);
calcAllMapPos2DFirst(mRegionTexData[i].mMaxX, mRegionTexData[i].mMaxZ, &max_x, &max_y);
mRegionMinMapX[i] = min_x;
mRegionMinMapY[i] = min_y;
mRegionMapSizeX[i] = max_x - min_x;
mRegionMapSizeY[i] = max_y - min_y;
calcAllMapPos2DFirst(mRegionScrollMinX[i], mRegionScrollMinZ[i],
&mRegionScrollMapMinX[i], &mRegionScrollMapMinY[i]);
calcAllMapPos2DFirst(mRegionScrollMaxX[i], mRegionScrollMaxZ[i],
&mRegionScrollMapMaxX[i], &mRegionScrollMapMaxY[i]);
onShowRegionFlag(i);
if (!set) {
set = true;
calcRenderingScale();
calcRenderingPos();
}
}
}
}
f32 dMenu_Fmap2DBack_c::calcAllMapScaleRate() {
f32 width = mTexMaxX - mTexMinX;
f32 height = mTexMaxZ - mTexMinZ;
f32 size = width;
if (size < height) {
size = height;
}
f32 v = getMapAreaSizeX();
mAllMapScaleRate = v / size;
return mAllMapScaleRate;
}
void dMenu_Fmap2DBack_c::calcAllMapPos2DFirst(f32 i_texPosX, f32 i_texPosZ, f32* o_posX,
f32* o_posY) {
f32 midTexX = (mTexMaxX + mTexMinX) * 0.5f;
f32 midTexZ = (mTexMaxZ + mTexMinZ) * 0.5f;
f32 relativePosX = i_texPosX - midTexX;
f32 relativePosZ = i_texPosZ - midTexZ;
f32 pos_x = (mAllMapScaleRate * relativePosX);
f32 pos_y = (mAllMapScaleRate * relativePosZ);
*o_posX = pos_x + getMapAreaGlobalCenterPosX();
*o_posY = pos_y + getMapAreaGlobalCenterPosY();
}
void dMenu_Fmap2DBack_c::calcAllMapPos2D(f32 param_0, f32 param_1, f32* o_posX, f32* o_posY) {
calcAllMapPos2D(param_0, param_1, o_posX, o_posY, field_0xf0c[mRegionCursor],
field_0xf2c[mRegionCursor], mZoom);
}
void dMenu_Fmap2DBack_c::calcAllMapPos2D(char const* param_0, f32 param_1, f32 param_2,
f32* o_posX, f32* o_posY) {
f32 tmp1, tmp2;
calcOffset(mRegionCursor, param_0, &tmp1, &tmp2);
calcAllMapPos2D(param_1 + tmp1, param_2 + tmp2, o_posX, o_posY, field_0xf0c[mRegionCursor],
field_0xf2c[mRegionCursor], mZoom);
}
void dMenu_Fmap2DBack_c::calcAllMapPos2D(f32 param_0, f32 param_1, f32* outX, f32* outZ,
f32 param_4, f32 param_5, f32 i_zoom) {
f32 unusedX = (mTexMaxX - mTexMinX) / getMapAreaSizeX();
f32 unusedY = (mTexMaxZ - mTexMinZ) / getMapAreaSizeY();
f32 unusedMax = unusedX;
if (unusedX < unusedY) {
unusedMax = unusedY;
}
f32 regionMidX = (mRegionTexData[mRegionCursor].mMinX + mRegionTexData[mRegionCursor].mMaxX) * 0.5f;
f32 regionMidY = (mRegionTexData[mRegionCursor].mMinZ + mRegionTexData[mRegionCursor].mMaxZ) * 0.5f;
f32 f25 = mRegionMinMapX[mRegionCursor] + param_4 + (mRegionMapSizeX[mRegionCursor] * i_zoom) * 0.5f;
f32 f24 = mRegionMinMapY[mRegionCursor] + param_5 + (mRegionMapSizeY[mRegionCursor] * i_zoom) * 0.5f;
f32 scale = getPathScale(i_zoom) / getMapScissorAreaSizeRealY();
f32 offsX = (param_0 - regionMidX) / scale;
f32 offsY = (param_1 - regionMidY) / scale;
*outX = offsX + f25;
*outZ = offsY + f24;
}
void dMenu_Fmap2DBack_c::calcAllMapPosWorld(f32 param_0, f32 param_1, f32* outX, f32* outZ) {
f32 midX = (mRegionTexData[mRegionCursor].mMinX + mRegionTexData[mRegionCursor].mMaxX) * 0.5f;
f32 midY = (mRegionTexData[mRegionCursor].mMinZ + mRegionTexData[mRegionCursor].mMaxZ) * 0.5f;
f32 tmp3 = (mRegionMinMapX[mRegionCursor] + field_0xf0c[mRegionCursor]) +
mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f;
f32 tmp4 = (mRegionMinMapY[mRegionCursor] + field_0xf2c[mRegionCursor]) +
mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f;
f32 tmp3_ = param_0 - tmp3;
f32 tmp4_ = param_1 - tmp4;
f32 tmp5 = field_0xf98 / getMapScissorAreaSizeRealY();
*outX = midX + (tmp3_ * tmp5);
*outZ = midY + (tmp4_ * tmp5);
}
void dMenu_Fmap2DBack_c::setSpotPane(ResTIMG* i_timg) {
if (mpSpotTexture == NULL) {
mpSpotTexture = new J2DPicture(i_timg);
JUT_ASSERT(1169, mpSpotTexture != NULL);
}
}
void dMenu_Fmap2DBack_c::deleteSpotPane() {
if (mpSpotTexture != NULL) {
delete mpSpotTexture;
mpSpotTexture = NULL;
}
}
void dMenu_Fmap2DBack_c::zoomMapCalc(f32 i_zoom) {
mMapZoomRate = i_zoom;
field_0xfa8 = i_zoom;
mZoom = getAllMapZoomRate() +
(i_zoom * (getRegionMapZoomRate(mRegionCursor) - getAllMapZoomRate()));
calcRenderingScale();
f32 centerX = getMapAreaGlobalCenterPosX();
f32 centerY = getMapAreaGlobalCenterPosY();
if (g_fmapHIO.field_0x308 == false) {
f32 region_centerX = mRegionMinMapX[mRegionCursor] + (mRegionMapSizeX[mRegionCursor] * 0.5f);
f32 region_centerY = mRegionMinMapY[mRegionCursor] + (mRegionMapSizeY[mRegionCursor] * 0.5f);
f32 v = region_centerX + (i_zoom * (centerX - region_centerX));
f32 v2 = region_centerY + (i_zoom * (centerY - region_centerY));
field_0xf0c[mRegionCursor] =
v - (mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f) - mRegionMinMapX[mRegionCursor];
field_0xf2c[mRegionCursor] =
v2 - (mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f) - mRegionMinMapY[mRegionCursor];
} else {
f32 dVar12 = (mRegionScrollMapMinX[mRegionCursor] + mRegionScrollMapMaxX[mRegionCursor]) * 0.5f;
f32 dVar11 = (mRegionScrollMapMinY[mRegionCursor] + mRegionScrollMapMaxY[mRegionCursor]) * 0.5f;
f32 tmp3 = (mRegionMinMapX[mRegionCursor] + mRegionMapSizeX[mRegionCursor] * 0.5f) - dVar12;
f32 tmp = (mRegionMinMapY[mRegionCursor] + mRegionMapSizeY[mRegionCursor] * 0.5f) - dVar11;
f32 tmp2 = (dVar12 + (i_zoom * (centerX - dVar12)));
f32 tmp2_ = (dVar11 + (i_zoom * (centerY - dVar11)));
field_0xf0c[mRegionCursor] =
((tmp2 + (tmp3 * mZoom)) - mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f) -
mRegionMinMapX[mRegionCursor];
field_0xf2c[mRegionCursor] =
((tmp2_ + tmp * mZoom) - mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f) -
mRegionMinMapY[mRegionCursor];
}
for (int i = 0; i < 8; i++) {
if (i != mRegionCursor) {
field_0xf0c[i] =
field_0xf0c[mRegionCursor] +
(mRegionMinMapX[i] - mRegionMinMapX[mRegionCursor]) * (mZoom - getAllMapZoomRate());
field_0xf2c[i] =
field_0xf2c[mRegionCursor] +
(mRegionMinMapY[i] - mRegionMinMapY[mRegionCursor]) * (mZoom - getAllMapZoomRate());
}
}
if (i_zoom == 1.0f) {
for (int i = 0; i < 8; i++) {
field_0xf4c[i] = field_0xf0c[i];
field_0xf6c[i] = field_0xf2c[i];
}
}
calcRenderingPos();
setSpotCursor(mSpotCursor);
field_0xfb8 =
((mRegionMapSizeX[mRegionCursor] + (i_zoom * (getMapAreaSizeX() - mRegionMapSizeX[mRegionCursor]))) /
getMapAreaSizeX());
}
void dMenu_Fmap2DBack_c::zoomMapCalc2(f32 param_0) {
f32 spotZoomRate = getSpotMapZoomRate();
f32 regionZoomRate = getRegionMapZoomRate(mRegionCursor);
mZoom = regionZoomRate + (param_0 * (spotZoomRate - regionZoomRate));
if (mArrowPos3DX + control_xpos < mRegionScrollMinX[mRegionCursor]) {
if (field_0x11a4 == 0.0f) {
field_0x11a4 = (mArrowPos3DX + control_xpos) - mRegionScrollMinX[mRegionCursor];
}
control_xpos = mRegionScrollMinX[mRegionCursor] - mArrowPos3DX;
} else {
if (mArrowPos3DX + control_xpos > mRegionScrollMaxX[mRegionCursor]) {
if (field_0x11a4 == 0.0f) {
field_0x11a4 = (mArrowPos3DX + control_xpos) - mRegionScrollMaxX[mRegionCursor];
}
control_xpos = mRegionScrollMaxX[mRegionCursor] - mArrowPos3DX;
}
}
if (mArrowPos3DZ + control_ypos < mRegionScrollMinZ[mRegionCursor]) {
if (field_0x11a8 == 0.0f) {
field_0x11a8 = (mArrowPos3DZ + control_ypos) - mRegionScrollMinZ[mRegionCursor];
}
control_ypos = mRegionScrollMinZ[mRegionCursor] - this->mArrowPos3DZ;
} else {
if (mArrowPos3DZ + control_ypos > mRegionScrollMaxZ[mRegionCursor]) {
if (field_0x11a8 == 0.0f) {
field_0x11a8 = (mArrowPos3DZ + control_ypos) - mRegionScrollMaxZ[mRegionCursor];
}
control_ypos = mRegionScrollMaxZ[mRegionCursor] - mArrowPos3DZ;
}
}
calcRenderingScale();
mMapZoomRate = param_0 + 1.0f;
f32 centerX = getMapAreaGlobalCenterPosX();
f32 centerY = getMapAreaGlobalCenterPosY();
if (g_fmapHIO.field_0x308 == false) {
field_0xf0c[mRegionCursor] = (centerX - (mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f)) -
mRegionMinMapX[mRegionCursor];
field_0xf2c[mRegionCursor] = (centerY - (mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f)) -
mRegionMinMapY[mRegionCursor];
} else {
f32 x = (mRegionScrollMapMinX[mRegionCursor] + mRegionScrollMapMaxX[mRegionCursor]) * 0.5f;
f32 y = (mRegionScrollMapMinY[mRegionCursor] + mRegionScrollMapMaxY[mRegionCursor]) * 0.5f;
f32 tmp2 = (mRegionMinMapX[mRegionCursor] + (mRegionMapSizeX[mRegionCursor] * 0.5f)) - x;
f32 tmp1 = (mRegionMinMapY[mRegionCursor] + (mRegionMapSizeY[mRegionCursor] * 0.5f)) - y;
field_0xf0c[mRegionCursor] =
((centerX + (tmp2 * mZoom)) - mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f) -
mRegionMinMapX[mRegionCursor];
field_0xf2c[mRegionCursor] =
((centerY + (tmp1 * mZoom)) - mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f) -
mRegionMinMapY[mRegionCursor];
}
for (int i = 0; i < 8; i++) {
if (i != mRegionCursor) {
field_0xf0c[i] =
field_0xf0c[mRegionCursor] +
(mRegionMinMapX[i] - mRegionMinMapX[mRegionCursor]) * (mZoom - getAllMapZoomRate());
field_0xf2c[i] =
field_0xf2c[mRegionCursor] +
(mRegionMinMapY[i] - mRegionMinMapY[mRegionCursor]) * (mZoom - getAllMapZoomRate());
}
}
scrollCalc(param_0);
if (param_0 == 1.0f) {
field_0x11b4 = (mArrowPos3DX + control_xpos) - mStageTransX;
field_0x11b8 = (mArrowPos3DZ + control_ypos) - mStageTransZ;
field_0x11a4 = 0.0f;
field_0x11a8 = 0.0f;
}
}
void dMenu_Fmap2DBack_c::zoomMapCalcHIO() {
if (mZoom != getSpotMapZoomRate()) {
f32 spotZoomRate = getSpotMapZoomRate();
f32 regionZoomRate = getRegionMapZoomRate(mRegionCursor);
mZoom = getSpotMapZoomRate();
calcRenderingScale();
f32 centerX = getMapAreaGlobalCenterPosX();
f32 centerY = getMapAreaGlobalCenterPosY();
if (g_fmapHIO.field_0x308 == false) {
field_0xf0c[mRegionCursor] =
(centerX - (mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f)) -
mRegionMinMapX[mRegionCursor];
field_0xf2c[mRegionCursor] =
(centerY - (mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f)) -
mRegionMinMapY[mRegionCursor];
} else {
f32 x =
(mRegionScrollMapMinX[mRegionCursor] + mRegionScrollMapMaxX[mRegionCursor]) * 0.5f;
f32 y =
(mRegionScrollMapMinY[mRegionCursor] + mRegionScrollMapMaxY[mRegionCursor]) * 0.5f;
f32 tmp2 =
((mRegionMinMapX[mRegionCursor] + mRegionMapSizeX[mRegionCursor] * 0.5f) - x);
f32 tmp1 =
((mRegionMinMapY[mRegionCursor] + mRegionMapSizeY[mRegionCursor] * 0.5f) - y);
field_0xf0c[mRegionCursor] = ((centerX + (tmp2 * mZoom)) -
mRegionMapSizeX[mRegionCursor] * mZoom * 0.5f) -
mRegionMinMapX[mRegionCursor];
field_0xf2c[mRegionCursor] = ((centerY + (tmp1 * mZoom)) -
mRegionMapSizeY[mRegionCursor] * mZoom * 0.5f) -
mRegionMinMapY[mRegionCursor];
}
for (int i = 0; i < 8; i++) {
if (i != mRegionCursor) {
field_0xf0c[i] =
field_0xf0c[mRegionCursor] + (mRegionMinMapX[i] - mRegionMinMapX[mRegionCursor]) *
(mZoom - getAllMapZoomRate());
field_0xf2c[i] =
field_0xf2c[mRegionCursor] + (mRegionMinMapY[i] - mRegionMinMapY[mRegionCursor]) *
(mZoom - getAllMapZoomRate());
}
}
scrollCalc(1.0f);
}
}
void dMenu_Fmap2DBack_c::scrollCalc(f32 param_0) {
f32 sp40, sp3C;
calcAllMapPos2D(mArrowPos3DX + control_xpos, mArrowPos3DZ + control_ypos, &sp40, &sp3C,
field_0xf4c[mRegionCursor], field_0xf6c[mRegionCursor],
getRegionMapZoomRate(mRegionCursor));
f32 sp38 = getMapAreaGlobalCenterPosX();
f32 sp34 = getMapAreaGlobalCenterPosY();
f32 sp30 = sp40 + (param_0 * (sp38 - sp40));
f32 sp2C = sp3C + (param_0 * (sp34 - sp3C));
f32 sp28, sp24;
calcAllMapPosWorld(sp30, sp2C, &sp28, &sp24);
mStageTransX = (mArrowPos3DX + control_xpos) - sp28;
mStageTransZ = (mArrowPos3DZ + control_ypos) - sp24;
field_0x11ac = mStageTransX;
field_0x11b0 = mStageTransZ;
if ((((field_0x11a4 != 0.0f) || (field_0x11a8 != 0.0f)) && (mMapZoomRate > 1.0f)) &&
(mMapZoomRate < 2.0f))
{
f32 local_40 = 2.0f - mMapZoomRate;
//!@bug local_44 or local_48 can be uninitialized if field_0x11a4 or field_0x11a8 is not 0
f32 local_44, local_48;
if (field_0x11a4 != 0.0f) {
local_44 = field_0x11a4 * local_40;
}
if (field_0x11a8 != 0.0f) {
local_48 = field_0x11a8 * local_40;
}
calcAllMapPos2D(mArrowPos3DX + control_xpos + local_44,
mArrowPos3DZ + control_ypos + local_48, &sp40, &sp3C,
field_0xf4c[mRegionCursor], field_0xf6c[mRegionCursor],
getRegionMapZoomRate(mRegionCursor));
f32 sp14 = sp40 + (param_0 * (sp38 - sp40));
f32 sp10 = sp3C + (param_0 * (sp34 - sp3C));
f32 spC, sp8;
calcAllMapPosWorld(sp14, sp10, &spC, &sp8);
field_0x11ac = (mArrowPos3DX + control_xpos + local_44) - spC;
field_0x11b0 = (mArrowPos3DZ + control_ypos + local_48) - sp8;
}
if (param_0 == 0.0f) {
field_0xfd0 = field_0xfd4 = 0.0f;
field_0xfd8 = field_0xfdc = 0.0f;
} else if (param_0 == 1.0f) {
field_0xfd0 = mStageTransX;
field_0xfd4 = mStageTransZ;
}
calcRenderingPos();
}
void dMenu_Fmap2DBack_c::mapBlink(s16* param_0) {
*param_0 += (s16)1;
if (*param_0 >= 30) {
*param_0 -= (s16)30;
}
}
void dMenu_Fmap2DBack_c::setSpotCursor(u8 param_0) {
this->mSpotCursor = param_0;
f32 tmp1, tmp2;
getStageOriginPath(param_0, &tmp1, &tmp2);
calcAllMapPos2D(tmp1, tmp2, &field_0x1184, &field_0x1188);
}
void dMenu_Fmap2DBack_c::allmap_move2(STControl* param_0) {
f32 sp48, sp44;
calcAllMapPosWorld(getMapScissorAreaLX(), getMapScissorAreaLY(), &sp48, &sp44);
f32 sp40, sp3C;
calcAllMapPosWorld(getMapScissorAreaLX() + getMapScissorAreaSizeRealX(),
getMapScissorAreaLY() + getMapScissorAreaSizeRealY(), &sp40, &sp3C);
int r26 = 0;
if (r26 == 0) {
f32 spC = g_fmapHIO.mScrollSpeedSlowBound < g_fmapHIO.mScrollSpeedFastBound ?
g_fmapHIO.mScrollSpeedSlowBound :
g_fmapHIO.mScrollSpeedFastBound;
f32 sp8 = g_fmapHIO.mScrollSpeedSlowBound > g_fmapHIO.mScrollSpeedFastBound ?
g_fmapHIO.mScrollSpeedSlowBound :
g_fmapHIO.mScrollSpeedFastBound;
f32 stickValue = param_0->getValueStick();
if (stickValue >= spC) {
s16 angle = param_0->getAngleStick();
f32 local_68 = (mTexMaxX - mTexMinX);
f32 zoomRate = local_68 / getAllMapZoomRate();
f32 sp24;
if (stickValue < sp8) {
sp24 = g_fmapHIO.mScrollSpeedWorldSlow;
} else {
sp24 = g_fmapHIO.mScrollSpeedWorldFast;
}
f32 speed = (sp24 / 100.0f) * zoomRate;
f32 delta_y = speed * cM_ssin(angle);
f32 delta_x = speed * cM_scos(angle);
control_xpos = control_xpos + delta_y;
control_ypos = control_ypos + delta_x;
}
}
if (mArrowPos3DX + control_xpos < sp48) {
control_xpos = sp48 - mArrowPos3DX;
}
if (mArrowPos3DX + control_xpos > sp40) {
control_xpos = sp40 - mArrowPos3DX;
}
if (mArrowPos3DZ + control_ypos < sp44) {
control_ypos = sp44 - mArrowPos3DZ;
}
if (mArrowPos3DZ + control_ypos > sp3C) {
control_ypos = sp3C - mArrowPos3DZ;
}
calcRenderingScale();
calcRenderingPos();
calcAllMapPos();
f32 sp14, sp10;
calcAllMapPos2D((mArrowPos3DX + control_xpos) - mStageTransX,
(mArrowPos3DZ + control_ypos) - mStageTransZ, &sp14, &sp10);
mSelectRegion = 0xff;
for (int i = 7; i >= 0; i--) {
int val = field_0x1230[i];
if (val != 0xff && val != 7) {
u8 pixel = dMeter2Info_getPixel(
sp14, sp10, (mRegionMinMapX[val] + field_0xf0c[val] + mTransX),
(mRegionMinMapY[val] + field_0xf2c[val] + mTransZ), (mRegionMapSizeX[val] * mZoom),
(mRegionMapSizeY[val] * mZoom), mpAreaTex[val]->getTexture(0)->getTexInfo());
if (pixel) {
mSelectRegion = val;
}
}
if (mSelectRegion != 0xff)
break;
}
}
void dMenu_Fmap2DBack_c::setIcon2DPos(u8 param_0, f32 param_1, f32 param_2, f32 param_3, u8 param_4,
bool param_5) {
f32 local_68, local_6c;
f32 sp30 = mMapZoomRate;
u8 uVar9 = 1;
if (param_0 == 17) {
uVar9 = 2;
f32 dVar11 = 0.0f;
f32 dVar10 = 0.0f;
f32 sp2C, sp28;
calcAllMapPosWorld(getMapScissorAreaCenterPosX(), getMapScissorAreaCenterPosY(), &sp2C,
&sp28);
f32 sp24, sp20;
calcAllMapPos2D(sp2C + mStageTransX, sp28 + mStageTransZ, &sp24, &sp20);
dVar11 = getMapScissorAreaCenterPosX() - sp24;
dVar10 = getMapScissorAreaCenterPosY() - sp20;
if (mRegionCursor + 1 == dComIfGp_getNowLevel()) {
calcAllMapPos2D(param_1 - mStageTransX, param_2 - mStageTransZ, &local_68, &local_6c);
f32 tmp2 = (dVar11 + (mRegionMinMapX[mRegionCursor] + field_0xf0c[mRegionCursor])) +
((mRegionMapSizeX[mRegionCursor] * mZoom) / 2.0f);
f32 tmp1 = (dVar10 + (mRegionMinMapY[mRegionCursor] + field_0xf2c[mRegionCursor])) +
((mRegionMapSizeY[mRegionCursor] * mZoom) / 2.0f);
field_0x11e8 = local_68 - tmp2;
field_0x11ec = local_6c - tmp1;
} else {
f32 tmp2 = (dVar11 + (mRegionMinMapX[dComIfGp_getNowLevel() - 1] +
field_0xf0c[dComIfGp_getNowLevel() - 1])) +
((mRegionMapSizeX[dComIfGp_getNowLevel() - 1] * mZoom) / 2.0f);
f32 tmp1 = (dVar10 + (mRegionMinMapY[dComIfGp_getNowLevel() - 1] +
field_0xf2c[dComIfGp_getNowLevel() - 1])) +
((mRegionMapSizeY[dComIfGp_getNowLevel() - 1] * mZoom) / 2.0f);
local_68 = tmp2 + (field_0x11e8 * mZoom);
local_6c = tmp1 + (field_0x11ec * mZoom);
}
} else {
calcAllMapPos2D(param_1 - mStageTransX, param_2 - mStageTransZ, &local_68, &local_6c);
}
if (!param_5) {
if (param_0 == 1) {
sp30 = (mMapZoomRate * 0.5f) + 0.5f;
uVar9 = 2;
}
if (param_4 != 0) {
uVar9 = 3;
}
setIconInfo(param_0, local_68, local_6c, 1.0f, param_3, sp30, uVar9);
}
}
void dMenu_Fmap2DBack_c::setIcon2DPos(u8 param_0, char const* param_1, f32 param_2, f32 param_3,
f32 param_4, u8 param_5, bool param_6) {
setIcon2DPos(param_0, mRegionCursor, param_1, param_2, param_3, param_4, param_5, param_6);
}
void dMenu_Fmap2DBack_c::setIcon2DPos(u8 param_0, u8 param_1, char const* param_2, f32 param_3,
f32 param_4, f32 param_5, u8 param_6, bool param_7) {
f32 tmp1, tmp2;
calcOffset(param_1, param_2, &tmp1, &tmp2);
setIcon2DPos(param_0, param_3 + tmp1, param_4 + tmp2, param_5, param_6, param_7);
}
int dMenu_Fmap2DBack_c::isShowRegion(int param_0) {
if (param_0 == 7) {
return 1;
}
if (g_fmapHIO.mAllRegionsUnlocked) {
if (isShowRegionFlag(param_0)) {
return 1;
}
} else {
if (g_fmapHIO.mDebugRegionBits[param_0] && isShowRegionFlag(param_0)) {
return 1;
}
if (param_0 == 6) {
if (isShowRegionFlag(3) && dComIfGs_isRegionBit(4)) {
return 1;
}
if (dComIfGp_getNowLevel() == 4) {
return 1;
}
return 0;
}
if (isShowRegionFlag(param_0) && dComIfGs_isRegionBit(param_0 + 1)) {
return 1;
}
if (param_0 + 1 == dComIfGp_getNowLevel()) {
return 1;
}
}
return 0;
}
f32 dMenu_Fmap2DBack_c::getMapAreaGlobalPosX() {
return g_fmapHIO.mMapTopLeftPosX;
}
f32 dMenu_Fmap2DBack_c::getMapAreaGlobalPosY() {
return g_fmapHIO.mMapTopLeftPosY;
}
f32 dMenu_Fmap2DBack_c::getMapAreaGlobalCenterPosX() {
return getMapAreaGlobalPosX() + (getMapAreaSizeX() / 2.0f);
}
f32 dMenu_Fmap2DBack_c::getMapAreaGlobalCenterPosY() {
return getMapAreaGlobalPosY() + (getMapAreaSizeY() / 2.0f);
}
f32 dMenu_Fmap2DBack_c::getMapAreaSizeX() {
return g_fmapHIO.mMapScale;
}
f32 dMenu_Fmap2DBack_c::getMapAreaSizeY() {
return g_fmapHIO.mMapScale;
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaLX() {
Mtx mtx;
Vec vec = mpMapArea->getGlobalVtx(mpMapArea->getPanePtr(), &mtx, 0, false, 0);
return vec.x;
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaLY() {
Mtx mtx;
Vec vec = mpMapArea->getGlobalVtx(mpMapArea->getPanePtr(), &mtx, 0, false, 0);
return vec.y;
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaSizeX() {
f32 scale = mpMapArea->getScaleX();
J2DPane* pane;
for (pane = mpMapArea->getPanePtr()->getParentPane(); pane != NULL;
pane = pane->getParentPane())
{
scale *= pane->getScaleX();
}
return scale * mpMapArea->getSizeX();
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaSizeRealX() {
#if PLATFORM_GCN
return getMapScissorAreaSizeX();
#else
return getMapScissorAreaSizeX() * mDoGph_gInf_c::getScale();
#endif
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaCenterPosX() {
return getMapScissorAreaLX() + (getMapScissorAreaSizeRealX() / 2.0f);
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaCenterPosY() {
return getMapScissorAreaLY() + (getMapScissorAreaSizeRealY() / 2.0f);
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaSizeY() {
f32 scale = mpMapArea->getScaleY();
J2DPane* pane;
for (pane = mpMapArea->getPanePtr()->getParentPane(); pane != NULL;
pane = pane->getParentPane())
{
scale *= pane->getScaleY();
}
return scale * mpMapArea->getSizeY();
}
f32 dMenu_Fmap2DBack_c::getMapScissorAreaSizeRealY() {
return getMapScissorAreaSizeY();
}
void dMenu_Fmap2DBack_c::calcRenderingPos() {
calcAllMapPosWorld(getMapScissorAreaCenterPosX(), getMapScissorAreaCenterPosY(), &mRenderingPosX,
&mRenderingPosZ);
mRenderingPosX += mStageTransX;
mRenderingPosZ += mStageTransZ;
}
void dMenu_Fmap2DBack_c::calcRenderingScale() {
f32 xScale = (mTexMaxX - mTexMinX) / getMapAreaSizeX();
f32 yScale = (mTexMaxZ - mTexMinZ) / getMapAreaSizeY();
f32 scale = xScale;
if (xScale < yScale) {
scale = yScale;
}
mRenderingScale = scale / mZoom;
field_0xf98 = mRenderingScale * getMapScissorAreaSizeRealY();
}
f32 dMenu_Fmap2DBack_c::getPathScale(f32 i_zoom) {
JUT_ASSERT(2204, i_zoom != 0.0f);
f32 xScale = (mTexMaxX - mTexMinX) / getMapAreaSizeX();
f32 yScale = (mTexMaxZ - mTexMinZ) / getMapAreaSizeY();
f32 scale = xScale;
if (xScale < yScale) {
scale = yScale;
}
return (scale * getMapScissorAreaSizeRealY()) / i_zoom;
}
f32 dMenu_Fmap2DBack_c::getAllMapZoomRate() {
return 1.0f;
}
f32 dMenu_Fmap2DBack_c::getRegionMapZoomRate(int i_regionNo) {
f32 tmp1, tmp2;
if (g_fmapHIO.field_0x308 == false) {
tmp1 = getMapAreaSizeX() / mRegionMapSizeX[i_regionNo];
tmp2 = getMapAreaSizeY() / mRegionMapSizeY[i_regionNo];
} else {
tmp1 = getMapAreaSizeX() /
(mRegionScrollMapMaxX[mRegionCursor] - mRegionScrollMapMinX[mRegionCursor]);
tmp2 = getMapAreaSizeY() /
(mRegionScrollMapMaxY[mRegionCursor] - mRegionScrollMapMinY[mRegionCursor]);
}
if (tmp1 < tmp2) {
field_0x122e = false;
return tmp1;
} else {
field_0x122e = true;
return tmp2;
}
}
f32 dMenu_Fmap2DBack_c::getSpotMapZoomRate() {
f32 tmp4;
f32 tmp1 = mTexMaxX - mTexMinX;
f32 tmp2 = mTexMaxZ - mTexMinZ;
f32 tmp3 = tmp1;
if (tmp3 < tmp2) {
tmp3 = tmp2;
}
tmp4 = tmp3 / g_fmapHIO.mRegionZoomRange;
return tmp4;
}
void dMenu_Fmap2DBack_c::getStageOriginPath(u8 param_0, f32* param_1, f32* param_2) {
for (int i = 0; i < 20; i++) {
if (i == param_0) {
*param_1 = mStageOriginPathX[i];
*param_2 = mStageOriginPathZ[i];
break;
}
}
}
void dMenu_Fmap2DBack_c::calcOffset(u8 i_regionNo, char const* i_stageName,
f32* o_offsetX, f32* o_offsetZ) {
if (mpStages != NULL) {
Stage_c::data* data = mpStages->mData;
for (int j = 0, i = 0; i < mStageDataNum; i++) {
if (i_regionNo + 1 == data[i].mRegionNo) {
if (strcmp(i_stageName, data[i].mName) == 0) {
*o_offsetX = mRegionOriginX[i_regionNo] + data[i].mOffsetX;
*o_offsetZ = mRegionOriginZ[i_regionNo] + data[i].mOffsetZ;
return;
} else {
j++;
}
}
}
}
*o_offsetX = mRegionOriginX[i_regionNo];
*o_offsetZ = mRegionOriginZ[i_regionNo];
}
void dMenu_Fmap2DBack_c::regionTextureDraw() {
f32 local_84, local_88;
f32 dVar14 = 0.0f;
f32 dVar13 = 0.0f;
calcAllMapPosWorld(getMapScissorAreaCenterPosX(), getMapScissorAreaCenterPosY(), &local_84,
&local_88);
f32 local_8c, local_90;
calcAllMapPos2D(local_84 + mStageTransX, local_88 + mStageTransZ, &local_8c, &local_90);
dVar14 = getMapScissorAreaCenterPosX() - local_8c;
dVar13 = getMapScissorAreaCenterPosY() - local_90;
s32 uVar9 = mRegionCursor;
s32 local_94;
if (mMapZoomRate == 0.0f) {
local_94 = mSelectRegion;
} else {
local_94 = mRegionCursor;
}
if (g_fmapHIO.mDrawBackground == false) {
return;
}
for (int iVar8 = 0; iVar8 < 8; iVar8++) {
s32 uVar10 = field_0x1230[iVar8];
if (uVar10 != 0xff && mpAreaTex[uVar10] != NULL) {
f32 fVar3;
if (isShowRegion(uVar10)) {
if (uVar10 != local_94) {
mpAreaTex[uVar10]->setBlackWhite(mUnselectedRegionBlack, mUnselectedRegionWhite);
fVar3 = field_0x1214;
} else {
mpAreaTex[uVar10]->setBlackWhite(mSelectedRegionBlack, mSelectedRegionWhite);
fVar3 = field_0x1210;
}
} else {
mpAreaTex[uVar10]->setBlackWhite(mUnreachedRegionBlack, mUnreachedRegionWhite);
fVar3 = 0.5f;
}
mpAreaTex[uVar10]->setAlpha(mAlphaRate * 255.0f * fVar3 * field_0xfa4);
if (uVar10 != uVar9) {
bool b = 0;
f32 v = mTransX + (dVar14 + (mRegionMinMapX[uVar10] + field_0xf0c[uVar10]));
mpAreaTex[uVar10]->draw(
v, mTransZ + (dVar13 + (mRegionMinMapY[uVar10] + field_0xf2c[uVar10])),
mRegionMapSizeX[uVar10] * mZoom, mRegionMapSizeY[uVar10] * mZoom, b, false,
false);
} else {
bool b = 0;
f32 v = mTransX + (dVar14 + (mRegionMinMapX[uVar9] + field_0xf0c[uVar9]));
mpAreaTex[uVar9]->draw(
v, mTransZ + (dVar13 + (mRegionMinMapY[uVar9] + field_0xf2c[uVar9])),
mRegionMapSizeX[uVar9] * mZoom, mRegionMapSizeY[uVar9] * mZoom, b, false,
false);
}
}
}
}
void dMenu_Fmap2DBack_c::stageTextureDraw() {
if (mAllPathShowFlag) {
mpSpotTexture->setAlpha(mAlphaRate * 255.0f * mSpotTextureFadeAlpha);
} else {
mpSpotTexture->setAlpha(mAlphaRate * 255.0f * field_0xfa8 * mSpotTextureFadeAlpha);
}
mpSpotTexture->draw(mTransX + getMapScissorAreaLX(), mTransZ + getMapScissorAreaLY(),
getMapScissorAreaSizeRealX(), getMapScissorAreaSizeRealY(), false, false,
false);
}
void dMenu_Fmap2DBack_c::worldGridDraw() {
f32 local_74, local_78;
f32 xPos, yPos;
f32 dVar9 = -mStageTransX;
f32 dVar8 = -mStageTransZ;
calcAllMapPos2D(dVar9, dVar8, &local_74, &local_78);
J2DDrawLine(local_74, mDoGph_gInf_c::getMinYF(), local_74,
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF(),
JUtility::TColor(255, 255, 255, 255), 6);
xPos = dVar9 - g_fmapHIO.mWorldGridWidth;
while (true) {
calcAllMapPos2D(xPos, dVar8, &local_74, &local_78);
if (local_74 >= getMapScissorAreaLX()) {
J2DDrawLine(local_74, mDoGph_gInf_c::getMinYF(), local_74,
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF(),
JUtility::TColor(255, 255, 255, 255), 6);
xPos -= g_fmapHIO.mWorldGridWidth;
} else {
break;
}
}
xPos = dVar9 + g_fmapHIO.mWorldGridWidth;
while (true) {
calcAllMapPos2D(xPos, dVar8, &local_74, &local_78);
if (local_74 <= getMapScissorAreaLX() + getMapScissorAreaSizeRealX()) {
J2DDrawLine(local_74, mDoGph_gInf_c::getMinYF(), local_74,
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF(),
JUtility::TColor(255, 255, 255, 255), 6);
xPos += g_fmapHIO.mWorldGridWidth;
} else {
break;
}
}
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_78,
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), local_78,
JUtility::TColor(255, 255, 255, 255), 6);
yPos = dVar8 - g_fmapHIO.mWorldGridWidth;
while (true) {
calcAllMapPos2D(dVar9, yPos, &local_74, &local_78);
if (local_78 >= getMapScissorAreaLY()) {
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_78,
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), local_78,
JUtility::TColor(255, 255, 255, 255), 6);
yPos -= g_fmapHIO.mWorldGridWidth;
} else {
break;
}
}
yPos = dVar8 + g_fmapHIO.mWorldGridWidth;
while (true) {
calcAllMapPos2D(dVar9, yPos, &local_74, &local_78);
if (local_78 <= getMapScissorAreaLY() + getMapScissorAreaSizeRealY()) {
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_78,
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), local_78,
JUtility::TColor(255, 255, 255, 255), 6);
yPos += g_fmapHIO.mWorldGridWidth;
} else {
break;
}
}
}
void dMenu_Fmap2DBack_c::regionGridDraw() {
f32 local_74, local_78;
f32 xPos, yPos;
f32 dVar9 = mRegionOriginX[mRegionCursor] - mStageTransX;
f32 dVar8 = mRegionOriginZ[mRegionCursor] - mStageTransZ;
calcAllMapPos2D(dVar9, dVar8, &local_74, &local_78);
J2DDrawLine(local_74, mDoGph_gInf_c::getMinYF(), local_74,
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF(),
JUtility::TColor(180, 0, 0, 255), 6);
xPos = dVar9 - g_fmapHIO.mRegionGridWidth;
while (true) {
calcAllMapPos2D(xPos, dVar8, &local_74, &local_78);
if (local_74 >= getMapScissorAreaLX()) {
J2DDrawLine(local_74, mDoGph_gInf_c::getMinYF(), local_74,
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF(),
JUtility::TColor(180, 0, 0, 255), 6);
xPos -= g_fmapHIO.mRegionGridWidth;
} else {
break;
}
}
xPos = dVar9 + g_fmapHIO.mRegionGridWidth;
while (true) {
calcAllMapPos2D(xPos, dVar8, &local_74, &local_78);
if (local_74 <= getMapScissorAreaLX() + getMapScissorAreaSizeRealX()) {
J2DDrawLine(local_74, mDoGph_gInf_c::getMinYF(), local_74,
mDoGph_gInf_c::getMinYF() + mDoGph_gInf_c::getHeightF(),
JUtility::TColor(180, 0, 0, 255), 6);
xPos += g_fmapHIO.mRegionGridWidth;
} else {
break;
}
}
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_78,
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), local_78,
JUtility::TColor(180, 0, 0, 255), 6);
yPos = dVar8 - g_fmapHIO.mRegionGridWidth;
while (true) {
calcAllMapPos2D(dVar9, yPos, &local_74, &local_78);
if (local_78 >= getMapScissorAreaLY()) {
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_78,
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), local_78,
JUtility::TColor(180, 0, 0, 255), 6);
yPos -= g_fmapHIO.mRegionGridWidth;
} else {
break;
}
}
yPos = dVar8 + g_fmapHIO.mRegionGridWidth;
while (true) {
calcAllMapPos2D(dVar9, yPos, &local_74, &local_78);
if (local_78 <= getMapScissorAreaLY() + getMapScissorAreaSizeRealY()) {
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_78,
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(), local_78,
JUtility::TColor(180, 0, 0, 255), 6);
yPos += g_fmapHIO.mRegionGridWidth;
} else {
break;
}
}
}
// needed to make sdata2 match
static f32 dummy(int param_0) {
return param_0;
}
void dMenu_Fmap2DBack_c::worldOriginDraw() {
f32 local_44, local_48;
calcAllMapPos2D(-mStageTransX, -mStageTransZ, &local_44, &local_48);
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_48 - local_44 + mDoGph_gInf_c::getMinXF(),
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(),
local_48 - local_44 + (mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF()),
JUtility::TColor(0, 255, 0, 255), 6);
J2DDrawLine(mDoGph_gInf_c::getMinXF(), local_48 + local_44 + -mDoGph_gInf_c::getMinXF(),
mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF(),
local_48 + local_44 + -(mDoGph_gInf_c::getMinXF() + mDoGph_gInf_c::getWidthF()),
JUtility::TColor(0, 255, 0, 255), 6);
}
void dMenu_Fmap2DBack_c::scrollAreaDraw() {
for (int i = 0; i < 8; i++) {
if (mMapZoomRate != 0.0f && i != mRegionCursor) {
continue;
}
f32 x_min, z_min, x_max, z_max;
if (g_fmapHIO.mScrollRangeDebugON) {
x_min = g_fmapHIO.mRegionScrollRangeMinX[i];
z_min = g_fmapHIO.mRegionScrollRangeMinZ[i];
x_max = g_fmapHIO.mRegionScrollRangeMaxX[i];
z_max = g_fmapHIO.mRegionScrollRangeMaxZ[i];
} else {
x_min = mRegionScrollMinX[i];
z_min = mRegionScrollMinZ[i];
x_max = mRegionScrollMaxX[i];
z_max = mRegionScrollMaxZ[i];
}
f32 local_4c, local_50, local_54, local_58;
calcAllMapPos2D(x_min - mStageTransX, z_min - mStageTransZ, &local_4c, &local_50);
calcAllMapPos2D(x_max - mStageTransX, z_max - mStageTransZ, &local_54, &local_58);
J2DDrawLine(local_4c, local_50, local_4c, local_58,
JUtility::TColor(255, 255, 255, 255), 6);
J2DDrawLine(local_54, local_50, local_54, local_58,
JUtility::TColor(255, 255, 255, 255), 6);
J2DDrawLine(local_4c, local_50, local_54, local_50,
JUtility::TColor(255, 255, 255, 255), 6);
J2DDrawLine(local_4c, local_58, local_54, local_58,
JUtility::TColor(255, 255, 255, 255), 6);
}
}
void dMenu_Fmap2DBack_c::regionOriginDraw() {
for (int i = 0; i < 8; i++) {
if (!mpAreaTex[i]) {
continue;
}
f32 center_x, center_y;
calcAllMapPos2D(mRegionOriginX[i] - mStageTransX, mRegionOriginZ[i] - mStageTransZ,
&center_x, &center_y);
J2DFillBox(center_x - 3.0f, center_y - 3.0f, 6.0f, 6.0f, JUtility::TColor(255, 0, 0, 255));
}
}
void dMenu_Fmap2DBack_c::stageOriginDraw() {
if (!mpStages) {
return;
}
dMenuMapCommon_c::Stage_c::data* stage_data = mpStages->mData;
for (int i = 0; i < mStageDataNum; i++) {
if (mRegionCursor + 1 == stage_data[i].mRegionNo) {
f32 center_x, center_y;
f32 v1 = mRegionOriginX[mRegionCursor] + stage_data[i].mOffsetX - mStageTransX;
f32 v2 = mRegionOriginZ[mRegionCursor] + stage_data[i].mOffsetZ - mStageTransZ;
calcAllMapPos2D(v1, v2, &center_x, &center_y);
J2DFillBox(center_x - 3.0f, center_y - 3.0f, 6.0f, 6.0f,
JUtility::TColor(0, 0, 255, 255));
}
}
}
void dMenu_Fmap2DBack_c::calcBlink() {
f32 t;
int i;
if (mMapZoomRate <= 1.0f) {
t = mMapZoomRate;
i = 0;
} else {
t = mMapZoomRate - 1.0f;
i = 1;
}
mSelectedRegionBlack.r = g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.r
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mBlack.r
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.r);
mSelectedRegionBlack.g = g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.g
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mBlack.g
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.g);
mSelectedRegionBlack.b = g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.b
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mBlack.b
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.b);
mSelectedRegionBlack.a = g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.a
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mBlack.a
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlack.a);
mSelectedRegionWhite.r = g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.r
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mWhite.r
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.r);
mSelectedRegionWhite.g = g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.g
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mWhite.g
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.g);
mSelectedRegionWhite.b = g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.b
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mWhite.b
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.b);
mSelectedRegionWhite.a = g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.a
+ t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mWhite.a
- g_fmapHIO.mMapBlink[i].mSelectedRegion.mWhite.a);
mUnselectedRegionBlack.r = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.r
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mBlack.r
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.r);
mUnselectedRegionBlack.g = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.g
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mBlack.g
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.g);
mUnselectedRegionBlack.b = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.b
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mBlack.b
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.b);
mUnselectedRegionBlack.a = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.a
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mBlack.a
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlack.a);
mUnselectedRegionWhite.r = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.r
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mWhite.r
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.r);
mUnselectedRegionWhite.g = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.g
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mWhite.g
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.g);
mUnselectedRegionWhite.b = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.b
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mWhite.b
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.b);
mUnselectedRegionWhite.a = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.a
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mWhite.a
- g_fmapHIO.mMapBlink[i].mUnselectedRegion.mWhite.a);
mUnreachedRegionBlack.r = g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.r
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionBlack.r
- g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.r);
mUnreachedRegionBlack.g = g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.g
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionBlack.g
- g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.g);
mUnreachedRegionBlack.b = g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.b
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionBlack.b
- g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.b);
mUnreachedRegionBlack.a = g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.a
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionBlack.a
- g_fmapHIO.mMapBlink[i].mUnreachedRegionBlack.a);
mUnreachedRegionWhite.r = g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.r
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionWhite.r
- g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.r);
mUnreachedRegionWhite.g = g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.g
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionWhite.g
- g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.g);
mUnreachedRegionWhite.b = g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.b
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionWhite.b
- g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.b);
mUnreachedRegionWhite.a = g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.a
+ t * (g_fmapHIO.mMapBlink[i + 1].mUnreachedRegionWhite.a
- g_fmapHIO.mMapBlink[i].mUnreachedRegionWhite.a);
field_0x1208.r = g_fmapHIO.mMapBlink[i].field_0x20.r
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x20.r
- g_fmapHIO.mMapBlink[i].field_0x20.r);
field_0x1208.g = g_fmapHIO.mMapBlink[i].field_0x20.g
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x20.g
- g_fmapHIO.mMapBlink[i].field_0x20.g);
field_0x1208.b = g_fmapHIO.mMapBlink[i].field_0x20.b
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x20.b
- g_fmapHIO.mMapBlink[i].field_0x20.b);
field_0x1208.a = g_fmapHIO.mMapBlink[i].field_0x20.a
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x20.a
- g_fmapHIO.mMapBlink[i].field_0x20.a);
field_0x120c.r = g_fmapHIO.mMapBlink[i].field_0x24.r
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x24.r
- g_fmapHIO.mMapBlink[i].field_0x24.r);
field_0x120c.g = g_fmapHIO.mMapBlink[i].field_0x24.g
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x24.g
- g_fmapHIO.mMapBlink[i].field_0x24.g);
field_0x120c.b = g_fmapHIO.mMapBlink[i].field_0x24.b
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x24.b
- g_fmapHIO.mMapBlink[i].field_0x24.b);
field_0x120c.a = g_fmapHIO.mMapBlink[i].field_0x24.a
+ t * (g_fmapHIO.mMapBlink[i + 1].field_0x24.a
- g_fmapHIO.mMapBlink[i].field_0x24.a);
f32 selected_max, selected_min, unselected_max, unselected_min;
f32 tmp_selected_min = g_fmapHIO.mMapBlink[i].mSelectedRegion.mMin / 255.0f;
f32 tmp_selected_max = g_fmapHIO.mMapBlink[i].mSelectedRegion.mMax / 255.0f;
f32 tmp_unselected_min = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mMin / 255.0f;
f32 tmp_unselected_max = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mMax / 255.0f;
f32 sp20 = g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mMin / 255.0f;
f32 sp1C = g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mMax / 255.0f;
f32 sp18 = g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mMin / 255.0f;
f32 sp14 = g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mMax / 255.0f;
selected_max = tmp_selected_max + t * (sp1C - tmp_selected_max);
selected_min = tmp_selected_min + t * (sp20 - tmp_selected_min);
s16 selected_blink_speed = g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlinkSpeed +
t * (g_fmapHIO.mMapBlink[i + 1].mSelectedRegion.mBlinkSpeed -
g_fmapHIO.mMapBlink[i].mSelectedRegion.mBlinkSpeed);
unselected_max = tmp_unselected_max + t * (sp14 - tmp_unselected_max);
unselected_min = tmp_unselected_min + t * (sp18 - tmp_unselected_min);
s16 unselected_blink_speed = g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlinkSpeed +
t * (g_fmapHIO.mMapBlink[i + 1].mUnselectedRegion.mBlinkSpeed -
g_fmapHIO.mMapBlink[i].mUnselectedRegion.mBlinkSpeed);
field_0x1218++;
if (field_0x1218 >= selected_blink_speed) {
field_0x1218 = 0;
}
field_0x121a++;
if (field_0x121a >= unselected_blink_speed) {
field_0x121a = 0;
}
f32 t_selected = 0.0f;
f32 t_unselected = 0.0f;
if (selected_blink_speed > 0.0f) {
if (field_0x1218 < selected_blink_speed * 0.5f) {
t_selected = field_0x1218 / (selected_blink_speed * 0.5f);
} else {
t_selected = (selected_blink_speed - field_0x1218) / (selected_blink_speed * 0.5f);
}
}
if (unselected_blink_speed > 0.0f) {
if (field_0x121a < unselected_blink_speed * 0.5f) {
t_unselected = field_0x121a / (unselected_blink_speed * 0.5f);
} else {
t_unselected = (unselected_blink_speed - field_0x121a) / (unselected_blink_speed * 0.5f);
}
}
field_0x1210 = selected_min + t_selected * (selected_max - selected_min);
field_0x1214 = unselected_min + t_unselected * (unselected_max - unselected_min);
}
void dMenu_Fmap2DBack_c::calcBackAlpha(bool param_0) {
if (param_0) {
if (mBackAlpha != 1.0f) {
cLib_addCalc2(&mBackAlpha, 1.0f, 0.4f, 0.5f);
if (std::fabs(mBackAlpha - 1.0f) < 0.1f) {
mBackAlpha = 1.0f;
}
}
} else {
if (mBackAlpha != 0.0f) {
cLib_addCalc2(&mBackAlpha, 0.0f, 0.4f, 0.5f);
if (std::fabs(mBackAlpha) < 0.1f) {
mBackAlpha = 0.0f;
}
}
}
}
void dMenu_Fmap2DBack_c::btkAnimeLoop(f32 i_step) {
if (mpBaseAnm) {
mAnmFrame += i_step;
if (mAnmFrame >= mpBaseAnm->getFrameMax()) {
mAnmFrame -= mpBaseAnm->getFrameMax();
}
mpBaseAnm->setFrame(mAnmFrame);
} else {
mAnmFrame = 0.0f;
}
mpBaseScreen->search('gold00_0')->setAnimation(mpBaseAnm);
mpBaseScreen->search('gold00_1')->setAnimation(mpBaseAnm);
mpBaseScreen->animation();
}
void dMenu_Fmap2DBack_c::setBaseBackAlpha(u8 param_0) {
mpMapBlack->setAlpha(param_0);
}
void dMenu_Fmap2DBack_c::regionMapMove(STControl* i_stick) {
f32 min_x, min_y, max_x, max_y;
calcAllMapPosWorld(getMapScissorAreaLX(), getMapScissorAreaLY(), &min_x, &min_y);
calcAllMapPosWorld(getMapScissorAreaLX() + getMapScissorAreaSizeRealX(),
getMapScissorAreaLY() + getMapScissorAreaSizeRealY(), &max_x, &max_y);
int r27 = 0;
if (r27 == 0) {
f32 slow_bound = g_fmapHIO.mScrollSpeedSlowBound < g_fmapHIO.mScrollSpeedFastBound ?
g_fmapHIO.mScrollSpeedSlowBound :
g_fmapHIO.mScrollSpeedFastBound;
f32 fast_bound = g_fmapHIO.mScrollSpeedSlowBound > g_fmapHIO.mScrollSpeedFastBound ?
g_fmapHIO.mScrollSpeedSlowBound :
g_fmapHIO.mScrollSpeedFastBound;
f32 stick_value = i_stick->getValueStick();
if (stick_value >= slow_bound) {
s16 angle = i_stick->getAngleStick();
f32 local_68 = mTexMaxX - mTexMinX;
f32 spot_zoom = getSpotMapZoomRate();
f32 region_zoom = getRegionMapZoomRate(mRegionCursor);
f32 zoom = region_zoom + (mMapZoomRate - 1.0f) * (spot_zoom - region_zoom);
f32 local_78 = local_68 / zoom;
f32 base_speed;
if (stick_value < fast_bound) {
base_speed = g_fmapHIO.mScrollSpeedRegionSlow;
} else {
base_speed = g_fmapHIO.mScrollSpeedRegionFast;
}
f32 speed = base_speed / 100.0f * local_78;
f32 speed_y = speed * cM_ssin(angle);
f32 speed_x = speed * cM_scos(angle);
control_xpos += speed_y;
control_ypos += speed_x;
}
}
if (mArrowPos3DX + control_xpos < min_x) {
control_xpos = min_x - mArrowPos3DX;
}
if (mArrowPos3DX + control_xpos > max_x) {
control_xpos = max_x - mArrowPos3DX;
}
if (mArrowPos3DZ + control_ypos < min_y) {
control_ypos = min_y - mArrowPos3DZ;
}
if (mArrowPos3DZ + control_ypos > max_y) {
control_ypos = max_y - mArrowPos3DZ;
}
calcRenderingScale();
calcRenderingPos();
f32 pos_x, pos_y;
calcAllMapPos2D(mArrowPos3DX + control_xpos - mStageTransX,
mArrowPos3DZ + control_ypos - mStageTransZ, &pos_x, &pos_y);
mSelectRegion = 0xff;
int region = mRegionCursor;
if (region != 0xff && region != 7) {
u8 pix = dMeter2Info_getPixel(
pos_x, pos_y, mRegionMinMapX[region] + field_0xf0c[region] + mTransX,
mRegionMinMapY[region] + field_0xf2c[region] + mTransZ, mRegionMapSizeX[region] * mZoom,
mRegionMapSizeY[region] * mZoom, mpAreaTex[region]->getTexture(0)->getTexInfo());
if (pix) {
mSelectRegion = region;
}
}
}
void dMenu_Fmap2DBack_c::stageMapMove(STControl* i_stick, u8 param_1, bool param_2) {
(void)param_1;
f32 slow_bound = g_fmapHIO.mScrollSpeedSlowBound < g_fmapHIO.mScrollSpeedFastBound ?
g_fmapHIO.mScrollSpeedSlowBound : g_fmapHIO.mScrollSpeedFastBound;
f32 fast_bound = g_fmapHIO.mScrollSpeedSlowBound > g_fmapHIO.mScrollSpeedFastBound ?
g_fmapHIO.mScrollSpeedSlowBound : g_fmapHIO.mScrollSpeedFastBound;
f32 min_x, min_y, max_x, max_y;
f32 stick_value = i_stick->getValueStick();
bool bVar6 = false;
f32 trans_x = mStageTransX;
f32 trans_z = mStageTransZ;
if (stick_value >= slow_bound && param_2 && field_0x1238 != 2) {
bVar6 = true;
s16 angle = i_stick->getAngleStick();
f32 local_68 = mTexMaxX - mTexMinX;
f32 spot_zoom = getSpotMapZoomRate();
f32 region_zoom = getRegionMapZoomRate(mRegionCursor);
f32 zoom = region_zoom + (mMapZoomRate - 1.0f) * (spot_zoom - region_zoom);
f32 local_78 = local_68 / zoom;
f32 base_speed;
if (stick_value < fast_bound) {
base_speed = g_fmapHIO.mScrollSpeedRegionZoomSlow;
} else {
base_speed = g_fmapHIO.mScrollSpeedRegionZoomFast;
}
f32 speed = base_speed / 100.0f * local_78;
f32 speed_x = speed * cM_ssin(angle);
f32 speed_z = speed * cM_scos(angle);
mStageTransX += speed_x;
mStageTransZ += speed_z;
} else if (!param_2) {
return;
}
f32 center_x, center_y;
calcAllMapPosWorld(getMapAreaGlobalCenterPosX(), getMapAreaGlobalCenterPosY(),
&center_x, &center_y);
calcAllMapPosWorld(getMapScissorAreaLX(), getMapScissorAreaLY(), &min_x, &min_y);
if (g_fmapHIO.mScrollRangeDebugON) {
min_x = g_fmapHIO.mRegionScrollRangeMinX[mRegionCursor];
min_y = g_fmapHIO.mRegionScrollRangeMinZ[mRegionCursor];
max_x = g_fmapHIO.mRegionScrollRangeMaxX[mRegionCursor];
max_y = g_fmapHIO.mRegionScrollRangeMaxZ[mRegionCursor];
} else {
min_x = mRegionScrollMinX[mRegionCursor];
min_y = mRegionScrollMinZ[mRegionCursor];
max_x = mRegionScrollMaxX[mRegionCursor];
max_y = mRegionScrollMaxZ[mRegionCursor];
}
if (center_x < min_x - mStageTransX) {
mStageTransX = -(center_x - min_x);
}
if (center_x > max_x - mStageTransX) {
mStageTransX = -(center_x - max_x);
}
if (center_y < min_y - mStageTransZ) {
mStageTransZ = -(center_y - min_y);
}
if (center_y > max_y - mStageTransZ) {
mStageTransZ = -(center_y - max_y);
}
if (bVar6 && (trans_x != mStageTransX || trans_z != mStageTransZ)) {
Z2GetAudioMgr()->seStartLevel(Z2SE_SY_MAP_SCROLL, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
field_0xfd8 = mStageTransX - field_0xfd0;
field_0xfdc = mStageTransZ - field_0xfd4;
control_xpos = mStageTransX + (field_0x11b4 - mArrowPos3DX);
control_ypos = mStageTransZ + (field_0x11b8 - mArrowPos3DZ);
calcRenderingScale();
calcRenderingPos();
field_0x122d = 0;
if (mStageTransX > -(center_x - min_x)) {
field_0x122d |= (u8)1;
}
if (mStageTransX < -(center_x - max_x)) {
field_0x122d |= (u8)4;
}
if (mStageTransZ > -(center_y - min_y)) {
field_0x122d |= (u8)8;
}
if (mStageTransZ < -(center_y - max_y)) {
field_0x122d |= (u8)2;
}
mpMeterHaihai->_execute(0);
}
void dMenu_Fmap2DBack_c::setAllAlphaRate(f32 i_rate, bool i_init) {
mAlphaRate = i_rate;
if (i_init) {
mpBaseRoot->setBackupAlpha();
}
mpBaseRoot->setAlphaMorfRate(i_rate);
}
void dMenu_Fmap2DBack_c::drawDebugStageArea() {
JUtility::TColor colors[6] = {
JUtility::TColor(255, 255, 0, 50),
JUtility::TColor(255, 0, 255, 50),
JUtility::TColor(0, 255, 255, 50),
JUtility::TColor(255, 0, 0, 50),
JUtility::TColor(0, 255, 0, 50),
JUtility::TColor(0, 0, 255, 50),
};
if (mpFmapMap && mpRegionData) {
for (int i = 0; i < mDoGph_gInf_c::getWidthF(); i += g_fmapHIO.mRangeCheckInterval + 1) {
for (int j = 0; j < mDoGph_gInf_c::getHeightF(); j += g_fmapHIO.mRangeCheckInterval + 1)
{
int stage_no;
mpFmapMap->getPointStagePathInnerNo(mpRegionData,
i - mDoGph_gInf_c::getWidthF() / 2.0f,
j - mDoGph_gInf_c::getHeightF() / 2.0f,
field_0x1244, &stage_no, NULL);
if (stage_no >= 0) {
f32 v = i + mDoGph_gInf_c::getMinXF();
f32 v2 = j;
J2DFillBox(v - 3.0f, v2 - 3.0f, 6.0f, 6.0f, colors[stage_no % 6]);
}
}
}
}
}
void dMenu_Fmap2DBack_c::drawDebugRegionArea() {
if (mZoom != getAllMapZoomRate()) {
}
JUtility::TColor colors[7] = {
JUtility::TColor(255, 255, 0, 50),
JUtility::TColor(255, 0, 255, 50),
JUtility::TColor(0, 255, 255, 50),
JUtility::TColor(255, 0, 0, 50),
JUtility::TColor(0, 255, 0, 50),
JUtility::TColor(0, 0, 255, 50),
JUtility::TColor(255, 255, 255, 50),
};
for (int i = 0; i < getMapScissorAreaSizeRealX(); i += g_fmapHIO.mRangeCheckInterval + 1) {
for (int j = 0; j < getMapScissorAreaSizeRealY(); j += g_fmapHIO.mRangeCheckInterval + 1) {
u8 u = 0;
for (int k = 7; k >= 0; k--) {
int region = field_0x1230[k];
if (region == 0xff || region == 7) continue;
f32 pos_x = i + getMapScissorAreaLX();
f32 pos_y = j + getMapScissorAreaLY();
u = dMeter2Info_getPixel(
pos_x, pos_y, mRegionMinMapX[region] + field_0xf0c[region] + mTransX,
mRegionMinMapY[region] + field_0xf2c[region] + mTransZ,
mRegionMapSizeX[region] * mZoom, mRegionMapSizeY[region] * mZoom,
mpAreaTex[region]->getTexture(0)->getTexInfo());
if (u) {
J2DFillBox(pos_x - 3.0f, pos_y - 3.0f, 6.0f, 6.0f, colors[region]);
break;
}
}
}
}
}
void dMenu_Fmap2DBack_c::setArrowPos3D(u8 i_regionNo, char const* i_stageName, f32 i_posX,
f32 i_posZ) {
f32 offset_x = 0.0f;
f32 offset_z = 0.0f;
if (i_stageName) {
calcOffset(i_regionNo, i_stageName, &offset_x, &offset_z);
} else {
i_posX = 0.5f * (mRegionTexData[i_regionNo].mMinX + mRegionTexData[i_regionNo].mMaxX);
i_posZ = 0.5f * (mRegionTexData[i_regionNo].mMinZ + mRegionTexData[i_regionNo].mMaxZ);
}
mArrowPos3DX = i_posX + offset_x;
mArrowPos3DZ = i_posZ + offset_z;
control_xpos = 0.0f;
control_ypos = 0.0f;
}
void dMenu_Fmap2DBack_c::setArrowPos3DOffset(u8 i_regionNo, char const* i_stageName, f32 i_posX,
f32 i_posZ, f32 param_4) {
f32 offset_x, offset_z, pos2d_x, pos2d_y;
if (param_4 != 0.0f) {
calcOffset(i_regionNo, i_stageName, &offset_x, &offset_z);
f32 v = i_posX + offset_x - getRegionOriginX(i_regionNo);
f32 v2 = i_posZ + offset_z - getRegionOriginZ(i_regionNo);
calcAllMapPos2D(v, v2, &pos2d_x, &pos2d_y);
pos2d_y -= param_4;
calcAllMapPosWorld(pos2d_x, pos2d_y, &i_posX, &i_posZ);
i_posX += getRegionOriginX(i_regionNo);
i_posZ += getRegionOriginZ(i_regionNo);
}
mArrowPos3DX = i_posX;
mArrowPos3DZ = i_posZ;
control_xpos = 0.0f;
control_ypos = 0.0f;
}
void dMenu_Fmap2DBack_c::calcDrawPriority() {
u8 region;
u8 dVar2 = mRegionCursor;
u8 dVar3 = 6;
for (int i = 7; i >= 0; i--) {
if (field_0x1230[i] != 0xff) {
if (field_0x1230[i] == mRegionCursor) {
field_0x1230[i] = dVar2;
break;
} else {
u8 tmp = field_0x1230[i];
field_0x1230[i] = dVar2;
dVar2 = tmp;
}
}
}
if (mRegionCursor != 6) {
for (int i = 7; i >= 0; i--) {
if (field_0x1230[i] != 0xff) {
if (field_0x1230[i] == 6) {
field_0x1230[i] = dVar3;
break;
} else {
u8 tmp = field_0x1230[i];
field_0x1230[i] = dVar3;
dVar3 = tmp;
}
}
}
}
if (field_0x1230[0] != 7) {
u8 dVar4 = field_0x1230[0];
field_0x1230[0] = 7;
for (int i = 1; i < 8; i++) {
if (field_0x1230[i] != 0xff) {
if (field_0x1230[i] == 7) {
field_0x1230[i] = dVar4;
break;
} else {
u8 tmp = field_0x1230[i];
field_0x1230[i] = dVar4;
dVar4 = tmp;
}
}
}
}
}
void dMenu_Fmap2DBack_c::setArrowPosAxis(f32 i_posX, f32 i_posZ) {
mArrowPos3DX = i_posX;
mArrowPos3DZ = i_posZ;
control_xpos = 0.0f;
control_ypos = 0.0f;
}
dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) {
mpHeap = i_heap;
mTransX = 0.0f;
mTransY = 0.0f;
mpPortalBin = NULL;
mpScrnExplain = NULL;
mpTitleScreen = new J2DScreen();
JUT_ASSERT(3872, mpTitleScreen != NULL);
#if PLATFORM_GCN
bool fg = mpTitleScreen->setPriority("zelda_map_screen_title.blo", 0x1020000,
dComIfGp_getFmapResArchive());
#else
bool fg = mpTitleScreen->setPriority("zelda_map_screen_title_revo.blo", 0x1020000,
dComIfGp_getFmapResArchive());
#endif
JUT_ASSERT(3877, fg != false);
dPaneClass_showNullPane(mpTitleScreen);
mpTitleRoot = new CPaneMgrAlphaMorf(mpTitleScreen, 'ROOT', 2, NULL);
JUT_ASSERT(3881, mpTitleRoot != NULL);
#if PLATFORM_SHIELD
for (int i = 0; i < 2; i++) {
mpArrowLAlpha[i] = NULL;
mpArrowRAlpha[i] = NULL;
}
mpDpadAlpha = NULL;
mpAnalogStickAlpha = NULL;
mpAnalogStick = NULL;
mpDpad = NULL;
mpTitleScreen->search('tri_Null')->hide();
#endif
#if PLATFORM_GCN
mpArrowLAlpha[0] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_04', 0, NULL);
mpArrowLAlpha[1] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_05', 0, NULL);
mpArrowRAlpha[0] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_06', 0, NULL);
mpArrowRAlpha[1] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_07', 0, NULL);
mpDpadAlpha = new CPaneMgrAlpha(mpTitleScreen, 'juji_c_n', 2, NULL);
mpDpadAlpha->setAlphaRate(0.0f);
mpAnalogStickAlpha = new CPaneMgrAlpha(mpTitleScreen, 'as_n', 2, NULL);
mpAnalogStickAlpha->setAlphaRate(0.0f);
mpAnalogStick = new CPaneMgr(mpTitleScreen, 'as_n', 0, NULL);
mpDpad = new CPaneMgr(mpTitleScreen, 'juji_c_n', 0, NULL);
#endif
#if PLATFORM_SHIELD
mpButtonA = new CPaneMgr(mpTitleScreen, 'abtn_n', 2, NULL);
JUT_ASSERT(3935, mpButtonA != NULL);
mpButtonB = new CPaneMgr(mpTitleScreen, 'bbtn_n', 2, NULL);
JUT_ASSERT(3938, mpButtonB != NULL);
mpButtonZ = new CPaneMgr(mpTitleScreen, 'j_scal_n', 2, NULL);
JUT_ASSERT(3941, mpButtonZ != NULL);
mpButtonTextA = new CPaneMgr(mpTitleScreen, 'a_text_n', 2, NULL);
JUT_ASSERT(3953, mpButtonTextA != NULL);
mpButtonTextB = new CPaneMgr(mpTitleScreen, 'b_text_n', 2, NULL);
JUT_ASSERT(3956, mpButtonTextB != NULL);
mpButtonTextZ = new CPaneMgr(mpTitleScreen, 'z_text_n', 2, NULL);
JUT_ASSERT(3959, mpButtonTextZ != NULL);
#else
mpButtonA = new CPaneMgr(mpTitleScreen, 'abtn_n1', 2, NULL);
JUT_ASSERT(3935, mpButtonA != NULL);
mpButtonB = new CPaneMgr(mpTitleScreen, 'bbtn_n1', 2, NULL);
JUT_ASSERT(3938, mpButtonB != NULL);
mpButtonZ = new CPaneMgr(mpTitleScreen, 'zbtn_n1', 2, NULL);
JUT_ASSERT(3941, mpButtonZ != NULL);
mpButtonTextA = new CPaneMgr(mpTitleScreen, 'a_text_n', 2, NULL);
JUT_ASSERT(3953, mpButtonTextA != NULL);
mpButtonTextB = new CPaneMgr(mpTitleScreen, 'b_text_n', 2, NULL);
JUT_ASSERT(3956, mpButtonTextB != NULL);
mpButtonTextZ = new CPaneMgr(mpTitleScreen, 'z_text_n', 2, NULL);
JUT_ASSERT(3959, mpButtonTextZ != NULL);
#endif
mpButtonA->setAlphaRate(0.0f);
mpButtonB->setAlphaRate(0.0f);
mpButtonZ->setAlphaRate(0.0f);
mpButtonTextA->setAlphaRate(0.0f);
mpButtonTextB->setAlphaRate(0.0f);
mpButtonTextZ->setAlphaRate(0.0f);
mpNamePane = new CPaneMgr(mpTitleScreen, 'name_n', 0, NULL);
JUT_ASSERT(3970, mpNamePane != NULL);
mpSubPane = new CPaneMgr(mpTitleScreen, 'sub_n_n', 0, NULL);
JUT_ASSERT(3974, mpSubPane != NULL);
if (dMeter2Info_getMapStatus() == 9) {
mpNamePane->hide();
mpSubPane->hide();
}
mpContPane = new CPaneMgr(mpTitleScreen, 'cont_n', 0, NULL);
JUT_ASSERT(3984, mpContPane != NULL);
mTitlePosX = mTitlePosY = 0.0f;
mTitleScale = 1.0f;
mSubTitlePosX = mSubTitlePosY = 0.0f;
mSubTitleScale = 1.0f;
mAreaMovementPosX = mAreaMovementPosY = 0.0f;
mAreaMovementScale = 1.0f;
mClosingPosX = mClosingPosY = 0.0f;
mClosingScale = 1.0f;
mDoIconPosX = mDoIconPosY = 0.0f;
mDoIconScale = 1.0f;
OSInitFastCast();
#if PLATFORM_GCN
mpAnm = static_cast<J2DAnmTextureSRTKey*>(J2DAnmLoaderDataBase::load(
JKRFileLoader::getGlbResource("zelda_map_screen_title.btk", dComIfGp_getFmapResArchive())));
#else
void* v = JKRGetNameResource("zelda_map_screen_title_revo.btk", dComIfGp_getFmapResArchive());
mpAnm = static_cast<J2DAnmTextureSRTKey*>(J2DAnmLoaderDataBase::load(v));
#endif
mpAnm->searchUpdateMaterialID(mpTitleScreen);
mAnmFrame = 0.0f;
static const u64 area_name[3] = {'i_name_s', 'i_name' ,'i_name1'};
static const u64 farea_name[3] = {'f_name_1', 'f_name3', 'f_name2'};
for (int i = 0; i < 3; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(area_name[i]))
->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(area_name[i]))->setString(0x40, "");
mpTitleScreen->search(farea_name[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(farea_name[i]))
->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(farea_name[i]))->setString(0x40, "");
mpTitleScreen->search(area_name[i])->hide();
#endif
}
#if PLATFORM_GCN
static const u64 sfont_name[7] = {
'sfont00', 'sfontl0', 'sfontl1', 'sfontl2', 'sfontb0', 'sfontb1', 'sfontb2'
};
static const u64 ffont_name[7] = {
'ffont00', 'ffontl0', 'ffontl1', 'ffontl2', 'ffontb0', 'ffontb3', 'ffontb4'
};
#else
static const u64 sfont_name[7] = {
'sfont00', 'sfontl0', 'sfontl1', 'sfontl2', 'sfontb0', 'sfontb1', 'sfontb2'
};
static const u64 ffont_name[7] = {
'ffont01', 'ffontl3', 'ffontl4', 'ffontl5', 'ffontb3', 'ffontb4', 'ffontb5'
};
#endif
for (int i = 0; i < 7; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(sfont_name[i]))
->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(sfont_name[i]))->setString(0x40, "");
mpTitleScreen->search(ffont_name[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(ffont_name[i]))
->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(ffont_name[i]))->setString(0x40, "");
mpTitleScreen->search(sfont_name[i])->hide();
#endif
}
setTitleNameString(0x3e0);
static const u64 cont_zt[5] = {'cont_zt', 'cont_zt1', 'cont_zt2', 'cont_zt3', 'cont_zt4'};
static const u64 font_zt[5] = {'font_zt1', 'font_zt2', 'font_zt3', 'font_zt4', 'font_zt5'};
for (int i = 0; i < 5; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(cont_zt[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(cont_zt[i]))->setString(0x20, "");
mpTitleScreen->search(font_zt[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(font_zt[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(font_zt[i]))->setString(0x20, "");
mpTitleScreen->search(cont_zt[i])->hide();
#endif
}
setZButtonString(0x529, 0xff);
#if PLATFORM_GCN
static const u64 cont_bt[5] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt'};
static const u64 font_bt[5] = {'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4', 'font_bt5'};
#else
static const u64 cont_bt[5] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt8'};
static const u64 font_bt[5] = {'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4', 'font_bt5'};
#endif
for (int i = 0; i < 5; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(cont_bt[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(cont_bt[i]))->setString(0x20, "");
mpTitleScreen->search(font_bt[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(font_bt[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(font_bt[i]))->setString(0x20, "");
mpTitleScreen->search(cont_bt[i])->hide();
#endif
}
setBButtonString(0x522, 0xff);
static const u64 cont_at[5] = {'cont_at', 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4'};
static const u64 font_at[5] = {'font_at1', 'font_at2', 'font_at3', 'font_at4', 'font_at5'};
for (int i = 0; i < 5; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(cont_at[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(cont_at[i]))->setString(0x20, "");
mpTitleScreen->search(font_at[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(font_at[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(font_at[i]))->setString(0x20, "");
mpTitleScreen->search(cont_at[i])->hide();
#endif
}
setAButtonString(0x527, 0xff);
#if PLATFORM_GCN
static const u64 juji_c[5] = {'juji_c00', 'juji_c01', 'juji_c02', 'juji_c03', 'juji_c04'};
static const u64 fuji_c[5] = {'fuji_c00', 'fuji_c01', 'fuji_c02', 'fuji_c03', 'fuji_c04'};
for (int i = 0; i < 5; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(juji_c[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(juji_c[i]))->setString(0x20, "");
mpTitleScreen->search(fuji_c[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(fuji_c[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(fuji_c[i]))->setString(0x20, "");
mpTitleScreen->search(juji_c[i])->hide();
#endif
}
setCrossLRString(0x3f9);
static const u64 ast_c[5] = {'ast_00', 'ast_01', 'ast_02', 'ast_03', 'ast_04'};
static const u64 fst_c[5] = {'fst_00', 'fst_01', 'fst_02', 'fst_03', 'fst_04'};
for (int i = 0; i < 5; i++) {
#if VERSION == VERSION_GCN_JPN
static_cast<J2DTextBox*>(mpTitleScreen->search(ast_c[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(ast_c[i]))->setString(0x20, "");
mpTitleScreen->search(fst_c[i])->hide();
#else
static_cast<J2DTextBox*>(mpTitleScreen->search(fst_c[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpTitleScreen->search(fst_c[i]))->setString(0x20, "");
mpTitleScreen->search(ast_c[i])->hide();
#endif
}
set3DStickString(0x524);
#endif
setHIO(true);
}
dMenu_Fmap2DTop_c::~dMenu_Fmap2DTop_c() {
deleteExplain();
delete mpTitleScreen;
mpTitleScreen = NULL;
delete mpTitleRoot;
if (mpTitleRoot != NULL) {
}
delete mpButtonA;
mpButtonA = NULL;
delete mpButtonB;
mpButtonB = NULL;
delete mpButtonZ;
mpButtonZ = NULL;
delete mpButtonTextA;
mpButtonTextA = NULL;
delete mpButtonTextB;
mpButtonTextB = NULL;
delete mpButtonTextZ;
mpButtonTextZ = NULL;
if (mpDpadAlpha != NULL) {
delete mpDpadAlpha;
mpDpadAlpha = NULL;
}
if (mpAnalogStickAlpha != NULL) {
delete mpAnalogStickAlpha;
mpAnalogStickAlpha = NULL;
}
delete mpNamePane;
mpNamePane = NULL;
delete mpSubPane;
mpSubPane = NULL;
if (mpAnalogStick != NULL) {
delete mpAnalogStick;
mpAnalogStick = NULL;
}
if (mpDpad != NULL) {
delete mpDpad;
mpDpad = NULL;
}
delete mpContPane;
mpContPane = NULL;
for (int i = 0; i < 2; i++) {
if (mpArrowLAlpha[i] != NULL) {
delete mpArrowLAlpha[i];
if (mpArrowLAlpha[i] != NULL) {
}
}
if (mpArrowRAlpha[i] != NULL) {
delete mpArrowRAlpha[i];
if (mpArrowRAlpha[i] != NULL) {
}
}
}
delete mpAnm;
mpAnm = NULL;
}
void dMenu_Fmap2DTop_c::_execute() {
switch (mAlphaButtonA) {
case ALPHA_MIN:
setAlphaAnimeMax(mpButtonA);
setAlphaAnimeMin(mpButtonTextA);
break;
case ALPHA_MID:
setAlphaAnimeMid(mpButtonA);
setAlphaAnimeMid(mpButtonTextA);
break;
default:
setAlphaAnimeMax(mpButtonA);
setAlphaAnimeMax(mpButtonTextA);
}
switch (mAlphaButtonB) {
case ALPHA_MIN:
setAlphaAnimeMax(mpButtonB);
setAlphaAnimeMin(mpButtonTextB);
break;
case ALPHA_MID:
setAlphaAnimeMid(mpButtonB);
setAlphaAnimeMid(mpButtonTextB);
break;
default:
setAlphaAnimeMax(mpButtonB);
setAlphaAnimeMax(mpButtonTextB);
}
switch (mAlphaButtonZ) {
case ALPHA_MIN:
setAlphaAnimeMax(mpButtonZ);
setAlphaAnimeMin(mpButtonTextZ);
break;
case ALPHA_MID:
setAlphaAnimeMid(mpButtonZ);
setAlphaAnimeMid(mpButtonTextZ);
break;
default:
setAlphaAnimeMax(mpButtonZ);
setAlphaAnimeMax(mpButtonTextZ);
}
if (mpDpadAlpha) {
switch (mAlphaDpad) {
case ALPHA_MIN:
setAlphaAnimeMin(mpDpadAlpha);
break;
case ALPHA_MID:
setAlphaAnimeMid(mpDpadAlpha);
break;
default:
setAlphaAnimeMax(mpDpadAlpha);
break;
}
}
if (mpAnalogStickAlpha) {
switch (mAlphaAnalogStick) {
case ALPHA_MIN:
setAlphaAnimeMin(mpAnalogStickAlpha);
break;
case ALPHA_MID:
setAlphaAnimeMid(mpAnalogStickAlpha);
break;
default:
setAlphaAnimeMax(mpAnalogStickAlpha);
break;
}
}
setHIO(false);
}
void dMenu_Fmap2DTop_c::setAllAlphaRate(f32 i_rate, bool i_init) {
mAlphaRate = i_rate;
if (i_init) {
mpTitleRoot->setBackupAlpha();
}
mpTitleRoot->setAlphaMorfRate(i_rate);
}
void dMenu_Fmap2DTop_c::draw() {
u32 scissor_left, scissor_top, scissor_width, scissor_height;
J2DOrthoGraph* ctx = static_cast<J2DOrthoGraph*>(dComIfGp_getCurrentGrafPort());
ctx->setup2D();
GXGetScissor(&scissor_left, &scissor_top, &scissor_width, &scissor_height);
ctx->scissor(mTransX, 0.0f, FB_WIDTH, FB_HEIGHT);
ctx->setScissor();
mpTitleScreen->draw(mTransX, mTransY, ctx);
ctx->scissor(scissor_left, scissor_top, scissor_width, scissor_height);
ctx->setScissor();
if (mpScrnExplain) {
mpScrnExplain->draw(ctx);
}
}
void dMenu_Fmap2DTop_c::btkAnimeLoop(J2DAnmTextureSRTKey* i_anm, f32 i_delta) {
if (i_anm) {
mAnmFrame += i_delta;
if (mAnmFrame >= i_anm->getFrameMax()) {
mAnmFrame -= i_anm->getFrameMax();
}
i_anm->setFrame(mAnmFrame);
} else {
mAnmFrame = 0.0f;
}
mpTitleScreen->search('spot_0')->setAnimation(i_anm);
mpTitleScreen->animation();
}
void dMenu_Fmap2DTop_c::setMoyaAlpha(u8 i_alpha) {
mpTitleScreen->search('spot_0')->setAlpha(i_alpha);
}
void dMenu_Fmap2DTop_c::setTitleNameString(u32 param_0) {
#if VERSION == VERSION_GCN_JPN
static const u64 sfont_name[7] = {
'sfont00', 'sfontl0', 'sfontl1', 'sfontl2', 'sfontb0', 'sfontb1', 'sfontb2'
};
#define setTitleNameString_font_name sfont_name
#elif PLATFORM_GCN
static const u64 ffont_name[7] = {
'ffont00', 'ffontl0', 'ffontl1', 'ffontl2', 'ffontb0', 'ffontb3', 'ffontb4'
};
#define setTitleNameString_font_name ffont_name
#else
static const u64 ffont_name[7] = {
'ffont01', 'ffontl3', 'ffontl4', 'ffontl5', 'ffontb3', 'ffontb4', 'ffontb5'
};
#define setTitleNameString_font_name ffont_name
#endif
for (int i = 0; i < 7; i++) {
if (param_0 == 0) {
strcpy(((J2DTextBox*)(mpTitleScreen->search(setTitleNameString_font_name[i])))
->getStringPtr(),
"");
} else {
dMeter2Info_getStringKanji(
param_0,
((J2DTextBox*)(mpTitleScreen->search(setTitleNameString_font_name[i])))
->getStringPtr(),
NULL);
}
}
}
void dMenu_Fmap2DTop_c::setAreaNameString(u32 param_0) {
#if VERSION == VERSION_GCN_JPN
static const u64 iarea_name[3] = {'i_name_s', 'i_name', 'i_name1'};
#define setAreaNameString_area_name iarea_name
#else
static const u64 farea_name[3] = {'f_name_1', 'f_name3', 'f_name2'};
#define setAreaNameString_area_name farea_name
#endif
for (int i = 0; i < 3; i++) {
if (param_0 == 0) {
strcpy(((J2DTextBox*)(mpTitleScreen->search(setAreaNameString_area_name[i])))
->getStringPtr(),
"");
} else {
dMeter2Info_getStringKanji(
param_0,
((J2DTextBox*)(mpTitleScreen->search(setAreaNameString_area_name[i])))
->getStringPtr(),
NULL);
}
}
}
void dMenu_Fmap2DTop_c::setZButtonString(u32 param_0, u8 i_alpha) {
if (param_0 == 0x529 && ((daMidna_c*)daPy_py_c::getMidnaActor())->checkPortalObjRide()) {
param_0 = 0x533;
}
#if VERSION == VERSION_GCN_JPN
static const u64 cont_zt[5] = {'cont_zt', 'cont_zt1', 'cont_zt2', 'cont_zt3', 'cont_zt4'};
#define setZButtonString_font_zt cont_zt
#else
static const u64 font_zt[5] = {'font_zt1', 'font_zt2', 'font_zt3', 'font_zt4', 'font_zt5'};
#define setZButtonString_font_zt font_zt
#endif
if (param_0 == 0 || !isWarpAccept()) {
#if PLATFORM_GCN
mAlphaButtonZ = ALPHA_MID;
#else
mAlphaButtonZ = ALPHA_MIN;
#endif
} else {
for (int i = 0; i < 5; i++) {
dMeter2Info_getStringKanji(
param_0,
((J2DTextBox*)(mpTitleScreen->search(setZButtonString_font_zt[i])))->getStringPtr(),
NULL);
}
if (i_alpha == ALPHA_DEFAULT) {
if (checkPlayerWarpAccept()) {
mAlphaButtonZ = ALPHA_MAX;
} else {
mAlphaButtonZ = ALPHA_MID;
}
} else {
mAlphaButtonZ = i_alpha;
}
}
}
void dMenu_Fmap2DTop_c::setBButtonString(u32 param_0, u8 i_alpha) {
#if VERSION == VERSION_GCN_JPN
static const u64 cont_bt[5] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt'};
#define setBButtonString_font_bt cont_bt
#else
static const u64 font_bt[5] = {'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4', 'font_bt5'};
#define setBButtonString_font_bt font_bt
#endif
if (param_0 == 0) {
mAlphaButtonB = ALPHA_MIN;
} else {
for (int i = 0; i < 5; i++) {
dMeter2Info_getStringKanji(
param_0,
((J2DTextBox*)(mpTitleScreen->search(setBButtonString_font_bt[i])))->getStringPtr(),
NULL);
}
if (i_alpha == ALPHA_DEFAULT) {
mAlphaButtonB = ALPHA_MAX;
} else {
mAlphaButtonB = i_alpha;
}
}
}
void dMenu_Fmap2DTop_c::setAButtonString(u32 param_0, u8 i_alpha) {
#if VERSION == VERSION_GCN_JPN
static const u64 cont_at[5] = {'cont_at', 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4'};
#define setAButtonString_font_at cont_at
#else
static const u64 font_at[5] = {'font_at1', 'font_at2', 'font_at3', 'font_at4', 'font_at5'};
#define setAButtonString_font_at font_at
#endif
if (param_0 == 0) {
mAlphaButtonA = ALPHA_MIN;
} else {
for (int i = 0; i < 5; i++) {
dMeter2Info_getStringKanji(
param_0,
((J2DTextBox*)(mpTitleScreen->search(setAButtonString_font_at[i])))->getStringPtr(),
NULL);
}
if (i_alpha == ALPHA_DEFAULT) {
mAlphaButtonA = ALPHA_MAX;
} else {
mAlphaButtonA = i_alpha;
}
}
}
void dMenu_Fmap2DTop_c::setCrossLRString(u32 param_0) {
#if PLATFORM_GCN || (VERSION == VERSION_SHIELD)
#if VERSION == VERSION_GCN_JPN
static const u64 juji_c[5] = {'juji_c00', 'juji_c01', 'juji_c02', 'juji_c03', 'juji_c04'};
#else
static const u64 juji_c[5] = {'fuji_c00', 'fuji_c01', 'fuji_c02', 'fuji_c03', 'fuji_c04'};
#endif
if (param_0 == 0) {
for (int i = 0; i < 5; i++) {
J2DTextBox* text_box = static_cast<J2DTextBox*>(mpTitleScreen->search(juji_c[i]));
strcpy(text_box->getStringPtr(), "");
}
mpTitleScreen->search('juy_sha0')->show();
mAlphaDpad = 1;
} else {
for (int i = 0; i < 5; i++) {
J2DTextBox* text_box = static_cast<J2DTextBox*>(mpTitleScreen->search(juji_c[i]));
dMeter2Info_getStringKanji(param_0, text_box->getStringPtr(), NULL);
}
mpTitleScreen->search('juy_sha0')->show();
mAlphaDpad = 2;
}
#endif
}
void dMenu_Fmap2DTop_c::set3DStickString(u32 param_0) {
#if PLATFORM_GCN || (VERSION == VERSION_SHIELD)
#if VERSION == VERSION_GCN_JPN
static const u64 ast_c[5] = {'ast_00', 'ast_01', 'ast_02', 'ast_03', 'ast_04'};
#else
static const u64 ast_c[5] = {'fst_00', 'fst_01', 'fst_02', 'fst_03', 'fst_04'};
#endif
if (param_0 == 0) {
for (int i = 0; i < 5; i++) {
J2DTextBox* text_box = static_cast<J2DTextBox*>(mpTitleScreen->search(ast_c[i]));
strcpy(text_box->getStringPtr(), "");
}
mpTitleScreen->search('as_sha0')->show();
mAlphaAnalogStick = 1;
} else {
for (int i = 0; i < 5; i++) {
J2DTextBox* text_box = static_cast<J2DTextBox*>(mpTitleScreen->search(ast_c[i]));
dMeter2Info_getStringKanji(param_0, text_box->getStringPtr(), NULL);
}
mpTitleScreen->search('as_sha0')->show();
mAlphaAnalogStick = 2;
}
#endif
}
void dMenu_Fmap2DTop_c::createExplain(JKRExpHeap* i_heap, STControl* i_stick) {
if (!mpScrnExplain) {
JKRHeap* heap = mDoExt_setCurrentHeap(i_heap);
mpScrnExplain = new dMsgScrnExplain_c(i_stick, 0, false, 1);
JUT_ASSERT(4743, mpScrnExplain != NULL);
mDoExt_setCurrentHeap(heap);
}
}
void dMenu_Fmap2DTop_c::deleteExplain() {
if (mpScrnExplain) {
delete mpScrnExplain;
mpScrnExplain = NULL;
}
}
void dMenu_Fmap2DTop_c::setArrowAlphaRatio(u8 i_mask, f32 i_rate) {
if (i_mask & ARROW_LEFT) {
for (int i = 0; i < 2; i++) {
if (mpArrowLAlpha[i]) {
mpArrowLAlpha[i]->setAlphaRate(i_rate);
}
}
}
if (i_mask & ARROW_RIGHT) {
for (int i = 0; i < 2; i++) {
if (mpArrowRAlpha[i]) {
mpArrowRAlpha[i]->setAlphaRate(i_rate);
}
}
}
}
void dMenu_Fmap2DTop_c::setAlphaAnimeMin(CPaneMgrAlpha* i_pane) {
s16 timer = i_pane->getAlphaTimer();
if (timer > 0 || i_pane->getAlphaRate() != 0.0f) {
timer--;
if (timer < 0) {
timer = 0;
}
i_pane->alphaAnimeStart(timer);
i_pane->setAlphaRate(timer / 5.0f);
}
}
void dMenu_Fmap2DTop_c::setAlphaAnimeMid(CPaneMgrAlpha* i_pane) {
s16 timer = i_pane->getAlphaTimer();
if (timer != 3 || i_pane->getAlphaRate() != 0.25f) {
if (timer > 3) {
timer--;
} else if (timer < 3) {
timer++;
}
i_pane->alphaAnimeStart(timer);
i_pane->setAlphaRate(timer / 6.0f * 0.5f);
}
}
void dMenu_Fmap2DTop_c::setAlphaAnimeMax(CPaneMgrAlpha* i_pane) {
s16 timer = i_pane->getAlphaTimer();
if (timer < 5 || i_pane->getAlphaRate() != 1.0f) {
timer++;
if (timer > 5) {
timer = 5;
}
i_pane->alphaAnimeStart(timer);
i_pane->setAlphaRate(timer / 5.0f);
}
}
bool dMenu_Fmap2DTop_c::checkPlayerWarpAccept() {
if (checkWarpAcceptCannon() == FALSE) {
return FALSE;
} else if (checkWarpAcceptRegion4() == FALSE) {
return FALSE;
} else {
return daPy_getLinkPlayerActorClass()->checkAcceptDungeonWarpAlink(0);
}
}
bool dMenu_Fmap2DTop_c::checkWarpAcceptRegion(int i_region) {
if (g_fmapHIO.mAllRegionsUnlocked) {
return true;
}
if (mpPortalBin) {
dMenu_Fmap_portal_data_c* portal_data = (dMenu_Fmap_portal_data_c*)mpPortalBin;
dMenu_Fmap_portal_data_c::data* portals = portal_data->mData;
for (int i = 0; i < portal_data->mCount; i++) {
if (i_region + 1 == portals[i].mRegionNo
&& dComIfGs_isStageSwitch(portals[i].mStageNo, portals[i].mSwitchNo))
{
return true;
}
}
}
return false;
}
bool dMenu_Fmap2DTop_c::checkWarpAcceptRegion4() {
if (dComIfGp_getNowLevel() == 4 && !checkWarpAcceptRegion(3)) {
return false;
}
/* dSv_event_flag_c::M_071 - Cutscene - [cutscene: 20] Zant appears (during Midna's desperate hour) */
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[104])
/* dSv_event_flag_c::F_0250 - Cutscene - [cutscene: 21] reunion with Zelda / Midna revived (Hyrule Castle barrier appears) */
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[250]))
{
return false;
}
return true;
}
bool dMenu_Fmap2DTop_c::checkWarpAcceptCannon() {
/* dSv_event_flag_c::F_0786 - Kakariko Village - Forced conversation with Shad when he sees the sky cannon */
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[786])
/* dSv_event_flag_c::F_0785 - Kakariko Village - Shad leaves after attempting to warp sky cannon */
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[785]))
{
return false;
}
return true;
}
void dMenu_Fmap2DTop_c::setHIO(bool param_0) {
if (mTitlePosX != g_fmapHIO.mTitlePosX || mTitlePosY != g_fmapHIO.mTitlePosY) {
mTitlePosX = g_fmapHIO.mTitlePosX;
mTitlePosY = g_fmapHIO.mTitlePosY;
mpNamePane->paneTrans(mTitlePosX, mTitlePosY);
}
if (mTitleScale != g_fmapHIO.mTitleScale) {
mTitleScale = g_fmapHIO.mTitleScale;
mpNamePane->scale(mTitleScale, mTitleScale);
}
if (mSubTitlePosX != g_fmapHIO.mSubTitlePosX || mSubTitlePosY != g_fmapHIO.mSubTitlePosY) {
mSubTitlePosX = g_fmapHIO.mSubTitlePosX;
mSubTitlePosY = g_fmapHIO.mSubTitlePosY;
mpSubPane->paneTrans(mSubTitlePosX, mSubTitlePosY);
}
if (mSubTitleScale != g_fmapHIO.mSubTitleScale) {
mSubTitleScale = g_fmapHIO.mSubTitleScale;
mpSubPane->scale(mSubTitleScale, mSubTitleScale);
}
if (mpAnalogStick) {
if (mAreaMovementPosX != g_fmapHIO.mAreaMovementPosX
|| mAreaMovementPosY != g_fmapHIO.mAreaMovementPosY)
{
mAreaMovementPosX = g_fmapHIO.mAreaMovementPosX;
mAreaMovementPosY = g_fmapHIO.mAreaMovementPosY;
mpAnalogStick->paneTrans(mAreaMovementPosX, mAreaMovementPosY);
}
if (mAreaMovementScale != g_fmapHIO.mAreaMovementScale) {
mAreaMovementScale = g_fmapHIO.mAreaMovementScale;
mpAnalogStick->scale(mAreaMovementScale, mAreaMovementScale);
}
}
if (mpDpad) {
if (mClosingPosX != g_fmapHIO.mClosingPosX || mClosingPosY != g_fmapHIO.mClosingPosY) {
mClosingPosX = g_fmapHIO.mClosingPosX;
mClosingPosY = g_fmapHIO.mClosingPosY;
mpDpad->paneTrans(mClosingPosX, mClosingPosY);
}
if (mClosingScale != g_fmapHIO.mClosingScale) {
mClosingScale = g_fmapHIO.mClosingScale;
mpDpad->scale(mClosingScale, mClosingScale);
}
}
if (mDoIconPosX != g_fmapHIO.mDoIconPosX || mDoIconPosY != g_fmapHIO.mDoIconPosY) {
mDoIconPosX = g_fmapHIO.mDoIconPosX;
mDoIconPosY = g_fmapHIO.mDoIconPosY;
mpContPane->paneTrans(mDoIconPosX, mDoIconPosY);
}
if (mDoIconScale != g_fmapHIO.mDoIconScale) {
mDoIconScale = g_fmapHIO.mDoIconScale;
mpContPane->scale(mDoIconScale, mDoIconScale);
}
if (g_fmapHIO.mButtonDebugON || param_0) {
mpButtonZ->paneTrans(g_fmapHIO.mButtonZPosX, g_fmapHIO.mButtonZPosY);
mpButtonZ->scale(g_fmapHIO.mButtonZScale, g_fmapHIO.mButtonZScale);
mpButtonA->paneTrans(g_fmapHIO.mButtonAPosX, g_fmapHIO.mButtonAPosY);
mpButtonA->scale(g_fmapHIO.mButtonAScale, g_fmapHIO.mButtonAScale);
mpButtonB->paneTrans(g_fmapHIO.mButtonBPosX, g_fmapHIO.mButtonBPosY);
mpButtonB->scale(g_fmapHIO.mButtonBScale, g_fmapHIO.mButtonBScale);
mpButtonTextZ->paneTrans(g_fmapHIO.mButtonZTextPosX, g_fmapHIO.mButtonZTextPosY);
mpButtonTextZ->scale(g_fmapHIO.mButtonZTextScale, g_fmapHIO.mButtonZTextScale);
mpButtonTextA->paneTrans(g_fmapHIO.mButtonATextPosX, g_fmapHIO.mButtonATextPosY);
mpButtonTextA->scale(g_fmapHIO.mButtonATextScale, g_fmapHIO.mButtonATextScale);
mpButtonTextB->paneTrans(g_fmapHIO.mButtonBTextPosX, g_fmapHIO.mButtonBTextPosY);
mpButtonTextB->scale(g_fmapHIO.mButtonBTextScale, g_fmapHIO.mButtonBTextScale);
}
}
bool dMenu_Fmap2DTop_c::isWarpAccept() {
/* dSv_event_flag_c::M_021 - Main Event - First portal warp */
if ((dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[54])
&& dMeter2Info_getMapStatus() != 9 && dMeter2Info_getMapStatus() != 7
&& dMeter2Info_getMapStatus() != 8) || g_fmapHIO.mPortalWarpON)
{
return true;
}
return false;
}