master
root 2020-12-12 13:19:38 +01:00
parent bb4e855ad3
commit 09b549f484
133 changed files with 2859 additions and 383 deletions

View File

@ -501,7 +501,7 @@ armor.get_player_skin = function(self, name)
elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then
return wardrobe.playerSkins[name]
end
local gender = player:get_meta():get_string("gender")
local gender = player:get_meta():get_string("gender")
return player_api.registered_models[player_api.get_gender_model(gender)].textures[1]
end

View File

@ -65,7 +65,7 @@ end
if minetest.get_modpath("technic") then
armor.formspec = armor.formspec..
"label[5,2.5;"..F(S("Radiation"))..": armor_group_radiation]"
"label[5,2.5;"..F(S("Radiation"))..": armor_group_radiation]"
armor:register_armor_group("radiation")
end
local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"}
@ -94,9 +94,9 @@ dofile(modpath.."/armor.lua")
armor.formspec = armor.formspec..
"label[5,1;"..F(S("Level"))..": armor_level]"..
"label[5,1.5;"..F(S("Heal"))..": armor_attr_heal]"
"label[5,1.5;"..F(S("Heal"))..": armor_attr_heal]"
if armor.config.fire_protect then
armor.formspec = armor.formspec.."label[5,2;"..F(S("Fire"))..": armor_attr_fire]"
armor.formspec = armor.formspec.."label[5,2;"..F(S("Fire"))..": armor_attr_fire]"
end
armor:register_on_damage(function(player, index, stack)
local name = player:get_player_name()
@ -192,6 +192,9 @@ local function init_player_armor(initplayer)
armor:set_player_armor(player)
end,
allow_put = function(inv, listname, index, put_stack, player)
if player:get_player_name() ~= name then
return 0
end
local element = armor:get_element(put_stack:get_name())
if not element then
return 0
@ -207,9 +210,15 @@ local function init_player_armor(initplayer)
return 1
end,
allow_take = function(inv, listname, index, stack, player)
if player:get_player_name() ~= name then
return 0
end
return stack:get_count()
end,
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if player:get_player_name() ~= name then
return 0
end
return count
end,
}, name)
@ -308,7 +317,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if not name then
return
end
local player_name = player:get_player_name()
local player_name = player:get_player_name()
for field, _ in pairs(fields) do
if string.find(field, "skins_set") then
armor:update_skin(player_name)

1
mods/beauty_pack Submodule

@ -0,0 +1 @@
Subproject commit a6777dc539625ff863c73cecfb9addffb12825db

View File

@ -155,7 +155,8 @@ function beds.register_bed(name, def)
paramtype2 = "facedir",
is_ground_content = false,
pointable = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2},
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2,
not_in_creative_inventory = 1},
sounds = def.sounds or default.node_sound_wood_defaults(),
drop = name .. "_bottom",
node_box = {

View File

@ -75,7 +75,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
player:set_look_horizontal(math.random(1, 180) / 100)
player_api.player_attached[name] = false
player:set_physics_override(1, 1, 1)
player:set_physics_override({speed = 1, jump = 1, gravity = 1})
hud_flags.wielditem = true
player_api.set_animation(player, "stand" , 30)
@ -91,7 +91,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
end
-- Check if player is moving
if vector.length(player:get_player_velocity()) > 0.001 then
if vector.length(player:get_velocity()) > 0.001 then
minetest.chat_send_player(name, S("You have to stop moving before going to bed!"))
return false
end
@ -112,7 +112,7 @@ local function lay_down(player, pos, bed_pos, state, skip)
y = bed_pos.y + 0.07,
z = bed_pos.z + dir.z / 2
}
player:set_physics_override(0, 0, 0)
player:set_physics_override({speed = 0, jump = 0, gravity = 0})
player:set_pos(p)
player_api.player_attached[name] = true
hud_flags.wielditem = false
@ -284,4 +284,3 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end
end)

View File

@ -0,0 +1,8 @@
# textdomain: beds
Leave Bed=Opusti posteľ
Good morning.=Dobré ráno.
@1 of @2 players are in bed=@1 z @2 hráčov sú v posteli
Force night skip=Nútene preskočiť noc
You can only sleep at night.=Môžeš spať len v noci.
Fancy Bed=Pekná posteľ
Simple Bed=Jednoduchá posteľ

View File

@ -0,0 +1,3 @@
# textdomain: binoculars
Binoculars=Ďalekohľad
Use with 'Zoom' key=Použi s klávesou "Priblíž"

View File

@ -0,0 +1,4 @@
# textdomain: boats
Boat cruise mode on=Cestovný režim loďky zapnutý
Boat cruise mode off=Cestovný režim loďky vypnutý
Boat=Loďka

View File

@ -0,0 +1,8 @@
# textdomain: bones
Bones=Kosti
@1's old bones=Staré kosti hráča @1
@1 died at @2.=@1 zomrel na pozícií @2.
@1 died at @2, and dropped their inventory.=@1 zomrel na pozícií @2 a vysypal svoj inventár.
@1 died at @2, and bones were placed.=@1 zomrel na pozícií @2 a ostali po ňom kosti.
@1's fresh bones=Čerstvé kosti hráča @1
@1's bones=Kosti hráča @1

View File

@ -0,0 +1,5 @@
# textdomain: bucket
Empty Bucket=Prázdne vedro
Water Bucket=Vedro s vodou
River Water Bucket=Vedro s vodou z rieky
Lava Bucket=Vedro s lávou

View File

@ -0,0 +1,4 @@
# textdomain: butterflies
White Butterfly=Biely motýlik
Red Butterfly=Červený motýlik
Violet Butterfly=Fialový motýlik

View File

@ -0,0 +1,6 @@
# textdomain: carts
Cart=Vozík
(Sneak+Click to pick up)=(Zakrádanie sa + Klik pre zdvihnutie)
Rail=Koľajnica
Powered Rail=Koľajnica s pohonom
Brake Rail=Brzdná koľajnica

View File

@ -0,0 +1,10 @@
# textdomain: creative
Allow player to use creative inventory=Povolí hráčovi použivať kreatívny inventár
Search=Hľadaj
Reset=Vrátiť späť
Previous page=Predchádzajúca stránka
Next page=Nasledujúca stránka
All=Všetko
Nodes=Kocky
Tools=Nástroje
Items=Veci

View File

@ -19,17 +19,17 @@ Mese Crystal=Кристалл Месе
Gold Lump=Кусок Золота
Diamond=Алмаз
Clay Lump=Ком Глины
Steel Ingot=Железный Брусок
Copper Ingot=Медный Брусок
Tin Ingot=Оловянный Брусок
Bronze Ingot=Бронзовый Брусок
Gold Ingot=Золотой Брусок
Steel Ingot=Железный Слиток
Copper Ingot=Медный Слиток
Tin Ingot=Оловянный Слиток
Bronze Ingot=Бронзовый Слиток
Gold Ingot=Золотой Слиток
Mese Crystal Fragment=Осколок Кристалла Месе
Clay Brick=Глиняный Кирпич
Obsidian Shard=Обсидиановый Осколок
Flint=Огниво
Flint=Кремень
Blueberries=Черника
Furnace is empty=Печь пустая
Furnace is empty=Печь пуста
100% (output full)=100% (полное приготовление)
@1%=@1%
Empty=Пустое
@ -80,29 +80,29 @@ Snow=Снег
Snow Block=Снежный Блок
Ice=Лёд
Cave Ice=Пещерный Лёд
Apple Tree=Яблоневый Ствол
Apple Wood Planks=Яблоневые Деревянные Доски
Apple Tree Sapling=Яблоневый Саженец
Apple Tree=Ствол Яблони
Apple Wood Planks=Яблоневые Доски
Apple Tree Sapling=Саженец Яблони
Apple Tree Leaves=Яблоневая Листва
Apple=Яблоко
Apple Marker=Яблочная Метка
Jungle Tree=Ствол Тропического Дерева
Jungle Wood Planks=Деревянные Доски Тропического Дерева
Jungle Wood Planks=Доски из Тропического Дерева
Jungle Tree Leaves=Листва Тропического Дерева
Jungle Tree Sapling=Саженец Тропического Дерева
Emergent Jungle Tree Sapling=Выросший Саженец Тропического Дерева
Pine Tree=Сосновый Ствол
Pine Wood Planks=Сосновые Деревянные Доски
Pine Wood Planks=Сосновые Доски
Pine Needles=Сосновая Хвоя
Pine Tree Sapling=Сосновый Саженец
Pine Tree Sapling=Саженец Сосны
Acacia Tree=Ствол Акации
Acacia Wood Planks=Деревянные Доски Акации
Acacia Wood Planks=Доски Акации
Acacia Tree Leaves=Листва Акации
Acacia Tree Sapling=Саженец Акации
Aspen Tree=Осиновый Ствол
Aspen Wood Planks=Осиновые Деревянные Доски
Aspen Tree=Ствол Осины
Aspen Wood Planks=Осиновые Доски
Aspen Tree Leaves=Осиновая Листва
Aspen Tree Sapling=Осиновый Саженец
Aspen Tree Sapling=Саженец Осины
Coal Ore=Уголь
Coal Block=Угольный Блок
Iron Ore=Железная Руда
@ -119,7 +119,7 @@ Gold Block=Золотой Блок
Diamond Ore=Алмаз
Diamond Block=Алмазный Блок
Cactus=Кактус
Large Cactus Seedling=Кактусовый Саженец
Large Cactus Seedling=Саженец Кактуса
Papyrus=Папирус
Dry Shrub=Сухой Куст
Jungle Grass=Тропическая Трава
@ -127,23 +127,23 @@ Grass=Трава
Dry Grass=Сухая Трава
Fern=Папоротник
Marram Grass=Песколюб
Bush Stem=Ствол Яблочного Деревца
Bush Leaves=Листья Яблочного Деревца
Bush Sapling=Саженца яблочного деревца
Bush Stem=Стебли Куста
Bush Leaves=Листья Куста
Bush Sapling=Саженец Куста
Blueberry Bush Leaves with Berries=Куст Черники с Ягодами
Blueberry Bush Leaves=Куст Черники
Blueberry Bush Sapling=Саженца Куста Черники
Acacia Bush Stem=Ствол Деревца Акации
Acacia Bush Leaves=Листья Деревца Акации
Acacia Bush Sapling=Саженца Деревца Акации
Pine Bush Stem=Сосновое Деревце
Pine Bush Needles=Хвоя Соснового Деревца
Pine Bush Sapling=Саженца Соснового Деревца
Blueberry Bush Sapling=Саженец Куста Черники
Acacia Bush Stem=Стебли Куста Акации
Acacia Bush Leaves=Листья Куста Акации
Acacia Bush Sapling=Саженец Куста Акации
Pine Bush Stem=Стебли Хвойного Куста
Pine Bush Needles=Хвоя Куста
Pine Bush Sapling=Саженец Хвойного Куста
Kelp=Ламинария
Green Coral=Зеленый Коралл
Pink Coral=Розовый Коралл
Cyan Coral=Голубой Коралл
Brown Coral=Бурый Коралл
Brown Coral=Коричневый Коралл
Orange Coral=Оранжевый Коралл
Coral Skeleton=Коралловый Остов
Water Source=Водный Источник

View File

@ -0,0 +1,211 @@
# textdomain: default
Locked Chest=Uzamknutá truhlica
Locked Chest (owned by @1)=Uzamknutá truhlica (Vlastník - @1)
You do not own this chest.=Túto truhlicu nevlastníš.
a locked chest=zamknutá truhlica
Chest=Truhlica
Stick=Palica
Paper=Papier
"@1" by @2=„@1“ z @2
Book=Kniha
Book with Text=Kniha s textom
Skeleton Key=Základný kľuč
Key to @1's @2=Kľuč pre @2 hráča @1
Coal Lump=Hruda uhlia
Iron Lump=Hruda železa
Copper Lump=Hruda medi
Tin Lump=Hruda cínu
Mese Crystal=Mese Krištáľ
Gold Lump=Hruda zlata
Diamond=Diamant
Clay Lump=Hruda ílu
Steel Ingot=Oceľový ingot
Copper Ingot=Medený ingot
Tin Ingot=Cínový ingot
Bronze Ingot=Bronzový ingot
Gold Ingot=Zlatý ingot
Mese Crystal Fragment=Fragment Mese krištáľu
Clay Brick=Nepálená tehla
Obsidian Shard=Úlomok obsidiánu
Flint=Kresací kamienok
Blueberries=Čučoriedky
Furnace is empty=Pec je prázdna
100% (output full)=100% (Výstup je plný)
@1%=@1%
Empty=Prázdne
Not cookable=Nie je variteľné
Furnace active=Pec je aktívna
Furnace inactive=Pec je neaktívna
(Item: @1; Fuel: @2)=(Vec: @1; Palivo: @2)
Furnace=Pec
Stone=Kameň
Cobblestone=Dlažbový kameň
Stone Brick=Tehla z kameňa
Stone Block=Blok kameňa
Mossy Cobblestone=Dlažbový kameň obrastený machom
Desert Stone=Púštny kameň
Desert Cobblestone=Púštny dlažbový kameň
Desert Stone Brick=Tehla z púštneho kameňa
Desert Stone Block=Blok púštneho kameňa
Sandstone=Pieskovec
Sandstone Brick=Tehla z pieskovca
Sandstone Block=Blok pieskovca
Desert Sandstone=Púštny pieskovec
Desert Sandstone Brick=Tehla z púštneho pieskovca
Desert Sandstone Block=Blok púštneho pieskovca
Silver Sandstone=Strieborný pieskovec
Silver Sandstone Brick=Tehla zo strieborného pieskovca
Silver Sandstone Block=Blok strieborného pieskovca
Obsidian=Obsidián
Obsidian Brick=Tehla z obsidiánu
Obsidian Block=Blok obsidiánu
Dirt=Hlina
Dirt with Grass=Hlina s trávou
Dirt with Grass and Footsteps=Hlina s trávou a stopami
Dirt with Savanna Grass=Hlina s trávou zo savany
Dirt with Snow=Hlina so snehom
Dirt with Rainforest Litter=Hlina s povrchom dažďového pralesa
Dirt with Coniferous Litter=Hlina s ihličnatým povrchom
Savanna Dirt=Hlina zo savany
Savanna Dirt with Savanna Grass=Hlina zo savany s trávou
Permafrost=Permafrost
Permafrost with Stones=Permafrost s kameňmi
Permafrost with Moss=Permafrost s machom
Sand=Piesok
Desert Sand=Púštny piesok
Silver Sand=Strieborný piesok
Gravel=Štrk
Clay=Íl
Snow=Sneh
Snow Block=Blok snehu
Ice=Ľad
Cave Ice=Jaskynný ľad
Apple Tree=Jabloň
Apple Wood Planks=Drevené dosky z jablone
Apple Tree Sapling=Stromček jablone
Apple Tree Leaves=Listy z jablone
Apple=Jablko
Apple Marker=Jablková značka
Jungle Tree=Ďungľový strom
Jungle Wood Planks=Drevené dosky z džungľového stromu
Jungle Tree Leaves=Listy z džungľového stromu
Jungle Tree Sapling=Džungľový stromček
Emergent Jungle Tree Sapling=Vznikajúci džungľový stromček
Pine Tree=Borovica
Pine Wood Planks=Drevené dosky z borovice
Pine Needles=Ihličie z borovice
Pine Tree Sapling=Borovicový stromček
Acacia Tree=Akácia
Acacia Wood Planks=Drevené dosky z akácie
Acacia Tree Leaves=Listy z akácie
Acacia Tree Sapling=Stromček akácie
Aspen Tree=Osika
Aspen Wood Planks=Drevené dosky z osiky
Aspen Tree Leaves=Listy z osiky
Aspen Tree Sapling=Stromček osiky
Coal Ore=Uhoľná ruda
Coal Block=Blok uhlia
Iron Ore=Železná ruda
Steel Block=Blok ocele
Copper Ore=Medená ruda
Copper Block=Blok medi
Tin Ore=Cínová ruda
Tin Block=Blok cínu
Bronze Block=Blok bronzu
Mese Ore=Mese Ruda
Mese Block=Blok Mese
Gold Ore=Zlatá ruda
Gold Block=Blok zlata
Diamond Ore=Diamantová ruda
Diamond Block=Blok diamantu
Cactus=Kaktus
Large Cactus Seedling=Vaľká sadenica kaktusu
Papyrus=Papyrus
Dry Shrub=Suchý ker
Jungle Grass=Džungľová tráva
Grass=Tráva
Savanna Grass=Tráva zo savany
Fern=Papraď
Marram Grass=Pobrežná tráva
Bush Stem=Stonka z kríka
Bush Leaves=Listy z kríka
Bush Sapling=Sadenica kríka
Blueberry Bush Leaves with Berries=Čučoriedkové listy s čučoriedkami
Blueberry Bush Leaves=Čučoriedkové listy
Blueberry Bush Sapling=Sadenica čučoriedky
Acacia Bush Stem=Stonka z kríka akácie
Acacia Bush Leaves=Listy z kríka akácie
Acacia Bush Sapling=Sadenica kríka akácie
Pine Bush Stem=Stonka kríka borovice
Pine Bush Needles=Ihličie kríka borovice
Pine Bush Sapling=Sadenica kríka borovice
Kelp=Riasa
Green Coral=Zelený koral
Pink Coral=Ružový koral
Cyan Coral=Tyrkysový koral
Brown Coral=Hnedý koral
Orange Coral=Oranžový koral
Coral Skeleton=Koralová kostra
Water Source=Zdroj vody
Flowing Water=Tečúca voda
River Water Source=Zdroj riečnej voda
Flowing River Water=Tečúca riečna voda
Lava Source=Zdroj lávy
Flowing Lava=Tečúca láva
Empty Bookshelf=Prázdna knižnica
Bookshelf (@1 written, @2 empty books)=Knižnica (@1 popísané, @2 prázdne knihy)
Bookshelf=Knižnica
Text too long=Text je príliš dlhý
Wooden Sign=Drevená tabuľka
Steel Sign=Oceľová tabuľka
Wooden Ladder=Drevený rebrík
Steel Ladder=Oceľový rebrík
Apple Wood Fence=Drevený plot z jablone
Acacia Wood Fence=Drevený plot z akácie
Jungle Wood Fence=Drevený plot z džungľového dreva
Pine Wood Fence=Drevený plot z borovice
Aspen Wood Fence=Drevený plot z osiky
Apple Wood Fence Rail=Drevené zábradlie z jablone
Acacia Wood Fence Rail=Drevené zábradlie z akácie
Jungle Wood Fence Rail=Drevené zábradlie z džungľového dreva
Pine Wood Fence Rail=Drevené zábradlie z borovice
Aspen Wood Fence Rail=Drevené zábradlie z osiky
Glass=Sklo
Obsidian Glass=Obsidiánové sklo
Brick Block=Blok z tehál
Mese Lamp=Mese lampa
Mese Post Light=Mese stĺpová lampa
Cloud=Oblak
Wooden Pickaxe=Drevený krompáč
Stone Pickaxe=Kamenný krompáč
Bronze Pickaxe=Bronzový krompáč
Steel Pickaxe=Oceľový krompáč
Mese Pickaxe=Mese krompáč
Diamond Pickaxe=Diamantový krompáč
Wooden Shovel=Drevená lopata
Stone Shovel=Kamenná lopata
Bronze Shovel=Bronzová lopata
Steel Shovel=Oceľová lopata
Mese Shovel=Mese lopata
Diamond Shovel=Diamantová lopata
Wooden Axe=Drevená sekera
Stone Axe=Kamenná sekera
Bronze Axe=Bronzová sekera
Steel Axe=Oceľová sekera
Mese Axe=Mese sekera
Diamond Axe=Diamantová sekera
Wooden Sword=Drevený meč
Stone Sword=Kamenný meč
Bronze Sword=Bronzový meč
Steel Sword=Oceľový meč
Mese Sword=Mese meč
Diamond Sword=Diamantový meč
Key=Kľúč
Torch=Fakľa
@1 will intersect protection on growth.=@1 prekročí pri raste chránenú zónu.
Title:=Názov:
Contents:=Obsah:
Save=Uložiť
by @1=od @1
Page @1 of @2=Strana @1 z @2
"@1"=„@1“

View File

@ -4,9 +4,8 @@
local S = default.get_translator
-- The hand
minetest.register_item(":", {
type = "none",
wield_image = "wieldhand.png",
-- Override the hand item registered in the engine in builtin/game/register.lua
minetest.override_item("", {
wield_scale = {x=1,y=1,z=2.5},
tool_capabilities = {
full_punch_interval = 0.9,

View File

@ -0,0 +1,18 @@
# textdomain: doors
Hidden Door Segment=Skrytá časť dverí
Owned by @1=Vlastník - @1
You do not own this locked door.=Nevlastníš tieto uzamknuté dvere.
a locked door=uzamknuté dvere
Wooden Door=Drevené dvere
Steel Door=Oceľové dvere
Glass Door=Sklenené dvere
Obsidian Glass Door=Obsidiánové sklenené dvere
You do not own this trapdoor.=Nevlastníš tieto padacie dvere.
a locked trapdoor=uzamknuté padacie dvere
Wooden Trapdoor=Drevené padacie dvere
Steel Trapdoor=Oceľové padacie dvere
Apple Wood Fence Gate=Drevený plot z jablone
Acacia Wood Fence Gate=Drevený plot z akácie
Jungle Wood Fence Gate=Drevený plot z džungľového dreva
Pine Wood Fence Gate=Drevený plot z borovice
Aspen Wood Fence Gate=Drevený plot z osiky

View File

@ -0,0 +1,16 @@
# textdomain: dye
White Dye=Biele farbivo
Grey Dye=Šedé farbivo
Dark Grey Dye=Tmavo šedé farbivo
Black Dye=Čierne farbivo
Violet Dye=Fialové farbivo
Blue Dye=Modré farbivo
Cyan Dye=Tyrkysové farbivo
Dark Green Dye=Tmavozelené farbivo
Green Dye=Zelené farbivo
Yellow Dye=Žlté farbivo
Brown Dye=Hnedé farbivo
Orange Dye=Oranžové farbivo
Red Dye=Červené farbivo
Magenta Dye=Purpurové farbivo
Pink Dye=Ružové farbivo

View File

@ -0,0 +1,28 @@
# textdomain: farming
Wooden Hoe=Drevená motyka
Stone Hoe=Kamenná motyka
Steel Hoe=Oceľová motyka
Bronze Hoe=Bronzová motyka
Mese Hoe=Mese motyka
Diamond Hoe=Diamantová motyka
Wheat Seed=Pšeničné semienko
Flour=Múka
Bread=Chlieb
Cotton Seed=Bavlnené semienko
String=Šňúra
Soil=Zemina
Wet Soil=Mokrá zemina
Savanna Soil=Zemina zo savany
Wet Savanna Soil=Morká zemina zo savany
Desert Sand Soil=Zemina s púšte
Wet Desert Sand Soil=Mokrá zemina s púšte
Straw=Slama
Straw Stair=Slamenné schody
Straw Slab=Slamenná doska
Inner Straw Stair=Vnútorné slamenné schodisko
Outer Straw Stair=Vonkajšie slamenné schodisko
Wheat=Pšenica
Cotton=Bavlna
Hoe=Motyka
Seed=Semienko
Wild Cotton=Divoká bavlna

View File

@ -1,3 +1,3 @@
# textdomain: fire
Permanent Flame=Вечный Огонь
Flint and Steel=Огниво и Сталь
Flint and Steel=Огниво

View File

@ -0,0 +1,4 @@
# textdomain: fire
Fire=Oheň
Permanent Fire=Stály oheň
Flint and Steel=Pazúrik a ocieľka

View File

@ -0,0 +1,5 @@
# textdomain: fireflies
Firefly=Svetluška
Hidden Firefly=Skrytá svetluška
Bug Net=Sieťka na hmyz
Firefly in a Bottle=Svetluška vo fľaši

View File

@ -0,0 +1,12 @@
# textdomain: flowers
Red Rose=Červená ruža
Orange Tulip=Oranžový tulipán
Yellow Dandelion=Žltá púpava
Green Chrysanthemum=Zelená chryzantéma
Blue Geranium=Modrý muškát
Viola=Fialka
White Dandelion=Biela púpava
Black Tulip=Čierny tulipán
Red Mushroom=Červená huba
Brown Mushroom=Hnedá huba
Waterlily=Lekno

View File

@ -0,0 +1,4 @@
# textdomain: game_commands
Kill yourself to respawn=Samovražda pre znovuzrodenie
No static_spawnpoint defined=Nie je definované stále miesto znovuzrodenia
You need to be online to be killed!=Musíš byť online, aby si mohol byť zabitý!

View File

@ -0,0 +1,3 @@
# textdomain: map
Mapping Kit=Kartografická súprava
Use with 'Minimap' key=Použi klávesou 'Prepni minimpu'

View File

@ -71,6 +71,31 @@ function player_api.get_gender_model(gender)
return model
end
minetest.register_chatcommand("toggle_gender", {
description = S("Change the gender, from male to female or viceversa"),
func = function(name, param)
local player = minetest.get_player_by_name(name)
local meta = player:get_meta()
local old_gender = player_api.get_gender(player)
if old_gender then
local new_gender
if old_gender == "male" then
new_gender = "female"
else
new_gender = "male"
end
meta:set_string("gender", new_gender)
player_api.set_model(player, player_api.get_gender_model(new_gender))
local gender_model = player_api.get_gender_model(new_gender)
local cloth = player_api.compose_cloth(player)
player_api.registered_models[gender_model].textures[1] = cloth
player_api.set_textures(player, models[gender_model].textures)
local new_gender_cap = new_gender:gsub("^%l", string.upper)
minetest.chat_send_player(name, S("Your gender is changed to").." "..S(new_gender_cap)..".")
end
end,
})
-- Called when a player's appearance needs to be updated
function player_api.set_model(player, model_name)
local name = player:get_player_name()
@ -218,8 +243,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
else
gender = player_api.set_gender(player, "random")
end
player_api.set_cloths(player, gender)
local cloth = player_api.compose_cloth(player, gender)
player_api.set_cloths(player)
local cloth = player_api.compose_cloth(player)
local gender_model = player_api.get_gender_model(gender)
player_api.registered_models[gender_model].textures[1] = cloth
player_api.set_model(player, gender_model)

View File

@ -16,13 +16,35 @@ function player_api.register_cloth(name, def)
if not(def.wield_image) then
def.wield_image = def.inventory_image
end
local tooltip
if def.groups["cloth"] == 1 then
tooltip = S("Head")
elseif def.groups["cloth"] == 2 then
tooltip = S("Upper")
else
tooltip = S("Lower")
end
tooltip = "(" .. tooltip .. ")"
local gender, gender_color
if def.gender == "male" then
gender = S("Male")
gender_color = "#00baff"
elseif def.gender == "female" then
gender = S("Female")
gender_color = "#ff69b4"
else
gender = S("Unisex")
gender_color = "#9400d3"
end
tooltip = tooltip.."\n".. minetest.colorize(gender_color, gender)
minetest.register_craftitem(name, {
description = def.description,
description = def.description .. "\n" .. tooltip,
inventory_image = def.inventory_image,
wield_image = def.wield_image,
stack_max = def.stack_max or 16,
_cloth_texture = def.texture,
_cloth_genre = def.genre,
_cloth_preview = def.preview,
_cloth_gender = def.gender,
groups = def.groups,
})
end
@ -32,7 +54,8 @@ player_api.register_cloth("player_api:cloth_female_upper_default", {
inventory_image = "cloth_female_upper_default_inv.png",
wield_image = "cloth_female_upper_default.png",
texture = "cloth_female_upper_default.png",
genre = "female",
preview = "cloth_female_upper_preview.png",
gender = "female",
groups = {cloth = 2},
})
@ -41,7 +64,8 @@ player_api.register_cloth("player_api:cloth_female_lower_default", {
inventory_image = "cloth_female_lower_default_inv.png",
wield_image = "cloth_female_lower_default_inv.png",
texture = "cloth_female_lower_default.png",
genre = "female",
preview = "cloth_female_lower_preview.png",
gender = "female",
groups = {cloth = 3},
})
@ -50,7 +74,8 @@ player_api.register_cloth("player_api:cloth_female_head_default", {
inventory_image = "cloth_female_head_default_inv.png",
wield_image = "cloth_female_head_default_inv.png",
texture = "cloth_female_head_default.png",
genre = "female",
preview = "cloth_female_head_preview.png",
gender = "female",
groups = {cloth = 1},
})
@ -59,7 +84,8 @@ player_api.register_cloth("player_api:cloth_male_upper_default", {
inventory_image = "cloth_male_upper_default_inv.png",
wield_image = "cloth_male_upper_default_inv.png",
texture = "cloth_male_upper_default.png",
genre = "male",
preview = "cloth_male_upper_preview.png",
gender = "male",
groups = {cloth = 2},
})
@ -68,16 +94,16 @@ player_api.register_cloth("player_api:cloth_male_lower_default", {
inventory_image = "cloth_male_lower_default_inv.png",
wield_image = "cloth_male_lower_default_inv.png",
texture = "cloth_male_lower_default.png",
genre = "male",
preview = "cloth_male_lower_preview.png",
gender = "male",
groups = {cloth = 3},
})
function player_api.set_cloths(player, gender)
function player_api.set_cloths(player)
local gender = player:get_meta():get_string("gender")
--Create the "cloths" inventory
local inv = player:get_inventory()
inv:set_size("cloths", 3)
inv:set_size("cloths", 8)
if gender == "male" then
inv:add_item("cloths", 'player_api:cloth_male_upper_default')
@ -90,15 +116,14 @@ function player_api.set_cloths(player, gender)
end
function player_api.compose_cloth(player)
if not(player_api.has_cloths(player)) then
return nil
end
local gender = player:get_meta():get_string("gender")
local meta = player:get_meta()
local gender = meta:get_string("gender")
local inv = player:get_inventory()
local inv_list = inv:get_list("cloths")
local upper_ItemStack
local lower_ItemStack
local head_ItemStack
local underwear = false
for i = 1, #inv_list do
local item_name = inv_list[i]:get_name()
--minetest.chat_send_all(item_name)
@ -110,8 +135,12 @@ function player_api.compose_cloth(player)
upper_ItemStack = minetest.registered_items[item_name]._cloth_texture
elseif cloth_type == 3 then
lower_ItemStack = minetest.registered_items[item_name]._cloth_texture
underwear = true
end
end
if not(underwear) then
lower_ItemStack = "cloth_lower_underwear_default.png"
end
local base_texture
if gender == "male" then
base_texture = "player_male_base.png"

View File

@ -2,6 +2,12 @@
Select your gender=Selecciona tu género
Male=Hombre
Female=Mujer
Unisex=Unisex
Change the gender, from male to female or viceversa=Cambiar el género, de hombre a mujer o viceversa
Your gender is changed to=Tu género se ha cambiado a
Head=Cabeza
Upper=Parte superior
Lower=Parte inferior
Purple Stripe Summer T-shirt=Camiseta veraniega púrpura a rayas
Fresh Summer Denim Shorts=Pantalones vaqueros cortos y frescos
Pink Bow=Lazo rosa

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

View File

@ -0,0 +1,3 @@
# textdomain: screwdriver
Screwdriver=Skrutkovač
(left-click rotates face, right-click rotates axis)=(Ľavý klik otáča stranu, pravý klik otáča os)

View File

@ -0,0 +1,8 @@
# textdomain: sethome
Can use /sethome and /home=Môžeš použivať /sethome a /home
Teleport you to your home point=Teleportuj sa domov
Teleported to home!=Teleportovaný domov!
Set a home using /sethome=Nastav si domov použitím /sethome
Set your home point=Nastaviť si domov
Home set!=Domov nastavený!
Player not found!=Hráč nenájdený!

View File

@ -0,0 +1,2 @@
# textdomain:sfinv
Crafting=Vytváranie

View File

@ -0,0 +1,145 @@
# textdomain: stairs
Glass Stair=Sklenené schod
Glass Slab=Sklenený stupienok
Inner Glass Stair=Vnútorný sklenené schod
Outer Glass Stair=Vonkajší sklenené schod
Obsidian Glass Stair=Obsidiánové sklenené schod
Obsidian Glass Slab=Obsidiánový sklenený stupienok
Inner Obsidian Glass Stair=Vnútorný obsidiánové sklenené schod
Outer Obsidian Glass Stair=Vonkajší obsidiánové sklenené schod
Wooden Stair=Drevené schod
Inner Wooden Stair=Vnútorný drevené schod
Outer Wooden Stair=Vonkajší drevené schod
Wooden Slab=Drevený stupienok
Jungle Wood Stair=Drevené schod z džungľového dreva
Inner Jungle Wood Stair=Vnútorný drevené schod z džungľového dreva
Outer Jungle Wood Stair=Vonkajší drevené schod z džungľového dreva
Jungle Wood Slab=Stupienok z džungľového dreva
Pine Wood Stair=Drevené schod z borovicového dreva
Inner Pine Wood Stair=Vnútorný drevené schod z borovicového dreva
Outer Pine Wood Stair=Vonkajší drevené schod z borovicového dreva
Pine Wood Slab=Stupienok z borovicového dreva
Acacia Wood Stair=Drevené schod z akáciového dreva
Inner Acacia Wood Stair=Vnútorný drevené schod z akáciového dreva
Outer Acacia Wood Stair=Vonkajší drevené schod z akáciového dreva
Acacia Wood Slab=Stupienok z akáciového dreva
Aspen Wood Stair=Drevené schod z osiky
Inner Aspen Wood Stair=Vnútorný drevené schod z osiky
Outer Aspen Wood Stair=Vonkajší drevené schod z osiky
Aspen Wood Slab=Stupienok z osiky
Stone Stair=Kamenné schod
Inner Stone Stair=Vnútorný kamenné schod
Outer Stone Stair=Vonkajší kamenné schod
Stone Slab=Kamenný stupienok
Cobblestone Stair=Schod z dlažbového kameňa
Inner Cobblestone Stair=Vnútorný schod z dlažbového kameňa
Outer Cobblestone Stair=Vonkajší schod z dlažbového kameňa
Cobblestone Slab=Stupienok z dlažbového kameňa
Mossy Cobblestone Stair=Schod dlažbového kameňa obrastené machom
Inner Mossy Cobblestone Stair=Vnútorný schod dlažbového kameňa obrastené machom
Outer Mossy Cobblestone Stair=Vonkajší schod dlažbového kameňa obrastené machom
Mossy Cobblestone Slab=Stupienok z dlažbového kameňa obrastený machom
Stone Brick Stair=Schod z kamenných tehál
Inner Stone Brick Stair=Vnútorný schod z kamenných tehál
Outer Stone Brick Stair=Vonkajší schod z kamenných tehál
Stone Brick Slab=Stupienok z kamenných tehál
Stone Block Stair=Schod z kameňa
Inner Stone Block Stair=Vnútorný schod z kameňa
Outer Stone Block Stair=Vonkajší schod z kameňa
Stone Block Slab=Stupienok z kameňa
Desert Stone Stair=Schod z púštneho kameňa
Inner Desert Stone Stair=Vnútorný schod z púštneho kameňa
Outer Desert Stone Stair=Vonkajší schod z púštneho kameňa
Desert Stone Slab=Stupienok z púštneho kameňa
Desert Cobblestone Stair=Schod z púštneho dlažbového kameňa
Inner Desert Cobblestone Stair=Vnútorný schod z púštneho dlažbového kameňa
Outer Desert Cobblestone Stair=Vonkajší schod z púštneho dlažbového kameňa
Desert Cobblestone Slab=Stupienok z púštneho dlažbového kameňa
Desert Stone Brick Stair=Schod z tehiel z púštneho kameňa
Inner Desert Stone Brick Stair=Vnútorný schod z tehiel z púštneho kameňa
Outer Desert Stone Brick Stair=Vonkajší schod z tehiel z púštneho kameňa
Desert Stone Brick Slab=Stupienok z tehiel z púštneho kameňa
Desert Stone Block Stair=Schod z blokov púštneho kameňa
Inner Desert Stone Block Stair=Vnútorný schod z blokov púštneho kameňa
Outer Desert Stone Block Stair=Vonkajší schod z blokov púštneho kameňa
Desert Stone Block Slab=Stupienok z blokov púštneho kameňa
Sandstone Stair=Schod z pieskovca
Inner Sandstone Stair=Vnútorný schod z pieskovca
Outer Sandstone Stair=Vonkajší schod z pieskovca
Sandstone Slab=Stupienok z pieskovca
Sandstone Brick Stair=Schod z tehál pieskovca
Inner Sandstone Brick Stair=Vnútorný schod z tehál pieskovca
Outer Sandstone Brick Stair=Vonkajší schod z tehál pieskovca
Sandstone Brick Slab=Stupienok z tehál pieskovca
Sandstone Block Stair=Schod z blokov pieskovca
Inner Sandstone Block Stair=Vnútorný schod z blokov pieskovca
Outer Sandstone Block Stair=Vonkajší schod z blokov pieskovca
Sandstone Block Slab=Stupienok z blokov pieskovca
Desert Sandstone Stair=Schod z púštneho pieskovca
Inner Desert Sandstone Stair=Vnútorný schod z púštneho pieskovca
Outer Desert Sandstone Stair=Vonkajší schod z púštneho pieskovca
Desert Sandstone Slab=Stupienok z púštneho pieskovca
Desert Sandstone Brick Stair=Schod z tehál z púštneho pieskovca
Inner Desert Sandstone Brick Stair=Vnútorný schod z tehál z púštneho pieskovca
Outer Desert Sandstone Brick Stair=Vonkajší schod z tehál z púštneho pieskovca
Desert Sandstone Brick Slab=Stupienok z tehál z púštneho pieskovca
Desert Sandstone Block Stair=Schod z blokov púštneho pieskovca
Inner Desert Sandstone Block Stair=Vnútorný schod z blokov púštneho pieskovca
Outer Desert Sandstone Block Stair=Vonkajší schod z blokov púštneho pieskovca
Desert Sandstone Block Slab=Stupienok z blokov púštneho pieskovca
Silver Sandstone Stair=Schod zo strieborného pieskovca
Inner Silver Sandstone Stair=Vnútorný schod zo strieborného pieskovca
Outer Silver Sandstone Stair=Vonkajší schod zo strieborného pieskovca
Silver Sandstone Slab=Stupienok zo strieborného pieskovca
Silver Sandstone Brick Stair=Schod z tehál zo strieborného pieskovca
Inner Silver Sandstone Brick Stair=Vnútorný schod z tehál zo strieborného pieskovca
Outer Silver Sandstone Brick Stair=Vonkajší schod z tehál zo strieborného pieskovca
Silver Sandstone Brick Slab=Stupienok z tehál zo strieborného pieskovca
Silver Sandstone Block Stair=Schod z blokov strieborného pieskovca
Inner Silver Sandstone Block Stair=Vnútorný schod z blokov strieborného pieskovca
Outer Silver Sandstone Block Stair=Vonkajší schod z blokov strieborného pieskovca
Silver Sandstone Block Slab=Stupienok z blokov strieborného pieskovca
Obsidian Stair=Schod z obsidiánu
Inner Obsidian Stair=Vnútorný schod z obsidiánu
Outer Obsidian Stair=Vonkajší schod z obsidiánu
Obsidian Slab=Stupienok z obsidiánu
Obsidian Brick Stair=Schod z tehál obsidiánu
Inner Obsidian Brick Stair=Vnútorný schod z tehál obsidiánu
Outer Obsidian Brick Stair=Vonkajší schod z tehál obsidiánu
Obsidian Brick Slab=Stupienok z tehál obsidiánu
Obsidian Block Stair=Schod z bloku obsidiánu
Inner Obsidian Block Stair=Vnútorný schod z bloku obsidiánu
Outer Obsidian Block Stair=Vonkajší schod z bloku obsidiánu
Obsidian Block Slab=Stupienok z bloku obsidiánu
Brick Stair=Schod z tehál
Inner Brick Stair=Vnútorný schod z tehál
Outer Brick Stair=Vonkajší schod z tehál
Brick Slab=Stupienok z tehál
Steel Block Stair=Oceľový schod
Inner Steel Block Stair=Vnútorný oceľový schod
Outer Steel Block Stair=Vonkajší oceľový schod
Steel Block Slab=Oceľový stupienok
Tin Block Stair=Cínový schod
Inner Tin Block Stair=Vnútorný cínový schod
Outer Tin Block Stair=Vonkajší cínový schod
Tin Block Slab=Cínový stupienok
Copper Block Stair=Medený schod
Inner Copper Block Stair=Vnútorný medený schod
Outer Copper Block Stair=Vonkajší medený schod
Copper Block Slab=Medený stupienok
Bronze Block Stair=Bronzový schod
Inner Bronze Block Stair=Vnútorný bronzový schod
Outer Bronze Block Stair=Vonkajší bronzový schod
Bronze Block Slab=Bronzový stupienok
Gold Block Stair=Zlatý schod
Inner Gold Block Stair=Vnútorný zlatý schod
Outer Gold Block Stair=Vonkajší zlatý schod
Gold Block Slab=Zlatý stupienok
Ice Stair=Ľadový schod
Inner Ice Stair=Vnútorný ľadový schod
Outer Ice Stair=Vonkajší ľadový schod
Ice Slab=Ľadový stupienok
Snow Block Stair=Snehový schod
Inner Snow Block Stair=Vnútorný snehový schod
Outer Snow Block Stair=Vonkajší snehový schod
Snow Block Slab=Snehový stupienok

View File

@ -165,7 +165,7 @@ local function entity_physics(pos, radius, drops)
if obj:is_player() then
local dir = vector.normalize(vector.subtract(obj_pos, pos))
local moveoff = vector.multiply(dir, 2 / dist * radius)
obj:add_player_velocity(moveoff)
obj:add_velocity(moveoff)
obj:set_hp(obj:get_hp() - damage)
else
@ -434,7 +434,7 @@ minetest.register_node("tnt:boom", {
light_source = default.LIGHT_MAX,
walkable = false,
drop = "",
groups = {dig_immediate = 3},
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
-- unaffected by explosions
on_blast = function() end,
})
@ -531,7 +531,8 @@ minetest.register_node("tnt:gunpowder_burning", {
groups = {
dig_immediate = 2,
attached_node = 1,
connect_to_raillike = minetest.raillike_group("gunpowder")
connect_to_raillike = minetest.raillike_group("gunpowder"),
not_in_creative_inventory = 1
},
sounds = default.node_sound_leaves_defaults(),
on_timer = function(pos, elapsed)
@ -678,7 +679,7 @@ function tnt.register_tnt(def)
light_source = 5,
drop = "",
sounds = default.node_sound_wood_defaults(),
groups = {falling_node = 1},
groups = {falling_node = 1, not_in_creative_inventory = 1},
on_timer = function(pos, elapsed)
tnt.boom(pos, def)
end,

View File

@ -0,0 +1,4 @@
# textdomain: tnt
Gun Powder=Pušný prach
TNT Stick=Časť TNT
TNT=TNT

View File

@ -0,0 +1,8 @@
# textdomain: vessels
Vessels Shelf=Polica na fľašky
Empty Glass Bottle=Prázdna sklenená fľaša
Empty Drinking Glass=Prázdny pohár na pitie
Empty Heavy Steel Bottle=Prázdna oceľová fľaša
Glass Fragments=Časti skla
Empty Vessels Shelf=Prázdna polica na fľašky
Vessels Shelf (@1 items)=Polica na fľašky (@1 položka/y)

View File

@ -0,0 +1,4 @@
# textdomain: walls
Cobblestone Wall=Múr z dlažbových kociek
Mossy Cobblestone Wall=Múr z dlažbových kociek obrastených machom
Desert Cobblestone Wall=Múr z púštnych dlažbových kociek

View File

@ -9,7 +9,7 @@ Cyan Wool=Голубая Шерсть
Dark Green Wool=Тёмно-Зелёная Шерсть
Green Wool=Зелёная Шерсть
Yellow Wool=Жёлтая Шерсть
Brown Wool=Бурая Шерсть
Brown Wool=Коричневая Шерсть
Orange Wool=Оранжевая Шерсть
Red Wool=Красная Шерсть
Magenta Wool=Пурпурная Шерсть

View File

@ -0,0 +1,16 @@
# textdomain: wool
White Wool=Biela vlna
Grey Wool=Šedá vlna
Dark Grey Wool=Tmavošedá vlna
Black Wool=Čierna vlna
Violet Wool=Fialová vlna
Blue Wool=Modrá vlna
Cyan Wool=Tyrkysová vlna
Dark Green Wool=Tmavozelená vlna
Green Wool=Zelená vlna
Yellow Wool=Žltá vlna
Brown Wool=Hnedá vlna
Orange Wool=Oranžová vlna
Red Wool=Červená vlna
Magenta Wool=Purpurová vlna
Pink Wool=Ružová vlna

View File

@ -0,0 +1,6 @@
# textdomain: xpanes
Glass Pane=Tabuľa skla
Obsidian Glass Pane=Tabuľa obsidiánového skla
Steel Bars=Oceľové mreže
Steel Bar Door=Dvere z oceľových mreží
Steel Bar Trapdoor=Padajúce dvere z oceľových mreží

View File

@ -27,7 +27,7 @@ end
mobkit.terminal_velocity = sqrt(2*-mobkit.gravity*20) -- 20 meter fall = dead
mobkit.safe_velocity = sqrt(2*-mobkit.gravity*5) -- 5 m safe fall
local abr = minetest.get_mapgen_setting('active_block_range')
local abr = tonumber(minetest.get_mapgen_setting('active_block_range')) or 3
local neighbors ={
{x=1,z=0},
@ -40,7 +40,7 @@ local neighbors ={
{x=1,z=-1}
}
-- UTILITY FUNCTIONS
function mobkit.dot(v1,v2)
@ -80,7 +80,7 @@ end
function mobkit.is_pos_in_box(pos,bpos,box)
return pos.x > bpos.x+box[1] and pos.x < bpos.x+box[4] and
pos.y > bpos.y+box[2]+0.5 and pos.y < bpos.y+box[5]+0.5 and
pos.y > bpos.y+box[2] and pos.y < bpos.y+box[5] and
pos.z > bpos.z+box[3] and pos.z < bpos.z+box[6]
end
@ -104,7 +104,7 @@ function mobkit.get_stand_pos(thing) -- thing can be luaentity or objectref.
elseif type(thing) == 'userdata' then
pos = thing:get_pos()
colbox = thing:get_properties().collisionbox
else
else
return false
end
return mobkit.pos_shift(pos,{y=colbox[2]+0.01}), pos
@ -116,7 +116,7 @@ function mobkit.set_acceleration(thing,vec,limit)
vec.x=mobkit.minmax(vec.x,limit)
vec.y=mobkit.minmax(vec.y,limit)
vec.z=mobkit.minmax(vec.z,limit)
thing:set_acceleration(vec)
end
@ -142,15 +142,15 @@ function mobkit.get_nodes_in_area(pos1,pos2,full)
local npos2=mobkit.get_node_pos(pos2)
local result = {}
local cnt = 0 -- safety
local sx = (pos2.x<pos1.x) and -1 or 1
local sz = (pos2.z<pos1.z) and -1 or 1
local sy = (pos2.y<pos1.y) and -1 or 1
local x=npos1.x-sx
local z=npos1.z-sz
local y=npos1.y-sy
repeat
x=x+sx
z=npos1.z-sz
@ -159,7 +159,7 @@ function mobkit.get_nodes_in_area(pos1,pos2,full)
y=npos1.y-sy
repeat
y=y+sy
local pos = {x=x,y=y,z=z}
local node = mobkit.nodeatpos(pos)
if node then
@ -169,17 +169,17 @@ function mobkit.get_nodes_in_area(pos1,pos2,full)
result[node] = true
end
end
cnt=cnt+1
if cnt > 125 then
if cnt > 125 then
minetest.chat_send_all('get_nodes_in_area: area too big ')
return result
end
until y==npos2.y
until z==npos2.z
until x==npos2.x
return result
end
@ -193,12 +193,12 @@ function mobkit.get_hitbox_bottom(self)
{x=pos.x+self.collisionbox[4],y=pos.y+y,z=pos.z+self.collisionbox[6]},
}
end
function mobkit.get_node_height(pos)
local npos = mobkit.get_node_pos(pos)
local node = mobkit.nodeatpos(npos)
if node == nil then return nil end
if node.walkable then
if node.drawtype == 'nodebox' then
if node.node_box and node.node_box.type == 'fixed' then
@ -208,7 +208,7 @@ function mobkit.get_node_height(pos)
return npos.y + node.node_box.fixed[1][5] ,0, false
else
return npos.y + 0.5,1, false -- todo handle table of boxes
end
end
elseif node.node_box and node.node_box.type == 'leveled' then
return minetest.get_node_level(pos)/64-0.5+mobkit.get_node_pos(pos).y, 0, false
else
@ -220,7 +220,7 @@ function mobkit.get_node_height(pos)
else
local liquidflag = false
if node.drawtype == 'liquid' then liquidflag = true end
return npos.y-0.5,-1,liquidflag
return npos.y-0.5,-1,liquidflag
end
end
@ -228,18 +228,18 @@ end
-- steps(optional) number of recursion steps; default=3
-- dir(optional) is 1=up, -1=down, 0=both; default=0
-- liquidflag(forbidden) never provide this parameter.
function mobkit.get_terrain_height(pos,steps,dir,liquidflag) --dir is 1=up, -1=down, 0=both
function mobkit.get_terrain_height(pos,steps,dir,liquidflag) --dir is 1=up, -1=down, 0=both
steps = steps or 3
dir = dir or 0
local h,f,l = mobkit.get_node_height(pos)
if h == nil then return nil end
if l then liquidflag = true end
if f==0 then
if f==0 then
return h, liquidflag
end
if dir==0 or dir==f then
steps = steps - 1
if steps <=0 then return nil end
@ -258,7 +258,7 @@ function mobkit.get_spawn_pos_abr(dtime,intrvl,radius,chance,reduction)
local vel = plyr:get_player_velocity()
local spd = vector.length(vel)
chance = (1-chance) * 1/(spd*0.75+1)
local yaw
if spd > 1 then
-- spawn in the front arc
@ -300,15 +300,15 @@ function mobkit.turn2yaw(self,tyaw,rate)
local yaw = self.object:get_yaw()
yaw = yaw+pi
tyaw=(tyaw+pi)%(pi*2)
local step=min(self.dtime*rate,abs(tyaw-yaw)%(pi*2))
local dir = abs(tyaw-yaw)>pi and -1 or 1
dir = tyaw>yaw and dir*1 or dir * -1
local nyaw = (yaw+step*dir)%(pi*2)
self.object:set_yaw(nyaw-pi)
if nyaw==tyaw then return true, nyaw-pi
else return false, nyaw-pi end
end
@ -337,9 +337,9 @@ end
-- object has reached the destination if dest is in the rear half plane.
function mobkit.is_there_yet2d(pos,dir,dest) -- obj positon; facing vector; destination position
local c = -dir.x*pos.x-dir.z*pos.z -- the constant
if dir.z > 0 then
local c = -dir.x*pos.x-dir.z*pos.z -- the constant
if dir.z > 0 then
return dest.z <= (-dir.x*dest.x - c)/dir.z -- line equation
elseif dir.z < 0 then
return dest.z >= (-dir.x*dest.x - c)/dir.z
@ -350,7 +350,7 @@ function mobkit.is_there_yet2d(pos,dir,dest) -- obj positon; facing vector; dest
else
return false
end
end
function mobkit.isnear3d(p1,p2,thresh)
@ -365,9 +365,9 @@ function mobkit.get_box_height(thing)
if type(thing) == 'table' then thing = thing.object end
local colbox = thing:get_properties().collisionbox
local height
if colbox then height = colbox[5]-colbox[2]
if colbox then height = colbox[5]-colbox[2]
else height = 0.1 end
return height > 0 and height or 0.1
end
@ -376,7 +376,7 @@ function mobkit.is_alive(thing) -- thing can be luaentity or objectref.
if not mobkit.exists(thing) then return false end
if type(thing) == 'table' then return thing.hp > 0 end
if thing:is_player() then return thing:get_hp() > 0
else
else
local lua = thing:get_luaentity()
local hp = lua and lua.hp or nil
return hp and hp > 0
@ -386,9 +386,9 @@ end
function mobkit.exists(thing)
if not thing then return false end
if type(thing) == 'table' then thing=thing.object end
if type(thing) == 'userdata' then
if type(thing) == 'userdata' then
if thing:is_player() then
if thing:get_look_horizontal() then return true end
if thing:get_look_horizontal() then return true end
else
if thing:get_yaw() then return true end
end
@ -413,15 +413,17 @@ function mobkit.animate(self,anim)
if self.animation and self.animation[anim] then
if self._anim == anim then return end
self._anim=anim
local aparms = {}
if #self.animation[anim] > 0 then
aparms = self.animation[anim][random(#self.animation[anim])]
else
aparms = self.animation[anim]
end
self.object:set_animation(aparms.range,aparms.speed,0,aparms.loop)
aparms.frame_blend = aparms.frame_blend or 0
self.object:set_animation(aparms.range,aparms.speed,aparms.frame_blend,aparms.loop)
else
self._anim = nil
end
@ -430,20 +432,21 @@ end
function mobkit.make_sound(self, sound)
local spec = self.sounds and self.sounds[sound]
local param_table = {object=self.object}
if type(spec) == 'table' then
--pick random sound if it's a spec for random sounds
if #spec > 0 then spec = spec[random(#spec)] end
--returns value or a random value within the range [value[1], value[2])
local function in_range(value)
return type(value) == 'table' and value[1]+random()*(value[2]-value[1]) or value
end
--pick random values within a range if they're a table
param_table.gain = in_range(spec.gain)
param_table.fade = in_range(spec.fade)
param_table.pitch = in_range(spec.pitch)
return minetest.sound_play(spec.name, param_table)
end
return minetest.sound_play(spec, param_table)
end
@ -458,7 +461,7 @@ function mobkit.is_neighbor_node_reachable(self,neighbor) -- todo: take either n
if height and abs(height-pos.y) <= self.jump_height then
tpos.y = height
height = height - pos.y
-- don't cut corners
if neighbor % 2 == 0 then -- diagonal neighbors are even
local n2 = neighbor-1 -- left neighbor never < 0
@ -472,7 +475,7 @@ function mobkit.is_neighbor_node_reachable(self,neighbor) -- todo: take either n
h2 = mobkit.get_terrain_height(t2,recursteps)
if h2 and h2 - pos.y > 0.02 then return end
end
-- check headroom
if tpos.y+self.height-pos.y > 1 then -- if head in next node above, else no point checking headroom
local snpos = mobkit.get_node_pos(pos)
@ -480,17 +483,17 @@ function mobkit.is_neighbor_node_reachable(self,neighbor) -- todo: take either n
local pos2 = {x=tpos.x,y=tpos.y+self.height,z=tpos.z} -- target head pos
local nodes = mobkit.get_nodes_in_area(pos1,pos2,true)
for p,node in pairs(nodes) do
if snpos.x==p.x and snpos.z==p.z then
if snpos.x==p.x and snpos.z==p.z then
if node.name=='ignore' or node.walkable then return end
else
if node.name=='ignore' or
if node.name=='ignore' or
(node.walkable and mobkit.get_node_height(p)>tpos.y+0.001) then return end
end
end
end
return height, tpos, liquidflag
else
return
@ -506,11 +509,11 @@ function mobkit.get_next_waypoint(self,tpos)
if #self.pos_history > 2 then table.remove(self.pos_history,#self.pos_history) end
end
local nogopos = self.pos_history[2]
local height, pos2, liquidflag = mobkit.is_neighbor_node_reachable(self,neighbor)
--minetest.chat_send_all('pos2 ' .. minetest.serialize(pos2))
--minetest.chat_send_all('nogopos ' .. minetest.serialize(nogopos))
if height and not liquidflag
--minetest.chat_send_all('nogopos ' .. minetest.serialize(nogopos))
if height and not liquidflag
and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then
local heightl = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-1))
@ -531,25 +534,25 @@ function mobkit.get_next_waypoint(self,tpos)
for i=1,3 do
-- scan left
local height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-i*self.path_dir))
if height and not liq
if height and not liq
and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then
update_pos_history(self,pos2)
return height,pos2
end
return height,pos2
end
-- scan right
height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,i*self.path_dir))
if height and not liq
if height and not liq
and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then
update_pos_history(self,pos2)
return height,pos2
return height,pos2
end
end
--scan rear
height, pos2, liquidflag = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,4))
if height and not liquidflag
if height and not liquidflag
and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then
update_pos_history(self,pos2)
return height,pos2
return height,pos2
end
end
-- stuck condition here
@ -562,7 +565,7 @@ function mobkit.get_next_waypoint_fast(self,tpos,nogopos)
local dir=vector.direction(pos,tpos)
local neighbor = mobkit.dir2neighbor(dir)
local height, pos2, liquidflag = mobkit.is_neighbor_node_reachable(self,neighbor)
if height and not liquidflag then
local fast = false
heightl = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-1))
@ -593,19 +596,19 @@ end
function mobkit.goto_next_waypoint(self,tpos)
local height, pos2 = mobkit.get_next_waypoint(self,tpos)
if not height then return false end
if height <= 0.01 then
local yaw = self.object:get_yaw()
local tyaw = minetest.dir_to_yaw(vector.direction(self.object:get_pos(),pos2))
if abs(tyaw-yaw) > 1 then
mobkit.lq_turn2pos(self,pos2)
mobkit.lq_turn2pos(self,pos2)
end
mobkit.lq_dumbwalk(self,pos2)
else
mobkit.lq_turn2pos(self,pos2)
mobkit.lq_dumbjump(self,height)
mobkit.lq_turn2pos(self,pos2)
mobkit.lq_dumbjump(self,height)
end
return true
end
@ -618,7 +621,7 @@ function mobkit.go_forward_horizontal(self,speed) -- sets velocity in yaw direct
self.object:set_velocity(vel)
end
function mobkit.drive_to_pos(self,tpos,speed,turn_rate,dist)
function mobkit.drive_to_pos(self,tpos,speed,turn_rate,dist)
local pos=self.object:get_pos()
dist = dist or 0.2
if mobkit.isnear2d(pos,tpos,dist) then return true end
@ -634,7 +637,7 @@ function mobkit.timer(self,s) -- returns true approx every s seconds
if t2>t1 and t2%s==0 then return true end
end
-- Memory functions.
-- Memory functions.
-- Stuff in memory is serialized, never try to remember objectrefs.
function mobkit.remember(self,key,val)
self.memory[key]=val
@ -749,20 +752,20 @@ local function sensors()
return function(self)
timer=timer-self.dtime
if timer < 0 then
pulse = pulse + 1 -- do full range every third scan
local range = self.view_range
if pulse > 2 then
if pulse > 2 then
pulse = 1
else
range = self.view_range*0.5
end
local pos = self.object:get_pos()
--local tim = minetest.get_us_time()
self.nearby_objects = minetest.get_objects_inside_radius(pos, range)
--minetest.chat_send_all(minetest.get_us_time()-tim)
for i,obj in ipairs(self.nearby_objects) do
for i,obj in ipairs(self.nearby_objects) do
if obj == self.object then
table.remove(self.nearby_objects,i)
break
@ -789,19 +792,19 @@ function mobkit.physics(self)
y=vel.y,
z=vel.z > 0.2 and vel.z*mobkit.friction or 0})
end
-- bounciness
if self.springiness and self.springiness > 0 then
local vnew = vector.new(vel)
if not self.collided then -- ugly workaround for inconsistent collisions
for _,k in ipairs({'y','z','x'}) do
if vel[k]==0 and abs(self.lastvelocity[k])> 0.1 then
vnew[k]=-self.lastvelocity[k]*self.springiness
for _,k in ipairs({'y','z','x'}) do
if vel[k]==0 and abs(self.lastvelocity[k])> 0.1 then
vnew[k]=-self.lastvelocity[k]*self.springiness
end
end
end
if not vector.equals(vel,vnew) then
self.collided = true
else
@ -810,10 +813,10 @@ function mobkit.physics(self)
end
self.collided = false
end
self.object:set_velocity(vnew)
end
-- buoyancy
local surface = nil
local surfnodename = nil
@ -841,7 +844,7 @@ function mobkit.physics(self)
-- self.isinliquid = false
self.object:set_acceleration({x=0,y=mobkit.gravity,z=0})
end
end
function mobkit.vitals(self)
@ -851,17 +854,17 @@ function mobkit.vitals(self)
if velocity_delta > mobkit.safe_velocity then
self.hp = self.hp - floor(self.max_hp * min(1, velocity_delta/mobkit.terminal_velocity))
end
-- vitals: oxygen
if self.lung_capacity then
local colbox = self.object:get_properties().collisionbox
local headnode = mobkit.nodeatpos(mobkit.pos_shift(self.object:get_pos(),{y=colbox[5]})) -- node at hitbox top
if headnode and headnode.drawtype == 'liquid' then
if headnode and headnode.drawtype == 'liquid' then
self.oxygen = self.oxygen - self.dtime
else
self.oxygen = self.lung_capacity
end
if self.oxygen <= 0 then self.hp=0 end -- drown
end
end
@ -878,7 +881,7 @@ function mobkit.actfunc(self, staticdata, dtime_s)
self.logic = self.logic or self.brainfunc
self.physics = self.physics or mobkit.physics
self.lqueue = {}
self.hqueue = {}
self.nearby_objects = {}
@ -889,28 +892,28 @@ function mobkit.actfunc(self, staticdata, dtime_s)
self.water_drag = self.water_drag or 1
local sdata = minetest.deserialize(staticdata)
if sdata then
if sdata then
for k,v in pairs(sdata) do
self[k] = v
end
end
if self.textures==nil then
local prop_tex = self.object:get_properties().textures
if prop_tex then self.textures=prop_tex end
end
if not self.memory then -- this is the initial activation
self.memory = {}
self.memory = {}
-- texture variation
if #self.textures > 1 then self.texture_no = random(#self.textures) end
end
if self.timeout and self.timeout>0 and dtime_s > self.timeout and next(self.memory)==nil then
self.object:remove()
end
-- apply texture
if self.textures and self.texture_no then
local props = {}
@ -927,7 +930,7 @@ function mobkit.actfunc(self, staticdata, dtime_s)
end
self.armor_groups.immortal = 1
self.object:set_armor_groups(self.armor_groups)
self.buoyancy = self.buoyancy or 0
self.oxygen = self.oxygen or self.lung_capacity
self.lastvelocity = {x=0,y=0,z=0}
@ -937,11 +940,11 @@ end
function mobkit.stepfunc(self,dtime) -- not intended to be modified
self.dtime = min(dtime,0.2)
self.height = mobkit.get_box_height(self)
-- physics comes first
-- self.object:set_acceleration({x=0,y=mobkit.gravity,z=0})
local vel = self.object:get_velocity()
-- if self.lastvelocity.y == vel.y then
-- if abs(self.lastvelocity.y-vel.y)<0.001 then
if self.lastvelocity.y==0 and vel.y==0 then
@ -949,7 +952,7 @@ function mobkit.stepfunc(self,dtime) -- not intended to be modified
else
self.isonground = false
end
self:physics()
if self.logic then
@ -957,7 +960,7 @@ function mobkit.stepfunc(self,dtime) -- not intended to be modified
self:logic()
execute_queues(self)
end
self.lastvelocity = self.object:get_velocity()
self.time_total=self.time_total+self.dtime
end
@ -981,8 +984,8 @@ function mobkit.lq_idle(self,duration,anim)
anim = anim or 'stand'
local init = true
local func=function(self)
if init then
mobkit.animate(self,anim)
if init then
mobkit.animate(self,anim)
init=false
end
duration = duration-self.dtime
@ -998,7 +1001,7 @@ function mobkit.lq_dumbwalk(self,dest,speed_factor)
mobkit.animate(self,'walk')
timer = timer - self.dtime
if timer < 0 then return true end
local pos = mobkit.get_stand_pos(self)
local y = self.object:get_velocity().y
@ -1008,7 +1011,7 @@ function mobkit.lq_dumbwalk(self,dest,speed_factor)
-- if abs(dest.y-pos.y) > 0.1 then -- isonground too slow for speeds > 4
self.object:set_velocity({x=0,y=y,z=0})
end
return true
return true
end
if self.isonground then
@ -1040,7 +1043,7 @@ function mobkit.lq_dumbjump(self,height,anim)
else -- the eagle has landed
return true
end
else
else
local dir = minetest.yaw_to_dir(yaw)
local vel = self.object:get_velocity()
if self.lastvelocity.y < 0.9 then
@ -1090,7 +1093,7 @@ function mobkit.lq_freejump(self)
end
function mobkit.lq_jumpattack(self,height,target)
local phase=1
local phase=1
local timer=0.5
local tgtbox = target:get_properties().collisionbox
local func=function(self)
@ -1121,11 +1124,11 @@ function mobkit.lq_jumpattack(self,height,target)
local dir = minetest.yaw_to_dir(yaw)
local apos = mobkit.pos_translate2d(pos,yaw,self.attack.range)
if mobkit.is_pos_in_box(apos,tgtpos,tgtbox, self.offset) then --bite
if mobkit.is_pos_in_box(apos,tgtpos,tgtbox) then --bite
target:punch(self.object,1,self.attack)
-- bounce off
local vy = self.object:get_velocity().y
self.object:set_velocity({x=dir.x*-3,y=vy,z=dir.z*-3})
self.object:set_velocity({x=dir.x*-3,y=vy,z=dir.z*-3})
-- play attack sound if defined
mobkit.make_sound(self,'attack')
phase=4
@ -1158,11 +1161,11 @@ end
function mobkit.dumbstep(self,height,tpos,speed_factor,idle_duration)
if height <= 0.001 then
mobkit.lq_turn2pos(self,tpos)
mobkit.lq_turn2pos(self,tpos)
mobkit.lq_dumbwalk(self,tpos,speed_factor)
else
mobkit.lq_turn2pos(self,tpos)
mobkit.lq_dumbjump(self,height)
mobkit.lq_turn2pos(self,tpos)
mobkit.lq_dumbjump(self,height)
end
idle_duration = idle_duration or 6
mobkit.lq_idle(self,random(ceil(idle_duration*0.5),idle_duration))
@ -1192,7 +1195,7 @@ function mobkit.hq_follow0(self,tgtobj) -- probably delete this one
if not neighbor then return true end --temp debug
local height, tpos = mobkit.is_neighbor_node_reachable(self,neighbor)
if height then mobkit.dumbstep(self,height,tpos)
else
else
for i=1,4 do --scan left
height, tpos = mobkit.is_neighbor_node_reachable(self,(8+neighbor-i-1)%8+1)
if height then mobkit.dumbstep(self,height,tpos)
@ -1246,7 +1249,7 @@ function mobkit.hq_runfrom(self,prty,tgtobj)
local init=true
local timer=6
local func = function(self)
if not mobkit.is_alive(tgtobj) then return true end
if init then
timer = timer-self.dtime
@ -1256,7 +1259,7 @@ function mobkit.hq_runfrom(self,prty,tgtobj)
end
return
end
if mobkit.is_queue_empty_low(self) and self.isonground then
local pos = mobkit.get_stand_pos(self)
local opos = tgtobj:get_pos()
@ -1286,7 +1289,7 @@ function mobkit.hq_hunt(self,prty,tgtobj)
elseif dist > 3 then
mobkit.goto_next_waypoint(self,opos)
else
mobkit.hq_attack(self,prty+1,tgtobj)
mobkit.hq_attack(self,prty+1,tgtobj)
end
end
end
@ -1306,7 +1309,7 @@ function mobkit.hq_warn(self,prty,tgtobj)
local pos = mobkit.get_stand_pos(self)
local opos = tgtobj:get_pos()
local dist = vector.distance(pos,opos)
if dist > 11 then
return true
elseif dist < 4 or timer > 12 then -- too close man
@ -1315,7 +1318,7 @@ function mobkit.hq_warn(self,prty,tgtobj)
mobkit.hq_hunt(self,prty+1,tgtobj) -- priority
else
timer = timer+self.dtime
if mobkit.is_queue_empty_low(self) then
if mobkit.is_queue_empty_low(self) then
mobkit.lq_turn2pos(self,opos)
end
-- make noise in random intervals
@ -1335,8 +1338,8 @@ function mobkit.hq_die(self)
local timer = 5
local start = true
local func = function(self)
if start then
mobkit.lq_fallover(self)
if start then
mobkit.lq_fallover(self)
self.logic = function(self) end -- brain dead as well
start=false
end
@ -1354,13 +1357,13 @@ function mobkit.hq_attack(self,prty,tgtobj)
-- local tpos = tgtobj:get_pos()
local tpos = mobkit.get_stand_pos(tgtobj)
local dist = vector.distance(pos,tpos)
if dist > 3 then
if dist > 3 then
return true
else
mobkit.lq_turn2pos(self,tpos)
local height = tgtobj:is_player() and 0.35 or tgtobj:get_luaentity().height*0.6
if tpos.y+height>pos.y then
mobkit.lq_jumpattack(self,tpos.y+height-pos.y,tgtobj)
if tpos.y+height>pos.y then
mobkit.lq_jumpattack(self,tpos.y+height-pos.y,tgtobj)
else
mobkit.lq_dumbwalk(self,mobkit.pos_shift(tpos,{x=random()-0.5,z=random()-0.5}))
end
@ -1387,10 +1390,10 @@ function mobkit.hq_liquid_recovery(self,prty) -- scan for nearest land
if yaw>2*pi then
yaw = 0
radius=radius+1
if radius > self.view_range then
if radius > self.view_range then
self.hp = 0
return true
end
end
end
end
mobkit.queue_high(self,func,prty)
@ -1407,14 +1410,14 @@ function mobkit.hq_swimto(self,prty,tpos)
local pos2d = {x=pos.x,y=0,z=pos.z}
local dir=vector.normalize(vector.direction(pos2d,tpos))
local yaw = minetest.dir_to_yaw(dir)
if mobkit.timer(self,1) then
--perpendicular vectors: {-z,x};{z,-x}
local pos1 = mobkit.pos_shift(mobkit.pos_shift(pos,{x=-dir.z*offset,z=dir.x*offset}),dir)
local h,l = mobkit.get_terrain_height(pos1)
if h and h>pos.y then
mobkit.lq_freejump(self)
else
else
local pos2 = mobkit.pos_shift(mobkit.pos_shift(pos,{x=dir.z*offset,z=-dir.x*offset}),dir)
local h,l = mobkit.get_terrain_height(pos2)
if h and h>pos.y then
@ -1436,11 +1439,11 @@ end
-- MACROS
local function aqua_radar_dumb(pos,yaw,range,reverse)
range = range or 4
local function okpos(p)
local node = mobkit.nodeatpos(p)
if node then
if node.drawtype == 'liquid' then
if node then
if node.drawtype == 'liquid' then
local nodeu = mobkit.nodeatpos(mobkit.pos_shift(p,{y=1}))
local noded = mobkit.nodeatpos(mobkit.pos_shift(p,{y=-1}))
if (nodeu and nodeu.drawtype == 'liquid') or (noded and noded.drawtype == 'liquid') then
@ -1450,7 +1453,7 @@ local function aqua_radar_dumb(pos,yaw,range,reverse)
end
else
local h,l = mobkit.get_terrain_height(p)
if h then
if h then
local node2 = mobkit.nodeatpos({x=p.x,y=h+1.99,z=p.z})
if node2 and node2.drawtype == 'liquid' then return true, h end
else
@ -1461,12 +1464,12 @@ local function aqua_radar_dumb(pos,yaw,range,reverse)
return false
end
end
local fpos = mobkit.pos_translate2d(pos,yaw,range)
local ok,h = okpos(fpos)
if not ok then
local ffrom, fto, fstep
if reverse then
if reverse then
ffrom, fto, fstep = 3,1,-1
else
ffrom, fto, fstep = 1,3,1
@ -1478,9 +1481,9 @@ local function aqua_radar_dumb(pos,yaw,range,reverse)
if ok then return yaw-i,h end
end
return yaw+pi,h
else
else
return yaw, h
end
end
end
function mobkit.is_in_deep(target)
@ -1518,7 +1521,7 @@ function mobkit.hq_aqua_roam(self,prty,speed)
local vel = self.object:get_velocity()
vel.y = vel.y+1
self.object:set_velocity(vel)
end
end
if yaw ~= nyaw then
tyaw=nyaw
mobkit.hq_aqua_turn(self,prty+1,tyaw,speed)
@ -1532,7 +1535,7 @@ function mobkit.hq_aqua_roam(self,prty,speed)
if random(10)>=9 then tyaw=tyaw+random()*pi - pi*0.5 end
end
end
mobkit.turn2yaw(self,tyaw,3)
-- local yaw = self.object:get_yaw()
mobkit.go_forward_horizontal(self,speed)
@ -1572,7 +1575,7 @@ function mobkit.hq_aqua_attack(self,prty,tgtobj,speed)
local vel = self.object:get_velocity()
vel.y = vel.y+1
self.object:set_velocity(vel)
end
end
if yaw ~= nyaw then
tyaw=nyaw
mobkit.hq_aqua_turn(self,prty+1,tyaw,speed)
@ -1581,7 +1584,7 @@ function mobkit.hq_aqua_attack(self,prty,tgtobj,speed)
end
local tpos = tgtobj:get_pos()
local tyaw=minetest.dir_to_yaw(vector.direction(pos,tpos))
local tyaw=minetest.dir_to_yaw(vector.direction(pos,tpos))
mobkit.turn2yaw(self,tyaw,3)
local yaw = self.object:get_yaw()
if mobkit.timer(self,1) then

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.object
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

@ -14,7 +14,8 @@ petz.lay_egg = function(self)
end
local pos = self.object:get_pos()
if self.type_of_egg == "item" then
if math.random(1, petz.settings.lay_egg_chance) == 1 then
local lay_egg_timing = petz.settings.lay_egg_timing
if mobkit.timer(self, math.random(lay_egg_timing - (lay_egg_timing*0.2), lay_egg_timing+ (lay_egg_timing*0.2))) then
minetest.add_item(pos, "petz:"..self.type.."_egg") --chicken/duck/penguin egg!
petz.increase_egg_count(self)
end
@ -26,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,13 @@ function petz.set_initial_properties(self, staticdata, dtime_s)
petz.colorize(self, self.colorized)
end
end
--DELETE THIS BLOCK IN THE NEXT UPDATE -- FOR COMPATIBIITY PURPOSES FOR OLD CHICKENS ONLY>>>
if self.type == "chicken" and self.texture_no > 1 then
self.is_baby = mobkit.remember(self, "is_baby", true)
self.texture_no = 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

@ -62,6 +62,7 @@ petz.on_rightclick = function(self, clicker)
petz.capture(self, clicker, true)
minetest.chat_send_player("singleplayer", S("Your").." "..S(pet_name).." "..S("has been captured")..".")
elseif self.breed and wielded_item_name == petz.settings[self.type.."_breed"] and not(self.is_baby) then
minetest.chat_send_all("test="..petz.settings[self.type.."_breed"])
petz.breed(self, clicker, wielded_item, wielded_item_name)
elseif (wielded_item_name == "petz:dreamcatcher") and (self.tamed == true) and (self.is_pet == true) and is_owner then
petz.put_dreamcatcher(self, clicker, wielded_item, wielded_item_name)

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

@ -66,7 +66,17 @@ minetest.register_craftitem("petz:kennel", {
return
end
local pt_above = pointed_thing.above
if not(minetest.is_protected(pt_above, user:get_player_name())) then
local pos2 = {
x = pt_above.x + 3,
y = pt_above.y + 5,
z = pt_above.z + 4,
}
local player_name = user:get_player_name()
if petz.settings["disable_kennel"] then
minetest.chat_send_player(player_name, S("The placement of kennel was disabled."))
return
end
if not(minetest.is_area_protected(pt_above, pos2, player_name, 4)) then
minetest.place_schematic(pt_above, modpath..'/schematics/kennel.mts', 0, nil, true)
itemstack:take_item()
return itemstack
@ -194,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}
@ -202,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

@ -9,7 +9,10 @@ function petz.bh_create_anthill(self, pos)
if not self.create_anthill or pos.y > 8 then
return false
end
local node_name = mobkit.node_name_in(self, "below")
local node_name, pos_below = mobkit.node_name_in(self, "below")
if minetest.is_protected(pos_below, "") then --check for a non-protected node
return false
end
--Only construct on 'soil' or 'sand' nodes
if minetest.get_item_group(node_name, "soil") > 0 or minetest.get_item_group(node_name, "sand") > 0 then
local minp = {

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>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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