2021-04-08 15:52:50 +02:00
--lua locals
2022-11-11 00:21:47 +01:00
local math , vector , minetest , mcl_mobs = math , vector , minetest , mcl_mobs
local mob_class = mcl_mobs.mob_class
2023-09-19 03:18:40 +02:00
local modern_lighting = minetest.settings : get_bool ( " mcl_mobs_modern_lighting " , true )
local nether_threshold = tonumber ( minetest.settings : get ( " mcl_mobs_nether_threshold " ) ) or 11
local end_threshold = tonumber ( minetest.settings : get ( " mcl_mobs_end_threshold " ) ) or 0
local overworld_threshold = tonumber ( minetest.settings : get ( " mcl_mobs_overworld_threshold " ) ) or 0
local overworld_sky_threshold = tonumber ( minetest.settings : get ( " mcl_mobs_overworld_sky_threshold " ) ) or 7
2023-09-20 01:24:51 +02:00
local overworld_passive_threshold = tonumber ( minetest.settings : get ( " mcl_mobs_overworld_passive_threshold " ) ) or 7
2023-09-19 03:18:40 +02:00
2022-04-15 11:48:58 +02:00
local get_node = minetest.get_node
local get_node_light = minetest.get_node_light
2021-04-08 15:52:50 +02:00
local find_nodes_in_area_under_air = minetest.find_nodes_in_area_under_air
2024-04-01 17:40:14 +02:00
local mt_get_biome_name = minetest.get_biome_name
2022-04-15 11:48:58 +02:00
local get_objects_inside_radius = minetest.get_objects_inside_radius
local get_connected_players = minetest.get_connected_players
2024-08-22 16:28:34 +02:00
local registered_nodes = minetest.registered_nodes
2022-04-15 11:48:58 +02:00
2024-07-31 02:30:29 +02:00
local math_min = math.min
local math_max = math.max
2021-04-11 00:10:27 +02:00
local math_random = math.random
2022-04-15 11:48:58 +02:00
local math_floor = math.floor
local math_ceil = math.ceil
local math_cos = math.cos
local math_sin = math.sin
2024-03-18 19:20:46 +01:00
local math_sqrt = math.sqrt
2024-09-13 11:14:51 +02:00
local math_abs = math.abs
2022-04-15 11:48:58 +02:00
2022-07-17 05:42:45 +02:00
local vector_distance = vector.distance
2022-04-15 11:48:58 +02:00
local vector_new = vector.new
local vector_floor = vector.floor
local table_copy = table.copy
local table_remove = table.remove
local pairs = pairs
2023-01-26 04:57:36 +01:00
2024-08-03 17:52:51 +02:00
local logging = minetest.settings : get_bool ( " mcl_logging_mobs_spawn " , false )
2024-08-22 16:28:34 +02:00
local function mcl_log ( message , property )
if property then message = message .. " : " .. dump ( property ) end
mcl_util.mcl_log ( message , " [Mobs spawn] " , true )
2023-01-26 04:57:36 +01:00
end
2024-08-22 16:28:34 +02:00
if not logging then mcl_log = function ( ) end end
2023-01-26 04:57:36 +01:00
2022-08-29 20:59:17 +02:00
local dbg_spawn_attempts = 0
local dbg_spawn_succ = 0
2023-01-26 04:57:36 +01:00
2023-01-26 17:44:25 +01:00
local remove_far = true
2023-01-26 04:57:36 +01:00
local WAIT_FOR_SPAWN_ATTEMPT = 10
2023-02-09 21:43:46 +01:00
local FIND_SPAWN_POS_RETRIES = 16
local FIND_SPAWN_POS_RETRIES_SUCCESS_RESPIN = 8
2023-01-26 04:57:36 +01:00
2023-01-26 14:44:29 +01:00
local MOB_SPAWN_ZONE_INNER = 24
2024-07-31 02:30:29 +02:00
local MOB_SPAWN_ZONE_INNER_SQ = MOB_SPAWN_ZONE_INNER ^ 2 -- squared
2023-01-26 14:44:29 +01:00
local MOB_SPAWN_ZONE_MIDDLE = 32
2023-01-31 16:55:11 +01:00
local MOB_SPAWN_ZONE_OUTER = 128
2024-07-31 02:30:29 +02:00
local MOB_SPAWN_ZONE_OUTER_SQ = MOB_SPAWN_ZONE_OUTER ^ 2 -- squared
2023-01-26 14:44:29 +01:00
2021-04-08 18:07:20 +02:00
-- range for mob count
2023-01-26 14:44:29 +01:00
local MOB_CAP_INNER_RADIUS = 32
2022-07-17 05:42:45 +02:00
local aoc_range = 136
2023-01-26 17:44:25 +01:00
local MISSING_CAP_DEFAULT = 15
2023-05-29 20:26:43 +02:00
local MOBS_CAP_CLOSE = 10
2023-01-26 16:20:38 +01:00
2023-01-31 00:10:37 +01:00
local SPAWN_MAPGEN_LIMIT = mcl_vars.mapgen_limit - 150
2022-07-17 05:42:45 +02:00
local mob_cap = {
2023-01-29 00:48:48 +01:00
hostile = tonumber ( minetest.settings : get ( " mcl_mob_cap_monster " ) ) or 70 ,
2023-05-29 22:43:27 +02:00
passive = tonumber ( minetest.settings : get ( " mcl_mob_cap_animal " ) ) or 10 ,
2022-10-13 06:27:04 +02:00
ambient = tonumber ( minetest.settings : get ( " mcl_mob_cap_ambient " ) ) or 15 ,
2023-01-31 19:04:01 +01:00
water = tonumber ( minetest.settings : get ( " mcl_mob_cap_water " ) ) or 8 ,
2023-05-29 21:08:44 +02:00
water_ambient = tonumber ( minetest.settings : get ( " mcl_mob_cap_water_ambient " ) ) or 20 ,
2023-05-29 21:43:15 +02:00
water_underground = tonumber ( minetest.settings : get ( " mcl_mob_cap_water_underground " ) ) or 5 ,
axolotl = tonumber ( minetest.settings : get ( " mcl_mob_cap_axolotl " ) ) or 2 , -- TODO should be 5 when lush caves added
2022-10-13 06:27:04 +02:00
player = tonumber ( minetest.settings : get ( " mcl_mob_cap_player " ) ) or 75 ,
2023-05-29 20:26:43 +02:00
global_hostile = tonumber ( minetest.settings : get ( " mcl_mob_cap_hostile " ) ) or 300 ,
global_non_hostile = tonumber ( minetest.settings : get ( " mcl_mob_cap_non_hostile " ) ) or 300 ,
2022-10-13 06:27:04 +02:00
total = tonumber ( minetest.settings : get ( " mcl_mob_cap_total " ) ) or 500 ,
2022-07-17 05:42:45 +02:00
}
2021-04-08 12:04:36 +02:00
2023-05-29 22:43:27 +02:00
local peaceful_percentage_spawned = tonumber ( minetest.settings : get ( " mcl_mob_peaceful_percentage_spawned " ) ) or 30
2023-01-31 16:55:11 +01:00
local peaceful_group_percentage_spawned = tonumber ( minetest.settings : get ( " mcl_mob_peaceful_group_percentage_spawned " ) ) or 15
local hostile_group_percentage_spawned = tonumber ( minetest.settings : get ( " mcl_mob_hostile_group_percentage_spawned " ) ) or 20
2023-01-30 02:31:58 +01:00
mcl_log ( " Mob cap hostile: " .. mob_cap.hostile )
mcl_log ( " Mob cap water: " .. mob_cap.water )
mcl_log ( " Mob cap passive: " .. mob_cap.passive )
mcl_log ( " Percentage of peacefuls spawned: " .. peaceful_percentage_spawned )
2023-01-31 16:55:11 +01:00
mcl_log ( " Percentage of peaceful spawns are group: " .. peaceful_group_percentage_spawned )
mcl_log ( " Percentage of hostile spawns are group: " .. hostile_group_percentage_spawned )
2023-01-30 02:31:58 +01:00
2022-04-15 11:48:58 +02:00
--do mobs spawn?
local mobs_spawn = minetest.settings : get_bool ( " mobs_spawn " , true ) ~= false
2022-09-13 13:15:57 +02:00
local spawn_protected = minetest.settings : get_bool ( " mobs_spawn_protected " ) ~= false
2021-04-08 12:04:36 +02:00
2022-04-15 11:48:58 +02:00
-- count how many mobs are in an area
2022-07-17 05:42:45 +02:00
local function count_mobs ( pos , r , mob_type )
2021-04-08 08:07:15 +02:00
local num = 0
2022-07-17 05:42:45 +02:00
for _ , l in pairs ( minetest.luaentities ) do
if l and l.is_mob and ( mob_type == nil or l.type == mob_type ) then
local p = l.object : get_pos ( )
if p and vector_distance ( p , pos ) < r then
num = num + 1
end
2021-04-08 08:07:15 +02:00
end
end
return num
end
2021-04-08 18:07:20 +02:00
2022-07-17 05:42:45 +02:00
local function count_mobs_total ( mob_type )
2022-07-17 03:45:41 +02:00
local num = 0
for _ , l in pairs ( minetest.luaentities ) do
if l.is_mob then
2022-07-17 05:42:45 +02:00
if mob_type == nil or l.type == mob_type then
num = num + 1
end
2022-07-17 03:45:41 +02:00
end
end
return num
end
2023-01-26 16:20:38 +01:00
local function count_mobs_add_entry ( mobs_list , mob_cat )
2024-09-13 11:14:51 +02:00
mobs_list [ mob_cat ] = ( mobs_list [ mob_cat ] or 0 ) + 1
2023-01-26 16:20:38 +01:00
end
2023-01-29 00:48:48 +01:00
--categorise_by can be name or type or spawn_class
2023-01-26 16:20:38 +01:00
local function count_mobs_all ( categorise_by , pos )
local mobs_found_wide = { }
local mobs_found_close = { }
2023-01-07 21:37:29 +01:00
local num = 0
for _ , entity in pairs ( minetest.luaentities ) do
2023-01-26 04:57:36 +01:00
if entity and entity.is_mob then
local add_entry = false
2023-01-26 16:20:38 +01:00
--local mob_type = entity.type -- animal / monster / npc
local mob_cat = entity [ categorise_by ]
2023-01-26 04:57:36 +01:00
2023-01-26 16:20:38 +01:00
if pos then
2023-01-26 04:57:36 +01:00
local mob_pos = entity.object : get_pos ( )
if mob_pos then
local distance = vector.distance ( pos , mob_pos )
2023-02-09 21:43:46 +01:00
--mcl_log("distance: ".. distance)
2023-01-26 16:20:38 +01:00
if distance <= MOB_SPAWN_ZONE_MIDDLE then
2023-02-09 21:43:46 +01:00
--mcl_log("distance is close")
2023-01-26 16:20:38 +01:00
count_mobs_add_entry ( mobs_found_close , mob_cat )
count_mobs_add_entry ( mobs_found_wide , mob_cat )
add_entry = true
elseif distance <= MOB_SPAWN_ZONE_OUTER then
2023-02-09 21:43:46 +01:00
--mcl_log("distance is wide")
2023-01-26 16:20:38 +01:00
count_mobs_add_entry ( mobs_found_wide , mob_cat )
2023-01-26 04:57:36 +01:00
add_entry = true
else
2023-01-26 16:20:38 +01:00
--mcl_log("mob_pos: " .. minetest.pos_to_string(mob_pos))
2023-01-26 04:57:36 +01:00
end
end
2023-01-07 21:37:29 +01:00
else
2023-01-26 16:20:38 +01:00
count_mobs_add_entry ( mobs_found_wide , mob_cat )
2023-01-26 04:57:36 +01:00
add_entry = true
end
2023-01-26 16:20:38 +01:00
2023-01-26 04:57:36 +01:00
if add_entry then
num = num + 1
2023-01-07 21:37:29 +01:00
end
end
end
2023-02-09 21:43:46 +01:00
--mcl_log("num: ".. num)
2023-01-26 16:20:38 +01:00
return mobs_found_close , mobs_found_wide , num
2023-01-07 21:37:29 +01:00
end
2022-10-13 21:14:44 +02:00
local function count_mobs_total_cap ( mob_type )
2023-05-29 20:26:43 +02:00
local total = 0
2022-10-13 21:14:44 +02:00
local num = 0
2023-05-29 20:26:43 +02:00
local hostile = 0
local non_hostile = 0
2022-10-13 21:14:44 +02:00
for _ , l in pairs ( minetest.luaentities ) do
if l.is_mob then
2023-05-29 20:26:43 +02:00
total = total + 1
local nametagged = l.nametag and l.nametag ~= " "
if ( mob_type == nil or l.type == mob_type ) and not nametagged then
if l.spawn_class == " hostile " then
hostile = hostile + 1
else
non_hostile = non_hostile + 1
end
2022-10-13 21:14:44 +02:00
num = num + 1
2023-05-29 20:26:43 +02:00
else
2023-05-29 21:08:44 +02:00
mcl_log ( " l.name " , l.name )
2023-05-29 20:26:43 +02:00
mcl_log ( " l.nametag " , l.nametag )
2022-10-13 21:14:44 +02:00
end
end
end
2023-05-29 20:26:43 +02:00
mcl_log ( " Total mobs " , total )
mcl_log ( " hostile " , hostile )
mcl_log ( " non_hostile " , non_hostile )
return num , non_hostile , hostile
2022-10-13 21:14:44 +02:00
end
2021-04-08 08:07:15 +02:00
2023-02-09 21:43:46 +01:00
local function output_mob_stats ( mob_counts , total_mobs , chat_display )
2023-01-26 04:57:36 +01:00
if ( total_mobs ) then
2023-02-09 21:43:46 +01:00
local total_output = " Total mobs found: " .. total_mobs
if chat_display then
minetest.log ( total_output )
else
minetest.log ( " action " , total_output )
end
2023-01-26 04:57:36 +01:00
end
2023-02-09 21:43:46 +01:00
local detailed = " "
2023-01-26 04:57:36 +01:00
if mob_counts then
for k , v1 in pairs ( mob_counts ) do
2023-02-09 21:43:46 +01:00
detailed = detailed .. tostring ( k ) .. " : " .. tostring ( v1 ) .. " ; "
end
end
if detailed and detailed ~= " " then
if chat_display then
minetest.log ( detailed )
else
minetest.log ( " action " , detailed )
2023-01-26 04:57:36 +01:00
end
end
end
2021-04-08 08:07:15 +02:00
-- global functions
2022-05-25 14:44:49 +02:00
function mcl_mobs : spawn_abm_check ( pos , node , name )
2021-04-08 08:07:15 +02:00
-- global function to add additional spawn checks
-- return true to stop spawning mob
end
--[[
Custom elements changed :
2021-04-08 12:48:25 +02:00
2021-04-08 08:07:15 +02:00
name :
the mobs name
2021-04-12 15:45:00 +02:00
dimension :
2021-04-08 08:07:15 +02:00
" overworld "
" nether "
" end "
types of spawning :
" water "
" ground "
" lava "
2021-04-08 12:48:25 +02:00
biomes : tells the spawner to allow certain mobs to spawn in certain biomes
{ " this " , " that " , " grasslands " , " whatever " }
what is aoc ? ? ? objects in area
2021-04-08 08:07:15 +02:00
WARNING : BIOME INTEGRATION NEEDED -> How to get biome through lua ? ?
] ] --
2021-04-08 18:07:20 +02:00
2021-04-08 08:07:15 +02:00
--this is where all of the spawning information is kept
2021-04-08 14:09:43 +02:00
local spawn_dictionary = { }
2023-02-10 03:47:05 +01:00
--this is where all of the spawning information is kept for mobs that don't naturally spawn
local non_spawn_dictionary = { }
2021-04-08 08:07:15 +02:00
2022-05-25 14:44:49 +02:00
function mcl_mobs : spawn_setup ( def )
2022-04-15 11:48:58 +02:00
if not mobs_spawn then return end
2021-04-08 12:48:25 +02:00
2022-04-15 11:48:58 +02:00
if not def then
minetest.log ( " warning " , " Empty mob spawn setup definition " )
return
end
2021-04-08 12:48:25 +02:00
2022-04-15 11:48:58 +02:00
local name = def.name
if not name then
minetest.log ( " warning " , " Missing mob name " )
2021-04-08 08:07:15 +02:00
return
end
2022-04-15 11:48:58 +02:00
local dimension = def.dimension or " overworld "
local type_of_spawning = def.type_of_spawning or " ground "
2024-09-13 17:47:08 +02:00
local biomes = def.biomes or nil
2022-04-15 11:48:58 +02:00
local min_light = def.min_light or 0
local max_light = def.max_light or ( minetest.LIGHT_MAX + 1 )
local chance = def.chance or 1000
local aoc = def.aoc or aoc_range
local min_height = def.min_height or mcl_mapgen.overworld . min
local max_height = def.max_height or mcl_mapgen.overworld . max
local day_toggle = def.day_toggle
local on_spawn = def.on_spawn
local check_position = def.check_position
2021-04-08 08:07:15 +02:00
-- chance/spawn number override in minetest.conf for registered mob
local numbers = minetest.settings : get ( name )
if numbers then
numbers = numbers : split ( " , " )
chance = tonumber ( numbers [ 1 ] ) or chance
aoc = tonumber ( numbers [ 2 ] ) or aoc
if chance == 0 then
2022-05-25 14:44:49 +02:00
minetest.log ( " warning " , string.format ( " [mcl_mobs] %s has spawning disabled " , name ) )
2021-04-08 08:07:15 +02:00
return
end
2022-05-25 14:44:49 +02:00
minetest.log ( " action " , string.format ( " [mcl_mobs] Chance setting for %s changed to %s (total: %s) " , name , chance , aoc ) )
2021-04-08 08:07:15 +02:00
end
2022-04-15 11:48:58 +02:00
if chance < 1 then
chance = 1
minetest.log ( " warning " , " Chance shouldn't be less than 1 (mob name: " .. name .. " ) " )
end
2021-04-08 08:07:15 +02:00
2022-04-15 11:48:58 +02:00
spawn_dictionary [ # spawn_dictionary + 1 ] = {
name = name ,
dimension = dimension ,
2022-07-17 05:42:45 +02:00
type_of_spawning = type_of_spawning ,
2022-04-15 11:48:58 +02:00
biomes = biomes ,
min_light = min_light ,
max_light = max_light ,
chance = chance ,
aoc = aoc ,
min_height = min_height ,
max_height = max_height ,
day_toggle = day_toggle ,
check_position = check_position ,
on_spawn = on_spawn ,
}
end
2021-04-08 08:07:15 +02:00
2023-02-10 03:47:05 +01:00
function mcl_mobs : mob_light_lvl ( mob_name , dimension )
2023-02-16 22:46:41 +01:00
local spawn_dictionary_consolidated = { }
2023-03-04 02:38:51 +01:00
if non_spawn_dictionary [ mob_name ] then
2023-02-16 22:46:41 +01:00
local mob_dimension = non_spawn_dictionary [ mob_name ] [ dimension ]
2023-03-04 02:38:51 +01:00
if mob_dimension then
--minetest.log("Found in non spawn dictionary for dimension")
return mob_dimension.min_light , mob_dimension.max_light
2023-02-10 03:47:05 +01:00
else
2023-03-04 02:38:51 +01:00
--minetest.log("Found in non spawn dictionary but not for dimension")
local overworld_non_spawn_def = non_spawn_dictionary [ mob_name ] [ " overworld " ]
if overworld_non_spawn_def then
return overworld_non_spawn_def.min_light , overworld_non_spawn_def.max_light
end
2023-02-10 03:47:05 +01:00
end
else
2023-03-04 02:38:51 +01:00
--minetest.log("must be in spawning dictionary")
2023-02-10 03:47:05 +01:00
for i , v in pairs ( spawn_dictionary ) do
2023-03-04 02:38:51 +01:00
local current_mob_name = spawn_dictionary [ i ] . name
local current_mob_dim = spawn_dictionary [ i ] . dimension
if mob_name == current_mob_name then
if not spawn_dictionary_consolidated [ current_mob_name ] then
spawn_dictionary_consolidated [ current_mob_name ] = { }
end
spawn_dictionary_consolidated [ current_mob_name ] [ current_mob_dim ] = {
[ " min_light " ] = spawn_dictionary [ i ] . min_light ,
[ " max_light " ] = spawn_dictionary [ i ] . max_light
}
2023-02-16 22:46:41 +01:00
end
2023-03-04 02:38:51 +01:00
end
if spawn_dictionary_consolidated [ mob_name ] then
--minetest.log("is in consolidated")
local mob_dimension = spawn_dictionary_consolidated [ mob_name ] [ dimension ]
if mob_dimension then
--minetest.log("found for dimension")
2023-02-26 17:22:21 +01:00
return mob_dimension.min_light , mob_dimension.max_light
else
2023-03-04 02:38:51 +01:00
--minetest.log("not found for dimension, use overworld def")
local mob_dimension_default = spawn_dictionary_consolidated [ mob_name ] [ " overworld " ]
if mob_dimension_default then
return mob_dimension_default.min_light , mob_dimension_default.max_light
end
end
else
--minetest.log("not in consolidated")
2023-02-26 17:22:21 +01:00
end
2023-02-10 03:47:05 +01:00
end
2023-03-04 02:38:51 +01:00
minetest.log ( " action " , " There are no light levels for mob ( " .. tostring ( mob_name ) .. " ) in dimension ( " .. tostring ( dimension ) .. " ). Return defaults " )
return 0 , minetest.LIGHT_MAX + 1
2023-02-10 03:47:05 +01:00
end
function mcl_mobs : non_spawn_specific ( mob_name , dimension , min_light , max_light )
table.insert ( non_spawn_dictionary , mob_name )
2023-03-16 20:32:43 +01:00
non_spawn_dictionary [ mob_name ] = {
[ dimension ] = {
2023-02-10 03:47:05 +01:00
min_light = min_light , max_light = max_light
}
}
end
2023-03-16 20:32:43 +01:00
function mcl_mobs : spawn_specific ( name , dimension , type_of_spawning , biomes , min_light , max_light , interval , chance , aoc , min_height , max_height , day_toggle , on_spawn , check_position )
2021-04-08 08:07:15 +02:00
2022-04-15 11:48:58 +02:00
-- Do mobs spawn at all?
if not mobs_spawn then
return
end
2021-04-08 08:07:15 +02:00
2024-04-27 14:29:00 +02:00
assert ( min_height )
assert ( max_height )
2022-04-15 11:48:58 +02:00
-- chance/spawn number override in minetest.conf for registered mob
local numbers = minetest.settings : get ( name )
2021-04-08 08:07:15 +02:00
2022-04-15 11:48:58 +02:00
if numbers then
numbers = numbers : split ( " , " )
chance = tonumber ( numbers [ 1 ] ) or chance
aoc = tonumber ( numbers [ 2 ] ) or aoc
2021-04-08 08:07:15 +02:00
2022-04-15 11:48:58 +02:00
if chance == 0 then
2022-05-25 14:44:49 +02:00
minetest.log ( " warning " , string.format ( " [mcl_mobs] %s has spawning disabled " , name ) )
2022-04-15 11:48:58 +02:00
return
end
2021-04-08 08:07:15 +02:00
2022-05-25 14:44:49 +02:00
minetest.log ( " action " , string.format ( " [mcl_mobs] Chance setting for %s changed to %s (total: %s) " , name , chance , aoc ) )
2021-04-08 18:07:20 +02:00
end
2021-04-08 08:07:15 +02:00
--load information into the spawn dictionary
2021-04-08 15:52:50 +02:00
local key = # spawn_dictionary + 1
spawn_dictionary [ key ] = { }
spawn_dictionary [ key ] [ " name " ] = name
spawn_dictionary [ key ] [ " dimension " ] = dimension
spawn_dictionary [ key ] [ " type_of_spawning " ] = type_of_spawning
spawn_dictionary [ key ] [ " biomes " ] = biomes
spawn_dictionary [ key ] [ " min_light " ] = min_light
spawn_dictionary [ key ] [ " max_light " ] = max_light
spawn_dictionary [ key ] [ " chance " ] = chance
spawn_dictionary [ key ] [ " aoc " ] = aoc
spawn_dictionary [ key ] [ " min_height " ] = min_height
spawn_dictionary [ key ] [ " max_height " ] = max_height
spawn_dictionary [ key ] [ " day_toggle " ] = day_toggle
2023-03-16 20:32:43 +01:00
spawn_dictionary [ key ] [ " check_position " ] = check_position
2024-04-14 11:52:54 +02:00
end
2022-04-15 11:48:58 +02:00
local function get_next_mob_spawn_pos ( pos )
2024-04-14 11:52:54 +02:00
-- Select a distance such that distances closer to the player are selected much more often than
2024-07-31 02:30:29 +02:00
-- those further away from the player. This does produce a concentration at INNER (24 blocks)
local distance = math_random ( ) ^ 2 * ( MOB_SPAWN_ZONE_OUTER - MOB_SPAWN_ZONE_INNER ) + MOB_SPAWN_ZONE_INNER
2024-04-14 11:52:54 +02:00
--print("Using spawn distance of "..tostring(distance).." fx="..tostring(fx)..",x="..tostring(x))
2023-02-09 21:43:46 +01:00
2024-07-31 02:30:29 +02:00
-- Choose a random direction. Rejection sampling is simple and fast (1-2 tries usually)
local xoff , yoff , zoff , dd
repeat
xoff , yoff , zoff = math_random ( ) * 2 - 1 , math_random ( ) * 2 - 1 , math_random ( ) * 2 - 1
dd = xoff * xoff + yoff * yoff + zoff * zoff
until ( dd <= 1 and dd >= 1e-6 ) -- outside of uniform ball, retry
dd = distance / math_sqrt ( dd ) -- distance scaling factor
xoff , yoff , zoff = xoff * dd , yoff * dd , zoff * dd
2024-03-17 20:23:06 +01:00
local goal_pos = vector.offset ( pos , xoff , yoff , zoff )
2024-09-13 11:14:51 +02:00
if not ( math_abs ( goal_pos.x ) <= SPAWN_MAPGEN_LIMIT and math_abs ( goal_pos.y ) <= SPAWN_MAPGEN_LIMIT and math_abs ( goal_pos.z ) <= SPAWN_MAPGEN_LIMIT ) then
2024-03-17 20:23:06 +01:00
mcl_log ( " Pos outside mapgen limits: " .. minetest.pos_to_string ( goal_pos ) )
return nil
end
2024-03-18 19:20:46 +01:00
-- Calculate upper/lower y limits
2024-07-31 02:30:29 +02:00
local d2 = xoff * xoff + zoff * zoff -- squared distance in x,z plane only
2024-09-13 11:14:51 +02:00
local y1 = math_sqrt ( MOB_SPAWN_ZONE_OUTER_SQ - d2 ) -- absolue value of distance to outer sphere
2024-03-18 19:20:46 +01:00
2024-07-31 02:30:29 +02:00
local y_min , y_max
if d2 >= MOB_SPAWN_ZONE_INNER_SQ then
2024-03-18 19:20:46 +01:00
-- Outer region, y range has both ends on the outer sphere
y_min = pos.y - y1
y_max = pos.y + y1
2024-03-17 21:54:39 +01:00
else
2024-03-18 19:20:46 +01:00
-- Inner region, y range spans between inner and outer spheres
2024-09-13 11:14:51 +02:00
local y2 = math_sqrt ( MOB_SPAWN_ZONE_INNER_SQ - d2 )
2024-07-31 02:30:29 +02:00
if goal_pos.y > pos.y then
2024-03-18 19:20:46 +01:00
-- Upper hemisphere
y_min = pos.y + y2
y_max = pos.y + y1
else
-- Lower hemisphere
y_min = pos.y - y1
y_max = pos.y - y2
end
2024-03-17 21:54:39 +01:00
end
2024-05-06 09:10:57 +02:00
-- Limit total range of check to 32 nodes (maximum of 3 map blocks)
2024-07-31 02:30:29 +02:00
y_min = math_max ( math_floor ( y_min ) , goal_pos.y - 16 )
y_max = math_min ( math_ceil ( y_max ) , goal_pos.y + 16 )
2024-05-06 09:10:57 +02:00
2024-03-17 20:23:06 +01:00
-- Ask engine for valid spawn locations
local spawning_position_list = find_nodes_in_area_under_air (
2024-03-17 21:54:39 +01:00
{ x = goal_pos.x , y = y_min , z = goal_pos.z } ,
{ x = goal_pos.x , y = y_max , z = goal_pos.z } ,
2024-03-17 20:23:06 +01:00
{ " group:solid " , " group:water " , " group:lava " }
2024-04-14 11:52:54 +02:00
) or { }
2024-03-17 20:23:06 +01:00
-- Select only the locations at a valid distance
local valid_positions = { }
for _ , check_pos in ipairs ( spawning_position_list ) do
local dist = vector.distance ( pos , check_pos )
if dist >= MOB_SPAWN_ZONE_INNER and dist <= MOB_SPAWN_ZONE_OUTER then
valid_positions [ # valid_positions + 1 ] = check_pos
end
end
spawning_position_list = valid_positions
2021-04-08 08:07:15 +02:00
2024-03-17 20:23:06 +01:00
-- No valid locations, failed to find a position
if # spawning_position_list == 0 then
mcl_log ( " Spawning position isn't good. Do not spawn: " .. minetest.pos_to_string ( goal_pos ) )
return nil
end
-- Pick a random valid location
mcl_log ( " Spawning positions available: " .. minetest.pos_to_string ( goal_pos ) )
return spawning_position_list [ math_random ( 1 , # spawning_position_list ) ]
2021-04-08 08:07:15 +02:00
end
2021-04-08 15:52:50 +02:00
--a simple helper function for mob_spawn
local function biome_check ( biome_list , biome_goal )
2024-06-28 12:50:44 +02:00
if not biome_goal then return false end
2022-04-15 11:48:58 +02:00
for _ , data in pairs ( biome_list ) do
2021-04-08 15:52:50 +02:00
if data == biome_goal then
return true
end
2021-04-08 08:07:15 +02:00
end
2021-04-08 15:52:50 +02:00
return false
end
2021-04-12 15:45:00 +02:00
2022-04-29 01:28:00 +02:00
local function is_farm_animal ( n )
return n == " mobs_mc:pig " or n == " mobs_mc:cow " or n == " mobs_mc:sheep " or n == " mobs_mc:chicken " or n == " mobs_mc:horse " or n == " mobs_mc:donkey "
end
2021-04-08 08:07:15 +02:00
2022-07-05 03:49:46 +02:00
local function get_water_spawn ( p )
local nn = minetest.find_nodes_in_area ( vector.offset ( p , - 2 , - 1 , - 2 ) , vector.offset ( p , 2 , - 15 , 2 ) , { " group:water " } )
if nn and # nn > 0 then
return nn [ math.random ( # nn ) ]
end
end
2024-09-14 00:10:05 +02:00
local function has_room ( self , pos )
2024-06-18 03:27:55 +02:00
local cb = self.spawnbox or self.collisionbox
2022-10-13 21:13:21 +02:00
local nodes = { }
if self.fly_in then
local t = type ( self.fly_in )
if t == " table " then
nodes = table.copy ( self.fly_in )
elseif t == " string " then
table.insert ( nodes , self.fly_in )
end
end
table.insert ( nodes , " air " )
2024-06-17 14:15:04 +02:00
2024-09-14 00:10:05 +02:00
-- Calculate area to check for room
2024-06-18 13:07:30 +02:00
local cb_height = cb [ 5 ] - cb [ 2 ]
2024-09-14 00:10:05 +02:00
local p1 = vector.new (
math.round ( pos.x + cb [ 1 ] ) ,
2024-09-14 04:31:04 +02:00
math.floor ( pos.y ) ,
2024-09-14 00:10:05 +02:00
math.round ( pos.z + cb [ 3 ] ) )
local p2 = vector.new (
math.round ( pos.x + cb [ 4 ] ) ,
math.ceil ( p1.y + cb_height ) - 1 ,
math.round ( pos.z + cb [ 6 ] ) )
2024-06-17 14:15:04 +02:00
2024-06-18 13:07:30 +02:00
-- Check if the entire spawn volume is free
local dx = p2.x - p1.x + 1
local dy = p2.y - p1.y + 1
local dz = p2.z - p1.z + 1
2024-06-27 02:18:53 +02:00
local found_nodes = minetest.find_nodes_in_area ( p1 , p2 , nodes ) or 0
local n = # found_nodes
2024-09-14 03:24:34 +02:00
if n == dx * dy * dz then
2024-09-14 00:10:05 +02:00
return true
end
2024-06-18 13:07:30 +02:00
2024-06-26 22:56:21 +02:00
-- If we don't have an implementation of get_node_boxes, we can't check for sub-node space
if not minetest.get_node_boxes then return false end
2024-06-27 02:24:55 +02:00
-- Check if it's possible for a sub-node space check to succeed
2024-09-14 03:24:34 +02:00
local needed_in_bottom_section = dx * ( dy - 1 ) * dz
2024-06-27 02:24:55 +02:00
if n < needed_in_bottom_section then return false end
2024-06-18 13:07:30 +02:00
-- Make sure the entire volume except for the top level is free before checking the top layer
if dy > 1 then
2024-06-27 02:18:53 +02:00
-- Remove nodes in the top layer from the count
for i = 1 , # found_nodes do
if found_nodes [ i ] . y == p2.y then
n = n - 1
end
end
-- If the entire volume except the top layer isn't air (or nodes) then we can't spawn this mob here
2024-06-27 02:24:55 +02:00
if n < needed_in_bottom_section then return false end
2022-10-13 21:13:21 +02:00
end
2024-06-18 13:07:30 +02:00
-- Check the top layer to see if we have enough space to spawn in
local top_layer_height = 1
local processed = { }
for x = p1.x , p2.x do
for z = p1.z , p2.z do
2024-06-24 15:53:20 +02:00
local test_pos = vector.new ( x , p2.y , z )
local node = minetest.get_node ( test_pos ) or { name = " ignore " }
local cache_name = string.format ( " %s-%d " , node.name , node.param2 )
if not processed [ cache_name ] then
-- Calculate node bounding box and select the lowest y value
local boxes = minetest.get_node_boxes ( " collision_box " , test_pos , node )
for i = 1 , # boxes do
local box = boxes [ i ]
local y_test = box [ 2 ] + 0.5
if y_test < top_layer_height then top_layer_height = y_test end
local y_test = box [ 5 ] + 0.5
if y_test < top_layer_height then top_layer_height = y_test end
end
2024-06-18 13:07:30 +02:00
end
end
end
if top_layer_height + dy - 1 >= cb_height then return true end
-- We don't have room
return false
2022-10-13 21:13:21 +02:00
end
2024-04-01 17:40:14 +02:00
mcl_mobs.custom_biomecheck = nil
2023-01-26 14:44:29 +01:00
2024-04-01 17:40:14 +02:00
function mcl_mobs . register_custom_biomecheck ( custom_biomecheck )
mcl_mobs.custom_biomecheck = custom_biomecheck
end
local function get_biome_name ( pos )
2024-08-22 16:28:34 +02:00
if mcl_mobs.custom_biomecheck then return mcl_mobs.custom_biomecheck ( pos ) end
local gotten_biome = minetest.get_biome_data ( pos )
return gotten_biome and mt_get_biome_name ( gotten_biome.biome )
2024-04-01 17:40:14 +02:00
end
2023-01-26 14:44:29 +01:00
2023-01-26 16:20:38 +01:00
local function spawn_check ( pos , spawn_def )
2023-03-16 20:32:43 +01:00
if not spawn_def or not pos then return end
2022-08-29 20:59:17 +02:00
dbg_spawn_attempts = dbg_spawn_attempts + 1
2024-07-04 12:37:12 +02:00
2022-08-29 20:59:17 +02:00
local dimension = mcl_worlds.pos_to_dimension ( pos )
2024-07-04 12:37:12 +02:00
if spawn_def.dimension ~= dimension then return end -- wrong dimension
-- find ground node below spawn position
2024-08-22 16:28:34 +02:00
local node_name = get_node ( pos ) . name
local node_def = registered_nodes [ node_name ]
if node_def and not node_def.groups . solid then -- try node one below instead
2022-08-29 20:59:17 +02:00
pos.y = pos.y - 1
2024-08-22 16:28:34 +02:00
node_name = get_node ( pos ) . name
node_def = registered_nodes [ node_name ]
2022-08-29 20:59:17 +02:00
end
2024-08-22 16:28:34 +02:00
if not node_def or not node_def.groups then return end
-- do not spawn on bedrock
if node_name == " mcl_core:bedrock " then return end
2022-08-29 20:59:17 +02:00
pos.y = pos.y + 1
2024-07-04 12:37:12 +02:00
-- check spawn height
if pos.y < spawn_def.min_height or pos.y > spawn_def.max_height then return end
mcl_log ( " spawn_check#1 position checks passed " )
-- do not spawn ground mobs on leaves
2024-08-22 16:28:34 +02:00
if spawn_def.type_of_spawning == " ground " and ( not node_def.groups . solid or node_def.groups . leaves ) then return end
2024-07-04 12:37:12 +02:00
-- water mobs only on water
2024-09-13 11:14:51 +02:00
if spawn_def.type_of_spawning == " water " and not node_def.groups . water then return end
2024-07-04 12:37:12 +02:00
-- lava mobs only on lava
2024-09-13 11:14:51 +02:00
if spawn_def.type_of_spawning == " lava " and not node_def.groups . lava then return end
2024-08-22 16:28:34 +02:00
-- farm animals on grass only
2024-09-13 11:14:51 +02:00
if is_farm_animal ( spawn_def.name ) and not node_def.groups . grass_block then return end
2024-07-04 12:37:12 +02:00
---- More expensive calls:
-- check the biome
2024-09-13 17:47:08 +02:00
if spawn_def.biomes and not biome_check ( spawn_def.biomes , get_biome_name ( pos ) ) then return end
2024-07-04 12:37:12 +02:00
-- check if there is enough room
local mob_def = minetest.registered_entities [ spawn_def.name ]
if not has_room ( mob_def , pos ) then return end
-- additional checks (slime etc.)
if spawn_def.check_position and not spawn_def.check_position ( pos ) then return end
if spawn_protected and minetest.is_protected ( pos , " " ) then return end
mcl_log ( " spawn_check#2 advanced checks passed " )
-- check light thresholds
local gotten_light = get_node_light ( pos )
-- old lighting
if not modern_lighting then return gotten_light >= spawn_def.min_light and gotten_light <= spawn_def.max_light end
local sky_light = minetest.get_natural_light ( pos )
local art_light = minetest.get_artificial_light ( get_node ( pos ) . param1 )
if mob_def.spawn_check then
return mob_def.spawn_check ( pos , gotten_light , art_light , sky_light )
end
if mob_def.type == " monster " then
if dimension == " nether " then
if art_light <= nether_threshold then
return true
end
elseif dimension == " end " then
if art_light <= end_threshold then
return true
end
elseif dimension == " overworld " then
if art_light <= overworld_threshold and sky_light <= overworld_sky_threshold then
return true
2023-03-16 20:32:43 +01:00
end
2022-08-29 20:59:17 +02:00
end
2024-07-04 12:37:12 +02:00
return false
2022-08-29 20:59:17 +02:00
end
2024-07-04 12:37:12 +02:00
-- passive threshold is apparently the same in all dimensions ...
2024-09-13 11:14:51 +02:00
return gotten_light > overworld_passive_threshold
2022-08-29 20:59:17 +02:00
end
2022-07-17 03:45:41 +02:00
2022-09-09 23:31:02 +02:00
function mcl_mobs . spawn ( pos , id )
2024-09-13 17:47:08 +02:00
if not pos or not id then return false end
2022-09-09 23:31:02 +02:00
local def = minetest.registered_entities [ id ] or minetest.registered_entities [ " mobs_mc: " .. id ] or minetest.registered_entities [ " extra_mobs: " .. id ]
2024-09-13 17:47:08 +02:00
if not def or not def.is_mob or ( def.can_spawn and not def.can_spawn ( pos ) ) then return false end
2024-09-14 00:10:05 +02:00
if not has_room ( def , pos ) then return false end
Adjust bones, animations slightly from b3d data.
Initialize bones on spawn.
Note: to obatin bone values, try in Blender
"%.3f, %.3f, %.3f" % tuple((bpy.context.object.pose.bones["head.control"].head - bpy.context.object.pose.bones["head.control"].tail) * Vector((1,-1,1)))
or
"{0:.3f}, {1:.3f}, {2:.3f}".format(*(bpy.context.object.pose.bones["head.control"].head - bpy.context.object.pose.bones["head.control"].tail) @ bpy.context.object.pose.bones["head.control"].matrix * Vector((1,-1,1)))
2024-11-19 21:48:21 +01:00
local ent = minetest.add_entity ( pos , def.name )
-- initialize head bone
if def.head_swivel and def.head_bone_position then
if ent and ent.get_bone_override then -- minetest >= 5.9
ent : set_bone_override ( def.head_swivel , {
position = { vec = def.head_bone_position , absolute = true } ,
rotation = { vec = vector.zero ( ) , absolute = true }
} )
else -- minetest < 5.9
self.object : set_bone_position ( def.head_swivel , def.head_bone_position , vector.zero )
end
end
return ent
2022-09-09 23:31:02 +02:00
end
2023-01-26 04:57:36 +01:00
local function spawn_group ( p , mob , spawn_on , amount_to_spawn )
2022-07-17 05:42:45 +02:00
local nn = minetest.find_nodes_in_area_under_air ( vector.offset ( p , - 5 , - 3 , - 5 ) , vector.offset ( p , 5 , 3 , 5 ) , spawn_on )
2022-07-17 02:20:12 +02:00
local o
2022-08-29 20:59:17 +02:00
table.shuffle ( nn )
2022-07-10 12:16:19 +02:00
if not nn or # nn < 1 then
nn = { }
table.insert ( nn , p )
end
2023-01-26 04:57:36 +01:00
for i = 1 , amount_to_spawn do
2022-07-17 05:42:45 +02:00
local sp = vector.offset ( nn [ math.random ( # nn ) ] , 0 , 1 , 0 )
2023-01-26 16:20:38 +01:00
if spawn_check ( nn [ math.random ( # nn ) ] , mob ) then
2022-08-29 20:59:17 +02:00
if mob.type_of_spawning == " water " then
sp = get_water_spawn ( sp )
end
2022-09-09 22:41:04 +02:00
o = mcl_mobs.spawn ( sp , mob.name )
2022-08-29 20:59:17 +02:00
if o then dbg_spawn_succ = dbg_spawn_succ + 1 end
2022-07-17 05:42:45 +02:00
end
2022-07-05 12:55:14 +02:00
end
2022-07-17 02:20:12 +02:00
return o
2022-07-05 12:55:14 +02:00
end
2022-09-09 23:31:02 +02:00
mcl_mobs.spawn_group = spawn_group
2022-08-01 05:35:47 +02:00
2022-10-12 01:21:15 +02:00
local S = minetest.get_translator ( " mcl_mobs " )
2022-08-01 05:35:47 +02:00
minetest.register_chatcommand ( " spawn_mob " , {
privs = { debug = true } ,
2022-12-22 03:13:26 +01:00
description = S ( " spawn_mob is a chatcommand that allows you to type in the name of a mob without 'typing mobs_mc:' all the time like so; 'spawn_mob spider'. however, there is more you can do with this special command, currently you can edit any number, boolean, and string variable you choose with this format: spawn_mob 'any_mob:var<mobs_variable=variable_value>:'. any_mob being your mob of choice, mobs_variable being the variable, and variable value being the value of the chosen variable. and example of this format: \n spawn_mob skeleton:var<passive=true>: \n this would spawn a skeleton that wouldn't attack you. REMEMBER-THIS> when changing a number value always prefix it with 'NUM', example: \n spawn_mob skeleton:var<jump_height=NUM10>: \n this setting the skelly's jump height to 10. if you want to make multiple changes to a mob, you can, example: \n spawn_mob skeleton:var<passive=true>::var<jump_height=NUM10>::var<fly_in=air>::var<fly=true>: \n etc. " ) ,
2022-08-01 05:35:47 +02:00
func = function ( n , param )
local pos = minetest.get_player_by_name ( n ) : get_pos ( )
2022-10-12 01:21:15 +02:00
local modifiers = { }
for capture in string.gmatch ( param , " %:(.-)%: " ) do
table.insert ( modifiers , " : " .. capture )
end
local mod1 = string.find ( param , " : " )
local mobname = param
if mod1 then
mobname = string.sub ( param , 1 , mod1 - 1 )
end
local mob = mcl_mobs.spawn ( pos , mobname )
2022-12-22 03:13:26 +01:00
if mob then
for c = 1 , # modifiers do
modifs = modifiers [ c ]
2022-10-12 01:21:15 +02:00
2022-12-22 03:13:26 +01:00
local mod1 = string.find ( modifs , " : " )
local mod_start = string.find ( modifs , " < " )
local mod_vals = string.find ( modifs , " = " )
local mod_end = string.find ( modifs , " > " )
2022-10-12 01:21:15 +02:00
local mob_entity = mob : get_luaentity ( )
if string.sub ( modifs , mod1 + 1 , mod1 + 3 ) == " var " then
if mod1 and mod_start and mod_vals and mod_end then
local variable = string.sub ( modifs , mod_start + 1 , mod_vals - 1 )
local value = string.sub ( modifs , mod_vals + 1 , mod_end - 1 )
number_tag = string.find ( value , " NUM " )
if number_tag then
value = tonumber ( string.sub ( value , 4 , - 1 ) )
end
if value == " true " then
value = true
elseif value == " false " then
value = false
end
if not mob_entity [ variable ] then
minetest.log ( " warning " , n .. " mob variable " .. variable .. " previously unset " )
end
mob_entity [ variable ] = value
else
minetest.log ( " warning " , n .. " couldn't modify " .. mobname .. " at " .. minetest.pos_to_string ( pos ) .. " , missing paramaters " )
end
else
minetest.log ( " warning " , n .. " couldn't modify " .. mobname .. " at " .. minetest.pos_to_string ( pos ) .. " , missing modification type " )
end
end
minetest.log ( " action " , n .. " spawned " .. mobname .. " at " .. minetest.pos_to_string ( pos ) )
2022-12-22 03:13:26 +01:00
return true , mobname .. " spawned at " .. minetest.pos_to_string ( pos )
else
return false , " Couldn't spawn " .. mobname
2022-08-01 05:35:47 +02:00
end
end
} )
2021-04-10 23:54:40 +02:00
if mobs_spawn then
Merge NEW MOBS by @jordan4ibanez from `mineclone5` branch
commit cd472337985d6e885eef019185f0965d13148e7f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 22:02:20 2021 -0400
Fix rabbit rotation
commit 0f4628db09d68f69a997f98dcd462f29e7ecbe06
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 20:48:42 2021 -0400
Bring mob spawning variable to the top of the spawning.lua file so it's easier to find
commit ddb33acf0d85f29dddb8bdab7a3a7030f9f595be
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 20:46:45 2021 -0400
Add in unused head code elements
commit e52aab45c07c22605993126c4a8ba39c8318d904
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 20:23:46 2021 -0400
Implement no-op head operations for enderman
commit ac852309388e1f9a7dec294440975c7dc89e498c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 20:08:45 2021 -0400
Add in chicken head code with additional pitch modifier
commit f57c4709ac74d1e2b0b683bebc706a1a3e59db73
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 19:54:11 2021 -0400
Comment out code that causes mobs to glitch push players in mcl_playerplus
commit b6c9a1c423a9831cb3684e6a7e1b57163d6d4ab4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 19:51:11 2021 -0400
Fix creeper head
commit a8152760b96ca3a9f142b006d2d888da0ebeff6a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 19:44:15 2021 -0400
Integrate more switches into internal api elements of head code
commit 6a38198e97fd0b573b3b9e590177977d900d5b14
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 18:24:10 2021 -0400
Add in swap_y_with_x and reverse_head_yaw to flesh out head code api element
commit d28e81bc9fc1f11b10da524d6874e8e1ee4a956d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 17:54:14 2021 -0400
Add in mobs look pitch
commit 5a2773ea1abb6c8706c477802aae2fa60704714c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 17:48:41 2021 -0400
Add in basics of head code yaw
commit 555935ff3d35d4ac28dad42f5facac0bbfe9b1c9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 16:43:23 2021 -0400
Implement basic fall damage
commit 7e3b69348e405425712cf8196907a913be10b62e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 16:11:45 2021 -0400
Add secondary existence check after main logic has been executed to prevent future crashes
commit c898e1e4db3b866ddc4ff391ff89798397775fbf
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 15:59:00 2021 -0400
Update sheep.lua
commit 9b5c9dc8ae9d1221340d1c72e4f48f3212a07fb7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 04:31:48 2021 -0400
Make farmable mobs/food mobs a lot less rare
commit 5e6653ff651a65e6bfc4057cb5de39f09e9b9cca
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 04:19:02 2021 -0400
Implement mob cramming
commit 1616cb7538141cd38485b4bf59a7b8b049ddd3f0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 04:09:35 2021 -0400
Fix nametags
commit a3ff108cd4b71cd823518eae0186cbf1d819267e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 04:03:06 2021 -0400
Make mobs walk up stairs/slabs properly, yet not glitch out when jumping over solid nodes
commit df364eed286fced64f3c4bff897fcfe91a9dd540
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 01:45:35 2021 -0400
Implement basics of head movement and fix walking mobs flying away after floating
commit bac191293bc23405bfc02ef0795f0296fdaeb95a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 01:45:03 2021 -0400
Fix clientside guessing making floating go crazy client side
commit b7c7c2627beba086c922df0a20939b67ae1eb464
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 01:44:46 2021 -0400
Fix parrots not drowning
commit 38c22f277db652226ce9911e8bffbb8e8b8bc398
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 01:24:19 2021 -0400
Add pop sound when baby mob is born
commit f83ccdb2ed5974486a030196f9b31d0490dcdff3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 01:22:43 2021 -0400
Add in breeding and feeding baby mob sounds
commit 7733e05a120cb07ed37c351956c1f451da3658b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 01:14:48 2021 -0400
Add in random sounds/hurt/death sounds and stop mobs from reviving on server restart again
commit 0a380265c888c64386406187b34914438cdff161
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 00:16:54 2021 -0400
Fix dead-alive mobs and add in hurt/die sound
commit 8d3eff0c16abeff9fbce2f9d4af2b64931765696
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 25 00:06:12 2021 -0400
Enable mob drowning
commit 56086bf02be689ba83ba3ccf4858429ad4d6a10b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 23:33:46 2021 -0400
Fix villager
commit 079811984cd952714e6cf85297c91830c0790a1d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 23:29:56 2021 -0400
Make every mob besides spiders get slowed down by cobwebs like players
commit 7e8e63b0e37300b16a4556aa45758d737514316e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 23:15:40 2021 -0400
If mob is in daylight and ignites_in_daylight = true, make mob burn
commit 49b01dca4fcea165314c1548f6c3e673a5de0bd3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 22:28:26 2021 -0400
Make mobs drop xp on death
commit 3d5cceab76768e360e3ea958c71bcf79e9cc2eec
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 22:21:58 2021 -0400
Fix ghast strange behavior in the nether
commit a73e5b57c02275a37b98dc9c80cf35a8c782d9f7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 22:14:25 2021 -0400
Make pitch movement for fly/swim mobs more dynamic and make ghasts randomly fly around when attacking
commit b401b50c045830386c1c06c22be2232bda3e5b61
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 21:15:42 2021 -0400
Give mobs 6 seconds of memory to prevent strange behavior when player hides behind something
commit 807fb6966d747550da276b264e8e3bf376b332ab
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 20:27:37 2021 -0400
Make spiders climb up walls, fix problems with mob following freaking out when under, fix spider collisionbox
commit 11b5684a90a7779986b5685d899a55a606922a0f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 20:05:14 2021 -0400
Remove wolf-dog shift click breeding, and implement better logic
commit 41bfaae370729b7409d5dea2cc65a6f5c83979ac
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 20:02:59 2021 -0400
Allow putting chest on carpeted llama by owner, enable swapping carpets
commit 8c855f5b0955ebce15a1aaf4c17e407b5cad7ae8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 19:29:37 2021 -0400
Add in llama carpets
commit e0185a93113136862b24ad06bea75f1b2e24901f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 18:43:17 2021 -0400
Fix pig logic issue
commit c2cb15a47f75674afaac721217384c8d7ead1c57
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 18:36:22 2021 -0400
Fix horse breeding
commit 39f7d0cf3cc7d33d786761376a035a31e434434f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 18:18:53 2021 -0400
Update api.txt
commit 3e9bbca91400e0f587aef13df1ece7d8071b188a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 18:06:24 2021 -0400
Fix enderman crashing
commit 81713a342d8038c2b51140dbd4bc00f1440b73e8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:38:50 2021 -0400
Allow tamed wolves to be shift click bred
commit a27e6731cd97a1e41861d8a2acbdd4d2d530c220
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:29:30 2021 -0400
Make sheep breedable
commit efce97c1723ac25e9dabdfd9572781a6d50f0821
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:27:17 2021 -0400
Make llamas shift click breedable
commit 53c96cae2d28c3a6f4642b8a6d5b72365d32267d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:26:45 2021 -0400
Make pigs shift click breedable
commit dbe712bc17cc875c5e9b4b1a919880b0f6893ea1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:23:33 2021 -0400
Make llama breedable
commit 0d4d85bac6b3412a2fec3f01ebc5b3ff6c294173
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:19:41 2021 -0400
Fix horse literally blinding you following you
commit 6f2e2ab4c57fe651dd90b4897e4f10673da1de3a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:17:22 2021 -0400
Make chicken breedable
commit 3649e5f6f50c917e3c29bbd0b95327e3667ae1ef
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:17:09 2021 -0400
Make horse breedable
commit 2dab0773dffd40cb166c8a14ad79035ac898d4dc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 24 00:00:21 2021 -0400
Remove unused breedable api call
commit 0568c14a435e663dccc1a42ae999a76d0936f153
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 23:59:35 2021 -0400
Fix timer and make mooshroom breedable
commit 531253008a13559cdab63f420e9d35c78b382c95
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 23:56:59 2021 -0400
Complete mob breeding, make cows breedable
commit 79cb6ddc4923ea8a009b2810efe785cf3720c63f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 22:35:35 2021 -0400
Fix lua locals in environment.lua
commit 6eb3eef21561ddf2091682f3703fa9a23e35915e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 22:34:40 2021 -0400
Fix typo in function
commit c37a82d4a2589d372f88b5101918858c2d210e57
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 22:03:29 2021 -0400
Add comments
commit ed9d629b99a9f873cebfa8e45239271a81a8025c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 21:59:42 2021 -0400
Add in mob following for cows
commit fcfd6b9d19bbc1e894b8dafed490e04102c87878
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 21:14:23 2021 -0400
Set up basics for breeding mechanics
commit 5ee6cf6c9b3b9da36830c8a58f105d289dfbe54c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 19:49:35 2021 -0400
Implement mob despawner/mob limiter
commit 19c8dd1dd48532bfb07eac133cd11b702ad74de7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 18:41:41 2021 -0400
Stop hostile mobs from falling through water when stunned
commit 31ded5e40fc97a7afd252fd74154183afaf1f568
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 18:34:20 2021 -0400
Re-implement neutral mob switch
commit 13c321e8f2c8cb43460093852d44ddae7edec0c1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 18:03:01 2021 -0400
Re-enable mob spawning
commit ea6912c980952bed2a0b5e62009e0a2639d75d75
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:44:49 2021 -0400
Don't do knockback effect for mobs when hurt by a rider
commit 8dafac50a865f189074272303b83f37391c11c3c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:37:20 2021 -0400
Make mobs run away slightly faster
commit 3560bda4a5a8be026c5d50eb8ddeca9ed45e0b8e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:29:23 2021 -0400
Remove unused code and variables from mob punch
commit 9720986c4d30bf8fcd2cf1117d80eea06da5332a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:27:08 2021 -0400
Fix punching a mob breaking it's velocity
commit dc7592528cf948556e4e925310e830648b52dff1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:23:00 2021 -0400
Add red tint hurt effect
commit 304cbed447adbcccff246f242d18d51fc010df35
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:12:02 2021 -0400
Make mobs that should be skittish, skittish
commit af4c42fea7112ada76fd9b273f771611532bdcf9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 17:10:44 2021 -0400
Add skittish behavior (runaway from punch) and fix ocelot
commit 8daf197fb899a0bee8f61aad4ccedec1108f5f92
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:52:07 2021 -0400
Fix iron golem rotation
commit c138050e0b877f5dc987959efe4acbe17ffd86f2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:45:12 2021 -0400
Make iron golem neutral and protective, fix rotation
commit 36d5af1d15b432d84e24e161b78d4b41ce2731bd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:35:16 2021 -0400
Stop dead mobs from getting in the way of fighting other mobs
commit 73b4d3c1d2c74cb5bd5bb23604ce1d74e183cb0d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:31:13 2021 -0400
stop projectile mobs from being completely disabled while stunned
commit eb7ae5e10e731fc949a9a4184e02a39103f83a1e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:28:30 2021 -0400
Fix random crash
commit c831da2c02253450df965930cbfcd539b820f3b9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:22:34 2021 -0400
Fix mobs not making hit sound when hit by node
commit d5a38fef58c1862490c9f32238ec83cf1a2c2d5c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:19:37 2021 -0400
Add in new mob punched sounds
commit 8e7ce5a72ae3e7cedf985a414c64ca259bcd6136
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 16:04:01 2021 -0400
Add in a visual for horse taming (hearts)
commit 189c0ad157a8871d51045effcded0662aff7b1af
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 15:53:01 2021 -0400
Half finish horse (riding logic, etc)
commit f64f8e31e3ba8e7a14b22d084be5ef584895242d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 14:50:38 2021 -0400
Fix llama blaze and ghast projectile sprites
commit 58bee2a2dd1b4d6d3d1873d3ac566be9e0aa7930
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 14:43:00 2021 -0400
Fix projectile tails clipping through sprite
commit 16cc7e37d2fc83e50d4e2c380cef05224dbbed38
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 14:34:59 2021 -0400
Randomize projectile cooldown timer
commit 8eb9ba12cef918cb116aea8eaea5a1e757123b01
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 14:33:40 2021 -0400
Fix crash when mob collides with nil entity
commit 5d59583583462563f7d65747a198b0d6d8ed34fc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 14:10:12 2021 -0400
Massive overhaul to projectile mobs with custom projectile function, make llamas spit
commit f6fa90096dfdb9d21b6f52968daa60943a07470e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 13:35:30 2021 -0400
Fix enderman teleport attack
commit 4fb9e69e41a8c2ee91c659acb0b11fc76a6a97fe
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 13:27:17 2021 -0400
Make enderman become hostile when stared at, freeze when attacking when stared at
commit 99f13f84b563c1962c285b2e9973aec8a5d079d7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 13:13:23 2021 -0400
Half-fix enderman
commit dd76b15c501a1a458f2fa112b29784e26c3140bd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 13:06:57 2021 -0400
Make ghasts not insta-kill
commit b6f19699e9059a382421f55ac9ee5b642e7751a6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 13:06:17 2021 -0400
Make enderdragon half work
commit 4efec1ef58ba4afe4692a22a361079b5026a7de3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 23 12:55:11 2021 -0400
Add in chicken slow falling
commit 08956664073078fd896add1e57ff0a524de2a32f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 23:36:58 2021 -0400
Fix random crash with mixed mob ally data types
commit 408296140a4fe0c785f5fb4760899fdb3851fe00
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 23:30:32 2021 -0400
Fix and overhaul wolves
commit aac1e1933677d119b52c25a64b3ee6c77e16e770
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 23:18:33 2021 -0400
Implement rotation locking when standing, fix rotation unlock/lock for fly/swim mobs
commit fa059b5df245e81d71d73bbc87b51c59cd47a876
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 22:59:03 2021 -0400
Fix ghast's eyeheight
commit 2e3e92e39337e5c4ecba13855f134af1bd672ae6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 22:58:32 2021 -0400
Fix ghast's insane difficulty
commit 11bcf3aa34e85dcc19142258ca2c4abaf963b806
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 22:51:13 2021 -0400
Add attributes to epCode
commit 2099be43ea25740a402587f40b3004f6ef2d8c1d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 22:50:14 2021 -0400
Update to epCode's fixed version of ghast model
commit 5037ec3736a564157408df12699c91df17c934b6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 22:40:16 2021 -0400
Fix ghasts horrible collisionbox
commit 0a8fff65249610aba7fef7e9675bf28469265f29
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 22:08:54 2021 -0400
Add in mob criticals when falling
commit afdcada1fd6f7c8cbe68b0fd1486d6d92f3d12f7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 21:46:13 2021 -0400
Fix endermite
commit 5d876725c599b060c5150b0508f21b6a83001f9a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 21:45:00 2021 -0400
Fix bats
commit ef0d52a2df9a3d2d2c1e59b12084017c405bc398
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 21:41:54 2021 -0400
Update backup_code_api.lua
commit 8142f7e51214672292d3bffe3fa8119eb8a1cf1c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 21:36:42 2021 -0400
Add in mob death
commit ebf27866ca3bb02c726d4729c0666ee28e20a3dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 21:12:08 2021 -0400
Fix typo and error in animation.lua
commit 3fe8d2d3c59ca6c173817a9d2d6b48e3549acd57
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 20:30:50 2021 -0400
Add file death_logic.lua
commit b73ab976a1115044bc336f9e3f181ecf6e75cc06
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 20:25:58 2021 -0400
Implement framework for mob death
commit 8530e6ee368f510581c618666613432f25266ce5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 20:20:56 2021 -0400
Make mob punching time based
commit e1812b2cdba132afec9ed6cdc45ee9f078806264
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 20:12:02 2021 -0400
Reset pause timer to 0
commit 991bba0a1d611cf545020c9129fdcbc4806e73c6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 20:10:01 2021 -0400
Add comments into ai.lua
commit f9a7144b658f747be895bb6a8b69c8a0124fdd2a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 20:07:30 2021 -0400
Implement ability to hurt mobs
commit 45790c0be0eec380e281a687a1ff03ea1f114143
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 19:12:02 2021 -0400
Re-enable mob punching (broken)
commit 31a791c33b19d76350993d844747a0c51a77382c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 18:20:58 2021 -0400
Undo debug.txt spam from mob spawning
commit d0d128c1d8f84e8de590e34adfe0265556ccd3e1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 18:18:57 2021 -0400
Break infinite loop if unable to find any mob to spawn
commit ee905642c2cdfaa3be3eb5c2af7ec75599ffd41e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 17:56:38 2021 -0400
Add temporary warning debug to spawning algorithm output
commit 2cef9e7cca2e70e544eb3068a0e3e36487cab669
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 00:39:32 2021 -0400
Optimize mob spawning even further with additional lua locals
commit edb1939649c62a2b486e1c04c5af27458f978388
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 00:27:35 2021 -0400
Fix mob_counter in mob spawning limiter
commit 7c1adeab459d452ac016108b588957082c1347c1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 22 00:20:57 2021 -0400
Hyper-optimize mob spawning
commit fbe3ccc5c05b5d5141737d3a73df3e4d14a33a33
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 23:28:38 2021 -0400
Delete current state of things comment
commit 5e15af260bed13b07b295f558f5cb05bedaa7eae
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 23:25:19 2021 -0400
Fix pig rotation
commit 6aa636449211b1bbec1297723281f72b4c76c4da
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 23:25:10 2021 -0400
Fix sheep rotation
commit 29305f548db88b0b895ec747ebfbc092c51c4762
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 15:08:35 2021 -0400
Overhaul arrow register, implement basic blaze, break parts of arrow register for now, remove fallback for detecting players
commit 08c90c34e83c498ee2cc883a2cad9b98a269a850
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 13:05:46 2021 -0400
Make parrots and squids work with tilt fly/swim
commit 91099c3be93689c2569f838a63e75e38ca382162
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 13:01:14 2021 -0400
Fix auto-true statement for tilt fly/swim
commit 71c34823bc87b0892d4450b877fb1c78cd6ad416
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 12:56:36 2021 -0400
Make tilt flying/swimming dynamic
commit 20886f54bb8887fb88ce0e0e0c6f28a789868740
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 12:48:23 2021 -0400
Make shooty mobs jump
commit ebd995fbd2eb089a37b659e9ae87c86562e3ed69
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 12:45:02 2021 -0400
Simplify skeleton arrow damage calculation
commit c9f71d66f52f2e80fea6cd01fcb2db30ae399c39
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 12:42:34 2021 -0400
Implement skeletons/strays
commit 99e808296b81f37a9e01d4b4beb02120526bb4e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 12:17:51 2021 -0400
Add missing skeleton/stray run animation
commit 74094938bb0918df12ffa778c95b966d7bd6c9f3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 12:10:29 2021 -0400
Fix crash with non-punch attack mobs in collision
commit 6bd279255c7e4b5623afa39caae8f988127f7ac3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 11:50:22 2021 -0400
Fully implement zombie pigmen
commit 964ce9ccf7101aef387bdd5ec2213ba4ac361a51
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 11:42:01 2021 -0400
Temporarily disable spawn eggs from setting owner
commit 5062d56a5d89346234f6125848799f32915b31a4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 11:00:02 2021 -0400
Implement neutral mob mechanics and partial implement of zombie pigmen
commit b0b1ec9436776fdc89edaf3046499a9e2cfaed0f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 10:53:20 2021 -0400
Implement zombie pigmen and make them turn hostile when punched
commit f1dc2864425bab2eed2f5bec7b7ccd0307145b1f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 10:23:51 2021 -0400
Dump mob_punch from backup_code_api.lua back into interaction.lua
commit cc2a0ae52cefc388d18c9d106ef70fc0718f5e40
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 10:21:11 2021 -0400
Complete charged creeper
commit 486959515ca13ba0d5756ba5d930ff43e9d135b5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 21 10:20:31 2021 -0400
Make creepers even more dangerous
commit 576621169b468f317cf32d6d0be391252a033d3a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 23:26:18 2021 -0400
Make creepers and zombies even harder
commit 2c87bd19f3c6a4a5a1a3b88a45cd673ecccb838b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 23:14:53 2021 -0400
Overhaul zombie villager
commit 1ed3377559c4690fa19488f526bcaf97d5ff94b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 23:11:18 2021 -0400
Add punch mobs knockback to players when hit
commit 8c9356a18cb60cd28691e3782723df763b75a1fa
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 22:58:39 2021 -0400
Implement eye_height and viewing range for hostile mobs, along with making punchy mobs jump over nodes
commit a05ebd7cc29c96b622dbc043529513b07d5cf47b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 22:44:34 2021 -0400
Add informative text art
commit 60ac3058ce1e3e05caa87c18bdf95c78a71ed750
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 22:42:51 2021 -0400
Make zombies more difficult
commit 751c4c2d995a011a3298d374c77b9c4567ed2fa1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 22:41:13 2021 -0400
Integrate mob punching into collision detection
commit 6b52b945165a8501e09ca70c18514049df194c05
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 22:30:34 2021 -0400
Start setting up hostile punch attack type
commit d371d6fdc9cb85e140399eafb89f15195f72d09f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 22:04:54 2021 -0400
Adjust creeper explosion settings
commit fabd4d64e6745b9ea8c4bb1a76c190c2d66576be
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 21:35:19 2021 -0400
Slow down creeper type mobs explosion buildup
commit bf367fffd054fe180dbc6d7f46e20e286d68bb09
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 21:34:18 2021 -0400
Add in sound_handling and make explosion type mobs make their attack sound before explosion animation
commit 0b763f54b55ea47b7889816612759447bfb50422
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 21:00:36 2021 -0400
Finish creeper movement ai and move jump_check into environment
commit cd6f07537f64bdbe7573642982ec24ac3fb19ec1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 20:43:45 2021 -0400
Make creepers even more deadly
commit 9678b556e17b124f841b0019b3a31880a415bd11
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 20:33:30 2021 -0400
Fix crashes when trying to collision detect a removed mob
commit cdb840609dc2586b31a1e44c8c1004379ef37979
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 20:19:55 2021 -0400
Add in creeper basic prototype
commit 008d670ed9006d918b1ed1698a5b644de27191b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 17:10:51 2021 -0400
Remove wandering from ai
commit 491ef6c8f818e43ef0545963eb27b5476c95ea28
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 16:48:20 2021 -0400
Add in auto mob removal if something goes horribly wrong
commit 348df0fcecc2709fe088493d5665112827f08129
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 16:46:10 2021 -0400
Rename detect_players_in_area to detect_closest_player_within_radius
commit ac08c6991c0ce7f9bb8d9de5880ec64a7882c3e7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 16:39:05 2021 -0400
Add in detect_players_in_area
commit 3d776138e97b904c9b299119ae9b9a8a2811ae7a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 20 14:55:22 2021 -0400
Start implementing creeper ai
commit 85e531bf106df326b2ca470b5a94aeb06f92d4d6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 18 21:24:31 2021 -0400
Remove unneeded mobs:protect from code
commit 4d589dfb2aa10cb664b4d3b3471960e6d648b92c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 18 21:22:39 2021 -0400
Remove literally unneeded mobs:capture_mob
commit 39985aa558d9f43a6a2e82fb6d59ad0ca8b6324d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 18 21:22:21 2021 -0400
Up fallback max xp to 3
commit 1920ddf91530a7c033c8288cd3a752f3ee7ba850
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 18 21:02:03 2021 -0400
Change all enemy attack info to more workable and understandable attacks
commit 719bb2a3c96ca020f8f828959e377831f47cd27b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 18:21:33 2021 -0400
Add in prototype jump-only mobs api
commit db87b8e0a37cd15ef7931a76d21bbb190a158205
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 17:09:57 2021 -0400
fix chicken rotation
commit e2987245fd6c6ee75383ea92da30e9fc5e10ad1e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 17:00:34 2021 -0400
Balance out collision forces for mobs
commit 3cf263d292f9fc5a7a18fafa2aa1fbc8e1840a0a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 16:23:38 2021 -0400
Add in dynamic pitch in flying/swimming mobs
commit 5ade34115cff228994ff3fd680aa15c8225ab6e7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 13:17:29 2021 -0400
Remove random state initialization in set_up.lua
commit d9729fc8651d06566e61bcfcb2e7df0484f25f48
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 13:13:45 2021 -0400
Fix parrot's rotation
commit 58d9670e777c3798c676924023375a2579450142
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 13:11:39 2021 -0400
Remove collisionbox addition for y position for fly mobs
commit a20f272e08f0170b2761eeba2a12aeaf88efad7b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 13:05:53 2021 -0400
re-adjust logic gate for mobs floating in water and lava
commit 0794bc54372c6aaa9c653693da3a18194adf5c95
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 13:04:55 2021 -0400
Make flying mobs float in water and lava
commit 8783912938aed1f5566f3e2f5056213f0cefe4a6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:48:57 2021 -0400
Add in mobs api swimming animation
commit f2e909ab8d182febabbdacd9de50a65f27137761
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:41:14 2021 -0400
Add in fly logic gate
commit 07841c89632626f1c3bb4790f8db0c2adddfb2eb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:38:48 2021 -0400
Swap name of quick_rotate_45 to quick_rotate
commit 240d6ea21155f2044d3b728a210811821540013a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:37:04 2021 -0400
Add note about quick_rotate_45 actually rotating 11.25 degrees
commit e8148f81ab7641554096bc03ecda8927d9ad9491
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:36:19 2021 -0400
Make underwater mobs try to continuously swim around with quick_rotate_45
commit 061602d9d46d4e4607e407c064070709ef99f9b7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:28:07 2021 -0400
Overhaul separation of swimming and flying for ease of use with writing mobs api
commit 5365dec19a8a088263916a3686f27859be51e870
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sat Apr 17 12:01:27 2021 -0400
Adjust "flying" vector checks for mobs
commit dda7839d8c4c2292e9c8d6472faf38372654d886
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 21:43:02 2021 -0400
Add in prototype swimming
commit f1141aed9fa52bf57e8867fdb3ffb520793dab07
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 21:08:54 2021 -0400
Make mobs flop when outside of flying node
commit 84ca7681fc9ee3e9945488865678b2b82eb0a22d
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 20:47:16 2021 -0400
Make squids fly in water flowing and water source
commit 52c3db041e602ebd0861a0b86c55b35662c8c33a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 20:32:05 2021 -0400
Add in fly state prep for mobs
commit 6db4511dd5b038cd95c7ea196559bb25a53246e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 20:06:55 2021 -0400
Add notes
commit 15ea9c1c71f3e4d4dd24ce145d385f8457e4905e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 19:59:20 2021 -0400
Implement self walking velocity for walking state
commit 9d6d042ee325a010d97abdff7efc37f3dcf46b5e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 19:37:01 2021 -0400
Fix formatting in ai.lua
commit ce7f4918b061fa9a4d46045a389497cb0da1a5ee
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 19:35:19 2021 -0400
Re-organize comments
commit 05d06a4c8f0128ac5edd21b8096bb75553c1f89e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 18:36:23 2021 -0400
Add comment to state_execution
commit c761db86c7e67aab27d3806a76b7a58504a7d5c6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 18:29:42 2021 -0400
re-arrange mob logic for random wandering
commit ed456ecb47d788efe9aa526849110015e9c04e9a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 18:17:51 2021 -0400
Make mobs not fear cliffs if fear_height is 0
commit 8ca5f221ec9ce534e91f7094193b4ec951e743b1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 18:13:54 2021 -0400
clean up ai.lua
commit cadd53c103f4047069f581abdc033d2def4ed2dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 16:39:03 2021 -0400
Adjust mob jumping default to account for higher gravity
commit 57b293de2b02be81ff3e17e620807c653fe9b625
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 16:37:15 2021 -0400
Make mobs gravity equal to player's
commit fb9a55e562c3e4102fa4e02603f93d1c78e397ad
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 15:55:11 2021 -0400
Make jump_check more modular and allow mobs to turn if at a wall
commit a6a54b34140c279d7a9ff3db5b21f1be0ead15f8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 15:49:03 2021 -0400
Make mobs not jump if against a wall
commit 6c5393427f72c082a5c85514cb3b54aa4a9ce45f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 15:39:39 2021 -0400
Smooth out mob cliff check and check if falling before cliff check
commit 2486ffef11113a40b43a2548bde57e9cca186da9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 15:30:44 2021 -0400
Make wandering mobs avoid cliffs
commit adc683c6a7cd56c33bebc22ce1363671db4f4846
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 14:19:22 2021 -0400
Clear mob animation on activate
commit d0695e7929460728f7da2e01cc809cb343481e1a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 13:58:08 2021 -0400
Fix mob animation "memory leak"
commit 024cf46307abb6fefbfe8be04941205026561177
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 11:52:29 2021 -0400
Adjust spacing in animation.lua
commit f38492bcb031b7fcc2ee8299f66fcd3cd3a68398
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 11:50:29 2021 -0400
Re-implement animation check gate for mobs
commit a934a59f3b64e8adef64676daaf81b574a6ceecd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 11:50:13 2021 -0400
Implement mob random walk directions
commit 94ca7e8b89bd39144d85bc6a622778babb226d47
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 11:31:18 2021 -0400
Add in state switch and state execution for mobs
commit 626c30de6d4191cd4a18b0f11cb4805c425f9648
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 16 11:30:55 2021 -0400
Create todo.txt
commit c2bac87a6d03364193aedf67c780fdea9f545cac
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 21:46:33 2021 -0400
Update set_up.lua
commit 375d683d08266586d024491dcba2268c66583989
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 16:18:42 2021 -0400
Fix forgotten localization in collision.lua
commit 246bdf9707c98f787cb5264dc7ff638e340d768b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 15:55:10 2021 -0400
Implement basic mob walking animation test
commit d07d0ae31c0d39c526c8418e725b5dce1d120793
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 15:34:07 2021 -0400
Make mobs jump properly
commit 6cb6d714c9bcf55213a9449416bec37c0fe318af
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 15:04:55 2021 -0400
Reorganize all mob sections into multiple files
commit 5155d12d05c5b563a78923b3fc02a885cd23fe85
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 14:09:54 2021 -0400
Reformat mobs_mcl to api folder for ease of use
commit bbcfb3fdb171053e3142854f658860e7693f31d1
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 11:33:09 2021 -0400
Randomize walking or standing on spawn in
commit 9e4bf6e130195b4f2176658581ad17646a48ce3a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 11:29:18 2021 -0400
Move old set_yaw and add node on set_velocity
commit e53a193c4fe61e88e6501a2a863e22d533132ae4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 11:25:55 2021 -0400
Fix get_velocity (mobs internal)
commit 14207dd96aa60652c0ad1f4351441659c33d3ff6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 11:23:52 2021 -0400
Smooth out mob movement set_velocity more
commit a0ed1a0b2004baeb3d0f64c5eb02bbf0b21bf823
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 10:05:24 2021 -0400
Add automatic rotation lock
commit ba46e7fa42bbd25175d3505ca9699a11912d491f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 09:28:58 2021 -0400
Remove old debug of colliding with objects
commit 61124905f3d862d00f00674067003d8da7722405
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 15 09:28:22 2021 -0400
Add in mob auto rotation (implementation 1)
commit 8b200c7352cb9fdd01f1b073308acacd36b2672a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 14 19:38:14 2021 -0400
Add in basic movement rotation testing
commit 67259891a85e54f56dc543087bd98cfe12feb6f4
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 14 18:01:29 2021 -0400
Remove unneeded comments
commit d063db751c1657c367f2277b24a5aa51a8d90fa3
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 14 17:26:20 2021 -0400
Disable mcl_playerplus random check that moves players randomly
commit d4db27f0e1edd439f65821b814146a237ebea799
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 14 17:25:39 2021 -0400
Update backup_code_api.lua
commit 755533beeb6c708603096cce4f99bea558c8b6ce
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 14 11:50:22 2021 -0400
Disable literally everything in mobs api
commit 3f6312a631c6726c3bc4b09d9ec3e64b3ae810e5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 20:24:46 2021 -0400
Make mobs magnetic collision more jello-y
commit aa4d34c10e4bc367fc6ad7d898cd145d9f58ed0c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 20:00:38 2021 -0400
Improve mob to mob collision
commit 1210bc463adb949496fc521e3169fb88e49fc4e9
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 19:44:24 2021 -0400
prevent mob collision detection shootout
commit ed6026671381c99723eccbf2089d99748e19bfe2
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 19:17:48 2021 -0400
Gut even more elements of the api
commit 220d30df5f159d69be22663733feb1fbf51c45f8
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 19:13:29 2021 -0400
Completely gut do_states
commit 9758bbf2e7e382948b4ad1ab8c360519270fec14
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 08:21:04 2021 -0400
Finish gutting mob api
commit f29ad4b8b78689ed0d759c18178a6b2dbc9a1e25
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 08:20:11 2021 -0400
Reorganize more settings to the top of file
commit 54f5bee8a379bf910c1cc6ea3d33bd32b819f3dd
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 08:08:29 2021 -0400
reorganize load settings
commit 02515f0778bbe9cd962acc514b084c9dedf55074
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 08:07:32 2021 -0400
Move a large chunk of code to backup_code_api.lua
commit 3fc0184182f70be0c2fd9b3be1c5d78fa7f00503
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Tue Apr 13 07:39:57 2021 -0400
Disable entire mob ai to work on vanilla walking
commit 6fff719322ee250fc7c074d2362edbf0c4090406
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Mon Apr 12 08:47:07 2021 -0400
Localize minetest library
commit adaf74fc5c6354cf2fb1a9f784e5a37a4fb31caa
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Mon Apr 12 08:13:11 2021 -0400
Remove spacing and delete old collision comments
commit a564009e4aeda08372b80fb1a5fc2d16f5dfd364
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Mon Apr 12 08:11:55 2021 -0400
Change HORNY_TIMER to BREED_TIMER
commit 00759da39d621b36be6200fa365c51be86dbb99f
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 11 18:29:32 2021 -0400
Unlimit mob ai
commit 9aafc28a2009998017753d0aa4d013e3cd8795b6
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 11 14:47:56 2021 -0400
Fix mobs nil check during mob_step
commit 67c40885ef62b4e4e8dcaba3b65c58502c558f7e
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 11 14:21:19 2021 -0400
Fix mobs collision system only running during movement - major overhaul with ai disabled
commit 2456e3cd1ef6954415e4a771bb704a12364895eb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 11 12:52:31 2021 -0400
Adjust math localizations in api.lua
commit 725dc731ddc2a6f1cf1a20832e06883613d5974a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Sun Apr 11 11:58:33 2021 -0400
Adjust mob collision detection - this breaks a lot of things and will be fixed later
commit e15fd2f4b60fafcae3b765d345914032b4a52668
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Fri Apr 9 01:38:34 2021 -0400
Add lua locals into mcl_dungeons for performance
commit c937b2a97338097700cd3836811ce46366e88027
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 14:19:42 2021 -0400
test
commit 8c10fe4057d5a973d448e32addbc07617f9b8edc
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 12:48:02 2021 -0400
Adjust spawning to be closer and more frequent
commit bd7866d7983aae52aef426bc7a305ae166817ed7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 12:07:20 2021 -0400
Finish mob limiter
commit 9369c9cab8f25d5fa34fe0cdaeee4f9570db4551
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 10:01:15 2021 -0400
Fix spawn timer reset debug
commit 28823298e1536d4ce34d67ada624dcb5aaf377e0
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 10:00:04 2021 -0400
Fix forgotten biome check
commit 9d48549ec5901de887eb9fb2d75fd07f08edb39b
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 09:52:50 2021 -0400
Complete prototype of biome generated mobs
commit 518252679f642d00057889b462eb8c87b0992de7
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 08:42:57 2021 -0400
Fix a lot of things
commit bb078b0c4c48ac6932d2953561ac03bea3bde51a
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 08:33:50 2021 -0400
Fix silverfish typo
commit adab48ff0c95c2fad11e4d58824d635ae6945875
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 08:29:16 2021 -0400
Readjust mobs internal settings to not cause insane memory usage
commit 47c59edb511fde5db934fca519b9d8aa1fc68838
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 08:13:46 2021 -0400
Fix typo
commit 5ca30fa8eec24a1f9bee879bb49d3dfce82484fb
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 08:12:43 2021 -0400
Combine air and ground type spawning into ground
commit aacb8fc7b95013e42c832927088708b8c9889201
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 08:09:43 2021 -0400
Add in extra_mobs information
commit f900b24b53a802fd5db1bf1a633d7f89e42bcce5
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 07:39:18 2021 -0400
Add in all biome information to mobs
commit 0ad833c046095d83a789705aa15dd7f30fd8f3ed
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 06:57:24 2021 -0400
Add bats, chicken, and blaze spawn info
commit f4a6bdc6b89b2d605cfd06f0b7baa6170a19314c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 06:48:25 2021 -0400
Make reference list copy-pastable
commit bf4bf9a0cc60a1a15f1ddbfed314ec5a9c75561c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 06:10:07 2021 -0400
Ignore default or void dimensions
commit 8e1e02d1fbc189680dbd004bdd905446467a4e29
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 06:04:36 2021 -0400
Add biome list
commit da045c207d3bd5931e3cf73c5459b45d86596c12
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 8 02:07:15 2021 -0400
Refactor spawning into it's own file
commit 6ec66ef6f666007e411e23689e0d4eccd5a5fbfe
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 7 23:16:03 2021 -0400
Fix mobs colliding with other mobs/players
commit 6bd249547a888493af6c5cfc65d3e206e1467c19
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Wed Apr 7 23:07:04 2021 -0400
Fix mobs colliding with objects
commit c4d030d111ea6e21ca6343f76fb98b8aa9d29f6c
Author: jordan4ibanez <jordan4ibanez@users.noreply.github.com>
Date: Thu Apr 1 23:48:00 2021 -0400
Fix item drop on laggy servers
2021-04-29 02:11:33 +02:00
2023-01-07 21:37:29 +01:00
-- Get pos to spawn, x and z are randomised, y is range
2023-01-26 17:44:25 +01:00
2023-05-29 20:26:43 +02:00
local function mob_cap_space ( pos , mob_type , mob_counts_close , mob_counts_wide , cap_space_hostile , cap_space_non_hostile )
2023-01-26 04:57:36 +01:00
2023-01-31 16:55:11 +01:00
-- Some mob examples
--type = "monster", spawn_class = "hostile",
--type = "animal", spawn_class = "passive",
--local cod = { type = "animal", spawn_class = "water",
2023-01-26 16:20:38 +01:00
2023-01-26 17:44:25 +01:00
local type_cap = mob_cap [ mob_type ] or MISSING_CAP_DEFAULT
2023-01-26 16:20:38 +01:00
local close_zone_cap = MOBS_CAP_CLOSE
local mob_total_wide = mob_counts_wide [ mob_type ]
if not mob_total_wide then
2023-01-27 03:47:01 +01:00
--mcl_log("none of type found. set as 0")
2023-01-26 16:20:38 +01:00
mob_total_wide = 0
end
2024-07-31 02:30:29 +02:00
local cap_space_wide = math_max ( type_cap - mob_total_wide , 0 )
2023-05-29 20:26:43 +02:00
2023-05-29 21:08:44 +02:00
mcl_log ( " mob_type " , mob_type )
mcl_log ( " cap_space_wide " , cap_space_wide )
2023-05-29 20:26:43 +02:00
local cap_space_available = 0
if mob_type == " hostile " then
mcl_log ( " cap_space_global " , cap_space_hostile )
2024-07-31 02:30:29 +02:00
cap_space_available = math_min ( cap_space_hostile , cap_space_wide )
2023-05-29 20:26:43 +02:00
else
mcl_log ( " cap_space_global " , cap_space_non_hostile )
2024-07-31 02:30:29 +02:00
cap_space_available = math_min ( cap_space_non_hostile , cap_space_wide )
2023-01-26 16:20:38 +01:00
end
local mob_total_close = mob_counts_close [ mob_type ]
if not mob_total_close then
2023-01-27 03:47:01 +01:00
--mcl_log("none of type found. set as 0")
2023-01-26 16:20:38 +01:00
mob_total_close = 0
end
2024-07-31 02:30:29 +02:00
local cap_space_close = math_max ( close_zone_cap - mob_total_close , 0 )
cap_space_available = math_min ( cap_space_available , cap_space_close )
2023-01-26 16:20:38 +01:00
2023-05-29 21:08:44 +02:00
mcl_log ( " cap_space_close " , cap_space_close )
mcl_log ( " cap_space_available " , cap_space_available )
2023-01-31 16:55:11 +01:00
2023-01-31 00:10:37 +01:00
if false and mob_type == " water " then
2023-01-29 00:48:48 +01:00
mcl_log ( " mob_type: " .. mob_type .. " and pos: " .. minetest.pos_to_string ( pos ) )
mcl_log ( " wide: " .. mob_total_wide .. " / " .. type_cap )
mcl_log ( " cap_space_wide: " .. cap_space_wide )
mcl_log ( " close: " .. mob_total_close .. " / " .. close_zone_cap )
mcl_log ( " cap_space_close: " .. cap_space_close )
end
2023-01-28 03:31:41 +01:00
2023-05-29 20:26:43 +02:00
return cap_space_available
2023-01-26 04:57:36 +01:00
end
2023-01-07 21:37:29 +01:00
2023-01-28 01:14:08 +01:00
local function find_spawning_position ( pos , max_times )
local spawning_position
2024-03-17 20:23:06 +01:00
local max_loops = max_times or 1
2023-01-31 00:10:37 +01:00
2023-05-29 20:26:43 +02:00
--mcl_log("mapgen_limit: " .. SPAWN_MAPGEN_LIMIT)
2024-03-17 20:23:06 +01:00
while max_loops > 0 do
local spawning_position = get_next_mob_spawn_pos ( pos )
2024-03-17 21:33:35 +01:00
if spawning_position then return spawning_position end
2024-03-17 20:23:06 +01:00
max_loops = max_loops - 1
2023-01-31 00:10:37 +01:00
2024-03-17 20:23:06 +01:00
end
return nil
2023-01-27 04:50:00 +01:00
end
2022-04-15 11:48:58 +02:00
2023-11-23 00:11:13 +01:00
local cumulative_chance = nil
local mob_library_worker_table = nil
local function initialize_spawn_data ( )
if not mob_library_worker_table then
mob_library_worker_table = table_copy ( spawn_dictionary )
end
if not cumulative_chance then
cumulative_chance = 0
for k , v in pairs ( mob_library_worker_table ) do
cumulative_chance = cumulative_chance + v.chance
end
end
end
2023-05-29 20:26:43 +02:00
local function spawn_a_mob ( pos , cap_space_hostile , cap_space_non_hostile )
2023-01-27 04:50:00 +01:00
2023-01-28 01:14:08 +01:00
local spawning_position = find_spawning_position ( pos , FIND_SPAWN_POS_RETRIES )
2023-01-27 04:50:00 +01:00
if not spawning_position then
2023-01-31 19:04:01 +01:00
minetest.log ( " action " , " [Mobs spawn] Cannot find a valid spawn position after retries: " .. FIND_SPAWN_POS_RETRIES )
2023-01-27 04:50:00 +01:00
return
end
2023-01-26 04:57:36 +01:00
2023-01-29 00:48:48 +01:00
local mob_counts_close , mob_counts_wide , total_mobs = count_mobs_all ( " spawn_class " , spawning_position )
2023-02-09 21:43:46 +01:00
--output_mob_stats(mob_counts_close, total_mobs)
--output_mob_stats(mob_counts_wide)
2023-01-26 04:57:36 +01:00
2023-01-27 04:50:00 +01:00
--grab mob that fits into the spawning location
2023-12-01 15:50:07 +01:00
--use random weighted choice with replacement to grab a mob, don't exclude any possibilities
--shuffle table once every loop to provide equal inclusion probability to all mobs
--repeat grabbing a mob to maintain existing spawn rates
2023-11-23 00:11:13 +01:00
local spawn_loop_counter = # mob_library_worker_table
2023-01-27 04:50:00 +01:00
2023-11-23 00:11:13 +01:00
while spawn_loop_counter > 0 do
table.shuffle ( mob_library_worker_table )
local mob_chance_offset = math_random ( 1 , cumulative_chance )
2022-04-15 11:48:58 +02:00
local mob_index = 1
local mob_chance = mob_library_worker_table [ mob_index ] . chance
local step_chance = mob_chance
while step_chance < mob_chance_offset do
mob_index = mob_index + 1
2023-11-23 00:11:13 +01:00
if mob_index <= # mob_library_worker_table then
mob_chance = mob_library_worker_table [ mob_index ] . chance
step_chance = step_chance + mob_chance
else
2023-12-01 15:42:57 +01:00
break
2023-11-23 00:11:13 +01:00
end
end
2022-10-13 06:26:51 +02:00
--minetest.log(mob_def.name.." "..step_chance.. " "..mob_chance)
2023-01-27 04:50:00 +01:00
local mob_def = mob_library_worker_table [ mob_index ]
2022-11-13 15:57:14 +01:00
if mob_def and mob_def.name and minetest.registered_entities [ mob_def.name ] then
2023-01-27 04:50:00 +01:00
local mob_def_ent = minetest.registered_entities [ mob_def.name ]
2023-05-29 20:26:43 +02:00
local mob_spawn_class = mob_def_ent.spawn_class
2023-01-29 00:48:48 +01:00
2023-05-29 20:26:43 +02:00
local cap_space_available = mob_cap_space ( spawning_position , mob_spawn_class , mob_counts_close , mob_counts_wide , cap_space_hostile , cap_space_non_hostile )
2023-01-29 00:48:48 +01:00
2023-05-29 20:26:43 +02:00
if cap_space_available > 0 then
2023-01-31 00:10:37 +01:00
--mcl_log("Cap space available")
2023-01-29 00:48:48 +01:00
2023-01-30 02:31:58 +01:00
-- Spawn caps for animals and water creatures fill up rapidly. Need to throttle this somewhat
-- for performance and for early game challenge. We don't want to reduce hostiles though.
local spawn_hostile = ( mob_spawn_class == " hostile " )
2023-01-31 19:04:01 +01:00
local spawn_passive = ( mob_spawn_class ~= " hostile " ) and math.random ( 100 ) < peaceful_percentage_spawned
2023-05-29 20:26:43 +02:00
2023-01-31 00:10:37 +01:00
--mcl_log("Spawn_passive: " .. tostring(spawn_passive))
--mcl_log("Spawn_hostile: " .. tostring(spawn_hostile))
2023-01-30 02:31:58 +01:00
if ( spawn_hostile or spawn_passive ) and spawn_check ( spawning_position , mob_def ) then
2023-01-29 00:48:48 +01:00
if mob_def.type_of_spawning == " water " then
spawning_position = get_water_spawn ( spawning_position )
if not spawning_position then
minetest.log ( " warning " , " [mcl_mobs] no water spawn for mob " .. mob_def.name .. " found at " .. minetest.pos_to_string ( vector.round ( pos ) ) )
return
end
end
if mob_def_ent.can_spawn and not mob_def_ent.can_spawn ( spawning_position ) then
minetest.log ( " warning " , " [mcl_mobs] mob " .. mob_def.name .. " refused to spawn at " .. minetest.pos_to_string ( vector.round ( spawning_position ) ) )
2022-11-13 15:57:14 +01:00
return
end
2023-01-26 04:57:36 +01:00
2023-01-29 00:48:48 +01:00
--everything is correct, spawn mob
local spawn_in_group = mob_def_ent.spawn_in_group or 4
2023-01-27 04:50:00 +01:00
2023-01-31 16:55:11 +01:00
local spawn_group_hostile = ( mob_spawn_class == " hostile " ) and ( math.random ( 100 ) < hostile_group_percentage_spawned )
local spawn_group_passive = ( mob_spawn_class ~= " hostile " ) and ( math.random ( 100 ) < peaceful_group_percentage_spawned )
mcl_log ( " spawn_group_hostile: " .. tostring ( spawn_group_hostile ) )
mcl_log ( " spawn_group_passive: " .. tostring ( spawn_group_passive ) )
2023-01-29 00:48:48 +01:00
local spawned
2023-01-31 16:55:11 +01:00
if spawn_in_group and ( spawn_group_hostile or spawn_group_passive ) then
2023-01-29 00:48:48 +01:00
local group_min = mob_def_ent.spawn_in_group_min or 1
if not group_min then group_min = 1 end
2023-01-26 04:57:36 +01:00
2023-05-29 20:26:43 +02:00
local amount_to_spawn = math.random ( group_min , spawn_in_group )
mcl_log ( " Spawning quantity: " .. amount_to_spawn )
2024-07-31 02:30:29 +02:00
amount_to_spawn = math_min ( amount_to_spawn , cap_space_available )
2023-05-29 20:26:43 +02:00
mcl_log ( " throttled spawning quantity: " .. amount_to_spawn )
2023-01-26 04:57:36 +01:00
2023-01-29 00:48:48 +01:00
if logging then
minetest.log ( " action " , " [mcl_mobs] A group of " .. amount_to_spawn .. " " .. mob_def.name .. " mob spawns on " .. minetest.get_node ( vector.offset ( spawning_position , 0 , - 1 , 0 ) ) . name .. " at " .. minetest.pos_to_string ( spawning_position , 1 ) )
end
spawned = spawn_group ( spawning_position , mob_def , { minetest.get_node ( vector.offset ( spawning_position , 0 , - 1 , 0 ) ) . name } , amount_to_spawn )
else
if logging then
minetest.log ( " action " , " [mcl_mobs] Mob " .. mob_def.name .. " spawns on " .. minetest.get_node ( vector.offset ( spawning_position , 0 , - 1 , 0 ) ) . name .. " at " .. minetest.pos_to_string ( spawning_position , 1 ) )
end
spawned = mcl_mobs.spawn ( spawning_position , mob_def.name )
2022-11-13 15:57:14 +01:00
end
2023-01-27 04:50:00 +01:00
2023-01-29 00:48:48 +01:00
if spawned then
--mcl_log("We have spawned")
2023-05-29 20:26:43 +02:00
mob_counts_close , mob_counts_wide , total_mobs = count_mobs_all ( " spawn_class " , pos )
2023-02-09 21:43:46 +01:00
local new_spawning_position = find_spawning_position ( pos , FIND_SPAWN_POS_RETRIES_SUCCESS_RESPIN )
2023-01-29 00:48:48 +01:00
if new_spawning_position then
mcl_log ( " Setting new spawning position " )
spawning_position = new_spawning_position
else
mcl_log ( " Cannot set new spawning position " )
end
2023-01-27 05:08:38 +01:00
end
2023-01-29 00:48:48 +01:00
else
2023-03-16 21:22:52 +01:00
--mcl_log("Spawn check failed")
2022-07-05 12:55:14 +02:00
end
2023-01-29 00:48:48 +01:00
else
2023-05-29 20:26:43 +02:00
--mcl_log("Cap space full")
2022-10-13 06:26:51 +02:00
end
2023-01-26 04:57:36 +01:00
2022-04-15 11:48:58 +02:00
end
2023-11-23 00:11:13 +01:00
spawn_loop_counter = spawn_loop_counter - 1
2022-04-15 11:48:58 +02:00
end
end
2021-04-08 08:07:15 +02:00
2021-04-10 19:15:04 +02:00
2022-04-15 11:48:58 +02:00
--MAIN LOOP
2022-02-13 21:40:12 +01:00
2022-04-15 11:48:58 +02:00
local timer = 0
minetest.register_globalstep ( function ( dtime )
2023-01-27 04:50:00 +01:00
2022-04-15 11:48:58 +02:00
timer = timer + dtime
2023-01-26 04:57:36 +01:00
if timer < WAIT_FOR_SPAWN_ATTEMPT then return end
2023-11-23 00:11:13 +01:00
initialize_spawn_data ( )
2022-04-15 11:48:58 +02:00
timer = 0
2023-01-27 04:50:00 +01:00
2022-10-13 06:27:04 +02:00
local players = get_connected_players ( )
2023-05-29 20:26:43 +02:00
local total_mobs , total_non_hostile , total_hostile = count_mobs_total_cap ( )
2024-07-31 02:30:29 +02:00
local cap_space_hostile = math_max ( mob_cap.global_hostile - total_hostile , 0 )
local cap_space_non_hostile = math_max ( mob_cap.global_non_hostile - total_non_hostile , 0 )
2023-05-29 20:26:43 +02:00
mcl_log ( " global cap_space_hostile " , cap_space_hostile )
mcl_log ( " global cap_space_non_hostile " , cap_space_non_hostile )
2022-10-13 06:27:04 +02:00
if total_mobs > mob_cap.total or total_mobs > # players * mob_cap.player then
2022-10-13 21:14:44 +02:00
minetest.log ( " action " , " [mcl_mobs] global mob cap reached. no cycle spawning. " )
2022-10-13 06:27:04 +02:00
return
end --mob cap per player
2023-01-27 04:50:00 +01:00
2022-10-13 06:27:04 +02:00
for _ , player in pairs ( players ) do
2022-04-15 11:48:58 +02:00
local pos = player : get_pos ( )
local dimension = mcl_worlds.pos_to_dimension ( pos )
-- ignore void and unloaded area
if dimension ~= " void " and dimension ~= " default " then
2023-05-29 20:26:43 +02:00
spawn_a_mob ( pos , cap_space_hostile , cap_space_non_hostile )
2021-04-10 23:54:40 +02:00
end
end
end )
2021-04-08 12:48:25 +02:00
end
2022-08-29 20:59:17 +02:00
2023-05-04 22:14:16 +02:00
local function despawn_allowed ( self )
local nametag = self.nametag and self.nametag ~= " "
local not_busy = self.state ~= " attack " and self.following == nil
if self.can_despawn == true then
if not nametag and not_busy and not self.tamed == true and not self.persistent == true then
return true
end
end
return false
end
function mob_class : despawn_allowed ( )
despawn_allowed ( self )
end
assert ( despawn_allowed ( { can_despawn = false } ) == false , " despawn_allowed - can_despawn false failed " )
assert ( despawn_allowed ( { can_despawn = true } ) == true , " despawn_allowed - can_despawn true failed " )
assert ( despawn_allowed ( { can_despawn = true , nametag = " " } ) == true , " despawn_allowed - blank nametag failed " )
assert ( despawn_allowed ( { can_despawn = true , nametag = nil } ) == true , " despawn_allowed - nil nametag failed " )
assert ( despawn_allowed ( { can_despawn = true , nametag = " bob " } ) == false , " despawn_allowed - nametag failed " )
assert ( despawn_allowed ( { can_despawn = true , state = " attack " } ) == false , " despawn_allowed - attack state failed " )
assert ( despawn_allowed ( { can_despawn = true , following = " blah " } ) == false , " despawn_allowed - following state failed " )
assert ( despawn_allowed ( { can_despawn = true , tamed = false } ) == true , " despawn_allowed - not tamed " )
assert ( despawn_allowed ( { can_despawn = true , tamed = true } ) == false , " despawn_allowed - tamed " )
assert ( despawn_allowed ( { can_despawn = true , persistent = true } ) == false , " despawn_allowed - persistent " )
assert ( despawn_allowed ( { can_despawn = true , persistent = false } ) == true , " despawn_allowed - not persistent " )
2023-01-07 00:39:56 +01:00
function mob_class : check_despawn ( pos , dtime )
self.lifetimer = self.lifetimer - dtime
2022-11-11 00:21:47 +01:00
-- Despawning: when lifetimer expires, remove mob
2023-05-04 22:14:16 +02:00
if remove_far and despawn_allowed ( self ) then
2022-11-11 00:21:47 +01:00
if self.despawn_immediately or self.lifetimer <= 0 then
2022-11-11 17:28:45 +01:00
if logging then
2022-11-11 00:21:47 +01:00
minetest.log ( " action " , " [mcl_mobs] Mob " .. self.name .. " despawns at " .. minetest.pos_to_string ( pos , 1 ) .. " lifetimer ran out " )
end
mcl_burning.extinguish ( self.object )
self.object : remove ( )
return true
elseif self.lifetimer <= 10 then
if math.random ( 10 ) < 4 then
self.despawn_immediately = true
else
self.lifetimer = 20
end
end
end
end
2022-08-29 20:59:17 +02:00
minetest.register_chatcommand ( " mobstats " , {
privs = { debug = true } ,
func = function ( n , param )
local pos = minetest.get_player_by_name ( n ) : get_pos ( )
2023-02-09 21:43:46 +01:00
minetest.chat_send_player ( n , " mobs: within 32 radius of player/total loaded : " .. count_mobs ( pos , MOB_CAP_INNER_RADIUS ) .. " / " .. count_mobs_total ( ) )
minetest.chat_send_player ( n , " spawning attempts since server start: " .. dbg_spawn_succ .. " / " .. dbg_spawn_attempts )
2023-01-07 21:37:29 +01:00
2023-01-26 16:25:59 +01:00
local mob_counts_close , mob_counts_wide , total_mobs = count_mobs_all ( " name " ) -- Can use "type"
2023-02-09 21:43:46 +01:00
output_mob_stats ( mob_counts_wide , total_mobs , true )
2022-08-29 20:59:17 +02:00
end
} )