mirror of https://github.com/zeldaret/botw.git
ksys/world: Start implementing EnvMgr
This commit is contained in:
parent
19e03c86be
commit
333078a9f2
|
@ -89243,30 +89243,30 @@
|
|||
0x00000071010d21e0,wm::DofMgr::m4,92,
|
||||
0x00000071010d223c,wm::Manager::m11_null,4,_ZN4ksys5world3Job3m11Ev
|
||||
0x00000071010d2240,wm::DofMgr::m12,8,
|
||||
0x00000071010d2248,wm::SkyMgr::ctor,3648,
|
||||
0x00000071010d3088,WorldMgr::EnvPaletteStatic::ctor,408,
|
||||
0x00000071010d2248,wm::SkyMgr::ctor,3648,_ZN4ksys5world6EnvMgrC1Ev
|
||||
0x00000071010d3088,WorldMgr::EnvPaletteStatic::ctor,408,_ZN4ksys5world6EnvMgr16EnvPaletteStaticC1Ev
|
||||
0x00000071010d3220,sub_71010D3220,76,
|
||||
0x00000071010d326c,wm::SkyMgr::init,1244,
|
||||
0x00000071010d3748,wm::SkyMgr::initEnvAttributes,888,
|
||||
0x00000071010d3ac0,wm::SkyMgr::initEnvPalettes,3580,
|
||||
0x00000071010d48bc,wm::SkyMgr::initWeatherInfluence,768,
|
||||
0x00000071010d4bbc,wm::SkyMgr::initRemains,988,
|
||||
0x00000071010d4f98,wm::SkyMgr::initIndoorPalette,752,
|
||||
0x00000071010d5288,wm::SkyMgr::initEnvPaletteStatic,936,
|
||||
0x00000071010d5630,wm::SkyMgr::dtor,2604,
|
||||
0x00000071010d605c,wm::SkyMgr::dtorDelete,36,
|
||||
0x00000071010d6080,wm::SkyMgr::init_0,20,
|
||||
0x00000071010d3748,wm::SkyMgr::initEnvAttributes,888,_ZN4ksys5world6EnvMgr16initEnvAttributeEi
|
||||
0x00000071010d3ac0,wm::SkyMgr::initEnvPalettes,3580,_ZN4ksys5world6EnvMgr14initEnvPaletteEi
|
||||
0x00000071010d48bc,wm::SkyMgr::initWeatherInfluence,768,_ZN4ksys5world6EnvMgr20initWeatherInfluenceEi
|
||||
0x00000071010d4bbc,wm::SkyMgr::initRemains,988,_ZN4ksys5world6EnvMgr11initRemainsEi
|
||||
0x00000071010d4f98,wm::SkyMgr::initIndoorPalette,752,_ZN4ksys5world6EnvMgr17initIndoorPaletteEv
|
||||
0x00000071010d5288,wm::SkyMgr::initEnvPaletteStatic,936,_ZN4ksys5world6EnvMgr20initEnvPaletteStaticEv
|
||||
0x00000071010d5630,wm::SkyMgr::dtor,2604,_ZN4ksys5world6EnvMgrD1Ev
|
||||
0x00000071010d605c,wm::SkyMgr::dtorDelete,36,_ZN4ksys5world6EnvMgrD0Ev
|
||||
0x00000071010d6080,wm::SkyMgr::init_0,20,_ZN4ksys5world6EnvMgr5init_EPN4sead4HeapE
|
||||
0x00000071010d6094,wm::SkyMgr::initForStageGen,556,
|
||||
0x00000071010d62c0,wm::SkyMgr::doCalc,19952,
|
||||
0x00000071010db0b0,sub_71010DB0B0,32,
|
||||
0x00000071010db0d0,wm::SkyMgr::calc,4,
|
||||
0x00000071010db0d0,wm::SkyMgr::calc,4,_ZN4ksys5world6EnvMgr5calc_Ev
|
||||
0x00000071010db0d4,wm::SkyMgr::calcEntryJob,220,
|
||||
0x00000071010db1b0,wm::SkyMgr::updateDivision,696,
|
||||
0x00000071010db468,wm::SkyMgr::isBloodyMoon,164,
|
||||
0x00000071010db50c,wm::SkyMgr::isInBloodMoonTimeRange,32,
|
||||
0x00000071010db52c,wm::SkyMgr::getConcentrationBM,16,
|
||||
0x00000071010db53c,wm::SkyMgr::activateForcedBloodMoon,64,
|
||||
0x00000071010db57c,wm::SkyMgr::setBloodMoonTempProhibited,36,
|
||||
0x00000071010db1b0,wm::SkyMgr::updateDivision,696,_ZN4ksys5world6EnvMgr18updateTimeDivisionEv
|
||||
0x00000071010db468,wm::SkyMgr::isBloodyMoon,164,_ZNK4ksys5world6EnvMgr16isBloodMoonNightEv
|
||||
0x00000071010db50c,wm::SkyMgr::isInBloodMoonTimeRange,32,_ZNK4ksys5world6EnvMgr22isInBloodMoonTimeRangeEv
|
||||
0x00000071010db52c,wm::SkyMgr::getConcentrationBM,16,_ZNK4ksys5world6EnvMgr18getConcentrationBMEv
|
||||
0x00000071010db53c,wm::SkyMgr::activateForcedBloodMoon,64,_ZN4ksys5world6EnvMgr23activateForcedBloodMoonEv
|
||||
0x00000071010db57c,wm::SkyMgr::setBloodMoonTempProhibited,36,_ZN4ksys5world6EnvMgr23setBloodMoonProhibitionEb
|
||||
0x00000071010db5a0,sub_71010DB5A0,1116,
|
||||
0x00000071010db9fc,wm::SkyMgr::isFadeOrFadeDemoScreenOpened,352,
|
||||
0x00000071010dbb5c,wm::SkyMgr::updateBloodMoon,792,
|
||||
|
@ -89287,12 +89287,12 @@
|
|||
0x00000071010dc6d8,wm::SkyMgr::setFogDirect,104,
|
||||
0x00000071010dc740,wm::SkyMgr::getBloodMoonProgress,56,
|
||||
0x00000071010dc778,sub_71010DC778,16,
|
||||
0x00000071010dc788,wm::SkyMgr::rtti1,204,
|
||||
0x00000071010dc854,wm::SkyMgr::rtti2,92,
|
||||
0x00000071010dc8b0,wm::SkyMgr::getType,8,
|
||||
0x00000071010dc8b8,WorldMgr::EnvPalette::ctor,620,
|
||||
0x00000071010dcb24,WorldMgrStruct0_6_b_a::ctor,500,
|
||||
0x00000071010dcd18,WorldMgr::Remains::ctor,276,
|
||||
0x00000071010dc788,wm::SkyMgr::rtti1,204,_ZNK4ksys5world6EnvMgr27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE
|
||||
0x00000071010dc854,wm::SkyMgr::rtti2,92,_ZNK4ksys5world6EnvMgr18getRuntimeTypeInfoEv
|
||||
0x00000071010dc8b0,wm::SkyMgr::getType,8,_ZNK4ksys5world6EnvMgr7getTypeEv
|
||||
0x00000071010dc8b8,WorldMgr::EnvPalette::ctor,620,_ZN4ksys5world6EnvMgr10EnvPaletteC2Ev
|
||||
0x00000071010dcb24,WorldMgrStruct0_6_b_a::ctor,500,_ZN4ksys5world6EnvMgr10EnvPalette5CloudC2Ev
|
||||
0x00000071010dcd18,WorldMgr::Remains::ctor,276,_ZN4ksys5world6EnvMgr7RemainsC2Ev
|
||||
0x00000071010dce2c,sub_71010DCE2C,12,
|
||||
0x00000071010dce38,sub_71010DCE38,12,
|
||||
0x00000071010dce44,wm::ShootingStarMgr::ctor,60,
|
||||
|
|
Can't render this file because it is too large.
|
2
lib/agl
2
lib/agl
|
@ -1 +1 @@
|
|||
Subproject commit b1a372a1300566e221f2c739bc4348ed1b7c1f4b
|
||||
Subproject commit e6bd74df66d65f387c575a17dc5949531d38dbdd
|
|
@ -1 +1,324 @@
|
|||
#include "KingSystem/World/worldEnvMgr.h"
|
||||
#include "KingSystem/World/worldManager.h"
|
||||
|
||||
namespace ksys::world {
|
||||
|
||||
EnvMgr::EnvMgr() {
|
||||
mForcedBloodMoonRequested = false;
|
||||
mDeactivateForcedBloodMoon = false;
|
||||
mForcedBloodMoonReady = false;
|
||||
mBloodMoonProhibited = false;
|
||||
mForcedBloodMoonStatus = {};
|
||||
mForcedBloodMoonTimer = {};
|
||||
|
||||
reset();
|
||||
|
||||
for (int i = 0; i < mEnvAttributes.size(); ++i)
|
||||
initEnvAttribute(i);
|
||||
for (int i = 0; i < mEnvPalettes.size(); ++i)
|
||||
initEnvPalette(i);
|
||||
for (int i = 0; i < mWeatherInfluences.size(); ++i)
|
||||
initWeatherInfluence(i);
|
||||
for (int i = 0; i < mRemains.size(); ++i)
|
||||
initRemains(i);
|
||||
initIndoorPalette();
|
||||
initEnvPaletteStatic();
|
||||
initDungeonFog();
|
||||
mDungeonSizeType = DungeonSize::M;
|
||||
_6b5b0 = 1.0;
|
||||
}
|
||||
|
||||
EnvMgr::EnvPaletteStatic::EnvPaletteStatic() = default;
|
||||
|
||||
void EnvMgr::initEnvAttribute(int idx) {
|
||||
auto& attr = mEnvAttributes[idx];
|
||||
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
auto* obj = &attr.obj;
|
||||
attr.DifUse.init(false, "DifUse", "", obj);
|
||||
attr.DifXang.init(0.0, "DifXang", "", obj);
|
||||
attr.DifYang.init(0.0, "DifYang", "", obj);
|
||||
attr.PaletteSel00.init(8 * idx, "PaletteSel00", "", obj);
|
||||
attr.PaletteSel01.init(8 * idx + 1, "PaletteSel01", "", obj);
|
||||
attr.PaletteSel02.init(8 * idx + 2, "PaletteSel02", "", obj);
|
||||
attr.PaletteSel03.init(8 * idx + 3, "PaletteSel03", "", obj);
|
||||
attr.PaletteSel04.init(8 * idx + 4, "PaletteSel04", "", obj);
|
||||
attr.PaletteSel05.init(8 * idx + 5, "PaletteSel05", "", obj);
|
||||
attr.PaletteSel06.init(8 * idx + 6, "PaletteSel06", "", obj);
|
||||
attr.PaletteSel07.init(8 * idx + 7, "PaletteSel07", "", obj);
|
||||
}
|
||||
|
||||
void EnvMgr::initEnvPalette(int idx) {
|
||||
auto& pal = mEnvPalettes[idx];
|
||||
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
auto* obj = &pal.obj;
|
||||
pal.BgDifColor.init({1.0, 0.894, 0.68, 0.0}, "BgDifColor", "", obj);
|
||||
pal.BgDifIntencity.init(8.0, "BgDifIntencity", "", obj);
|
||||
pal.FogColor.init({0.535, 0.763, 0.568, 0.4}, "FogColor", "", obj);
|
||||
pal.FogStart.init(0.0, "FogStart", "", obj);
|
||||
pal.FogEnd.init(600.0, "FogEnd", "", obj);
|
||||
pal.YFogColor.init({1.288, 0.992, 0.178, 0.8}, "YFogColor", "", obj);
|
||||
pal.YFogStart.init(0.0, "YFogStart", "", obj);
|
||||
pal.SkySunColorNoUse.init(1, "SkySunColorNoUse", "", obj);
|
||||
pal.SkySunColor.init({1.0, 0.894, 0.68, 10.0}, "SkySunColor", "", obj);
|
||||
pal.SkyIsotropicfade.init(0.0, "SkyIsotropicfade", "", obj);
|
||||
pal.SfParam_near.init(0.0, "SfParam_near", "", obj);
|
||||
pal.SfParam_attenuation.init(15.0, "SfParam_attenuation", "", obj);
|
||||
pal.SfParam_horizontal.init(2.4, "SfParam_horizontal", "", obj);
|
||||
pal.afParam_attenuationForGrd.init(2.5, "afParam_attenuationForGrd", "", obj);
|
||||
pal.afParam_attenuationForSky.init(0.25, "afParam_attenuationForSky", "", obj);
|
||||
pal.SkyRParam_rayleigh_amplifier.init(1.0, "SkyRParam_rayleigh_amplifier", "", obj);
|
||||
pal.SkyRParam_mie_symmetricalProperty.init(0.8, "SkyRParam_mie_symmetricalProperty", "", obj);
|
||||
pal.SkyRParam_mie_amplifier.init(2.0, "SkyRParam_mie_amplifier", "", obj);
|
||||
pal.AmplifierForEnvMap.init(5.0, "AmplifierForEnvMap", "", obj);
|
||||
pal.cloud.Cloud0_ColorBase.init({0.956, 0.643137, 0.0, 0.835}, "Cloud0_ColorBase", "", obj);
|
||||
pal.cloud.Cloud0_IntencityBase.init(0.376, "Cloud0_IntencityBase", "", obj);
|
||||
pal.cloud.Cloud0_ColorHilight.init({0.8, 0.92, 0.557, 1.0}, "Cloud0_ColorHilight", "", obj);
|
||||
pal.cloud.Cloud0_IntencityHilight.init(11.76, "Cloud0_IntencityHilight", "", obj);
|
||||
pal.cloud.Cloud0_ColorShadow.init({0.44, 0.577, 0.61, 1.0}, "Cloud0_ColorShadow", "", obj);
|
||||
pal.cloud.Cloud0_IntencityShadow.init(1.0, "Cloud0_IntencityShadow", "", obj);
|
||||
pal.cloud.Cloud0_ColorBackLight.init({1.0, 0.95, 0.645, 1.0}, "Cloud0_ColorBackLight", "", obj);
|
||||
const u32 i = idx - 8;
|
||||
if (i < 8)
|
||||
pal.Cloud0_BacklightPower.init(1.2, "Cloud0_BacklightPower", "", obj);
|
||||
else
|
||||
pal.Cloud0_BacklightPower.init(1.6, "Cloud0_BacklightPower", "", obj);
|
||||
pal.cloud.Cloud1_ColorBase.init({1.0, 1.0, 1.0, 1.0}, "Cloud1_ColorBase", "", obj);
|
||||
pal.cloud.Cloud1_IntencityBase.init(0.0, "Cloud1_IntencityBase", "", obj);
|
||||
pal.cloud.Cloud1_ColorHilight.init({1.0, 1.0, 1.0, 1.0}, "Cloud1_ColorHilight", "", obj);
|
||||
pal.cloud.Cloud1_IntencityHilight.init(0.0, "Cloud1_IntencityHilight", "", obj);
|
||||
pal.cloud.Cloud1_ColorShadow.init({1.0, 1.0, 1.0, 1.0}, "Cloud1_ColorShadow", "", obj);
|
||||
pal.cloud.Cloud1_IntencityShadow.init(0.0, "Cloud1_IntencityShadow", "", obj);
|
||||
pal.cloud.Cloud1_ColorBackLight.init({1.0, 1.0, 1.0, 1.0}, "Cloud1_ColorBackLight", "", obj);
|
||||
if (i < 8)
|
||||
pal.Cloud1_BacklightPower.init(1.2, "Cloud1_BacklightPower", "", obj);
|
||||
else
|
||||
pal.Cloud1_BacklightPower.init(1.6, "Cloud1_BacklightPower", "", obj);
|
||||
pal.cloud.Cloud2_ColorBase.init({1.0, 0.91, 0.72, 1.0}, "Cloud2_ColorBase", "", obj);
|
||||
pal.cloud.Cloud2_IntencityBase.init(1.0, "Cloud2_IntencityBase", "", obj);
|
||||
pal.cloud.Cloud2_ColorHilight.init({1.0, 0.91, 0.72, 1.0}, "Cloud2_ColorHilight", "", obj);
|
||||
pal.cloud.Cloud2_IntencityHilight.init(48.0, "Cloud2_IntencityHilight", "", obj);
|
||||
pal.cloud.Cloud2_ColorShadow.init({0.0, 0.541, 0.437, 0.994}, "Cloud2_ColorShadow", "", obj);
|
||||
pal.cloud.Cloud2_IntencityShadow.init(2.0, "Cloud2_IntencityShadow", "", obj);
|
||||
pal.cloud.Cloud2_ColorBackLight.init({0.0, 0.0, 0.0, 0.0}, "Cloud2_ColorBackLight", "", obj);
|
||||
if (i < 8)
|
||||
pal.Cloud2_BacklightPower.init(1.2, "Cloud2_BacklightPower", "", obj);
|
||||
else
|
||||
pal.Cloud2_BacklightPower.init(1.6, "Cloud2_BacklightPower", "", obj);
|
||||
pal.Cloud2NoUse.init(1, "Cloud2NoUse", "", obj);
|
||||
pal.CloudShadowOnOff.init(true, "CloudShadowOnOff", "", obj);
|
||||
pal.BloomOffsetStart.init(19999.0, "BloomOffsetStart", "", obj);
|
||||
pal.BloomOffsetEnd.init(20000.0, "BloomOffsetEnd", "", obj);
|
||||
pal.BloomOffset.init(2.0, "BloomOffset", "", obj);
|
||||
pal.BloomClampedLuminance.init(64.0, "BloomClampedLuminance", "", obj);
|
||||
pal.BloomThreshhold.init(2.0, "BloomThreshhold", "", obj);
|
||||
pal.BloomIntencity.init(0.1, "BloomIntencity", "", obj);
|
||||
pal.VolumeMaskColorNoUse.init(1, "VolumeMaskColorNoUse", "", obj);
|
||||
pal.VolumeMaskColor.init({1.0, 1.0, 1.0, 1.0}, "VolumeMaskColor", "", obj);
|
||||
pal.VolumeMaskIntencity.init(1.0, "VolumeMaskIntencity", "", obj);
|
||||
pal.AmbientIntencity.init(1.0, "AmbientIntencity", "", obj);
|
||||
pal.Exposure.init(0.0, "Exposure", "", obj);
|
||||
}
|
||||
|
||||
void EnvMgr::initWeatherInfluence(int idx) {
|
||||
auto& entry = mWeatherInfluences[idx];
|
||||
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
auto* obj = &entry.obj;
|
||||
entry.FeatureColor.init({1.0, 1.0, 1.0, 1.0}, "FeatureColor", "", obj);
|
||||
entry.FeatureFogColor.init({1.0, 1.0, 1.0, 1.0}, "FeatureFogColor", "", obj);
|
||||
entry.CalcRayleigh.init(1.0, "CalcRayleigh", "", "Min=0.0f, Max=2.0f", obj);
|
||||
entry.CalcMieSymmetrical.init(1.0, "CalcMieSymmetrical", "", "Min=0.0f, Max=10.0f", obj);
|
||||
entry.CalcMie.init(1.0, "CalcMie", "", "Min=0.0f, Max=100.0f", obj);
|
||||
entry.CalcVolumeMaskIntencity.init(1.0, "CalcVolumeMaskIntencity", "", "Min=0.0f, Max=20.0f",
|
||||
obj);
|
||||
entry.BloomThreshhold.init(1.0, "BloomThreshhold", "", "Min=0.0f, Max=2.0f", obj);
|
||||
entry.BloomIntencity.init(1.0, "BloomIntencity", "", "Min=0.0f, Max=2.0f", obj);
|
||||
entry.AddMoisture.init(0.0, "AddMoisture", "", "Min=0.0f, Max=100.0f", obj);
|
||||
}
|
||||
|
||||
void EnvMgr::initRemains(int idx) {
|
||||
auto& entry = mRemains[idx];
|
||||
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
auto* obj = &entry.obj;
|
||||
entry.FeatureColor.init({1.0, 1.0, 1.0, 1.0}, "FeatureColor", "", obj);
|
||||
entry.FeatureFogColor.init({1.0, 1.0, 1.0, 1.0}, "FeatureFogColor", "", obj);
|
||||
entry.AddFog_near.init(0.0, "AddFog_near", "", obj);
|
||||
entry.AddFog_far.init(300.0, "AddFog_far", "", obj);
|
||||
entry.AddFog_ratio.init(0.0, "AddFog_ratio", "", obj);
|
||||
entry.SfParam_near.init(0.0, "SfParam_near", "", obj);
|
||||
entry.SfParam_attenuation.init(0.0, "SfParam_attenuation", "", obj);
|
||||
entry.CalcRayleigh.init(1.0, "CalcRayleigh", "", obj);
|
||||
entry.CalcMieSymmetrical.init(1.0, "CalcMieSymmetrical", "", obj);
|
||||
entry.CalcMie.init(1.0, "CalcMie", "", obj);
|
||||
entry.BloomThreshhold.init(1.0, "BloomThreshhold", "", obj);
|
||||
entry.BloomIntencity.init(1.0, "BloomIntencity", "", obj);
|
||||
entry.CalcVolumeMaskIntencity.init(1.0, "CalcVolumeMaskIntencity", "", obj);
|
||||
}
|
||||
|
||||
void EnvMgr::initIndoorPalette() {
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
auto* obj = &mIndoorPalette.obj;
|
||||
mIndoorPalette.FeatureColor.init({0.5, 0.342, 0.274, 0.175}, "FeatureColor", "", obj);
|
||||
mIndoorPalette.CalcVolumeMaskIntencity.init(2.0, "CalcVolumeMaskIntencity", "", obj);
|
||||
mIndoorPalette.BloomClampedLuminance.init(64.0, "BloomClampedLuminance", "", obj);
|
||||
mIndoorPalette.BloomThreshhold.init(2.0, "BloomThreshhold", "", obj);
|
||||
mIndoorPalette.BloomIntencity.init(3.0, "BloomIntencity", "", obj);
|
||||
mIndoorPalette.IndoorFogRatio.init(0.175, "IndoorFogRatio", "", obj);
|
||||
mIndoorPalette.IndoorFogStart.init(5.0, "IndoorFogStart", "", obj);
|
||||
mIndoorPalette.IndoorFogEnd.init(15.0, "IndoorFogEnd", "", obj);
|
||||
mIndoorPalette.attenuationForGrd.init(0.75, "attenuationForGrd", "", obj);
|
||||
}
|
||||
|
||||
void EnvMgr::initEnvPaletteStatic() {
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
auto* obj = &mEnvPaletteStatic.obj;
|
||||
mEnvPaletteStatic.rayleigh_baseHeigh.init(20.0, "rayleigh_baseHeigh", "", obj);
|
||||
mEnvPaletteStatic.mie_baseHeight.init(2.0, "mie_baseHeight", "", obj);
|
||||
mEnvPaletteStatic.mie_scatteringCoeff.init(0.0018, "mie_scatteringCoeff", "", obj);
|
||||
mEnvPaletteStatic.mie_symmetricalPropert.init(0.8, "mie_symmetricalPropert", "", obj);
|
||||
mEnvPaletteStatic.YFogEnd.init(160.0, "YFogEnd", "", obj);
|
||||
mEnvPaletteStatic.SfParam_far.init(24000.0, "SfParam_far", "", obj);
|
||||
mEnvPaletteStatic.SfParam_density.init(0.85, "SfParam_density", "", obj);
|
||||
mEnvPaletteStatic.BloomComposeColorNoUse_8_8.init(0, "BloomComposeColorNoUse_8_8", "", obj);
|
||||
mEnvPaletteStatic.BloomLayerColor_8_8.init({1.0, 1.0, 1.0, 0.5}, "BloomLayerColor_8_8", "",
|
||||
obj);
|
||||
mEnvPaletteStatic.BloomLayerColorNoUse_16_16.init(0, "BloomLayerColorNoUse_16_16", "", obj);
|
||||
mEnvPaletteStatic.BloomLayerColor_16_16.init({1.0, 1.0, 1.0, 1.0}, "BloomLayerColor_16_16", "",
|
||||
obj);
|
||||
mEnvPaletteStatic.BloomLayerColorNoUse_32_32.init(1, "BloomLayerColorNoUse_32_32", "", obj);
|
||||
mEnvPaletteStatic.BloomLayerColor_32_32.init({1.0, 1.0, 1.0, 1.0}, "BloomLayerColor_32_32", "",
|
||||
obj);
|
||||
mEnvPaletteStatic.BloomLayerColorNoUse_64_64.init(1, "BloomLayerColorNoUse_64_64", "", obj);
|
||||
mEnvPaletteStatic.BloomLayerColor_64_64.init({1.0, 1.0, 1.0, 0.0}, "BloomLayerColor_64_64", "",
|
||||
obj);
|
||||
mEnvPaletteStatic.BloomComposeColor.init({1.0, 1.0, 1.0, 1.0}, "BloomComposeColor", "", obj);
|
||||
}
|
||||
|
||||
KSYS_ALWAYS_INLINE void EnvMgr::initDungeonFog() {
|
||||
if (Manager::instance()->worldInfoLoaded())
|
||||
return;
|
||||
|
||||
for (int i = 0; i < mCdanAddFog.size(); ++i) {
|
||||
auto& entry = mCdanAddFog[i];
|
||||
auto* obj = &entry.obj;
|
||||
entry.DungeonFogFogEnd.init(300.0, "DungeonFogFogEnd", "", obj);
|
||||
entry.DungeonFogVolA.init(10.0, "DungeonFogVolA", "", obj);
|
||||
}
|
||||
}
|
||||
|
||||
EnvMgr::~EnvMgr() = default;
|
||||
|
||||
void EnvMgr::init_(sead::Heap* heap) {
|
||||
mBloodMoonEndState = {};
|
||||
mBloodMoonStartState = {};
|
||||
mBloodMoonProgress = 1.0;
|
||||
}
|
||||
|
||||
void EnvMgr::calc_() {}
|
||||
|
||||
void EnvMgr::updateTimeDivision() {
|
||||
auto* wm = Manager::instance();
|
||||
const auto time = wm->getTimeMgr()->getTimeForSkyEnv();
|
||||
|
||||
float transition = 1.0;
|
||||
u32 division = 0;
|
||||
|
||||
if (wm->getStageType() == StageType::Indoor) {
|
||||
division = 0;
|
||||
|
||||
} else if (time >= 3_h && time < 4_h) {
|
||||
division = 0;
|
||||
if (time < timeToFloat(3, 40))
|
||||
transition = (time - 3_h) / timeToFloat(0, 40);
|
||||
|
||||
} else if (time >= 4_h && time < 6_h) {
|
||||
division = 1;
|
||||
if (time < 5_h)
|
||||
transition = (time - 4_h) / 1_h;
|
||||
|
||||
} else if (time >= 6_h && time < 9_h) {
|
||||
division = 2;
|
||||
if (time < 7_h)
|
||||
transition = (time - 6_h) / 1_h;
|
||||
|
||||
} else if (time >= 9_h && time < 16_h) {
|
||||
division = 3;
|
||||
if (time < 10_h)
|
||||
transition = (time - 9_h) / 1_h;
|
||||
|
||||
} else if (time >= 16_h && time < 18_h) {
|
||||
division = 4;
|
||||
if (time < 17_h)
|
||||
transition = (time - 16_h) / 1_h;
|
||||
|
||||
} else if (time >= 18_h && time < 20_h) {
|
||||
division = 5;
|
||||
if (time < 19_h)
|
||||
transition = (time - 18_h) / 1_h;
|
||||
|
||||
} else if (time >= 20_h && time < 21_h) {
|
||||
division = 6;
|
||||
if (time < timeToFloat(20, 40))
|
||||
transition = (time - 20_h) / timeToFloat(0, 40);
|
||||
|
||||
} else if (time >= 21_h && time < 22_h) {
|
||||
division = 7;
|
||||
transition = (time - 21_h) / 1_h;
|
||||
|
||||
} else {
|
||||
division = 7;
|
||||
}
|
||||
|
||||
if (mSkyEnvTimeDivision != division) {
|
||||
mPrevSkyEnvTimeDivision = division == 0 ? 7 : division - 1;
|
||||
mSkyEnvTimeDivision = division;
|
||||
}
|
||||
mEnvTimeTransition = transition;
|
||||
}
|
||||
|
||||
bool EnvMgr::isBloodMoonNight() const {
|
||||
auto* wm = Manager::instance();
|
||||
const auto time = wm->getTimeMgr()->getTimeForSkyEnv();
|
||||
|
||||
bool bm = false;
|
||||
bm |= wm->getTimeMgr()->isBloodyDay();
|
||||
bm |= wm->getTimeMgr()->wasBloodyDay() && time < 1_h;
|
||||
bm |= wm->getTimeMgr()->getBloodMoonForceMode() != TimeMgr::BloodMoonForceMode::Disabled;
|
||||
return bm;
|
||||
}
|
||||
|
||||
bool EnvMgr::isInBloodMoonTimeRange() const {
|
||||
return mBloodMoonTimeRangeProgress > 0.001f;
|
||||
}
|
||||
|
||||
float EnvMgr::getConcentrationBM() const {
|
||||
return mConcentrationBM;
|
||||
}
|
||||
|
||||
void EnvMgr::activateForcedBloodMoon() {
|
||||
if (Manager::instance()->isMainField())
|
||||
mForcedBloodMoonRequested = true;
|
||||
mBloodMoonProhibited = false;
|
||||
}
|
||||
|
||||
void EnvMgr::setBloodMoonProhibition(bool prohibited) {
|
||||
if (!mDeactivateForcedBloodMoon)
|
||||
mBloodMoonProhibited = prohibited;
|
||||
}
|
||||
|
||||
} // namespace ksys::world
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <agl/Utils/aglParameter.h>
|
||||
#include <agl/Utils/aglParameterObj.h>
|
||||
#include <container/seadSafeArray.h>
|
||||
#include <gfx/seadColor.h>
|
||||
#include <prim/seadStorageFor.h>
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
#include "KingSystem/World/worldJob.h"
|
||||
|
||||
|
@ -7,17 +12,281 @@ namespace ksys::world {
|
|||
|
||||
// TODO
|
||||
class EnvMgr : public Job {
|
||||
SEAD_RTTI_OVERRIDE(EnvMgr, Job)
|
||||
public:
|
||||
struct EnvPaletteStatic {
|
||||
EnvPaletteStatic();
|
||||
|
||||
agl::utl::Parameter<float> rayleigh_baseHeigh;
|
||||
agl::utl::Parameter<float> mie_baseHeight;
|
||||
agl::utl::Parameter<float> mie_scatteringCoeff;
|
||||
agl::utl::Parameter<float> mie_symmetricalPropert;
|
||||
agl::utl::Parameter<float> YFogEnd;
|
||||
agl::utl::Parameter<float> SfParam_far;
|
||||
agl::utl::Parameter<float> SfParam_density;
|
||||
agl::utl::Parameter<u32> BloomComposeColorNoUse_8_8;
|
||||
agl::utl::Parameter<u32> BloomLayerColorNoUse_16_16;
|
||||
agl::utl::Parameter<u32> BloomLayerColorNoUse_32_32;
|
||||
agl::utl::Parameter<u32> BloomLayerColorNoUse_64_64;
|
||||
agl::utl::Parameter<sead::Color4f> BloomLayerColor_8_8{{}};
|
||||
agl::utl::Parameter<sead::Color4f> BloomLayerColor_16_16{{}};
|
||||
agl::utl::Parameter<sead::Color4f> BloomLayerColor_32_32{{}};
|
||||
agl::utl::Parameter<sead::Color4f> BloomLayerColor_64_64{{}};
|
||||
agl::utl::Parameter<u32> _200;
|
||||
agl::utl::Parameter<sead::Color4f> BloomComposeColor{{}};
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
|
||||
struct EnvPalette {
|
||||
struct Cloud {
|
||||
agl::utl::Parameter<sead::Color4f> Cloud0_ColorBase{{}};
|
||||
agl::utl::Parameter<float> Cloud0_IntencityBase;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud0_ColorHilight{{}};
|
||||
agl::utl::Parameter<float> Cloud0_IntencityHilight;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud0_ColorShadow{{}};
|
||||
agl::utl::Parameter<float> Cloud0_IntencityShadow;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud0_ColorBackLight{{}};
|
||||
agl::utl::Parameter<sead::Color4f> Cloud1_ColorBase{{}};
|
||||
agl::utl::Parameter<float> Cloud1_IntencityBase;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud1_ColorHilight{{}};
|
||||
agl::utl::Parameter<float> Cloud1_IntencityHilight;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud1_ColorShadow{{}};
|
||||
agl::utl::Parameter<float> Cloud1_IntencityShadow;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud1_ColorBackLight{{}};
|
||||
agl::utl::Parameter<sead::Color4f> Cloud2_ColorBase{{}};
|
||||
agl::utl::Parameter<float> Cloud2_IntencityBase;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud2_ColorHilight{{}};
|
||||
agl::utl::Parameter<float> Cloud2_IntencityHilight;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud2_ColorShadow{{}};
|
||||
agl::utl::Parameter<float> Cloud2_IntencityShadow;
|
||||
agl::utl::Parameter<sead::Color4f> Cloud2_ColorBackLight{{}};
|
||||
};
|
||||
|
||||
agl::utl::Parameter<sead::Color4f> BgDifColor;
|
||||
agl::utl::Parameter<float> BgDifIntencity;
|
||||
agl::utl::Parameter<sead::Color4f> FogColor;
|
||||
agl::utl::Parameter<float> FogStart;
|
||||
agl::utl::Parameter<float> FogEnd;
|
||||
agl::utl::Parameter<sead::Color4f> YFogColor;
|
||||
agl::utl::Parameter<float> YFogStart;
|
||||
agl::utl::Parameter<u32> SkySunColorNoUse;
|
||||
agl::utl::Parameter<sead::Color4f> SkySunColor;
|
||||
agl::utl::Parameter<float> SkyIsotropicfade;
|
||||
agl::utl::Parameter<float> SfParam_near;
|
||||
agl::utl::Parameter<float> SfParam_attenuation;
|
||||
agl::utl::Parameter<float> SfParam_horizontal;
|
||||
agl::utl::Parameter<float> afParam_attenuationForGrd;
|
||||
agl::utl::Parameter<float> afParam_attenuationForSky;
|
||||
agl::utl::Parameter<float> SkyRParam_rayleigh_amplifier;
|
||||
agl::utl::Parameter<float> SkyRParam_mie_symmetricalProperty;
|
||||
agl::utl::Parameter<float> SkyRParam_mie_amplifier;
|
||||
agl::utl::Parameter<float> AmplifierForEnvMap;
|
||||
Cloud cloud;
|
||||
agl::utl::Parameter<u32> Cloud2NoUse;
|
||||
agl::utl::Parameter<bool> CloudShadowOnOff;
|
||||
agl::utl::Parameter<float> BloomOffsetStart;
|
||||
agl::utl::Parameter<float> BloomOffsetEnd;
|
||||
agl::utl::Parameter<float> BloomOffset;
|
||||
agl::utl::Parameter<float> BloomClampedLuminance;
|
||||
agl::utl::Parameter<float> BloomThreshhold;
|
||||
agl::utl::Parameter<float> BloomIntencity;
|
||||
agl::utl::Parameter<u32> VolumeMaskColorNoUse;
|
||||
agl::utl::Parameter<sead::Color4f> VolumeMaskColor;
|
||||
agl::utl::Parameter<float> VolumeMaskIntencity;
|
||||
agl::utl::Parameter<float> AmbientIntencity;
|
||||
agl::utl::Parameter<float> Exposure;
|
||||
agl::utl::Parameter<float> Cloud0_BacklightPower;
|
||||
agl::utl::Parameter<float> Cloud1_BacklightPower;
|
||||
agl::utl::Parameter<float> Cloud2_BacklightPower;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(EnvPalette, 0x7b8);
|
||||
|
||||
struct CdanAddFog {
|
||||
agl::utl::Parameter<float> DungeonFogFogEnd;
|
||||
agl::utl::Parameter<float> DungeonFogVolA;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(CdanAddFog, 0x70);
|
||||
|
||||
struct EnvAttribute {
|
||||
agl::utl::Parameter<bool> DifUse;
|
||||
agl::utl::Parameter<float> DifXang;
|
||||
agl::utl::Parameter<float> DifYang;
|
||||
agl::utl::Parameter<int> PaletteSel00;
|
||||
agl::utl::Parameter<int> PaletteSel01;
|
||||
agl::utl::Parameter<int> PaletteSel02;
|
||||
agl::utl::Parameter<int> PaletteSel03;
|
||||
agl::utl::Parameter<int> PaletteSel04;
|
||||
agl::utl::Parameter<int> PaletteSel05;
|
||||
agl::utl::Parameter<int> PaletteSel06;
|
||||
agl::utl::Parameter<int> PaletteSel07;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(EnvAttribute, 0x190);
|
||||
|
||||
struct WeatherInfluence {
|
||||
agl::utl::Parameter<sead::Color4f> FeatureColor;
|
||||
agl::utl::Parameter<sead::Color4f> FeatureFogColor;
|
||||
agl::utl::Parameter<float> CalcRayleigh;
|
||||
agl::utl::Parameter<float> CalcMieSymmetrical;
|
||||
agl::utl::Parameter<float> CalcMie;
|
||||
agl::utl::Parameter<float> CalcVolumeMaskIntencity;
|
||||
agl::utl::Parameter<float> BloomThreshhold;
|
||||
agl::utl::Parameter<float> BloomIntencity;
|
||||
agl::utl::Parameter<float> AddMoisture;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(WeatherInfluence, 0x160);
|
||||
|
||||
struct Remains {
|
||||
agl::utl::Parameter<sead::Color4f> FeatureColor;
|
||||
agl::utl::Parameter<sead::Color4f> FeatureFogColor;
|
||||
agl::utl::Parameter<float> AddFog_near;
|
||||
agl::utl::Parameter<float> AddFog_far;
|
||||
agl::utl::Parameter<float> AddFog_ratio;
|
||||
agl::utl::Parameter<float> SfParam_near;
|
||||
agl::utl::Parameter<float> SfParam_attenuation;
|
||||
agl::utl::Parameter<float> CalcRayleigh;
|
||||
agl::utl::Parameter<float> CalcMieSymmetrical;
|
||||
agl::utl::Parameter<float> CalcMie;
|
||||
agl::utl::Parameter<float> BloomThreshhold;
|
||||
agl::utl::Parameter<float> BloomIntencity;
|
||||
agl::utl::Parameter<float> CalcVolumeMaskIntencity;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(Remains, 0x1e0);
|
||||
|
||||
struct IndoorPalette {
|
||||
agl::utl::Parameter<sead::Color4f> FeatureColor;
|
||||
agl::utl::Parameter<float> CalcVolumeMaskIntencity;
|
||||
agl::utl::Parameter<float> BloomClampedLuminance;
|
||||
agl::utl::Parameter<float> BloomThreshhold;
|
||||
agl::utl::Parameter<float> BloomIntencity;
|
||||
agl::utl::Parameter<float> IndoorFogRatio;
|
||||
agl::utl::Parameter<float> IndoorFogStart;
|
||||
agl::utl::Parameter<float> IndoorFogEnd;
|
||||
agl::utl::Parameter<float> attenuationForGrd;
|
||||
agl::utl::ParameterObj obj;
|
||||
};
|
||||
|
||||
EnvMgr();
|
||||
~EnvMgr() override;
|
||||
|
||||
JobType getType() const override { return JobType::Env; }
|
||||
|
||||
void reset();
|
||||
void resetForStageUnload();
|
||||
|
||||
bool checkConcentrationDarkness() const;
|
||||
bool isBloodMoonNight() const;
|
||||
|
||||
u8 _20[0x6b618 - 0x20];
|
||||
bool isBloodMoonNight() const;
|
||||
bool isInBloodMoonTimeRange() const;
|
||||
float getConcentrationBM() const;
|
||||
void activateForcedBloodMoon();
|
||||
void setBloodMoonProhibition(bool prohibited);
|
||||
|
||||
protected:
|
||||
void init_(sead::Heap* heap) override;
|
||||
void calc_() override;
|
||||
|
||||
private:
|
||||
void initEnvAttribute(int idx);
|
||||
void initEnvPalette(int idx);
|
||||
void initWeatherInfluence(int idx);
|
||||
void initRemains(int idx);
|
||||
void initIndoorPalette();
|
||||
void initEnvPaletteStatic();
|
||||
void initDungeonFog();
|
||||
|
||||
void updateTimeDivision();
|
||||
void updateBloodMoon();
|
||||
void updateForcedBloodMoon();
|
||||
|
||||
EnvPaletteStatic mEnvPaletteStatic;
|
||||
u32 mPrevSkyEnvTimeDivision = 0;
|
||||
u32 mSkyEnvTimeDivision = 0;
|
||||
float mEnvTimeTransition = 0.0;
|
||||
u32 mBloodMoonEndState = 0;
|
||||
u32 mBloodMoonStartState = 0;
|
||||
float mBloodMoonProgress = 0.0;
|
||||
u32 _2b0 = 0;
|
||||
u32 _2b4 = 0;
|
||||
float mConcentrationDarkness = 0.0;
|
||||
sead::SafeArray<EnvPalette, 207> mEnvPalettes;
|
||||
sead::SafeArray<CdanAddFog, 4> mCdanAddFog;
|
||||
EnvPaletteStatic mEnvPaletteStaticUnused;
|
||||
sead::SafeArray<EnvAttribute, 59> mEnvAttributes;
|
||||
sead::SafeArray<WeatherInfluence, 4> mWeatherInfluences;
|
||||
sead::SafeArray<Remains, 7> mRemains;
|
||||
IndoorPalette mIndoorPalette;
|
||||
sead::Color4f _6b4e8;
|
||||
sead::Color4f _6b4f8;
|
||||
sead::Color4f _6b508;
|
||||
sead::Color4f _6b518;
|
||||
sead::Color4f _6b528;
|
||||
sead::Color4f _6b538;
|
||||
float _6b548;
|
||||
float _6b54c;
|
||||
float _6b550;
|
||||
float mEventYfogRatio;
|
||||
float _6b558;
|
||||
float mEventDiffuseAttenuateDiameter;
|
||||
float _6b560;
|
||||
float _6b564;
|
||||
float _6b568;
|
||||
float _6b56c;
|
||||
float _6b570;
|
||||
float _6b574;
|
||||
float _6b578;
|
||||
float _6b57c;
|
||||
float mWarpMistTimer;
|
||||
float mExposure;
|
||||
float mForcedBloodMoonTimer;
|
||||
float _6b58c;
|
||||
float _6b590;
|
||||
float _6b594;
|
||||
float _6b598;
|
||||
float mConcentrationBM;
|
||||
float mBloodMoonTimeRangeProgress;
|
||||
float mFogRatio;
|
||||
float mFogNear;
|
||||
float mFogFar;
|
||||
float _6b5b0;
|
||||
float _6b5b4;
|
||||
int mPaletteSelMaybe;
|
||||
u32 _6b5bc;
|
||||
u32 _6b5c0;
|
||||
u32 _6b5c4;
|
||||
u32 _6b5c8;
|
||||
u32 _6b5cc;
|
||||
u32 _6b5d0;
|
||||
u32 _6b5d4;
|
||||
u32 _6b5d8;
|
||||
u32 _6b5dc;
|
||||
u32 _6b5e0;
|
||||
u32 _6b5e4;
|
||||
u32 _6b5e8;
|
||||
u32 _6b5ec;
|
||||
u32 _6b5f0;
|
||||
u32 mForcedBloodMoonStatus;
|
||||
u32 _6b5f8;
|
||||
u32 _6b5fc;
|
||||
u32 mFogMode;
|
||||
u8 mDungeonSizeType;
|
||||
bool mForcedBloodMoonRequested;
|
||||
bool mForcedBloodMoonReady;
|
||||
bool mFogInstantSW;
|
||||
bool mFogNearUse;
|
||||
bool mFogFagUse;
|
||||
bool _6b60a;
|
||||
bool _6b60b;
|
||||
bool mBloodMoonProhibited;
|
||||
bool mDeactivateForcedBloodMoon;
|
||||
u16 _6b60e;
|
||||
bool _6b610;
|
||||
bool _6b611;
|
||||
u32 _6b614;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(EnvMgr, 0x6b618);
|
||||
|
||||
|
|
Loading…
Reference in New Issue