]> git.lizzy.rs Git - Crafter.git/blob - mods/mob/spawning.lua
Add 22i's mobs. Make mobs with head use bone based manipulation
[Crafter.git] / mods / mob / spawning.lua
1 --this is where mob spawning is defined
2 --[[
3 --spawn mob in a square doughnut shaped radius
4 local chance = 20
5 --inner and outer part of square donut radius
6 local inner = 24
7 local outer = 128
8
9 --for debug testing to isolate mobs
10 local spawn = true
11
12 local spawn_table = {"pig"}
13 local dark_spawn_table = {"slime","creepig"}
14 local aether_spawn_table = {"flying_pig"}
15
16 local function spawn_mobs()
17         print("---------------------------------------------")
18         if spawn and global_mob_amount < mob_limit then
19                 --check through players
20                 for _,player in ipairs(minetest.get_connected_players()) do
21                         --don't spawn near dead players
22                         if player:get_hp() > 0 then
23                         
24                                 --local mob_number = math.random(0,2)
25                                 
26                                 local int = {-1,1}
27                                 local pos = vector.floor(vector.add(player:getpos(),0.5))
28                                 
29                                 local x,z
30                                 
31                                 --this is used to determine the axis buffer from the player
32                                 local axis = math.random(0,1)
33                                 
34                                 --cast towards the direction
35                                 if axis == 0 then --x
36                                         x = pos.x + math.random(inner,outer)*int[math.random(1,2)]
37                                         z = pos.z + math.random(-outer,outer)
38                                 else --z
39                                         z = pos.z + math.random(inner,outer)*int[math.random(1,2)]
40                                         x = pos.x + math.random(-outer,outer)
41                                 end
42                                 
43                                 local spawner
44                                 if pos.y >= 21000 then
45                                         spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-32,z), vector.new(x,pos.y+32,z), {"aether:grass"})
46                                 else
47                                         spawner = minetest.find_nodes_in_area_under_air(vector.new(x,pos.y-32,z), vector.new(x,pos.y+32,z), {"main:grass","main:sand","main:water"})
48                                 end
49                                 
50                                 --print(dump(spawner))
51                                 if table.getn(spawner) > 0 then
52                                         local mob_pos = spawner[1]
53                                         --aether spawning
54                                         if mob_pos.y >= 21000 then
55                                                 mob_pos.y = mob_pos.y + 1
56                                                 local mob_spawning = aether_spawn_table[math.random(1,table.getn(spawn_table))]
57                                                 print("Aether Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
58                                                 minetest.add_entity(mob_pos,"mob:"..mob_spawning)
59
60                                         else
61                                                 local light_level = minetest.get_node_light(spawner[1])
62                                                 if light_level < 10 then
63                                                         mob_pos.y = mob_pos.y + 1
64                                                         local mob_spawning = dark_spawn_table[math.random(1,table.getn(dark_spawn_table))]
65                                                         print("Dark Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
66                                                         minetest.add_entity(mob_pos,"mob:"..mob_spawning)
67                                                 else
68                                                         mob_pos.y = mob_pos.y + 1
69                                                         local mob_spawning = spawn_table[math.random(1,table.getn(spawn_table))]
70                                                         print("Light Spawning "..mob_spawning.." at: "..minetest.pos_to_string(mob_pos))
71                                                         minetest.add_entity(mob_pos,"mob:"..mob_spawning)
72                                                 end
73                                         end
74                                 end
75                         end
76                 end
77         end
78         minetest.after(5, function()
79                 spawn_mobs()
80         end)
81 end
82
83 spawn_mobs()
84 ]]--