From 231c0c2c778217ac50184d50e8a5c89829600357 Mon Sep 17 00:00:00 2001 From: aa6 Date: Sun, 23 Jun 2019 22:06:01 +0300 Subject: [PATCH] Feature: Monoids support for speed and jump; Bad physics override mode. --- VERSION | 2 +- config.lua | 1 + init.lua | 23 ++---------- init_set_sprinting_physics.lua | 62 +++++++++++++++++++++++++++++++++ lib_round.lua | 4 +++ settingtypes.txt | 3 ++ util/version.png | Bin 1484 -> 1887 bytes 7 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 init_set_sprinting_physics.lua create mode 100644 lib_round.lua diff --git a/VERSION b/VERSION index f514a2f..2774f85 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.1 \ No newline at end of file +0.10.0 \ No newline at end of file diff --git a/config.lua b/config.lua index 7dd6060..55a11f9 100755 --- a/config.lua +++ b/config.lua @@ -4,6 +4,7 @@ minetest_wadsprint.HIDE_HUD_BARS = false minetest_wadsprint.STAMINA_MAX_VALUE = 100 minetest_wadsprint.DYSPNEA_THRESHOLD_VALUE = 3 +minetest_wadsprint.BAD_PHYSICS_OVERRIDE_MODE = false minetest_wadsprint.SAVE_PLAYERS_STATS_TO_FILE = true minetest_wadsprint.PLAYERS_STATS_FILE_LIMIT_RECORDS = 1000 minetest_wadsprint.PLAYER_STATS_UPDATE_PERIOD_SECONDS = 1 diff --git a/init.lua b/init.lua index 004f787..4baffaf 100755 --- a/init.lua +++ b/init.lua @@ -1,5 +1,6 @@ -- WAD SPRINTING minetest (https://minetest.net) mod (https://dev.minetest.net/Intro) -- @link https://github.com/aa6/minetest_wadsprint +dofile(minetest.get_modpath(minetest.get_current_modname()).."/lib_round.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/lib_savetable.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/lib_file_exists.lua") dofile(minetest.get_modpath(minetest.get_current_modname()).."/lib_eventemitter.lua") @@ -170,27 +171,7 @@ end ---------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------- set_sprinting_physics() -- ---------------------------------------------------------------------------------------------------- -function minetest_wadsprint.set_sprinting_physics(player,is_on) - if player.is_sprinting_physics_on ~= is_on then - local physics = player.obj:get_physics_override() - if is_on == true then - player.obj:set_physics_override( - { - jump = physics.jump - 1 + minetest_wadsprint.SPRINT_JUMP_HEIGHT_BOOST_COEFFICIENT, - speed = physics.speed - 1 + minetest_wadsprint.SPRINT_RUN_SPEED_BOOST_COEFFICIENT, - }) - else - if player.is_sprinting_physics_on ~= nil then - player.obj:set_physics_override( - { - jump = physics.jump + 1 - minetest_wadsprint.SPRINT_JUMP_HEIGHT_BOOST_COEFFICIENT, - speed = physics.speed + 1 - minetest_wadsprint.SPRINT_RUN_SPEED_BOOST_COEFFICIENT, - }) - end - end - player.is_sprinting_physics_on = is_on - end -end +dofile(minetest.get_modpath(minetest.get_current_modname()).."/init_set_sprinting_physics.lua") ---------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------- scan_player_controls() -- ---------------------------------------------------------------------------------------------------- diff --git a/init_set_sprinting_physics.lua b/init_set_sprinting_physics.lua new file mode 100644 index 0000000..4c70676 --- /dev/null +++ b/init_set_sprinting_physics.lua @@ -0,0 +1,62 @@ +if minetest_wadsprint.BAD_PHYSICS_OVERRIDE_MODE == true then + function minetest_wadsprint.set_sprinting_physics(player,is_on) + if player.is_sprinting_physics_on ~= is_on then + local physics = player.obj:get_physics_override() + if is_on == true then + player.obj:set_physics_override( + { + jump = (round(physics.jump,0.01) - 1 + minetest_wadsprint.SPRINT_JUMP_HEIGHT_BOOST_COEFFICIENT), + speed = (round(physics.speed,0.01) - 1 + minetest_wadsprint.SPRINT_RUN_SPEED_BOOST_COEFFICIENT), + }) + elseif player.is_sprinting_physics_on ~= nil then + player.obj:set_physics_override( + { + jump = 1, + speed = 1, + }) + end + player.is_sprinting_physics_on = is_on + end + end +elseif minetest.get_modpath("player_monoids") ~= nil then + function minetest_wadsprint.set_sprinting_physics(player,is_on) + if player.is_sprinting_physics_on ~= is_on then + if is_on == true then + player_monoids.jump:add_change( + player.obj, + minetest_wadsprint.SPRINT_JUMP_HEIGHT_BOOST_COEFFICIENT, + "minetest_wadsprint:jump" + ) + player_monoids.speed:add_change( + player.obj, + minetest_wadsprint.SPRINT_RUN_SPEED_BOOST_COEFFICIENT, + "minetest_wadsprint:speed" + ) + elseif player.is_sprinting_physics_on ~= nil then + player_monoids.jump:del_change(player.obj, "minetest_wadsprint:jump") + player_monoids.speed:del_change(player.obj, "minetest_wadsprint:speed") + end + player.is_sprinting_physics_on = is_on + end + end +else + function minetest_wadsprint.set_sprinting_physics(player,is_on) + if player.is_sprinting_physics_on ~= is_on then + local physics = player.obj:get_physics_override() + if is_on == true then + player.obj:set_physics_override( + { + jump = (round(physics.jump,0.01) - 1 + minetest_wadsprint.SPRINT_JUMP_HEIGHT_BOOST_COEFFICIENT), + speed = (round(physics.speed,0.01) - 1 + minetest_wadsprint.SPRINT_RUN_SPEED_BOOST_COEFFICIENT), + }) + elseif player.is_sprinting_physics_on ~= nil then + player.obj:set_physics_override( + { + jump = (round(physics.jump,0.01) + 1 - minetest_wadsprint.SPRINT_JUMP_HEIGHT_BOOST_COEFFICIENT), + speed = (round(physics.speed,0.01) + 1 - minetest_wadsprint.SPRINT_RUN_SPEED_BOOST_COEFFICIENT), + }) + end + player.is_sprinting_physics_on = is_on + end + end +end \ No newline at end of file diff --git a/lib_round.lua b/lib_round.lua new file mode 100644 index 0000000..5c3ec90 --- /dev/null +++ b/lib_round.lua @@ -0,0 +1,4 @@ +function round(exact, quantum) + local quant,frac = math.modf(exact/quantum) + return quantum * (quant + (frac > 0.5 and 1 or 0)) +end \ No newline at end of file diff --git a/settingtypes.txt b/settingtypes.txt index fa45ca4..6fc95be 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -4,6 +4,9 @@ minetest_wadsprint.ENABLE_INGAME_SETTINGS (ENABLE ALL THE MOD SETTINGS BELOW) bo # If enabled, stamina HUD bar will not be shown. minetest_wadsprint.HIDE_HUD_BARS (Hide HUD bars) bool false +# Can be used to establish compatibility with mods that don't support proper physics change or monoids. Strongly not recommended in other cases. +minetest_wadsprint.BAD_PHYSICS_OVERRIDE_MODE (Bad physics override mode) bool false + # Absolutely arbitrary value to make calculations more convenient. minetest_wadsprint.STAMINA_MAX_VALUE (Stamina max value in points) int 100 diff --git a/util/version.png b/util/version.png index 0cc46b7796b1b3f55eb9271e9c4a55230618784d..b013c4fddf40e9a0beb659ba684884dd6c8af464 100644 GIT binary patch delta 1804 zcmV+n2lM#M3*QbQiBL{Q4GJ0x0000DNk~Le0000y0000N5Ci}K0Id!LhpXW`ob?4KtVao z{}5iD3GSbL_T+Dt!_#@-Ycy-YyWq%hSbYxiH^I_&c&``&Pky#Nn%be<4GR{-ylJq> z4Gq&H1SrJLzAepMC)rA+qz<8i|1T zB*$uL{9RJR;jVSp8fn5gsZXVJ__dykI9@9~YLT*MO7=q%NE2s;0PmEFwn#iDm990$ zzqUb&woCJ-OaA=Gz{gKW{hFmw#nQh#UF%Itq?{>I!W`+n9p*Sge-H0Xhs%N)Hb~3v zT2C#3S^OQ5*y5mWAp{SHFJe+2 z?4JbAhoCYG`qhG#e;a*VPr&(iVMqn^-)+)YNjY}Z51kxs&b;nzfWQB_le}L~dA$xScY1sny7a=YK zIB#@}-vBW)pk+IBY~uP>2MoaU;cNK;bew|3GO+x`9F{l(bT_n~i~yVtE%U*?0OB4r z>+yRawgy_?g1{=HW+*4H5UhUy%QkZo>)*lRgTM;Vb^0rkb^IJO2%`1?Q_OnQ-2c@Q zVc^v%=qLkAe@SOurdq4OG6wu_fI`~S0Bq0bgbqAyPSTzV9gSd52kXw82e$79s~g&0 z2IiP`-@49gY=lF#Zid+H5O9M(E=;Y@L&yDK-w)O$5r7>}LF-7kHqV@-c^mkAkTMOT zy*Ce>>;PK}G!;NcrcqNNG?jvF8uZ!MbB>q*q}&JIe-iMFGwYrYz&jUGmO)HS1mNMz zq3v!sx6+*CLOHaw!I0fx`~A%Wr@Dv-2eg~?H;b5Hjpn6$QQ{iDOMej>b72i}w$1CFhS*;U{blsyKYer`Y63%^PSS0&882EEEYJt5ff z6?ifWoZVV&Y%PqfgSUSO`%=5s-~Tndkpmgue}a4e6sCaC(W^pI@B5^|4@fIkNz2zr zgGWle{wh@z8GZNoCF^gcVV5NLNTYUcwRBsRls!!HtT$@^86nNtDcP1uc}{6vrZi`o z6gyp-`ZuX@bhp`jnDp(K&M|fUQe&Rq{Zn$xk_K9&rO!)0nJf)|MM_vLZ9NozBsBs1 ze+NkwRnk2VOO7Fu!!F%3S*lEu{9BB^N7JR;uS$!Oq^p@m&2?0o*CrLUNZx168=tS1 z9&eKF@JPLjrGb~F!Yt|Z*NlF_YH9r?DaR#kpJCJjuS->HrOD$ZN1K!~Ny`3(^vW2i zttmXPMGEta=LB5o4X#q)BBWJA?+ZYme~_o+G6W|88zHI%$nPc=Lx&w$3{hu*Ec4S9 zcmW!`;HiX!Oz58uw$R>fgWw_vmUq5iEN9Glnv0;(3BgsJ<7{#sFg1Kjg$Mou+n2w1 zzUcN}yzf97oVGc|0000bbVXQnWMOn=I%9HWVRU5xGB7bYEig7MGBZ>%GCD9eVmdG} zD=;%UFffeNm(lppnF*z+THZ3wUR5CI;Fg7|cF)J`L uIxsN(i7##d000bhMObufVPa)$05C2wFfK5&hN`;&0000y9lB|-8I zl_nKQ=Ra15s(OL6>PxBn9?5)G>a|ufr%0AZr1%4pZDhxCB&lGp6!ex9e-~lY4d8Vn zq}Yj)X}uIvD`mw?ITg~PsgkK$n(LJ8J=>YIR@(fO)ajfw)+!y$lJYl6hn|og8zyxr zk#^L#58QA{Dt=E|^o<14sxS}W*;AyRUQ$?%R5qqXuSk(1Et3C8DI?4Cz^lup!B?cd z^-|s%qjz?ubnkF!BvM6xfA<;tUY2I8l39gSkGx-Sq)`{P?wF{3YZN(NpNKp)TJ4{#uT`8vFY`-9_}-I zs=&VpeC^;nzgcv60I%5u=2_so!8Od!1YPEUEgl@z?uQOdg#qc1xdTqbwl*M5aCBhP z+uDP4tWMwjx;%h8f98SL0r1-I`gyOTU>XdKiJm2uF}+qJQNAvl(Rxj%RXc@AA@1E&oVyx`r3!MOywKM8a1 z2g_Hm3Fw*xZ2bG+h7-SgH`rsK#_HNwy%g-J5ReI-+j%VWe~pA?C6GP{4%b5RdN`H^ zTf2ejIG92pFqnT-2Jj)fp>7Xc@^fu0&4n8$V8G8{UhY27xeBTR;YJ+v`yM8L4byXA z_$W{|6kLF=^I=f>Z3K_7g7-N%84eD6E8~605|9R?M*;Ef1FQE!>{Xce9F$!&dKX4R zZVZI3gCTXde-V7#IT*eb4yQooh!*{HC?qGt&V1by~#@-&E!{qBQ!3=(-E&8ML zVNV*2y9j5#g?&CymkR50VcQhAE6SKNGz!M&!$XO#2Yb&Dm>K~Oyx7i(OOlGEs>M=a zx>Qgre^mxc%4?%9NNNn18n;N==xWy_O6O-u`H52bWXZX|?T0Eyj?`e69LcVpGev3) zlpMuI-6Y-l&v^&DBlRa!WfJWBQ*oaF001R)MObuXVRU6WV{&C-bY%cCFflnTFf}bQ zHB>P%Ix;poFfc1HGdeIZL!*QL0000bbVXQnlM)9KIyEgaHB>P%Ix;poFfc1HGdeIZ qGX6V50000BbVXQnY++($YydDWIW94{;D&qv0000