44 lines
1.0 KiB
Lua
44 lines
1.0 KiB
Lua
|
local math, vector, minetest, mcl_mobs = math, vector, minetest, mcl_mobs
|
||
|
local mob_class = mcl_mobs.mob_class
|
||
|
-- play sound
|
||
|
function mob_class:mob_sound(soundname, is_opinion, fixed_pitch)
|
||
|
|
||
|
local soundinfo
|
||
|
if self.sounds_child and self.child then
|
||
|
soundinfo = self.sounds_child
|
||
|
elseif self.sounds then
|
||
|
soundinfo = self.sounds
|
||
|
end
|
||
|
if not soundinfo then
|
||
|
return
|
||
|
end
|
||
|
local sound = soundinfo[soundname]
|
||
|
if sound then
|
||
|
if is_opinion and self.opinion_sound_cooloff > 0 then
|
||
|
return
|
||
|
end
|
||
|
local pitch
|
||
|
if not fixed_pitch then
|
||
|
local base_pitch = soundinfo.base_pitch
|
||
|
if not base_pitch then
|
||
|
base_pitch = 1
|
||
|
end
|
||
|
if self.child and (not self.sounds_child) then
|
||
|
-- Children have higher pitch
|
||
|
pitch = base_pitch * 1.5
|
||
|
else
|
||
|
pitch = base_pitch
|
||
|
end
|
||
|
-- randomize the pitch a bit
|
||
|
pitch = pitch + math.random(-10, 10) * 0.005
|
||
|
end
|
||
|
minetest.sound_play(sound, {
|
||
|
object = self.object,
|
||
|
gain = 1.0,
|
||
|
max_hear_distance = self.sounds.distance,
|
||
|
pitch = pitch,
|
||
|
}, true)
|
||
|
self.opinion_sound_cooloff = 1
|
||
|
end
|
||
|
end
|