Mod updates

master
daretmavi 2020-12-04 21:31:33 +01:00
parent 13d9be892d
commit 619ba72eb4
88 changed files with 2563 additions and 379 deletions

View File

@ -1,3 +1,13 @@
--------------------------------------------------
Ver. 2.2 (Devel) [27.11.2020]
Added posibility to take flowing liquid
- Source node is taken from flowing (searched in liquid_range)
Settings added (settingtypes.txt)
- bucket_get_flowing (Default = true) - Flowing liwuid can be taken
--------------------------------------------------
Ver. 2.0 [14.11.2020]
Settings added (settingtypes.txt)

View File

@ -8,6 +8,7 @@ Fork of **Minetest Game mod: bucket**
- flowing is only one block to prevent flooding with one bucket
- If "bucket water" gets in contact with normal water or river water, then the bucket water changes to this type.
- If "bucket lava" gets in contact with water, or default lava, the bucket lava changes to default type - this can result in lava flooding. Just don't mess up with lava :)
- liquid can be taken from flowing liquid - you don't have to look for source
**Working with other mods:**

View File

@ -43,6 +43,7 @@ minetest.override_item(Liquid_name.water.bucket_source, {
description = S("Bucket Water Source"),
liquid_alternative_flowing = Liquid_name.water.bucket_flowing,
liquid_alternative_source = Liquid_name.water.bucket_source,
liquid_renewable = false,
})
minetest.register_node(Liquid_name.water.bucket_flowing, water_flowing_def)
@ -51,6 +52,7 @@ minetest.override_item(Liquid_name.water.bucket_flowing, {
liquid_alternative_flowing = Liquid_name.water.bucket_flowing,
liquid_alternative_source = Liquid_name.water.bucket_source,
liquid_range = bucket_water_range,
liquid_renewable = false,
})
minetest.register_node(Liquid_name.lava.bucket_source, lava_source_def)
@ -58,6 +60,7 @@ minetest.override_item(Liquid_name.lava.bucket_source, {
description = S("Bucket Lava Source"),
liquid_alternative_flowing = Liquid_name.lava.bucket_flowing,
liquid_alternative_source = Liquid_name.lava.bucket_source,
liquid_renewable = false,
})
minetest.register_node(Liquid_name.lava.bucket_flowing, lava_flowing_def)
@ -66,6 +69,7 @@ minetest.override_item(Liquid_name.lava.bucket_flowing, {
liquid_alternative_flowing = Liquid_name.lava.bucket_flowing,
liquid_alternative_source = Liquid_name.lava.bucket_source,
liquid_range = bucket_lava_range,
liquid_renewable = false,
})

View File

@ -21,7 +21,24 @@ minetest.register_alias("bucket_lava", bucket.lava)
-- define bucket liquids and Liquid_name
dofile(minetest.get_modpath("bucket") .. "/bucket_liquids.lua")
-- according to source (liquid type) assign bucket with "bucket" liquid
-- with this you can override the mod setting
bucket.giving_back={
-- return bucket for standard water and lava
[Liquid_name.lava.source]=bucket.lava,
[Liquid_name.water.source]=bucket.water,
-- return bucket for river water
[Liquid_name.water.river_source ]=bucket.water,
-- return bucket for bucket water and lava
[Liquid_name.lava.bucket_source]=bucket.lava,
[Liquid_name.water.bucket_source]=bucket.water,
}
-- if true, the flowing water can be taken in the bucket
-- load settingtypes
local get_flowing_liquid = minetest.settings:get_bool("bucket_get_flowing", true)
-- craft empty bucket
minetest.register_craft({
output = bucket.empty.." 1",
recipe = {
@ -56,8 +73,6 @@ end
-- Needed to avoid creating holes in sloping rivers.
-- This function can be called from any mod (that depends on bucket).
-- this is function from original bucket
-- for compatibility, if used by another mod. (not tested)
function bucket.register_liquid(source, flowing, itemname, inventory_image, name,
groups, force_renew)
bucket.liquids[source] = {
@ -147,25 +162,38 @@ minetest.register_craftitem(bucket.empty, {
local liquiddef = bucket.liquids[node.name]
local item_count = user:get_wielded_item():get_count()
-- node.name == liquiddef.flowing return water even from flowing liquid
-- get_flowing_liquid - if this is enabled
if liquiddef ~= nil
and liquiddef.itemname ~= nil
and node.name == liquiddef.source then
and (node.name == liquiddef.source
or (node.name == liquiddef.flowing and get_flowing_liquid)) then
if check_protection(pointed_thing.under,
user:get_player_name(),
"take ".. node.name) then
return
end
-- find source for the flowing liquid
if node.name == liquiddef.flowing then
-- source_dist max. distance from flowing node, if Nil, the max. = 8 is used
local source_dist = tonumber(minetest.registered_nodes[liquiddef.flowing].liquid_range) or 8
-- Find source node position
local source_pos = minetest.find_node_near(pointed_thing.under, source_dist, liquiddef.source) -- position of the source node
-- If found, then replace with flowing node
if source_pos ~= nil then
minetest.set_node(source_pos, {name = liquiddef.flowing})
else
-- if source not found, then do nothing
return
end
end
-- default set to return filled bucket
local giving_back
-- according to source (liquid type) assign bucket with "bucket" liquid
local giving_back={
[Liquid_name.lava.source]=bucket.lava,
[Liquid_name.water.source]=bucket.water,
[Liquid_name.water.river_source ]=bucket.water,
[Liquid_name.lava.bucket_source]=bucket.lava,
[Liquid_name.water.bucket_source]=bucket.water,
}
local giving_back = bucket.giving_back
--minetest.log(dump(giving_back[liquiddef.source]))
-- giving_back from original bucket
if giving_back[liquiddef.source] == nil then
giving_back[liquiddef.source]=liquiddef.itemname
@ -220,7 +248,8 @@ bucket.register_liquid(
bucket.water,
"bucket_water.png",
S("Water Bucket"),
{tool = 1, water_bucket = 1}
{tool = 1, water_bucket = 1},
false
)
-- River water source is 'liquid_renewable = false' to avoid horizontal spread
@ -236,7 +265,7 @@ bucket.register_liquid(
"bucket_river_water.png",
S("River Water Bucket"),
{tool = 1, water_bucket = 1},
true
false
)
bucket.register_liquid(
@ -245,7 +274,8 @@ bucket.register_liquid(
bucket.lava,
"bucket_lava.png",
S("Lava Bucket"),
{tool = 1}
{tool = 1},
false
)
-- Unified bucket
@ -267,7 +297,8 @@ bucket.register_liquid(
bucket.lava,
"bucket_lava.png",
S("Lava Bucket"),
{tool = 1}
{tool = 1},
false
)
----

View File

@ -3,3 +3,7 @@ bucket_water_flowing_range (Bucket water flowing range) int 1
# How far will lava from bucket flow
bucket_lava_flowing_range (Bucket lava flowing range) int 1
# If true, then liquid can be taken even from flowing one
# (not only from source)
bucket_get_flowing (Flowing liwuid can be taken) bool true

View File

@ -18,12 +18,12 @@ local singleplayer = core.is_singleplayer()
local reg_items = core.registered_items
local reg_tools = core.registered_tools
local reg_entities = core.registered_entities
local reg_aliases = core.registered_aliases
local log = core.log
local after = core.after
local clr = core.colorize
local sound_play = core.sound_play
local parse_json = core.parse_json
local write_json = core.write_json
local chat_send = core.chat_send_player
@ -217,6 +217,11 @@ local group_names = {
["color_dark_green,dye"] = S"Any dark green dye",
}
craftguide.model_alias = {
["boats:boat"] = {name = "boats:boat", drawtype = "entity"},
--["carts:cart"] = {name = "carts:cart", drawtype = "entity"}, -- the cart animation is broken
}
local function err(str)
return log("error", str)
end
@ -1173,9 +1178,21 @@ local function get_title_fs(query_item, favs, lang_code, fs, spacing)
"style_type[label;font=normal]")
local def = reg_items[query_item]
local model_alias = craftguide.model_alias[query_item]
if def.drawtype == "mesh" then
local tiles = def.tiles or def.textures
if def.drawtype == "mesh" or model_alias then
if model_alias then
if model_alias.drawtype == "entity" then
def = reg_entities[model_alias.name]
local init_props = def.initial_properties
def.textures = init_props and init_props.textures or def.textures
def.mesh = init_props and init_props.mesh or def.mesh
else
def = reg_items[model_alias.name]
end
end
local tiles = def.tiles or def.textures or {}
local t = {}
for _, v in ipairs(tiles) do

View File

@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi")
mobs = {
mod = "redo",
version = "20201115",
version = "20201130",
intllib = S,
invis = minetest.global_exists("invisibility") and invisibility or {}
}
@ -58,6 +58,7 @@ local mobs_drop_items = settings:get_bool("mobs_drop_items") ~= false
local mobs_griefing = settings:get_bool("mobs_griefing") ~= false
local spawn_protected = settings:get_bool("mobs_spawn_protected") ~= false
local remove_far = settings:get_bool("remove_far_mobs") ~= false
local mob_area_spawn = settings:get_bool("mob_area_spawn")
local difficulty = tonumber(settings:get("mob_difficulty")) or 1.0
local show_health = settings:get_bool("mob_show_health") ~= false
local max_per_block = tonumber(settings:get("max_objects_per_block") or 99)
@ -276,10 +277,10 @@ function mob_class:set_velocity(v)
c_x, c_y = unpack(self:collision())
end
local yaw = (self.object:get_yaw() or 0) + self.rotate
local yaw = (self.object:get_yaw() or 0) + (self.rotate or 0)
-- nil check for velocity
v = v or 0
v = v or 0.01
-- check if standing in liquid with max viscosity of 7
local visc = min(minetest.registered_nodes[self.standing_in].liquid_viscosity, 7)
@ -291,8 +292,8 @@ function mob_class:set_velocity(v)
v = v / (visc + 1)
end
-- set velocity with hard limit of 10
local vel = self.object:get_velocity()
-- set velocity
local vel = self.object:get_velocity() or 0
local new_vel = {
x = (sin(yaw) * -v) + c_x,
@ -3908,8 +3909,27 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter
end
end
-- returns position if we have enough space to spawn mob
pos = can_spawn(pos, name)
-- should we check mob area for obstructions ?
if mob_area_spawn ~= true then
-- do we have enough height clearance to spawn mob?
local ent = minetest.registered_entities[name]
local height = max(1, math.ceil(
(ent.collisionbox[5] or 0.25) - (ent.collisionbox[2] or -0.25) - 1))
for n = 0, height do
local pos2 = {x = pos.x, y = pos.y + n, z = pos.z}
if minetest.registered_nodes[node_ok(pos2).name].walkable == true then
--print ("--- inside block", name, node_ok(pos2).name)
return
end
end
else
-- returns position if we have enough space to spawn mob
pos = can_spawn(pos, name)
end
if pos then

View File

@ -697,6 +697,9 @@ External Settings for "minetest.conf"
function.
'mob_nospawn_range' Minimum range a mob can spawn near player (def: 12)
'mob_active_limit' Number of active mobs in game, 0 for unlimited
'mob_area_spawn' When true will check surrounding area the size of the
mob for obstructions before spawning, otherwise it
defaults to checking the height of the mob only.
Players can override the spawn chance for each mob registered by adding a line
to their minetest.conf file with a new value, the lower the value the more each

View File

@ -33,3 +33,6 @@ mob_nospawn_range (Mob no-spawn range) float 12.0
# Sets maximum number of active mobs in game (0 for unlimited)
mob_active_limit (Mob Active Limit) float 0
# Enables area check when spawning mobs
mob_area_spawn (Mob Area Spawn) bool false

View File

@ -145,15 +145,22 @@ petz.growth_timer = function(self, dtime)
local pos = self.object:get_pos()
pos.y = pos.y + 1.01 -- grows a litte up
self.object:set_pos(pos)
local vel = self.object:get_velocity()
local obj
if self.parents then -- for chicken only
mokapi.remove_mob(self)
obj = minetest.add_entity(pos, self.parents[math.random(1, #self.parents)])
else
obj = self
petz.set_properties(self, {
jump = false,
is_baby = false,
visual_size = self.visual_size,
collisionbox = self.collisionbox
})
end
local vel = obj:get_velocity()
vel.y=vel.y + 4.0
self.object:set_velocity(vel)
petz.set_properties(self, {
jump = false,
is_baby = false,
visual_size = self.visual_size,
collisionbox = self.collisionbox
})
mokapi.make_sound("object", self.object, "petz_pop_sound", petz.settings.max_hear_distance)
obj:set_velocity(vel)
mokapi.make_sound("object", obj, "petz_pop_sound", petz.settings.max_hear_distance)
end
end

View File

@ -27,8 +27,14 @@ petz.lay_egg = function(self)
{x = pos.x + lay_range, y = pos.y + 1, z = pos.z + lay_range},
"petz:ducky_nest")
if #nearby_nodes > 1 then
local nest_type
if self.type == "hen" then
nest_type = "chicken"
else
nest_type = "ducky"
end
local nest_to_lay = nearby_nodes[math.random(1, #nearby_nodes)]
minetest.set_node(nest_to_lay, {name= "petz:"..self.type.."_nest_egg"})
minetest.set_node(nest_to_lay, {name= "petz:"..nest_type.."_nest_egg"})
petz.increase_egg_count(self)
end
end

View File

@ -170,7 +170,10 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
self.gallop_exhausted = mobkit.remember(self, "gallop_exhausted", false)
self.gallop_recover_time = mobkit.remember(self, "gallop_recover_time", petz.settings.gallop_recover_time)
end
if self.type == "pony" then
if self.parents then
self.is_baby = mobkit.remember(self, "is_baby", true)
end
if self.type == "pony" then --not in the previopus loop, cos also is mountable
self.horseshoes = mobkit.remember(self, "horseshoes", 0)
end
if self.herd then
@ -351,6 +354,10 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
petz.colorize(self, self.colorized)
end
end
if self.type == "chicken" then
mobkit.remember(self, "texture_no", 1)
petz.set_properties(self, {textures = {self.textures[1]}})
end
if self.horseshoes and captured_mob == false then
petz.horseshoes_speedup(self)
end

View File

@ -23,7 +23,7 @@ petz.on_step = function(self, dtime)
end
--Tamagochi
--Check the hungry
if petz.settings.tamagochi_mode == true and self.owner and self.is_pet and petz.settings.tamagochi_hungry_warning > 0 and not(self.status=="sleep") then
if petz.settings.tamagochi_mode == true and self.owner and self.is_pet and petz.settings.tamagochi_hungry_warning > 0 and not(self.status=="sleep") and petz.settings[self.type.."_follow"] then
if not(self.tmp_follow_texture) then
local items = string.split(petz.settings[self.type.."_follow"], ',')
local item = petz.str_remove_spaces(items[1]) --the first one

View File

@ -98,6 +98,7 @@ has been captured=foi capturado.
has been tamed.=foi domado.
has starved to death!!!=morreu de fome!!!
Saúde=Abraço
Hen=Galinha
Herding=Pastoreio
Honey=Mel
Honeycomb=Favo de mel
@ -178,6 +179,7 @@ Roasted Goat Meat=Carne assada de caprino
Roasted Lamb Chop=Costeleta de cordeiro assada
Roasted Parrot=Papagaio Assado
Roasted Porkchop=Costeleta de porco assada
Rooster=Galo
Saddle=Sela
Saddlebag=Sacos de Sela
Santa Killer=Papai Noel Assassino

View File

@ -98,6 +98,7 @@ has been captured=wurde gefangen
has been tamed.=wurde gezähmt.
has starved to death!!!=ist verhungert!!!
Health=Gesundheit
Hen=Henne
Herding=Hüten
Honey=Honig
Honeycomb=Honigwabe
@ -178,6 +179,7 @@ Roasted Goat Meat=Gebratenes Ziegenfleisch
Roasted Lamb Chop=Gebratene Lammkeule
Roasted Parrot=Gebratener Papagei
Roasted Porkchop=Gebratenes Schweinekotelett
Rooster=Hahn
Saddle=Sattel
Saddlebag=Satteltasche
Santa Killer=Santa der Killer

View File

@ -98,6 +98,7 @@ has been captured=ha sido capturado
has been tamed.=ha sido domesticado.
has starved to death!!!=ha muerto de hambre!!!
Health=Salud
Hen=Gallina
Herding=Pastoreo
Honey=Miel
Honeycomb=Panal
@ -178,6 +179,7 @@ Roasted Goat Meat=Carne de cabrito asada
Roasted Lamb Chop=Chuletilla de cordero asada
Roasted Parrot=Loro tostado
Roasted Porkchop=Chuleta de cerdo asada
Rooster=Gallo
Saddle=Silla de montar
Saddlebag=Alforjas
Santa Killer=Papá Noel asesino

View File

@ -98,6 +98,7 @@ has been captured=a été capturé
has been tamed.=a été apprivoisé.
has starved to death!!!=est mort de faim!!!
Health=Santé
Hen=Poule
Herding=Troupeau
Honey=Miel
Honeycomb=Ruche
@ -178,6 +179,7 @@ Roasted Goat Meat=Viande de chèvre rôtie
Roasted Lamb Chop=Mouton rôti
Roasted Parrot=Perroquet rôti
Roasted Porkchop=Rôti de porc
Rooster=Coq
Saddle=Selle
Saddlebag=Sac pour selle
Santa Killer=Papa Noël tueur

View File

@ -98,6 +98,7 @@ has been captured=был пойман
has been tamed.=был приручен.
has starved to death!!!=Умер от голода!!!
Health=Здоровье
Hen=Курица
Herding=выпас
Honey=Мёд
Honeycomb=Соты
@ -178,6 +179,7 @@ Roasted Lamb Chop=Жареные отбивные из ягненка
Roasted Goat Meat=Жареное козье мясо
Roasted Parrot=Жареный попугай
Roasted Porkchop=Жареная свиная отбивная
Rooster=Рустер
Saddle=Седло
Saddlebag=Мешок
Santa Killer=Злой Санта

View File

@ -204,7 +204,8 @@ minetest.register_node("petz:chicken_nest_egg", {
},
on_construct = function(pos)
local timer = minetest.get_node_timer(pos)
timer:start(math.random(400, 600))
local hatch_egg_timing = petz.settings.hatch_egg_timing
timer:start(math.random(hatch_egg_timing - (hatch_egg_timing*0.2), hatch_egg_timing+ (hatch_egg_timing*0.2)))
end,
on_timer = function(pos)
local pos_above = {x = pos.x, y = pos.y +1, z= pos.z}
@ -212,7 +213,9 @@ minetest.register_node("petz:chicken_nest_egg", {
if not minetest.registered_entities["petz:chicken"] then
return
end
minetest.add_entity(pos_above, "petz:chicken")
local entity = minetest.add_entity(pos_above, "petz:chicken"):get_luaentity()
entity.is_baby = mobkit.remember(entity, "is_baby", true) --it is a baby
entity.growth_time = mobkit.remember(entity, "growth_time", 0.0) --the chicken to grow
minetest.set_node(pos, {name= "petz:ducky_nest"})
return true
end

View File

@ -1,5 +1,3 @@
local modpath, S = ...
---
--- Aquatic Behaviours
---

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- ARBOREAL BRAIN
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Attack Player Behaviour
--
@ -102,8 +100,6 @@ end
function petz.lq_jumpattack(self,height,target)
local phase=1
local timer=0.5
local tgtbox = target:get_properties().collisionbox
local func=function(self)
if not mobkit.is_alive(target) then return true end
if self.isonground then
@ -130,7 +126,6 @@ function petz.lq_jumpattack(self,height,target)
-- calculate attack spot
local yaw = self.object:get_yaw()
local dir = minetest.yaw_to_dir(yaw)
local apos = mobkit.pos_translate2d(pos,yaw,self.attack.range)
local distance = vector.distance(pos, tgtpos)
--minetest.chat_send_all(tostring(distance))
if distance < 2.0 then
@ -218,8 +213,3 @@ function mobkit.lq_flyattack(self, target)
end
mobkit.queue_low(self,func)
end
function petz.rpg_damage(self)
local attack = self.attack or nil
local max_speed = max_speed or 0
end

View File

@ -1,5 +1,3 @@
local modpath, S = ...
---
--- Bee Behaviours
---
@ -126,7 +124,6 @@ function mobkit.lq_approach_behive(self)
else
return true
end
local pos = self.object:get_pos()
--local y_distance = tpos.y - pos.y
if mobkit.drive_to_pos(self, tpos, 1.5, 6.28, (self.view_range / 4) ) then
mobkit.clear_queue_high(self)

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Breed Behaviour
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- WANDER FLY BEHAVIOUR (2 functions: HQ & LQ)
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- FOLLOW BEHAVIOURS
-- 2 types: for terrestrial and for flying/aquatic mobs.
@ -103,3 +101,28 @@ function mobkit.flyto(self, target)
self.object:set_yaw(new_yaw)
self.object:set_velocity(velocity)
end
function petz.follow_parents(self, pos)
local tpos
local ent_obj = mobkit.get_closest_entity(self, self.parents[1]) -- look for the mom to join with
if not ent_obj then
ent_obj = mobkit.get_closest_entity(self, self.parents[2]) -- look for the dad to join with
end
if ent_obj then
local ent = ent_obj:get_luaentity()
if ent then
tpos = ent_obj:get_pos()
local distance = vector.distance(pos, tpos)
if distance > 5 then
mobkit.hq_goto(self, 10, tpos)
return true
else
return false
end
else
return false
end
else
return false
end
end

View File

@ -1,5 +1,3 @@
local modpath, S = ...
function petz.bh_look_at(self, player_pos, prty)
if not(petz.settings.look_at) or not(self.head) or not(petz.is_standing(self)) or self.looking
or not(math.random(1, petz.settings.look_at_random) == 1)
@ -15,7 +13,7 @@ function petz.hq_look_at(self, player_pos, prty)
local func = function(self)
if not(self.looking) then
local random_time = math.random(1, 2)
local body_yaw = petz.move_head(self, player_pos)
petz.move_head(self, player_pos)
--if random_time == 1 then --move the body to fit the head
--self.object:set_yaw(body_yaw)
--end
@ -57,7 +55,7 @@ function petz.move_head(self, tpos)
self.head_rotation = vector.add(head_rotation, self.head.rotation_origin) --the offset for the rotation, depends on the blender model
self.object:set_bone_position("head", self.head.position, self.head_rotation) --set the head movement
--minetest.chat_send_all(tostring(mokapi.degrees_to_radians(yaw)))
return mokapi.degrees_to_radians(body_yaw-yaw)
return mokapi.degrees_to_radians(body_yaw-yaw) --returns body_yaw
end
--this sets the mob to move it's head back to pointing forwards

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Herding Behaviour
--

View File

@ -1,5 +1,5 @@
function petz.bh_hunt(self, prty)
if self.tamed == true then
function petz.bh_hunt(self, prty, force)
if self.tamed == true and not(force) then
return
end
local preys_list = petz.settings[self.type.."_preys"]

View File

@ -70,9 +70,9 @@ function mobkit.lq_mountdriver(self)
local auto_drive = false
local func = function(self)
if not(self.driver) then return true end
local rot_steer, rot_view = math.pi/2, 0
local rot_view = 0
if self.player_rotation.y == 90 then
rot_steer, rot_view = 0, math.pi/2
rot_view = math.pi/2
end
local acce_y = 0
local velo= {

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Replace Behaviour
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Runaway from predator behaviour
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Teleport Behaviour
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Approach Torch Behaviour
-- for moths (not finished!!!)

View File

@ -38,7 +38,7 @@ function petz.ant_brain(self)
-- hunt a prey (another queen in the case of a queen)
if prty < 20 and self.ant_type == "queen" then
petz.bh_hunt(self, 20)
petz.bh_hunt(self, 20, true)
end
if prty < 13 and self.ant_type == "queen" and not(self.anthill_founded) then --if queen, try to create a colony (anthill)

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- AQUATIC BRAIN
--

View File

@ -1,6 +1,3 @@
local modpath, S = ...
--
-- BEE BRAIN
--

View File

@ -1,6 +1,3 @@
local modpath, S = ...
--
-- 1. HERBIBORE/FLYING MOBS BRAIN
--
@ -100,6 +97,20 @@ function petz.herbivore_brain(self)
end
end
-- hunt a prey (another congener)
if prty < 12 and self.aggressive then
petz.bh_hunt(self, 12, true)
end
--Baby petz follow their parents
if prty < 10 then
if petz.settings.parent_search and self.parents then
if mobkit.timer(self, 5) then --each 5 seconds search for parents
petz.follow_parents(self, pos)
end
end
end
--if prty < 7 and self.type == "moth" and mobkit.is_queue_empty_high(self) then --search for a squareball
--local pos_torch_near = minetest.find_node_near(pos, self.view_range, "default:torch")
--if pos_torch_near then
@ -108,7 +119,7 @@ function petz.herbivore_brain(self)
--end
--end
--Replace nodes by others
--Poop
if prty < 7 then
petz.poop(self, pos)
end

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- MONSTER BRAIN
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- PREDATOR BRAIN
--
@ -49,7 +47,7 @@ function petz.predator_brain(self)
-- hunt a prey
if prty < 12 then -- if not busy with anything important
petz.bh_hunt(self, 12)
petz.bh_hunt(self, 12, false)
end
if prty < 10 then

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- SEMIAQUATIC BRAIN
--

View File

@ -1,5 +1,3 @@
local modpath, S = ...
--
-- Helpers Functions
--

View File

@ -1,26 +1,26 @@
local modpath, S = ...
assert(loadfile(modpath .. "/mobkit/bh_ant.lua"))(modpath)
assert(loadfile(modpath .. "/mobkit/bh_aquatic.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_arboreal.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_attack.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_bee.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_breed.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_fly.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_follow.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_herding.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_aquatic.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_arboreal.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_attack.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_bee.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_breed.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_fly.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_follow.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_herding.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_hunt.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_mount.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_replace.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_runaway.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_teleport.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_torch.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_replace.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_runaway.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_teleport.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_torch.lua"))()
assert(loadfile(modpath .. "/mobkit/br_ant.lua"))()
assert(loadfile(modpath .. "/mobkit/br_aquatic.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/br_bee.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/br_herbivore.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/br_monster.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/br_predator.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/br_semiaquatic.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/helper_functions.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/bh_head.lua"))(modpath, S)
assert(loadfile(modpath .. "/mobkit/br_aquatic.lua"))()
assert(loadfile(modpath .. "/mobkit/br_bee.lua"))()
assert(loadfile(modpath .. "/mobkit/br_herbivore.lua"))()
assert(loadfile(modpath .. "/mobkit/br_monster.lua"))()
assert(loadfile(modpath .. "/mobkit/br_predator.lua"))()
assert(loadfile(modpath .. "/mobkit/br_semiaquatic.lua"))()
assert(loadfile(modpath .. "/mobkit/helper_functions.lua"))()
assert(loadfile(modpath .. "/mobkit/bh_head.lua"))()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 B

View File

@ -0,0 +1,394 @@
<?xml version="1.0" encoding="UTF-8"?><COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>VoxelShop User</author>
<authoring_tool>VoxelShop V1.8.26
</authoring_tool>
</contributor>
<created>2020-11-29T13:30:01</created>
<modified>2020-11-29T13:30:01</modified>
<unit meter="1" name="meter"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images>
<image id="petz_chick_texture0-image" name="petz_chick_texture0-image">
<init_from>file://petz_chick_texture0.png</init_from>
</image>
</library_images>
<library_effects>
<effect id="lambert0-fx">
<profile_COMMON>
<newparam sid="petz_chick_texture0-surface">
<surface type="2D">
<init_from>petz_chick_texture0-image</init_from>
</surface>
</newparam>
<newparam sid="petz_chick_texture0-sampler">
<sampler2D>
<source>petz_chick_texture0-surface</source>
<wrap_s>WRAP</wrap_s>
<wrap_t>WRAP</wrap_t>
<minfilter>NEAREST</minfilter>
<magfilter>NEAREST</magfilter>
</sampler2D>
</newparam>
<technique sid="common">
<lambert>
<emission>
<color>0 0 0 1</color>
</emission>
<ambient>
<color>0 0 0 1</color>
</ambient>
<diffuse>
<texture texcoord="TEX0" texture="petz_chick_texture0-sampler"/>
</diffuse>
</lambert>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="lambert0-material" name="lambert0">
<instance_effect url="#lambert0-fx"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-tex-mesh-0" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-0-positions">
<float_array count="24" id="Plane-tex-mesh-0-positions-array">-6 -4 -8 -6 0 -10 -6 -4 -10 -6 0 -8 -4 -4 -8 -4 0 -10 -4 -4 -10 -4 0 -8</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-0-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-0-uvs">
<float_array count="6" id="Plane-tex-mesh-0-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-0-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-0-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-0-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-0-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-0-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-0-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-1" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-1-positions">
<float_array count="24" id="Plane-tex-mesh-1-positions-array">2 -4 -8 2 0 -10 2 -4 -10 2 0 -8 4 -4 -8 4 0 -10 4 -4 -10 4 0 -8</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-1-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-1-uvs">
<float_array count="6" id="Plane-tex-mesh-1-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-1-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-1-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-1-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-1-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-1-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-1-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-2" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-2-positions">
<float_array count="24" id="Plane-tex-mesh-2-positions-array">-2 -8 -6 -2 -6 -8 -2 -8 -8 -2 -6 -6 0 -8 -6 0 -6 -8 0 -8 -8 0 -6 -6</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-2-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-2-uvs">
<float_array count="6" id="Plane-tex-mesh-2-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-2-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-2-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-2-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-2-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-2-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-2-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-3" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-3-positions">
<float_array count="48" id="Plane-tex-mesh-3-positions-array">-2 2 -2 -2 4 -4 -2 2 -4 -2 4 -2 -4 -4 0 -4 2 -6 -4 -4 -6 -4 2 0 2 -4 0 2 2 -6 2 -4 -6 2 2 0 0 2 -2 0 4 -4 0 2 -4 0 4 -2</float_array>
<technique_common>
<accessor count="16" source="#Plane-tex-mesh-3-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-3-uvs">
<float_array count="6" id="Plane-tex-mesh-3-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-3-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-3-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-3-positions"/>
</vertices>
<triangles count="28" material="Plane-tex-mesh-3-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-3-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-3-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 9 1 8 0 10 2 11 1 8 0 9 2 13 1 12 0 14 2 15 1 12 0 13 2 5 1 10 0 6 2 9 1 10 0 5 2 1 1 14 0 2 2 13 1 14 0 1 2 12 0 3 1 0 2 12 0 15 1 3 2 8 0 7 1 4 2 8 0 11 1 7 2 10 0 4 1 6 2 10 0 8 1 4 2 14 1 9 0 5 2 2 1 14 0 5 2 11 1 9 0 14 2 7 1 2 0 5 2 12 1 11 0 14 2 0 1 2 0 7 2 11 1 12 0 7 2 12 1 0 0 7 2 3 1 13 0 1 2 15 1 13 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-4" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-4-positions">
<float_array count="36" id="Plane-tex-mesh-4-positions-array">0 -2 -12 0 0 -14 0 -2 -16 0 2 -16 0 0 -12 0 2 -14 2 -2 -12 2 0 -14 2 -2 -16 2 2 -16 2 0 -12 2 2 -14</float_array>
<technique_common>
<accessor count="12" source="#Plane-tex-mesh-4-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-4-uvs">
<float_array count="6" id="Plane-tex-mesh-4-uvs-array">0.6667845 0.66643095 0.83309764 0.66643095 0.6667845 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-4-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-4-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-4-positions"/>
</vertices>
<triangles count="20" material="Plane-tex-mesh-4-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-4-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-4-uvs"/>
<p>0 0 1 1 2 2 1 0 3 1 2 2 0 0 4 1 1 2 1 0 5 1 3 2 7 1 6 0 8 2 9 1 7 0 8 2 10 1 6 0 7 2 11 1 7 0 9 2 3 1 8 0 2 2 9 1 8 0 3 2 6 0 4 1 0 2 6 0 10 1 4 2 7 0 5 1 1 2 7 0 11 1 5 2 8 0 0 1 2 2 8 0 6 1 0 2 4 1 7 0 1 2 10 1 7 0 4 2 5 1 9 0 3 2 11 1 9 0 5 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-5" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-5-positions">
<float_array count="24" id="Plane-tex-mesh-5-positions-array">-4 -6 -6 -4 2 -12 -4 -6 -12 -4 2 -6 2 -6 -6 2 2 -12 2 -6 -12 2 2 -6</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-5-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-5-uvs">
<float_array count="6" id="Plane-tex-mesh-5-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-5-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-5-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-5-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-5-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-5-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-5-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-6" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-6-positions">
<float_array count="36" id="Plane-tex-mesh-6-positions-array">-4 -2 -12 -4 0 -14 -4 -2 -16 -4 2 -16 -4 0 -12 -4 2 -14 -2 -2 -12 -2 0 -14 -2 -2 -16 -2 2 -16 -2 0 -12 -2 2 -14</float_array>
<technique_common>
<accessor count="12" source="#Plane-tex-mesh-6-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-6-uvs">
<float_array count="6" id="Plane-tex-mesh-6-uvs-array">0.6667845 0.66643095 0.83309764 0.66643095 0.6667845 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-6-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-6-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-6-positions"/>
</vertices>
<triangles count="20" material="Plane-tex-mesh-6-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-6-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-6-uvs"/>
<p>0 0 1 1 2 2 1 0 3 1 2 2 0 0 4 1 1 2 1 0 5 1 3 2 7 1 6 0 8 2 9 1 7 0 8 2 10 1 6 0 7 2 11 1 7 0 9 2 3 1 8 0 2 2 9 1 8 0 3 2 6 0 4 1 0 2 6 0 10 1 4 2 7 0 5 1 1 2 7 0 11 1 5 2 8 0 0 1 2 2 8 0 6 1 0 2 4 1 7 0 1 2 10 1 7 0 4 2 5 1 9 0 3 2 11 1 9 0 5 2</p>
</triangles>
</mesh>
</geometry>
</library_geometries>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="petz_chick.layer" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer" url="#Plane-tex-mesh-0">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chick.layer.001" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer.001" url="#Plane-tex-mesh-1">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chick.layer.002" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer.002" url="#Plane-tex-mesh-2">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chick.layer.003" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer.003" url="#Plane-tex-mesh-3">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chick.layer.004" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer.004" url="#Plane-tex-mesh-4">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chick.layer.005" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer.005" url="#Plane-tex-mesh-5">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chick.layer.006" name="petz_chick.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chick.layer.006" url="#Plane-tex-mesh-6">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

View File

@ -0,0 +1,488 @@
<?xml version="1.0" encoding="UTF-8"?><COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>VoxelShop User</author>
<authoring_tool>VoxelShop V1.8.26
</authoring_tool>
</contributor>
<created>2020-11-29T13:34:13</created>
<modified>2020-11-29T13:34:13</modified>
<unit meter="1" name="meter"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images>
<image id="petz_chicken_texture0-image" name="petz_chicken_texture0-image">
<init_from>file://petz_chicken_texture0.png</init_from>
</image>
</library_images>
<library_effects>
<effect id="lambert0-fx">
<profile_COMMON>
<newparam sid="petz_chicken_texture0-surface">
<surface type="2D">
<init_from>petz_chicken_texture0-image</init_from>
</surface>
</newparam>
<newparam sid="petz_chicken_texture0-sampler">
<sampler2D>
<source>petz_chicken_texture0-surface</source>
<wrap_s>WRAP</wrap_s>
<wrap_t>WRAP</wrap_t>
<minfilter>NEAREST</minfilter>
<magfilter>NEAREST</magfilter>
</sampler2D>
</newparam>
<technique sid="common">
<lambert>
<emission>
<color>0 0 0 1</color>
</emission>
<ambient>
<color>0 0 0 1</color>
</ambient>
<diffuse>
<texture texcoord="TEX0" texture="petz_chicken_texture0-sampler"/>
</diffuse>
</lambert>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="lambert0-material" name="lambert0">
<instance_effect url="#lambert0-fx"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-tex-mesh-0" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-0-positions">
<float_array count="24" id="Plane-tex-mesh-0-positions-array">-2 2 -2 -2 4 -4 -2 2 -4 -2 4 -2 0 2 -2 0 4 -4 0 2 -4 0 4 -2</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-0-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-0-uvs">
<float_array count="6" id="Plane-tex-mesh-0-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-0-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-0-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-0-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-0-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-0-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-0-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-1" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-1-positions">
<float_array count="48" id="Plane-tex-mesh-1-positions-array">0 0 -14 0 2 -16 0 0 -16 0 2 -14 -4 0 -14 -4 2 -16 -4 0 -16 -4 2 -14 2 0 -14 2 2 -16 2 0 -16 2 2 -14 -2 0 -14 -2 2 -16 -2 0 -16 -2 2 -14</float_array>
<technique_common>
<accessor count="16" source="#Plane-tex-mesh-1-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-1-uvs">
<float_array count="6" id="Plane-tex-mesh-1-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-1-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-1-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-1-positions"/>
</vertices>
<triangles count="24" material="Plane-tex-mesh-1-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-1-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-1-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 9 1 8 0 10 2 11 1 8 0 9 2 13 1 12 0 14 2 15 1 12 0 13 2 1 1 10 0 2 2 9 1 10 0 1 2 5 1 14 0 6 2 13 1 14 0 5 2 8 0 3 1 0 2 8 0 11 1 3 2 12 0 7 1 4 2 12 0 15 1 7 2 10 0 0 1 2 2 10 0 8 1 0 2 14 0 4 1 6 2 14 0 12 1 4 2 3 1 9 0 1 2 11 1 9 0 3 2 7 1 13 0 5 2 15 1 13 0 7 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-2" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-2-positions">
<float_array count="24" id="Plane-tex-mesh-2-positions-array">-6 -4 -8 -6 0 -10 -6 -4 -10 -6 0 -8 -4 -4 -8 -4 0 -10 -4 -4 -10 -4 0 -8</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-2-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-2-uvs">
<float_array count="6" id="Plane-tex-mesh-2-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-2-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-2-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-2-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-2-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-2-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-2-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-3" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-3-positions">
<float_array count="24" id="Plane-tex-mesh-3-positions-array">2 -4 -8 2 0 -10 2 -4 -10 2 0 -8 4 -4 -8 4 0 -10 4 -4 -10 4 0 -8</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-3-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-3-uvs">
<float_array count="6" id="Plane-tex-mesh-3-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-3-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-3-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-3-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-3-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-3-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-3-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-4" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-4-positions">
<float_array count="24" id="Plane-tex-mesh-4-positions-array">-2 -8 -6 -2 -6 -8 -2 -8 -8 -2 -6 -6 0 -8 -6 0 -6 -8 0 -8 -8 0 -6 -6</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-4-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-4-uvs">
<float_array count="6" id="Plane-tex-mesh-4-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-4-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-4-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-4-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-4-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-4-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-4-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-5" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-5-positions">
<float_array count="24" id="Plane-tex-mesh-5-positions-array">-4 -4 0 -4 2 -6 -4 -4 -6 -4 2 0 2 -4 0 2 2 -6 2 -4 -6 2 2 0</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-5-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-5-uvs">
<float_array count="6" id="Plane-tex-mesh-5-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-5-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-5-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-5-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-5-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-5-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-5-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-6" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-6-positions">
<float_array count="24" id="Plane-tex-mesh-6-positions-array">0 -2 -12 0 0 -16 0 -2 -16 0 0 -12 2 -2 -12 2 0 -16 2 -2 -16 2 0 -12</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-6-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-6-uvs">
<float_array count="6" id="Plane-tex-mesh-6-uvs-array">0.6667845 0.66643095 0.83309764 0.66643095 0.6667845 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-6-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-6-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-6-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-6-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-6-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-6-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-7" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-7-positions">
<float_array count="24" id="Plane-tex-mesh-7-positions-array">-4 -6 -6 -4 2 -12 -4 -6 -12 -4 2 -6 2 -6 -6 2 2 -12 2 -6 -12 2 2 -6</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-7-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-7-uvs">
<float_array count="6" id="Plane-tex-mesh-7-uvs-array">0.16678452 0.66643095 0.33309764 0.66643095 0.16678452 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-7-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-7-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-7-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-7-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-7-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-7-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-8" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-8-positions">
<float_array count="24" id="Plane-tex-mesh-8-positions-array">-4 -2 -12 -4 0 -16 -4 -2 -16 -4 0 -12 -2 -2 -12 -2 0 -16 -2 -2 -16 -2 0 -12</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-8-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-8-uvs">
<float_array count="6" id="Plane-tex-mesh-8-uvs-array">0.6667845 0.66643095 0.83309764 0.66643095 0.6667845 0.33380473</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-8-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-8-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-8-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-8-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-8-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-8-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
</library_geometries>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="petz_chicken.layer" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer" url="#Plane-tex-mesh-0">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.001" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.001" url="#Plane-tex-mesh-1">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.002" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.002" url="#Plane-tex-mesh-2">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.003" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.003" url="#Plane-tex-mesh-3">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.004" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.004" url="#Plane-tex-mesh-4">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.005" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.005" url="#Plane-tex-mesh-5">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.006" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.006" url="#Plane-tex-mesh-6">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.007" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.007" url="#Plane-tex-mesh-7">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_chicken.layer.008" name="petz_chicken.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_chicken.layer.008" url="#Plane-tex-mesh-8">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

View File

@ -1,169 +0,0 @@
mtllib petz_chicken.mtl
o converted_out
v 0.125 -0.5 -0.0625
v 0.125 -0.5 7.45058e-09
v 0.125 -0.4375 7.45058e-09
v 0.125 -0.4375 -0.0625
v 0.0625 -0.5 -0.0625
v 0.0625 -0.5 7.45058e-09
v 0.0625 -0.4375 7.45058e-09
v 0.0625 -0.4375 -0.0625
v -0 -0.5 -0.0625
v -0 -0.5 1.86265e-08
v -0 -0.4375 1.86265e-08
v -0 -0.4375 -0.0625
v -0.0625 -0.5 -0.0625
v -0.0625 -0.5 1.86265e-08
v -0.0625 -0.4375 1.86265e-08
v -0.0625 -0.4375 -0.0625
v 0.125 -0.4375 -0.125
v 0.125 -0.4375 0.0625
v 0.125 -0.25 0.0625
v 0.125 -0.25 -0.125
v -0.0625 -0.4375 -0.125
v -0.0625 -0.4375 0.0625
v -0.0625 -0.25 0.0625
v -0.0625 -0.25 -0.125
v 0.0625 -0.3125 0.0625
v 0.0625 -0.3125 0.125
v 0.0625 -0.25 0.125
v 0.0625 -0.25 0.0625
v -9.31323e-09 -0.3125 0.0625
v -9.31323e-09 -0.3125 0.125
v -9.31323e-09 -0.25 0.125
v -9.31323e-09 -0.25 0.0625
v 0.0625 -0.25 -0.1875
v 0.0625 -0.25 -0.125
v 0.0625 -0.1875 -0.125
v 0.0625 -0.1875 -0.1875
v -1.11759e-08 -0.25 -0.1875
v -1.11759e-08 -0.25 -0.125
v -1.11759e-08 -0.1875 -0.125
v -1.11759e-08 -0.1875 -0.1875
v 0.0625 -0.125 -0.125
v 0.0625 -0.125 -0.0625
v 0.0625 -0.0625 -0.0625
v 0.0625 -0.0625 -0.125
v 3.72529e-09 -0.125 -0.125
v 3.72529e-09 -0.125 -0.0625
v 3.72529e-09 -0.0625 -0.0625
v 3.72529e-09 -0.0625 -0.125
v 0.125 -0.25 -0.125
v 0.125 -0.25 9.68575e-08
v 0.125 -0.125 9.68575e-08
v 0.125 -0.125 -0.125
v -0.0625 -0.25 -0.125
v -0.0625 -0.25 9.68575e-08
v -0.0625 -0.125 9.68575e-08
v -0.0625 -0.125 -0.125
v -0.0625 -0.3125 -0.0625
v -0.0625 -0.3125 0.0625
v -0.0625 -0.25 0.0625
v -0.0625 -0.25 -0.0625
v -0.125 -0.3125 -0.0625
v -0.125 -0.3125 0.0625
v -0.125 -0.25 0.0625
v -0.125 -0.25 -0.0625
v -0.0625 -0.375 -0.0625
v -0.0625 -0.375 0
v -0.0625 -0.3125 0
v -0.0625 -0.3125 -0.0625
v -0.125 -0.375 -0.0625
v -0.125 -0.375 0
v -0.125 -0.3125 0
v -0.125 -0.3125 -0.0625
v 0.1875 -0.3125 -0.0625
v 0.1875 -0.3125 0.0625
v 0.1875 -0.25 0.0625
v 0.1875 -0.25 -0.0625
v 0.125 -0.3125 -0.0625
v 0.125 -0.3125 0.0625
v 0.125 -0.25 0.0625
v 0.125 -0.25 -0.0625
v 0.1875 -0.375 -0.0625
v 0.1875 -0.375 0
v 0.1875 -0.3125 0
v 0.1875 -0.3125 -0.0625
v 0.125 -0.375 -0.0625
v 0.125 -0.375 0
v 0.125 -0.3125 0
v 0.125 -0.3125 -0.0625
usemtl none
s off
g right_leg
f 1 2 3 4
f 5 6 7 8
f 1 4 8 5
f 2 3 7 6
f 1 2 6 5
f 4 3 7 8
g left_leg
f 9 10 11 12
f 13 14 15 16
f 9 12 16 13
f 10 11 15 14
f 9 10 14 13
f 12 11 15 16
g body
f 17 18 19 20
f 21 22 23 24
f 17 20 24 21
f 18 19 23 22
f 17 18 22 21
f 20 19 23 24
g tail
f 25 26 27 28
f 29 30 31 32
f 25 28 32 29
f 26 27 31 30
f 25 26 30 29
f 28 27 31 32
g beak
f 33 34 35 36
f 37 38 39 40
f 33 36 40 37
f 34 35 39 38
f 33 34 38 37
f 36 35 39 40
g crest
f 41 42 43 44
f 45 46 47 48
f 41 44 48 45
f 42 43 47 46
f 41 42 46 45
f 44 43 47 48
g head
f 49 50 51 52
f 53 54 55 56
f 49 52 56 53
f 50 51 55 54
f 49 50 54 53
f 52 51 55 56
g left_wing_top
f 57 58 59 60
f 61 62 63 64
f 57 60 64 61
f 58 59 63 62
f 57 58 62 61
f 60 59 63 64
g left_wing_bottom
f 65 66 67 68
f 69 70 71 72
f 65 68 72 69
f 66 67 71 70
f 65 66 70 69
f 68 67 71 72
g right_wing_top
f 73 74 75 76
f 77 78 79 80
f 73 76 80 77
f 74 75 79 78
f 73 74 78 77
f 76 75 79 80
g right_wing_bottom
f 81 82 83 84
f 85 86 87 88
f 81 84 88 85
f 82 83 87 86
f 81 82 86 85
f 84 83 87 88

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,676 @@
<?xml version="1.0" encoding="UTF-8"?><COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>VoxelShop User</author>
<authoring_tool>VoxelShop V1.8.26
</authoring_tool>
</contributor>
<created>2020-11-25T23:02:01</created>
<modified>2020-11-25T23:02:01</modified>
<unit meter="1" name="meter"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images>
<image id="petz_cock_texture0-image" name="petz_cock_texture0-image">
<init_from>file://petz_cock_texture0.png</init_from>
</image>
</library_images>
<library_effects>
<effect id="lambert0-fx">
<profile_COMMON>
<newparam sid="petz_cock_texture0-surface">
<surface type="2D">
<init_from>petz_cock_texture0-image</init_from>
</surface>
</newparam>
<newparam sid="petz_cock_texture0-sampler">
<sampler2D>
<source>petz_cock_texture0-surface</source>
<wrap_s>WRAP</wrap_s>
<wrap_t>WRAP</wrap_t>
<minfilter>NEAREST</minfilter>
<magfilter>NEAREST</magfilter>
</sampler2D>
</newparam>
<technique sid="common">
<lambert>
<emission>
<color>0 0 0 1</color>
</emission>
<ambient>
<color>0 0 0 1</color>
</ambient>
<diffuse>
<texture texcoord="TEX0" texture="petz_cock_texture0-sampler"/>
</diffuse>
</lambert>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="lambert0-material" name="lambert0">
<instance_effect url="#lambert0-fx"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Plane-tex-mesh-0" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-0-positions">
<float_array count="24" id="Plane-tex-mesh-0-positions-array">-2 -14 -2 -2 -8 -4 -2 -14 -4 -2 -8 -2 0 -14 -2 0 -8 -4 0 -14 -4 0 -8 -2</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-0-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-0-uvs">
<float_array count="6" id="Plane-tex-mesh-0-uvs-array">0.11118968 0.8332155 0.22206509 0.8332155 0.11118968 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-0-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-0-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-0-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-0-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-0-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-0-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-1" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-1-positions">
<float_array count="24" id="Plane-tex-mesh-1-positions-array">-2 6 -2 -2 8 -6 -2 6 -6 -2 8 -2 0 6 -2 0 8 -6 0 6 -6 0 8 -2</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-1-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-1-uvs">
<float_array count="6" id="Plane-tex-mesh-1-uvs-array">0.77785635 0.8332155 0.8887318 0.8332155 0.77785635 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-1-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-1-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-1-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-1-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-1-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-1-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-2" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-2-positions">
<float_array count="24" id="Plane-tex-mesh-2-positions-array">-4 -6 -2 -4 4 -10 -4 -6 -10 -4 4 -2 2 -6 -2 2 4 -10 2 -6 -10 2 4 -2</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-2-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-2-uvs">
<float_array count="6" id="Plane-tex-mesh-2-uvs-array">0.77785635 0.8332155 0.8887318 0.8332155 0.77785635 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-2-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-2-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-2-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-2-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-2-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-2-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-3" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-3-positions">
<float_array count="24" id="Plane-tex-mesh-3-positions-array">-4 4 6 -4 10 -2 -4 4 -2 -4 10 6 2 4 6 2 10 -2 2 4 -2 2 10 6</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-3-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-3-uvs">
<float_array count="6" id="Plane-tex-mesh-3-uvs-array">0.77785635 0.8332155 0.8887318 0.8332155 0.77785635 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-3-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-3-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-3-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-3-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-3-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-3-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-4" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-4-positions">
<float_array count="24" id="Plane-tex-mesh-4-positions-array">2 -4 -4 2 4 -8 2 -4 -8 2 4 -4 4 -4 -4 4 4 -8 4 -4 -8 4 4 -4</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-4-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-4-uvs">
<float_array count="6" id="Plane-tex-mesh-4-uvs-array">0.11118968 0.33321548 0.22206509 0.33321548 0.11118968 0.16690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-4-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-4-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-4-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-4-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-4-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-4-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-5" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-5-positions">
<float_array count="24" id="Plane-tex-mesh-5-positions-array">-6 -4 -4 -6 4 -8 -6 -4 -8 -6 4 -4 -4 -4 -4 -4 4 -8 -4 -4 -8 -4 4 -4</float_array>
<technique_common>
<accessor count="8" source="#Plane-tex-mesh-5-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-5-uvs">
<float_array count="6" id="Plane-tex-mesh-5-uvs-array">0.11118968 0.33321548 0.22206509 0.33321548 0.11118968 0.16690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-5-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-5-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-5-positions"/>
</vertices>
<triangles count="12" material="Plane-tex-mesh-5-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-5-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-5-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 5 1 4 0 6 2 7 1 4 0 5 2 1 1 6 0 2 2 5 1 6 0 1 2 4 0 3 1 0 2 4 0 7 1 3 2 6 0 0 1 2 2 6 0 4 1 0 2 3 1 5 0 1 2 7 1 5 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-6" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-6-positions">
<float_array count="48" id="Plane-tex-mesh-6-positions-array">0 -2 -10 0 0 -16 0 -2 -16 0 0 -10 -4 -2 -10 -4 0 -16 -4 -2 -16 -4 0 -10 2 -2 -10 2 0 -16 2 -2 -16 2 0 -10 -2 -2 -10 -2 0 -16 -2 -2 -16 -2 0 -10</float_array>
<technique_common>
<accessor count="16" source="#Plane-tex-mesh-6-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-6-uvs">
<float_array count="24" id="Plane-tex-mesh-6-uvs-array">0.27794388 0.6667774 0.4443614 0.8331119 0.4443614 0.6667774 0.27786082 0.6668881 0.27786082 0.8332226 0.44427836 0.8332226 0.444523 0.8332155 0.5553984 0.8332155 0.444523 0.66690236 0.11118968 0.8332155 0.22206509 0.8332155 0.11118968 0.66690236</float_array>
<technique_common>
<accessor count="12" source="#Plane-tex-mesh-6-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-6-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-6-positions"/>
</vertices>
<triangles count="24" material="Plane-tex-mesh-6-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-6-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-6-uvs"/>
<p>0 0 1 1 2 2 0 3 3 4 1 5 4 0 5 1 6 2 4 3 7 4 5 5 9 1 8 0 10 2 11 4 8 3 9 5 13 1 12 0 14 2 15 4 12 3 13 5 1 7 10 6 2 8 9 7 10 6 1 8 5 7 14 6 6 8 13 7 14 6 5 8 8 9 3 10 0 11 8 9 11 10 3 11 12 9 7 10 4 11 12 9 15 10 7 11 10 1 0 0 2 2 10 5 8 4 0 3 14 1 4 0 6 2 14 5 12 4 4 3 3 0 9 1 1 2 11 4 9 5 3 3 7 0 13 1 5 2 15 4 13 5 7 3</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-7" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-7-positions">
<float_array count="48" id="Plane-tex-mesh-7-positions-array">-6 -2 -2 -6 2 -4 -6 -2 -4 -6 2 -2 -6 -6 -8 -6 0 -10 -6 -6 -10 -6 0 -8 -4 -2 -2 -4 2 -4 -4 -2 -4 -4 2 -2 -4 -6 -8 -4 0 -10 -4 -6 -10 -4 0 -8</float_array>
<technique_common>
<accessor count="16" source="#Plane-tex-mesh-7-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-7-uvs">
<float_array count="6" id="Plane-tex-mesh-7-uvs-array">0.11118968 0.33321548 0.22206509 0.33321548 0.11118968 0.16690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-7-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-7-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-7-positions"/>
</vertices>
<triangles count="24" material="Plane-tex-mesh-7-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-7-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-7-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 9 1 8 0 10 2 11 1 8 0 9 2 13 1 12 0 14 2 15 1 12 0 13 2 5 1 14 0 6 2 13 1 14 0 5 2 1 1 10 0 2 2 9 1 10 0 1 2 12 0 7 1 4 2 12 0 15 1 7 2 8 0 3 1 0 2 8 0 11 1 3 2 10 0 0 1 2 2 10 0 8 1 0 2 14 0 4 1 6 2 14 0 12 1 4 2 3 1 9 0 1 2 11 1 9 0 3 2 7 1 13 0 5 2 15 1 13 0 7 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-8" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-8-positions">
<float_array count="96" id="Plane-tex-mesh-8-positions-array">-2 10 6 -2 12 4 -2 10 4 -2 12 6 -2 10 2 -2 12 0 -2 10 0 -2 12 2 2 -2 -2 2 2 -4 2 -2 -4 2 2 -2 2 -6 -8 2 0 -10 2 -6 -10 2 0 -8 0 10 6 0 12 4 0 10 4 0 12 6 0 10 2 0 12 0 0 10 0 0 12 2 4 -2 -2 4 2 -4 4 -2 -4 4 2 -2 4 -6 -8 4 0 -10 4 -6 -10 4 0 -8</float_array>
<technique_common>
<accessor count="32" source="#Plane-tex-mesh-8-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-8-uvs">
<float_array count="12" id="Plane-tex-mesh-8-uvs-array">0.77785635 0.8332155 0.8887318 0.8332155 0.77785635 0.66690236 0.11118968 0.33321548 0.22206509 0.33321548 0.11118968 0.16690236</float_array>
<technique_common>
<accessor count="6" source="#Plane-tex-mesh-8-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-8-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-8-positions"/>
</vertices>
<triangles count="48" material="Plane-tex-mesh-8-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-8-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-8-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 8 3 9 4 10 5 8 3 11 4 9 5 12 3 13 4 14 5 12 3 15 4 13 5 17 1 16 0 18 2 19 1 16 0 17 2 21 1 20 0 22 2 23 1 20 0 21 2 25 4 24 3 26 5 27 4 24 3 25 5 29 4 28 3 30 5 31 4 28 3 29 5 13 4 30 3 14 5 29 4 30 3 13 5 9 4 26 3 10 5 25 4 26 3 9 5 5 1 22 0 6 2 21 1 22 0 5 2 1 1 18 0 2 2 17 1 18 0 1 2 28 3 15 4 12 5 28 3 31 4 15 5 24 3 11 4 8 5 24 3 27 4 11 5 20 0 7 1 4 2 20 0 23 1 7 2 16 0 3 1 0 2 16 0 19 1 3 2 26 3 8 4 10 5 26 3 24 4 8 5 30 3 12 4 14 5 30 3 28 4 12 5 22 0 4 1 6 2 22 0 20 1 4 2 18 0 0 1 2 2 18 0 16 1 0 2 15 4 29 3 13 5 31 4 29 3 15 5 11 4 25 3 9 5 27 4 25 3 11 5 7 1 21 0 5 2 23 1 21 0 7 2 3 1 17 0 1 2 19 1 17 0 3 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-9" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-9-positions">
<float_array count="84" id="Plane-tex-mesh-9-positions-array">0 -10 0 0 -8 -2 0 -10 -2 0 -8 0 -2 -12 0 -2 -10 -2 -2 -12 -2 -2 -10 0 -2 -14 -4 -2 -12 -8 -2 -14 -8 -2 -12 -4 -4 -10 0 -4 -8 -2 -4 -10 -2 -4 -8 0 2 -10 0 2 -8 -2 2 -10 -2 2 -8 0 0 -12 0 0 -12 -2 0 -14 -4 0 -12 -8 0 -14 -8 0 -12 -4 -2 -8 -2 -2 -8 0</float_array>
<technique_common>
<accessor count="28" source="#Plane-tex-mesh-9-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-9-uvs">
<float_array count="6" id="Plane-tex-mesh-9-uvs-array">0.11118968 0.8332155 0.22206509 0.8332155 0.11118968 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-9-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-9-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-9-positions"/>
</vertices>
<triangles count="48" material="Plane-tex-mesh-9-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-9-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-9-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 8 0 9 1 10 2 8 0 11 1 9 2 12 0 13 1 14 2 12 0 15 1 13 2 17 1 16 0 18 2 19 1 16 0 17 2 2 1 20 0 21 2 0 1 20 0 2 2 23 1 22 0 24 2 25 1 22 0 23 2 26 1 7 0 5 2 27 1 7 0 26 2 9 1 24 0 10 2 23 1 24 0 9 2 1 1 18 0 2 2 17 1 18 0 1 2 5 1 21 0 6 2 2 1 21 0 5 2 13 1 5 0 14 2 26 1 5 0 13 2 22 0 11 1 8 2 22 0 25 1 11 2 16 0 3 1 0 2 16 0 19 1 3 2 20 0 7 1 4 2 20 0 0 1 7 2 7 0 15 1 12 2 7 0 27 1 15 2 18 0 0 1 2 2 18 0 16 1 0 2 5 0 12 1 14 2 5 0 7 1 12 2 21 0 4 1 6 2 21 0 20 1 4 2 24 0 8 1 10 2 24 0 22 1 8 2 3 1 17 0 1 2 19 1 17 0 3 2 15 1 26 0 13 2 27 1 26 0 15 2 7 1 2 0 5 2 0 1 2 0 7 2 11 1 23 0 9 2 25 1 23 0 11 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-10" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-10-positions">
<float_array count="66" id="Plane-tex-mesh-10-positions-array">-2 4 8 -2 6 6 -2 4 6 -2 6 8 -2 8 8 -2 10 6 -2 8 6 -2 10 8 -2 2 6 -2 4 4 -2 2 4 0 4 8 0 6 6 0 4 6 0 6 8 0 8 8 0 10 6 0 8 6 0 10 8 0 2 6 0 4 4 0 2 4</float_array>
<technique_common>
<accessor count="22" source="#Plane-tex-mesh-10-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-10-uvs">
<float_array count="6" id="Plane-tex-mesh-10-uvs-array">0.77785635 0.8332155 0.8887318 0.8332155 0.77785635 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-10-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-10-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-10-positions"/>
</vertices>
<triangles count="36" material="Plane-tex-mesh-10-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-10-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-10-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 8 0 9 1 10 2 8 0 2 1 9 2 12 1 11 0 13 2 14 1 11 0 12 2 16 1 15 0 17 2 18 1 15 0 16 2 20 1 19 0 21 2 13 1 19 0 20 2 9 1 21 0 10 2 20 1 21 0 9 2 1 1 13 0 2 2 12 1 13 0 1 2 5 1 17 0 6 2 16 1 17 0 5 2 19 0 2 1 8 2 19 0 13 1 2 2 11 0 3 1 0 2 11 0 14 1 3 2 15 0 7 1 4 2 15 0 18 1 7 2 21 0 8 1 10 2 21 0 19 1 8 2 13 0 0 1 2 2 13 0 11 1 0 2 17 0 4 1 6 2 17 0 15 1 4 2 2 1 20 0 9 2 13 1 20 0 2 2 3 1 12 0 1 2 14 1 12 0 3 2 7 1 16 0 5 2 18 1 16 0 7 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-11" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-11-positions">
<float_array count="72" id="Plane-tex-mesh-11-positions-array">-2 2 0 -2 4 -2 -2 2 -2 -2 4 0 -4 -8 -2 -4 -6 -6 -4 -8 -6 -4 -6 -2 -4 4 -2 -4 6 -8 -4 4 -8 -4 6 -2 2 -8 -2 2 -6 -6 2 -8 -6 2 -6 -2 2 4 -2 2 6 -8 2 4 -8 2 6 -2 0 2 0 0 4 -2 0 2 -2 0 4 0</float_array>
<technique_common>
<accessor count="24" source="#Plane-tex-mesh-11-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-11-uvs">
<float_array count="6" id="Plane-tex-mesh-11-uvs-array">0.77785635 0.8332155 0.8887318 0.8332155 0.77785635 0.66690236</float_array>
<technique_common>
<accessor count="3" source="#Plane-tex-mesh-11-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-11-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-11-positions"/>
</vertices>
<triangles count="40" material="Plane-tex-mesh-11-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-11-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-11-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 0 5 1 6 2 4 0 7 1 5 2 8 0 9 1 10 2 8 0 11 1 9 2 13 1 12 0 14 2 15 1 12 0 13 2 17 1 16 0 18 2 19 1 16 0 17 2 21 1 20 0 22 2 23 1 20 0 21 2 9 1 18 0 10 2 17 1 18 0 9 2 5 1 14 0 6 2 13 1 14 0 5 2 1 1 22 0 2 2 21 1 22 0 1 2 12 0 7 1 4 2 12 0 15 1 7 2 21 0 16 1 19 2 11 0 21 1 19 2 1 0 21 1 11 2 1 0 11 1 8 2 20 0 3 1 0 2 20 0 23 1 3 2 22 0 0 1 2 2 22 0 20 1 0 2 18 0 21 1 10 2 21 0 1 1 10 2 18 0 16 1 21 2 1 0 8 1 10 2 14 0 4 1 6 2 14 0 12 1 4 2 3 1 21 0 1 2 23 1 21 0 3 2 11 1 17 0 9 2 19 1 17 0 11 2 7 1 13 0 5 2 15 1 13 0 7 2</p>
</triangles>
</mesh>
</geometry>
<geometry id="Plane-tex-mesh-12" name="Plane-tex">
<mesh>
<source id="Plane-tex-mesh-12-positions">
<float_array count="126" id="Plane-tex-mesh-12-positions-array">0 -4 -12 0 -2 -14 0 -4 -14 0 -2 -12 0 0 -14 0 2 -16 0 0 -16 0 2 -14 2 -2 -14 2 0 -16 2 -2 -16 2 0 -14 -4 -4 -12 -4 -2 -14 -4 -4 -14 -4 -2 -12 -4 0 -14 -4 2 -16 -4 0 -16 -4 2 -14 -6 -2 -14 -6 0 -16 -6 -2 -16 -6 0 -14 2 -4 -12 2 -4 -14 2 -2 -12 2 2 -16 2 2 -14 4 -2 -14 4 0 -16 4 -2 -16 4 0 -14 -2 -4 -12 -2 -2 -14 -2 -4 -14 -2 -2 -12 -2 0 -14 -2 2 -16 -2 0 -16 -2 2 -14 -4 -2 -16</float_array>
<technique_common>
<accessor count="42" source="#Plane-tex-mesh-12-positions-array" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Plane-tex-mesh-12-uvs">
<float_array count="12" id="Plane-tex-mesh-12-uvs-array">0.11118968 0.8332155 0.22206509 0.8332155 0.11118968 0.66690236 0.444523 0.8332155 0.5553984 0.8332155 0.444523 0.66690236</float_array>
<technique_common>
<accessor count="6" source="#Plane-tex-mesh-12-uvs-array" stride="2">
<param name="S" type="float"/>
<param name="T" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Plane-tex-mesh-12-vertices">
<input semantic="POSITION" source="#Plane-tex-mesh-12-positions"/>
</vertices>
<triangles count="72" material="Plane-tex-mesh-12-lambert0-material">
<input offset="0" semantic="VERTEX" source="#Plane-tex-mesh-12-vertices"/>
<input offset="1" semantic="TEXCOORD" set="0" source="#Plane-tex-mesh-12-uvs"/>
<p>0 0 1 1 2 2 0 0 3 1 1 2 4 3 5 4 6 5 4 3 7 4 5 5 8 3 9 4 10 5 8 3 11 4 9 5 12 0 13 1 14 2 12 0 15 1 13 2 16 3 17 4 18 5 16 3 19 4 17 5 20 3 21 4 22 5 20 3 23 4 21 5 8 1 24 0 25 2 26 1 24 0 8 2 27 4 11 3 9 5 28 4 11 3 27 5 30 4 29 3 31 5 32 4 29 3 30 5 34 1 33 0 35 2 36 1 33 0 34 2 38 4 37 3 39 5 40 4 37 3 38 5 18 4 13 3 41 5 16 4 13 3 18 5 9 4 31 3 10 5 30 4 31 3 9 5 5 4 9 3 6 5 27 4 9 3 5 5 17 4 39 3 18 5 38 4 39 3 17 5 21 4 41 3 22 5 18 4 41 3 21 5 1 1 25 0 2 2 8 1 25 0 1 2 13 1 35 0 14 2 34 1 35 0 13 2 29 3 11 4 8 5 29 3 32 4 11 5 11 3 7 4 4 5 11 3 28 4 7 5 37 3 19 4 16 5 37 3 40 4 19 5 13 3 23 4 20 5 13 3 16 4 23 5 24 0 3 1 0 2 24 0 26 1 3 2 33 0 15 1 12 2 33 0 36 1 15 2 31 3 8 4 10 5 31 3 29 4 8 5 41 3 20 4 22 5 41 3 13 4 20 5 9 3 4 4 6 5 9 3 11 4 4 5 39 3 16 4 18 5 39 3 37 4 16 5 25 0 0 1 2 2 25 0 24 1 0 2 35 0 12 1 14 2 35 0 33 1 12 2 11 4 30 3 9 5 32 4 30 3 11 5 23 4 18 3 21 5 16 4 18 3 23 5 7 4 27 3 5 5 28 4 27 3 7 5 19 4 38 3 17 5 40 4 38 3 19 5 3 1 8 0 1 2 26 1 8 0 3 2 15 1 34 0 13 2 36 1 34 0 15 2</p>
</triangles>
</mesh>
</geometry>
</library_geometries>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="petz_cock.layer" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer" url="#Plane-tex-mesh-0">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.001" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.001" url="#Plane-tex-mesh-1">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.002" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.002" url="#Plane-tex-mesh-2">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.003" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.003" url="#Plane-tex-mesh-3">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.004" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.004" url="#Plane-tex-mesh-4">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.005" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.005" url="#Plane-tex-mesh-5">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.006" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.006" url="#Plane-tex-mesh-6">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.007" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.007" url="#Plane-tex-mesh-7">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.008" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.008" url="#Plane-tex-mesh-8">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.009" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.009" url="#Plane-tex-mesh-9">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.010" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.010" url="#Plane-tex-mesh-10">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.011" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.011" url="#Plane-tex-mesh-11">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
<node id="petz_cock.layer.012" name="petz_cock.Layer" type="NODE">
<translate sid="location">-0.0 -0.0 -0.0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.03125 0.03125 0.03125</scale>
<instance_geometry name="Layer" sid="petz_cock.layer.012" url="#Plane-tex-mesh-12">
<bind_material>
<technique_common>
<instance_material symbol="lambert0-material" target="#lambert0-material">
<bind_vertex_input input_semantic="TEXCOORD" input_set="0" semantic="TEX0"/>
</instance_material>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

View File

@ -1,7 +1,7 @@
# WARNING: Do NOT change the Petz Mod preferences here
# Do create a 'user.conf' with your favourite preferences instead of.
petz_list = kitty,puppy,ducky,lamb,lion,calf,panda,grizzly,pony,parrot,chicken,piggy,wolf,elephant,elephant_female,pigeon,moth,camel,clownfish,bat,silkworm,chimp,hamster,dolphin,tropicalfish,beaver,turtle,frog,toucan,bee,queen_bee,mr_pumpkin,foxy,penguin,polar_bear,santa_killer,werewolf,tarantula,butterfly,rat,goat,squirrel,leopard,snow_leopard,ant,warrior_ant,queen_ant
petz_list = kitty,puppy,ducky,lamb,lion,calf,panda,grizzly,pony,parrot,chicken,piggy,wolf,elephant,elephant_female,pigeon,moth,camel,clownfish,bat,silkworm,chimp,hamster,dolphin,tropicalfish,beaver,turtle,frog,toucan,bee,queen_bee,mr_pumpkin,foxy,penguin,polar_bear,santa_killer,werewolf,tarantula,butterfly,rat,goat,squirrel,leopard,snow_leopard,ant,warrior_ant,queen_ant,rooster,hen
##Tamagochi Mode (Take care of your pet: fed it...)
tamagochi_mode = true
@ -50,6 +50,8 @@ spawn_peaceful_monsters_ratio = 0.7
bee_disable_spawn = true
ant_disable_spawn = true
warrior_ant_disable_spawn = true
rooster_disable_spawn = true
chicken_disable_spawn = true
## The interval is avg spawn attempt interval (seconds) for every player
spawn_interval = 30
@ -119,11 +121,17 @@ lay_antegg_timing = 1200
max_laid_anteggs = 500
ant_population = 5
##Children search for their parents
#Only for chicks
parent_search = true
##Lay Eggs
#Default = 1200= 1 egg by day
lay_egg_timing = 1200
#Max eggs to hatch by animal
max_laid_eggs = 10
#Time an egg to hatch
hatch_egg_timing = 500
##Misc Random Sound for Petz
#Default = 50
@ -152,7 +160,7 @@ max_honey_behive = 10
max_bees_behive = 3
#bees_outing_rate=1 means that a bee inmediatelly go out the behive for pollen
bee_outing_ratio = 20
#The time between a Beehive is created by a player and a worker bee is automatically created
#The time between a Beehive is created by a pger and a worker bee is automatically created
worker_bee_delay = 300
#behive_spawn_chance = 0.6
#max_behives_in_area = 3
@ -291,6 +299,21 @@ chicken_spawn_nodes = default:dirt_with_grass
chicken_spawn_biome = default
chicken_predators = petz:foxy
##Hen Specific
hen_follow = farming:seed_wheat
hen_spawn_chance = 0.6
hen_spawn_nodes = default:dirt_with_grass
hen_spawn_biome = default
hen_predators = petz:foxy
##Rooster Specific
rooster_follow = farming:seed_wheat
rooster_spawn_chance = 0.6
rooster_spawn_nodes = default:dirt_with_grass
rooster_spawn_biome = default
rooster_predators = petz:foxy
rooster_preys = petz:rooster
#Piggy Specific
piggy_follow = farming:wheat
piggy_spawn_chance = 0.6

View File

@ -3,87 +3,143 @@
--
local S = ...
local pet_name = "chicken"
local scale_model = 2.1
local mesh = 'petz_chicken.b3d'
local textures= {"petz_chicken.png", "petz_chicken2.png", "petz_chicken3.png"}
local p1 = {x= -0.0625, y = -0.5, z = -0.125}
local p2 = {x= 0.125, y = -0.125, z = 0.1875}
local collisionbox, collisionbox_baby = petz.get_collisionbox(p1, p2, scale_model, nil)
for i=1, 3 do
local pet_name
local mesh
local scale_model
local description
local textures
local p1
local p2
local lay_eggs
local parents
local aggressive
if i == 1 then
pet_name = "hen"
description = "Hen"
lay_eggs = true
mesh = 'petz_hen.b3d'
backface_culling = false
scale_model = 2.1
textures= {"petz_hen.png", "petz_hen2.png", "petz_hen3.png"}
p1 = {x= -0.0625, y = -0.5, z = -0.125}
p2 = {x= 0.125, y = -0.125, z = 0.1875}
sounds = {
misc = {"petz_hen_cluck", "petz_hen_cluck_2", "petz_hen_cluck_3"},
}
parents = nil
aggressive = false
elseif i == 2 then
pet_name = "rooster"
description = "Rooster"
lay_eggs = false
mesh = 'petz_rooster.b3d'
backface_culling = true
scale_model = 1.4
textures= {"petz_rooster.png"}
p1 = {x= -0.1875, y = -0.5, z = -0.25}
p2 = {x= 0.125, y = 0.125, z = 0.25}
sounds = {
misc = {"petz_rooster_crow", "petz_rooster_chirp"},
}
parents = nil
aggressive = true
else
pet_name = "chicken"
description = "Chicken"
lay_eggs = false
mesh = 'petz_chicken.b3d'
backface_culling = false
scale_model = 1.0
textures= {"petz_chicken.png"}
p1 = {x= -0.125, y = -0.5, z = -0.1875}
p2 = {x= 0.0625, y = 0, z = 0.0625}
sounds = {
misc = {"petz_chicken_chirp", "petz_chicken_chirp_2", "petz_chicken_chirp_3"},
}
parents = {"petz:hen", "petz:rooster"}
aggressive = false
end
local collisionbox, collisionbox_baby = petz.get_collisionbox(p1, p2, scale_model, nil)
minetest.register_entity("petz:"..pet_name,{
--Petz specifics
type = "chicken",
init_tamagochi_timer = false,
is_pet = true,
has_affinity = false,
is_wild = false,
give_orders = false,
feathered = true,
can_be_brushed = false,
capture_item = "net",
lay_eggs = true,
lay_eggs_in_nest = true,
type_of_egg = "item",
follow = petz.settings.chicken_follow,
drops = {
{name = "petz:raw_chicken", chance = 3, min = 1, max = 1,},
{name = "petz:bone", chance = 6, min = 1, max = 1,},
},
rotate = petz.settings.rotate,
physical = true,
stepheight = 0.1, --EVIL!
collide_with_objects = true,
collisionbox = collisionbox,
visual = petz.settings.visual,
mesh = mesh,
textures = textures,
visual_size = {x=petz.settings.visual_size.x*scale_model, y=petz.settings.visual_size.y*scale_model},
static_save = true,
get_staticdata = mobkit.statfunc,
-- api props
springiness= 0,
buoyancy = 0.5, -- portion of hitbox submerged
max_speed = 2,
jump_height = 1.5,
view_range = 10,
lung_capacity = 10, -- seconds
max_hp = 8,
attack={range=0.5, damage_groups={fleshy=3}},
animation = {
walk={range={x=1, y=12}, speed=25, loop=true},
run={range={x=13, y=25}, speed=25, loop=true},
stand={
{range={x=26, y=46}, speed=5, loop=true},
{range={x=47, y=59}, speed=5, loop=true},
{range={x=60, y=70}, speed=5, loop=true},
{range={x=71, y=91}, speed=5, loop=true},
minetest.register_entity("petz:"..pet_name,{
--Petz specifics
type = pet_name,
init_tamagochi_timer = false,
is_pet = true,
has_affinity = false,
is_wild = false,
is_baby = is_baby,
parents = parents,
aggressive = aggressive,
backface_culling = backface_culling,
give_orders = false,
feathered = true,
can_be_brushed = false,
capture_item = "net",
lay_eggs = lay_eggs,
lay_eggs_in_nest = true,
type_of_egg = "item",
follow = petz.settings.hen_follow,
drops = {
{name = "petz:raw_chicken", chance = 3, min = 1, max = 1,},
{name = "petz:bone", chance = 6, min = 1, max = 1,},
},
},
sounds = {
misc = {"petz_chicken_cluck", "petz_chicken_cluck_2", "petz_chicken_cluck_3"},
},
rotate = petz.settings.rotate,
physical = true,
stepheight = 0.1, --EVIL!
collide_with_objects = true,
collisionbox = collisionbox,
visual = petz.settings.visual,
mesh = mesh,
textures = textures,
visual_size = {x=petz.settings.visual_size.x*scale_model, y=petz.settings.visual_size.y*scale_model},
static_save = true,
get_staticdata = mobkit.statfunc,
-- api props
springiness= 0,
buoyancy = 0.5, -- portion of hitbox submerged
max_speed = 2,
jump_height = 1.5,
view_range = 10,
lung_capacity = 10, -- seconds
max_hp = 8,
logic = petz.herbivore_brain,
attack={range=0.5, damage_groups={fleshy=3}},
animation = {
walk={range={x=1, y=12}, speed=25, loop=true},
run={range={x=13, y=25}, speed=25, loop=true},
stand={
{range={x=26, y=46}, speed=5, loop=true},
{range={x=47, y=59}, speed=5, loop=true},
{range={x=60, y=70}, speed=5, loop=true},
{range={x=71, y=91}, speed=5, loop=true},
},
},
sounds = sounds,
on_activate = function(self, staticdata, dtime_s) --on_activate, required
mobkit.actfunc(self, staticdata, dtime_s)
petz.set_initial_properties(self, staticdata, dtime_s)
end,
logic = petz.herbivore_brain,
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
petz.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir)
end,
on_activate = function(self, staticdata, dtime_s) --on_activate, required
mobkit.actfunc(self, staticdata, dtime_s)
petz.set_initial_properties(self, staticdata, dtime_s)
end,
on_rightclick = function(self, clicker)
petz.on_rightclick(self, clicker)
end,
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
petz.on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir)
end,
on_step = function(self, dtime)
mobkit.stepfunc(self, dtime) -- required
petz.on_step(self, dtime)
end,
})
on_rightclick = function(self, clicker)
petz.on_rightclick(self, clicker)
end,
on_step = function(self, dtime)
mobkit.stepfunc(self, dtime) -- required
petz.on_step(self, dtime)
end,
})
petz:register_egg("petz:"..pet_name, S(description), "petz_spawnegg_"..pet_name..".png", false)
end
petz:register_egg("petz:chicken", S("Chicken"), "petz_spawnegg_chicken.png", true)

View File

@ -152,6 +152,12 @@ local settings_def = {
type = "boolean",
default = false,
},
--Parent Search
{
name = "parent_search",
type = "boolean",
default = true,
},
--Lifetime
{
name = "lifetime",
@ -184,6 +190,11 @@ local settings_def = {
type = "number",
default = 10,
},
{
name = "hatch_egg_timing",
type = "number",
default = 500,
},
--Misc Random Sound Chance
{
name = "misc_sound_chance",
@ -463,7 +474,7 @@ for i = 1, #petz.settings["petz_list"] do --load the settings
petz.settings[petz_type.."_spawn_biome"] = user:get(petz_type.."_spawn_biome") or settings:get(petz_type.."_spawn_biome") or "default"
petz.settings[petz_type.."_spawn_herd"] = tonumber(user:get(petz_type.."_spawn_herd") or settings:get(petz_type.."_spawn_herd")) or 1
petz.settings[petz_type.."_seasonal"] = user:get(petz_type.."_seasonal") or settings:get(petz_type.."_seasonal") or ""
petz.settings[petz_type.."_follow"] = user:get(petz_type.."_follow") or settings:get(petz_type.."_follow") or ""
petz.settings[petz_type.."_follow"] = user:get(petz_type.."_follow") or settings:get(petz_type.."_follow") or nil
petz.settings[petz_type.."_breed"] = user:get(petz_type.."_breed") or settings:get(petz_type.."_breed") or ""
petz.settings[petz_type.."_predators"] = user:get(petz_type.."_predators") or settings:get(petz_type.."_predators") or ""
petz.settings[petz_type.."_preys"] = user:get(petz_type.."_preys") or settings:get(petz_type.."_preys") or ""

View File

@ -110,17 +110,17 @@ Author: dobroide
https://freesound.org/people/dobroide/sounds/18229/
License: This work is licensed under the Attribution License.
--------------------------------------------
filename: petz_chicken_cluck.ogg
filename: petz_hen_cluck.ogg
Author: JarredGibb
https://freesound.org/people/JarredGibb/sounds/233093/
License: This work is licensed under the Creative Commons 0 License.
--------------------------------------------
filename: petz_chicken_cluck_2.ogg & petz_chicken_cluck_3.ogg
filename: petz_hen_cluck_2.ogg & petz_chicken_cluck_3.ogg
Author: www.bonson.ca
https://freesound.org/people/www.bonson.ca/sounds/24967/
License: This work is licensed under the Attribution License.
--------------------------------------------
filename: petz_chicken_moaning.ogg
filename: petz_hen_moaning.ogg
Author: Rudmer_Rotteveel
https://freesound.org/people/Rudmer_Rotteveel/sounds/316920/
License: This work is licensed under the Creative Commons 0 License.
@ -384,3 +384,25 @@ filename: petz_leopard_attack.ogg
Author: Darsycho
https://freesound.org/people/Darsycho/sounds/442114/
License: This work is licensed under the Creative Commons 0 License.
--------------------------------------------
filename: petz_rooster_crow.ogg
Author: InspectorJ
https://freesound.org/people/InspectorJ/sounds/439472/
License: This work is licensed under the Attribution License.
--------------------------------------------
filename: petz_rooster_chirp.ogg
Author: Setuniman
https://freesound.org/people/Setuniman/sounds/134049/
License: This work is licensed under the Attribution License.
--------------------------------------------
filename: petz_rooster_moaning.ogg
Author: ra_gun
https://freesound.org/people/ra_gun/sounds/81270/
License: This work is licensed under the Creative Commons 0 License.
--------------------------------------------
filename: petz_chicken_chirp.ogg & filename: petz_chicken_moaning.ogg
& petz_chicken_chirp_2.ogg & petz_chicken_moaning.ogg
Author: AGFX
https://freesound.org/people/AGFX/sounds/43380/
License: This work is licensed under the Creative Commons 0 License.
--------------------------------------------

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.

Before

Width:  |  Height:  |  Size: 618 B

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 B

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

View File

@ -170,7 +170,7 @@ minetest.register_entity("water_life:coralfish_tamed",{
swarm = {},
base = nil,
head = 65535,
owner = "",
owner = "",
drops = {},
-- {name = "default:diamond", chance = 20, min = 1, max = 1,},
-- {name = "water_life:meat_raw", chance = 2, min = 1, max = 1,},

View File

@ -0,0 +1,107 @@
local abs = math.abs
local pi = math.pi
local floor = math.floor
local ceil = math.ceil
local sqrt = math.sqrt
local max = math.max
local min = math.min
local pow = math.pow
local sign = math.sign
local time = os.clock
local rad = math.rad
local random = water_life.random
local deg=math.deg
local tan = math.tan
local cos = math.cos
local atan=math.atan
function water_life.init_bio(self)
mobkit.remember(self,"wl_hunger",100)
mobkit.remember(self,"wl_exhaust",100)
mobkit.remember(self,"wl_horny",100)
mobkit.remember(self,"wl_pregnant",-1)
mobkit.remember(self,"wl_head",random(65535))
mobkit.remember(self,"wl_headpos", nil)
mobkit.remember(self,"wl_boss", 0)
end
function water_life.is_boss(self,change)
if not self then return 0 end
if not change then return mobkit.recall(self,"wl_boss") or 0 end
mobkit.remember(self,"wl_boss", change)
end
function water_life.headpos(self,change)
if not self then return nil end
if not change then
local strg = mobkit.recall(self,"wl_headpos")
if strg then
return minetest.deserialize(strg)
else
return nil
end
end
mobkit.remember(self,"wl_headpos", minetest.serialize(change))
end
function water_life.head(self)
if not self then return 0 end
local boss = mobkit.recall(self,"wl_head")
if boss then
return boss
else
boss = random(65535)
mobkit.remember(self,"wl_head",boss)
return boss
end
end
function water_life.hunger(self,change)
if not self then return 0 end
if not change then change = 0 end
local hunger = mobkit.recall(self,"wl_hunger") or 100
hunger = hunger + change
if hunger < 0 then hunger = 0 end
if hunger > 100 then hunger = 100 end
mobkit.remember(self,"wl_hunger", hunger)
return hunger
end
function water_life.exhaust(self,change)
if not self then return 0 end
if not change then change = 0 end
local exhaust = mobkit.recall(self,"wl_exhaust") or 100
exhaust = exhaust + change
if exhaust < 0 then exhaust = 0 end
if exhaust > 100 then exhaust = 100 end
mobkit.remember(self,"wl_exhaust", exhaust)
return exhaust
end
function water_life.horny(self,change)
if not self then return 0 end
if not change then change = 0 end
local horny = mobkit.recall(self,"wl_horny") or 100
horny = horny + change
if horny < 0 then horny = 0 end
if horny > 100 then horny = 100 end
mobkit.remember(self,"wl_horny", horny)
return horny
end
function water_life.pregnant(self,change)
if not self then return -1 end
if not change then return mobkit.recall(self,"wl_pregnant") or -1 end
mobkit.remember(self,"wl_pregnant", change)
end

View File

@ -0,0 +1,81 @@
water_life.playerhud = {}
water_life.playerhud.poison = {}
water_life.playerhud.repellant = {}
water_life.hud_poison = {
hud_elem_type = "image",
position = {x=0.5, y=0.8},
-- Left corner position of element
name = "water_life_poison",
scale = {x = 0.1, y = 0.1},
text = "water_life_emptyhud.png",
}
water_life.hud_repellant = {
hud_elem_type = "image",
position = {x=0.55, y=0.8},
-- Left corner position of element
name = "water_life_repellant",
scale = {x = 0.1, y = 0.1},
text = "water_life_emptyhud.png",
}
function water_life.change_hud(player,selection,switch)
local value = ""
if not player then return end
if not selection then selection = "poison" end
if not switch then switch = 1 end
local name = player:get_player_name()
if selection == "poison" then
if switch == 1 then value = "water_life_poison.png" else value = "water_life_emptyhud.png" end
player:hud_change(water_life.playerhud.poison[name], "text", value)
end
if selection == "repellant" then
if switch == 1 then value = "water_life_repellanthud.png" else value = "water_life_emptyhud.png" end
player:hud_change(water_life.playerhud.repellant[name], "text", value)
end
end
minetest.register_on_joinplayer(function(player)
if not player then return end
local meta=player:get_meta()
meta:set_int("repellant",0)
local name = player:get_player_name()
water_life.playerhud.poison[name] = player:hud_add(water_life.hud_poison)
water_life.playerhud.repellant[name] = player:hud_add(water_life.hud_repellant)
if meta:get_int("snakepoison") > 0 then
minetest.after(5, function(player)
water_life.change_hud(player,"poison")
end, player)
end
end)

View File

@ -48,11 +48,11 @@ local function spawnstep(dtime)
if hunger_ng_infos.effects.healing then
poison_value = ((waterinterval/hunger_ng_interoper.settings.timers.heal)*hunger_ng_interoper.effects.heal.amount) + 0.1 --+ poison_value -- if you want decrease healt even with healing
end
minetest.log("Poison: "..dump(poison_value))
--minetest.log("Poison: "..dump(poison_value))
local score = plyr:get_hp()-poison_value
--if score < 0 then score = 0 end
minetest.log("Health: "..dump(score))
--minetest.log("Health: "..dump(score))
plyr:set_hp(score)
end

View File

@ -0,0 +1,381 @@
local timer = 0
local landtimer = 0
local pi = math.pi
local random = water_life.random
local landinterval = 60 -- check every 60 seconds for spawnpos on land
local waterinterval = 20 -- check every 20 seconds for spawnpos in water
local function getcount(name)
if not name then
return 0
else
return name
end
end
local function spawnstep(dtime)
timer = timer + dtime
landtimer = landtimer + dtime
if timer > waterinterval then
for _,plyr in ipairs(minetest.get_connected_players()) do
local toomuch = false
if plyr and plyr:is_player() and plyr:get_pos().y > -50 and plyr:get_pos().y < 150 then -- each player gets a spawn chance every 10s on average
local pos = plyr:get_pos()
local yaw = plyr:get_look_horizontal()
local animal = water_life.count_objects(pos)
local meta = plyr:get_meta()
if meta:get_int("snakepoison") > 0 then
local score = plyr:get_hp()
plyr:set_hp(score-1)
end
if meta:get_int("repellant") > 0 then
if math.floor(os.clock()) - meta:get_int("repellant") > water_life.repeltime then
water_life.change_hud(plyr,"repellant",0)
meta:set_int("repellant",0)
end
end
if animal.all > water_life.maxmobs then toomuch = true end
-- find a pos randomly in look direction of player
local radius = (water_life.abr * 12) -- 75% from 16 = 12 nodes
radius = random(7,radius) -- not nearer than 7 nodes in front of player
local angel = math.rad(random(75)) -- look for random angel 0 - 75 degrees
if water_life.leftorright() then yaw = yaw + angel else yaw = yaw - angel end -- add or substract to/from yaw
local pos2 = mobkit.pos_translate2d(pos,yaw,radius) -- calculate position
local depth, stype, surface = water_life.water_depth(pos2,25) -- get surface pos and water depth
local bdata = water_life_get_biome_data(pos2) -- get biome data at spawn position
local ground = {}
local dalam = depth
local landpos = nil
local geckopos = nil
local moskitopos = nil
-- no need of so many postions on land
if landtimer > landinterval then
landpos = water_life.find_node_under_air(pos2)
geckopos = water_life.find_node_under_air(pos2,5,{"group:tree","group:leaves","default:junglegrass"})
moskitopos = water_life.find_node_under_air(pos2,5,{"default:river_water_source","water_life:muddy_river_water_source","group:flora","default:dirt_with_rainforest_litter"})
end
if moskitopos and not water_life.dangerous then
local mlevel = minetest.get_node_light(moskitopos)
local ptime = water_life.get_game_time()
local mdata = water_life_get_biome_data(moskitopos)
--minetest.chat_send_all("MOSKITO: "..dump(moskitopos).." : "..dump(mdata.temp).." : "..dump(ptime).." : "..dump(mlevel))
if ((ptime and ptime > 2) or mlevel < 8) and mdata.temp > 16 then --from 3pm to 5am or in shadows all day long
minetest.set_node(moskitopos, {name = "water_life:moskito"})
minetest.get_node_timer(moskitopos):start(random(15,45))
local pmeta = minetest.get_meta(moskitopos)
pmeta:set_int("mlife",math.floor(os.clock()))
end
end
--some spawn on land, too
if landpos then
local landdata = water_life_get_biome_data(landpos)
if not water_life.dangerous then
-- the snake
local mobname = 'water_life:snake'
local faktor = (100 - getcount(animal[mobname]) * 50)
if random(100) < faktor then
local fits = minetest.is_protected(landpos,mobname)
--minetest.chat_send_all(dump(fits))
if (string.match(landdata.name,"desert") or string.match(landdata.name,"savanna"))
and not fits and landdata.temp > 15 then
local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit
end
end
end
--the beaver
local mobname = 'water_life:beaver'
local faktor = (100 - getcount(animal[mobname]) * 25)
if random(100) < faktor then
if string.match(landdata.name,"coniferous") and landdata.temp > -5 and landdata.temp < 20 then
local obj=minetest.add_entity(landpos,mobname) -- ok spawn it already damnit
end
end
end
if geckopos then
local landdata = water_life_get_biome_data(geckopos)
local mobname = 'water_life:gecko'
local faktor = (100 - getcount(animal[mobname]) * 50)
if random(100) < faktor then
if (string.match(landdata.name,"rainforest") or string.match(landdata.name,"savanna"))
and landdata.temp > 20 then
local obj=minetest.add_entity(geckopos,mobname) -- ok spawn it already damnit
end
end
end
--water spawn
if depth and depth > 0 then
if water_life.radar_debug then
water_life.temp_show(surface,9,5)
minetest.chat_send_all(">>> Depth ="..dump(depth).." <<< "..dump(stype))
minetest.chat_send_all(dump(bdata.name))
end
pos2 = surface
end
local liquidflag = nil
if stype == "default:water_source" then
liquidflag = "sea"
elseif stype == "default:river_water_source" then
liquidflag = "river"
elseif stype == "water_life:muddy_river_water_source" then
liquidflag = "muddy"
end
if liquidflag and not toomuch and surface then
ground = mobkit.pos_shift(surface,{y=(dalam*-1)})
if not water_life.dangerous then
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
local mobname = 'water_life:croc'
local faktor = 100 - getcount(animal[mobname]) * 33
if random(100) < faktor then
local fits = false
if string.match(bdata.name,"rainforest") or string.match(bdata.name,"savanna") then fits = true end
if depth < 4 and fits then --shark min water depth
local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
local mobname = 'water_life:snake'
local faktor = (100 - getcount(animal[mobname]) * 50) +25
if random(100) < faktor then
local fits = false
if string.match(bdata.name,"desert") or string.match(bdata.name,"savanna") then fits = true end
if depth < 3 and fits then --snake max water depth
local obj=minetest.add_entity(surface,mobname) -- ok spawn it already damnit
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
local mobname = 'water_life:shark'
if water_life.shark_spawn_rate >= random(1000) then
local bcheck = water_life.count_objects(pos2,12)
if getcount(animal[mobname]) < water_life.maxsharks and liquidflag == "sea" and not bcheck["water_life:shark_buoy"]
and not animal["water_life:croc"] then
if depth > 4 then --shark min water depth
local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname) -- spawn it 2 nodes above sea ground
end
end
end
end
local mobname = "water_life:gull"
local faktor = 100 - getcount(animal[mobname]) * 20
if random(100) < faktor and liquidflag == "sea" then
if depth > 4 then
local spawn = mobkit.pos_shift(surface,{y=12})
--spawn.y = spawn.y + 12
local obj=minetest.add_entity(spawn,mobname) -- ok spawn it already damnit
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
mobname = "water_life:urchin"
if water_life.urchin_spawn_rate >= random(1000) then
local upos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5})
local upos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5})
local coraltable = minetest.find_nodes_in_area(upos1, upos2, water_life.urchinspawn)
--local nearlife = water_life.count_objects(ground,5,"water_life:urchin")
if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 15 and liquidflag == "sea" then
local coralpos = coraltable[random(#coraltable)]
coralpos.y = coralpos.y +1
local node = minetest.get_node(coralpos)
if node.name == "default:water_source" then
local obj= water_life.set_urchin(coralpos) --minetest.add_entity(coralpos,mobname)
end
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
mobname = "water_life:clams"
if water_life.clams_spawn_rate >= random(1000) then
local clpos1 = mobkit.pos_shift(ground,{x=-8, y=-2, z=8})
local clpos2 = mobkit.pos_shift(ground,{x=8, y=2, z=8})
local coraltable = minetest.find_nodes_in_area(clpos1, clpos2, water_life.clams_spawn)
----minetest.chat_send_all("seagrass ="..dump(#coraltable))
local nearlife = water_life.count_objects(ground,8,"water_life:clams")
if coraltable and #coraltable > 0 and getcount(animal[mobname]) < 10 and liquidflag == "sea" then
local coralpos = mobkit.pos_shift(coraltable[random(#coraltable)],{y=1})
local node = minetest.get_node(coralpos)
if node.name == "default:water_source" then
local obj= water_life.set_urchin(coralpos,"water_life:clams")
end
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
mobname = "water_life:jellyfish"
local faktor = 100 - getcount(animal[mobname]) * 20
if random(100) < faktor and liquidflag == "sea" and depth > 2 then
local obj=minetest.add_entity(mobkit.pos_shift(ground,{y=2}),mobname)
end
mobname = "water_life:coralfish"
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
local cfpos1 = mobkit.pos_shift(ground,{x=-5,y=-2,z=-5})
local cfpos2 = mobkit.pos_shift(ground,{x=5,y=2,z=5})
local coraltable = minetest.find_nodes_in_area(cfpos1,cfpos2,water_life.urchinspawn)
--local nearlife = water_life.count_objects(ground,nil,mobname)
faktor = 100 - getcount(animal[mobname]) * 6.66
if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then
local cfish = coraltable[random(#coraltable)]
cfish.y = cfish.y +1
local maxfish = random(3,7)
for i = 1,maxfish,1 do
local obj=minetest.add_entity(cfish,mobname)
if obj then
local entity = obj:get_luaentity()
entity.base = cfish
entity.head = random(65535)
end
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
mobname = "water_life:clownfish"
faktor = 100 - getcount(animal[mobname]) * 50
if random(100) < faktor and liquidflag == "sea" and #coraltable > 1 then
local cfish = coraltable[random(#coraltable)]
cfish.y = cfish.y +1
local obj=minetest.add_entity(cfish,mobname)
if obj then
local entity = obj:get_luaentity()
entity.base = cfish
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
mobname = 'water_life:fish'
--local nearlife = water_life.count_objects(pos2,24,"water_life:piranha")
if water_life.fish_spawn_rate >= random(1000) and ((animal.all < (water_life.maxmobs-5)) or getcount(animal[mobname]) < 5) and (liquidflag == "river" or liquidflag == "muddy") then
local table = minetest.get_biome_data(pos)
if not water_life.dangerous and table and water_life.piranha_biomes[minetest.get_biome_name(table.biome)] then
mobname = "water_life:piranha"
end
if depth > 2 then -- min water depth for piranha and riverfish
if mobname == "water_life:fish" then
local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit
else
if getcount(animal[mobname]) < 10 then
for i = 1,3,1 do
local obj=minetest.add_entity(pos2,mobname) -- ok spawn it already damnit
end
end
end
end
end
--minetest.chat_send_all(dump(minetest.pos_to_string(surface)).." "..dump(minetest.pos_to_string(ground)))
mobname = 'water_life:whale'
if water_life.whale_spawn_rate >= random(1000) and getcount(animal[mobname]) < (water_life.maxwhales) and liquidflag == "sea" then
if depth > 8 then -- min water depth for whales
local gotwhale = true
local whpos = mobkit.pos_shift(surface,{y=-3})
for i = 0,3,1 do
local whpos2 = mobkit.pos_translate2d(whpos,math.rad(i*90),30)
local under = water_life.find_collision(whpos,whpos2, false)
----minetest.chat_send_all(dump(under))
if under and under < 25 then
gotwhale = false
break
end
end
if gotwhale then local obj=minetest.add_entity(surface,mobname) end -- ok spawn it already damnit
end
end
end
end
end
timer = 0
if landtimer > landinterval then landtimer = 0 end
end
end
minetest.register_globalstep(spawnstep)

View File

@ -4,7 +4,7 @@ Animates the character. Resembles [`playeranim`](https://github.com/minetest-mod
## About
Depends on [`modlib`](https://github.com/appgurueu/modlib) and [`cmdlib`](https://github.com/appgurueu/cmdlib). Code written by Lars Mueller aka LMD or appguru(eu) and licensed under the MIT license. Media (player model) was created by [MTG contributors](https://github.com/minetest/minetest_game/blob/master/mods/player_api/README.txt) (MirceaKitsune, stujones11 and An0n3m0us) and is licensed under the CC BY-SA 3.0 license, as must be its derivatives (`skinsdb` and `3d_armor` variants).
Depends on [`modlib`](https://github.com/appgurueu/modlib). Code written by Lars Mueller aka LMD or appguru(eu) and licensed under the MIT license. Media (player model) was created by [MTG contributors](https://github.com/minetest/minetest_game/blob/master/mods/player_api/README.txt) (MirceaKitsune, stujones11 and An0n3m0us) and is licensed under the CC BY-SA 3.0 license, as must be its derivatives (`skinsdb` and `3d_armor` variants).
## Screenshot
@ -17,7 +17,7 @@ Depends on [`modlib`](https://github.com/appgurueu/modlib) and [`cmdlib`](https:
* [Minetest Forum](https://forum.minetest.net/viewtopic.php?f=9&t=25385) - (more organized) discussion
* [ContentDB](https://content.minetest.net/packages/LMD/character_anim) - releases (cloning from GitHub is recommended)
# Features
## Features
* Animates head, right arm & body
* Advantages over `playeranim`:
@ -28,7 +28,7 @@ Depends on [`modlib`](https://github.com/appgurueu/modlib) and [`cmdlib`](https:
* Head angles are clamped, head can tilt sideways
* Animates right arm & body as well
# Instructions
## Instructions
0. If you want to use a custom model, install [`binarystream`](https://luarocks.org/modules/Tarik02/binarystream) from LuaRocks:
1. `sudo luarocks install binarystream` on many UNIX-systems

View File

@ -115,8 +115,8 @@ end)
-- https://github.com/minetest/minetest/issues/6909
local builtin_item = minetest.registered_entities["__builtin:item"]
local item = {
on_step = function(self, dtime, moveresult)
builtin_item.on_step(self, dtime, moveresult)
on_step = function(self, dtime, ...)
builtin_item.on_step(self, dtime, ...)
self.shining_timer = (self.shining_timer or 0) + dtime
if self.shining_timer >= update_interval then