Add basic mob sounds

This commit is contained in:
Wuzzy 2023-11-03 00:40:55 +01:00
parent 7218a285bc
commit 82c0d1961a
5 changed files with 67 additions and 15 deletions

View File

@ -75,6 +75,7 @@ rp_mobs.register_mob = function(mobname, def)
mdef.entity_definition._base_size = table.copy(def.entity_definition.visual_size or { x=1, y=1, z=1 }) mdef.entity_definition._base_size = table.copy(def.entity_definition.visual_size or { x=1, y=1, z=1 })
mdef.entity_definition._base_selbox = table.copy(def.entity_definition.selectionbox or { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, rotate = false }) mdef.entity_definition._base_selbox = table.copy(def.entity_definition.selectionbox or { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, rotate = false })
mdef.entity_definition._base_colbox = table.copy(def.entity_definition.collisionbox or { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5}) mdef.entity_definition._base_colbox = table.copy(def.entity_definition.collisionbox or { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5})
mdef.entity_definition._default_sounds = table.copy(def.default_sounds or {})
mdef.entity_definition._dying = false mdef.entity_definition._dying = false
rp_mobs.registered_mobs[mobname] = mdef rp_mobs.registered_mobs[mobname] = mdef
@ -151,6 +152,43 @@ end
rp_mobs.on_death_default = function(self, killer) rp_mobs.on_death_default = function(self, killer)
rp_mobs.drop_death_items(self) rp_mobs.drop_death_items(self)
rp_mobs.default_mob_sound(self, "death")
end
rp_mobs.on_punch_default = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage)
if damage >= 1 then
rp_mobs.default_mob_sound(self, "damage")
else
rp_mobs.default_mob_sound(self, "hit_no_damage")
end
end
rp_mobs.damage = function(self, damage, reason, no_sound)
if damage <= 0 then
return false
end
local hp = self.object:get_hp()
hp = math.max(0, hp - damage)
self.object:set_hp(hp, reason)
if hp <= 0 then
if not no_sound then
rp_mobs.mob_sound_default(self, "death")
end
self._dying = true
return true
else
if not no_sound then
rp_mobs.mob_sound_default(self, "damage")
end
end
return false
end
rp_mobs.heal = function(self, heal, reason)
local hp = self.object:get_hp()
local hp_max = self.object:get_properties().hp_max
hp = math.min(hp_max, hp + heal)
self.object:set_hp(hp, reason)
end end
rp_mobs.init_physics = function(self) rp_mobs.init_physics = function(self)
@ -370,7 +408,7 @@ end
function rp_mobs.mob_sound(self, sound, keep_pitch) function rp_mobs.mob_sound(self, sound, keep_pitch)
local pitch local pitch
if not keep_pitch then if not keep_pitch then
if self.child then if self._child then
pitch = 1.5 pitch = 1.5
else else
pitch = 1.0 pitch = 1.0
@ -383,3 +421,14 @@ function rp_mobs.mob_sound(self, sound, keep_pitch)
}, true) }, true)
end end
function rp_mobs.default_mob_sound(self, default_sound, keep_pitch)
local sound = self._default_sounds[default_sound]
if sound then
rp_mobs.mob_sound(self, sound, keep_pitch)
end
end
function rp_mobs.default_hurt_sound(self, keep_pitch)
rp_mobs.default_mob_sound(self, "damage", keep_pitch)
end

View File

@ -56,10 +56,7 @@ function rp_mobs.handle_node_damage(self, dtime)
self._node_damage_timer = self._node_damage_timer + dtime self._node_damage_timer = self._node_damage_timer + dtime
if self._node_damage_timer >= NODE_DAMAGE_TIME then if self._node_damage_timer >= NODE_DAMAGE_TIME then
if def and def.damage_per_second and def.damage_per_second > 0 then if def and def.damage_per_second and def.damage_per_second > 0 then
local hp = math.max(0, self.object:get_hp() - def.damage_per_second) if rp_mobs.damage(self, def.damage_per_second, { type = "node_damage" }) then
self.object:set_hp(hp, { type = "node_damage" })
if hp <= 0 then
self._dying = true
return return
end end
end end
@ -110,10 +107,7 @@ function rp_mobs.handle_drowning(self, dtime)
if self._drowning_timer >= DROWNING_TIME then if self._drowning_timer >= DROWNING_TIME then
self._breath = math.max(0, self._breath - 1) self._breath = math.max(0, self._breath - 1)
if self._breath <= 0 then if self._breath <= 0 then
local hp = math.max(0, self.object:get_hp() - def.drowning) if rp_mobs.damage(self, def.drowning, { type = "drown" }) then
self.object:set_hp(hp, { type = "drown" })
if hp <= 0 then
self._dying = true
return return
end end
end end
@ -181,10 +175,7 @@ function rp_mobs.handle_fall_damage(self, dtime, moveresult)
local damage_f = y_diff - FALL_DAMAGE_HEIGHT local damage_f = y_diff - FALL_DAMAGE_HEIGHT
local damage = math.floor(math.min(damage_f + 0.5, 65535)) local damage = math.floor(math.min(damage_f + 0.5, 65535))
if damage > 0 then if damage > 0 then
local hp = self.object:get_hp() - damage if rp_mobs.damage(self, damage, { type = "fall" }) then
self.object:set_hp(hp, { type = "fall" })
if hp <= 0 then
self._dying = true
return return
end end
end end

View File

@ -95,8 +95,8 @@ rp_mobs.feed_tame_breed = function(mob, feeder, allowed_foods, food_till_tamed,
end end
if eat_sound == nil then if eat_sound == nil then
rp_mobs.mob_sound(mob, "mobs_eat", true) rp_mobs.default_mob_sound(mob, "eat", true)
elseif eat_sound ~= false then else
rp_mobs.mob_sound(mob, eat_sound, true) rp_mobs.mob_sound(mob, eat_sound, true)
end end

View File

@ -28,6 +28,11 @@ rp_mobs.register_mob("rp_mobs_mobs:boar", {
rp_mobs.add_microtask_to_task(self, mt_sleep, task) rp_mobs.add_microtask_to_task(self, mt_sleep, task)
rp_mobs.add_task(self, task) rp_mobs.add_task(self, task)
end, end,
default_sounds = {
death = "mobs_boar_angry",
damage = "mobs_boar",
eat = "mobs_eat",
},
entity_definition = { entity_definition = {
hp_max = 20, hp_max = 20,
physical = true, physical = true,
@ -64,6 +69,7 @@ rp_mobs.register_mob("rp_mobs_mobs:boar", {
rp_mobs.attempt_capture(self, capturer, { ["rp_mobs:net"] = 5, ["rp_mobs:lasso"] = 40 }) rp_mobs.attempt_capture(self, capturer, { ["rp_mobs:net"] = 5, ["rp_mobs:lasso"] = 40 })
end, end,
on_death = rp_mobs.on_death_default, on_death = rp_mobs.on_death_default,
on_punch = rp_mobs.on_punch_default,
}, },
}) })

View File

@ -63,6 +63,11 @@ rp_mobs.register_mob("rp_mobs_mobs:sheep", {
local mtask = microtask_eat_grass local mtask = microtask_eat_grass
rp_mobs.add_microtask_to_task(self, mtask, task) rp_mobs.add_microtask_to_task(self, mtask, task)
end, end,
default_sounds = {
death = "mobs_sheep",
damage = "mobs_sheep",
eat = "mobs_eat",
},
entity_definition = { entity_definition = {
hp_max = 14, hp_max = 14,
physical = true, physical = true,
@ -168,6 +173,7 @@ rp_mobs.register_mob("rp_mobs_mobs:sheep", {
end, end,
on_death = rp_mobs.on_death_default, on_death = rp_mobs.on_death_default,
on_punch = rp_mobs.on_punch_default,
}, },
}) })