From: proller Date: Sun, 4 Aug 2013 19:07:30 +0000 (+0400) Subject: Freeze-melt adjust X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=714a8cef38ed46ddd6ef7c2689c93db2704969eb;p=zefram%2Fminetest%2Fminetest_engine.git Freeze-melt adjust --- diff --git a/src/content_abm.cpp b/src/content_abm.cpp index 2501a3a3..57e4637d 100644 --- a/src/content_abm.cpp +++ b/src/content_abm.cpp @@ -255,11 +255,12 @@ class LiquidFreeze : public ActiveBlockModifier { float heat = map->getHeat(env, p); //heater = rare - if (heat <= -1 && (heat <= -50 || ((myrand_range(-50, heat)) <= -30))) { + content_t c = map->getNodeNoEx(p - v3s16(0, -1, 0 )).getContent(); // top + //more chance to freeze if air at top + if (heat <= -1 && (heat <= -50 || (myrand_range(-50, heat) <= (c == CONTENT_AIR ? -10 : -40)))) { content_t c_self = n.getContent(); // making freeze not annoying, do not freeze random blocks in center of ocean // todo: any block not water (dont freeze _source near _flowing) - content_t c; bool allow = heat < -40; // todo: make for(...) if (!allow) { @@ -315,7 +316,8 @@ class LiquidMeltWeather : public ActiveBlockModifier { INodeDefManager *ndef = env->getGameDef()->ndef(); float heat = map->getHeat(env, p); - if (heat >= 1 && (heat >= 40 || ((myrand_range(heat, 40)) >= 20))) { + content_t c = map->getNodeNoEx(p - v3s16(0, -1, 0 )).getContent(); // top + if (heat >= 1 && (heat >= 40 || ((myrand_range(heat, 40)) >= (c == CONTENT_AIR ? 10 : 20)))) { n.freezeMelt(ndef); map->addNodeWithEvent(p, n); env->getScriptIface()->node_falling_update(p);