From 4018a5c8e83b26ff8a54d8ecf779e28011a384a7 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 21 Sep 2020 10:03:08 +0100 Subject: [PATCH 01/18] Added spawn.lua check for custom mob spawns, example file included --- dirt_monster.lua | 2 + dungeon_master.lua | 2 + init.lua | 45 ++++++++---- lava_flan.lua | 2 + mese_monster.lua | 2 + oerkki.lua | 2 + sand_monster.lua | 3 +- spawn_example.lua | 173 +++++++++++++++++++++++++++++++++++++++++++++ spider.lua | 2 + stone_monster.lua | 2 + tree_monster.lua | 2 + 11 files changed, 224 insertions(+), 13 deletions(-) create mode 100644 spawn_example.lua diff --git a/dirt_monster.lua b/dirt_monster.lua index 3bf5fbd..518116a 100644 --- a/dirt_monster.lua +++ b/dirt_monster.lua @@ -57,6 +57,7 @@ if minetest.get_modpath("ethereal") then spawn_on = "ethereal:gray_dirt" end +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:dirt_monster", nodes = {spawn_on}, @@ -67,6 +68,7 @@ mobs:spawn({ min_height = 0, day_toggle = false, }) +end mobs:register_egg("mobs_monster:dirt_monster", S("Dirt Monster"), "default_dirt.png", 1) diff --git a/dungeon_master.lua b/dungeon_master.lua index 044f106..bcc04f8 100644 --- a/dungeon_master.lua +++ b/dungeon_master.lua @@ -62,6 +62,7 @@ mobs:register_mob("mobs_monster:dungeon_master", { }) +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:dungeon_master", nodes = {"default:stone"}, @@ -70,6 +71,7 @@ mobs:spawn({ active_object_count = 1, max_height = -70, }) +end mobs:register_egg("mobs_monster:dungeon_master", S("Dungeon Master"), "fire_basic_flame.png", 1, true) diff --git a/init.lua b/init.lua index 9f8b5f6..02142fd 100644 --- a/init.lua +++ b/init.lua @@ -1,22 +1,43 @@ -- Load support for intllib. -local path = minetest.get_modpath(minetest.get_current_modname()) +local path = minetest.get_modpath(minetest.get_current_modname()) .. "/" + local S = minetest.get_translator and minetest.get_translator("mobs_monster") or - dofile(path .. "/intllib.lua") + dofile(path .. "intllib.lua") + mobs.intllib = S + +-- Check for custom mob spawn file +local input = io.open(path .. "spawn.lua", "r") + +if input then + mobs.custom_spawn_monster = true + input:close() + input = nil +end + + -- Monsters -dofile(path .. "/dirt_monster.lua") -- PilzAdam -dofile(path .. "/dungeon_master.lua") -dofile(path .. "/oerkki.lua") -dofile(path .. "/sand_monster.lua") -dofile(path .. "/stone_monster.lua") -dofile(path .. "/tree_monster.lua") -dofile(path .. "/lava_flan.lua") -- Zeg9 -dofile(path .. "/mese_monster.lua") -dofile(path .. "/spider.lua") -- AspireMint +dofile(path .. "dirt_monster.lua") -- PilzAdam +dofile(path .. "dungeon_master.lua") +dofile(path .. "oerkki.lua") +dofile(path .. "sand_monster.lua") +dofile(path .. "stone_monster.lua") +dofile(path .. "tree_monster.lua") +dofile(path .. "lava_flan.lua") -- Zeg9 +dofile(path .. "mese_monster.lua") +dofile(path .. "spider.lua") -- AspireMint + + +-- Load custom spawning +if mobs.custom_spawn_monster then + dofile(path .. "spawn.lua") +end + -- Lucky Blocks -dofile(path .. "/lucky_block.lua") +dofile(path .. "lucky_block.lua") + print (S("[MOD] Mobs Redo Monsters loaded")) diff --git a/lava_flan.lua b/lava_flan.lua index 55de98f..f63a90c 100644 --- a/lava_flan.lua +++ b/lava_flan.lua @@ -89,6 +89,7 @@ mobs:register_mob("mobs_monster:lava_flan", { }) +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:lava_flan", nodes = {"default:lava_source"}, @@ -96,6 +97,7 @@ mobs:spawn({ active_object_count = 1, max_height = 0, }) +end mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1) diff --git a/mese_monster.lua b/mese_monster.lua index 40a99b2..a480a61 100644 --- a/mese_monster.lua +++ b/mese_monster.lua @@ -56,6 +56,7 @@ mobs:register_mob("mobs_monster:mese_monster", { }) +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:mese_monster", nodes = {"default:stone"}, @@ -64,6 +65,7 @@ mobs:spawn({ active_object_count = 1, max_height = -20, }) +end mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1) diff --git a/oerkki.lua b/oerkki.lua index 7cb40fe..6e42c42 100644 --- a/oerkki.lua +++ b/oerkki.lua @@ -60,6 +60,7 @@ mobs:register_mob("mobs_monster:oerkki", { }) +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:oerkki", nodes = {"default:stone"}, @@ -67,6 +68,7 @@ mobs:spawn({ chance = 7000, max_height = -10, }) +end mobs:register_egg("mobs_monster:oerkki", S("Oerkki"), "default_obsidian.png", 1) diff --git a/sand_monster.lua b/sand_monster.lua index f1c67d5..a46f509 100644 --- a/sand_monster.lua +++ b/sand_monster.lua @@ -116,7 +116,7 @@ mobs:register_mob("mobs_monster:sand_monster", { ]] }) - +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:sand_monster", nodes = {"default:desert_sand"}, @@ -124,6 +124,7 @@ mobs:spawn({ active_object_count = 2, min_height = 0, }) +end mobs:register_egg("mobs_monster:sand_monster", S("Sand Monster"), "default_desert_sand.png", 1) diff --git a/spawn_example.lua b/spawn_example.lua new file mode 100644 index 0000000..7babd08 --- /dev/null +++ b/spawn_example.lua @@ -0,0 +1,173 @@ + +--[[ Spawn Template, defaults to values shown if line not provided + +mobs:spawn({ + + name = "", + + - Name of mob, must be provided e.g. "mymod:my_mob" + + nodes = {"group:soil, "group:stone"}, + + - Nodes to spawn on top of. + + neighbors = {"air"}, + + - Nodes to spawn beside. + + min_light = 0, + + - Minimum light level. + + max_light = 15, + + - Maximum light level, 15 is sunlight only. + + interval = 30, + + - Spawn interval in seconds. + + chance = 5000, + + - Spawn chance, 1 in every 5000 nodes. + + active_object_count = 1, + + - Active mobs of this type in area. + + min_height = -31000, + + - Minimum height level. + + max_height = 31000, + + - Maximum height level. + + day_toggle = nil, + + - Daytime toggle, true to spawn during day, false for night, nil for both + + on_spawn = nil, + + - On spawn function to run when mob spawns in world + + on_map_load = nil, + + - On map load, when true mob only spawns in newly generated map areas +}) +]]-- + + +-- Dirt Monster + +mobs:spawn({ + name = "mobs_monster:dirt_monster", + nodes = {"default:dirt_with_grass"}, + min_light = 0, + max_light = 7, + chance = 6000, + active_object_count = 2, + min_height = 0, + day_toggle = false, +}) + +-- Dungeon Master + +mobs:spawn({ + name = "mobs_monster:dungeon_master", + nodes = {"default:stone"}, + max_light = 5, + chance = 9000, + active_object_count = 1, + max_height = -70, +}) + +-- Lava Flan + +mobs:spawn({ + name = "mobs_monster:lava_flan", + nodes = {"default:lava_source"}, + chance = 1500, + active_object_count = 1, + max_height = 0, +}) + +-- Mese Monster + +mobs:spawn({ + name = "mobs_monster:mese_monster", + nodes = {"default:stone"}, + max_light = 7, + chance = 5000, + active_object_count = 1, + max_height = -20, +}) + +-- Oerkki + +mobs:spawn({ + name = "mobs_monster:oerkki", + nodes = {"default:stone"}, + max_light = 7, + chance = 7000, + max_height = -10, +}) + +-- Sand Monster + +mobs:spawn({ + name = "mobs_monster:sand_monster", + nodes = {"default:desert_sand"}, + chance = 7000, + active_object_count = 2, + min_height = 0, +}) + +-- Spider (above ground) + +mobs:spawn({ + name = "mobs_monster:spider", + nodes = { + "default:dirt_with_rainforest_litter", "default:snowblock", + "default:snow", "ethereal:crystal_dirt", "ethereal:cold_dirt" + }, + min_light = 0, + max_light = 8, + chance = 7000, + active_object_count = 1, + min_height = 25, + max_height = 31000, +}) + +-- Spider (below ground) +mobs:spawn({ + name = "mobs_monster:spider", + nodes = {"default:stone_with_mese", "default:mese", "default:stone"}, + min_light = 0, + max_light = 7, + chance = 7000, + active_object_count = 1, + min_height = -31000, + max_height = -40, +}) + +-- Stone Monster + +mobs:spawn({ + name = "mobs_monster:stone_monster", + nodes = {"default:stone", "default:desert_stone", "default:sandstone"}, + max_light = 7, + chance = 7000, + max_height = 0, +}) + +-- Tree Monster + +mobs:spawn({ + name = "mobs_monster:tree_monster", + nodes = {"default:leaves", "default:jungleleaves"}, + max_light = 7, + chance = 7000, + min_height = 0, + day_toggle = false, +}) diff --git a/spider.lua b/spider.lua index 98def91..9cb4ae1 100644 --- a/spider.lua +++ b/spider.lua @@ -178,6 +178,7 @@ mobs:register_mob("mobs_monster:spider", { }) +if not mobs.custom_spawn_monster then -- above ground spawn mobs:spawn({ name = "mobs_monster:spider", @@ -204,6 +205,7 @@ mobs:spawn({ min_height = -31000, max_height = -40, }) +end mobs:register_egg("mobs_monster:spider", S("Spider"), "mobs_cobweb.png", 1) diff --git a/stone_monster.lua b/stone_monster.lua index 876b6f7..34197d7 100644 --- a/stone_monster.lua +++ b/stone_monster.lua @@ -62,6 +62,7 @@ mobs:register_mob("mobs_monster:stone_monster", { }) +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:stone_monster", nodes = {"default:stone", "default:desert_stone", "default:sandstone"}, @@ -69,6 +70,7 @@ mobs:spawn({ chance = 7000, max_height = 0, }) +end mobs:register_egg("mobs_monster:stone_monster", S("Stone Monster"), "default_stone.png", 1) diff --git a/tree_monster.lua b/tree_monster.lua index 039bb72..c1abbea 100644 --- a/tree_monster.lua +++ b/tree_monster.lua @@ -67,6 +67,7 @@ mobs:register_mob("mobs_monster:tree_monster", { }) +if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:tree_monster", nodes = {"default:leaves", "default:jungleleaves"}, @@ -75,6 +76,7 @@ mobs:spawn({ min_height = 0, day_toggle = false, }) +end mobs:register_egg("mobs_monster:tree_monster", S("Tree Monster"), "default_tree_top.png", 1) From 2c88a98ca312ce17e5ffc3159c005d78f7d9a062 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 21 Jan 2021 10:15:19 +0000 Subject: [PATCH 02/18] update mod.conf info --- mod.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mod.conf b/mod.conf index 3c4fe39..f072a86 100644 --- a/mod.conf +++ b/mod.conf @@ -1 +1,4 @@ name = mobs_monster +depends = default, mobs +optional depends = lucky_block, toolranks, intllib +description = Adds many types of monster. From dbc501da644e227fbb1ade2469635b5d3335bc48 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Thu, 28 Jan 2021 14:38:57 +0000 Subject: [PATCH 03/18] lava orb and axe items glow --- lava_flan.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lava_flan.lua b/lava_flan.lua index f63a90c..cbf1cf9 100644 --- a/lava_flan.lua +++ b/lava_flan.lua @@ -109,6 +109,7 @@ mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility minetest.register_craftitem(":mobs:lava_orb", { description = S("Lava orb"), inventory_image = "zmobs_lava_orb.png", + light_source = 14, }) minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb") @@ -178,7 +179,8 @@ minetest.register_tool(":mobs:pick_lava", { }, damage_groups = {fleshy = 6, fire = 1}, }, - groups = {pickaxe = 1} + groups = {pickaxe = 1}, + light_source = 14 }) minetest.register_craft({ From 9835105cf94177b47b547bc29ebe8a0e012ff36d Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 1 Feb 2021 08:07:59 +0000 Subject: [PATCH 04/18] fix typo in mod.conf --- mod.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mod.conf b/mod.conf index f072a86..7979671 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = mobs_monster depends = default, mobs -optional depends = lucky_block, toolranks, intllib -description = Adds many types of monster. +optional_depends = lucky_block, toolranks, intllib +description = Adds many types of monsters. From b1a94c5abc99a2febda8c58c9ca3c8d89020751a Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 1 Mar 2021 10:24:56 +0000 Subject: [PATCH 05/18] update spider types, have jungle tarantula spit webs --- spider.lua | 150 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 116 insertions(+), 34 deletions(-) diff --git a/spider.lua b/spider.lua index 9cb4ae1..6a9c5fa 100644 --- a/spider.lua +++ b/spider.lua @@ -11,6 +11,46 @@ local get_velocity = function(self) return (v.x * v.x + v.z * v.z) ^ 0.5 end + +local spider_types = { + + { nodes = {"default:snow", "default:snowblock", "default:dirt_with_snow"}, + skins = {"mobs_spider_snowy.png"}, + docile = true, + drops = nil + }, + + { nodes = {"default:dirt_with_rainforest_litter", "default:jungletree"}, + skins = {"mobs_spider_orange.png"}, + docile = true, + drops = nil, + shoot = true + }, + + { nodes = {"default:stone", "default:gravel"}, + skins = {"mobs_spider_grey.png"}, + docile = nil, + drops = nil + }, + + { nodes = {"default:mese", "default:stone_with_mese"}, + skins = {"mobs_spider_mese.png"}, + docile = nil, + drops = { + {name = "farming:string", chance = 1, min = 0, max = 2}, + {name = "default:mese_crystal_fragment", chance = 2, min = 1, max = 4}} + }, + + { nodes = {"ethereal:crystal_dirt", "ethereal:crystal_spike"}, + skins = {"mobs_spider_crystal.png"}, + docile = true, + drops = { + {name = "farming:string", chance = 1, min = 0, max = 2}, + {name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}} + } +} + + -- Spider by AspireMint (CC-BY-SA 3.0 license) mobs:register_mob("mobs_monster:spider", { @@ -53,7 +93,7 @@ mobs:register_mob("mobs_monster:spider", { light_damage = 0, animation = { speed_normal = 15, - speed_run = 20,--15, + speed_run = 20, stand_start = 0, stand_end = 0, walk_start = 1, @@ -63,42 +103,39 @@ mobs:register_mob("mobs_monster:spider", { punch_start = 25, punch_end = 45, }, - -- what kind of spider are we spawning? + + -- check surrounding nodes and spawn a specific spider on_spawn = function(self) local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp - -- snowy spider - if minetest.find_node_near(pos, 1, - {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then - self.base_texture = {"mobs_spider_snowy.png"} - self.object:set_properties({textures = self.base_texture}) - self.docile_by_day = true - -- tarantula - elseif minetest.find_node_near(pos, 1, - {"default:dirt_with_rainforest_litter", "default:jungletree"}) then - self.base_texture = {"mobs_spider_orange.png"} - self.object:set_properties({textures = self.base_texture}) - self.docile_by_day = true - -- grey spider - elseif minetest.find_node_near(pos, 1, - {"default:stone", "default:gravel"}) then - self.base_texture = {"mobs_spider_grey.png"} - self.object:set_properties({textures = self.base_texture}) - -- mese spider - elseif minetest.find_node_near(pos, 1, - {"default:mese", "default:stone_with_mese"}) then - self.base_texture = {"mobs_spider_mese.png"} - self.object:set_properties({textures = self.base_texture}) - elseif minetest.find_node_near(pos, 1, - {"ethereal:crystal_dirt", "ethereal:crystal_spike"}) then - self.base_texture = {"mobs_spider_crystal.png"} - self.object:set_properties({textures = self.base_texture}) - self.docile_by_day = true - self.drops = { - {name = "farming:string", chance = 1, min = 0, max = 2}, - {name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}, - } + for n = 1, #spider_types do + + tmp = spider_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + self.docile_by_day = tmp.docile + + if tmp.drops then + self.drops = tmp.drops + end + + if tmp.shoot then + self.attack_type = "dogshoot" + self.arrow = "mobs_monster:cobweb" + self.dogshoot_switch = 1 + self.dogshoot_count_max = 60 + self.dogshoot_count2_max = 20 + self.shoot_interval = 2 + self.shoot_offset = 2 + end + + return true + end end return true -- run only once, false/nil runs every activation @@ -233,7 +270,7 @@ minetest.register_node(":mobs:cobweb", { walkable = false, groups = {snappy = 1, disable_jump = 1}, drop = "farming:string", - sounds = default.node_sound_leaves_defaults(), + sounds = default.node_sound_leaves_defaults() }) minetest.register_craft({ @@ -244,3 +281,48 @@ minetest.register_craft({ {"farming:string", "", "farming:string"}, } }) + + +local web_place = function(pos) + + local pos2 = minetest.find_node_near(pos, 1, {"air", "group:leaves"}, true) + + if pos2 then + minetest.swap_node(pos2, {name = "mobs:cobweb"}) + end +end + +mobs:register_arrow("mobs_monster:cobweb", { + visual = "sprite", + visual_size = {x = 1, y = 1}, + textures = {"mobs_cobweb.png"}, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + velocity = 15, + tail = 1, + tail_texture = "mobs_cobweb.png", + tail_size = 5, + glow = 2, + expire = 0.1, + + hit_player = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 2.0, + damage_groups = {fleshy = 3}, + }, nil) + + web_place(self.object:get_pos()) + end, + + hit_node = function(self, pos, node) + web_place(pos) + end, + + hit_mob = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 2.0, + damage_groups = {fleshy = 3}, + }, nil) + end +}) From 05ccc87150c327a36a20573e8a986fd495a7b800 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 1 Mar 2021 11:00:57 +0000 Subject: [PATCH 06/18] add additional tree monster types for ethereal trees --- oerkki.lua | 1 + textures/mobs_oerkki3.png | Bin 0 -> 1201 bytes textures/mobs_tree_monster3.png | Bin 0 -> 3179 bytes textures/mobs_tree_monster4.png | Bin 0 -> 3186 bytes textures/mobs_tree_monster5.png | Bin 0 -> 3728 bytes tree_monster.lua | 61 +++++++++++++++++++++++++++++++- 6 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 textures/mobs_oerkki3.png create mode 100644 textures/mobs_tree_monster3.png create mode 100644 textures/mobs_tree_monster4.png create mode 100644 textures/mobs_tree_monster5.png diff --git a/oerkki.lua b/oerkki.lua index 6e42c42..f706b43 100644 --- a/oerkki.lua +++ b/oerkki.lua @@ -20,6 +20,7 @@ mobs:register_mob("mobs_monster:oerkki", { textures = { {"mobs_oerkki.png"}, {"mobs_oerkki2.png"}, + {"mobs_oerkki3.png"}, }, makes_footstep_sound = false, sounds = { diff --git a/textures/mobs_oerkki3.png b/textures/mobs_oerkki3.png new file mode 100644 index 0000000000000000000000000000000000000000..8c24d5cdecbf0c8f40bd718086db83fdb7d441c8 GIT binary patch literal 1201 zcmV;i1Wx;jP)+Bmf&H0UjyRhHS2hotX*rk~$d=%PC|%^Eo|L zYO~HF4j|M`cFO?->Xt4N;#5#oac@`fOZo>uLQELn=IML$z4yJ(2r`y7U~(HyiegR{ z>w@ooe72Bha*P^U(}r@x9Hg3m@O#FT+B-fvnb&71&*eH_vc?hQIeht#2A1(OJxOkj z5kN*^t~9`6Il6iadZWZdGseC%kQ8~QQwE^m;fvFa>dD|ih0?DKBm_(ss-}T53G0>8 zbl_Bu=?tww#A^m8y2~iz0HAem==%7>8G^-$ry7t;VUAYRK(rG$Wo{tz1~*Ka-A!q> zEo9k%;MQn{_RJefrA$OaK@%zf3VqNS?Cj1EKV9WTDwn)-NPEMYGz4nk3@W~jMgTcX zA(2B7iKs0V1BD%IwVJ56ZHocpY_~BXo`jTYAK^;t5qe7LUXe+-R1wSrH=>$~frCS% zYe{3%@AUp#MHi0=x#4&K1B^q_N4x5Y%!a|m--U)O3f#b5EDwTKOU)30Wu21FC%>H* zuoQ%lS~@KGaVzX2?@Y?Xb?F+4yilVl4Z@(}_$=9?1BJ1H7e6FT8K9pI)_ zF*y{R|MjXKlg0syU9$#~@_}tzWdoVPU%j9~o%fA4s*I5k+cqkjC1NtaSU-;Ia(uU= zYa-%gG&CVJgqo>*1+!zuXSb5DorFQKXJUgZ+tmX&*U8k=^M+tC2SRQQS{Rp%u8oQB zxhmH|g_#>L9eCbB$HrtIonAZ#_-P$~1W=*F!#X1^vnQxrYoa1wZ#ie}RFwk3qrR6_ zu}OA3Lm>xkK1GsRqU_HE1jH-?a}HKjTA zJmTDb@b2{wj=v=&Riu<$DKRxeHZC>{^t};g^%mL!+p3gPo>KP9W!kw%@TzHUEz7o=<}KmzOj7pp$Dxh_=jeZ^ zf~_h#h0JRxHUcf$oW(ap^0IEO$vqAv8cmM!a0Lx7Q>5~8eV*>qj0N}F#0CfQW zg8=`K0RH9x0Nw!qtr`FS0R0G$0M$+J0Hg!jQ0)JY{{Nx=|F-^FKZel&0004WQchC< zK<3zH000YyNklzwYWB*=f=jv)^vM znY@T}Ea^y=ni=Dq51lb454Dv`u*Qavo7_3$x~>lLuJm%68S6`fCw^x_u=0s9_C($c z$72RNBfIb&_8auY;4bO8Xkbxmcxub?qF0EQZ`xxkUU#TO!9QeFU@k-z8i z&_Gw!P(>#nK%NG8oNU!t%fIHc;02+nWwCO#koTA5GpwNqTv0>AYgGn2<&IWE951bD zay-vwTzli7{i1wHc>=hCsQgo)6JRYqu&q4Z-r`d;gEE)nF5J*L#Jwu-S_Qy6D}gaK zuhfwNCpg~p$L$T=16?7#iZ?`~yixfQ@+IZ7JOPAI0H&%;bZ6D!1`3~l{CG|}y^A;U z5*7^PZ|IzZJlq@s5N`#@X=vFr`hl$_TITuJuOD)J(}l|EMxNwd6#=Y+L!!I_^zvCw zcq~AIYHh&}+)Q9f|#p8=TU%M*EcK!VI%@xnxMugD98#=#C|PpA9u zJ?o(Xj`C%9kT(PQ%#+F9&l*csGieK$NMrLln9G%;GI-K%)T!!3qbp zaF+NqM>-cSrI2MY3d}HkOL;Sv&ncf%UI0*?WCfL~K(#3d4p!tOO&vf^tSVYif6IYX zNdT-VNAj*hX@Ptx@`VLJ%@v5Iy3vGZp3$4OKpr#&Y7gC}9t!mg)NBF)4)UGKGtXFp z#R5+Namvh?F6OUN4Q{clJz71hnbs#@R27ixTIfT7!c_zLav-01hjkYPQ{1Tvm@A87 z4P_!0K6;!bMAms*`$C_*t4`!^2lA2!5O8)D>EdAO41z_IY7h4r`VA$3g{(qUD$SV_ z`D!4a$rm-qk;fRaJkPiQmOWc2pF|thoa+`*&AgAr?u??08+Ws0tB)+-QWutPyT3Uk>CO%4gaFfbdNfE1-T* z)HmFBjnYqccyOc;dU{qi0yq}xgZ#Ild;vmasRR@`=%yKlUB;4S9cvwUQ_q}6TD*+X zt|fv1C-Ut<9u~0f8=ud*l&K)2_B`xI3{aXziw1&T1SVXpd$d|M>sb>UD7rMsXDTji z;0N5(4a4P_vN`m^_|TH86`Wp_V3Kwe$mfGR^O7_-Y-x}O2EOv%>t@HC#itTKzGz}X zX??0ISda&@F!NKRfxgWpZvee&?<^w9jU-9YS9Oc|Y3+)f>L+glw`}F4F!H)uVc0OQGKL)Ok zagG=Ju-)$W`|Xw&y-D}`eQOfs-f%fPAAEek0DSZ|Jmb}yz*zgZ#Iahn4=cHDHY+{k z%@P3T`+JlR)*H+R4GWTCwX-@OFv*x;MgSfkxBc-LA9ivGfIB}Q^!+_^sMfBc;fA6c zkn}MgZ6Bl`m%9tcYHRJa`JhSjf#(;jFq{vXnJ!-A^|;yYR;?TltsW2hf43C?bACQx ze_!|W0dghHU{>;{n`s?txZM*#)+;fME5~&YfE@rX&Ii?DJ_y+13+@PTTqA8)+T0NX z0_+C>d-=EAZI?UizMc={EW4k_<^g@!d8_6|t2P0)0NC$08(|PRv|MdA`~3oRSqutM+qFRg+3xq`{{k*oVww#x{xMMAv3?w9**OA8VJygcgfL*L(}f5BvL;zrdQ*l%xSf zTY9Z0^p-{X>5kU?1>z`y{#q)HHqWw$YTKgofz+hf-@D;_05_p~_8r&Gzmx!Qm5`Y> z>|(#T+x6Y!4)-`S56;a8{xBZ|-sTnjZZ!~SW$Lc*AgL51FRd;@YMbT>Zex#-rxTe;ORTpz9zu^Q2SL2K0p81Mc>r`z)Ys9d?NqW*8!aUQvmaQ-5W5E z0P<#fcO4)R;QjMUfCZwkcp`vC`hKe3np^|u{uto?MbxfIra58EQy=a@P(P0WB0}$~ z_e%hir|+t75-qr2%ui@)ju&cOH*%GP{Sttg2mn03xLY$HUcjZhF@Qad0RfD?Wa0pT z0iLEsFZ$F2z^BrY>m2*QbY{4I!l)Axb$F}F( z(;a1%K)~_Xn>u$P52TDvk_Gd{c>w&5WQO_&WQ9=|{1Yu004&T|07c+hPnd2xbOyG& z4Dj+D0P6w3G~I$lAjtcN0Y_MpPEv`#R-E;J1X!;nw7a3}4YV2r!#0f0FIPy}nbaiu*1n3yZa{{ihX9&`{i RfBOIc002ovPDHLkV1g!G*XjTO literal 0 HcmV?d00001 diff --git a/textures/mobs_tree_monster4.png b/textures/mobs_tree_monster4.png new file mode 100644 index 0000000000000000000000000000000000000000..6299e32dfaa440f19e81eefad2486a9695d26919 GIT binary patch literal 3186 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 Date: Mon, 1 Mar 2021 12:27:12 +0000 Subject: [PATCH 07/18] add different dirt and stone type monsters --- dirt_monster.lua | 45 ++++++++++++++++++++++++++----- stone_monster.lua | 40 ++++++++++++++++++++++++++- textures/mobs_dirt_monster2.png | Bin 0 -> 594 bytes textures/mobs_dirt_monster3.png | Bin 0 -> 610 bytes textures/mobs_stone_monster2.png | Bin 3682 -> 757 bytes textures/mobs_stone_monster3.png | Bin 0 -> 3682 bytes 6 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 textures/mobs_dirt_monster2.png create mode 100644 textures/mobs_dirt_monster3.png create mode 100644 textures/mobs_stone_monster3.png diff --git a/dirt_monster.lua b/dirt_monster.lua index 518116a..31e515a 100644 --- a/dirt_monster.lua +++ b/dirt_monster.lua @@ -1,6 +1,16 @@ local S = mobs.intllib +local dirt_types = { + + { nodes = {"ethereal:dry_dirt"}, + skins = {"mobs_dirt_monster3.png"}, + drops = { + {name = "ethereal:dry_dirt", chance = 1, min = 0, max = 2} + } + } +} + -- Dirt Monster by PilzAdam @@ -19,6 +29,7 @@ mobs:register_mob("mobs_monster:dirt_monster", { mesh = "mobs_stone_monster.b3d", textures = { {"mobs_dirt_monster.png"}, + {"mobs_dirt_monster2.png"}, }, blood_texture = "default_dirt.png", makes_footstep_sound = true, @@ -48,19 +59,39 @@ mobs:register_mob("mobs_monster:dirt_monster", { punch_start = 40, punch_end = 63, }, + + -- check surrounding nodes and spawn a specific spider + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #dirt_types do + + tmp = dirt_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end }) -local spawn_on = "default:dirt_with_grass" - -if minetest.get_modpath("ethereal") then - spawn_on = "ethereal:gray_dirt" -end - if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:dirt_monster", - nodes = {spawn_on}, + nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"}, min_light = 0, max_light = 7, chance = 6000, diff --git a/stone_monster.lua b/stone_monster.lua index 34197d7..eb8d650 100644 --- a/stone_monster.lua +++ b/stone_monster.lua @@ -1,6 +1,18 @@ local S = mobs.intllib +local stone_types = { + + { nodes = {"default:desert_stone"}, + skins = {"mobs_stone_monster3.png"}, + drops = { + {name = "default:desert_cobble", chance = 1, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:gold_lump", chance = 5, min = 0, max = 2} + } + } +} + -- Stone Monster by PilzAdam @@ -34,7 +46,7 @@ mobs:register_mob("mobs_monster:stone_monster", { drops = { {name = "default:cobble", chance = 1, min = 0, max = 2}, {name = "default:coal_lump", chance = 3, min = 0, max = 2}, - {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2} }, water_damage = 0, lava_damage = 1, @@ -59,6 +71,32 @@ mobs:register_mob("mobs_monster:stone_monster", { {"default:pick_mese", 6}, {"default:pick_diamond", 7}, }, + + -- check surrounding nodes and spawn a specific spider + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #stone_types do + + tmp = stone_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end }) diff --git a/textures/mobs_dirt_monster2.png b/textures/mobs_dirt_monster2.png new file mode 100644 index 0000000000000000000000000000000000000000..964698c91eaf2f258abbf9bbb3961144f6e1f23e GIT binary patch literal 594 zcmV-Y0%7648g0H*)~RwD*qDGBue0BJH2ayk=zLmiD!C7oU`ux>bQAbvgo z0004WQchCQ?|6_|G#z%$`Pq|9erTPI7SlE z{0IZ26ibl;m^4O6s*)2j1Bu5!>qAu)OU^_LqL4%dm_;N3Q1;jnR1rpiTnJGLqKZ;B zMpR5f9yAqg*@vE-|`fgOQJRX|!jGs>^H*u)L&2ux(AXdamcGii9ngon6XkO;om5n#$W z+BJVYD@P#gu>~tejB(#Kv0j1+uw$>DX{{04qB*D>+a}f%6xEn%^~{u@HaX^Qz+>CQ zIs!F&D5cdiV~Eif0OO})+r)YTJ%x88zPQJad6^Y2;U+9QJ{Xr-aRhf^+3~@+%!((N zCSfw7*<2xT~#!yTqqHm~(a}amV{DJoLfuNtCX4y5eoyqP|F?b`PdL zh<`pCzfR)R2ixDzhVPSj_CW|+h&M@uC5doJ;@Jlwq_oNFBu;%0Ov3vlPWKW%cOECT#uwAEHk=wwzc{#Q*>R07*qoM6N<$f-XJxJOBUy literal 0 HcmV?d00001 diff --git a/textures/mobs_dirt_monster3.png b/textures/mobs_dirt_monster3.png new file mode 100644 index 0000000000000000000000000000000000000000..f11faee487913cff4e109716df40ad0ddced5f97 GIT binary patch literal 610 zcmV-o0-gPdP)P)t-skpKYu z004baHk@ETuWL!Ga80;&Q^0ym!+>4Gfmh6gR?UfF-<4?Nm0|0kaqgjP^`U6}u6g{n zfd9C7|HO*_%#Z)pm;d3O{_3HGbK#-@0004WQchCco z5NqY)B3mq+1^fSBdVoqx*>)U#V93Zs60^C4pl7X>bL0SIQc6pTWC8LE3>;s^2On`; zR%;!42ubS@!|Vd(;{b>pGlK0ecr)uv06@-|L=n+CYopPG95aG>^?ntPyMaw7{}y9H z$cSS`V0E}5QSy?&`L`G{pW+&31lkCR$&H>lnm@%g%x?e>G%Jptd0IZjHOvSoY*B+7 zJ@ZH}ajJ-Gm=QR;ET~lWDD<9rgk9XSntZhvW&|J+718Kf;VOi7vl7(4En*o#J`0p^ z^ek=<0eO*W5s~(75z9SrF-nW0XITlvyxb|@-0s`OB9C%DOHQidk?#VL8KlgM)-lQ3 zzAa)I!MCtH@iTs5u!ei^B`i<8GY+%D2)>2oiFd|fR`?A%;azwtF7FTf;9FQ4t{*t+ zgE|RASQ@T>>8KCtBn)9`xJo$cgAxukgr(s+tw()OCt(On!?iDt`e3N7kCCh%9reNQ zB!)V=hkfuniBvu4e(^L-DxFATsvdNGpsv?xJ)Oj^52j22r<2(Afe@2Wr<3^Z10j@} w=yVdhJ`h>L`6PCIPzcQFBzAouf|cwB|2)S@R;;#3W&i*H07*qoM6N<$g05r|UH||9 literal 0 HcmV?d00001 diff --git a/textures/mobs_stone_monster2.png b/textures/mobs_stone_monster2.png index 70bfc6ecee2aa2c7597cb8dfdb732595db35ad96..9c76b833e1a97bca48f937229202d8d63d74ce39 100644 GIT binary patch delta 744 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 A`~Uy| diff --git a/textures/mobs_stone_monster3.png b/textures/mobs_stone_monster3.png new file mode 100644 index 0000000000000000000000000000000000000000..70bfc6ecee2aa2c7597cb8dfdb732595db35ad96 GIT binary patch literal 3682 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 A`~Uy| literal 0 HcmV?d00001 From 57f40cf4b17f6add746aea935855cd9874d2b5a0 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 1 Mar 2021 19:47:47 +0000 Subject: [PATCH 08/18] make cave spider tiny --- spider.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spider.lua b/spider.lua index 6a9c5fa..4a74b3b 100644 --- a/spider.lua +++ b/spider.lua @@ -30,7 +30,8 @@ local spider_types = { { nodes = {"default:stone", "default:gravel"}, skins = {"mobs_spider_grey.png"}, docile = nil, - drops = nil + drops = nil, + small = true }, { nodes = {"default:mese", "default:stone_with_mese"}, @@ -134,6 +135,13 @@ mobs:register_mob("mobs_monster:spider", { self.shoot_offset = 2 end + if tmp.small then + self.object:set_properties({ + collisionbox = {-0.2, -0.2, -0.2, 0.2, 0, 0.2}, + visual_size = {x = 0.25, y = 0.25} + }) + end + return true end end From 5723ba508eff3339500c241f4ae78950579ca8e0 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 2 Mar 2021 13:35:17 +0000 Subject: [PATCH 09/18] add Land Guards --- dirt_monster.lua | 2 +- dungeon_master.lua | 4 +- init.lua | 1 + land_guard.lua | 127 ++++++++++++++++++++++++++++++++ readme.md | 6 +- sand_monster.lua | 1 + textures/mobs_land_guard.png | Bin 0 -> 1195 bytes textures/mobs_land_guard2.png | Bin 0 -> 2653 bytes textures/mobs_land_guard3.png | Bin 0 -> 3481 bytes textures/mobs_land_guard4.png | Bin 0 -> 2637 bytes textures/mobs_land_guard5.png | Bin 0 -> 2512 bytes textures/mobs_land_guard6.png | Bin 0 -> 3538 bytes textures/mobs_land_guard7.png | Bin 0 -> 2410 bytes textures/mobs_land_guard8.png | Bin 0 -> 2661 bytes textures/mobs_sand_monster2.png | Bin 0 -> 778 bytes tree_monster.lua | 2 +- 16 files changed, 138 insertions(+), 5 deletions(-) create mode 100644 land_guard.lua create mode 100644 textures/mobs_land_guard.png create mode 100644 textures/mobs_land_guard2.png create mode 100644 textures/mobs_land_guard3.png create mode 100644 textures/mobs_land_guard4.png create mode 100644 textures/mobs_land_guard5.png create mode 100644 textures/mobs_land_guard6.png create mode 100644 textures/mobs_land_guard7.png create mode 100644 textures/mobs_land_guard8.png create mode 100644 textures/mobs_sand_monster2.png diff --git a/dirt_monster.lua b/dirt_monster.lua index 31e515a..3631fb2 100644 --- a/dirt_monster.lua +++ b/dirt_monster.lua @@ -60,7 +60,7 @@ mobs:register_mob("mobs_monster:dirt_monster", { punch_end = 63, }, - -- check surrounding nodes and spawn a specific spider + -- check surrounding nodes and spawn a specific monster on_spawn = function(self) local pos = self.object:get_pos() ; pos.y = pos.y - 1 diff --git a/dungeon_master.lua b/dungeon_master.lua index bcc04f8..4b68184 100644 --- a/dungeon_master.lua +++ b/dungeon_master.lua @@ -16,8 +16,8 @@ mobs:register_mob("mobs_monster:dungeon_master", { shoot_interval = 2.2, arrow = "mobs_monster:fireball", shoot_offset = 1, - hp_min = 22, - hp_max = 45, + hp_min = 42, + hp_max = 75, armor = 60, collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7}, visual = "mesh", diff --git a/init.lua b/init.lua index 02142fd..4df355f 100644 --- a/init.lua +++ b/init.lua @@ -28,6 +28,7 @@ dofile(path .. "tree_monster.lua") dofile(path .. "lava_flan.lua") -- Zeg9 dofile(path .. "mese_monster.lua") dofile(path .. "spider.lua") -- AspireMint +dofile(path .. "land_guard.lua") -- Load custom spawning diff --git a/land_guard.lua b/land_guard.lua new file mode 100644 index 0000000..6545b33 --- /dev/null +++ b/land_guard.lua @@ -0,0 +1,127 @@ + +local S = mobs.intllib + + +local guard_types = { + + { nodes = { + "default:snow", "default:snowblock", "default:ice", + "default:dirt_with_snow" + }, + skins = {"mobs_land_guard6.png", "mobs_land_guard7.png", "mobs_land_guard8.png"}, + drops = { + {name = "default:ice", chance = 1, min = 1, max = 4}, + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:diamond", chance = 4, min = 0, max = 2}, + }, + }, + + { nodes = { + "ethereal:dry_dirt", "default:sand", "default:desert_sand", + "default:dry_dirt_with_dry_grass", "default:dry_dirt" + }, + skins = {"mobs_land_guard4.png", "mobs_land_guard5.png"}, + drops = { + {name = "default:sandstone", chance = 1, min = 1, max = 4}, + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:mese_crystal", chance = 4, min = 0, max = 2}, + }, + } +} + +-- Land Guard + +mobs:register_mob("mobs_monster:land_guard", { + type = "monster", + passive = false, + attack_type = "dogfight", + group_attack = true, + reach = 3, + damage = 15, + hp_min = 30, + hp_max = 65, + armor = 50, + collisionbox = {-0.5, -1.01, -0.5, 0.5, 1.6, 0.5}, + visual_size = {x = 1, y = 1}, + visual = "mesh", + mesh = "mobs_dungeon_master.b3d", + textures = { + {"mobs_land_guard.png"}, + {"mobs_land_guard2.png"}, + {"mobs_land_guard3.png"} + }, + makes_footstep_sound = true, + sounds = { + random = "mobs_dungeonmaster", + }, + walk_velocity = 1.5, + run_velocity = 3.4, + jump = true, + jump_height = 2.0, + floats = 0, + view_range = 15, + drops = { + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:mese_crystal", chance = 3, min = 0, max = 2}, + {name = "default:diamond", chance = 4, min = 0, max = 1}, + }, + water_damage = 0, + lava_damage = 6, + light_damage = 0, + fear_height = 8, + animation = { + stand_start = 0, + stand_end = 19, + walk_start = 20, + walk_end = 35, + punch_start = 36, + punch_end = 48, + speed_normal = 15, + speed_run = 20, + }, + + -- check surrounding nodes and spawn a specific guard + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #guard_types do + + tmp = guard_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = { tmp.skins[math.random(#tmp.skins)] } + self.object:set_properties({textures = self.base_texture}) + self.docile_by_day = tmp.docile + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end, +}) + + +if not mobs.custom_spawn_monster then +mobs:spawn({ + name = "mobs_monster:land_guard", + nodes = { + "default:snow", "default:ice", "default:stone", + "default:dry_dirt_with_dry_grass", "ethereal:dry_dirt" + }, + max_light = 7, + chance = 25000, + min_height = 0, + active_object_count = 1, +}) +end + + +mobs:register_egg("mobs_monster:land_guard", S("Land Guard"), "default_ice.png", 1) diff --git a/readme.md b/readme.md index 800079c..d00305a 100644 --- a/readme.md +++ b/readme.md @@ -27,7 +27,7 @@ Sand Monster Spiders -- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. +- Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. Stone Monster @@ -37,4 +37,8 @@ Tree Monster - Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three. +Land Guard + +- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain. + Lucky Blocks: 11 diff --git a/sand_monster.lua b/sand_monster.lua index a46f509..21c5af6 100644 --- a/sand_monster.lua +++ b/sand_monster.lua @@ -49,6 +49,7 @@ mobs:register_mob("mobs_monster:sand_monster", { mesh = "mobs_sand_monster.b3d", textures = { {"mobs_sand_monster.png"}, + {"mobs_sand_monster2.png"}, }, blood_texture = "default_desert_sand.png", makes_footstep_sound = true, diff --git a/textures/mobs_land_guard.png b/textures/mobs_land_guard.png new file mode 100644 index 0000000000000000000000000000000000000000..53100abe6d0bf46accd84e36270c765aff6e59aa GIT binary patch literal 1195 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 LNkvXXu0mjfs+Kph literal 0 HcmV?d00001 diff --git a/textures/mobs_land_guard3.png b/textures/mobs_land_guard3.png new file mode 100644 index 0000000000000000000000000000000000000000..69e86916c9611feb619efaa0a508b8279ef77c48 GIT binary patch literal 3481 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 a82RA}ei{x>=kS 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 M07*qoM6N<$f)?q*nE(I) literal 0 HcmV?d00001 diff --git a/textures/mobs_land_guard7.png b/textures/mobs_land_guard7.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9d0fd8b34306401cb029a298df2f24cd8696d0 GIT binary patch literal 2410 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 IM6N<$g0Hq^5dZ)H literal 0 HcmV?d00001 diff --git a/tree_monster.lua b/tree_monster.lua index 1708e46..99b3eaf 100644 --- a/tree_monster.lua +++ b/tree_monster.lua @@ -98,7 +98,7 @@ mobs:register_mob("mobs_monster:tree_monster", { punch_end = 62, }, - -- check surrounding nodes and spawn a specific spider + -- check surrounding nodes and spawn a specific tree monster on_spawn = function(self) local pos = self.object:get_pos() ; pos.y = pos.y - 1 From 476ad97935eb3b3306e35b71f206a248aca20589 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 2 Mar 2021 13:54:26 +0000 Subject: [PATCH 10/18] update mese monster texture --- textures/zmobs_mese_monster.png | Bin 567 -> 305 bytes textures/zmobs_mese_monster_old.png | Bin 0 -> 567 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 textures/zmobs_mese_monster_old.png diff --git a/textures/zmobs_mese_monster.png b/textures/zmobs_mese_monster.png index 55f662a7a938fba8248e4f3d3ded2744c64764fe..3d3812dda3662b8f356f03a16e1bbc8e76ba60e2 100644 GIT binary patch delta 290 zcmV+-0p0$$1hE2;7=Hu<0001iRAssPH$0L;t= zbv500DGTPE!Ct=GbNc006{EL_t(2&ux$~4#OY}MZM$#y+LWD?DfFj z6J$Z+1nnLqoVgNmj$J!|LTJ2v`SHJP0qeFGR|RI$Ci0~Ejeo%FN>Y)Hsu4g;gcy08 zh@LM2A!NsRBf2Xfn;nah#6tmPM^Ru)HmIX0aK0f{y@&*~`_Q6|V=-n@2V!1}x)!fy zAm+72A-?zeRD~G;2Im~qQsCrgS}=4#dVd1){s&SE2JZ!=257*~Es%igKstH_n?LT% ojwYZWweJF4f*TIZ9XPk}12*!EY1yJM3jhEB07*qoM6N<$f~9tMkpKVy delta 554 zcmV+_0@eMo0=EQ^7=H)@0000)q>9D>000SaNLh0L01FcU01FcV0GgZ_00007bV*G` z2i*k%4i*h)DhA2`0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~ z0001KP)t-s0000>J^;eR0LaP!)z|>n+5p+y0NvmK;p712=zjp{>j3Za1@Q9)@$>-k z^ab+t1@iR;^Y#Vw_XYL%1@`#`_xc6+`vv*@1^WC2`uzp_{ssL01^oX7{r?62{{{a5 z0RO50|NjO5|NnyjToM2P00DGTPE!Ct=GbNc0004EOGiW^U1eOX0003VNkl6UtYu#qSHBcSV@p84jM)4a%l@*_Pr@`pj)kpy5yJS* sewiRU{Ua#swo#DH!>@#+-W`_6AM17_UuzPOe*gdg07*qoM6N<$f(jP+g8%>k diff --git a/textures/zmobs_mese_monster_old.png b/textures/zmobs_mese_monster_old.png new file mode 100644 index 0000000000000000000000000000000000000000..55f662a7a938fba8248e4f3d3ded2744c64764fe GIT binary patch literal 567 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyoCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#E-MqC7;lCa+bN)sY-UJAiF1B#Zfaf$kjuc}T$GwvlA5AWo>`Ki;O^-gkfN8$ z4iwJ}@Ck7R(%yCqhmJ6uIK^=F2E+AR3^(sE+$jh*-+!_G_|5wB59===`pf$JAL}0=`p^3JKkL8$tp6Dp z{;y*A4`lrR-}FC52xu8&NswPKgTu2MX&_FLx4Vl{Y--FJAY0DU#WBRWEw0fiKA%Qm+Z%>cBSU3CYq#^;M zGeNW8D<*P0{Bg?czVjggJ<0CaM_pzd30<8$3->>r_f>t(iYA6-2SjfE)Osvc-uPSV z^rneZ;^mDdmj;zRT6RYM(uqsaXXYs!cUqGgFA=_9#4Xv|VSmq!KjNqVZMx`x$i%6y zb#0a4p&w`KW-3_!)p)ZlaKhQc>suDzlbv=#{&kshe74YpdSI|Ic)I$ztaD0e0swz; B_iF$E literal 0 HcmV?d00001 From 095d8753e0d6b3a35a1d3f4af45c9ebb1e6a3bd2 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Tue, 2 Mar 2021 18:04:01 +0000 Subject: [PATCH 11/18] add Tree Creeper --- readme.md | 2 +- textures/mobs_tree_monster6.png | Bin 0 -> 3102 bytes tree_monster.lua | 37 +++++++++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100755 textures/mobs_tree_monster6.png diff --git a/readme.md b/readme.md index d00305a..cd03fcb 100644 --- a/readme.md +++ b/readme.md @@ -35,7 +35,7 @@ Stone Monster Tree Monster -- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three. +- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom. Land Guard diff --git a/textures/mobs_tree_monster6.png b/textures/mobs_tree_monster6.png new file mode 100755 index 0000000000000000000000000000000000000000..6e884a61a9c5f122a2a0a4ac766ca01e0196c23f GIT binary patch literal 3102 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 literal 0 HcmV?d00001 diff --git a/tree_monster.lua b/tree_monster.lua index 99b3eaf..4276f02 100644 --- a/tree_monster.lua +++ b/tree_monster.lua @@ -31,7 +31,17 @@ local tree_types = { {name = "ethereal:yellow_tree_sapling", chance = 2, min = 0, max = 2}, {name = "ethereal:golden_apple", chance = 3, min = 0, max = 2}, } - } + }, + + { nodes = {"default:acacia_bush_leaves"}, + skins = {"mobs_tree_monster6.png"}, + drops = { + {name = "tnt:gunpowder", chance = 1, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:coal_lump", chance = 3, min = 0, max = 3} + }, + explode = true + }, } @@ -45,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", { --specific_attack = {"player", "mobs_animal:chicken"}, reach = 2, damage = 2, - hp_min = 7, - hp_max = 33, + hp_min = 20, + hp_max = 40, armor = 100, collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, visual = "mesh", @@ -108,6 +118,8 @@ mobs:register_mob("mobs_monster:tree_monster", { tmp = tree_types[n] + if tmp.explode and math.random(2) == 1 then return true end + if minetest.find_node_near(pos, 1, tmp.nodes) then self.base_texture = tmp.skins @@ -117,6 +129,25 @@ mobs:register_mob("mobs_monster:tree_monster", { self.drops = tmp.drops end + if tmp.explode then + self.attack_type = "explode" + self.explosion_radius = 3 + self.explosion_timer = 3 + self.damage = 21 + self.reach = 3 + self.fear_height = 4 + self.water_damage = 2 + self.lava_damage = 15 + self.light_damage = 0 + self.makes_footstep_sound = false + self.runaway_from = {"mobs_animal:kitten"} + self.sounds = { + attack = "tnt_ignite", + explode = "tnt_explode", + fuse = "tnt_ignite" + } + end + return true end end From b9666dffb4a8f57911723f10fec965f54a4f05b8 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 5 Apr 2021 08:51:13 +0100 Subject: [PATCH 12/18] add fire_damage = 0 to lava flan --- lava_flan.lua | 1 + sand_monster.lua | 1 + 2 files changed, 2 insertions(+) diff --git a/lava_flan.lua b/lava_flan.lua index cbf1cf9..800755e 100644 --- a/lava_flan.lua +++ b/lava_flan.lua @@ -37,6 +37,7 @@ mobs:register_mob("mobs_monster:lava_flan", { }, water_damage = 8, lava_damage = 0, + fire_damage = 0, light_damage = 0, immune_to = { {"mobs:pick_lava", -2}, -- lava pick heals 2 health diff --git a/sand_monster.lua b/sand_monster.lua index 21c5af6..67595be 100644 --- a/sand_monster.lua +++ b/sand_monster.lua @@ -39,6 +39,7 @@ mobs:register_mob("mobs_monster:sand_monster", { attack_type = "dogfight", pathfinding = true, --specific_attack = {"player", "mobs_npc:npc"}, + --ignore_invisibility = true, reach = 2, damage = 1, hp_min = 4, From e39d06b2d82cefca93046b7468645a894b969164 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 5 Apr 2021 08:56:12 +0100 Subject: [PATCH 13/18] add fire damage to obsidian flan --- lava_flan.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lava_flan.lua b/lava_flan.lua index 800755e..6e355fe 100644 --- a/lava_flan.lua +++ b/lava_flan.lua @@ -241,6 +241,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", { }, water_damage = 0, lava_damage = 8, + fire_damage = 0, light_damage = 0, animation = { speed_normal = 15, From 949bfec484670f9ad8e52562e01f5bbc101744fe Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Wed, 12 May 2021 10:11:34 +0100 Subject: [PATCH 14/18] initial fire spirit upload --- fire_spirit.lua | 88 ++++++++++++++++++++++++++++++++++ init.lua | 1 + textures/mobs_fire_spirit.png | Bin 0 -> 274 bytes 3 files changed, 89 insertions(+) create mode 100644 fire_spirit.lua create mode 100644 textures/mobs_fire_spirit.png diff --git a/fire_spirit.lua b/fire_spirit.lua new file mode 100644 index 0000000..6f3dac5 --- /dev/null +++ b/fire_spirit.lua @@ -0,0 +1,88 @@ + +local S = mobs.intllib + +-- Fire Spirit + +mobs:register_mob("mobs_monster:fire_spirit", { + type = "monster", + passive = false, + attack_type = "dogfight", + pathfinding = true, + reach = 2, + damage = 4, + hp_min = 25, + hp_max = 45, + armor = 100, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + visual_scale = {x = 0.5, y = 0.5, z = 0.5}, + visual = "sprite", + textures = { + {"mobs_fire_spirit.png"} + }, + glow = 14, + blood_texture = "fire_basic_flame.png", + immune_to = { + {"all"} + }, + makes_footstep_sound = false, + sounds = { + random = "fire_fire", + damage = "fire_extinguish_flame", + death = "fire_extinguish_flame" + }, + view_range = 14, + walk_velocity = 2, + run_velocity = 3, + jump = true, + drops = { + {name = "fireflies:firefly", chance = 2, min = 1, max = 1} + }, + water_damage = 1, + lava_damage = 0, + fire_damage = 0, + light_damage = 0, + fall_damage = false, + fear_height = 8, + animation = {}, + + on_die = function(self, pos) + + mobs:effect(pos, 20, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false) + + self.object:remove() + end, + + do_custom = function(self, dtime) + + self.flame_timer = (self.flame_timer or 0) + dtime + + if self.flame_timer < 0.5 then + return + end + + self.flame_timer = 0 + + local pos = self.object:get_pos() + + -- pos, amount, texture, min_size, max_size, radius, gravity, glow, fall + mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.5, 0.5, 14, nil) + + end +}) + +--[[ +if not mobs.custom_spawn_monster then +mobs:spawn({ + name = "mobs_monster:dirt_monster", + nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"}, + min_light = 0, + max_light = 7, + chance = 6000, + active_object_count = 2, + min_height = 0, + day_toggle = false, +}) +end +]] + +mobs:register_egg("mobs_monster:fire_spirit", S("Fire Spirit"), "fire_basic_flame.png", 1) diff --git a/init.lua b/init.lua index 4df355f..ef21563 100644 --- a/init.lua +++ b/init.lua @@ -29,6 +29,7 @@ dofile(path .. "lava_flan.lua") -- Zeg9 dofile(path .. "mese_monster.lua") dofile(path .. "spider.lua") -- AspireMint dofile(path .. "land_guard.lua") +dofile(path .. "fire_spirit.lua") -- Load custom spawning diff --git a/textures/mobs_fire_spirit.png b/textures/mobs_fire_spirit.png new file mode 100644 index 0000000000000000000000000000000000000000..4a31242b54fceda3cea196c6083d758a5a8b9c74 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx?BpA#)4xIr~Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8W<`RdP`(kYX@0Ff`XSG|)9P4l%T_GBLL@HrF;Vv@$T*WTH3$MMG|WN@iLm WZViVsXX*eoFnGH9xvX Date: Mon, 7 Jun 2021 17:45:41 +0100 Subject: [PATCH 15/18] fire spirit additions --- fire_spirit.lua | 42 ++++++++++++++++++++++++++---------------- readme.md | 4 ++++ 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/fire_spirit.lua b/fire_spirit.lua index 6f3dac5..6e9bea9 100644 --- a/fire_spirit.lua +++ b/fire_spirit.lua @@ -1,6 +1,16 @@ local S = mobs.intllib +local mob_drops = { + {name = "fireflies:firefly", chance = 1, min = 1, max = 1} +} + +if minetest.get_modpath("ethereal") then + + table.insert(mob_drops, + {name = "ethereal:fire_dust", chance = 1, min = 1, max = 1}) +end + -- Fire Spirit mobs:register_mob("mobs_monster:fire_spirit", { @@ -22,6 +32,8 @@ mobs:register_mob("mobs_monster:fire_spirit", { glow = 14, blood_texture = "fire_basic_flame.png", immune_to = { + {"bucket:bucket_water", 1}, + {"bucket:bucket_river_water", 1}, {"all"} }, makes_footstep_sound = false, @@ -34,9 +46,8 @@ mobs:register_mob("mobs_monster:fire_spirit", { walk_velocity = 2, run_velocity = 3, jump = true, - drops = { - {name = "fireflies:firefly", chance = 2, min = 1, max = 1} - }, + jump_height = 6, + drops = mob_drops, water_damage = 1, lava_damage = 0, fire_damage = 0, @@ -56,7 +67,7 @@ mobs:register_mob("mobs_monster:fire_spirit", { self.flame_timer = (self.flame_timer or 0) + dtime - if self.flame_timer < 0.5 then + if self.flame_timer < 0.25 then return end @@ -65,24 +76,23 @@ mobs:register_mob("mobs_monster:fire_spirit", { local pos = self.object:get_pos() -- pos, amount, texture, min_size, max_size, radius, gravity, glow, fall - mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.5, 0.5, 14, nil) - + mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.1, 0.2, 14, nil) end }) ---[[ + if not mobs.custom_spawn_monster then mobs:spawn({ - name = "mobs_monster:dirt_monster", - nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"}, - min_light = 0, - max_light = 7, - chance = 6000, - active_object_count = 2, - min_height = 0, - day_toggle = false, + name = "mobs_monster:fire_spirit", + nodes = {"default:obsidian", "caverealms:hot_cobble"}, + neighbors = {"group:fire"}, + min_light = 12, + max_light = 15, + chance = 1500, + active_object_count = 1, + max_height = -150 }) end -]] + mobs:register_egg("mobs_monster:fire_spirit", S("Fire Spirit"), "fire_basic_flame.png", 1) diff --git a/readme.md b/readme.md index cd03fcb..424777f 100644 --- a/readme.md +++ b/readme.md @@ -41,4 +41,8 @@ Land Guard - These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain. +Fire Spirit + +- Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. Will drop it's spirit and some fire dust when using ethereal. + Lucky Blocks: 11 From 5009e7439d073d0261ba0d2390b84504fcdc7e61 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Mon, 14 Jun 2021 09:38:32 +0100 Subject: [PATCH 16/18] lava flan heals while in lava --- lava_flan.lua | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lava_flan.lua b/lava_flan.lua index 6e355fe..1e957e3 100644 --- a/lava_flan.lua +++ b/lava_flan.lua @@ -36,7 +36,7 @@ mobs:register_mob("mobs_monster:lava_flan", { {name = "mobs:lava_orb", chance = 15, min = 1, max = 1}, }, water_damage = 8, - lava_damage = 0, + lava_damage = -1, fire_damage = 0, light_damage = 0, immune_to = { @@ -53,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", { run_start = 20, run_end = 28, punch_start = 20, - punch_end = 28, + punch_end = 28 }, on_die = function(self, pos) @@ -174,9 +174,13 @@ minetest.register_tool(":mobs:pick_lava", { inventory_image = "mobs_pick_lava.png", tool_capabilities = { full_punch_interval = 0.4, - max_drop_level=3, - groupcaps={ - cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3}, + max_drop_level = 3, + groupcaps = { + cracky = { + times = {[1] = 1.80, [2] = 0.80, [3] = 0.40}, + uses = 40, + maxlevel = 3 + } }, damage_groups = {fleshy = 6, fire = 1}, }, @@ -189,7 +193,7 @@ minetest.register_craft({ recipe = { {"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"}, {"", "default:obsidian_shard", ""}, - {"", "default:obsidian_shard", ""}, + {"", "default:obsidian_shard", ""} } }) @@ -253,7 +257,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", { run_start = 20, run_end = 28, punch_start = 20, - punch_end = 28, + punch_end = 28 } }) @@ -296,9 +300,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", { local radius = 1 local def = minetest.registered_nodes[node] + if def then - node = { name = node } + node = {name = node} end + if def and def.tiles and def.tiles[1] then texture = def.tiles[1] end @@ -325,7 +331,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", { texture = texture, -- ^ only as fallback for clients without support for `node` parameter node = node, - collisiondetection = true, + collisiondetection = true }) minetest.set_node(pos, {name = "air"}) From 1c4ce9e402be6327cd422fabd1716689c6b229be Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sat, 24 Jul 2021 22:21:37 +0100 Subject: [PATCH 17/18] make default optional dependency --- depends.txt | 2 +- mod.conf | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/depends.txt b/depends.txt index 9648cd2..8d14ca3 100644 --- a/depends.txt +++ b/depends.txt @@ -1,5 +1,5 @@ -default mobs +default? lucky_block? toolranks? intllib? diff --git a/mod.conf b/mod.conf index 7979671..921bed1 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = mobs_monster -depends = default, mobs -optional_depends = lucky_block, toolranks, intllib +depends = mobs +optional_depends = default, lucky_block, toolranks, intllib description = Adds many types of monsters. From cd201150b6c0bbc33e8ddd7041554b054e746df6 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Wed, 1 Sep 2021 08:05:13 +0100 Subject: [PATCH 18/18] add nether varients of dungeon master --- dungeon_master.lua | 38 +++++++++++++++++++- license.txt | 4 +++ mese_monster.lua | 3 ++ textures/mobs_dungeon_master_nether.png | Bin 0 -> 3192 bytes textures/mobs_dungeon_master_netherdeep.png | Bin 0 -> 2795 bytes 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 textures/mobs_dungeon_master_nether.png create mode 100644 textures/mobs_dungeon_master_netherdeep.png diff --git a/dungeon_master.lua b/dungeon_master.lua index 4b68184..b2f9a45 100644 --- a/dungeon_master.lua +++ b/dungeon_master.lua @@ -1,6 +1,16 @@ local S = mobs.intllib +local master_types = { + + { nodes = {"nether:rack"}, + skins = {"mobs_dungeon_master_nether.png"}, + }, + { nodes = {"nether:rack_deep"}, + skins = {"mobs_dungeon_master_netherdeep.png"}, + } +} + -- Dungeon Master by PilzAdam @@ -59,13 +69,39 @@ mobs:register_mob("mobs_monster:dungeon_master", { speed_normal = 15, speed_run = 15, }, + + -- check surrounding nodes and spawn a specific monster + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #master_types do + + tmp = master_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end }) if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:dungeon_master", - nodes = {"default:stone"}, + nodes = {"default:stone", "nether:rack", "nether:rack_deep"}, max_light = 5, chance = 9000, active_object_count = 1, diff --git a/license.txt b/license.txt index cb50163..89bf633 100644 --- a/license.txt +++ b/license.txt @@ -30,3 +30,7 @@ mobs.fireball.png was originally made by Sapier and edited by Benrob: -- -- (c) Sapier -- Contact sapier a t gmx net + +Textures created by wwar (cc0) + mobs_dungeon_master_nether.png + mobs_dungeon_master_netherdeep.png diff --git a/mese_monster.lua b/mese_monster.lua index a480a61..949a087 100644 --- a/mese_monster.lua +++ b/mese_monster.lua @@ -12,6 +12,9 @@ mobs:register_mob("mobs_monster:mese_monster", { shoot_interval = 0.5, arrow = "mobs_monster:mese_arrow", shoot_offset = 2, +--arrow_override = function(self) +-- self.velocity = 20 +--end, hp_min = 10, hp_max = 25, armor = 80, diff --git a/textures/mobs_dungeon_master_nether.png b/textures/mobs_dungeon_master_nether.png new file mode 100644 index 0000000000000000000000000000000000000000..ce81e787711dd6e09144b45fb0f7f97bc960c8cb GIT binary patch literal 3192 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 literal 0 HcmV?d00001