Mehr Mods hinzugefügt

This commit is contained in:
N-Nachtigal 2025-05-10 23:49:11 +02:00
parent 92a55732cf
commit 9e345a25fb
2805 changed files with 2096013 additions and 0 deletions

28
mods/ambience/README.md Normal file
View file

@ -0,0 +1,28 @@
Ambience Redo mod for Minetest
by TenPlus1
Based on Immersive Sounds .36 mod by Neuromancer and optimized to run on servers with new fire sounds added when Fire Redo mod is detected...
- 0.1 - Initial release
- 0.2 - Code change and new water sounds added
- 0.3 - Works with Fire Redo mod to provide fire sounds
- 0.4 - Code optimized
- 0.5 - Changed to kilbiths smaller sound files and removed canadianloon1, adjusted timings
- 0.6 - Using new find_nodes_in_area features to count nodes and speed up execution (thanks everamzah)
- 0.7 - Code tweaks and added Jungle sounds for day and night time
- 0.8 - Override default water sounds for 0.4.14 dev and above, add separate gain for each sound
- 0.9 - Plays music files on server or local client when found at midnight, files to be named "ambience_music.1.ogg" changing number each up to 9.
- 1.0 - Added icecrack sound when walking on snow/ice flows, also tidied code
- 1.1 - Using newer functions, Minetest 0.4.16 and above needed to run
- 1.2 - Added PlayerPlus compatibility, removed fire sounds, added volume changes
- 1.3 - Added API for use with other mods, code rewrite
- 1.4 - Re-ordered water sets to come before fire and lava, day/night sounds play when leaves around and above ground
- 1.5 - Added 'flame_sound' and fire redo check, code tidy and tweak, added ephemeral flag for background sounds.
- 1.6 - Finding env_sounds disables water and lava sets, added 'ambience_water_move' flag to override water walking sounds, use eye level for head node.
- 1.7 - Music will play every 20-30 minutes if found, use '/mvol 0' to stop playing music or disable in-game.
- 1.8 - Players can set induvidual volume for sound and music which is saved.
- 1.9 - Tidy code, refactor music playing, add biome name to sound_check.
- 2.0 - Add Mineclone support, add ethereal leaf check, remove minetest.after for custom timer, add Polish translation, tweak & tidy code.
- 2.1 - Add ambience.group_total() function for easy counting of group: nodes inside a set.
Code license: MIT

101
mods/ambience/api.txt Normal file
View file

@ -0,0 +1,101 @@
Ambience Lite API
=================
This short guide will show you how to add sound sets into ambience mod for the
api to use and play sounds accordingly. Please note that the order they are
added will affect sound checks, so high priority sets first.
Function Usage
==============
Adding Sound Set
----------------
ambience.add_set(set_name, def)
'set_name' contains the name of the sound set to add
'def' contains the following:
'frequency' how often the sound set is played (1 to 1000) higher is more
'nodes' contains a table of nodes needed for checks
'sound_check(def)' function to check if sounds can be played, def contains:
'player' player userdata
'pos' position of player
'tod' time of day
'totals' totals for each node e.g. def.totals["default:sand"]
'positions' position data for every node found
'head_node' name of node at player head level
'feet_node' nameof node at player foot level
'biome' name of biome at current position
This will let you add a set or sounds with the frequency it's used and check
function for it to play. If ephemeral is true then no handler will be used and sound will be played in background alongside other sounds.
e.g.
ambience.add_set("windy", {
frequency = 500,
nodes = {"default:sand"},
sounds = {
{name = "wind", length = 9, gain = 0.3},
{name = "desertwind", length = 8, gain = 0.3},
{name = "crow", length = 3, ephemeral = true},
},
sound_check = function(def)
local number = def.totals["default:sand"] or 0 -- yep, can also be nil
if number > 20 then
return "windy", 0.2 -- return set to play and optional gain volume
end
end
})
Counting group: nodes
---------------------
Instead of counting each node total for things like leaves within the sound_check function, you could use the following helper function to return their total instead e.g.
local number = ambience.group_totals(def.totals, "leaves") -- count all group:leaves
Getting Sound Set
-----------------
ambience.get_set(set_name)
This returns a table containing all of the set information like example above.
e.g.
local myset = ambience.get_set("windy") -- returns everything inside {} above.
Deleting Sound Set
------------------
ambience.del_set(set_name)
This will remove a sound set from the list.
e.g.
ambience.del_set("windy")
Additional Commands
===================
Two volume commands have been added to set sound and music volume:
/svol (0.1 to 1.0)
/mvol (0.1 to 1.0) -- 0 can be used to stop music curently playing
Music
=====
Music can be stored in the sounds folder either on server or locally and so long
as it is named 'ambience_music.1', 'ambience_music.2' etc. then it will select
a song randomly to play every 20 minutes.

367
mods/ambience/init.lua Normal file
View file

@ -0,0 +1,367 @@
-- global
ambience = {}
-- settings
local SOUNDVOLUME = 1.0
local MUSICVOLUME = 0.6
local MUSICINTERVAL = 60 * 20
local play_music = core.settings:get_bool("ambience_music") ~= false
local radius = 6
local playing = {} -- user settings, timers and current set playing
local sound_sets = {} -- all the sounds and their settings
local sound_set_order = {} -- needed because pairs loops randomly through tables
local set_nodes = {} -- all the nodes needed for sets
-- translation
local S = core.get_translator("ambience")
-- add set to list
function ambience.add_set(set_name, def)
if not set_name or not def then return end
sound_sets[set_name] = {
frequency = def.frequency or 50,
sounds = def.sounds,
sound_check = def.sound_check,
nodes = def.nodes
}
-- add set name to the sound_set_order table
local can_add = true
for i = 1, #sound_set_order do
if sound_set_order[i] == set_name then can_add = false end
end
if can_add then table.insert(sound_set_order, set_name) end
-- add any missing nodes to the set_nodes table
if def.nodes then
for i = 1, #def.nodes do
can_add = def.nodes[i]
for j = 1, #set_nodes do
if def.nodes[i] == set_nodes[j] then can_add = false end
end
if can_add then table.insert(set_nodes, can_add) end
end
end
end
-- return set from list using name
function ambience.get_set(set_name)
return sound_sets[set_name]
end
-- remove set from list
function ambience.del_set(set_name)
sound_sets[set_name] = nil
local can_del = false
for i = 1, #sound_set_order do
if sound_set_order[i] == set_name then can_del = i end
end
if can_del then table.remove(sound_set_order, can_del) end
end
-- return node total belonging to a specific group:
function ambience.group_total(ntab, ngrp)
local tot = 0
local def, grp
for _,n in pairs(ntab) do
def = core.registered_nodes[_]
grp = def and def.groups and def.groups[ngrp]
if grp and grp > 0 then
tot = tot + n
end
end
return tot
end
-- setup table when player joins
core.register_on_joinplayer(function(player)
if player then
local name = player:get_player_name()
local meta = player:get_meta()
playing[name] = {
mvol = tonumber(meta:get_string("ambience.mvol")) or MUSICVOLUME,
svol = tonumber(meta:get_string("ambience.svol")) or SOUNDVOLUME,
timer = 0,
music = 0,
music_handler = nil
}
end
end)
-- remove table when player leaves
core.register_on_leaveplayer(function(player)
if player then playing[player:get_player_name()] = nil end
end)
-- plays music and selects sound set
local function get_ambience(player, tod, name)
-- if enabled and not already playing, play local/server music on interval check
if play_music and playing[name] and playing[name].mvol > 0 then
-- increase music time interval
playing[name].music = playing[name].music + 1
-- play music on interval check
if playing[name].music > MUSICINTERVAL and playing[name].music_handler == nil then
playing[name].music_handler = core.sound_play("ambience_music", {
to_player = name,
gain = playing[name].mvol
})
playing[name].music = 0 -- reset interval
end
--print("-- music timer", playing[name].music .. "/" .. MUSICINTERVAL)
end
-- get foot and head level nodes at player position
local pos = player:get_pos() ; if not pos then return end
local prop = player:get_properties()
local eyeh = prop.eye_height or 1.47 -- eye level with fallback
pos.y = pos.y + eyeh -- head level
local nod_head = core.get_node(pos).name
pos.y = (pos.y - eyeh) + 0.2 -- foot level
local nod_feet = core.get_node(pos).name
pos.y = pos.y - 0.2 -- reset pos
-- get all set nodes around player
local ps, cn = core.find_nodes_in_area(
{x = pos.x - radius, y = pos.y - radius, z = pos.z - radius},
{x = pos.x + radius, y = pos.y + radius, z = pos.z + radius}, set_nodes)
-- loop through sets in order and choose first that meets conditions set
for n = 1, #sound_set_order do
local set = sound_sets[ sound_set_order[n] ]
if set and set.sound_check then
-- get biome data
local bdata = core.get_biome_data(pos)
local biome = bdata and core.get_biome_name(bdata.biome) or ""
-- pass settings to set function for condition check
local set_name, gain = set.sound_check({
player = player,
pos = pos,
tod = tod,
totals = cn,
positions = ps,
head_node = nod_head,
feet_node = nod_feet,
biome = biome
})
-- if conditions met return set name and gain value
if set_name then return set_name, gain end
end
end
return nil, nil
end
-- players routine
local timer = 0
local random = math.random
core.register_globalstep(function(dtime)
local players = core.get_connected_players()
local pname
-- reduce sound timer for each player and stop/reset when needed
for _, player in pairs(players) do
pname = player:get_player_name()
if playing[pname] and playing[pname].timer > 0 then
playing[pname].timer = playing[pname].timer - dtime
if playing[pname].timer <= 0 then
if playing[pname].handler then
core.sound_stop(playing[pname].handler)
end
playing[pname].set = nil
playing[pname].gain = nil
playing[pname].handler = nil
end
end
end
-- one second timer
timer = timer + dtime ; if timer < 1 then return end ; timer = 0
local number, chance, ambience, handler, ok
local tod = core.get_timeofday()
-- loop through players
for _, player in pairs(players) do
pname = player:get_player_name()
local set_name, MORE_GAIN = get_ambience(player, tod, pname)
ok = playing[pname] -- everything starts off ok if player found
-- are we playing something already?
if ok and playing[pname].handler then
-- stop current sound if another set active or gain changed
if playing[pname].set ~= set_name
or playing[pname].gain ~= MORE_GAIN then
--print ("-- change stop", set_name, playing[pname].handler)
core.sound_stop(playing[pname].handler)
playing[pname].set = nil
playing[pname].gain = nil
playing[pname].handler = nil
playing[pname].timer = 0
else
ok = false -- sound set still playing, skip new sound
end
end
-- set random chance
chance = random(1000)
-- if chance is lower than set frequency then select set
if ok and set_name and chance < sound_sets[set_name].frequency then
number = random(#sound_sets[set_name].sounds) -- choose random sound from set
ambience = sound_sets[set_name].sounds[number] -- grab sound information
-- play sound
handler = core.sound_play(ambience.name, {
to_player = pname,
gain = ((ambience.gain or 0.3) + (MORE_GAIN or 0)) * playing[pname].svol,
pitch = ambience.pitch or 1.0
}, ambience.ephemeral)
--print ("playing... " .. ambience.name .. " (" .. chance .. " < "
-- .. sound_sets[set_name].frequency .. ") @ ", MORE_GAIN, handler)
if handler then
-- set what player is currently listening to if handler found
playing[pname].set = set_name
playing[pname].gain = MORE_GAIN
playing[pname].handler = handler
playing[pname].timer = ambience.length
end
end
end
end)
-- sound volume command
core.register_chatcommand("svol", {
params = S("<svol>"),
description = S("set sound volume (0.1 to 1.0)"),
privs = {},
func = function(name, param)
local svol = tonumber(param) or playing[name].svol
if svol < 0.1 then svol = 0.1 end
if svol > 1.0 then svol = 1.0 end
local player = core.get_player_by_name(name)
local meta = player:get_meta()
meta:set_string("ambience.svol", svol)
playing[name].svol = svol
return true, S("Sound volume set to @1", svol)
end
})
-- music volume command (0 stops music)
core.register_chatcommand("mvol", {
params = S("<mvol>"),
description = S("set music volume (0.1 to 1.0, 0 to stop music)"),
privs = {},
func = function(name, param)
local mvol = tonumber(param) or playing[name].mvol
-- stop music currently playing by setting volume to 0
if mvol == 0 and playing[name].music_handler then
core.sound_stop(playing[name].music_handler)
playing[name].music_handler = nil
core.chat_send_player(name, S("Music stopped!"))
end
if mvol < 0 then mvol = 0 end
if mvol > 1.0 then mvol = 1.0 end
local player = core.get_player_by_name(name)
local meta = player:get_meta()
meta:set_string("ambience.mvol", mvol)
playing[name].mvol = mvol
return true, S("Music volume set to @1", mvol)
end
})
-- load default sound sets
dofile(core.get_modpath("ambience") .. "/soundsets.lua")
print("[MOD] Ambience Lite loaded")

88
mods/ambience/license.txt Normal file
View file

@ -0,0 +1,88 @@
The MIT License (MIT)
Copyright (c) 2022 TenPlus1
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Sound licenses:
--Nightime Sound, Recorded by Mike Koenig, License: Attribution 3.0 http://soundbible.com/951-Nightime.html
--Crickets At Night Sound, License: Attribution 3.0 | Recorded by Mike Koenig |http://soundbible.com/365-Crickets-At-Night.html
--Medium Pack Of Wolves Howling, License: Public Domain | Recorded by fws.gov, http://soundbible.com/277-Medium-Pack-Of-Wolves-Howling.html
--Horned Owl Sound, License: Attribution 3.0 | Recorded by Mike Koenig , http://soundbible.com/1851-Horned-Owl.html
--Bats In Cave Sound, License: CC0 | Recorded by SaloSensei , https://freesound.org/people/SaloSensei/sounds/616219/
--Spooky Water Drops Sound, License: Attribution 3.0 | Recorded by Mike Koenig, http://soundbible.com/380-Spooky-Water-Drops.html
-- Single Water Droplet Sound, License: Attribution 3.0 | Recorded by Mike Koenig, http://soundbible.com/384-Single-Water-Droplet.html
--HollowWind, Black Boe, Creative Commons 0 License, http://www.freesound.org/people/Black%20Boe/sounds/22331/
--drippingwater*.ogg sounds: CC0, Dripping Water Mod, by kddekadenz, http://minetest.net/forum/viewtopic.php?id=1688
--best cardinal bird: License: Attribution 3.0 | Recorded by PsychoBird, http://soundbible.com/1515-Best-Cardinal-Bird.html
--birdsongnl: the Attribution License, HerbertBoland, http://www.freesound.org/people/HerbertBoland/sounds/28312/ (end)
--robin2: Attribution License, reinsamba, http://www.freesound.org/people/reinsamba/sounds/32479/ (end)
--Craw.WAV, Attribution License, inchadney, http://www.freesound.org/people/inchadney/sounds/52450/
--bluejay.wav, Creative Commons 0 License, UncleSigmund, http://www.freesound.org/people/UncleSigmund/sounds/42382/
--scuba1*.ogg- digifishmusic, Attribution License, http://www.freesound.org/people/digifishmusic/sounds/45521/
--dolphin_screaming - Creative Commons 0 License, felix.blume, http://www.freesound.org/people/felix.blume/sounds/161691/
ComboWind uses:
--wind-in-the-trees -Attribution License, laurent, http://www.freesound.org/people/laurent/sounds/16995/
--drygrassInWind- Creative Commons 0 License, felix.blume, http://www.freesound.org/people/felix.blume/sounds/146436/
--Splash: Attribution 3.0 | Recorded by BlastwaveFx.com, http://soundbible.com/546-Fish-Splashing.html
--small_waterfall Attribution License, volivieri, http://www.freesound.org/people/volivieri/sounds/38390/
--Lake_Waves_2*, Attribution License, Benboncan, http://www.freesound.org/people/Benboncan/sounds/67884/
--earth01a, Creative Commons 0 License., Halion , http://www.freesound.org/people/Halion/sounds/17785
--fiji_beach, Creative Commons 0 License, c97059890, http://www.freesound.org/people/c97059890/sounds/21754/
--seagull, Attribution 3.0 License., hazure, http://www.freesound.org/people/hazure/sounds/23707/,
desert:
coyote2, Attribution License, rogerforeman, http://www.freesound.org/people/rogerforeman/sounds/68068/
http://www.freesound.org/people/Proxima4/sounds/104319/
Desert Monolith.wav, Creative Commons 0 License, Proxima4, http://www.freesound.org/people/Proxima4/sounds/104319/
Rattlesnake Rattle, Public Domain, fws.gov, http://soundbible.com/237-Rattlesnake-Rattle.html
flying:
crystal_airlines: Attribution License, suonho, http://www.freesound.org/people/suonho/sounds/56364/
desert wind:
Desert Simple.wav, Creative Commons 0 License, Proxima4, http://www.freesound.org/people/Proxima4/sounds/104320/
http://www.freesfx.co.uk/soundeffects/forests-jungles/
icecrack.ogg by ecfike, Creative Commons 0 license (https://freesound.org/people/ecfike/sounds/177212/)

View file

@ -0,0 +1,7 @@
# textdomain: ambience
<svol>=<slaŭtec>
set sound volume (0.1 to 1.0)=agordi sonlaŭtecon (0.1 ĝis 1.0)
Sound volume set to @1=Sonlaŭteco agordita al @1
<mvol>=<mlaŭtec>
set music volume (0.1 to 1.0, 0 to stop music)=agordi muziklaŭtecon (0.1 ĝis 1.0; malŝalti muzikon per 0)
Music volume set to @1=Muziklaŭteco agordita al @1

View file

@ -0,0 +1,7 @@
# textdomain: ambience
<svol>=<volumen de sonido>
set sound volume (0.1 to 1.0)=establecer volumen de sonido (0.1 a 1.0)
Sound volume set to @1=Volumen de sonido establecido a @1
<mvol>=<volumen de música>
set music volume (0.1 to 1.0, 0 to stop music)=establecer volumen de música (0.1 a 1.0, 0 para detener la música)
Music volume set to @1=Volumen de música establecido a @1

View file

@ -0,0 +1,7 @@
# textdomain: ambience
<svol>=<sgłośność>
set sound volume (0.1 to 1.0)=ustaw głośność dźwięku (0.1 do 1.0)
Sound volume set to @1=Głośność dźwięku ustawiona na @1
<mvol>=<mgłośność>
set music volume (0.1 to 1.0, 0 to stop music)=ustaw głośność muzyki (0.1 do 1.0, 0 aby zatrzymać muzykę)
Music volume set to @1=Głośność muzyki ustawiona na @1

View file

@ -0,0 +1,7 @@
# textdomain: ambience
<svol>=
set sound volume (0.1 to 1.0)=
Sound volume set to @1=
<mvol>=
set music volume (0.1 to 1.0, 0 to stop music)=
Music volume set to @1=

7
mods/ambience/mod.conf Normal file
View file

@ -0,0 +1,7 @@
name = ambience
description = Adds realistic sound effects into your world.
optional_depends = default, mcl_core, mclx_core
min_minetest_version = 5.0
release = 30923
author = TenPlus1
title = Ambience

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View file

@ -0,0 +1,5 @@
# If enabled will play a random music file from ./minetest/sounds at midnight
ambience_music (Ambience music) bool true
# If enabled then ambience will take over sounds when moving in water
ambience_water_move (Ambience water movement) bool true

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

385
mods/ambience/soundsets.lua Normal file
View file

@ -0,0 +1,385 @@
--[[
Default Sound Sets
------------------
Order is very important when adding a sound set so it will play
certain sound sets before any another.
--]]
-- mod support
local mod_def = core.get_modpath("default")
local mod_mcl = core.get_modpath("mcl_core")
-- Underwater sounds play when player head is submerged
ambience.add_set("underwater", {
frequency = 1000,
sounds = {
{name = "scuba", length = 8}
},
sound_check = function(def)
local nodef = core.registered_nodes[def.head_node]
if nodef and nodef.groups and nodef.groups.water then
return "underwater"
end
end
})
-- Splashing sound plays when player walks inside water nodes (if enabled)
if core.settings:get_bool("ambience_water_move") ~= false then
-- override default water sounds
if mod_def then
core.override_item("default:water_source", { sounds = {} })
core.override_item("default:water_flowing", { sounds = {} })
core.override_item("default:river_water_source", { sounds = {} })
core.override_item("default:river_water_flowing", { sounds = {} })
elseif mod_mcl then
core.override_item("mcl_core:water_source", { sounds = {} })
core.override_item("mcl_core:water_flowing", { sounds = {} })
core.override_item("mclx_core:river_water_source", { sounds = {} })
core.override_item("mclx_core:river_water_flowing", { sounds = {} })
end
ambience.add_set("splash", {
frequency = 1000,
sounds = {
{name = "default_water_footstep", length = 2}
},
sound_check = function(def)
local nodef = core.registered_nodes[def.feet_node]
if nodef and nodef.groups and nodef.groups.water then
local control = def.player:get_player_control()
if control.up or control.down or control.left or control.right then
return "splash"
end
end
end
})
end
-- check for env_sounds mod, if not found enable water flowing and lava sounds
if not core.get_modpath("env_sounds") then
-- Water sound plays when near flowing water
ambience.add_set("flowing_water", {
frequency = 1000,
sounds = {
{name = "waterfall", length = 6}
},
nodes = {"group:water"},
sound_check = function(def)
local c = (def.totals["default:water_flowing"] or 0)
+ (def.totals["mcl_core:water_flowing"] or 0)
if c > 40 then return "flowing_water", 0.5
elseif c > 5 then return "flowing_water" end
end
})
-- River sound plays when near flowing river
ambience.add_set("river", {
frequency = 1000,
sounds = {
{name = "river", length = 4, gain = 0.1}
},
sound_check = function(def)
local c = (def.totals["default:river_water_flowing"] or 0)
+ (def.totals["mclx_core:river_water_flowing"] or 0)
if c > 20 then return "river", 0.5
elseif c > 5 then return "river" end
end
})
-- Lava sound plays when near lava
ambience.add_set("lava", {
frequency = 1000,
sounds = {
{name = "lava", length = 7}
},
nodes = {"group:lava"},
sound_check = function(def)
local c = (def.totals["default:lava_source"] or 0)
+ (def.totals["default:lava_flowing"] or 0)
+ (def.totals["mcl_core:lava_source"] or 0)
+ (def.totals["mcl_core:lava_flowing"] or 0)
if c > 20 then return "lava", 0.5
elseif c > 5 then return "lava" end
end
})
else
print ("[MOD] Ambience - found env_sounds, using for water and lava sounds.")
end
-- Beach sounds play when below y-pos 6 and 150+ water source found
ambience.add_set("beach", {
frequency = 40,
sounds = {
{name = "seagull", length = 4.5, ephemeral = true},
{name = "seagull", length = 4.5, pitch = 1.2, ephemeral = true},
{name = "beach", length = 13},
{name = "gull", length = 1, ephemeral = true},
{name = "beach_2", length = 6}
},
sound_check = function(def)
local c = (def.totals["default:water_source"] or 0)
+ (def.totals["mcl_core:water_source"] or 0)
if def.pos.y < 6 and def.pos.y > 0 and c > 150 then
return "beach"
end
end
})
-- Ice sounds play when 100 or more ice are nearby
ambience.add_set("ice", {
frequency = 80,
sounds = {
{name = "icecrack", length = 5, gain = 1.1},
{name = "desertwind", length = 8},
{name = "wind", length = 9}
},
nodes = (mod_mcl and {"mcl_core:ice", "mcl_core:packed_ice"} or {"default:ice"}),
sound_check = function(def)
local c = (def.totals["default:ice"] or 0)
+(def.totals["mcl_core:ice"] or 0)
+ (def.totals["mcl_core:packed_ice"] or 0)
if c > 400 then return "ice" end
end
})
-- Desert sounds play when near 150+ desert or normal sand
ambience.add_set("desert", {
frequency = 20,
sounds = {
{name = "coyote", length = 2.5, ephemeral = true},
{name = "wind", length = 9},
{name = "desertwind", length = 8}
},
nodes = {
(mod_mcl and "mcl_core:redsand" or "default:desert_sand"),
(mod_mcl and "mcl_core:sand" or "default:sand")
},
sound_check = function(def)
local c = (def.totals["default:desert_sand"] or 0)
+ (def.totals["default:sand"] or 0)
+ (def.totals["mcl_core:sand"] or 0)
+ (def.totals["mcl_core:redsand"] or 0)
if c > 150 and def.pos.y > 10 then return "desert" end
end
})
-- Cave sounds play when below player position Y -25 and water nearby
ambience.add_set("cave", {
frequency = 60,
sounds = {
{name = "drippingwater1", length = 1.5, ephemeral = true},
{name = "drippingwater2", length = 1.5, ephemeral = true},
{name = "drippingwater2", length = 1.5, pitch = 1.2, ephemeral = true},
{name = "drippingwater2", length = 1.5, pitch = 1.4, ephemeral = true},
{name = "bats", length = 5, ephemeral = true}
},
sound_check = function(def)
local c = (def.totals["default:water_source"] or 0)
+ (def.totals["mcl_core:water_source"] or 0)
if c > 0 and def.pos.y < -25 then return "cave" end
end
})
-- Jungle sounds play during day and when around 90 jungletree trunks
ambience.add_set("jungle", {
frequency = 200,
sounds = {
{name = "jungle_day_1", length = 7},
{name = "deer", length = 7, ephemeral = true},
{name = "canadianloon2", length = 14},
{name = "bird1", length = 11},
{name = "peacock", length = 2, ephemeral = true},
{name = "peacock", length = 2, pitch = 1.2, ephemeral = true}
},
nodes = {(mod_mcl and "mcl_trees:tree_jungle" or "default:jungletree")},
sound_check = function(def)
local c = (def.totals["default:jungletree"] or 0)
+ (def.totals["mcl_trees:tree_jungle"] or 0)
if def.tod > 0.2 and def.tod < 0.8 and c > 79 then return "jungle" end
end
})
-- Jungle sounds play during night and when around 90 jungletree trunks
ambience.add_set("jungle_night", {
frequency = 200,
sounds = {
{name = "jungle_night_1", length = 4, ephemeral = true},
{name = "jungle_night_2", length = 4, ephemeral = true},
{name = "deer", length = 7, ephemeral = true},
{name = "frog", length = 1, ephemeral = true},
{name = "frog", length = 1, pitch = 1.3, ephemeral = true}
},
sound_check = function(def)
-- jungle tree was added in last set, so doesnt need to be added in this one
local c = (def.totals["default:jungletree"] or 0)
+ (def.totals["mcl_trees:tree_jungle"] or 0)
if (def.tod < 0.2 or def.tod > 0.8) and c > 79 then return "jungle_night" end
end
})
-- Daytime sounds play during day when around leaves and above ground
ambience.add_set("day", {
frequency = 40,
sounds = {
{name = "cardinal", length = 3, ephemeral = true},
{name = "craw", length = 3, ephemeral = true},
{name = "bluejay", length = 6, ephemeral = true},
{name = "robin", length = 4, ephemeral = true},
{name = "robin", length = 4, pitch = 1.2, ephemeral = true},
{name = "bird1", length = 11},
{name = "bird2", length = 6, ephemeral = true},
{name = "crestedlark", length = 6, ephemeral = true},
{name = "crestedlark", length = 6, pitch = 1.1, ephemeral = true},
{name = "peacock", length = 2, ephemeral = true},
{name = "peacock", length = 2, pitch = 1.2, ephemeral = true},
{name = "wind", length = 9}
},
nodes = {"group:leaves"},
sound_check = function(def)
-- use handy function to count all nodes in group:leaves
local c = ambience.group_total(def.totals, "leaves")
if (def.tod > 0.2 and def.tod < 0.8) and def.pos.y > 0 and c > 50 then
return "day"
end
end
})
-- Nighttime sounds play at night when above ground near leaves
ambience.add_set("night", {
frequency = 40,
sounds = {
{name = "hornedowl", length = 2, ephemeral = true},
{name = "hornedowl", length = 2, pitch = 1.1, ephemeral = true},
{name = "wolves", length = 4, gain = 0.4, ephemeral = true},
{name = "cricket", length = 6, ephemeral = true},
{name = "deer", length = 7, ephemeral = true},
{name = "frog", length = 1, ephemeral = true},
{name = "frog", length = 1, pitch = 1.2, ephemeral = true},
{name = "wind", length = 9}
},
sound_check = function(def)
-- use handy function to count all nodes in group:leaves
local c = ambience.group_total(def.totals, "leaves")
if (def.tod < 0.2 or def.tod > 0.8) and def.pos.y > 0 and c > 50 then
return "night"
end
end
})
-- Winds play when player is above 50 y-pos or near 150+ snow blocks
ambience.add_set("high_up", {
frequency = 40,
sounds = {
{name = "desertwind", length = 8},
{name = "desertwind", length = 8, pitch = 1.3},
{name = "wind", length = 9},
{name = "wind", length = 9, pitch = 1.4}
},
nodes = {(mod_mcl and "mcl_core:snowblock" or "default:snowblock")},
sound_check = function(def)
local c = (def.totals["default:snowblock"] or 0)
+ (def.totals["mcl_core:snowblock"] or 0)
if def.pos.y > 50 or c > 100 then return "high_up" end
end
})

41
mods/animalworld/LICENSE Normal file
View file

@ -0,0 +1,41 @@
MIT License
Copyright (c) 2021 Skandarella
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Lincense for original Code (mobs redo + mobs_animal): (MIT) Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1
Modified Code by Liil/Wilhelmine/Liil (c) 2022
Textures, Models and Animation by Liil/Wilhelmine/Liil under (MIT) License (c) 2022
Thanks to davidflavigne from Github for French Translation!
Thanks to nonfreegithub from Github for Mineclone + Mineclonia support!
Thanks to Cpyte-Engine-Developer from Guthub for Russian Translation!
Beluga and Leopard Seal sound by Liil/Wilhelmine/Liil.
Other sounds are from freesound.org under Creative Commons License. Thanks to Lauramel, Gleith, Theveomammoth11, Vataa, D-Jones, Pol, Robinhood76,
sesmo42, Missburusdeer2011, Hazure, Inspectorj, Benboncan, Spookymodem, Drobiumdesign, J-zazvurek, Benboncan, Felix-blume, Sihil, Kabit, Roubignolle,
Egomassive, Florianreichelt, Fxasc, Extrafon, Cognito-perceptu, Jjbubo, Blessedcup, Jaegrover, Yks, Pillonoise, Traade, Tilano408, j0ck0, Mings, Befig,
Stackpool, vilatzara, viorelvio, newagesoup, slunali, fr0608bg, reinsamba, kangaroovindaloo, breviceps, guyburns, tyler7687, navadaux, fairhavencollection, acclivity and sarena6487528 for the sounds!
Thanks to Nagaty Studio for the Hyena Sounds! Source: https://www.youtube.com/c/NagatyStudio/about
Also thanks to Ian Fairley (https://www.youtube.com/channel/UChVk1Pvn-JMWkepnQLK-gCg) for the Zebra sounds.
Thanks to Lars Edenius for the Black Grouse sounds.
Thanks to SOS Orangutans for the Orang Utan sounds! https://www.youtube.com/@SOSorangutans (The Sumatran Orangutan Society. Visit www.orangutans-sos.org)

150
mods/animalworld/ant.lua Normal file
View file

@ -0,0 +1,150 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:ant", {
type = "monster",
passive = false,
attack_type = "dogfight",
reach = 1,
damage = 1,
hp_min = 1,
hp_max = 10,
armor = 100,
collisionbox = {-0.1, -0.01, -0.1, 0.1, 0.1, 0.1},
visual = "mesh",
mesh = "Ant.b3d",
visual_size = {x = 1, y = 1},
textures = {
{"textureant.png"},
},
sounds = {
random = "animalworld_ant",
attack = "animalworld_ant",
},
makes_footstep_sound = true,
stay_near = {"animalworld:anthill", 3},
view_range = 3,
walk_velocity = 0.5,
walk_chance = 70,
run_velocity = 0.7,
runaway = false,
jump = false,
jump_height = 0,
stepheight = 3,
stay_near = {{"animalworld:anthill"}, 4},
drops = {
{name = "animalworld:ant", chance = 1, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 3,
animation = {
speed_normal = 200,
stand_start = 0,
stand_end = 0,
walk_start = 0,
walk_end = 100,
punch_start = 100,
punch_end = 200,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:ant",
nodes = {"mcl_core:podzol", "mcl_core:dirt_with_grass", "default:dirt_with_conifrous_litter"},
neighbors = {"animalworld:anthill"},
min_light = 0,
interval = 30,
chance = 1, -- 15000
active_object_count = 7,
min_height = 0,
max_height = 50,
day_toggle = true
})
end
mobs:register_egg("animalworld:ant", S("Ant"), "aant.png")
mobs:alias_mob("animalworld:ant", "animalworld:ant")
minetest.register_craftitem(":animalworld:anteggs_raw", {
description = S("Raw Ant Eggs"),
inventory_image = "animalworld_anteggs_raw.png",
on_use = minetest.item_eat(2),
groups = {food_meat_raw = 1, flammable = 2},
})
minetest.register_craftitem(":animalworld:anteggs_cooked", {
description = S("Cooked Ant Eggs"),
inventory_image = "animalworld_anteggs_cooked.png",
on_use = minetest.item_eat(6),
groups = {food_meat = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "animalworld:anteggs_cooked",
recipe = "animalworld:anteggs_raw",
cooktime = 5,
})
minetest.register_decoration({
deco_type = "simple",
place_on = {"default:dirt_with_coniferous_litter", "mcl_core:podzol"},
sidelen = 16,
noise_params = {
offset = 0.0012,
scale = 0.0007,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,
persist = 0.66
},
y_max = 50,
y_min = 0,
decoration = "animalworld:anthill"
})
minetest.register_node("animalworld:anthill", {
description = S"Anthill",
visual_scale = 0.5,
mesh = "Anthil.b3d",
tiles = {"textureanthil.png"},
inventory_image = "aanthil.png",
paramtype = "light",
paramtype2 = "facedir",
walkable = false,
groups = {crumbly = 3, shovely = 1, handy = 1, sand = 2},
drawtype = "mesh",
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.1, 0.5},
--[[{-0.5, -0.5, -0.5, 0.5, 0.1, 0.5},
{-0.5, -0.5, -0.5, 0.5, 0.1, 0.5}]]
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0.1, 0.5}
}
},
drop = "animalworld:anteggs_raw",
sounds = animalworld.sounds.node_sound_dirt_defaults(),
})
minetest.register_craft({
type = "fuel",
recipe = "animalworld:anthill",
burntime = 1,
})

View file

@ -0,0 +1,97 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:anteater", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 10,
hp_min = 25,
hp_max = 65,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Anteater.b3d",
textures = {
{"textureanteater.png"},
},
makes_footstep_sound = true,
sounds = {
},
walk_velocity = 0.7,
run_velocity = 2,
runaway = false,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 3,
pushable = true,
follow = {"fishing:bait:worm", "bees:frame_full", "ethereal:worm", "animalworld:ant", "animalworld:termitequeen", "animalworld:termite", "animalworld:anteggs_raw"},
view_range = 10,
stay_near = {{"default:jungletree", "default:junglegrass", "livingjungle::grass2", "livingjungle::grass1", "livingjungle:alocasia", "livingjungle:flamingoflower"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
{name = "animalworld:anteatercorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 75,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 250,
punch_end = 350,
die_start = 250,
die_end = 350,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 25, 0, false, nil) then return end
end,
})
local spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter", "default:dry_dirt_with_dry_grass"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:grass_grove", "ethereal:green_dirt", "default:dirt_with_rainforest_litter", "livingjungle:jungleground", "livingjungle:leafyjungleground"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:anteater",
nodes = {"mcl_core:podzol", "default:dirt_with_rainforest_litter", "mcl_core:dirt_with_gras"},
neighbors = {"default:jungletree", "mcl_core:jungletree"},
min_light = 0,
interval = 1,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 1,
max_height = 50,
day_toggle = true,
})
end
mobs:register_egg("animalworld:anteater", S("Anteater"), "aanteater.png")
mobs:alias_mob("animalworld:manteater", "animalworld:anteater") -- compatibility

90
mods/animalworld/bat.lua Normal file
View file

@ -0,0 +1,90 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:bat", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 2,
damage = 2,
hp_min = 5,
hp_max = 35,
armor = 100,
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.5, 0.2},
visual = "mesh",
mesh = "Bat.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturebat.png"},
},
sounds = {
random = "animalworld_bat",
},
makes_footstep_sound = false,
walk_velocity = 5,
run_velocity = 6,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
fall_speed = 0,
jump = true,
jump_height = 6,
fly = true,
stepheight = 3,
drops = {
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 0,
animation = {
speed_normal = 130,
stand_start = 0,
stand_end = 100,
fly_start = 150, -- swim animation
fly_end = 250,
die_start = 0,
die_end = 100,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"air"},
floats = 0,
follow = {
"animalworld:rawfish", "mcl_fishing:pufferfish_raw", "ethereal:worm", "ethereal:fish_raw", "fishing:fish_raw", "xocean:fish_edible", "livingdesert:date_palm_fruits", "livingdesert:figcactus_fruit"
},
view_range = 4,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 25, 0, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_grass", "default:dry_dirt_with_dry_grass", "default:dirt_with_rainforest_litter", "default:dirt_with_coniferous_litter", "ethereal:gray_dirt", "ethereal:mushroom_dirt", "ethereal:grove_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:bat",
nodes = {"mcl_core:dirt_with_grass", "default:dirt_with_grass", "default:dry_dirt_with_dry_grass", "default:dirt_with_rainforest_litter", "default:dirt_with_coniferous_litter", "naturalbiomes:mediterran_litter", "livingjungle:jungleground", "livingjungle:leafyjungleground", "naturalbiomes:bushland_bushlandlitter"},
min_light = 0,
interval = 60,
chance = 8000, -- 15000
active_object_count = 5,
min_height = -100,
max_height = 50,
day_toggle = false,
})
end
mobs:register_egg("animalworld:bat", S("Bat"), "abat.png")

87
mods/animalworld/bear.lua Normal file
View file

@ -0,0 +1,87 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:bear", {
stepheight = 1,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = true,
reach = 2,
damage = 8,
hp_min = 15,
hp_max = 60,
armor = 100,
collisionbox = {-0.6, -0.01, -0.6, 0.6, 0.95, 0.6},
visual = "mesh",
mesh = "Bear.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturebear.png"},
},
sounds = {
random = "animalworld_bear",
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 3,
runaway = false,
jump = false,
jump_height = 6,
stay_near = {{"people:feeder", "default:fern_1", "default:fern_2", "marinara:reed_bundle", "naturalbiomes:reed_bundle", "farming:straw"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:bearcorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 200,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {
"ethereal:fish_raw", "animalworld:whalemeat_raw", "animalworld:rawfish", "mobs_fish:tropical",
"mobs:meat_raw", "animalworld:rabbit_raw", "xocean:fish_edible", "farming:melon_slice", "farming:melon_slice", "water_life:meat_raw", "water_life:meat_raw", "fishing:fish_raw", "mcl_mobitems:chicken", "mcl_fishing:pufferfish_raw", "mcl_mobitems:rotten_flesh", "mcl_mobitems:mutton", "mcl_mobitems:beef", "mcl_mobitems:porkchop", "mcl_mobitems:rabbit", "animalworld:chicken_raw"
},
view_range = 8,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_coniferous_litter", "default:permafrost_with_moss", "ethereal:bamboo_dirt", "ethereal:gray_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:bear",
nodes = {"mcl_core:podzol", "mcl_core:dirt_with_grass", "default:dirt_with_conifrous_litter"}, {"default:permafrost_with_moss"}, {"livingdesert:coldsteppe_ground3"},
neighbors = {"livingdesert:pine_leaves", "livingdesert:pine_leaves2", "livingdesert:pine_leaves3", "animalworld:animalworld_tundrashrub1", "animalworld:animalworld_tundrashrub2", "animalworld:animalworld_tundrashrub3", "animalworld:animalworld_tundrashrub4", "default:fern_1", "default:fern_2", "mcl_core:sprucetree", "mcl_trees:tree_spruce", "mcl_trees:leaves_spruce"},
min_light = 0,
interval = 60,
chance = 1000, -- 15000
min_height = -15,
max_height = 120,
})
end
mobs:register_egg("animalworld:bear", S("Bear"), "abear.png")

122
mods/animalworld/beaver.lua Normal file
View file

@ -0,0 +1,122 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:beaver", {
stepheight = 1,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = false,
attack_npcs = false,
reach = 2,
damage = 6,
hp_min = 35,
hp_max = 65,
armor = 100,
collisionbox = {-0.6, -0.01, -0.6, 0.6, 0.95, 0.6},
visual = "mesh",
mesh = "Beaver.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturebeaver.png"},
},
sounds = {
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = true,
jump_height = 6,
stepheight = 2,
stay_near = {{"animalworld:beaver_nest"}, 4},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 3,
animation = {
speed_normal = 75,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_start = 200,
walk_end = 300,
fly_start = 450, -- swim animation
fly_end = 550,
punch_start = 300,
punch_end = 400,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 1,
follow = {
"naturalbiomes:alder_sapling", "naturalbiomes:alppine1_sapling", "naturalbiomes:alppine2_sapling",
"naturalbiomes:alpine_bush_sapling", "default:sapling", "default:junglesapling", "default:pine_sapling", "default:acacia_sapling", "default:aspen_sapling", "naturalbiomes:olive_sapling", "naturalbiomes:pine_sapling", "naturalbiomes:acacia_sapling", "naturalbiomes:bamboo_sapling", "ethereal:bamboo_sprout", "ethereal:yellow_tree_sapling", "ethereal:willow_sapling", "ethereal:birch_sapling", "ethereal:olive_tree_sapling"
},
view_range = 5,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:grove_dirt", "default:dry_dirt_with_dry_grass", "default:dirt_with_rainforest_litter"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:beaver",
nodes = {"mcl_core:water_source", "default:water_source", "default:river_water_source", "mcl_core:water_source", "mcl_core:water_flowing"},
neighbors = {"animalworld:beaver_nest"},
min_light = 0,
interval = 60,
chance = 1, -- 15000
active_object_count = 2,
min_height = 0,
max_height = 6,
day_toggle = true,
})
end
mobs:register_egg("animalworld:beaver", S("Beaver"), "abeaver.png")
-- beaver nest
minetest.register_node("animalworld:beaver_nest", {
description = S("Beaver Nest"),
tiles = {"animalworld_beaver_nest.png"},
is_ground_content = false,
groups = {wood = 1, choppy = 2, axey = 2, handy = 1, oddly_breakable_by_hand = 1, flammable = 3},
_mcl_hardness = 1,
_mcl_blast_resistance = 1,
sounds = animalworld.sounds.node_sound_wood_defaults(),
})
minetest.register_decoration({
name = "animalworld:beavernest",
deco_type = "schematic",
place_on = {"naturalbiomes:alderswamp_litter"},
place_offset_y = -2,
sidelen = 16,
fill_ratio = 0.00018,
biomes = {"naturalbiomes:alderswamp"},
y_max = 1,
y_min = 0,
schematic = minetest.get_modpath("animalworld") .. "/schematics/animalworld_beavernest.mts",
flags = "place_center_x",
flags = "force_placement",
rotation = "random",
spawn_by = "naturalbiomes:alderswamp_litter",
num_spawn_by = 8,
})

159
mods/animalworld/beluga.lua Normal file
View file

@ -0,0 +1,159 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:beluga", {
stepheight = 1,
type = "animal",
passive = true,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 1,
hp_min = 250,
hp_max = 455,
armor = 100,
collisionbox = {-0.8, -0.01, -0.8, 0.8, 1.2, 0.8},
visual = "mesh",
mesh = "Beluga.b3d",
textures = {
{"texturebeluga.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_beluga",
attack = "animalworld_beluga2",
damage = "animalworld_beluga3",
death = "animalworld_beluga4",
},
walk_velocity = 2,
run_velocity = 5,
fly = true,
fly_in = "default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing",
fall_speed = 0,
jump = true,
jump_height = 0,
stay_near = {{"default:clay", "marinara:sand_with_seagrass", "marinara:coastrock_with:brownalage", "marinara:sand_with_seagrass2", "mcl_ocean:seagrass:sand", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral", "mcl_ocean:seagrass_gravel"}, 5},
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
pushable = true,
follow = {
"animalworld:rawmollusk", "mcl_fishing:pufferfish_raw", "marinaramobs:octopus_raw", "marinara:raw_oisters", "marinara:raw_athropod", "animalworld:rawfish", "fishing:fish_raw", "fishing:pike_raw", "marinaramobs:raw_exotic_fish", "nativevillages:catfish_raw", "xocean:fish_edible", "ethereal:fish_raw", "mobs:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw"
},
view_range = 20,
drops = {
{name = "animalworld:whaleblubber", chance = 1, min = 3, max = 10},
{name = "animalworld:whalemeat_raw", chance = 1, min = 3, max = 10},
},
water_damage = 0,
air_damage = 1,
lava_damage = 5,
light_damage = 0,
fear_height = 0,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
fly_start = 150,
fly_end = 250,
fly2_start = 250,
fly2_end = 350,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:beluga",
nodes = {"mcl_core:water_source", "default:water_source"},
neighbors = {"default:ice", "default:snowblock", "mcl_core:ice", "mcl_core:snow"},
min_light = 0,
interval = 30,
chance = 2000, -- 15000
active_object_count = 3,
min_height = -20,
max_height = 0,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:water_source"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- beluga at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:beluga", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:beluga", S("Beluga Whale"), "abeluga.png")
mobs:alias_mob("animalworld:beluga", "animalworld:beluga") -- compatibility
-- raw whale
minetest.register_craftitem(":animalworld:whalemeat_raw", {
description = S("Raw Whale Meat"),
inventory_image = "animalworld_whalemeat_raw.png",
on_use = minetest.item_eat(4),
groups = {food_meat_raw = 1, flammable = 2},
})
-- cooked whale
minetest.register_craftitem(":animalworld:whalemeat_cooked", {
description = S("Cooked Whale Meat"),
inventory_image = "animalworld_whalemeat_cooked.png",
on_use = minetest.item_eat(8),
groups = {food_meat = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "animalworld:whalemeat_cooked",
recipe = "animalworld:whalemeat_raw",
cooktime = 2,
})
minetest.register_craft({
type = "fuel",
recipe = "animalworld:whaleblubber",
burntime = 10,
})
minetest.register_craftitem("animalworld:whaleblubber", {
description = S("Whale Blubber"),
inventory_image = "animalworld_whaleblubber.png",
})

View file

@ -0,0 +1,94 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:blackbird", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 2,
damage = 2,
hp_min = 5,
hp_max = 30,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.5, 0.3},
visual = "mesh",
mesh = "Blackbird.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"textureblackbird.png"},
},
sounds = {
random = "animalworld_blackbird",
},
makes_footstep_sound = true,
walk_velocity = 2,
run_velocity = 4,
runaway = true,
fall_speed = -1,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 4,
stay_near = {{"default:tree", "default:leaves", "flowers_dandelion_yellow", "default:bush_leaves", "default:grass_1", "naturalbiomes:heath_grass", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:heatherflower", "naturalbiomes:heatherflower2", "naturalbiomes:heatherflower3"}, 6},
drops = {
{name = "animalworld:chicken_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:chicken_feather", chance = 1, min = 1, max = 1},
{name = "animalworld:blackbirdcorpse", chance = 7, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 4,
animation = {
speed_normal = 100,
stand_start = 100,
stand_end = 200,
walk_start = 0,
walk_end = 100,
fly_start = 250,
fly_end = 350,
jump_start = 250,
jump_end = 350,
punch_start = 100,
punch_end = 200,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"air"},
floats = 0,
follow = {
"fishing:bait:worm", "farming:seed_wheat", "farming:seed_rice", "farming:seed_oat", "ethereal:pine_nuts", "ethereal:worm", "naturalbiomes:blackberry", "animalworld:bugice", "animalworld:termitequeen", "animalworld:notoptera", "animalworld:anteggs_raw", "farming:seed_hemp", "farming:seed_barley", "farming:seed_oat", "farming:seed_cotton", "farming:seed_sunflower", "farming:seed_wheat", "farming:seed_rye"
},
view_range = 4,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:blackbird",
nodes = {"mcl_core:dirt_with_grass", "default:dirt_with_grass", "naturalbiomes:heath_litter"},
neighbors = {"group:grass", "group:normal_grass", "naturalbiomes:heath_grass", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:heatherflower"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 0,
max_height = 100,
day_toggle = true,
})
end
mobs:register_egg("animalworld:blackbird", S("Blackbird"), "ablackbird.png")

View file

@ -0,0 +1,122 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:blackgrouse", {
stepheight = 2,
type = "animal",
passive = true,
attack_type = "dogfight",
group_attack = false,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 1,
hp_min = 10,
hp_max = 25,
armor = 100,
collisionbox = {-0.4, -0.01, -0.3, 0.4, 0.8, 0.4},
visual = "mesh",
mesh = "Blackgrouse.b3d",
textures = {
{"textureblackgrouse.png"},
{"textureblackgrouse2.png"},
},
child_texture = {
{"textureblackgrousechick.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_blackgrouse3",
damage = "animalworld_blackgrouse2",
death = "animalworld_blackgrouse",
},
walk_velocity = 1,
run_velocity = 3,
jumps = true,
jump_height = 3,
fall_speed = -1,
fall_damage = 0,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
drops = {
{name = "animalworld:chicken_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:chicken_feather", chance = 1, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 5,
light_damage = 0,
fear_height = 3,
stay_near = {{"naturalbiomes:heath_grass", "mcl_flowers:double:fern", "mcl_flowers:fern", "mcl_flowers:tallgrass", "mcl_farming:sweet_berry_bush_3", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:heatherflower", "naturalbiomes:heatherflower2", "naturalbiomes:heatherflower3"}, 5},
animation = {
speed_normal = 75,
stand_speed = 40,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
stand2_start = 200,
stand2_end = 300,
jump_start = 400,
jump_end = 500,
walk_start = 300,
walk_end = 400,
die_start = 400,
die_end = 500,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {
"naturalbiomes:bamboo_sapling", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "livingfloatlands:coldsteppe_pine3_sapling", "livingfloatlands:coldsteppe_pine2_sapling", "livingfloatlands:coldsteppe_pine_sapling", "naturalbiomes:alppine1_sapling", "naturalbiomes:alpine_cowberrybush_sapling", "naturalbiomes:alppine2_sapling", "livingfloatlands:giantforest_paleoredwood_sapling", "naturalbiomes:juniper_sapling", "default:pine_sapling", "livingdesert:pine_sapling3", "livingdesert:pine_sapling2", "livingdesert:pine_sapling"
},
view_range = 10,
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
do_custom = function(self, dtime)
self.egg_timer = (self.egg_timer or 0) + dtime
if self.egg_timer < 10 then
return
end
self.egg_timer = 0
if self.child
or math.random(1, 100) > 1 then
return
end
local pos = self.object:get_pos()
minetest.add_item(pos, "mobs:egg")
minetest.sound_play("default_place_node_hard", {
pos = pos,
gain = 1.0,
max_hear_distance = 5,
})
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:blackgrouse",
nodes = {"naturalbiomes:heath_litter", "mcl_core:dirt_with_grass", "mcl_core:podzol"},
neighbors = {"mcl_flowers:double:fern", "mcl_flowers:fern", "naturalbiomes:heath_grass", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:heatherflower", "naturalbiomes:heatherflower2", "naturalbiomes:heatherflower3"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 5,
max_height = 60,
day_toggle = true,
})
end
mobs:register_egg("animalworld:blackgrouse", S("Black Grouse"), "ablackgrouse.png")

152
mods/animalworld/boar.lua Normal file
View file

@ -0,0 +1,152 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:boar", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = true,
reach = 2,
damage = 5,
hp_min = 5,
hp_max = 55,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Boar.b3d",
textures = {
{"textureboar.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_boar",
attack = "animalworld_boar",
},
walk_velocity = 1,
run_velocity = 2,
jump = false,
pushable = true,
stay_near = {{"people:feeder", "default:fern_1", "default:fern_2", "marinara:reed_bundle", "naturalbiomes:reed_bundle", "farming:straw"}, 5},
follow = {"default:apple", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "mcl_farming:melon_item", "mcl_farming:potato_item", "mcl_farming:pumpkin_item", "mcl_farming:wheat_item", "mcl_farming:sweet_berry", "mcl_farming:mushroom_red", "mcl_farming:mushroom_brown", "farming:potato", "ethereal:banana_bread", "farming:melon_slice", "farming:carrot", "farming:seed_rice", "farming:corn", "naturalbiomes:hazelnut", "livingfloatlands:giantforest_oaknut", "farming:corn_cob", "farming:seed_barley", "farming:seed_oat", "farming:pumpkin_8", "livingfloatlands:giantforest_oaknut", "farming:baked_potato", "farming:sunflower_bread", "farming:pumpkin_bread", "farming:bread_multigrain", "farming:spanish_potatoes"},
view_range = 6,
replace_rate = 10,
replace_what = {"farming:soil", "farming:soil_wet"},
replace_with = "default:dirt",
drops = {
{name = "animalworld:pork_raw", chance = 1, min = 2, max = 5},
{name = "animalworld:boarcorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 100,
stand_speed = 50,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 200,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 15, 25, false, nil) then return end
end,
})
local spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_coniferous_litter"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_dry_grass", "default:dirt_with_coniferous_litter"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:mushroom_dirt", "ethereal:bamboo_dirt", "ethereal:green_dirt", "ethereal:mushroom"}
end
if not mobs.custom_spawn_animal then
mobs:spawn({
name = "animalworld:boar",
nodes = {"mcl_core:podzol", "default:dirt_with_conifrous_litter", "default:dirt_gray", "mcl_core:dirt_with_grass"},
neighbors = {"default:fern_1", "default:fern_2", "mcl_flowers:double:fern", "mcl_flowers:fern"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 1,
max_height = 80,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:dirt_with_coniferous_litter", "default:dirt_gray"})
if nods and #nods > 0 then
-- min herd of 2
local iter = math.min(#nods, 2)
-- print("--- boar at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:boar", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:boar", S("Boar"), "aboar.png")
mobs:alias_mob("animalworld:boar", "animalworld:boar") -- compatibility
-- raw porkchop
minetest.register_craftitem(":animalworld:pork_raw", {
description = S("Raw Pork"),
inventory_image = "animalworld_pork_raw.png",
on_use = minetest.item_eat(4),
groups = {food_meat_raw = 1, food_pork_raw = 1, flammable = 2},
})
-- cooked porkchop
minetest.register_craftitem(":animalworld:pork_cooked", {
description = S("Cooked Pork"),
inventory_image = "animalworld_pork_cooked.png",
on_use = minetest.item_eat(8),
groups = {food_meat = 1, food_pork = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "animalworld:pork_cooked",
recipe = "animalworld:pork_raw",
cooktime = 5,
})

127
mods/animalworld/camel.lua Normal file
View file

@ -0,0 +1,127 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:camel", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 5,
hp_min = 20,
hp_max = 60,
armor = 100,
collisionbox = {-0.7, -0.01, -0.7, 0.7, 2, 0.7},
visual = "mesh",
mesh = "Camel.b3d",
textures = {
{"texturecamel.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_camel",
attack = "animalworld_camel",
},
walk_velocity = 2,
run_velocity = 5,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 3,
pushable = true,
follow = {"default:dry_shrub", "default:grass_1", "ethereal:dry_shrub", "farming:seed_wheat", "farming:seed_rye", "default:junglegrass", "farming:melon_8", "farming:pumpkin_8", "ethereal:strawberry", "farming:blackberry", "naturalbiomes:blackberry", "naturalbiomes:cowberry", "naturalbiomes:banana", "naturalbiomes:banana_bunch", "farming:blueberries", "ethereal:orange", "livingdesert:figcactus_fruit", "livingfloatlands:paleojungle_clubmoss_fruit", "ethereal:banana", "livingdesert:date_palm_fruits", "farming:melon_slice", "naturalbiomes:wildrose", "naturalbiomes:banana", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "group:grass", "group:normal_grass"},
view_range = 7,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:camelcorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
knock_back = false,
fear_height = 2,
stay_near = {{"livingdesert:date_palm_leaves", "mcl_flowers:tallgrass", "mcl_core:deadbush", "livingdesert:yucca", "default:dry_shrub", "livingdesert:figcactus_trunk", "livingdesert:coldsteppe_grass1", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4"}, 5},
animation = {
speed_normal = 35,
stand_start = 0,
stand_end = 100,
walk_start = 200,
walk_end = 300,
punch_start = 100,
punch_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
local spawn_on = {"default:desert_sand", "default:sandstone"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"default:desert_sand", "default:sandstone"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"default:desert_sand", "ethereal:dry_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:camel",
nodes = {"default:desert_sand", "default:sandstone", "mcl_core:sand", "mcl_core:redsand"},
neighbors = {"livingdesert:date_palm_leaves", "mcl_core:deadbush", "mcl_core:cactus", "livingdesert:yucca", "default:dry_shrub", "livingdesert:figcactus_trunk", "livingdesert:coldsteppe_grass1", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4", "default:cactus"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 0,
max_height = 40,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:desert_sand", "default:sandstone"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- camel at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:camel", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:camel", S("Camel"), "acamel.png")
mobs:alias_mob("animalworld:camel", "animalworld:camel") -- compatibility

110
mods/animalworld/carp.lua Normal file
View file

@ -0,0 +1,110 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:carp", {
stepheight = 0.0,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 1,
damage = 1,
hp_min = 5,
hp_max = 25,
armor = 100,
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.5, 0.4},
visual = "mesh",
mesh = "Carp.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturecarp.png"},
},
sounds = {},
makes_footstep_sound = false,
walk_velocity = 2,
run_velocity = 3,
fly = true,
fly_in = "default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing",
fall_speed = 0,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
stay_near = {{"marinara:sand_with_alage", "mcl_flowers:waterlily", "mcl_ocean:seagrass:sand", "mcl_core:reeds", "mcl_ocean:bubble_coral", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral", "mcl_ocean:seagrass_gravel", "marinara:sand_with_seagrass", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay"}, 5},
stepheight = 0.0,
drops = {
{name = "animalworld:rawfish", chance = 1, min = 1, max = 1},
},
water_damage = 0,
air_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 100,
stand_start = 0,
stand_end = 100,
fly_start = 150, -- swim animation
fly_end = 250,
punch_start = 100,
punch_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {
"ethereal:worm", "marinara:sand_with_seagrass", "marinara:sand_with_seagrass2", "seaweed", "fishing:bait_worm",
"default:grass", "farming:cucumber", "farming:cabbage", "animalworld:ant", "animalworld:termite", "animalworld:fishfood", "animalworld:cockroach", "animalworld:anteggs_raw", "group:grass", "group:normal_grass"
},
view_range = 10,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 5, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:carp",
nodes = {"mcl_core:water_source", "default:water_source"}, {"default:river_water_source"},
neighbors = {"marinara:sand_with_alage", "mcl_flowers:waterlily", "mcl_ocean:seagrass:sand", "mcl_core:reeds", "marinara:sand_with_seagrass", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay"},
min_light = 14,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = -10,
max_height = 30,
day_toggle = true,
})
end
mobs:register_egg("animalworld:carp", S("Carp"), "acarp.png")
-- raw fish
minetest.register_craftitem(":animalworld:rawfish", {
description = S("Raw Fish"),
inventory_image = "animalworld_rawfish.png",
on_use = minetest.item_eat(3),
groups = {food_meat_raw = 1, flammable = 2},
})
-- cooked fish
minetest.register_craftitem(":animalworld:cookedfish", {
description = S("Cooked Fish"),
inventory_image = "animalworld_cookedfish.png",
on_use = minetest.item_eat(5),
groups = {food_meat = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "animalworld:cookedfish",
recipe = "animalworld:rawfish",
cooktime = 5,
})

View file

@ -0,0 +1,95 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:clamydosaurus", {
stepheight = 3,
type = "animal",
passive = true,
reach = 1,
attack_npcs = false,
damage = 1,
hp_min = 10,
hp_max = 35,
armor = 100,
collisionbox = {-0.268, -0.01, -0.268, 0.268, 0.25, 0.268},
visual = "mesh",
mesh = "Clamydosaurus.b3d",
drawtype = "front",
textures = {
{"textureclamydosaurus.png"},
},
sounds = {
random = "animalworld_monitor",},
makes_footstep_sound = true,
walk_velocity = 2,
run_velocity = 4,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 6,
stepheight = 5,
stay_near = {{"naturalbiomes:outback_rock", "mcl_core:deadbush", "mcl_core:cactus", "naturalbiomes:outback_trunk", "naturalbiomes:outback_bush_leaves", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4"}, 5},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 6,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_speed = 150,
walk_start = 250,
walk_end = 350,
fly_start = 250, -- swim animation
fly_end = 350,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {"animalworld:cockroach", "bees:frame_full", "animalworld:fishfood", "animalworld:ant", "animalworld:termite", "animalworld:bugice", "animalworld:termitequeen", "animalworld:notoptera", "animalworld:anteggs_raw"},
view_range = 6,
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = "default:sand"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:prairie_dirt", "default:dirt_with_grass", "ethereal:green_dirt"
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:clamydosaurus",
nodes = {"naturalbiomes:outback_litter", "mcl_core:sand", "mcl_core:redsand"},
neighbors = {"naturalbiomes:outback_rock", "naturalbiomes:outback_trunk", "naturalbiomes:outback_bush_leaves", "mcl_core:deadbush", "mcl_core:cactus"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 2,
max_height = 50,
})
end
mobs:register_egg("animalworld:clamydosaurus", S("Clamydosaurus"), "aclamydosaurus.png", 0)
mobs:alias_mob("animalworld:clamydosaurus", "animalworld:clamdydosaurus") -- compatibility

View file

@ -0,0 +1,95 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:cockatoo", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 2,
damage = 2,
hp_min = 10,
hp_max = 35,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.3, 0.3},
visual = "mesh",
mesh = "Cockatoo.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturecockatoo.png"},
},
sounds = {
attack = "animalworld_cockatoo3",
random = "animalworld_cockatoo",
damage = "animalworld_cockatoo2",
},
makes_footstep_sound = true,
walk_velocity = 2,
run_velocity = 4,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 6,
stepheight = 3,
stay_near = {{"naturalbiomes:outback_leaves", "naturalbiomes:outback_trunk", "naturalbiomes:outback_bush_leaves", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4"}, 5},
drops = {
{name = "animalworld:chicken_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:chicken_feather", chance = 1, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 10,
animation = {
speed_normal = 100,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_start = 200,
walk_end = 300,
fly_start = 350, -- swim animation
fly_end = 450,
punch_start = 100,
punch_end = 200,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"air"},
floats = 0,
follow = {
"farming:melon_slice", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "mcl_farming:melon_item", "mcl_farming:potato_item", "mcl_farming:pumpkin_item", "mcl_farming:wheat_item", "mcl_farming:sweet_berry", "farming:pineapple", "ethereal:banana", "ethereal:orange", "farming:grapes", "default:apple", "farming:potato", "ethereal:banana_bread", "farming:carrot", "farming:seed_rice", "farming:corn", "farming:wheat", "farming:beans", "farming:barley", "farming:oat", "farming:rye", "mobs:cheese", "farming:bread", "ethereal:banana_bread", "ethereal:banana", "farming:cabbage", "farming:lettuce", "farming:melon_slice", "naturalbiomes:coconut", "naturalbiomes:banana", "livingdesert:date_palm_fruits", "livingdesert:figcactus_fruit"
},
view_range = 4,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:cockatoo",
nodes = {"naturalbiomes:outback_litter", "mcl_core:dirt_with_grass", "mcl_core:acaciatree", "mcl_trees:tree_acacia"},
neighbors = {"naturalbiomes:outback_trunk", "naturalbiomes:outback_bush_leaves", "naturalbiomes:outback_leaves", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves"},
min_light = 0,
interval = 60,
chance = 800, -- 15000
active_object_count = 2,
min_height = 5,
max_height = 31000,
day_toggle = true,
})
end
mobs:register_egg("animalworld:cockatoo", S("Cockatoo"), "acockatoo.png")

View file

@ -0,0 +1,105 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:cockroach", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
group_attack = false,
owner_loyal = true,
reach = 2,
damage = 1,
hp_min = 5,
hp_max = 10,
armor = 100,
collisionbox = {-0.3, -0.01, -0.2, 0.3, 0.3, 0.2},
visual = "mesh",
mesh = "Cockroach.b3d",
textures = {
{"texturecockroach.png"},
},
child_texture = {
{"texturecockroachbaby.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_ant",
damage = "animalworld_ant",
},
walk_velocity = 1,
run_velocity = 2,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 8,
pushable = true,
follow = {"farming:melon_slice", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "mcl_farming:melon_item", "mcl_farming:potato_item", "mcl_farming:pumpkin_item", "mcl_farming:wheat_item", "mcl_farming:sweet_berry", "farming:pineapple", "ethereal:banana", "ethereal:orange", "farming:grapes", "default:apple", "farming:potato", "ethereal:banana_bread", "farming:carrot", "farming:seed_rice", "farming:corn", "farming:wheat", "farming:beans", "farming:barley", "farming:oat", "farming:rye", "mobs:cheese", "farming:bread", "ethereal:banana_bread", "ethereal:banana", "farming:cabbage", "farming:lettuce", "farming:melon_slice", "naturalbiomes:coconut", "naturalbiomes:banana", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw"},
view_range = 2,
stay_near = {{"default:jungletree", "default:junglegrass", "livingjungle::grass2", "livingjungle::grass1", "livingjungle:alocasia", "livingjungle:flamingoflower"}, 5},
drops = {
{name = "animalworld:cockroach", chance = 1, min = 1, max = 1},
},
water_damage = 2,
lava_damage = 5,
air_damage = 0,
light_damage = 0,
fear_height = 4,
animation = {
speed_normal = 100,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
jump_start = 220,
jump_end = 330,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 25, 0, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:cockroach",
nodes = {"livingjungle:jungleground", "livingjungle:leafyjungleground", "mcl_core:dirt_with_gras"},
neighbors = {"livingjungle:samauma_trunk", "mcl_trees:tree_jungle", "livingjungle:liana_stem", "livingjungle:alocasia", "livingjungle:flamingoflower", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_trees:leaves_jungle", "mcl_trees:leaves_mangrove"},
min_light = 0,
interval = 30,
chance = 1000, -- 15000
active_object_count = 3,
min_height = 5,
max_height = 31000,
day_toggle = false,
})
end
mobs:register_egg("animalworld:cockroach", S("Cockroach"), "acockroach.png")
mobs:alias_mob("animalworld:cockroach", "animalworld:cockroach") -- compatibility
minetest.register_craftitem(":animalworld:roastroach", {
description = S("Roasted Cockroach"),
inventory_image = "animalworld_roastroach.png",
on_use = minetest.item_eat(2),
groups = {food_meat_raw = 1, flammable = 2},
})
minetest.register_craft({
output = "animalworld:roastroach",
type = "shapeless",
recipe =
{"animalworld:cockroach", "default:torch"}
})

View file

@ -0,0 +1,332 @@
local S = minetest.get_translator("animalworld")
walls.register(":animalworld:termiteconcrete_wall", S"Termite Concrete Wall", "termiteconcrete.png",
"animalworld:termiteconcrete_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcrete",
"animalworld:termiteconcrete",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcrete.png"},
S("Termite Concrete Stair"),
S("Termite Concrete Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcrete_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcrete", "animalworld:termiteconcrete", "animalworld:termiteconcrete", "animalworld:termiteconcrete", "animalworld:termiteconcrete", "animalworld:termiteconcrete"}
})
walls.register(":animalworld:termiteconcretewhite_wall", S"Termite Concrete White Wall", "termiteconcretewhite.png",
"animalworld:termiteconcretewhite_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretewhite",
"animalworld:termiteconcretewhite",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretewhite.png"},
S("Termite Concrete White Stair"),
S("Termite Concrete White Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretewhite_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretewhite", "animalworld:termiteconcretewhite", "animalworld:termiteconcretewhite", "animalworld:termiteconcretewhite", "animalworld:termiteconcretewhite", "animalworld:termiteconcretewhite"}
})
walls.register(":animalworld:termiteconcretegrey_wall", S"Termite Concrete Grey Wall", "termiteconcretegrey.png",
"animalworld:termiteconcretegrey_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretegrey",
"animalworld:termiteconcretegrey",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretegrey.png"},
S("Termite Concrete Grey Stair"),
S("Termite Concrete Grey Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretegrey_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretegrey", "animalworld:termiteconcretegrey", "animalworld:termiteconcretegrey", "animalworld:termiteconcretegrey", "animalworld:termiteconcretegrey", "animalworld:termiteconcretegrey"}
})
walls.register(":animalworld:termiteconcreteblack_wall", S"Termite Concrete Black Wall", "termiteconcreteblack.png",
"animalworld:termiteconcreteblack_wall", default.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcreteblack",
"animalworld:termiteconcreteblack",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcreteblack.png"},
S("Termite Concrete Black Stair"),
S("Termite Concrete Black Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcreteblack_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcreteblack", "animalworld:termiteconcreteblack", "animalworld:termiteconcreteblack", "animalworld:termiteconcreteblack", "animalworld:termiteconcreteblack", "animalworld:termiteconcreteblack"}
})
walls.register(":animalworld:termiteconcreteblue_wall", S"Termite Concrete Blue Wall", "termiteconcreteblue.png",
"animalworld:termiteconcreteblue_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcreteblue",
"animalworld:termiteconcreteblue",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcreteblue.png"},
S("Termite Concrete Blue Stair"),
S("Termite Concrete Blue Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcreteblue_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcreteblue", "animalworld:termiteconcreteblue", "animalworld:termiteconcreteblue", "animalworld:termiteconcreteblue", "animalworld:termiteconcreteblue", "animalworld:termiteconcreteblue"}
})
walls.register(":animalworld:termiteconcretecyan_wall", S"Termite Concrete Cyan Wall", "termiteconcretecyan.png",
"animalworld:termiteconcretecyan_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretecyan",
"animalworld:termiteconcretecyan",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretecyan.png"},
S("Termite Concrete Cyan Stair"),
S("Termite Concrete Cyan Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretecyan_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretecyan", "animalworld:termiteconcretecyan", "animalworld:termiteconcretecyan", "animalworld:termiteconcretecyan", "animalworld:termiteconcretecyan", "animalworld:termiteconcretecyan"}
})
walls.register(":animalworld:termiteconcretegreen_wall", S"Termite Concrete Green Wall", "termiteconcretegreen.png",
"animalworld:termiteconcretegreen_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretegreen",
"animalworld:termiteconcretegreen",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretegreen.png"},
S("Termite Concrete Green Stair"),
S("Termite Concrete Green Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretegreen_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretegreen", "animalworld:termiteconcretegreen", "animalworld:termiteconcretegreen", "animalworld:termiteconcretegreen", "animalworld:termiteconcretegreen", "animalworld:termiteconcretegreen"}
})
walls.register(":animalworld:termiteconcretedarkgreen_wall", S"Termite Concrete Dark Green Wall", "termiteconcretedarkgreen.png",
"animalworld:termiteconcretedarkgreen_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretedarkgreen",
"animalworld:termiteconcretedarkgreen",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretedarkgreen.png"},
S("Termite Concrete Dark Green Stair"),
S("Termite Concrete Dark Green Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretedarkgreen_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretedarkgreen", "animalworld:termiteconcretedarkgreen", "animalworld:termiteconcretedarkgreen", "animalworld:termiteconcretedarkgreen", "animalworld:termiteconcretedarkgreen", "animalworld:termiteconcretedarkgreen"}
})
walls.register(":animalworld:termiteconcreteyellow_wall", S"Termite Concrete Yellow Wall", "termiteconcreteyellow.png",
"animalworld:termiteconcreteyellow_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcreteyellow",
"animalworld:termiteconcreteyellow",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcreteyellow.png"},
S("Termite Concrete Yellow Stair"),
S("Termite Concrete Yellow Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcreteyellow_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcreteyellow", "animalworld:termiteconcreteyellow", "animalworld:termiteconcreteyellow", "animalworld:termiteconcreteyellow", "animalworld:termiteconcreteyellow", "animalworld:termiteconcreteyellow"}
})
walls.register(":animalworld:termiteconcreteorange_wall", S"Termite Concrete Orange Wall", "termiteconcreteorange.png",
"animalworld:termiteconcreteorange_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcreteorange",
"animalworld:termiteconcreteorange",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcreteorange.png"},
S("Termite Concrete Orange Stair"),
S("Termite Concrete Orange Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcreteorange_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcreteorange", "animalworld:termiteconcreteorange", "animalworld:termiteconcreteorange", "animalworld:termiteconcreteorange", "animalworld:termiteconcreteorange", "animalworld:termiteconcreteorange"}
})
walls.register(":animalworld:termiteconcretebrown_wall", S"Termite Concrete Brown Wall", "termiteconcretebrown.png",
"animalworld:termiteconcretebrown_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretebrown",
"animalworld:termiteconcretebrown",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretebrown.png"},
S("Termite Concrete Brown Stair"),
S("Termite Concrete Brown Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretebrown_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretebrown", "animalworld:termiteconcretebrown", "animalworld:termiteconcretebrown", "animalworld:termiteconcretebrown", "animalworld:termiteconcretebrown", "animalworld:termiteconcretebrown"}
})
walls.register(":animalworld:termiteconcretered_wall", S"Termite Concrete Red Wall", "termiteconcretered.png",
"animalworld:termiteconcretered_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretered",
"animalworld:termiteconcretered",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretered.png"},
S("Termite Concrete Red Stair"),
S("Termite Concrete Red Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretered_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretered", "animalworld:termiteconcretered", "animalworld:termiteconcretered", "animalworld:termiteconcretered", "animalworld:termiteconcretered", "animalworld:termiteconcretered"}
})
walls.register(":animalworld:termiteconcretepink_wall", S"Termite Concrete Pink Wall", "termiteconcretepink.png",
"animalworld:termiteconcretepink_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretepink",
"animalworld:termiteconcretepink",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretepink.png"},
S("Termite Concrete Pink Stair"),
S("Termite Concrete Pink Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretepink_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretepink", "animalworld:termiteconcretepink", "animalworld:termiteconcretepink", "animalworld:termiteconcretepink", "animalworld:termiteconcretepink", "animalworld:termiteconcretepink"}
})
walls.register(":animalworld:termiteconcretemagenta_wall", S"Termite Concrete Magenta Wall", "termiteconcretemagenta.png",
"animalworld:termiteconcretemagenta_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcretemagenta",
"animalworld:termiteconcretemagenta",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcretemagenta.png"},
S("Termite Concrete Magenta Stair"),
S("Termite Concrete Magenta Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcretemagenta_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcretemagenta", "animalworld:termiteconcretemagenta", "animalworld:termiteconcretemagenta", "animalworld:termiteconcretemagenta", "animalworld:termiteconcretemagenta", "animalworld:termiteconcretemagenta"}
})
walls.register(":animalworld:termiteconcreteviolet_wall", S"Termite Concrete Violet Wall", "termiteconcreteviolet.png",
"animalworld:termiteconcreteviolet_wall", animalworld.sounds.node_sound_stone_defaults())
stairs.register_stair_and_slab(
"termiteconcreteviolet",
"animalworld:termiteconcreteviolet",
{cracky = 2, oddly_breakable_by_hand = 0, flammable = 0},
{"termiteconcreteviolet.png"},
S("Termite Concrete Violet Stair"),
S("Termite Concrete Violet Slab"),
animalworld.sounds.node_sound_stone_defaults()
)
minetest.register_craft({
output = "animalworld:termiteconcreteviolet_wall",
type = "shapeless",
recipe =
{"animalworld:termiteconcreteviolet", "animalworld:termiteconcreteviolet", "animalworld:termiteconcreteviolet", "animalworld:termiteconcreteviolet", "animalworld:termiteconcreteviolet", "animalworld:termiteconcreteviolet"}
})

97
mods/animalworld/crab.lua Normal file
View file

@ -0,0 +1,97 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:crab", {
stepheight = 1,
type = "animal",
passive = true,
reach = 1,
attack_npcs = false,
reach = 2,
damage = 0,
hp_min = 10,
hp_max = 40,
armor = 100,
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.4, 0.4},
visual = "mesh",
mesh = "Crab.b3d",
drawtype = "front",
textures = {
{"texturecrab.png"},
},
sounds = {
random = "animalworld_crab",
attack = "animalworld_crab",
},
makes_footstep_sound = false,
walk_velocity = 0.7,
run_velocity = 1,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 6,
stay_near = {{"default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "livingdesert:date_palm_leaves", "livingdesert:yucca", "default:dry_shrub", "livingdesert:figcactus_trunk", "livingdesert:coldsteppe_grass1", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "marinara:sand_with_seashells"}, 5},
drops = {
{name = "animalworld:raw_athropod", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 75,
stand_start = 1,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 200,
punch_end = 400,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:water_flowing"},
floats = 0,
follow = {"animalworld:rawfish", "mcl_mobitems:chicken", "mcl_fishing:pufferfish_raw", "mcl_mobitems:rotten_flesh", "mcl_mobitems:mutton", "mcl_mobitems:beef", "mcl_mobitems:porkchop", "mcl_mobitems:rabbit", "default:marram_grass_2", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw", "animalworld:rawmollusk", "marinaramobs:octopus_raw", "marinara:raw_oisters", "marinara:raw_athropod", "animalworld:rawfish", "fishing:fish_raw", "fishing:pike_raw", "marinaramobs:raw_exotic_fish", "nativevillages:catfish_raw", "xocean:fish_edible", "ethereal:fish_raw", "mobs:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw", "animalworld:cockroach", "bees:frame_full", "animalworld:fishfood", "animalworld:ant", "animalworld:termite", "animalworld:bugice", "animalworld:termitequeen", "animalworld:notoptera", "animalworld:anteggs_raw"},
view_range = 5,
replace_rate = 10,
replace_what = {"default:marram_grass_2", "ethereal:fish_raw", "fishing:fish_raw", "xocean:fish_edible", "water_life:meat_raw", "mobs:clownfish_raw"},
replace_with = "air",
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = "default:sand"
if minetest.get_modpath("ethereal") then
spawn_on = "default:sand"
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:crab",
nodes = {"default:sand", "mcl_core:sand", "mcl_core:gravel"},
neighbors = {"group:grass", "mcl_core:reeds", "group:normal_grass", "mcl_core:dirt_with_grass", "marinara:sand_with_seashells", "marinara:sand_with_seashells_pink", "marinara:sand_with_seashells_orange", "marinara:sand_with_seashells_yellow", "marinara:sand_with_seashells_brown", "marinara:sand_with_seashells_white"},
min_light = 0,
interval = 60,
chance = 500, -- 15000
active_object_count = 2,
min_height = 0,
max_height = 4,
})
end
mobs:register_egg("animalworld:crab", S("Crab"), "acrab.png", 0)
mobs:alias_mob("animalworld:crab", "animalworld:crab") -- compatibility

View file

@ -0,0 +1,93 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:crocodile", {
stepheight = 1,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = true,
reach = 2,
damage = 12,
hp_min = 50,
hp_max = 95,
armor = 100,
collisionbox = {-0.6, -0.01, -0.6, 0.6, 0.95, 0.6},
visual = "mesh",
mesh = "Crocodile.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturecrocodile.png"},
},
sounds = {
random = "animalworld_crocodile",
attack = "animalworld_crocodile",
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = true,
jump_height = 0.5,
stepheight = 1,
stay_near = {{"default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4", "livingjungle::grass2", "livingjungle::grass1", "livingjungle:alocasia", "livingjungle:flamingoflower", "naturalbiomes:ourback_grass", "naturalbiomes:ourback_grass3", "naturalbiomes:ourback_grass2", "naturalbiomes:ourback_grass4", "naturalbiomes:ourback_grass5"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:crocodilecorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 75,
stand_start = 0,
stand_end = 100,
walk_start = 250,
walk_end = 350,
fly_start = 400, -- swim animation
fly_end = 500,
punch_start = 100,
punch_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {
"ethereal:fish_raw", "mcl_mobitems:chicken", "mcl_fishing:pufferfish_raw", "mcl_mobitems:rotten_flesh", "mcl_mobitems:mutton", "mcl_mobitems:beef", "mcl_mobitems:porkchop", "mcl_mobitems:rabbit", "animalworld:rawfish", "mobs_fish:tropical",
"mobs:meat_raw", "animalworld:rabbit_raw", "xocean:fish_edible", "fishing:fish_raw", "water_life:meat_raw", "fishing:carp_raw", "animalworld:chicken_raw", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw", "animalworld:rawmollusk", "marinaramobs:octopus_raw", "marinara:raw_oisters", "marinara:raw_athropod", "animalworld:rawfish", "fishing:fish_raw", "fishing:pike_raw", "marinaramobs:raw_exotic_fish", "nativevillages:catfish_raw", "xocean:fish_edible", "ethereal:fish_raw", "mobs:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw"
},
view_range = 12,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:grove_dirt", "default:dry_dirt_with_dry_grass", "default:dirt_with_rainforest_litter"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:crocodile",
nodes = {"default:dry_dirt_with_dry_grass", "mcl_core:acaciatree", "mcl_trees:tree_acacia", "default:dirt_with_rainforest_litter", "naturalbiomes:outback_litter", "livingjungle:jungleground", "livingjungle:leafyjungleground"},
neighbors = {"group:grass", "group:normal_grass"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 0,
max_height = 3,
day_toggle = true,
})
end
mobs:register_egg("animalworld:crocodile", S("Crocodile"), "acrocodile.png")

View file

@ -0,0 +1,11 @@
mobs
default?
mcl_core?
mcl_sounds?
bucket?
ethereal?
xocean?
farming?
fishing?
hunger_ng?
livingcaves?

View file

@ -0,0 +1 @@
Adds various wild animals to your Minetest Game world.

View file

@ -0,0 +1,84 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:divingbeetle", {
stepheight = 1,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_npcs = true,
reach = 2,
damage = 1,
hp_min = 5,
hp_max = 25,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.3, 0.3},
visual = "mesh",
mesh = "Divingbeetle.b3d",
textures = {
{"texturedivingbeetle.png"},
},
makes_footstep_sound = false,
sounds = {
},
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = false,
jump_height = 3,
pushable = true,
view_range = 6,
drops = {
{name = "animalworld:fishfood", chance = 1, min = 0, max = 2},
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
fly = true,
follow = {
},
water_damage = 0,
lava_damage = 5,
air_damage = 1,
light_damage = 0,
fear_height = 2,
stay_near = {{"marinara:sand_with_alage", "mcl_flowers:waterlily", "mcl_ocean:seagrass:sand", "mcl_core:reeds", "marinara:sand_with_seagrass", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay"}, 4},
animation = {
speed_normal = 100,
stand_speed = 50,
stand_start = 100,
stand_end = 300,
walk_start = 0,
walk_end = 100,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 5, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:divingbeetle",
nodes = {"mcl_core:water_source", "default:water_source", "default:river_water_source", "mcl_core:water_source", "mcl_core:water_flowing"},
neighbors = {"default:papyrus", "mcl_core:reeds"},
min_light = 0,
interval = 30,
active_object_count = 2,
chance = 500, -- 15000
min_height = -10,
max_height = 30,
})
end
mobs:register_egg("animalworld:divingbeetle", S("Diving Beetle"), "adivingbeetle.png")
mobs:alias_mob("animalworld:divingbeetle", "animalworld:divingbeetle") -- compatibility

View file

@ -0,0 +1,88 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:dragonfly", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = true,
owner_loyal = true,
reach = 2,
damage = 1,
hp_min = 5,
hp_max = 25,
armor = 100,
collisionbox = {-0.1, -0.01, -0.1, 0.1, 0.2, 0.1},
visual = "mesh",
mesh = "Dragonfly.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturedragonfly.png"},
},
sounds = {
random = "animalworld_dragonfly",
},
makes_footstep_sound = false,
walk_velocity = 5,
run_velocity = 7,
walk_chance = 15,
fall_speed = 0,
jump = true,
jump_height = 6,
stepheight = 3,
fly = true,
stay_near = {{"naturalbiomes:alderswamp_reed3", "mcl_core:reeds", "naturalbiomes:alderswamp_reed2", "naturalbiomes:alderswamp_reed", "naturalbiomes:alderswamp_yellowflower", "naturalbiomes:waterlily", "marinara:reed_root"}, 4},
drops = {
},
water_damage = 4,
lava_damage = 4,
light_damage = 0,
fear_height = 0,
animation = {
speed_normal = 150,
stand_start = 0,
stand_end = 100,
fly_start = 100, -- swim animation
fly_end = 200,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"air"},
floats = 0,
follow = {
"animalworld:termitequeen", "animalworld:ant", "animalworld:termite"
},
view_range = 5,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:dragonfly",
nodes = {"air"},
neighbors = {"flowers:waterlily_waving", "mcl_core:reeds", "mcl_flowers:waterlily"},
min_light = 0,
interval = 30,
active_object_count = 2,
chance = 2000, -- 15000
min_height = 0,
max_height = 40,
day_toggle = true
})
end
mobs:register_egg("animalworld:dragonfly", S("Dragonfly"), "adragonfly.png")

View file

@ -0,0 +1,99 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:echidna", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = true,
reach = 3,
damage = 15,
hp_min = 25,
hp_max = 65,
armor = 100,
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.95, 0.2},
visual = "mesh",
mesh = "Echidna.b3d",
textures = {
{"textureechidna.png"},
},
child_texture = {
{"textureechidnababy.png"},
},
makes_footstep_sound = true,
sounds = {
},
walk_velocity = 0.5,
run_velocity = 0.5,
runaway = false,
jump = false,
jump_height = 3,
pushable = true,
stay_near = {{"animalworld:termitemould", "naturalbiomes:outback_grass", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4"}, 6},
follow = {"fishing:bait:worm", "bees:frame_full", "ethereal:worm", "animalworld:ant", "animalworld:termite"},
view_range = 3,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 1,
lava_damage = 5,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 70,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_start = 200,
walk_end = 300,
punch_start = 300,
punch_end = 400,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter", "default:dry_dirt_with_dry_grass"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:grass_grove", "ethereal:green_dirt", "default:dirt_with_rainforest_litter"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:echidna",
nodes = {"naturalbiomes:outback_litter", "mcl_core:sand", "mcl_core:redsand"},
neighbors = {"group:grass", "mcl_core:deadbush", "mcl_core:cactus", "group:normal_grass", "naturalbiomes:outback_grass", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5"},
min_light = 0,
interval = 30,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 5,
max_height = 50,
day_toggle = true,
})
end
mobs:register_egg("animalworld:echidna", S("Echidna"), "aechidna.png")
mobs:alias_mob("animalworld:echidna", "animalworld:echidna") -- compatibility

View file

@ -0,0 +1,125 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:elephant", {
stepheight = 2,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = true,
reach = 3,
damage = 16,
hp_min = 75,
hp_max = 120,
armor = 100,
collisionbox = {-1.0, -0.01, -1.0, 1.0, 2, 1.0},
visual = "mesh",
mesh = "Elephant.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"textureelephant.png"},
},
sounds = {
random = "animalworld_elephant",
attack = "animalworld_elephant",
},
makes_footstep_sound = true,
walk_velocity = 2,
run_velocity = 4,
runaway = false,
jump = false,
jump_height = 6,
stepheight = 2,
knock_back = false,
stay_near = {{"default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:elephantcorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 4,
pathfinding = true,
animation = {
speed_normal = 80,
stand_start = 0,
stand_end = 100,
walk_start = 300,
walk_end = 450,
punch_start = 100,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {
"ethereal:banana_single", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "mcl_farming:melon_item", "mcl_farming:potato_item", "mcl_farming:pumpkin_item", "mcl_farming:wheat_item", "mcl_farming:sweet_berry", "farming:corn_cob", "farming:cabbage",
"default:apple", "farming:cabbage", "farming:carrot", "farming:cucumber", "farming:grapes", "farming:pineapple", "ethereal:orange", "ethereal:coconut", "ethereal:coconut_slice", "livingdesert:date_palm_fruits", "livingdesert:figcactus_fruit", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "farming:melon_8", "farming:pumpkin_8", "ethereal:strawberry", "farming:blackberry", "naturalbiomes:blackberry", "naturalbiomes:cowberry", "naturalbiomes:banana", "naturalbiomes:banana_bunch", "farming:blueberries", "ethereal:orange", "livingdesert:figcactus_fruit", "livingfloatlands:paleojungle_clubmoss_fruit", "ethereal:banana", "livingdesert:date_palm_fruits", "farming:melon_slice", "naturalbiomes:wildrose", "naturalbiomes:banana", "group:grass", "group:normal_grass"
},
view_range = 6,
replace_rate = 10,
replace_what = {"farming:soil", "farming:soil_wet"},
replace_with = "default:dirt",
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"default:dry_dirt_with_dry_grass"}, {"default:dirt_with_rainforest_litter"}, {"ethereal:grove_dirt"}, {"ethereal:bamboo_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:elephant",
nodes = {"default:dry_dirt_with_dry_grass", "mcl_core:dirt_with_grass", "mcl_core:dirt_with_grass"},
neighbors = {"group:grass", "group:normal_grass", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 0,
max_height = 65,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:dry_dirt_with_dry_grass"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- elephant at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:elephant", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:elephant", S("Elephant"), "aelephant.png")

91
mods/animalworld/fox.lua Normal file
View file

@ -0,0 +1,91 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:fox", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 3,
hp_min = 10,
hp_max = 25,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Fox.b3d",
textures = {
{"texturefox.png"},
{"texturefox2.png"},
{"texturefox3.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_fox3",
attack = "animalworld_fox",
damage = "animalworld_fox2",
},
walk_velocity = 2,
run_velocity = 3,
jump = true,
jump_height = 6,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
pushable = true,
stay_near = {{"default:pine_needles", "animalworld:animalworld_tundrashrub5", "animalworld:animalworld_tundrashrub1", "animalworld:animalworld_tundrashrub2", "animalworld:animalworld_tundrashrub3", "animalworld:animalworld_tundrashrub4"}, 6},
follow = {"default:apple", "farming:potato", "ethereal:banana_bread", "farming:melon_slice", "farming:carrot", "farming:seed_rice", "farming:corn", "ethereal:fish_raw", "animalworld:rawfish", "mobs_fish:tropical",
"mobs:meat_raw", "animalworld:rabbit_raw", "xocean:fish_edible", "fishing:fish_raw", "water_life:meat_raw", "fishing:carp_raw", "animalworld:chicken_raw", "naturalbiomes:blackberry", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw"},
view_range = 12,
drops = {
{name = "mobs:leather", chance = 7, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 5,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 120,
stand_speed = 50,
stand_start = 0,
stand_end = 100,
stand2_start = 100,
stand2_end = 200,
walk_start = 200,
walk_end = 300,
punch_start = 300,
punch_end = 400,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:fox",
nodes = {"default:permafrost", "mcl_core:snow", "default:permafrost_with_moss", "default:permafrost_with_stones"},
neighbors = {"animalworld:animalworld_tundrashrub1", "mcl_core:sprucetree", "animalworld:animalworld_tundrashrub2", "animalworld:animalworld_tundrashrub1", "animalworld:animalworld_tundrashrub2", "animalworld:animalworld_tundrashrub3", "animalworld:animalworld_tundrashrub4"},
min_light = 0,
interval = 60,
chance = 1000, -- 15000
active_object_count = 2,
min_height = 1,
max_height = 80,
})
end
mobs:register_egg("animalworld:fox", S("Fox"), "afox.png")
mobs:alias_mob("animalworld:fox", "animalworld:fox") -- compatibility

91
mods/animalworld/frog.lua Normal file
View file

@ -0,0 +1,91 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:frog", {
stepheight = 3,
type = "animal",
passive = true,
reach = 1,
attack_npcs = false,
damage = 1,
hp_min = 5,
hp_max = 25,
armor = 100,
collisionbox = {-0.268, -0.01, -0.268, 0.268, 0.25, 0.268},
visual = "mesh",
mesh = "Frog.b3d",
drawtype = "front",
textures = {
{"texturefrog.png"},
},
sounds = {
random = "animalworld_frog",},
makes_footstep_sound = true,
walk_velocity = 2,
run_velocity = 3,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 6,
stay_near = {{"mcl_flowers:waterlily", "naturalbiomes:alderswamp_reed3", "mcl_core:reeds", "naturalbiomes:alderswamp_reed2", "naturalbiomes:alderswamp_reed", "naturalbiomes:alderswamp_yellowflower", "default:grass", "default:grass_2", "default:grass_3"}, 5},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 6,
animation = {
speed_normal = 100,
stand_start = 1,
stand_end = 100,
walk_start = 100,
walk_end = 200,
fly_start = 250, -- swim animation
fly_end = 350,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {"fishing:bait:worm", "ethereal:worm", "animalworld:ant", "animalworld:termite", "animalworld:cockroach"},
view_range = 6,
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = "default:sand"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:prairie_dirt", "default:dirt_with_grass", "ethereal:green_dirt"
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:frog",
nodes = {"mcl_core:dirt_with_grass", "default:dirt_with_grass", "default:dirt_with_rainforest_litter", "naturalbiomes:alderswamp_litter", "naturalbiomes:heath_litter"},
neighbors = {"naturalbiomes:alderswamp_reed3", "naturalbiomes:alderswamp_reed2", "naturalbiomes:alderswamp_reed", "naturalbiomes:alderswamp_yellowflower", "group:grass", "group:normal_grass", "mcl_flowers:tallgrass", "mcl_flowers:tulip_red", "mcl_flowers:sunflower", "mcl_flowers:poppy", "mcl_core:birchtree", "mcl_trees:tree_birch", "mcl_trees:tree_oak", "mcl_trees:tree_dark_oak", "mcl_core:tree", "mcl_trees:leaves_oak", "mcl_trees:leaves_dark_oak", "mcl_core:leaves", "mcl_core:birchleaves", "mcl_core:darkleaves", "mcl_core:spruceleaves"},
min_light = 0,
interval = 60,
chance = 1000, -- 15000
active_object_count = 2,
min_height = -10,
max_height = 2,
})
end
mobs:register_egg("animalworld:frog", S("Frog"), "afrog.png", 0)
mobs:alias_mob("animalworld:frog", "animalworld:frog") -- compatibility

View file

@ -0,0 +1,132 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:giraffe", {
type = "animal",
passive = false,
attack_type = "dogfight",
attack_animals = false,
attack_monsters = true,
group_attack = true,
reach = 3,
damage = 18,
hp_min = 100,
hp_max = 160,
armor = 100,
collisionbox = {-1, -0.01, -1, 1, 2.0, 1},
visual = "mesh",
mesh = "Giraffe.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturegiraffe.png"},
},
sounds = {
random = "animalworld_giraffe",
attack = "animalworld_giraffe2",
distance = 13,
},
makes_footstep_sound = true,
walk_velocity = 1.0,
run_velocity = 2,
walk_chance = 30,
runaway = false,
jump = false,
jump_height = 6,
stepheight = 1,
stay_near = {{"naturalbiomes:savanna_flowergrass", "naturalbiomes:savanna_grass", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:savannagrass"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
knock_back = false,
pathfinding = true,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
stand2_start = 0,
stand2_end = 100,
stand3_start = 0,
stand3_end = 100,
walk_start = 200,
walk_end = 300,
punch_start = 300,
punch_end = 400,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {"default:apple", "mcl_trees:leaves_oak", "mcl_trees:leaves_dark_oak", "mcl_core:leaves", "mcl_core:birchleaves", "mcl_core:darkleaves", "mcl_core:spruceleaves", "default:dry_dirt_with_dry_grass", "mcl_trees:leaves_oak", "mcl_trees:leaves_dark_oak", "farming:seed_wheat", "default:junglegrass", "farming:seed_oat", "naturalbiomes:savannagrass", "naturalbiomes:savannagrassmall", "naturalbiomes:savanna_flowergrass", "default:acacia_leaves", "naturalbiomes:acacia_leaves"},
view_range = 10,
replace_rate = 10,
replace_what = {"farming:soil", "farming:soil_wet"},
replace_with = "default:dirt",
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 15, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter", "ethereal:green_dirt", "ethereal:grass_grove"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:giraffe",
nodes = {"naturalbiomes:savannalitter", "mcl_core:dirt_with_grass"},
neighbors = {"naturalbiomes:acacia_trunk", "mcl_core:acaciatree", "mcl_trees:tree_acacia"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 5,
max_height = 100,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"naturalbiomes:savannalitter"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- boar at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:giraffe", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:giraffe", ("Giraffe"), "agiraffe.png")

128
mods/animalworld/gnu.lua Normal file
View file

@ -0,0 +1,128 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:gnu", {
stepheight = 2,
type = "animal",
passive = true,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 2,
hp_min = 30,
hp_max = 60,
armor = 100,
collisionbox = {-0.6, -0.01, -0.6, 0.6, 0.95, 0.6},
visual = "mesh",
mesh = "Gnu.b3d",
textures = {
{"texturegnu.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_gnu",
},
walk_velocity = 1,
run_velocity = 4,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 3,
pushable = true,
stay_near = {{"default:dry_grass_1", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4"}, 6},
follow = {"default:apple", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "default:dry_dirt_with_dry_grass", "farming:seed_wheat", "default:junglegrass", "farming:seed_oat", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "group:grass", "group:normal_grass"},
view_range = 10,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:gnucorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 3,
animation = {
speed_normal = 60,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
run_speed = 100,
run_start = 200,
run_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 15, false, nil) then return end
end,
})
local spawn_on = {"default:dry_dirt_with_dry_grass"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"default:dry_dirt_with_dry_grass"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"default:dry_dirt_with_dry_grass", "ethereal:prairie_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:gnu",
nodes = {"default:dry_dirt_with_dry_grass", "mcl_core:dirt_with_grass", "mcl_core:dirt_with_grass"},
neighbors = {"group:grass", "group:normal_grass", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 20,
max_height = 50,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:dry_dirt_with_dry_grass"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- gnu at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:gnu", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:gnu", ("Gnu"), "agnu.png")
mobs:alias_mob("animalworld:gnu", "animalworld:gnu") -- compatibility

86
mods/animalworld/goby.lua Normal file
View file

@ -0,0 +1,86 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:goby", {
stepheight = 0.0,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 1,
damage = 0,
hp_min = 5,
hp_max = 5,
armor = 100,
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.2, 0.2},
visual = "mesh",
mesh = "Goby.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturegoby.png"},
},
sounds = {},
makes_footstep_sound = false,
walk_velocity = 0.5,
run_velocity = 1,
fly = true,
fly_in = "default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing",
fall_speed = 0,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
stepheight = 0.0,
drops = {
{name = "animalworld:rawfish", chance = 1, min = 1, max = 1},
},
water_damage = 0,
air_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
stay_near = {{"marinara:sand_with_alage", "marinara:sand_with_seagrass", "mcl_ocean:bubble_coral", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral", "mcl_ocean:seagrass_gravel", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay", "marinara:softcoral_red", "marinara:softcoral_white", "marinara:softcoral_green", "marinara:softcoral_white", "marinara:softcoral_green", "default:coral_cyan", "default:coral_pink", "default:coral_green"}, 4},
animation = {
speed_normal = 200,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
fly_start = 100, -- swim animation
fly_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {
"ethereal:worm", "seaweed", "fishing:bait_worm",
"animalworld:ant", "animalworld:termite", "animalworld:fishfood"
},
view_range = 5,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:goby",
nodes = {"mcl_core:water_source", "default:water_source", "default:river_water_source"},
neighbors = {"default:coral_cyan", "default:coral_green", "default:coral_pink", "mcl_ocean:bubble_coral", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral", "mcl_ocean:seagrass_gravel"},
min_light = 0,
interval = 30,
chance = 2000, -- 15000
active_object_count = 4,
min_height = -15,
max_height = 30,
})
end
mobs:register_egg("animalworld:goby", S("Goby"), "agoby.png")

View file

@ -0,0 +1,80 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:goldenmole", {
type = "animal",
stepheight = 1,
passive = true,
attack_type = "dogfight",
attack_npcs = false,
group_attack = true,
reach = 1,
damage = 0,
hp_min = 35,
hp_max = 135,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.3, 0.3},
visual = "mesh",
mesh = "Goldenmole.b3d",
textures = {
{"texturegoldenmole.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_goldenmole",
},
walk_velocity = 1,
run_velocity = 3,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 6,
stay_near = {{"livingdesert:date_palm_leaves", "mcl_core:deadbush", "mcl_core:cactus", "livingdesert:yucca", "default:dry_shrub", "livingdesert:figcactus_trunk", "livingdesert:coldsteppe_grass1", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4"}, 5},
pushable = true,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 3},
},
water_damage = 5,
lava_damage = 5,
light_damage = 0,
fear_height = 2,
animation = {
stand_start = 100,
stand_end = 300,
stand_speed = 100,
walk_start = 0,
walk_end = 100,
walk_speed = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {"fishing:bait:worm", "bees:frame_full", "ethereal:worm", "animalworld:ant", "animalworld:termite", "animalworld:cockroach"},
view_range = 10,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:goldenmole",
nodes = {"default:desert_sand", "mcl_core:sand", "mcl_core:redsand"},
neighbors = {"livingdesert:date_palm_leaves", "mcl_core:deadbush", "mcl_core:cactus", "livingdesert:yucca", "default:dry_shrub", "livingdesert:figcactus_trunk", "livingdesert:coldsteppe_grass1", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4", "default:cactus"},
min_light = 14,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 10,
max_height = 55,
})
end
mobs:register_egg("animalworld:goldenmole", S("Golden Mole"), "agoldenmole.png")
mobs:alias_mob("animalworld:goldenmole", "animalworld:goldenmole") -- compatibility

104
mods/animalworld/goose.lua Normal file
View file

@ -0,0 +1,104 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:goose", {
stepheight = 6,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
owner_loyal = true,
reach = 2,
damage = 1,
hp_min = 15,
hp_max = 30,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.5, 0.3},
visual = "mesh",
mesh = "Goose.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturegoose.png"},
},
sounds = {
attack = "animalworld_goose2",
random = "animalworld_goose",
damage = "animalworld_goose3",
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 3,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 6,
stepheight = 1,
stay_near = {{"naturalbiomes:alderswamp_reed3", "naturalbiomes:alderswamp_reed2", "naturalbiomes:alderswamp_reed", "naturalbiomes:alderswamp_yellowflower", "naturalbiomes:waterlily"}, 5},
drops = {
{name = "animalworld:chicken_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:chicken_feather", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 60,
stand_speed = 30,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
stand2_start = 200,
stand2_end = 300,
walk_start = 300,
walk_end = 400,
fly_start = 450, -- swim animation
fly_end = 550,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 1,
follow = {
"default:dry_dirt_with_dry_grass", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "farming:seed_wheat", "default:junglegrass", "farming:seed_oat", "naturalbiomes:savannagrass", "naturalbiomes:savannagrassmall", "naturalbiomes:alderswamp_reed", "naturalbiomes:alderswamp_reed2", "naturalbiomes:alderswamp_reed3", "farming:lettuce", "farming:cabbage", "ethereal:snowygrass", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "group:grass", "group:normal_grass"
},
view_range = 5,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter", "ethereal:grove_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:goose",
nodes = {"naturalbiomes:alderswamp_litter", "default:permafrost", "mcl_core:dirt_with_grass"},
neighbors = {"naturalbiomes:alderswamp_reed3", "naturalbiomes:alderswamp_reed2", "naturalbiomes:alderswamp_reed", "mcl_flowers:waterlily", "mcl_ocean:seagrass:sand", "mcl_core:reeds", "naturalbiomes:alderswamp_yellowflower", "group:grass", "group:normal_grass", "animalworld:animalworld_tundrashrub1", "animalworld:animalworld_tundrashrub2"},
min_light = 0,
interval = 60,
chance = 1000, -- 15000
active_object_count = 4,
min_height = -1,
max_height = 3,
day_toggle = true,
})
end
mobs:register_egg("animalworld:goose", S("Goose"), "agoose.png")

182
mods/animalworld/hare.lua Normal file
View file

@ -0,0 +1,182 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:hare", {
stepheight = 1,
type = "animal",
passive = true,
reach = 1,
hp_min = 15,
hp_max = 40,
armor = 100,
collisionbox = {-0.268, -0.01, -0.268, 0.268, 0.5, 0.268},
visual = "mesh",
mesh = "Hare.b3d",
drawtype = "front",
textures = {
{"texturehare.png"},
{"texturehare.png"},
{"texturehare.png"},
},
sounds = {},
makes_footstep_sound = false,
walk_velocity = 3,
run_velocity = 6,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 6,
drops = {
{name = "animalworld:rabbit_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:rabbit_hide", chance = 1, min = 0, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 100,
stand_start = 1,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 100,
punch_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {"farming:carrot", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "farming_plus:carrot_item", "default:grass_1", "farming:carrot_7", "farming:carrot_8", "farming_plus:carrot", "farming:lettuce", "farming:cabbage", "ethereal:snowygrass", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "group:grass", "group:normal_grass"},
view_range = 8,
replace_rate = 10,
replace_what = {"farming:carrot_7", "farming:carrot_8", "farming_plus:carrot", "farming:lettuce", "farming:cabbage", "ethereal:snowygrass", "flowers:geranium", "flowers:rose"},
replace_with = "air",
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 5, 0, false, nil) then return end
-- Monty Python tribute
local item = clicker:get_wielded_item()
if item:get_name() == "mobs:lava_orb" then
if not mobs.is_creative(clicker:get_player_name()) then
item:take_item()
clicker:set_wielded_item(item)
end
self.object:set_properties({
textures = {"texturehare.png"},
})
self.type = "monster"
self.health = 20
self.passive = false
return
end
end,
on_spawn = function(self)
local pos = self.object:get_pos() ; pos.y = pos.y - 1
-- white snowy bunny
if minetest.find_node_near(pos, 1,
{"default:snow", "default:snowblock", "default:dirt_with_snow"}) then
self.base_texture = {"texturehare.png"}
self.object:set_properties({textures = self.base_texture})
-- brown desert bunny
elseif minetest.find_node_near(pos, 1,
{"default:desert_sand", "default:desert_stone"}) then
self.base_texture = {"texturehare.png"}
self.object:set_properties({textures = self.base_texture})
-- grey stone bunny
elseif minetest.find_node_near(pos, 1,
{"default:stone", "default:gravel"}) then
self.base_texture = {"texturehare.png"}
self.object:set_properties({textures = self.base_texture})
end
return true -- run only once, false/nil runs every activation
end,
attack_type = "dogfight",
damage = 5,
})
local spawn_on = "default:dirt_with_grass"
if minetest.get_modpath("ethereal") then
spawn_on = "ethereal:prairie_dirt", "default:dirt_with_grass"
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:hare",
nodes = {"mcl_core:dirt_with_grass", "default:dirt_with_grass", "naturalbiomes:mediterran_litter", "naturalbiomes:heath_litter", "naturalbiomes:bushland_bushlandlitter"},
neighbors = {"naturalbiomes:heath_grass", "mcl_flowers:tallgrass", "mcl_flowers:tulip_red", "mcl_flowers:sunflower", "mcl_flowers:poppy", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:heatherflower", "naturalbiomes:heatherflower2", "naturalbiomes:heatherflower3", "group:grass", "group:normal_grass", "naturalbiomes:med_flower2", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:med_flower3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 5,
max_height = 100,
day_toggle = true,
})
end
mobs:register_egg("animalworld:hare", S("Hare"), "ahare.png", 0)
mobs:alias_mob("animalworld:hare", "animalworld:hare") -- compatibility
-- raw rabbit
minetest.register_craftitem(":animalworld:rabbit_raw", {
description = S("Raw Hare"),
inventory_image = "animalworld_rabbit_raw.png",
on_use = minetest.item_eat(3),
groups = {food_meat_raw = 1, food_rabbit_raw = 1, flammable = 2},
})
-- cooked rabbit
minetest.register_craftitem(":animalworld:rabbit_cooked", {
description = S("Cooked Hare"),
inventory_image = "animalworld_rabbit_cooked.png",
on_use = minetest.item_eat(5),
groups = {food_meat = 1, food_rabbit = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "animalworld:rabbit_cooked",
recipe = "animalworld:rabbit_raw",
cooktime = 5,
})
-- rabbit hide
minetest.register_craftitem(":animalworld:rabbit_hide", {
description = S("Hare Hide"),
inventory_image = "animalworld_rabbit_hide.png",
groups = {flammable = 2},
})
minetest.register_craft({
type = "fuel",
recipe = "animalworld:rabbit_hide",
burntime = 2,
})
minetest.register_craft({
output = "mobs:leather",
type = "shapeless",
recipe = {
"animalworld:rabbit_hide", "animalworld:rabbit_hide",
"animalworld:rabbit_hide", "animalworld:rabbit_hide"
}
})

View file

@ -0,0 +1,93 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:hermitcrab", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 0,
hp_min = 60,
hp_max = 120,
armor = 100,
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.3, 0.2},
visual = "mesh",
mesh = "Hermitcrab.b3d",
textures = {
{"texturehermitcrab.png"},
{"texturehermitcrab2.png"},
{"texturehermitcrab3.png"},
{"texturehermitcrab4.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_crab",
attack = "animalworld_crab",
random = "animalworld_crab",
},
walk_velocity = 0.4,
run_velocity = 0.6,
runaway = true,
stay_near = {{"naturalbiomes:palmbeach_grass1", "naturalbiomes:palmbeach_grass2", "naturalbiomes:palm_trunk", "naturalbiomes:beach_bush_leaves"}, 5},
jump = false,
jump_height = 3,
floats = 0,
pushable = true,
follow = {"default:apple", "mcl_flowers:tallgrass", "mcl_mobitems:chicken", "mcl_fishing:pufferfish_raw", "mcl_mobitems:rotten_flesh", "mcl_mobitems:mutton", "mcl_mobitems:beef", "mcl_mobitems:porkchop", "mcl_mobitems:rabbit", "mcl_core:deadbush", "mcl_bamboo:bamboo", "default:dry_dirt_with_dry_grass", "farming:seed_wheat", "default:junglegrass", "farming:seed_oat", "default:kelp", "seaweed", "xocean:kelp",
"default:grass", "farming:cucumber", "farming:cabbage", "xocean:seagrass", "farming:lettuce", "default:junglegrass", "animalworld:rawfish", "mobs_fish:tropical", "mobs:clownfish_raw",
"mobs:bluefish_raw", "fishing:bait_worm", "fishing:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw", "naturalbiomes:coconut", "naturalbiomes:banana"},
view_range = 5,
drops = {
{name = "animalworld:raw_athropod", chance = 1, min = 0, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 3,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
stand2_start = 300,
stand2_end = 400,
walk_start = 200,
walk_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 35, 35, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:hermitcrab",
nodes = {"naturalbiomes:palmbeach_sand", "mcl_core:sand"},
neighbors = {"naturalbiomes:palmbeach_grass1", "naturalbiomes:palmbeach_grass2", "naturalbiomes:palmbeach_grass3", "mcl_core:deadbush", "mcl_core:cactus", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_trees:leaves_jungle", "mcl_trees:leaves_mangrove"},
min_light = 0,
interval = 30,
chance = 2000, -- 15000
active_object_count = 4,
min_height = 2,
max_height = 6,
})
end
mobs:register_egg("animalworld:hermitcrab", S("Hermit Crab"), "ahermitcrab.png")
mobs:alias_mob("animalworld:hermitcrab", "animalworld:hermitcrab") -- compatibility

View file

@ -0,0 +1,99 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:hippo", {
stepheight = 2,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = true,
reach = 3,
damage = 12,
hp_min = 65,
hp_max = 100,
armor = 100,
collisionbox = {-0.8, -0.01, -0.8, 0.8, 1.2, 0.8},
visual = "mesh",
mesh = "HippoNEW.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturehippoNEW.png"},
},
sounds = {
random = "animalworld_hippo",
attack = "animalworld_hippo",
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = true,
jump_height = 0.5,
stepheight = 2,
knock_back = false,
stay_near = {{"default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4", "mcl_core:dirt_with_grass", "mcl_core:acaciatree", "mcl_trees:tree_acacia"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:hippocorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 3,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
stand_start = 100,
stand_end = 200,
walk_start = 300,
walk_end = 400,
fly_start = 300, -- swim animation
fly_end = 4000,
punch_speed = 100,
punch_start = 200,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {
"ethereal:banana_single", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "mcl_farming:melon_item", "mcl_farming:potato_item", "mcl_farming:pumpkin_item", "mcl_farming:wheat_item", "mcl_farming:sweet_berry", "farming:corn_cob", "farming:cabbage",
"default:apple", "water_life:meat_raw", "xocean:fish_edible", "ethereal:fish_raw", "ethereal:banana", "farming:cabbage", "farming:lettuce", "farming:melon_slice", "group:grass", "group:normal_grass"
},
view_range = 6,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"default:dry_dirt_with_dry_grass"}, {"default:dirt_with_rainforest_litter"}, {"ethereal:grove_dirt"}, {"ethereal:prairie_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:hippo",
nodes = {"default:dry_dirt_with_dry_grass", "mcl_core:dirt_with_grass"},
neighbors = {"group:grass", "group:normal_grass", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves", "mcl_core:acaciatree", "mcl_trees:tree_acacia"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 0,
max_height = 5,
day_toggle = true,
})
end
mobs:register_egg("animalworld:hippo", S("Hippo"), "ahippo.png")

View file

@ -0,0 +1,81 @@
hunger_ng.add_hunger_data('animalworld:egg', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:chicken_egg_fried', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:chicken_raw', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:chicken_cooked', {
satiates = 3.0,
})
hunger_ng.add_hunger_data('animalworld:pork_raw', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:pork_cooked', {
satiates = 4.0,
})
hunger_ng.add_hunger_data('animalworld:rawfish', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:cookedfish', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:rabbit_raw', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:rabbit_cooked', {
satiates = 3.0,
})
hunger_ng.add_hunger_data('animalworld:rat_cooked', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:raw_athropod', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:cooked_athropod', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:rawmollusk', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:cookedmollusk', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:butter', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:bucket_milk', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:cheese', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:anteggs_raw', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:anteggs_cooked', {
satiates = 2.0,
})
hunger_ng.add_hunger_data('animalworld:termitequeen', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:escargots', {
satiates = 5.0,
})
hunger_ng.add_hunger_data('animalworld:locust_roasted', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:bugice', {
satiates = 1.0,
})
hunger_ng.add_hunger_data('animalworld:whalemeat_raw', {
satiates = 5.0,
})
hunger_ng.add_hunger_data('animalworld:whalemeat_cooked', {
satiates = 15.0,
})
hunger_ng.add_hunger_data('animalworld:roastroach', {
satiates = 1.0,
})

120
mods/animalworld/hyena.lua Normal file
View file

@ -0,0 +1,120 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:hyena", {
stepheight = 2,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = true,
reach = 2,
damage = 16,
hp_min = 35,
hp_max = 65,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Hyena.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturehyena.png"},
},
sounds = {
random = "animalworld_hyena",
attack = "animalworld_hyena",
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 3,
runaway = false,
jump = true,
jump_height = 6,
stepheight = 2,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:hyenacorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 4,
stay_near = {{"naturalbiomes:savanna_flowergrass", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves", "naturalbiomes:savanna_grass", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:savannagrass"}, 6},
animation = {
speed_normal = 75,
stand_start = 0,
stand_end = 100,
walk_start = 150,
walk_end = 250,
punch_start = 250,
punch_end = 350,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {
"ethereal:fish_raw", "mcl_mobitems:chicken", "mcl_fishing:pufferfish_raw", "mcl_mobitems:rotten_flesh", "mcl_mobitems:mutton", "mcl_mobitems:beef", "mcl_mobitems:porkchop", "mcl_mobitems:rabbit", "animalworld:rawfish", "mobs_fish:tropical",
"mobs:meat_raw", "animalworld:rabbit_raw", "animalworld:pork_raw", "water_life:meat_raw", "xocean:fish_edible", "animalworld:chicken_raw", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw"
},
view_range = 10,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 15, 0, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"default:dry_dirt_with_dry_grass"}, {"ethereal:dry_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:hyena",
nodes = {"default:dry_dirt_with_dry_grass", "naturalbiomes:savannalitter", "mcl_core:dirt_with_grass"},
neighbors = {"group:grass", "group:normal_grass", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves", "mcl_core:acaciatree", "mcl_trees:tree_acacia"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 20,
max_height = 60,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:dry_dirt_with_dry_grass", "naturalbiomes:savannalitter"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- hyena at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:hyena", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:hyena", S("Hyena"), "ahyena.png")

126
mods/animalworld/ibex.lua Normal file
View file

@ -0,0 +1,126 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:ibex", {
type = "animal",
passive = false,
attack_type = "dogfight",
attack_animals = false,
attack_npcs = false,
group_attack = true,
reach = 3,
damage = 9,
hp_min = 45,
hp_max = 60,
armor = 100,
collisionbox = {-0.4, -0.01, -0.4, 0.4, 0.5, 0.4},
visual = "mesh",
mesh = "Ibex.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"textureibex.png"},
},
sounds = {
random = "animalworld_ibex",
damage = "animalworld_ibex",
distance = 13,
},
makes_footstep_sound = true,
walk_velocity = 1.5,
run_velocity = 3,
walk_chance = 20,
runaway = false,
jump = true,
jump_height = 6,
stepheight = 3,
stay_near = {{"naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:alpine_grass3", "naturalbiomes:alpine_dandelion", "naturalbiomes:alpine_edelweiss", "naturalbiomes:med_flower2", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:med_flower3"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 4,
pathfinding = true,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_start = 200,
walk_end = 300,
punch_start = 300,
punch_end = 400,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {"default:apple", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "default:dry_dirt_with_dry_grass", "farming:seed_wheat", "default:junglegrass", "farming:seed_oat", "naturalbiomes:savannagrass", "naturalbiomes:savannagrassmall", "naturalbiomes:savanna_flowergrass", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:alpine_grass3", "naturalbiomes:alpine_dandelion", "naturalbiomes:med_flower1", "naturalbiomes:med_flower3", "naturalbiomes:med_flower2", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2"},
view_range = 10,
replace_rate = 10,
replace_what = {"farming:soil", "farming:soil_wet"},
replace_with = "default:dirt",
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 5, 0, 25, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter", "ethereal:green_dirt", "ethereal:grass_grove"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:ibex",
nodes = {"naturalbiomes:alpine_litter", "naturalbiomes:mediterran_litter", "mcl_core:stone", "mcl_core:granite", "mcl_core:dirt_with_grass"},
neighbors = {"naturalbiomes:med_grass1", "mcl_farming:sweet_berry_bush_3", "mcl_core:sprucetree", "mcl_trees:tree_spruce", "mcl_trees:leaves_spruce", "mcl_core:tree", "mcl_trees:leaves_oak", "mcl_trees:leaves_dark_oak", "mcl_core:leaves", "mcl_core:birchleaves", "mcl_core:darkleaves", "mcl_core:spruceleaves", "naturalbiomes:med_grass2", "naturalbiomes:med_grass3", "naturalbiomes:med_grass4", "naturalbiomes:med_flower1", "naturalbiomes:med_flower3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:alpine_grass3"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 30,
max_height = 31000,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"naturalbiomes:alpine_litter", "naturalbiomes:mediterran_litter"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- ibex at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:ibex", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:ibex", S("Ibex"), "aibex.png")

108
mods/animalworld/iguana.lua Normal file
View file

@ -0,0 +1,108 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:iguana", {
stepheight = 2,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = true,
reach = 2,
damage = 2,
hp_min = 15,
hp_max = 25,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Iguana.b3d",
textures = {
{"textureiguana.png"},
{"textureiguana2.png"},
{"textureiguana3.png"},
{"textureiguana4.png"},
{"textureiguana5.png"},
},
makes_footstep_sound = true,
sounds = {
},
walk_velocity = 1,
run_velocity = 2,
jump = false,
pushable = true,
follow = {"ethereal:banana_single", "mcl_farming:beetroot_item", "mcl_farming:carrot_item", "mcl_farming:melon_item", "mcl_farming:potato_item", "mcl_farming:pumpkin_item", "mcl_farming:wheat_item", "mcl_farming:sweet_berry", "farming:corn_cob", "farming:cabbage",
"default:apple", "farming:cabbage", "farming:carrot", "farming:cucumber", "farming:grapes", "farming:pineapple", "ethereal:orange", "ethereal:coconut", "ethereal:coconut_slice", "livingdesert:date_palm_fruits", "livingdesert:figcactus_fruit", "farming:melon_8", "farming:pumpkin_8", "ethereal:strawberry", "farming:blackberry", "naturalbiomes:blackberry", "naturalbiomes:cowberry", "naturalbiomes:banana", "naturalbiomes:banana_bunch", "farming:blueberries", "ethereal:orange", "livingdesert:figcactus_fruit", "livingfloatlands:paleojungle_clubmoss_fruit", "ethereal:banana", "livingdesert:date_palm_fruits", "farming:melon_slice", "naturalbiomes:wildrose", "naturalbiomes:banana"},
view_range = 10,
replace_rate = 10,
replace_what = {"farming:soil", "farming:soil_wet"},
replace_with = "default:dirt",
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 3,
stay_near = {{"default:jungletree", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_trees:leaves_jungle", "mcl_trees:leaves_mangrove", "default:junglegrass", "naturalbiomes:bambooforest_groundgrass", "livingjungle:grass2", "livingjungle::grass1", "livingjungle:alocasia", "livingjungle:flamingoflower"}, 5},
animation = {
speed_normal = 80,
stand_speed = 30,
stand1_speed = 30,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_start = 220,
walk_end = 320,
punch_start = 320,
punch_end = 420,
fly_start = 440,
fly_end = 540,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_coniferous_litter"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_dry_grass", "default:dirt_with_coniferous_litter"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:mushroom_dirt", "ethereal:bamboo_dirt", "ethereal:green_dirt", "ethereal:mushroom_dirt", "default:dirt_with_coniferous_litter", "default:dirt_gray"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:iguana",
nodes = {"livingjungle:jungleground", "livingjungle:leafyjungleground", "mcl_core:dirt_with_gras"},
neighbors = {"default:jungletree", "livingjungle:alocasia", "livingjungle:flamingoflower", "livingjungle:samauma_trunk", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_trees:leaves_jungle", "mcl_trees:leaves_mangrove"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 1,
max_height = 31000,
day_toggle = true,
})
end
mobs:register_egg("animalworld:iguana", S("Iguana"), "aiguana.png")
mobs:alias_mob("animalworld:iguana", "animalworld:iguana") -- compatibility

View file

@ -0,0 +1,97 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:indianrhino", {
type = "animal",
passive = false,
attack_type = "dogfight",
attack_animals = false,
attack_monsters = true,
group_attack = true,
reach = 3,
damage = 14,
hp_min = 90,
hp_max = 140,
armor = 100,
collisionbox = {-0.8, -0.01, -0.8, 0.8, 1.5, 0.8},
visual = "mesh",
mesh = "Indianrhino.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"textureindianrhino.png"},
},
sounds = {
random = "animalworld_rhino",
attack = "animalworld_rhino2",
distance = 13,
},
makes_footstep_sound = true,
walk_velocity = 1.5,
run_velocity = 3,
walk_chance = 20,
runaway = false,
knock_back = false,
jump = true,
jump_height = 6,
stepheight = 2,
stay_near = {{"naturalbiomes:savanna_flowergrass", "naturalbiomes:savanna_grass", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:savannagrass"}, 6},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 3,
pathfinding = true,
animation = {
speed_normal = 70,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
walk_start = 200,
walk_end = 300,
punch_start = 300,
punch_end = 400,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
follow = {"default:apple", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "default:dry_dirt_with_dry_grass", "farming:seed_wheat", "default:junglegrass", "farming:seed_oat", "naturalbiomes:savannagrass", "naturalbiomes:savannagrassmall", "naturalbiomes:savanna_flowergrass", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "group:grass", "group:normal_grass"},
view_range = 10,
replace_rate = 10,
replace_what = {"farming:soil", "farming:soil_wet"},
replace_with = "default:dirt",
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 0, 25, false, nil) then return end
end,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"mcl_core:podzol", "default:dirt_withforest_litter", "ethereal:green_dirt", "ethereal:grass_grove"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:indianrhino",
nodes = {"naturalbiomes:savannalitter", "mcl_core:dirt_with_grass"},
neighbors = {"naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "mcl_core:acaciatree", "mcl_trees:tree_acacia", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 5,
max_height = 50,
day_toggle = true,
})
end
mobs:register_egg("animalworld:indianrhino", S("Indian Rhino"), "aindianrhino.png")

146
mods/animalworld/init.lua Normal file
View file

@ -0,0 +1,146 @@
local modname = minetest.get_current_modname()
local path = minetest.get_modpath(modname) .. "/"
local S = minetest.get_translator and minetest.get_translator(modname) or
dofile(path .. "intllib.lua")
animalworld = {}
-- Check for custom mob spawn file
local input = io.open(path .. "spawn.lua", "r")
if input then
mobs.custom_spawn_animalworld = true
input:close()
input = nil
end
-- Sounds
animalworld.sounds = {}
if minetest.get_modpath("default") then animalworld.sounds = default end
if minetest.get_modpath("mcl_sounds") then animalworld.sounds = mcl_sounds end
-- Animals
dofile(path .. "seal.lua") --
dofile(path .. "hare.lua") --
dofile(path .. "moose.lua") --
dofile(path .. "crocodile.lua") --
dofile(path .. "manatee.lua") --
dofile(path .. "tiger.lua") --
dofile(path .. "camel.lua") --
dofile(path .. "elephant.lua") --
dofile(path .. "carp.lua") --
dofile(path .. "trout.lua") --
dofile(path .. "blackbird.lua") --
dofile(path .. "bear.lua") --
dofile(path .. "boar.lua") --
dofile(path .. "kangaroo.lua") --
dofile(path .. "tortoise.lua") --
dofile(path .. "hippo.lua") --
dofile(path .. "shark.lua") --
dofile(path .. "nandu.lua") --
dofile(path .. "yak.lua") --
dofile(path .. "spider.lua") --
dofile(path .. "spidermale.lua") --
dofile(path .. "crab.lua") --
dofile(path .. "reindeer.lua") --
dofile(path .. "volverine.lua") --
dofile(path .. "owl.lua") --
dofile(path .. "frog.lua") --
dofile(path .. "monitor.lua") --
dofile(path .. "gnu.lua") --
dofile(path .. "puffin.lua") --
dofile(path .. "anteater.lua") --
dofile(path .. "hyena.lua") --
dofile(path .. "rat.lua") --
dofile(path .. "vulture.lua") --
dofile(path .. "toucan.lua") --
dofile(path .. "snowleopard.lua") --
dofile(path .. "lobster.lua") --
dofile(path .. "squid.lua") --
dofile(path .. "kobra.lua") --
dofile(path .. "bat.lua") --
dofile(path .. "ant.lua") --
dofile(path .. "termite.lua") --
dofile(path .. "wasp.lua") --
dofile(path .. "snail.lua") --
dofile(path .. "locust.lua") --
dofile(path .. "dragonfly.lua") --
dofile(path .. "nymph.lua") --
dofile(path .. "divingbeetle.lua") --
dofile(path .. "olm.lua") --
dofile(path .. "goldenmole.lua") --
dofile(path .. "scorpion.lua") --
dofile(path .. "goby.lua") --
dofile(path .. "treelobster.lua") --
dofile(path .. "notoptera.lua") --
dofile(path .. "seahorse.lua") --
dofile(path .. "polarbear.lua") --
dofile(path .. "muskox.lua") --
dofile(path .. "fox.lua") --
dofile(path .. "beluga.lua") --
dofile(path .. "leopardseal.lua") --
dofile(path .. "stellerseagle.lua") --
dofile(path .. "otter.lua") --
dofile(path .. "monkey.lua") --
dofile(path .. "zebra.lua") --
dofile(path .. "indianrhino.lua") --
dofile(path .. "giraffe.lua") --
dofile(path .. "koala.lua") --
dofile(path .. "clamydosaurus.lua") --
dofile(path .. "echidna.lua") --
dofile(path .. "mosquito.lua") --
dofile(path .. "beaver.lua") --
dofile(path .. "goose.lua") --
dofile(path .. "ibex.lua") --
dofile(path .. "marmot.lua") --
dofile(path .. "wolf.lua") --
dofile(path .. "panda.lua") --
dofile(path .. "hermitcrab.lua") --
dofile(path .. "cockatoo.lua") --
dofile(path .. "parrot.lua") --
dofile(path .. "parrotflying.lua") --
dofile(path .. "stingray.lua") --
dofile(path .. "blackgrouse.lua") --
dofile(path .. "viper.lua") --
dofile(path .. "wildboar.lua") --
dofile(path .. "tapir.lua") --
dofile(path .. "iguana.lua") --
dofile(path .. "oryx.lua") --
dofile(path .. "roadrunner.lua") --
dofile(path .. "cockroach.lua") --
dofile(path .. "robin.lua") --
dofile(path .. "orangutan.lua") --
-- Load tundravegetation
local load_tundra_vegetation = minetest.settings:get_bool("animalworld.tundravegetation") ~= false
if load_tundra_vegetation then
dofile(path .. "tundravegetation.lua") --
end
-- Load trophies
local load_trophies = minetest.settings:get_bool("animalworld.trophies") ~= false
if load_trophies then
dofile(path .. "trophies.lua") --
end
-- Load hunger
if minetest.get_modpath("hunger_ng") then
dofile(path .. "hunger.lua") --
end
-- Load concretecrafting
if minetest.get_modpath("default") then
dofile(path .. "concretecrafting.lua") --
end
-- Load custom spawning
if mobs.custom_spawn_animalworld then
dofile(path .. "spawn.lua")
end
print (S("[MOD] Mobs Redo Animals loaded"))

View file

@ -0,0 +1,3 @@
-- Support for the old multi-load method
dofile(minetest.get_modpath("intllib").."/init.lua")

View file

@ -0,0 +1,125 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:kangaroo", {
stepheight = 2,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 2,
hp_min = 25,
hp_max = 55,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Kangaroo.b3d",
textures = {
{"texturekangaroo.png"},
},
makes_footstep_sound = true,
sounds = {},
walk_velocity = 5,
run_velocity = 5,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 8,
pushable = true,
stay_near = {{"naturalbiomes:outback_grass", "mcl_core:deadbush", "mcl_core:cactus", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4", "default:dry_shrub"}, 5},
follow = {"default:grass_3", "default:dry_grass_3", "ethereal:dry_shrub", "farming:lettuce", "farming:seed_wheat", "default:junglegrass", "default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:grass_1", "default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5", "default:marram_grass_1", "default:marram_grass_2", "default:marram_grass_3", "default:coldsteppe_grass_1", "default:coldsteppe_grass_2", "default:coldsteppe_grass_3", "default:coldsteppe_grass_4", "default:coldsteppe_grass_5", "default:coldsteppe_grass_6", "naturalbiomes:savanna_grass1", "naturalbiomes:savanna_grass2", "naturalbiomes:savanna_grass3", "naturalbiomes:outback_grass1", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "naturalbiomes:outback_grass6", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:heath_grass1", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "mcl_core:deadbush", "mcl_core:cactus", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:", "naturalbiomes:", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "naturalbiomes:bushland_grass7", "group:grass", "group:normal_grass"},
view_range = 10,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "animalworld:kangaroocorpse", chance = 7, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 4,
animation = {
speed_normal = 100,
stand_speed = 40,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 200,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 15, 25, false, nil) then return end
end,
})
local spawn_on = {"default:desert_sand", "default:dry_dirt_with_dry_grass"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"default:desert_sand", "default:dry_dirt_with_dry_grass"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:grass_grove", "default:desert_sand", "ethereal:dry_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:kangaroo",
nodes = {"default:desert_sand", "naturalbiomes:outback_litter", "mcl_core:sand", "mcl_core:redsand"},
neighbors = {"group:grass", "mcl_core:deadbush", "mcl_core:cactus", "group:normal_grass", "naturalbiomes:outback_grass", "naturalbiomes:outback_grass3", "naturalbiomes:outback_grass2", "naturalbiomes:outback_grass4", "naturalbiomes:outback_grass5", "default:dry_shrub"},
min_light = 0,
interval = 60,
chance = 2500, -- 15000
active_object_count = 3,
min_height = 5,
max_height = 45,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:desert_sand", "naturalbiomes:outback_litter"})
if nods and #nods > 0 then
-- min herd of 3
local iter = math.min(#nods, 3)
-- print("--- kangaroo at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:kangaroo", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:kangaroo", S("Kangaroo"), "akangaroo.png")
mobs:alias_mob("animalworld:kangaroo", "animalworld:kangaroo") -- compatibility

View file

@ -0,0 +1,99 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:koala", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = true,
reach = 2,
damage = 1,
hp_min = 5,
hp_max = 30,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.2, 0.3},
visual = "mesh",
mesh = "Koala.b3d",
textures = {
{"texturekoala.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_koala",
attack = "animalworld_koala2",
damage = "animalworld_koala2",
},
walk_velocity = 0.5,
walk_chance = 25,
run_velocity = 1,
jump = false,
jump_height = 8,
stepheight = 8,
pushable = true,
follow = {"naturalbiomes:outback_leaves", "mcl_core:leaves"},
view_range = 6,
stay_near = {{"naturalbiomes:outback_leaves", "naturalbiomes:outback_trunk", "naturalbiomes:outback_bush_leaves", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves"}, 5},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 5,
light_damage = 0,
fear_height = 9,
animation = {
speed_normal = 50,
stand_speed = 25,
stand_start = 100,
stand_end = 200,
stand1_start = 200,
stand1_end = 300,
walk_start = 0,
walk_end = 100,
punch_speed = 100,
punch_start = 300,
punch_end = 400,
die_start = 300,
die_end = 400,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = {"mcl_core:dirt_with_grass", "default:dirt_with_coniferous_litter"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"naturalbiomes:outback_litter"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:mushroom_dirt", "ethereal:bamboo_dirt", "ethereal:green_dirt", "ethereal:mushroom_dirt", "default:dirt_with_coniferous_litter", "default:dirt_gray"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:koala",
nodes = {"naturalbiomes:outback_litter", "mcl_core:dirt_with_grass"},
neighbors = {"naturalbiomes:outback_trunk", "naturalbiomes:outback_bush_leaves", "naturalbiomes:outback_leaves", "mcl_trees:leaves_acacia", "mcl_core:acacialeaves"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 3,
min_height = 1,
max_height = 500,
day_toggle = true,
})
end
mobs:register_egg("animalworld:koala", ("Koala"), "akoala.png")
mobs:alias_mob("animalworld:koala", "animalworld:koala") -- compatibility

120
mods/animalworld/kobra.lua Normal file
View file

@ -0,0 +1,120 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:kobra", {
stepheight = 2,
type = "monster",
passive = false,
attack_type = "dogshoot",
dogshoot_switch = 1,
dogshoot_count_max = 12, -- shoot for 10 seconds
dogshoot_count2_max = 3, -- dogfight for 3 seconds
reach = 3,
shoot_interval = 2.2,
arrow = "animalworld:snakepoison",
shoot_offset = 1,
attack_animals = true,
reach = 2,
damage = 8,
hp_min = 20,
hp_max = 60,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.95, 0.5},
visual = "mesh",
mesh = "Kobra.b3d",
visual_size = {x = 0.3, y = 0.3},
textures = {
{"texturekobra.png"},
},
sounds = {
random = "animalworld_kobra",
attack = "animalworld_kobra",
},
makes_footstep_sound = false,
view_range = 6,
walk_velocity = 1,
run_velocity = 2,
runaway = false,
jump = false,
jump_height = 0,
stepheight = 2,
stay_near = {{"default:jungletree", "default:junglegrass", "naturalbiomes:bamboo_leaves", "naturalbiomes:bambooforest_groundgrass", "livingjungle::grass2", "livingjungle::grass1", "livingjungle:alocasia", "livingjungle:flamingoflower"}, 5},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 3,
animation = {
speed_normal = 60,
stand_start = 0,
stand_end = 100,
walk_start = 250,
walk_end = 350,
punch_start = 150,
punch_end = 200,
shoot_start = 150,
shoot_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
})
if minetest.get_modpath("ethereal") then
spawn_on = {"default:desert_sandstone", "default:desert_stone", "default:sandstone", "default:dirt_with_rainforest_litter", "ethereal:grove_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:kobra",
nodes = {"default:desert_sandstone", "default:desert_stone", "default:sandstone", "default:dirt_with_rainforest_litter", "naturalbiomes:bambooforest_litter", "mcl_core:dirt_with_gras"},
neighbors = {"mcl_flowers:tallgrass", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_trees:leaves_jungle", "mcl_trees:leaves_mangrove", "default:junglegrass", "livingdesert:date_palm_leaves", "livingdesert:yucca", "default:dry_shrub", "livingdesert:coldsteppe_grass1", "livingdesert:cactus", "livingdesert:cactus3", "livingdesert:cactus2", "livingdesert:cactus4", "naturalbiomes:bambooforest_groundgrass", "naturalbiomes:bambooforest_groundgrass2"},
min_light = 0,
interval = 60,
chance = 1000, -- 15000
min_height = -30,
max_height = 10,
})
end
mobs:register_egg("animalworld:kobra", S("Cobra"), "akobra.png")
mobs:alias_mob("animalworld:kobra", "animalworld:kobra") -- compatiblity
-- mese arrow (weapon)
mobs:register_arrow("animalworld:snakepoison", {
visual = "sprite",
-- visual = "wielditem",
visual_size = {x = 0.5, y = 0.5},
textures = {"animalworld_snakepoison.png"},
--textures = {""animalworld_snakepoison.png""},
velocity = 6,
-- rotate = 180,
hit_player = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2},
}, nil)
end,
hit_mob = function(self, player)
player:punch(self.object, 1.0, {
full_punch_interval = 1.0,
damage_groups = {fleshy = 2},
}, nil)
end,
hit_node = function(self, pos, node)
end
})

View file

@ -0,0 +1,88 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:leopardseal", {
stepheight = 1,
type = "monster",
passive = false,
attack_type = "dogfight",
attack_animals = true,
reach = 2,
damage = 5,
hp_min = 20,
hp_max = 55,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.6, 0.5},
visual = "mesh",
mesh = "Leopardseal.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"textureleopardseal.png"},
},
sounds = {
random = "animalworld_leopardseal",
attack = "animalworld_leopardseal2",
},
makes_footstep_sound = true,
walk_velocity = 1,
run_velocity = 3,
runaway = false,
jump = false,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 100,
stand_speed = 50,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 200,
punch_end = 300,
fly_speed = 50,
fly_start = 350, -- swim animation
fly_end = 450,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:water_flowing", "default:river_water_flowing", "default:river_water", "mcl_core:water_source", "mcl_core:water_flowing",},
floats = 0,
follow = {
"ethereal:fish_raw", "mcl_mobitems:chicken", "mcl_fishing:pufferfish_raw", "mcl_mobitems:rotten_flesh", "mcl_mobitems:mutton", "mcl_mobitems:beef", "mcl_mobitems:porkchop", "mcl_mobitems:rabbit", "animalworld:rawfish", "mobs_fish:tropical",
"mobs_fish:clownfish_set", "mobs_fish:tropical_set", "xocean:fish_edible", "mobs:bluefish_raw", "animalworld:rawmollusk", "nativevillages:catfish_raw", "mobs:meatblock_raw", "animalworld:chicken_raw", "livingfloatlands:ornithischiaraw", "livingfloatlands:largemammalraw", "livingfloatlands:theropodraw", "livingfloatlands:sauropodraw", "animalworld:raw_athropod", "animalworld:whalemeat_raw", "animalworld:rabbit_raw", "nativevillages:chicken_raw", "mobs:meat_raw", "animalworld:pork_raw", "people:mutton:raw", "animalworld:rawmollusk", "marinaramobs:octopus_raw", "marinara:raw_oisters", "marinara:raw_athropod", "animalworld:rawfish", "fishing:fish_raw", "fishing:pike_raw", "marinaramobs:raw_exotic_fish", "nativevillages:catfish_raw", "xocean:fish_edible", "ethereal:fish_raw", "mobs:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw"
},
view_range = 10,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 15, 25, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:leopardseal",
nodes = {"default:ice", "default:snowblock", "mcl_core:ice", "mcl_core:snow"},
neighbors = {"default:water_source", "mcl_core:water_source", "mcl_core:water_flowing"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 1,
min_height = -10,
max_height = 10,
day_toggle = true,
})
end
mobs:register_egg("animalworld:leopardseal", S("Leopard Seal"), "aleopardseal.png")

View file

@ -0,0 +1,101 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:lobster", {
stepheight = 1,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 5,
hp_min = 25,
hp_max = 70,
armor = 100,
collisionbox = {-0.5, -0.01, -0.5, 0.5, 0.5, 0.5},
visual = "mesh",
mesh = "Lobster.b3d",
textures = {
{"texturelobster.png"},
},
makes_footstep_sound = true,
sounds = {
},
walk_velocity = 0.5,
run_velocity = 1,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 3,
pushable = true,
stay_near = {{"marinara:sand_with_alage", "mcl_flowers:waterlily", "mcl_ocean:seagrass:sand", "mcl_core:reeds", "mcl_ocean:bubble_coral", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral", "mcl_ocean:seagrass_gravel", "marinara:sand_with_seagrass", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay"}, 4},
follow = {"animalworld:rawfish", "mcl_fishing:pufferfish_raw", "mobs_fish:tropical", "mobs:clownfish_raw",
"mobs:bluefish_raw", "fishing:bait_worm", "fishing:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw", "animalworld:rawmollusk", "marinaramobs:octopus_raw", "marinara:raw_oisters", "marinara:raw_athropod", "animalworld:rawfish", "fishing:fish_raw", "fishing:pike_raw", "marinaramobs:raw_exotic_fish", "nativevillages:catfish_raw", "xocean:fish_edible", "ethereal:fish_raw", "mobs:clownfish_raw", "fishing:bluewhite_raw", "fishing:exoticfish_raw", "fishing:fish_raw", "fishing:carp_raw", "fishing:perch_raw", "water_life:meat_raw", "fishing:shark_raw", "fishing:pike_raw"},
view_range = 10,
drops = {
{name = "animalworld:raw_athropod", chance = 1, min = 0, max = 2},
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {
"ethereal:fish_raw", "animalworld:rawfish", "mobs_fish:tropical",
"mobs:meat_raw", "animalworld:rabbit_raw", "xocean:fish_edible", "animalworld:cockroach"
},
water_damage = 0,
lava_damage = 5,
air_damage = 1,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 50,
stand_start = 0,
stand_end = 100,
walk_start = 100,
walk_end = 200,
punch_start = 200,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
local spawn_on = {"default:water_source"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"default:water_source"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"default:water_source"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:lobster",
nodes = {"mcl_core:water_source", "default:water_source", "mcl_core:water_source", "mcl_core:water_flowing"},
neighbors = {"marinara:sand_with_alage", "marinara:sand_with_seagrass", "mcl_ocean:bubble_coral", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral", "mcl_ocean:seagrass_gravel", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = -30,
max_height = 10,
day_toggle = false,
})
end
mobs:register_egg("animalworld:lobster", S("Lobster"), "alobster.png")
mobs:alias_mob("animalworld:lobster", "animalworld:lobster") -- compatibility

View file

@ -0,0 +1,292 @@
# textdomain: animalworld
Ant=Ameise
Raw Ant Eggs=Rohe Ameiseneier
Cooked Ant Eggs=Gekochte Ameiseneier
Anthill=Ameisenhaufen
Anteater=Ameisenbär
Bat=Fledermaus
Bear=Bär
Beaver=Biber
Beaver Nest=Biberbau
Beluga Whale=Belugawal
Raw Whale Meat=Rohes Walfleisch
Cooked Whale Meat=Gekochtes Walfleisch
Whale Blubber=Walfett
Blackbird=Amsel
Black Grouse=Birkhuhn
Boar=Verwildertes Schwein
Raw Pork=Rohes Schweinefleisch
Cooked Pork=Gekochtes Schweienfleisch
Camel=Dromedar
Carp=Karpfen
Clamydosaurus=Kragenechse
Cockatoo=Kakadu
Cockroach=Schabe
Roasted Cockroach=Geröstete Schabe
Termite Concrete Wall=Termitenbeton Mauer
Termite Concrete Stair=Termitenbeton Treppe
Termite Concrete Slab=Termitenbeton Platte
Termite Concrete White Wall=Weiße Termitenbeton Mauer
Termite Concrete White Stair=Weiße Termitenbeton Treppe
Termite Concrete White Slab=Weiße Termitenbeton Platte
Termite Concrete Grey Wall=Graue Termitenbeton Mauer
Termite Concrete Grey Stair=Graue Termitenbeton Treppe
Termite Concrete Grey Slab=Graue Termitenbeton Platte
Termite Concrete Black Wall=Schwarze Termitenbeton Mauer
Termite Concrete Black Stair=Schwarze Termitenbeton Treppe
Termite Concrete Black Slab=Schwarze Termitenbeton Platte
Termite Concrete Blue Wall=Blaue Termitenbeton Mauer
Termite Concrete Blue Stair=Blaue Termitenbeton Treppe
Termite Concrete Blue Slab=Blaue Termitenbeton Platte
Termite Concrete Cyan Wall=Cyan Termitenbeton Mauer
Termite Concrete Cyan Stair=Cyan Termitenbeton Treppe
Termite Concrete Cyan Slab=Cyan Termitenbeton Platte
Termite Concrete Green Wall=Grüne Termitenbeton Mauer
Termite Concrete Green Stair=Grüne Termitenbeton Treppe
Termite Concrete Green Slab=Grüne Termitenbeton Platte
Termite Concrete Dark Green Wall=Dunkelgrüne Termitenbeton Mauer
Termite Concrete Dark Green Stair=Dunkelgrüne Termitenbeton Treppe
Termite Concrete Dark Green Slab=Duneklgrüne Termitenbeton Platte
Termite Concrete Yellow Wall=Gelbe Termitenbeton Mauer
Termite Concrete Yellow Stair=Gelbe Termitenbeton Treppe
Termite Concrete Yellow Slab=Gelbe Termitenbeton Platte
Termite Concrete Orange Wall=Orange Termitenbeton Mauer
Termite Concrete Orange Stair=Orange Termitenbeton Treppe
Termite Concrete Orange Slab=Orange Termitenbeton Platte
Termite Concrete Brown Wall=Braune Termitenbeton Mauer
Termite Concrete Brown Stair=Braune Termitenbeton Treppe
Termite Concrete Brown Slab=Braune Termitenbeton Platte
Termite Concrete Red Wall=Rote Termitenbeton Mauer
Termite Concrete Red Stair=Rote Termitenbeton Treppe
Termite Concrete Red Slab=Rote Termitenbeton Platte
Termite Concrete Pink Wall=Pinke Termitenbeton Mauer
Termite Concrete Pink Stair=Pinke Termitenbeton Treppe
Termite Concrete Pink Slab=Pinke Termitenbeton Platte
Termite Concrete Magenta Wall=Magenta Termitenbeton Mauer
Termite Concrete Magenta Stair=Magenta Termitenbeton Treppe
Termite Concrete Magenta Slab=Magenta Termitenbeton Platte
Termite Concrete Violet Wall=Violette Termitenbeton Mauer
Termite Concrete Violet Stair=Violette Termitenbeton Treppe
Termite Concrete Violet Slab=Violette Termitenbeton Platte
Crab=Krabbe
Crocodile=Krokodil
Diving Beetle=Gelbrandkäfer
Dragonfly=Libelle
Echidna=Schnabeligel
Elephant=Elefant
Fox=Fuchs
Frog=Frosch
Goby=Grundel
Golden Mole=Goldmull
Goose=Wildgans
Hare=Hase
Raw Hare=Rohes Hasenfleisch
Cooked Hare=Gekochtes Hasenfleisch
Hare Hide=Hasenfell
Hermit Crab=Einsiedlerkrebs
Hippo=Nilpferd
Hyena=Hyäne
Ibex=Steinbock
Iguana=Leguan
Indian Rhino=Panzernashorn
Kangaroo=Känguru
Cobra=Köningskobra
Leopard Seal=Seeleopard
Lobster=Hummer
Locust=Heuschrecke
Roasted Locust=Geröstete Heuschrecke
Manatee=Seekuh
Marmot=Murmeltier
Monitor Lizard=Waran
Monkey=Affe
Moose=Elch
Mosquito=Mücke
Musk Ox=Moschusochse
Bird Egg=Vogelei
Fried Egg=Spiegelei
Raw Birdmeat=Rohes Geflügelfleisch
Cooked Birdmeat=Gekochtes Geflügelfleisch
Feather=Feder
Notoptera=Grillenschabe
Bug on Ice=Käfereis
Dragonfly Nymph=Libellenlarve
Oryx=Spießbock
Otter=Fischotter
Owl=Eule
Panda=Riesenpanda
Parrot=Papagei
Flying Parrot=Fliegender Papagei
Polar Bear=Eisbär
Puffin=Papageitaucher
Rat=Ratte
Cooked Rodent Meat=Gekochtes Nagetier
Stingray=Stachelrochen
Termite Queen=Termitenkönigin
Termite Mound=Termitenhügel
Termite Concrete=Termitenbeton
Termite Concrete Blue=Blauer Termitenbeton
Termite Concrete Green=Grüner Termitenbeton
Termite Concrete Yellow=Gelber Termitenbeton
Termite Concrete Red=Roter Termitenbeton
Termite Concrete Orange=Oranger Termitenbeton
Termite Concrete Violet=Violetter Termitenbeton
Termite Concrete White=Weißer Termitenbeton
Termite Concrete Black=Schwarzer Termitenbeton
Termite Concrete Grey=Grauer Termitenbeton
Termite Concrete Dark Green=Dunkelgrüner Termitenbeton
Termite Concrete Brown=Brauner Termitenbeton
Termite Concrete Pink=Pinker Termitenbeton
Termite Concrete Magenta=Magenta Termitenbeton
Termite Concrete Cyan=Cyan Termitenbeton
Tortoise=Landschildkröte
Toucan=Tukan
Tree Lobster=Baumhummer
Anteater Pillow=Ameisenbär Kissen
Anteater Pillow Left=Linkes Ameisenbär Kissen
Anteater Pillow Right=Rechtes Ameisenbärkissen
Anteater Corpse=Erlegter Ameisenbär
Bear Trophy=Bärentropähe
Bear Pelt=Bärenpelz
Bear Pelt hanging=Hängender Bärenpelz
Bear Corpse=Erlegter Bär
Bear Stool=Bärenhocker
Blackbird Pillow=Amselkissen
Blackbird Pillow Left=Linkes Amselkissen
Blackbird Pillow Right=Rechtes Amselkissen
Blackbird Corpse=Erlegte Amsel
Blackbird Curtain=Amselvorhang
Boar Trophy=Verwilderte Schweinetropähe
Boar Pelt=Verwildertes Schweinefell
Boar Pelt hanging=Hängendes Verwildertes Schweinefell
Boar Corpse=Erlegtes Verwildertes Schwein
Camel Pillow=Dromedarkissen
Camel Pillow Left=Linkes Dromedarkissen
Camel Pillow Right=Rechtes Dromedarkissen
Camel Corpse=Erlegtes Dromedar
Camel Pelt=Dromedarfell
Camel Pelt hanging=Hängendes Dromedarfell
Camel Curtain=Dromedarvorhang
Crocodile Trophy=Krokodiltrophähe
Crocodile Corpse=Erlegtes Krokodil
Crocodile Stool=Krokodilhocker
Crocodile Curtain=Krokodilhaut Vorhang
Crocodile Skin=Krokodilhaut
Crocodile Skin hanging=Hängende Krokodilhaut
Elephant Trophy=Elefantentrophähe
Elephant Corpse=Erlegter Elefant
Ivory Table=Elfenbeintisch
Ivory Chair=Elfenbeinstuhl
Ivory Vase=Elfenbeinvase
Elephant Stool=Elefantenhocker
Gnu Pelt=Gnupelz
Gnu Pelt hanging=Hängender Gnupelz
Gnu Corpse=Erlegtes Gnu
Gnu Trophy=Gnutrophähe
Gnu Stool=Gnu Hocker
Gnu Curtain=Gnu Vorhang
Hippo Stool=Nilpferdhocker
Hippo Curtain=Nilpferdvorhang
Hippo Corpse=Erlegtes Nilpferd
Hyena Trophy=Hyänentrophähe
Hyena Corpse=Erlegte Hyäne
Hyena Pillow=Hyänenkissen
Hyea Pillow Left=Linkes Hyänenkissen
Hyena Pillow Right=Rechtes Hyänenkissen
Kangaroo Corpse=Erlegtes Känguru
Kangaroo Pillow=Känguru Kissen
Kangaroo Pillow Left=Linkes Kängurukissen
Kangaroo Pillow Right=Rechtes Kängurukissen
Kangaroo Curtain=Känguruvorhang
Monitor Lizard Trophy=Warantrophähe
Monitor Lizard Corpse=Erlegter Waran
Monitor Lizard Stool=Waranhocker
Monitor Curtain=Waranhaut Vorhang
Moose Trophy=Elchtrophähe
Moose Pelt=Elchfell
Moose Pelt hanging=Hängendes Elchfell
Moose Corpse=Erlegter Elch
Owl Trophy=Eulentrophähe
Owl Corpse=Erlegte Eule
Reindeer=Rentier
Reindeer Trophy=Rentiertrophähe
Reindeer Pelt=Rentierfell
Reindeer Pelt hanging=Hängendes Rentierfell
Reindeer Corpse=Erlegtes Rentier
Seal Pillow=Robbenkissen
Seal Pillow Left=Linkes Robbenkissen
Seal Pillow Right=Rechtes Robbenkissen
Seal Corpse=Erlegte Robbe
Seal Stool=Robbenhocker
Seal Curtain=Robbenvorhang
Seal=Robbe
Shark Trophy=Haitrophähe
Shark Corpse=Erlegter Hai
Vulture Pillow=Geierkissen
Vulture Pillow Left=Linkes Geierkissen
Vulture Pillow Right=Rechtes Geierkissen
Vulture Corpse=Erlegter Geier
Yak Trophy=Yak Trophähe
Yak Pelt=Yakfell
Yak Pelt hanging=Hängendes Yakfell
Yak Corpse=Erlegtes Yak
Yak Stool=Yakhocker
Yak Curtain=Yakvorhang
Snow Leopard Trophy=Schneeleopardentrophähe
Snow Leopard Pillow=Schneeleoparden Kissen
Snow Leopard Pillow Left=Linkes Schneeleopardenkissen
Snow Leopard Pillow Right=Rechtes Schneeleopardenkissen
Snowleopard Corpse=Erlegter Schneeleopard
Tiger Trophy=Tigertrophähe
Tiger Pillow=Tigerkissen
Tiger Pillow Left=Linkes Tigerkissen
Tiger Pillow Right=Rechtes Tigerkissen
Tiger Corpse=Erlegter Tiger
Tiger Stool=Tigerhocker
Tiger Curtain=Tigervorhang
Tiger Pelt=Tigerpelz
Tiger Pelt hanging=Hängender Tigerpelz
Wolverine Trophy=Vielfrasstrophähe
Wolverine Corpse=Erlegter Vielfrass
Polar Bear Trophy=Eisbärentrophähe
Polar Bear Pelt=Eisbärfell
Polar Bear Pelt hanging=Hängendes Eisbärfell
Polar Bear Corpse=Erlegter Eisbär
Muskox Trophy=Moschusochsentrophähe
Muskox Pelt=Moschusochsenfell
Muskox Pelt hanging=Hängendes Moschusochsenfell
Muskox Corpse=Erlegter Moschusochse
Muskox Stool=Moschusochsenhocker
Trout=Forelle
Tundra Shrub=Tundrabusch
Viper=Kreuzotter
Wolverine=Vielfrass
Vulture=Geier
Wasp=Wespe
Wasp Nest=Wespennest
Wild Boar=Wildschwein
Bucket of Milk"=Milcheimer
Glass of Milk=Milchglas
Cheese=Käse
Cheese Block=Käseblock
Yak already milked!=Yak wurde bereits gemolken!
Bucket of Milk=Milcheimer
Raw Mollusk=Rohes Molluskenfleisch
Fried Mollusk=Geröstetes Molluskenfleisch
Squid=Tintenfisch
Spider=Spinne
Cooked Athropod=Gekochter Athropode
Raw Athropod=Roher Athropode
Raw Fish=Roher Fisch
Cooked Fish=Gekochter Fisch
Fish Food=Fischfutter
Snail=Schnecke
Escargots=Schneckenmenü
Stellers Sea Eagle=Seeadler
Spider Male=Männliche Spinne
Scorpion=Skorpion
Seahorse=Seepferdchen
Roadrunner=Rennkuckuck
Shark=Hai
Snow Leopard=Schneeleopard
Robin=Rotkehlchen

View file

@ -0,0 +1,291 @@
# textdomain: animalworld
Ant=Fourmi
Raw Ant Eggs=Oeufs de Fourmi Crus
Cooked Ant Eggs=Oeufs de Fourmi Cuits
Anthill=Fourmillière
Anteater=Fourmilier
Bat=Chauve-Souris
Bear=Ours
Beaver=Castor
Beaver Nest=Nid de Castor
Beluga Whale=Beluga
Raw Whale Meat=Viande de Baleine Crue
Cooked Whale Meat=Viande de Baleine Cuite
Whale Blubber=Graisse de Baleine
Blackbird=Merle
Black Grouse=Tétras-Lyre
Boar=Sanglier
Raw Pork=Porc cru
Cooked Pork=Porc cuit
Camel=Chameau
Carp=Carpe
Clamydosaurus=Lézard à Collerette
Cockatoo=Cacatoès
Cockroach=Cafard
Roasted Cockroach=Cafard rôti
Termite Concrete Wall=Mur en Béton Termite
Termite Concrete Stair=Escalier en Béton Termite
Termite Concrete Slab=Plaque de Béton Termite
Termite Concrete White Wall=Mur en Béton Termite Blanc
Termite Concrete White Stair=Escalier en Béton Termite Blanc
Termite Concrete White Slab=Plaque de Béton Termite Blanc
Termite Concrete Grey Wall=Mur en Béton Termite Gris
Termite Concrete Grey Stair=Escalier en Béton Termite Gris
Termite Concrete Grey Slab=Plaque de Béton Termite Gris
Termite Concrete Black Wall=Mur en Béton Termite Noir
Termite Concrete Black Stair=Escalier en Béton Termite Noir
Termite Concrete Black Slab=Plaque de Béton Termite Noir
Termite Concrete Blue Wall=Mur en Béton Termite Bleu
Termite Concrete Blue Stair=Escalier en Béton Termite Bleu
Termite Concrete Blue Slab=Plaque de Béton Termite Bleu
Termite Concrete Cyan Wall=Mur en Béton Termite Cyan
Termite Concrete Cyan Stair=Escalier en Béton Termite Cyan
Termite Concrete Cyan Slab=Plaque de Béton Termite Cyan
Termite Concrete Green Wall=Mur en Béton Termite Vert
Termite Concrete Green Stair=Escalier en Béton Termite Vert
Termite Concrete Green Slab=Plaque de Béton Termite Vert
Termite Concrete Dark Green Wall=Mur en Béton Termite Vert Foncé
Termite Concrete Dark Green Stair=Escalier en Béton Termite Vert Foncé
Termite Concrete Dark Green Slab=Béton Termite Vert Foncé
Termite Concrete Yellow Wall=Mur en Béton Termite Jaune
Termite Concrete Yellow Stair=Escalier en Béton Termite Jaune
Termite Concrete Yellow Slab=Plaque de Béton Termite Jaune
Termite Concrete Orange Wall=Mur en Béton Termite Orange
Termite Concrete Orange Stair=Escalier en Béton Termite Orange
Termite Concrete Orange Slab=Plaque de Béton Termite Orange
Termite Concrete Brown Wall=Mur en Béton Termite Marron
Termite Concrete Brown Stair=Escalier en Béton Termite Marron
Termite Concrete Brown Slab=Plaque de Béton Termite Marron
Termite Concrete Red Wall=Mur en Béton Termite Rouge
Termite Concrete Red Stair=Escalier en Béton Termite Rouge
Termite Concrete Red Slab=Plaque de Béton Termite Rouge
Termite Concrete Pink Wall=Mur en Béton Termite Rose
Termite Concrete Pink Stair=Escalier en Béton Termite Rose
Termite Concrete Pink Slab=Plaque de Béton Termite Rose
Termite Concrete Magenta Wall=Mur en Béton Termite Magenta
Termite Concrete Magenta Stair=Escalier en Béton Termite Magenta
Termite Concrete Magenta Slab=Plaque de Béton Termite Magenta
Termite Concrete Violet Wall=Mur en Béton Termite Violet
Termite Concrete Violet Stair=Escalier en Béton Termite Violet
Termite Concrete Violet Slab=Plaque de Béton Termite Violet
Crab=Crabe
Crocodile=Crocodile
Diving Beetle=Scarabée d'eau
Dragonfly=Libellule
Echidna=Echidné
Elephant=Elephant
Fox=Renard
Frog=Grenouille
Goby=Gobie
Golden Mole=Taupe Dorée
Goose=Oie
Hare=Lièvre
Raw Hare=Lièvre Cru
Cooked Hare=Lièvre Cuit
Hare Hide=Peau de Lièvre
Hermit Crab=Bernard L'Ermite
Hippo=Hippopotame
Hyena=Hyène
Ibex=Bouquetin
Iguana=Iguane
Indian Rhino=Rhinocéros d'Inde
Kangaroo=Kangourou
Cobra=Cobra
Leopard Seal=Léopard de mer
Lobster=Homard
Locust=Criquet
Roasted Locust=Criquet Rôti
Manatee=Lamantin
Marmot=Marmotte
Monitor Lizard=Varan
Monkey=Singe
Moose=Élan
Mosquito=Moustique
Musk Ox=Boeuf Musqué
Bird Egg=Oeuf d'oiseau
Fried Egg=Oeuf au plat
Raw Birdmeat=Viande d'Oiseau Crue
Cooked Birdmeat=Viande d'Oiseau Cuite
Feather=Plume
Notoptera=Notoptère
Bug on Ice=Grylloblatte
Dragonfly Nymph=Nymphe de Libellule
Oryx=Oryx
Otter=Loutre
Owl=Hibou
Panda=Panda
Parrot=Perroquet
Flying Parrot=Perroquet Volant
Polar Bear=Ours Polaire
Puffin=Macareux
Rat=Rat
Cooked Rodent Meat=Viande de Rongeur Cuite
Stingray=Raie
Termite Queen=Reine Termite
Termite Mound=Termitière
Termite Concrete=Béton Termite
Termite Concrete Blue=Béton Termite Bleu
Termite Concrete Green=Béton Termite Vert
Termite Concrete Yellow=Béton Termite Jaune
Termite Concrete Red=Béton Termite Rouge
Termite Concrete Orange=Béton Termite Orange
Termite Concrete Violet=Béton Termite Violet
Termite Concrete White=Béton Termite Blanc
Termite Concrete Black=Béton Termite Noir
Termite Concrete Grey=Béton Termite Gris
Termite Concrete Dark Green=Béton Termite Vert Foncé
Termite Concrete Brown=Béton Termite Marron
Termite Concrete Pink=Béton Termite Rose
Termite Concrete Magenta=Béton Termite Magenta
Termite Concrete Cyan=Béton Termite Cyan
Tortoise=Tortue de terre
Toucan=Toucan
Tree Lobster=Homard des Arbres
Anteater Pillow=Oreiller en Fourmilier
Anteater Pillow Left=Oreiller en Fourmilier (à Gauche)
Anteater Pillow Right=Oreiller en Fourmilier (à Droite)
Anteater Corpse=Cadavre de Fourmilier
Bear Trophy=Trophée d'Ours
Bear Pelt=Fourrure d'Ours
Bear Pelt hanging=Fourrure d'Ours Suspendue
Bear Corpse=Cadavre d'Ours
Bear Stool=Excréments d'Ours
Blackbird Pillow=Oreiller en Merle
Blackbird Pillow Left=Oreiller en Merle (à Gauche)
Blackbird Pillow Right=Oreiller en Merle (à Droite)
Blackbird Corpse=Cadavre de Merle
Blackbird Curtain=Rideaux en Merle
Boar Trophy=Trophée de Sanglier
Boar Pelt=Fourrure de Sanglier
Boar Pelt hanging=Fourrure de Sanglier Suspendue
Boar Corpse=Cadavre de Sanglier
Camel Pillow=Oreiller en Chameau
Camel Pillow Left=Oreiller en Chameau (à Gauche)
Camel Pillow Right=Oreiller en Chameau (à Droite)
Camel Corpse=Cadavre de Chameau
Camel Pelt=Fourrure de Chameau
Camel Pelt hanging=Fourrure de Chameau Suspendue
Camel Curtain=Rideau en Chameau
Crocodile Trophy=Trophée de Crocodile
Crocodile Corpse=Cadavre de Crocodile
Crocodile Stool=Excréments de Crocodile
Crocodile Curtain=Rideau en Crocodile
Crocodile Skin=Peau de Crocodile
Crocodile Skin hanging=Peau de Crocodile Skin Suspendue
Elephant Trophy=Trophée d'Élephant
Elephant Corpse=Cadavre d'Élephant
Ivory Table=Table en Ivoire
Ivory Chair=Chaise en Ivoire
Ivory Vase=Vase en Ivoire
Elephant Stool=Excréments d'Élephant
Gnu Pelt=Fourrure de Gnou
Gnu Pelt hanging=Fourrure de Gnou Suspendue
Gnu Corpse=Cadavre de Gnou
Gnu Trophy=Trophée de Gnou
Gnu Stool=Excréments de Gnou
Gnu Curtain=Rideau en Gnou
Hippo Stool=Excréments d'Hippopotame
Hippo Curtain=Rideau en Hippopotame
Hippo Corpse=Cadavre d'Hippopotame
Hyena Trophy=Trophée de Hyène
Hyena Corpse=Cadavre de Hyène
Hyena Pillow=Oreiller en Hyène
Hyea Pillow Left=Oreiller en Hyène (à Gauche)
Hyena Pillow Right=Oreiller en Hyène (à Droite)
Kangaroo Corpse=Cadavre de Kangourou
Kangaroo Pillow=Oreiller en Kangourou
Kangaroo Pillow Left=Oreiller en Kangourou (à Gauche)
Kangaroo Pillow Right=Oreiller en Kangourou (à Droite)
Kangaroo Curtain=Rideau en Kangourou
Monitor Lizard Trophy=Trophée de Varan
Monitor Lizard Corpse=Cadavre de Varan
Monitor Lizard Stool=Excréments de Varan
Monitor Curtain=Rideau en Varan
Moose Trophy=Trophée d'Élan
Moose Pelt=Fourrure d'Élan
Moose Pelt hanging=Fourrure d'Élan Suspendue
Moose Corpse=Cadavre d'Élan
Owl Trophy=Trophée de Hibou
Owl Corpse=Cadavre de Hibou
Reindeer=Renne
Reindeer Trophy=Trophée de Renne
Reindeer Pelt=Fourrure de Renne
Reindeer Pelt hanging=Fourrure de Renne Suspendue
Reindeer Corpse=Cadavre de Renne
Seal Pillow=Oreiller en Phoque
Seal Pillow Left=Oreiller en Phoque (à Gauche)
Seal Pillow Right=Oreiller en Phoque (à Droite)
Seal Corpse=Cadavre de Phoque
Seal Stool=Excréments de Phoque
Seal Curtain=Rideau en Phoque
Seal=Phoque
Shark Trophy=Trophée de Requin
Shark Corpse=Cadavre de Requin
Vulture Pillow=Oreiller en Vautour
Vulture Pillow Left=Oreiller en Vautour (à Gauche)
Vulture Pillow Right=Oreiller en Vautour (à Droite)
Vulture Corpse=Cadavre de Vautour
Yak Trophy=Trophée de Yak
Yak Pelt=Fourrure de Yak
Yak Pelt hanging=Fourrure de Yak Suspendue
Yak Corpse=Cadavre de Yak
Yak Stool=Excréments de Yak
Yak Curtain=Rideau en Yak
Snow Leopard Trophy=Trophée de Léopard des Neiges
Snow Leopard Pillow=Oreiller en Léopard des Neiges
Snow Leopard Pillow Left=Oreiller en Léopard des Neiges (à Gauche)
Snow Leopard Pillow Right=Oreiller en Léopard des Neiges (à Droite)
Snowleopard Corpse=Cadavre de Léopard des Neiges
Tiger Trophy=Trophée de Tigre
Tiger Pillow=Oreiller en Tigre
Tiger Pillow Left=Oreiller en Tigre (à Gauche)
Tiger Pillow Right=Oreiller en Tigre (à Droite)
Tiger Corpse=Cadavre de Tigre
Tiger Stool=Excréments de Tigre
Tiger Curtain=Rideau en Tiger
Tiger Pelt=Fourrure de Tigre
Tiger Pelt hanging=Fourrure de Tigre Suspendue
Wolverine Trophy=Trophée de Carcajou
Wolverine Corpse=Cadavre de Carcajou
Polar Bear Trophy=Trophée d'Ours Polaire
Polar Bear Pelt=Fourrure d'Ours Polaire
Polar Bear Pelt hanging=Fourrure d'Ours Polaire Suspendue
Polar Bear Corpse=Cadavre d'Ours Polaire
Muskox Trophy=Trophée de Boeuf Musqué
Muskox Pelt=Fourrure de Boeuf Musqué
Muskox Pelt hanging=Fourrure de Boeuf Musqué Suspendue
Muskox Corpse=Cadavre de Boeuf Musqué
Muskox Stool=Excréments de Boeuf Musqué
Trout=Truite
Tundra Shrub=Arbuste de la Toundra
Viper=Vipère
Wolverine=Carcajou
Vulture=Vautour
Wasp=Guêpe
Wasp Nest=Nid de Guêpe
Wild Boar=Sanglier Sauvage
Glass of Milk=Verre de Lait
Cheese=Fromage
Cheese Block=Bloc de Fromage
Yak already milked!=Yak déjà trait!
Bucket of Milk=Seau de Lait
Raw Mollusk=Mollusque Cru
Fried Mollusk=Mollusque Frit
Squid=Calamar
Spider=Araignée
Cooked Athropod=Arthropode Cuit
Raw Athropod=Arthropode Cru
Raw Fish=Poisson Cru
Cooked Fish=Poisson Cuit
Fish Food=Nourriture pour Poisson
Snail=Escargot
Escargots=Escargots
Stellers Sea Eagle=Pygargue de Steller
Spider Male=Araignée Mâle
Scorpion=Scorpion
Seahorse=Hippocampe
Roadrunner=Géocoucou
Shark=Requin
Snow Leopard=Léopard des Neiges
Robin=Rouge-gorge

View file

@ -0,0 +1,291 @@
# textdomain: animalworld
Ant=Муравей
Raw Ant Eggs=Сырые муравьиные яйца
Cooked Ant Eggs=Жаренные муравьиные яйца
Anthill=Муравейник
Anteater=Муравьед
Bat=Летучая мышь
Bear=Медведь
Beaver=Бобер
Beaver Nest=Бобриная нора
Beluga Whale=Белуга
Raw Whale Meat=Сырое китовое мясо
Cooked Whale Meat=Жаренное китовое мясо
Whale Blubber=Китовый жир
Blackbird=Черный дрозд
Black Grouse=Тетерев-косач
Boar=Кабан
Raw Pork=Сырая свинина
Cooked Pork=Жаренная свинина
Camel=Верблюд
Carp=Карп
Clamydosaurus=Плащеносная ящерица
Cockatoo=Какаду
Cockroach=Таракан
Roasted Cockroach=Жаренный таракан
Termite Concrete Wall=Стена с термитами
Termite Concrete Stair=Ступеньки с термитами
Termite Concrete Slab=Полублок с термитами
Termite Concrete White Wall=Белая стена с термитами
Termite Concrete White Stair=Белые ступеньки с термитами
Termite Concrete White Slab=Белый полублок с термитами
Termite Concrete Grey Wall=Серая стена с термитами
Termite Concrete Grey Stair=Серые ступеньки с термитами
Termite Concrete Grey Slab=Серый полублок с термитами
Termite Concrete Black Wall=Черная стена с термитами
Termite Concrete Black Stair=Черные ступеньки с термитами
Termite Concrete Black Slab=Черный полублок с термитами
Termite Concrete Blue Wall=Синяя стена с термитами
Termite Concrete Blue Stair=Синие ступеньки с термитами
Termite Concrete Blue Slab=Синий полублок с термитами
Termite Concrete Cyan Wall=Голубая стена с термитами
Termite Concrete Cyan Stair=Голубые ступеньки с термитами
Termite Concrete Cyan Slab=Голубой полублок с термитами
Termite Concrete Green Wall=Зеленая стена с термитами
Termite Concrete Green Stair=Зеленые ступеньки с термитами
Termite Concrete Green Slab=Зеленый полублок с термитами
Termite Concrete Dark Green Wall=Темно-зеленая стена с термитами
Termite Concrete Dark Green Stair=Темно-зеленые ступеньки с термитами
Termite Concrete Dark Green Slab=Темно-зеленый полублок с термитами
Termite Concrete Yellow Wall=Желтая стена с термитами
Termite Concrete Yellow Stair=Желтые ступеньки с термитами
Termite Concrete Yellow Slab=Желтый полублок с термитами
Termite Concrete Orange Wall=Оранжевая стена с термитами
Termite Concrete Orange Stair=Оранжевые ступеньки с термитами
Termite Concrete Orange Slab=Оранжевый полублок с термитами
Termite Concrete Brown Wall=Коричневая стена с термитами
Termite Concrete Brown Stair=Коричневые ступеньки с термитами
Termite Concrete Brown Slab=Коричневый полублок с термитами
Termite Concrete Red Wall=Красная стена с термитами
Termite Concrete Red Stair=Красные ступеньки с термитами
Termite Concrete Red Slab=Красный полублок с термитами
Termite Concrete Pink Wall=Розовая стена с термитами
Termite Concrete Pink Stair=Розовые ступеньки с термитами
Termite Concrete Pink Slab=Розовый полублок с термитами
Termite Concrete Magenta Wall=Пурпурная стена с термитами
Termite Concrete Magenta Stair=Пурпурные ступеньки с термитами
Termite Concrete Magenta Slab=Пурпурный полублок с термитами
Termite Concrete Violet Wall=Фиолетовая стена с термитами
Termite Concrete Violet Stair=Фиолетовые ступеньки с термитами
Termite Concrete Violet Slab=Фиолетовый полублок с термитами
Crab=Краб
Crocodile=Крокодил
Diving Beetle=Плавунец
Dragonfly=Стрекоза
Echidna=Ехидна
Elephant=Слон
Fox=Лиса
Frog=Лягушка
Goby=Бычок
Golden Mole=Слепыш
Goose=Гусь
Hare=Заяц
Raw Hare=Сырая зайчатина
Cooked Hare=Жаренная зайчатина
Hare Hide=Шкура кролика
Hermit Crab=Рак-отшельник
Hippo=Бегемот
Hyena=Гиена
Ibex=Козерог
Iguana=Игуана
Indian Rhino=Индийский носорог
Kangaroo=Кенгуру
Cobra=Кобра
Leopard Seal=Морской леопард
Lobster=Лобстер
Locust=Саранча
Roasted Locust=Жаренная саранча
Manatee=Ламантин
Marmot=Сурок
Monitor Lizard=Варан
Monkey=Обезъяна
Moose=Лось
Mosquito=Москит
Musk Ox=Овцебык
Bird Egg=Яйцо птицы
Fried Egg=Жаренное яйцо
Raw Birdmeat=Сырое птичье мясо
Cooked Birdmeat=Жаренное птичье мясо
Feather=Перо
Notoptera=Уховертка
Bug on Ice=Жук во льду
Dragonfly Nymph=Разнокрылая стрекоза
Oryx=Орикс
Otter=Выдра
Owl=Сова
Panda=Панда
Parrot=Попугай
Flying Parrot=Летающий попугай
Polar Bear=Белый медведь
Puffin=Тупик
Rat=Крыса
Cooked Rodent Meat=Жаренное мясо грызуна
Stingray=Скат
Termite Queen=Королева термитов
Termite Mound=Термитник
Termite Concrete=Блок с термитами
Termite Concrete Blue=Синий блок с термитами
Termite Concrete Green=Зеленый блок с термитами
Termite Concrete Yellow=Желтый блок с термитами
Termite Concrete Red=Красный блок с термитами
Termite Concrete Orange=Оранжевый блок с термитами
Termite Concrete Violet=Фиолетовый блок с термитами
Termite Concrete White=Белый блок с термитами
Termite Concrete Black=Черный блок с термитами
Termite Concrete Grey=Серый блок с термитами
Termite Concrete Dark Green=Зеленый блок с термитами
Termite Concrete Brown=Коричневый блок с термитами
Termite Concrete Pink=Розовый блок с термитами
Termite Concrete Magenta=Пурпурный блок с термитами
Termite Concrete Cyan=Голубой блок с термитами
Tortoise=Черепаха
Toucan=Тукан
Tree Lobster=Палочник
Anteater Pillow=Подушка из шкуры муравьеда
Anteater Pillow Left=Подушка из шкуры муравьеда повернутая влево
Anteater Pillow Right=Подушка из шкуры муравьеда повернутая вправо
Anteater Corpse=Труп муравьеда
Bear Trophy=Трофей с медведем
Bear Pelt=Ковер из шкуры медведя
Bear Pelt hanging=Вертикальный ковер из шкуры медведя
Bear Corpse=Труп медведя
Bear Stool=Стул с медведьей шкурой
Blackbird Pillow=Подушка из шкуры черного дятла
Blackbird Pillow Left=Подушка из шкуры черного дятла повернутая влево
Blackbird Pillow Right=Подушка из шкуры черного дятла повернутая вправо
Blackbird Corpse=Труп черного дятла
Blackbird Curtain=Занавеска из крыльев черного дятла
Boar Trophy=Трофей с кабаном
Boar Pelt=Ковер из шкуры кабана
Boar Pelt hanging=Вертикальный ковер из шкуры кабана
Boar Corpse=Труп кабана
Camel Pillow=Подушка из шкуры верблюда
Camel Pillow Left=Подушка из шкуры верблюда повернутая влево
Camel Pillow Right=Подушка из шкуры верблюда повернутая вправо
Camel Corpse=Труп верблюда
Camel Pelt=Ковер из шкуры верблюда
Camel Pelt hanging=Вертикальный ковер из шкуры верблюда
Camel Curtain=Занавески из шкуры верблюда
Crocodile Trophy=Трофей с крокодилом
Crocodile Corpse=Труп крокодила
Crocodile Stool=Стул с кожей крокодила
Crocodile Curtain=Занавески из кожи крокодила
Crocodile Skin=Кожа крокодила
Crocodile Skin hanging=Вертикальная кожа крокодила
Elephant Trophy=Трофей со слоном
Elephant Corpse=Труп слона
Ivory Table=Стол из слоновой кости
Ivory Chair=Стул из слоновой кости
Ivory Vase=Ваза из слоновой кости
Elephant Stool=Стул со шкурой слона
Gnu Pelt=Ковер из шкур антилопы гну
Gnu Pelt hanging=Вертикальный ковер из шкуры антилопы гну
Gnu Corpse=Труп антилопы гну
Gnu Trophy=Трофей с антилопой гну
Gnu Stool=Стул со шкурой антилопы гну
Gnu Curtain=Занавески из шкуры антилопы гну
Hippo Stool=Стул со шкурой гиппопотама
Hippo Curtain=Занавески из шкуры гиппопотама
Hippo Corpse=Труп гиппопотама
Hyena Trophy=Трофей с гиеной
Hyena Corpse=Труп гиены
Hyena Pillow=Подушка из шкуры гиены
Hyea Pillow Left=Подушка из шкуры гиены повернутая влево
Hyena Pillow Right=Подушка из шкуры гиены повернутая вправо
Kangaroo Corpse=Труп кенгуру
Kangaroo Pillow=Подушка из шкуры кенгуру
Kangaroo Pillow Left=Подушка из шкуры кенгуру повернутая вправо
Kangaroo Pillow Right=Подушка из шкуры кенгуру повернутая влево
Kangaroo Curtain=Занавески из шкуры кенгуру
Monitor Lizard Trophy=Трофей с вараном
Monitor Lizard Corpse=Труп варана
Monitor Lizard Stool=Стул со шкурой варана
Monitor Curtain=Занавески из шкуры варана
Moose Trophy=Трофей с лосем
Moose Pelt=Ковер из шкуры лося
Moose Pelt hanging=Вертикальный ковер из шкуры лося
Moose Corpse=Труп лося
Owl Trophy=Трофей с совой
Owl Corpse=Труп совы
Reindeer=Северный олень
Reindeer Trophy=Трофей с северным оленем
Reindeer Pelt=Ковер с шкуры северного оленя
Reindeer Pelt hanging=Вертикальный ковер из шкуры северного оленя
Reindeer Corpse=Труп северного оленя
Seal Pillow=Подушка из шкуры тюленя
Seal Pillow Left=Подушка из шкуры тюленя повернутая влево
Seal Pillow Right=Подушка из шкуры тюленя повернутая вправо
Seal Corpse=Труп тюленя
Seal Stool=Стул со шкурой тюленя
Seal Curtain=Занавески из шкуры тюленя
Seal=Тюлень
Shark Trophy=Трофей с акулой
Shark Corpse=Труп акулы
Vulture Pillow=Подушка из шкуры стервятника
Vulture Pillow Left=Подушка из шкуры стервятника повернутая влево
Vulture Pillow Right=Подушка из шкуры стервятника повернутая вправо
Vulture Corpse=Труп стервятника
Yak Trophy=Трофей с яком
Yak Pelt=Ковер из шкуры яка
Yak Pelt hanging=Вертикальный ковер из шкуры яка
Yak Corpse=Труп яка
Yak Stool=Стул со шкурой яка
Yak Curtain=Занавески из шкуры яка
Snow Leopard Trophy=Трофей с ирбисом
Snow Leopard Pillow=Подушка со шкурой ирбиса
Snow Leopard Pillow Left=Подушка со шкурой ирбиса повернутая влево
Snow Leopard Pillow Right=Подушка со шкурой ирбиса повернутая вправо
Snowleopard Corpse=Труп ирбиса
Tiger Trophy=Труп тигра
Tiger Pillow=Подушка со шкурой тигра
Tiger Pillow Left=Подушка со шкурой тигра повернутая влево
Tiger Pillow Right=Подушка со шкурой тигра повернутая вправо
Tiger Corpse=Труп тигра
Tiger Stool=Стул со шкурой тигра
Tiger Curtain=Занавески из шкурой тигра
Tiger Pelt=Ковер из шкуры тигра
Tiger Pelt hanging=Вертикальный ковер из шкуры тигра
Wolverine Trophy=Трофей с росомахой
Wolverine Corpse=Труп росомахи
Polar Bear Trophy=Трофей с белым медведем
Polar Bear Pelt=Ковер из шкуры белого медведя
Polar Bear Pelt hanging=Вертикальный ковер из шкуры белого медведя
Polar Bear Corpse=Труп белого медведя
Muskox Trophy=Трофей с овцебыком
Muskox Pelt=Ковер из шкуры овцебыка
Muskox Pelt hanging=Вертикальный ковер из шкуры овцебыка
Muskox Corpse=Труп из овцебыка
Muskox Stool=Стул со шкурой овцебыка
Trout=Форель
Tundra Shrub=Тундровый кустарник
Viper=Гадюка
Wolverine=Росомаха
Vulture=Стервятник
Wasp=Оса
Wasp Nest=Осиное гнездо
Wild Boar=Дикий кабан
Glass of Milk=Бутылка молока
Cheese=Сыр
Cheese Block=Сырный блок
Yak already milked!=Як уже подоен!
Bucket of Milk=Ведро молока
Raw Mollusk=Сырой моллюск
Fried Mollusk=Жаренный моллюск
Squid=Кальмар
Spider=Паук
Cooked Athropod=Жаренный атропод
Raw Athropod=Сырой атропод
Raw Fish=Сырая рыба
Cooked Fish=Жаренная рыба
Fish Food=Корм для рыбы
Snail=Улитка
Escargots=Эскарго
Stellers Sea Eagle=Белоплечий орлан
Spider Male=Паук-самец
Scorpion=Скорпион
Seahorse=Морской конек
Roadrunner=Кукушки-подорожники
Shark=Акула
Snow Leopard=Ирбис
Robin=Зарянка

107
mods/animalworld/locust.lua Normal file
View file

@ -0,0 +1,107 @@
local S = minetest.get_translator("animalworld")
mobs:register_mob("animalworld:locust", {
stepheight = 3,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 2,
damage = 0,
hp_min = 5,
hp_max = 20,
armor = 100,
collisionbox = {-0.1, -0.01, -0.1, 0.1, 0.2, 0.1},
visual = "mesh",
mesh = "Locust.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturelocust.png"},
},
sounds = {
random = "animalworld_locust",
distance = 16,
},
makes_footstep_sound = false,
walk_velocity = 3,
walk_chance = 15,
run_velocity = 4,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = true,
jump_height = 6,
stepheight = 3,
stay_near = {{"default:dry_grass_1", "default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4", "naturalbiomes:bushland_grass", "naturalbiomes:bushland_grass2", "naturalbiomes:bushland_grass3", "naturalbiomes:bushland_grass4"}, 4},
drops = {
{name = "animalworld:locust", chance = 1, min = 1, max = 1},
},
water_damage = 1,
lava_damage = 4,
light_damage = 0,
fear_height = 10,
animation = {
speed_normal = 100,
stand_start = 0,
stand_end = 100,
stand2_start = 0,
stand2_end = 1,
walk_start = 100,
walk_end = 200,
fly_start = 250, -- swim animation
fly_end = 350,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"air"},
floats = 0,
follow = {"default:dry_shrub ", "default:grass_1", "ethereal:dry_shrub", "farming:seed_wheat", "farming:seed_rye", "default:junglegrass", "ethereal:banana_single", "farming:corn_cob", "farming:cabbage",
"default:apple", "farming:cabbage", "farming:carrot", "farming:cucumber", "farming:grapes", "farming:pineapple", "ethereal:orange", "ethereal:coconut", "ethereal:coconut_slice", "group:grass", "group:normal_grass"},
view_range = 4,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 15, 25, 0, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:locust",
nodes = {"default:dry_dirt_with_dry_grass", "mcl_core:dirt_with_grass", "ethereal:prairie_dirt", "naturalbiomes:bushland_bushlandlitter"},
neighbors = {"naturalbiomes:heath_grass", "mcl_flowers:tallgrass", "naturalbiomes:heath_grass2", "naturalbiomes:heath_grass3", "naturalbiomes:heatherflower", "naturalbiomes:heatherflower2", "naturalbiomes:heatherflower3", "group:grass", "group:normal_grass", "naturalbiomes:med_flower2", "naturalbiomes:med_grass1", "naturalbiomes:med_grass2", "naturalbiomes:med_flower3", "naturalbiomes:bushland_grass4", "naturalbiomes:bushland_grass5", "naturalbiomes:bushland_grass6", "group:grass", "group:normal_grass"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 2,
min_height = 10,
max_height = 75,
day_toggle = true,
})
end
mobs:register_egg("animalworld:locust", S("Locust"), "alocust.png")
minetest.register_craftitem(":animalworld:locust_roasted", {
description = S("Roasted Locust"),
inventory_image = "animalworld_locust_roasted.png",
on_use = minetest.item_eat(8),
groups = {food_meat = 1, flammable = 2},
})
minetest.register_craft({
type = "cooking",
output = "animalworld:locust_roasted",
recipe = "animalworld:locust",
cooktime = 2,
})

View file

@ -0,0 +1,118 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:manatee", {
stepheight = 0.0,
type = "animal",
passive = true,
attack_type = "dogfight",
attack_animals = false,
reach = 1,
damage = 1,
hp_min = 50,
hp_max = 80,
armor = 100,
collisionbox = {-0.7, -0.01, -0.7, 0.7, 0.95, 0.7},
visual = "mesh",
mesh = "Manatee.b3d",
visual_size = {x = 1.0, y = 1.0},
textures = {
{"texturemanatee.png"},
},
sounds = {},
makes_footstep_sound = false,
walk_velocity = 0.5,
run_velocity = 2,
fly = true,
fly_in = "default:water_source", "default:river_water_source", "default:water_flowing", "default:river_water_flowing", "mcl_core:water_source", "mcl_core:water_flowing",
fall_speed = 0,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
stepheight = 0.0,
stay_near = {{"marinara:sand_with_alage", "marinara:sand_with_seagrass", "mcl_flowers:waterlily", "mcl_ocean:seagrass:sand", "default:sand_with_kelp", "marinara:sand_with_kelp", "marinara:reed_root", "flowers:waterlily_waving", "naturalbiomes:waterlily", "default:clay"}, 5},
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
light_damage = 0,
fear_height = 2,
animation = {
speed_normal = 75,
stand_speed = 40,
stand_start = 0,
stand_end = 100,
fly_start = 100, -- swim animation
fly_end = 250,
punch_start = 100,
punch_end = 200,
die_start = 100,
die_end = 200,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
fly_in = {"default:water_source", "default:river_water_source", "default:water_flowing", "mcl_core:water_source", "mcl_core:water_flowing"},
floats = 0,
follow = {
"default:kelp", "mcl_flowers:tallgrass", "mcl_core:deadbush", "mcl_bamboo:bamboo", "seaweed", "marinara:sand_with_seagrass", "marinara:sand_with_seagrass2", "xocean:kelp",
"default:grass", "farming:cucumber", "farming:cabbage", "xocean:seagrass", "farming:lettuce", "default:junglegrass", "group:grass", "group:normal_grass"
},
view_range = 10,
on_rightclick = function(self, clicker)
-- feed or tame
if mobs:feed_tame(self, clicker, 4, false, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 15, 25, false, nil) then return end
end,
})
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:manatee",
nodes = {"mcl_core:water_source", "default:water_source"}, {"default:river_water_source"}, {"mcl_core:water_source"}, {"mcl_core:water_flowing"},
neighbors = {"marinara:sand_with_seagrass", "default:sand_with_kelp", "marinara:sand_with_kelp", "mcl_ocean:seagrass:sand", "mcl_ocean:bubble_coral", "mcl_ocean:tube_coral", "mcl_ocean:fire_coral", "mcl_ocean:brain_coral"},
min_light = 0,
interval = 30,
chance = 2000, -- 15000
active_object_count = 2,
min_height = -10,
max_height = 10,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"default:water_source", "default:river_water_source"})
if nods and #nods > 0 then
-- min herd of 2
local iter = math.min(#nods, 2)
-- print("--- manatee at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:manatee", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:manatee", S("Manatee"), "amanatee.png")

131
mods/animalworld/marmot.lua Normal file
View file

@ -0,0 +1,131 @@
local S = minetest.get_translator("animalworld")
local random = math.random
mobs:register_mob("animalworld:marmot", {
stepheight = 2,
type = "animal",
passive = false,
attack_type = "dogfight",
group_attack = true,
owner_loyal = true,
attack_npcs = false,
reach = 2,
damage = 1,
hp_min = 10,
hp_max = 30,
armor = 100,
collisionbox = {-0.3, -0.01, -0.3, 0.3, 0.95, 0.3},
visual = "mesh",
mesh = "Marmot.b3d",
textures = {
{"texturemarmot.png"},
},
makes_footstep_sound = true,
sounds = {
random = "animalworld_marmot",
damage = "animalworld_marmot2",
},
walk_velocity = 2,
run_velocity = 3,
runaway = true,
runaway_from = {"animalworld:bear", "animalworld:crocodile", "animalworld:tiger", "animalworld:spider", "animalworld:spidermale", "animalworld:shark", "animalworld:hyena", "animalworld:kobra", "animalworld:monitor", "animalworld:snowleopard", "animalworld:volverine", "livingfloatlands:deinotherium", "livingfloatlands:carnotaurus", "livingfloatlands:lycaenops", "livingfloatlands:smilodon", "livingfloatlands:tyrannosaurus", "livingfloatlands:velociraptor", "animalworld:divingbeetle", "animalworld:scorpion", "animalworld:polarbear", "animalworld:leopardseal", "animalworld:stellerseagle", "player", "animalworld:wolf", "animalworld:panda", "animalworld:stingray", "marinaramobs:jellyfish", "marinaramobs:octopus", "livingcavesmobs:biter", "livingcavesmobs:flesheatingbacteria"},
jump = false,
jump_height = 6,
pushable = true,
follow = {"default:grass_3", "default:dry_grass_3", "ethereal:dry_shrub", "mcl_flowers:tallgrass", "mcl_flowers:tulip_red", "mcl_flowers:sunflower", "farming:lettuce", "farming:seed_wheat", "default:junglegrass", "naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:alpine_grass3", "naturalbiomes:alpine_dandelion", "livingdesert:coldsteppe_grass1", "livingdesert:coldsteppe_grass2"},
view_range = 10,
drops = {
{name = "mobs:meat_raw", chance = 1, min = 1, max = 1},
{name = "mobs:leather", chance = 1, min = 0, max = 2},
},
water_damage = 0,
lava_damage = 5,
light_damage = 0,
fear_height = 3,
stay_near = {{"naturalbiomes:alpine_grass1", "naturalbiomes:alpine_grass2", "naturalbiomes:alpine_grass3", "naturalbiomes:alpine_dandelion", "naturalbiomes:alpine_edelweiss", "livingdesert:coldsteppe_grass1", "livingdesert:coldsteppe_grass2", "livingdesert:coldsteppe_grass3"}, 5},
animation = {
speed_normal = 90,
stand_start = 0,
stand_end = 100,
stand1_start = 100,
stand1_end = 200,
stand2_start = 350,
stand2_end = 450,
walk_start = 200,
walk_end = 300,
punch_start = 200,
punch_end = 300,
die_start = 200,
die_end = 300,
die_speed = 50,
die_loop = false,
die_rotate = true,
},
on_rightclick = function(self, clicker)
if mobs:feed_tame(self, clicker, 8, true, true) then return end
if mobs:protect(self, clicker) then return end
if mobs:capture_mob(self, clicker, 0, 25, 0, false, nil) then return end
end,
})
local spawn_on = {"default:desert_sand", "default:dry_dirt_with_dry_grass"}
if minetest.get_mapgen_setting("mg_name") ~= "v6" then
spawn_on = {"default:desert_sand", "default:dry_dirt_with_dry_grass"}
end
if minetest.get_modpath("ethereal") then
spawn_on = {"ethereal:grass_grove", "default:desert_sand", "ethereal:dry_dirt"}
end
if not mobs.custom_spawn_animalworld then
mobs:spawn({
name = "animalworld:marmot",
nodes = {"naturalbiomes:alpine_litter", "mcl_core:dirt_with_grass", "livingdesert:coldsteppe_ground2", "mcl_core:stone", "mcl_core:granite"},
neighbors = {"naturalbiomes:alpine_grass1", "mcl_flowers:tallgrass", "mcl_flowers:double:fern", "mcl_flowers:fern", "naturalbiomes:alpine_grass2", "naturalbiomes:alpine_grass3", "naturalbiomes:alpine_dandelion", "naturalbiomes:alpine_edelweiss", "livingdesert:coldsteppe_grass1", "livingdesert:coldsteppe_grass2", "livingdesert:coldsteppe_grass3"},
min_light = 0,
interval = 60,
chance = 2000, -- 15000
active_object_count = 4,
min_height = 30,
max_height = 31000,
day_toggle = true,
on_spawn = function(self, pos)
local nods = minetest.find_nodes_in_area_under_air(
{x = pos.x - 4, y = pos.y - 3, z = pos.z - 4},
{x = pos.x + 4, y = pos.y + 3, z = pos.z + 4},
{"naturalbiomes:alpine_litter", "livingdesert:coldsteppe_ground2"})
if nods and #nods > 0 then
-- min herd of 4
local iter = math.min(#nods, 4)
-- print("--- marmot at", minetest.pos_to_string(pos), iter)
for n = 1, iter do
local pos2 = nods[random(#nods)]
local kid = random(4) == 1 and true or nil
pos2.y = pos2.y + 2
if minetest.get_node(pos2).name == "air" then
mobs:add_mob(pos2, {
name = "animalworld:marmot", child = kid})
end
end
end
end
})
end
mobs:register_egg("animalworld:marmot", S("Marmot"), "amarmot.png")
mobs:alias_mob("animalworld:marmot", "animalworld:marmot") -- compatibility

View file

@ -0,0 +1,8 @@
name = animalworld
depends = mobs
optional_depends = default, mcl_core, mcl_sounds, bucket, ethereal, xocean, farming, fishing, hunger_ng, livingcaves
description = Adds various wild animals to your Minetest Game world.
release = 24027
author = Liil
title = Wilhelmines Animal World

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more