From 50fe3febbcda23f9b6626430fd5c1a872125d796 Mon Sep 17 00:00:00 2001 From: Beha Date: Thu, 11 Jul 2019 14:48:13 -0400 Subject: [PATCH] Mana sparks. --- init.lua | 77 +++++++++++++++++++++++++++++++++++---- mod.conf | 2 +- textures/xmana_spark.png | Bin 0 -> 268 bytes 3 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 textures/xmana_spark.png diff --git a/init.lua b/init.lua index d11a665..fe8cdf0 100644 --- a/init.lua +++ b/init.lua @@ -7,7 +7,7 @@ function xmana.level_to_mana(level) end function xmana.mana_to_level(mana) - return math.floor(math.max(0, math.log(math.max(0.001, mana / 100)) / math.log(1.1)) + 0.5) + return math.floor(math.max(0, math.log(math.max(0.001, mana / 100)) / math.log(1.1))) end -- Maximum mana possible. @@ -44,15 +44,15 @@ hb.register_hudbar("xmana", 0xFFFFFF, S"Mana", { bgicon = "xmana_bgicon.png" }, 0, xmana.MAX_LEVEL, false) -minetest.register_privilege("xmana", { - "Can modify player mana.", +minetest.register_privilege("mana", { + S"Can modify player mana.", give_to_singleplayer = false }) -minetest.register_chatcommand("xmana", { - params = " [] []", - description = "Set player mana.", - privs = {xmana = true}, +minetest.register_chatcommand("mana", { + params = S" [] []", + description = S"Set player mana.", + privs = {mana = true}, func = function(caller, param) local split = param:split(" ") @@ -78,7 +78,7 @@ if minetest.get_modpath("doc") then name = S"Mana", data = { text = table.concat({ - S"Mana is the measure of energy gathered within you.", + S"Mana is the measure of energy gathered within you.\n", S"Mana is organized into levels, with higher levels consisting of exponentially more mana.", S"You may gain mana through various means.", S"You may spend mana on special effects or items.", @@ -86,3 +86,64 @@ if minetest.get_modpath("doc") then }, }) end + +xmana.spark_values = {1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683} + +for i,v in ipairs(xmana.spark_values) do + minetest.register_entity("xmana:spark_" .. i, { + physical = true, + collide_with_objects = false, + hp_max = 1, + visual = "sprite", + visual_size = {x = 0.5 + i / 5, y = 0.5 + i / 10}, + textures = {"xmana_spark.png"}, + collisionbox = {-0.3,-0.3,-0.3,0.3,-0.3,0.3}, + }) +end + +function xmana.sparks(pos, value, owner) + local function best(n) + for i=#xmana.spark_values,1,-1 do + local v = xmana.spark_values[i] + if v <= value then + return i,v + end + end + error("invalid value") + end + while value > 0 do + local i,v = best(value) + value = value - v + + local function r(c) + return c - 0.5 + math.random() + end + local obj = minetest.add_entity(vector.apply(pos, r), "xmana:spark_" .. i, owner) + if obj then + obj:set_velocity(vector.multiply(vector.apply(vector.new(0, 1, 0), r), 3)) + obj:set_velocity(vector.new(0, -9.81, 0)) + end + end +end + +minetest.register_chatcommand("manaspark", { + params = S"", + description = S"Spawn mana sparks.", + privs = {xmana = true}, + func = function(caller, param) + local amount = tonumber(param) + local player = minetest.get_player_by_name(caller) + + if not amount then + return false, S"Invalid amount." + end + + if not player then + return false, S"Cannot get position." + end + + xmana.sparks(player:get_pos(), amount, caller) + + return true, "Spawned sparks." + end, +}) diff --git a/mod.conf b/mod.conf index 9dea63a..14bf365 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = xmana description = A thematic XP-like mana system. depends = hudbars -optional_depends = doc, aurum +optional_depends = doc diff --git a/textures/xmana_spark.png b/textures/xmana_spark.png new file mode 100644 index 0000000000000000000000000000000000000000..09e77dbe88d356b378d648396a1c24adfc6e3168 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP-JGYRY(bMql`amJc64!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiF3SPZ!4!i_=eoPV*g5;Ltwu{@d5bZ#JohPMHx~Cedk_u#lBy zpIN7z@tGU%1={_WdluKMR5-lG`AFmGTJ!ZT+kbJ-T`3^^LZ>`oy+BCN%|9|FSD9LQ z8Wz4wUy^TjR7KNA_1RU1$4t2yk7MrT-RIwSy#D?4GRC9V)Td9rcyvC{eg;ohKbLh* G2~7amEnlMm literal 0 HcmV?d00001