From b26908f7475a174b6c27c8a20fb559bd379ca6d2 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 11 Aug 2016 17:47:02 +0200 Subject: [PATCH] Initial commit --- depends.txt | 2 + description.txt | 1 + init.lua | 81 ++++++++++++++++++++++ locale/de.txt | 1 + locale/template.txt | 1 + nodes.lua | 49 +++++++++++++ screenshot.png | Bin 0 -> 5280 bytes textures/tsm_surprise_question_anim.png | Bin 0 -> 2343 bytes textures/tsm_surprise_question_noanim.png | Bin 0 -> 182 bytes textures/tsm_surprise_question_used.png | Bin 0 -> 118 bytes 10 files changed, 135 insertions(+) create mode 100644 depends.txt create mode 100644 description.txt create mode 100644 init.lua create mode 100644 locale/de.txt create mode 100644 locale/template.txt create mode 100644 nodes.lua create mode 100644 screenshot.png create mode 100644 textures/tsm_surprise_question_anim.png create mode 100644 textures/tsm_surprise_question_noanim.png create mode 100644 textures/tsm_surprise_question_used.png diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..99d02f1 --- /dev/null +++ b/depends.txt @@ -0,0 +1,2 @@ +treasurer +intllib? diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..d6ba129 --- /dev/null +++ b/description.txt @@ -0,0 +1 @@ +Randomly spawns surprise blocks closely about ground level. When mined, those blocks drop random low-grade treasures. diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..403ce24 --- /dev/null +++ b/init.lua @@ -0,0 +1,81 @@ +--[[ + TSM: Surprise blocks + + This mod adds surprise blocks to Minetest. + When destroyed, they drop one or more random items. + + The item is selected with the “treasurer” mod. + Therefore, this is a treasure spawning mod. + You also need to install at least one treasure registraton mod, + otherwise, the questinon mark blocks stay empty. + Refer to the documentation of the “treasurer” mod to learn more. +]] +local S +if (minetest.get_modpath("intllib")) then + dofile(minetest.get_modpath("intllib").."/intllib.lua") + S = intllib.Getter(minetest.get_current_modname()) +else + S = function ( s ) return s end +end + +dofile(minetest.get_modpath("tsm_surprise").."/nodes.lua") + +--[[ here are some configuration variables ]] +local blocks_per_chunk = 1 -- number of blocks per chunk. +local height_min = -30000 -- minimum spawning height +local height_max = 30000 -- maximum spawning height +local height_above_ground = 4 + +-- generation code +minetest.register_on_generated(function(minp, maxp, seed) + -- get the water level and convert it to a number + local water_level = minetest.setting_get("water_level") + if water_level == nil or type(water_level) ~= "number" then + water_level = 1 + else + water_level = tonumber(water_level) + end + + if(maxp.y < height_min or minp.y > height_max) then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + for i=1, blocks_per_chunk do + local pos = {x=math.random(minp.x,maxp.x),z=math.random(minp.z,maxp.z), y=minp.y} + local env = minetest.env + + -- Find ground level + local ground = nil + local top = y_max + if env:get_node({x=pos.x,y=y_max,z=pos.z}).name ~= "air" then + for y=y_max,y_min,-1 do + local p = {x=pos.x,y=y,z=pos.z} + if env:get_node(p).name == "air" then + top = y + break + end + end + end + for y=top,y_min,-1 do + local p = {x=pos.x,y=y,z=pos.z} + if env:get_node(p).name ~= "air" then + ground = y + break + end + end + + if(ground~=nil) then + local block_pos = {x=pos.x,y=ground+height_above_ground, z=pos.z} + local nn = minetest.get_node(block_pos).name + if nn == "air" then + -- Place the question mark block + local block = {} + block.name = "tsm_surprise:question" + + minetest.set_node(block_pos, block) + + end + end + end +end) diff --git a/locale/de.txt b/locale/de.txt new file mode 100644 index 0000000..823db4c --- /dev/null +++ b/locale/de.txt @@ -0,0 +1 @@ +Surprise block=Überraschungsblock diff --git a/locale/template.txt b/locale/template.txt new file mode 100644 index 0000000..a636229 --- /dev/null +++ b/locale/template.txt @@ -0,0 +1 @@ +Surprise block diff --git a/nodes.lua b/nodes.lua new file mode 100644 index 0000000..082411f --- /dev/null +++ b/nodes.lua @@ -0,0 +1,49 @@ +--[[ + Register the question mark node +]] + +do + local nodedef = { + description = S("Surprise block"), + tiles = { { name = "tsm_surprise_question_anim.png", animation = { + type = "vertical_frames", aspect_w=16, aspect_h=16, length=2.0 } } }, + drop = "", + groups = { cracky=3, }, + after_destruct = function (pos, oldnode) + local drops = treasurer.select_random_treasures(1,0,3) + for _,item in ipairs(drops) do + local count, name + if type(item) == "string" then + name, count = item:match("^([a-zA-Z0-9_:]*) ([0-9]*)$") + if not name then + name = item + end + if not count then + count = 1 + end + else + count = item:get_count() + name = item:get_name() + end + if not inv or not inv:contains_item("main", ItemStack(name)) then + for i=1,count do + local obj = minetest.env:add_item(pos, name) + if obj ~= nil then + obj:get_luaentity().collect = true + local x = math.random(1, 5) + if math.random(1,2) == 1 then + x = -x + end + local z = math.random(1, 5) + if math.random(1,2) == 1 then + z = -z + end + obj:setvelocity({x=1/x, y=obj:getvelocity().y, z=1/z}) + end + end + end + end + end, + } + minetest.register_node("tsm_surprise:question",nodedef) +end diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..69c62f34dae3668dde24b23f1f42c5ffd6a94bd2 GIT binary patch literal 5280 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 bf2_?IS=E&`KXC*9Ji>PE+(#`TGvfabT=o|q literal 0 HcmV?d00001 diff --git a/textures/tsm_surprise_question_anim.png b/textures/tsm_surprise_question_anim.png new file mode 100644 index 0000000000000000000000000000000000000000..84c88c94080fa77f4ecc494828edb1a782fb7924 GIT binary patch literal 2343 zcma)8XIPWx8vZgc5yT`S#DWb7iUC162SJNrHW1)|1{J~(n~N<1hssJcYFNrBVrW{S zDQOV2MW!Gah9$uw%8(%^V3-b!6oE);ux0fNa4KGxKl1B)e?8az+|NC}bn;=6x~jG+ z008PP&cvhO7YzUq9&!WtDm*OV0RVE^g=l}AChqie5Az~zy*Fy`AT^!J_UiGy;Z2#Uz#4&Ll=_V2$Bh7ZRP_V4m23u>ZNTpC2hSiY&Ws zs%`(GneU9989pO zRkXPi>r$m>W_R+%tx`YU*q1LXAtJS1XK|&CyW8Y5kT#+o#Ss~-af)jdI$4U&V<7suyIVy>eS#3)2FjPesSG}?F zB)&&RZE^Rgy@(BF;v>p9x_GC{AlEIyMhE_SMn~bS@1vk(a)C}SzZ=TM#3&PPcCfSy%S6_uEDWa*R!^&a`U zMA-b~dc-o0=LSFHnL@T?#mD~X5svas$QKygYi|8bJ*y42eTCDjXK;jpAg+X)_AnX2 z0ertQKb_1W=9nNiUG3)^Pio<5QVIu{OxxPM6t-s{JtwH2 zgySYOZ49Hrj^oCVS5#a>Q`j3J66NX;A zy~-wUf`=b$Lf|zLPiXF7yBB@#e}OHAiTrmFl1_BGi#?B6!y}hyschE)n>Wco%zloor_REr!+s>O56e`Ed;DXG|+IvfYh{zFw)@UE3$F~lZ)uy(dH%RW#)-?#n0sq6wE6wGY3HL zg2TQI4s-iJBk$MCEraqj!Y?xr+GJpLd>Lu|u`BZbugQQ0rCH1(b;zEWV(8s8_*k6$ zTK*vEqm|{S)>h_5VU#|$oJqfM$3`C&f&xr@TQgvw-#1(WPYt2i37am4YMA(j8olMb z54(pSEF0_js}W|ART7XA7eMI*1*8`{r-AQX9(0c#0S@fX5ST^lJ;NM*oP6_wj8MBn zAN9jushZQEz0IQE{#d6FZL1q?&bAH1Dt2Jrkth7ZbR>(a0NnIp#tIC z2cJT?hvt@3-~qpscz$CxXqpZ}2=}LmD-Vl9=q;3)5(adfob&42J>$7_qOF0uYB)oGug z$|5APh_e3Tq{jnr?|tmobZMzOdukN+>6y9w0uMUV;Gh;hUqR%=e5Xtn38v6_TLI_I zk)Zy$%zu!YlBMrr*20o7YN%{j+DB&7xkI0^5H;4o3?ocb{syx?fA`p~!8EHorZh}! z{wum~C=u8A8cv(>uZ}N1wz~P0yn2|7SK#*npVhBjePt_N{B%kNHOX_I=&%r|K|o|;emYdVW*l6t zks{KZBA}&M*FOlkPxdHFqtIWDol!}~(4+5aj#X1S#l>E$kyg`C)&`!Y*miBEw;5jP znPnle#@K`Us3;2<Nl$xB+UUF)%lN~JU7zN{lgwg@IK7a{H3R2@&{e$->M zkk!tymz`I-8ZQmdEr>6LXn@fkJ|Cp08^=iJ1{Kwj-DopKaeohn4>c{%a%VyUhi@eS va{|p!ExeNj1yVKNlLc$(%ak|AX_;o4FbcT4G7;4ONr84AX1lCthK@@a*stBl%6Ovo033 z1~9DH-m=efGGm*Ikn)CIr8$o#FEIC))tWnV1*3hNT9sfO>zRxD1zUWN90=IdS92d!n!4xQYim^cZ!fqj4|E8Fr>mdKI;Vst02s_gVgLXD literal 0 HcmV?d00001 diff --git a/textures/tsm_surprise_question_used.png b/textures/tsm_surprise_question_used.png new file mode 100644 index 0000000000000000000000000000000000000000..de76f851ccf289b1c0499aec3231e53935ee1a06 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ww^AIAr_~TQxXz>oOfVMNK8mb z@Ytr{|M`wE50B3YnIMxx40jlUVj9;>>uhu~$U3lsQG<;qA}DQ%i8V7rlPQn9BJ(^0 Ppg|0tu6{1-oD!M<3Kbyn literal 0 HcmV?d00001