diff options
| author | robojumper <robojumper@gmail.com> | 2025-10-12 20:58:47 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-10-12 20:58:47 +0200 |
| commit | 126e026babdebf58cf291211b65e81f4056360b7 (patch) | |
| tree | 8ec62afb033dd4a563fc08d8d43cfdc5d331688c /src | |
| parent | 67dff946f2e9bf250084c463618e9a70629bb892 (diff) | |
A bit
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/lyt/d_lyt_map.cpp | 141 |
1 files changed, 120 insertions, 21 deletions
diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp index e7357640..8c3fb499 100644 --- a/src/d/lyt/d_lyt_map.cpp +++ b/src/d/lyt/d_lyt_map.cpp @@ -2400,7 +2400,7 @@ void dLytMapMain_c::loadStageProperties() { void dLytMapMain_c::setupStage() { loadStageProperties(); - if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { mLyt.findPane("N_skyloft_00")->SetVisible(false); } @@ -2468,7 +2468,7 @@ void dLytMapMain_c::setupStage() { if (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { mLyt.findPane("N_houkoul_00")->SetVisible(false); } - if (mMapEvent != MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent != MAP_EVENT_SAVE_OBJ) { loadTextboxes(); } fn_8013AD50(); @@ -2659,7 +2659,7 @@ void dLytMapMain_c::execute() { } } - if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { bool visible = mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mNextMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE; setSaveObjsVisible(visible); @@ -2721,13 +2721,13 @@ void dLytMapMain_c::draw() { mpScaleFramePane->SetVisible(mDrawScaleFrame ? true : false); mLyt.getLayout()->GetRootPane()->Draw(mLyt.getDrawInfo()); if ((mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mNextMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) && - mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + mMapEvent == MAP_EVENT_SAVE_OBJ) { initSaveObjs(); } fn_80143120(-2); mMarkers.drawPopups(); mPutIcon.draw(); - if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { mPopupInfo.draw(); } @@ -3052,7 +3052,7 @@ void dLytMapMain_c::setButtonMessages( void dLytMapMain_c::setCursorType() { if (canCenterCursor1(mCurrentMapMode) && canCenterCursor1(mNextMapMode)) { - if ((mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW || + if ((mMapEvent == MAP_EVENT_SAVE_OBJ || ((mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_DUNGEON) && mPointerOnMap)) || (mPointerCanPlaceBeacon && isPointingAtMainMap()) || (*mPinIconAggregate.mStateMgr.getStateID() == dLytMapPinIconAggregate_c::StateID_Select) || @@ -3530,17 +3530,116 @@ void dLytMapMain_c::setupFlags() { } } -void dLytMapMain_c::initializeState_In() {} +void dLytMapMain_c::initializeState_In() { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { + displaySaveObjs(); + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { + mPopupInfo.mStateMgr.changeState(dLytMapPopupInfo_c::StateID_In); + } + } + + if (field_0x8CAD != 0 || mMapEvent == MAP_EVENT_MAP_INTRO) { + mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_IN]; + } else { + mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_IN_NO_CAM]; + } + + field_0x8C88 = mpInOutAnmGroup->getLastFrame(); + mpInOutAnmGroup->bind(false); + mpInOutAnmGroup->setFrame(0.0f); + mPinIconAggregate.setScale(getGlobal()->getZoomFrame()); +} void dLytMapMain_c::executeState_In() { field_0x8DBF = 1; + dLytMapGlobal_c *global = getGlobal(); - // TODO this should explain most of mMapEvent + if ((!field_0x8CAD || !field_0x8C84) && field_0x8CAD) { + return; + } + + f32 ratio = (mpInOutAnmGroup->getFrame() / mpInOutAnmGroup->getLastFrame()); + + f32 f1 = fn_80142D90(mCurrentMapMode) * 2.0f; + f32 f2 = fn_80142D90(mCurrentMapMode); + f32 f3 = cLib::easeOut(ratio, 3.0f); + global->setField_0x44(f1 + f3 * (f2 - f1)); + + mVec3_c v1; + if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || + mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) { + fn_80142F00(v1, mCurrentMapMode, true, global->getMapRotationCenter(), global->getField_0x56()); + } else { + fn_80142F00(v1, mCurrentMapMode, mMapUpDirection, global->getMapRotationCenter(), global->getField_0x56()); + } + global->setMapScroll(v1); + if (mpInOutAnmGroup->isEndReached()) { + dCsGame_c::GetInstance()->setPriorityDraw(0x8A); + mLyt.getLayout()->Animate(0); + mLyt.calc(); + mAnmGroups[MAP_MAIN_ANIM_IN].unbind(); + mpInOutAnmGroup->unbind(); + for (int i = 0; i < (int)ARRAY_LENGTH(mHitChecks); i++) { + mHitChecks[i].resetCachedHitboxes(); + mHitChecks[i].execute(); + } + + switch (mMapEvent) { + default: { + mFloorBtnMgr.mStateMgr.changeState(dLytMapFloorBtnMgr_c::StateID_Wait); + mStateMgr.changeState(StateID_Active); + break; + } + case MAP_EVENT_SW_BANK_SMALL: { + mStateMgr.changeState(StateID_EventSwBankSmall_Step1); + break; + } + case MAP_EVENT_MAP_INTRO: { + mStateMgr.changeState(StateID_EventMapIntro_Step1); + break; + } + case MAP_EVENT_DUNGEON_MAP_GET: { + mStateMgr.changeState(StateID_EventDungeonMapGet_Step1); + break; + } + case MAP_EVENT_FIELD_MAP_CHANGE_5: + case MAP_EVENT_FIELD_MAP_CHANGE_8: { + mStateMgr.changeState(StateID_EventFieldMapChange_Step1); + break; + } + case MAP_EVENT_FOREST_MAP_CHANGE: { + mStateMgr.changeState(StateID_EventForestMapChange_Step1); + break; + } + case MAP_EVENT_SIGNAL_ADD: { + mStateMgr.changeState(StateID_EventSignalAdd_Step1); + break; + } + case MAP_EVENT_GODDESS_CUBE: { + mStateMgr.changeState(StateID_EventGoddessCube_Step1); + break; + } + case MAP_EVENT_SAVE_OBJ: { + displaySaveObjs(); + mStateMgr.changeState(StateID_EventSaveObjMsgWindow); + break; + } + } + } + + if (mpInOutAnmGroup->isBound()) { + mpInOutAnmGroup->play(); + } +} +void dLytMapMain_c::finalizeState_In() { + if (fn_80141530()) { + dBase_c::s_NextExecuteControlFlags |= dBase_c::BASE_PROP_0x10; + } + dBase_c::s_DrawControlFlags |= dBase_c::BASE_PROP_0x10; } -void dLytMapMain_c::finalizeState_In() {} s32 dLytMapMain_c::getAreaGroup(s32 stifArea) const { s32 ret = AREAGROUP_MAX; - if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { switch (mSurfaceProvince) { case SURFACE_PROVINCE_FARON: ret = AREAGROUP_FARON; break; case SURFACE_PROVINCE_ELDIN: ret = AREAGROUP_ELDIN; break; @@ -3569,7 +3668,7 @@ s32 dLytMapMain_c::getAreaGroup(s32 stifArea) const { s32 dLytMapMain_c::getRoomType() const { s32 ret = ROOMTYPE_FIELD; s32 stifRoomType = dStageMgr_c::GetInstance()->getSTIFRoomType(); - if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { ret = ROOMTYPE_FIELD; } @@ -3935,19 +4034,19 @@ void dLytMapMain_c::finalizeState_Active() { } void dLytMapMain_c::initializeState_Out() { - if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ) { mPopupInfo.mStateMgr.changeState(StateID_Out); } dLytMeter_c::GetInstance()->setMeterField_0x13750(0); if (field_0x8CAD || mMapEvent == MAP_EVENT_MAP_INTRO) { - mpOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT]; + mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT]; } else { - mpOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT_NO_CAM]; + mpInOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT_NO_CAM]; } - mpOutAnmGroup->bind(false); - mpOutAnmGroup->setFrame(0.0f); - field_0x8C8C = mpOutAnmGroup->getLastFrame(); + mpInOutAnmGroup->bind(false); + mpInOutAnmGroup->setFrame(0.0f); + field_0x8C8C = mpInOutAnmGroup->getLastFrame(); if (fn_80141530()) { dBase_c::s_NextExecuteControlFlags &= ~dBase_c::BASE_PROP_0x10; @@ -3956,20 +4055,20 @@ void dLytMapMain_c::initializeState_Out() { dPadNav::setNavEnabled(false, false); } void dLytMapMain_c::executeState_Out() { - if (mpOutAnmGroup->isEndReached()) { + if (mpInOutAnmGroup->isEndReached()) { bool specialMode = isSomeFieldEq0Or1Or7Or9Or11(); // Kind of a weird way to write `specialMode || ... != 3 ` if ((specialMode && dScGame_c::getCamera(0)->getField_0xDA8() != 3) || !specialMode) { dBase_c::s_NextExecuteControlFlags &= ~dBase_c::BASE_PROP_0x10; mLyt.calc(); - mpOutAnmGroup->unbind(); + mpInOutAnmGroup->unbind(); field_0x8DBF = 0; mStateMgr.changeState(StateID_Invisible); } } - if (mpOutAnmGroup->isBound()) { - mpOutAnmGroup->play(); + if (mpInOutAnmGroup->isBound()) { + mpInOutAnmGroup->play(); } } void dLytMapMain_c::finalizeState_Out() {} |
