From a59fa8db018bb9b674b15982b4a3dd56ef3ade56 Mon Sep 17 00:00:00 2001 From: runs Date: Sat, 13 Jul 2019 20:15:40 +0200 Subject: [PATCH] modpack --- README.md | 4 +- mobkit/init.lua | 1269 +++++++++++++++++ mobkit/mobkit_api.txt | 461 ++++++ beaver_mobkit.lua => modpack.txt | 0 CHANGELOG.md => petz/CHANGELOG.md | 0 LICENSE.md => petz/LICENSE.md | 0 petz/README.md | 3 + api.lua => petz/api.lua | 0 chimp_mobkit.lua => petz/beaver_mobkit.lua | 0 behaviours.lua => petz/behaviours.lua | 0 calf_mobkit.lua => petz/calf_mobkit.lua | 0 chicken_mobkit.lua => petz/chicken_mobkit.lua | 0 clownfish_mobkit.lua => petz/chimp_mobkit.lua | 0 frog_mobkit.lua => petz/clownfish_mobkit.lua | 0 {docs => petz/docs}/images/baby_pony.png | Bin {docs => petz/docs}/images/beaver.png | Bin {docs => petz/docs}/images/beaver_dam.png | Bin {docs => petz/docs}/images/beaver_oil.png | Bin {docs => petz/docs}/images/brush.png | Bin {docs => petz/docs}/images/calf.png | Bin {docs => petz/docs}/images/chicken.png | Bin {docs => petz/docs}/images/chimp.png | Bin {docs => petz/docs}/images/clownfish.png | Bin .../docs}/images/duck_chicken_farm.png | Bin {docs => petz/docs}/images/ducky.png | Bin {docs => petz/docs}/images/fish_tank.png | Bin {docs => petz/docs}/images/frog.png | Bin {docs => petz/docs}/images/grizzly.png | Bin {docs => petz/docs}/images/hello.svg | 0 {docs => petz/docs}/images/kennel.png | Bin {docs => petz/docs}/images/kitty.png | Bin {docs => petz/docs}/images/lamb.png | Bin {docs => petz/docs}/images/lash.png | Bin {docs => petz/docs}/images/lion.png | Bin {docs => petz/docs}/images/panda.png | Bin {docs => petz/docs}/images/parrot.png | Bin {docs => petz/docs}/images/pet_bowl.png | Bin {docs => petz/docs}/images/petz_items.png | Bin {docs => petz/docs}/images/petz_logo.png | Bin {docs => petz/docs}/images/pigeon.png | Bin {docs => petz/docs}/images/piggy.png | Bin {docs => petz/docs}/images/pony.png | Bin {docs => petz/docs}/images/pony_breeding.png | Bin {docs => petz/docs}/images/puppy.png | Bin {docs => petz/docs}/images/squareball.png | Bin {docs => petz/docs}/images/tropicalfish.png | Bin {docs => petz/docs}/images/turtle.png | Bin {docs => petz/docs}/petz.md | 0 ducky_mobkit.lua => petz/ducky_mobkit.lua | 0 food.lua => petz/food.lua | 0 pigeon_mobkit.lua => petz/frog_mobkit.lua | 0 grizzly_mobkit.lua => petz/grizzly_mobkit.lua | 0 init.lua => petz/init.lua | 0 items.lua => petz/items.lua | 0 kitty_mobkit.lua => petz/kitty_mobkit.lua | 0 lamb_mobkit.lua => petz/lamb_mobkit.lua | 0 lamb_mobs_redo.lua => petz/lamb_mobs_redo.lua | 0 lion_mobkit.lua => petz/lion_mobkit.lua | 0 {locale => petz/locale}/petz.es.tr | 0 logo.xcf => petz/logo.xcf | Bin mobkit.lua => petz/mobkit.lua | 0 mobkit_plus.lua => petz/mobkit_plus.lua | 0 mobkit_spawn.lua => petz/mobkit_spawn.lua | 0 mod.conf => petz/mod.conf | 0 {models => petz/models}/petz_beaver.b3d | Bin {models => petz/models}/petz_beaver.blend | Bin {models => petz/models}/petz_beaver.blend1 | Bin {models => petz/models}/petz_beaver.obj | 0 {models => petz/models}/petz_calf.b3d | Bin {models => petz/models}/petz_calf.blend | Bin {models => petz/models}/petz_calf.blend1 | Bin {models => petz/models}/petz_calf.obj | 0 {models => petz/models}/petz_chicken.b3d | Bin {models => petz/models}/petz_chicken.blend | Bin {models => petz/models}/petz_chicken.blend1 | Bin {models => petz/models}/petz_chicken.obj | 0 {models => petz/models}/petz_chimp.b3d | Bin {models => petz/models}/petz_chimp.blend | Bin {models => petz/models}/petz_chimp.blend1 | Bin {models => petz/models}/petz_chimp.obj | 0 {models => petz/models}/petz_clownfish.b3d | Bin {models => petz/models}/petz_clownfish.blend | Bin {models => petz/models}/petz_clownfish.blend1 | Bin {models => petz/models}/petz_clownfish.obj | 0 {models => petz/models}/petz_ducky.b3d | Bin {models => petz/models}/petz_ducky.blend | Bin {models => petz/models}/petz_ducky.blend1 | Bin {models => petz/models}/petz_ducky.obj | 0 {models => petz/models}/petz_ducky_nest.b3d | Bin {models => petz/models}/petz_ducky_nest.blend | Bin .../models}/petz_ducky_nest.blend1 | Bin {models => petz/models}/petz_ducky_nest.obj | 0 .../models}/petz_ducky_nest_egg.b3d | Bin .../models}/petz_ducky_nest_egg.blend | Bin .../models}/petz_ducky_nest_egg.blend1 | Bin {models => petz/models}/petz_frog.b3d | Bin {models => petz/models}/petz_frog.blend | Bin {models => petz/models}/petz_frog.blend1 | Bin {models => petz/models}/petz_frog.obj | 0 {models => petz/models}/petz_grizzly.b3d | Bin {models => petz/models}/petz_grizzly.blend | Bin {models => petz/models}/petz_grizzly.blend1 | Bin {models => petz/models}/petz_kitty.b3d | Bin {models => petz/models}/petz_kitty.blend | Bin {models => petz/models}/petz_kitty.blend1 | Bin {models => petz/models}/petz_kitty.obj | 0 {models => petz/models}/petz_lamb.b3d | Bin {models => petz/models}/petz_lamb.blend | Bin {models => petz/models}/petz_lamb.blend1 | Bin {models => petz/models}/petz_lamb.obj | 0 {models => petz/models}/petz_lion | 0 {models => petz/models}/petz_lion.b3d | Bin {models => petz/models}/petz_lion.blend | Bin {models => petz/models}/petz_lion.blend1 | Bin {models => petz/models}/petz_lion.obj | 0 {models => petz/models}/petz_moth.blend | Bin {models => petz/models}/petz_moth.blend1 | Bin {models => petz/models}/petz_moth.obj | 0 {models => petz/models}/petz_panda.b3d | Bin {models => petz/models}/petz_panda.blend | Bin {models => petz/models}/petz_panda.blend1 | Bin {models => petz/models}/petz_panda.obj | 0 {models => petz/models}/petz_parrot.b3d | Bin {models => petz/models}/petz_parrot.blend | Bin {models => petz/models}/petz_parrot.blend1 | Bin {models => petz/models}/petz_parrot.obj | 0 {models => petz/models}/petz_pigeon.b3d | Bin {models => petz/models}/petz_pigeon.blend | Bin {models => petz/models}/petz_pigeon.blend1 | Bin {models => petz/models}/petz_pigeon.obj | 0 {models => petz/models}/petz_piggy.b3d | Bin {models => petz/models}/petz_piggy.blend | Bin {models => petz/models}/petz_piggy.blend1 | Bin {models => petz/models}/petz_piggy.obj | 0 {models => petz/models}/petz_pony | 0 {models => petz/models}/petz_pony.b3d | Bin {models => petz/models}/petz_pony.blend | Bin {models => petz/models}/petz_pony.blend1 | Bin {models => petz/models}/petz_pony.obj | 0 {models => petz/models}/petz_puppy.b3d | Bin {models => petz/models}/petz_puppy.blend | Bin {models => petz/models}/petz_puppy.blend1 | Bin {models => petz/models}/petz_puppy.obj | 0 {models => petz/models}/petz_tropicalfish.b3d | Bin .../models}/petz_tropicalfish.blend | Bin .../models}/petz_tropicalfish.blend1 | Bin {models => petz/models}/petz_tropicalfish.obj | 0 {models => petz/models}/petz_turtle.b3d | Bin {models => petz/models}/petz_turtle.blend | Bin {models => petz/models}/petz_turtle.blend1 | Bin {models => petz/models}/petz_turtle.obj | 0 {models => petz/models}/petz_wolf.b3d | Bin {models => petz/models}/petz_wolf.blend | Bin {models => petz/models}/petz_wolf.blend1 | Bin {models => petz/models}/petz_wolf.obj | 0 mount.lua => petz/mount.lua | 0 {nodeboxes => petz/nodeboxes}/petz_beaver.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_bowl.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_calf.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_castor.nbe | Bin .../nodeboxes}/petz_chicken.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_chimp.nbe | Bin .../nodeboxes}/petz_clownfish.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_cow.nbe | Bin .../nodeboxes}/petz_duck_egg.nbe | Bin .../nodeboxes}/petz_duck_nest.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_ducky.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_frog.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_kitty.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_lamb.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_lion.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_moth.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_panda.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_parrot.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_pigeon.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_piggy.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_pony.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_puppy.nbe | Bin .../nodeboxes}/petz_squirrel.nbe | Bin .../nodeboxes}/petz_tropicalfish.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_turtle.nbe | Bin {nodeboxes => petz/nodeboxes}/petz_wolf.nbe | Bin nodes.lua => petz/nodes.lua | 0 panda_mobkit.lua => petz/panda_mobkit.lua | 0 parrot_mobkit.lua => petz/parrot_mobkit.lua | 0 petz.conf => petz/petz.conf | 0 .../pigeon_mobkit.lua | 0 piggy_mobkit.lua => petz/piggy_mobkit.lua | 0 pony_mobkit.lua => petz/pony_mobkit.lua | 0 puppy_mobkit.lua => petz/puppy_mobkit.lua | 0 .../schematics}/beaver_dam.mts | Bin {schematics => petz/schematics}/kennel.mts | Bin settings.lua => petz/settings.lua | 0 {sounds => petz/sounds}/LICENSE.MD | 0 .../sounds}/petz_beaver_moaning.ogg | Bin {sounds => petz/sounds}/petz_beaver_sound.ogg | Bin {sounds => petz/sounds}/petz_brushing.ogg | Bin {sounds => petz/sounds}/petz_calf_moaning.ogg | Bin {sounds => petz/sounds}/petz_calf_moo.ogg | Bin .../sounds}/petz_chicken_cluck.ogg | Bin .../sounds}/petz_chicken_moaning.ogg | Bin {sounds => petz/sounds}/petz_chimp_hoo.ogg | Bin .../sounds}/petz_chimp_moaning.ogg | Bin .../sounds}/petz_default_punch.ogg | Bin .../sounds}/petz_ducky_moaning.ogg | Bin {sounds => petz/sounds}/petz_ducky_quack.ogg | Bin {sounds => petz/sounds}/petz_frog_croak.ogg | Bin .../sounds}/petz_grizzly_growl.ogg | Bin .../sounds}/petz_grizzly_moaning.ogg | Bin {sounds => petz/sounds}/petz_kitty_meow.ogg | Bin .../sounds}/petz_kitty_moaning.ogg | Bin {sounds => petz/sounds}/petz_lamb_bleat.ogg | Bin {sounds => petz/sounds}/petz_lamb_moaning.ogg | Bin {sounds => petz/sounds}/petz_lion_moaning.ogg | Bin {sounds => petz/sounds}/petz_lion_roar.ogg | Bin .../sounds}/petz_panda_moaning.ogg | Bin {sounds => petz/sounds}/petz_panda_sound.ogg | Bin {sounds => petz/sounds}/petz_parrot_chirp.ogg | Bin .../sounds}/petz_parrot_moaning.ogg | Bin .../sounds}/petz_pigeon_cooing.ogg | Bin .../sounds}/petz_pigeon_moaning.ogg | Bin .../sounds}/petz_piggy_moaning.ogg | Bin {sounds => petz/sounds}/petz_piggy_squeal.ogg | Bin {sounds => petz/sounds}/petz_pony_moaning.ogg | Bin {sounds => petz/sounds}/petz_pony_neigh.ogg | Bin {sounds => petz/sounds}/petz_puppy_bark.ogg | Bin .../sounds}/petz_puppy_moaning.ogg | Bin {sounds => petz/sounds}/petz_whip.ogg | Bin {sounds => petz/sounds}/petz_wolf_howl.ogg | Bin {sounds => petz/sounds}/petz_wolf_moaning.ogg | Bin spawn.lua => petz/spawn.lua | 0 .../textures}/petz_affinity_heart.png | Bin {textures => petz/textures}/petz_beaver.png | Bin .../textures}/petz_beaver_back.png | Bin .../textures}/petz_beaver_bottom.png | Bin .../textures}/petz_beaver_dam_branches.png | Bin .../textures}/petz_beaver_front.png | Bin .../textures}/petz_beaver_fur.png | Bin .../textures}/petz_beaver_left.png | Bin .../textures}/petz_beaver_oil.png | Bin .../textures}/petz_beaver_right.png | Bin .../textures}/petz_beaver_top.png | Bin {textures => petz/textures}/petz_beef.png | Bin .../textures}/petz_blue_stained_planks.png | Bin .../textures}/petz_bucket_milk.png | Bin {textures => petz/textures}/petz_calf.png | Bin {textures => petz/textures}/petz_calf2.png | Bin .../textures}/petz_calf2_back.png | Bin .../textures}/petz_calf2_bottom.png | Bin .../textures}/petz_calf2_front.png | Bin .../textures}/petz_calf2_left.png | Bin .../textures}/petz_calf2_right.png | Bin .../textures}/petz_calf2_top.png | Bin {textures => petz/textures}/petz_calf3.png | Bin .../textures}/petz_calf_back.png | Bin .../textures}/petz_calf_bottom.png | Bin .../textures}/petz_calf_front.png | Bin .../textures}/petz_calf_left.png | Bin .../textures}/petz_calf_right.png | Bin {textures => petz/textures}/petz_calf_top.png | Bin {textures => petz/textures}/petz_chicken.png | Bin {textures => petz/textures}/petz_chicken2.png | Bin {textures => petz/textures}/petz_chicken3.png | Bin .../textures}/petz_chicken_back.png | Bin .../textures}/petz_chicken_bottom.png | Bin .../textures}/petz_chicken_egg.png | Bin .../textures}/petz_chicken_front.png | Bin .../textures}/petz_chicken_left.png | Bin .../textures}/petz_chicken_nest_egg.png | Bin .../textures}/petz_chicken_nest_egg_inv.png | Bin .../textures}/petz_chicken_right.png | Bin .../textures}/petz_chicken_top.png | Bin {textures => petz/textures}/petz_chimp.png | Bin .../textures}/petz_chimp_back.png | Bin .../textures}/petz_chimp_bottom.png | Bin .../textures}/petz_chimp_front.png | Bin .../textures}/petz_chimp_left.png | Bin .../textures}/petz_chimp_right.png | Bin .../textures}/petz_chimp_top.png | Bin .../textures}/petz_clownfish.png | Bin .../textures}/petz_clownfish_back.png | Bin .../textures}/petz_clownfish_bottom.png | Bin .../textures}/petz_clownfish_front.png | Bin .../textures}/petz_clownfish_left.png | Bin .../textures}/petz_clownfish_right.png | Bin .../textures}/petz_clownfish_spritesheet.png | Bin .../textures}/petz_clownfish_top.png | Bin {textures => petz/textures}/petz_ducky.png | Bin {textures => petz/textures}/petz_ducky2.png | Bin .../textures}/petz_ducky2_back.png | Bin .../textures}/petz_ducky2_bottom.png | Bin .../textures}/petz_ducky2_front.png | Bin .../textures}/petz_ducky2_left.png | Bin .../textures}/petz_ducky2_right.png | Bin .../textures}/petz_ducky2_top.png | Bin {textures => petz/textures}/petz_ducky3.png | Bin .../textures}/petz_ducky3_back.png | Bin .../textures}/petz_ducky3_bottom.png | Bin .../textures}/petz_ducky3_front.png | Bin .../textures}/petz_ducky3_left.png | Bin .../textures}/petz_ducky3_right.png | Bin .../textures}/petz_ducky3_top.png | Bin .../textures}/petz_ducky_back.png | Bin .../textures}/petz_ducky_bottom.png | Bin .../textures}/petz_ducky_egg.png | Bin .../textures}/petz_ducky_feather.png | Bin .../textures}/petz_ducky_front.png | Bin .../textures}/petz_ducky_left.png | Bin .../textures}/petz_ducky_nest.png | Bin .../textures}/petz_ducky_nest_egg.png | Bin .../textures}/petz_ducky_nest_egg_inv.png | Bin .../textures}/petz_ducky_nest_front.png | Bin .../textures}/petz_ducky_nest_inv.png | Bin .../textures}/petz_ducky_right.png | Bin .../textures}/petz_ducky_top.png | Bin .../textures}/petz_fishtank_bottom.png | Bin .../textures}/petz_fishtank_inv.png | Bin .../textures}/petz_fishtank_top.png | Bin {textures => petz/textures}/petz_frog.png | Bin {textures => petz/textures}/petz_frog2.png | Bin {textures => petz/textures}/petz_frog3.png | Bin .../textures}/petz_frog_back.png | Bin .../textures}/petz_frog_bottom.png | Bin .../textures}/petz_frog_front.png | Bin .../textures}/petz_frog_left.png | Bin {textures => petz/textures}/petz_frog_leg.png | Bin .../textures}/petz_frog_leg_roasted.png | Bin .../textures}/petz_frog_right.png | Bin {textures => petz/textures}/petz_frog_top.png | Bin .../textures}/petz_glass_syringe.png | Bin .../textures}/petz_glass_syringe_sperm.png | Bin .../textures}/petz_gray_paving_stone.png | Bin {textures => petz/textures}/petz_grizzly.png | Bin {textures => petz/textures}/petz_grizzly2.png | Bin .../textures}/petz_grizzly_back.png | Bin .../textures}/petz_grizzly_bottom.png | Bin .../textures}/petz_grizzly_front.png | Bin .../textures}/petz_grizzly_left.png | Bin .../textures}/petz_grizzly_right.png | Bin .../textures}/petz_grizzly_top.png | Bin .../textures}/petz_hairbrush.png | Bin {textures => petz/textures}/petz_kennel.png | Bin {textures => petz/textures}/petz_kitty.png | Bin {textures => petz/textures}/petz_kitty2.png | Bin {textures => petz/textures}/petz_kitty3.png | Bin .../textures}/petz_kitty_back.png | Bin .../textures}/petz_kitty_bottom.png | Bin .../textures}/petz_kitty_front.png | Bin .../textures}/petz_kitty_left.png | Bin .../textures}/petz_kitty_right.png | Bin .../textures}/petz_kitty_top.png | Bin .../textures}/petz_lamb_back.png | Bin .../textures}/petz_lamb_bottom.png | Bin .../textures}/petz_lamb_brown.png | Bin .../textures}/petz_lamb_dark_grey.png | Bin .../textures}/petz_lamb_front.png | Bin .../textures}/petz_lamb_grey.png | Bin .../textures}/petz_lamb_left.png | Bin .../textures}/petz_lamb_right.png | Bin .../textures}/petz_lamb_shaved_back.png | Bin .../textures}/petz_lamb_shaved_bottom.png | Bin .../textures}/petz_lamb_shaved_brown.png | Bin .../textures}/petz_lamb_shaved_dark_grey.png | Bin .../textures}/petz_lamb_shaved_front.png | Bin .../textures}/petz_lamb_shaved_grey.png | Bin .../textures}/petz_lamb_shaved_left.png | Bin .../textures}/petz_lamb_shaved_right.png | Bin .../textures}/petz_lamb_shaved_top.png | Bin .../textures}/petz_lamb_shaved_white.png | Bin {textures => petz/textures}/petz_lamb_top.png | Bin .../textures}/petz_lamb_white.png | Bin {textures => petz/textures}/petz_lasso.png | Bin {textures => petz/textures}/petz_leather.png | Bin {textures => petz/textures}/petz_lion.png | Bin .../textures}/petz_lion_back.png | Bin .../textures}/petz_lion_bottom.png | Bin .../textures}/petz_lion_front.png | Bin .../textures}/petz_lion_left.png | Bin .../textures}/petz_lion_right.png | Bin {textures => petz/textures}/petz_lion_top.png | Bin .../textures}/petz_mini_lamb_chop.png | Bin {textures => petz/textures}/petz_moth.png | Bin .../textures}/petz_moth_back.png | Bin .../textures}/petz_moth_bottom.png | Bin .../textures}/petz_moth_front.png | Bin .../textures}/petz_moth_left.png | Bin .../textures}/petz_moth_right.png | Bin {textures => petz/textures}/petz_moth_top.png | Bin {textures => petz/textures}/petz_panda.png | Bin .../textures}/petz_panda_back.png | Bin .../textures}/petz_panda_bottom.png | Bin .../textures}/petz_panda_front.png | Bin .../textures}/petz_panda_left.png | Bin .../textures}/petz_panda_right.png | Bin .../textures}/petz_panda_top.png | Bin {textures => petz/textures}/petz_parrot.png | Bin {textures => petz/textures}/petz_parrot2.png | Bin {textures => petz/textures}/petz_parrot3.png | Bin .../textures}/petz_parrot_back.png | Bin .../textures}/petz_parrot_bottom.png | Bin .../textures}/petz_parrot_front.png | Bin .../textures}/petz_parrot_left.png | Bin .../textures}/petz_parrot_right.png | Bin .../textures}/petz_parrot_top.png | Bin {textures => petz/textures}/petz_pet_bowl.png | Bin .../textures}/petz_pet_bowl_inv.png | Bin {textures => petz/textures}/petz_pigeon.png | Bin {textures => petz/textures}/petz_pigeon2.png | Bin {textures => petz/textures}/petz_pigeon3.png | Bin .../textures}/petz_pigeon_back.png | Bin .../textures}/petz_pigeon_bottom.png | Bin .../textures}/petz_pigeon_front.png | Bin .../textures}/petz_pigeon_left.png | Bin .../textures}/petz_pigeon_right.png | Bin .../textures}/petz_pigeon_top.png | Bin .../textures}/petz_piggeon_bottom.png | Bin {textures => petz/textures}/petz_piggy.png | Bin .../textures}/petz_piggy_back.png | Bin .../textures}/petz_piggy_bottom.png | Bin .../textures}/petz_piggy_front.png | Bin .../textures}/petz_piggy_left.png | Bin .../textures}/petz_piggy_right.png | Bin .../textures}/petz_piggy_top.png | Bin .../textures}/petz_pony_back.png | Bin .../textures}/petz_pony_black.png | Bin .../textures}/petz_pony_bottom.png | Bin .../textures}/petz_pony_brown.png | Bin .../textures}/petz_pony_front.png | Bin .../textures}/petz_pony_gray_dotted.png | Bin .../textures}/petz_pony_left.png | Bin .../textures}/petz_pony_left_saddle.png | Bin .../textures}/petz_pony_pregnant_icon.png | Bin .../textures}/petz_pony_right.png | Bin .../textures}/petz_pony_right_saddle.png | Bin .../textures}/petz_pony_saddle.png | Bin {textures => petz/textures}/petz_pony_top.png | Bin .../textures}/petz_pony_top_saddle.png | Bin .../textures}/petz_pony_velocity_icon.png | Bin .../textures}/petz_pony_white.png | Bin .../textures}/petz_pony_white_dotted.png | Bin .../textures}/petz_pony_yellow.png | Bin {textures => petz/textures}/petz_puppy.png | Bin {textures => petz/textures}/petz_puppy2.png | Bin {textures => petz/textures}/petz_puppy3.png | Bin .../textures}/petz_puppy_back.png | Bin .../textures}/petz_puppy_bottom.png | Bin .../textures}/petz_puppy_front.png | Bin .../textures}/petz_puppy_left.png | Bin .../textures}/petz_puppy_right.png | Bin .../textures}/petz_puppy_top.png | Bin .../textures}/petz_raw_chicken.png | Bin .../textures}/petz_raw_ducky.png | Bin .../textures}/petz_raw_parrot.png | Bin .../textures}/petz_raw_porkchop.png | Bin .../textures}/petz_red_gables.png | Bin .../textures}/petz_roasted_chicken.png | Bin .../textures}/petz_roasted_ducky.png | Bin .../textures}/petz_roasted_lamb_chop.png | Bin .../textures}/petz_roasted_parrot.png | Bin .../textures}/petz_roasted_porkchop.png | Bin {textures => petz/textures}/petz_saddle.png | Bin {textures => petz/textures}/petz_shears.png | Bin .../textures}/petz_spawnegg_beaver.png | Bin .../textures}/petz_spawnegg_calf.png | Bin .../textures}/petz_spawnegg_chicken.png | Bin .../textures}/petz_spawnegg_chimp.png | Bin .../textures}/petz_spawnegg_clownfish.png | Bin .../textures}/petz_spawnegg_ducky.png | Bin .../textures}/petz_spawnegg_frog.png | Bin .../textures}/petz_spawnegg_grizzly.png | Bin .../textures}/petz_spawnegg_kitty.png | Bin .../textures}/petz_spawnegg_lamb.png | Bin .../textures}/petz_spawnegg_lion.png | Bin .../textures}/petz_spawnegg_panda.png | Bin .../textures}/petz_spawnegg_parrot.png | Bin .../textures}/petz_spawnegg_pigeon.png | Bin .../textures}/petz_spawnegg_piggy.png | Bin .../textures}/petz_spawnegg_pony.png | Bin .../textures}/petz_spawnegg_puppy.png | Bin .../textures}/petz_spawnegg_tropicalfish.png | Bin .../textures}/petz_spawnegg_turtle.png | Bin .../textures}/petz_spawnegg_wolf.png | Bin .../textures}/petz_square_ball.png | Bin .../textures}/petz_square_ball_basket.png | Bin .../textures}/petz_square_ball_football.png | Bin .../textures}/petz_star_particle.png | Bin {textures => petz/textures}/petz_steak.png | Bin .../textures}/petz_template_spritesheet.png | Bin .../textures}/petz_tropicalfish.png | Bin .../textures}/petz_tropicalfish2.png | Bin .../textures}/petz_tropicalfish3.png | Bin .../textures}/petz_tropicalfish_back.png | Bin .../textures}/petz_tropicalfish_bottom.png | Bin .../textures}/petz_tropicalfish_front.png | Bin .../textures}/petz_tropicalfish_left.png | Bin .../textures}/petz_tropicalfish_right.png | Bin .../petz_tropicalfish_spritesheet.png | Bin .../textures}/petz_tropicalfish_top.png | Bin {textures => petz/textures}/petz_turtle.png | Bin {textures => petz/textures}/petz_turtle2.png | Bin {textures => petz/textures}/petz_turtle3.png | Bin .../textures}/petz_turtle_back.png | Bin .../textures}/petz_turtle_bottom.png | Bin .../textures}/petz_turtle_front.png | Bin .../textures}/petz_turtle_left.png | Bin .../textures}/petz_turtle_right.png | Bin .../textures}/petz_turtle_shell.png | Bin .../textures}/petz_turtle_top.png | Bin {textures => petz/textures}/petz_whip.png | Bin {textures => petz/textures}/petz_wolf.png | Bin {textures => petz/textures}/petz_wolf2.png | Bin {textures => petz/textures}/petz_wolf3.png | Bin .../textures}/petz_wolf_back.png | Bin .../textures}/petz_wolf_bottom.png | Bin .../textures}/petz_wolf_front.png | Bin .../textures}/petz_wolf_left.png | Bin .../textures}/petz_wolf_right.png | Bin {textures => petz/textures}/petz_wolf_top.png | Bin .../textures}/petz_yellow_paving.png | Bin .../tropicalfish_mobkit.lua | 0 petz/turtle_mobkit.lua | 0 wolf_mobkit.lua => petz/wolf_mobkit.lua | 0 522 files changed, 1734 insertions(+), 3 deletions(-) create mode 100644 mobkit/init.lua create mode 100644 mobkit/mobkit_api.txt rename beaver_mobkit.lua => modpack.txt (100%) rename CHANGELOG.md => petz/CHANGELOG.md (100%) rename LICENSE.md => petz/LICENSE.md (100%) create mode 100644 petz/README.md rename api.lua => petz/api.lua (100%) rename chimp_mobkit.lua => petz/beaver_mobkit.lua (100%) rename behaviours.lua => petz/behaviours.lua (100%) rename calf_mobkit.lua => petz/calf_mobkit.lua (100%) rename chicken_mobkit.lua => petz/chicken_mobkit.lua (100%) rename clownfish_mobkit.lua => petz/chimp_mobkit.lua (100%) rename frog_mobkit.lua => petz/clownfish_mobkit.lua (100%) rename {docs => petz/docs}/images/baby_pony.png (100%) rename {docs => petz/docs}/images/beaver.png (100%) rename {docs => petz/docs}/images/beaver_dam.png (100%) rename {docs => petz/docs}/images/beaver_oil.png (100%) rename {docs => petz/docs}/images/brush.png (100%) rename {docs => petz/docs}/images/calf.png (100%) rename {docs => petz/docs}/images/chicken.png (100%) rename {docs => petz/docs}/images/chimp.png (100%) rename {docs => petz/docs}/images/clownfish.png (100%) rename {docs => petz/docs}/images/duck_chicken_farm.png (100%) rename {docs => petz/docs}/images/ducky.png (100%) rename {docs => petz/docs}/images/fish_tank.png (100%) rename {docs => petz/docs}/images/frog.png (100%) rename {docs => petz/docs}/images/grizzly.png (100%) rename {docs => petz/docs}/images/hello.svg (100%) rename {docs => petz/docs}/images/kennel.png (100%) rename {docs => petz/docs}/images/kitty.png (100%) rename {docs => petz/docs}/images/lamb.png (100%) rename {docs => petz/docs}/images/lash.png (100%) rename {docs => petz/docs}/images/lion.png (100%) rename {docs => petz/docs}/images/panda.png (100%) rename {docs => petz/docs}/images/parrot.png (100%) rename {docs => petz/docs}/images/pet_bowl.png (100%) rename {docs => petz/docs}/images/petz_items.png (100%) rename {docs => petz/docs}/images/petz_logo.png (100%) rename {docs => petz/docs}/images/pigeon.png (100%) rename {docs => petz/docs}/images/piggy.png (100%) rename {docs => petz/docs}/images/pony.png (100%) rename {docs => petz/docs}/images/pony_breeding.png (100%) rename {docs => petz/docs}/images/puppy.png (100%) rename {docs => petz/docs}/images/squareball.png (100%) rename {docs => petz/docs}/images/tropicalfish.png (100%) rename {docs => petz/docs}/images/turtle.png (100%) rename {docs => petz/docs}/petz.md (100%) rename ducky_mobkit.lua => petz/ducky_mobkit.lua (100%) rename food.lua => petz/food.lua (100%) rename pigeon_mobkit.lua => petz/frog_mobkit.lua (100%) rename grizzly_mobkit.lua => petz/grizzly_mobkit.lua (100%) rename init.lua => petz/init.lua (100%) rename items.lua => petz/items.lua (100%) rename kitty_mobkit.lua => petz/kitty_mobkit.lua (100%) rename lamb_mobkit.lua => petz/lamb_mobkit.lua (100%) rename lamb_mobs_redo.lua => petz/lamb_mobs_redo.lua (100%) rename lion_mobkit.lua => petz/lion_mobkit.lua (100%) rename {locale => petz/locale}/petz.es.tr (100%) rename logo.xcf => petz/logo.xcf (100%) rename mobkit.lua => petz/mobkit.lua (100%) rename mobkit_plus.lua => petz/mobkit_plus.lua (100%) rename mobkit_spawn.lua => petz/mobkit_spawn.lua (100%) rename mod.conf => petz/mod.conf (100%) rename {models => petz/models}/petz_beaver.b3d (100%) rename {models => petz/models}/petz_beaver.blend (100%) rename {models => petz/models}/petz_beaver.blend1 (100%) rename {models => petz/models}/petz_beaver.obj (100%) rename {models => petz/models}/petz_calf.b3d (100%) rename {models => petz/models}/petz_calf.blend (100%) rename {models => petz/models}/petz_calf.blend1 (100%) rename {models => petz/models}/petz_calf.obj (100%) rename {models => petz/models}/petz_chicken.b3d (100%) rename {models => petz/models}/petz_chicken.blend (100%) rename {models => petz/models}/petz_chicken.blend1 (100%) rename {models => petz/models}/petz_chicken.obj (100%) rename {models => petz/models}/petz_chimp.b3d (100%) rename {models => petz/models}/petz_chimp.blend (100%) rename {models => petz/models}/petz_chimp.blend1 (100%) rename {models => petz/models}/petz_chimp.obj (100%) rename {models => petz/models}/petz_clownfish.b3d (100%) rename {models => petz/models}/petz_clownfish.blend (100%) rename {models => petz/models}/petz_clownfish.blend1 (100%) rename {models => petz/models}/petz_clownfish.obj (100%) rename {models => petz/models}/petz_ducky.b3d (100%) rename {models => petz/models}/petz_ducky.blend (100%) rename {models => petz/models}/petz_ducky.blend1 (100%) rename {models => petz/models}/petz_ducky.obj (100%) rename {models => petz/models}/petz_ducky_nest.b3d (100%) rename {models => petz/models}/petz_ducky_nest.blend (100%) rename {models => petz/models}/petz_ducky_nest.blend1 (100%) rename {models => petz/models}/petz_ducky_nest.obj (100%) rename {models => petz/models}/petz_ducky_nest_egg.b3d (100%) rename {models => petz/models}/petz_ducky_nest_egg.blend (100%) rename {models => petz/models}/petz_ducky_nest_egg.blend1 (100%) rename {models => petz/models}/petz_frog.b3d (100%) rename {models => petz/models}/petz_frog.blend (100%) rename {models => petz/models}/petz_frog.blend1 (100%) rename {models => petz/models}/petz_frog.obj (100%) rename {models => petz/models}/petz_grizzly.b3d (100%) rename {models => petz/models}/petz_grizzly.blend (100%) rename {models => petz/models}/petz_grizzly.blend1 (100%) rename {models => petz/models}/petz_kitty.b3d (100%) rename {models => petz/models}/petz_kitty.blend (100%) rename {models => petz/models}/petz_kitty.blend1 (100%) rename {models => petz/models}/petz_kitty.obj (100%) rename {models => petz/models}/petz_lamb.b3d (100%) rename {models => petz/models}/petz_lamb.blend (100%) rename {models => petz/models}/petz_lamb.blend1 (100%) rename {models => petz/models}/petz_lamb.obj (100%) rename {models => petz/models}/petz_lion (100%) rename {models => petz/models}/petz_lion.b3d (100%) rename {models => petz/models}/petz_lion.blend (100%) rename {models => petz/models}/petz_lion.blend1 (100%) rename {models => petz/models}/petz_lion.obj (100%) rename {models => petz/models}/petz_moth.blend (100%) rename {models => petz/models}/petz_moth.blend1 (100%) rename {models => petz/models}/petz_moth.obj (100%) rename {models => petz/models}/petz_panda.b3d (100%) rename {models => petz/models}/petz_panda.blend (100%) rename {models => petz/models}/petz_panda.blend1 (100%) rename {models => petz/models}/petz_panda.obj (100%) rename {models => petz/models}/petz_parrot.b3d (100%) rename {models => petz/models}/petz_parrot.blend (100%) rename {models => petz/models}/petz_parrot.blend1 (100%) rename {models => petz/models}/petz_parrot.obj (100%) rename {models => petz/models}/petz_pigeon.b3d (100%) rename {models => petz/models}/petz_pigeon.blend (100%) rename {models => petz/models}/petz_pigeon.blend1 (100%) rename {models => petz/models}/petz_pigeon.obj (100%) rename {models => petz/models}/petz_piggy.b3d (100%) rename {models => petz/models}/petz_piggy.blend (100%) rename {models => petz/models}/petz_piggy.blend1 (100%) rename {models => petz/models}/petz_piggy.obj (100%) rename {models => petz/models}/petz_pony (100%) rename {models => petz/models}/petz_pony.b3d (100%) rename {models => petz/models}/petz_pony.blend (100%) rename {models => petz/models}/petz_pony.blend1 (100%) rename {models => petz/models}/petz_pony.obj (100%) rename {models => petz/models}/petz_puppy.b3d (100%) rename {models => petz/models}/petz_puppy.blend (100%) rename {models => petz/models}/petz_puppy.blend1 (100%) rename {models => petz/models}/petz_puppy.obj (100%) rename {models => petz/models}/petz_tropicalfish.b3d (100%) rename {models => petz/models}/petz_tropicalfish.blend (100%) rename {models => petz/models}/petz_tropicalfish.blend1 (100%) rename {models => petz/models}/petz_tropicalfish.obj (100%) rename {models => petz/models}/petz_turtle.b3d (100%) rename {models => petz/models}/petz_turtle.blend (100%) rename {models => petz/models}/petz_turtle.blend1 (100%) rename {models => petz/models}/petz_turtle.obj (100%) rename {models => petz/models}/petz_wolf.b3d (100%) rename {models => petz/models}/petz_wolf.blend (100%) rename {models => petz/models}/petz_wolf.blend1 (100%) rename {models => petz/models}/petz_wolf.obj (100%) rename mount.lua => petz/mount.lua (100%) rename {nodeboxes => petz/nodeboxes}/petz_beaver.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_bowl.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_calf.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_castor.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_chicken.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_chimp.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_clownfish.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_cow.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_duck_egg.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_duck_nest.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_ducky.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_frog.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_kitty.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_lamb.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_lion.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_moth.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_panda.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_parrot.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_pigeon.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_piggy.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_pony.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_puppy.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_squirrel.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_tropicalfish.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_turtle.nbe (100%) rename {nodeboxes => petz/nodeboxes}/petz_wolf.nbe (100%) rename nodes.lua => petz/nodes.lua (100%) rename panda_mobkit.lua => petz/panda_mobkit.lua (100%) rename parrot_mobkit.lua => petz/parrot_mobkit.lua (100%) rename petz.conf => petz/petz.conf (100%) rename tropicalfish_mobkit.lua => petz/pigeon_mobkit.lua (100%) rename piggy_mobkit.lua => petz/piggy_mobkit.lua (100%) rename pony_mobkit.lua => petz/pony_mobkit.lua (100%) rename puppy_mobkit.lua => petz/puppy_mobkit.lua (100%) rename {schematics => petz/schematics}/beaver_dam.mts (100%) rename {schematics => petz/schematics}/kennel.mts (100%) rename settings.lua => petz/settings.lua (100%) rename {sounds => petz/sounds}/LICENSE.MD (100%) rename {sounds => petz/sounds}/petz_beaver_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_beaver_sound.ogg (100%) rename {sounds => petz/sounds}/petz_brushing.ogg (100%) rename {sounds => petz/sounds}/petz_calf_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_calf_moo.ogg (100%) rename {sounds => petz/sounds}/petz_chicken_cluck.ogg (100%) rename {sounds => petz/sounds}/petz_chicken_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_chimp_hoo.ogg (100%) rename {sounds => petz/sounds}/petz_chimp_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_default_punch.ogg (100%) rename {sounds => petz/sounds}/petz_ducky_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_ducky_quack.ogg (100%) rename {sounds => petz/sounds}/petz_frog_croak.ogg (100%) rename {sounds => petz/sounds}/petz_grizzly_growl.ogg (100%) rename {sounds => petz/sounds}/petz_grizzly_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_kitty_meow.ogg (100%) rename {sounds => petz/sounds}/petz_kitty_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_lamb_bleat.ogg (100%) rename {sounds => petz/sounds}/petz_lamb_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_lion_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_lion_roar.ogg (100%) rename {sounds => petz/sounds}/petz_panda_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_panda_sound.ogg (100%) rename {sounds => petz/sounds}/petz_parrot_chirp.ogg (100%) rename {sounds => petz/sounds}/petz_parrot_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_pigeon_cooing.ogg (100%) rename {sounds => petz/sounds}/petz_pigeon_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_piggy_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_piggy_squeal.ogg (100%) rename {sounds => petz/sounds}/petz_pony_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_pony_neigh.ogg (100%) rename {sounds => petz/sounds}/petz_puppy_bark.ogg (100%) rename {sounds => petz/sounds}/petz_puppy_moaning.ogg (100%) rename {sounds => petz/sounds}/petz_whip.ogg (100%) rename {sounds => petz/sounds}/petz_wolf_howl.ogg (100%) rename {sounds => petz/sounds}/petz_wolf_moaning.ogg (100%) rename spawn.lua => petz/spawn.lua (100%) rename {textures => petz/textures}/petz_affinity_heart.png (100%) rename {textures => petz/textures}/petz_beaver.png (100%) rename {textures => petz/textures}/petz_beaver_back.png (100%) rename {textures => petz/textures}/petz_beaver_bottom.png (100%) rename {textures => petz/textures}/petz_beaver_dam_branches.png (100%) rename {textures => petz/textures}/petz_beaver_front.png (100%) rename {textures => petz/textures}/petz_beaver_fur.png (100%) rename {textures => petz/textures}/petz_beaver_left.png (100%) rename {textures => petz/textures}/petz_beaver_oil.png (100%) rename {textures => petz/textures}/petz_beaver_right.png (100%) rename {textures => petz/textures}/petz_beaver_top.png (100%) rename {textures => petz/textures}/petz_beef.png (100%) rename {textures => petz/textures}/petz_blue_stained_planks.png (100%) rename {textures => petz/textures}/petz_bucket_milk.png (100%) rename {textures => petz/textures}/petz_calf.png (100%) rename {textures => petz/textures}/petz_calf2.png (100%) rename {textures => petz/textures}/petz_calf2_back.png (100%) rename {textures => petz/textures}/petz_calf2_bottom.png (100%) rename {textures => petz/textures}/petz_calf2_front.png (100%) rename {textures => petz/textures}/petz_calf2_left.png (100%) rename {textures => petz/textures}/petz_calf2_right.png (100%) rename {textures => petz/textures}/petz_calf2_top.png (100%) rename {textures => petz/textures}/petz_calf3.png (100%) rename {textures => petz/textures}/petz_calf_back.png (100%) rename {textures => petz/textures}/petz_calf_bottom.png (100%) rename {textures => petz/textures}/petz_calf_front.png (100%) rename {textures => petz/textures}/petz_calf_left.png (100%) rename {textures => petz/textures}/petz_calf_right.png (100%) rename {textures => petz/textures}/petz_calf_top.png (100%) rename {textures => petz/textures}/petz_chicken.png (100%) rename {textures => petz/textures}/petz_chicken2.png (100%) rename {textures => petz/textures}/petz_chicken3.png (100%) rename {textures => petz/textures}/petz_chicken_back.png (100%) rename {textures => petz/textures}/petz_chicken_bottom.png (100%) rename {textures => petz/textures}/petz_chicken_egg.png (100%) rename {textures => petz/textures}/petz_chicken_front.png (100%) rename {textures => petz/textures}/petz_chicken_left.png (100%) rename {textures => petz/textures}/petz_chicken_nest_egg.png (100%) rename {textures => petz/textures}/petz_chicken_nest_egg_inv.png (100%) rename {textures => petz/textures}/petz_chicken_right.png (100%) rename {textures => petz/textures}/petz_chicken_top.png (100%) rename {textures => petz/textures}/petz_chimp.png (100%) rename {textures => petz/textures}/petz_chimp_back.png (100%) rename {textures => petz/textures}/petz_chimp_bottom.png (100%) rename {textures => petz/textures}/petz_chimp_front.png (100%) rename {textures => petz/textures}/petz_chimp_left.png (100%) rename {textures => petz/textures}/petz_chimp_right.png (100%) rename {textures => petz/textures}/petz_chimp_top.png (100%) rename {textures => petz/textures}/petz_clownfish.png (100%) rename {textures => petz/textures}/petz_clownfish_back.png (100%) rename {textures => petz/textures}/petz_clownfish_bottom.png (100%) rename {textures => petz/textures}/petz_clownfish_front.png (100%) rename {textures => petz/textures}/petz_clownfish_left.png (100%) rename {textures => petz/textures}/petz_clownfish_right.png (100%) rename {textures => petz/textures}/petz_clownfish_spritesheet.png (100%) rename {textures => petz/textures}/petz_clownfish_top.png (100%) rename {textures => petz/textures}/petz_ducky.png (100%) rename {textures => petz/textures}/petz_ducky2.png (100%) rename {textures => petz/textures}/petz_ducky2_back.png (100%) rename {textures => petz/textures}/petz_ducky2_bottom.png (100%) rename {textures => petz/textures}/petz_ducky2_front.png (100%) rename {textures => petz/textures}/petz_ducky2_left.png (100%) rename {textures => petz/textures}/petz_ducky2_right.png (100%) rename {textures => petz/textures}/petz_ducky2_top.png (100%) rename {textures => petz/textures}/petz_ducky3.png (100%) rename {textures => petz/textures}/petz_ducky3_back.png (100%) rename {textures => petz/textures}/petz_ducky3_bottom.png (100%) rename {textures => petz/textures}/petz_ducky3_front.png (100%) rename {textures => petz/textures}/petz_ducky3_left.png (100%) rename {textures => petz/textures}/petz_ducky3_right.png (100%) rename {textures => petz/textures}/petz_ducky3_top.png (100%) rename {textures => petz/textures}/petz_ducky_back.png (100%) rename {textures => petz/textures}/petz_ducky_bottom.png (100%) rename {textures => petz/textures}/petz_ducky_egg.png (100%) rename {textures => petz/textures}/petz_ducky_feather.png (100%) rename {textures => petz/textures}/petz_ducky_front.png (100%) rename {textures => petz/textures}/petz_ducky_left.png (100%) rename {textures => petz/textures}/petz_ducky_nest.png (100%) rename {textures => petz/textures}/petz_ducky_nest_egg.png (100%) rename {textures => petz/textures}/petz_ducky_nest_egg_inv.png (100%) rename {textures => petz/textures}/petz_ducky_nest_front.png (100%) rename {textures => petz/textures}/petz_ducky_nest_inv.png (100%) rename {textures => petz/textures}/petz_ducky_right.png (100%) rename {textures => petz/textures}/petz_ducky_top.png (100%) rename {textures => petz/textures}/petz_fishtank_bottom.png (100%) rename {textures => petz/textures}/petz_fishtank_inv.png (100%) rename {textures => petz/textures}/petz_fishtank_top.png (100%) rename {textures => petz/textures}/petz_frog.png (100%) rename {textures => petz/textures}/petz_frog2.png (100%) rename {textures => petz/textures}/petz_frog3.png (100%) rename {textures => petz/textures}/petz_frog_back.png (100%) rename {textures => petz/textures}/petz_frog_bottom.png (100%) rename {textures => petz/textures}/petz_frog_front.png (100%) rename {textures => petz/textures}/petz_frog_left.png (100%) rename {textures => petz/textures}/petz_frog_leg.png (100%) rename {textures => petz/textures}/petz_frog_leg_roasted.png (100%) rename {textures => petz/textures}/petz_frog_right.png (100%) rename {textures => petz/textures}/petz_frog_top.png (100%) rename {textures => petz/textures}/petz_glass_syringe.png (100%) rename {textures => petz/textures}/petz_glass_syringe_sperm.png (100%) rename {textures => petz/textures}/petz_gray_paving_stone.png (100%) rename {textures => petz/textures}/petz_grizzly.png (100%) rename {textures => petz/textures}/petz_grizzly2.png (100%) rename {textures => petz/textures}/petz_grizzly_back.png (100%) rename {textures => petz/textures}/petz_grizzly_bottom.png (100%) rename {textures => petz/textures}/petz_grizzly_front.png (100%) rename {textures => petz/textures}/petz_grizzly_left.png (100%) rename {textures => petz/textures}/petz_grizzly_right.png (100%) rename {textures => petz/textures}/petz_grizzly_top.png (100%) rename {textures => petz/textures}/petz_hairbrush.png (100%) rename {textures => petz/textures}/petz_kennel.png (100%) rename {textures => petz/textures}/petz_kitty.png (100%) rename {textures => petz/textures}/petz_kitty2.png (100%) rename {textures => petz/textures}/petz_kitty3.png (100%) rename {textures => petz/textures}/petz_kitty_back.png (100%) rename {textures => petz/textures}/petz_kitty_bottom.png (100%) rename {textures => petz/textures}/petz_kitty_front.png (100%) rename {textures => petz/textures}/petz_kitty_left.png (100%) rename {textures => petz/textures}/petz_kitty_right.png (100%) rename {textures => petz/textures}/petz_kitty_top.png (100%) rename {textures => petz/textures}/petz_lamb_back.png (100%) rename {textures => petz/textures}/petz_lamb_bottom.png (100%) rename {textures => petz/textures}/petz_lamb_brown.png (100%) rename {textures => petz/textures}/petz_lamb_dark_grey.png (100%) rename {textures => petz/textures}/petz_lamb_front.png (100%) rename {textures => petz/textures}/petz_lamb_grey.png (100%) rename {textures => petz/textures}/petz_lamb_left.png (100%) rename {textures => petz/textures}/petz_lamb_right.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_back.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_bottom.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_brown.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_dark_grey.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_front.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_grey.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_left.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_right.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_top.png (100%) rename {textures => petz/textures}/petz_lamb_shaved_white.png (100%) rename {textures => petz/textures}/petz_lamb_top.png (100%) rename {textures => petz/textures}/petz_lamb_white.png (100%) rename {textures => petz/textures}/petz_lasso.png (100%) rename {textures => petz/textures}/petz_leather.png (100%) rename {textures => petz/textures}/petz_lion.png (100%) rename {textures => petz/textures}/petz_lion_back.png (100%) rename {textures => petz/textures}/petz_lion_bottom.png (100%) rename {textures => petz/textures}/petz_lion_front.png (100%) rename {textures => petz/textures}/petz_lion_left.png (100%) rename {textures => petz/textures}/petz_lion_right.png (100%) rename {textures => petz/textures}/petz_lion_top.png (100%) rename {textures => petz/textures}/petz_mini_lamb_chop.png (100%) rename {textures => petz/textures}/petz_moth.png (100%) rename {textures => petz/textures}/petz_moth_back.png (100%) rename {textures => petz/textures}/petz_moth_bottom.png (100%) rename {textures => petz/textures}/petz_moth_front.png (100%) rename {textures => petz/textures}/petz_moth_left.png (100%) rename {textures => petz/textures}/petz_moth_right.png (100%) rename {textures => petz/textures}/petz_moth_top.png (100%) rename {textures => petz/textures}/petz_panda.png (100%) rename {textures => petz/textures}/petz_panda_back.png (100%) rename {textures => petz/textures}/petz_panda_bottom.png (100%) rename {textures => petz/textures}/petz_panda_front.png (100%) rename {textures => petz/textures}/petz_panda_left.png (100%) rename {textures => petz/textures}/petz_panda_right.png (100%) rename {textures => petz/textures}/petz_panda_top.png (100%) rename {textures => petz/textures}/petz_parrot.png (100%) rename {textures => petz/textures}/petz_parrot2.png (100%) rename {textures => petz/textures}/petz_parrot3.png (100%) rename {textures => petz/textures}/petz_parrot_back.png (100%) rename {textures => petz/textures}/petz_parrot_bottom.png (100%) rename {textures => petz/textures}/petz_parrot_front.png (100%) rename {textures => petz/textures}/petz_parrot_left.png (100%) rename {textures => petz/textures}/petz_parrot_right.png (100%) rename {textures => petz/textures}/petz_parrot_top.png (100%) rename {textures => petz/textures}/petz_pet_bowl.png (100%) rename {textures => petz/textures}/petz_pet_bowl_inv.png (100%) rename {textures => petz/textures}/petz_pigeon.png (100%) rename {textures => petz/textures}/petz_pigeon2.png (100%) rename {textures => petz/textures}/petz_pigeon3.png (100%) rename {textures => petz/textures}/petz_pigeon_back.png (100%) rename {textures => petz/textures}/petz_pigeon_bottom.png (100%) rename {textures => petz/textures}/petz_pigeon_front.png (100%) rename {textures => petz/textures}/petz_pigeon_left.png (100%) rename {textures => petz/textures}/petz_pigeon_right.png (100%) rename {textures => petz/textures}/petz_pigeon_top.png (100%) rename {textures => petz/textures}/petz_piggeon_bottom.png (100%) rename {textures => petz/textures}/petz_piggy.png (100%) rename {textures => petz/textures}/petz_piggy_back.png (100%) rename {textures => petz/textures}/petz_piggy_bottom.png (100%) rename {textures => petz/textures}/petz_piggy_front.png (100%) rename {textures => petz/textures}/petz_piggy_left.png (100%) rename {textures => petz/textures}/petz_piggy_right.png (100%) rename {textures => petz/textures}/petz_piggy_top.png (100%) rename {textures => petz/textures}/petz_pony_back.png (100%) rename {textures => petz/textures}/petz_pony_black.png (100%) rename {textures => petz/textures}/petz_pony_bottom.png (100%) rename {textures => petz/textures}/petz_pony_brown.png (100%) rename {textures => petz/textures}/petz_pony_front.png (100%) rename {textures => petz/textures}/petz_pony_gray_dotted.png (100%) rename {textures => petz/textures}/petz_pony_left.png (100%) rename {textures => petz/textures}/petz_pony_left_saddle.png (100%) rename {textures => petz/textures}/petz_pony_pregnant_icon.png (100%) rename {textures => petz/textures}/petz_pony_right.png (100%) rename {textures => petz/textures}/petz_pony_right_saddle.png (100%) rename {textures => petz/textures}/petz_pony_saddle.png (100%) rename {textures => petz/textures}/petz_pony_top.png (100%) rename {textures => petz/textures}/petz_pony_top_saddle.png (100%) rename {textures => petz/textures}/petz_pony_velocity_icon.png (100%) rename {textures => petz/textures}/petz_pony_white.png (100%) rename {textures => petz/textures}/petz_pony_white_dotted.png (100%) rename {textures => petz/textures}/petz_pony_yellow.png (100%) rename {textures => petz/textures}/petz_puppy.png (100%) rename {textures => petz/textures}/petz_puppy2.png (100%) rename {textures => petz/textures}/petz_puppy3.png (100%) rename {textures => petz/textures}/petz_puppy_back.png (100%) rename {textures => petz/textures}/petz_puppy_bottom.png (100%) rename {textures => petz/textures}/petz_puppy_front.png (100%) rename {textures => petz/textures}/petz_puppy_left.png (100%) rename {textures => petz/textures}/petz_puppy_right.png (100%) rename {textures => petz/textures}/petz_puppy_top.png (100%) rename {textures => petz/textures}/petz_raw_chicken.png (100%) rename {textures => petz/textures}/petz_raw_ducky.png (100%) rename {textures => petz/textures}/petz_raw_parrot.png (100%) rename {textures => petz/textures}/petz_raw_porkchop.png (100%) rename {textures => petz/textures}/petz_red_gables.png (100%) rename {textures => petz/textures}/petz_roasted_chicken.png (100%) rename {textures => petz/textures}/petz_roasted_ducky.png (100%) rename {textures => petz/textures}/petz_roasted_lamb_chop.png (100%) rename {textures => petz/textures}/petz_roasted_parrot.png (100%) rename {textures => petz/textures}/petz_roasted_porkchop.png (100%) rename {textures => petz/textures}/petz_saddle.png (100%) rename {textures => petz/textures}/petz_shears.png (100%) rename {textures => petz/textures}/petz_spawnegg_beaver.png (100%) rename {textures => petz/textures}/petz_spawnegg_calf.png (100%) rename {textures => petz/textures}/petz_spawnegg_chicken.png (100%) rename {textures => petz/textures}/petz_spawnegg_chimp.png (100%) rename {textures => petz/textures}/petz_spawnegg_clownfish.png (100%) rename {textures => petz/textures}/petz_spawnegg_ducky.png (100%) rename {textures => petz/textures}/petz_spawnegg_frog.png (100%) rename {textures => petz/textures}/petz_spawnegg_grizzly.png (100%) rename {textures => petz/textures}/petz_spawnegg_kitty.png (100%) rename {textures => petz/textures}/petz_spawnegg_lamb.png (100%) rename {textures => petz/textures}/petz_spawnegg_lion.png (100%) rename {textures => petz/textures}/petz_spawnegg_panda.png (100%) rename {textures => petz/textures}/petz_spawnegg_parrot.png (100%) rename {textures => petz/textures}/petz_spawnegg_pigeon.png (100%) rename {textures => petz/textures}/petz_spawnegg_piggy.png (100%) rename {textures => petz/textures}/petz_spawnegg_pony.png (100%) rename {textures => petz/textures}/petz_spawnegg_puppy.png (100%) rename {textures => petz/textures}/petz_spawnegg_tropicalfish.png (100%) rename {textures => petz/textures}/petz_spawnegg_turtle.png (100%) rename {textures => petz/textures}/petz_spawnegg_wolf.png (100%) rename {textures => petz/textures}/petz_square_ball.png (100%) rename {textures => petz/textures}/petz_square_ball_basket.png (100%) rename {textures => petz/textures}/petz_square_ball_football.png (100%) rename {textures => petz/textures}/petz_star_particle.png (100%) rename {textures => petz/textures}/petz_steak.png (100%) rename {textures => petz/textures}/petz_template_spritesheet.png (100%) rename {textures => petz/textures}/petz_tropicalfish.png (100%) rename {textures => petz/textures}/petz_tropicalfish2.png (100%) rename {textures => petz/textures}/petz_tropicalfish3.png (100%) rename {textures => petz/textures}/petz_tropicalfish_back.png (100%) rename {textures => petz/textures}/petz_tropicalfish_bottom.png (100%) rename {textures => petz/textures}/petz_tropicalfish_front.png (100%) rename {textures => petz/textures}/petz_tropicalfish_left.png (100%) rename {textures => petz/textures}/petz_tropicalfish_right.png (100%) rename {textures => petz/textures}/petz_tropicalfish_spritesheet.png (100%) rename {textures => petz/textures}/petz_tropicalfish_top.png (100%) rename {textures => petz/textures}/petz_turtle.png (100%) rename {textures => petz/textures}/petz_turtle2.png (100%) rename {textures => petz/textures}/petz_turtle3.png (100%) rename {textures => petz/textures}/petz_turtle_back.png (100%) rename {textures => petz/textures}/petz_turtle_bottom.png (100%) rename {textures => petz/textures}/petz_turtle_front.png (100%) rename {textures => petz/textures}/petz_turtle_left.png (100%) rename {textures => petz/textures}/petz_turtle_right.png (100%) rename {textures => petz/textures}/petz_turtle_shell.png (100%) rename {textures => petz/textures}/petz_turtle_top.png (100%) rename {textures => petz/textures}/petz_whip.png (100%) rename {textures => petz/textures}/petz_wolf.png (100%) rename {textures => petz/textures}/petz_wolf2.png (100%) rename {textures => petz/textures}/petz_wolf3.png (100%) rename {textures => petz/textures}/petz_wolf_back.png (100%) rename {textures => petz/textures}/petz_wolf_bottom.png (100%) rename {textures => petz/textures}/petz_wolf_front.png (100%) rename {textures => petz/textures}/petz_wolf_left.png (100%) rename {textures => petz/textures}/petz_wolf_right.png (100%) rename {textures => petz/textures}/petz_wolf_top.png (100%) rename {textures => petz/textures}/petz_yellow_paving.png (100%) rename turtle_mobkit.lua => petz/tropicalfish_mobkit.lua (100%) create mode 100644 petz/turtle_mobkit.lua rename wolf_mobkit.lua => petz/wolf_mobkit.lua (100%) diff --git a/README.md b/README.md index bf5fa29..7db5d11 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ -# Petz [petz] - -Cute kawaii mobs. +# petz diff --git a/mobkit/init.lua b/mobkit/init.lua new file mode 100644 index 0000000..38e7522 --- /dev/null +++ b/mobkit/init.lua @@ -0,0 +1,1269 @@ +-- yaw values: +-- x+ = -pi/2 +-- x- = +pi/2 +-- z+ = 0 +-- z- = -pi + +mobkit={} + +mobkit.gravity = -9.8 +mobkit.friction = 0.4 -- less is more + +local abs = math.abs +local pi = math.pi +local floor = math.floor +local random = math.random +local sqrt = math.sqrt +local max = math.max +local min = math.min +local pow = math.pow + +local sign = function(x) + return (x<0) and -1 or 1 +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 neighbors ={ + {x=1,z=0}, + {x=1,z=1}, + {x=0,z=1}, + {x=-1,z=1}, + {x=-1,z=0}, + {x=-1,z=-1}, + {x=0,z=-1}, + {x=1,z=-1} + } + +-- UTILITY FUNCTIONS + +function mobkit.dir2neighbor(dir) + dir.y=0 + dir=vector.round(vector.normalize(dir)) + for k,v in ipairs(neighbors) do + if v.x == dir.x and v.z == dir.z then return k end + end +end + +function mobkit.neighbor_shift(neighbor,shift) -- int shift: minus is left, plus is right + return (8+neighbor+shift-1)%8+1 +end + +function mobkit.pos_shift(pos,vec) + vec.x=vec.x or 0 + vec.y=vec.y or 0 + vec.z=vec.z or 0 + return {x=pos.x+vec.x, + y=pos.y+vec.y, + z=pos.z+vec.z} +end + +-- call this instead if you want feet position. +function mobkit.get_stand_pos(thing) -- thing can be luaentity or objectref. + if type(thing) == 'table' then + return mobkit.pos_shift(thing.object:get_pos(),{y=thing.collisionbox[2]+0.01}) + elseif type(thing) == 'userdata' then + local colbox = thing:get_properties().collisionbox + return mobkit.pos_shift(thing:get_pos(),{y=colbox[2]+0.01}) + end +end + +function mobkit.nodeatpos(pos) + local node = minetest.get_node_or_nil(pos) + if node then return minetest.registered_nodes[node.name] end +end + +function mobkit.get_nodename_off(pos,vec) + return minetest.get_node(mobkit.pos_shift(pos,vec)).name +end + +function mobkit.get_node_pos(pos) + return { + x=floor(pos.x+0.5), + y=floor(pos.y+0.5), + z=floor(pos.z+0.5), + } +end + +function mobkit.get_nodes_in_area(pos1,pos2,full) + local npos1=mobkit.get_node_pos(pos1) + local npos2=mobkit.get_node_pos(pos2) + local result = {} + local cnt = 0 -- safety + + local sx = (pos2.x 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 + +function mobkit.get_hitbox_bottom(self) + local y = self.collisionbox[2] + local pos = self.object:get_pos() + return { + {x=pos.x+self.collisionbox[1],y=pos.y+y,z=pos.z+self.collisionbox[3]}, + {x=pos.x+self.collisionbox[1],y=pos.y+y,z=pos.z+self.collisionbox[6]}, + {x=pos.x+self.collisionbox[4],y=pos.y+y,z=pos.z+self.collisionbox[3]}, + {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.type == 'fixed' then + if type(node.node_box.fixed[1]) == 'number' then + return npos.y + node.node_box.fixed[5] ,0, false + elseif type(node.node_box.fixed[1]) == 'table' then + 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 + elseif node.node_box.type == 'leveled' then + return minetest.get_node_level(pos)/64-0.5+mobkit.get_node_pos(pos).y, 0, false + else + return npos.y + 0.5,1, false -- the unforeseen + end + else + return npos.y+0.5,1, false -- full node + end + else + local liquidflag = false + if node.drawtype == 'liquid' then liquidflag = true end + return npos.y-0.5,-1,liquidflag + end +end + +-- get_terrain_height +-- 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 + 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 + return h, liquidflag + end + + if dir==0 or dir==f then + steps = steps - 1 + if steps <=0 then return nil end + return mobkit.get_terrain_height(mobkit.pos_shift(pos,{y=f}),steps,f,liquidflag) + else + return h, liquidflag + end +end + +function mobkit.get_spawn_pos_abr(dtime,intrvl,radius,chance,reduction) + local plyrs = minetest.get_connected_players() + intrvl=1/intrvl + + if random() 1 then + -- spawn in the front arc + yaw = minetest.dir_to_yaw(vel) + random()*0.35 - 0.75 + else + -- random yaw + yaw = random()*pi*2 - pi + end + local pos = plyr:get_pos() + local dir = vector.multiply(minetest.yaw_to_dir(yaw),radius) + local pos2 = vector.add(pos,dir) + pos2.y=pos2.y-5 + local height, liquidflag = mobkit.get_terrain_height(pos2,32) + if height then + local objs = minetest.get_objects_inside_radius(pos,radius*1.1) + for _,obj in ipairs(objs) do -- count mobs in abrange + if not obj:is_player() then + local lua = obj:get_luaentity() + if lua and lua.name ~= '__builtin:item' then + chance=chance + (1-chance)*reduction -- chance reduced for every mob in range + end + end + end + if chance < random() then + pos2.y = height + objs = minetest.get_objects_inside_radius(pos2,radius*0.95) + for _,obj in ipairs(objs) do -- do not spawn if another player around + if obj:is_player() then return end + end + return pos2, liquidflag + end + end + end +end + +function mobkit.turn2yaw(self,tyaw) + tyaw = tyaw or 0 --temp + local yaw = self.object:get_yaw() + + local diff = tyaw-yaw + local step = self.dtime*6 + + if abs(diff) pi and -1 or 1 + + local nyaw = diff < 0 and yaw+step*-dirmod or yaw+step*dirmod + + if nyaw > pi then + nyaw=nyaw-pi*2 + elseif nyaw < -pi then + nyaw=nyaw+pi*2 + end + self.object:set_yaw(nyaw) +end + +function mobkit.dir_to_rot(v,rot) + rot = rot or {x=0,y=0,z=0} + return {x = (v.x==0 and v.y==0 and v.z==0) and rot.x or math.atan2(v.y,vector.length({x=v.x,y=0,z=v.z})), + y = (v.x==0 and v.z==0) and rot.y or minetest.dir_to_yaw(v), + z=rot.z} +end + +function mobkit.isnear2d(p1,p2,thresh) + if abs(p2.x-p1.x) < thresh and abs(p2.z-p1.z) < thresh then + return true + else + return false + end +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 + 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 + elseif dir.x > 0 then + return dest.x <= (-dir.z*dest.z - c)/dir.x + elseif dir.x < 0 then + return dest.x >= (-dir.z*dest.z - c)/dir.x + else + return false + end + +end + +function mobkit.isnear3d(p1,p2,thresh) + if abs(p2.x-p1.x) < thresh and abs(p2.z-p1.z) < thresh and abs(p2.y-p1.y) < thresh then + return true + else + return false + end +end + +function mobkit.is_alive(thing) -- thing can be luaentity or objectref. + if not thing then return false end + if type(thing) == 'table' then thing = thing.object end + if thing:is_player() then return thing:get_hp() > 0 + else + return thing:get_hp() > 100 + end +end + +function mobkit.exists(thing) + if not thing then return false end + if type(thing) == 'table' then thing=thing.object end + if thing and thing:get_yaw() then return true end +end + +-- function mobkit.animate(self,anim) + -- if self.animation and self.animation[anim] then + -- local crange = self.object:get_animation().range + -- if not crange + -- or crange.x ~= self.animation[anim].range.x + -- or crange.y ~= self.animation[anim].range.y then + -- self.object:set_animation(self.animation[anim].range,self.animation[anim].speed,0,self.animation[anim].loop) + -- end + -- end +-- end + +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) + else + self._anim = nil + end +end + +function mobkit.make_sound(self,sound) + if self.sounds and self.sounds[sound] then + minetest.sound_play(self.sounds[sound], {object=self.object}) + end +end + +function mobkit.is_neighbor_node_reachable(self,neighbor) -- todo: take either number or pos + local offset = neighbors[neighbor] + local pos=mobkit.get_stand_pos(self) + local tpos = mobkit.get_node_pos(mobkit.pos_shift(pos,offset)) + local height, liquidflag = mobkit.get_terrain_height(tpos) + + 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 + offset = neighbors[n2] + local t2 = mobkit.get_node_pos(mobkit.pos_shift(pos,offset)) + local h2 = mobkit.get_terrain_height(t2) + if h2 and h2 - pos.y > 0.02 then return end + n2 = (neighbor+1)%8 -- right neighbor + offset = neighbors[n2] + t2 = mobkit.get_node_pos(mobkit.pos_shift(pos,offset)) + h2 = mobkit.get_terrain_height(t2) + 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) + local pos1 = {x=pos.x,y=snpos.y+1,z=pos.z} -- current pos plus node up + 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 node.name=='ignore' or node.walkable then return end + else + 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 + end +end + +function mobkit.get_next_waypoint(self,tpos) + local pos = mobkit.get_stand_pos(self) + local dir=vector.direction(pos,tpos) + local neighbor = mobkit.dir2neighbor(dir) + local function update_pos_history(self,pos) + table.insert(self.pos_history,1,pos) + 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 + and not (nogopos and mobkit.isnear2d(pos2,nogopos,0.1)) then + + heightl = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-1)) + if heightl and abs(heightl-height)<0.001 then + heightr = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,1)) + if heightr and abs(heightr-height)<0.001 then + dir.y = 0 + local dirn = vector.normalize(dir) + local npos = mobkit.get_node_pos(mobkit.pos_shift(pos,neighbors[neighbor])) + local factor = abs(dirn.x) > abs(dirn.z) and abs(npos.x-pos.x) or abs(npos.z-pos.z) + pos2=mobkit.pos_shift(pos,{x=dirn.x*factor,z=dirn.z*factor}) + end + end + update_pos_history(self,pos2) + return height, pos2 + else + + for i=1,3 do + -- scan left + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-i*self.path_dir)) + 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 + -- scan right + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,i*self.path_dir)) + 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 + end + --scan rear + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,4)) + 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 + end + -- stuck condition here + table.remove(self.pos_history,2) + self.path_dir = self.path_dir*-1 -- subtle change in pathfinding +end + +function mobkit.get_next_waypoint_fast(self,tpos,nogopos) + local pos = mobkit.get_stand_pos(self) + 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)) + if heightl and abs(heightl-height)<0.001 then + heightr = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,1)) + if heightr and abs(heightr-height)<0.001 then + fast = true + dir.y = 0 + local dirn = vector.normalize(dir) + local npos = mobkit.get_node_pos(mobkit.pos_shift(pos,neighbors[neighbor])) + local factor = abs(dirn.x) > abs(dirn.z) and abs(npos.x-pos.x) or abs(npos.z-pos.z) + pos2=mobkit.pos_shift(pos,{x=dirn.x*factor,z=dirn.z*factor}) + end + end + return height, pos2, fast + else + + for i=1,4 do + -- scan left + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,-i)) + if height and not liq then return height,pos2 end + -- scan right + height, pos2, liq = mobkit.is_neighbor_node_reachable(self,mobkit.neighbor_shift(neighbor,i)) + if height and not liq then return height,pos2 end + end + end +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) + end + mobkit.lq_dumbwalk(self,pos2) + else + mobkit.lq_turn2pos(self,pos2) + mobkit.lq_dumbjump(self,height) + end + return true +end + +function mobkit.timer(self,s) -- returns true approx every s seconds + local t1 = floor(self.time_total) + local t2 = floor(self.time_total+self.dtime) + if t2>t1 and t2%s==0 then return true end +end + +-- Memory functions. +-- Stuff in memory is serialized, never try to remember objectrefs. +function mobkit.remember(self,key,val) + self.memory[key]=val +end + +function mobkit.forget(self,key) + self.memory[key] = nil +end + +function mobkit.recall(self,key) + return self.memory[key] +end + +-- Queue functions +function mobkit.queue_high(self,func,priority) + local maxprty = mobkit.get_queue_priority(self) + if priority > maxprty then + mobkit.clear_queue_low(self) + end + + for i,f in ipairs(self.hqueue) do + if priority > f.prty then + table.insert(self.hqueue,i,{func=func,prty=priority}) + return + end + end + table.insert(self.hqueue,{func=func,prty=priority}) +end + +function mobkit.queue_low(self,func) + table.insert(self.lqueue,func) +end + +function mobkit.is_queue_empty_low(self) + if #self.lqueue == 0 then return true + else return false end +end + +function mobkit.clear_queue_high(self) + self.hqueue = {} +end + +function mobkit.clear_queue_low(self) + self.lqueue = {} +end + +function mobkit.get_queue_priority(self) + if #self.hqueue > 0 then + return self.hqueue[1].prty + else return 0 end +end + +function mobkit.is_queue_empty_high(self) + if #self.hqueue == 0 then return true + else return false end +end + +function mobkit.get_nearby_player(self) -- returns random player if nearby or nil + for _,obj in ipairs(self.nearby_objects) do + if obj:is_player() and mobkit.is_alive(obj) then return obj end + end + return +end + +function mobkit.get_nearby_entity(self,name) -- returns random nearby entity of name or nil + for _,obj in ipairs(self.nearby_objects) do + if mobkit.is_alive(obj) and not obj:is_player() and obj:get_luaentity().name == name then return obj end + end + return +end + +function mobkit.get_closest_entity(self,name) -- returns closest entity of name or nil + local cobj = nil + local dist = abr*64 + local pos = self.object:get_pos() + for _,obj in ipairs(self.nearby_objects) do + local luaent = obj:get_luaentity() + if mobkit.is_alive(obj) and not obj:is_player() and luaent and luaent.name == name then + local opos = obj:get_pos() + local odist = abs(opos.x-pos.x) + abs(opos.z-pos.z) + if odist < dist then + dist=odist + cobj=obj + end + end + end + return cobj +end + +local function execute_queues(self) + --Execute hqueue + if #self.hqueue > 0 then + local func = self.hqueue[1].func + if func(self) then + table.remove(self.hqueue,1) + self.lqueue = {} + end + end + -- Execute lqueue + if #self.lqueue > 0 then + local func = self.lqueue[1] + if func(self) then + table.remove(self.lqueue,1) + end + end +end + +local function sensors() + local timer = 2 + local pulse = 1 + 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 + 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 + if obj == self.object then + table.remove(self.nearby_objects,i) + break + end + end + timer=2 + end + end +end +---------------------------- +-- LOW LEVEL QUEUE FUNCTIONS +---------------------------- + +function mobkit.lq_turn2pos(self,tpos) + local func=function(self) + local pos = self.object:get_pos() + return mobkit.turn2yaw(self, + minetest.dir_to_yaw(vector.direction(pos,tpos))) + end + mobkit.queue_low(self,func) +end + +function mobkit.lq_idle(self,duration) + local init = true + local func=function(self) + if init then + mobkit.animate(self,'stand') + init=false + end + duration = duration-self.dtime + if duration <= 0 then return true end + end + mobkit.queue_low(self,func) +end + +function mobkit.lq_dumbwalk(self,dest,speed_factor) + local timer = 3 -- failsafe + speed_factor = speed_factor or 1 + local func=function(self) + 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 + + if mobkit.is_there_yet2d(pos,minetest.yaw_to_dir(self.object:get_yaw()),dest) then +-- if mobkit.isnear2d(pos,dest,0.25) then + if not self.isonground or abs(dest.y-pos.y) > 0.1 then -- prevent uncontrolled fall when velocity too high +-- 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 + end + + if self.isonground then + local dir = vector.normalize(vector.direction({x=pos.x,y=0,z=pos.z}, + {x=dest.x,y=0,z=dest.z})) + dir = vector.multiply(dir,self.max_speed*speed_factor) +-- self.object:set_yaw(minetest.dir_to_yaw(dir)) + mobkit.turn2yaw(self,minetest.dir_to_yaw(dir)) + dir.y = y + self.object:set_velocity(dir) + end + end + mobkit.queue_low(self,func) +end + +-- initial velocity for jump height h, v= a*sqrt(h*2/a) ,add 20% +function mobkit.lq_dumbjump(self,height) + local jump = true + local func=function(self) + local yaw = self.object:get_yaw() + if self.isonground then + if jump then + mobkit.animate(self,'stand') + local dir = minetest.yaw_to_dir(yaw) + dir.y = -mobkit.gravity*sqrt((height+0.35)*2/-mobkit.gravity) + self.object:set_velocity(dir) + jump = false + else -- the eagle has landed + return true + end + else + local dir = minetest.yaw_to_dir(yaw) + local vel = self.object:get_velocity() + if self.lastvelocity.y < 0.9 then + dir = vector.multiply(dir,3) + end + dir.y = vel.y + self.object:set_velocity(dir,yaw) + end + end + mobkit.queue_low(self,func) +end + +function mobkit.lq_jumpout(self) + local phase = 1 + local func=function(self) + local vel=self.object:get_velocity() + if phase == 1 then + vel.y=vel.y+5 + self.object:set_velocity(vel) + phase = 2 + else + if vel.y < 0 then return true end + local dir = minetest.yaw_to_dir(self.object:get_yaw()) + dir.y=vel.y + self.object:set_velocity(dir) + end + end + mobkit.queue_low(self,func) +end + +function mobkit.lq_freejump(self) + local phase = 1 + local func=function(self) + local vel=self.object:get_velocity() + if phase == 1 then + vel.y=vel.y+6 + self.object:set_velocity(vel) + phase = 2 + else + if vel.y <= 0.01 then return true end + local dir = minetest.yaw_to_dir(self.object:get_yaw()) + dir.y=vel.y + self.object:set_velocity(dir) + end + end + mobkit.queue_low(self,func) +end + +function mobkit.lq_jumpattack(self,height,target) + local phase=1 + local func=function(self) + if not mobkit.is_alive(target) then return true end + if self.isonground then + if phase==1 then -- collision bug workaround + local vel = self.object:get_velocity() + vel.y = -mobkit.gravity*sqrt(height*2/-mobkit.gravity) + self.object:set_velocity(vel) + mobkit.make_sound(self,'charge') + phase=2 + else + return true + end + elseif phase==2 then + local dir = minetest.yaw_to_dir(self.object:get_yaw()) + local vy = self.object:get_velocity().y + dir=vector.multiply(dir,6) + dir.y=vy + self.object:set_velocity(dir) + phase=3 + elseif phase==3 then -- in air + local twidth = target:get_properties().collisionbox[1] + local pos = self.object:get_pos() + -- calculate attack spot + local dir = minetest.yaw_to_dir(self.object:get_yaw()) + dir2 = vector.add(dir,self.attack.range+twidth) + local apos = vector.add(pos,dir2) +-- local tpos = mobkit.get_stand_pos(target) --test +-- tpos.y = tpos.y+height + if mobkit.isnear2d(apos,target:get_pos(),0.25) 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}) + -- play attack sound if defined + mobkit.make_sound(self,'attack') + phase=4 + end + end + end + mobkit.queue_low(self,func) +end + +function mobkit.lq_fallover(self) + local zrot = 0 + local init = true + local func=function(self) + if init then + local vel = self.object:get_velocity() + self.object:set_velocity(mobkit.pos_shift(vel,{y=1})) + mobkit.animate(self,'stand') + init = false + end + zrot=zrot+pi*0.05 + local rot = self.object:get_rotation() + self.object:set_rotation({x=rot.x,y=rot.y,z=zrot}) + if zrot >= pi*0.5 then return true end + end + mobkit.queue_low(self,func) +end +----------------------------- +-- HIGH LEVEL QUEUE FUNCTIONS +----------------------------- + +function mobkit.dumbstep(self,height,tpos,speed_factor) + if height <= 0.001 then + mobkit.lq_turn2pos(self,tpos) + mobkit.lq_dumbwalk(self,tpos,speed_factor) + else + mobkit.lq_turn2pos(self,tpos) + mobkit.lq_dumbjump(self,height) + end + mobkit.lq_idle(self,random(1,6)) +end + +function mobkit.hq_roam(self,prty) + local func=function(self) + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local neighbor = random(8) + + local height, tpos, liquidflag = mobkit.is_neighbor_node_reachable(self,neighbor) + if height and not liquidflag then mobkit.dumbstep(self,height,tpos,0.3) end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_follow0(self,tgtobj) -- probably delete this one + local func = function(self) + if not tgtobj then return true end + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + if vector.distance(pos,opos) > 3 then + local neighbor = mobkit.dir2neighbor(vector.direction(pos,opos)) +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 + 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) + break + end --scan right + height, tpos = mobkit.is_neighbor_node_reachable(self,(neighbor+i-1)%8+1) + if height then mobkit.dumbstep(self,height,tpos) + break + end + end + end + else + mobkit.lq_idle(self,1) + end + end + end + mobkit.queue_high(self,func,0) +end + +function mobkit.hq_follow(self,prty,tgtobj) + local func = function(self) + if not mobkit.is_alive(tgtobj) then return true end + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + if vector.distance(pos,opos) > 3 then + mobkit.goto_next_waypoint(self,opos) + else + mobkit.lq_idle(self,1) + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_goto(self,prty,tpos) + local func = function(self) + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + if vector.distance(pos,tpos) > 3 then + mobkit.goto_next_waypoint(self,tpos) + else + return true + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_runfrom(self,prty,tgtobj) + local init=true + local func = function(self) + if init then + mobkit.make_sound(self,'scared') + init=false + end + if not mobkit.is_alive(tgtobj) then return true end + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + if vector.distance(pos,opos) < self.view_range then + local tpos = {x=2*pos.x - opos.x, + y=opos.y, + z=2*pos.z - opos.z} + mobkit.goto_next_waypoint(self,tpos) + else + self.object:set_velocity({x=0,y=0,z=0}) + return true + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_hunt(self,prty,tgtobj) + local func = function(self) + if not mobkit.is_alive(tgtobj) then return true end + if mobkit.is_queue_empty_low(self) and self.isonground then + local pos = mobkit.get_stand_pos(self) + local opos = tgtobj:get_pos() + local dist = vector.distance(pos,opos) + if dist > self.view_range then + return true + elseif dist > 3 then + mobkit.goto_next_waypoint(self,opos) + else + mobkit.hq_attack(self,prty+1,tgtobj) + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_warn(self,prty,tgtobj) + timer=0 + tgttime = 0 + local func = function(self) + if not mobkit.is_alive(tgtobj) then return true end + 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 +-- mobkit.clear_queue_high(self) + mobkit.remember(self,'hate',tgtobj:get_player_name()) + mobkit.hq_hunt(self,prty+1,tgtobj) -- priority + else + timer = timer+self.dtime + if mobkit.is_queue_empty_low(self) then + mobkit.lq_turn2pos(self,opos) + end + -- make noise in random intervals + if timer > tgttime then + mobkit.make_sound(self,'warn') + -- if self.sounds and self.sounds.warn then + -- minetest.sound_play(self.sounds.warn, {object=self.object}) + -- end + tgttime = timer + 1.1 + random()*1.5 + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_die(self) + local timer = 5 + local start = true + local func = function(self) + if start then + mobkit.lq_fallover(self) + self.brainfunc = function(self) end -- brain dead as well + start=false + end + timer = timer-self.dtime + if timer < 0 then self.object:remove() end + end + mobkit.queue_high(self,func,100) +end + +function mobkit.hq_attack(self,prty,tgtobj) + local func = function(self) + if not mobkit.is_alive(tgtobj) then return true end + if mobkit.is_queue_empty_low(self) then + local pos = mobkit.get_stand_pos(self) +-- local tpos = tgtobj:get_pos() + local tpos = mobkit.get_stand_pos(tgtobj) + local dist = vector.distance(pos,tpos) + if dist > 3 then + return true + else + mobkit.lq_turn2pos(self,tpos) + local height = tgtobj:is_player() and 0.8 or tgtobj:get_luaentity().height*0.6 + 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 + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_liquid_recovery(self,prty) -- scan for nearest land + local radius = 1 + local yaw = 0 + local func = function(self) + if not self.isinliquid then return true end + local pos=self.object:get_pos() + local vec = minetest.yaw_to_dir(yaw) + local pos2 = mobkit.pos_shift(pos,vector.multiply(vec,radius)) + local height, liquidflag = mobkit.get_terrain_height(pos2) + if height and not liquidflag then + mobkit.hq_swimto(self,prty,pos2) + return true + end + yaw=yaw+pi*0.25 + if yaw>2*pi then + yaw = 0 + radius=radius+1 + if radius > self.view_range then + self.object:set_hp(99) + end + end + end + mobkit.queue_high(self,func,prty) +end + +function mobkit.hq_swimto(self,prty,tpos) + local func = function(self) +-- if not self.isinliquid and mobkit.is_queue_empty_low(self) then return true end + if not self.isinliquid and self.isonground then return true end +-- local pos = self.object:get_pos() + local pos = mobkit.get_stand_pos(self) + local y=self.object:get_velocity().y + 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 offset=self.collisionbox[1] + 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 + 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 + mobkit.lq_freejump(self) + end + end + elseif mobkit.turn2yaw(self,yaw) then + dir.y = y + self.object:set_velocity(dir) + end + end + mobkit.queue_high(self,func,prty) +end + +------------ +-- CALLBACKS +------------ + +function mobkit.default_brain(self) + if mobkit.is_queue_empty_high(self) then mobkit.hq_roam(self,0) end +end + +function mobkit.statfunc(self) + local tmptab={} + tmptab.memory = self.memory + tmptab._hp = self.object:get_hp() + return minetest.serialize(tmptab) +end + +function mobkit.actfunc(self, staticdata, dtime_s) + self.lqueue = {} + self.hqueue = {} + self.nearby_objects = {} + self.nearby_players = {} + self.pos_history = {} + self.path_dir = 1 + self.time_total = 0 + if not self.memory then self.memory = {} end + + local sdata = minetest.deserialize(staticdata) + if sdata then + for k,v in pairs(sdata) do + self[k] = v + end + end + + if self.timeout and self.timeout>0 and dtime_s > self.timeout and next(self.memory)==nil then + self.object:remove() + end + + self.object:set_hp(self._hp or self.max_hp) + self.object:set_armor_groups(self.armor_groups or {fleshy=100}) + self.oxygen = self.oxygen or self.lung_capacity + self.lastvelocity = {x=0,y=0,z=0} + self.height = self.collisionbox[5] - self.collisionbox[2] + self.sensefunc=sensors() +end + +function mobkit.stepfunc(self,dtime) -- not intended to be modified + self.dtime = dtime +-- 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 + self.isonground = true + else + self.isonground = false + end + + -- dumb friction + if self.isonground then + self.object:set_velocity({x= vel.x> 0.2 and vel.x*mobkit.friction or 0, + 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 + end + end + end + + if not vector.equals(vel,vnew) then + self.collided = true + else + if self.collided then + vnew = vector.new(self.lastvelocity) + end + self.collided = false + end + + self.object:set_velocity(vnew) + end + + -- buoyancy + local spos = mobkit.get_stand_pos(self) + spos.y = spos.y+0.01 + -- get surface height +-- local surface = mobkit.get_node_pos(spos).y+0.5 + local surface = nil + local snodepos = mobkit.get_node_pos(spos) + local surfnode = mobkit.nodeatpos(spos) + while surfnode and surfnode.drawtype == 'liquid' do + surface = snodepos.y+0.5 + if surface > spos.y+self.height then break end + snodepos.y = snodepos.y+1 + surfnode = mobkit.nodeatpos(snodepos) + end + if surface then -- standing in liquid + self.isinliquid = true + local submergence = min(surface-spos.y,self.height) + local balance = self.buoyancy*self.height + local buoyacc = mobkit.gravity*((balance - submergence)^2/balance^2*sign(balance - submergence)) + self.object:set_acceleration({x=-vel.x,y=buoyacc-vel.y*abs(vel.y)*0.7,z=-vel.z}) + else + self.isinliquid = false + self.object:set_acceleration({x=0,y=mobkit.gravity,z=0}) + end + + + + -- local footnode = mobkit.nodeatpos(spos) + -- local headnode + -- if footnode and footnode.drawtype == 'liquid' then + + -- vel = self.object:get_velocity() + -- headnode = mobkit.nodeatpos(mobkit.pos_shift(spos,{y=self.height or 0})) -- TODO: height may be nil + -- local submergence = headnode.drawtype=='liquid' + -- and self.buoyancy-1 + -- or (self.buoyancy*self.height-(1-(spos.y+0.5)%1))^2/(self.buoyancy*self.height)^2*sign(self.buoyancy*self.height-(1-(spos.y+0.5)%1)) + + -- local buoyacc = submergence * mobkit.gravity + -- self.object:set_acceleration({x=-vel.x,y=buoyacc-vel.y*abs(vel.y)*0.5,z=-vel.z}) + + -- end + + if self.brainfunc then + -- vitals: fall damage + vel = self.object:get_velocity() + local velocity_delta = abs(self.lastvelocity.y - vel.y) + if velocity_delta > mobkit.safe_velocity then + self.object:set_hp(self.object:get_hp() - floor((self.max_hp-100) * min(1, velocity_delta/mobkit.terminal_velocity))) +-- minetest.chat_send_all(dump(floor((self.max_hp-100) * min(1, velocity_delta/mobkit.terminal_velocity)))) + end + + -- vitals: oxygen + local headnode = mobkit.nodeatpos(mobkit.pos_shift(self.object:get_pos(),{y=self.collisionbox[5]})) -- node at hitbox top + 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.object:set_hp(99) end -- drown + + + self:sensefunc() + self:brainfunc() + execute_queues(self) + end + + self.lastvelocity = self.object:get_velocity() + self.time_total=self.time_total+self.dtime +end \ No newline at end of file diff --git a/mobkit/mobkit_api.txt b/mobkit/mobkit_api.txt new file mode 100644 index 0000000..c537acc --- /dev/null +++ b/mobkit/mobkit_api.txt @@ -0,0 +1,461 @@ +Contents + +1 Concepts + 1.1 Behavior functions + 1.1.1 Low level functions + 1.1.2 High level functions + 1.1.2.1 Priority + 1.2 Brain function + 1.3 Processing diagram + 1.4 Entity definition + +2 Reference + 2.1 Utility functions + 2.2 Built in behaviors + 2.2.1 High level behaviors + 2.2.2 Low level behaviors + 2.3 Constants and member variables + +----------- +1. Concepts +----------- + +1.1 Behavior functions + +These are the most fundamental units of code, every action entities can perform is a separate function. +There are two types of behaviors: +- low level, these govern physical actions and interactions (think moves) +- high level, these are logical structures governing low level behaviors in order to perform more complex tasks + +Behaviors run for considerable amount of time, this means the functions are being called repeatedly on consecutive engine steps. +Therefore a need for preserving state between calls, this is why they are implemented as closures, see defining conventions for details. + +Behavior functions are active until they finish the job, are removed from the queue or superseded by a higher priority behavior. +They signal finished state by returning true, therefore it's very important to carefully design the completion conditions + +For a behavior to begin executing it has to be put on a queue. There are two separate queues, one for low and one for high level behaviors. +Queuing is covered by behavour defining conventions + +!!! In simplest scenarios there's no need to code behaviors, much can be achieved using only built-in stuff !!! +!!! To start using the api it's enough to learn defining mobs and writing brain functions !!! + + +1.1.1 Low level behavior functions + +These are physical actions and interactions: steps, jumps, turns etc. here you'll set velocity, yaw, kick off animations and sounds. + +Low level behavior definition: + +function mobkit.lq_bhv1(self,[optional additional persistent parameters]) -- enclosing function + ... -- optional definitions of additional persistent variables + local func=function(self) -- enclosed function, self is mandatory and the only allowed parameter + ... -- actual function definition, remember to return true eventually + end + mobkit.queue_low(self,func) -- this will queue the behavior at the time of lq_bhv1 call +end + + +1.1.2 High level behavior functions + +These are complex tasks like getting to a position, following other objects, hiding, patrolling an area etc. +Their job is tracking changes in the environment and managing low level behavior queue accordingly. + +High level behavior definition: + +function mobkit.hq_bhv1(self,priority,[optional additional persistent parameters]) -- enclosing function + ... -- optional definitions of additional persistent variables + local func=function(self) -- enclosed function, self is mandatory and the only allowed parameter + ... -- actual function definition, remember to return true eventually + end + mobkit.queue_high(self,func,priority) -- this will queue the behavior at the time of hq_bhv1 call +end + + +1.1.2.1 Priority + +Unlike low level behaviors which are executed in FIFO order, high level behaviors support prioritization. +This concept is essential for making sure the right behavior is active at the right time. +Prioritization is what makes it possible to interrupt a task in order to perform a more important one + +The currently executing behavior is always the first in the queue. +When a new behavior is placed onto the queue: +If the queue is not empty a new behavior is inserted before the first behavior of lower priority if such exists, or last. +If the new behavior supersedes the one currently executing, low level queue is purged immediately. + +Common idioms: + +hq_bhv1(self,prty): + ... + hq_bhv2(self,prty) -- bhv1 kicks off bhv2 with equal priority + return true -- and ends, + -- bhv2 becomes active on the next engine step. + +hq_bhv1(self,prty): + ... + hq_bhv2(self,prty+1) -- bhv1 kicks off bhv2 with higher priority + -- bhv2 takes over and when it ends, bhv1 resumes. + + +Particular prioritization scheme is to be designed by the user according to specific mod requirements. + + +1.2 Brain function +------------------ +Every mob must have one. +Its job is managing high level behavior queue in response to events which are not intercepted by callbacks. +Contrary to what the name suggests, these functions needn't necessarily be too complex thanks to their limited responsibilities. + +Typical flow might look like this: + +if mobkit.timer(self,1) then -- returns true approx every second + local prty = mobkit.get_queue_priority(self) + + if prty < 20 + if ... then + hq_do_important_stuff(self,20) + return + end + end + + if prty < 10 then + if ... then + hq_do_something_else(self,10) + return + elseif ... then + hq_do_this_instead(self,10) + return + end + end + + if mobkit.is_queue_empty_high(self) then + hq_fool_around(self,0) + end +end + + +1.3 Processing diagram +---------------------- + + --------------------------------------- +| PHYSICS | +| | +| ----------------------- | +| | Brain Function | | +| ----------------------- | +| | | +| -----|----------------- | +| | V HL Queue | | +| | | 1 | 2 | 3 |... | | +| ----------------------- | +| | | +| -----|----------------- | +| | V LL Queue | | +| | | 1 | 2 | 3 |... | | +| ----------------------- | +| | + --------------------------------------- + + Order of execution during an engine step: + First comes physics: gravity, buoyancy, friction etc., then the brain function is called. + After that, the first behavior on the high level queue, if exists, + and the last, the first low level behavior if present. + +1.4 Entity definition +--------------------- + +minetest.register_entity("mod:name",{ + + -- required minetest api props + + physical = true, + collide_with_objects = true, + collisionbox = {...}, + visual = "mesh", + mesh = "...", + textures = {...}, + + + -- required mobkit props + + timeout = [num], -- entities are removed after this many seconds inactive + -- 0 is never + -- mobs having memory entries are not affected + + buoyancy = [num], -- (0,1) - portion of collisionbox submerged + -- = 1 - controlled buoyancy (fish, submarine) + -- > 1 - drowns + -- < 0 - MC like water trampolining + + lung_capacity = [num], -- seconds + max_hp = [num], + on_step = mobkit.stepfunc, + on_activate = mobkit.actfunc, + get_staticdata = mobkit.statfunc, + brainfunc = [function user defined], + + -- optional mobkit props + -- or used by built in behaviors + + animation = { + [name]={range={x=[num],y=[num]},speed=[num],loop=[bool]}, -- single + + [name]={ -- variant, animations are chosen randomly. + {range={x=[num],y=[num]},speed=[num],loop=[bool]}, + {range={x=[num],y=[num]},speed=[num],loop=[bool]}, + ... + } + ... + } + sounds = { + [name] = [string filename], + ... + } + max_speed = [num], -- m/s + jump_height = [num], -- nodes/meters + view_range = [num], -- nodes/meters + attack={range=[num], -- range is distance between attacker's collision box center + damage_groups={fleshy=[num]}}, -- and the tip of the murder weapon in nodes/meters +}) + + +------------ +2. Reference +------------ + +2.1 Utility Functions + +function mobkit.get_terrain_height(pos,steps) + -- recursively search for walkable surface at pos. + -- steps (optional) is how far from pos it gives up, expressed in nodes, default 3 + -- Returns: + -- surface height at pos, or nil if not found + -- liquid flag: true if found surface is covered with liquid + +function mobkit.timer(self,s) + -- returns true approx every s seconds + -- used to reduce execution of code that needn't necessarily be done on every engine step + +function mobkit.pos_shift(pos,vec) + -- convenience function + -- returns pos shifted by vec + -- vec needn't have all three components given, absent components are assumed zero. + -- e.g pos_shift(pos,{y=1}) is valid + +function mobkit.get_stand_pos(thing) + -- returns object pos projected onto the bottom collisionbox face + -- thing can be luaentity or objectref. + +function mobkit.nodeatpos(pos) + -- convenience function + -- returns nodedef or nil if it's an ignore node + +function mobkit.get_node_pos(pos) + -- returns center of the node that pos is inside + +function mobkit.get_nodes_in_area(pos1,pos2,[full]) + -- in basic mode returns a table of unique nodes within area indexed by node + -- in full=true mode returns a table of nodes indexed by pos + -- works for up to 125 nodes. + +function mobkit.isnear2d(p1,p2,thresh) + -- returns true if pos p2 is within a square with center at pos p1 and radius thresh + -- y components are ignored + +function mobkit.is_there_yet2d(pos,dir,dest) -- obj positon; facing vector; destination position + -- returns true if a position dest is behind position pos according to facing vector dir + -- (checks if dest is in the rear half plane as defined by pos and dir) + -- y components are ignored + +function mobkit.isnear3d(p1,p2,thresh) + -- returns true if pos p2 is within a cube with center at pos p1 and radius thresh + +function mobkit.dir_to_rot(v,rot) + -- converts a 3d vector v to rotation like in set_rotation() object method + -- rot (optional) is current object rotation + +function mobkit.is_alive(thing) + -- non essential, checks if thing exists in the world and is alive + -- makes an assumption that luaentities are considered dead when their hp < 100 + -- thing can be luaentity or objectref. + -- used for stored luaentities and objectrefs + +function mobkit.exists(thing) + -- checks if thing exists in the world + -- thing can be luaentity or objectref. + -- used for stored luaentities and objectrefs + +function mobkit.get_spawn_pos_abr(dtime,intrvl,radius,chance,reduction) + -- returns a potential spawn position at random intervals + -- intrvl: avg spawn attempt interval for every player + -- radius: spawn distance in nodes, active_block_range*16 is recommended + -- chance: (0,1) chance to spawn a mob if there are no other objects in area + -- reduction: (0,1) spawn chance is reduced by this factor for every object in range. + --usage: + minetest.register_globalstep(function(dtime) + local spawnpos = mobkit.get_spawn_pos_abr(...) + if spawnpos then + ... -- mod/game specific logic + end + end) + +function mobkit.animate(self,anim) + -- makes an entity play an animation of name anim, or does nothing if not defined + -- anim is string, see entity definition + -- does nothing if the same animation is already running + +function mobkit.make_sound(self,sound) + -- sound is string, see entity definition + -- makes an entity play sound, or does nothing if not defined + + +-- Memory functions. + +This represents mob long term memory +Warning: Stuff in memory is serialized, never try to remember objectrefs or tables referencing them +or the engine will crash. + +function mobkit.remember(self,key,val) + -- premanently store a key, value pair +function mobkit.forget(self,key) + -- clears a memory entry +function mobkit.recall(self,key) + -- returns val associated with key + +-- Queue functions + +function mobkit.queue_high(self,func,priority) + -- only for use in behavior definitions, see 1.1.2 + +function mobkit.queue_low(self,func) + -- only for use in behavior definitions, see 1.1.1 + + +function mobkit.clear_queue_high(self) +function mobkit.clear_queue_low(self) + +function mobkit.is_queue_empty_high(self) +function mobkit.is_queue_empty_low(self) + +function mobkit.get_queue_priority(self) + -- returns the priority of currently running behavior + -- this is also the highest of all queued behaviors + + +-- Use these inside brain functions -- + +function mobkit.get_nearby_player(self) + -- returns random player if nearby or nil +function mobkit.get_nearby_entity(self,name) + -- returns random nearby entity of name or nil +function mobkit.get_closest_entity(self,name) + -- returns closest entity of name or nil + + +-- Misc + +Neighbors structure represents a node's horizontal neighbors +Not essential, used by some built in behaviors +Custom behaviors may not need it. + +Neighbor #1 is offset {x=1,z=0}, subsequent numbers go clockwise + +function mobkit.dir2neighbor(dir) + -- converts a 3d vector to neighbor number, y component ignored + +function mobkit.neighbor_shift(neighbor,shift) + -- get another neighbor number relative to the given, shift: plus is clockwise, minus the opposite + -- 1,1 = 2; 1,-2 = 7 + + +2.2 Built in behaviors + +function mobkit.goto_next_waypoint(self,tpos) + -- this functions groups common operations making mobs move in a specific direction + -- not a behavior itself, but is used by some built in HL behaviors + -- which use node by node movement algorithm + +2.2.1 High Level Behaviors -- + +function mobkit.hq_roam(self,prty) + -- slow random roaming + -- never returns + +function mobkit.hq_follow(self,prty,tgtobj) + -- follow the tgtobj + -- returns if tgtobj becomes inactive + +function mobkit.hq_goto(self,prty,tpos) + -- go to tpos position + -- returns on arrival + +function mobkit.hq_runfrom(self,prty,tgtobj) + -- run away from tgtobj object + -- returns when tgtobj far enough + +function mobkit.hq_hunt(self,prty,tgtobj) + -- follow tgtobj and when close enough, kick off hq_attack + -- returns when tgtobj too far + +function mobkit.hq_warn(self,prty,tgtobj) + -- when a tgtobj close by, turn towards them and make the 'warn' sound + -- kick off hq_hunt if tgtobj too close or timer expired + -- returns when tgtobj moves away + +function mobkit.hq_die(self) + -- default death, rotate and remove() after set time + +function mobkit.hq_attack(self,prty,tgtobj) + -- default attack, turns towards tgtobj and leaps + -- returns when tgtobj out of range + +function mobkit.hq_liquid_recovery(self,prty) + -- use when submerged in liquid, scan for nearest land + -- if land is found within view_range, kick off hq_swimto + -- otherwise die + +function mobkit.hq_swimto(self,prty,tpos) + -- swim towards the position tpos, jump if necessary + -- returns if standing firmly on dry land + + +2.2.2 Low Level Behaviors -- + +function mobkit.lq_turn2pos(self,tpos) + -- gradually turn towards tpos position + -- returns when facing tpos + +function mobkit.lq_idle(self,duration) + -- do nothing for duration seconds + -- set 'stand' animation + +function mobkit.lq_dumbwalk(self,dest,speed_factor) + -- simply move towards dest + -- set 'walk' animation + +function mobkit.lq_dumbjump(self,height) + -- if standing on the ground, jump in the facing direction + -- height is relative to feet level + -- set 'stand' animation + +function mobkit.lq_freejump(self) + -- unconditional jump in the facing direction + -- useful e.g for getting out of water + -- returns when the apex has been reached + +function mobkit.lq_jumpattack(self,height,target) + -- jump towards the target, punch if a hit + -- returns after punch or on the ground + +function mobkit.lq_fallover(self) + -- gradually rotates Z = 0 to pi/2 + + +2.3 Constants and member variables -- + +mobkit.gravity = -9.8 +mobkit.friction = 0.4 -- inert entities will slow down when in contact with the ground + -- the smaller the number, the greater the effect + +self.dtime -- for convenience, dtime as passed to currently executing on_step() +self.isonground -- true if y velocity is 0 for at least two succesive steps +self.isinliquid -- true if feet submerged in liquid type=source \ No newline at end of file diff --git a/beaver_mobkit.lua b/modpack.txt similarity index 100% rename from beaver_mobkit.lua rename to modpack.txt diff --git a/CHANGELOG.md b/petz/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to petz/CHANGELOG.md diff --git a/LICENSE.md b/petz/LICENSE.md similarity index 100% rename from LICENSE.md rename to petz/LICENSE.md diff --git a/petz/README.md b/petz/README.md new file mode 100644 index 0000000..bf5fa29 --- /dev/null +++ b/petz/README.md @@ -0,0 +1,3 @@ +# Petz [petz] + +Cute kawaii mobs. diff --git a/api.lua b/petz/api.lua similarity index 100% rename from api.lua rename to petz/api.lua diff --git a/chimp_mobkit.lua b/petz/beaver_mobkit.lua similarity index 100% rename from chimp_mobkit.lua rename to petz/beaver_mobkit.lua diff --git a/behaviours.lua b/petz/behaviours.lua similarity index 100% rename from behaviours.lua rename to petz/behaviours.lua diff --git a/calf_mobkit.lua b/petz/calf_mobkit.lua similarity index 100% rename from calf_mobkit.lua rename to petz/calf_mobkit.lua diff --git a/chicken_mobkit.lua b/petz/chicken_mobkit.lua similarity index 100% rename from chicken_mobkit.lua rename to petz/chicken_mobkit.lua diff --git a/clownfish_mobkit.lua b/petz/chimp_mobkit.lua similarity index 100% rename from clownfish_mobkit.lua rename to petz/chimp_mobkit.lua diff --git a/frog_mobkit.lua b/petz/clownfish_mobkit.lua similarity index 100% rename from frog_mobkit.lua rename to petz/clownfish_mobkit.lua diff --git a/docs/images/baby_pony.png b/petz/docs/images/baby_pony.png similarity index 100% rename from docs/images/baby_pony.png rename to petz/docs/images/baby_pony.png diff --git a/docs/images/beaver.png b/petz/docs/images/beaver.png similarity index 100% rename from docs/images/beaver.png rename to petz/docs/images/beaver.png diff --git a/docs/images/beaver_dam.png b/petz/docs/images/beaver_dam.png similarity index 100% rename from docs/images/beaver_dam.png rename to petz/docs/images/beaver_dam.png diff --git a/docs/images/beaver_oil.png b/petz/docs/images/beaver_oil.png similarity index 100% rename from docs/images/beaver_oil.png rename to petz/docs/images/beaver_oil.png diff --git a/docs/images/brush.png b/petz/docs/images/brush.png similarity index 100% rename from docs/images/brush.png rename to petz/docs/images/brush.png diff --git a/docs/images/calf.png b/petz/docs/images/calf.png similarity index 100% rename from docs/images/calf.png rename to petz/docs/images/calf.png diff --git a/docs/images/chicken.png b/petz/docs/images/chicken.png similarity index 100% rename from docs/images/chicken.png rename to petz/docs/images/chicken.png diff --git a/docs/images/chimp.png b/petz/docs/images/chimp.png similarity index 100% rename from docs/images/chimp.png rename to petz/docs/images/chimp.png diff --git a/docs/images/clownfish.png b/petz/docs/images/clownfish.png similarity index 100% rename from docs/images/clownfish.png rename to petz/docs/images/clownfish.png diff --git a/docs/images/duck_chicken_farm.png b/petz/docs/images/duck_chicken_farm.png similarity index 100% rename from docs/images/duck_chicken_farm.png rename to petz/docs/images/duck_chicken_farm.png diff --git a/docs/images/ducky.png b/petz/docs/images/ducky.png similarity index 100% rename from docs/images/ducky.png rename to petz/docs/images/ducky.png diff --git a/docs/images/fish_tank.png b/petz/docs/images/fish_tank.png similarity index 100% rename from docs/images/fish_tank.png rename to petz/docs/images/fish_tank.png diff --git a/docs/images/frog.png b/petz/docs/images/frog.png similarity index 100% rename from docs/images/frog.png rename to petz/docs/images/frog.png diff --git a/docs/images/grizzly.png b/petz/docs/images/grizzly.png similarity index 100% rename from docs/images/grizzly.png rename to petz/docs/images/grizzly.png diff --git a/docs/images/hello.svg b/petz/docs/images/hello.svg similarity index 100% rename from docs/images/hello.svg rename to petz/docs/images/hello.svg diff --git a/docs/images/kennel.png b/petz/docs/images/kennel.png similarity index 100% rename from docs/images/kennel.png rename to petz/docs/images/kennel.png diff --git a/docs/images/kitty.png b/petz/docs/images/kitty.png similarity index 100% rename from docs/images/kitty.png rename to petz/docs/images/kitty.png diff --git a/docs/images/lamb.png b/petz/docs/images/lamb.png similarity index 100% rename from docs/images/lamb.png rename to petz/docs/images/lamb.png diff --git a/docs/images/lash.png b/petz/docs/images/lash.png similarity index 100% rename from docs/images/lash.png rename to petz/docs/images/lash.png diff --git a/docs/images/lion.png b/petz/docs/images/lion.png similarity index 100% rename from docs/images/lion.png rename to petz/docs/images/lion.png diff --git a/docs/images/panda.png b/petz/docs/images/panda.png similarity index 100% rename from docs/images/panda.png rename to petz/docs/images/panda.png diff --git a/docs/images/parrot.png b/petz/docs/images/parrot.png similarity index 100% rename from docs/images/parrot.png rename to petz/docs/images/parrot.png diff --git a/docs/images/pet_bowl.png b/petz/docs/images/pet_bowl.png similarity index 100% rename from docs/images/pet_bowl.png rename to petz/docs/images/pet_bowl.png diff --git a/docs/images/petz_items.png b/petz/docs/images/petz_items.png similarity index 100% rename from docs/images/petz_items.png rename to petz/docs/images/petz_items.png diff --git a/docs/images/petz_logo.png b/petz/docs/images/petz_logo.png similarity index 100% rename from docs/images/petz_logo.png rename to petz/docs/images/petz_logo.png diff --git a/docs/images/pigeon.png b/petz/docs/images/pigeon.png similarity index 100% rename from docs/images/pigeon.png rename to petz/docs/images/pigeon.png diff --git a/docs/images/piggy.png b/petz/docs/images/piggy.png similarity index 100% rename from docs/images/piggy.png rename to petz/docs/images/piggy.png diff --git a/docs/images/pony.png b/petz/docs/images/pony.png similarity index 100% rename from docs/images/pony.png rename to petz/docs/images/pony.png diff --git a/docs/images/pony_breeding.png b/petz/docs/images/pony_breeding.png similarity index 100% rename from docs/images/pony_breeding.png rename to petz/docs/images/pony_breeding.png diff --git a/docs/images/puppy.png b/petz/docs/images/puppy.png similarity index 100% rename from docs/images/puppy.png rename to petz/docs/images/puppy.png diff --git a/docs/images/squareball.png b/petz/docs/images/squareball.png similarity index 100% rename from docs/images/squareball.png rename to petz/docs/images/squareball.png diff --git a/docs/images/tropicalfish.png b/petz/docs/images/tropicalfish.png similarity index 100% rename from docs/images/tropicalfish.png rename to petz/docs/images/tropicalfish.png diff --git a/docs/images/turtle.png b/petz/docs/images/turtle.png similarity index 100% rename from docs/images/turtle.png rename to petz/docs/images/turtle.png diff --git a/docs/petz.md b/petz/docs/petz.md similarity index 100% rename from docs/petz.md rename to petz/docs/petz.md diff --git a/ducky_mobkit.lua b/petz/ducky_mobkit.lua similarity index 100% rename from ducky_mobkit.lua rename to petz/ducky_mobkit.lua diff --git a/food.lua b/petz/food.lua similarity index 100% rename from food.lua rename to petz/food.lua diff --git a/pigeon_mobkit.lua b/petz/frog_mobkit.lua similarity index 100% rename from pigeon_mobkit.lua rename to petz/frog_mobkit.lua diff --git a/grizzly_mobkit.lua b/petz/grizzly_mobkit.lua similarity index 100% rename from grizzly_mobkit.lua rename to petz/grizzly_mobkit.lua diff --git a/init.lua b/petz/init.lua similarity index 100% rename from init.lua rename to petz/init.lua diff --git a/items.lua b/petz/items.lua similarity index 100% rename from items.lua rename to petz/items.lua diff --git a/kitty_mobkit.lua b/petz/kitty_mobkit.lua similarity index 100% rename from kitty_mobkit.lua rename to petz/kitty_mobkit.lua diff --git a/lamb_mobkit.lua b/petz/lamb_mobkit.lua similarity index 100% rename from lamb_mobkit.lua rename to petz/lamb_mobkit.lua diff --git a/lamb_mobs_redo.lua b/petz/lamb_mobs_redo.lua similarity index 100% rename from lamb_mobs_redo.lua rename to petz/lamb_mobs_redo.lua diff --git a/lion_mobkit.lua b/petz/lion_mobkit.lua similarity index 100% rename from lion_mobkit.lua rename to petz/lion_mobkit.lua diff --git a/locale/petz.es.tr b/petz/locale/petz.es.tr similarity index 100% rename from locale/petz.es.tr rename to petz/locale/petz.es.tr diff --git a/logo.xcf b/petz/logo.xcf similarity index 100% rename from logo.xcf rename to petz/logo.xcf diff --git a/mobkit.lua b/petz/mobkit.lua similarity index 100% rename from mobkit.lua rename to petz/mobkit.lua diff --git a/mobkit_plus.lua b/petz/mobkit_plus.lua similarity index 100% rename from mobkit_plus.lua rename to petz/mobkit_plus.lua diff --git a/mobkit_spawn.lua b/petz/mobkit_spawn.lua similarity index 100% rename from mobkit_spawn.lua rename to petz/mobkit_spawn.lua diff --git a/mod.conf b/petz/mod.conf similarity index 100% rename from mod.conf rename to petz/mod.conf diff --git a/models/petz_beaver.b3d b/petz/models/petz_beaver.b3d similarity index 100% rename from models/petz_beaver.b3d rename to petz/models/petz_beaver.b3d diff --git a/models/petz_beaver.blend b/petz/models/petz_beaver.blend similarity index 100% rename from models/petz_beaver.blend rename to petz/models/petz_beaver.blend diff --git a/models/petz_beaver.blend1 b/petz/models/petz_beaver.blend1 similarity index 100% rename from models/petz_beaver.blend1 rename to petz/models/petz_beaver.blend1 diff --git a/models/petz_beaver.obj b/petz/models/petz_beaver.obj similarity index 100% rename from models/petz_beaver.obj rename to petz/models/petz_beaver.obj diff --git a/models/petz_calf.b3d b/petz/models/petz_calf.b3d similarity index 100% rename from models/petz_calf.b3d rename to petz/models/petz_calf.b3d diff --git a/models/petz_calf.blend b/petz/models/petz_calf.blend similarity index 100% rename from models/petz_calf.blend rename to petz/models/petz_calf.blend diff --git a/models/petz_calf.blend1 b/petz/models/petz_calf.blend1 similarity index 100% rename from models/petz_calf.blend1 rename to petz/models/petz_calf.blend1 diff --git a/models/petz_calf.obj b/petz/models/petz_calf.obj similarity index 100% rename from models/petz_calf.obj rename to petz/models/petz_calf.obj diff --git a/models/petz_chicken.b3d b/petz/models/petz_chicken.b3d similarity index 100% rename from models/petz_chicken.b3d rename to petz/models/petz_chicken.b3d diff --git a/models/petz_chicken.blend b/petz/models/petz_chicken.blend similarity index 100% rename from models/petz_chicken.blend rename to petz/models/petz_chicken.blend diff --git a/models/petz_chicken.blend1 b/petz/models/petz_chicken.blend1 similarity index 100% rename from models/petz_chicken.blend1 rename to petz/models/petz_chicken.blend1 diff --git a/models/petz_chicken.obj b/petz/models/petz_chicken.obj similarity index 100% rename from models/petz_chicken.obj rename to petz/models/petz_chicken.obj diff --git a/models/petz_chimp.b3d b/petz/models/petz_chimp.b3d similarity index 100% rename from models/petz_chimp.b3d rename to petz/models/petz_chimp.b3d diff --git a/models/petz_chimp.blend b/petz/models/petz_chimp.blend similarity index 100% rename from models/petz_chimp.blend rename to petz/models/petz_chimp.blend diff --git a/models/petz_chimp.blend1 b/petz/models/petz_chimp.blend1 similarity index 100% rename from models/petz_chimp.blend1 rename to petz/models/petz_chimp.blend1 diff --git a/models/petz_chimp.obj b/petz/models/petz_chimp.obj similarity index 100% rename from models/petz_chimp.obj rename to petz/models/petz_chimp.obj diff --git a/models/petz_clownfish.b3d b/petz/models/petz_clownfish.b3d similarity index 100% rename from models/petz_clownfish.b3d rename to petz/models/petz_clownfish.b3d diff --git a/models/petz_clownfish.blend b/petz/models/petz_clownfish.blend similarity index 100% rename from models/petz_clownfish.blend rename to petz/models/petz_clownfish.blend diff --git a/models/petz_clownfish.blend1 b/petz/models/petz_clownfish.blend1 similarity index 100% rename from models/petz_clownfish.blend1 rename to petz/models/petz_clownfish.blend1 diff --git a/models/petz_clownfish.obj b/petz/models/petz_clownfish.obj similarity index 100% rename from models/petz_clownfish.obj rename to petz/models/petz_clownfish.obj diff --git a/models/petz_ducky.b3d b/petz/models/petz_ducky.b3d similarity index 100% rename from models/petz_ducky.b3d rename to petz/models/petz_ducky.b3d diff --git a/models/petz_ducky.blend b/petz/models/petz_ducky.blend similarity index 100% rename from models/petz_ducky.blend rename to petz/models/petz_ducky.blend diff --git a/models/petz_ducky.blend1 b/petz/models/petz_ducky.blend1 similarity index 100% rename from models/petz_ducky.blend1 rename to petz/models/petz_ducky.blend1 diff --git a/models/petz_ducky.obj b/petz/models/petz_ducky.obj similarity index 100% rename from models/petz_ducky.obj rename to petz/models/petz_ducky.obj diff --git a/models/petz_ducky_nest.b3d b/petz/models/petz_ducky_nest.b3d similarity index 100% rename from models/petz_ducky_nest.b3d rename to petz/models/petz_ducky_nest.b3d diff --git a/models/petz_ducky_nest.blend b/petz/models/petz_ducky_nest.blend similarity index 100% rename from models/petz_ducky_nest.blend rename to petz/models/petz_ducky_nest.blend diff --git a/models/petz_ducky_nest.blend1 b/petz/models/petz_ducky_nest.blend1 similarity index 100% rename from models/petz_ducky_nest.blend1 rename to petz/models/petz_ducky_nest.blend1 diff --git a/models/petz_ducky_nest.obj b/petz/models/petz_ducky_nest.obj similarity index 100% rename from models/petz_ducky_nest.obj rename to petz/models/petz_ducky_nest.obj diff --git a/models/petz_ducky_nest_egg.b3d b/petz/models/petz_ducky_nest_egg.b3d similarity index 100% rename from models/petz_ducky_nest_egg.b3d rename to petz/models/petz_ducky_nest_egg.b3d diff --git a/models/petz_ducky_nest_egg.blend b/petz/models/petz_ducky_nest_egg.blend similarity index 100% rename from models/petz_ducky_nest_egg.blend rename to petz/models/petz_ducky_nest_egg.blend diff --git a/models/petz_ducky_nest_egg.blend1 b/petz/models/petz_ducky_nest_egg.blend1 similarity index 100% rename from models/petz_ducky_nest_egg.blend1 rename to petz/models/petz_ducky_nest_egg.blend1 diff --git a/models/petz_frog.b3d b/petz/models/petz_frog.b3d similarity index 100% rename from models/petz_frog.b3d rename to petz/models/petz_frog.b3d diff --git a/models/petz_frog.blend b/petz/models/petz_frog.blend similarity index 100% rename from models/petz_frog.blend rename to petz/models/petz_frog.blend diff --git a/models/petz_frog.blend1 b/petz/models/petz_frog.blend1 similarity index 100% rename from models/petz_frog.blend1 rename to petz/models/petz_frog.blend1 diff --git a/models/petz_frog.obj b/petz/models/petz_frog.obj similarity index 100% rename from models/petz_frog.obj rename to petz/models/petz_frog.obj diff --git a/models/petz_grizzly.b3d b/petz/models/petz_grizzly.b3d similarity index 100% rename from models/petz_grizzly.b3d rename to petz/models/petz_grizzly.b3d diff --git a/models/petz_grizzly.blend b/petz/models/petz_grizzly.blend similarity index 100% rename from models/petz_grizzly.blend rename to petz/models/petz_grizzly.blend diff --git a/models/petz_grizzly.blend1 b/petz/models/petz_grizzly.blend1 similarity index 100% rename from models/petz_grizzly.blend1 rename to petz/models/petz_grizzly.blend1 diff --git a/models/petz_kitty.b3d b/petz/models/petz_kitty.b3d similarity index 100% rename from models/petz_kitty.b3d rename to petz/models/petz_kitty.b3d diff --git a/models/petz_kitty.blend b/petz/models/petz_kitty.blend similarity index 100% rename from models/petz_kitty.blend rename to petz/models/petz_kitty.blend diff --git a/models/petz_kitty.blend1 b/petz/models/petz_kitty.blend1 similarity index 100% rename from models/petz_kitty.blend1 rename to petz/models/petz_kitty.blend1 diff --git a/models/petz_kitty.obj b/petz/models/petz_kitty.obj similarity index 100% rename from models/petz_kitty.obj rename to petz/models/petz_kitty.obj diff --git a/models/petz_lamb.b3d b/petz/models/petz_lamb.b3d similarity index 100% rename from models/petz_lamb.b3d rename to petz/models/petz_lamb.b3d diff --git a/models/petz_lamb.blend b/petz/models/petz_lamb.blend similarity index 100% rename from models/petz_lamb.blend rename to petz/models/petz_lamb.blend diff --git a/models/petz_lamb.blend1 b/petz/models/petz_lamb.blend1 similarity index 100% rename from models/petz_lamb.blend1 rename to petz/models/petz_lamb.blend1 diff --git a/models/petz_lamb.obj b/petz/models/petz_lamb.obj similarity index 100% rename from models/petz_lamb.obj rename to petz/models/petz_lamb.obj diff --git a/models/petz_lion b/petz/models/petz_lion similarity index 100% rename from models/petz_lion rename to petz/models/petz_lion diff --git a/models/petz_lion.b3d b/petz/models/petz_lion.b3d similarity index 100% rename from models/petz_lion.b3d rename to petz/models/petz_lion.b3d diff --git a/models/petz_lion.blend b/petz/models/petz_lion.blend similarity index 100% rename from models/petz_lion.blend rename to petz/models/petz_lion.blend diff --git a/models/petz_lion.blend1 b/petz/models/petz_lion.blend1 similarity index 100% rename from models/petz_lion.blend1 rename to petz/models/petz_lion.blend1 diff --git a/models/petz_lion.obj b/petz/models/petz_lion.obj similarity index 100% rename from models/petz_lion.obj rename to petz/models/petz_lion.obj diff --git a/models/petz_moth.blend b/petz/models/petz_moth.blend similarity index 100% rename from models/petz_moth.blend rename to petz/models/petz_moth.blend diff --git a/models/petz_moth.blend1 b/petz/models/petz_moth.blend1 similarity index 100% rename from models/petz_moth.blend1 rename to petz/models/petz_moth.blend1 diff --git a/models/petz_moth.obj b/petz/models/petz_moth.obj similarity index 100% rename from models/petz_moth.obj rename to petz/models/petz_moth.obj diff --git a/models/petz_panda.b3d b/petz/models/petz_panda.b3d similarity index 100% rename from models/petz_panda.b3d rename to petz/models/petz_panda.b3d diff --git a/models/petz_panda.blend b/petz/models/petz_panda.blend similarity index 100% rename from models/petz_panda.blend rename to petz/models/petz_panda.blend diff --git a/models/petz_panda.blend1 b/petz/models/petz_panda.blend1 similarity index 100% rename from models/petz_panda.blend1 rename to petz/models/petz_panda.blend1 diff --git a/models/petz_panda.obj b/petz/models/petz_panda.obj similarity index 100% rename from models/petz_panda.obj rename to petz/models/petz_panda.obj diff --git a/models/petz_parrot.b3d b/petz/models/petz_parrot.b3d similarity index 100% rename from models/petz_parrot.b3d rename to petz/models/petz_parrot.b3d diff --git a/models/petz_parrot.blend b/petz/models/petz_parrot.blend similarity index 100% rename from models/petz_parrot.blend rename to petz/models/petz_parrot.blend diff --git a/models/petz_parrot.blend1 b/petz/models/petz_parrot.blend1 similarity index 100% rename from models/petz_parrot.blend1 rename to petz/models/petz_parrot.blend1 diff --git a/models/petz_parrot.obj b/petz/models/petz_parrot.obj similarity index 100% rename from models/petz_parrot.obj rename to petz/models/petz_parrot.obj diff --git a/models/petz_pigeon.b3d b/petz/models/petz_pigeon.b3d similarity index 100% rename from models/petz_pigeon.b3d rename to petz/models/petz_pigeon.b3d diff --git a/models/petz_pigeon.blend b/petz/models/petz_pigeon.blend similarity index 100% rename from models/petz_pigeon.blend rename to petz/models/petz_pigeon.blend diff --git a/models/petz_pigeon.blend1 b/petz/models/petz_pigeon.blend1 similarity index 100% rename from models/petz_pigeon.blend1 rename to petz/models/petz_pigeon.blend1 diff --git a/models/petz_pigeon.obj b/petz/models/petz_pigeon.obj similarity index 100% rename from models/petz_pigeon.obj rename to petz/models/petz_pigeon.obj diff --git a/models/petz_piggy.b3d b/petz/models/petz_piggy.b3d similarity index 100% rename from models/petz_piggy.b3d rename to petz/models/petz_piggy.b3d diff --git a/models/petz_piggy.blend b/petz/models/petz_piggy.blend similarity index 100% rename from models/petz_piggy.blend rename to petz/models/petz_piggy.blend diff --git a/models/petz_piggy.blend1 b/petz/models/petz_piggy.blend1 similarity index 100% rename from models/petz_piggy.blend1 rename to petz/models/petz_piggy.blend1 diff --git a/models/petz_piggy.obj b/petz/models/petz_piggy.obj similarity index 100% rename from models/petz_piggy.obj rename to petz/models/petz_piggy.obj diff --git a/models/petz_pony b/petz/models/petz_pony similarity index 100% rename from models/petz_pony rename to petz/models/petz_pony diff --git a/models/petz_pony.b3d b/petz/models/petz_pony.b3d similarity index 100% rename from models/petz_pony.b3d rename to petz/models/petz_pony.b3d diff --git a/models/petz_pony.blend b/petz/models/petz_pony.blend similarity index 100% rename from models/petz_pony.blend rename to petz/models/petz_pony.blend diff --git a/models/petz_pony.blend1 b/petz/models/petz_pony.blend1 similarity index 100% rename from models/petz_pony.blend1 rename to petz/models/petz_pony.blend1 diff --git a/models/petz_pony.obj b/petz/models/petz_pony.obj similarity index 100% rename from models/petz_pony.obj rename to petz/models/petz_pony.obj diff --git a/models/petz_puppy.b3d b/petz/models/petz_puppy.b3d similarity index 100% rename from models/petz_puppy.b3d rename to petz/models/petz_puppy.b3d diff --git a/models/petz_puppy.blend b/petz/models/petz_puppy.blend similarity index 100% rename from models/petz_puppy.blend rename to petz/models/petz_puppy.blend diff --git a/models/petz_puppy.blend1 b/petz/models/petz_puppy.blend1 similarity index 100% rename from models/petz_puppy.blend1 rename to petz/models/petz_puppy.blend1 diff --git a/models/petz_puppy.obj b/petz/models/petz_puppy.obj similarity index 100% rename from models/petz_puppy.obj rename to petz/models/petz_puppy.obj diff --git a/models/petz_tropicalfish.b3d b/petz/models/petz_tropicalfish.b3d similarity index 100% rename from models/petz_tropicalfish.b3d rename to petz/models/petz_tropicalfish.b3d diff --git a/models/petz_tropicalfish.blend b/petz/models/petz_tropicalfish.blend similarity index 100% rename from models/petz_tropicalfish.blend rename to petz/models/petz_tropicalfish.blend diff --git a/models/petz_tropicalfish.blend1 b/petz/models/petz_tropicalfish.blend1 similarity index 100% rename from models/petz_tropicalfish.blend1 rename to petz/models/petz_tropicalfish.blend1 diff --git a/models/petz_tropicalfish.obj b/petz/models/petz_tropicalfish.obj similarity index 100% rename from models/petz_tropicalfish.obj rename to petz/models/petz_tropicalfish.obj diff --git a/models/petz_turtle.b3d b/petz/models/petz_turtle.b3d similarity index 100% rename from models/petz_turtle.b3d rename to petz/models/petz_turtle.b3d diff --git a/models/petz_turtle.blend b/petz/models/petz_turtle.blend similarity index 100% rename from models/petz_turtle.blend rename to petz/models/petz_turtle.blend diff --git a/models/petz_turtle.blend1 b/petz/models/petz_turtle.blend1 similarity index 100% rename from models/petz_turtle.blend1 rename to petz/models/petz_turtle.blend1 diff --git a/models/petz_turtle.obj b/petz/models/petz_turtle.obj similarity index 100% rename from models/petz_turtle.obj rename to petz/models/petz_turtle.obj diff --git a/models/petz_wolf.b3d b/petz/models/petz_wolf.b3d similarity index 100% rename from models/petz_wolf.b3d rename to petz/models/petz_wolf.b3d diff --git a/models/petz_wolf.blend b/petz/models/petz_wolf.blend similarity index 100% rename from models/petz_wolf.blend rename to petz/models/petz_wolf.blend diff --git a/models/petz_wolf.blend1 b/petz/models/petz_wolf.blend1 similarity index 100% rename from models/petz_wolf.blend1 rename to petz/models/petz_wolf.blend1 diff --git a/models/petz_wolf.obj b/petz/models/petz_wolf.obj similarity index 100% rename from models/petz_wolf.obj rename to petz/models/petz_wolf.obj diff --git a/mount.lua b/petz/mount.lua similarity index 100% rename from mount.lua rename to petz/mount.lua diff --git a/nodeboxes/petz_beaver.nbe b/petz/nodeboxes/petz_beaver.nbe similarity index 100% rename from nodeboxes/petz_beaver.nbe rename to petz/nodeboxes/petz_beaver.nbe diff --git a/nodeboxes/petz_bowl.nbe b/petz/nodeboxes/petz_bowl.nbe similarity index 100% rename from nodeboxes/petz_bowl.nbe rename to petz/nodeboxes/petz_bowl.nbe diff --git a/nodeboxes/petz_calf.nbe b/petz/nodeboxes/petz_calf.nbe similarity index 100% rename from nodeboxes/petz_calf.nbe rename to petz/nodeboxes/petz_calf.nbe diff --git a/nodeboxes/petz_castor.nbe b/petz/nodeboxes/petz_castor.nbe similarity index 100% rename from nodeboxes/petz_castor.nbe rename to petz/nodeboxes/petz_castor.nbe diff --git a/nodeboxes/petz_chicken.nbe b/petz/nodeboxes/petz_chicken.nbe similarity index 100% rename from nodeboxes/petz_chicken.nbe rename to petz/nodeboxes/petz_chicken.nbe diff --git a/nodeboxes/petz_chimp.nbe b/petz/nodeboxes/petz_chimp.nbe similarity index 100% rename from nodeboxes/petz_chimp.nbe rename to petz/nodeboxes/petz_chimp.nbe diff --git a/nodeboxes/petz_clownfish.nbe b/petz/nodeboxes/petz_clownfish.nbe similarity index 100% rename from nodeboxes/petz_clownfish.nbe rename to petz/nodeboxes/petz_clownfish.nbe diff --git a/nodeboxes/petz_cow.nbe b/petz/nodeboxes/petz_cow.nbe similarity index 100% rename from nodeboxes/petz_cow.nbe rename to petz/nodeboxes/petz_cow.nbe diff --git a/nodeboxes/petz_duck_egg.nbe b/petz/nodeboxes/petz_duck_egg.nbe similarity index 100% rename from nodeboxes/petz_duck_egg.nbe rename to petz/nodeboxes/petz_duck_egg.nbe diff --git a/nodeboxes/petz_duck_nest.nbe b/petz/nodeboxes/petz_duck_nest.nbe similarity index 100% rename from nodeboxes/petz_duck_nest.nbe rename to petz/nodeboxes/petz_duck_nest.nbe diff --git a/nodeboxes/petz_ducky.nbe b/petz/nodeboxes/petz_ducky.nbe similarity index 100% rename from nodeboxes/petz_ducky.nbe rename to petz/nodeboxes/petz_ducky.nbe diff --git a/nodeboxes/petz_frog.nbe b/petz/nodeboxes/petz_frog.nbe similarity index 100% rename from nodeboxes/petz_frog.nbe rename to petz/nodeboxes/petz_frog.nbe diff --git a/nodeboxes/petz_kitty.nbe b/petz/nodeboxes/petz_kitty.nbe similarity index 100% rename from nodeboxes/petz_kitty.nbe rename to petz/nodeboxes/petz_kitty.nbe diff --git a/nodeboxes/petz_lamb.nbe b/petz/nodeboxes/petz_lamb.nbe similarity index 100% rename from nodeboxes/petz_lamb.nbe rename to petz/nodeboxes/petz_lamb.nbe diff --git a/nodeboxes/petz_lion.nbe b/petz/nodeboxes/petz_lion.nbe similarity index 100% rename from nodeboxes/petz_lion.nbe rename to petz/nodeboxes/petz_lion.nbe diff --git a/nodeboxes/petz_moth.nbe b/petz/nodeboxes/petz_moth.nbe similarity index 100% rename from nodeboxes/petz_moth.nbe rename to petz/nodeboxes/petz_moth.nbe diff --git a/nodeboxes/petz_panda.nbe b/petz/nodeboxes/petz_panda.nbe similarity index 100% rename from nodeboxes/petz_panda.nbe rename to petz/nodeboxes/petz_panda.nbe diff --git a/nodeboxes/petz_parrot.nbe b/petz/nodeboxes/petz_parrot.nbe similarity index 100% rename from nodeboxes/petz_parrot.nbe rename to petz/nodeboxes/petz_parrot.nbe diff --git a/nodeboxes/petz_pigeon.nbe b/petz/nodeboxes/petz_pigeon.nbe similarity index 100% rename from nodeboxes/petz_pigeon.nbe rename to petz/nodeboxes/petz_pigeon.nbe diff --git a/nodeboxes/petz_piggy.nbe b/petz/nodeboxes/petz_piggy.nbe similarity index 100% rename from nodeboxes/petz_piggy.nbe rename to petz/nodeboxes/petz_piggy.nbe diff --git a/nodeboxes/petz_pony.nbe b/petz/nodeboxes/petz_pony.nbe similarity index 100% rename from nodeboxes/petz_pony.nbe rename to petz/nodeboxes/petz_pony.nbe diff --git a/nodeboxes/petz_puppy.nbe b/petz/nodeboxes/petz_puppy.nbe similarity index 100% rename from nodeboxes/petz_puppy.nbe rename to petz/nodeboxes/petz_puppy.nbe diff --git a/nodeboxes/petz_squirrel.nbe b/petz/nodeboxes/petz_squirrel.nbe similarity index 100% rename from nodeboxes/petz_squirrel.nbe rename to petz/nodeboxes/petz_squirrel.nbe diff --git a/nodeboxes/petz_tropicalfish.nbe b/petz/nodeboxes/petz_tropicalfish.nbe similarity index 100% rename from nodeboxes/petz_tropicalfish.nbe rename to petz/nodeboxes/petz_tropicalfish.nbe diff --git a/nodeboxes/petz_turtle.nbe b/petz/nodeboxes/petz_turtle.nbe similarity index 100% rename from nodeboxes/petz_turtle.nbe rename to petz/nodeboxes/petz_turtle.nbe diff --git a/nodeboxes/petz_wolf.nbe b/petz/nodeboxes/petz_wolf.nbe similarity index 100% rename from nodeboxes/petz_wolf.nbe rename to petz/nodeboxes/petz_wolf.nbe diff --git a/nodes.lua b/petz/nodes.lua similarity index 100% rename from nodes.lua rename to petz/nodes.lua diff --git a/panda_mobkit.lua b/petz/panda_mobkit.lua similarity index 100% rename from panda_mobkit.lua rename to petz/panda_mobkit.lua diff --git a/parrot_mobkit.lua b/petz/parrot_mobkit.lua similarity index 100% rename from parrot_mobkit.lua rename to petz/parrot_mobkit.lua diff --git a/petz.conf b/petz/petz.conf similarity index 100% rename from petz.conf rename to petz/petz.conf diff --git a/tropicalfish_mobkit.lua b/petz/pigeon_mobkit.lua similarity index 100% rename from tropicalfish_mobkit.lua rename to petz/pigeon_mobkit.lua diff --git a/piggy_mobkit.lua b/petz/piggy_mobkit.lua similarity index 100% rename from piggy_mobkit.lua rename to petz/piggy_mobkit.lua diff --git a/pony_mobkit.lua b/petz/pony_mobkit.lua similarity index 100% rename from pony_mobkit.lua rename to petz/pony_mobkit.lua diff --git a/puppy_mobkit.lua b/petz/puppy_mobkit.lua similarity index 100% rename from puppy_mobkit.lua rename to petz/puppy_mobkit.lua diff --git a/schematics/beaver_dam.mts b/petz/schematics/beaver_dam.mts similarity index 100% rename from schematics/beaver_dam.mts rename to petz/schematics/beaver_dam.mts diff --git a/schematics/kennel.mts b/petz/schematics/kennel.mts similarity index 100% rename from schematics/kennel.mts rename to petz/schematics/kennel.mts diff --git a/settings.lua b/petz/settings.lua similarity index 100% rename from settings.lua rename to petz/settings.lua diff --git a/sounds/LICENSE.MD b/petz/sounds/LICENSE.MD similarity index 100% rename from sounds/LICENSE.MD rename to petz/sounds/LICENSE.MD diff --git a/sounds/petz_beaver_moaning.ogg b/petz/sounds/petz_beaver_moaning.ogg similarity index 100% rename from sounds/petz_beaver_moaning.ogg rename to petz/sounds/petz_beaver_moaning.ogg diff --git a/sounds/petz_beaver_sound.ogg b/petz/sounds/petz_beaver_sound.ogg similarity index 100% rename from sounds/petz_beaver_sound.ogg rename to petz/sounds/petz_beaver_sound.ogg diff --git a/sounds/petz_brushing.ogg b/petz/sounds/petz_brushing.ogg similarity index 100% rename from sounds/petz_brushing.ogg rename to petz/sounds/petz_brushing.ogg diff --git a/sounds/petz_calf_moaning.ogg b/petz/sounds/petz_calf_moaning.ogg similarity index 100% rename from sounds/petz_calf_moaning.ogg rename to petz/sounds/petz_calf_moaning.ogg diff --git a/sounds/petz_calf_moo.ogg b/petz/sounds/petz_calf_moo.ogg similarity index 100% rename from sounds/petz_calf_moo.ogg rename to petz/sounds/petz_calf_moo.ogg diff --git a/sounds/petz_chicken_cluck.ogg b/petz/sounds/petz_chicken_cluck.ogg similarity index 100% rename from sounds/petz_chicken_cluck.ogg rename to petz/sounds/petz_chicken_cluck.ogg diff --git a/sounds/petz_chicken_moaning.ogg b/petz/sounds/petz_chicken_moaning.ogg similarity index 100% rename from sounds/petz_chicken_moaning.ogg rename to petz/sounds/petz_chicken_moaning.ogg diff --git a/sounds/petz_chimp_hoo.ogg b/petz/sounds/petz_chimp_hoo.ogg similarity index 100% rename from sounds/petz_chimp_hoo.ogg rename to petz/sounds/petz_chimp_hoo.ogg diff --git a/sounds/petz_chimp_moaning.ogg b/petz/sounds/petz_chimp_moaning.ogg similarity index 100% rename from sounds/petz_chimp_moaning.ogg rename to petz/sounds/petz_chimp_moaning.ogg diff --git a/sounds/petz_default_punch.ogg b/petz/sounds/petz_default_punch.ogg similarity index 100% rename from sounds/petz_default_punch.ogg rename to petz/sounds/petz_default_punch.ogg diff --git a/sounds/petz_ducky_moaning.ogg b/petz/sounds/petz_ducky_moaning.ogg similarity index 100% rename from sounds/petz_ducky_moaning.ogg rename to petz/sounds/petz_ducky_moaning.ogg diff --git a/sounds/petz_ducky_quack.ogg b/petz/sounds/petz_ducky_quack.ogg similarity index 100% rename from sounds/petz_ducky_quack.ogg rename to petz/sounds/petz_ducky_quack.ogg diff --git a/sounds/petz_frog_croak.ogg b/petz/sounds/petz_frog_croak.ogg similarity index 100% rename from sounds/petz_frog_croak.ogg rename to petz/sounds/petz_frog_croak.ogg diff --git a/sounds/petz_grizzly_growl.ogg b/petz/sounds/petz_grizzly_growl.ogg similarity index 100% rename from sounds/petz_grizzly_growl.ogg rename to petz/sounds/petz_grizzly_growl.ogg diff --git a/sounds/petz_grizzly_moaning.ogg b/petz/sounds/petz_grizzly_moaning.ogg similarity index 100% rename from sounds/petz_grizzly_moaning.ogg rename to petz/sounds/petz_grizzly_moaning.ogg diff --git a/sounds/petz_kitty_meow.ogg b/petz/sounds/petz_kitty_meow.ogg similarity index 100% rename from sounds/petz_kitty_meow.ogg rename to petz/sounds/petz_kitty_meow.ogg diff --git a/sounds/petz_kitty_moaning.ogg b/petz/sounds/petz_kitty_moaning.ogg similarity index 100% rename from sounds/petz_kitty_moaning.ogg rename to petz/sounds/petz_kitty_moaning.ogg diff --git a/sounds/petz_lamb_bleat.ogg b/petz/sounds/petz_lamb_bleat.ogg similarity index 100% rename from sounds/petz_lamb_bleat.ogg rename to petz/sounds/petz_lamb_bleat.ogg diff --git a/sounds/petz_lamb_moaning.ogg b/petz/sounds/petz_lamb_moaning.ogg similarity index 100% rename from sounds/petz_lamb_moaning.ogg rename to petz/sounds/petz_lamb_moaning.ogg diff --git a/sounds/petz_lion_moaning.ogg b/petz/sounds/petz_lion_moaning.ogg similarity index 100% rename from sounds/petz_lion_moaning.ogg rename to petz/sounds/petz_lion_moaning.ogg diff --git a/sounds/petz_lion_roar.ogg b/petz/sounds/petz_lion_roar.ogg similarity index 100% rename from sounds/petz_lion_roar.ogg rename to petz/sounds/petz_lion_roar.ogg diff --git a/sounds/petz_panda_moaning.ogg b/petz/sounds/petz_panda_moaning.ogg similarity index 100% rename from sounds/petz_panda_moaning.ogg rename to petz/sounds/petz_panda_moaning.ogg diff --git a/sounds/petz_panda_sound.ogg b/petz/sounds/petz_panda_sound.ogg similarity index 100% rename from sounds/petz_panda_sound.ogg rename to petz/sounds/petz_panda_sound.ogg diff --git a/sounds/petz_parrot_chirp.ogg b/petz/sounds/petz_parrot_chirp.ogg similarity index 100% rename from sounds/petz_parrot_chirp.ogg rename to petz/sounds/petz_parrot_chirp.ogg diff --git a/sounds/petz_parrot_moaning.ogg b/petz/sounds/petz_parrot_moaning.ogg similarity index 100% rename from sounds/petz_parrot_moaning.ogg rename to petz/sounds/petz_parrot_moaning.ogg diff --git a/sounds/petz_pigeon_cooing.ogg b/petz/sounds/petz_pigeon_cooing.ogg similarity index 100% rename from sounds/petz_pigeon_cooing.ogg rename to petz/sounds/petz_pigeon_cooing.ogg diff --git a/sounds/petz_pigeon_moaning.ogg b/petz/sounds/petz_pigeon_moaning.ogg similarity index 100% rename from sounds/petz_pigeon_moaning.ogg rename to petz/sounds/petz_pigeon_moaning.ogg diff --git a/sounds/petz_piggy_moaning.ogg b/petz/sounds/petz_piggy_moaning.ogg similarity index 100% rename from sounds/petz_piggy_moaning.ogg rename to petz/sounds/petz_piggy_moaning.ogg diff --git a/sounds/petz_piggy_squeal.ogg b/petz/sounds/petz_piggy_squeal.ogg similarity index 100% rename from sounds/petz_piggy_squeal.ogg rename to petz/sounds/petz_piggy_squeal.ogg diff --git a/sounds/petz_pony_moaning.ogg b/petz/sounds/petz_pony_moaning.ogg similarity index 100% rename from sounds/petz_pony_moaning.ogg rename to petz/sounds/petz_pony_moaning.ogg diff --git a/sounds/petz_pony_neigh.ogg b/petz/sounds/petz_pony_neigh.ogg similarity index 100% rename from sounds/petz_pony_neigh.ogg rename to petz/sounds/petz_pony_neigh.ogg diff --git a/sounds/petz_puppy_bark.ogg b/petz/sounds/petz_puppy_bark.ogg similarity index 100% rename from sounds/petz_puppy_bark.ogg rename to petz/sounds/petz_puppy_bark.ogg diff --git a/sounds/petz_puppy_moaning.ogg b/petz/sounds/petz_puppy_moaning.ogg similarity index 100% rename from sounds/petz_puppy_moaning.ogg rename to petz/sounds/petz_puppy_moaning.ogg diff --git a/sounds/petz_whip.ogg b/petz/sounds/petz_whip.ogg similarity index 100% rename from sounds/petz_whip.ogg rename to petz/sounds/petz_whip.ogg diff --git a/sounds/petz_wolf_howl.ogg b/petz/sounds/petz_wolf_howl.ogg similarity index 100% rename from sounds/petz_wolf_howl.ogg rename to petz/sounds/petz_wolf_howl.ogg diff --git a/sounds/petz_wolf_moaning.ogg b/petz/sounds/petz_wolf_moaning.ogg similarity index 100% rename from sounds/petz_wolf_moaning.ogg rename to petz/sounds/petz_wolf_moaning.ogg diff --git a/spawn.lua b/petz/spawn.lua similarity index 100% rename from spawn.lua rename to petz/spawn.lua diff --git a/textures/petz_affinity_heart.png b/petz/textures/petz_affinity_heart.png similarity index 100% rename from textures/petz_affinity_heart.png rename to petz/textures/petz_affinity_heart.png diff --git a/textures/petz_beaver.png b/petz/textures/petz_beaver.png similarity index 100% rename from textures/petz_beaver.png rename to petz/textures/petz_beaver.png diff --git a/textures/petz_beaver_back.png b/petz/textures/petz_beaver_back.png similarity index 100% rename from textures/petz_beaver_back.png rename to petz/textures/petz_beaver_back.png diff --git a/textures/petz_beaver_bottom.png b/petz/textures/petz_beaver_bottom.png similarity index 100% rename from textures/petz_beaver_bottom.png rename to petz/textures/petz_beaver_bottom.png diff --git a/textures/petz_beaver_dam_branches.png b/petz/textures/petz_beaver_dam_branches.png similarity index 100% rename from textures/petz_beaver_dam_branches.png rename to petz/textures/petz_beaver_dam_branches.png diff --git a/textures/petz_beaver_front.png b/petz/textures/petz_beaver_front.png similarity index 100% rename from textures/petz_beaver_front.png rename to petz/textures/petz_beaver_front.png diff --git a/textures/petz_beaver_fur.png b/petz/textures/petz_beaver_fur.png similarity index 100% rename from textures/petz_beaver_fur.png rename to petz/textures/petz_beaver_fur.png diff --git a/textures/petz_beaver_left.png b/petz/textures/petz_beaver_left.png similarity index 100% rename from textures/petz_beaver_left.png rename to petz/textures/petz_beaver_left.png diff --git a/textures/petz_beaver_oil.png b/petz/textures/petz_beaver_oil.png similarity index 100% rename from textures/petz_beaver_oil.png rename to petz/textures/petz_beaver_oil.png diff --git a/textures/petz_beaver_right.png b/petz/textures/petz_beaver_right.png similarity index 100% rename from textures/petz_beaver_right.png rename to petz/textures/petz_beaver_right.png diff --git a/textures/petz_beaver_top.png b/petz/textures/petz_beaver_top.png similarity index 100% rename from textures/petz_beaver_top.png rename to petz/textures/petz_beaver_top.png diff --git a/textures/petz_beef.png b/petz/textures/petz_beef.png similarity index 100% rename from textures/petz_beef.png rename to petz/textures/petz_beef.png diff --git a/textures/petz_blue_stained_planks.png b/petz/textures/petz_blue_stained_planks.png similarity index 100% rename from textures/petz_blue_stained_planks.png rename to petz/textures/petz_blue_stained_planks.png diff --git a/textures/petz_bucket_milk.png b/petz/textures/petz_bucket_milk.png similarity index 100% rename from textures/petz_bucket_milk.png rename to petz/textures/petz_bucket_milk.png diff --git a/textures/petz_calf.png b/petz/textures/petz_calf.png similarity index 100% rename from textures/petz_calf.png rename to petz/textures/petz_calf.png diff --git a/textures/petz_calf2.png b/petz/textures/petz_calf2.png similarity index 100% rename from textures/petz_calf2.png rename to petz/textures/petz_calf2.png diff --git a/textures/petz_calf2_back.png b/petz/textures/petz_calf2_back.png similarity index 100% rename from textures/petz_calf2_back.png rename to petz/textures/petz_calf2_back.png diff --git a/textures/petz_calf2_bottom.png b/petz/textures/petz_calf2_bottom.png similarity index 100% rename from textures/petz_calf2_bottom.png rename to petz/textures/petz_calf2_bottom.png diff --git a/textures/petz_calf2_front.png b/petz/textures/petz_calf2_front.png similarity index 100% rename from textures/petz_calf2_front.png rename to petz/textures/petz_calf2_front.png diff --git a/textures/petz_calf2_left.png b/petz/textures/petz_calf2_left.png similarity index 100% rename from textures/petz_calf2_left.png rename to petz/textures/petz_calf2_left.png diff --git a/textures/petz_calf2_right.png b/petz/textures/petz_calf2_right.png similarity index 100% rename from textures/petz_calf2_right.png rename to petz/textures/petz_calf2_right.png diff --git a/textures/petz_calf2_top.png b/petz/textures/petz_calf2_top.png similarity index 100% rename from textures/petz_calf2_top.png rename to petz/textures/petz_calf2_top.png diff --git a/textures/petz_calf3.png b/petz/textures/petz_calf3.png similarity index 100% rename from textures/petz_calf3.png rename to petz/textures/petz_calf3.png diff --git a/textures/petz_calf_back.png b/petz/textures/petz_calf_back.png similarity index 100% rename from textures/petz_calf_back.png rename to petz/textures/petz_calf_back.png diff --git a/textures/petz_calf_bottom.png b/petz/textures/petz_calf_bottom.png similarity index 100% rename from textures/petz_calf_bottom.png rename to petz/textures/petz_calf_bottom.png diff --git a/textures/petz_calf_front.png b/petz/textures/petz_calf_front.png similarity index 100% rename from textures/petz_calf_front.png rename to petz/textures/petz_calf_front.png diff --git a/textures/petz_calf_left.png b/petz/textures/petz_calf_left.png similarity index 100% rename from textures/petz_calf_left.png rename to petz/textures/petz_calf_left.png diff --git a/textures/petz_calf_right.png b/petz/textures/petz_calf_right.png similarity index 100% rename from textures/petz_calf_right.png rename to petz/textures/petz_calf_right.png diff --git a/textures/petz_calf_top.png b/petz/textures/petz_calf_top.png similarity index 100% rename from textures/petz_calf_top.png rename to petz/textures/petz_calf_top.png diff --git a/textures/petz_chicken.png b/petz/textures/petz_chicken.png similarity index 100% rename from textures/petz_chicken.png rename to petz/textures/petz_chicken.png diff --git a/textures/petz_chicken2.png b/petz/textures/petz_chicken2.png similarity index 100% rename from textures/petz_chicken2.png rename to petz/textures/petz_chicken2.png diff --git a/textures/petz_chicken3.png b/petz/textures/petz_chicken3.png similarity index 100% rename from textures/petz_chicken3.png rename to petz/textures/petz_chicken3.png diff --git a/textures/petz_chicken_back.png b/petz/textures/petz_chicken_back.png similarity index 100% rename from textures/petz_chicken_back.png rename to petz/textures/petz_chicken_back.png diff --git a/textures/petz_chicken_bottom.png b/petz/textures/petz_chicken_bottom.png similarity index 100% rename from textures/petz_chicken_bottom.png rename to petz/textures/petz_chicken_bottom.png diff --git a/textures/petz_chicken_egg.png b/petz/textures/petz_chicken_egg.png similarity index 100% rename from textures/petz_chicken_egg.png rename to petz/textures/petz_chicken_egg.png diff --git a/textures/petz_chicken_front.png b/petz/textures/petz_chicken_front.png similarity index 100% rename from textures/petz_chicken_front.png rename to petz/textures/petz_chicken_front.png diff --git a/textures/petz_chicken_left.png b/petz/textures/petz_chicken_left.png similarity index 100% rename from textures/petz_chicken_left.png rename to petz/textures/petz_chicken_left.png diff --git a/textures/petz_chicken_nest_egg.png b/petz/textures/petz_chicken_nest_egg.png similarity index 100% rename from textures/petz_chicken_nest_egg.png rename to petz/textures/petz_chicken_nest_egg.png diff --git a/textures/petz_chicken_nest_egg_inv.png b/petz/textures/petz_chicken_nest_egg_inv.png similarity index 100% rename from textures/petz_chicken_nest_egg_inv.png rename to petz/textures/petz_chicken_nest_egg_inv.png diff --git a/textures/petz_chicken_right.png b/petz/textures/petz_chicken_right.png similarity index 100% rename from textures/petz_chicken_right.png rename to petz/textures/petz_chicken_right.png diff --git a/textures/petz_chicken_top.png b/petz/textures/petz_chicken_top.png similarity index 100% rename from textures/petz_chicken_top.png rename to petz/textures/petz_chicken_top.png diff --git a/textures/petz_chimp.png b/petz/textures/petz_chimp.png similarity index 100% rename from textures/petz_chimp.png rename to petz/textures/petz_chimp.png diff --git a/textures/petz_chimp_back.png b/petz/textures/petz_chimp_back.png similarity index 100% rename from textures/petz_chimp_back.png rename to petz/textures/petz_chimp_back.png diff --git a/textures/petz_chimp_bottom.png b/petz/textures/petz_chimp_bottom.png similarity index 100% rename from textures/petz_chimp_bottom.png rename to petz/textures/petz_chimp_bottom.png diff --git a/textures/petz_chimp_front.png b/petz/textures/petz_chimp_front.png similarity index 100% rename from textures/petz_chimp_front.png rename to petz/textures/petz_chimp_front.png diff --git a/textures/petz_chimp_left.png b/petz/textures/petz_chimp_left.png similarity index 100% rename from textures/petz_chimp_left.png rename to petz/textures/petz_chimp_left.png diff --git a/textures/petz_chimp_right.png b/petz/textures/petz_chimp_right.png similarity index 100% rename from textures/petz_chimp_right.png rename to petz/textures/petz_chimp_right.png diff --git a/textures/petz_chimp_top.png b/petz/textures/petz_chimp_top.png similarity index 100% rename from textures/petz_chimp_top.png rename to petz/textures/petz_chimp_top.png diff --git a/textures/petz_clownfish.png b/petz/textures/petz_clownfish.png similarity index 100% rename from textures/petz_clownfish.png rename to petz/textures/petz_clownfish.png diff --git a/textures/petz_clownfish_back.png b/petz/textures/petz_clownfish_back.png similarity index 100% rename from textures/petz_clownfish_back.png rename to petz/textures/petz_clownfish_back.png diff --git a/textures/petz_clownfish_bottom.png b/petz/textures/petz_clownfish_bottom.png similarity index 100% rename from textures/petz_clownfish_bottom.png rename to petz/textures/petz_clownfish_bottom.png diff --git a/textures/petz_clownfish_front.png b/petz/textures/petz_clownfish_front.png similarity index 100% rename from textures/petz_clownfish_front.png rename to petz/textures/petz_clownfish_front.png diff --git a/textures/petz_clownfish_left.png b/petz/textures/petz_clownfish_left.png similarity index 100% rename from textures/petz_clownfish_left.png rename to petz/textures/petz_clownfish_left.png diff --git a/textures/petz_clownfish_right.png b/petz/textures/petz_clownfish_right.png similarity index 100% rename from textures/petz_clownfish_right.png rename to petz/textures/petz_clownfish_right.png diff --git a/textures/petz_clownfish_spritesheet.png b/petz/textures/petz_clownfish_spritesheet.png similarity index 100% rename from textures/petz_clownfish_spritesheet.png rename to petz/textures/petz_clownfish_spritesheet.png diff --git a/textures/petz_clownfish_top.png b/petz/textures/petz_clownfish_top.png similarity index 100% rename from textures/petz_clownfish_top.png rename to petz/textures/petz_clownfish_top.png diff --git a/textures/petz_ducky.png b/petz/textures/petz_ducky.png similarity index 100% rename from textures/petz_ducky.png rename to petz/textures/petz_ducky.png diff --git a/textures/petz_ducky2.png b/petz/textures/petz_ducky2.png similarity index 100% rename from textures/petz_ducky2.png rename to petz/textures/petz_ducky2.png diff --git a/textures/petz_ducky2_back.png b/petz/textures/petz_ducky2_back.png similarity index 100% rename from textures/petz_ducky2_back.png rename to petz/textures/petz_ducky2_back.png diff --git a/textures/petz_ducky2_bottom.png b/petz/textures/petz_ducky2_bottom.png similarity index 100% rename from textures/petz_ducky2_bottom.png rename to petz/textures/petz_ducky2_bottom.png diff --git a/textures/petz_ducky2_front.png b/petz/textures/petz_ducky2_front.png similarity index 100% rename from textures/petz_ducky2_front.png rename to petz/textures/petz_ducky2_front.png diff --git a/textures/petz_ducky2_left.png b/petz/textures/petz_ducky2_left.png similarity index 100% rename from textures/petz_ducky2_left.png rename to petz/textures/petz_ducky2_left.png diff --git a/textures/petz_ducky2_right.png b/petz/textures/petz_ducky2_right.png similarity index 100% rename from textures/petz_ducky2_right.png rename to petz/textures/petz_ducky2_right.png diff --git a/textures/petz_ducky2_top.png b/petz/textures/petz_ducky2_top.png similarity index 100% rename from textures/petz_ducky2_top.png rename to petz/textures/petz_ducky2_top.png diff --git a/textures/petz_ducky3.png b/petz/textures/petz_ducky3.png similarity index 100% rename from textures/petz_ducky3.png rename to petz/textures/petz_ducky3.png diff --git a/textures/petz_ducky3_back.png b/petz/textures/petz_ducky3_back.png similarity index 100% rename from textures/petz_ducky3_back.png rename to petz/textures/petz_ducky3_back.png diff --git a/textures/petz_ducky3_bottom.png b/petz/textures/petz_ducky3_bottom.png similarity index 100% rename from textures/petz_ducky3_bottom.png rename to petz/textures/petz_ducky3_bottom.png diff --git a/textures/petz_ducky3_front.png b/petz/textures/petz_ducky3_front.png similarity index 100% rename from textures/petz_ducky3_front.png rename to petz/textures/petz_ducky3_front.png diff --git a/textures/petz_ducky3_left.png b/petz/textures/petz_ducky3_left.png similarity index 100% rename from textures/petz_ducky3_left.png rename to petz/textures/petz_ducky3_left.png diff --git a/textures/petz_ducky3_right.png b/petz/textures/petz_ducky3_right.png similarity index 100% rename from textures/petz_ducky3_right.png rename to petz/textures/petz_ducky3_right.png diff --git a/textures/petz_ducky3_top.png b/petz/textures/petz_ducky3_top.png similarity index 100% rename from textures/petz_ducky3_top.png rename to petz/textures/petz_ducky3_top.png diff --git a/textures/petz_ducky_back.png b/petz/textures/petz_ducky_back.png similarity index 100% rename from textures/petz_ducky_back.png rename to petz/textures/petz_ducky_back.png diff --git a/textures/petz_ducky_bottom.png b/petz/textures/petz_ducky_bottom.png similarity index 100% rename from textures/petz_ducky_bottom.png rename to petz/textures/petz_ducky_bottom.png diff --git a/textures/petz_ducky_egg.png b/petz/textures/petz_ducky_egg.png similarity index 100% rename from textures/petz_ducky_egg.png rename to petz/textures/petz_ducky_egg.png diff --git a/textures/petz_ducky_feather.png b/petz/textures/petz_ducky_feather.png similarity index 100% rename from textures/petz_ducky_feather.png rename to petz/textures/petz_ducky_feather.png diff --git a/textures/petz_ducky_front.png b/petz/textures/petz_ducky_front.png similarity index 100% rename from textures/petz_ducky_front.png rename to petz/textures/petz_ducky_front.png diff --git a/textures/petz_ducky_left.png b/petz/textures/petz_ducky_left.png similarity index 100% rename from textures/petz_ducky_left.png rename to petz/textures/petz_ducky_left.png diff --git a/textures/petz_ducky_nest.png b/petz/textures/petz_ducky_nest.png similarity index 100% rename from textures/petz_ducky_nest.png rename to petz/textures/petz_ducky_nest.png diff --git a/textures/petz_ducky_nest_egg.png b/petz/textures/petz_ducky_nest_egg.png similarity index 100% rename from textures/petz_ducky_nest_egg.png rename to petz/textures/petz_ducky_nest_egg.png diff --git a/textures/petz_ducky_nest_egg_inv.png b/petz/textures/petz_ducky_nest_egg_inv.png similarity index 100% rename from textures/petz_ducky_nest_egg_inv.png rename to petz/textures/petz_ducky_nest_egg_inv.png diff --git a/textures/petz_ducky_nest_front.png b/petz/textures/petz_ducky_nest_front.png similarity index 100% rename from textures/petz_ducky_nest_front.png rename to petz/textures/petz_ducky_nest_front.png diff --git a/textures/petz_ducky_nest_inv.png b/petz/textures/petz_ducky_nest_inv.png similarity index 100% rename from textures/petz_ducky_nest_inv.png rename to petz/textures/petz_ducky_nest_inv.png diff --git a/textures/petz_ducky_right.png b/petz/textures/petz_ducky_right.png similarity index 100% rename from textures/petz_ducky_right.png rename to petz/textures/petz_ducky_right.png diff --git a/textures/petz_ducky_top.png b/petz/textures/petz_ducky_top.png similarity index 100% rename from textures/petz_ducky_top.png rename to petz/textures/petz_ducky_top.png diff --git a/textures/petz_fishtank_bottom.png b/petz/textures/petz_fishtank_bottom.png similarity index 100% rename from textures/petz_fishtank_bottom.png rename to petz/textures/petz_fishtank_bottom.png diff --git a/textures/petz_fishtank_inv.png b/petz/textures/petz_fishtank_inv.png similarity index 100% rename from textures/petz_fishtank_inv.png rename to petz/textures/petz_fishtank_inv.png diff --git a/textures/petz_fishtank_top.png b/petz/textures/petz_fishtank_top.png similarity index 100% rename from textures/petz_fishtank_top.png rename to petz/textures/petz_fishtank_top.png diff --git a/textures/petz_frog.png b/petz/textures/petz_frog.png similarity index 100% rename from textures/petz_frog.png rename to petz/textures/petz_frog.png diff --git a/textures/petz_frog2.png b/petz/textures/petz_frog2.png similarity index 100% rename from textures/petz_frog2.png rename to petz/textures/petz_frog2.png diff --git a/textures/petz_frog3.png b/petz/textures/petz_frog3.png similarity index 100% rename from textures/petz_frog3.png rename to petz/textures/petz_frog3.png diff --git a/textures/petz_frog_back.png b/petz/textures/petz_frog_back.png similarity index 100% rename from textures/petz_frog_back.png rename to petz/textures/petz_frog_back.png diff --git a/textures/petz_frog_bottom.png b/petz/textures/petz_frog_bottom.png similarity index 100% rename from textures/petz_frog_bottom.png rename to petz/textures/petz_frog_bottom.png diff --git a/textures/petz_frog_front.png b/petz/textures/petz_frog_front.png similarity index 100% rename from textures/petz_frog_front.png rename to petz/textures/petz_frog_front.png diff --git a/textures/petz_frog_left.png b/petz/textures/petz_frog_left.png similarity index 100% rename from textures/petz_frog_left.png rename to petz/textures/petz_frog_left.png diff --git a/textures/petz_frog_leg.png b/petz/textures/petz_frog_leg.png similarity index 100% rename from textures/petz_frog_leg.png rename to petz/textures/petz_frog_leg.png diff --git a/textures/petz_frog_leg_roasted.png b/petz/textures/petz_frog_leg_roasted.png similarity index 100% rename from textures/petz_frog_leg_roasted.png rename to petz/textures/petz_frog_leg_roasted.png diff --git a/textures/petz_frog_right.png b/petz/textures/petz_frog_right.png similarity index 100% rename from textures/petz_frog_right.png rename to petz/textures/petz_frog_right.png diff --git a/textures/petz_frog_top.png b/petz/textures/petz_frog_top.png similarity index 100% rename from textures/petz_frog_top.png rename to petz/textures/petz_frog_top.png diff --git a/textures/petz_glass_syringe.png b/petz/textures/petz_glass_syringe.png similarity index 100% rename from textures/petz_glass_syringe.png rename to petz/textures/petz_glass_syringe.png diff --git a/textures/petz_glass_syringe_sperm.png b/petz/textures/petz_glass_syringe_sperm.png similarity index 100% rename from textures/petz_glass_syringe_sperm.png rename to petz/textures/petz_glass_syringe_sperm.png diff --git a/textures/petz_gray_paving_stone.png b/petz/textures/petz_gray_paving_stone.png similarity index 100% rename from textures/petz_gray_paving_stone.png rename to petz/textures/petz_gray_paving_stone.png diff --git a/textures/petz_grizzly.png b/petz/textures/petz_grizzly.png similarity index 100% rename from textures/petz_grizzly.png rename to petz/textures/petz_grizzly.png diff --git a/textures/petz_grizzly2.png b/petz/textures/petz_grizzly2.png similarity index 100% rename from textures/petz_grizzly2.png rename to petz/textures/petz_grizzly2.png diff --git a/textures/petz_grizzly_back.png b/petz/textures/petz_grizzly_back.png similarity index 100% rename from textures/petz_grizzly_back.png rename to petz/textures/petz_grizzly_back.png diff --git a/textures/petz_grizzly_bottom.png b/petz/textures/petz_grizzly_bottom.png similarity index 100% rename from textures/petz_grizzly_bottom.png rename to petz/textures/petz_grizzly_bottom.png diff --git a/textures/petz_grizzly_front.png b/petz/textures/petz_grizzly_front.png similarity index 100% rename from textures/petz_grizzly_front.png rename to petz/textures/petz_grizzly_front.png diff --git a/textures/petz_grizzly_left.png b/petz/textures/petz_grizzly_left.png similarity index 100% rename from textures/petz_grizzly_left.png rename to petz/textures/petz_grizzly_left.png diff --git a/textures/petz_grizzly_right.png b/petz/textures/petz_grizzly_right.png similarity index 100% rename from textures/petz_grizzly_right.png rename to petz/textures/petz_grizzly_right.png diff --git a/textures/petz_grizzly_top.png b/petz/textures/petz_grizzly_top.png similarity index 100% rename from textures/petz_grizzly_top.png rename to petz/textures/petz_grizzly_top.png diff --git a/textures/petz_hairbrush.png b/petz/textures/petz_hairbrush.png similarity index 100% rename from textures/petz_hairbrush.png rename to petz/textures/petz_hairbrush.png diff --git a/textures/petz_kennel.png b/petz/textures/petz_kennel.png similarity index 100% rename from textures/petz_kennel.png rename to petz/textures/petz_kennel.png diff --git a/textures/petz_kitty.png b/petz/textures/petz_kitty.png similarity index 100% rename from textures/petz_kitty.png rename to petz/textures/petz_kitty.png diff --git a/textures/petz_kitty2.png b/petz/textures/petz_kitty2.png similarity index 100% rename from textures/petz_kitty2.png rename to petz/textures/petz_kitty2.png diff --git a/textures/petz_kitty3.png b/petz/textures/petz_kitty3.png similarity index 100% rename from textures/petz_kitty3.png rename to petz/textures/petz_kitty3.png diff --git a/textures/petz_kitty_back.png b/petz/textures/petz_kitty_back.png similarity index 100% rename from textures/petz_kitty_back.png rename to petz/textures/petz_kitty_back.png diff --git a/textures/petz_kitty_bottom.png b/petz/textures/petz_kitty_bottom.png similarity index 100% rename from textures/petz_kitty_bottom.png rename to petz/textures/petz_kitty_bottom.png diff --git a/textures/petz_kitty_front.png b/petz/textures/petz_kitty_front.png similarity index 100% rename from textures/petz_kitty_front.png rename to petz/textures/petz_kitty_front.png diff --git a/textures/petz_kitty_left.png b/petz/textures/petz_kitty_left.png similarity index 100% rename from textures/petz_kitty_left.png rename to petz/textures/petz_kitty_left.png diff --git a/textures/petz_kitty_right.png b/petz/textures/petz_kitty_right.png similarity index 100% rename from textures/petz_kitty_right.png rename to petz/textures/petz_kitty_right.png diff --git a/textures/petz_kitty_top.png b/petz/textures/petz_kitty_top.png similarity index 100% rename from textures/petz_kitty_top.png rename to petz/textures/petz_kitty_top.png diff --git a/textures/petz_lamb_back.png b/petz/textures/petz_lamb_back.png similarity index 100% rename from textures/petz_lamb_back.png rename to petz/textures/petz_lamb_back.png diff --git a/textures/petz_lamb_bottom.png b/petz/textures/petz_lamb_bottom.png similarity index 100% rename from textures/petz_lamb_bottom.png rename to petz/textures/petz_lamb_bottom.png diff --git a/textures/petz_lamb_brown.png b/petz/textures/petz_lamb_brown.png similarity index 100% rename from textures/petz_lamb_brown.png rename to petz/textures/petz_lamb_brown.png diff --git a/textures/petz_lamb_dark_grey.png b/petz/textures/petz_lamb_dark_grey.png similarity index 100% rename from textures/petz_lamb_dark_grey.png rename to petz/textures/petz_lamb_dark_grey.png diff --git a/textures/petz_lamb_front.png b/petz/textures/petz_lamb_front.png similarity index 100% rename from textures/petz_lamb_front.png rename to petz/textures/petz_lamb_front.png diff --git a/textures/petz_lamb_grey.png b/petz/textures/petz_lamb_grey.png similarity index 100% rename from textures/petz_lamb_grey.png rename to petz/textures/petz_lamb_grey.png diff --git a/textures/petz_lamb_left.png b/petz/textures/petz_lamb_left.png similarity index 100% rename from textures/petz_lamb_left.png rename to petz/textures/petz_lamb_left.png diff --git a/textures/petz_lamb_right.png b/petz/textures/petz_lamb_right.png similarity index 100% rename from textures/petz_lamb_right.png rename to petz/textures/petz_lamb_right.png diff --git a/textures/petz_lamb_shaved_back.png b/petz/textures/petz_lamb_shaved_back.png similarity index 100% rename from textures/petz_lamb_shaved_back.png rename to petz/textures/petz_lamb_shaved_back.png diff --git a/textures/petz_lamb_shaved_bottom.png b/petz/textures/petz_lamb_shaved_bottom.png similarity index 100% rename from textures/petz_lamb_shaved_bottom.png rename to petz/textures/petz_lamb_shaved_bottom.png diff --git a/textures/petz_lamb_shaved_brown.png b/petz/textures/petz_lamb_shaved_brown.png similarity index 100% rename from textures/petz_lamb_shaved_brown.png rename to petz/textures/petz_lamb_shaved_brown.png diff --git a/textures/petz_lamb_shaved_dark_grey.png b/petz/textures/petz_lamb_shaved_dark_grey.png similarity index 100% rename from textures/petz_lamb_shaved_dark_grey.png rename to petz/textures/petz_lamb_shaved_dark_grey.png diff --git a/textures/petz_lamb_shaved_front.png b/petz/textures/petz_lamb_shaved_front.png similarity index 100% rename from textures/petz_lamb_shaved_front.png rename to petz/textures/petz_lamb_shaved_front.png diff --git a/textures/petz_lamb_shaved_grey.png b/petz/textures/petz_lamb_shaved_grey.png similarity index 100% rename from textures/petz_lamb_shaved_grey.png rename to petz/textures/petz_lamb_shaved_grey.png diff --git a/textures/petz_lamb_shaved_left.png b/petz/textures/petz_lamb_shaved_left.png similarity index 100% rename from textures/petz_lamb_shaved_left.png rename to petz/textures/petz_lamb_shaved_left.png diff --git a/textures/petz_lamb_shaved_right.png b/petz/textures/petz_lamb_shaved_right.png similarity index 100% rename from textures/petz_lamb_shaved_right.png rename to petz/textures/petz_lamb_shaved_right.png diff --git a/textures/petz_lamb_shaved_top.png b/petz/textures/petz_lamb_shaved_top.png similarity index 100% rename from textures/petz_lamb_shaved_top.png rename to petz/textures/petz_lamb_shaved_top.png diff --git a/textures/petz_lamb_shaved_white.png b/petz/textures/petz_lamb_shaved_white.png similarity index 100% rename from textures/petz_lamb_shaved_white.png rename to petz/textures/petz_lamb_shaved_white.png diff --git a/textures/petz_lamb_top.png b/petz/textures/petz_lamb_top.png similarity index 100% rename from textures/petz_lamb_top.png rename to petz/textures/petz_lamb_top.png diff --git a/textures/petz_lamb_white.png b/petz/textures/petz_lamb_white.png similarity index 100% rename from textures/petz_lamb_white.png rename to petz/textures/petz_lamb_white.png diff --git a/textures/petz_lasso.png b/petz/textures/petz_lasso.png similarity index 100% rename from textures/petz_lasso.png rename to petz/textures/petz_lasso.png diff --git a/textures/petz_leather.png b/petz/textures/petz_leather.png similarity index 100% rename from textures/petz_leather.png rename to petz/textures/petz_leather.png diff --git a/textures/petz_lion.png b/petz/textures/petz_lion.png similarity index 100% rename from textures/petz_lion.png rename to petz/textures/petz_lion.png diff --git a/textures/petz_lion_back.png b/petz/textures/petz_lion_back.png similarity index 100% rename from textures/petz_lion_back.png rename to petz/textures/petz_lion_back.png diff --git a/textures/petz_lion_bottom.png b/petz/textures/petz_lion_bottom.png similarity index 100% rename from textures/petz_lion_bottom.png rename to petz/textures/petz_lion_bottom.png diff --git a/textures/petz_lion_front.png b/petz/textures/petz_lion_front.png similarity index 100% rename from textures/petz_lion_front.png rename to petz/textures/petz_lion_front.png diff --git a/textures/petz_lion_left.png b/petz/textures/petz_lion_left.png similarity index 100% rename from textures/petz_lion_left.png rename to petz/textures/petz_lion_left.png diff --git a/textures/petz_lion_right.png b/petz/textures/petz_lion_right.png similarity index 100% rename from textures/petz_lion_right.png rename to petz/textures/petz_lion_right.png diff --git a/textures/petz_lion_top.png b/petz/textures/petz_lion_top.png similarity index 100% rename from textures/petz_lion_top.png rename to petz/textures/petz_lion_top.png diff --git a/textures/petz_mini_lamb_chop.png b/petz/textures/petz_mini_lamb_chop.png similarity index 100% rename from textures/petz_mini_lamb_chop.png rename to petz/textures/petz_mini_lamb_chop.png diff --git a/textures/petz_moth.png b/petz/textures/petz_moth.png similarity index 100% rename from textures/petz_moth.png rename to petz/textures/petz_moth.png diff --git a/textures/petz_moth_back.png b/petz/textures/petz_moth_back.png similarity index 100% rename from textures/petz_moth_back.png rename to petz/textures/petz_moth_back.png diff --git a/textures/petz_moth_bottom.png b/petz/textures/petz_moth_bottom.png similarity index 100% rename from textures/petz_moth_bottom.png rename to petz/textures/petz_moth_bottom.png diff --git a/textures/petz_moth_front.png b/petz/textures/petz_moth_front.png similarity index 100% rename from textures/petz_moth_front.png rename to petz/textures/petz_moth_front.png diff --git a/textures/petz_moth_left.png b/petz/textures/petz_moth_left.png similarity index 100% rename from textures/petz_moth_left.png rename to petz/textures/petz_moth_left.png diff --git a/textures/petz_moth_right.png b/petz/textures/petz_moth_right.png similarity index 100% rename from textures/petz_moth_right.png rename to petz/textures/petz_moth_right.png diff --git a/textures/petz_moth_top.png b/petz/textures/petz_moth_top.png similarity index 100% rename from textures/petz_moth_top.png rename to petz/textures/petz_moth_top.png diff --git a/textures/petz_panda.png b/petz/textures/petz_panda.png similarity index 100% rename from textures/petz_panda.png rename to petz/textures/petz_panda.png diff --git a/textures/petz_panda_back.png b/petz/textures/petz_panda_back.png similarity index 100% rename from textures/petz_panda_back.png rename to petz/textures/petz_panda_back.png diff --git a/textures/petz_panda_bottom.png b/petz/textures/petz_panda_bottom.png similarity index 100% rename from textures/petz_panda_bottom.png rename to petz/textures/petz_panda_bottom.png diff --git a/textures/petz_panda_front.png b/petz/textures/petz_panda_front.png similarity index 100% rename from textures/petz_panda_front.png rename to petz/textures/petz_panda_front.png diff --git a/textures/petz_panda_left.png b/petz/textures/petz_panda_left.png similarity index 100% rename from textures/petz_panda_left.png rename to petz/textures/petz_panda_left.png diff --git a/textures/petz_panda_right.png b/petz/textures/petz_panda_right.png similarity index 100% rename from textures/petz_panda_right.png rename to petz/textures/petz_panda_right.png diff --git a/textures/petz_panda_top.png b/petz/textures/petz_panda_top.png similarity index 100% rename from textures/petz_panda_top.png rename to petz/textures/petz_panda_top.png diff --git a/textures/petz_parrot.png b/petz/textures/petz_parrot.png similarity index 100% rename from textures/petz_parrot.png rename to petz/textures/petz_parrot.png diff --git a/textures/petz_parrot2.png b/petz/textures/petz_parrot2.png similarity index 100% rename from textures/petz_parrot2.png rename to petz/textures/petz_parrot2.png diff --git a/textures/petz_parrot3.png b/petz/textures/petz_parrot3.png similarity index 100% rename from textures/petz_parrot3.png rename to petz/textures/petz_parrot3.png diff --git a/textures/petz_parrot_back.png b/petz/textures/petz_parrot_back.png similarity index 100% rename from textures/petz_parrot_back.png rename to petz/textures/petz_parrot_back.png diff --git a/textures/petz_parrot_bottom.png b/petz/textures/petz_parrot_bottom.png similarity index 100% rename from textures/petz_parrot_bottom.png rename to petz/textures/petz_parrot_bottom.png diff --git a/textures/petz_parrot_front.png b/petz/textures/petz_parrot_front.png similarity index 100% rename from textures/petz_parrot_front.png rename to petz/textures/petz_parrot_front.png diff --git a/textures/petz_parrot_left.png b/petz/textures/petz_parrot_left.png similarity index 100% rename from textures/petz_parrot_left.png rename to petz/textures/petz_parrot_left.png diff --git a/textures/petz_parrot_right.png b/petz/textures/petz_parrot_right.png similarity index 100% rename from textures/petz_parrot_right.png rename to petz/textures/petz_parrot_right.png diff --git a/textures/petz_parrot_top.png b/petz/textures/petz_parrot_top.png similarity index 100% rename from textures/petz_parrot_top.png rename to petz/textures/petz_parrot_top.png diff --git a/textures/petz_pet_bowl.png b/petz/textures/petz_pet_bowl.png similarity index 100% rename from textures/petz_pet_bowl.png rename to petz/textures/petz_pet_bowl.png diff --git a/textures/petz_pet_bowl_inv.png b/petz/textures/petz_pet_bowl_inv.png similarity index 100% rename from textures/petz_pet_bowl_inv.png rename to petz/textures/petz_pet_bowl_inv.png diff --git a/textures/petz_pigeon.png b/petz/textures/petz_pigeon.png similarity index 100% rename from textures/petz_pigeon.png rename to petz/textures/petz_pigeon.png diff --git a/textures/petz_pigeon2.png b/petz/textures/petz_pigeon2.png similarity index 100% rename from textures/petz_pigeon2.png rename to petz/textures/petz_pigeon2.png diff --git a/textures/petz_pigeon3.png b/petz/textures/petz_pigeon3.png similarity index 100% rename from textures/petz_pigeon3.png rename to petz/textures/petz_pigeon3.png diff --git a/textures/petz_pigeon_back.png b/petz/textures/petz_pigeon_back.png similarity index 100% rename from textures/petz_pigeon_back.png rename to petz/textures/petz_pigeon_back.png diff --git a/textures/petz_pigeon_bottom.png b/petz/textures/petz_pigeon_bottom.png similarity index 100% rename from textures/petz_pigeon_bottom.png rename to petz/textures/petz_pigeon_bottom.png diff --git a/textures/petz_pigeon_front.png b/petz/textures/petz_pigeon_front.png similarity index 100% rename from textures/petz_pigeon_front.png rename to petz/textures/petz_pigeon_front.png diff --git a/textures/petz_pigeon_left.png b/petz/textures/petz_pigeon_left.png similarity index 100% rename from textures/petz_pigeon_left.png rename to petz/textures/petz_pigeon_left.png diff --git a/textures/petz_pigeon_right.png b/petz/textures/petz_pigeon_right.png similarity index 100% rename from textures/petz_pigeon_right.png rename to petz/textures/petz_pigeon_right.png diff --git a/textures/petz_pigeon_top.png b/petz/textures/petz_pigeon_top.png similarity index 100% rename from textures/petz_pigeon_top.png rename to petz/textures/petz_pigeon_top.png diff --git a/textures/petz_piggeon_bottom.png b/petz/textures/petz_piggeon_bottom.png similarity index 100% rename from textures/petz_piggeon_bottom.png rename to petz/textures/petz_piggeon_bottom.png diff --git a/textures/petz_piggy.png b/petz/textures/petz_piggy.png similarity index 100% rename from textures/petz_piggy.png rename to petz/textures/petz_piggy.png diff --git a/textures/petz_piggy_back.png b/petz/textures/petz_piggy_back.png similarity index 100% rename from textures/petz_piggy_back.png rename to petz/textures/petz_piggy_back.png diff --git a/textures/petz_piggy_bottom.png b/petz/textures/petz_piggy_bottom.png similarity index 100% rename from textures/petz_piggy_bottom.png rename to petz/textures/petz_piggy_bottom.png diff --git a/textures/petz_piggy_front.png b/petz/textures/petz_piggy_front.png similarity index 100% rename from textures/petz_piggy_front.png rename to petz/textures/petz_piggy_front.png diff --git a/textures/petz_piggy_left.png b/petz/textures/petz_piggy_left.png similarity index 100% rename from textures/petz_piggy_left.png rename to petz/textures/petz_piggy_left.png diff --git a/textures/petz_piggy_right.png b/petz/textures/petz_piggy_right.png similarity index 100% rename from textures/petz_piggy_right.png rename to petz/textures/petz_piggy_right.png diff --git a/textures/petz_piggy_top.png b/petz/textures/petz_piggy_top.png similarity index 100% rename from textures/petz_piggy_top.png rename to petz/textures/petz_piggy_top.png diff --git a/textures/petz_pony_back.png b/petz/textures/petz_pony_back.png similarity index 100% rename from textures/petz_pony_back.png rename to petz/textures/petz_pony_back.png diff --git a/textures/petz_pony_black.png b/petz/textures/petz_pony_black.png similarity index 100% rename from textures/petz_pony_black.png rename to petz/textures/petz_pony_black.png diff --git a/textures/petz_pony_bottom.png b/petz/textures/petz_pony_bottom.png similarity index 100% rename from textures/petz_pony_bottom.png rename to petz/textures/petz_pony_bottom.png diff --git a/textures/petz_pony_brown.png b/petz/textures/petz_pony_brown.png similarity index 100% rename from textures/petz_pony_brown.png rename to petz/textures/petz_pony_brown.png diff --git a/textures/petz_pony_front.png b/petz/textures/petz_pony_front.png similarity index 100% rename from textures/petz_pony_front.png rename to petz/textures/petz_pony_front.png diff --git a/textures/petz_pony_gray_dotted.png b/petz/textures/petz_pony_gray_dotted.png similarity index 100% rename from textures/petz_pony_gray_dotted.png rename to petz/textures/petz_pony_gray_dotted.png diff --git a/textures/petz_pony_left.png b/petz/textures/petz_pony_left.png similarity index 100% rename from textures/petz_pony_left.png rename to petz/textures/petz_pony_left.png diff --git a/textures/petz_pony_left_saddle.png b/petz/textures/petz_pony_left_saddle.png similarity index 100% rename from textures/petz_pony_left_saddle.png rename to petz/textures/petz_pony_left_saddle.png diff --git a/textures/petz_pony_pregnant_icon.png b/petz/textures/petz_pony_pregnant_icon.png similarity index 100% rename from textures/petz_pony_pregnant_icon.png rename to petz/textures/petz_pony_pregnant_icon.png diff --git a/textures/petz_pony_right.png b/petz/textures/petz_pony_right.png similarity index 100% rename from textures/petz_pony_right.png rename to petz/textures/petz_pony_right.png diff --git a/textures/petz_pony_right_saddle.png b/petz/textures/petz_pony_right_saddle.png similarity index 100% rename from textures/petz_pony_right_saddle.png rename to petz/textures/petz_pony_right_saddle.png diff --git a/textures/petz_pony_saddle.png b/petz/textures/petz_pony_saddle.png similarity index 100% rename from textures/petz_pony_saddle.png rename to petz/textures/petz_pony_saddle.png diff --git a/textures/petz_pony_top.png b/petz/textures/petz_pony_top.png similarity index 100% rename from textures/petz_pony_top.png rename to petz/textures/petz_pony_top.png diff --git a/textures/petz_pony_top_saddle.png b/petz/textures/petz_pony_top_saddle.png similarity index 100% rename from textures/petz_pony_top_saddle.png rename to petz/textures/petz_pony_top_saddle.png diff --git a/textures/petz_pony_velocity_icon.png b/petz/textures/petz_pony_velocity_icon.png similarity index 100% rename from textures/petz_pony_velocity_icon.png rename to petz/textures/petz_pony_velocity_icon.png diff --git a/textures/petz_pony_white.png b/petz/textures/petz_pony_white.png similarity index 100% rename from textures/petz_pony_white.png rename to petz/textures/petz_pony_white.png diff --git a/textures/petz_pony_white_dotted.png b/petz/textures/petz_pony_white_dotted.png similarity index 100% rename from textures/petz_pony_white_dotted.png rename to petz/textures/petz_pony_white_dotted.png diff --git a/textures/petz_pony_yellow.png b/petz/textures/petz_pony_yellow.png similarity index 100% rename from textures/petz_pony_yellow.png rename to petz/textures/petz_pony_yellow.png diff --git a/textures/petz_puppy.png b/petz/textures/petz_puppy.png similarity index 100% rename from textures/petz_puppy.png rename to petz/textures/petz_puppy.png diff --git a/textures/petz_puppy2.png b/petz/textures/petz_puppy2.png similarity index 100% rename from textures/petz_puppy2.png rename to petz/textures/petz_puppy2.png diff --git a/textures/petz_puppy3.png b/petz/textures/petz_puppy3.png similarity index 100% rename from textures/petz_puppy3.png rename to petz/textures/petz_puppy3.png diff --git a/textures/petz_puppy_back.png b/petz/textures/petz_puppy_back.png similarity index 100% rename from textures/petz_puppy_back.png rename to petz/textures/petz_puppy_back.png diff --git a/textures/petz_puppy_bottom.png b/petz/textures/petz_puppy_bottom.png similarity index 100% rename from textures/petz_puppy_bottom.png rename to petz/textures/petz_puppy_bottom.png diff --git a/textures/petz_puppy_front.png b/petz/textures/petz_puppy_front.png similarity index 100% rename from textures/petz_puppy_front.png rename to petz/textures/petz_puppy_front.png diff --git a/textures/petz_puppy_left.png b/petz/textures/petz_puppy_left.png similarity index 100% rename from textures/petz_puppy_left.png rename to petz/textures/petz_puppy_left.png diff --git a/textures/petz_puppy_right.png b/petz/textures/petz_puppy_right.png similarity index 100% rename from textures/petz_puppy_right.png rename to petz/textures/petz_puppy_right.png diff --git a/textures/petz_puppy_top.png b/petz/textures/petz_puppy_top.png similarity index 100% rename from textures/petz_puppy_top.png rename to petz/textures/petz_puppy_top.png diff --git a/textures/petz_raw_chicken.png b/petz/textures/petz_raw_chicken.png similarity index 100% rename from textures/petz_raw_chicken.png rename to petz/textures/petz_raw_chicken.png diff --git a/textures/petz_raw_ducky.png b/petz/textures/petz_raw_ducky.png similarity index 100% rename from textures/petz_raw_ducky.png rename to petz/textures/petz_raw_ducky.png diff --git a/textures/petz_raw_parrot.png b/petz/textures/petz_raw_parrot.png similarity index 100% rename from textures/petz_raw_parrot.png rename to petz/textures/petz_raw_parrot.png diff --git a/textures/petz_raw_porkchop.png b/petz/textures/petz_raw_porkchop.png similarity index 100% rename from textures/petz_raw_porkchop.png rename to petz/textures/petz_raw_porkchop.png diff --git a/textures/petz_red_gables.png b/petz/textures/petz_red_gables.png similarity index 100% rename from textures/petz_red_gables.png rename to petz/textures/petz_red_gables.png diff --git a/textures/petz_roasted_chicken.png b/petz/textures/petz_roasted_chicken.png similarity index 100% rename from textures/petz_roasted_chicken.png rename to petz/textures/petz_roasted_chicken.png diff --git a/textures/petz_roasted_ducky.png b/petz/textures/petz_roasted_ducky.png similarity index 100% rename from textures/petz_roasted_ducky.png rename to petz/textures/petz_roasted_ducky.png diff --git a/textures/petz_roasted_lamb_chop.png b/petz/textures/petz_roasted_lamb_chop.png similarity index 100% rename from textures/petz_roasted_lamb_chop.png rename to petz/textures/petz_roasted_lamb_chop.png diff --git a/textures/petz_roasted_parrot.png b/petz/textures/petz_roasted_parrot.png similarity index 100% rename from textures/petz_roasted_parrot.png rename to petz/textures/petz_roasted_parrot.png diff --git a/textures/petz_roasted_porkchop.png b/petz/textures/petz_roasted_porkchop.png similarity index 100% rename from textures/petz_roasted_porkchop.png rename to petz/textures/petz_roasted_porkchop.png diff --git a/textures/petz_saddle.png b/petz/textures/petz_saddle.png similarity index 100% rename from textures/petz_saddle.png rename to petz/textures/petz_saddle.png diff --git a/textures/petz_shears.png b/petz/textures/petz_shears.png similarity index 100% rename from textures/petz_shears.png rename to petz/textures/petz_shears.png diff --git a/textures/petz_spawnegg_beaver.png b/petz/textures/petz_spawnegg_beaver.png similarity index 100% rename from textures/petz_spawnegg_beaver.png rename to petz/textures/petz_spawnegg_beaver.png diff --git a/textures/petz_spawnegg_calf.png b/petz/textures/petz_spawnegg_calf.png similarity index 100% rename from textures/petz_spawnegg_calf.png rename to petz/textures/petz_spawnegg_calf.png diff --git a/textures/petz_spawnegg_chicken.png b/petz/textures/petz_spawnegg_chicken.png similarity index 100% rename from textures/petz_spawnegg_chicken.png rename to petz/textures/petz_spawnegg_chicken.png diff --git a/textures/petz_spawnegg_chimp.png b/petz/textures/petz_spawnegg_chimp.png similarity index 100% rename from textures/petz_spawnegg_chimp.png rename to petz/textures/petz_spawnegg_chimp.png diff --git a/textures/petz_spawnegg_clownfish.png b/petz/textures/petz_spawnegg_clownfish.png similarity index 100% rename from textures/petz_spawnegg_clownfish.png rename to petz/textures/petz_spawnegg_clownfish.png diff --git a/textures/petz_spawnegg_ducky.png b/petz/textures/petz_spawnegg_ducky.png similarity index 100% rename from textures/petz_spawnegg_ducky.png rename to petz/textures/petz_spawnegg_ducky.png diff --git a/textures/petz_spawnegg_frog.png b/petz/textures/petz_spawnegg_frog.png similarity index 100% rename from textures/petz_spawnegg_frog.png rename to petz/textures/petz_spawnegg_frog.png diff --git a/textures/petz_spawnegg_grizzly.png b/petz/textures/petz_spawnegg_grizzly.png similarity index 100% rename from textures/petz_spawnegg_grizzly.png rename to petz/textures/petz_spawnegg_grizzly.png diff --git a/textures/petz_spawnegg_kitty.png b/petz/textures/petz_spawnegg_kitty.png similarity index 100% rename from textures/petz_spawnegg_kitty.png rename to petz/textures/petz_spawnegg_kitty.png diff --git a/textures/petz_spawnegg_lamb.png b/petz/textures/petz_spawnegg_lamb.png similarity index 100% rename from textures/petz_spawnegg_lamb.png rename to petz/textures/petz_spawnegg_lamb.png diff --git a/textures/petz_spawnegg_lion.png b/petz/textures/petz_spawnegg_lion.png similarity index 100% rename from textures/petz_spawnegg_lion.png rename to petz/textures/petz_spawnegg_lion.png diff --git a/textures/petz_spawnegg_panda.png b/petz/textures/petz_spawnegg_panda.png similarity index 100% rename from textures/petz_spawnegg_panda.png rename to petz/textures/petz_spawnegg_panda.png diff --git a/textures/petz_spawnegg_parrot.png b/petz/textures/petz_spawnegg_parrot.png similarity index 100% rename from textures/petz_spawnegg_parrot.png rename to petz/textures/petz_spawnegg_parrot.png diff --git a/textures/petz_spawnegg_pigeon.png b/petz/textures/petz_spawnegg_pigeon.png similarity index 100% rename from textures/petz_spawnegg_pigeon.png rename to petz/textures/petz_spawnegg_pigeon.png diff --git a/textures/petz_spawnegg_piggy.png b/petz/textures/petz_spawnegg_piggy.png similarity index 100% rename from textures/petz_spawnegg_piggy.png rename to petz/textures/petz_spawnegg_piggy.png diff --git a/textures/petz_spawnegg_pony.png b/petz/textures/petz_spawnegg_pony.png similarity index 100% rename from textures/petz_spawnegg_pony.png rename to petz/textures/petz_spawnegg_pony.png diff --git a/textures/petz_spawnegg_puppy.png b/petz/textures/petz_spawnegg_puppy.png similarity index 100% rename from textures/petz_spawnegg_puppy.png rename to petz/textures/petz_spawnegg_puppy.png diff --git a/textures/petz_spawnegg_tropicalfish.png b/petz/textures/petz_spawnegg_tropicalfish.png similarity index 100% rename from textures/petz_spawnegg_tropicalfish.png rename to petz/textures/petz_spawnegg_tropicalfish.png diff --git a/textures/petz_spawnegg_turtle.png b/petz/textures/petz_spawnegg_turtle.png similarity index 100% rename from textures/petz_spawnegg_turtle.png rename to petz/textures/petz_spawnegg_turtle.png diff --git a/textures/petz_spawnegg_wolf.png b/petz/textures/petz_spawnegg_wolf.png similarity index 100% rename from textures/petz_spawnegg_wolf.png rename to petz/textures/petz_spawnegg_wolf.png diff --git a/textures/petz_square_ball.png b/petz/textures/petz_square_ball.png similarity index 100% rename from textures/petz_square_ball.png rename to petz/textures/petz_square_ball.png diff --git a/textures/petz_square_ball_basket.png b/petz/textures/petz_square_ball_basket.png similarity index 100% rename from textures/petz_square_ball_basket.png rename to petz/textures/petz_square_ball_basket.png diff --git a/textures/petz_square_ball_football.png b/petz/textures/petz_square_ball_football.png similarity index 100% rename from textures/petz_square_ball_football.png rename to petz/textures/petz_square_ball_football.png diff --git a/textures/petz_star_particle.png b/petz/textures/petz_star_particle.png similarity index 100% rename from textures/petz_star_particle.png rename to petz/textures/petz_star_particle.png diff --git a/textures/petz_steak.png b/petz/textures/petz_steak.png similarity index 100% rename from textures/petz_steak.png rename to petz/textures/petz_steak.png diff --git a/textures/petz_template_spritesheet.png b/petz/textures/petz_template_spritesheet.png similarity index 100% rename from textures/petz_template_spritesheet.png rename to petz/textures/petz_template_spritesheet.png diff --git a/textures/petz_tropicalfish.png b/petz/textures/petz_tropicalfish.png similarity index 100% rename from textures/petz_tropicalfish.png rename to petz/textures/petz_tropicalfish.png diff --git a/textures/petz_tropicalfish2.png b/petz/textures/petz_tropicalfish2.png similarity index 100% rename from textures/petz_tropicalfish2.png rename to petz/textures/petz_tropicalfish2.png diff --git a/textures/petz_tropicalfish3.png b/petz/textures/petz_tropicalfish3.png similarity index 100% rename from textures/petz_tropicalfish3.png rename to petz/textures/petz_tropicalfish3.png diff --git a/textures/petz_tropicalfish_back.png b/petz/textures/petz_tropicalfish_back.png similarity index 100% rename from textures/petz_tropicalfish_back.png rename to petz/textures/petz_tropicalfish_back.png diff --git a/textures/petz_tropicalfish_bottom.png b/petz/textures/petz_tropicalfish_bottom.png similarity index 100% rename from textures/petz_tropicalfish_bottom.png rename to petz/textures/petz_tropicalfish_bottom.png diff --git a/textures/petz_tropicalfish_front.png b/petz/textures/petz_tropicalfish_front.png similarity index 100% rename from textures/petz_tropicalfish_front.png rename to petz/textures/petz_tropicalfish_front.png diff --git a/textures/petz_tropicalfish_left.png b/petz/textures/petz_tropicalfish_left.png similarity index 100% rename from textures/petz_tropicalfish_left.png rename to petz/textures/petz_tropicalfish_left.png diff --git a/textures/petz_tropicalfish_right.png b/petz/textures/petz_tropicalfish_right.png similarity index 100% rename from textures/petz_tropicalfish_right.png rename to petz/textures/petz_tropicalfish_right.png diff --git a/textures/petz_tropicalfish_spritesheet.png b/petz/textures/petz_tropicalfish_spritesheet.png similarity index 100% rename from textures/petz_tropicalfish_spritesheet.png rename to petz/textures/petz_tropicalfish_spritesheet.png diff --git a/textures/petz_tropicalfish_top.png b/petz/textures/petz_tropicalfish_top.png similarity index 100% rename from textures/petz_tropicalfish_top.png rename to petz/textures/petz_tropicalfish_top.png diff --git a/textures/petz_turtle.png b/petz/textures/petz_turtle.png similarity index 100% rename from textures/petz_turtle.png rename to petz/textures/petz_turtle.png diff --git a/textures/petz_turtle2.png b/petz/textures/petz_turtle2.png similarity index 100% rename from textures/petz_turtle2.png rename to petz/textures/petz_turtle2.png diff --git a/textures/petz_turtle3.png b/petz/textures/petz_turtle3.png similarity index 100% rename from textures/petz_turtle3.png rename to petz/textures/petz_turtle3.png diff --git a/textures/petz_turtle_back.png b/petz/textures/petz_turtle_back.png similarity index 100% rename from textures/petz_turtle_back.png rename to petz/textures/petz_turtle_back.png diff --git a/textures/petz_turtle_bottom.png b/petz/textures/petz_turtle_bottom.png similarity index 100% rename from textures/petz_turtle_bottom.png rename to petz/textures/petz_turtle_bottom.png diff --git a/textures/petz_turtle_front.png b/petz/textures/petz_turtle_front.png similarity index 100% rename from textures/petz_turtle_front.png rename to petz/textures/petz_turtle_front.png diff --git a/textures/petz_turtle_left.png b/petz/textures/petz_turtle_left.png similarity index 100% rename from textures/petz_turtle_left.png rename to petz/textures/petz_turtle_left.png diff --git a/textures/petz_turtle_right.png b/petz/textures/petz_turtle_right.png similarity index 100% rename from textures/petz_turtle_right.png rename to petz/textures/petz_turtle_right.png diff --git a/textures/petz_turtle_shell.png b/petz/textures/petz_turtle_shell.png similarity index 100% rename from textures/petz_turtle_shell.png rename to petz/textures/petz_turtle_shell.png diff --git a/textures/petz_turtle_top.png b/petz/textures/petz_turtle_top.png similarity index 100% rename from textures/petz_turtle_top.png rename to petz/textures/petz_turtle_top.png diff --git a/textures/petz_whip.png b/petz/textures/petz_whip.png similarity index 100% rename from textures/petz_whip.png rename to petz/textures/petz_whip.png diff --git a/textures/petz_wolf.png b/petz/textures/petz_wolf.png similarity index 100% rename from textures/petz_wolf.png rename to petz/textures/petz_wolf.png diff --git a/textures/petz_wolf2.png b/petz/textures/petz_wolf2.png similarity index 100% rename from textures/petz_wolf2.png rename to petz/textures/petz_wolf2.png diff --git a/textures/petz_wolf3.png b/petz/textures/petz_wolf3.png similarity index 100% rename from textures/petz_wolf3.png rename to petz/textures/petz_wolf3.png diff --git a/textures/petz_wolf_back.png b/petz/textures/petz_wolf_back.png similarity index 100% rename from textures/petz_wolf_back.png rename to petz/textures/petz_wolf_back.png diff --git a/textures/petz_wolf_bottom.png b/petz/textures/petz_wolf_bottom.png similarity index 100% rename from textures/petz_wolf_bottom.png rename to petz/textures/petz_wolf_bottom.png diff --git a/textures/petz_wolf_front.png b/petz/textures/petz_wolf_front.png similarity index 100% rename from textures/petz_wolf_front.png rename to petz/textures/petz_wolf_front.png diff --git a/textures/petz_wolf_left.png b/petz/textures/petz_wolf_left.png similarity index 100% rename from textures/petz_wolf_left.png rename to petz/textures/petz_wolf_left.png diff --git a/textures/petz_wolf_right.png b/petz/textures/petz_wolf_right.png similarity index 100% rename from textures/petz_wolf_right.png rename to petz/textures/petz_wolf_right.png diff --git a/textures/petz_wolf_top.png b/petz/textures/petz_wolf_top.png similarity index 100% rename from textures/petz_wolf_top.png rename to petz/textures/petz_wolf_top.png diff --git a/textures/petz_yellow_paving.png b/petz/textures/petz_yellow_paving.png similarity index 100% rename from textures/petz_yellow_paving.png rename to petz/textures/petz_yellow_paving.png diff --git a/turtle_mobkit.lua b/petz/tropicalfish_mobkit.lua similarity index 100% rename from turtle_mobkit.lua rename to petz/tropicalfish_mobkit.lua diff --git a/petz/turtle_mobkit.lua b/petz/turtle_mobkit.lua new file mode 100644 index 0000000..e69de29 diff --git a/wolf_mobkit.lua b/petz/wolf_mobkit.lua similarity index 100% rename from wolf_mobkit.lua rename to petz/wolf_mobkit.lua