diff --git a/mods/rp_mobs_mobs/init.lua b/mods/rp_mobs_mobs/init.lua index 777090fb..d9d48bfa 100644 --- a/mods/rp_mobs_mobs/init.lua +++ b/mods/rp_mobs_mobs/init.lua @@ -13,6 +13,8 @@ dofile(minetest.get_modpath("rp_mobs_mobs").."/sheep.lua") dofile(minetest.get_modpath("rp_mobs_mobs").."/skunk.lua") -- Monsters (TODO) +dofile(minetest.get_modpath("rp_mobs_mobs").."/walker.lua") +dofile(minetest.get_modpath("rp_mobs_mobs").."/mineturtle.lua") -- Dummy mob used only for testing dofile(minetest.get_modpath("rp_mobs_mobs").."/dummy.lua") diff --git a/mods/rp_mobs_mobs/mineturtle.lua b/mods/rp_mobs_mobs/mineturtle.lua new file mode 100644 index 00000000..72cfaad2 --- /dev/null +++ b/mods/rp_mobs_mobs/mineturtle.lua @@ -0,0 +1,94 @@ +-- Mine Turtle + +-- TODO: Change to rp_mobs_mobs when ready +local S = minetest.get_translator("mobs") + +-- Boar constants + +local VIEW_RANGE = 10 + +local task_queue_roam_settings = { + walk_speed = 2, + liquid_rise_speed = 2, + jump_strength = 5, + fall_height = 4, + walk_duration_min = 3000, + walk_duration_max = 4000, + find_land_duration_min = 7000, + find_land_duration_max = 10000, + find_safe_land_duration_min = 1000, + find_safe_land_duration_max = 1100, + idle_duration_min = 500, + idle_duration_max = 2000, + find_land_length = 20, + view_range = VIEW_RANGE, + follow_reach_distance = 1, + follow_give_up_time = 10.0, + no_follow_time = 6.0, +} + +rp_mobs.register_mob("rp_mobs_mobs:mineturtle", { + description = S("Mine Turtle"), + is_animal = false, + is_peaceful = false, + drops = { + {name = "rp_tnt:tnt", chance = 1, min = 1, max = 3}, + }, + default_sounds = { + war_cry = "mobs_mineturtle", + random = "mobs_mineturtle", + explode = "tnt_explode", + distance = 16, + }, + animations = { + ["idle"] = { frame_range = { x = 0, y = 30 }, default_frame_speed = 25 }, + ["dead_static"] = { frame_range = { x = 0, y = 0 } }, + ["walk"] = { frame_range = { x = 31, y = 50 }, default_frame_speed = 25 }, + ["run"] = { frame_range = { x = 31, y = 50 }, default_frame_speed = 35 }, + ["punch"] = { frame_range = { x = 51, y = 60 }, default_frame_speed = 25 }, + }, + front_body_point = vector.new(0, -0.4, 0.5), + entity_definition = { + initial_properties = { + hp_max = 15, + physical = true, + collisionbox = {-0.4, 0, -0.4, 0.4, 0.7, 0.4}, + selectionbox = {-0.4, 0, -0.5, 0.4, 0.7, 0.8, rotate=true}, + visual = "mesh", + mesh = "mobs_mineturtle.x", + textures = { "mobs_mineturtle.png" }, + makes_footstep_sound = true, + stepheight = 0.6, + }, + on_activate = function(self, staticdata) + rp_mobs.init_mob(self) + rp_mobs.restore_state(self, staticdata) + + rp_mobs.init_fall_damage(self, true) + rp_mobs.init_breath(self, true, { + breath_max = 20, + drowning_point = vector.new(0, -0.1, 0.49) + }) + + rp_mobs.init_tasks(self) + rp_mobs.add_task_queue(self, rp_mobs_mobs.task_queue_land_animal_roam(task_queue_roam_settings)) + rp_mobs.add_task_queue(self, rp_mobs_mobs.task_queue_follow_scan(VIEW_RANGE, {})) + end, + get_staticdata = rp_mobs.get_staticdata_default, + on_step = function(self, dtime, moveresult) + rp_mobs.handle_dying(self, dtime) + rp_mobs.scan_environment(self, dtime) + rp_mobs.handle_environment_damage(self, dtime, moveresult) + rp_mobs.handle_tasks(self, dtime, moveresult) + end, + on_death = function(self, killer) + if killer and killer:is_player() then + achievements.trigger_achievement(killer, "bomb_has_been_defused") + end + return rp_mobs.on_death_default(self, killer) + end, + on_punch = rp_mobs.on_punch_default, + }, +}) + +rp_mobs.register_mob_item("rp_mobs_mobs:mineturtle", "mobs_mineturtle_inventory.png") diff --git a/mods/rp_mobs_mobs/walker.lua b/mods/rp_mobs_mobs/walker.lua new file mode 100644 index 00000000..cf9320a8 --- /dev/null +++ b/mods/rp_mobs_mobs/walker.lua @@ -0,0 +1,93 @@ +-- Walker + +-- TODO: Change to rp_mobs_mobs when ready +local S = minetest.get_translator("mobs") + +-- Boar constants + +local VIEW_RANGE = 14 + +local task_queue_roam_settings = { + walk_speed = 1, + liquid_rise_speed = 2, + jump_strength = 5, + fall_height = 4, + walk_duration_min = 10000, + walk_duration_max = 20000, + find_land_duration_min = 7000, + find_land_duration_max = 10000, + find_safe_land_duration_min = 1000, + find_safe_land_duration_max = 1100, + idle_duration_min = 500, + idle_duration_max = 6000, + find_land_length = 20, + view_range = VIEW_RANGE, + follow_reach_distance = 1, + follow_give_up_time = 10.0, + no_follow_time = 6.0, +} + +rp_mobs.register_mob("rp_mobs_mobs:walker", { + description = S("Walker"), + is_animal = false, + is_peaceful = false, + drops = { + { + name = "rp_default:stick", + chance = 1, min = 1, max = 2 + }, + { + name = "rp_default:stick", + chance = 3, min = 2, max = 4 + }, + { + name = "rp_default:fiber", + chance = 15, min = 2, max = 3 + }, + }, + default_sounds = { + attack = "mobs_swing", + }, + animations = { + ["idle"] = { frame_range = { x = 0, y = 24 }, default_frame_speed = 20 }, + ["dead_static"] = { frame_range = { x = 42, y = 42 } }, + ["walk"] = { frame_range = { x = 35, y = 45 }, default_frame_speed = 6 }, + ["run"] = { frame_range = { x = 35, y = 45 }, default_frame_speed = 15 }, + ["punch"] = { frame_range = { x = 25, y = 34 }, default_frame_speed = 20 }, + }, + front_body_point = vector.new(0, -0.4, 0.5), + entity_definition = { + initial_properties = { + hp_max = 16, + physical = true, + collisionbox = {-0.3, 0, -0.3, 0.3, 1.5, 0.3}, + selectionbox = {-0.3, 0, -0.3, 0.3, 1.5, 0.3, rotate=true}, + visual = "mesh", + mesh = "mobs_walker.b3d", + textures = { "mobs_walker.png" }, + makes_footstep_sound = true, + stepheight = 0.6, + }, + on_activate = function(self, staticdata) + rp_mobs.init_mob(self) + rp_mobs.restore_state(self, staticdata) + + rp_mobs.init_fall_damage(self, true) + + rp_mobs.init_tasks(self) + rp_mobs.add_task_queue(self, rp_mobs_mobs.task_queue_land_animal_roam(task_queue_roam_settings)) + rp_mobs.add_task_queue(self, rp_mobs_mobs.task_queue_follow_scan(VIEW_RANGE, {})) + end, + get_staticdata = rp_mobs.get_staticdata_default, + on_step = function(self, dtime, moveresult) + rp_mobs.handle_dying(self, dtime) + rp_mobs.scan_environment(self, dtime) + rp_mobs.handle_environment_damage(self, dtime, moveresult) + rp_mobs.handle_tasks(self, dtime, moveresult) + end, + on_death = rp_mobs.on_death_default, + on_punch = rp_mobs.on_punch_default, + }, +}) + +rp_mobs.register_mob_item("rp_mobs_mobs:walker", "mobs_walker_inventory.png") diff --git a/mods/rp_mobs_mobs_spawn/init.lua b/mods/rp_mobs_mobs_spawn/init.lua index 9d27a902..023f0750 100644 --- a/mods/rp_mobs_mobs_spawn/init.lua +++ b/mods/rp_mobs_mobs_spawn/init.lua @@ -37,7 +37,6 @@ rp_mobs_spawn.register_spawn("rp_mobs_mobs:skunk", { }) ---[[ TODO -- Mine Turtle rp_mobs_spawn.register_spawn("rp_mobs_mobs:mineturtle", { nodes = { "rp_default:dirt_with_grass" }, @@ -59,4 +58,4 @@ rp_mobs_spawn.register_spawn("rp_mobs_mobs:walker", { active_object_limit = 1, active_object_limit_wider = 1, }) -]] +