2021-04-08 15:52:50 +02:00
--lua locals
2024-05-31 04:36:16 +02:00
local S = minetest.get_translator ( " mcl_mobs " )
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
2024-05-31 04:36:16 +02:00
local gamerule_doMobSpawning = vl_tuning.setting ( " gamerule:doMobSpawning " , " bool " , {
description = S ( " Whether mobs should spawn naturally, or via global spawning logic, such as for cats, phantoms, patrols, wandering traders, or zombie sieges. Does not affect special spawning attempts, like monster spawners, raids, or iron golems. " ) , default = true
} )
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
2022-09-09 23:31:02 +02:00
return minetest.add_entity ( pos , def.name )
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
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 )
2024-05-31 04:36:16 +02:00
if not gamerule_doMobSpawning [ 1 ] then return end
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
} )