Compare commits
20 Commits
7bd9080eda
...
00146154b5
Author | SHA1 | Date | |
---|---|---|---|
00146154b5 | |||
1ee293dae0 | |||
4d88f45109 | |||
a097ee9388 | |||
1ba32b39eb | |||
7ade16b4d1 | |||
4be774624c | |||
b3e50d295c | |||
ae0e50bb69 | |||
f792de52af | |||
cab9cf25c6 | |||
23e24bff06 | |||
f39fc78e4a | |||
cd201150b6 | |||
70d92995bb | |||
1c4ce9e402 | |||
69ca619580 | |||
5009e7439d | |||
9b3c1e156f | |||
949bfec484 |
@ -1,5 +1,5 @@
|
||||
default
|
||||
mobs
|
||||
default?
|
||||
lucky_block?
|
||||
toolranks?
|
||||
intllib?
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
local dirt_types = {
|
||||
|
||||
|
@ -1,5 +1,15 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
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
|
||||
@ -62,13 +72,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", "default:sandstone", "nether:netherrack"},
|
||||
nodes = {"default:stone", "nether:rack", "nether:rack_deep", "hell:hellrack"},
|
||||
max_light = 5,
|
||||
chance = 9000,
|
||||
active_object_count = 1,
|
||||
|
98
fire_spirit.lua
Normal file
@ -0,0 +1,98 @@
|
||||
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
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", {
|
||||
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 = {
|
||||
{"bucket:bucket_water", 1},
|
||||
{"bucket:bucket_river_water", 1},
|
||||
{"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,
|
||||
jump_height = 6,
|
||||
drops = mob_drops,
|
||||
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.25 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.1, 0.2, 14, nil)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
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)
|
31
init.lua
@ -2,10 +2,32 @@
|
||||
-- Load support for intllib.
|
||||
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")
|
||||
local S
|
||||
|
||||
mobs.intllib = S
|
||||
-- Check for translation method
|
||||
local S
|
||||
if minetest.get_translator ~= nil then
|
||||
S = minetest.get_translator("mobs_monster") -- 5.x translation function
|
||||
else
|
||||
if minetest.get_modpath("intllib") then
|
||||
dofile(minetest.get_modpath("intllib") .. "/init.lua")
|
||||
if intllib.make_gettext_pair then
|
||||
gettext, ngettext = intllib.make_gettext_pair() -- new gettext method
|
||||
else
|
||||
gettext = intllib.Getter() -- old text file method
|
||||
end
|
||||
S = gettext
|
||||
else -- boilerplate function
|
||||
S = function(str, ...)
|
||||
local args = {...}
|
||||
return str:gsub("@%d+", function(match)
|
||||
return args[tonumber(match:sub(2))]
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mobs.intllib_monster = S
|
||||
|
||||
|
||||
-- Check for custom mob spawn file
|
||||
@ -30,6 +52,7 @@ dofile(path .. "mese_monster.lua")
|
||||
dofile(path .. "spider.lua") -- AspireMint
|
||||
dofile(path .. "minotaur.lua") -- NALC(sys4 fork MFF) Kalabasa
|
||||
dofile(path .. "land_guard.lua")
|
||||
dofile(path .. "fire_spirit.lua")
|
||||
|
||||
|
||||
-- Load custom spawning
|
||||
@ -42,4 +65,4 @@ end
|
||||
dofile(path .. "lucky_block.lua")
|
||||
|
||||
|
||||
print (S("[MOD] Mobs Redo Monsters loaded"))
|
||||
print ("[MOD] Mobs Redo Monsters loaded")
|
||||
|
@ -1,3 +0,0 @@
|
||||
-- Support for the old multi-load method
|
||||
dofile(minetest.get_modpath("intllib").."/init.lua")
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
|
||||
local guard_types = {
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
-- Lava Flan by Zeg9 (additional textures by JurajVajda)
|
||||
|
||||
@ -19,13 +18,13 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
textures = {
|
||||
{"zmobs_lava_flan.png"},
|
||||
{"zmobs_lava_flan2.png"},
|
||||
{"zmobs_lava_flan3.png"},
|
||||
{"zmobs_lava_flan3.png"}
|
||||
},
|
||||
blood_texture = "fire_basic_flame.png",
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "mobs_lavaflan",
|
||||
war_cry = "mobs_lavaflan",
|
||||
war_cry = "mobs_lavaflan"
|
||||
},
|
||||
walk_velocity = 0.5,
|
||||
run_velocity = 2,
|
||||
@ -33,14 +32,14 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
view_range = 10,
|
||||
floats = 1,
|
||||
drops = {
|
||||
{name = "mobs:lava_orb", chance = 15, min = 1, max = 1},
|
||||
{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 = {
|
||||
{"mobs:pick_lava", -2}, -- lava pick heals 2 health
|
||||
{"mobs:pick_lava", -2} -- lava pick heals 2 health
|
||||
},
|
||||
fly_in = {"default:lava_source", "default:lava_flowing"},
|
||||
animation = {
|
||||
@ -53,8 +52,10 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
},
|
||||
|
||||
-- custom death function
|
||||
on_die = function(self, pos)
|
||||
|
||||
local cod = self.cause_of_death or {}
|
||||
@ -72,21 +73,27 @@ mobs:register_mob("mobs_monster:lava_flan", {
|
||||
self.object:remove()
|
||||
|
||||
if math.random(4) == 1 then
|
||||
mobs:add_mob(pos, {
|
||||
name = "mobs_monster:obsidian_flan",
|
||||
})
|
||||
mobs:add_mob(pos, {name = "mobs_monster:obsidian_flan"})
|
||||
end
|
||||
else
|
||||
if minetest.get_node(pos).name == "air" then
|
||||
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
|
||||
|
||||
local nods = minetest.find_nodes_in_area(
|
||||
{x = pos.x, y = pos.y + 1, z = pos.z},
|
||||
{x = pos.x, y = pos.y, z = pos.z}, "air")
|
||||
|
||||
-- place flame if position empty and flame exists
|
||||
if nods and #nods > 0
|
||||
and minetest.registered_nodes["fire:basic_flame"] then
|
||||
|
||||
pos = nods[math.random(#nods)]
|
||||
minetest.set_node(pos, {name = "fire:basic_flame"})
|
||||
end
|
||||
|
||||
mobs:effect(pos, 40, "fire_basic_flame.png", 2, 3, 2, 5, 10, nil)
|
||||
|
||||
self.object:remove()
|
||||
end
|
||||
end,
|
||||
glow = 10,
|
||||
glow = 10
|
||||
})
|
||||
|
||||
|
||||
@ -96,21 +103,24 @@ mobs:spawn({
|
||||
nodes = {"default:lava_source"},
|
||||
chance = 1500,
|
||||
active_object_count = 1,
|
||||
max_height = 0,
|
||||
max_height = 0
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
-- add spawn egg
|
||||
mobs:register_egg("mobs_monster:lava_flan", S("Lava Flan"), "default_lava.png", 1)
|
||||
|
||||
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan") -- compatibility
|
||||
|
||||
-- compatibility alias, only needed for servers who used the old mobs mod
|
||||
mobs:alias_mob("mobs:lava_flan", "mobs_monster:lava_flan")
|
||||
|
||||
|
||||
-- lava orb
|
||||
minetest.register_craftitem(":mobs:lava_orb", {
|
||||
description = S("Lava orb"),
|
||||
inventory_image = "zmobs_lava_orb.png",
|
||||
light_source = 14,
|
||||
light_source = 14
|
||||
})
|
||||
|
||||
minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
|
||||
@ -118,7 +128,7 @@ minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb")
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mobs:lava_orb",
|
||||
burntime = 80,
|
||||
burntime = 80
|
||||
})
|
||||
|
||||
|
||||
@ -174,9 +184,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 +203,7 @@ minetest.register_craft({
|
||||
recipe = {
|
||||
{"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""},
|
||||
{"", "default:obsidian_shard", ""}
|
||||
}
|
||||
})
|
||||
|
||||
@ -222,13 +236,12 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||
visual = "mesh",
|
||||
mesh = "zmobs_lava_flan.x",
|
||||
textures = {
|
||||
{"mobs_obsidian_flan.png"},
|
||||
{"mobs_obsidian_flan.png"}
|
||||
},
|
||||
blood_texture = "default_obsidian.png",
|
||||
makes_footstep_sound = true,
|
||||
sounds = {
|
||||
random = "mobs_lavaflan",
|
||||
-- war_cry = "mobs_lavaflan",
|
||||
random = "mobs_lavaflan"
|
||||
},
|
||||
walk_velocity = 0.1,
|
||||
run_velocity = 0.5,
|
||||
@ -237,7 +250,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||
floats = 0,
|
||||
drops = {
|
||||
{name = "default:obsidian_shard", chance = 1, min = 1, max = 5},
|
||||
{name = "default:obsidian", chance = 3, min = 0, max = 2},
|
||||
{name = "default:obsidian", chance = 3, min = 0, max = 2}
|
||||
},
|
||||
water_damage = 0,
|
||||
lava_damage = 8,
|
||||
@ -253,10 +266,12 @@ mobs:register_mob("mobs_monster:obsidian_flan", {
|
||||
run_start = 20,
|
||||
run_end = 28,
|
||||
punch_start = 20,
|
||||
punch_end = 28,
|
||||
punch_end = 28
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- add spawn egg
|
||||
mobs:register_egg("mobs_monster:obsidian_flan", S("Obsidian Flan"),
|
||||
"default_obsidian.png", 1)
|
||||
|
||||
@ -266,11 +281,9 @@ local mobs_griefing = minetest.settings:get_bool("mobs_griefing") ~= false
|
||||
-- mese arrow (weapon)
|
||||
mobs:register_arrow("mobs_monster:obsidian_arrow", {
|
||||
visual = "sprite",
|
||||
-- visual = "wielditem",
|
||||
visual_size = {x = 0.5, y = 0.5},
|
||||
textures = {"default_obsidian_shard.png"},
|
||||
velocity = 6,
|
||||
-- rotate = 180,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
@ -296,9 +309,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 +340,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"})
|
||||
|
12
license.txt
@ -30,3 +30,15 @@ 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
|
||||
|
||||
Textures and Model created by SirrobZeroone (CC0)
|
||||
mobs_mese_monster_red.png
|
||||
mobs_mese_monster_blue.png
|
||||
mobs_mese_monster_green.png
|
||||
mobs_mese_monster_purple.png
|
||||
mobs_mese_arrow.png
|
||||
mobs_mese_monster.b3d
|
||||
|
14
locale/mobs_monster.es.tr
Normal file
@ -0,0 +1,14 @@
|
||||
# textdomain:mobs_monster
|
||||
Cobweb=Telarania
|
||||
Dirt Monster=Mounstro de tierra
|
||||
Dungeon Master=Maestro de mazmorra
|
||||
Lava Flan=Flan de lava
|
||||
Lava Pickaxe=Hacha de lava
|
||||
Lava orb=Esfera de lava
|
||||
Mese Monster=Mounstro de mese
|
||||
#Obsidian Flan=
|
||||
Oerkki=Oerkki
|
||||
Sand Monster=Mounstro de arena
|
||||
Spider=Arania
|
||||
Stone Monster=Mounstro de piedra
|
||||
Tree Monster=Mounstro de madera
|
336
mese_monster.lua
@ -1,39 +1,183 @@
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
local S = mobs.intllib
|
||||
local mese_monster_types = {
|
||||
|
||||
-- mese_monster_red
|
||||
{
|
||||
y_min = -20,
|
||||
y_max = -1000,
|
||||
damage = 2,
|
||||
reach = 3,
|
||||
hp_min = 15,
|
||||
hp_max = 25,
|
||||
armor = 80,
|
||||
skins = {"mobs_mese_monster_red.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese_crystal", chance = 15, min = 0, max = 1},
|
||||
{name = "default:mese_crystal_fragment", chance = 2, min = 0, max = 1}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 6
|
||||
self.damage = 2
|
||||
end
|
||||
},
|
||||
|
||||
-- mese_monster_green
|
||||
{
|
||||
y_min = -1001,
|
||||
y_max = -2000,
|
||||
damage = 3,
|
||||
reach = 3,
|
||||
hp_min = 20,
|
||||
hp_max = 30,
|
||||
armor = 75,
|
||||
skins = {"mobs_mese_monster_green.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0},
|
||||
{"default:pick_stone", 0},
|
||||
{"default:shovel_stone", 0},
|
||||
{"default:axe_stone", 0},
|
||||
{"default:sword_stone", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese_crystal", chance = 12, min = 0, max = 1},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 1}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 6
|
||||
self.damage = 2
|
||||
end
|
||||
},
|
||||
|
||||
-- mese_monster_blue
|
||||
{
|
||||
y_min = -2001,
|
||||
y_max = -3000,
|
||||
damage = 3,
|
||||
reach = 4,
|
||||
hp_min = 25,
|
||||
hp_max = 35,
|
||||
armor = 70,
|
||||
skins = {"mobs_mese_monster_blue.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0},
|
||||
{"default:pick_stone", 0},
|
||||
{"default:shovel_stone", 0},
|
||||
{"default:axe_stone", 0},
|
||||
{"default:sword_stone", 0},
|
||||
{"default:pick_bronze", 0},
|
||||
{"default:shovel_bronze", 0},
|
||||
{"default:axe_bronze", 0},
|
||||
{"default:sword_bronze", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese", chance = 15, min = 0, max = 1},
|
||||
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 7
|
||||
self.damage = 3
|
||||
end
|
||||
},
|
||||
|
||||
-- mese_monster_purple
|
||||
{
|
||||
y_min = -3000,
|
||||
y_max = -31000,
|
||||
damage = 4,
|
||||
reach = 5,
|
||||
hp_min = 30,
|
||||
hp_max = 40,
|
||||
armor = 60,
|
||||
skins = {"mobs_mese_monster_purple.png"},
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0},
|
||||
{"default:pick_stone", 0},
|
||||
{"default:shovel_stone", 0},
|
||||
{"default:axe_stone", 0},
|
||||
{"default:sword_stone", 0},
|
||||
{"default:pick_bronze", 0},
|
||||
{"default:shovel_bronze", 0},
|
||||
{"default:axe_bronze", 0},
|
||||
{"default:sword_bronze", 0},
|
||||
{"default:pick_steel", 0},
|
||||
{"default:shovel_steel", 0},
|
||||
{"default:axe_steel", 0},
|
||||
{"default:sword_steel", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese", chance = 9, min = 0, max = 1},
|
||||
{name = "default:mese_crystal", chance = 6, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 3}
|
||||
},
|
||||
arrow_override = function(self)
|
||||
self.velocity = 8
|
||||
self.damage = 4
|
||||
end
|
||||
}}
|
||||
|
||||
|
||||
-- Mese Monster by Zeg9
|
||||
|
||||
-- Mese Monster by SirrobZeroone
|
||||
mobs:register_mob("mobs_monster:mese_monster", {
|
||||
type = "monster",
|
||||
visual_size = {x = 10, y = 10}, -- Got scale wrong in blender by factor of 10 - S01
|
||||
passive = false,
|
||||
damage = 3,
|
||||
attack_type = "shoot",
|
||||
attack_type = "dogshoot",
|
||||
damage = 4,
|
||||
reach = 4,
|
||||
shoot_interval = 0.5,
|
||||
arrow = "mobs_monster:mese_arrow",
|
||||
shoot_offset = 2,
|
||||
shoot_offset = 0.75,
|
||||
--arrow_override = function(self)
|
||||
-- self.velocity = 20
|
||||
--end,
|
||||
knock_back = true,
|
||||
hp_min = 10,
|
||||
hp_max = 25,
|
||||
armor = 80,
|
||||
collisionbox = {-0.5, -1.5, -0.5, 0.5, 0.5, 0.5},
|
||||
collisionbox = {-0.75, -0.5, -0.75, 0.75, 2.5, 0.75},
|
||||
visual = "mesh",
|
||||
mesh = "zmobs_mese_monster.x",
|
||||
mesh = "mobs_mese_monster.b3d",
|
||||
textures = {
|
||||
{"zmobs_mese_monster.png"},
|
||||
{"mobs_mese_monster_purple.png"}
|
||||
},
|
||||
blood_texture = "default_mese_crystal_fragment.png",
|
||||
makes_footstep_sound = false,
|
||||
sounds = {
|
||||
random = "mobs_mesemonster",
|
||||
damage = "default_glass_footstep"
|
||||
},
|
||||
view_range = 10,
|
||||
walk_velocity = 0.5,
|
||||
run_velocity = 2,
|
||||
walk_velocity = 1,
|
||||
run_velocity = 3,
|
||||
jump = true,
|
||||
jump_height = 8,
|
||||
can_leap = true,
|
||||
fall_damage = 0,
|
||||
fall_speed = -6,
|
||||
stepheight = 2.1,
|
||||
immune_to = {
|
||||
{"default:pick_wood", 0},
|
||||
{"default:shovel_wood", 0},
|
||||
{"default:axe_wood", 0},
|
||||
{"default:sword_wood", 0}
|
||||
},
|
||||
drops = {
|
||||
{name = "default:mese_crystal", chance = 9, min = 0, max = 2},
|
||||
{name = "default:mese_crystal_fragment", chance = 1, min = 0, max = 2},
|
||||
@ -44,17 +188,129 @@ mobs:register_mob("mobs_monster:mese_monster", {
|
||||
lava_damage = 1,
|
||||
light_damage = 0,
|
||||
animation = {
|
||||
speed_normal = 15,
|
||||
speed_run = 15,
|
||||
stand_start = 0,
|
||||
stand_end = 14,
|
||||
walk_start = 15,
|
||||
walk_end = 38,
|
||||
run_start = 40,
|
||||
run_end = 63,
|
||||
punch_start = 40,
|
||||
punch_end = 63,
|
||||
speed_normal = 18,
|
||||
speed_run = 18,
|
||||
walk_start = 10,
|
||||
walk_end = 41,
|
||||
walk_speed = 20,
|
||||
run_start = 10,
|
||||
run_end = 41,
|
||||
run_speed = 30,
|
||||
stand_start = 60,
|
||||
stand_end = 83,
|
||||
shoot_start = 100,
|
||||
shoot_end = 113,
|
||||
die_start = 125,
|
||||
die_end = 141,
|
||||
death_speed = 25,
|
||||
die_loop = false,
|
||||
jump_start = 150 ,
|
||||
jump_end = 168,
|
||||
jump_loop = false,
|
||||
punch_start = 175,
|
||||
punch_end = 189
|
||||
},
|
||||
|
||||
on_spawn = function(self)
|
||||
|
||||
local pos = self.object:get_pos()
|
||||
|
||||
-- quick update self function
|
||||
local function update(self, def)
|
||||
|
||||
self.object:set_properties({textures = def.skins})
|
||||
|
||||
-- added by mobs_redo
|
||||
self.hp_min = def.hp_min
|
||||
self.hp_max = def.hp_max
|
||||
self.health = math.random(self.hp_min, self.hp_max)
|
||||
self.damage = def.damage
|
||||
self.reach = def.reach
|
||||
self.armor = def.armor
|
||||
self.immune_to = def.immune_to
|
||||
self.drops = def.drops
|
||||
self.arrow_override = def.arrow_override
|
||||
end
|
||||
|
||||
-- Normal spawn case
|
||||
for name, def in pairs(mese_monster_types) do
|
||||
|
||||
if pos.y <= def.y_min and pos.y >= def.y_max then
|
||||
|
||||
update(self, def)
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
--[[
|
||||
-- player using egg
|
||||
-- direction sets type N = red, E = green, S = blue, W = purple
|
||||
-- Just for fun - S01
|
||||
|
||||
local objects = minetest.get_objects_inside_radius(pos, 10)
|
||||
|
||||
for i, obj in ipairs(objects) do
|
||||
|
||||
if minetest.is_player(obj)
|
||||
and obj:get_wielded_item():get_name() == "mobs_monster:mese_monster" then
|
||||
|
||||
local degree = (360 + math.deg(obj:get_look_horizontal())) % 360
|
||||
local compass_sel
|
||||
|
||||
if degree > 45 and degree <= 135 then compass_sel = 4
|
||||
elseif degree > 135 and degree <= 225 then compass_sel = 3
|
||||
elseif degree > 225 and degree <= 315 then compass_sel = 2
|
||||
else compass_sel = 1
|
||||
end
|
||||
|
||||
local def = mese_monster_types[compass_sel]
|
||||
|
||||
update(self, def)
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
]]
|
||||
-- catch case if all else fails random it
|
||||
update(self, mese_monster_types[math.random(4)])
|
||||
|
||||
return true
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- mese arrow (weapon)
|
||||
minetest.register_craftitem("mobs_monster:mese_crystal_fragment_arrow", {
|
||||
description = S("Mese Monster Arrow"),
|
||||
inventory_image = "mobs_mese_arrow.png",
|
||||
groups = {not_in_creative_inventory = 1}
|
||||
})
|
||||
|
||||
|
||||
mobs:register_arrow("mobs_monster:mese_arrow", {
|
||||
visual = "wielditem",
|
||||
visual_size = {x = 0.25, y = 0.25},
|
||||
textures = {"mobs_monster:mese_crystal_fragment_arrow"},
|
||||
velocity = 8,
|
||||
rotate = 180,
|
||||
damage = 2,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = self.damage},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = self.damage},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
@ -65,7 +321,7 @@ mobs:spawn({
|
||||
max_light = 7,
|
||||
chance = 5000,
|
||||
active_object_count = 1,
|
||||
max_height = -20,
|
||||
max_height = -20
|
||||
})
|
||||
end
|
||||
|
||||
@ -76,40 +332,10 @@ mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_
|
||||
mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity
|
||||
|
||||
|
||||
-- mese arrow (weapon)
|
||||
mobs:register_arrow("mobs_monster:mese_arrow", {
|
||||
visual = "sprite",
|
||||
-- visual = "wielditem",
|
||||
visual_size = {x = 0.5, y = 0.5},
|
||||
textures = {"default_mese_crystal_fragment.png"},
|
||||
--textures = {"default:mese_crystal_fragment"},
|
||||
velocity = 6,
|
||||
-- rotate = 180,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 2},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_mob = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = {fleshy = 2},
|
||||
}, nil)
|
||||
end,
|
||||
|
||||
hit_node = function(self, pos, node)
|
||||
end
|
||||
})
|
||||
|
||||
-- 9x mese crystal fragments = 1x mese crystal
|
||||
local f = "default:mese_crystal_fragment"
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:mese_crystal",
|
||||
recipe = {
|
||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
||||
}
|
||||
recipe = {{f, f, f}, {f, f, f}, {f, f, f}}
|
||||
})
|
||||
|
4
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.
|
||||
|
BIN
models/mobs_mese_monster.b3d
Normal file
@ -1,6 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
-- Oerkki by PilzAdam
|
||||
|
||||
|
@ -15,7 +15,7 @@ Lava Flan
|
||||
|
||||
Mese Monster
|
||||
|
||||
- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. Will drop mese when killed.
|
||||
- These mobs are territorial and spawn below -20 and will fire mese shards at passers by, so best avoided. The deeper you go the tougher they seem to get. Will drop mese when killed.
|
||||
|
||||
Oerkki
|
||||
|
||||
@ -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
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
-- custom particle effects
|
||||
local effect = function(
|
||||
|
BIN
screenshot.jpg
Normal file
After Width: | Height: | Size: 176 KiB |
@ -1,5 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
local get_velocity = function(self)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
local stone_types = {
|
||||
|
||||
|
BIN
textures/mobs_dungeon_master_nether.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
textures/mobs_dungeon_master_netherdeep.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
textures/mobs_fire_spirit.png
Normal file
After Width: | Height: | Size: 274 B |
BIN
textures/mobs_mese_arrow.png
Normal file
After Width: | Height: | Size: 563 B |
BIN
textures/mobs_mese_monster_blue.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
textures/mobs_mese_monster_green.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
textures/mobs_mese_monster_purple.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
textures/mobs_mese_monster_red.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 305 B |
Before Width: | Height: | Size: 567 B |
@ -1,5 +1,5 @@
|
||||
|
||||
local S = mobs.intllib
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
local tree_types = {
|
||||
|
||||
|