mirror of https://github.com/zeldaret/tp.git
3031 lines
108 KiB
C++
3031 lines
108 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: d/d_menu_fmap
|
|
//
|
|
|
|
#include "d/d_menu_fmap.h"
|
|
#include "SSystem/SComponent/c_math.h"
|
|
#include "JSystem/JKernel/JKRAramArchive.h"
|
|
#include "JSystem/JKernel/JKRExpHeap.h"
|
|
#include "JSystem/JKernel/JKRMemArchive.h"
|
|
#include "stdio.h"
|
|
#include "f_op/f_op_msg_mng.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_lib.h"
|
|
#include "d/d_menu_fmap2D.h"
|
|
#include "d/d_menu_fmap_map.h"
|
|
#include "d/d_menu_window.h"
|
|
#include "d/d_meter_HIO.h"
|
|
#include "d/d_meter_map.h"
|
|
#include "d/d_meter2_draw.h"
|
|
#include "d/d_meter2_info.h"
|
|
#include "d/d_msg_object.h"
|
|
#include "d/d_msg_scrn_explain.h"
|
|
#include "d/d_stage.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/actor/d_a_midna.h"
|
|
|
|
/* 803BD090-803BD09C 01A1B0 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
|
|
static u8 cNullVec__6Z2Calc[12] = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 8042E82C-8042E840 05B54C 0014+00 2/2 0/0 0/0 .bss g_fmHIO */
|
|
static dMf_HIO_c g_fmHIO;
|
|
|
|
/* 803BD204-803BD36C 01A324 0168+00 2/3 0/0 0/0 .data init_process */
|
|
static dMenu_Fmap_c::process init_process[30] = {
|
|
&dMenu_Fmap_c::all_map_init,
|
|
&dMenu_Fmap_c::portal_demo2_init,
|
|
&dMenu_Fmap_c::portal_demo3_init,
|
|
&dMenu_Fmap_c::table_demo1_init,
|
|
&dMenu_Fmap_c::zoom_all_to_region_init,
|
|
&dMenu_Fmap_c::zoom_region_to_all_init,
|
|
&dMenu_Fmap_c::region_map_init,
|
|
&dMenu_Fmap_c::to_portal_warp_map_init,
|
|
&dMenu_Fmap_c::portal_warp_map_init,
|
|
&dMenu_Fmap_c::portal_warp_select_init,
|
|
&dMenu_Fmap_c::portal_warp_forbid_init,
|
|
&dMenu_Fmap_c::zoom_region_to_spot_init,
|
|
&dMenu_Fmap_c::zoom_spot_to_region_init,
|
|
&dMenu_Fmap_c::spot_map_init,
|
|
&dMenu_Fmap_c::portal_demo1_init,
|
|
&dMenu_Fmap_c::portal_demo4_init,
|
|
&dMenu_Fmap_c::portal_demo5_init,
|
|
&dMenu_Fmap_c::portal_demo6_init,
|
|
&dMenu_Fmap_c::yamiboss_demo1_init,
|
|
&dMenu_Fmap_c::yamiboss_demo2_init,
|
|
&dMenu_Fmap_c::yamiboss_demo3_init,
|
|
&dMenu_Fmap_c::yamiboss_demo4_init,
|
|
&dMenu_Fmap_c::yamiboss_demo5_init,
|
|
&dMenu_Fmap_c::light_demo1_init,
|
|
&dMenu_Fmap_c::light_demo2_init,
|
|
&dMenu_Fmap_c::table_demo2_init,
|
|
&dMenu_Fmap_c::table_demo3_init,
|
|
&dMenu_Fmap_c::howl_demo1_init,
|
|
&dMenu_Fmap_c::howl_demo2_init,
|
|
&dMenu_Fmap_c::howl_demo3_init,
|
|
};
|
|
|
|
/* 803BD4D4-803BD63C 01A5F4 0168+00 1/2 0/0 0/0 .data move_process */
|
|
static dMenu_Fmap_c::process move_process[30] = {
|
|
&dMenu_Fmap_c::all_map_proc,
|
|
&dMenu_Fmap_c::portal_demo2_move,
|
|
&dMenu_Fmap_c::portal_demo3_move,
|
|
&dMenu_Fmap_c::table_demo1_move,
|
|
&dMenu_Fmap_c::zoom_all_to_region_proc,
|
|
&dMenu_Fmap_c::zoom_region_to_all_proc,
|
|
&dMenu_Fmap_c::region_map_proc,
|
|
&dMenu_Fmap_c::to_portal_warp_map_proc,
|
|
&dMenu_Fmap_c::portal_warp_map_proc,
|
|
&dMenu_Fmap_c::portal_warp_select_proc,
|
|
&dMenu_Fmap_c::portal_warp_forbid_proc,
|
|
&dMenu_Fmap_c::zoom_region_to_spot_proc,
|
|
&dMenu_Fmap_c::zoom_spot_to_region_proc,
|
|
&dMenu_Fmap_c::spot_map_proc,
|
|
&dMenu_Fmap_c::portal_demo1_move,
|
|
&dMenu_Fmap_c::portal_demo4_move,
|
|
&dMenu_Fmap_c::portal_demo5_move,
|
|
&dMenu_Fmap_c::portal_demo6_move,
|
|
&dMenu_Fmap_c::yamiboss_demo1_move,
|
|
&dMenu_Fmap_c::yamiboss_demo2_move,
|
|
&dMenu_Fmap_c::yamiboss_demo3_move,
|
|
&dMenu_Fmap_c::yamiboss_demo4_move,
|
|
&dMenu_Fmap_c::yamiboss_demo5_move,
|
|
&dMenu_Fmap_c::light_demo1_move,
|
|
&dMenu_Fmap_c::light_demo2_move,
|
|
&dMenu_Fmap_c::table_demo2_move,
|
|
&dMenu_Fmap_c::table_demo3_move,
|
|
&dMenu_Fmap_c::howl_demo1_move,
|
|
&dMenu_Fmap_c::howl_demo2_move,
|
|
&dMenu_Fmap_c::howl_demo3_move,
|
|
};
|
|
|
|
/* 804510A0-804510A4 0005A0 0004+00 1/1 0/0 0/0 .sbss mMySelfPointer__9dMf_HIO_c */
|
|
dMf_HIO_c* dMf_HIO_c::mMySelfPointer;
|
|
|
|
/* 801C65F8-801C662C 1C0F38 0034+00 1/1 0/0 0/0 .text __ct__9dMf_HIO_cFv */
|
|
dMf_HIO_c::dMf_HIO_c() {
|
|
mMySelfPointer = this;
|
|
mBackAnimeStep = 0.2f;
|
|
mBaseBackAlpha = 60;
|
|
mTopAnimeStep = 1.0f;
|
|
mMoyaAlpha = 95;
|
|
}
|
|
|
|
/* 801C662C-801C66E4 1C0F6C 00B8+00 5/5 2/2 0/0 .text dMenuFmap_getStartStageName__FPv */
|
|
const char* dMenuFmap_getStartStageName(void* i_fieldData) {
|
|
static char virtual_stage[8];
|
|
stage_stag_info_class* stag_info = dComIfGp_getStage()->getStagInfo();
|
|
if (dStage_stagInfo_GetUpButton(stag_info) == 5) {
|
|
dMenu_Fmap_virtual_stage_data_c* data_list = (dMenu_Fmap_virtual_stage_data_c*)
|
|
((int)i_fieldData + ((dMenu_Fmap_field_data_c*)i_fieldData)->mVirtualStageOffset);
|
|
dMenu_Fmap_virtual_stage_data_c::data* data = data_list->mData;
|
|
for (int i = 0; i < data_list->mCount; i++) {
|
|
if (!strcmp(dComIfGp_getStartStageName(), data[i].mStageName)) {
|
|
// !@bug: probably supposed to be data[i].mVirtualStageName, but doesn't matter
|
|
// because the two entries have the same virtual stage name
|
|
strcpy(virtual_stage, data->mVirtualStageName);
|
|
return virtual_stage;
|
|
}
|
|
}
|
|
}
|
|
return dComIfGp_getStartStageName();
|
|
}
|
|
|
|
/* 804510AC-804510B0 0005AC 0004+00 2/2 0/0 0/0 .sbss MyClass__12dMenu_Fmap_c */
|
|
dMenu_Fmap_c* dMenu_Fmap_c::MyClass;
|
|
|
|
/* 801C66E4-801C6AC8 1C1024 03E4+00 0/0 1/1 0/0 .text
|
|
* __ct__12dMenu_Fmap_cFP10JKRExpHeapP9STControlP10CSTControlUcUcUcffUc */
|
|
dMenu_Fmap_c::dMenu_Fmap_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i_cstick,
|
|
u8 i_process, u8 i_regionCursor, u8 i_stageCursor, f32 i_stageTransX,
|
|
f32 i_stageTransZ, u8 i_panDirection) {
|
|
MyClass = this;
|
|
mpHeap = i_heap;
|
|
mpStick = i_stick;
|
|
mpCStick = i_cstick;
|
|
mPortalNo = -1;
|
|
mErrorSound = false;
|
|
mStartStageNo = -1;
|
|
mStageCursor = -1;
|
|
mRoomCursor = -1;
|
|
mFlashRooms = NULL;
|
|
mFlashRoomCount = 0;
|
|
field_0x310 = 0;
|
|
mResetAreaName = false;
|
|
mAreaNameSet = false;
|
|
mRegionNo = -1;
|
|
mStayStageNo = -1;
|
|
field_0x30b = false;
|
|
field_0x30f = 0;
|
|
mOldRegionCursor = i_regionCursor;
|
|
mOldStageCursor = i_stageCursor;
|
|
mOldStageTransX = i_stageTransX;
|
|
mOldStageTransZ = i_stageTransZ;
|
|
mpMountArchive = NULL;
|
|
mpResArchive = NULL;
|
|
mpDraw2DBack = NULL;
|
|
mpDraw2DTop = NULL;
|
|
mpMenuFmapMap = NULL;
|
|
mpFieldDat = NULL;
|
|
mSpotTextureFadeAlpha = 0.0f;
|
|
mpFmapMapRes = NULL;
|
|
mpPortalDat = NULL;
|
|
mpWorldData = NULL;
|
|
field_0xb4 = 0;
|
|
mDataNumMax = 0;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
mpRegionData[i] = NULL;
|
|
mpStageData[i] = NULL;
|
|
mpRoomData[i] = NULL;
|
|
}
|
|
|
|
field_0x305 = false;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
field_0x168[i] = 0.0f;
|
|
field_0x188[i] = 0.0f;
|
|
field_0x128[i] = 0.0f;
|
|
field_0x148[i] = 0.0f;
|
|
}
|
|
|
|
mpTalkHeap = JKRCreateExpHeap(0x32000, mpHeap, false);
|
|
field_0x200 = 0;
|
|
mIsWarpMap = false;
|
|
|
|
mProcess = PROC_REGION_MAP;
|
|
strcpy(mMarkedStageName, "");
|
|
if (g_fmapHIO.mpArchive != NULL && g_fmapHIO.mpArchive->isMounted()) {
|
|
mProcess = i_process;
|
|
mpMapArchive = g_fmapHIO.mpArchive;
|
|
} else {
|
|
mpMapArchive = dComIfGp_getFieldMapArchive2();
|
|
}
|
|
mPrevProcess = mProcess;
|
|
mPrevProcessAlt = mProcess;
|
|
|
|
if (dMeter2Info_getMapStatus() == 4) {
|
|
mIsWarpMap = false;
|
|
mProcess = PROC_PORTAL_DEMO1;
|
|
} else if (dMeter2Info_getMapStatus() == 5) {
|
|
mIsWarpMap = false;
|
|
mProcess = PROC_YAMIBOSS_DEMO1;
|
|
} else if (dMeter2Info_getMapStatus() == 8) {
|
|
mIsWarpMap = false;
|
|
mProcess = PROC_LIGHT_DEMO1;
|
|
} else if (dMeter2Info_getMapStatus() == 3) {
|
|
mIsWarpMap = true;
|
|
mProcess = PROC_ALL_MAP;
|
|
} else if (dMeter2Info_getMapStatus() == 7) {
|
|
i_panDirection = 0xff;
|
|
mIsWarpMap = false;
|
|
mProcess = PROC_TABLE_DEMO1;
|
|
} else if (dMeter2Info_getMapStatus() == 9) {
|
|
mIsWarpMap = false;
|
|
mProcess = PROC_HOWL_DEMO1;
|
|
}
|
|
|
|
if (i_panDirection == 1) {
|
|
mTransX = -608.0f;
|
|
mTransY = 0.0f;
|
|
} else if (i_panDirection == 3) {
|
|
mTransX = 608.0f;
|
|
mTransY = 0.0f;
|
|
} else if (i_panDirection == 2) {
|
|
mTransX = 0.0f;
|
|
mTransY = -448.0f;
|
|
} else if (i_panDirection == 0) {
|
|
mTransX = 0.0f;
|
|
mTransY = 448.0f;
|
|
} else {
|
|
mTransX = 0.0f;
|
|
mTransY = 0.0f;
|
|
}
|
|
|
|
mAlphaRatio = 0.0f;
|
|
mPanDirection = i_panDirection;
|
|
field_0x210 = 0;
|
|
mDisplayFrame = 0;
|
|
mZoomLevel = 0;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
mRegionOffsetX[i] = 0.0f;
|
|
mRegionOffsetZ[i] = 0.0f;
|
|
mRegionTexture[i] = NULL;
|
|
mTitleName[i] = 0;
|
|
}
|
|
|
|
for (int i = 0; i < 20; i++) {
|
|
mAreaName[i] = 0;
|
|
}
|
|
|
|
field_0x1ec = 0.0f;
|
|
mSpotNum = 0;
|
|
mAllTitleName = 0;
|
|
|
|
resetRoomDataBit();
|
|
}
|
|
|
|
/* 801C6AC8-801C6D64 1C1408 029C+00 1/0 0/0 0/0 .text __dt__12dMenu_Fmap_cFv */
|
|
dMenu_Fmap_c::~dMenu_Fmap_c() {
|
|
mpHeap->getTotalFreeSize();
|
|
if (mpFieldDat != NULL) {
|
|
mpHeap->free(mpFieldDat);
|
|
mpFieldDat = NULL;
|
|
}
|
|
if (mpPortalDat != NULL) {
|
|
mpHeap->free(mpPortalDat);
|
|
mpPortalDat = NULL;
|
|
}
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
if (i == 7) {
|
|
if (mRegionTexture[i] != NULL) {
|
|
mpResArchive->removeResource(mRegionTexture[i]);
|
|
}
|
|
mRegionTexture[i] = NULL;
|
|
} else {
|
|
if (mRegionTexture[i] != NULL) {
|
|
mpMapArchive->removeResource(mRegionTexture[i]);
|
|
mRegionTexture[i] = NULL;
|
|
mRegionTexture[i] = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
removeAreaData();
|
|
|
|
if (mpDraw2DBack != NULL) {
|
|
delete mpDraw2DBack;
|
|
mpDraw2DBack = NULL;
|
|
}
|
|
if (mpDraw2DTop != NULL) {
|
|
delete mpDraw2DTop;
|
|
mpDraw2DTop = NULL;
|
|
}
|
|
if (mpMenuFmapMap != NULL) {
|
|
mpMenuFmapMap->_delete();
|
|
delete mpMenuFmapMap;
|
|
mpMenuFmapMap = NULL;
|
|
}
|
|
|
|
dComIfGp_getFmapResArchive()->removeResourceAll();
|
|
if (mpMapArchive != NULL) {
|
|
mpMapArchive->removeResourceAll();
|
|
}
|
|
|
|
MyClass = NULL;
|
|
|
|
if (mpTalkHeap != NULL) {
|
|
if (dMsgObject_getTalkHeap() == mpTalkHeap) {
|
|
dMsgObject_setTalkHeap(NULL);
|
|
}
|
|
mDoExt_destroyExpHeap(mpTalkHeap);
|
|
mpTalkHeap = NULL;
|
|
}
|
|
|
|
if (mpMountArchive != NULL) {
|
|
JKRUnmountArchive(mpMountArchive->getArchive());
|
|
mpMountArchive->destroy();
|
|
mpMountArchive = NULL;
|
|
}
|
|
|
|
if (mpResArchive != NULL) {
|
|
JKRUnmountArchive(mpResArchive);
|
|
mpResArchive = NULL;
|
|
}
|
|
}
|
|
|
|
/* 801C6D64-801C74A4 1C16A4 0740+00 1/1 0/0 0/0 .text _create__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::_create() {
|
|
mpHeap->getTotalFreeSize();
|
|
mpDraw2DBack = new dMenu_Fmap2DBack_c();
|
|
mpDraw2DBack->setRegionCursor(dComIfGp_getNowLevel() - 1);
|
|
mpDraw2DTop = new dMenu_Fmap2DTop_c(mpHeap, mpStick);
|
|
mpMenuFmapMap = new dMenu_FmapMap_c();
|
|
mpMenuFmapMap->_create(dMeter2Info_get2DWidth(), dMeter2Info_get2DHeight(),
|
|
dMeter2Info_get2DWidth(), dMeter2Info_get2DHeight(), mpFmapMapRes);
|
|
|
|
readFieldMapData((void**)&mpFieldDat, "dat/field.dat", false, false);
|
|
decodeFieldMapData();
|
|
readFieldMapData((void**)&mpPortalDat, "dat/portal.dat", false, false);
|
|
decodePortalData();
|
|
mpDraw2DTop->setPortalBin(mpPortalDat);
|
|
|
|
mpWorldData = NULL;
|
|
for (int i = 0; i < 8; i++) {
|
|
mpRegionData[i] = NULL;
|
|
mpStageData[i] = NULL;
|
|
mpRoomData[i] = NULL;
|
|
}
|
|
|
|
field_0x305 = false;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
field_0x168[i] = 0.0f;
|
|
field_0x188[i] = 0.0f;
|
|
field_0x128[i] = 0.0f;
|
|
field_0x148[i] = 0.0f;
|
|
}
|
|
|
|
if (mIsWarpMap == true) {
|
|
mZoomLevel = 0;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_LEFTRIGHT, 0.0f);
|
|
mpDraw2DTop->setCrossLRString(0);
|
|
} else {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_LEFTRIGHT, 1.0f);
|
|
mpDraw2DTop->setCrossLRString(0x3f9);
|
|
}
|
|
mpDraw2DBack->setArrowAlpha(1.0f);
|
|
|
|
u8 process = mProcess;
|
|
if (process == PROC_REGION_MAP || process == PROC_PORTAL_WARP_MAP
|
|
|| process == PROC_PORTAL_DEMO1 || process == PROC_YAMIBOSS_DEMO1
|
|
|| process == PROC_LIGHT_DEMO1 || process == PROC_HOWL_DEMO1)
|
|
{
|
|
if (g_fmapHIO.field_0x2f9) {
|
|
mpDraw2DBack->setRegionCursor(mOldRegionCursor);
|
|
}
|
|
|
|
process = mProcess;
|
|
if (process == PROC_HOWL_DEMO1) {
|
|
mProcess = PROC_ZOOM_REGION_TO_ALL;
|
|
readWorldData(mpDraw2DBack->getRegionCursor() + 1);
|
|
mZoomLevel = 0;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
mProcess = process;
|
|
getPlayerPos2D();
|
|
mpDraw2DBack->regionMapMove(mpStick);
|
|
drawIcon(field_0x1ec, true);
|
|
mpDraw2DBack->setRegionCursor(getHowlRegionID() - 1);
|
|
}
|
|
|
|
readWorldData(mpDraw2DBack->getRegionCursor() + 1);
|
|
mZoomLevel = 10;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
|
|
if (mIsWarpMap == true) {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x522, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x52a, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x526);
|
|
} else {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UPDOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x522, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0x527, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x528);
|
|
mpDraw2DBack->iconScale(0, 1.0f, 1.0f, 0.0f);
|
|
if (mProcess != PROC_YAMIBOSS_DEMO1) {
|
|
arrowPosInit();
|
|
} else {
|
|
yamibossArrowPosInit();
|
|
}
|
|
}
|
|
} else if (process == PROC_SPOT_MAP) {
|
|
if (g_fmapHIO.field_0x2f9) {
|
|
mpDraw2DBack->setRegionCursor(mOldRegionCursor);
|
|
}
|
|
readWorldData(mpDraw2DBack->getRegionCursor() + 1);
|
|
mZoomLevel = 10;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
if (g_fmapHIO.field_0x2f9) {
|
|
mpDraw2DBack->setSpotCursor(mOldStageCursor);
|
|
}
|
|
mpDraw2DBack->zoomMapCalc2((f32)mZoomLevel / 10.0f);
|
|
mpDraw2DBack->setStageTransForceXZ(mOldStageTransX, mOldStageTransZ);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x522, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x528);
|
|
mpDraw2DBack->iconScale(0, 0.0f, 0.0f, 1.0f);
|
|
arrowPosInit();
|
|
} else {
|
|
mProcess = PROC_ZOOM_REGION_TO_ALL;
|
|
readWorldData(mpDraw2DBack->getRegionCursor() + 1);
|
|
mZoomLevel = 0;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
mProcess = process;
|
|
getPlayerPos2D();
|
|
mpDraw2DBack->regionMapMove(mpStick);
|
|
drawIcon(field_0x1ec, true);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0x527, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x524);
|
|
mpDraw2DBack->iconScale(0, 1.0f, 1.0f, 0.0f);
|
|
arrowPosInit();
|
|
}
|
|
|
|
if (mProcess == PROC_PORTAL_DEMO1 || mProcess == PROC_YAMIBOSS_DEMO1
|
|
|| mProcess == PROC_TABLE_DEMO1 || mProcess == PROC_LIGHT_DEMO1
|
|
|| mProcess == PROC_HOWL_DEMO1)
|
|
{
|
|
mpDraw2DBack->offArrowDrawFlag();
|
|
}
|
|
|
|
(this->*init_process[mProcess])();
|
|
|
|
if (mProcess != PROC_HOWL_DEMO1) {
|
|
getPlayerPos2D();
|
|
}
|
|
|
|
g_fmapHIO.field_0x2f9 = false;
|
|
}
|
|
|
|
/* 801C74A4-801C74A8 1C1DE4 0004+00 0/0 1/1 0/0 .text _delete__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::_delete() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 801C74A8-801C7650 1C1DE8 01A8+00 0/0 1/1 0/0 .text _move__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::_move() {
|
|
u8 process = mProcess;
|
|
field_0x310 = 0;
|
|
mpDraw2DBack->clearIconInfo();
|
|
|
|
(this->*move_process[mProcess])();
|
|
|
|
mpDraw2DTop->_execute();
|
|
mpDraw2DBack->setBaseBackAlpha(g_fmHIO.mBaseBackAlpha);
|
|
mpDraw2DBack->btkAnimeLoop(g_fmHIO.mBackAnimeStep);
|
|
mpDraw2DTop->setMoyaAlpha(g_fmHIO.mMoyaAlpha);
|
|
mpDraw2DTop->btkAnimeLoop(g_fmHIO.mTopAnimeStep);
|
|
|
|
if (mProcess != process) {
|
|
(this->*init_process[mProcess])();
|
|
}
|
|
|
|
if (mProcess == PROC_PORTAL_WARP_FORBID) {
|
|
mpDraw2DBack->calcBackAlpha(true);
|
|
} else {
|
|
mpDraw2DBack->calcBackAlpha(false);
|
|
}
|
|
|
|
mpDraw2DBack->setAllTrans(mTransX, mTransY);
|
|
mpDraw2DTop->setAllTrans(mTransX, mTransY);
|
|
|
|
if (g_fmapHIO.mRangeCheck) {
|
|
drawDebugStage();
|
|
}
|
|
|
|
if (mSpotTextureFadeAlpha != 1.0f) {
|
|
cLib_addCalc2(&mSpotTextureFadeAlpha, 1.0f, 0.4f, 0.5f);
|
|
if (fabsf(mSpotTextureFadeAlpha - 1.0f) < 0.1f) {
|
|
mSpotTextureFadeAlpha = 1.0f;
|
|
}
|
|
mpDraw2DBack->setSpotTextureFadeAlpha(mSpotTextureFadeAlpha);
|
|
}
|
|
}
|
|
|
|
/* 801C7650-801C77F0 1C1F90 01A0+00 0/0 1/1 0/0 .text _draw__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::_draw() {
|
|
if (mpDraw2DBack != NULL && mpDraw2DTop != NULL) {
|
|
if (field_0x305) {
|
|
mpMenuFmapMap->setRendering(mpWorldData, mStartStageNo,
|
|
mpDraw2DBack->getRenderingPosX(),
|
|
mpDraw2DBack->getRenderingPosZ(),
|
|
mpDraw2DBack->getRenderingScale(),
|
|
mpDraw2DBack->getMapZoomRate());
|
|
mpDraw2DBack->setStageInfo(mSpotNum, mpMenuFmapMap);
|
|
drawIcon(field_0x1ec, false);
|
|
if (mProcess == PROC_ZOOM_REGION_TO_SPOT || mProcess == PROC_ZOOM_SPOT_TO_REGION
|
|
|| mProcess == PROC_YAMIBOSS_DEMO4 || mProcess == PROC_LIGHT_DEMO1
|
|
|| mProcess == PROC_TABLE_DEMO2 || mProcess == PROC_HOWL_DEMO1)
|
|
{
|
|
f32 scale = 1.0f - field_0x1ec;
|
|
mpDraw2DBack->iconScale(0, scale, scale, 1.0f - scale);
|
|
}
|
|
} else {
|
|
drawPortalIcon();
|
|
if (mProcess == PROC_ZOOM_ALL_TO_REGION || mProcess == PROC_ZOOM_REGION_TO_ALL) {
|
|
f32 scale = 1.0f - (f32)mZoomLevel / 10.0f;
|
|
mpDraw2DBack->iconScale(0, scale, scale, 1.0f - scale);
|
|
}
|
|
}
|
|
|
|
mpDraw2DBack->setMapDrawFlag(mpMenuFmapMap->isDrawEnable());
|
|
dComIfGd_set2DOpa(mpDraw2DBack);
|
|
dComIfGd_set2DOpaTop(mpDraw2DTop);
|
|
}
|
|
}
|
|
|
|
/* 801C77F0-801C7AFC 1C2130 030C+00 0/0 1/1 0/0 .text getNextStatus__12dMenu_Fmap_cFPUc
|
|
*/
|
|
u8 dMenu_Fmap_c::getNextStatus(u8* param_0) {
|
|
u8 ret = 8;
|
|
*param_0 = 0;
|
|
|
|
if (mProcess == PROC_ALL_MAP && dMw_B_TRIGGER()) {
|
|
if (mPanDirection == 3) {
|
|
mPanDirection = 1;
|
|
dMeter2Info_setMapStatus(0);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
} else {
|
|
mPanDirection = 3;
|
|
if (dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
dMeter2Info_setMapStatus(1);
|
|
} else {
|
|
dMeter2Info_setMapStatus(0);
|
|
}
|
|
dMeter2Info_setMapKeyDirection(0x200);
|
|
}
|
|
|
|
ret = 9;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_CLOSE_L, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
dMeter2Info_set2DVibrationM();
|
|
}
|
|
|
|
if (mProcess == PROC_PORTAL_WARP_MAP && dMeter2Info_getWarpStatus() == 3) {
|
|
if (mPanDirection == 3) {
|
|
mPanDirection = 1;
|
|
dMeter2Info_setMapStatus(0);
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
} else {
|
|
mPanDirection = 3;
|
|
if (dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
dMeter2Info_setMapStatus(1);
|
|
} else {
|
|
dMeter2Info_setMapStatus(0);
|
|
}
|
|
dMeter2Info_setMapKeyDirection(0x200);
|
|
}
|
|
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_CLOSE_L, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
dMeter2Info_set2DVibrationM();
|
|
return 9;
|
|
} else if ((mProcess == PROC_ALL_MAP || mProcess == PROC_REGION_MAP
|
|
|| mProcess == PROC_PORTAL_WARP_MAP || mProcess == PROC_SPOT_MAP) && isSync()) {
|
|
if (dMw_LEFT_TRIGGER()) {
|
|
if (dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo()) {
|
|
dMeter2Info_setMapStatus(1);
|
|
} else {
|
|
dMeter2Info_setMapStatus(0);
|
|
}
|
|
mPanDirection = 3;
|
|
dMeter2Info_setMapKeyDirection(0x200);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_CLOSE_L, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
dMeter2Info_set2DVibrationM();
|
|
return 9;
|
|
} else if (dMw_RIGHT_TRIGGER()) {
|
|
dMeter2Info_setMapStatus(0);
|
|
mPanDirection = 1;
|
|
dMeter2Info_setMapKeyDirection(0x400);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_CLOSE_L, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
dMeter2Info_set2DVibrationM();
|
|
return 9;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 801C7AFC-801C7B24 1C243C 0028+00 1/1 1/1 0/0 .text isSync__12dMenu_Fmap_cFv */
|
|
bool dMenu_Fmap_c::isSync() {
|
|
if (mpMountArchive != NULL && !mpMountArchive->sync()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 801C7B24-801C7C2C 1C2464 0108+00 1/0 0/0 0/0 .text all_map_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::all_map_init() {
|
|
if (mIsWarpMap == true) {
|
|
setTitleName(0x525);
|
|
mpDraw2DTop->setZButtonString(0x52a, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
} else {
|
|
setTitleName(mAllTitleName);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
}
|
|
|
|
mResetAreaName = true;
|
|
|
|
if (!mAreaNameSet) {
|
|
setAreaNameZero();
|
|
} else {
|
|
setAreaName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
}
|
|
|
|
mRegionNo = mpDraw2DBack->getRegionCursor();
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x3f9, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0x527, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x524);
|
|
mpDraw2DTop->setCrossLRString(0x3f9);
|
|
}
|
|
|
|
/* 801C7C2C-801C8230 1C256C 0604+00 1/0 0/0 0/0 .text all_map_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::all_map_proc() {
|
|
mpStick->checkTrigger();
|
|
|
|
u8 region = mpDraw2DBack->getSelectRegion();
|
|
bool region_change = false;
|
|
if (mRegionNo != region) {
|
|
mRegionNo = region;
|
|
region_change = true;
|
|
}
|
|
|
|
if (region != 0xff && mpDraw2DBack->isShowRegion(region)) {
|
|
if (getRegionStageNum(region + 1) == 0) {
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
} else {
|
|
mpDraw2DTop->setAButtonString(0x527, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
}
|
|
if (region_change) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_AREA_SELECT, NULL, 0, 0,
|
|
1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else {
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
}
|
|
|
|
if (dMw_A_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
if (region == 0xff || !mpDraw2DBack->isShowRegion(region)) {
|
|
if (!mErrorSound) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
mErrorSound = true;
|
|
}
|
|
} else {
|
|
mpDraw2DBack->setRegionCursor(region);
|
|
if (getRegionStageNum(mpDraw2DBack->getRegionCursor() + 1) == 0) {
|
|
if (!mErrorSound) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0,
|
|
1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
mErrorSound = true;
|
|
}
|
|
} else {
|
|
mpDraw2DBack->calcDrawPriority();
|
|
setProcess(PROC_ZOOM_ALL_TO_REGION);
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
}
|
|
}
|
|
} else if (dMw_B_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
} else if (dMw_Z_TRIGGER() && mpDraw2DTop->isWarpAccept()) {
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x109])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x169]))
|
|
{
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x8b4, 0, 0, 0xff, true);
|
|
mPrevProcessAlt = mProcess;
|
|
setProcess(PROC_PORTAL_WARP_FORBID);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else if (mpDraw2DTop->checkPlayerWarpAccept()) {
|
|
if (mIsWarpMap == true) {
|
|
mIsWarpMap = false;
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
Z2GetAudioMgr()->seStart(Z2SE_WARP_MAP_OFF, NULL, 0, 0,
|
|
1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else {
|
|
mIsWarpMap = true;
|
|
mpDraw2DTop->setZButtonString(0x52a, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
Z2GetAudioMgr()->seStart(Z2SE_WARP_MAP_ON, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else {
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x68])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0xfa]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x85d, 0, 0, 0xff, true);
|
|
} else if (!mpDraw2DTop->checkWarpAcceptCannon()) {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7de, 0, 0, 0xff, true);
|
|
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x313]);
|
|
} else if (!mpDraw2DTop->checkWarpAcceptRegion4()) {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7dd, 0, 0, 0xff, true);
|
|
} else {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51d, 0, 0, 0xff, true);
|
|
}
|
|
mPrevProcessAlt = mProcess;
|
|
setProcess(PROC_PORTAL_WARP_FORBID);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else {
|
|
u8 region1 = mpDraw2DBack->getSelectRegion();
|
|
mpDraw2DBack->allmap_move2(mpStick);
|
|
u8 region2 = mpDraw2DBack->getSelectRegion();
|
|
if (region1 != region2 || mResetAreaName) {
|
|
mResetAreaName = false;
|
|
if (mpDraw2DBack->getSelectRegion() != 0xff
|
|
&& mpDraw2DBack->isShowRegion(mpDraw2DBack->getSelectRegion()))
|
|
{
|
|
setAreaName(mTitleName[mpDraw2DBack->getSelectRegion()]);
|
|
mpDraw2DBack->setSpotCursor(0);
|
|
|
|
} else {
|
|
setAreaNameZero();
|
|
}
|
|
}
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801C8230-801C8308 1C2B70 00D8+00 1/0 0/0 0/0 .text zoom_all_to_region_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::zoom_all_to_region_init() {
|
|
if (!readWorldData(mpDraw2DBack->getRegionCursor() + 1)) {
|
|
setProcess(PROC_ALL_MAP);
|
|
if (!mErrorSound) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
mErrorSound = true;
|
|
}
|
|
} else {
|
|
mZoomLevel = 0;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
}
|
|
|
|
/* 801C8308-801C83E0 1C2C48 00D8+00 1/0 0/0 0/0 .text zoom_all_to_region_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::zoom_all_to_region_proc() {
|
|
mZoomLevel++;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
|
|
if (mIsWarpMap == true) {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
} else {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
}
|
|
|
|
if (mZoomLevel >= 10) {
|
|
if (mIsWarpMap == true) {
|
|
setProcess(PROC_PORTAL_WARP_MAP);
|
|
} else {
|
|
setProcess(PROC_REGION_MAP);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801C83E0-801C8438 1C2D20 0058+00 1/0 0/0 0/0 .text zoom_region_to_all_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::zoom_region_to_all_init() {
|
|
mZoomLevel = 10;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMOUT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
|
|
/* 801C8438-801C8518 1C2D78 00E0+00 1/0 0/0 0/0 .text zoom_region_to_all_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::zoom_region_to_all_proc() {
|
|
mZoomLevel--;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
|
|
if (mIsWarpMap == true) {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
} else {
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
}
|
|
|
|
if (mZoomLevel <= 0) {
|
|
if (mpDraw2DBack->getAllPathShowFlag()) {
|
|
removeAreaData();
|
|
readWorldData(0xff);
|
|
}
|
|
setProcess(PROC_ALL_MAP);
|
|
}
|
|
}
|
|
|
|
/* 801C8518-801C8600 1C2E58 00E8+00 1/0 0/0 0/0 .text region_map_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::region_map_init() {
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
mResetAreaName = true;
|
|
|
|
if (!mAreaNameSet) {
|
|
setAreaNameZero();
|
|
} else {
|
|
setAreaName(mAreaName[mpDraw2DBack->getSpotCursor()]);
|
|
}
|
|
|
|
mStageCursor = mpDraw2DBack->getSpotCursor();
|
|
mRoomCursor = -1;
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UPDOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x522, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0x527, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x528);
|
|
mpDraw2DTop->setCrossLRString(0x3f9);
|
|
}
|
|
|
|
/* 801C8600-801C8B00 1C2F40 0500+00 1/0 0/0 0/0 .text region_map_proc__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::region_map_proc() {
|
|
bool r29 = false;
|
|
mpDraw2DTop->setAButtonString(0x527, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
r29 = true;
|
|
|
|
if (dMw_B_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
setProcess(PROC_ZOOM_REGION_TO_ALL);
|
|
mpMenuFmapMap->setFlashOff();
|
|
} else if (dMw_A_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
if (r29) {
|
|
setProcess(PROC_ZOOM_REGION_TO_SPOT);
|
|
} else if (!mErrorSound) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
mErrorSound = true;
|
|
}
|
|
} else if (dMw_Z_TRIGGER() && mpDraw2DTop->isWarpAccept()) {
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x109])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x169]))
|
|
{
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x8b4, 0, 0, 0xff, true);
|
|
mPrevProcessAlt = mProcess;
|
|
setProcess(PROC_PORTAL_WARP_FORBID);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else if (mpDraw2DTop->checkPlayerWarpAccept()) {
|
|
mIsWarpMap = true;
|
|
setProcess(PROC_TO_PORTAL_WARP_MAP);
|
|
mpMenuFmapMap->setFlashOff();
|
|
mpDraw2DTop->setZButtonString(0x52a, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
Z2GetAudioMgr()->seStart(Z2SE_WARP_MAP_ON, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else {
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x68])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0xfa]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x85d, 0, 0, 0xff, true);
|
|
} else if (!mpDraw2DTop->checkWarpAcceptCannon()) {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7de, 0, 0, 0xff, true);
|
|
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x313]);
|
|
} else if (!mpDraw2DTop->checkWarpAcceptRegion4()) {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7dd, 0, 0, 0xff, true);
|
|
} else {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51d, 0, 0, 0xff, true);
|
|
}
|
|
mPrevProcessAlt = mProcess;
|
|
setProcess(PROC_PORTAL_WARP_FORBID);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else {
|
|
if (g_fmapHIO.mDisplayReferenceArea) {
|
|
mpDraw2DBack->zoomMapCalc(1.0f);
|
|
}
|
|
mpDraw2DBack->regionMapMove(mpStick);
|
|
int stage_no, room_no;
|
|
f32 pos_x = mpDraw2DBack->getArrowPos2DX() - mDoGph_gInf_c::getMinXF()
|
|
- mDoGph_gInf_c::getWidthF() * 0.5f;
|
|
f32 pos_y = mpDraw2DBack->getArrowPos2DY() - mDoGph_gInf_c::getHeightF() * 0.5f;
|
|
mpMenuFmapMap->getPointStagePathInnerNo(getNowFmapRegionData(), pos_x, pos_y,
|
|
mStayStageNo, &stage_no, &room_no);
|
|
if (mStageCursor != stage_no || mRoomCursor != room_no || mResetAreaName) {
|
|
mStageCursor = stage_no;
|
|
mRoomCursor = room_no;
|
|
u16 area_name = checkStRoomData();
|
|
if (mStageCursor >= 0) {
|
|
mpDraw2DBack->setSpotCursor(mStageCursor);
|
|
if (area_name != 0xffff) {
|
|
setAreaName(area_name);
|
|
} else {
|
|
setAreaName(mAreaName[mStageCursor]);
|
|
}
|
|
} else {
|
|
setAreaNameZero();
|
|
}
|
|
}
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
}
|
|
|
|
if (mStageCursor >= 0) {
|
|
setFlash(mStageCursor, true);
|
|
} else {
|
|
mpMenuFmapMap->setFlashOff();
|
|
}
|
|
}
|
|
|
|
/* 801C8B00-801C8B0C 1C3440 000C+00 1/0 0/0 0/0 .text to_portal_warp_map_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::to_portal_warp_map_init() {
|
|
mZoomLevel = 10;
|
|
}
|
|
|
|
/* 801C8B0C-801C8B48 1C344C 003C+00 1/0 0/0 0/0 .text to_portal_warp_map_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::to_portal_warp_map_proc() {
|
|
mZoomLevel--;
|
|
if (mZoomLevel <= 0) {
|
|
setProcess(PROC_PORTAL_WARP_MAP);
|
|
}
|
|
}
|
|
|
|
/* 801C8B48-801C8C0C 1C3488 00C4+00 1/0 0/0 0/0 .text portal_warp_map_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::portal_warp_map_init() {
|
|
if (mPrevProcess != PROC_PORTAL_WARP_SELECT) {
|
|
mPortalNo = 0xff;
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
if (mPortalNo == 0xff) {
|
|
setAreaNameZero();
|
|
}
|
|
}
|
|
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x522, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x52a, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x526);
|
|
}
|
|
|
|
/* 801C8C0C-801C90A4 1C354C 0498+00 1/0 0/0 0/0 .text portal_warp_map_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::portal_warp_map_proc() {
|
|
mpStick->checkTrigger();
|
|
|
|
if (dMw_B_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
setProcess(PROC_ZOOM_REGION_TO_ALL);
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
} else if (dMw_A_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
if (mPortalNo != 0xff) {
|
|
dMenu_Fmap_portal_data_c::data* portals = mpPortalDat->mData;
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
dMsgObject_setPortalMessageID(portals[mPortalNo].mMessageID);
|
|
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x68])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0xfa]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x85d, 0, 0, 0xff, true);
|
|
} else if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x312])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x311]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7de, 0, 0, 0xff, true);
|
|
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x313]);
|
|
} else if (mPortalNo == 6) {
|
|
if ((!strcmp(dComIfGp_getStartStageName(), "F_SP124")
|
|
&& ((daMidna_c*)daPy_py_c::getMidnaActor())->checkPortalObjRide())
|
|
|| dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x7d]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51e, 2, 0, 0xff, true);
|
|
} else {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x53a, 0, 0, 0xff, true);
|
|
}
|
|
} else if (mPortalNo == 3) {
|
|
if ((dMeter2Info_getMapStatus() == 3
|
|
&& dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 2
|
|
&& dComIfGs_isOneZoneSwitch(0xf, -1))
|
|
|| dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x33]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51e, 2, 0, 0xff, true);
|
|
} else {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x53b, 0, 0, 0xff, true);
|
|
}
|
|
} else {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51e, 2, 0, 0xff, true);
|
|
}
|
|
|
|
setProcess(PROC_PORTAL_WARP_SELECT);
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_CURSOR_OK, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else if (dMw_Z_TRIGGER()) {
|
|
mIsWarpMap = false;
|
|
setProcess(PROC_REGION_MAP);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
Z2GetAudioMgr()->seStart(Z2SE_WARP_MAP_OFF, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else {
|
|
portalWarpMapMove(mpStick);
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
}
|
|
|
|
setFlash(mpDraw2DBack->getSpotCursor(), false);
|
|
}
|
|
|
|
/* 801C90A4-801C90A8 1C39E4 0004+00 1/0 0/0 0/0 .text portal_warp_select_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::portal_warp_select_init() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 801C90A8-801C91D8 1C39E8 0130+00 1/0 0/0 0/0 .text portal_warp_select_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::portal_warp_select_proc() {
|
|
mpDraw2DTop->getScrnExplainPtr()->move();
|
|
|
|
if (mpDraw2DTop->getScrnExplainPtr()->getStatus() == 0) {
|
|
mpDraw2DTop->deleteExplain();
|
|
|
|
if (dMeter2Info_getWarpStatus() == 3) {
|
|
dMenu_Fmap_portal_data_c::data* portals = mpPortalDat->mData;
|
|
u8 region = mpDraw2DBack->getRegionCursor();
|
|
|
|
dMeter2Info_setWarpInfo(portals[mPortalNo].mStageName,
|
|
cXyz(portals[mPortalNo].mPosition.x + mpDraw2DBack->getRegionOriginX(region),
|
|
portals[mPortalNo].mPosition.y,
|
|
portals[mPortalNo].mPosition.z + mpDraw2DBack->getRegionOriginZ(region)),
|
|
0, portals[mPortalNo].mRoomNo, 0, portals[mPortalNo].mWarpPlayerNo);
|
|
|
|
dComIfGp_SelectWarpPt_set(portals[mPortalNo].mSelectWarpPt);
|
|
setProcess(PROC_PORTAL_WARP_MAP);
|
|
} else if (mPrevProcess == PROC_PORTAL_DEMO5) {
|
|
setProcess(PROC_PORTAL_DEMO5);
|
|
} else {
|
|
setProcess(PROC_PORTAL_WARP_MAP);
|
|
}
|
|
}
|
|
|
|
setFlash(mpDraw2DBack->getSpotCursor(), false);
|
|
}
|
|
|
|
/* 801C91D8-801C9238 1C3B18 0060+00 1/0 0/0 0/0 .text portal_warp_forbid_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::portal_warp_forbid_init() {
|
|
mpDraw2DTop->setBButtonString(0x3f9, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0);
|
|
mpDraw2DTop->setCrossLRString(0);
|
|
}
|
|
|
|
/* 801C9238-801C92A4 1C3B78 006C+00 1/0 0/0 0/0 .text portal_warp_forbid_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::portal_warp_forbid_proc() {
|
|
mpDraw2DTop->getScrnExplainPtr()->move();
|
|
if (mpDraw2DTop->getScrnExplainPtr()->getStatus() == 0) {
|
|
mpDraw2DTop->deleteExplain();
|
|
setProcess(mPrevProcessAlt);
|
|
}
|
|
setFlash(mpDraw2DBack->getSpotCursor(), false);
|
|
}
|
|
|
|
/* 801C92A4-801C9304 1C3BE4 0060+00 1/0 0/0 0/0 .text zoom_region_to_spot_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::zoom_region_to_spot_init() {
|
|
mZoomLevel = 0;
|
|
field_0x1ec = 0.0f;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
|
|
/* 801C9304-801C93CC 1C3C44 00C8+00 1/0 0/0 0/0 .text zoom_region_to_spot_proc__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::zoom_region_to_spot_proc() {
|
|
mZoomLevel++;
|
|
field_0x1ec = (f32)mZoomLevel / 10.0f;
|
|
mpDraw2DBack->zoomMapCalc2(field_0x1ec);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
|
|
if (mZoomLevel >= 10) {
|
|
setProcess(PROC_SPOT_MAP);
|
|
}
|
|
|
|
if (mStageCursor >= 0) {
|
|
setFlash(mStageCursor, true);
|
|
} else {
|
|
mpMenuFmapMap->setFlashOff();
|
|
}
|
|
}
|
|
|
|
/* 801C93CC-801C9428 1C3D0C 005C+00 1/0 0/0 0/0 .text zoom_spot_to_region_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::zoom_spot_to_region_init() {
|
|
mZoomLevel = 10;
|
|
field_0x1ec = 1.0f;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMOUT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
|
|
/* 801C9428-801C950C 1C3D68 00E4+00 1/0 0/0 0/0 .text zoom_spot_to_region_proc__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::zoom_spot_to_region_proc() {
|
|
mZoomLevel--;
|
|
field_0x1ec = (f32)mZoomLevel / 10.0f;
|
|
mpDraw2DBack->zoomMapCalc2(field_0x1ec);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
|
|
if (mZoomLevel <= 0) {
|
|
if (mIsWarpMap == true) {
|
|
setProcess(PROC_PORTAL_WARP_MAP);
|
|
} else {
|
|
setProcess(PROC_REGION_MAP);
|
|
}
|
|
}
|
|
|
|
if (mStageCursor >= 0) {
|
|
setFlash(mStageCursor, true);
|
|
} else {
|
|
mpMenuFmapMap->setFlashOff();
|
|
}
|
|
}
|
|
|
|
/* 801C950C-801C9618 1C3E4C 010C+00 1/0 0/0 0/0 .text spot_map_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::spot_map_init() {
|
|
field_0x1ec = 1.0f;
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
mResetAreaName = true;
|
|
|
|
if (!mAreaNameSet) {
|
|
setAreaNameZero();
|
|
} else {
|
|
setAreaName(mAreaName[mpDraw2DBack->getSpotCursor()]);
|
|
}
|
|
|
|
mStageCursor = mpDraw2DBack->getSpotCursor();
|
|
mRoomCursor = -1;
|
|
|
|
mpDraw2DBack->resetDrug();
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0x522, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0x529, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0x528);
|
|
mpDraw2DTop->setCrossLRString(0x3f9);
|
|
}
|
|
|
|
/* 801C9618-801C9A4C 1C3F58 0434+00 1/0 0/0 0/0 .text spot_map_proc__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::spot_map_proc() {
|
|
if (dMw_B_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
setProcess(PROC_ZOOM_SPOT_TO_REGION);
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
} else if (dMw_A_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)
|
|
&& dMeter2Info_getMeterClass()->getMeterDrawPtr()->getInsideObjCheck() != 1)
|
|
{
|
|
mpDraw2DBack->stageMapMove(mpStick, 1, true);
|
|
} else if (dMw_Z_TRIGGER() && mpDraw2DTop->isWarpAccept()) {
|
|
#if VERSION >= VERSION_GCN_JPN
|
|
//! JPN version added a check to make sure if Arbiter's Grounds is cleared that
|
|
//! the Mirror Chamber Statue has been spun before allowing portal warping from the map screen.
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[265]) && !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361])) {
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x8B4, 0, 0, 0xff, true);
|
|
|
|
mPrevProcessAlt = mProcess;
|
|
setProcess(PROC_PORTAL_WARP_FORBID);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else
|
|
#endif
|
|
if (mpDraw2DTop->checkPlayerWarpAccept()) {
|
|
mIsWarpMap = true;
|
|
setProcess(PROC_ZOOM_SPOT_TO_REGION);
|
|
mpDraw2DTop->setZButtonString(0x52a, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
Z2GetAudioMgr()->seStart(Z2SE_WARP_MAP_ON, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
} else {
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x68])
|
|
&& !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0xfa]))
|
|
{
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x85d, 0, 0, 0xff, true);
|
|
} else if (!mpDraw2DTop->checkWarpAcceptCannon()) {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7de, 0, 0, 0xff, true);
|
|
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x313]);
|
|
} else if (!mpDraw2DTop->checkWarpAcceptRegion4()) {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x7dd, 0, 0, 0xff, true);
|
|
} else {
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51d, 0, 0, 0xff, true);
|
|
}
|
|
|
|
mPrevProcessAlt = mProcess;
|
|
setProcess(PROC_PORTAL_WARP_FORBID);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else {
|
|
if (g_fmapHIO.mDisplayReferenceArea) {
|
|
mpDraw2DBack->zoomMapCalc(1.0f);
|
|
mpDraw2DBack->zoomMapCalc2(field_0x1ec);
|
|
}
|
|
|
|
mpDraw2DBack->stageMapMove(mpStick, 1, true);
|
|
|
|
int stage_no, room_no;
|
|
f32 pos_x = mpDraw2DBack->getMapAreaGlobalCenterPosX() - mDoGph_gInf_c::getMinXF()
|
|
- mDoGph_gInf_c::getWidthF() * 0.5f;
|
|
f32 pos_y = mpDraw2DBack->getMapAreaGlobalCenterPosY() - mDoGph_gInf_c::getHeightF() * 0.5f;
|
|
mpMenuFmapMap->getPointStagePathInnerNo(getNowFmapRegionData(), pos_x, pos_y,
|
|
mStayStageNo, &stage_no, &room_no);
|
|
|
|
if (mStageCursor != stage_no || mResetAreaName) {
|
|
mStageCursor = stage_no;
|
|
mRoomCursor = room_no;
|
|
u16 area_name = checkStRoomData();
|
|
if (mStageCursor >= 0) {
|
|
if (area_name != 0xffff) {
|
|
setAreaName(area_name);
|
|
} else {
|
|
setAreaName(mAreaName[mStageCursor]);
|
|
}
|
|
} else {
|
|
setAreaNameZero();
|
|
}
|
|
}
|
|
|
|
if (mErrorSound == true) {
|
|
mErrorSound = false;
|
|
}
|
|
}
|
|
|
|
mpDraw2DBack->zoomMapCalcHIO();
|
|
|
|
if (mStageCursor >= 0) {
|
|
setFlash(mStageCursor, true);
|
|
} else {
|
|
mpMenuFmapMap->setFlashOff();
|
|
}
|
|
}
|
|
|
|
/* 801C9A4C-801C9B64 1C438C 0118+00 1/0 0/0 0/0 .text portal_demo1_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo1_init() {
|
|
mpDraw2DBack->setRegionCursor(2);
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
setAreaName(mAreaName[mpDraw2DBack->getSpotCursor()]);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_RIGHT, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_LEFT, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0);
|
|
mpDraw2DTop->setCrossLRString(0);
|
|
dMsgObject_setTalkHeap(mpTalkHeap);
|
|
mMsgFlow.init(NULL, 3005, 0, NULL);
|
|
mZoomLevel = 10;
|
|
}
|
|
|
|
/* 801C9B64-801C9C7C 1C44A4 0118+00 1/0 0/0 0/0 .text portal_demo1_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo1_move() {
|
|
talkButton();
|
|
mMsgFlow.doFlow(NULL, NULL, 0);
|
|
|
|
if (dMsgObject_getMessageID() >= 2008 || mZoomLevel < 10) {
|
|
if (mZoomLevel == 10) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMOUT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
mZoomLevel--;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
if (mZoomLevel <= 0) {
|
|
if (mpDraw2DBack->getAllPathShowFlag()) {
|
|
removeAreaData();
|
|
readWorldData(0xff);
|
|
}
|
|
mIsWarpMap = true;
|
|
setProcess(PROC_PORTAL_DEMO2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801C9C7C-801C9CC8 1C45BC 004C+00 1/0 0/0 0/0 .text portal_demo2_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo2_init() {
|
|
setTitleName(mAllTitleName);
|
|
setAreaName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
}
|
|
|
|
/* 801C9CC8-801C9D60 1C4608 0098+00 1/0 0/0 0/0 .text portal_demo2_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo2_move() {
|
|
talkButton();
|
|
mMsgFlow.doFlow(NULL, NULL, 0);
|
|
|
|
if (dMsgObject_getMessageID() >= 2009) {
|
|
mpDraw2DBack->setRegionCursor(1);
|
|
setProcess(PROC_PORTAL_DEMO3);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_AREA_SELECT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
|
|
mpDraw2DBack->mapBlink();
|
|
}
|
|
|
|
/* 801C9D60-801C9DB4 1C46A0 0054+00 1/0 0/0 0/0 .text portal_demo3_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo3_init() {
|
|
setTitleName(mAllTitleName);
|
|
setAreaName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
mZoomLevel = 0;
|
|
}
|
|
|
|
/* 801C9DB4-801C9EB8 1C46F4 0104+00 1/0 0/0 0/0 .text portal_demo3_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo3_move() {
|
|
talkButton();
|
|
mMsgFlow.doFlow(NULL, NULL, 0);
|
|
|
|
if (dMsgObject_getMessageID() >= 2010 || mZoomLevel > 0) {
|
|
if (mZoomLevel == 0) {
|
|
readWorldData(mpDraw2DBack->getRegionCursor() + 1);
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
mZoomLevel++;
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
if (mZoomLevel >= 10) {
|
|
setProcess(PROC_PORTAL_DEMO4);
|
|
}
|
|
}
|
|
|
|
if (mZoomLevel == 0) {
|
|
mpDraw2DBack->mapBlink();
|
|
}
|
|
}
|
|
|
|
/* 801C9EB8-801C9F14 1C47F8 005C+00 1/0 0/0 0/0 .text portal_demo4_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo4_init() {
|
|
mPortalNo = 0xff;
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
if (mPortalNo == 0xff) {
|
|
setAreaNameZero();
|
|
}
|
|
}
|
|
|
|
/* 801C9F14-801C9F7C 1C4854 0068+00 1/0 0/0 0/0 .text portal_demo4_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo4_move() {
|
|
talkButton();
|
|
if (mMsgFlow.doFlow(NULL, NULL, 0)) {
|
|
setProcess(PROC_PORTAL_DEMO5);
|
|
}
|
|
setFlash(mpDraw2DBack->getSpotCursor(), false);
|
|
}
|
|
|
|
/* 801C9F7C-801C9FBC 1C48BC 0040+00 1/0 0/0 0/0 .text portal_demo5_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo5_init() {
|
|
mpDraw2DTop->set3DStickString(0x526);
|
|
mpDraw2DBack->onArrowDrawFlag();
|
|
}
|
|
|
|
/* 801C9FBC-801CA158 1C48FC 019C+00 1/0 0/0 0/0 .text portal_demo5_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo5_move() {
|
|
mpStick->checkTrigger();
|
|
|
|
// fakematch: the call to the fake inline function dMeter2Info_isTouchKeyCheck_alt
|
|
// should actually call dMeter2Info_isTouchKeyCheck, but for some reason the generated asm
|
|
// is different from every other call to dMeter2Info_isTouchKeyCheck
|
|
if (dMw_B_TRIGGER() || dMw_Z_TRIGGER() || dMw_START_TRIGGER() || dMw_UP_TRIGGER()
|
|
|| dMw_DOWN_TRIGGER() || dMw_LEFT_TRIGGER() || dMw_RIGHT_TRIGGER()
|
|
|| dMeter2Info_isTouchKeyCheck_alt(0xc))
|
|
{
|
|
dMsgObject_setTalkHeap(mpTalkHeap);
|
|
fopMsgM_messageSet(2015, 1000);
|
|
setProcess(PROC_PORTAL_DEMO6);
|
|
} else if (dMw_A_TRIGGER() && !dMeter2Info_isTouchKeyCheck(0xc)) {
|
|
if (mPortalNo != 0xff) {
|
|
dMenu_Fmap_portal_data_c::data* portals = mpPortalDat->mData;
|
|
mpDraw2DTop->createExplain(mpTalkHeap, mpStick);
|
|
dMsgObject_setPortalMessageID(portals[mPortalNo].mMessageID);
|
|
mpDraw2DTop->getScrnExplainPtr()->openExplain(0x51e, 2, 0, 0xff, true);
|
|
setProcess(PROC_PORTAL_WARP_SELECT);
|
|
} else {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
} else {
|
|
portalWarpMapMove(mpStick);
|
|
}
|
|
|
|
setFlash(mpDraw2DBack->getSpotCursor(), false);
|
|
}
|
|
|
|
/* 801CA158-801CA15C 1C4A98 0004+00 1/0 0/0 0/0 .text portal_demo6_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo6_init() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 801CA15C-801CA1E8 1C4A9C 008C+00 1/0 0/0 0/0 .text portal_demo6_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::portal_demo6_move() {
|
|
if (dMsgObject_getMsgObjectClass()->getStatus() == 0xe) {
|
|
dMsgObject_getMsgObjectClass()->setStatus(0x10);
|
|
talkButton();
|
|
} else if (dMsgObject_getMsgObjectClass()->getStatus() == 0x12) {
|
|
dMsgObject_getMsgObjectClass()->setStatus(0x13);
|
|
setProcess(PROC_PORTAL_DEMO5);
|
|
talkButton();
|
|
}
|
|
|
|
setFlash(mpDraw2DBack->getSpotCursor(), false);
|
|
}
|
|
|
|
/* 801CA1E8-801CA2F4 1C4B28 010C+00 1/0 0/0 0/0 .text yamiboss_demo1_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo1_init() {
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
setAreaName(mAreaName[mpDraw2DBack->getSpotCursor()]);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_RIGHT, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_LEFT, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0);
|
|
mpDraw2DTop->setCrossLRString(0);
|
|
dMsgObject_setTalkHeap(mpTalkHeap);
|
|
mMsgFlow.init(NULL, 3012, 0, NULL);
|
|
mZoomLevel = 10;
|
|
}
|
|
|
|
/* 801CA2F4-801CA34C 1C4C34 0058+00 1/0 0/0 0/0 .text yamiboss_demo1_move__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo1_move() {
|
|
talkButton();
|
|
mMsgFlow.doFlow(NULL, NULL, 0);
|
|
if (dMsgObject_getMessageID() >= 4015) {
|
|
setProcess(PROC_YAMIBOSS_DEMO2);
|
|
}
|
|
}
|
|
|
|
/* 801CA34C-801CA35C 1C4C8C 0010+00 1/0 0/0 0/0 .text yamiboss_demo2_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo2_init() {
|
|
mZoomLevel = 0;
|
|
field_0x30b = false;
|
|
}
|
|
|
|
/* 801CA35C-801CA40C 1C4C9C 00B0+00 1/0 0/0 0/0 .text yamiboss_demo2_move__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo2_move() {
|
|
if (dMsgObject_getMsgObjectClass()->getStatus() == 0xe) {
|
|
mZoomLevel++;
|
|
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x77])) {
|
|
if (mZoomLevel > 90) {
|
|
setProcess(PROC_YAMIBOSS_DEMO3);
|
|
}
|
|
} else {
|
|
if (mZoomLevel > 30) {
|
|
field_0x30b = true;
|
|
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x77]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CA40C-801CA410 1C4D4C 0004+00 1/0 0/0 0/0 .text yamiboss_demo3_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo3_init() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 801CA410-801CA468 1C4D50 0058+00 1/0 0/0 0/0 .text yamiboss_demo3_move__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo3_move() {
|
|
talkButton();
|
|
mMsgFlow.doFlow(NULL, NULL, 0);
|
|
if (dMsgObject_getMessageID() >= 4016) {
|
|
setProcess(PROC_YAMIBOSS_DEMO4);
|
|
}
|
|
}
|
|
|
|
/* 801CA468-801CA4C0 1C4DA8 0058+00 1/0 0/0 0/0 .text yamiboss_demo4_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo4_init() {
|
|
mZoomLevel = 0;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
|
|
/* 801CA4C0-801CA544 1C4E00 0084+00 1/0 0/0 0/0 .text yamiboss_demo4_move__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo4_move() {
|
|
mZoomLevel++;
|
|
field_0x1ec = (f32)mZoomLevel / 10.0f;
|
|
mpDraw2DBack->zoomMapCalc2(field_0x1ec);
|
|
if (mZoomLevel >= 10) {
|
|
setProcess(PROC_YAMIBOSS_DEMO5);
|
|
}
|
|
}
|
|
|
|
/* 801CA544-801CA548 1C4E84 0004+00 1/0 0/0 0/0 .text yamiboss_demo5_init__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo5_init() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 801CA548-801CA5CC 1C4E88 0084+00 1/0 0/0 0/0 .text yamiboss_demo5_move__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamiboss_demo5_move() {
|
|
if (field_0x30b && dMsgObject_getMessageID() >= 4018) {
|
|
field_0x30b = false;
|
|
}
|
|
talkButton();
|
|
if (mMsgFlow.doFlow(NULL, NULL, 0)) {
|
|
setProcess(PROC_SPOT_MAP);
|
|
mpDraw2DBack->onArrowDrawFlag();
|
|
}
|
|
}
|
|
|
|
/* 801CA5CC-801CA7A4 1C4F0C 01D8+00 1/0 0/0 0/0 .text light_demo1_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::light_demo1_init() {
|
|
mpDraw2DBack->zoomMapCalc2(1.0f);
|
|
mZoomLevel = -10;
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
setAreaName(mAreaName[mpDraw2DBack->getSpotCursor()]);
|
|
mpDraw2DTop->setBButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0);
|
|
mpDraw2DTop->setCrossLRString(0);
|
|
dMsgObject_setTalkHeap(mpTalkHeap);
|
|
field_0x1ec = 1.0f;
|
|
setTitleName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
setAreaName(mAreaName[mpDraw2DBack->getSpotCursor()]);
|
|
mStageCursor = mpDraw2DBack->getSpotCursor();
|
|
mpDraw2DBack->resetDrug();
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_UP, 0.0f);
|
|
mpDraw2DTop->setArrowAlphaRatio(dMenu_Fmap2DTop_c::ARROW_DOWN, 0.0f);
|
|
mpDraw2DTop->setBButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->setZButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DTop->set3DStickString(0);
|
|
mpDraw2DTop->setCrossLRString(0);
|
|
dMsgObject_setTalkHeap(mpTalkHeap);
|
|
mMsgFlow.init(NULL, 125, 0, NULL);
|
|
}
|
|
|
|
/* 801CA7A4-801CA7E0 1C50E4 003C+00 1/0 0/0 0/0 .text light_demo1_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::light_demo1_move() {
|
|
mZoomLevel++;
|
|
if (mZoomLevel > 0) {
|
|
setProcess(PROC_LIGHT_DEMO2);
|
|
}
|
|
}
|
|
|
|
/* 801CA7E0-801CA814 1C5120 0034+00 1/0 0/0 0/0 .text light_demo2_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::light_demo2_init() {
|
|
mMsgFlow.init(NULL, 125, 0, NULL);
|
|
}
|
|
|
|
/* 801CA814-801CA874 1C5154 0060+00 1/0 0/0 0/0 .text light_demo2_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::light_demo2_move() {
|
|
talkButton();
|
|
if (mMsgFlow.doFlow(NULL, NULL, 0)) {
|
|
setProcess(PROC_SPOT_MAP);
|
|
mpDraw2DBack->onArrowDrawFlag();
|
|
}
|
|
}
|
|
|
|
/* 801CA874-801CA9B4 1C51B4 0140+00 1/0 0/0 0/0 .text table_demo1_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::table_demo1_init() {
|
|
mZoomLevel = -10;
|
|
mpDraw2DBack->setRegionCursor(dMeter2Info_getTableMapRegionNo());
|
|
readWorldData(mpDraw2DBack->getRegionCursor() + 1);
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
dMenuFmapIconDisp_c icon;
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mpRegionData[i] != NULL && mpStageData[i] != NULL) {
|
|
int stay_no = dComIfGp_roomControl_getStayNo();
|
|
icon.init(mpRegionData[i], mpStageData[i], 5, mStayStageNo, stay_no);
|
|
|
|
while (!icon.getValidData()) {
|
|
if (icon.isDrawDisp()) {
|
|
f32 pos_x, pos_z;
|
|
int stage_no, room_no;
|
|
icon.getPosition(&stage_no, &room_no, &pos_x, &pos_z, NULL);
|
|
if (isRoomCheck(stage_no, room_no)) {
|
|
mpDraw2DBack->setArrowPosAxis(pos_x, pos_z);
|
|
}
|
|
}
|
|
if (icon.nextData()) break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CA9B4-801CAA78 1C52F4 00C4+00 1/0 0/0 0/0 .text table_demo1_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::table_demo1_move() {
|
|
mZoomLevel++;
|
|
if (mZoomLevel == 1) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
if (mZoomLevel > 0) {
|
|
mpDraw2DBack->zoomMapCalc((f32)mZoomLevel / 10.0f);
|
|
if (mZoomLevel >= 10) {
|
|
setProcess(PROC_TABLE_DEMO2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CAA78-801CAABC 1C53B8 0044+00 1/0 0/0 0/0 .text table_demo2_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::table_demo2_init() {
|
|
mZoomLevel = -10;
|
|
tableArrowPosInit(true);
|
|
mpDraw2DBack->zoomMapCalc2(0.0f);
|
|
}
|
|
|
|
/* 801CAABC-801CAB88 1C53FC 00CC+00 1/0 0/0 0/0 .text table_demo2_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::table_demo2_move() {
|
|
mZoomLevel++;
|
|
if (mZoomLevel == 1) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
if (mZoomLevel > 0) {
|
|
field_0x1ec = (f32)mZoomLevel / 10.0f;
|
|
mpDraw2DBack->zoomMapCalc2(field_0x1ec);
|
|
if (mZoomLevel >= 10) {
|
|
setProcess(PROC_TABLE_DEMO3);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CAB88-801CABD0 1C54C8 0048+00 1/0 0/0 0/0 .text table_demo3_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::table_demo3_init() {
|
|
dMsgObject_setTalkHeap(mpTalkHeap);
|
|
mMsgFlow.init(NULL, 1089, 0, NULL);
|
|
}
|
|
|
|
/* 801CABD0-801CAC30 1C5510 0060+00 1/0 0/0 0/0 .text table_demo3_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::table_demo3_move() {
|
|
talkButton();
|
|
if (mMsgFlow.doFlow(NULL, NULL, 0)) {
|
|
mpDraw2DBack->onArrowDrawFlag();
|
|
setProcess(PROC_SPOT_MAP);
|
|
}
|
|
}
|
|
|
|
/* 801CAC30-801CAC7C 1C5570 004C+00 1/0 0/0 0/0 .text howl_demo1_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howl_demo1_init() {
|
|
mZoomLevel = -10;
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
mpDraw2DBack->zoomMapCalc2(0.0f);
|
|
}
|
|
|
|
/* 801CAC7C-801CAD48 1C55BC 00CC+00 1/0 0/0 0/0 .text howl_demo1_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howl_demo1_move() {
|
|
mZoomLevel++;
|
|
if (mZoomLevel == 1) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMIN, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
if (mZoomLevel > 0) {
|
|
field_0x1ec = (f32)mZoomLevel / 10.0f;
|
|
mpDraw2DBack->zoomMapCalc2(field_0x1ec);
|
|
if (mZoomLevel >= 10) {
|
|
setProcess(PROC_HOWL_DEMO2);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CAD48-801CAD54 1C5688 000C+00 1/0 0/0 0/0 .text howl_demo2_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howl_demo2_init() {
|
|
mZoomLevel = -10;
|
|
}
|
|
|
|
/* 801CAD54-801CAD9C 1C5694 0048+00 1/0 0/0 0/0 .text howl_demo2_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howl_demo2_move() {
|
|
mZoomLevel++;
|
|
if (mZoomLevel > 0) {
|
|
mpDraw2DBack->onArrowDrawFlag();
|
|
setProcess(PROC_SPOT_MAP);
|
|
}
|
|
}
|
|
|
|
/* 801CAD9C-801CADA0 1C56DC 0004+00 1/0 0/0 0/0 .text howl_demo3_init__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howl_demo3_init() {
|
|
/* empty function */
|
|
}
|
|
|
|
/* 801CADA0-801CADC4 1C56E0 0024+00 1/0 0/0 0/0 .text howl_demo3_move__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howl_demo3_move() {
|
|
setProcess(PROC_REGION_MAP);
|
|
}
|
|
|
|
/* 801CADC4-801CB038 1C5704 0274+00 0/0 1/1 0/0 .text isOpen__12dMenu_Fmap_cFv */
|
|
bool dMenu_Fmap_c::isOpen() {
|
|
bool ret = false;
|
|
bool init = false;
|
|
|
|
if (!mpResArchive) {
|
|
if (!mpMountArchive) {
|
|
mpMountArchive = mDoDvdThd_mountArchive_c::create("/res/FieldMap/res-f.arc", 2, mpHeap);
|
|
}
|
|
|
|
if (mpMountArchive->sync()) {
|
|
mpResArchive = mpMountArchive->getArchive();
|
|
mpMountArchive->destroy();
|
|
mpMountArchive = NULL;
|
|
mpFmapMapRes = mpResArchive->getResource("dat/data.dat");
|
|
_create();
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
s16 display_frame_num = (s16)g_fmapHIO.mDisplayFrameNum;
|
|
s16 undisplay_frame_num = (s16)g_fmapHIO.mUndisplayFrameNum;
|
|
if (mDisplayFrame == 0) {
|
|
init = true;
|
|
}
|
|
mDisplayFrame++;
|
|
f32 ratio = (f32)mDisplayFrame / (f32)display_frame_num;
|
|
|
|
if (mPanDirection == 1) {
|
|
mTransX = (1.0f - ratio) * -608.0f;
|
|
mTransY = 0.0f;
|
|
} else if (mPanDirection == 3) {
|
|
mTransX = (1.0f - ratio) * 608.0f;
|
|
mTransY = 0.0f;
|
|
} else if (mPanDirection == 2) {
|
|
mTransX = 0.0f;
|
|
mTransY = (1.0f - ratio) * -448.0f;
|
|
} else if (mPanDirection == 0) {
|
|
mTransX = 0.0f;
|
|
mTransY = (1.0f - ratio) * 448.0f;
|
|
}
|
|
|
|
mAlphaRatio = ratio;
|
|
|
|
if (mDisplayFrame >= display_frame_num) {
|
|
mDisplayFrame = undisplay_frame_num;
|
|
mTransX = 0.0f;
|
|
mTransY = 0.0f;
|
|
mAlphaRatio = 1.0f;
|
|
ret = true;
|
|
}
|
|
|
|
mpDraw2DBack->setAllTrans(mTransX, mTransY);
|
|
mpDraw2DBack->setAllAlphaRate(mAlphaRatio, init);
|
|
mpDraw2DTop->setAllTrans(mTransX, mTransY);
|
|
mpDraw2DTop->setAllAlphaRate(mAlphaRatio, init);
|
|
mpDraw2DBack->setSpotTextureFadeAlpha(mSpotTextureFadeAlpha);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 801CB038-801CB1DC 1C5978 01A4+00 0/0 1/1 0/0 .text isClose__12dMenu_Fmap_cFv */
|
|
bool dMenu_Fmap_c::isClose() {
|
|
bool ret = true;
|
|
bool bVar2 = false;
|
|
|
|
s16 undisplay_frame_num = (s16)g_fmapHIO.mUndisplayFrameNum;
|
|
if (mDisplayFrame == undisplay_frame_num) {
|
|
bVar2 = true;
|
|
}
|
|
mDisplayFrame--;
|
|
f32 ratio = (f32)mDisplayFrame / (f32)undisplay_frame_num;
|
|
|
|
if (mDisplayFrame <= 0) {
|
|
mDisplayFrame = 0;
|
|
} else {
|
|
ret = false;
|
|
}
|
|
|
|
if (mPanDirection == 1) {
|
|
mTransX = (1.0f - ratio) * 608.0f;
|
|
mTransY = 0.0f;
|
|
} else if (mPanDirection == 3) {
|
|
mTransX = (1.0f - ratio) * -608.0f;
|
|
mTransY = 0.0f;
|
|
} else if (mPanDirection == 2) {
|
|
mTransX = 0.0f;
|
|
mTransY = (1.0f - ratio) * 448.0f;
|
|
} else if (mPanDirection == 0) {
|
|
mTransX = 0.0f;
|
|
mTransY = (1.0f - ratio) * -448.0f;
|
|
}
|
|
|
|
mAlphaRatio = ratio;
|
|
|
|
mpDraw2DBack->setAllTrans(mTransX, mTransY);
|
|
mpDraw2DBack->setAllAlphaRate(mAlphaRatio, bVar2);
|
|
mpDraw2DTop->setAllTrans(mTransX, mTransY);
|
|
mpDraw2DTop->setAllAlphaRate(mAlphaRatio, bVar2);
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 801CB1DC-801CB200 1C5B1C 0024+00 0/0 1/1 0/0 .text getProcess__12dMenu_Fmap_cFv */
|
|
u8 dMenu_Fmap_c::getProcess() {
|
|
if (g_fmapHIO.field_0x2f9) {
|
|
return mProcess;
|
|
}
|
|
return PROC_REGION_MAP;
|
|
}
|
|
|
|
/* 801CB200-801CB230 1C5B40 0030+00 0/0 1/1 0/0 .text getRegionCursor__12dMenu_Fmap_cFv
|
|
*/
|
|
u8 dMenu_Fmap_c::getRegionCursor() {
|
|
if (mpDraw2DBack != NULL && g_fmapHIO.field_0x2f9) {
|
|
return mpDraw2DBack->getRegionCursor();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 801CB230-801CB260 1C5B70 0030+00 0/0 1/1 0/0 .text getStageCursor__12dMenu_Fmap_cFv */
|
|
u8 dMenu_Fmap_c::getStageCursor() {
|
|
if (mpDraw2DBack != NULL && g_fmapHIO.field_0x2f9) {
|
|
return mpDraw2DBack->getSpotCursor();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 801CB260-801CB290 1C5BA0 0030+00 0/0 1/1 0/0 .text getStageTransX__12dMenu_Fmap_cFv */
|
|
f32 dMenu_Fmap_c::getStageTransX() {
|
|
if (mpDraw2DBack != NULL && g_fmapHIO.field_0x2f9) {
|
|
return mpDraw2DBack->getStageTransX();
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
/* 801CB290-801CB2C0 1C5BD0 0030+00 0/0 1/1 0/0 .text getStageTransZ__12dMenu_Fmap_cFv */
|
|
f32 dMenu_Fmap_c::getStageTransZ() {
|
|
if (mpDraw2DBack != NULL && g_fmapHIO.field_0x2f9) {
|
|
return mpDraw2DBack->getStageTransZ();
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
/* 801CB2C0-801CB570 1C5C00 02B0+00 4/4 0/0 0/0 .text isRoomCheck__12dMenu_Fmap_cFii */
|
|
bool dMenu_Fmap_c::isRoomCheck(int i_stageNo, int i_roomNo) {
|
|
if (!field_0x305) {
|
|
return false;
|
|
}
|
|
|
|
dMenuMapCommon_c::Stage_c* stage_data
|
|
= (dMenuMapCommon_c::Stage_c*)((int)mpFieldDat + mpFieldDat->mStageDataOffset);
|
|
dMenuMapCommon_c::Stage_c::data* stages = stage_data->mData;
|
|
u8 stage_no = 0;
|
|
int i = 0;
|
|
|
|
bool checked_data[100];
|
|
for (int j = 0; j < mDataNumMax; j++) {
|
|
checked_data[j] = false;
|
|
}
|
|
|
|
bool local_e0[64];
|
|
bool room_check[64];
|
|
char stage_name[8];
|
|
|
|
for (; i < mDataNumMax; i++) {
|
|
if (checked_data[i]) continue;
|
|
|
|
strcpy(stage_name, stages[i].mName);
|
|
|
|
for (int k = 0; k < 64; k++) {
|
|
local_e0[k] = false;
|
|
room_check[k] = false;
|
|
}
|
|
|
|
bool bVar1 = false;
|
|
|
|
for (int j = i; j < mDataNumMax; j++) {
|
|
if (strcmp(stages[j].mName, stage_name)) continue;
|
|
|
|
checked_data[j] = true;
|
|
|
|
if (stages[j].mRegionNo == mpDraw2DBack->getRegionCursor() + 1) {
|
|
if (stages[j].mRoomNo != 0xff) {
|
|
local_e0[stages[j].mRoomNo] = true;
|
|
room_check[stages[j].mRoomNo] = true;
|
|
if (!bVar1) {
|
|
bVar1 = true;
|
|
}
|
|
} else {
|
|
for (int k = 0; k < 64; k++) {
|
|
if (!local_e0[k]) {
|
|
room_check[k] = true;
|
|
}
|
|
}
|
|
if (!bVar1) {
|
|
bVar1 = true;
|
|
}
|
|
}
|
|
} else {
|
|
if (stages[j].mRoomNo != 0xff) {
|
|
local_e0[stages[j].mRoomNo] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bVar1) {
|
|
if (i_stageNo == stage_no && room_check[i_roomNo]) break;
|
|
stage_no++;
|
|
if (stage_no > i_stageNo) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
u8 region = mpDraw2DBack->getRegionCursor();
|
|
i = 0;
|
|
dMenuMapCommon_c::RoomData_c* room_data = mpRoomData[region];
|
|
for (; i < i_stageNo; i++) {
|
|
room_data = room_data->getNextData();
|
|
if (room_data == NULL) break;
|
|
}
|
|
|
|
if (room_data == NULL || i != i_stageNo) {
|
|
return false;
|
|
}
|
|
|
|
dMenuMapCommon_c::RoomData_c::data* room_data_data = room_data->getRoomData();
|
|
u8* rooms = room_data_data->mData;
|
|
for (int j = 0; j < room_data_data->mSize; j++) {
|
|
if (i_roomNo == rooms[j] && room_check[rooms[j]]) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/* 801CB570-801CB664 1C5EB0 00F4+00 2/2 0/0 0/0 .text checkStRoomData__12dMenu_Fmap_cFv
|
|
*/
|
|
u16 dMenu_Fmap_c::checkStRoomData() {
|
|
dMenu_Fmap_field_room_data_c* room_data
|
|
= (dMenu_Fmap_field_room_data_c*)((int)mpFieldDat + mpFieldDat->mRoomDataOffset);
|
|
dMenu_Fmap_field_room_data_c::data* data = room_data->mData;
|
|
int count = room_data->mCount;
|
|
for (int i = 0; i < count; i++) {
|
|
int offset = data->mCount + sizeof(dMenu_Fmap_field_room_data_c::data) - 1;
|
|
if (data->mCount % 2 == 0) {
|
|
offset += 1;
|
|
}
|
|
|
|
if (!strcmp(mStageName[mStageCursor], data->mStageName)) {
|
|
for (int j = 0; j < data->mCount; j++) {
|
|
if (mRoomCursor == data->mRoomNos[j]) {
|
|
mFlashRoomCount = data->mCount;
|
|
mFlashRooms = data->mRoomNos;
|
|
return data->mAreaName;
|
|
}
|
|
}
|
|
}
|
|
|
|
data = (dMenu_Fmap_field_room_data_c::data*)((int)data + offset);
|
|
}
|
|
|
|
mFlashRoomCount = 0;
|
|
mFlashRooms = NULL;
|
|
return -1;
|
|
}
|
|
|
|
/* 801CB664-801CB6D0 1C5FA4 006C+00 10/10 0/0 0/0 .text talkButton__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::talkButton() {
|
|
u16 status = dMsgObject_c::getStatus();
|
|
if (status == 5 || status == 0xf || status == 0x10) {
|
|
mpDraw2DTop->setAButtonString(0x408, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
} else {
|
|
mpDraw2DTop->setAButtonString(0, dMenu_Fmap2DTop_c::ALPHA_DEFAULT);
|
|
}
|
|
}
|
|
|
|
/* 801CB6D0-801CB6E0 1C6010 0010+00 31/31 0/0 0/0 .text setProcess__12dMenu_Fmap_cFUc */
|
|
void dMenu_Fmap_c::setProcess(u8 i_process) {
|
|
mPrevProcess = mProcess;
|
|
mProcess = i_process;
|
|
}
|
|
|
|
/* 801CB6E0-801CB770 1C6020 0090+00 10/10 0/0 0/0 .text setFlash__12dMenu_Fmap_cFUcb */
|
|
void dMenu_Fmap_c::setFlash(u8 i_stageNo, bool param_1) {
|
|
mpDraw2DBack->mapBlink(&field_0x210);
|
|
if (param_1) {
|
|
mpMenuFmapMap->setFlashOn(mpDraw2DBack->getRegionCursor() + 1, i_stageNo,
|
|
mFlashRooms, mFlashRoomCount);
|
|
} else {
|
|
mpMenuFmapMap->setFlashOn(mpDraw2DBack->getRegionCursor() + 1, i_stageNo, NULL, 0);
|
|
}
|
|
}
|
|
|
|
/* 801CB770-801CB938 1C60B0 01C8+00 6/6 0/0 0/0 .text readWorldData__12dMenu_Fmap_cFUc */
|
|
bool dMenu_Fmap_c::readWorldData(u8 i_regionNo) {
|
|
removeAreaData();
|
|
bool ret = false;
|
|
bool bVar1 = false;
|
|
|
|
if (mpDraw2DBack->getAllPathShowFlag()) {
|
|
for (int i = 0; i < 8; i++) {
|
|
if (i == i_regionNo - 1) {
|
|
if (readAreaData(i + 1, true)) {
|
|
ret = true;
|
|
bVar1 = true;
|
|
}
|
|
} else {
|
|
if (readAreaData(i + 1, false)) {
|
|
bVar1 = true;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (readAreaData(i_regionNo, true)) {
|
|
ret = true;
|
|
bVar1 = true;
|
|
}
|
|
}
|
|
|
|
dMenu_Fmap_region_data_c* region_data = NULL;
|
|
int head = -1;
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mpRegionData[i] != NULL) {
|
|
if (region_data == NULL) {
|
|
head = i;
|
|
region_data = mpRegionData[i];
|
|
region_data->setNextData(NULL);
|
|
} else {
|
|
region_data->setNextData(mpRegionData[i]);
|
|
region_data = mpRegionData[i];
|
|
region_data->setNextData(NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (head != -1 && mpWorldData == NULL) {
|
|
mpWorldData = new dMenu_Fmap_world_data_c(mpRegionData[head]);
|
|
mpDraw2DBack->setWorldPosMinMax(mpWorldData->getWorldMinX(), mpWorldData->getWorldMinZ(),
|
|
mpWorldData->getWorldMaxX(), mpWorldData->getWorldMaxZ());
|
|
}
|
|
|
|
if (bVar1) {
|
|
ResTIMG* img = mpMenuFmapMap->getResTIMGPointer();
|
|
if (img != NULL) {
|
|
mpDraw2DBack->setSpotPane(img);
|
|
}
|
|
field_0x305 = true;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 801CB938-801CBF04 1C6278 05CC+00 1/1 0/0 0/0 .text readAreaData__12dMenu_Fmap_cFUcb */
|
|
bool dMenu_Fmap_c::readAreaData(u8 i_regionNo, bool i_isSelectedRegion) {
|
|
if (field_0x305) {
|
|
return false;
|
|
}
|
|
|
|
bool checked_data[100];
|
|
bool local_e0[64];
|
|
char stage_name[8];
|
|
char tmp_stage_name[8];
|
|
|
|
dMenuMapCommon_c::Stage_c::data* stages
|
|
= ((dMenuMapCommon_c::Stage_c*)((int)mpFieldDat + mpFieldDat->mStageDataOffset))->mData;
|
|
u8 stage_no = 0;
|
|
dMenu_Fmap_stage_data_c* prev_stage_data = NULL;
|
|
dMenuMapCommon_c::RoomData_c* prev_room_data = NULL;
|
|
stage_name[7] = 0;
|
|
|
|
if (i_isSelectedRegion) {
|
|
mSpotNum = 0;
|
|
}
|
|
|
|
int i = 0;
|
|
int stage_index = 0;
|
|
|
|
for (int j = 0; j < mDataNumMax; j++) {
|
|
checked_data[j] = false;
|
|
}
|
|
|
|
if (i_isSelectedRegion) {
|
|
mStartStageNo = 0xff;
|
|
mStayStageNo = -1;
|
|
}
|
|
|
|
field_0x200 = 0;
|
|
|
|
for (; i < mDataNumMax; i++) {
|
|
if (checked_data[i]) continue;
|
|
|
|
strcpy(tmp_stage_name, mTmpStageName);
|
|
resetRoomDataBit();
|
|
if (i_isSelectedRegion) {
|
|
strcpy(mTmpStageName, stages[i].mName);
|
|
} else {
|
|
strcpy(mTmpStageName, tmp_stage_name);
|
|
}
|
|
strcpy(tmp_stage_name, stages[i].mName);
|
|
|
|
for (int k = 0; k < 64; k++) {
|
|
local_e0[k] = false;
|
|
}
|
|
|
|
bool bVar2 = false;
|
|
|
|
for (int j = i; j < mDataNumMax; j++) {
|
|
if (strcmp(stages[j].mName, tmp_stage_name)) continue;
|
|
|
|
checked_data[j] = true;
|
|
|
|
if (i_regionNo == stages[j].mRegionNo) {
|
|
if (stages[j].mRoomNo != 0xff) {
|
|
onRoomDataBit(stages[j].mRoomNo);
|
|
if (!bVar2) {
|
|
stage_index = j;
|
|
bVar2 = true;
|
|
}
|
|
} else {
|
|
for (int k = 0; k < 64; k++) {
|
|
if (!local_e0[k]) {
|
|
onRoomDataBit(k);
|
|
}
|
|
}
|
|
if (!bVar2) {
|
|
stage_index = j;
|
|
bVar2 = true;
|
|
}
|
|
}
|
|
} else {
|
|
if (stages[j].mRoomNo != 0xff) {
|
|
local_e0[stages[j].mRoomNo] = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bVar2) {
|
|
dMenu_Fmap_stage_data_c* stage_data = new dMenu_Fmap_stage_data_c();
|
|
if (mpStageData[i_regionNo - 1] == NULL) {
|
|
mpStageData[i_regionNo - 1] = stage_data;
|
|
} else {
|
|
prev_stage_data->setNextData(stage_data);
|
|
}
|
|
prev_stage_data = stage_data;
|
|
stage_data->setNextData(NULL);
|
|
stage_data->setStageCntNo(stage_no);
|
|
stage_data->setName(stages[stage_index].mName);
|
|
|
|
for (int j = 0; j < 8; j++) {
|
|
stage_name[j] = stages[stage_index].mName[j];
|
|
}
|
|
|
|
if (i_regionNo == dComIfGp_getNowLevel()) {
|
|
if (dComIfGs_isPlayerFieldLastStayFieldDataExistFlag()) {
|
|
if (!strcmp(dMenuFmap_getStartStageName(mpFieldDat), stage_name)) {
|
|
mpDraw2DBack->setSpotCursor(stage_no);
|
|
mStartStageNo = stage_no;
|
|
mStayStageNo = stage_no;
|
|
}
|
|
} else {
|
|
if (!strcmp(dComIfGs_getPlayerFieldLastStayName(), stage_name)) {
|
|
mpDraw2DBack->setSpotCursor(stage_no);
|
|
mStayStageNo = stage_no;
|
|
}
|
|
}
|
|
}
|
|
|
|
stage_data->setOffsetX(stages[stage_index].mOffsetX);
|
|
stage_data->setOffsetZ(stages[stage_index].mOffsetZ);
|
|
|
|
if (i_isSelectedRegion) {
|
|
mpDraw2DBack->setStageOriginXZ(mSpotNum, stages[stage_index].mOffsetX,
|
|
stages[stage_index].mOffsetZ);
|
|
mAreaName[mSpotNum] = stages[stage_index].mAreaName;
|
|
strcpy(mStageName[mSpotNum], stage_name);
|
|
mSpotNum++;
|
|
}
|
|
|
|
dMenuMapCommon_c::RoomData_c* room_data = new dMenuMapCommon_c::RoomData_c();
|
|
if (mpRoomData[i_regionNo - 1] == NULL) {
|
|
mpRoomData[i_regionNo - 1] = room_data;
|
|
} else {
|
|
prev_room_data->setNextData(room_data);
|
|
}
|
|
prev_room_data = room_data;
|
|
room_data->setNextData(NULL);
|
|
readRoomData(stage_name, stage_data, room_data, i_regionNo - 1,
|
|
stages[stage_index].mRoomNo);
|
|
|
|
stage_no++;
|
|
}
|
|
}
|
|
|
|
if (mpStageData[i_regionNo - 1] == NULL) {
|
|
return false;
|
|
}
|
|
|
|
if (mpRegionData[i_regionNo - 1] == NULL) {
|
|
mpRegionData[i_regionNo - 1] = new dMenu_Fmap_region_data_c(i_regionNo,
|
|
mpStageData[i_regionNo - 1],
|
|
mRegionOffsetX[i_regionNo - 1],
|
|
mRegionOffsetZ[i_regionNo - 1]);
|
|
}
|
|
|
|
if (i_regionNo - 1 == mpDraw2DBack->getRegionCursor()) {
|
|
for (int j = 0; j < mSpotNum; j++) {
|
|
mpDraw2DBack->setStageOriginPathXZ(j,
|
|
getNowFmapRegionData()->getStageCenterX_CoordWorld(j),
|
|
getNowFmapRegionData()->getStageCenterZ_CoordWorld(j));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 801CBF04-801CC094 1C6844 0190+00 1/1 0/0 0/0 .text
|
|
* readRoomData__12dMenu_Fmap_cFPCcP23dMenu_Fmap_stage_data_cPviUc */
|
|
bool dMenu_Fmap_c::readRoomData(char const* i_stageName, dMenu_Fmap_stage_data_c* i_stageData,
|
|
void* o_roomData, int i_regionNo, u8 param_4) {
|
|
dMenu_Fmap_room_data_c* prev_room_data = NULL;
|
|
i_stageData->setFmapRoomDataTop(NULL);
|
|
dMenu_Fmap_stage_arc_data_c* room_data = NULL;
|
|
|
|
char stage_path[20];
|
|
sprintf(stage_path, "%s/stage.dat", i_stageName);
|
|
if (readFieldMapData((void**)&room_data, stage_path, false, false)) {
|
|
((dMenuMapCommon_c::RoomData_c*)o_roomData)->setRoomData(room_data);
|
|
}
|
|
|
|
dMenu_Fmap_stage_arc_data_c* stage_arc = room_data;
|
|
u8* room_nos = room_data->mRoomNos;
|
|
i_stageData->setStageArc(stage_arc);
|
|
|
|
for (int i = 0; i < stage_arc->mSize; i++) {
|
|
if (isRoomDataBit(room_nos[i])) {
|
|
void* dzs_data = NULL;
|
|
|
|
char room_path[20];
|
|
sprintf(room_path, "%s/room%d.dzs", i_stageName, room_nos[i]);
|
|
|
|
if (readRoomDzsData(&dzs_data, 0x1500, room_path)) {
|
|
dMenu_Fmap_data_c* map_data = new dMenu_Fmap_data_c();
|
|
dMenu_Fmap_room_data_c* room_data
|
|
= new dMenu_Fmap_room_data_c(room_nos[i], i_stageData, map_data);
|
|
if (prev_room_data == NULL) {
|
|
i_stageData->setFmapRoomDataTop(room_data);
|
|
} else {
|
|
prev_room_data->setNextData(room_data);
|
|
}
|
|
prev_room_data = room_data;
|
|
map_data->setDzsData(dzs_data);
|
|
// this cast is nonsense but it ends up getting cast back anyway
|
|
dStage_dt_c_fieldMapLoader(dzs_data, (dStage_dt_c*)map_data);
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 801CC094-801CC284 1C69D4 01F0+00 3/3 0/0 0/0 .text readFieldMapData__12dMenu_Fmap_cFPPvPCcbb */
|
|
bool dMenu_Fmap_c::readFieldMapData(void** o_data, char const* i_path, bool param_2,
|
|
bool param_3) {
|
|
u32 size;
|
|
if (mpMapArchive != dComIfGp_getFieldMapArchive2()) {
|
|
if (param_3) {
|
|
void* res = mpResArchive->getResource(i_path);
|
|
mpResArchive->getExpandedResSize(res);
|
|
*o_data = res;
|
|
return true;
|
|
} else {
|
|
void* res = mpMapArchive->getResource(i_path);
|
|
size = mpMapArchive->getExpandedResSize(res);
|
|
mpMapArchive->removeResource(res);
|
|
}
|
|
} else {
|
|
if (param_3) {
|
|
void* res = mpResArchive->getResource(i_path);
|
|
mpResArchive->getExpandedResSize(res);
|
|
*o_data = res;
|
|
return true;
|
|
} else {
|
|
size = dLib_getExpandSizeFromAramArchive(mpMapArchive, i_path);
|
|
}
|
|
}
|
|
|
|
if (param_2) {
|
|
if (mpMapArchive != dComIfGp_getFieldMapArchive2()) {
|
|
*o_data = mpHeap->alloc(size, 0x20);
|
|
} else {
|
|
*o_data = mpMapArchive->getResource(i_path);
|
|
return true;
|
|
}
|
|
} else {
|
|
*o_data = mpHeap->alloc(size, 0x20);
|
|
}
|
|
|
|
u32 read_size = mpMapArchive->readResource(*o_data, size, i_path);
|
|
|
|
if (param_2) {
|
|
DCStoreRangeNoSync(*o_data, size);
|
|
}
|
|
|
|
if (read_size == 0) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* 801CC2B0-801CC4EC 1C6BF0 023C+00 1/1 0/0 0/0 .text decodeFieldMapData__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::decodeFieldMapData() {
|
|
int field_data = (int)mpFieldDat;
|
|
dMenu_Fmap_field_region_data_c* region_data
|
|
= (dMenu_Fmap_field_region_data_c*)(field_data + mpFieldDat->mRegionDataOffset);
|
|
dMenuMapCommon_c::Stage_c* stage_data
|
|
= (dMenuMapCommon_c::Stage_c*)(field_data + mpFieldDat->mStageDataOffset);
|
|
mDataNumMax = stage_data->mCount;
|
|
mAllTitleName = *(u16*)(field_data + 0x16);
|
|
setTitleName(mAllTitleName);
|
|
dMenu_Fmap_field_region_data_c::data* regions = region_data->mData;
|
|
char tex_path[20];
|
|
|
|
for (int i = 0; i < region_data->mCount; i++) {
|
|
mpDraw2DBack->setRegionTextureReadNum(i, regions[i].mTextureReadNum);
|
|
|
|
for (int j = 0; j < 8; j++) {
|
|
if (j + 1 == regions[i].mTextureReadNum) {
|
|
bool local_3f = false;
|
|
if (j == 7) {
|
|
local_3f = true;
|
|
sprintf(tex_path, "tex/region8.bti");
|
|
} else {
|
|
sprintf(tex_path, "tex/region%d.bti", regions[i].mTextureReadNum);
|
|
}
|
|
|
|
if (readFieldMapData((void**)&mRegionTexture[j], tex_path, true, local_3f)) {
|
|
if (!g_fmapHIO.mRegionImageDebug) {
|
|
mpDraw2DBack->setRegionTexData(j, mRegionTexture[j],
|
|
regions[i].mOriginX, regions[i].mOriginZ,
|
|
regions[i].field_0xc, regions[i].field_0x10,
|
|
regions[i].field_0x14, regions[i].field_0x18,
|
|
regions[i].field_0x20, regions[i].field_0x1c,
|
|
regions[i].field_0x24);
|
|
} else {
|
|
mpDraw2DBack->setRegionTexData(j, mRegionTexture[j],
|
|
regions[i].mOriginX, regions[i].mOriginZ,
|
|
g_fmapHIO.mRegionImagePosX[i] + regions[i].field_0xc,
|
|
g_fmapHIO.mRegionImagePosZ[i] + regions[i].field_0x10,
|
|
g_fmapHIO.mRegionImageScale[i] + regions[i].field_0x14,
|
|
regions[i].field_0x18, regions[i].field_0x20,
|
|
regions[i].field_0x1c, regions[i].field_0x24);
|
|
}
|
|
|
|
mTitleName[j] = regions[i].mTitleName;
|
|
mRegionOffsetX[j] = regions[i].mOriginX;
|
|
mRegionOffsetZ[j] = regions[i].mOriginZ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
mpDraw2DBack->calcDrawPriority();
|
|
mpDraw2DBack->calcAllMapPos();
|
|
mpDraw2DBack->setStageData(stage_data, mDataNumMax);
|
|
setAreaName(mTitleName[mpDraw2DBack->getRegionCursor()]);
|
|
}
|
|
|
|
/* 801CC4EC-801CC51C 1C6E2C 0030+00 1/1 0/0 0/0 .text decodePortalData__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::decodePortalData() {
|
|
dMenu_Fmap_portal_data_c* portal_dat = mpPortalDat;
|
|
if (g_fmapHIO.mPortalDataTerminalOutput) {
|
|
for (int i = 0; i < portal_dat->mCount; i++) {}
|
|
}
|
|
}
|
|
|
|
/* 801CC51C-801CC61C 1C6E5C 0100+00 1/1 0/0 0/0 .text readRoomDzsData__12dMenu_Fmap_cFPPvUlPCc */
|
|
bool dMenu_Fmap_c::readRoomDzsData(void** i_data, u32 param_1, char const* i_path) {
|
|
void* res;
|
|
char* path = const_cast<char*>(i_path);
|
|
u32 size;
|
|
if (mpMapArchive != dComIfGp_getFieldMapArchive2()) {
|
|
res = mpMapArchive->getResource(path);
|
|
size = mpMapArchive->getExpandedResSize(res);
|
|
mpMapArchive->removeResource(res);
|
|
} else {
|
|
size = dLib_getExpandSizeFromAramArchive(mpMapArchive, path);
|
|
}
|
|
|
|
*i_data = mpHeap->alloc(size, 0x20);
|
|
u32 read_size = mpMapArchive->readResource(*i_data, size, path);
|
|
if (read_size == 0) {
|
|
return false;
|
|
} else {
|
|
field_0x200 += read_size;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
/* 801CC61C-801CC7A8 1C6F5C 018C+00 4/4 0/0 0/0 .text removeAreaData__12dMenu_Fmap_cFv */
|
|
bool dMenu_Fmap_c::removeAreaData() {
|
|
if (!field_0x305) {
|
|
return true;
|
|
}
|
|
|
|
if (mpWorldData != NULL) {
|
|
if (mpWorldData != NULL) {
|
|
delete mpWorldData;
|
|
}
|
|
mpWorldData = NULL;
|
|
}
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
if (mpRegionData[i] != NULL) {
|
|
if (mpRegionData[i] != NULL) {
|
|
delete mpRegionData[i];
|
|
}
|
|
mpRegionData[i] = NULL;
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
dMenu_Fmap_stage_data_c* stage_data = mpStageData[i];
|
|
while (stage_data != NULL) {
|
|
dMenu_Fmap_stage_data_c* next_data = stage_data->getNextData();
|
|
removeRoomData(stage_data);
|
|
if (stage_data != NULL) {
|
|
delete stage_data;
|
|
}
|
|
stage_data = next_data;
|
|
}
|
|
|
|
dMenuMapCommon_c::RoomData_c* room_data = mpRoomData[i];
|
|
while (room_data != NULL) {
|
|
dMenuMapCommon_c::RoomData_c* next_data = room_data->getNextData();
|
|
dMenuMapCommon_c::RoomData_c::data* data = room_data->getRoomData();
|
|
if (data != NULL) {
|
|
mpHeap->free(data);
|
|
}
|
|
delete room_data;
|
|
room_data = next_data;
|
|
}
|
|
}
|
|
|
|
mpDraw2DBack->deleteSpotPane();
|
|
|
|
mpWorldData = NULL;
|
|
for (int i = 0; i < 8; i++) {
|
|
mpRegionData[i] = NULL;
|
|
mpStageData[i] = NULL;
|
|
mpRoomData[i] = NULL;
|
|
}
|
|
|
|
for (int i = 0; i < 20; i++) {
|
|
strcpy(mStageName[i], "");
|
|
}
|
|
|
|
field_0x305 = false;
|
|
return true;
|
|
}
|
|
|
|
/* 801CC7A8-801CC85C 1C70E8 00B4+00 1/1 0/0 0/0 .text
|
|
* removeRoomData__12dMenu_Fmap_cFP23dMenu_Fmap_stage_data_c */
|
|
bool dMenu_Fmap_c::removeRoomData(dMenu_Fmap_stage_data_c* i_stageData) {
|
|
dMenu_Fmap_room_data_c* room_data = i_stageData->getFmapRoomDataTop();
|
|
while (room_data != NULL) {
|
|
dMenu_Fmap_room_data_c* next_data = room_data->getNextData();
|
|
dMenu_Fmap_data_c* fmap_data = room_data->getFmapData();
|
|
void* dzs_data = fmap_data->getDzsData();
|
|
if (dzs_data != NULL) {
|
|
mpHeap->free(dzs_data);
|
|
}
|
|
if (fmap_data != NULL) {
|
|
delete fmap_data;
|
|
}
|
|
delete room_data;
|
|
room_data = next_data;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 801CC85C-801CC880 1C719C 0024+00 11/11 0/0 0/0 .text setTitleName__12dMenu_Fmap_cFUl
|
|
*/
|
|
void dMenu_Fmap_c::setTitleName(u32 i_msgIndex) {
|
|
mpDraw2DTop->setTitleNameString(i_msgIndex);
|
|
}
|
|
|
|
/* 801CC880-801CC8AC 1C71C0 002C+00 13/13 0/0 0/0 .text setAreaName__12dMenu_Fmap_cFUl */
|
|
void dMenu_Fmap_c::setAreaName(u32 i_msgIndex) {
|
|
mAreaNameSet = true;
|
|
mpDraw2DTop->setAreaNameString(i_msgIndex);
|
|
}
|
|
|
|
/* 801CC8AC-801CC8DC 1C71EC 0030+00 8/8 0/0 0/0 .text setAreaNameZero__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::setAreaNameZero() {
|
|
mAreaNameSet = false;
|
|
mpDraw2DTop->setAreaNameString(0);
|
|
}
|
|
|
|
/* 801CC8DC-801CCA70 1C721C 0194+00 2/2 0/0 0/0 .text
|
|
* portalWarpMapMove__12dMenu_Fmap_cFP9STControl */
|
|
void dMenu_Fmap_c::portalWarpMapMove(STControl* i_stick) {
|
|
mpDraw2DBack->regionMapMove(i_stick);
|
|
dMenu_Fmap_portal_data_c* portal_dat = mpPortalDat;
|
|
dMenu_Fmap_portal_data_c::data* portals = portal_dat->mData;
|
|
f32 arrow_x = mpDraw2DBack->getArrowPos2DX();
|
|
f32 arrow_y = mpDraw2DBack->getArrowPos2DY();
|
|
u8 uVar6 = 0xff;
|
|
|
|
for (int i = 0; i < portal_dat->mCount; i++) {
|
|
if (portals[i].mRegionNo == mpDraw2DBack->getRegionCursor() + 1
|
|
&& checkDrawPortalIcon(portals[i].mStageNo, portals[i].mSwitchNo))
|
|
{
|
|
f32 pos_x, pos_y;
|
|
mpDraw2DBack->calcAllMapPos2D(portals[i].mPosition.x, portals[i].mPosition.z,
|
|
&pos_x, &pos_y);
|
|
if ((pos_x - arrow_x) * (pos_x - arrow_x)
|
|
+ (pos_y - arrow_y) * (pos_y - arrow_y) <= 500.0f) {
|
|
uVar6 = i;
|
|
setAreaName(portals[uVar6].mMessageID);
|
|
u8 stage = searchPortalStageID(const_cast<char*>(portals[uVar6].mStageName));
|
|
if (stage != 0xff) {
|
|
mpDraw2DBack->setSpotCursor(stage);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (uVar6 != 0xff) {
|
|
if (uVar6 != mPortalNo) {
|
|
Z2GetAudioMgr()->seStart(Z2SE_WARP_MAP_CURSOR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
|
|
}
|
|
mPortalNo = uVar6;
|
|
}
|
|
}
|
|
|
|
/* 801CCA70-801CCA98 1C73B0 0028+00 1/1 0/0 0/0 .text onRoomDataBit__12dMenu_Fmap_cFi */
|
|
void dMenu_Fmap_c::onRoomDataBit(int i_bit) {
|
|
mRoomDataBits[i_bit >> 5] |= 1 << (i_bit & 0x1f);
|
|
}
|
|
|
|
/* 801CCA98-801CCAC4 1C73D8 002C+00 1/1 0/0 0/0 .text isRoomDataBit__12dMenu_Fmap_cFi */
|
|
BOOL dMenu_Fmap_c::isRoomDataBit(int i_bit) {
|
|
return (mRoomDataBits[i_bit >> 5] & 1 << (i_bit & 0x1f)) ? TRUE : FALSE;
|
|
}
|
|
|
|
/* 801CCAC4-801CCB08 1C7404 0044+00 2/2 0/0 0/0 .text resetRoomDataBit__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::resetRoomDataBit() {
|
|
for (int i = 0; i < 2; i++) {
|
|
mRoomDataBits[i] = 0;
|
|
}
|
|
|
|
for (int i = 0; i < 8; i++) {
|
|
mTmpStageName[i] = '\0';
|
|
}
|
|
}
|
|
|
|
/* 801CCB08-801CCD98 1C7448 0290+00 2/2 0/0 0/0 .text drawIcon__12dMenu_Fmap_cFfb */
|
|
void dMenu_Fmap_c::drawIcon(f32 param_0, bool param_1) {
|
|
if (mpDraw2DBack->getRegionCursor() + 1 == dComIfGp_getNowLevel()) {
|
|
drawPlayEnterIcon();
|
|
}
|
|
|
|
cXyz pos;
|
|
s16 angle;
|
|
char stage_name[8];
|
|
if (dComIfGs_isPlayerFieldLastStayFieldDataExistFlag()) {
|
|
fopAc_ac_c* player = daPy_getPlayerActorClass();
|
|
pos.set(dMapInfo_n::getMapPlayerPos());
|
|
angle = player->shape_angle.y;
|
|
strcpy(stage_name, dMenuFmap_getStartStageName(mpFieldDat));
|
|
} else {
|
|
pos = dComIfGs_getPlayerFieldLastStayPos();
|
|
angle = dComIfGs_getPlayerFieldLastStayAngleY();
|
|
strcpy(stage_name, dComIfGs_getPlayerFieldLastStayName());
|
|
}
|
|
|
|
u8 is_portal_demo1 = 0;
|
|
if (mProcess == PROC_PORTAL_DEMO1) {
|
|
is_portal_demo1 = 1;
|
|
}
|
|
mpDraw2DBack->setIcon2DPos(0x11, stage_name, pos.x, pos.z, cM_sht2d(angle),
|
|
is_portal_demo1, param_1);
|
|
|
|
if (!param_1) {
|
|
if (mIsWarpMap == true && mpPortalDat != NULL) {
|
|
dMenu_Fmap_portal_data_c* portal_dat = mpPortalDat;
|
|
dMenu_Fmap_portal_data_c::data* portals = portal_dat->mData;
|
|
for (int i = 0; i < portal_dat->mCount; i++) {
|
|
if (checkDrawPortalIcon(portals[i].mStageNo, portals[i].mSwitchNo)) {
|
|
u8 region = mpDraw2DBack->getRegionCursor();
|
|
u8 cVar2 = portals[i].mRegionNo - 1;
|
|
if ((mProcess != PROC_PORTAL_WARP_FORBID && mProcess >= PROC_REGION_MAP)
|
|
|| (mProcess == PROC_PORTAL_WARP_FORBID && mPrevProcess != PROC_ALL_MAP))
|
|
{
|
|
if (cVar2 == region) {
|
|
mpDraw2DBack->setIcon2DPos(1, portals[i].mPosition.x,
|
|
portals[i].mPosition.z, 0.0f, 0, false);
|
|
if (mPortalNo == i) {
|
|
mpDraw2DBack->setIcon2DPos(0, portals[i].mPosition.x,
|
|
portals[i].mPosition.z, 0.0f, 0, false);
|
|
}
|
|
}
|
|
} else {
|
|
mpDraw2DBack->setIcon2DPos(1, portals[i].mPosition.x,
|
|
portals[i].mPosition.z, 0.0f, 0, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((mProcess != PROC_PORTAL_WARP_FORBID && mProcess >= PROC_REGION_MAP)
|
|
|| (mProcess == PROC_PORTAL_WARP_FORBID && mPrevProcess != PROC_ALL_MAP))
|
|
{
|
|
drawLightDropIcon();
|
|
drawBatsumarkIcon();
|
|
drawEnterIcon();
|
|
drawSnowmanIcon();
|
|
drawGoldWolfIcon();
|
|
drawCoachIcon();
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CCD98-801CCDDC 1C76D8 0044+00 1/1 0/0 0/0 .text drawLightDropIcon__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::drawLightDropIcon() {
|
|
if (isLightVesselGet()) {
|
|
drawIcon(4, 5);
|
|
}
|
|
}
|
|
|
|
/* 801CCDDC-801CCE04 1C771C 0028+00 1/1 0/0 0/0 .text drawBatsumarkIcon__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::drawBatsumarkIcon() {
|
|
drawIcon(5, 0x12);
|
|
}
|
|
|
|
/* 801CCE04-801CCE48 1C7744 0044+00 1/1 0/0 0/0 .text drawSnowmanIcon__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::drawSnowmanIcon() {
|
|
drawIcon(0xd, 9);
|
|
drawIcon(0xe, 0xa);
|
|
}
|
|
|
|
/* 801CCE48-801CCE70 1C7788 0028+00 1/1 0/0 0/0 .text drawGoldWolfIcon__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::drawGoldWolfIcon() {
|
|
drawIcon(6, 0xb);
|
|
}
|
|
|
|
/* 801CCE70-801CCE98 1C77B0 0028+00 1/1 0/0 0/0 .text drawCoachIcon__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::drawCoachIcon() {
|
|
drawIcon(0xa, 0xd);
|
|
}
|
|
|
|
/* 801CCE98-801CCFB0 1C77D8 0118+00 1/1 0/0 0/0 .text drawPlayEnterIcon__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::drawPlayEnterIcon() {
|
|
cXyz pos;
|
|
s16 angle;
|
|
char stage_name[8];
|
|
|
|
if (isRoomCheck(mStayStageNo, dComIfGp_getStartStageRoomNo())) {
|
|
if (dComIfGs_isPlayerFieldLastStayFieldDataExistFlag()) {
|
|
pos.set(dMapInfo_n::getMapRestartPos());
|
|
angle = dComIfGs_getRestartRoomAngleY();
|
|
strcpy(stage_name, dMenuFmap_getStartStageName(mpFieldDat));
|
|
} else {
|
|
pos = dComIfGs_getPlayerFieldLastStayPos();
|
|
angle = dComIfGs_getPlayerFieldLastStayAngleY();
|
|
strcpy(stage_name, dComIfGs_getPlayerFieldLastStayName());
|
|
}
|
|
mpDraw2DBack->setIcon2DPos(0x15, stage_name, pos.x, pos.z, cM_sht2d(angle), 0, false);
|
|
}
|
|
}
|
|
|
|
/* 801CCFB0-801CD000 1C78F0 0050+00 3/3 0/0 0/0 .text checkDrawPortalIcon__12dMenu_Fmap_cFii */
|
|
bool dMenu_Fmap_c::checkDrawPortalIcon(int i_stageNo, int i_switchNo) {
|
|
if (g_fmapHIO.mAllRegionsUnlocked) {
|
|
return true;
|
|
}
|
|
return dComIfGs_isStageSwitch(i_stageNo, i_switchNo);
|
|
}
|
|
|
|
/* 801CD000-801CD10C 1C7940 010C+00 3/3 0/0 0/0 .text searchIcon__12dMenu_Fmap_cFUciPfPf
|
|
*/
|
|
bool dMenu_Fmap_c::searchIcon(u8 i_typeGroupNo, int i_swBit, f32* o_posX, f32* o_posZ) {
|
|
dMenuFmapIconDisp_c icon;
|
|
dMenu_Fmap_stage_data_c* stage_data;
|
|
int tmp_r26;
|
|
s32 stay_no;
|
|
bool ret = false;
|
|
stay_no = dComIfGp_roomControl_getStayNo();
|
|
tmp_r26 = mStayStageNo;
|
|
stage_data = getNowFmapStageData();
|
|
dMenu_Fmap_region_data_c* region_data = getNowFmapRegionData();
|
|
icon.init(region_data, stage_data, i_typeGroupNo, tmp_r26, stay_no);
|
|
// icon.init(getNowFmapRegionData(), getNowFmapStageData(), i_typeGroupNo,
|
|
// mStayStageNo, dComIfGp_roomControl_getStayNo());
|
|
|
|
while (!icon.getValidData()) {
|
|
if (icon.isDrawDisp()) {
|
|
int stage_no, room_no;
|
|
const dTres_c::data_s* tres_data;
|
|
icon.getPosition(&stage_no, &room_no, o_posX, o_posZ, &tres_data);
|
|
if (isRoomCheck(stage_no, room_no) && tres_data->mSwBit == i_swBit) {
|
|
ret = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (icon.nextData()) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 801CD10C-801CD210 1C7A4C 0104+00 6/6 0/0 0/0 .text drawIcon__12dMenu_Fmap_cFUci */
|
|
void dMenu_Fmap_c::drawIcon(u8 i_typeGroupNo, int param_1) {
|
|
dMenuFmapIconDisp_c icon;
|
|
dMenu_Fmap_stage_data_c* stage_data;
|
|
int tmp_r30;
|
|
s32 stay_no = dComIfGp_roomControl_getStayNo();
|
|
tmp_r30 = mStayStageNo;
|
|
stage_data = getNowFmapStageData();
|
|
dMenu_Fmap_region_data_c* region_data = getNowFmapRegionData();
|
|
icon.init(region_data, stage_data, i_typeGroupNo, tmp_r30, stay_no);
|
|
// icon.init(getNowFmapRegionData(), getNowFmapStageData(), i_typeGroupNo,
|
|
// mStayStageNo, dComIfGp_roomControl_getStayNo());
|
|
|
|
while (!icon.getValidData()) {
|
|
if (icon.isDrawDisp()) {
|
|
f32 pos_x, pos_z;
|
|
int stage_no, room_no;
|
|
icon.getPosition(&stage_no, &room_no, &pos_x, &pos_z, NULL);
|
|
if (isRoomCheck(stage_no, room_no)) {
|
|
mpDraw2DBack->setIcon2DPos(param_1, pos_x, pos_z, 0.0f, 0, false);
|
|
}
|
|
}
|
|
|
|
if (icon.nextData()) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CD210-801CD254 1C7B50 0044+00 1/1 0/0 0/0 .text drawEnterIcon__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::drawEnterIcon() {
|
|
drawIcon(1, 0x14);
|
|
drawIcon(8, 0x16);
|
|
}
|
|
|
|
/* 801CD254-801CD2FC 1C7B94 00A8+00 1/1 0/0 0/0 .text drawPortalIcon__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::drawPortalIcon() {
|
|
if (mIsWarpMap == true && mpPortalDat != NULL) {
|
|
dMenu_Fmap_portal_data_c* portal_dat = mpPortalDat;
|
|
dMenu_Fmap_portal_data_c::data* portals = portal_dat->mData;
|
|
for (int i = 0; i < portal_dat->mCount; i++) {
|
|
if (checkDrawPortalIcon(portals[i].mStageNo, portals[i].mSwitchNo)) {
|
|
mpDraw2DBack->setIcon2DPos(1, portals[i].mPosition.x, portals[i].mPosition.z,
|
|
0.0f, 0, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 801CD2FC-801CD350 1C7C3C 0054+00 1/1 0/0 0/0 .text getRegionStageNum__12dMenu_Fmap_cFi
|
|
*/
|
|
u8 dMenu_Fmap_c::getRegionStageNum(int param_0) {
|
|
if (mpFieldDat != NULL) {
|
|
dMenu_Fmap_field_region_data_c* region_data
|
|
= (dMenu_Fmap_field_region_data_c*)((int)mpFieldDat + mpFieldDat->mRegionDataOffset);
|
|
dMenu_Fmap_field_region_data_c::data* regions = region_data->mData;
|
|
for (int i = 0; i < region_data->mCount; i++) {
|
|
if (param_0 == regions[i].mTextureReadNum) {
|
|
return regions[i].field_0x1;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 801CD350-801CD368 1C7C90 0018+00 6/6 0/0 0/0 .text getNowFmapRegionData__12dMenu_Fmap_cFv */
|
|
dMenu_Fmap_region_data_c* dMenu_Fmap_c::getNowFmapRegionData() {
|
|
return mpRegionData[mpDraw2DBack->getRegionCursor()];
|
|
}
|
|
|
|
/* 801CD368-801CD380 1C7CA8 0018+00 2/2 0/0 0/0 .text getNowFmapStageData__12dMenu_Fmap_cFv */
|
|
dMenu_Fmap_stage_data_c* dMenu_Fmap_c::getNowFmapStageData() {
|
|
return mpStageData[mpDraw2DBack->getRegionCursor()];
|
|
}
|
|
|
|
/* 801CD380-801CD3F0 1C7CC0 0070+00 1/1 0/0 0/0 .text searchPortalStageID__12dMenu_Fmap_cFPc */
|
|
u8 dMenu_Fmap_c::searchPortalStageID(char* param_0) {
|
|
for (int i = 0; i < 20; i++) {
|
|
if (!strcmp(param_0, mStageName[i])) {
|
|
return i;
|
|
}
|
|
}
|
|
return 0xff;
|
|
}
|
|
|
|
/* 801CD3F0-801CD460 1C7D30 0070+00 1/1 0/0 0/0 .text drawDebugStage__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::drawDebugStage() {
|
|
if (mProcess != PROC_ALL_MAP) {
|
|
mpDraw2DBack->setDebugData(mpMenuFmapMap, getNowFmapRegionData(), mStayStageNo);
|
|
} else {
|
|
mpDraw2DBack->setDebugData(NULL, NULL, 0);
|
|
}
|
|
}
|
|
|
|
/* 801CD460-801CD5CC 1C7DA0 016C+00 1/1 0/0 0/0 .text arrowPosInit__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::arrowPosInit() {
|
|
if (mProcess == PROC_TABLE_DEMO1) {
|
|
tableArrowPosInit(false);
|
|
} else if (mProcess == PROC_HOWL_DEMO1) {
|
|
howlArrowPosInit();
|
|
} else if (mpDraw2DBack->getRegionCursor() + 1 == dComIfGp_getNowLevel()) {
|
|
cXyz pos;
|
|
char stage_name[8];
|
|
if (dComIfGs_isPlayerFieldLastStayFieldDataExistFlag()) {
|
|
pos.set(dMapInfo_n::getMapPlayerPos());
|
|
strcpy(stage_name, dMenuFmap_getStartStageName(mpFieldDat));
|
|
} else {
|
|
pos = dComIfGs_getPlayerFieldLastStayPos();
|
|
strcpy(stage_name, dComIfGs_getPlayerFieldLastStayName());
|
|
}
|
|
|
|
f32 fVar1 = 0.0f;
|
|
if (mProcess == PROC_LIGHT_DEMO1) {
|
|
f32 pos1_x, pos2_x, pos1_z, pos2_z;
|
|
mpDraw2DBack->calcAllMapPosWorld(0.0f, 0.0f, &pos2_x, &pos2_z);
|
|
mpDraw2DBack->calcAllMapPosWorld(0.0f, -50.0f, &pos1_x, &pos1_z);
|
|
fVar1 = pos1_z - pos2_z;
|
|
}
|
|
|
|
mpDraw2DBack->setArrowPos3D(mpDraw2DBack->getRegionCursor(), stage_name,
|
|
pos.x, pos.z + fVar1);
|
|
} else {
|
|
mpDraw2DBack->setArrowPos3D(mpDraw2DBack->getRegionCursor(), NULL,
|
|
mpDraw2DBack->getRegionOriginX(mpDraw2DBack->getRegionCursor()),
|
|
mpDraw2DBack->getRegionOriginZ(mpDraw2DBack->getRegionCursor()));
|
|
}
|
|
}
|
|
|
|
/* 801CD5CC-801CD770 1C7F0C 01A4+00 2/2 0/0 0/0 .text tableArrowPosInit__12dMenu_Fmap_cFb
|
|
*/
|
|
void dMenu_Fmap_c::tableArrowPosInit(bool param_0) {
|
|
int iVar5 = -1;
|
|
int swbit;
|
|
switch (dMeter2Info_getTableMapRegionNo()) {
|
|
case dMeter_fmapHIO_c::REGION_LANAYRU:
|
|
if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x169])
|
|
|| !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x67]))
|
|
{
|
|
iVar5 = 0;
|
|
if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x108])) {
|
|
swbit = 0x4f;
|
|
} else {
|
|
swbit = 0x33;
|
|
}
|
|
} else {
|
|
iVar5 = 1;
|
|
swbit = 0x2a;
|
|
}
|
|
break;
|
|
case dMeter_fmapHIO_c::REGION_ELDIN:
|
|
iVar5 = 2;
|
|
swbit = 0x55;
|
|
break;
|
|
case dMeter_fmapHIO_c::REGION_FARON:
|
|
iVar5 = 3;
|
|
swbit = 0x5f;
|
|
break;
|
|
}
|
|
|
|
static char* stage_name[4] = {"F_SP115", "F_SP113", "F_SP109", "F_SP108"};
|
|
strcpy(mMarkedStageName, stage_name[iVar5]);
|
|
|
|
if (param_0) {
|
|
f32 pos1_x, pos2_x, pos1_z, pos2_z, icon_x, icon_z;
|
|
searchIcon(5, swbit, &icon_x, &icon_z);
|
|
mpDraw2DBack->calcAllMapPosWorld(0.0f, 0.0f, &pos2_x, &pos2_z);
|
|
mpDraw2DBack->calcAllMapPosWorld(0.0f, -20.0f, &pos1_x, &pos1_z);
|
|
mpDraw2DBack->setArrowPosAxis(icon_x, icon_z + (pos1_z - pos2_z));
|
|
} else {
|
|
mpDraw2DBack->setArrowPos3D(mpDraw2DBack->getRegionCursor(), mMarkedStageName,
|
|
mpDraw2DBack->getRegionOriginX(mpDraw2DBack->getRegionCursor()),
|
|
mpDraw2DBack->getRegionOriginZ(mpDraw2DBack->getRegionCursor()));
|
|
}
|
|
}
|
|
|
|
/* 801CD770-801CD814 1C80B0 00A4+00 1/1 0/0 0/0 .text yamibossArrowPosInit__12dMenu_Fmap_cFv */
|
|
void dMenu_Fmap_c::yamibossArrowPosInit() {
|
|
f32 pos1_x, pos2_x, pos1_z, pos2_z, icon_x, icon_z;
|
|
if (!searchIcon(4, 0x75, &icon_x, &icon_z)) {
|
|
icon_x = -38552.47f;
|
|
icon_z = 38647.59f;
|
|
}
|
|
mpDraw2DBack->calcAllMapPosWorld(0.0f, 0.0f, &pos2_x, &pos2_z);
|
|
mpDraw2DBack->calcAllMapPosWorld(0.0f, -20.0f, &pos1_x, &pos1_z);
|
|
mpDraw2DBack->setArrowPosAxis(icon_x, icon_z + (pos1_z - pos2_z));
|
|
}
|
|
|
|
/* 801CD814-801CD8B4 1C8154 00A0+00 1/1 0/0 0/0 .text howlArrowPosInit__12dMenu_Fmap_cFv
|
|
*/
|
|
void dMenu_Fmap_c::howlArrowPosInit() {
|
|
u8 type = dMeter2Info_getGoldWolfMapType();
|
|
static char* stage_name[6] = {"F_SP104", "F_SP122", "F_SP122", "F_SP124", "F_SP111", "F_SP116"};
|
|
strcpy(mMarkedStageName, stage_name[type - 2]);
|
|
static const int i_swBit[6] = {0x41, 0x29, 0x2a, 0x32, 0x79, 0x32};
|
|
f32 icon_x, icon_z;
|
|
if (searchIcon(6, i_swBit[type - 2], &icon_x, &icon_z)) {
|
|
mpDraw2DBack->setArrowPos3DOffset(mpDraw2DBack->getRegionCursor(), mMarkedStageName,
|
|
icon_x, icon_z, 0.0f);
|
|
}
|
|
}
|
|
|
|
/* 801CD8B4-801CD92C 1C81F4 0078+00 1/1 0/0 0/0 .text getHowlRegionID__12dMenu_Fmap_cFv
|
|
*/
|
|
u8 dMenu_Fmap_c::getHowlRegionID() {
|
|
switch (dMeter2Info_getGoldWolfMapType()) {
|
|
case 2:
|
|
return 1;
|
|
case 3:
|
|
return 4;
|
|
case 4:
|
|
return 4;
|
|
case 5:
|
|
return 5;
|
|
case 6:
|
|
return 3;
|
|
case 7:
|
|
return 4;
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
/* 801CD92C-801CD95C 1C826C 0030+00 1/1 0/0 0/0 .text isLightVesselGet__12dMenu_Fmap_cFv
|
|
*/
|
|
bool dMenu_Fmap_c::isLightVesselGet() {
|
|
return (bool)dComIfGp_isLightDropMapVisible();
|
|
}
|
|
|
|
/* 801CD95C-801CDA2C 1C829C 00D0+00 1/1 0/0 0/0 .text getPlayerPos2D__12dMenu_Fmap_cFv */
|
|
cXyz* dMenu_Fmap_c::getPlayerPos2D() {
|
|
cXyz pos;
|
|
char stage_name[8];
|
|
if (dComIfGs_isPlayerFieldLastStayFieldDataExistFlag()) {
|
|
pos.set(dMapInfo_n::getMapPlayerPos());
|
|
strcpy(stage_name, dMenuFmap_getStartStageName(mpFieldDat));
|
|
} else {
|
|
pos = dComIfGs_getPlayerFieldLastStayPos();
|
|
strcpy(stage_name, dComIfGs_getPlayerFieldLastStayName());
|
|
}
|
|
mpDraw2DBack->calcAllMapPos2D(stage_name, pos.x - mpDraw2DBack->getStageTransX(),
|
|
pos.z - mpDraw2DBack->getStageTransZ(),
|
|
&mPlayerPos.x, &mPlayerPos.y);
|
|
mPlayerPos.z = 0.0f;
|
|
return &mPlayerPos;
|
|
}
|