From bf3f2434deb13ae8037778467cf179b4a03bd167 Mon Sep 17 00:00:00 2001 From: darkrose Date: Wed, 19 Jul 2017 00:45:45 +1000 Subject: [PATCH] wastelands pt1 --- data/textures/grass_polluted.png | Bin 0 -> 2487 bytes data/textures/grass_side_polluted.png | Bin 0 -> 1251 bytes src/content_mapblock.cpp | 10 ++++++ src/game.cpp | 13 ++++++-- src/hud.cpp | 3 ++ src/map.h | 3 +- src/mapgen/mapgen.cpp | 17 ++++++++-- src/mapgen/mapgen_util.cpp | 7 ++-- src/sky.cpp | 44 ++++++++++++++++++++------ src/sky.h | 4 +-- 10 files changed, 82 insertions(+), 19 deletions(-) create mode 100644 data/textures/grass_polluted.png create mode 100644 data/textures/grass_side_polluted.png diff --git a/data/textures/grass_polluted.png b/data/textures/grass_polluted.png new file mode 100644 index 0000000000000000000000000000000000000000..6d6df60e3e16e889c33d10f9cc3c533e38149f26 GIT binary patch literal 2487 zcmV;o2}t&dP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^Rc2NDe?9ESUCy8r+QNl8ROR9M4R zm)n!%)?LRxlFsQPsnybSYrAJ=o3Sg&n6SC<0&{N38M!ci(o@ zrl#6zf{|i&9HW%N^E|>xu)pib7CA4zctumUl!fN%a!Izx`R;GV7~OGsk#Tca+~_Dm z2$y`d|mM@)_)+P1|RxP0*58Cq-7G{L2X?VGb#MkQ@hqmfYk2?N5BT_>{uB4UC-;LJ-O=u0{;gvGKEIH7 z&YRw~Z3~CV!$>eq6ZUP#B#j70%05HOeh+1#+2$3mGasQ`MsdI>4oD^u&z^rtFj5FS zkU*g|N-1hn)2t0SIWiIiVc3^2G&MmOvu`^9wpjsD&3KgXo#QK>*Hf}Z-h;EV5V{~8U_`%RFDpW`% zkkaG%FQ=4c#WJ()86U??(unZkn2U=H$8-D10V`^S#=X2)5YJ-Xd3(-umcXI3J))Hh zp55(sqY=twmL^E)5k?AHcz80kS`h|(_&8#G9NTe}WK+~^vx0lJ?e989!+`Cs;_@QH zEek_cmZYaK>CC>k-Dpl87`E$zCm*EH+Qt0N6NMZ|R=F*4)3lUj#plm{L7FBciOYu%*F$diew2-fM#N#1NZKbjS9zXgvfB%yOp68*pMkb1;fNfrpFY+E}c(89f zl37eyXy)g~{Opr!+P1~>JVuFPJWgo7QH^Pu5XVFCK&YTaS04H5jem!cpy?WX&tr5H z0TCzD9j6b!%g>*G$@nDzkX*jFCY{A(3rl5RSisGWW8^?ml^P)| z70Ydfh>pgzT|u!cdGt{6MJZ?w{Eufbo?|_HyN0Wq=e^~Yg(02Atgds6?hwkQ+G+}| z`MpOG|9Duya$UeTozSxaC4G;?j}V(>K{AOjy5ql}71V9ZD6xtd3_^R)biFB6WqDA? z63?;pT&}J7)Q5h5{P8Qaw!$?|hy7xGC8^2{`NGQnB#jVqAZhB>>bTp%vcwm@%>ijd zS!m*TXdMvCWnXoS$5ym{?Zk$c(NV-~q*$#sy{`x%@RiT(WJse8&0RySEu*qU&c5vs z)mGD}##*Qp#IuK=r&Af^2T z2=*aOky~2p8X=TxY3NyA`%1DZH$8w}UuV`9>Y6l34$he~IuDpk$CSEZah+3SJACDX z2R=S4vtyK~-Z!N0K@GKT4#39h!0I|@yQ^4SWfT>bj@qI2{s%p)GyW+B8*Gcn{8axWYb_`838PMRc4(unQ4;IDrCCNISCknOJOnN%MXpt)->y6agqKb^763Pccw z_`=?J|J^CKE8WMa&9a~>OQK=er`q%PPZ(a@;SM5#(C%77p9$}GcVFgvh0PWkJj$a+cB*o5ugOJXom?Awm{>4c_f zxw>4k$d*VY@ElvZQ5-OzYRg|?m9Hx8@A=sbUs)qF#?aiKg4#Dpx!u3s3IlYmBzm>v%4-@bdFlIG)Q7esIn>9rhLu z*6eECkS%iZ+Z~%_!NXaD)*APIclUA0n2yPKh_597`d=a2b;0>rYZFePF}kBH49j&v zGz{?^`0ekX+tdSm@@zpg46TD60J&Tjy*bsUMh+xjziK&snA!^XN)io2CR2N=`T3{6 zU~xF@6k78?UpegWY?W$bRc?NkA_o#!+C)*xiO<|bM5~LD@k>aCw74;!x z{Pd|N2o>Qd;M318d)){lizBH7Rb?$)N{=8^{2#Ca0!_$f*gOCL002ovPDHLkV1jBM B%S`|P literal 0 HcmV?d00001 diff --git a/data/textures/grass_side_polluted.png b/data/textures/grass_side_polluted.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b60c0520ed732ef0731d06aad276ee0d006762 GIT binary patch literal 1251 zcmV<91RVQ`P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^Rc2NDe?HN;8v*8l(nbxA})R9M69 z)6I_)WgNiq@62>&+L^Y~ooUOiZa0u!5Xc%pZ(i_Xyn6Rw;vSHL8;MyFE^HHGB*YU5 zZ-(#}kQg*3cu+`;8VC#MLO=vpD(=$VPCK2>bf%r@cvyFRx%dzCb9(Y5&+~hJFOP6= zW+vG?ZP0LJmg_Du@Y?IUxqSH+XI{bN~3Ao%^twN&Wk&yD?I+A&syC@(L*bXc%LZPUWl@&BKg=Li)^dSrb21KMa=t=@FOcwe2 z+uH!-qW~H3y%^tfiNX*;Q3%5Uf+Av;CGw_0(*+1f^%7WG>QI?5@thFb@c@XE1lw6J zqiHFqYMMr)1At{^X*4=?Y-c^IR*T8X7`Efl_hNFUPGLkR@NHUc2{k2c-fJ2<03-P< z&2|Sdi3bExfaiqhhRRquM@m(Z1OZK#NO}Vr^(MbOs1f&j1invw#imhjvTskGFdR^O zVzb&>e_YPcQBxwVHILQh2t(HxDHkveoj6Gl6p$2DcLd;5i|ww2W!$ zL}AFjJ=^aB2$INZtHa7lgGR%l)$|~SAFj6$6cGSP5ZI7P%c!bIWwK1xGyu>Im6DaE zz3Ot~=Fj+HM193Zv>gvg5D226V>{l>DCnc6L^7(%_3!RqoEq=6HUg~oHO98R&s@i= z+m1)Q-o`5Buu3^hLtn7QMqZw%jFGd9Wl2`f$8irU+re`}1WBysOF5#T&-Cs|T5BHS zMo)Y%1|SRv^b)8{md^vfFD|7HDZ+a1PMtn2#7P41N*`QJmzGL}EJ-}Tv`60`#oP?(tepmQ!!e&K_O(?cq~8wln5;`^#P5 zAINg5C5eL@wTE?Db?=(pa9$03pR}eSTIG>D0B#sQA1BG#jHX@f1ATbw#K}`nlHOoz z7!ImlC#(X^V@KwS1xv3MEPdMcfbUm*rG7@cpXzw6=UPU&_5RSs6Q5va)U9f~HHifrVp7<|I`WFCjto z_{n*<6XjJ^+*TYhIdo`V_~66i2N*CG$2}xj`8<=$OaTjeG{D-Mw0SVt@Mg=>EsSnVAD;E?hXr|M+PB@HfDfqw^;|-q<^KWNuzi z#7|7ic;9X~OI_c;old3Sa2@aR)}7getTexture("grass_side_jungle.png"); upstile.texture = g_texturesource->getTexture("grass_corner_jungle.png"); break; + case 6: + tex = "grass_polluted.png"; + if (data->mesh_detail > 2) { + for (int i=0; i<6; i++) { + o_faces[i] = faces[i]; + } + } + sidetile.texture = g_texturesource->getTexture("grass_side_polluted.png"); + break; case 4: tex = "snow.png"; if (data->mesh_detail > 2) { diff --git a/src/game.cpp b/src/game.cpp index e7a32d3..f419870 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1865,8 +1865,15 @@ void the_game( float time_brightness = (float)decode_light((daynight_ratio * LIGHT_SUN) / 1000) / 255.0; float direct_brightness = 0; bool sunlight_seen = false; - bool in_space = (client.getLocalPlayer()->getPosition().Y>(1024*BS)); - if (in_space || free_move) { + uint8_t biome = BIOME_UNKNOWN; + { + v3f pp = client.getLocalPlayer()->getPosition(); + v3s16 ppos = floatToInt(pp,BS); + MapBlock *block = client.getEnv().getMap().getBlockNoCreateNoEx(getNodeBlockPos(ppos)); + if (block != NULL) + biome = block->getBiome(); + } + if (biome == BIOME_SPACE || free_move) { direct_brightness = time_brightness; sunlight_seen = true; }else{ @@ -1898,7 +1905,7 @@ void the_game( float moon_phase = client.getEnv().getMoonPhase(); - sky->update(time_of_day_smooth, moon_phase, time_brightness, direct_brightness, sunlight_seen, in_space); + sky->update(time_of_day_smooth, moon_phase, time_brightness, direct_brightness, sunlight_seen, biome); video::SColor bgcolor = sky->getBgColor(); video::SColor skycolor = sky->getSkyColor(); diff --git a/src/hud.cpp b/src/hud.cpp index 55c455e..1015c24 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -879,6 +879,9 @@ void hud_draw( case BIOME_SKY: txt += L"Sky"; break; + case BIOME_WASTELANDS: + txt += L"Wastelands"; + break; case BIOME_UNKNOWN: default: txt += L"Unknown"; diff --git a/src/map.h b/src/map.h index c5c2b56..8fe3fd8 100644 --- a/src/map.h +++ b/src/map.h @@ -72,8 +72,9 @@ class ServerEnvironment; #define BIOME_SPACE 10 #define BIOME_THEDEEP 11 #define BIOME_SKY 12 +#define BIOME_WASTELANDS 13 -#define BIOME_COUNT 13 +#define BIOME_COUNT 14 enum MapEditEventType{ // Node added (changed from air or something else to something) diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp index 44cbdf8..0043824 100644 --- a/src/mapgen/mapgen.cpp +++ b/src/mapgen/mapgen.cpp @@ -148,7 +148,7 @@ void make_block(BlockMakeData *data) bool limestone = (noisebuf_ground_wetness.get(node_min.X+8,node_min.Y+8,node_min.Z+8) > 0.5); content_t base_content = CONTENT_STONE; - if (limestone) + if (limestone && data->biome != BIOME_WASTELANDS) base_content = CONTENT_LIMESTONE; /* @@ -496,6 +496,8 @@ void make_block(BlockMakeData *data) }else if (current_depth==0 && !water_detected && y >= WATER_LEVEL && air_detected) { if (biome == BIOME_SNOWCAP) { vmanip.m_data[i] = MapNode(CONTENT_MUD,0x04); + }else if (biome == BIOME_WASTELANDS) { + vmanip.m_data[i] = MapNode(CONTENT_MUD,0x06); }else if (biome == BIOME_JUNGLE) { if (noisebuf_ground_wetness.get(x,y,z) > 1.0) { vmanip.m_data[i] = MapNode(CONTENT_CLAY,0x08); @@ -566,8 +568,15 @@ void make_block(BlockMakeData *data) MapNode *n = &data->vmanip->m_data[i]; if (n->getContent() == CONTENT_MUD) { + // just stumps in wastelands + if (data->biome == BIOME_WASTELANDS) { + p.Y++; + if (data->vmanip->m_area.contains(p)) { + u32 ip = data->vmanip->m_area.index(p); + vmanip.m_data[ip] = MapNode(CONTENT_TREE,0xE0); + } // Papyrus grows only on mud and in water - if (y <= WATER_LEVEL) { + }else if (y <= WATER_LEVEL) { p.Y++; make_papyrus(vmanip, p); // Trees grow only on mud and grass, on land @@ -662,6 +671,10 @@ void make_block(BlockMakeData *data) } } } + + if (data->biome == BIOME_WASTELANDS) { + /* fallen meteor */ + } } } diff --git a/src/mapgen/mapgen_util.cpp b/src/mapgen/mapgen_util.cpp index e4e0ab2..386fc91 100644 --- a/src/mapgen/mapgen_util.cpp +++ b/src/mapgen/mapgen_util.cpp @@ -125,7 +125,7 @@ uint32_t get_tree_density(BlockMakeData *data, v2s16 p) }else if (data->biome == BIOME_LAKE || data->biome == BIOME_SNOWCAP || data->biome == BIOME_WOODLANDS) { if (r < 1) r = 5; - }else if (data->biome == BIOME_PLAINS) { + }else if (data->biome == BIOME_PLAINS|| data->biome == BIOME_WASTELANDS) { if (r) r /= 5; } @@ -140,7 +140,7 @@ uint32_t get_grass_density(BlockMakeData *data, v2s16 p) double noise = 0.0; uint32_t r = 0; - if (data->biome == BIOME_DESERT || data->biome == BIOME_SNOWCAP || data->biome == BIOME_OCEAN) + if (data->biome == BIOME_DESERT || data->biome == BIOME_SNOWCAP || data->biome == BIOME_OCEAN || data->biome == BIOME_WASTELANDS) return 0; noise = noise2d_perlin( @@ -381,6 +381,9 @@ uint8_t get_chunk_biome(uint64_t seed, v3s16 blockpos) } if (average_ground_height > 10) { + if (surface_humidity < 0.05) { + return BIOME_WASTELANDS; + } if (surface_humidity < 0.25) { return BIOME_DESERT; } diff --git a/src/sky.cpp b/src/sky.cpp index 9cc723b..a70c298 100644 --- a/src/sky.cpp +++ b/src/sky.cpp @@ -33,6 +33,7 @@ #include "noise.h" // easeCurve #include "main.h" // g_profiler #include "profiler.h" +#include "map.h" //! constructor Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id): @@ -42,7 +43,7 @@ Sky::Sky(scene::ISceneNode* parent, scene::ISceneManager* mgr, s32 id): m_cloud_brightness(0.5), m_moon_phase(0.0), m_moon_phase_pending(0.0), - m_space(false), + m_biome(BIOME_UNKNOWN), m_bgcolor_bright_f(1,1,1,1), m_skycolor_bright_f(1,0,0,0), m_cloudcolor_bright_f(1,1,1,1) @@ -200,7 +201,7 @@ void Sky::render() float f = 0.0; // Stars - if (m_space) { + if (m_biome == BIOME_SPACE) { f = 120.0; }else{ float starbrightness = MYMAX( @@ -245,7 +246,7 @@ void Sky::update( float time_brightness, float direct_brightness, bool sunlight_seen, - bool in_space + uint8_t biome ) { // Stabilize initial brightness and color values by flooding updates @@ -253,7 +254,7 @@ void Sky::update( m_first_update = false; m_moon_phase = moon_phase; for (u32 i=0; i<100; i++) { - update(time_of_day, moon_phase, time_brightness, direct_brightness, sunlight_seen, in_space); + update(time_of_day, moon_phase, time_brightness, direct_brightness, sunlight_seen, biome); } return; } @@ -263,22 +264,44 @@ void Sky::update( m_time_brightness = time_brightness; m_sunlight_seen = sunlight_seen; - m_space = in_space; + bool is_dull = false; + bool is_dawn = false; - bool is_dawn = (!in_space && time_brightness >= 0.20 && time_brightness < 0.50); + m_biome = biome; + + if (biome != BIOME_SPACE && biome != BIOME_THEDEEP) { + if (biome == BIOME_WASTELANDS) { + is_dull = true; + }else if (time_brightness >= 0.20 && time_brightness < 0.50) { + is_dawn = true; + } + } video::SColorf bgcolor_bright_normal_f(170./255,200./255,230./255, 1.0); video::SColorf bgcolor_bright_indoor_f(100./255,100./255,100./255, 1.0); video::SColorf bgcolor_bright_dawn_f(0.666*1.2,0.549*1.0,0.220*1.2,1.0); + video::SColorf skycolor_dull_f = video::SColor(255, 170,170,170); video::SColorf skycolor_bright_normal_f = video::SColor(255, 121, 141, 232); video::SColorf skycolor_bright_dawn_f = video::SColor(255, 46, 60, 132); + video::SColorf cloudcolor_dull_f = video::SColor(255, 100,100,100); video::SColorf cloudcolor_bright_normal_f = video::SColor(255, 240,240,255); video::SColorf cloudcolor_bright_dawn_f(1.0, 0.7, 0.5, 1.0); - if (in_space) { + m_clouds_visible = true; + if (biome == BIOME_SPACE) { m_brightness = 0.02; + m_clouds_visible = false; + }else if (biome == BIOME_WASTELANDS) { + m_sunlight_seen = false; + m_brightness = m_brightness * 0.98 + direct_brightness * 0.02; + if (m_brightness > 0.25) + m_brightness = 0.25; + }else if (biome == BIOME_THEDEEP) { + m_sunlight_seen = false; + m_brightness = 0.02; + m_clouds_visible = false; }else if (sunlight_seen) { if (fabs(time_brightness - m_brightness) < 0.2) { m_brightness = m_brightness * 0.95 + time_brightness * 0.05; @@ -291,9 +314,12 @@ void Sky::update( m_brightness = m_brightness * 0.98 + direct_brightness * 0.02; } - m_clouds_visible = !in_space; float color_change_fraction = 0.98; - if (sunlight_seen) { + if (is_dull) { + m_bgcolor_bright_f = m_bgcolor_bright_f.getInterpolated(bgcolor_bright_indoor_f, color_change_fraction); + m_cloudcolor_bright_f = m_cloudcolor_bright_f.getInterpolated(cloudcolor_dull_f, color_change_fraction); + m_skycolor_bright_f = m_skycolor_bright_f.getInterpolated(skycolor_dull_f, color_change_fraction); + }else if (sunlight_seen) { if (is_dawn) { m_bgcolor_bright_f = m_bgcolor_bright_f.getInterpolated(bgcolor_bright_dawn_f, color_change_fraction); m_skycolor_bright_f = m_skycolor_bright_f.getInterpolated(skycolor_bright_dawn_f, color_change_fraction); diff --git a/src/sky.h b/src/sky.h index adf1ba2..f69df9e 100644 --- a/src/sky.h +++ b/src/sky.h @@ -54,7 +54,7 @@ public: virtual u32 getMaterialCount() const { return SKY_MATERIAL_COUNT; } - void update(float time_of_day, float moon_phase, float time_brightness, float direct_brightness, bool sunlight_seen, bool in_space); + void update(float time_of_day, float moon_phase, float time_brightness, float direct_brightness, bool sunlight_seen, uint8_t biome); float getBrightness(){ return m_brightness; } video::SColor getBgColor(){ return m_bgcolor; } @@ -76,7 +76,7 @@ private: bool m_clouds_visible; float m_moon_phase; float m_moon_phase_pending; - bool m_space; + uint8_t m_biome; video::SColorf m_bgcolor_bright_f; video::SColorf m_skycolor_bright_f; video::SColorf m_cloudcolor_bright_f;