From 49c92b7108871db89032d10ac5136086aab8441b Mon Sep 17 00:00:00 2001 From: stujones11 Date: Thu, 13 Jun 2019 21:23:37 +0100 Subject: [PATCH] Add speed group and drown in walkable, remove playerplus mod --- doc/lua_api.txt | 3 + games/default/files/default/nodes.lua | 8 +- .../default/textures/default_pine_needles.png | Bin 196 -> 736 bytes .../experience/textures/expbar_empty.png | Bin 245 -> 134 bytes .../files/experience/textures/expbar_full.png | Bin 241 -> 134 bytes .../default/files/experience/textures/orb.png | Bin 205 -> 201 bytes games/default/files/mobs_monster/spider.lua | 2 +- .../default/files/player/playerplus/README.md | 20 ---- .../files/player/playerplus/depends.txt | 2 - .../default/files/player/playerplus/init.lua | 89 ------------------ .../files/player/playerplus/license.txt | 21 ----- src/content_sao.cpp | 6 +- src/localplayer.cpp | 26 ++++- src/localplayer.h | 1 + 14 files changed, 37 insertions(+), 141 deletions(-) delete mode 100644 games/default/files/player/playerplus/README.md delete mode 100644 games/default/files/player/playerplus/depends.txt delete mode 100644 games/default/files/player/playerplus/init.lua delete mode 100644 games/default/files/player/playerplus/license.txt diff --git a/doc/lua_api.txt b/doc/lua_api.txt index d65010bb9..d333e4934 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1517,6 +1517,9 @@ Another example: Make red wool from white wool and red dye: connect to each other * `slippery`: Players and items will slide on the node. Only use `slippery = 3` for now to ensure forwards compatibility. + * `speed`: Changes movement speed for players and items will moving on the node in percents. + * `speed = -10`: to slow down the movement (min. -99%) + * `speed = 10`: to speed up the movement (max. 1000%) ### Known damage and digging time defining groups * `crumbly`: dirt, sand diff --git a/games/default/files/default/nodes.lua b/games/default/files/default/nodes.lua index 4b092b3b4..df20cf262 100644 --- a/games/default/files/default/nodes.lua +++ b/games/default/files/default/nodes.lua @@ -105,7 +105,7 @@ minetest.register_node("default:obsidian", { minetest.register_node("default:bedrock", { description = "Bedrock", tiles = {"default_bedrock.png"}, - groups = {oddly_breakable_by_hand = 5, not_in_creative_inventory = 1}, + groups = {oddly_breakable_by_hand = 5, speed = -30, not_in_creative_inventory = 1}, sounds = default.node_sound_stone_defaults(), }) @@ -230,7 +230,7 @@ minetest.register_node("default:snow", { {-0.5, -0.5, -0.5, 0.5, -0.5+2/16, 0.5}, }, }, - groups = {crumbly = 3, falling_node = 1, snowy = 1, puts_out_fire = 1, misc = 1}, + groups = {crumbly = 3, falling_node = 1, snowy = 1, puts_out_fire = 1, misc = 1, speed = -30}, sounds = default.node_sound_snow_defaults(), on_use = snow_shoot_snowball, on_construct = function(pos) @@ -244,7 +244,7 @@ minetest.register_node("default:snow", { minetest.register_node("default:snowblock", { description = "Snow Block", tiles = {"default_snow.png"}, - groups = {crumbly = 3, cools_lava = 1, snowy = 1}, + groups = {crumbly = 3, cools_lava = 1, snowy = 1, speed = -30}, sounds = default.node_sound_snow_defaults(), drop = "default:snow 4", on_construct = function(pos) @@ -1491,7 +1491,7 @@ minetest.register_node("default:slimeblock", { }, use_texture_alpha = true, sunlight_propagates = true, - groups = {oddly_breakable_by_hand = 3, disable_jump = 1, fall_damage_add_percent=-100}, + groups = {oddly_breakable_by_hand = 3, disable_jump = 1, fall_damage_add_percent = -100, speed = -30}, }) diff --git a/games/default/files/default/textures/default_pine_needles.png b/games/default/files/default/textures/default_pine_needles.png index e8316737e33703ed7af13f6c1fca62cc43d99473..3f84da26036c0168fca37403c97461a4084d0488 100644 GIT binary patch literal 736 zcmV<60w4W}P)<<~MOuw`^}KMF*#Abh`w%%i>S=P}+@i$DEe?}%mg}sl zIK$2uS!@gWXwh8v7iXkmBdh$1SXHGrbI@!%S=#sSp*M3lyeU~qka0aN1%vno!qajGxF($K`}=6l%g~8>6JsZM)%)l3PwJ? zv?%B3{vVm_voH9bw&gNSmy#kfphUBh;*F`L=CpXlc1dIT;Q_6YOM-%*13Rk zXU|mt>s%l-@bTy_h;*F`#11~ho_;CoT%fdI)%*x_*116K!TX!5w4@4m{9q2hNQEqR z`vZ4G%p6jfktH{~;EsYa2aheta+v(!4n5}J^)JYx#d;3-U=HrNk!9PP!5tAZhwL%T z#eZ*iM_Ge8q$iQZECm#y#2hr~k1Pmf?8C}}SjRrBEV!7l4=eY182hlYpd4c#Ru

_!TtOM=`_F;0zLg9X3 zA0~IKB<=_HVRpAIxF6Vu$sKEv`$70V!nq}UJv#M)?<1U%$nY%;bM~Gv~)( SI7oj00000Rk$+ZUzVP z)1J1@pL~@kWV!oyrJO6?kE#|2B|o^#_q}obey`Amw?Ex_O(xZFrpoX1D>0NXc=o~T of6I}@e0uNvqU{)2L(2a!lsx7>)of`!9cUecr>mdKI;Vst0F9JD=l}o! diff --git a/games/default/files/experience/textures/expbar_empty.png b/games/default/files/experience/textures/expbar_empty.png index b06867d65345819f17947ad87a1f8491905efd00..a7d6cc9c8008dc83d9977d173938a01bd306e02e 100644 GIT binary patch delta 105 zcmV-v0G9vt0fqsPBw|fTL_t(2&tqVK0zEyw|J1|`$N(hZXk+!?$IY247-SaQ5_H4E z1AHmM7?ywtWWy7q!YIPXmY`Tb4a3nbp|1rr4I-LGGR>1Ituq<`ax+Amqv8e?vUcAT%1PqKY!-e^H7`VAO zq0*Fruiw5iy#4eAVu_xf9*W`ITwGw9T=4bVHz*CU1Z;tvgifBw#G_NA Tx++bB00000NkvXXu0mjfet%Rm diff --git a/games/default/files/experience/textures/expbar_full.png b/games/default/files/experience/textures/expbar_full.png index 373f4d0fee89f1d6abf3360d38b84abfe4feb5c0..10afe87c09f93c3bd065e4bb7267de3585a4c9fe 100644 GIT binary patch delta 105 zcmV-v0G9vp0fqsPBw|fTL_t(2&tqT!0zEyw|Fpmi$cD?LvHsVb&Q28!G7D}Ay5T1K zI4Q#DmVhllHr)6+14S6w5)=!lVK}-a^tFJdK}7RNrfD*zbw&dKsD!ITL-O$|00000 LNkvXXu0mjfSVSx7 delta 213 zcmZo;{Kz;#rJk`k$lZxy-8q?;3=9k`>5jgR3=A9lx&I`x0{NT;9+AZi3}PxE%s5;0 zmWK8-4(-bD}04}@v|Bow_I0>I& zi*CrV*lv|Nt!D2}exJiSjL{#gKdVIur2MEq`98tSZ)d|tOZ7WK*IvHjDR>@qxIlnm zW}^((70wbHhCId-(F*Saxh6Dou)GjHslYf(HCTXga|^^ihB!{A-TOA#{{T9P!PC{x JWt~$(695iEPlEse diff --git a/games/default/files/experience/textures/orb.png b/games/default/files/experience/textures/orb.png index f4945a478fa6ee1cb2d73ba742075ee5dd5365d0..3df97a29fe9061bcdb39feded1ac11b6cc39e104 100644 GIT binary patch delta 184 zcmX@hc#?5~WIZzj1A~Sxe=v}e3-AeX1=2EUtj0UI^p_!@p6Y1&V7*cU7^^~K~0R;}{i%eP-|GCXqM$9pjezyN% zlyJ{?-_Wf}8?RO8rxkrUAQL1j=%={gv1B9viR3`ajw{7tG;j`I>V`sMI|z j*k|S&5rIjuTRyYBxXrxI&6g<&I*#c<`xtlL0}v%n*=n1O*?5QG`)Q{pEA z1=&kHeO=ifvr6;nD;Nl@JPQHvHHxZ``9getGameDef()->ndef()->get(n); // If node generates drown bool noclip = m_privs.count("noclip") && g_settings->getBool("noclip"); - if (c.drowning > 0 && m_hp > 0 &&!noclip) { + int drowning = c.walkable ? 1 : c.drowning; + if (drowning > 0 && m_hp > 0 && !noclip) { if (m_breath > 0) setBreath(m_breath - 1); @@ -940,7 +941,8 @@ void PlayerSAO::step(float dtime, bool send_recommended) MapNode n = m_env->getMap().getNodeNoEx(p); const ContentFeatures &c = m_env->getGameDef()->ndef()->get(n); // If player is alive & no drowning, breath - if (m_hp > 0 && m_breath < PLAYER_MAX_BREATH && c.drowning == 0) + int drowning = c.walkable ? 1 : c.drowning; + if (m_hp > 0 && m_breath < PLAYER_MAX_BREATH && drowning == 0) setBreath(m_breath + 1); } diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 48eff0bf8..f406f2c81 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -735,8 +735,15 @@ void LocalPlayer::applyControl(float dtime, ClientEnvironment *env) incH = incV = movement_acceleration_default * BS * dtime; float slip_factor = 1.0f; - if (!free_move && !in_liquid && !in_liquid_stable) + float speed_factor = 1.0f; + if (!free_move && !in_liquid && !in_liquid_stable) { slip_factor = getSlipFactor(env, speedH); + speed_factor = getSpeedFactor(env); + } + + // Apply speed factor + speedH *= speed_factor; + speedV *= speed_factor; // Accelerate to target speed with maximum increment accelerateHorizontal(speedH * physics_override_speed, @@ -1111,7 +1118,6 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, float LocalPlayer::getSlipFactor(Environment *env, const v3f &speedH) { - // Slip on slippery nodes const INodeDefManager *nodemgr = env->getGameDef()->ndef(); Map *map = &env->getMap(); @@ -1129,3 +1135,19 @@ float LocalPlayer::getSlipFactor(Environment *env, const v3f &speedH) } return 1.0f; } + +float LocalPlayer::getSpeedFactor(Environment *env) +{ + const INodeDefManager *nodemgr = env->getGameDef()->ndef(); + Map *map = &env->getMap(); + const ContentFeatures &f = nodemgr->get(map->getNodeNoEx( + getStandingNodePos())); + int speed = 0; + if (f.walkable) + speed = itemgroup_get(f.groups, "speed"); + + if (speed != 0) { + return core::clamp(1.0f + (float)speed/100, 0.01f, 10.0f); + } + return 1.0f; +} diff --git a/src/localplayer.h b/src/localplayer.h index 101fdec18..79bbf429a 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -146,6 +146,7 @@ private: void accelerateVertical(const v3f &target_speed, const f32 max_increase); bool updateSneakNode(Map *map, const v3f &position, const v3f &sneak_max); float getSlipFactor(Environment *env, const v3f &speedH); + float getSpeedFactor(Environment *env); v3f m_position; v3s16 m_standing_node;