Added new mese monster types by SirrobZeroone
10
license.txt
@ -31,6 +31,14 @@ 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)
|
||||
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
|
||||
|
309
mese_monster.lua
@ -1,41 +1,166 @@
|
||||
|
||||
local S = mobs.intllib_monster
|
||||
|
||||
-- Mese Monster by Zeg9
|
||||
local mese_monster_types = {
|
||||
|
||||
mobs:register_mob("mobs_monster:mese_monster", {
|
||||
type = "monster",
|
||||
passive = false,
|
||||
-- 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}
|
||||
}
|
||||
},
|
||||
|
||||
-- mese_monster_green
|
||||
{
|
||||
y_min = -1001,
|
||||
y_max = -2000,
|
||||
damage = 3,
|
||||
attack_type = "shoot",
|
||||
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}
|
||||
}
|
||||
},
|
||||
|
||||
-- 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}
|
||||
}
|
||||
},
|
||||
|
||||
-- mese_monster_purple
|
||||
{
|
||||
y_min = -3000,
|
||||
y_max = -33000,
|
||||
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}
|
||||
}
|
||||
}}
|
||||
|
||||
|
||||
-- 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,
|
||||
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,
|
||||
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,47 +169,110 @@ 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
|
||||
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
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:mese_monster",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 7,
|
||||
chance = 5000,
|
||||
active_object_count = 1,
|
||||
max_height = -20,
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1)
|
||||
|
||||
|
||||
mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity
|
||||
|
||||
|
||||
-- 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 = "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,
|
||||
visual = "wielditem",
|
||||
visual_size = {x = 0.25, y = 0.25},
|
||||
textures = {"mobs_monster:mese_crystal_fragment_arrow"},
|
||||
velocity = 8,
|
||||
rotate = 180,
|
||||
|
||||
hit_player = function(self, player)
|
||||
player:punch(self.object, 1.0, {
|
||||
@ -104,12 +292,29 @@ mobs:register_arrow("mobs_monster:mese_arrow", {
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
if not mobs.custom_spawn_monster then
|
||||
mobs:spawn({
|
||||
name = "mobs_monster:mese_monster",
|
||||
nodes = {"default:stone"},
|
||||
max_light = 7,
|
||||
chance = 5000,
|
||||
active_object_count = 1,
|
||||
max_height = -20
|
||||
})
|
||||
end
|
||||
|
||||
|
||||
mobs:register_egg("mobs_monster:mese_monster", S("Mese Monster"), "default_mese_block.png", 1)
|
||||
|
||||
|
||||
mobs:alias_mob("mobs:mese_monster", "mobs_monster:mese_monster") -- compatiblity
|
||||
|
||||
|
||||
-- 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}}
|
||||
})
|
||||
|
BIN
models/mobs_mese_monster.b3d
Normal file
@ -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
|
||||
|
||||
|
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 |