diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..6b215ebb2094ad3757eb36c6f383b6129ac8a908
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# D00Med's Mobs
+
+
diff --git a/Readme.txt b/Readme.txt
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/arrows/dragonarrows.lua b/arrows/dragonarrows.lua
new file mode 100644
index 0000000000000000000000000000000000000000..81e7fee376acb4bf23fe3304a2bb13e9da29d0b4
--- /dev/null
+++ b/arrows/dragonarrows.lua
@@ -0,0 +1,30 @@
+local base_arrow = {
+   visual = "sprite",
+   visual_size = {x = 0.5, y = 0.5},
+   velocity = 8,
+   tail = 1, -- enable tail
+   tail_texture = "dmobs_ice.png",
+
+   hit_player = function(self, player)
+      player:punch(self.object, 1.0, {
+         full_punch_interval = 1.0,
+         damage_groups = {fleshy = 8},
+      }, nil)
+   end,
+   
+   hit_mob = function(self, player)
+      player:punch(self.object, 1.0, {
+         full_punch_interval = 1.0,
+         damage_groups = {fleshy = 8},
+      }, nil)
+   end,
+
+   hit_node = function(self, pos, node)
+      self.object:remove()
+   end,
+}
+
+for _,arrowtype in pairs( {"ice","lightning","poison"} ) do
+	base_arrow.textures = {"dmobs_"..arrowtype..".png"},
+	mobs:register_arrow("dmobs:"..arrowtype, dmobs.deepclone(base_arrow) )
+end
diff --git a/arrows/dragonfire.lua b/arrows/dragonfire.lua
new file mode 100644
index 0000000000000000000000000000000000000000..f5728cfd8a690b8782d634d5c3bc38bc41a30cf4
--- /dev/null
+++ b/arrows/dragonfire.lua
@@ -0,0 +1,71 @@
+--function to register tamed dragon attacks
+
+function dmobs.register_fire(fname, texture, dmg, replace_node, explode, ice, variance, size)
+minetest.register_entity(fname, {
+	textures = {texture},
+	velocity = 0.1,
+	damage = dmg,
+	collisionbox = {0, 0, 0, 0, 0, 0},
+	on_step = function(self, obj, pos)		
+		local remove = minetest.after(2, function() 
+		self.object:remove()
+		end)
+		local pos = self.object:getpos()
+		local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)	
+			for k, obj in pairs(objs) do
+				if obj:get_luaentity() ~= nil then
+					if obj:get_luaentity().name ~= fname and obj:get_luaentity().name ~= "dmobs:dragon_red" and obj:get_luaentity().name ~= "dmobs:dragon_blue" and obj:get_luaentity().name ~= "dmobs:dragon_black" and obj:get_luaentity().name ~= "dmobs:dragon_green" and obj:get_luaentity().name ~= "dmobs:dragon_great_tame" and obj:get_luaentity().name ~= "__builtin:item" then
+						obj:punch(self.launcher, 1.0, {
+							full_punch_interval=1.0,
+							damage_groups={fleshy=3},
+						}, nil)
+					self.object:remove()
+					end
+				end
+			end
+			for dx=0,1 do
+						for dy=0,1 do
+							for dz=0,1 do
+								local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
+								local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
+								local n = minetest.env:get_node(p).name
+								if n ~= fname and n ~="default:dirt_with_grass" and n ~="default:dirt_with_dry_grass" and n ~="default:stone"  then	
+									if minetest.registered_nodes[n].groups.flammable --[[or math.random(1, 100) <= 1]] then
+										minetest.env:set_node(t, {name=replace_node})
+									self.object:remove()
+									return
+									end
+									if ice and n == "default:water_source" then
+									minetest.env:set_node(t, {name="default:ice"})
+									self.object:remove()
+									end
+								end
+							end
+						end
+					end
+		local apos = self.object:getpos()
+		local part = minetest.add_particlespawner(
+			6, --amount
+			0.3, --time
+			{x=apos.x-variance, y=apos.y-variance, z=apos.z-variance}, --minpos
+			{x=apos.x+variance, y=apos.y+variance, z=apos.z+variance}, --maxpos
+			{x=-0, y=-0, z=-0}, --minvel
+			{x=0, y=0, z=0}, --maxvel
+			{x=variance,y=-0.5-variance,z=variance}, --minacc
+			{x=0.5+variance,y=0.5+variance,z=0.5+variance}, --maxacc
+			0.1, --minexptime
+			0.3, --maxexptime
+			size, --minsize
+			size+2, --maxsize
+			false, --collisiondetection
+			texture --texture
+		)
+		
+	end,
+})
+end
+
+dmobs.register_fire("dmobs:fire_plyr", "dmobs_fire.png", 2, "fire:basic_flame", true, false, 0.3, 1)
+dmobs.register_fire("dmobs:ice_plyr", "dmobs_ice.png", 2, "default:ice", false, true, 0.5, 10)
+dmobs.register_fire("dmobs:poison_plyr", "dmobs_poison.png", 2, "air", false, false, 0.3, 1)
+dmobs.register_fire("dmobs:lightning_plyr", "dmobs_lightning.png", 2, "air", true, false, 0, 0.5)
diff --git a/arrows/fire.lua b/arrows/fire.lua
new file mode 100644
index 0000000000000000000000000000000000000000..47a51cb9708c5ad38096edf6da02132b01d36f99
--- /dev/null
+++ b/arrows/fire.lua
@@ -0,0 +1,27 @@
+--Thanks to Tenplus1
+mobs:register_arrow("dmobs:fire", {
+   visual = "sprite",
+   visual_size = {x = 0.5, y = 0.5},
+   textures = {"dmobs_fire.png"},
+   velocity = 8,
+   tail = 1, -- enable tail
+   tail_texture = "fire_basic_flame.png",
+
+   hit_player = function(self, player)
+	  player:punch(self.object, 1.0, {
+	 full_punch_interval = 1.0,
+	 damage_groups = {fleshy = 8},
+	  }, nil)
+   end,
+   
+   hit_mob = function(self, player)
+	  player:punch(self.object, 1.0, {
+	 full_punch_interval = 1.0,
+	 damage_groups = {fleshy = 8},
+	  }, nil)
+   end,
+
+   hit_node = function(self, pos, node)
+	  self.object:remove()
+   end,
+})
diff --git a/arrows/fire_explosive.lua b/arrows/fire_explosive.lua
new file mode 100644
index 0000000000000000000000000000000000000000..dde110dd641787a50f8464071f6d1bd9fabafc7f
--- /dev/null
+++ b/arrows/fire_explosive.lua
@@ -0,0 +1,27 @@
+
+mobs:register_arrow("dmobs:fire", {
+   visual = "sprite",
+   visual_size = {x = 0.5, y = 0.5},
+   textures = {"dmobs_fire.png"},
+   velocity = 8,
+   tail = 1, -- enable tail
+   tail_texture = "fire_basic_flame.png",
+
+   hit_player = function(self, player)
+      player:punch(self.object, 1.0, {
+	 full_punch_interval = 1.0,
+	 damage_groups = {fleshy = 8},
+      }, nil)
+   end,
+   
+   hit_mob = function(self, player)
+      player:punch(self.object, 1.0, {
+	 full_punch_interval = 1.0,
+	 damage_groups = {fleshy = 8},
+      }, nil)
+   end,
+
+   hit_node = function(self, pos, node)
+      mobs:explosion(pos, 2, 1, 1)
+   end,
+})
diff --git a/arrows/sting.lua b/arrows/sting.lua
new file mode 100644
index 0000000000000000000000000000000000000000..ba6cf807556d51128dd1f7dbca56f140585f38b6
--- /dev/null
+++ b/arrows/sting.lua
@@ -0,0 +1,22 @@
+mobs:register_arrow("dmobs:sting", {
+	   visual = "sprite",
+	   visual_size = {x = 0.5, y = 0.5},
+	   textures = {"dmobs_sting.png"},
+	   velocity = 8,
+	   tail = 0, -- enable tail
+	   tail_texture = "fire_basic_flame.png",
+
+	   hit_player = function(self, player)
+	      player:punch(self.object, 1.0, {
+		 full_punch_interval = 1.0,
+		 damage_groups = {fleshy = 1},
+	      }, nil)
+	   end,
+	   
+	   hit_mob = function(self, player)
+	   end,
+
+	   hit_node = function(self, pos, node)
+	      self.object:remove()
+	   end,
+	})
diff --git a/baddies.lua b/baddies.lua
deleted file mode 100644
index a5e03594563bc9530192ffd01fd5e1efab73ce12..0000000000000000000000000000000000000000
--- a/baddies.lua
+++ /dev/null
@@ -1,776 +0,0 @@
-local pigdef = {
-	type = "monster",
-	passive = true,
-	reach = 3,
-	damage = 2,
-	attack_type = "dogfight",
-	explosion_radius = 2,
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.4, 0, -0.4, 0.4, 1, 0.4},
-	visual = "mesh",
-	mesh = "flying_pig.b3d",
-	textures = {
-		{"dmobs_flying_pig_mean.png"},
-	},
-	jump = true,
-	fly = true,
-	fall_speed = 0,
-	stepheight = 1.5,
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	runaway = false,
-	walk_velocity = 2,
-	run_velocity = 3,
-	run_chance = 20,
-	jump = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 2, min = 1, max = 1},
-	},
-	sounds = {
-		random = "mobs_pig",
-	},
-	do_custom = function(self)
-		if self.state == "attack" then
-			self.fly = false
-			self.fall_speed = -4
-		end
-	end,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	follow = {"default:apple"},
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 15,
-		walk_start = 1,
-		walk_end = 20,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 22,
-		run_end = 28,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-}
-
-if dmobs.destructive then
-	pigdef.sounds.explode = "tnt_explode"
-	pigdef.attack_type = "explode"
-end
-
-mobs:register_mob("dmobs:pig_evil", pigdef)
-
-mobs:register_spawn("dmobs:pig_evil", {"default:pine_needles","default:leaves"}, 20, 10, 32000, 2, 31000)
-
-mobs:register_egg("dmobs:pig_evil", "kamikaze Pig", "wool_pink.png", 1)
-
--- Fox
-mobs:register_mob("dmobs:fox", {
-	type = "monster",
-	attacks_monsters = true,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 42,
-	hp_max = 52,
-	armor = 130,
-	collisionbox = {-0.4, -0.6, -0.4, 0.3, 0.3, 0.3},
-	runaway = true,
-	pathfinding = true,
-	visual = "mesh",
-	mesh = "fox.b3d",
-	textures = {
-		{"dmobs_fox.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1.5, y=1.5},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	on_activate = function(self)
-		if math.random(1,5) == 1 then
-		self.type = "animal"
-		end
-	end,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fear_height = 4,
-	replace_rate = 10,
-	replace_what = {"farming:wheat_5", "default:fence_wood", "default:grass_5", "default:dirt_with_grass"},
-	replace_with = "air",
-	follow = {"mobs:meat_raw"},
-	view_range = 14,
-	animation = {
-		speed_normal = 6,
-		speed_run = 15,
-		walk_start = 25,
-		walk_end = 35,
-		stand_start = 51,
-		stand_end = 60,
-		run_start = 1,
-		run_end = 16,
-		punch_start = 36,
-		punch_end = 51,
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:fox", {"default:dirt_with_grass","default:dirt"}, 20, 10, 32000, 2, 31000)
-
-mobs:register_egg("dmobs:fox", "Fox", "wool_orange.png", 1)
-
---Rat
-
-mobs:register_mob("dmobs:rat", {
-	type = "monster",
-	reach = 2,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 22,
-	hp_max = 42,
-	armor = 130,
-	collisionbox = {-0.4, 0, -0.4, 0.3, 1, 0.3},
-	runaway = true,
-	visual = "mesh",
-	mesh = "dmobs_rat.b3d",
-	textures = {
-		{"dmobs_rat.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fear_height = 5,
-	replace_rate = 10,
-	replace_what = {"farming:wheat_5", "farming:wheat_4", "farming:wheat_2", "farming:wheat_3"},
-	replace_with = "air",
-	follow = {"mobs_animal:cheese"},
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 18,
-		walk_start = 43,
-		walk_end = 63,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 43,
-		run_end = 63,
-		punch_start = 20,
-		punch_end = 40,
-	},
-})
-
-mobs:register_spawn("dmobs:rat", {"default:stone","default:sand"}, 20, 0, 32000, 2, 31000)
-
-mobs:register_egg("dmobs:rat", "Giant Rat", "wool_grey.png", 1)
-
---Wasps!
-mobs:register_mob("dmobs:wasp", {
-	type = "monster",
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 2,
-	hp_max = 5,
-	armor = 100,
-	collisionbox = {-0.1, -0, -0.1, 0.1, 0.5, 0.1},
-	fly = true,
-	fall_speed = 0,
-	stepheight = 1.5,
-	visual = "mesh",
-	mesh = "wasp.b3d",
-	textures = {
-		{"dmobs_wasp.png"},
-	},
-	sounds = {
-		random = "wasp",
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=0.6, y=0.6},
-	makes_footstep_sound = true,
-	walk_velocity = 2,
-	run_velocity = 3,
-	jump = true,
-	water_damage = 2,
-	lava_damage = 2,
-	light_damage = 0,
-	view_range = 14,
-	animation = {
-		speed_normal = 15,
-		speed_run = 30,
-		walk_start = 1,
-		walk_end = 5,
-		stand_start = 1,
-		stand_end = 5,
-		run_start = 1,
-		run_end = 5,
-		punch_start = 6,
-		punch_end = 15,
-	},
-})
-
-mobs:register_spawn("dmobs:wasp", {"default:dirt_with_grass"}, 20, 10, 32000, 2, 31000)
-mobs:register_spawn("dmobs:wasp", {"dmobs:hive"}, 20, 10, 16000, 2, 31000)
-
-mobs:register_egg("dmobs:wasp", "Wasp", "dmobs_wasp_bg.png", 1)
-
-mobs:register_mob("dmobs:wasp_leader", {
-	type = "monster",
-	reach = 1,
-	damage = 2,
-	attack_type = "shoot",
-	shoot_interval = 1,
-	arrow = "dmobs:sting",
-	shoot_offset = 0,
-	hp_min = 82,
-	hp_max = 122,
-	armor = 130,
-	collisionbox = {-0.4, -0, -0.4, 0.3, 2, 0.3},
-	pathfinding = true,
-	fly = true,
-	fall_speed = 0,
-	stepheight = 1.5,
-	visual = "mesh",
-	mesh = "wasp.b3d",
-	textures = {
-		{"dmobs_wasp.png"},
-	},
-	sounds = {
-		random = "wasp",
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=3.5, y=3.5},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	drops = {
-		{name = "default:gold_lump", chance = 1, min = 3, max = 5},
-	},
-	do_custom = function(self)
-	if math.random(1, 500) >= 500 then
-	local pos = self.object:getpos()
-	minetest.env:add_entity(pos, "dmobs:wasp")
-	end
-	end,
-	replace_rate = 700,
-	replace_what = {"air"},
-	replace_with = "dmobs:hive",
-	water_damage = 2,
-	lava_damage = 2,
-	light_damage = 0,
-	view_range = 14,
-	animation = {
-		speed_normal = 6,
-		speed_run = 15,
-		walk_start = 1,
-		walk_end = 5,
-		stand_start = 1,
-		stand_end = 5,
-		run_start = 1,
-		run_end = 5,
-		shoot_start = 6,
-		shoot_end = 15,
-	},
-})
-
-mobs:register_spawn("dmobs:wasp_leader", {"default:dirt_with_grass","dmobs:hive"}, 20, 10, 64000, 2, 31000)
-
-mobs:register_egg("dmobs:wasp_leader", "King of Sting", "dmobs_wasp_bg.png", 1)
-
--- Treeman
-
-mobs:register_mob("dmobs:treeman", {
-	type = "monster",
-	reach = 3,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 62,
-	hp_max = 72,
-	armor = 130,
-	collisionbox = {-0.4, 0, -0.4, 0.4, 3, 0.4},
-	visual = "mesh",
-	mesh = "treeman.b3d",
-	textures = {
-		{"dmobs_treeman.png"},
-		{"dmobs_treeman2.png"},
-	},
-	blood_texture = "default_tree.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	drops = {
-		{name = "default:tree", chance = 5, min = 3, max = 6},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fear_height = 10,
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 13,
-		walk_start = 46,
-		walk_end = 66,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 46,
-		run_end = 66,
-		punch_start = 20,
-		punch_end = 45,
-	},
-})
-
-mobs:register_spawn("dmobs:treeman", {"default:leaves", "default:pine_needles"}, 7, 0, 16000, 2, 31000)
-
-mobs:register_egg("dmobs:treeman", "Treeman", "default_tree.png", 1)
-
---stone golem
-
-
-mobs:register_mob("dmobs:golem", {
-	type = "monster",
-	reach = 3,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 62,
-	hp_max = 72,
-	armor = 100,
-	collisionbox = {-0.4, 0, -0.4, 0.4, 2.5, 0.4},
-	visual = "mesh",
-	mesh = "golem.b3d",
-	textures = {
-		{"dmobs_golem.png"},
-	},
-	blood_texture = "default_stone.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	drops = {
-		{name = "dmobs:golemstone", chance = 30, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 1,
-	fall_damage = 0,
-	fear_height = 10,
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 14,
-		walk_start = 46,
-		walk_end = 66,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 46,
-		run_end = 66,
-		punch_start = 20,
-		punch_end = 45,
-	},
-})
-
-mobs:register_spawn("dmobs:golem", {"default:stone"}, 7, 0, 16000, 2, 31000)
-
-mobs:register_egg("dmobs:golem", "Stone Golem", "default_stone.png", 1)
-
---skeleton
-
-
-mobs:register_mob("dmobs:skeleton", {
-	type = "monster",
-	reach = 3,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 62,
-	hp_max = 72,
-	armor = 100,
-	collisionbox = {-0.4, 0, -0.4, 0.4, 2.5, 0.4},
-	visual = "mesh",
-	mesh = "skeleton.b3d",
-	textures = {
-		{"dmobs_skeleton.png"},
-	},
-	blood_texture = "default_stone.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	drops = {
-		{name = "bones:bones", chance = 5, min = 3, max = 6},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 1,
-	fall_damage = 0,
-	fear_height = 10,
-	view_range = 14,
-	animation = {
-		speed_normal = 15,
-		speed_run = 20,
-		walk_start = 46,
-		walk_end = 66,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 46,
-		run_end = 66,
-		punch_start = 20,
-		punch_end = 45,
-	},
-})
-
-mobs:register_spawn("dmobs:skeleton", {"default:stone"}, 7, 0, 16000, 2, 31000)
-
-mobs:register_egg("dmobs:skeleton", "Skeleton", "default_dirt.png", 1)
-
--- Orc
-mobs:register_mob("dmobs:orc", {
-	type = "monster",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.4, -1.3, -0.4, 0.4, 1, 0.4},
-	visual = "mesh",
-	mesh = "orc.b3d",
-	textures = {
-		{"dmobs_orc.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=3, y=3},
-	makes_footstep_sound = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	walk_velocity = 1,
-	run_velocity = 2,
-	jump = true,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -13,
-	fear_height = 4,
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 20,
-		walk_start = 2,
-		walk_end = 18,
-		stand_start = 30,
-		stand_end = 40,
-		run_start = 2,
-		run_end = 18,
-		punch_start = 20,
-		punch_end = 30,
-
-	},
-})
-
--- Orc (Redesign)
-mobs:register_mob("dmobs:orc_redesign", {
-	type = "monster",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.4, -0, -0.4, 0.4, 2, 0.4},
-	visual = "mesh",
-	mesh = "orc_redesign.b3d",
-	textures = {
-		{"dmobs_orc_redesign.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1.5, y=1.5},
-	makes_footstep_sound = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	walk_velocity = 1,
-	run_velocity = 2,
-	jump = true,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -13,
-	fear_height = 4,
-	view_range = 14,
-	animation = {
-		speed_normal = 12,
-		speed_run = 20,
-		walk_start = 20,
-		walk_end = 40,
-		stand_start = 60,
-		stand_end = 80,
-		run_start = 20,
-		run_end = 40,
-		punch_start = 1,
-		punch_end = 15,
-
-	},
-})
-
-if not dmobs.dragons == true then
-mobs:register_spawn("dmobs:orc", {"default:snow","default:snow_block", "default:desert_sand"}, 20, 10, 15000, 2, 31000)
-else
-mobs:register_spawn("dmobs:orc", {"default:snow","default:snow_block", "default:desert_sand"}, 20, 10, 3500, 2, 31000)
-end
-
-mobs:register_egg("dmobs:orc_redesign", "Orc (redesign)", "default_desert_sand.png", 1)
-mobs:register_egg("dmobs:orc", "Orc", "default_desert_sand.png", 1)
-
--- Ogre
-mobs:register_mob("dmobs:ogre", {
-	type = "monster",
-	passive = false,
-	reach = 2,
-	damage = 4,
-	attack_type = "dogfight",
-	hp_min = 22,
-	hp_max = 32,
-	armor = 130,
-	collisionbox = {-0.6, -1.3, -0.6, 0.6, 1.5, 0.6},
-	visual = "mesh",
-	mesh = "ogre.b3d",
-	textures = {
-		{"dmobs_ogre.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=3.5, y=3.5},
-	makes_footstep_sound = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	walk_velocity = 1,
-	run_velocity = 2,
-	jump = true,
-	rotate = 180,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -14,
-	fear_height = 4,
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 20,
-		walk_start = 3,
-		walk_end = 38,
-		stand_start = 40,
-		stand_end = 70,
-		run_start = 3,
-		run_end = 38,
-		punch_start = 70,
-		punch_end = 100,
-
-	},
-})
-
-if not dmobs.dragons == true then
-mobs:register_spawn("dmobs:ogre", {"default:snow","default:dirt_with_dry_grass", "default:desert_sand"}, 20, 10, 15000, 2, 31000)
-else
-mobs:register_spawn("dmobs:ogre", {"default:snow","default:dirt_with_dry_grass", "default:desert_sand"}, 20, 10, 350, 2, 31000)
-end
-
-mobs:register_egg("dmobs:ogre", "Ogre", "default_desert_sand.png", 1)
-
-mobs:register_arrow("dmobs:sting", {
-	   visual = "sprite",
-	   visual_size = {x = 0.5, y = 0.5},
-	   textures = {"dmobs_sting.png"},
-	   velocity = 8,
-	   tail = 0, -- enable tail
-	   tail_texture = "fire_basic_flame.png",
-
-	   hit_player = function(self, player)
-	      player:punch(self.object, 1.0, {
-		 full_punch_interval = 1.0,
-		 damage_groups = {fleshy = 1},
-	      }, nil)
-	   end,
-	   
-	   hit_mob = function(self, player)
-	   end,
-
-	   hit_node = function(self, pos, node)
-	      self.object:remove()
-	   end,
-	})
-
---dragon
-if dmobs.dragons == true then
-	dofile(minetest.get_modpath("dmobs").."/dragons.lua")
-else
-	mobs:register_mob("dmobs:dragon", {
-	   type = "monster",
-	   passive = false,
-	   attacks_monsters = true,
-	   damage = 4,
-	   reach = 3,
-	   attack_type = "dogshoot",
-	   shoot_interval = 2.5,
-		dogshoot_switch = 2,
-		dogshoot_count = 0,
-		dogshoot_count_max =5,
-	   arrow = "dmobs:fire",
-	   shoot_offset = 1,
-	   hp_min = 70,
-	   hp_max = 100,
-	   armor = 100,
-		collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
-	   visual = "mesh",
-	   mesh = "dragon.b3d",
-	   textures = {
-	      {"dmobs_dragon.png"},
-	      {"dmobs_dragon2.png"},
-	      {"dmobs_dragon3.png"},
-	      {"dmobs_dragon4.png"},
-	   },
-	   blood_texture = "mobs_blood.png",
-	   visual_size = {x=2, y=2},
-	   makes_footstep_sound = true,
-		runaway = false,
-		jump_chance = 30,
-		walk_chance = 80,
-		fall_speed = 0,
-		pathfinding = true,
-		fall_damage = 0,
-	   sounds = {
-	      shoot_attack = "mobs_fireball",
-	   },
-	   walk_velocity = 3,
-	   run_velocity = 5,
-	   jump = true,
-	   fly = true,
-	   drops = {
-	      {name = "mobs:lava_orb", chance = 1, min = 1, max = 1},
-	   },
-	   fall_speed = 0,
-	   stepheight = 10,
-	   water_damage = 2,
-	   lava_damage = 0,
-	   light_damage = 0,
-	   view_range = 20,
-	   animation = {
-	      speed_normal = 10,
-	      speed_run = 20,
-	      walk_start = 1,
-	      walk_end = 22,
-	      stand_start = 1,
-	      stand_end = 22,
-	      run_start = 1,
-	      run_end = 22,
-	      punch_start = 22,
-	      punch_end = 47,
-	   },
-		knock_back = 2,
-	})
-
-	--Thanks to Tenplus1
-	if dmobs.destructive == true then
-	mobs:register_arrow("dmobs:fire", {
-	   visual = "sprite",
-	   visual_size = {x = 0.5, y = 0.5},
-	   textures = {"dmobs_fire.png"},
-	   velocity = 8,
-	   tail = 1, -- enable tail
-	   tail_texture = "fire_basic_flame.png",
-
-	   hit_player = function(self, player)
-	      player:punch(self.object, 1.0, {
-		 full_punch_interval = 1.0,
-		 damage_groups = {fleshy = 8},
-	      }, nil)
-	   end,
-	   
-	   hit_mob = function(self, player)
-	      player:punch(self.object, 1.0, {
-		 full_punch_interval = 1.0,
-		 damage_groups = {fleshy = 8},
-	      }, nil)
-	   end,
-
-	   hit_node = function(self, pos, node)
-	      mobs:explosion(pos, 2, 1, 1)
-	   end,
-	})
-	else
-	mobs:register_arrow("dmobs:fire", {
-	   visual = "sprite",
-	   visual_size = {x = 0.5, y = 0.5},
-	   textures = {"dmobs_fire.png"},
-	   velocity = 8,
-	   tail = 1, -- enable tail
-	   tail_texture = "fire_basic_flame.png",
-
-	   hit_player = function(self, player)
-	      player:punch(self.object, 1.0, {
-		 full_punch_interval = 1.0,
-		 damage_groups = {fleshy = 8},
-	      }, nil)
-	   end,
-	   
-	   hit_mob = function(self, player)
-	      player:punch(self.object, 1.0, {
-		 full_punch_interval = 1.0,
-		 damage_groups = {fleshy = 8},
-	      }, nil)
-	   end,
-
-	   hit_node = function(self, pos, node)
-	      self.object:remove()
-	   end,
-	})
-end
-
-
-mobs:spawn_specific("dmobs:dragon", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
-   
-mobs:register_egg("dmobs:dragon", "Dragon", "default_apple.png", 1)
-end
diff --git a/dragons.lua b/dragons.lua
deleted file mode 100644
index ac14ffc14f5b9708d1ca4f8840029b2f3216c203..0000000000000000000000000000000000000000
--- a/dragons.lua
+++ /dev/null
@@ -1,1539 +0,0 @@
---thanks to diriel, blert2112 and taikedz 
-
-local step_custom = function(self, dtime)
-	if self.driver then
-		lib_mount.drive(self, dtime, "walk", "stand", true)
-		if self.state == "attack" then
-			self.state = nil
-		end
-		return false
-	end
-	return true
-end
-
-local tamed_dragons = {}
-
-local node_hit = {}
-
-dmobs.destructive = false
-
-if dmobs.destructive == true then
-node_hit = function(self, pos, node)
-mobs:explosion(pos, 2, 1, 1)
-end
-else
-node_hit = function(self)
-self.object:remove()
-end
-end
-
-local on_rc = function(self, clicker)
-	if not clicker or not clicker:is_player() then
-		return
-	end
-	if mobs:feed_tame(self, clicker, 1, false, false) then
-		return
-	end
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		if self.driver and clicker == self.driver then
-			-- detach
-			lib_mount.detach(self, clicker, {x=1, y=0, z=1})
-			if inv:room_for_item("main", "mobs:saddle") then
-				inv:add_item("main", "mobs:saddle")
-			else
-				minetest.add_item(clicker.getpos(), "mobs:saddle")
-			end
-			self.object:setacceleration({x=0, y=0, z=0})
-		elseif not self.driver then
-			-- attach
-			if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-				lib_mount.attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-				inv:remove_item("main", "mobs:saddle")
-			end
-		end
-	end
-end
-
-
-
-mobs:register_mob("dmobs:dragon", {
-   type = "monster",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:fire",
-   shoot_offset = 1,
-   hp_min = 70,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-      {"dmobs_dragon.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=2, y=2},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
-      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	do_custom = step_custom,
-	on_rightclick = on_rc
-})
-
-mobs:register_mob("dmobs:dragon2", {
-   type = "monster",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:lightning",
-   shoot_offset = 1,
-   hp_min = 70,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-	  {"dmobs_dragon2.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=2, y=2},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
-      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	do_custom = step_custom,
-	on_rightclick = on_rc
-})
-
-mobs:register_mob("dmobs:dragon3", {
-   type = "monster",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:poison",
-   shoot_offset = 1,
-   hp_min = 70,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-	  {"dmobs_dragon3.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=2, y=2},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
-      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	do_custom = step_custom,
-	on_rightclick = on_rc
-})
-
-mobs:register_mob("dmobs:dragon4", {
-   type = "monster",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:ice",
-   shoot_offset = 1,
-   hp_min = 70,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-	  {"dmobs_dragon4.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=2, y=2},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
-      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	do_custom = step_custom,
-	on_rightclick = on_rc
-})
-
---hatched dragons
-mobs:register_mob("dmobs:dragon_red", {
-   type = "npc",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:fire",
-   shoot_offset = 1,
-   hp_min = 80,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -0.9, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-      {"dmobs_dragon.png"},
-   },
-	child_texture = {
-		{"dmobs_dragon_young.png"}
-	},
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=1.5, y=1.5},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem_fire"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	on_rightclick = function(self, clicker)
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		if self.driver and clicker == self.driver then
-		object_detach(self, clicker, {x=1, y=0, z=1})
-		if inv:room_for_item("main", "mobs:saddle") then
-				inv:add_item("main", "mobs:saddle")
-		else
-				minetest.add_item(clicker.getpos(), "mobs:saddle")
-		end
-		elseif not self.driver then
-		if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-		object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-		inv:remove_item("main", "mobs:saddle")
-		end
-		end
-		end
-	end,
-	do_custom = function(self, dtime)
-	if self.driver then
-		object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand")
-		if self.state == "attack" then
-		self.state = "idle"
-		end
-		return false
-		end
-		return true
-	end,
-})
-
-mobs:register_mob("dmobs:dragon_black", {
-   type = "npc",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:lightning",
-   shoot_offset = 1,
-   hp_min = 80,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -0.9, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-      {"dmobs_dragon2.png"},
-   },
-	child_texture = {
-		{"dmobs_dragon_young.png"}
-	},
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=1.5, y=1.5},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem_lightning"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	on_rightclick = function(self, clicker)
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		if self.driver and clicker == self.driver then
-		object_detach(self, clicker, {x=1, y=0, z=1})
-		if inv:room_for_item("main", "mobs:saddle") then
-				inv:add_item("main", "mobs:saddle")
-		else
-				minetest.add_item(clicker.getpos(), "mobs:saddle")
-		end
-		elseif not self.driver then
-		if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-		object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-		inv:remove_item("main", "mobs:saddle")
-		end
-		end
-		end
-	end,
-	do_custom = function(self, dtime)
-	if self.driver then
-		object_fly(self, dtime, 15, true, "dmobs:lightning_plyr", "walk", "stand")
-		if self.state == "attack" then
-		self.state = "idle"
-		end
-		return false
-		end
-		return true
-	end,
-})
-
-mobs:register_mob("dmobs:dragon_green", {
-   type = "npc",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:poison",
-   shoot_offset = 1,
-   hp_min = 80,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -0.9, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-      {"dmobs_dragon3.png"},
-   },
-	child_texture = {
-		{"dmobs_dragon_young.png"}
-	},
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=1.5, y=1.5},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem_poison"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	on_rightclick = function(self, clicker)
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		if self.driver and clicker == self.driver then
-		object_detach(self, clicker, {x=1, y=0, z=1})
-		if inv:room_for_item("main", "mobs:saddle") then
-				inv:add_item("main", "mobs:saddle")
-		else
-				minetest.add_item(clicker.getpos(), "mobs:saddle")
-		end
-		elseif not self.driver then
-		if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-		object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-		inv:remove_item("main", "mobs:saddle")
-		end
-		end
-		end
-	end,
-	do_custom = function(self, dtime)
-	if self.driver then
-		object_fly(self, dtime, 10, true, "dmobs:poison_plyr", "walk", "stand")
-		if self.state == "attack" then
-		self.state = "idle"
-		end
-		return false
-		end
-		return true
-	end,
-})
-
-mobs:register_mob("dmobs:dragon_blue", {
-   type = "npc",
-   passive = false,
-   attacks_monsters = true,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:ice",
-   shoot_offset = 1,
-   hp_min = 80,
-   hp_max = 100,
-   armor = 100,
-	collisionbox = {-0.6, -0.9, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-      {"dmobs_dragon4.png"},
-   },
-	child_texture = {
-		{"dmobs_dragon_young.png"}
-	},
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=1.5, y=1.5},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	follow = {"dmobs:dragon_gem_ice"},
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	on_rightclick = function(self, clicker)
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		if self.driver and clicker == self.driver then
-		object_detach(self, clicker, {x=1, y=0, z=1})
-		if inv:room_for_item("main", "mobs:saddle") then
-				inv:add_item("main", "mobs:saddle")
-		else
-				minetest.add_item(clicker.getpos(), "mobs:saddle")
-		end
-		elseif not self.driver then
-		if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-		object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-		inv:remove_item("main", "mobs:saddle")
-		end
-		end
-		end
-	end,
-	do_custom = function(self, dtime)
-	if self.driver then
-		object_fly(self, dtime, 10, true, "dmobs:ice_plyr", "walk", "stand")
-		if self.state == "attack" then
-		self.state = "idle"
-		end
-		return false
-		end
-		return true
-	end,
-})
-
-
-
-
--- eggs from mobs_dragon 
-
-minetest.register_node("dmobs:egg", {
-	description = "Dragon Egg",
-	drawtype = "mesh",
-	mesh = "egg.b3d",
-	tiles = {"dmobs_egg.png"},
-	paramtype = "light",
-	sunlight_propagates = true,
-	is_ground_content = false,
-	groups = {fleshy=3, dig_immediate=3},
-	sounds = default.node_sound_leaves_defaults(),
-	on_rightclick = function(pos, node, clicker, item, _)
-		local wield_item = clicker:get_wielded_item():get_name()
-		if wield_item == "dmobs:dragon_gem" then
-		
-		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
-		local name1
-		for x1 = -1,1 do
-			for z1 = -1,1 do
-				p.x = pos.x + x1
-				p.z = pos.z + z1
-				local name2 = minetest.get_node(p).name
-				if x1 == -1 and z1 == -1 then
-					name1 = minetest.get_node(p).name
-				elseif x1 == 0 and z1 == 0 then
-					if name2 ~= "default:obsidian" then return end
-				else
-					if name2 ~= name1 then return end
-				end
-			end
-		end
-		local which_dragon
-		if name1 == "default:lava_source" then which_dragon = "red"
-		elseif name1 == "default:obsidian" then which_dragon = "black"
-		elseif name1 == "default:cactus" then which_dragon = "green"
-		elseif name1 == "default:ice" then which_dragon = "blue"
-		end
-		minetest.after(100, function(pos, dragon, pname)
-			if which_dragon == "red" then
-			minetest.set_node(pos, {name="dmobs:dragon_egg_fire"})
-			elseif which_dragon == "black" then
-			minetest.set_node(pos, {name="dmobs:dragon_egg_lightning"})
-			elseif which_dragon == "green" then
-			minetest.set_node(pos, {name="dmobs:dragon_egg_poison"})
-			elseif which_dragon == "blue" then
-			minetest.set_node(pos, {name="dmobs:dragon_egg_ice"})
-			end
-		end, pos)
-			item:take_item()
-		else
-	end
-	end,
-})
-
-
-minetest.register_node("dmobs:dragon_egg_fire", {
-	description = "Dragon Egg",
-	drawtype = "mesh",
-	mesh = "egg.b3d",
-	tiles = {"dmobs_egg1.png"},
-	paramtype = "light",
-	sunlight_propagates = true,
-	is_ground_content = false,
-	groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory=1},
-	sounds = default.node_sound_leaves_defaults(),
-	on_rightclick = function(pos, node, clicker, item, _)
-		local wield_item = clicker:get_wielded_item():get_name()
-		if wield_item == "dmobs:dragon_gem_fire" then
-		minetest.after(100, function(pos, dragon, pname)
-			minetest.remove_node(pos)
-			local ent = minetest.add_entity(pos, "dmobs:dragon_red")
-			minetest.sound_play("dmobs_chirrup",{pos=pos,max_hear_distance=20})
-			local obj = ent:get_luaentity()
-			ent:set_properties({
-				textures = {"dmobs_dragon_young.png"},
-				visual_size = {x=1, y=1},
-			})
-			obj.tamed = true
-			obj.owner = clicker:get_player_name()
-		end, pos, clicker:get_player_name())
-		item:take_item()
-	end
-	end
-})
-
-minetest.register_node("dmobs:dragon_egg_lightning", {
-	description = "Dragon Egg",
-	drawtype = "mesh",
-	mesh = "egg.b3d",
-	tiles = {"dmobs_egg2.png"},
-	paramtype = "light",
-	sunlight_propagates = true,
-	is_ground_content = false,
-	groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory=1},
-	sounds = default.node_sound_leaves_defaults(),
-	on_rightclick = function(pos, node, clicker, item, _)
-		local pname = clicker:get_player_name()
-		local wield_item = clicker:get_wielded_item():get_name()
-		if wield_item == "dmobs:dragon_gem_lightning" then
-		minetest.after(100, function(pos, dragon, pname)
-			minetest.remove_node(pos)
-			minetest.sound_play("dmobs_chirrup",{pos=pos,max_hear_distance=20})
-			local ent = minetest.add_entity(pos, "dmobs:dragon_black")
-			local obj = ent:get_luaentity()
-			ent:set_properties({
-				textures = {"dmobs_dragon_young.png"},
-				visual_size = {x=1, y=1},
-			})
-			obj.tamed = true
-			obj.owner = clicker:get_player_name()
-		end, pos, clicker:get_player_name())
-		item:take_item()
-	end
-	end
-})
-
-minetest.register_node("dmobs:dragon_egg_poison", {
-	description = "Dragon Egg",
-	drawtype = "mesh",
-	mesh = "egg.b3d",
-	tiles = {"dmobs_egg3.png"},
-	paramtype = "light",
-	sunlight_propagates = true,
-	is_ground_content = false,
-	groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory=1},
-	sounds = default.node_sound_leaves_defaults(),
-	on_rightclick = function(pos, node, clicker, item, _)
-		local wield_item = clicker:get_wielded_item():get_name()
-		if wield_item == "dmobs:dragon_gem_poison" then
-		minetest.after(100, function(pos, dragon, pname)
-			minetest.remove_node(pos)
-			minetest.sound_play("dmobs_chirrup",{pos=pos,max_hear_distance=20})
-			local ent = minetest.add_entity(pos, "dmobs:dragon_green")
-			local obj = ent:get_luaentity()
-			ent:set_properties({
-				textures = {"dmobs_dragon_young.png"},
-				visual_size = {x=1, y=1},
-			})
-			obj.tamed = true
-			obj.owner = clicker:get_player_name()
-		end, pos, clicker:get_player_name())
-		item:take_item()
-	end
-	end
-})
-
-minetest.register_node("dmobs:dragon_egg_ice", {
-	description = "Dragon Egg",
-	drawtype = "mesh",
-	mesh = "egg.b3d",
-	tiles = {"dmobs_egg4.png"},
-	paramtype = "light",
-	sunlight_propagates = true,
-	is_ground_content = false,
-	groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory=1},
-	sounds = default.node_sound_leaves_defaults(),
-	on_rightclick = function(pos, node, clicker, item, _)
-		local wield_item = clicker:get_wielded_item():get_name()
-		if wield_item == "dmobs:dragon_gem_ice" then
-		minetest.after(100, function(pos, dragon, pname)
-			minetest.remove_node(pos)
-			minetest.sound_play("dmobs_chirrup",{pos=pos,max_hear_distance=20})
-			local ent = minetest.add_entity(pos, "dmobs:dragon_blue")
-			local obj = ent:get_luaentity()
-			ent:set_properties({
-				textures = {"dmobs_dragon_young.png"},
-				visual_size = {x=1, y=1},
-			})
-			obj.tamed = true
-			obj.owner = clicker:get_player_name()
-		end, pos, clicker:get_player_name())
-		item:take_item()
-	end
-	end
-})
-
-minetest.register_node("dmobs:egg_great", {
-	description = "Great Dragon Egg",
-	drawtype = "mesh",
-	mesh = "egg.b3d",
-	tiles = {"dmobs_egg.png"},
-	paramtype = "light",
-	sunlight_propagates = true,
-	is_ground_content = false,
-	groups = {fleshy=3, dig_immediate=3},
-	sounds = default.node_sound_leaves_defaults(),
-	on_rightclick = function(pos, node, clicker, item, _)
-		local wield_item = clicker:get_wielded_item():get_name()
-		if wield_item == "dmobs:dragon_gem" then
-		minetest.after(100, function(pos, dragon, pname)
-			minetest.remove_node(pos)
-			local ent = minetest.add_entity(pos, "dmobs:dragon_great_tame")
-			local obj = ent:get_luaentity()
-			obj.tamed = true
-			obj.owner = clicker:get_player_name()
-		end, pos, clicker:get_player_name())
-		item:take_item()
-	end
-	end
-})
-
-
---saddle license
-
--- **mobs_saddle.png**
--- -------------------
--- The MIT License (MIT)
-
--- Copyright (c) 2014 Krupnov Pavel
-
--- Permission is hereby granted, free of charge, to any person obtaining a copy
--- of this software and associated documentation files (the "Software"), to deal
--- in the Software without restriction, including without limitation the rights
--- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
--- copies of the Software, and to permit persons to whom the Software is
--- furnished to do so, subject to the following conditions:
-
--- The above copyright notice and this permission notice shall be included in
--- all copies or substantial portions of the Software.
-
--- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
--- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
--- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
--- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
--- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
--- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
--- THE SOFTWARE.
-
-
--- saddle (if not already available)
-if not minetest.get_modpath("mobs_horse") then
-	minetest.register_craftitem(":mobs:saddle", {
-		description = "Saddle",
-		inventory_image = "mobs_saddle.png"
-	})
-
-	minetest.register_craft({
-		output = "mobs:saddle",
-		recipe = {
-			{"mobs:leather", "mobs:leather", "mobs:leather"},
-			{"mobs:leather", "default:steel_ingot", "mobs:leather"},
-			{"mobs:leather", "default:steel_ingot", "mobs:leather"}
-		}
-	})
-end
-
---arrows
-
---Thanks to Tenplus1
-mobs:register_arrow("dmobs:fire", {
-   visual = "sprite",
-   visual_size = {x = 0.5, y = 0.5},
-   textures = {"dmobs_fire.png"},
-   velocity = 8,
-   tail = 1, -- enable tail
-   tail_texture = "fire_basic_flame.png",
-
-   hit_player = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-   
-   hit_mob = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-
-   hit_node = node_hit,
-})
-
---function to register tamed dragon attacks
-
-function dmobs.register_fire(fname, texture, dmg, replace_node, explode, ice, variance, size)
-minetest.register_entity(fname, {
-	textures = {texture},
-	velocity = 0.1,
-	damage = dmg,
-	collisionbox = {0, 0, 0, 0, 0, 0},
-	on_step = function(self, obj, pos)		
-		local remove = minetest.after(2, function() 
-		self.object:remove()
-		end)
-		local pos = self.object:getpos()
-		local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)	
-			for k, obj in pairs(objs) do
-				if obj:get_luaentity() ~= nil then
-					if obj:get_luaentity().name ~= fname and obj:get_luaentity().name ~= "dmobs:dragon_red" and obj:get_luaentity().name ~= "dmobs:dragon_blue" and obj:get_luaentity().name ~= "dmobs:dragon_black" and obj:get_luaentity().name ~= "dmobs:dragon_green" and obj:get_luaentity().name ~= "dmobs:dragon_great_tame" and obj:get_luaentity().name ~= "__builtin:item" then
-						obj:punch(self.launcher, 1.0, {
-							full_punch_interval=1.0,
-							damage_groups={fleshy=3},
-						}, nil)
-					self.object:remove()
-					end
-				end
-			end
-			for dx=0,1 do
-						for dy=0,1 do
-							for dz=0,1 do
-								local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
-								local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
-								local n = minetest.env:get_node(p).name
-								if n ~= fname and n ~="default:dirt_with_grass" and n ~="default:dirt_with_dry_grass" and n ~="default:stone"  then	
-									if minetest.registered_nodes[n].groups.flammable --[[or math.random(1, 100) <= 1]] then
-										minetest.env:set_node(t, {name=replace_node})
-									self.object:remove()
-									return
-									end
-									if ice and n == "default:water_source" then
-									minetest.env:set_node(t, {name="default:ice"})
-									self.object:remove()
-									end
-								end
-							end
-						end
-					end
-		local apos = self.object:getpos()
-		local part = minetest.add_particlespawner(
-			6, --amount
-			0.3, --time
-			{x=apos.x-variance, y=apos.y-variance, z=apos.z-variance}, --minpos
-			{x=apos.x+variance, y=apos.y+variance, z=apos.z+variance}, --maxpos
-			{x=-0, y=-0, z=-0}, --minvel
-			{x=0, y=0, z=0}, --maxvel
-			{x=variance,y=-0.5-variance,z=variance}, --minacc
-			{x=0.5+variance,y=0.5+variance,z=0.5+variance}, --maxacc
-			0.1, --minexptime
-			0.3, --maxexptime
-			size, --minsize
-			size+2, --maxsize
-			false, --collisiondetection
-			texture --texture
-		)
-		
-	end,
-})
-end
-
-dmobs.register_fire("dmobs:fire_plyr", "dmobs_fire.png", 2, "fire:basic_flame", true, false, 0.3, 1)
-dmobs.register_fire("dmobs:ice_plyr", "dmobs_ice.png", 2, "default:ice", false, true, 0.5, 10)
-dmobs.register_fire("dmobs:poison_plyr", "dmobs_poison.png", 2, "air", false, false, 0.3, 1)
-dmobs.register_fire("dmobs:lightning_plyr", "dmobs_lightning.png", 2, "air", true, false, 0, 0.5)
-
-
-
-mobs:register_arrow("dmobs:ice", {
-   visual = "sprite",
-   visual_size = {x = 0.5, y = 0.5},
-   textures = {"dmobs_ice.png"},
-   velocity = 8,
-   tail = 1, -- enable tail
-   tail_texture = "dmobs_ice.png",
-
-   hit_player = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-   
-   hit_mob = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-
-   hit_node = function(self, pos, node)
-      self.object:remove()
-   end,
-})
-
-mobs:register_arrow("dmobs:lightning", {
-   visual = "sprite",
-   visual_size = {x = 0.5, y = 0.5},
-   textures = {"dmobs_lightning.png"},
-   velocity = 8,
-   tail = 1, -- enable tail
-   tail_texture = "dmobs_lightning.png",
-
-   hit_player = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-   
-   hit_mob = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-
-   hit_node = node_hit,
-})
-
-mobs:register_arrow("dmobs:poison", {
-   visual = "sprite",
-   visual_size = {x = 0.5, y = 0.5},
-   textures = {"dmobs_poison.png"},
-   velocity = 8,
-   tail = 1, -- enable tail
-   tail_texture = "dmobs_poison.png",
-
-   hit_player = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-   
-   hit_mob = function(self, player)
-      player:punch(self.object, 1.0, {
-         full_punch_interval = 1.0,
-         damage_groups = {fleshy = 8},
-      }, nil)
-   end,
-
-   hit_node = function(self, pos, node)
-      self.object:remove()
-   end,
-})
-
-
---items and tools
-
-minetest.register_craftitem("dmobs:dragon_gem_lightning", {
-	description = "Lightning Gem",
-	inventory_image = "dmobs_gem_lightning.png"
-})
-minetest.register_craftitem("dmobs:dragon_gem_ice", {
-	description = "Ice Gem",
-	inventory_image = "dmobs_gem_ice.png"
-})
-minetest.register_craftitem("dmobs:dragon_gem_fire", {
-	description = "Fire Gem",
-	inventory_image = "dmobs_gem_fire.png"
-})
-minetest.register_craftitem("dmobs:dragon_gem_poison", {
-	description = "Poison Gem",
-	inventory_image = "dmobs_gem_poison.png"
-})
-
-minetest.register_craftitem("dmobs:dragon_gem", {
-	description = "Dragon Gem",
-	inventory_image = "dmobs_gem.png"
-})
-
-
---spawns and eggs
-
--- mobs:spawn_specific("dmobs:dragon", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
--- mobs:spawn_specific("dmobs:dragon2", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
--- mobs:spawn_specific("dmobs:dragon3", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
--- mobs:spawn_specific("dmobs:dragon4", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
-
-mobs:register_spawn("dmobs:dragon", {"default:leaves","default:dirt_with_grass"}, 20, 10, 64000, 2, 31000)
-mobs:register_spawn("dmobs:dragon2", {"default:pine_needles"}, 20, 10, 64000, 2, 31000)
-mobs:register_spawn("dmobs:dragon3", {"default:acacia_leaves","default:dirt_with_dry_grass"}, 20, 10, 64000, 2, 31000)
-mobs:register_spawn("dmobs:dragon4", {"default:jungleleaves"}, 20, 10, 64000, 2, 31000)
-   
-mobs:register_egg("dmobs:dragon", "Wild Fire Dragon", "default_apple.png", 1)
-mobs:register_egg("dmobs:dragon2", "Wild Lightning Dragon", "default_mese_crystal.png", 1)
-mobs:register_egg("dmobs:dragon3", "Wild Poison Dragon", "dmobs_poison.png", 1)
-mobs:register_egg("dmobs:dragon4", "Wild Ice Dragon", "default_ice.png", 1)
-
-mobs:register_egg("dmobs:dragon_red", "Tame Fire Dragon", "default_apple.png", 1)
-mobs:register_egg("dmobs:dragon_black", "Tame Lightning Dragon", "default_mese_crystal.png", 1)
-mobs:register_egg("dmobs:dragon_green", "Tame Poison Dragon", "dmobs_poison.png", 1)
-mobs:register_egg("dmobs:dragon_blue", "Tame Ice Dragon", "default_ice.png", 1)
-
-
---other dragons
-
-mobs:register_mob("dmobs:waterdragon", {
-	type = "monster",
-	passive = false,
-	attack_type = "dogshoot",
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-	shoot_interval = 2.5,
-	arrow = "dmobs:ice",
-	shoot_offset = 0,
-	pathfinding = false,
-	reach = 5,
-	damage = 2,
-	hp_min = 100,
-	hp_max = 127,
-	armor = 100,
-	collisionbox = {-0.4, -0.5, -0.4, 0.4, 5, 0.4},
-	visual_size = {x=4, y=4},
-	visual = "mesh",
-	mesh = "water_dragon.b3d",
-	textures = {
-		{"dmobs_waterdragon.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	makes_footstep_sound = true,
-	sounds = {
-		random = "mobs_dirtmonster",
-	},
-	view_range = 15,
-	rotate = 180,
-	walk_velocity = 0.01,
-	run_velocity = 0.01,
-	jump = false,
-	drops = {
-		{name = "dmobs:dragon_gem_ice", chance = 1, min = 1, max = 1},
-		{name = "dmobs:dragon_gem_fire", chance = 1, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 5,
-	light_damage = 0,
-	floats = 0,
-	animation = {
-		speed_normal = 15,
-		speed_run = 15,
-		stand_start = 1,
-		stand_end = 20,
-		walk_start = 1,
-		walk_end = 20,
-		run_start = 1,
-		run_end = 20,
-		punch_start = 40,
-		punch_end = 60,
-		shoot_start = 20,
-		shoot_end = 40,
-	},
-	do_custom = function(self)
-	--follow thanks to TenPlus1 and Byakuren
-            if not self.hydra then
-                self.hydra = true -- flip switch so this part is done only once
-
-                -- get head position and define a few temp variables
-                local pos = self.object:getpos()
-                local obj, obj2, ent
-
-                -- add body and make it follow head
-                obj = minetest.add_entity({x=pos.x+1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2")
-                ent = obj:get_luaentity()
-                ent.following = self.object
-
-                -- add body and make it follow previous body segment
-                obj2 = minetest.add_entity({x=pos.x-1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2")
-                ent = obj2:get_luaentity()
-                ent.following = self.object
-            end
-    end,
-})
-
-mobs:register_mob("dmobs:waterdragon_2", {
-	type = "monster",
-	passive = false,
-	attack_type = "shoot",
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-	shoot_interval = 3,
-	arrow = "dmobs:ice",
-	shoot_offset = 0,
-	pathfinding = false,
-	reach = 5,
-	damage = 2,
-	hp_min = 50,
-	hp_max = 60,
-	armor = 50,
-	collisionbox = {-0.4, -0.2, -0.4, 0.4, 5, 0.4},
-	visual_size = {x=3, y=3},
-	visual = "mesh",
-	mesh = "water_dragon.b3d",
-	textures = {
-		{"dmobs_waterdragon.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	makes_footstep_sound = true,
-   sounds = {
-	  shoot_attack = "mobs_fireball",
-	  random = "velociraptor",
-   },
-	view_range = 15,
-	rotate = 180,
-	floats = 0,
-	walk_velocity = 0.01,
-	run_velocity = 0.01,
-	jump = false,
-	water_damage = 0,
-	lava_damage = 5,
-	light_damage = 0,
-	animation = {
-		speed_normal = 15,
-		speed_run = 15,
-		stand_start = 1,
-		stand_end = 20,
-		walk_start = 1,
-		walk_end = 20,
-		run_start = 1,
-		run_end = 20,
-		punch_start = 40,
-		punch_end = 60,
-		shoot_start = 20,
-		shoot_end = 40,
-	},
-})
-
-mobs:register_spawn("dmobs:waterdragon", {"default:water_source"}, 20, 10, 32000, 1, 31000, false)
-
-mobs:register_egg("dmobs:waterdragon", "Boss Waterdragon", "dmobs_egg4.png", 1)
-
-mobs:register_mob("dmobs:wyvern", {
-   type = "monster",
-   passive = false,
-   attacks_monsters = false,
-   damage = 4,
-   reach = 3,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:poison",
-   shoot_offset = 0.5,
-   hp_min = 100,
-   hp_max = 150,
-   armor = 100,
-	collisionbox = {-0.6, -1.4, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "wyvern.b3d",
-   textures = {
-      {"dmobs_wyvern.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=1, y=1},
-   makes_footstep_sound = true,
-	runaway = true,
-	jump_chance = 30,
-	walk_chance = 80,
-	pathfinding = true,
-   walk_velocity = 3,
-   run_velocity = 5,
-   fall_speed = -2,
-   jump = true,
-   fly = false,
-   drops = {
-      {name = "dmobs:dragon_gem_poison", chance = 1, min = 1, max = 1},
-	  {name = "dmobs:dragon_gem_lightning", chance = 1, min = 1, max = 1},
-   },
-   sounds = {
-	  shoot_attack = "mobs_fireball",
-	  random = "velociraptor",
-   },
-   water_damage = 0,
-   lava_damage = 2,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 20,
-      speed_run = 30,
-      walk_start = 33,
-      walk_end = 68,
-      stand_start = 1,
-      stand_end = 30,
-      run_start = 33,
-      run_end = 68,
-      punch_start = 70,
-      punch_end = 89,
-   },
-	knock_back = 2,
-})
-
-mobs:register_spawn("dmobs:wyvern",	{"default:leaves"}, 20, 10, 32000, 1, 31000, false)
-
-mobs:register_egg("dmobs:wyvern", "Boss Wyvern", "dmobs_egg3.png", 1)
-
-mobs:register_mob("dmobs:dragon_great", {
-   type = "monster",
-   passive = false,
-   attacks_monsters = false,
-   damage = 5,
-   reach = 4,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:lightning",
-   shoot_offset = 1,
-   hp_min = 140,
-   hp_max = 180,
-   armor = 220,
-	collisionbox = {-0.6, -1.4, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-	  {"dmobs_dragon_great.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=2.5, y=2.5},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-	  random = "roar",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "dmobs:egg_great", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-})
-
-mobs:register_mob("dmobs:dragon_great_tame", {
-   type = "npc",
-   passive = false,
-   attacks_monsters = true,
-   damage = 5,
-   reach = 4,
-   attack_type = "dogshoot",
-   shoot_interval = 2.5,
-	dogshoot_switch = 2,
-	dogshoot_count = 0,
-	dogshoot_count_max =5,
-   arrow = "dmobs:lightning",
-   shoot_offset = 1,
-   hp_min = 140,
-   hp_max = 180,
-   armor = 220,
-	collisionbox = {-0.6, -1.4, -0.6, 0.6, 0.6, 0.6},
-   visual = "mesh",
-   mesh = "dragon.b3d",
-   textures = {
-	  {"dmobs_dragon_great.png"},
-   },
-   blood_texture = "mobs_blood.png",
-   visual_size = {x=2.5, y=2.5},
-   makes_footstep_sound = true,
-	runaway = false,
-	jump_chance = 30,
-	walk_chance = 80,
-	fall_speed = 0,
-	pathfinding = true,
-	fall_damage = 0,
-   sounds = {
-      shoot_attack = "mobs_fireball",
-	  random = "roar",
-   },
-   walk_velocity = 3,
-   run_velocity = 5,
-   jump = true,
-   fly = true,
-   drops = {
-      {name = "dmobs:egg_great", chance = 1, min = 1, max = 1},
-   },
-   fall_speed = 0,
-   stepheight = 10,
-   water_damage = 2,
-   lava_damage = 0,
-   light_damage = 0,
-   view_range = 20,
-   animation = {
-      speed_normal = 10,
-      speed_run = 20,
-      walk_start = 1,
-      walk_end = 22,
-      stand_start = 1,
-      stand_end = 22,
-      run_start = 1,
-      run_end = 22,
-      punch_start = 22,
-      punch_end = 47,
-   },
-	knock_back = 2,
-	on_rightclick = function(self, clicker)
-	if self.tamed and self.owner == clicker:get_player_name() then
-		local inv = clicker:get_inventory()
-		if self.driver and clicker == self.driver then
-		object_detach(self, clicker, {x=1, y=0, z=1})
-		if inv:room_for_item("main", "mobs:saddle") then
-				inv:add_item("main", "mobs:saddle")
-		else
-				minetest.add_item(clicker.getpos(), "mobs:saddle")
-		end
-		elseif not self.driver then
-		if clicker:get_wielded_item():get_name() == "mobs:saddle" then
-		object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
-		inv:remove_item("main", "mobs:saddle")
-		end
-		end
-		end
-	end,
-	do_custom = function(self, dtime)
-	if self.driver then
-		object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand")
-		if self.state == "attack" then
-		self.state = "idle"
-		end
-		return false
-		end
-		return true
-	end,
-})
-
-mobs:register_spawn("dmobs:dragon_great", {"default:lava_source"}, 20, 0, 64000, -21000, 1000, false)
-
-mobs:register_egg("dmobs:dragon_great", "Boss Dragon", "dmobs_egg1.png", 1)
diff --git a/dragons.md b/dragons.md
new file mode 100644
index 0000000000000000000000000000000000000000..b8fdb50b628bb095329d084b83a77026d5a05d26
--- /dev/null
+++ b/dragons.md
@@ -0,0 +1,13 @@
+D00Med's Mobs
+
+How to Dragon
+
+By defeating dragons you will get eggs. Place them in their ideal environment and feed them a gem to create an elemental egg.
+
+By defeating special dragons, you can obtain elemental gems.
+
+Feed the right elemental gem to the elemental egg to hatch a dragon.
+
+Use the Use key to shoot fireballs when riding your new pet dragon.
+
+ENjoy
diff --git a/dragons/dragon1.lua b/dragons/dragon1.lua
new file mode 100644
index 0000000000000000000000000000000000000000..b1fed8107ae263e918a143ae34d5cd101cb633f7
--- /dev/null
+++ b/dragons/dragon1.lua
@@ -0,0 +1,76 @@
+local dragondef = {
+   type = "monster",
+   passive = false,
+   attacks_monsters = true,
+   damage = 4,
+   reach = 3,
+   attack_type = "dogshoot",
+   shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+   arrow = "dmobs:fire",
+   shoot_offset = 1,
+   hp_min = 70,
+   hp_max = 100,
+   armor = 100,
+	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
+   visual = "mesh",
+   mesh = "dragon.b3d",
+   textures = {
+      {"dmobs_dragon.png"},
+   },
+   blood_texture = "mobs_blood.png",
+   visual_size = {x=2, y=2},
+   makes_footstep_sound = true,
+	runaway = false,
+	jump_chance = 30,
+	walk_chance = 80,
+	fall_speed = 0,
+	follow = {"dmobs:dragon_gem"},
+	pathfinding = true,
+	fall_damage = 0,
+   sounds = {
+      shoot_attack = "mobs_fireball",
+   },
+   walk_velocity = 3,
+   run_velocity = 5,
+   jump = true,
+   fly = true,
+   drops = {
+      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
+      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
+   },
+   fall_speed = 0,
+   stepheight = 10,
+   water_damage = 2,
+   lava_damage = 0,
+   light_damage = 0,
+   view_range = 20,
+   animation = {
+      speed_normal = 10,
+      speed_run = 20,
+      walk_start = 1,
+      walk_end = 22,
+      stand_start = 1,
+      stand_end = 22,
+      run_start = 1,
+      run_end = 22,
+      punch_start = 22,
+      punch_end = 47,
+   },
+	knock_back = 2,
+	do_custom = dmobs.dragon.step_custom,
+	on_rightclick = dmobs.dragon.on_rc
+}
+
+mobs:register_mob("dmobs:dragon", dmobs.deepclone(dragondef) )
+
+dragondef.type = "npc"
+dragondef.attacks_monsters = true
+
+dragondef.on_rightclick = dmobs.dragon.ride
+	
+dragondef.do_custom = dmobs.dragon.do_custom
+
+mobs:register_mob("dmobs:dragon_red", dmobs.deepclone(dragondef) )
diff --git a/dragons/dragon2.lua b/dragons/dragon2.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a90f104264a07645db2ac07fb63258123bc344cc
--- /dev/null
+++ b/dragons/dragon2.lua
@@ -0,0 +1,77 @@
+local dragondef = {
+   type = "monster",
+   passive = false,
+   attacks_monsters = true,
+   damage = 4,
+   reach = 3,
+   attack_type = "dogshoot",
+   shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+   arrow = "dmobs:lightning",
+   shoot_offset = 1,
+   hp_min = 70,
+   hp_max = 100,
+   armor = 100,
+	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
+   visual = "mesh",
+   mesh = "dragon.b3d",
+   textures = {
+	  {"dmobs_dragon2.png"},
+   },
+   blood_texture = "mobs_blood.png",
+   visual_size = {x=2, y=2},
+   makes_footstep_sound = true,
+	runaway = false,
+	jump_chance = 30,
+	walk_chance = 80,
+	fall_speed = 0,
+	follow = {"dmobs:dragon_gem"},
+	pathfinding = true,
+	fall_damage = 0,
+   sounds = {
+      shoot_attack = "mobs_fireball",
+   },
+   walk_velocity = 3,
+   run_velocity = 5,
+   jump = true,
+   fly = true,
+   drops = {
+      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
+      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
+   },
+   fall_speed = 0,
+   stepheight = 10,
+   water_damage = 2,
+   lava_damage = 0,
+   light_damage = 0,
+   view_range = 20,
+   animation = {
+      speed_normal = 10,
+      speed_run = 20,
+      walk_start = 1,
+      walk_end = 22,
+      stand_start = 1,
+      stand_end = 22,
+      run_start = 1,
+      run_end = 22,
+      punch_start = 22,
+      punch_end = 47,
+   },
+	knock_back = 2,
+	do_custom = dmobs.dragon.step_custom,
+	on_rightclick = dmobs.dragon.on_rc
+}
+
+
+mobs:register_mob("dmobs:dragon2", dmobs.deepclone(dragondef) )
+
+dragondef.type = "npc"
+dragondef.attacks_monsters = true
+
+dragondef.on_rightclick = dmobs.dragon.ride
+	
+dragondef.do_custom = dmobs.dragon.do_custom
+
+mobs:register_mob("dmobs:dragon_black", dmobs.deepclone(dragondef) )
diff --git a/dragons/dragon3.lua b/dragons/dragon3.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a21553e7421473a6f9e138a2312405fb02a08d1a
--- /dev/null
+++ b/dragons/dragon3.lua
@@ -0,0 +1,77 @@
+local dragondef = {
+   type = "monster",
+   passive = false,
+   attacks_monsters = true,
+   damage = 4,
+   reach = 3,
+   attack_type = "dogshoot",
+   shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+   arrow = "dmobs:poison",
+   shoot_offset = 1,
+   hp_min = 70,
+   hp_max = 100,
+   armor = 100,
+	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
+   visual = "mesh",
+   mesh = "dragon.b3d",
+   textures = {
+	  {"dmobs_dragon3.png"},
+   },
+   blood_texture = "mobs_blood.png",
+   visual_size = {x=2, y=2},
+   makes_footstep_sound = true,
+	runaway = false,
+	jump_chance = 30,
+	walk_chance = 80,
+	fall_speed = 0,
+	follow = {"dmobs:dragon_gem"},
+	pathfinding = true,
+	fall_damage = 0,
+   sounds = {
+      shoot_attack = "mobs_fireball",
+   },
+   walk_velocity = 3,
+   run_velocity = 5,
+   jump = true,
+   fly = true,
+   drops = {
+      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
+      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
+   },
+   fall_speed = 0,
+   stepheight = 10,
+   water_damage = 2,
+   lava_damage = 0,
+   light_damage = 0,
+   view_range = 20,
+   animation = {
+      speed_normal = 10,
+      speed_run = 20,
+      walk_start = 1,
+      walk_end = 22,
+      stand_start = 1,
+      stand_end = 22,
+      run_start = 1,
+      run_end = 22,
+      punch_start = 22,
+      punch_end = 47,
+   },
+	knock_back = 2,
+	do_custom = dmobs.dragon.step_custom,
+	on_rightclick = dmobs.dragon.on_rc
+}
+
+
+mobs:register_mob("dmobs:dragon3", dmobs.deepclone(dragondef) )
+
+dragondef.type = "npc"
+dragondef.attacks_monsters = true
+
+dragondef.on_rightclick = dmobs.dragon.ride
+	
+dragondef.do_custom = dmobs.dragon.do_custom
+
+mobs:register_mob("dmobs:dragon_green", dmobs.deepclone(dragondef) )
diff --git a/dragons/dragon4.lua b/dragons/dragon4.lua
new file mode 100644
index 0000000000000000000000000000000000000000..204d5897225a5abe719ba34ee60edaf6caae7bf6
--- /dev/null
+++ b/dragons/dragon4.lua
@@ -0,0 +1,77 @@
+local dragondef = {
+   type = "monster",
+   passive = false,
+   attacks_monsters = true,
+   damage = 4,
+   reach = 3,
+   attack_type = "dogshoot",
+   shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+   arrow = "dmobs:ice",
+   shoot_offset = 1,
+   hp_min = 70,
+   hp_max = 100,
+   armor = 100,
+	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
+   visual = "mesh",
+   mesh = "dragon.b3d",
+   textures = {
+	  {"dmobs_dragon4.png"},
+   },
+   blood_texture = "mobs_blood.png",
+   visual_size = {x=2, y=2},
+   makes_footstep_sound = true,
+	runaway = false,
+	jump_chance = 30,
+	walk_chance = 80,
+	fall_speed = 0,
+	follow = {"dmobs:dragon_gem"},
+	pathfinding = true,
+	fall_damage = 0,
+   sounds = {
+      shoot_attack = "mobs_fireball",
+   },
+   walk_velocity = 3,
+   run_velocity = 5,
+   jump = true,
+   fly = true,
+   drops = {
+      {name = "dmobs:egg", chance = 1, min = 1, max = 1},
+      {name = "dmobs:dragon_gem", chance = 1, min = 1, max = 1},
+   },
+   fall_speed = 0,
+   stepheight = 10,
+   water_damage = 2,
+   lava_damage = 0,
+   light_damage = 0,
+   view_range = 20,
+   animation = {
+      speed_normal = 10,
+      speed_run = 20,
+      walk_start = 1,
+      walk_end = 22,
+      stand_start = 1,
+      stand_end = 22,
+      run_start = 1,
+      run_end = 22,
+      punch_start = 22,
+      punch_end = 47,
+   },
+	knock_back = 2,
+	do_custom = dmobs.dragon.step_custom,
+	on_rightclick = dmobs.dragon.on_rc
+}
+
+
+mobs:register_mob("dmobs:dragon4", dmobs.deepclone(dragondef) )
+
+dragondef.type = "npc"
+dragondef.attacks_monsters = true
+
+dragondef.on_rightclick = dmobs.dragon.ride
+	
+dragondef.do_custom = dmobs.dragon.do_custom
+
+mobs:register_mob("dmobs:dragon_blue", dmobs.deepclone(dragondef) )
diff --git a/dragons/dragon_normal.lua b/dragons/dragon_normal.lua
new file mode 100644
index 0000000000000000000000000000000000000000..0e5e4d558fa8b05edf97ebe80f211a4d00e6ee4d
--- /dev/null
+++ b/dragons/dragon_normal.lua
@@ -0,0 +1,72 @@
+--dragon
+
+mobs:register_mob("dmobs:dragon", {
+   type = "monster",
+   passive = false,
+   attacks_monsters = true,
+   damage = 4,
+   reach = 3,
+   attack_type = "dogshoot",
+   shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+   arrow = "dmobs:fire",
+   shoot_offset = 1,
+   hp_min = 70,
+   hp_max = 100,
+   armor = 100,
+	collisionbox = {-0.6, -1.2, -0.6, 0.6, 0.6, 0.6},
+   visual = "mesh",
+   mesh = "dragon.b3d",
+   textures = {
+	  {"dmobs_dragon.png"},
+	  {"dmobs_dragon2.png"},
+	  {"dmobs_dragon3.png"},
+	  {"dmobs_dragon4.png"},
+   },
+   blood_texture = "mobs_blood.png",
+   visual_size = {x=2, y=2},
+   makes_footstep_sound = true,
+	runaway = false,
+	jump_chance = 30,
+	walk_chance = 80,
+	fall_speed = 0,
+	pathfinding = true,
+	fall_damage = 0,
+   sounds = {
+	  shoot_attack = "mobs_fireball",
+   },
+   walk_velocity = 3,
+   run_velocity = 5,
+   jump = true,
+   fly = true,
+   drops = {
+	  {name = "mobs:lava_orb", chance = 1, min = 1, max = 1},
+   },
+   fall_speed = 0,
+   stepheight = 10,
+   water_damage = 2,
+   lava_damage = 0,
+   light_damage = 0,
+   view_range = 20,
+   animation = {
+	  speed_normal = 10,
+	  speed_run = 20,
+	  walk_start = 1,
+	  walk_end = 22,
+	  stand_start = 1,
+	  stand_end = 22,
+	  run_start = 1,
+	  run_end = 22,
+	  punch_start = 22,
+	  punch_end = 47,
+   },
+	knock_back = 2,
+})
+
+
+
+mobs:spawn_specific("dmobs:dragon", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
+   
+mobs:register_egg("dmobs:dragon", "Dragon", "default_apple.png", 1)
diff --git a/dragons/eggs.lua b/dragons/eggs.lua
new file mode 100644
index 0000000000000000000000000000000000000000..0e6540073ee31a2814ca845ebe0c3efa9dff0892
--- /dev/null
+++ b/dragons/eggs.lua
@@ -0,0 +1,137 @@
+-- eggs from mobs_dragon --------------------------------------------------------------------------
+	
+local dragonpairs = {
+	fire = {colour="red",nest="default:lava_source"},
+	lightning = {colour="black",nest="default:obsidian"},
+	poison = {colour="green",nest="default:cactus"},
+	ice = {colour="black",nest="default:ice"},
+	great = {colour="great",nest=""},
+}
+
+local function egg_transform(pos, node, clicker, item, _)
+	local wield_item = clicker:get_wielded_item():get_name()
+	if wield_item == "dmobs:dragon_gem" then
+	
+		local p = {x = pos.x, y = pos.y - 1, z = pos.z}
+		local corner_name
+		for x1 = -1,1 do
+			for z1 = -1,1 do
+				p.x = pos.x + x1
+				p.z = pos.z + z1
+				local nestfloor_name = minetest.get_node(p).name
+
+				if x1 == -1 and z1 == -1 then
+					corner_name = minetest.get_node(p).name
+
+				elseif x1 == 0 and z1 == 0 then -- special case in centre
+					-- must be obsidian
+					if nestfloor_name ~= "default:obsidian" then return end
+
+				else
+					-- else ring must all be of the same type
+					if nestfloor_name ~= corner_name then return end
+				end
+			end
+		end
+		
+		local dragon_type
+		for element,details in pairs(dragonpairs) do
+			if corner_name == details.nest then
+				dragon_type = element
+				break
+			end
+		end
+		
+		minetest.chat_send_player(clicker:get_player_name()," ... something seems to be happening .... come back later?")
+		
+		minetest.after(dmobs.eggtimer,
+			function(pos, dragon, pname)
+				minetest.set_node(pos, {name="dmobs:dragon_egg_"..dragon_type})
+			end,
+			pos
+		)
+		
+		item:take_item()
+	end
+end
+
+local function egghatch(pos, node, clicker, item, _)
+	local wield_item = clicker:get_wielded_item():get_name()
+	local eggnode = minetest.get_node(pos).name
+	
+	for nature,details in pairs(dragonpairs) do
+		if ( wield_item == "dmobs:dragon_gem_"..nature and eggnode:find(nature) ) or
+		   ( wield_item == "dmobs:dragon_gem" and eggnode == "dmobs:dragon_egg_great" ) then -- special case... because inconsiderate/inconsistent naming
+		   
+		   	minetest.chat_send_player(clicker:get_player_name(), " ... it ... swallowed the gem...")
+		   	
+			minetest.after(dmobs.eggtimer,
+				function(pos, dragon, pname)
+					local neweggnode = minetest.get_node(pos).name
+					if eggnode ~= neweggnode then return end -- prevent infinite hatchings
+
+					minetest.remove_node(pos)
+
+					local thedragon = "dmobs:dragon_"..details.colour
+					if eggnode == "dmobs:dragon_egg_great" then
+						thedragon = "dmobs:dragon_great"
+					end
+
+					local ent = minetest.add_entity(pos, thedragon)
+					minetest.sound_play("dmobs_chirrup",{pos=pos,max_hear_distance=20})
+					
+					local obj = ent:get_luaentity()
+					if eggnode ~= "dmobs:dragon_egg_great" then
+						ent:set_properties({
+							textures = {"dmobs_dragon_young.png"},
+							visual_size = {x=1, y=1},
+						})
+					end
+					obj.tamed = true
+					obj.owner = clicker:get_player_name()
+				end,
+				pos, clicker:get_player_name()
+			)
+			item:take_item()
+			break
+		end
+	end -- for loop
+end
+
+-- Egg form dfinitions -----------------------------------------
+
+local base_egg = { -- base template for all dragon eggs
+	description = "Dragon Egg",
+	drawtype = "mesh",
+	mesh = "egg.b3d",
+	tiles = {"dmobs_egg.png"},
+	paramtype = "light",
+	sunlight_propagates = true,
+	is_ground_content = false,
+	groups = {fleshy=3, dig_immediate=3},
+	sounds = default.node_sound_leaves_defaults(),	
+	on_rightclick = egg_transform,
+}
+
+
+minetest.register_node("dmobs:egg", dmobs.deepclone(base_egg) ) -- clone, to not affect the base template
+
+base_egg.groups.not_in_creative_inventory=1
+base_egg.on_rightclick = egghatch
+
+base_egg.tiles = {"dmobs_egg1.png"}
+minetest.register_node("dmobs:dragon_egg_fire", dmobs.deepclone(base_egg) )
+
+base_egg.tiles = {"dmobs_egg2.png"}
+minetest.register_node("dmobs:dragon_egg_lightning", dmobs.deepclone(base_egg) )
+
+base_egg.tiles = {"dmobs_egg3.png"}
+minetest.register_node("dmobs:dragon_egg_poison", dmobs.deepclone(base_egg) )
+
+base_egg.tiles = {"dmobs_egg4.png"}
+minetest.register_node("dmobs:dragon_egg_ice", dmobs.deepclone(base_egg) )
+
+base_egg.groups.not_in_creative_inventory=nil
+base_egg.tiles = {"default_sandstone.png"}
+base_egg.description = "Great Dragon Egg"
+minetest.register_node("dmobs:dragon_egg_great", dmobs.deepclone(base_egg) )
diff --git a/dragons/great_dragon.lua b/dragons/great_dragon.lua
new file mode 100644
index 0000000000000000000000000000000000000000..22a5ab26a5e30919d7039f7716dcc4e32e23baa7
--- /dev/null
+++ b/dragons/great_dragon.lua
@@ -0,0 +1,77 @@
+local gdragon_base = {
+	type = "monster",
+	passive = false,
+	attacks_monsters = false,
+	damage = 5,
+	reach = 4,
+	attack_type = "dogshoot",
+	shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+	arrow = "dmobs:lightning",
+	shoot_offset = 1,
+	hp_min = 140,
+	hp_max = 180,
+	armor = 220,
+	collisionbox = {-0.6, -1.4, -0.6, 0.6, 0.6, 0.6},
+	visual = "mesh",
+	mesh = "dragon.b3d",
+	textures = {
+	  {"dmobs_dragon_great.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=2.5, y=2.5},
+	makes_footstep_sound = true,
+	runaway = false,
+	jump_chance = 30,
+	walk_chance = 80,
+	fall_speed = 0,
+	pathfinding = true,
+	fall_damage = 0,
+	sounds = {
+		shoot_attack = "mobs_fireball",
+	  random = "roar",
+	},
+	walk_velocity = 3,
+	run_velocity = 5,
+	jump = true,
+	fly = true,
+	drops = {
+		{name = "dmobs:dragon_egg_great", chance = 1, min = 1, max = 1},
+	},
+	fall_speed = 0,
+	stepheight = 10,
+	water_damage = 2,
+	lava_damage = 0,
+	light_damage = 0,
+	view_range = 20,
+	animation = {
+		speed_normal = 10,
+		speed_run = 20,
+		walk_start = 1,
+		walk_end = 22,
+		stand_start = 1,
+		stand_end = 22,
+		run_start = 1,
+		run_end = 22,
+		punch_start = 22,
+		punch_end = 47,
+	},
+	knock_back = 2,
+}
+
+mobs:register_mob("dmobs:dragon_great", dmobs.deepclone(gdragon_base) )
+
+gdragon_base.type = "npc"
+gdragon_base.attacks_monsters = true
+
+gdragon_base.on_rightclick = dmobs.dragon.ride
+	
+gdragon_base.do_custom = dmobs.dragon.do_custom
+
+mobs:register_mob("dmobs:dragon_great_tame", dmobs.deepclone(gdragon_base) )
+
+
+mobs:register_egg("dmobs:dragon_great", "Boss Dragon", "dmobs_egg1.png", 1)
+mobs:register_egg("dmobs:dragon_great_tame", "Great Dragon", "default_lava_source_animated.png", 1)
diff --git a/dragons/main.lua b/dragons/main.lua
new file mode 100644
index 0000000000000000000000000000000000000000..ee5a699bd162463498dafc445165b582a4f00288
--- /dev/null
+++ b/dragons/main.lua
@@ -0,0 +1,107 @@
+--thanks to diriel, blert2112 and taikedz 
+
+dmobs.dragon = {}
+
+dmobs.dragon.step_custom = function(self, dtime)
+	if self.driver then
+		lib_mount.drive(self, dtime, "walk", "stand", true)
+		if self.state == "attack" then
+			self.state = nil
+		end
+		return false
+	end
+	return true
+end
+
+local tamed_dragons = {}
+
+dmobs.dragon.ride = function(self, clicker)
+	if self.tamed and self.owner == clicker:get_player_name() then
+		local inv = clicker:get_inventory()
+		
+		if self.driver and clicker == self.driver then
+			object_detach(self, clicker, {x=1, y=0, z=1})
+			
+			if inv:room_for_item("main", "mobs:saddle") then
+					inv:add_item("main", "mobs:saddle")
+			else
+					minetest.add_item(clicker.getpos(), "mobs:saddle")
+			end
+			
+		elseif not self.driver then
+			if clicker:get_wielded_item():get_name() == "mobs:saddle" then
+				object_attach(self, clicker, {x=0, y=12, z=4}, {x=0, y=0, z=4})
+				inv:remove_item("main", "mobs:saddle")
+			end
+		end
+	end
+end
+
+
+dmobs.dragon.on_rc = function(self, clicker)
+	if not clicker or not clicker:is_player() then
+		return
+	end
+	if mobs:feed_tame(self, clicker, 1, false, false) then
+		return
+	end
+	dmobs.dragon.ride(self, clicker)
+end
+
+dmobs.dragon.do_custom = function(self, dtime)
+	if self.driver then
+		object_fly(self, dtime, 10, true, "dmobs:fire_plyr", "walk", "stand")
+		
+		if self.state == "attack" then
+			self.state = "idle"
+		end
+		
+		return false
+	end
+	return true
+end
+
+
+--items and tools
+
+minetest.register_craftitem("dmobs:dragon_gem_lightning", {
+	description = "Lightning Gem",
+	inventory_image = "dmobs_gem_lightning.png"
+})
+minetest.register_craftitem("dmobs:dragon_gem_ice", {
+	description = "Ice Gem",
+	inventory_image = "dmobs_gem_ice.png"
+})
+minetest.register_craftitem("dmobs:dragon_gem_fire", {
+	description = "Fire Gem",
+	inventory_image = "dmobs_gem_fire.png"
+})
+minetest.register_craftitem("dmobs:dragon_gem_poison", {
+	description = "Poison Gem",
+	inventory_image = "dmobs_gem_poison.png"
+})
+
+minetest.register_craftitem("dmobs:dragon_gem", {
+	description = "Dragon Gem",
+	inventory_image = "dmobs_gem.png"
+})
+
+
+--spawns and eggs
+
+-- mobs:spawn_specific("dmobs:dragon", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
+-- mobs:spawn_specific("dmobs:dragon2", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
+-- mobs:spawn_specific("dmobs:dragon3", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
+-- mobs:spawn_specific("dmobs:dragon4", {"air"}, {"default:stone"}, 20, 10, 300, 15000, 2, -100, 11000)
+
+   
+mobs:register_egg("dmobs:dragon", "Wild Fire Dragon", "default_apple.png", 1)
+mobs:register_egg("dmobs:dragon2", "Wild Lightning Dragon", "default_mese_crystal.png", 1)
+mobs:register_egg("dmobs:dragon3", "Wild Poison Dragon", "dmobs_poison.png", 1)
+mobs:register_egg("dmobs:dragon4", "Wild Ice Dragon", "default_ice.png", 1)
+
+mobs:register_egg("dmobs:dragon_red", "Tame Fire Dragon", "default_apple.png", 1)
+mobs:register_egg("dmobs:dragon_black", "Tame Lightning Dragon", "default_mese_crystal.png", 1)
+mobs:register_egg("dmobs:dragon_green", "Tame Poison Dragon", "dmobs_poison.png", 1)
+mobs:register_egg("dmobs:dragon_blue", "Tame Ice Dragon", "default_ice.png", 1)
+
diff --git a/dragons/water_dragon.lua b/dragons/water_dragon.lua
new file mode 100644
index 0000000000000000000000000000000000000000..fcb984375864a4b47ddad8f9b5e8f3ecf8110e0f
--- /dev/null
+++ b/dragons/water_dragon.lua
@@ -0,0 +1,135 @@
+mobs:register_mob("dmobs:waterdragon", {
+	type = "monster",
+	passive = false,
+	attack_type = "dogshoot",
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+	shoot_interval = 2.5,
+	arrow = "dmobs:ice",
+	shoot_offset = 0,
+	pathfinding = false,
+	reach = 5,
+	damage = 2,
+	hp_min = 100,
+	hp_max = 127,
+	armor = 100,
+	collisionbox = {-0.4, -0.5, -0.4, 0.4, 5, 0.4},
+	visual_size = {x=4, y=4},
+	visual = "mesh",
+	mesh = "water_dragon.b3d",
+	textures = {
+		{"dmobs_waterdragon.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	makes_footstep_sound = true,
+	sounds = {
+		random = "mobs_dirtmonster",
+	},
+	view_range = 15,
+	rotate = 180,
+	walk_velocity = 0.01,
+	run_velocity = 0.01,
+	jump = false,
+	drops = {
+		{name = "dmobs:dragon_gem_ice", chance = 1, min = 1, max = 1},
+		{name = "dmobs:dragon_gem_fire", chance = 1, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 5,
+	light_damage = 0,
+	floats = 0,
+	animation = {
+		speed_normal = 15,
+		speed_run = 15,
+		stand_start = 1,
+		stand_end = 20,
+		walk_start = 1,
+		walk_end = 20,
+		run_start = 1,
+		run_end = 20,
+		punch_start = 40,
+		punch_end = 60,
+		shoot_start = 20,
+		shoot_end = 40,
+	},
+	do_custom = function(self)
+	--follow thanks to TenPlus1 and Byakuren
+            if not self.hydra then
+                self.hydra = true -- flip switch so this part is done only once
+
+                -- get head position and define a few temp variables
+                local pos = self.object:getpos()
+                local obj, obj2, ent
+
+                -- add body and make it follow head
+                obj = minetest.add_entity({x=pos.x+1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2")
+                ent = obj:get_luaentity()
+                ent.following = self.object
+
+                -- add body and make it follow previous body segment
+                obj2 = minetest.add_entity({x=pos.x-1, y=pos.y, z=pos.z}, "dmobs:waterdragon_2")
+                ent = obj2:get_luaentity()
+                ent.following = self.object
+            end
+    end,
+})
+
+
+
+mobs:register_mob("dmobs:waterdragon_2", {
+	type = "monster",
+	passive = false,
+	attack_type = "shoot",
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+	shoot_interval = 3,
+	arrow = "dmobs:ice",
+	shoot_offset = 0,
+	pathfinding = false,
+	reach = 5,
+	damage = 2,
+	hp_min = 50,
+	hp_max = 60,
+	armor = 50,
+	collisionbox = {-0.4, -0.2, -0.4, 0.4, 5, 0.4},
+	visual_size = {x=3, y=3},
+	visual = "mesh",
+	mesh = "water_dragon.b3d",
+	textures = {
+		{"dmobs_waterdragon.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	makes_footstep_sound = true,
+   sounds = {
+	  shoot_attack = "mobs_fireball",
+	  random = "velociraptor",
+   },
+	view_range = 15,
+	rotate = 180,
+	floats = 0,
+	walk_velocity = 0.01,
+	run_velocity = 0.01,
+	jump = false,
+	water_damage = 0,
+	lava_damage = 5,
+	light_damage = 0,
+	animation = {
+		speed_normal = 15,
+		speed_run = 15,
+		stand_start = 1,
+		stand_end = 20,
+		walk_start = 1,
+		walk_end = 20,
+		run_start = 1,
+		run_end = 20,
+		punch_start = 40,
+		punch_end = 60,
+		shoot_start = 20,
+		shoot_end = 40,
+	},
+})
+
+
+mobs:register_egg("dmobs:waterdragon", "Boss Waterdragon", "dmobs_egg4.png", 1)
diff --git a/dragons/wyvern.lua b/dragons/wyvern.lua
new file mode 100644
index 0000000000000000000000000000000000000000..773b5508fa4194b488892505e6909b6de0e8dbec
--- /dev/null
+++ b/dragons/wyvern.lua
@@ -0,0 +1,63 @@
+mobs:register_mob("dmobs:wyvern", {
+   type = "monster",
+   passive = false,
+   attacks_monsters = false,
+   damage = 4,
+   reach = 3,
+   attack_type = "dogshoot",
+   shoot_interval = 2.5,
+	dogshoot_switch = 2,
+	dogshoot_count = 0,
+	dogshoot_count_max =5,
+   arrow = "dmobs:poison",
+   shoot_offset = 0.5,
+   hp_min = 100,
+   hp_max = 150,
+   armor = 100,
+	collisionbox = {-0.6, -1.4, -0.6, 0.6, 0.6, 0.6},
+   visual = "mesh",
+   mesh = "wyvern.b3d",
+   textures = {
+      {"dmobs_wyvern.png"},
+   },
+   blood_texture = "mobs_blood.png",
+   visual_size = {x=1, y=1},
+   makes_footstep_sound = true,
+	runaway = true,
+	jump_chance = 30,
+	walk_chance = 80,
+	pathfinding = true,
+   walk_velocity = 3,
+   run_velocity = 5,
+   fall_speed = -2,
+   jump = true,
+   fly = false,
+   drops = {
+      {name = "dmobs:dragon_gem_poison", chance = 1, min = 1, max = 1},
+	  {name = "dmobs:dragon_gem_lightning", chance = 1, min = 1, max = 1},
+   },
+   sounds = {
+	  shoot_attack = "mobs_fireball",
+	  random = "velociraptor",
+   },
+   water_damage = 0,
+   lava_damage = 2,
+   light_damage = 0,
+   view_range = 20,
+   animation = {
+      speed_normal = 20,
+      speed_run = 30,
+      walk_start = 33,
+      walk_end = 68,
+      stand_start = 1,
+      stand_end = 30,
+      run_start = 33,
+      run_end = 68,
+      punch_start = 70,
+      punch_end = 89,
+   },
+	knock_back = 2,
+})
+
+
+mobs:register_egg("dmobs:wyvern", "Boss Wyvern", "dmobs_egg3.png", 1)
diff --git a/init.lua b/init.lua
index 7aa666a83421135bd7aa65e66cfd844ac631d0bb..fc54855c1b604dc540d2273d2bef284497d67c20 100644
--- a/init.lua
+++ b/init.lua
@@ -7,742 +7,103 @@ dmobs = {}
 dofile(minetest.get_modpath("dmobs").."/api.lua")
 
 -- Enable dragons (disable to remove tamed dragons and dragon bosses)
-dmobs.dragons = true
+dmobs.dragons = minetest.setting_getbool("dmobs.dragons") or false
 
 -- Enable fireballs/explosions
-dmobs.destructive = false
+dmobs.destructive = minetest.setting_getbool("dmobs.destructive") or false
 
--- load baddies
+-- Timer for the egg mechanics
+dmobs.eggtimer = tonumber(minetest.setting_get("dmobs.eggtimer") ) or 100
 
-dofile(minetest.get_modpath("dmobs").."/baddies.lua")
 
---butterflies
 
-minetest.register_abm({
-	nodenames = {"flowers:flower_rose", "flowers:flower_tulip", "flowers:flower_dandelion_yellow", "flowers:flower_viola", "flowers:flower_dandelion_white", "flowers:flower_geranium"},
-	interval = 10.0,
-	chance = 10,
-	action = function(pos, node, active_object_count, active_object_count_wider)
-		minetest.env:add_entity({x=pos.x,y=pos.y,z=pos.z}, "dmobs:butterfly")
-	end
-})
-
-minetest.register_entity("dmobs:butterfly", {
-	visual = "sprite",
-	physical = true,
-	textures = {"dmobs_butterfly.png",},
-	visual_size = {x=0.2, y=0.2},
-	on_activate = function(self)
-		num = math.random(1,4)
-		self.object:set_properties({textures = {"dmobs_butterfly"..num..".png",},})
-		minetest.after(5, function()
-		self.object:remove()
-		end)
-	end,
-	on_step = function(self)
-		local pos = self.object:getpos()
-		local vec = self.object:getvelocity()
-		self.object:setvelocity({x=-math.sin(12*pos.y), y=math.cos(12*pos.x), z=-math.sin(12*pos.y)})
-		self.object:setacceleration({x=-math.sin(6*vec.y), y=math.cos(6*vec.x), z=-math.sin(6*vec.y)})
-	end,
-	collisionbox = {0,0,0,0,0.1,0},
-})
-
---wasps nest
-
-minetest.register_node("dmobs:hive", {
-	description = "Wasp Nest",
-	tiles = {"dmobs_hive.png"},
-	groups = {crumbly=1, oddly_breakable_by_hand=1, falling_node=1, flammable=1},
-	on_destruct = function(pos, oldnode)
-		minetest.env:add_entity(pos, "dmobs:wasp")
-		minetest.env:add_entity(pos, "dmobs:wasp")
-		minetest.env:add_entity(pos, "dmobs:wasp")
-		minetest.env:add_entity(pos, "dmobs:wasp")
-	end,
-})
-
---golem
-
-minetest.register_node("dmobs:golemstone", {
-	description = "golem stone",
-	tiles = {"dmobs_golem_stone.png",},
-	groups = {cracky=1},
-	on_construct = function(pos, node, _)
-		local node1 = minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
-		local node2 = minetest.env:get_node({x=pos.x, y=pos.y-2, z=pos.z}).name
-		local node3 = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name
-		if node1 == "default:stone" and node2 == "default:stone" and node3 == "air" then
-		minetest.env:add_entity(pos, "dmobs:golem_friendly")
-		minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
-		minetest.env:remove_node({x=pos.x, y=pos.y-2, z=pos.z})
-		minetest.env:remove_node({x=pos.x, y=pos.y, z=pos.z})
-		end
-	end,
-})
-
-mobs:register_mob("dmobs:golem_friendly", {
-	type = "npc",
-	reach = 3,
-	damage = 2,
-	attack_type = "dogfight",
-	attacks_monsters = true,
-	hp_min = 62,
-	hp_max = 72,
-	armor = 100,
-	collisionbox = {-0.4, 0, -0.4, 0.4, 2.5, 0.4},
-	visual = "mesh",
-	mesh = "golem.b3d",
-	textures = {
-		{"dmobs_golem.png"},
-	},
-	follow = "default:cobble",
-	blood_texture = "default_stone.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 1,
-	run_velocity = 2.5,
-	jump = true,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 0,
-	fear_height = 10,
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 14,
-		walk_start = 46,
-		walk_end = 66,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 46,
-		run_end = 66,
-		punch_start = 20,
-		punch_end = 45,
-	},
-})
-
-mobs:register_egg("dmobs:golem_friendly", "Stone Golem (friendly)", "default_stone.png", 1)
-
---friendly mobs
-
-mobs:register_mob("dmobs:panda", {
-	type = "animal",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.4, -0.5, -0.4, 0.4, 0.5, 0.4},
-	visual = "mesh",
-	mesh = "panda.b3d",
-	textures = {
-		{"dmobs_panda.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 0.5,
-	run_velocity = 1,
-	jump = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -10,
-	fear_height = 4,
-	jump_height = 2,
-	replace_rate = 10,
-	replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo"},
-	replace_with = "air",
-	follow = {"default:papyrus"},
-	view_range = 14,
-	animation = {
-		speed_normal = 6,
-		speed_run = 10,
-		walk_start = 25,
-		walk_end = 45,
-		stand_start = 10,
-		stand_end = 10,
-		run_start = 25,
-		run_end = 45,
-		punch_start = 46,
-		punch_end = 57,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:panda", {"default:dirt_with_grass","ethereal:bamboo_dirt"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:panda", "Panda", "default_papyrus.png", 1)
-
-mobs:register_mob("dmobs:tortoise", {
-	type = "animal",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 6,
-	hp_max = 12,
-	armor = 130,
-	collisionbox = {-0.2, 0, -0.2, 0.2, 0.3, 0.2},
-	visual = "mesh",
-	mesh = "tortoise.b3d",
-	textures = {
-		{"dmobs_tortoise.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	walk_velocity = 0.5,
-	run_velocity = 1,
-	jump = false,
-	jump_height = 0.5,
-	floats = true,
-	drops = {
-		{name = "default:stick", chance = 1, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -10,
-	fear_height = 4,
-	follow = {"default:papyrus"},
-	view_range = 14,
-	animation = {
-		speed_normal = 6,
-		speed_run = 10,
-		walk_start = 23,
-		walk_end = 43,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 23,
-		run_end = 43,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 30, 50, 80, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:tortoise", {"default:clay","default:sand"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:tortoise", "Panda", "default_grass.png", 1)
-
-mobs:register_mob("dmobs:pig", {
-	type = "animal",
-	passive = true,
-	reach = 4,
-	damage = 2,
-	attack_type = "explode",
-	explosion_radius = 3,
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.4, 0, -0.4, 0.4, 1, 0.4},
-	visual = "mesh",
-	mesh = "flying_pig.b3d",
-	textures = {
-		{"dmobs_flying_pig.png"},
-	},
-   jump = true,
-   fly = true,
-   fall_speed = 0,
-   stepheight = 1.5,
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	runaway = false,
-	walk_velocity = 2,
-	run_velocity = 3,
-	run_chance = 20,
-	jump = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 2, min = 1, max = 1},
-	},
-	sounds = {
-      random = "mobs_pig",
-	  explode = "tnt_explode",
-	},
-	do_custom = function(self)
-		if self.state == "attack" then
-			self.fly = false
-			self.fall_speed = -4
-		end
-	end,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	follow = {"default:apple"},
-	view_range = 14,
-	animation = {
-		speed_normal = 10,
-		speed_run = 15,
-		walk_start = 1,
-		walk_end = 20,
-		stand_start = 1,
-		stand_end = 20,
-		run_start = 22,
-		run_end = 28,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:pig", {"default:pine_needles","default:leaves", "nyanland:cloudstone"}, 20, 10, 32000, 2, 31000)
-
-mobs:register_egg("dmobs:pig", "flying Pig", "wool_pink.png", 1)
-
-mobs:register_mob("dmobs:nyan", {
-	type = "animal",
-	passive = true,
-	reach = 4,
-	damage = 2,
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.2, 0, -0.2, 0.2, 0.6, 0.2},
-	visual = "mesh",
-	mesh = "nyancat.b3d",
-	textures = {
-		{"dmobs_nyancat.png"},
-	},
-   jump = true,
-   fly = true,
-   fall_speed = 0,
-   stepheight = 1.5,
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	runaway = false,
-	walk_velocity = 2,
-	run_velocity = 3,
-	run_chance = 20,
-	jump = true,
-	drops = {
-		{name = "default:nyan_cat", chance = 2, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	follow = {"default:mese"},
-	view_range = 14,
-	animation = {
-		speed_normal = 4,
-		speed_run = 5,
-		walk_start = 1,
-		walk_end = 7,
-		stand_start = 1,
-		stand_end = 7,
-		run_start = 1,
-		run_end = 7,
-
-	},
-   do_custom = function(self)
-   local apos = self.object:getpos()
-		local vec = self.object:getvelocity()
-		local part = minetest.add_particlespawner(
-			5, --amount
-			0.3, --time
-			{x=apos.x-0.1, y=apos.y+0.3, z=apos.z-0.1}, --minpos
-			{x=apos.x+0.1, y=apos.y+0.4, z=apos.z+0.1}, --maxpos
-			{x=-0, y=-0, z=-0}, --minvel
-			{x=0, y=0, z=0}, --maxvel
-			{x=0,y=0,z=0}, --minacc
-			{x=-vec.x,y=0,z=-vec.z}, --maxacc
-			0.5, --minexptime
-			1.5, --maxexptime
-			3, --minsize
-			5, --maxsize
-			false, --collisiondetection
-			"dmobs_rainbow.png" --texture
-		)
-   end,
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:nyan", {"default:pine_needles","default:leaves"}, 20, 10, 50000, 2, 31000)
-mobs:register_spawn("dmobs:nyan", {"nyanland:meseleaves"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:nyan", "Nyan Cat", "wool_pink.png", 1)
+-- Table cloning to reduce code repetition
+dmobs.deepclone = function(t) -- deep-copy a table -- from https://gist.github.com/MihailJP/3931841
+	if type(t) ~= "table" then return t end
 
-mobs:register_mob("dmobs:gnorm", {
-	type = "npc",
-	can_dig = true,
-	passive = true,
-	reach = 1,
-	damage = 1,
-	attack_type = "dogfight",
-	hp_min = 32,
-	hp_max = 42,
-	armor = 130,
-	collisionbox = {-0.4, -0.3, -0.4, 0.4, 0.8, 0.4},
-	visual = "mesh",
-	mesh = "gnorm.b3d",
-	textures = {
-		{"dmobs_gnorm.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=1, y=1},
-	makes_footstep_sound = true,
-	runaway = true,
-	walk_velocity = 0.5,
-	run_velocity = 4,
-	jump = true,
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -6,
-	fear_height = 4,
-	replace_rate = 10,
-	replace_what = {"default:apple", "default:stone", "default:stone_with_coal", "default:fence_wood"},
-	replace_with = "air",
-	follow = {"default:apple"},
-	view_range = 14,
-	animation = {
-		speed_normal = 8,
-		speed_run = 30,
-		walk_start = 62,
-		walk_end = 81,
-		stand_start = 2,
-		stand_end = 9,
-		run_start = 62,
-		run_end = 81,
-		punch_start = 1,
-		punch_end = 1,
+	local target = {}
 
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:gnorm", {"default:dirt_with_grass","default:wood"}, 20, 10, 32000, 2, 31000)
-
-mobs:register_egg("dmobs:gnorm", "Gnorm", "default_dirt.png", 1)
-
-mobs:register_mob("dmobs:hedgehog", {
-	type = "animal",
-	passive = true,
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.1, -0.1, -0.2, 0.2, 0.2, 0.2},
-	visual = "mesh",
-	mesh = "hedgehog.b3d",
-	textures = {
-		{"dmobs_hedgehog.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=2, y=2},
-	makes_footstep_sound = true,
-	walk_velocity = 0.5,
-	run_velocity = 1,
-	jump = true,
-	jump_height = 0.6,
-	water_damage = 2,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -6,
-	fear_height = 4,
-	view_range = 14,
-	follow = {"farming:bread"},
-	animation = {
-		speed_normal = 5,
-		speed_run = 10,
-		walk_start = 1,
-		walk_end = 10,
-		stand_start = 1,
-		stand_end = 10,
-		run_start = 1,
-		run_end = 10,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
+	for k, v in pairs(t) do
+		if k ~= "__index" and type(v) == "table" then -- omit circular reference
+			target[k] = dmobs.deepclone(v)
+		else
+			target[k] = v
 		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:hedgehog", {"default:dirt_with_grass","default:pine_needles"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:hedgehog", "Hedgehog", "wool_brown.png", 1)
-
-mobs:register_mob("dmobs:owl", {
-	type = "animal",
-	passive = true,
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.3, -0.5, -0.3, 0.2, 0.2, 0.2},
-	visual = "mesh",
-	mesh = "owl.b3d",
-	textures = {
-		{"dmobs_owl.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=2, y=2},
-	makes_footstep_sound = false,
-	walk_velocity = 0,
-	run_velocity = 0,
-	jump = false,
-	water_damage = 2,
-	lava_damage = 2,
-	light_damage = 0,
-	view_range = 1,
-	do_custom = function(self)
-	local daytime = minetest.get_timeofday()*24000 
-	if daytime <=6000 then
-	self.object:set_properties({
-						textures = {"dmobs_owl_awake.png"},
-						mesh = "owl.b3d",
-					})
-	elseif daytime >=6000 then
-	self.object:set_properties({
-						textures = {"dmobs_owl.png"},
-						mesh = "owl.b3d",
-					})
 	end
-	end,
-	animation = {
-		speed_normal = 1,
-		walk_start = 1,
-		walk_end = 50,
-
-	},
-})
-
-mobs:register_spawn("dmobs:owl", {"default:leaves","default:tree"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:owl", "Owl", "default_tree.png", 1)
-
-
-mobs:register_mob("dmobs:elephant", {
-	type = "animal",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.9, -1.2, -0.9, 0.9, 0.9, 0.9},
-	visual = "mesh",
-	mesh = "elephant.b3d",
-	textures = {
-		{"dmobs_elephant.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=2.5, y=2.5},
-	makes_footstep_sound = true,
-	walk_velocity = 0.5,
-	run_velocity = 1,
-	jump = false,
-	water_damage = 2,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -20, -- extra heavy!
-	fear_height = 2,
-	replace_rate = 10,
-	replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo"},
-	replace_with = "air",
-	follow = {"farming:wheat"},
-	view_range = 14,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	animation = {
-		speed_normal = 5,
-		speed_run = 10,
-		walk_start = 3,
-		walk_end = 19,
-		stand_start = 20,
-		stand_end = 30,
-		run_start = 3,
-		run_end = 19,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:elephant", {"default:dirt_with_dry_grass","default:desert_sand"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:elephant", "Elephant", "default_dry_grass.png", 1)
-
-mobs:register_mob("dmobs:whale", {
-	type = "animal",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 52,
-	hp_max = 82,
-	armor = 230,
-	collisionbox = {-0.9, -1.2, -0.9, 0.9, 0.9, 0.9},
-	visual = "mesh",
-	mesh = "whale.b3d",
-	textures = {
-		{"dmobs_whale.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=2.5, y=2.5},
-	makes_footstep_sound = true,
-	walk_velocity = 0.5,
-	run_velocity = 1,
-	jump = false,	
-	stepheight = 1.5,
-	fall_damage = 0,
-	fall_speed = -6,
-	fly = true,
-	fly_in = "default:water_source",
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	follow = {"fishing:fish_cooked"},
-	view_range = 14,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	sounds = {
-      random = "whale_1",
-      death = "whale_1",
-      distance = 128,
-	},
-	animation = {
-		speed_normal = 5,
-		speed_run = 10,
-		walk_start = 2,
-		walk_end = 39,
-		stand_start = 2,
-		stand_end = 39,
-		run_start = 2,
-		run_end = 39,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:whale", {"default:water_source"}, 20, 10, 15000, -20, 1000)
-
-mobs:register_egg("dmobs:whale", "Whale", "default_water_source.png", 1)
-
-mobs:register_mob("dmobs:badger", {
-	type = "animal",
-	passive = false,
-	reach = 1,
-	damage = 2,
-	attack_type = "dogfight",
-	hp_min = 12,
-	hp_max = 22,
-	armor = 130,
-	collisionbox = {-0.3, -0.15, -0.3, 0.3, 0.4, 0.3},
-	visual = "mesh",
-	mesh = "badger.b3d",
-	textures = {
-		{"dmobs_badger.png"},
-	},
-	blood_texture = "mobs_blood.png",
-	visual_size = {x=2, y=2},
-	makes_footstep_sound = true,
-	walk_velocity = 0.7,
-	run_velocity = 1,
-	jump = true,
-	drops = {
-		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
-	},
-	water_damage = 0,
-	lava_damage = 2,
-	light_damage = 0,
-	fall_damage = 1,
-	fall_speed = -8,
-	fear_height = 4,
-	follow = {"mobs:meat_raw"},
-	view_range = 14,
-	animation = {
-		speed_normal = 12,
-		speed_run = 18,
-		walk_start = 34,
-		walk_end = 58,
-		stand_start = 1,
-		stand_end = 30,
-		run_start = 34,
-		run_end = 58,
-		punch_start = 60,
-		punch_end = 80,
-
-	},
-	on_rightclick = function(self, clicker)
-
-		if mobs:feed_tame(self, clicker, 8, true, true) then
-			return
-		end
-
-		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
-	end,
-})
-
-mobs:register_spawn("dmobs:badger", {"default:dirt_with_grass","default:dirt"}, 20, 10, 15000, 2, 31000)
-
-mobs:register_egg("dmobs:badger", "Badger", "default_obsidian.png", 1)
-
-
+	return target
+end
+
+-- Start loading ----------------------------------------------------------------------------------
+
+local function loadmob(mobname,dir)
+	dir = dir or "/mobs/"
+	dofile(minetest.get_modpath("dmobs")..dir..mobname..".lua")
+end
+
+-- regular mobs
+
+local mobslist = {
+	-- friendlies
+	"pig",
+	"panda",
+	"tortoise",
+	"golem_friendly",
+	"nyan",
+	"gnorm",
+	"hedgehog",
+	"owl",
+	"whale",
+	"badger",
+	"butterfly",
+	
+	-- baddies
+	"pig_evil",
+	"fox",
+	"rat",
+	"wasps",
+	"treeman",
+	"golem",
+	"skeleton",
+	"orc",
+	"ogre",
+}
+
+for _,mobname in pairs(mobslist) do
+	loadmob(mobname)
+end
+
+-- dragons!!
+
+if not dmobs.dragons then
+	loadmob("dragon_normal","/dragons/")
+else
+	loadmob("main","/dragons/")
+	loadmob("dragon1","/dragons/")
+	loadmob("dragon2","/dragons/")
+	loadmob("dragon3","/dragons/")
+	loadmob("dragon4","/dragons/")
+	loadmob("great_dragon","/dragons/")
+	loadmob("water_dragon","/dragons/")
+	loadmob("wyvern","/dragons/")
+	
+	dofile(minetest.get_modpath("dmobs").."/dragons/eggs.lua")
+	dofile(minetest.get_modpath("dmobs").."/arrows/dragonfire.lua")
+	dofile(minetest.get_modpath("dmobs").."/arrows/dragonarrows.lua")
+end
+
+-- General arrow definitions
+
+if dmobs.destructive == true then
+	dofile(minetest.get_modpath("dmobs").."/arrows/fire_explosive.lua")
+else
+	dofile(minetest.get_modpath("dmobs").."/arrows/fire.lua")
+end
+
+dofile(minetest.get_modpath("dmobs").."/nodes.lua")
+dofile(minetest.get_modpath("dmobs").."/arrows/sting.lua")
+
+-- Spawning
+
+
+dofile(minetest.get_modpath("dmobs").."/spawn.lua")
+dofile(minetest.get_modpath("dmobs").."/saddle.lua")
diff --git a/mobs/badger.lua b/mobs/badger.lua
new file mode 100644
index 0000000000000000000000000000000000000000..e0d524dc1998f058f2a0049d5a3f6ada38454712
--- /dev/null
+++ b/mobs/badger.lua
@@ -0,0 +1,57 @@
+mobs:register_mob("dmobs:badger", {
+	type = "animal",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.3, -0.15, -0.3, 0.3, 0.4, 0.3},
+	visual = "mesh",
+	mesh = "badger.b3d",
+	textures = {
+		{"dmobs_badger.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=2, y=2},
+	makes_footstep_sound = true,
+	walk_velocity = 0.7,
+	run_velocity = 1,
+	jump = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -8,
+	fear_height = 4,
+	follow = {"mobs:meat_raw"},
+	view_range = 14,
+	animation = {
+		speed_normal = 12,
+		speed_run = 18,
+		walk_start = 34,
+		walk_end = 58,
+		stand_start = 1,
+		stand_end = 30,
+		run_start = 34,
+		run_end = 58,
+		punch_start = 60,
+		punch_end = 80,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:badger", "Badger", "default_obsidian.png", 1)
diff --git a/mobs/butterfly.lua b/mobs/butterfly.lua
new file mode 100644
index 0000000000000000000000000000000000000000..921de526b87e4ef0530d9560c3fc3fd95baa2730
--- /dev/null
+++ b/mobs/butterfly.lua
@@ -0,0 +1,32 @@
+
+--butterflies
+
+minetest.register_abm({
+	nodenames = {"flowers:flower_rose", "flowers:flower_tulip", "flowers:flower_dandelion_yellow", "flowers:flower_viola", "flowers:flower_dandelion_white", "flowers:flower_geranium"},
+	interval = 10.0,
+	chance = 10,
+	action = function(pos, node, active_object_count, active_object_count_wider)
+		minetest.env:add_entity({x=pos.x,y=pos.y,z=pos.z}, "dmobs:butterfly")
+	end
+})
+
+minetest.register_entity("dmobs:butterfly", {
+	visual = "sprite",
+	physical = true,
+	textures = {"dmobs_butterfly.png",},
+	visual_size = {x=0.2, y=0.2},
+	on_activate = function(self)
+		num = math.random(1,4)
+		self.object:set_properties({textures = {"dmobs_butterfly"..num..".png",},})
+		minetest.after(5, function()
+		self.object:remove()
+		end)
+	end,
+	on_step = function(self)
+		local pos = self.object:getpos()
+		local vec = self.object:getvelocity()
+		self.object:setvelocity({x=-math.sin(12*pos.y), y=math.cos(12*pos.x), z=-math.sin(12*pos.y)})
+		self.object:setacceleration({x=-math.sin(6*vec.y), y=math.cos(6*vec.x), z=-math.sin(6*vec.y)})
+	end,
+	collisionbox = {0,0,0,0,0.1,0},
+})
diff --git a/mobs/elephant.lua b/mobs/elephant.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5dd7a08050c6b376a55b5c4caa94225a6f69e716
--- /dev/null
+++ b/mobs/elephant.lua
@@ -0,0 +1,58 @@
+mobs:register_mob("dmobs:elephant", {
+	type = "animal",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.9, -1.2, -0.9, 0.9, 0.9, 0.9},
+	visual = "mesh",
+	mesh = "elephant.b3d",
+	textures = {
+		{"dmobs_elephant.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=2.5, y=2.5},
+	makes_footstep_sound = true,
+	walk_velocity = 0.5,
+	run_velocity = 1,
+	jump = false,
+	water_damage = 2,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -20, -- extra heavy!
+	fear_height = 2,
+	replace_rate = 10,
+	replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo"},
+	replace_with = "air",
+	follow = {"farming:wheat"},
+	view_range = 14,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	animation = {
+		speed_normal = 5,
+		speed_run = 10,
+		walk_start = 3,
+		walk_end = 19,
+		stand_start = 20,
+		stand_end = 30,
+		run_start = 3,
+		run_end = 19,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:elephant", "Elephant", "default_dry_grass.png", 1)
diff --git a/mobs/fox.lua b/mobs/fox.lua
new file mode 100644
index 0000000000000000000000000000000000000000..9661f9824a6401e2bc294413565e352da55f32f8
--- /dev/null
+++ b/mobs/fox.lua
@@ -0,0 +1,66 @@
+-- Fox
+mobs:register_mob("dmobs:fox", {
+	type = "monster",
+	attacks_monsters = true,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 42,
+	hp_max = 52,
+	armor = 130,
+	collisionbox = {-0.4, -0.6, -0.4, 0.3, 0.3, 0.3},
+	runaway = true,
+	pathfinding = true,
+	visual = "mesh",
+	mesh = "fox.b3d",
+	textures = {
+		{"dmobs_fox.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1.5, y=1.5},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	on_activate = function(self)
+		if math.random(1,5) == 1 then
+		self.type = "animal"
+		end
+	end,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fear_height = 4,
+	replace_rate = 10,
+	replace_what = {"farming:wheat_5", "default:fence_wood", "default:grass_5", "default:dirt_with_grass"},
+	replace_with = "air",
+	follow = {"mobs:meat_raw"},
+	view_range = 14,
+	animation = {
+		speed_normal = 6,
+		speed_run = 15,
+		walk_start = 25,
+		walk_end = 35,
+		stand_start = 51,
+		stand_end = 60,
+		run_start = 1,
+		run_end = 16,
+		punch_start = 36,
+		punch_end = 51,
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:fox", "Fox", "wool_orange.png", 1)
diff --git a/mobs/gnorm.lua b/mobs/gnorm.lua
new file mode 100644
index 0000000000000000000000000000000000000000..ff6ab0e78501268bf96db2a0d415c20822b1e09c
--- /dev/null
+++ b/mobs/gnorm.lua
@@ -0,0 +1,59 @@
+mobs:register_mob("dmobs:gnorm", {
+	type = "npc",
+	can_dig = true,
+	passive = true,
+	reach = 1,
+	damage = 1,
+	attack_type = "dogfight",
+	hp_min = 32,
+	hp_max = 42,
+	armor = 130,
+	collisionbox = {-0.4, -0.3, -0.4, 0.4, 0.8, 0.4},
+	visual = "mesh",
+	mesh = "gnorm.b3d",
+	textures = {
+		{"dmobs_gnorm.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	runaway = true,
+	walk_velocity = 0.5,
+	run_velocity = 4,
+	jump = true,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -6,
+	fear_height = 4,
+	replace_rate = 10,
+	replace_what = {"default:apple", "default:stone", "default:stone_with_coal", "default:fence_wood"},
+	replace_with = "air",
+	follow = {"default:apple"},
+	view_range = 14,
+	animation = {
+		speed_normal = 8,
+		speed_run = 30,
+		walk_start = 62,
+		walk_end = 81,
+		stand_start = 2,
+		stand_end = 9,
+		run_start = 62,
+		run_end = 81,
+		punch_start = 1,
+		punch_end = 1,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:gnorm", "Gnorm", "default_dirt.png", 1)
diff --git a/mobs/golem.lua b/mobs/golem.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d3242f6f37d5ae7c8438fbe698e6fd8cd7ebee0e
--- /dev/null
+++ b/mobs/golem.lua
@@ -0,0 +1,48 @@
+--stone golem
+
+
+mobs:register_mob("dmobs:golem", {
+	type = "monster",
+	reach = 3,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 62,
+	hp_max = 72,
+	armor = 100,
+	collisionbox = {-0.4, 0, -0.4, 0.4, 2.5, 0.4},
+	visual = "mesh",
+	mesh = "golem.b3d",
+	textures = {
+		{"dmobs_golem.png"},
+	},
+	blood_texture = "default_stone.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	drops = {
+		{name = "dmobs:golemstone", chance = 30, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 1,
+	fall_damage = 0,
+	fear_height = 10,
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 14,
+		walk_start = 46,
+		walk_end = 66,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 46,
+		run_end = 66,
+		punch_start = 20,
+		punch_end = 45,
+	},
+})
+
+
+mobs:register_egg("dmobs:golem", "Stone Golem", "default_stone.png", 1)
diff --git a/mobs/golem_friendly.lua b/mobs/golem_friendly.lua
new file mode 100644
index 0000000000000000000000000000000000000000..fe411c5dd3562fbf4ed94991653de96326db134f
--- /dev/null
+++ b/mobs/golem_friendly.lua
@@ -0,0 +1,44 @@
+
+mobs:register_mob("dmobs:golem_friendly", {
+	type = "npc",
+	reach = 3,
+	damage = 2,
+	attack_type = "dogfight",
+	attacks_monsters = true,
+	hp_min = 62,
+	hp_max = 72,
+	armor = 100,
+	collisionbox = {-0.4, 0, -0.4, 0.4, 2.5, 0.4},
+	visual = "mesh",
+	mesh = "golem.b3d",
+	textures = {
+		{"dmobs_golem.png"},
+	},
+	follow = "default:cobble",
+	blood_texture = "default_stone.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 0,
+	fear_height = 10,
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 14,
+		walk_start = 46,
+		walk_end = 66,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 46,
+		run_end = 66,
+		punch_start = 20,
+		punch_end = 45,
+	},
+})
+
+mobs:register_egg("dmobs:golem_friendly", "Stone Golem (friendly)", "default_stone.png", 1)
diff --git a/mobs/hedgehog.lua b/mobs/hedgehog.lua
new file mode 100644
index 0000000000000000000000000000000000000000..81572cc55d3dba9451a0e246f8a2d5ae5cb62e1c
--- /dev/null
+++ b/mobs/hedgehog.lua
@@ -0,0 +1,50 @@
+mobs:register_mob("dmobs:hedgehog", {
+	type = "animal",
+	passive = true,
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.1, -0.1, -0.2, 0.2, 0.2, 0.2},
+	visual = "mesh",
+	mesh = "hedgehog.b3d",
+	textures = {
+		{"dmobs_hedgehog.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=2, y=2},
+	makes_footstep_sound = true,
+	walk_velocity = 0.5,
+	run_velocity = 1,
+	jump = true,
+	jump_height = 0.6,
+	water_damage = 2,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -6,
+	fear_height = 4,
+	view_range = 14,
+	follow = {"farming:bread"},
+	animation = {
+		speed_normal = 5,
+		speed_run = 10,
+		walk_start = 1,
+		walk_end = 10,
+		stand_start = 1,
+		stand_end = 10,
+		run_start = 1,
+		run_end = 10,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:hedgehog", "Hedgehog", "wool_brown.png", 1)
diff --git a/mobs/nyan.lua b/mobs/nyan.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d680d94f21265abbf12826bb56154bc0b841df63
--- /dev/null
+++ b/mobs/nyan.lua
@@ -0,0 +1,77 @@
+mobs:register_mob("dmobs:nyan", {
+	type = "animal",
+	passive = true,
+	reach = 4,
+	damage = 2,
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.2, 0, -0.2, 0.2, 0.6, 0.2},
+	visual = "mesh",
+	mesh = "nyancat.b3d",
+	textures = {
+		{"dmobs_nyancat.png"},
+	},
+   jump = true,
+   fly = true,
+   fall_speed = 0,
+   stepheight = 1.5,
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	runaway = false,
+	walk_velocity = 2,
+	run_velocity = 3,
+	run_chance = 20,
+	jump = true,
+	drops = {
+		{name = "default:nyan_cat", chance = 2, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	follow = {"default:mese"},
+	view_range = 14,
+	animation = {
+		speed_normal = 4,
+		speed_run = 5,
+		walk_start = 1,
+		walk_end = 7,
+		stand_start = 1,
+		stand_end = 7,
+		run_start = 1,
+		run_end = 7,
+
+	},
+   do_custom = function(self)
+   local apos = self.object:getpos()
+		local vec = self.object:getvelocity()
+		local part = minetest.add_particlespawner(
+			5, --amount
+			0.3, --time
+			{x=apos.x-0.1, y=apos.y+0.3, z=apos.z-0.1}, --minpos
+			{x=apos.x+0.1, y=apos.y+0.4, z=apos.z+0.1}, --maxpos
+			{x=-0, y=-0, z=-0}, --minvel
+			{x=0, y=0, z=0}, --maxvel
+			{x=0,y=0,z=0}, --minacc
+			{x=-vec.x,y=0,z=-vec.z}, --maxacc
+			0.5, --minexptime
+			1.5, --maxexptime
+			3, --minsize
+			5, --maxsize
+			false, --collisiondetection
+			"dmobs_rainbow.png" --texture
+		)
+   end,
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:nyan", "Nyan Cat", "wool_pink.png", 1)
diff --git a/mobs/ogre.lua b/mobs/ogre.lua
new file mode 100644
index 0000000000000000000000000000000000000000..c5044a40c0bb023256f1cab4aafc156f2b824407
--- /dev/null
+++ b/mobs/ogre.lua
@@ -0,0 +1,49 @@
+-- Ogre
+mobs:register_mob("dmobs:ogre", {
+	type = "monster",
+	passive = false,
+	reach = 2,
+	damage = 4,
+	attack_type = "dogfight",
+	hp_min = 22,
+	hp_max = 32,
+	armor = 130,
+	collisionbox = {-0.6, -1.3, -0.6, 0.6, 1.5, 0.6},
+	visual = "mesh",
+	mesh = "ogre.b3d",
+	textures = {
+		{"dmobs_ogre.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=3.5, y=3.5},
+	makes_footstep_sound = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	walk_velocity = 1,
+	run_velocity = 2,
+	jump = true,
+	rotate = 180,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -14,
+	fear_height = 4,
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 20,
+		walk_start = 3,
+		walk_end = 38,
+		stand_start = 40,
+		stand_end = 70,
+		run_start = 3,
+		run_end = 38,
+		punch_start = 70,
+		punch_end = 100,
+
+	},
+})
+
+mobs:register_egg("dmobs:ogre", "Ogre", "default_desert_sand.png", 1)
diff --git a/mobs/orc.lua b/mobs/orc.lua
new file mode 100644
index 0000000000000000000000000000000000000000..f319cbff5c9625ab49843ee37b31849ec3fd0509
--- /dev/null
+++ b/mobs/orc.lua
@@ -0,0 +1,98 @@
+
+-- Orc
+mobs:register_mob("dmobs:orc", {
+	type = "monster",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.4, -1.3, -0.4, 0.4, 1, 0.4},
+	visual = "mesh",
+	mesh = "orc.b3d",
+	textures = {
+		{"dmobs_orc.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=3, y=3},
+	makes_footstep_sound = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	walk_velocity = 1,
+	run_velocity = 2,
+	jump = true,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -13,
+	fear_height = 4,
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 20,
+		walk_start = 2,
+		walk_end = 18,
+		stand_start = 30,
+		stand_end = 40,
+		run_start = 2,
+		run_end = 18,
+		punch_start = 20,
+		punch_end = 30,
+
+	},
+})
+
+-- Orc (Redesign)
+mobs:register_mob("dmobs:orc2", {
+	type = "monster",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.4, -0, -0.4, 0.4, 2, 0.4},
+	visual = "mesh",
+	mesh = "orc_redesign.b3d",
+	textures = {
+		{"dmobs_orc_redesign.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1.5, y=1.5},
+	makes_footstep_sound = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	walk_velocity = 1,
+	run_velocity = 2,
+	jump = true,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -13,
+	fear_height = 4,
+	view_range = 14,
+	animation = {
+		speed_normal = 12,
+		speed_run = 20,
+		walk_start = 20,
+		walk_end = 40,
+		stand_start = 60,
+		stand_end = 80,
+		run_start = 20,
+		run_end = 40,
+		punch_start = 1,
+		punch_end = 15,
+
+	},
+})
+
+
+mobs:register_egg("dmobs:orc2", "Morgul Orc", "default_desert_sand.png", 1) -- new and improved, hey
+mobs:register_egg("dmobs:orc", "Orc", "default_desert_sand.png", 1)
diff --git a/mobs/owl.lua b/mobs/owl.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d2d8fb8affddda146ac82c6e7a196e620e445613
--- /dev/null
+++ b/mobs/owl.lua
@@ -0,0 +1,46 @@
+mobs:register_mob("dmobs:owl", {
+	type = "animal",
+	passive = true,
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.3, -0.5, -0.3, 0.2, 0.2, 0.2},
+	visual = "mesh",
+	mesh = "owl.b3d",
+	textures = {
+		{"dmobs_owl.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=2, y=2},
+	makes_footstep_sound = false,
+	walk_velocity = 0,
+	run_velocity = 0,
+	jump = false,
+	water_damage = 2,
+	lava_damage = 2,
+	light_damage = 0,
+	view_range = 1,
+	do_custom = function(self)
+	local daytime = minetest.get_timeofday()*24000 
+	if daytime <=6000 then
+	self.object:set_properties({
+						textures = {"dmobs_owl_awake.png"},
+						mesh = "owl.b3d",
+					})
+	elseif daytime >=6000 then
+	self.object:set_properties({
+						textures = {"dmobs_owl.png"},
+						mesh = "owl.b3d",
+					})
+	end
+	end,
+	animation = {
+		speed_normal = 1,
+		walk_start = 1,
+		walk_end = 50,
+
+	},
+})
+
+
+mobs:register_egg("dmobs:owl", "Owl", "default_tree.png", 1)
diff --git a/mobs/panda.lua b/mobs/panda.lua
new file mode 100644
index 0000000000000000000000000000000000000000..73e85ab2f376ddeb181da05c4acc56a63047c6eb
--- /dev/null
+++ b/mobs/panda.lua
@@ -0,0 +1,63 @@
+
+
+mobs:register_mob("dmobs:panda", {
+	type = "animal",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.4, -0.5, -0.4, 0.4, 0.5, 0.4},
+	visual = "mesh",
+	mesh = "panda.b3d",
+	textures = {
+		{"dmobs_panda.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 0.5,
+	run_velocity = 1,
+	jump = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -10,
+	fear_height = 4,
+	jump_height = 2,
+	replace_rate = 10,
+	replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "ethereal:bamboo"},
+	replace_with = "air",
+	follow = {"default:papyrus"},
+	view_range = 14,
+	animation = {
+		speed_normal = 6,
+		speed_run = 10,
+		walk_start = 25,
+		walk_end = 45,
+		stand_start = 10,
+		stand_end = 10,
+		run_start = 25,
+		run_end = 45,
+		punch_start = 46,
+		punch_end = 57,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:panda", "Panda", "default_papyrus.png", 1)
diff --git a/mobs/pig.lua b/mobs/pig.lua
new file mode 100644
index 0000000000000000000000000000000000000000..f59041bf7677719a70d405dc558129548ba6172d
--- /dev/null
+++ b/mobs/pig.lua
@@ -0,0 +1,69 @@
+mobs:register_mob("dmobs:pig", {
+	type = "animal",
+	passive = true,
+	reach = 4,
+	damage = 2,
+	attack_type = "explode",
+	explosion_radius = 3,
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.4, 0, -0.4, 0.4, 1, 0.4},
+	visual = "mesh",
+	mesh = "flying_pig.b3d",
+	textures = {
+		{"dmobs_flying_pig.png"},
+	},
+   jump = true,
+   fly = true,
+   fall_speed = 0,
+   stepheight = 1.5,
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	runaway = false,
+	walk_velocity = 2,
+	run_velocity = 3,
+	run_chance = 20,
+	jump = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 2, min = 1, max = 1},
+	},
+	sounds = {
+      random = "mobs_pig",
+	  explode = "tnt_explode",
+	},
+	do_custom = function(self)
+		if self.state == "attack" then
+			self.fly = false
+			self.fall_speed = -4
+		end
+	end,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	follow = {"default:apple"},
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 15,
+		walk_start = 1,
+		walk_end = 20,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 22,
+		run_end = 28,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:pig", "flying Pig", "wool_pink.png", 1)
diff --git a/mobs/pig_evil.lua b/mobs/pig_evil.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a3d1edaf0c2f80bdcd3a4a9358266fbad36ebe75
--- /dev/null
+++ b/mobs/pig_evil.lua
@@ -0,0 +1,75 @@
+local pigdef = {
+	type = "monster",
+	passive = true,
+	reach = 3,
+	damage = 2,
+	attack_type = "dogfight",
+	explosion_radius = 2,
+	hp_min = 12,
+	hp_max = 22,
+	armor = 130,
+	collisionbox = {-0.4, 0, -0.4, 0.4, 1, 0.4},
+	visual = "mesh",
+	mesh = "flying_pig.b3d",
+	textures = {
+		{"dmobs_flying_pig_mean.png"},
+	},
+	jump = true,
+	fly = true,
+	fall_speed = 0,
+	stepheight = 1.5,
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	runaway = false,
+	walk_velocity = 2,
+	run_velocity = 3,
+	run_chance = 20,
+	jump = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 2, min = 1, max = 1},
+	},
+	sounds = {
+		random = "mobs_pig",
+	},
+	do_custom = function(self)
+		if self.state == "attack" then
+			self.fly = false
+			self.fall_speed = -4
+		end
+	end,
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	follow = {"default:apple"},
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 15,
+		walk_start = 1,
+		walk_end = 20,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 22,
+		run_end = 28,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+}
+
+if dmobs.destructive then
+	pigdef.sounds.explode = "tnt_explode"
+	pigdef.attack_type = "explode"
+end
+
+mobs:register_mob("dmobs:pig_evil", pigdef)
+
+
+mobs:register_egg("dmobs:pig_evil", "Kamikaze Pig", "wool_pink.png", 1)
diff --git a/mobs/rat.lua b/mobs/rat.lua
new file mode 100644
index 0000000000000000000000000000000000000000..fb187276c5fc0e92324cc58de0f94493cccc59bf
--- /dev/null
+++ b/mobs/rat.lua
@@ -0,0 +1,52 @@
+--Rat
+
+mobs:register_mob("dmobs:rat", {
+	type = "monster",
+	reach = 2,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 22,
+	hp_max = 42,
+	armor = 130,
+	collisionbox = {-0.4, 0, -0.4, 0.3, 1, 0.3},
+	runaway = true,
+	visual = "mesh",
+	mesh = "dmobs_rat.b3d",
+	textures = {
+		{"dmobs_rat.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fear_height = 5,
+	replace_rate = 10,
+	replace_what = {"farming:wheat_5", "farming:wheat_4", "farming:wheat_2", "farming:wheat_3"},
+	replace_with = "air",
+	follow = {"mobs_animal:cheese"},
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 18,
+		walk_start = 43,
+		walk_end = 63,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 43,
+		run_end = 63,
+		punch_start = 20,
+		punch_end = 40,
+	},
+})
+
+
+mobs:register_egg("dmobs:rat", "Giant Rat", "wool_grey.png", 1)
diff --git a/mobs/skeleton.lua b/mobs/skeleton.lua
new file mode 100644
index 0000000000000000000000000000000000000000..a66c0a8322c7b2b11e4f45529c3e7dd1bb97dd55
--- /dev/null
+++ b/mobs/skeleton.lua
@@ -0,0 +1,48 @@
+--skeleton
+
+
+mobs:register_mob("dmobs:skeleton", {
+	type = "monster",
+	reach = 3,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 62,
+	hp_max = 72,
+	armor = 100,
+	collisionbox = {-0.4, 0, -0.4, 0.4, 2.5, 0.4},
+	visual = "mesh",
+	mesh = "skeleton.b3d",
+	textures = {
+		{"dmobs_skeleton.png"},
+	},
+	blood_texture = "default_stone.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	drops = {
+		{name = "bones:bones", chance = 5, min = 3, max = 6},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 1,
+	fall_damage = 0,
+	fear_height = 10,
+	view_range = 14,
+	animation = {
+		speed_normal = 15,
+		speed_run = 20,
+		walk_start = 46,
+		walk_end = 66,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 46,
+		run_end = 66,
+		punch_start = 20,
+		punch_end = 45,
+	},
+})
+
+
+mobs:register_egg("dmobs:skeleton", "Skeleton", "default_dirt.png", 1)
diff --git a/mobs/tortoise.lua b/mobs/tortoise.lua
new file mode 100644
index 0000000000000000000000000000000000000000..dd1e05716635c39f38e45eaa1b612814a49c8160
--- /dev/null
+++ b/mobs/tortoise.lua
@@ -0,0 +1,58 @@
+
+mobs:register_mob("dmobs:tortoise", {
+	type = "animal",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 6,
+	hp_max = 12,
+	armor = 130,
+	collisionbox = {-0.2, 0, -0.2, 0.2, 0.3, 0.2},
+	visual = "mesh",
+	mesh = "tortoise.b3d",
+	textures = {
+		{"dmobs_tortoise.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 0.5,
+	run_velocity = 1,
+	jump = false,
+	jump_height = 0.5,
+	floats = true,
+	drops = {
+		{name = "default:stick", chance = 1, min = 1, max = 1},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fall_speed = -10,
+	fear_height = 4,
+	follow = {"default:papyrus"},
+	view_range = 14,
+	animation = {
+		speed_normal = 6,
+		speed_run = 10,
+		walk_start = 23,
+		walk_end = 43,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 23,
+		run_end = 43,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 30, 50, 80, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:tortoise", "Tortoise", "default_grass.png", 1)
diff --git a/mobs/treeman.lua b/mobs/treeman.lua
new file mode 100644
index 0000000000000000000000000000000000000000..b5329d653e0b601d0668bae23a5f8180acfde577
--- /dev/null
+++ b/mobs/treeman.lua
@@ -0,0 +1,48 @@
+-- Treeman
+
+mobs:register_mob("dmobs:treeman", {
+	type = "monster",
+	reach = 3,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 62,
+	hp_max = 72,
+	armor = 130,
+	collisionbox = {-0.4, 0, -0.4, 0.4, 3, 0.4},
+	visual = "mesh",
+	mesh = "treeman.b3d",
+	textures = {
+		{"dmobs_treeman.png"},
+		{"dmobs_treeman2.png"},
+	},
+	blood_texture = "default_tree.png",
+	visual_size = {x=1, y=1},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	drops = {
+		{name = "default:tree", chance = 5, min = 3, max = 6},
+	},
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	fall_damage = 1,
+	fear_height = 10,
+	view_range = 14,
+	animation = {
+		speed_normal = 10,
+		speed_run = 13,
+		walk_start = 46,
+		walk_end = 66,
+		stand_start = 1,
+		stand_end = 20,
+		run_start = 46,
+		run_end = 66,
+		punch_start = 20,
+		punch_end = 45,
+	},
+})
+
+
+mobs:register_egg("dmobs:treeman", "Treeman", "default_tree.png", 1)
diff --git a/mobs/wasps.lua b/mobs/wasps.lua
new file mode 100644
index 0000000000000000000000000000000000000000..bd1ca10d1257cac734e207a6b06f17bc297abeb2
--- /dev/null
+++ b/mobs/wasps.lua
@@ -0,0 +1,110 @@
+--Wasps!
+mobs:register_mob("dmobs:wasp", {
+	type = "monster",
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 2,
+	hp_max = 5,
+	armor = 100,
+	collisionbox = {-0.1, -0, -0.1, 0.1, 0.5, 0.1},
+	fly = true,
+	fall_speed = 0,
+	stepheight = 1.5,
+	visual = "mesh",
+	mesh = "wasp.b3d",
+	textures = {
+		{"dmobs_wasp.png"},
+	},
+	sounds = {
+		random = "wasp",
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=0.6, y=0.6},
+	makes_footstep_sound = true,
+	walk_velocity = 2,
+	run_velocity = 3,
+	jump = true,
+	water_damage = 2,
+	lava_damage = 2,
+	light_damage = 0,
+	view_range = 14,
+	animation = {
+		speed_normal = 15,
+		speed_run = 30,
+		walk_start = 1,
+		walk_end = 5,
+		stand_start = 1,
+		stand_end = 5,
+		run_start = 1,
+		run_end = 5,
+		punch_start = 6,
+		punch_end = 15,
+	},
+})
+
+
+mobs:register_egg("dmobs:wasp", "Wasp", "dmobs_wasp_bg.png", 1)
+
+mobs:register_mob("dmobs:wasp_leader", {
+	type = "monster",
+	reach = 1,
+	damage = 2,
+	attack_type = "shoot",
+	shoot_interval = 1,
+	arrow = "dmobs:sting",
+	shoot_offset = 0,
+	hp_min = 82,
+	hp_max = 122,
+	armor = 130,
+	collisionbox = {-0.4, -0, -0.4, 0.3, 2, 0.3},
+	pathfinding = true,
+	fly = true,
+	fall_speed = 0,
+	stepheight = 1.5,
+	visual = "mesh",
+	mesh = "wasp.b3d",
+	textures = {
+		{"dmobs_wasp.png"},
+	},
+	sounds = {
+		random = "wasp",
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=3.5, y=3.5},
+	makes_footstep_sound = true,
+	walk_velocity = 1,
+	run_velocity = 2.5,
+	jump = true,
+	drops = {
+		{name = "default:gold_lump", chance = 1, min = 3, max = 5},
+	},
+	do_custom = function(self)
+	if math.random(1, 500) >= 500 then
+		local pos = self.object:getpos()
+		minetest.env:add_entity(pos, "dmobs:wasp")
+		end
+	end,
+	replace_rate = 700,
+	replace_what = {"air"},
+	replace_with = "dmobs:hive",
+	water_damage = 2,
+	lava_damage = 2,
+	light_damage = 0,
+	view_range = 14,
+	animation = {
+		speed_normal = 6,
+		speed_run = 15,
+		walk_start = 1,
+		walk_end = 5,
+		stand_start = 1,
+		stand_end = 5,
+		run_start = 1,
+		run_end = 5,
+		shoot_start = 6,
+		shoot_end = 15,
+	},
+})
+
+
+mobs:register_egg("dmobs:wasp_leader", "King of Sting", "dmobs_wasp_bg.png", 1)
diff --git a/mobs/whale.lua b/mobs/whale.lua
new file mode 100644
index 0000000000000000000000000000000000000000..cafa83f87786a0a475883fac1b30d747545494a0
--- /dev/null
+++ b/mobs/whale.lua
@@ -0,0 +1,62 @@
+mobs:register_mob("dmobs:whale", {
+	type = "animal",
+	passive = false,
+	reach = 1,
+	damage = 2,
+	attack_type = "dogfight",
+	hp_min = 52,
+	hp_max = 82,
+	armor = 230,
+	collisionbox = {-0.9, -1.2, -0.9, 0.9, 0.9, 0.9},
+	visual = "mesh",
+	mesh = "whale.b3d",
+	textures = {
+		{"dmobs_whale.png"},
+	},
+	blood_texture = "mobs_blood.png",
+	visual_size = {x=2.5, y=2.5},
+	makes_footstep_sound = true,
+	walk_velocity = 0.5,
+	run_velocity = 1,
+	jump = false,	
+	stepheight = 1.5,
+	fall_damage = 0,
+	fall_speed = -6,
+	fly = true,
+	fly_in = "default:water_source",
+	water_damage = 0,
+	lava_damage = 2,
+	light_damage = 0,
+	follow = {"fishing:fish_cooked"},
+	view_range = 14,
+	drops = {
+		{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
+	},
+	sounds = {
+      random = "whale_1",
+      death = "whale_1",
+      distance = 128,
+	},
+	animation = {
+		speed_normal = 5,
+		speed_run = 10,
+		walk_start = 2,
+		walk_end = 39,
+		stand_start = 2,
+		stand_end = 39,
+		run_start = 2,
+		run_end = 39,
+
+	},
+	on_rightclick = function(self, clicker)
+
+		if mobs:feed_tame(self, clicker, 8, true, true) then
+			return
+		end
+
+		mobs:capture_mob(self, clicker, 0, 5, 50, false, nil)
+	end,
+})
+
+
+mobs:register_egg("dmobs:whale", "Whale", "default_water_source.png", 1)
diff --git a/nodes.lua b/nodes.lua
new file mode 100644
index 0000000000000000000000000000000000000000..98010019fc027ba9b842783ff52d9dad6f531f6a
--- /dev/null
+++ b/nodes.lua
@@ -0,0 +1,34 @@
+
+
+--wasps nest
+
+minetest.register_node("dmobs:hive", {
+	description = "Wasp Nest",
+	tiles = {"dmobs_hive.png"},
+	groups = {crumbly=1, oddly_breakable_by_hand=1, falling_node=1, flammable=1},
+	on_destruct = function(pos, oldnode)
+		minetest.env:add_entity(pos, "dmobs:wasp")
+		minetest.env:add_entity(pos, "dmobs:wasp")
+		minetest.env:add_entity(pos, "dmobs:wasp")
+		minetest.env:add_entity(pos, "dmobs:wasp")
+	end,
+})
+
+--golem
+
+minetest.register_node("dmobs:golemstone", {
+	description = "golem stone",
+	tiles = {"dmobs_golem_stone.png",},
+	groups = {cracky=1},
+	on_construct = function(pos, node, _)
+		local node1 = minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name
+		local node2 = minetest.env:get_node({x=pos.x, y=pos.y-2, z=pos.z}).name
+		local node3 = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z}).name
+		if node1 == "default:stone" and node2 == "default:stone" and node3 == "air" then
+		minetest.env:add_entity(pos, "dmobs:golem_friendly")
+		minetest.env:remove_node({x=pos.x, y=pos.y-1, z=pos.z})
+		minetest.env:remove_node({x=pos.x, y=pos.y-2, z=pos.z})
+		minetest.env:remove_node({x=pos.x, y=pos.y, z=pos.z})
+		end
+	end,
+})
diff --git a/saddle.lua b/saddle.lua
new file mode 100644
index 0000000000000000000000000000000000000000..bcef4c2b13ff1b67265453dfc903f1b6f68f1992
--- /dev/null
+++ b/saddle.lua
@@ -0,0 +1,43 @@
+--saddle license
+
+-- **mobs_saddle.png**
+-- -------------------
+-- The MIT License (MIT)
+
+-- Copyright (c) 2014 Krupnov Pavel
+
+-- Permission is hereby granted, free of charge, to any person obtaining a copy
+-- of this software and associated documentation files (the "Software"), to deal
+-- in the Software without restriction, including without limitation the rights
+-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+-- copies of the Software, and to permit persons to whom the Software is
+-- furnished to do so, subject to the following conditions:
+
+-- The above copyright notice and this permission notice shall be included in
+-- all copies or substantial portions of the Software.
+
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+-- THE SOFTWARE.
+
+
+-- saddle (if not already available)
+if not minetest.get_modpath("mobs_horse") then
+	minetest.register_craftitem(":mobs:saddle", {
+		description = "Saddle",
+		inventory_image = "mobs_saddle.png"
+	})
+
+	minetest.register_craft({
+		output = "mobs:saddle",
+		recipe = {
+			{"mobs:leather", "mobs:leather", "mobs:leather"},
+			{"mobs:leather", "default:steel_ingot", "mobs:leather"},
+			{"mobs:leather", "default:steel_ingot", "mobs:leather"}
+		}
+	})
+end
diff --git a/spawn.lua b/spawn.lua
new file mode 100644
index 0000000000000000000000000000000000000000..f98d0010d555194bb54753562cc0fa9294fa4998
--- /dev/null
+++ b/spawn.lua
@@ -0,0 +1,49 @@
+-- friendlies
+
+mobs:register_spawn("dmobs:nyan", {"default:pine_needles","default:leaves"}, 20, 10, 50000, 2, 31000)
+mobs:register_spawn("dmobs:nyan", {"nyanland:meseleaves"}, 20, 10, 15000, 2, 31000)
+
+mobs:register_spawn("dmobs:hedgehog", {"default:dirt_with_grass","default:pine_needles"}, 20, 10, 15000, 2, 31000)
+mobs:register_spawn("dmobs:whale", {"default:water_source"}, 20, 10, 15000, -20, 1000)
+mobs:register_spawn("dmobs:owl", {"default:leaves","default:tree"}, 20, 10, 15000, 2, 31000)
+mobs:register_spawn("dmobs:gnorm", {"default:dirt_with_grass","default:wood"}, 20, 10, 32000, 2, 31000)
+mobs:register_spawn("dmobs:tortoise", {"default:clay","default:sand"}, 20, 10, 15000, 2, 31000)
+mobs:register_spawn("dmobs:elephant", {"default:dirt_with_dry_grass","default:desert_sand"}, 20, 10, 15000, 2, 31000)
+mobs:register_spawn("dmobs:badger", {"default:dirt_with_grass","default:dirt"}, 20, 10, 15000, 2, 31000)
+mobs:register_spawn("dmobs:pig", {"default:pine_needles","default:leaves", "nyanland:cloudstone"}, 20, 10, 32000, 2, 31000)
+mobs:register_spawn("dmobs:panda", {"default:dirt_with_grass","ethereal:bamboo_dirt"}, 20, 10, 15000, 2, 31000)
+
+-- baddies
+
+mobs:register_spawn("dmobs:wasp", {"default:dirt_with_grass"}, 20, 10, 32000, 2, 31000)
+mobs:register_spawn("dmobs:wasp", {"dmobs:hive"}, 20, 10, 16000, 2, 31000)
+mobs:register_spawn("dmobs:wasp_leader", {"default:dirt_with_grass","dmobs:hive"}, 20, 10, 64000, 2, 31000)
+
+mobs:register_spawn("dmobs:golem", {"default:stone"}, 7, 0, 16000, 2, 31000)
+mobs:register_spawn("dmobs:pig_evil", {"default:pine_needles","default:leaves"}, 20, 10, 32000, 2, 31000)
+mobs:register_spawn("dmobs:fox", {"default:dirt_with_grass","default:dirt"}, 20, 10, 32000, 2, 31000)
+
+if not dmobs.dragons then
+	mobs:register_spawn("dmobs:orc", {"default:snow","default:snow_block", "default:desert_sand"}, 20, 10, 15000, 2, 31000)
+	mobs:register_spawn("dmobs:ogre", {"default:snow","default:dirt_with_dry_grass", "default:desert_sand"}, 20, 10, 15000, 2, 31000)
+else
+	mobs:register_spawn("dmobs:orc", {"default:snow","default:snow_block", "default:desert_sand"}, 20, 10, 3500, 2, 31000)
+	mobs:register_spawn("dmobs:ogre", {"default:snow","default:dirt_with_dry_grass", "default:desert_sand"}, 20, 10, 350, 2, 31000)
+end
+
+
+mobs:register_spawn("dmobs:rat", {"default:stone","default:sand"}, 20, 0, 32000, 2, 31000)
+mobs:register_spawn("dmobs:treeman", {"default:leaves", "default:pine_needles"}, 7, 0, 16000, 2, 31000)
+mobs:register_spawn("dmobs:skeleton", {"default:stone"}, 7, 0, 16000, 2, 31000)
+
+-- dragons
+
+mobs:register_spawn("dmobs:dragon", {"default:leaves","default:dirt_with_grass"}, 20, 10, 64000, 2, 31000)
+
+mobs:register_spawn("dmobs:dragon2", {"default:pine_needles"}, 20, 10, 64000, 2, 31000)
+mobs:register_spawn("dmobs:dragon3", {"default:acacia_leaves","default:dirt_with_dry_grass"}, 20, 10, 64000, 2, 31000)
+mobs:register_spawn("dmobs:dragon4", {"default:jungleleaves"}, 20, 10, 64000, 2, 31000)
+mobs:register_spawn("dmobs:waterdragon", {"default:water_source"}, 20, 10, 32000, 1, 31000, false)
+mobs:register_spawn("dmobs:wyvern",	{"default:leaves"}, 20, 10, 32000, 1, 31000, false)
+mobs:register_spawn("dmobs:dragon_great", {"default:lava_source"}, 20, 0, 64000, -21000, 1000, false)
+