diff --git a/Minecraft.Client/Common/App_enums.h b/Minecraft.Client/Common/App_enums.h
index 8800f8e3..f8e8b72b 100644
--- a/Minecraft.Client/Common/App_enums.h
+++ b/Minecraft.Client/Common/App_enums.h
@@ -508,38 +508,10 @@ enum eMinecraftColour
eTextColor_EnchantDisabled,
eTextColor_RenamedItemTitle,
- //eHTMLColor_0 = 0x000000, //r:0 , g: 0, b: 0, i: 0
- //eHTMLColor_1 = 0x0000aa, //r:0 , g: 0, b: aa, i: 1 // blue, quite dark
- //eHTMLColor_2 = 0x109e10, // Changed by request of Dave //0x00aa00, //r:0 , g: aa, b: 0, i: 2 // green
- //eHTMLColor_3 = 0x109e9e, // Changed by request of Dave //0x00aaaa, //r:0 , g: aa, b: aa, i: 3 // cyan
- //eHTMLColor_4 = 0xaa0000, //r:aa , g: 0, b: 0, i: 4 // red
- //eHTMLColor_5 = 0xaa00aa, //r:aa , g: 0, b: aa, i: 5 // purple
- //eHTMLColor_6 = 0xffaa00, //r:ff , g: aa, b: 0, i: 6 // orange
- //eHTMLColor_7 = 0xaaaaaa, //r:aa , g: aa, b: aa, i: 7 // light gray
- //eHTMLColor_8 = 0x555555, //r:55 , g: 55, b: 55, i: 8 // gray
- //eHTMLColor_9 = 0x5555ff, //r:55 , g: 55, b: ff, i: 9 // blue
- //eHTMLColor_a = 0x55ff55, //r:55 , g: ff, b: 55, i: a // green
- //eHTMLColor_b = 0x55ffff, //r:55 , g: ff, b: ff, i: b // cyan
- //eHTMLColor_c = 0xff5555, //r:ff , g: 55, b: 55, i: c // red pink
- //eHTMLColor_d = 0xff55ff, //r:ff , g: 55, b: ff, i: d // bright pink
- //eHTMLColor_e = 0xffff55, //r:ff , g: ff, b: 55, i: e // yellow
- //eHTMLColor_f = 0xffffff, //r:ff , g: ff, b: ff, i: f
- //eHTMLColor_0_dark = 0x000000, //r:0 , g: 0, b: 0, i: 10
- //eHTMLColor_1_dark = 0x00002a, //r:0 , g: 0, b: 2a, i: 11
- //eHTMLColor_2_dark = 0x002a00, //r:0 , g: 2a, b: 0, i: 12
- //eHTMLColor_3_dark = 0x002a2a, //r:0 , g: 2a, b: 2a, i: 13
- //eHTMLColor_4_dark = 0x2a0000, //r:2a , g: 0, b: 0, i: 14
- //eHTMLColor_5_dark = 0x2a002a, //r:2a , g: 0, b: 2a, i: 15
- //eHTMLColor_6_dark = 0x2a2a00, //r:2a , g: 2a, b: 0, i: 16
- //eHTMLColor_7_dark = 0x2a2a2a, //r:2a , g: 2a, b: 2a, i: 17 // dark gray
- //eHTMLColor_8_dark = 0x151515, //r:15 , g: 15, b: 15, i: 18
- //eHTMLColor_9_dark = 0x15153f, //r:15 , g: 15, b: 3f, i: 19
- //eHTMLColor_a_dark = 0x153f15, //r:15 , g: 3f, b: 15, i: 1a
- //eHTMLColor_b_dark = 0x153f3f, //r:15 , g: 3f, b: 3f, i: 1b
- //eHTMLColor_c_dark = 0x3f1515, //r:3f , g: 15, b: 15, i: 1c // brown
- //eHTMLColor_d_dark = 0x3f153f, //r:3f , g: 15, b: 3f, i: 1d
- //eHTMLColor_e_dark = 0x3f3f15, //r:3f , g: 3f, b: 15, i: 1e
- //eHTMLColor_f_dark = 0x3f3f3f, //r:3f , g: 3f, b: 3f, i: 1f
+ // TU30
+ eMinecraftColour_BlockLight_OverworldDimension,
+ eMinecraftColour_BlockLight_HellDimension,
+ eMinecraftColour_BlockLight_EndDimension,
eMinecraftColour_COUNT,
};
diff --git a/Minecraft.Client/Common/Colours/ColourTable.cpp b/Minecraft.Client/Common/Colours/ColourTable.cpp
index ad627de2..d5ec416a 100644
--- a/Minecraft.Client/Common/Colours/ColourTable.cpp
+++ b/Minecraft.Client/Common/Colours/ColourTable.cpp
@@ -315,10 +315,16 @@ const wchar_t* ColourTable::ColourTableElements[eMinecraftColour_COUNT] =
L"HTMLColor_T3",
L"HTMLColor_Black",
L"HTMLColor_White",
+
L"Color_EnchantText",
L"Color_EnchantTextFocus",
L"Color_EnchantTextDisabled",
L"Color_RenamedItemTitle",
+
+ // TU30
+ L"BlockLight_OverworldDimension",
+ L"BlockLight_HellDimension",
+ L"BlockLight_EndDimension",
};
void ColourTable::staticCtor()
diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml
index 6c45b660..4eb5a5f4 100644
--- a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml
+++ b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml
@@ -296,4 +296,9 @@ if __name__=="__main__": notecolors()
+
+
+
+
+
\ No newline at end of file
diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp
index 15a4362f..2d26b6ca 100644
--- a/Minecraft.Client/GameRenderer.cpp
+++ b/Minecraft.Client/GameRenderer.cpp
@@ -876,17 +876,29 @@ void GameRenderer::updateLightTexture(float a)
Level *level = player->level;
+ int dimColor = level->dimension->getBlockLightColour();
+ float dimB = (float)((dimColor >> 16) & 0xFF) / 255.0f;
+ float dimG = (float)((dimColor >> 8) & 0xFF) / 255.0f;
+ float dimR = (float)(dimColor & 0xFF) / 255.0f;
+
const float skyDarken1 = level->getSkyDarken(1.0f);
-#ifdef __AVX__
- const float darken = skyDarken1 * 0.95f + 0.05f;
- const float blockMult = (blr * 0.1f + 1.5f);
const float skyWeight = skyDarken1 * 0.65f + 0.35f;
+ const float darken = skyDarken1 * 0.95f + 0.05f;
+
+#ifdef __AVX__
+ const float blockMult = (blr * 0.1f + 1.5f);
const __m256 vDarken = _mm256_set1_ps(darken);
const __m256 vSkyWeight = _mm256_set1_ps(skyWeight);
const __m256 vBlockMult = _mm256_set1_ps(blockMult);
+
+ const __m256 vDimR = _mm256_set1_ps(dimR);
+ const __m256 vDimG = _mm256_set1_ps(dimG);
+ const __m256 vDimB = _mm256_set1_ps(dimB);
+
const bool skyFlash = level->skyFlashTime < 0;
const bool isEnd = level->dimension->id == 1;
+
const bool hasNV = player->hasEffect(MobEffect::nightVision);
const float nvScale = hasNV ? getNightVisionScale(player, a) : 0.0f;
const __m256 vNVScale = _mm256_set1_ps(nvScale);
@@ -909,9 +921,13 @@ void GameRenderer::updateLightTexture(float a)
__m256 vGs = vRs;
__m256 vBs = vSky;
- __m256 vRb = vBlock;
- __m256 vGb = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_add_ps(_mm256_mul_ps(vBlock, _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)));
- __m256 vBb = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_mul_ps(vBlock, vBlock), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)));
+ __m256 vRb_base = vBlock;
+ __m256 vGb_base = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_add_ps(_mm256_mul_ps(vBlock, _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)));
+ __m256 vBb_base = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_mul_ps(vBlock, vBlock), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)));
+
+ __m256 vRb = _mm256_mul_ps(vRb_base, vDimR);
+ __m256 vGb = _mm256_mul_ps(vGb_base, vDimG);
+ __m256 vBb = _mm256_mul_ps(vBb_base, vDimB);
__m256 vR = _mm256_add_ps(vRs, vRb);
__m256 vG = _mm256_add_ps(vGs, vGb);
@@ -921,23 +937,24 @@ void GameRenderer::updateLightTexture(float a)
vG = _mm256_add_ps(_mm256_mul_ps(vG, v096), v003);
vB = _mm256_add_ps(_mm256_mul_ps(vB, v096), v003);
- if (darkenWorldAmount > 0) {
+ if (darkenWorldAmount > 0)
+ {
vR = _mm256_add_ps(_mm256_mul_ps(vR, vOneMinusAmount), _mm256_mul_ps(_mm256_mul_ps(vR, _mm256_set1_ps(0.7f)), vAmount));
vG = _mm256_add_ps(_mm256_mul_ps(vG, vOneMinusAmount), _mm256_mul_ps(_mm256_mul_ps(vG, _mm256_set1_ps(0.6f)), vAmount));
vB = _mm256_add_ps(_mm256_mul_ps(vB, vOneMinusAmount), _mm256_mul_ps(_mm256_mul_ps(vB, _mm256_set1_ps(0.6f)), vAmount));
}
- if (isEnd) {
+ if (isEnd)
+ {
vR = _mm256_add_ps(_mm256_set1_ps(0.22f), _mm256_mul_ps(vRb, _mm256_set1_ps(0.75f)));
vG = _mm256_add_ps(_mm256_set1_ps(0.28f), _mm256_mul_ps(vGb, _mm256_set1_ps(0.75f)));
vB = _mm256_add_ps(_mm256_set1_ps(0.25f), _mm256_mul_ps(vBb, _mm256_set1_ps(0.75f)));
}
- if (hasNV) {
- __m256 vInvR = _mm256_rcp_ps(vR);
- __m256 vInvG = _mm256_rcp_ps(vG);
- __m256 vInvB = _mm256_rcp_ps(vB);
- __m256 vDist = _mm256_min_ps(vInvR, _mm256_min_ps(vInvG, vInvB));
+ if (hasNV)
+ {
+ __m256 vMaxRGB = _mm256_max_ps(vR, _mm256_max_ps(vG, vB));
+ __m256 vDist = _mm256_rcp_ps(vMaxRGB);
vR = _mm256_add_ps(_mm256_mul_ps(vR, _mm256_sub_ps(vOne, vNVScale)), _mm256_mul_ps(_mm256_mul_ps(vR, vDist), vNVScale));
vG = _mm256_add_ps(_mm256_mul_ps(vG, _mm256_sub_ps(vOne, vNVScale)), _mm256_mul_ps(_mm256_mul_ps(vG, vDist), vNVScale));
@@ -970,22 +987,19 @@ void GameRenderer::updateLightTexture(float a)
#else
for (int i = 0; i < 256; i++)
{
- const float darken = skyDarken1 * 0.95f + 0.05f;
float sky = level->dimension->brightnessRamp[i / 16] * darken;
const float block = level->dimension->brightnessRamp[i % 16] * (blr * 0.1f + 1.5f);
if (level->skyFlashTime < 0)
- {
sky = level->dimension->brightnessRamp[i / 16];
- }
- const float rs = sky * (skyDarken1 * 0.65f + 0.35f);
- const float gs = sky * (skyDarken1 * 0.65f + 0.35f);
+ const float rs = sky * skyWeight;
+ const float gs = sky * skyWeight;
const float bs = sky;
- const float rb = block;
- const float gb = block * ((block * 0.6f + 0.4f) * 0.6f + 0.4f);
- const float bb = block * ((block * block) * 0.6f + 0.4f);
+ const float rb = block * dimR;
+ const float gb = (block * ((block * 0.6f + 0.4f) * 0.6f + 0.4f)) * dimG;
+ const float bb = (block * ((block * block) * 0.6f + 0.4f)) * dimB;
float _r = (rs + rb);
float _g = (gs + gb);
@@ -1013,28 +1027,15 @@ void GameRenderer::updateLightTexture(float a)
if (player->hasEffect(MobEffect::nightVision))
{
const float scale = getNightVisionScale(player, a);
- float dist = 1.0f / _r;
- if (dist > (1.0f / _g))
- dist = (1.0f / _g);
- if (dist > (1.0f / _b))
- dist = (1.0f / _b);
+ float dist = 1.0f / fmax(_r, fmax(_g, _b));
_r = _r * (1.0f - scale) + (_r * dist) * scale;
_g = _g * (1.0f - scale) + (_g * dist) * scale;
_b = _b * (1.0f - scale) + (_b * dist) * scale;
}
- if (_r > 1.0f)
- _r = 1.0f;
- if (_r < 0.0f)
- _r = 0.0f;
- if (_g > 1.0f)
- _g = 1.0f;
- if (_g < 0.0f)
- _g = 0.0f;
- if (_b > 1.0f)
- _b = 1.0f;
- if (_b < 0.0f)
- _b = 0.0f;
+ _r = fmin(1.0f, fmax(0.0f, _r));
+ _g = fmin(1.0f, fmax(0.0f, _g));
+ _b = fmin(1.0f, fmax(0.0f, _b));
constexpr int alpha = 255;
const int r = static_cast(_r * 255);
@@ -2056,12 +2057,12 @@ void GameRenderer::setupClearColor(float a)
float whiteness = 1.0f / (4 - mc->options->viewDistance);
whiteness = 1.0f - static_cast(pow(static_cast(whiteness), 0.25));
- Vec3 *skyColor = level->getSkyColor(mc->cameraTargetPlayer, a);
+ Vec3 *skyColor = level->getSkyColor(player, a);
float sr = static_cast(skyColor->x);
float sg = static_cast(skyColor->y);
float sb = static_cast(skyColor->z);
- Vec3 *fogColor = level->getFogColor(a);
+ Vec3 *fogColor = level->getFogColor(player, a);
fr = static_cast(fogColor->x);
fg = static_cast(fogColor->y);
fb = static_cast(fogColor->z);
@@ -2070,8 +2071,8 @@ void GameRenderer::setupClearColor(float a)
{
Vec3 *sunAngle = Mth::sin(level->getSunAngle(a)) > 0 ? Vec3::newTemp(-1, 0, 0) : Vec3::newTemp(1, 0, 0);
float d = static_cast(player->getViewVector(a)->dot(sunAngle));
- if (d < 0) d = 0;
- if (d > 0)
+ d = fmaxf(0.0f, d);
+ if (d > 0.0f)
{
float *c = level->dimension->getSunriseColor(level->getTimeOfDay(a), a);
if (c != nullptr)
@@ -2152,24 +2153,12 @@ void GameRenderer::setupClearColor(float a)
if (player->hasEffect(MobEffect::blindness))
{
int duration = player->getEffect(MobEffect::blindness)->getDuration();
- if (duration < 20)
- {
- yy = yy * (1.0f - static_cast(duration) / 20.0f);
- }
- else
- {
- yy = 0.0;
- }
+ yy *= (duration < 20) ? (1.0f - static_cast(duration) / 20.0f) : 0.0;
}
- if (yy < 1.0)
- {
- if (yy < 0.0) yy = 0.0;
- yy = yy * yy;
- fr *= yy;
- fg *= yy;
- fb *= yy;
- }
+ yy = fmax(0.0, fmin(1.0, yy));
+ double yy2 = yy * yy;
+ fr *= yy2; fg *= yy2; fb *= yy2;
if (darkenWorldAmount > 0)
{
@@ -2183,19 +2172,9 @@ void GameRenderer::setupClearColor(float a)
{
float scale = getNightVisionScale(mc->player, a);
{
- float dist = FLT_MAX; // MGH - changed this to avoid divide by zero
- if ( (fr > 0) && (dist > (1.0f / fr)) )
- {
- dist = (1.0f / fr);
- }
- if ( (fg > 0) && (dist > (1.0f / fg)) )
- {
- dist = (1.0f / fg);
- }
- if ( (fb > 0) && (dist > (1.0f / fb)) )
- {
- dist = (1.0f / fb);
- }
+ float maxCol = fmaxf(fr, fmaxf(fg, fb));
+ float dist = (maxCol > 0.0f) ? (1.0f / maxCol) : 1.0f;
+
fr = fr * (1.0f - scale) + (fr * dist) * scale;
fg = fg * (1.0f - scale) + (fg * dist) * scale;
fb = fb * (1.0f - scale) + (fb * dist) * scale;
diff --git a/Minecraft.World/Biome.cpp b/Minecraft.World/Biome.cpp
index 43c83ff5..0218bfeb 100644
--- a/Minecraft.World/Biome.cpp
+++ b/Minecraft.World/Biome.cpp
@@ -309,4 +309,32 @@ int Biome::getFolageColor()
int Biome::getWaterColor()
{
return Minecraft::GetInstance()->getColourTable()->getColor( m_waterColor );
+}
+
+// TU25
+Vec3 *Biome::getFogColor(float td, float a) const
+{
+ float br = Mth::cos(td * PI * 2) * 2 + 0.5f;
+ if (br < 0.0f) br = 0.0f;
+ if (br > 1.0f) br = 1.0f;
+
+ unsigned int baseFogColour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Default_Fog_Colour );
+ float r = ((baseFogColour >> 16) & 0xff) / 255.0f;
+ float g = ((baseFogColour >> 8) & 0xff) / 255.0f;
+ float b = ((baseFogColour) & 0xff) / 255.0f;
+ r *= br * 0.94f + 0.06f;
+ g *= br * 0.94f + 0.06f;
+ b *= br * 0.91f + 0.09f;
+
+ return Vec3::newTemp(r, g, b);
+}
+
+bool Biome::isNatural()
+{
+ return true;
+}
+
+bool Biome::isFoggy()
+{
+ return false;
}
\ No newline at end of file
diff --git a/Minecraft.World/Biome.h b/Minecraft.World/Biome.h
index d87bd36a..03320559 100644
--- a/Minecraft.World/Biome.h
+++ b/Minecraft.World/Biome.h
@@ -150,4 +150,8 @@ public:
virtual int getGrassColor();
virtual int getFolageColor();
virtual int getWaterColor(); // 4J Added
+ //TU25
+ virtual Vec3 *getFogColor(float td, float a) const;
+ virtual bool isNatural();
+ virtual bool isFoggy();
};
\ No newline at end of file
diff --git a/Minecraft.World/Dimension.cpp b/Minecraft.World/Dimension.cpp
index b7a2ea7c..63ed7cda 100644
--- a/Minecraft.World/Dimension.cpp
+++ b/Minecraft.World/Dimension.cpp
@@ -164,23 +164,6 @@ float *Dimension::getSunriseColor(float td, float a)
return nullptr;
}
-Vec3 *Dimension::getFogColor(float td, float a) const
-{
- float br = Mth::cos(td * PI * 2) * 2 + 0.5f;
- if (br < 0.0f) br = 0.0f;
- if (br > 1.0f) br = 1.0f;
-
- unsigned int baseFogColour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Default_Fog_Colour );
- float r = ((baseFogColour >> 16) & 0xff) / 255.0f;
- float g = ((baseFogColour >> 8) & 0xff) / 255.0f;
- float b = ((baseFogColour) & 0xff) / 255.0f;
- r *= br * 0.94f + 0.06f;
- g *= br * 0.94f + 0.06f;
- b *= br * 0.91f + 0.09f;
-
- return Vec3::newTemp(r, g, b);
-}
-
bool Dimension::mayRespawn() const
{
return true;
@@ -248,3 +231,9 @@ int Dimension::getXZSize()
{
return level->getLevelData()->getXZSize();
}
+
+// TU25
+int Dimension::getBlockLightColour()
+{
+ return Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_BlockLight_OverworldDimension );
+}
\ No newline at end of file
diff --git a/Minecraft.World/Dimension.h b/Minecraft.World/Dimension.h
index ca040e21..76931270 100644
--- a/Minecraft.World/Dimension.h
+++ b/Minecraft.World/Dimension.h
@@ -42,13 +42,10 @@ public:
virtual int getMoonPhase(int64_t time) const;
virtual bool isNaturalDimension();
private:
- static const int fogColor = 0xc0d8ff;
-
float sunriseCol[4];
public:
virtual float *getSunriseColor(float td, float a);
- virtual Vec3 *getFogColor(float td, float a) const;
virtual bool mayRespawn() const;
static Dimension *getNew(int id);
virtual float getCloudHeight();
@@ -62,4 +59,5 @@ public:
// 4J Added
virtual int getXZSize();
+ virtual int getBlockLightColour(); // TU25
};
diff --git a/Minecraft.World/HellBiome.cpp b/Minecraft.World/HellBiome.cpp
index 865b21d7..c315e01d 100644
--- a/Minecraft.World/HellBiome.cpp
+++ b/Minecraft.World/HellBiome.cpp
@@ -1,6 +1,7 @@
#include "stdafx.h"
#include "net.minecraft.world.entity.monster.h"
#include "HellBiome.h"
+#include "..\Minecraft.Client\Minecraft.h"
HellBiome::HellBiome(int id) : Biome(id)
{
@@ -11,8 +12,36 @@ HellBiome::HellBiome(int id) : Biome(id)
waterFriendlies.clear();
ambientFriendlies.clear();
- enemies.push_back(new MobSpawnerData(eTYPE_GHAST, 50, 4, 4));
- enemies.push_back(new MobSpawnerData(eTYPE_PIGZOMBIE, 100, 4, 4));
- enemies.push_back(new MobSpawnerData(eTYPE_LAVASLIME, 1, 4, 4));
+ enemies.push_back(new MobSpawnerData(eTYPE_GHAST, 100, 4, 4));
+ enemies.push_back(new MobSpawnerData(eTYPE_PIGZOMBIE, 200, 4, 4));
+ enemies.push_back(new MobSpawnerData(eTYPE_LAVASLIME, 2, 4, 4));
enemies.push_back(new MobSpawnerData(eTYPE_SKELETON, 1, 4, 4));
+}
+
+Vec3 *HellBiome::getFogColor(float td, float a) const
+{
+ int colour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Nether_Fog_Colour );
+ BYTE redComponent = ((colour>>16)&0xFF);
+ BYTE greenComponent = ((colour>>8)&0xFF);
+ BYTE blueComponent = ((colour)&0xFF);
+
+ float rr = static_cast(redComponent)/256;//0.2f;
+ float gg = static_cast(greenComponent)/256;//0.03f;
+ float bb = static_cast(blueComponent)/256;//0.03f;
+ return Vec3::newTemp(rr, gg, bb);
+}
+
+int HellBiome::getSkyColor(float temp)
+{
+ return 0;
+}
+
+bool HellBiome::isNatural()
+{
+ return false;
+}
+
+bool HellBiome::isFoggy()
+{
+ return true;
}
\ No newline at end of file
diff --git a/Minecraft.World/HellBiome.h b/Minecraft.World/HellBiome.h
index ed51de83..a796420f 100644
--- a/Minecraft.World/HellBiome.h
+++ b/Minecraft.World/HellBiome.h
@@ -5,4 +5,9 @@ class HellBiome : public Biome
{
public:
HellBiome(int id);
+ //TU25
+ virtual Vec3 *getFogColor(float td, float a) const;
+ virtual int getSkyColor(float temp);
+ virtual bool isNatural();
+ virtual bool isFoggy();
};
\ No newline at end of file
diff --git a/Minecraft.World/HellDimension.cpp b/Minecraft.World/HellDimension.cpp
index a8b70d03..0152e113 100644
--- a/Minecraft.World/HellDimension.cpp
+++ b/Minecraft.World/HellDimension.cpp
@@ -16,19 +16,6 @@ void HellDimension::init()
id = -1;
}
-Vec3 *HellDimension::getFogColor(float td, float a) const
-{
- int colour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Nether_Fog_Colour );
- BYTE redComponent = ((colour>>16)&0xFF);
- BYTE greenComponent = ((colour>>8)&0xFF);
- BYTE blueComponent = ((colour)&0xFF);
-
- float rr = static_cast(redComponent)/256;//0.2f;
- float gg = static_cast(greenComponent)/256;//0.03f;
- float bb = static_cast(blueComponent)/256;//0.03f;
- return Vec3::newTemp(rr, gg, bb);
-}
-
void HellDimension::updateLightRamp()
{
float ambientLight = 0.10f;
@@ -87,3 +74,9 @@ int HellDimension::getXZSize()
{
return ceil(static_cast(level->getLevelData()->getXZSize()) / level->getLevelData()->getHellScale());
}
+
+// TU25
+int HellDimension::getBlockLightColour()
+{
+ return Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_BlockLight_HellDimension );
+}
\ No newline at end of file
diff --git a/Minecraft.World/HellDimension.h b/Minecraft.World/HellDimension.h
index fa95d9b2..7ac537a9 100644
--- a/Minecraft.World/HellDimension.h
+++ b/Minecraft.World/HellDimension.h
@@ -5,7 +5,6 @@ class HellDimension : public Dimension
{
public:
virtual void init();
- virtual Vec3 *getFogColor(float td, float a) const;
protected:
virtual void updateLightRamp();
@@ -20,4 +19,5 @@ public:
// 4J Added
virtual int getXZSize();
+ virtual int getBlockLightColour(); // TU25
};
diff --git a/Minecraft.World/Level.cpp b/Minecraft.World/Level.cpp
index d5936ef8..10f175be 100644
--- a/Minecraft.World/Level.cpp
+++ b/Minecraft.World/Level.cpp
@@ -945,7 +945,7 @@ bool Level::setTileAndData(int x, int y, int z, int tile, int data, int updateFl
if (!dimension->hasCeiling)
checkLight(LightLayer::Sky, x, y, z);
- checkLight(LightLayer::Block, x, y, z);
+ checkLight(LightLayer::Block, x, y, z);
PIXEndNamedEvent();
PIXEndNamedEvent();
@@ -2165,11 +2165,14 @@ Vec3 *Level::getCloudColor(float a)
return Vec3::newTemp(r, g, b);
}
-
-Vec3 *Level::getFogColor(float a)
+Vec3 *Level::getFogColor(shared_ptr source, float a)
{
+ int x = Mth::floor(source->x);
+ int z = Mth::floor(source->z);
+ Biome *biome = getBiome(x, z);
+
float td = getTimeOfDay(a);
- return dimension->getFogColor(td, a);
+ return biome->getFogColor(td, a);
}
diff --git a/Minecraft.World/Level.h b/Minecraft.World/Level.h
index 593b3483..97a0c56d 100644
--- a/Minecraft.World/Level.h
+++ b/Minecraft.World/Level.h
@@ -328,7 +328,7 @@ public:
float getMoonBrightness();
float getSunAngle(float a);
Vec3 *getCloudColor(float a);
- Vec3 *getFogColor(float a);
+ Vec3 *getFogColor(shared_ptr source, float a);
int getTopRainBlock(int x, int z);
int getTopSolidBlock(int x, int z);
bool biomeHasRain(int x, int z); // 4J added
diff --git a/Minecraft.World/TheEndBiome.cpp b/Minecraft.World/TheEndBiome.cpp
index 0dc22150..e8c22525 100644
--- a/Minecraft.World/TheEndBiome.cpp
+++ b/Minecraft.World/TheEndBiome.cpp
@@ -3,6 +3,7 @@
#include "TheEndBiomeDecorator.h"
#include "net.minecraft.world.entity.monster.h"
#include "net.minecraft.world.level.tile.h"
+#include "..\Minecraft.Client\Minecraft.h"
TheEndBiome::TheEndBiome(int id) : Biome(id)
{
@@ -20,8 +21,29 @@ TheEndBiome::TheEndBiome(int id) : Biome(id)
decorator = new TheEndBiomeDecorator(this);
}
-// 4J Stu - Don't need override
-//int TheEndBiome::getSkyColor(float temp)
-//{
-// return 0x000000;
-//}
\ No newline at end of file
+Vec3 *TheEndBiome::getFogColor(float td, float a) const
+{
+ int fogColor = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_End_Fog_Colour ); //0xa080a0;
+ float br = Mth::cos(td * PI * 2) * 2 + 0.5f;
+ if (br < 0.0f) br = 0.0f;
+ if (br > 1.0f) br = 1.0f;
+
+ float r = ((fogColor >> 16) & 0xff) / 255.0f;
+ float g = ((fogColor >> 8) & 0xff) / 255.0f;
+ float b = ((fogColor) & 0xff) / 255.0f;
+ r *= br * 0.0f + 0.15f;
+ g *= br * 0.0f + 0.15f;
+ b *= br * 0.0f + 0.15f;
+
+ return Vec3::newTemp(r, g, b);
+}
+
+bool TheEndBiome::isNatural()
+{
+ return false;
+}
+
+bool TheEndBiome::isFoggy()
+{
+ return true;
+}
\ No newline at end of file
diff --git a/Minecraft.World/TheEndBiome.h b/Minecraft.World/TheEndBiome.h
index b3698511..33291b24 100644
--- a/Minecraft.World/TheEndBiome.h
+++ b/Minecraft.World/TheEndBiome.h
@@ -5,7 +5,8 @@ class TheEndBiome : public Biome
{
public:
TheEndBiome(int id);
-
- // 4J Stu - Don't need override
- //virtual int getSkyColor(float temp);
+ //TU25
+ virtual Vec3 *getFogColor(float td, float a) const;
+ virtual bool isNatural();
+ virtual bool isFoggy();
};
\ No newline at end of file
diff --git a/Minecraft.World/TheEndDimension.cpp b/Minecraft.World/TheEndDimension.cpp
index 7f26d0e8..02234bf1 100644
--- a/Minecraft.World/TheEndDimension.cpp
+++ b/Minecraft.World/TheEndDimension.cpp
@@ -29,23 +29,6 @@ float *TheEndDimension::getSunriseColor(float td, float a)
return nullptr;
}
-Vec3 *TheEndDimension::getFogColor(float td, float a) const
-{
- int fogColor = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_End_Fog_Colour ); //0xa080a0;
- float br = Mth::cos(td * PI * 2) * 2 + 0.5f;
- if (br < 0.0f) br = 0.0f;
- if (br > 1.0f) br = 1.0f;
-
- float r = ((fogColor >> 16) & 0xff) / 255.0f;
- float g = ((fogColor >> 8) & 0xff) / 255.0f;
- float b = ((fogColor) & 0xff) / 255.0f;
- r *= br * 0.0f + 0.15f;
- g *= br * 0.0f + 0.15f;
- b *= br * 0.0f + 0.15f;
-
- return Vec3::newTemp(r, g, b);
-}
-
bool TheEndDimension::hasGround()
{
return false;
@@ -88,4 +71,10 @@ bool TheEndDimension::isFoggyAt(int x, int z)
int TheEndDimension::getSpawnYPosition()
{
return 50;
+}
+
+// TU25
+int TheEndDimension::getBlockLightColour()
+{
+ return Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_BlockLight_EndDimension );
}
\ No newline at end of file
diff --git a/Minecraft.World/TheEndDimension.h b/Minecraft.World/TheEndDimension.h
index 268be6f6..04005495 100644
--- a/Minecraft.World/TheEndDimension.h
+++ b/Minecraft.World/TheEndDimension.h
@@ -8,7 +8,6 @@ public:
virtual ChunkSource *createRandomLevelSource() const;
virtual float getTimeOfDay(int64_t time, float a) const;
virtual float *getSunriseColor(float td, float a);
- virtual Vec3 *getFogColor(float td, float a) const;
virtual bool hasGround();
virtual bool mayRespawn() const;
virtual bool isNaturalDimension();
@@ -17,4 +16,5 @@ public:
virtual Pos *getSpawnPos();
virtual int getSpawnYPosition();
virtual bool isFoggyAt(int x, int z);
+ virtual int getBlockLightColour(); // TU25
};