From 6241f4ecafabb9f87affe6097ab4c0f5cf8f32e6 Mon Sep 17 00:00:00 2001 From: sys4 Date: Sat, 11 Nov 2017 17:37:21 +0100 Subject: [PATCH 01/23] Change mobs api and add new mobs from (water_mobs, pmobs, kpgmobs, mob_horse) --- .gitmodules | 11 + mods/creeper/depends.txt | 2 + mods/creeper/init.lua | 57 + mods/creeper/sounds/tnt_explode.ogg | Bin 0 -> 10827 bytes mods/creeper/textures/mobs_creeper.png | Bin 0 -> 16408 bytes mods/creeper/textures/mobs_creeper_inv.png | Bin 0 -> 883 bytes mods/creeper/textures/tnt_smoke.png | Bin 0 -> 202 bytes mods/kpgmobs | 1 + mods/mob_horse | 1 + mods/mobs | 1 + mods/mobs/README.txt | 68 - mods/mobs/api.lua | 2804 --- mods/mobs/bunny.lua | 93 - mods/mobs/crafts.lua | 82 - mods/mobs/creeper.lua | 62 - mods/mobs/dirtmonster.lua | 72 - mods/mobs/dog.lua | 89 - mods/mobs/dungeonmaster.lua | 113 - mods/mobs/greenslimes.lua | 169 - mods/mobs/init.lua | 84 - mods/mobs/kitten.lua | 73 - mods/mobs/lavaslimes.lua | 184 - mods/mobs/mff_menu.lua | 59 - mods/mobs/models/mobs_cow.b3d | Bin 67040 -> 0 bytes mods/mobs/models/mobs_pig.b3d | Bin 52879 -> 0 bytes mods/mobs/npc.lua | 131 - mods/mobs/oerkki.lua | 69 - mods/mobs/pig.lua | 96 - mods/mobs/sandmonster.lua | 74 - mods/mobs/shark.lua | 100 - mods/mobs/sheep.lua | 215 - mods/mobs/sounds/default_punch.ogg | Bin 5308 -> 0 bytes mods/mobs/sounds/default_punch2.ogg | Bin 5946 -> 0 bytes mods/mobs/sounds/mobs_cow.ogg | Bin 7601 -> 0 bytes mods/mobs/sounds/mobs_die_yell.ogg | Bin 11823 -> 0 bytes mods/mobs/sounds/mobs_eerie.ogg | Bin 76836 -> 0 bytes mods/mobs/sounds/mobs_fireball.ogg | Bin 12671 -> 0 bytes mods/mobs/sounds/mobs_howl.ogg | Bin 24163 -> 0 bytes mods/mobs/sounds/mobs_pig.ogg | Bin 6822 -> 0 bytes mods/mobs/sounds/mobs_pig_angry.ogg | Bin 7388 -> 0 bytes mods/mobs/sounds/mobs_sheep.ogg | Bin 6713 -> 0 bytes mods/mobs/sounds/mobs_slimes_attack.ogg | Bin 10375 -> 0 bytes mods/mobs/sounds/mobs_slimes_damage.ogg | Bin 5185 -> 0 bytes mods/mobs/sounds/mobs_slimes_death.ogg | Bin 8414 -> 0 bytes mods/mobs/sounds/mobs_slimes_jump.ogg | Bin 5118 -> 0 bytes mods/mobs/sounds/mobs_spider.ogg | Bin 8583 -> 0 bytes mods/mobs/sounds/mobs_wolf_attack.ogg | Bin 5445 -> 0 bytes mods/mobs/sounds/tnt_explode.ogg | Bin 9082 -> 0 bytes mods/mobs/spawner.lua | 157 - mods/mobs/spider.lua | 105 - mods/mobs/stonemonster.lua | 78 - mods/mobs/textures/mese_dragon.png | Bin 536350 -> 0 bytes mods/mobs/textures/mese_egg.png | Bin 294 -> 0 bytes mods/mobs/textures/mese_meteor.png | Bin 684 -> 0 bytes mods/mobs/textures/mob_spawner.png | Bin 106 -> 0 bytes mods/mobs/textures/mobs_bee.png | Bin 1699 -> 0 bytes mods/mobs/textures/mobs_bee_inv.png | Bin 503 -> 0 bytes mods/mobs/textures/mobs_beehive.png | Bin 498 -> 0 bytes mods/mobs/textures/mobs_blood.png | Bin 155 -> 0 bytes mods/mobs/textures/mobs_bucket_milk.png | Bin 215 -> 0 bytes mods/mobs/textures/mobs_bunny_brown.png | Bin 942 -> 0 bytes mods/mobs/textures/mobs_bunny_evil.png | Bin 777 -> 0 bytes mods/mobs/textures/mobs_bunny_grey.png | Bin 692 -> 0 bytes mods/mobs/textures/mobs_bunny_inv.png | Bin 570 -> 0 bytes mods/mobs/textures/mobs_bunny_white.png | Bin 776 -> 0 bytes mods/mobs/textures/mobs_cheese.png | Bin 238 -> 0 bytes mods/mobs/textures/mobs_cheeseblock.png | Bin 593 -> 0 bytes mods/mobs/textures/mobs_chick.png | Bin 914 -> 0 bytes mods/mobs/textures/mobs_chicken.png | Bin 2727 -> 0 bytes mods/mobs/textures/mobs_chicken_black.png | Bin 1591 -> 0 bytes mods/mobs/textures/mobs_chicken_cooked.png | Bin 214 -> 0 bytes mods/mobs/textures/mobs_chicken_egg.png | Bin 230 -> 0 bytes mods/mobs/textures/mobs_chicken_egg_fried.png | Bin 161 -> 0 bytes mods/mobs/textures/mobs_chicken_inv.png | Bin 445 -> 0 bytes mods/mobs/textures/mobs_chicken_raw.png | Bin 216 -> 0 bytes mods/mobs/textures/mobs_cow_brown.png | Bin 5608 -> 0 bytes mods/mobs/textures/mobs_cow_inv.png | Bin 2287 -> 0 bytes mods/mobs/textures/mobs_cow_lightbrown.png | Bin 16810 -> 0 bytes mods/mobs/textures/mobs_cow_white.png | Bin 5830 -> 0 bytes mods/mobs/textures/mobs_creeper.png | Bin 10116 -> 0 bytes mods/mobs/textures/mobs_creeper_inv.png | Bin 1809 -> 0 bytes mods/mobs/textures/mobs_dirt_monster.png | Bin 4241 -> 0 bytes mods/mobs/textures/mobs_dirt_monster_inv.png | Bin 1612 -> 0 bytes mods/mobs/textures/mobs_dog.png | Bin 606 -> 0 bytes mods/mobs/textures/mobs_dog_inv.png | Bin 2565 -> 0 bytes .../mobs/textures/mobs_dongeon_master_inv.png | Bin 2099 -> 0 bytes mods/mobs/textures/mobs_dung.png | Bin 635 -> 0 bytes mods/mobs/textures/mobs_dungeon_master.png | Bin 1829 -> 0 bytes .../mobs_dungeon_master_cobblestone.png | Bin 1172 -> 0 bytes .../textures/mobs_dungeon_master_fireball.png | Bin 2056 -> 0 bytes .../mobs_dungeon_master_fireball_back.png | Bin 1914 -> 0 bytes .../mobs_dungeon_master_strangewhite.png | Bin 1299 -> 0 bytes mods/mobs/textures/mobs_egg_inv.png | Bin 240 -> 0 bytes mods/mobs/textures/mobs_ent.png | Bin 31030 -> 0 bytes mods/mobs/textures/mobs_ent_inv.png | Bin 2488 -> 0 bytes mods/mobs/textures/mobs_fireball.png | Bin 186 -> 0 bytes .../textures/mobs_green_slime_big_inv.png | Bin 2400 -> 0 bytes mods/mobs/textures/mobs_green_slime_blood.png | Bin 106 -> 0 bytes .../mobs/textures/mobs_green_slime_bottom.png | Bin 1001 -> 0 bytes mods/mobs/textures/mobs_green_slime_egg.png | Bin 421 -> 0 bytes mods/mobs/textures/mobs_green_slime_front.png | Bin 1747 -> 0 bytes .../textures/mobs_green_slime_medium_inv.png | Bin 1461 -> 0 bytes mods/mobs/textures/mobs_green_slime_sides.png | Bin 1844 -> 0 bytes mods/mobs/textures/mobs_green_slime_top.png | Bin 1844 -> 0 bytes mods/mobs/textures/mobs_honey_block.png | Bin 266 -> 0 bytes mods/mobs/textures/mobs_honey_inv.png | Bin 169 -> 0 bytes mods/mobs/textures/mobs_kitten_ginger.png | Bin 406 -> 0 bytes mods/mobs/textures/mobs_kitten_inv.png | Bin 424 -> 0 bytes mods/mobs/textures/mobs_kitten_sandy.png | Bin 374 -> 0 bytes mods/mobs/textures/mobs_kitten_splotchy.png | Bin 433 -> 0 bytes mods/mobs/textures/mobs_kitten_striped.png | Bin 395 -> 0 bytes .../mobs/textures/mobs_lava_slime_big_inv.png | Bin 2558 -> 0 bytes mods/mobs/textures/mobs_lava_slime_blood.png | Bin 1922 -> 0 bytes mods/mobs/textures/mobs_lava_slime_bottom.png | Bin 5208 -> 0 bytes mods/mobs/textures/mobs_lava_slime_egg.png | Bin 3559 -> 0 bytes mods/mobs/textures/mobs_lava_slime_front.png | Bin 3559 -> 0 bytes .../textures/mobs_lava_slime_medium_inv.png | Bin 1857 -> 0 bytes mods/mobs/textures/mobs_lava_slime_sides.png | Bin 5969 -> 0 bytes mods/mobs/textures/mobs_lava_slime_top.png | Bin 5969 -> 0 bytes mods/mobs/textures/mobs_leather.png | Bin 184 -> 0 bytes mods/mobs/textures/mobs_magic_lasso.png | Bin 171 -> 0 bytes mods/mobs/textures/mobs_meat.png | Bin 171 -> 0 bytes mods/mobs/textures/mobs_meat_raw.png | Bin 174 -> 0 bytes .../textures/mobs_mese_dragon_fireball.png | Bin 194 -> 0 bytes mods/mobs/textures/mobs_mese_dragon_inv.png | Bin 969 -> 0 bytes mods/mobs/textures/mobs_nametag.png | Bin 177 -> 0 bytes mods/mobs/textures/mobs_net.png | Bin 177 -> 0 bytes mods/mobs/textures/mobs_npc.png | Bin 836 -> 0 bytes mods/mobs/textures/mobs_npc_male_inv.png | Bin 1671 -> 0 bytes mods/mobs/textures/mobs_oerkki.png | Bin 1564 -> 0 bytes mods/mobs/textures/mobs_oerkki2.png | Bin 1731 -> 0 bytes mods/mobs/textures/mobs_oerkki_inv.png | Bin 1430 -> 0 bytes mods/mobs/textures/mobs_pig_inv.png | Bin 614 -> 0 bytes mods/mobs/textures/mobs_pig_pink.png | Bin 502 -> 0 bytes mods/mobs/textures/mobs_pork_cooked.png | Bin 222 -> 0 bytes mods/mobs/textures/mobs_pork_raw.png | Bin 191 -> 0 bytes mods/mobs/textures/mobs_sand_monster.png | Bin 1565 -> 0 bytes mods/mobs/textures/mobs_sand_monster_inv.png | Bin 1887 -> 0 bytes mods/mobs/textures/mobs_shark_shark_inv.png | Bin 2091 -> 0 bytes mods/mobs/textures/mobs_shears.png | Bin 220 -> 0 bytes mods/mobs/textures/mobs_sheep_base.png | Bin 515 -> 0 bytes mods/mobs/textures/mobs_sheep_shaved.png | Bin 906 -> 0 bytes mods/mobs/textures/mobs_sheep_white.png | Bin 3230 -> 0 bytes mods/mobs/textures/mobs_sheep_white_inv.png | Bin 2232 -> 0 bytes mods/mobs/textures/mobs_sheep_wool.png | Bin 960 -> 0 bytes mods/mobs/textures/mobs_spider.png | Bin 2081 -> 0 bytes mods/mobs/textures/mobs_spider_inv.png | Bin 1891 -> 0 bytes mods/mobs/textures/mobs_stone_monster.png | Bin 1132 -> 0 bytes mods/mobs/textures/mobs_stone_monster2.png | Bin 3539 -> 0 bytes mods/mobs/textures/mobs_stone_monster_inv.png | Bin 1405 -> 0 bytes mods/mobs/textures/mobs_tree_monster.png | Bin 6432 -> 0 bytes mods/mobs/textures/mobs_tree_monster2.png | Bin 4369 -> 0 bytes mods/mobs/textures/mobs_tree_monster_inv.png | Bin 1682 -> 0 bytes mods/mobs/textures/mobs_wolf.png | Bin 630 -> 0 bytes mods/mobs/textures/mobs_wolf_inv.png | Bin 1719 -> 0 bytes mods/mobs/textures/mobs_yeti.png | Bin 3339 -> 0 bytes mods/mobs/textures/mobs_yeti_inv.png | Bin 1733 -> 0 bytes mods/mobs/textures/shark_first.png | Bin 103 -> 0 bytes mods/mobs/textures/shark_second.png | Bin 225 -> 0 bytes mods/mobs/textures/shark_third.png | Bin 1656 -> 0 bytes mods/mobs/textures/tnt_smoke.png | Bin 170 -> 0 bytes mods/mobs/treemonster.lua | 83 - mods/mobs/wolf.lua | 73 - mods/mobs/yeti.lua | 90 - mods/{mobs => mobs_animal}/bee.lua | 96 +- mods/mobs_animal/bunny.lua | 124 + mods/{mobs => mobs_animal}/chicken.lua | 200 +- mods/{mobs => mobs_animal}/cow.lua | 101 +- mods/mobs_animal/depends.txt | 4 + mods/mobs_animal/description.txt | 1 + mods/{mobs => mobs_animal}/goat.lua | 7 +- mods/mobs_animal/init.lua | 24 + mods/mobs_animal/intllib.lua | 45 + mods/mobs_animal/kitten.lua | 80 + mods/mobs_animal/license.txt | 21 + mods/mobs_animal/locale/de.po | 182 + mods/mobs_animal/locale/fr.po | 180 + mods/mobs_animal/locale/it.po | 179 + mods/mobs_animal/locale/ru.po | 178 + mods/mobs_animal/locale/template.pot | 178 + mods/mobs_animal/locale/tr.po | 180 + mods/mobs_animal/lucky_block.lua | 21 + mods/mobs_animal/mod.conf | 1 + mods/{mobs => mobs_animal}/models/mobs_bee.x | 0 .../models/mobs_bunny.b3d | Bin .../models/mobs_chicken.x | 0 mods/mobs_animal/models/mobs_cow.x | 7420 ++++++ .../models/mobs_goat.b3d | Bin .../models/mobs_kitten.b3d | Bin mods/mobs_animal/models/mobs_penguin.b3d | Bin 0 -> 66656 bytes mods/mobs_animal/models/mobs_pumba.x | 5316 ++++ mods/mobs_animal/models/mobs_rat.b3d | Bin 0 -> 6956 bytes .../models/mobs_sheep.b3d | Bin .../models/mobs_sheep_shaved.b3d | Bin mods/mobs_animal/penguin.lua | 80 + mods/mobs_animal/rat.lua | 97 + mods/mobs_animal/readme.md | 42 + mods/mobs_animal/screenshot.png | Bin 0 -> 34071 bytes mods/mobs_animal/sheep.lua | 207 + .../{mobs => mobs_animal}/sounds/mobs_bee.ogg | Bin .../sounds/mobs_chicken.ogg | Bin mods/mobs_animal/sounds/mobs_cow.ogg | Bin 0 -> 7216 bytes .../sounds/mobs_kitten.1.ogg | Bin .../sounds/mobs_kitten.2.ogg | Bin .../sounds/mobs_kitten.3.ogg | Bin .../sounds/mobs_kitten.4.ogg | Bin .../sounds/mobs_kitten.5.ogg | Bin .../sounds/mobs_kitten.6.ogg | Bin mods/mobs_animal/sounds/mobs_kitten.ogg | Bin 0 -> 37977 bytes mods/mobs_animal/sounds/mobs_pig.ogg | Bin 0 -> 5996 bytes mods/mobs_animal/sounds/mobs_pig_angry.ogg | Bin 0 -> 7835 bytes mods/mobs_animal/sounds/mobs_rat.ogg | Bin 0 -> 11134 bytes mods/mobs_animal/sounds/mobs_sheep.ogg | Bin 0 -> 7332 bytes mods/mobs_animal/textures/mobs_bee.png | Bin 0 -> 1832 bytes mods/mobs_animal/textures/mobs_bee_inv.png | Bin 0 -> 934 bytes mods/mobs_animal/textures/mobs_beehive.png | Bin 0 -> 513 bytes .../mobs_animal/textures/mobs_bucket_milk.png | Bin 0 -> 241 bytes .../mobs_animal/textures/mobs_bunny_brown.png | Bin 0 -> 999 bytes mods/mobs_animal/textures/mobs_bunny_evil.png | Bin 0 -> 809 bytes mods/mobs_animal/textures/mobs_bunny_grey.png | Bin 0 -> 771 bytes mods/mobs_animal/textures/mobs_bunny_inv.png | Bin 0 -> 466 bytes .../mobs_animal/textures/mobs_bunny_white.png | Bin 0 -> 809 bytes mods/mobs_animal/textures/mobs_cheese.png | Bin 0 -> 247 bytes .../mobs_animal/textures/mobs_cheeseblock.png | Bin 0 -> 609 bytes mods/mobs_animal/textures/mobs_chick.png | Bin 0 -> 1025 bytes mods/mobs_animal/textures/mobs_chicken.png | Bin 0 -> 2969 bytes .../textures/mobs_chicken_black.png | Bin 0 -> 1693 bytes .../textures/mobs_chicken_cooked.png | Bin 0 -> 216 bytes .../textures/mobs_chicken_egg_fried.png | Bin 0 -> 166 bytes .../textures/mobs_chicken_feather.png | Bin 0 -> 167 bytes .../mobs_animal/textures/mobs_chicken_inv.png | Bin 0 -> 369 bytes .../mobs_animal/textures/mobs_chicken_raw.png | Bin 0 -> 218 bytes mods/mobs_animal/textures/mobs_cooked_rat.png | Bin 0 -> 239 bytes mods/mobs_animal/textures/mobs_cow.png | Bin 0 -> 948 bytes mods/mobs_animal/textures/mobs_cow2.png | Bin 0 -> 4435 bytes .../textures/mobs_goat_brown.png | Bin .../textures/mobs_goat_grey.png | Bin .../textures/mobs_goat_inv.png | Bin .../textures/mobs_goat_white.png | Bin .../mobs_animal/textures/mobs_honey_block.png | Bin 0 -> 272 bytes mods/mobs_animal/textures/mobs_honey_inv.png | Bin 0 -> 301 bytes .../textures/mobs_kitten_ginger.png | Bin 0 -> 440 bytes mods/mobs_animal/textures/mobs_kitten_inv.png | Bin 0 -> 377 bytes .../textures/mobs_kitten_sandy.png | Bin 0 -> 404 bytes .../textures/mobs_kitten_splotchy.png | Bin 0 -> 456 bytes .../textures/mobs_kitten_striped.png | Bin 0 -> 416 bytes mods/mobs_animal/textures/mobs_penguin.png | Bin 0 -> 892 bytes .../mobs_animal/textures/mobs_pork_cooked.png | Bin 0 -> 224 bytes mods/mobs_animal/textures/mobs_pork_raw.png | Bin 0 -> 198 bytes mods/mobs_animal/textures/mobs_pumba.png | Bin 0 -> 1219 bytes mods/mobs_animal/textures/mobs_rat.png | Bin 0 -> 1056 bytes mods/mobs_animal/textures/mobs_rat2.png | Bin 0 -> 834 bytes .../textures/mobs_rat_inventory.png | Bin 0 -> 565 bytes mods/mobs_animal/textures/mobs_sheep_base.png | Bin 0 -> 635 bytes .../textures/mobs_sheep_shaved.png | Bin 0 -> 983 bytes mods/mobs_animal/textures/mobs_sheep_wool.png | Bin 0 -> 1028 bytes mods/mobs_animal/warthog.lua | 102 + mods/mobs_monster/depends.txt | 5 + mods/mobs_monster/description.txt | 1 + mods/mobs_monster/dirt_monster.lua | 84 + mods/mobs_monster/dungeon_master.lua | 128 + mods/mobs_monster/init.lua | 38 + mods/mobs_monster/lava_flan.lua | 178 + mods/mobs_monster/license.txt | 21 + mods/mobs_monster/locale/de.txt | 37 + mods/mobs_monster/locale/it.txt | 38 + mods/mobs_monster/locale/template.txt | 35 + mods/mobs_monster/locale/tr.txt | 39 + mods/mobs_monster/lucky_block.lua | 19 + mods/{mobs => mobs_monster}/mese_dragon.lua | 21 +- mods/{mobs => mobs_monster}/mese_monster.lua | 69 +- mods/{mobs => mobs_monster}/minotaur.lua | 46 +- mods/mobs_monster/mod.conf | 1 + .../models/mese_dragon.b3d | Bin .../models/mobs_dungeon_master.b3d | Bin .../models/mobs_minotaur.b3d | Bin .../models/mobs_oerkki.b3d | Bin .../models/mobs_pumpboom.x | 0 .../models/mobs_pumpking.x | 0 .../models/mobs_sand_monster.b3d | Bin .../models/mobs_spider.x | 0 .../models/mobs_stone_monster.b3d | Bin .../models/mobs_tree_monster.b3d | Bin mods/mobs_monster/models/zmobs_lava_flan.x | 3506 +++ .../models/zmobs_mese_monster.x | 0 mods/mobs_monster/oerkki.lua | 76 + mods/{mobs => mobs_monster}/pumpkins.lua | 26 +- mods/mobs_monster/readme.md | 40 + mods/mobs_monster/sand_monster.lua | 83 + .../sounds/mese_dragon.ogg | Bin mods/{mobs => mobs_monster}/sounds/mesed.ogg | Bin .../sounds/mobs_dirtmonster.1.ogg | Bin .../sounds/mobs_dirtmonster.2.ogg | Bin mods/mobs_monster/sounds/mobs_dirtmonster.ogg | Bin 0 -> 17618 bytes .../sounds/mobs_dungeonmaster.1.ogg | Bin .../sounds/mobs_dungeonmaster.2.ogg | Bin .../sounds/mobs_dungeonmaster.3.ogg | Bin .../sounds/mobs_dungeonmaster.ogg | Bin 0 -> 12624 bytes mods/mobs_monster/sounds/mobs_fireball.ogg | Bin 0 -> 22342 bytes .../sounds/mobs_king.ogg | Bin mods/mobs_monster/sounds/mobs_lavaflan.ogg | Bin 0 -> 20095 bytes .../sounds/mobs_mesemonster.1.ogg | Bin .../sounds/mobs_mesemonster.2.ogg | Bin mods/mobs_monster/sounds/mobs_mesemonster.ogg | Bin 0 -> 24646 bytes .../sounds/mobs_oerkki.1.ogg | Bin .../sounds/mobs_oerkki.2.ogg | Bin mods/mobs_monster/sounds/mobs_oerkki.ogg | Bin 0 -> 35208 bytes .../sounds/mobs_oerkki_attack.ogg | Bin .../sounds/mobs_pump.ogg | Bin .../sounds/mobs_sandmonster.1.ogg | Bin .../sounds/mobs_sandmonster.2.ogg | Bin mods/mobs_monster/sounds/mobs_sandmonster.ogg | Bin 0 -> 51456 bytes mods/mobs_monster/sounds/mobs_spider.ogg | Bin 0 -> 11918 bytes .../sounds/mobs_spider_attack.ogg | Bin .../sounds/mobs_stonemonster.1.ogg | Bin .../sounds/mobs_stonemonster.2.ogg | Bin .../mobs_monster/sounds/mobs_stonemonster.ogg | Bin 0 -> 9946 bytes .../sounds/mobs_stonemonster_attack.ogg | Bin .../sounds/mobs_treemonster.1.ogg | Bin .../sounds/mobs_treemonster.2.ogg | Bin mods/mobs_monster/sounds/mobs_treemonster.ogg | Bin 0 -> 12516 bytes mods/mobs_monster/spider.lua | 115 + mods/mobs_monster/stone_monster.lua | 80 + .../textures/mobs_cobweb.png | Bin .../textures/mobs_dirt_monster.png | Bin 0 -> 1468 bytes .../textures/mobs_dungeon_master.png | Bin 0 -> 1906 bytes .../textures/mobs_dungeon_master2.png | Bin 0 -> 1195 bytes .../textures/mobs_dungeon_master3.png | Bin 0 -> 1963 bytes .../textures/mobs_dungeon_master_blood.png | Bin .../textures/mobs_dungeon_master_diamond.png | Bin mods/mobs_monster/textures/mobs_fireball.png | Bin 0 -> 293 bytes .../textures/mobs_mese_monster_inv.png | Bin .../textures/mobs_minotaur.png | Bin .../textures/mobs_minotaur_eye.png | Bin .../textures/mobs_minotaur_fur.png | Bin .../textures/mobs_minotaur_horn.png | Bin .../textures/mobs_minotaur_inv.png | Bin .../textures/mobs_minotaur_lots_of_fur.png | Bin mods/mobs_monster/textures/mobs_oerkki.png | Bin 0 -> 1727 bytes mods/mobs_monster/textures/mobs_oerkki2.png | Bin 0 -> 1789 bytes mods/mobs_monster/textures/mobs_pick_lava.png | Bin 0 -> 239 bytes .../textures/mobs_pumpboom.png | Bin .../textures/mobs_pumpboom_inv.png | Bin .../textures/mobs_pumpking.png | Bin .../textures/mobs_pumpking_inv.png | Bin .../textures/mobs_sand_monster.png | Bin 0 -> 1655 bytes mods/mobs_monster/textures/mobs_spider.png | Bin 0 -> 2087 bytes .../textures/mobs_stone_monster.png | Bin 0 -> 1224 bytes .../textures/mobs_stone_monster2.png | Bin 0 -> 3682 bytes .../textures/mobs_tree_monster.png | Bin 0 -> 6783 bytes .../textures/mobs_tree_monster2.png | Bin 0 -> 4762 bytes .../textures/zmobs_egg_mese_monster.png | Bin .../mobs_monster/textures/zmobs_lava_flan.png | Bin 0 -> 1532 bytes .../textures/zmobs_lava_flan2.png | Bin 0 -> 1277 bytes .../textures/zmobs_lava_flan3.png | Bin 0 -> 1884 bytes .../textures/zmobs_lava_orb.png | Bin .../textures/zmobs_mese_monster.png | Bin mods/mobs_monster/tree_monster.lua | 82 + mods/mobs_water/README.md | 4 + mods/mobs_water/mobs_crocs/License.txt | 4 + mods/mobs_water/mobs_crocs/SETTINGS.txt | 21 + mods/mobs_water/mobs_crocs/depends.txt | 2 + mods/mobs_water/mobs_crocs/init.lua | 135 + mods/mobs_water/mobs_crocs/models/crocodile.x | 20286 ++++++++++++++++ mods/mobs_water/mobs_crocs/sounds/croco.ogg | Bin 0 -> 48854 bytes mods/mobs_water/mobs_crocs/textures/croco.png | Bin 0 -> 9821 bytes .../mobs_water/mobs_crocs/textures/croco2.png | Bin 0 -> 8390 bytes mods/mobs_water/mobs_fish/License.txt | 6 + mods/mobs_water/mobs_fish/depends.txt | 2 + mods/mobs_water/mobs_fish/init.lua | 104 + .../mobs_fish/models/animal_clownfish.b3d | Bin 0 -> 91816 bytes .../mobs_fish/models/base/clownfish.blend | Bin 0 -> 547964 bytes .../models/base/fish_blue_white.blend | Bin 0 -> 477072 bytes .../mobs_fish/models/base/fish_blue_white.xcf | Bin 0 -> 2650897 bytes .../models/base/fish_clownfish_mesh.xcf | Bin 0 -> 1056192 bytes .../mobs_fish/models/fish_blue_white.b3d | Bin 0 -> 91816 bytes .../animal_clownfish_clownfish_item.png | Bin 0 -> 1920 bytes ...l_fish_blue_white_fish_blue_white_item.png | Bin 0 -> 1458 bytes .../mobs_fish/textures/clownfish.png | Bin 0 -> 26917 bytes .../mobs_fish/textures/clownfish2.png | Bin 0 -> 26690 bytes mods/mobs_water/mobs_fish/textures/fish.png | Bin 0 -> 34034 bytes mods/mobs_water/mobs_fish/textures/fish2.png | Bin 0 -> 36866 bytes mods/mobs_water/mobs_fish/textures/fish3.png | Bin 0 -> 36506 bytes .../originals/animal_clownfish_clownfish.png | Bin 0 -> 7530 bytes .../originals/animal_clownfish_mesh.png | Bin 0 -> 552106 bytes .../originals/animal_clownfish_mesh2.png | Bin 0 -> 384405 bytes ...animal_fish_blue_white_fish_blue_white.png | Bin 0 -> 1458 bytes mods/mobs_water/mobs_jellyfish/License.txt | 21 + mods/mobs_water/mobs_jellyfish/depends.txt | 3 + mods/mobs_water/mobs_jellyfish/init.lua | 40 + .../mobs_jellyfish/models/jellyfish.b3d | Bin 0 -> 30205 bytes .../mobs_jellyfish/textures/jellyfish.png | Bin 0 -> 10261 bytes .../mobs_jellyfish/textures/jellyfish_inv.png | Bin 0 -> 3838 bytes mods/mobs_water/mobs_sharks/License.txt | 7 + mods/mobs_water/mobs_sharks/SETTINGS.txt | 8 + mods/mobs_water/mobs_sharks/depends.txt | 2 + mods/mobs_water/mobs_sharks/init.lua | 157 + .../mobs_sharks/models/mob_shark.b3d} | Bin .../mobs_sharks/models/mob_shark.blend | Bin 0 -> 504520 bytes .../textures/mob_shark_shark_item.png | Bin 0 -> 6020 bytes .../original/mob_shark_shark_mesh.png | Bin 0 -> 14778 bytes .../mobs_sharks/textures/shark_first.png | Bin 0 -> 5745 bytes .../mobs_sharks/textures/shark_second.png | Bin 0 -> 14712 bytes .../mobs_sharks/textures/shark_third.png | Bin 0 -> 15248 bytes mods/mobs_water/mobs_turtles/License.txt | 4 + mods/mobs_water/mobs_turtles/depends.txt | 2 + mods/mobs_water/mobs_turtles/init.lua | 108 + .../mobs_turtles/models/mobf_turtle.x | 11058 +++++++++ .../textures/original/mobf_turtle.png | Bin 0 -> 1209 bytes .../mobs_turtles/textures/turtle1.png | Bin 0 -> 329 bytes .../mobs_turtles/textures/turtle2.png | Bin 0 -> 395 bytes .../mobs_turtles/textures/turtle3.png | Bin 0 -> 597 bytes .../mobs_turtles/textures/turtle4.png | Bin 0 -> 744 bytes .../mobs_turtles/textures/turtle5.png | Bin 0 -> 561 bytes .../mobs_turtles/textures/turtle6.png | Bin 0 -> 288 bytes .../mobs_turtles/textures/turtle7.png | Bin 0 -> 187 bytes mods/mobs_water/modpack.txt | 0 mods/pmobs/README.txt | 7 + mods/pmobs/depends.txt | 2 + mods/pmobs/dog.lua | 79 + mods/pmobs/guard.lua | 92 + mods/pmobs/init.lua | 20 + mods/{mobs => pmobs}/license.txt | 0 mods/{mobs => pmobs}/models/character.b3d | Bin 86880 -> 86880 bytes mods/pmobs/models/guard.x | 9156 +++++++ mods/{mobs => pmobs}/models/mobs_wolf.x | 14840 +++++------ mods/pmobs/ninja.lua | 123 + mods/pmobs/npc.lua | 106 + mods/{mobs => pmobs}/npc_female.lua | 10 +- mods/{mobs => pmobs}/sounds/mobs_fnpc.1.ogg | Bin mods/{mobs => pmobs}/sounds/mobs_fnpc.2.ogg | Bin .../sounds/mobs_fnpc_attack.ogg | Bin .../sounds/mobs_fnpc_death.ogg | Bin .../sounds/mobs_fnpc_hit.1.ogg | Bin .../sounds/mobs_fnpc_hit.2.ogg | Bin mods/{mobs => pmobs}/sounds/mobs_npc.1.ogg | Bin mods/{mobs => pmobs}/sounds/mobs_npc.2.ogg | Bin .../sounds/mobs_npc_attack.ogg | Bin .../{mobs => pmobs}/sounds/mobs_npc_death.ogg | Bin mods/{mobs => pmobs}/sounds/mobs_npc_hit.ogg | Bin mods/{mobs => pmobs}/sounds/mobs_wolf.ogg | Bin mods/pmobs/sounds/mobs_wolf_attack.ogg | Bin 0 -> 9125 bytes .../sounds/mobs_yeti_death.ogg | Bin mods/pmobs/textures/mobs_blood.png | Bin 0 -> 267 bytes mods/pmobs/textures/mobs_dog.png | Bin 0 -> 1225 bytes mods/pmobs/textures/mobs_ninja.png | Bin 0 -> 360 bytes mods/pmobs/textures/mobs_npc.png | Bin 0 -> 901 bytes .../textures/mobs_npc_baby.png | Bin .../textures/mobs_npc_female.png | Bin .../textures/mobs_npc_female_inv.png | Bin mods/pmobs/textures/mobs_shuriken.png | Bin 0 -> 450 bytes mods/pmobs/textures/mobs_wolf.png | Bin 0 -> 1163 bytes mods/pmobs/textures/mobs_yeti.png | Bin 0 -> 2712 bytes mods/pmobs/textures/npcf_skin_armor.png | Bin 0 -> 973 bytes mods/pmobs/wolf.lua | 65 + mods/pmobs/yeti.lua | 112 + mods/{mobs => slimes}/depends.txt | 3 +- mods/slimes/greenslimes.lua | 127 + mods/slimes/init.lua | 17 + mods/slimes/lavaslimes.lua | 133 + mods/slimes/readme.txt | 93 + mods/slimes/sounds/slimes_attack.ogg | Bin 0 -> 13682 bytes mods/slimes/sounds/slimes_damage.ogg | Bin 0 -> 5260 bytes mods/slimes/sounds/slimes_death.ogg | Bin 0 -> 8601 bytes mods/slimes/sounds/slimes_jump.ogg | Bin 0 -> 5031 bytes mods/slimes/textures/green_slime_blood.png | Bin 0 -> 203 bytes mods/slimes/textures/green_slime_front.png | Bin 0 -> 2183 bytes mods/slimes/textures/green_slime_sides.png | Bin 0 -> 2342 bytes mods/{mobs => slimes}/textures/jeija_glue.png | Bin mods/slimes/textures/lava_slime_blood.png | Bin 0 -> 217 bytes mods/slimes/textures/lava_slime_front.png | Bin 0 -> 8452 bytes mods/slimes/textures/lava_slime_sides.png | Bin 0 -> 7717 bytes mods/zombie/#init.lua.old# | 56 + mods/zombie/depends.txt | 2 + mods/{mobs/zombie.lua => zombie/init.lua} | 36 +- mods/zombie/init.lua.old | 56 + .../models/creatures_mob.x} | 0 mods/zombie/models/mobs_zombie.x | 5524 +++++ .../{mobs => zombie}/sounds/mobs_zombie.1.ogg | Bin .../{mobs => zombie}/sounds/mobs_zombie.2.ogg | Bin mods/zombie/sounds/mobs_zombie.3.ogg | Bin 0 -> 32502 bytes .../sounds/mobs_zombie_attack.ogg | Bin .../sounds/mobs_zombie_death.ogg | Bin .../sounds/mobs_zombie_hit.ogg | Bin mods/zombie/textures/mobs_rotten_flesh.png | Bin 0 -> 433 bytes .../{mobs => zombie}/textures/mobs_zombie.png | Bin .../textures/mobs_zombie_head.png | Bin .../textures/mobs_zombie_inv.png | Bin .../textures/mobs_zombie_tibia.png | Bin mods/zombie/textures/zombie_head.png | Bin 0 -> 168 bytes worlds/minetestforfun/world.mt | 14 + 491 files changed, 74864 insertions(+), 12913 deletions(-) create mode 100755 mods/creeper/depends.txt create mode 100755 mods/creeper/init.lua create mode 100755 mods/creeper/sounds/tnt_explode.ogg create mode 100755 mods/creeper/textures/mobs_creeper.png create mode 100755 mods/creeper/textures/mobs_creeper_inv.png create mode 100755 mods/creeper/textures/tnt_smoke.png create mode 160000 mods/kpgmobs create mode 160000 mods/mob_horse create mode 160000 mods/mobs delete mode 100755 mods/mobs/README.txt delete mode 100755 mods/mobs/api.lua delete mode 100755 mods/mobs/bunny.lua delete mode 100755 mods/mobs/crafts.lua delete mode 100755 mods/mobs/creeper.lua delete mode 100755 mods/mobs/dirtmonster.lua delete mode 100755 mods/mobs/dog.lua delete mode 100755 mods/mobs/dungeonmaster.lua delete mode 100755 mods/mobs/greenslimes.lua delete mode 100755 mods/mobs/init.lua delete mode 100755 mods/mobs/kitten.lua delete mode 100755 mods/mobs/lavaslimes.lua delete mode 100755 mods/mobs/mff_menu.lua delete mode 100644 mods/mobs/models/mobs_cow.b3d delete mode 100755 mods/mobs/models/mobs_pig.b3d delete mode 100755 mods/mobs/npc.lua delete mode 100755 mods/mobs/oerkki.lua delete mode 100755 mods/mobs/pig.lua delete mode 100755 mods/mobs/sandmonster.lua delete mode 100755 mods/mobs/shark.lua delete mode 100755 mods/mobs/sheep.lua delete mode 100755 mods/mobs/sounds/default_punch.ogg delete mode 100755 mods/mobs/sounds/default_punch2.ogg delete mode 100755 mods/mobs/sounds/mobs_cow.ogg delete mode 100755 mods/mobs/sounds/mobs_die_yell.ogg delete mode 100755 mods/mobs/sounds/mobs_eerie.ogg delete mode 100755 mods/mobs/sounds/mobs_fireball.ogg delete mode 100755 mods/mobs/sounds/mobs_howl.ogg delete mode 100755 mods/mobs/sounds/mobs_pig.ogg delete mode 100755 mods/mobs/sounds/mobs_pig_angry.ogg delete mode 100755 mods/mobs/sounds/mobs_sheep.ogg delete mode 100755 mods/mobs/sounds/mobs_slimes_attack.ogg delete mode 100755 mods/mobs/sounds/mobs_slimes_damage.ogg delete mode 100755 mods/mobs/sounds/mobs_slimes_death.ogg delete mode 100755 mods/mobs/sounds/mobs_slimes_jump.ogg delete mode 100755 mods/mobs/sounds/mobs_spider.ogg delete mode 100755 mods/mobs/sounds/mobs_wolf_attack.ogg delete mode 100755 mods/mobs/sounds/tnt_explode.ogg delete mode 100755 mods/mobs/spawner.lua delete mode 100755 mods/mobs/spider.lua delete mode 100755 mods/mobs/stonemonster.lua delete mode 100644 mods/mobs/textures/mese_dragon.png delete mode 100644 mods/mobs/textures/mese_egg.png delete mode 100644 mods/mobs/textures/mese_meteor.png delete mode 100644 mods/mobs/textures/mob_spawner.png delete mode 100755 mods/mobs/textures/mobs_bee.png delete mode 100755 mods/mobs/textures/mobs_bee_inv.png delete mode 100755 mods/mobs/textures/mobs_beehive.png delete mode 100755 mods/mobs/textures/mobs_blood.png delete mode 100755 mods/mobs/textures/mobs_bucket_milk.png delete mode 100755 mods/mobs/textures/mobs_bunny_brown.png delete mode 100755 mods/mobs/textures/mobs_bunny_evil.png delete mode 100755 mods/mobs/textures/mobs_bunny_grey.png delete mode 100644 mods/mobs/textures/mobs_bunny_inv.png delete mode 100755 mods/mobs/textures/mobs_bunny_white.png delete mode 100755 mods/mobs/textures/mobs_cheese.png delete mode 100755 mods/mobs/textures/mobs_cheeseblock.png delete mode 100755 mods/mobs/textures/mobs_chick.png delete mode 100755 mods/mobs/textures/mobs_chicken.png delete mode 100755 mods/mobs/textures/mobs_chicken_black.png delete mode 100755 mods/mobs/textures/mobs_chicken_cooked.png delete mode 100755 mods/mobs/textures/mobs_chicken_egg.png delete mode 100755 mods/mobs/textures/mobs_chicken_egg_fried.png delete mode 100755 mods/mobs/textures/mobs_chicken_inv.png delete mode 100755 mods/mobs/textures/mobs_chicken_raw.png delete mode 100755 mods/mobs/textures/mobs_cow_brown.png delete mode 100644 mods/mobs/textures/mobs_cow_inv.png delete mode 100755 mods/mobs/textures/mobs_cow_lightbrown.png delete mode 100755 mods/mobs/textures/mobs_cow_white.png delete mode 100755 mods/mobs/textures/mobs_creeper.png delete mode 100644 mods/mobs/textures/mobs_creeper_inv.png delete mode 100755 mods/mobs/textures/mobs_dirt_monster.png delete mode 100755 mods/mobs/textures/mobs_dirt_monster_inv.png delete mode 100755 mods/mobs/textures/mobs_dog.png delete mode 100755 mods/mobs/textures/mobs_dog_inv.png delete mode 100755 mods/mobs/textures/mobs_dongeon_master_inv.png delete mode 100755 mods/mobs/textures/mobs_dung.png delete mode 100755 mods/mobs/textures/mobs_dungeon_master.png delete mode 100755 mods/mobs/textures/mobs_dungeon_master_cobblestone.png delete mode 100755 mods/mobs/textures/mobs_dungeon_master_fireball.png delete mode 100755 mods/mobs/textures/mobs_dungeon_master_fireball_back.png delete mode 100755 mods/mobs/textures/mobs_dungeon_master_strangewhite.png delete mode 100644 mods/mobs/textures/mobs_egg_inv.png delete mode 100644 mods/mobs/textures/mobs_ent.png delete mode 100644 mods/mobs/textures/mobs_ent_inv.png delete mode 100755 mods/mobs/textures/mobs_fireball.png delete mode 100755 mods/mobs/textures/mobs_green_slime_big_inv.png delete mode 100755 mods/mobs/textures/mobs_green_slime_blood.png delete mode 100755 mods/mobs/textures/mobs_green_slime_bottom.png delete mode 100755 mods/mobs/textures/mobs_green_slime_egg.png delete mode 100755 mods/mobs/textures/mobs_green_slime_front.png delete mode 100755 mods/mobs/textures/mobs_green_slime_medium_inv.png delete mode 100755 mods/mobs/textures/mobs_green_slime_sides.png delete mode 100755 mods/mobs/textures/mobs_green_slime_top.png delete mode 100755 mods/mobs/textures/mobs_honey_block.png delete mode 100755 mods/mobs/textures/mobs_honey_inv.png delete mode 100755 mods/mobs/textures/mobs_kitten_ginger.png delete mode 100755 mods/mobs/textures/mobs_kitten_inv.png delete mode 100755 mods/mobs/textures/mobs_kitten_sandy.png delete mode 100755 mods/mobs/textures/mobs_kitten_splotchy.png delete mode 100755 mods/mobs/textures/mobs_kitten_striped.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_big_inv.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_blood.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_bottom.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_egg.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_front.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_medium_inv.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_sides.png delete mode 100755 mods/mobs/textures/mobs_lava_slime_top.png delete mode 100755 mods/mobs/textures/mobs_leather.png delete mode 100755 mods/mobs/textures/mobs_magic_lasso.png delete mode 100755 mods/mobs/textures/mobs_meat.png delete mode 100755 mods/mobs/textures/mobs_meat_raw.png delete mode 100644 mods/mobs/textures/mobs_mese_dragon_fireball.png delete mode 100644 mods/mobs/textures/mobs_mese_dragon_inv.png delete mode 100644 mods/mobs/textures/mobs_nametag.png delete mode 100755 mods/mobs/textures/mobs_net.png delete mode 100755 mods/mobs/textures/mobs_npc.png delete mode 100644 mods/mobs/textures/mobs_npc_male_inv.png delete mode 100755 mods/mobs/textures/mobs_oerkki.png delete mode 100755 mods/mobs/textures/mobs_oerkki2.png delete mode 100755 mods/mobs/textures/mobs_oerkki_inv.png delete mode 100644 mods/mobs/textures/mobs_pig_inv.png delete mode 100644 mods/mobs/textures/mobs_pig_pink.png delete mode 100755 mods/mobs/textures/mobs_pork_cooked.png delete mode 100755 mods/mobs/textures/mobs_pork_raw.png delete mode 100755 mods/mobs/textures/mobs_sand_monster.png delete mode 100755 mods/mobs/textures/mobs_sand_monster_inv.png delete mode 100644 mods/mobs/textures/mobs_shark_shark_inv.png delete mode 100755 mods/mobs/textures/mobs_shears.png delete mode 100644 mods/mobs/textures/mobs_sheep_base.png delete mode 100644 mods/mobs/textures/mobs_sheep_shaved.png delete mode 100755 mods/mobs/textures/mobs_sheep_white.png delete mode 100755 mods/mobs/textures/mobs_sheep_white_inv.png delete mode 100644 mods/mobs/textures/mobs_sheep_wool.png delete mode 100755 mods/mobs/textures/mobs_spider.png delete mode 100755 mods/mobs/textures/mobs_spider_inv.png delete mode 100755 mods/mobs/textures/mobs_stone_monster.png delete mode 100644 mods/mobs/textures/mobs_stone_monster2.png delete mode 100755 mods/mobs/textures/mobs_stone_monster_inv.png delete mode 100755 mods/mobs/textures/mobs_tree_monster.png delete mode 100644 mods/mobs/textures/mobs_tree_monster2.png delete mode 100755 mods/mobs/textures/mobs_tree_monster_inv.png delete mode 100755 mods/mobs/textures/mobs_wolf.png delete mode 100755 mods/mobs/textures/mobs_wolf_inv.png delete mode 100755 mods/mobs/textures/mobs_yeti.png delete mode 100644 mods/mobs/textures/mobs_yeti_inv.png delete mode 100644 mods/mobs/textures/shark_first.png delete mode 100644 mods/mobs/textures/shark_second.png delete mode 100644 mods/mobs/textures/shark_third.png delete mode 100755 mods/mobs/textures/tnt_smoke.png delete mode 100755 mods/mobs/treemonster.lua delete mode 100755 mods/mobs/wolf.lua delete mode 100755 mods/mobs/yeti.lua rename mods/{mobs => mobs_animal}/bee.lua (63%) mode change 100755 => 100644 create mode 100644 mods/mobs_animal/bunny.lua rename mods/{mobs => mobs_animal}/chicken.lua (58%) mode change 100755 => 100644 rename mods/{mobs => mobs_animal}/cow.lua (64%) mode change 100755 => 100644 create mode 100644 mods/mobs_animal/depends.txt create mode 100644 mods/mobs_animal/description.txt rename mods/{mobs => mobs_animal}/goat.lua (89%) create mode 100644 mods/mobs_animal/init.lua create mode 100644 mods/mobs_animal/intllib.lua create mode 100644 mods/mobs_animal/kitten.lua create mode 100644 mods/mobs_animal/license.txt create mode 100644 mods/mobs_animal/locale/de.po create mode 100644 mods/mobs_animal/locale/fr.po create mode 100644 mods/mobs_animal/locale/it.po create mode 100644 mods/mobs_animal/locale/ru.po create mode 100644 mods/mobs_animal/locale/template.pot create mode 100644 mods/mobs_animal/locale/tr.po create mode 100644 mods/mobs_animal/lucky_block.lua create mode 100644 mods/mobs_animal/mod.conf rename mods/{mobs => mobs_animal}/models/mobs_bee.x (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_animal}/models/mobs_bunny.b3d (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_animal}/models/mobs_chicken.x (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_animal/models/mobs_cow.x rename mods/{mobs => mobs_animal}/models/mobs_goat.b3d (100%) rename mods/{mobs => mobs_animal}/models/mobs_kitten.b3d (100%) create mode 100644 mods/mobs_animal/models/mobs_penguin.b3d create mode 100644 mods/mobs_animal/models/mobs_pumba.x create mode 100644 mods/mobs_animal/models/mobs_rat.b3d rename mods/{mobs => mobs_animal}/models/mobs_sheep.b3d (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_animal}/models/mobs_sheep_shaved.b3d (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_animal/penguin.lua create mode 100644 mods/mobs_animal/rat.lua create mode 100644 mods/mobs_animal/readme.md create mode 100644 mods/mobs_animal/screenshot.png create mode 100644 mods/mobs_animal/sheep.lua rename mods/{mobs => mobs_animal}/sounds/mobs_bee.ogg (100%) rename mods/{mobs => mobs_animal}/sounds/mobs_chicken.ogg (100%) create mode 100644 mods/mobs_animal/sounds/mobs_cow.ogg rename mods/{mobs => mobs_animal}/sounds/mobs_kitten.1.ogg (100%) rename mods/{mobs => mobs_animal}/sounds/mobs_kitten.2.ogg (100%) rename mods/{mobs => mobs_animal}/sounds/mobs_kitten.3.ogg (100%) rename mods/{mobs => mobs_animal}/sounds/mobs_kitten.4.ogg (100%) rename mods/{mobs => mobs_animal}/sounds/mobs_kitten.5.ogg (100%) rename mods/{mobs => mobs_animal}/sounds/mobs_kitten.6.ogg (100%) create mode 100644 mods/mobs_animal/sounds/mobs_kitten.ogg create mode 100644 mods/mobs_animal/sounds/mobs_pig.ogg create mode 100644 mods/mobs_animal/sounds/mobs_pig_angry.ogg create mode 100644 mods/mobs_animal/sounds/mobs_rat.ogg create mode 100644 mods/mobs_animal/sounds/mobs_sheep.ogg create mode 100644 mods/mobs_animal/textures/mobs_bee.png create mode 100644 mods/mobs_animal/textures/mobs_bee_inv.png create mode 100644 mods/mobs_animal/textures/mobs_beehive.png create mode 100644 mods/mobs_animal/textures/mobs_bucket_milk.png create mode 100644 mods/mobs_animal/textures/mobs_bunny_brown.png create mode 100644 mods/mobs_animal/textures/mobs_bunny_evil.png create mode 100644 mods/mobs_animal/textures/mobs_bunny_grey.png create mode 100644 mods/mobs_animal/textures/mobs_bunny_inv.png create mode 100644 mods/mobs_animal/textures/mobs_bunny_white.png create mode 100644 mods/mobs_animal/textures/mobs_cheese.png create mode 100644 mods/mobs_animal/textures/mobs_cheeseblock.png create mode 100644 mods/mobs_animal/textures/mobs_chick.png create mode 100644 mods/mobs_animal/textures/mobs_chicken.png create mode 100644 mods/mobs_animal/textures/mobs_chicken_black.png create mode 100644 mods/mobs_animal/textures/mobs_chicken_cooked.png create mode 100644 mods/mobs_animal/textures/mobs_chicken_egg_fried.png create mode 100644 mods/mobs_animal/textures/mobs_chicken_feather.png create mode 100644 mods/mobs_animal/textures/mobs_chicken_inv.png create mode 100644 mods/mobs_animal/textures/mobs_chicken_raw.png create mode 100644 mods/mobs_animal/textures/mobs_cooked_rat.png create mode 100644 mods/mobs_animal/textures/mobs_cow.png create mode 100644 mods/mobs_animal/textures/mobs_cow2.png rename mods/{mobs => mobs_animal}/textures/mobs_goat_brown.png (100%) rename mods/{mobs => mobs_animal}/textures/mobs_goat_grey.png (100%) rename mods/{mobs => mobs_animal}/textures/mobs_goat_inv.png (100%) rename mods/{mobs => mobs_animal}/textures/mobs_goat_white.png (100%) create mode 100644 mods/mobs_animal/textures/mobs_honey_block.png create mode 100644 mods/mobs_animal/textures/mobs_honey_inv.png create mode 100755 mods/mobs_animal/textures/mobs_kitten_ginger.png create mode 100644 mods/mobs_animal/textures/mobs_kitten_inv.png create mode 100755 mods/mobs_animal/textures/mobs_kitten_sandy.png create mode 100755 mods/mobs_animal/textures/mobs_kitten_splotchy.png create mode 100755 mods/mobs_animal/textures/mobs_kitten_striped.png create mode 100644 mods/mobs_animal/textures/mobs_penguin.png create mode 100644 mods/mobs_animal/textures/mobs_pork_cooked.png create mode 100644 mods/mobs_animal/textures/mobs_pork_raw.png create mode 100644 mods/mobs_animal/textures/mobs_pumba.png create mode 100644 mods/mobs_animal/textures/mobs_rat.png create mode 100644 mods/mobs_animal/textures/mobs_rat2.png create mode 100644 mods/mobs_animal/textures/mobs_rat_inventory.png create mode 100644 mods/mobs_animal/textures/mobs_sheep_base.png create mode 100644 mods/mobs_animal/textures/mobs_sheep_shaved.png create mode 100644 mods/mobs_animal/textures/mobs_sheep_wool.png create mode 100644 mods/mobs_animal/warthog.lua create mode 100644 mods/mobs_monster/depends.txt create mode 100644 mods/mobs_monster/description.txt create mode 100644 mods/mobs_monster/dirt_monster.lua create mode 100644 mods/mobs_monster/dungeon_master.lua create mode 100644 mods/mobs_monster/init.lua create mode 100644 mods/mobs_monster/lava_flan.lua create mode 100644 mods/mobs_monster/license.txt create mode 100644 mods/mobs_monster/locale/de.txt create mode 100644 mods/mobs_monster/locale/it.txt create mode 100644 mods/mobs_monster/locale/template.txt create mode 100644 mods/mobs_monster/locale/tr.txt create mode 100644 mods/mobs_monster/lucky_block.lua rename mods/{mobs => mobs_monster}/mese_dragon.lua (83%) rename mods/{mobs => mobs_monster}/mese_monster.lua (64%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/minotaur.lua (58%) create mode 100644 mods/mobs_monster/mod.conf rename mods/{mobs => mobs_monster}/models/mese_dragon.b3d (100%) rename mods/{mobs => mobs_monster}/models/mobs_dungeon_master.b3d (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/models/mobs_minotaur.b3d (100%) rename mods/{mobs => mobs_monster}/models/mobs_oerkki.b3d (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/models/mobs_pumpboom.x (100%) rename mods/{mobs => mobs_monster}/models/mobs_pumpking.x (100%) rename mods/{mobs => mobs_monster}/models/mobs_sand_monster.b3d (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/models/mobs_spider.x (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/models/mobs_stone_monster.b3d (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/models/mobs_tree_monster.b3d (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_monster/models/zmobs_lava_flan.x rename mods/{mobs => mobs_monster}/models/zmobs_mese_monster.x (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_monster/oerkki.lua rename mods/{mobs => mobs_monster}/pumpkins.lua (79%) create mode 100644 mods/mobs_monster/readme.md create mode 100644 mods/mobs_monster/sand_monster.lua rename mods/{mobs => mobs_monster}/sounds/mese_dragon.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mesed.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_dirtmonster.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_dirtmonster.2.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_dirtmonster.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_dungeonmaster.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_dungeonmaster.2.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_dungeonmaster.3.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_dungeonmaster.ogg create mode 100644 mods/mobs_monster/sounds/mobs_fireball.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_king.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_lavaflan.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_mesemonster.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_mesemonster.2.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_mesemonster.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_oerkki.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_oerkki.2.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_oerkki.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_oerkki_attack.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_pump.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_sandmonster.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_sandmonster.2.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_sandmonster.ogg create mode 100644 mods/mobs_monster/sounds/mobs_spider.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_spider_attack.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_stonemonster.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_stonemonster.2.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_stonemonster.ogg rename mods/{mobs => mobs_monster}/sounds/mobs_stonemonster_attack.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_treemonster.1.ogg (100%) rename mods/{mobs => mobs_monster}/sounds/mobs_treemonster.2.ogg (100%) create mode 100644 mods/mobs_monster/sounds/mobs_treemonster.ogg create mode 100644 mods/mobs_monster/spider.lua create mode 100644 mods/mobs_monster/stone_monster.lua rename mods/{mobs => mobs_monster}/textures/mobs_cobweb.png (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_monster/textures/mobs_dirt_monster.png create mode 100755 mods/mobs_monster/textures/mobs_dungeon_master.png create mode 100644 mods/mobs_monster/textures/mobs_dungeon_master2.png create mode 100644 mods/mobs_monster/textures/mobs_dungeon_master3.png rename mods/{mobs => mobs_monster}/textures/mobs_dungeon_master_blood.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_dungeon_master_diamond.png (100%) create mode 100644 mods/mobs_monster/textures/mobs_fireball.png rename mods/{mobs => mobs_monster}/textures/mobs_mese_monster_inv.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_minotaur.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_minotaur_eye.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_minotaur_fur.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_minotaur_horn.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_minotaur_inv.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_minotaur_lots_of_fur.png (100%) create mode 100644 mods/mobs_monster/textures/mobs_oerkki.png create mode 100644 mods/mobs_monster/textures/mobs_oerkki2.png create mode 100644 mods/mobs_monster/textures/mobs_pick_lava.png rename mods/{mobs => mobs_monster}/textures/mobs_pumpboom.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_pumpboom_inv.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_pumpking.png (100%) rename mods/{mobs => mobs_monster}/textures/mobs_pumpking_inv.png (100%) create mode 100644 mods/mobs_monster/textures/mobs_sand_monster.png create mode 100644 mods/mobs_monster/textures/mobs_spider.png create mode 100644 mods/mobs_monster/textures/mobs_stone_monster.png create mode 100644 mods/mobs_monster/textures/mobs_stone_monster2.png create mode 100644 mods/mobs_monster/textures/mobs_tree_monster.png create mode 100644 mods/mobs_monster/textures/mobs_tree_monster2.png rename mods/{mobs => mobs_monster}/textures/zmobs_egg_mese_monster.png (100%) create mode 100644 mods/mobs_monster/textures/zmobs_lava_flan.png create mode 100644 mods/mobs_monster/textures/zmobs_lava_flan2.png create mode 100644 mods/mobs_monster/textures/zmobs_lava_flan3.png rename mods/{mobs => mobs_monster}/textures/zmobs_lava_orb.png (100%) mode change 100755 => 100644 rename mods/{mobs => mobs_monster}/textures/zmobs_mese_monster.png (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_monster/tree_monster.lua create mode 100644 mods/mobs_water/README.md create mode 100644 mods/mobs_water/mobs_crocs/License.txt create mode 100644 mods/mobs_water/mobs_crocs/SETTINGS.txt create mode 100644 mods/mobs_water/mobs_crocs/depends.txt create mode 100644 mods/mobs_water/mobs_crocs/init.lua create mode 100644 mods/mobs_water/mobs_crocs/models/crocodile.x create mode 100644 mods/mobs_water/mobs_crocs/sounds/croco.ogg create mode 100644 mods/mobs_water/mobs_crocs/textures/croco.png create mode 100644 mods/mobs_water/mobs_crocs/textures/croco2.png create mode 100644 mods/mobs_water/mobs_fish/License.txt create mode 100644 mods/mobs_water/mobs_fish/depends.txt create mode 100644 mods/mobs_water/mobs_fish/init.lua create mode 100644 mods/mobs_water/mobs_fish/models/animal_clownfish.b3d create mode 100644 mods/mobs_water/mobs_fish/models/base/clownfish.blend create mode 100644 mods/mobs_water/mobs_fish/models/base/fish_blue_white.blend create mode 100644 mods/mobs_water/mobs_fish/models/base/fish_blue_white.xcf create mode 100644 mods/mobs_water/mobs_fish/models/base/fish_clownfish_mesh.xcf create mode 100644 mods/mobs_water/mobs_fish/models/fish_blue_white.b3d create mode 100644 mods/mobs_water/mobs_fish/textures/animal_clownfish_clownfish_item.png create mode 100644 mods/mobs_water/mobs_fish/textures/animal_fish_blue_white_fish_blue_white_item.png create mode 100644 mods/mobs_water/mobs_fish/textures/clownfish.png create mode 100644 mods/mobs_water/mobs_fish/textures/clownfish2.png create mode 100644 mods/mobs_water/mobs_fish/textures/fish.png create mode 100644 mods/mobs_water/mobs_fish/textures/fish2.png create mode 100644 mods/mobs_water/mobs_fish/textures/fish3.png create mode 100644 mods/mobs_water/mobs_fish/textures/originals/animal_clownfish_clownfish.png create mode 100644 mods/mobs_water/mobs_fish/textures/originals/animal_clownfish_mesh.png create mode 100644 mods/mobs_water/mobs_fish/textures/originals/animal_clownfish_mesh2.png create mode 100644 mods/mobs_water/mobs_fish/textures/originals/animal_fish_blue_white_fish_blue_white.png create mode 100644 mods/mobs_water/mobs_jellyfish/License.txt create mode 100644 mods/mobs_water/mobs_jellyfish/depends.txt create mode 100644 mods/mobs_water/mobs_jellyfish/init.lua create mode 100644 mods/mobs_water/mobs_jellyfish/models/jellyfish.b3d create mode 100644 mods/mobs_water/mobs_jellyfish/textures/jellyfish.png create mode 100644 mods/mobs_water/mobs_jellyfish/textures/jellyfish_inv.png create mode 100644 mods/mobs_water/mobs_sharks/License.txt create mode 100644 mods/mobs_water/mobs_sharks/SETTINGS.txt create mode 100644 mods/mobs_water/mobs_sharks/depends.txt create mode 100644 mods/mobs_water/mobs_sharks/init.lua rename mods/{mobs/models/mobs_shark.b3d => mobs_water/mobs_sharks/models/mob_shark.b3d} (100%) mode change 100755 => 100644 create mode 100644 mods/mobs_water/mobs_sharks/models/mob_shark.blend create mode 100644 mods/mobs_water/mobs_sharks/textures/mob_shark_shark_item.png create mode 100644 mods/mobs_water/mobs_sharks/textures/original/mob_shark_shark_mesh.png create mode 100644 mods/mobs_water/mobs_sharks/textures/shark_first.png create mode 100644 mods/mobs_water/mobs_sharks/textures/shark_second.png create mode 100644 mods/mobs_water/mobs_sharks/textures/shark_third.png create mode 100644 mods/mobs_water/mobs_turtles/License.txt create mode 100644 mods/mobs_water/mobs_turtles/depends.txt create mode 100644 mods/mobs_water/mobs_turtles/init.lua create mode 100644 mods/mobs_water/mobs_turtles/models/mobf_turtle.x create mode 100644 mods/mobs_water/mobs_turtles/textures/original/mobf_turtle.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle1.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle2.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle3.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle4.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle5.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle6.png create mode 100644 mods/mobs_water/mobs_turtles/textures/turtle7.png create mode 100644 mods/mobs_water/modpack.txt create mode 100644 mods/pmobs/README.txt create mode 100644 mods/pmobs/depends.txt create mode 100644 mods/pmobs/dog.lua create mode 100644 mods/pmobs/guard.lua create mode 100644 mods/pmobs/init.lua rename mods/{mobs => pmobs}/license.txt (100%) mode change 100755 => 100644 rename mods/{mobs => pmobs}/models/character.b3d (99%) mode change 100755 => 100644 create mode 100644 mods/pmobs/models/guard.x rename mods/{mobs => pmobs}/models/mobs_wolf.x (97%) mode change 100755 => 100644 create mode 100644 mods/pmobs/ninja.lua create mode 100644 mods/pmobs/npc.lua rename mods/{mobs => pmobs}/npc_female.lua (90%) rename mods/{mobs => pmobs}/sounds/mobs_fnpc.1.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_fnpc.2.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_fnpc_attack.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_fnpc_death.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_fnpc_hit.1.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_fnpc_hit.2.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_npc.1.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_npc.2.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_npc_attack.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_npc_death.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_npc_hit.ogg (100%) rename mods/{mobs => pmobs}/sounds/mobs_wolf.ogg (100%) create mode 100644 mods/pmobs/sounds/mobs_wolf_attack.ogg rename mods/{mobs => pmobs}/sounds/mobs_yeti_death.ogg (100%) create mode 100644 mods/pmobs/textures/mobs_blood.png create mode 100644 mods/pmobs/textures/mobs_dog.png create mode 100644 mods/pmobs/textures/mobs_ninja.png create mode 100644 mods/pmobs/textures/mobs_npc.png rename mods/{mobs => pmobs}/textures/mobs_npc_baby.png (100%) rename mods/{mobs => pmobs}/textures/mobs_npc_female.png (100%) rename mods/{mobs => pmobs}/textures/mobs_npc_female_inv.png (100%) create mode 100644 mods/pmobs/textures/mobs_shuriken.png create mode 100644 mods/pmobs/textures/mobs_wolf.png create mode 100644 mods/pmobs/textures/mobs_yeti.png create mode 100644 mods/pmobs/textures/npcf_skin_armor.png create mode 100644 mods/pmobs/wolf.lua create mode 100644 mods/pmobs/yeti.lua rename mods/{mobs => slimes}/depends.txt (59%) mode change 100755 => 100644 create mode 100644 mods/slimes/greenslimes.lua create mode 100644 mods/slimes/init.lua create mode 100644 mods/slimes/lavaslimes.lua create mode 100644 mods/slimes/readme.txt create mode 100644 mods/slimes/sounds/slimes_attack.ogg create mode 100644 mods/slimes/sounds/slimes_damage.ogg create mode 100644 mods/slimes/sounds/slimes_death.ogg create mode 100644 mods/slimes/sounds/slimes_jump.ogg create mode 100644 mods/slimes/textures/green_slime_blood.png create mode 100644 mods/slimes/textures/green_slime_front.png create mode 100644 mods/slimes/textures/green_slime_sides.png rename mods/{mobs => slimes}/textures/jeija_glue.png (100%) mode change 100755 => 100644 create mode 100644 mods/slimes/textures/lava_slime_blood.png create mode 100644 mods/slimes/textures/lava_slime_front.png create mode 100644 mods/slimes/textures/lava_slime_sides.png create mode 100644 mods/zombie/#init.lua.old# create mode 100644 mods/zombie/depends.txt rename mods/{mobs/zombie.lua => zombie/init.lua} (60%) create mode 100644 mods/zombie/init.lua.old rename mods/{mobs/models/mobs_zombie.x => zombie/models/creatures_mob.x} (100%) mode change 100755 => 100644 create mode 100755 mods/zombie/models/mobs_zombie.x rename mods/{mobs => zombie}/sounds/mobs_zombie.1.ogg (100%) mode change 100755 => 100644 rename mods/{mobs => zombie}/sounds/mobs_zombie.2.ogg (100%) mode change 100755 => 100644 create mode 100644 mods/zombie/sounds/mobs_zombie.3.ogg rename mods/{mobs => zombie}/sounds/mobs_zombie_attack.ogg (100%) rename mods/{mobs => zombie}/sounds/mobs_zombie_death.ogg (100%) mode change 100755 => 100644 rename mods/{mobs => zombie}/sounds/mobs_zombie_hit.ogg (100%) mode change 100755 => 100644 create mode 100644 mods/zombie/textures/mobs_rotten_flesh.png rename mods/{mobs => zombie}/textures/mobs_zombie.png (100%) mode change 100755 => 100644 rename mods/{mobs => zombie}/textures/mobs_zombie_head.png (100%) rename mods/{mobs => zombie}/textures/mobs_zombie_inv.png (100%) rename mods/{mobs => zombie}/textures/mobs_zombie_tibia.png (100%) create mode 100644 mods/zombie/textures/zombie_head.png diff --git a/.gitmodules b/.gitmodules index 906d1c70..239bf813 100644 --- a/.gitmodules +++ b/.gitmodules @@ -91,3 +91,14 @@ path = mods/camera url = https://github.com/sys4-fr/camera.git branch = dev +[submodule "mods/mobs"] + path = mods/mobs + url = https://github.com/sys4-fr/mobs_redo.git + branch = nalc +[submodule "mods/mob_horse"] + path = mods/mob_horse + url = https://github.com/tenplus1/mob_horse.git +[submodule "mods/kpgmobs"] + path = mods/kpgmobs + url = https://github.com/sys4-fr/mod-kpgmobs.git + branch = nalc diff --git a/mods/creeper/depends.txt b/mods/creeper/depends.txt new file mode 100755 index 00000000..cbfbcdbe --- /dev/null +++ b/mods/creeper/depends.txt @@ -0,0 +1,2 @@ +default +mobs \ No newline at end of file diff --git a/mods/creeper/init.lua b/mods/creeper/init.lua new file mode 100755 index 00000000..7da53ac9 --- /dev/null +++ b/mods/creeper/init.lua @@ -0,0 +1,57 @@ + +-- Creeper by Davedevils (from his subgame MineClone) + +mobs:register_mob("creeper:creeper", { + type = "monster", + passive = false, + attack_type = "explode", + explosion_radius = 3, + damage = 21, + hp_min = 30, + hp_max = 40, + armor = 90, + collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, + visual = "mesh", + mesh = "mobs_tree_monster.b3d", + drawtype = "front", + textures = { + {"mobs_creeper.png"}, + }, + blood_texture = "mobs_creeper_inv.png", + makes_footstep_sound = true, + sounds = { + random = "mobs_treemonster", + explode = "tnt_explode", + }, + walk_velocity = 1, + run_velocity = 3, + jump = true, + view_range = 16, + drops = { + {name = "default:torch", + chance = 10, + min = 3, + max = 5,}, + {name = "default:iron_lump", + chance = 5, + min = 1, + max = 2,}, + {name = "default:coal_lump", + chance = 3, + min = 1, + max = 3,}, + }, + water_damage = 2, + lava_damage = 15, + light_damage = 0, + animation = { + stand_start = 0, stand_end = 24, + walk_start = 25, walk_end = 47, + run_start = 48, run_end = 62, + punch_start = 48, punch_end = 62, + speed_normal = 15, speed_run = 15, + }, +}) +mobs:register_spawn("creeper:creeper", {"default:dirt_with_grass"}, 20, 8, 25000, 1, 31000) +mobs:register_egg("creeper:creeper", "Creeper", "mobs_creeper_inv.png", 1) +mobs:alias_mob("mobs:creeper", "creeper:creeper") diff --git a/mods/creeper/sounds/tnt_explode.ogg b/mods/creeper/sounds/tnt_explode.ogg new file mode 100755 index 0000000000000000000000000000000000000000..cdf059bf946733dec7ed8b469833538cf73404fa GIT binary patch literal 10827 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 literal 0 HcmV?d00001 diff --git a/mods/creeper/textures/mobs_creeper.png b/mods/creeper/textures/mobs_creeper.png new file mode 100755 index 0000000000000000000000000000000000000000..142a91db25081a89ff10f11b7971a16ffbb20ed4 GIT binary patch literal 16408 zcmV+zKUQ4z>Z#$hoBe000McNliru-vb&B0vqLZPZa3!0UhmU>gV4alN)*%W3Vk*K4mM zU}M$+C&1)jAqffPtQkp@HF>5d_H@ow_4}iw9t|3SKwj^j^WJm%boZ@$Z&f|_KIwa( z=L&0{TcoI<+{oZNRkeJI7l!j!lyPoz<+gpkFU)8 zCcoJB2>!xhtOg5RFArcGwUbrn2H^7BR&X@BA6bQXBFW2ry8yVe;TqP9SF>B(&P}Gf z0BD*#ip%U~_xMg?a*WlvYxwi7XZhz19|vGt;^j=A@<{DPw>>-lZ~PCFqqrGUeMCo- z+&kw!)VRuj_x+kRC6}{1unmCV-W0C2My{}44nSHIX$dp~U{=ipPRhhXQSxrI0C3_v zgXC5_h$O<4UsgnMK^*`_v=WYom}992y-Ylj;+2V40C2|aEXZ1nu;|N;YHWFows0o} z)@;0y35xBxl!}E64UZ8y6r)@z2OyOj!w|L*GY6?Fn@8`FJ`8#TA?G9jRk`&H9Un$- z(6Q-L>uHWOA*W=*i5RVsZu(-w0DP?WJp|1G9&dV)zpVHj&qx2nd-NZshi=X-I&`E- zqeI8B@WG4jGh5rz*zA+G*suhEzQg@^!-IGlUBu%N8qDbz<~!y)qCFTfd9`zKxUCFFHG&&-dYnlo{pn$3Rbg4ye16^XR{#cL1BBxV);ZSja_X-% z$D8O(wNY!B!+6SvMKUp-@)44!F1pWbZT~6fJ#1B;C!&uanFSV^mr`9)#l+wgP2Gox zyF(c4dg22K;v;E_^79ypjxyXiio3!wgZKcW(NPTLDpPx8UR|)270wm-2d8iwvuIe{ zfTE;nY^-H|LoL-sl_)awo$_*Q;5aKwR&pYGM4N!SZoh4FjlGJt)(%YhCWfQq=p>2! zEDyKT-pG>Tg$xgjqR-W%%K~Sk1}2{Gl^oB!KCoP@(&>$kZ@O9nd7MBq`wnE5co>nmv}1iJABCik>LdSSy?p4n`j?s zr`Oa)RGMN$8KWqf$GW;j2qu}dFU4`wA^z_y)U<&Qu%gq|10_ z`_rIP$y=F?yUM{0>#wFSJcQ$NJ!|K!;&fXd?g|IN78%qtTvn9EwnRYZcM<3h5!44U zsyc$c2+6R_>)UrzSzp0{qsN$2s}a9*u$$3|2}DGihMQTNzn-?1KE#F%uJY&nsk z6uK5oLCEu4D^l>8BSoyGY}b0;7bO` zQQTPa3^RVe@!FfUePg@#I6k0>)np1)Q4u8pEDEoU?&6kft_Gkpcp8A7?Sl*))+B;b z9YZQgGaMY}h4B}8w%~cZrV#+5w}uFc0RXxWcJscQ-%To^%~~Rv1X26_p{w4{w&tBA z4GE+x?_a&SyQl@VAM%Af-2NQKyCx|L6;V`^Pi1*2$D3NnuCx$nPmyo;a9#E$s`NFC z$wMHBl;{f?(T`GPs3pgmizJolk8`N`2)Q>IG381WCG%*gs3h0v zqWHb_2wUxdm`wE8qLz!#i-T)S?sFFgC z)5WCXC(GoTajj9mm{M~UL;fLDNx^Ec@{89WBe&R%Yo!UJ$G}R%N=9v7N+`jb_L7tm zIF{J)4FpieMGOk`j}H*DB}paHxN*?vYNXa$g*nH}XljJCJB2VT5T1&1=*STkES<*_ zyPjhrG)Y=bb8X|*Jiq5~MBKtYh>EtvAoZJ4{729~0 zZJ9CO*SwKK$$jLNIk6WRh=&sZ98&kQTv$mOg+|jtT8u4tf?04K57Nqct)*q=aho2-r zSOUOu*D5^vEWZ9<-_1O5?VSYxtjS)>zUE_02K|~@wpwGUY_pSzSb#>`eA=c?X8QR? zgN*H-0^pnP|0a^%z`?P-=UF3%()%(d;!7*`@Mh)ggq$@eOUiS#d!3Q*mOR7T8bgu* z0ixbCdZ)w+`#O!tv2m?&P{1G>$hPE>Ysu$@@#pB=--Vbk0dT1nqIsDj>6aaK|+90aQrJN%F0Qh=RyOY7E;# z3ziik$AZnYZS4fW8=2rL#~SK|8it0)0I)7IQ?NK6RaGfikxSAR1)#m}B&wj0TjbG1 z&}!qAm?R4)W5?Lw+LXC>!IC_@M@C7c<8*E7rReGcgbOI)!#`^0>!1884?p`D;Xn+V z)6DpuDO45iyW=DLb@Vry60@k8)oLv?X2ir0 zM%Z!Vp||YoOKM8;?7hq;3x02a;K>9Vue%l%XnMUBSH2DZNEl0vj7hcv@Noan$#Z0D z;@7d5l9DPCN`j~Nzkq3}iG7nzl-mj^Ezal4{40?}i9>su@hos7N(#jra}W&z(a|`U zms|mWm{2rj5SODE6g|&+|43Sav;vYSQFw)iys}b_jrQu1cL?~8`grxP+j#0HFR^#; z5&9pUK$YR)XCGrQpvg(gd=pF>$X)9usU+E$eJ3|r?w+w)7s|_MFfBtLHqBU-7gNrT zbMAO=Ro>UU@w~cdI6%pi1aHI8BLSBtt-O+ab z9u}nVqf_5iBPmTzpC0Yz+Ps@NMKh;ITD2FICo+vCQKGuAivC28=J^I2Ih8y{Qkf>& z$4Wma%KDaP3?G4j(^(y-3G!dw{|^Cu`j6aqB#s zOdkbNhZspsv0Pjaz?3(_Urzl61%>jQ8tsK7jpeG`bFk%Er&mreNohe5SC?E5zyrmf zCLk&3DwlN7LjveJDYJa4JM1nLuzWR5)u{ZM+<>I7ENC8%0$J1j6WjR?_Jd zr~>XsSxfNzMX5+)`_h{-WNTy?Kz!YMK4IP1x`<)cG~ z0RwYf^KltHyb^zwEQ5oXF;3_3X|64~7F*iJlAI-!8q3*{dKH-%r&1?T%`*8$4;|?a zx<`9hpTC~D#s&G27}I7(VqU7PwX9#cmYoN7Ym#Cz zg0tL4G!^Bhs+&2~dlUe@Qv#!kWWUqCSzjBbSKr1|FoY1&VXlMG!AYz}8-gMcjQjBg zCNZV01XEKa6KN#9gz8S=uC$<6&D2@uG8vvEB>Ra3BiP+GOlCceRSnow2RAL)$g=De zG)Ir&HoI|(E@DcImv(QZyP$<~p^Dw&b`}_yV3Ldo5ph<}b+TZPa-j-K(w@0~Aurcl z3oFd)Xml;)gm9EpI)b4{Bs!Aho}v#!8jc5!5sgLgP5J3n25{8dNR%aMsH$S1bcEc2 zEC$-f8E&26wTV5L3k3>vg~XLODv&GWQ)6skB0k1d?i&y_rV@=s5G4pqL?EQ2BhW@P6hYC;m~BREI4E=#V33ULK5+nyGB5j|1EADihF|rw zW#>**Ri(Hnk4{4yk2k%@9mTiueDqIjwA@TY3R7*bVUDvNtIo!n$`u6SQ*;{I_*v_3 zxwqm&^cmXDYug>~z*A$LF$cZa)(rSvdnj#zx(lm9LTHAaS6`F@mV5`$(HG7Bz0*C_+Bx4F+ zWE8;wN<<)kK|TVXJcIF_v5c;AtkGD@+lS3;K?$l9ibbTNag=PCcrb<_sVJg?DPqIo zFp;z-NrYqAjZPFxnj&Kfl|`jAhnh07FdRs*J-Uyil7ju9PwPnO(y&t7ANWOwhM%wW zEXAPL@ui|K@Q2i+8M}R>^=2kheufj>Z`rm~ExqXRe$et`DlH`(4V|LSQ;w<6f!-)0 zSp;-;xF-Kf08Vacr**P}NHB?Gk&}DY-3`E{T96lnqw})dTvv4sa|`R3914IDjD-@m zauc?ED`u;SRdZHRUQxn8q#vu@j#Q|k&ytvoOi=EsB+pbp+jtvtT*$!DIW7aIn!Ax# zD?D-g<8*~jQ*6zBQ+WDZ_;^6>eap5^oEJUbA4ZW!&|9<^uUr(5m!B(UZf#q`-;L_W%Np?!?#q8O0m{n^R zGtlQnm#-pPAn8|Fl)V^}-h`lt42wfZqULNQCl!|FEkiHrHN`FtLrmafb3a9nDTmje zKEyz52)RfmkP7mJy3g>dy^pg!vIi9vx8B8$iCtK%`V2C9uFU@3k*6|kZ=AD^{gFLP z3!I`0b;_)F^eH`4rkpK}azokC2F_ ziA55$9_^;Jr~Q05I=kG3&JBWHp=-E{%jU1uFma(Bq1$pnIC{W03D_D$Ea&vI%7z?r*Fq#dF_Do_)n`&L$9zMN!-d8nPF0o#ke{4ACWPVrgn3h`(r8Aw0C%?-}yq0k$Y*=W_UckQQWBfY$D+ISP6IjZE zodd7o%C^#xIsvJfaP{Ev2x7{)~;E} zzR>H8#mBKb%;k!GHafEeE!+tM64J**>!L+1#9e2fL0PMvnm;0%?Q% z_TcECP2pi4L&(zOJu(WwE9UJOTq4oY=w6Es+JP81bC@wPbT!_@Xk)wuUty7 zQVU7>z>52MKKdsx!&?1^>2|acGzZw+^nLzvoz@4S)prtnVAY$EuT%&SX0BXCN4THd z7KuadtvHW*P;+2$!(!rzII(yF!6>j?cNsQ=XxB13kz)$ES23O_EgpmuW{!uG41gQ}=>kF{k6s&da^!Zb|2luv)6 zhiEX##)6xW6@?f2p5cMw&&_~v|7+Jz5G%EbDK}SgP3iSSH%tt3g|vIKI>T3 z<}$iseVJ!p5Nbr{Qc3$1Y&J7avz?F}!ha-4y{UnL#1N~lSk6RpoJEEu42uJ_^>tu& znyIg=dt0oePHJJ&NXpwDop84ckix^S68IebbhGT?-QPgfDiaHHPuUNK} zU}But_8es8k_DVP+(SAqO1*s^L*w2H!qKnYeB`{Hs)tU0PyA@r7gRFgP&0}!Tm3_) zzvujD)fWP@jRo-0sxK(#jr2G;Wjg^WlySs@kudEYUD(S^BzqO2kr?g@8zKVYl#xJR zm^y0>^XAQ=Pw6AqP(a^kKLf!5T!Q;;(N28$*~c;)G8JnJDK?j4ahZsuG_$NBdl4J0 zx1QM@(l+PA!6@=+J&LNmk1N+n$`%8_Va(x*HOsMBtkf^4KsRdPc+UyO<6{ISBN^gn z6msdUX9+rkz-Nd*>$QhYe@~dL9td4%tTW@CckL|kFDqC~qjN6L48M%SYNMi}lu%zB zeM-mtx;pe`33oD^3VS(Ox-4`iiJeXRsdvq##8HZ&SfIpG_O@xK8_gN#HS;qXxF*gnTJ?pC+a!L6Wo`8W0IslKjZ^1f zJTbu^cRz(r(q;SsUu+V2Dn$yI2uzaW_OPpUKiP{s^m|${nT)7j`5n-%RDE16Y#4)M>sHe3B0xaN)R zEkG0ys6eG>`r4a0VxXC)#g1Zz(q1aFYIybZPDE9}cXSHtRhCPm9Wx?e&U?Z0u3f+R z3bppi3Z^1HbdrJImQg%89z;hh)3_n4k(25P;;|&=n10s!v&9~>^7swU32z`0=g4^B z&7S9>)89K+T&Zu;e%7%rdvcMwq5A5~e;JrBHZrC6b3oY2rsUo1vuvUH#XeH$6!%~K z5tk-G0J!_QTlvikf8aB>YLX)9 z*Q`SE4G*ZEW&K$mUIiHI3evH?hu+tRNXto9u3t%QLoE#@3nXA)+6o(nzaIq#s((k4?9z1sKIt}Qd_-6i}i+U7&|(>h&*l=YDmibcf=h8O+mc7A}m^1&*J(<(sG&)YBxq~1vFe)%9n5bSAO-kUu)J& zO%x$)Bpiw2oAP7VyAbSJ0*9)=(vsEMZ?i_9+QJ%s``RD)`M~!z5p>3C6ux%+i)us; zVU_Ic4s6TByPTUN1<(>`CUh_j666(S;i@q4`j1a!@}sJ+sL1GpWZeWNuk|fu|FuOo zkYm(>YoAL0hDsK&J@_JP>{n20tED5{L6NbP7q|b7D^{=N`K=lkjW&&O>*qF+XUw5e zskx;7&yM_A^HhzRt`b8A^!;|S*6A{nAXx;iiN2d3y!t~HZK`IY^$z|N{iTN9@SBA{fz&*=_d@O`*|+-IO&*- zA!sI=3K30(uT21LDJLR`HGQmU(_aOpkau5ECP8hgy$!A~oR^^1YV75f4OjEZ#4A`G zIzDdt5^iZJ?a#f&c3#6Z&xozk zz}2^ER?BE&oML0?CG|f$34;kO1IFSop!A!VNNU$~7Kw?_7$3EK7G%gt|sFw%D|}9iPy|RKOe{kPc`{xT*UP{z5O7as%P6 zFwqXpbQ+0{a_FVz^H$o?v154gav^;%ueN?x*)JS(^NW2C@p03a&KvV4L5niz>lxU@txG?0r-IUV5XhXFf)i)66?~N-)@qcRG6a3k%y44 zr=+!%L!QIr73I*~*~_ulo9R4pn%v@ib{{yz+?hwmfS`r`}p~WAJQDxBFm;2=X9crrfnUU)L%+UL}M`~ z!ahRrFb>7ZN0&XoLj6i=?6q`Hbdge%%r9ERbAjK}In{=cl8DJs3^5ZOfflZ?Z6u)h z*pYgHru2S}%X^u!PT`KYS*TluqEFE*A7V1#!=V1yQc?f_ADKx+K~x%87+cMp!dl#V z58^vbQadGg{9TgN#NssG;c@zUhEQYh!J>P4_}RyZDlsiqX(hbk*n&wkanFg5AZdF@ z_!8QEF17#Jl4s9D6h!Wsa~}Xd+woI$qSn?b*>HqByjRqms8Aq;A*ONF{YBa;FVj_{ z3JR*Aag00S=3e_3QS>Pe^&Mt1pyfTJ4_SGwWydrJ%)PIA^Z#a&nlLAdGN8vgS7OXR z!J)tb#1SL84m*RcQ8txbPCyCcPXq}kqxe$+oH{$MxQp(c17t0=T~hzNqC8|Fg;6qM zGgxujtxO6d^!E)S#*IAC_*pK`y_zpR_jy)Ut>W38FY%R?-(scba$X;Ql?qo45yHHv zK8{|eC*+Nj3Mt&1{W&B_;yYWu!zu46EEWSs!N|mT0G&?9x&`a_-4jnBIu=dKq(ka{ zma`(0q^5Hk@C36cy{>@O?_MySEq)}-_>QTJXFrx0rzv(klcW||6(S+V=}dQMNouhI z9OIfm0p}u4~6lCx%WCNowAgPBm~{!7b;{Wp}Z)P@(k!il(g@(nnY1l z5_6_^zrI%Y?|kdUZ)+2hHXsTj6;(wnD_z01xaL(G&sa%P&Vt;{rXoFZL_vZhG3;sUZNQ{$;e5Cr!4Uq_cGp)VFV*xJND`j`Xdpo*l3D53%@VSa7(CG{`P&cfw! z;b#&*lT0$nJ=yQ4%w2-t)rT$YA~3g)-i~47M7ek42e^E}WwhA$VRtTiZ;$hlW%tuyTS$dGhid&?q~#CJ+Z^^s z37$x>VaWzc9p$v|>jy<-q{C0r6GE0%${m$F-2ZcO>>g}J3oCQhQZSj%Kl+%1?nuv! zxKgvKyQKbf3Dj0rv9)Upm7Xe8AWz7{teD6W3yDfma(u;{8qyLs*3Df*N=dL|*I}#$ z5-BB(*=%CIu#^+x5e$j}bIL@}6vX#hnk9?pQRptjWp}W6&H^lw2471i5jn0P{%=9M_W6 zg5DU{Up8Me$<_^1{bDiZq!m-M{Y;Wt9>yX)8!lhN;o~PLn&X;IQp=l}q_)bsB9m#q zuH*{No=4)r!_?#yk^_GJ`-d|G_{)R8pLV|X-oZEOKYL02uUWE;_)&cZjB_~cuoPTL z4}OC$1ICG2aI@>ZJo56d`1r<;YGB-cBVkhzB2nxWE<$!c1g62b!vlNI1LI7~65M6| z$TS$Y?7>B9z#n8zbqxl+fvJX3))cO#%2=710DvPqPT`#zM%6*eoMzMd^=Go=OZaP- zcFciz+ zIO{P7v&EIZ-TtqRZX*>)A&43xUGAu$H`qg#lFg(zF)J9Ct>#i%T}ke>26EzsJevGI z>6DBmWg}|VqA47f^T9X($y-fo)706mni*i6-RMBfTbD(?zJR(-WjtB@TqZ*>oYrjP zho60nprm<*Gjd978 zV#KUkP{#GBVG%=#rcIQniYmjErcF$mMyWG3(w=B09@k*|xz@%E7?+HtGGLrer@au`*W84pabG5>bj#TE{a??G>exG9Y2N@FjzVk!}-T~LWyp2RiB z%F>$U`0PVC=2~#iwIbxF_~&(>XU*KpX!f3zoq$rO`#91d(|GZVUDZZ-T9FTe6P##{Ut3-pBgq7)d5Sh{Q(@nnM0s25ZPi^2Sk zz_>%}`zaG@n9xlyI5>hYHOZ3fm5j<>HOH8%`qJa-q%SB`mX``8`f|Z!GayI;g-Qvr ztPu8umE%eq$2(47@Tf#uBUqz3{EFX@awHk-9-^nC52wvW(mY9MEXG$p@kM_1x8D-> z$FRFCcy~^q3IZR#`@=jn^gGf)g{j^sxpkgd!MMBmCqDJ(Pw?YAf6Ax+{0Y9f@mqW+ z^?9UjV+M>fiYC?zH?c!~7QI;_8BSjSjJt{7wLVTNDNloO&fnVAh(4y2IP=srs+ve8 zh09zk#ds(o^z{y6OIj$cC}he!iIPxR?ODTt9mg{d`q>*lLrP7tE&K{`e;nDCWL@qC z#_=*58ll8kMrZUCF=7}oG8vnoLaYaa!f14exDZjR+;ij-S6RB#->y`+%B1o5m{g{( zmJTL&3t=UIU2;-D30t1op%Ff+5k4f0VpsD>i($O+VbrLIZqiECvPuT`4Ur~EWo;#` z<0n8=$zA7W?70ZJH`(}D}npyRdGZ`qBy&lo>(W6sG}jWoYUzx zWLZI$WfDr94;6h3MOOLwiJzj&R}n-Jk1mT?D#jIsSCcK~Ae`|m##0k~rsE5&cCI3v z3{z??s;u-qI=Mg)USFIaSDR%fqb@5DZq z*p~8W&L5|f)UH&~iw2_oQDQj}o;dszHC2_kZEk+^{Xd>_YRJf$jr}l#Cr8ho8X}CX zenvvU5>8H9W<7Tx*U(UtT>)p{<^PaT1H(f?ahI^hd}o@Q^33<)C*zcNV-4 zonR!Tq=+bCq@*6b4xDBOlHZ6kWM!A>Og^zm6Dgr&{LE3x+FrOza^aHP{CM}zHTZhL z6%@Ghczo|)Kn201V4Rc0kf$e{R6yHK=Z6E|C%)82zP*Te5B#=M3si`BWwPg5GeMG4 z=av1NQ>k?9a@Xo;mfjO{srGnENC{1yCk&&;5#6cdT|$5V5MFTzH4W{dc7}J1Q&(2Q zmp|}1K6UIXoEq-JYaV4JG)b;G3!iU_Q$1~b_U2Ds^r;~hy$OrnL_`g7o9?~mCHgr= zJ=}N0{j6=goI{o!)HoW@8}!s#>PU+z^l2kXLLkr|V=OdAzO9I8EP-fK>5ZReNAC`b z%X2V>EiB7fMv1GKL-BnW4OZ@O-$r-3L(3BK_b`+k<=*^zX$m#r&^frH=r$^IDmdDA zjB6Hd;78kj%%?Uyz_yNUFwxuk>o9Tf4Wd{i9BD||` zC4pF+iI9&g@>Vn9_wj*>_wmT?$M7B*Ma1Q8H=Mgi=b18r=m;_hOism#MKx< z%NS85!VSeYVis&n$=XIxwpz#&Q%`Z5`xYMT`V0$9^;kqRf@)(^_9m_@zMPmp$#=GY z2T!?`yXxM9=H`{tJwB-Iwhb0zikWa1 zTX7fLH2qodb)*fSU%ojzo;9(AB?0TCy>LN(LvVk`5nD7Kv)pz0t-89(8o^{SFp?NS zO@pde2=~V`iOTcpOQ~^{u)%c=t31o7b5ygf`E`P!FsqB!{*O3h2PgIum!c@n6y@eh z=I9&ARr4vcl`*BCz;3i*(CMkjFDDd=vaWg+bKUbe96msU ze`b|sF?vA*H@mE`^mC6QS509Q8W6ekv)5k zFsHJHKMp>{Y5xErIf6@XXPL4T)sezeY9|>_BBy2c1$Jmkc&&QHU?Le0It?zxFNPcj zgX9n-!J1Ugi7f~APVD0b_l-Py)Zv6P!hPy2jc_q!LUilbVuK z!JsoxnO{L)QX_IjU>>c>CS+Ab6a-XN;e#a~C6$tStnF8nmX+X*4bqTRk7|?|p7he! zJVDV~$8@k~O336U>`83bA{j(Y*}b@HJ4wtSE33c6miQKW z!o4_>CL+2B^F0e#psZw>bs66{{$+|+Yam;6Fu^B0U!f^@hy{*iJnem)QBOao_l{9o zm&+ZwAI#)O+}3^@<<=s)BLh6Q_%E5~eQDxpzF7T@>3I3lh9WVVjEOo?ug=M;R{N#~ z)SlM%LxDQ)qt$di(M{Gu2c8;jPo(uXUF0p#VQ)b*n_TN?{#hG^S7Z@r zk5F|>IWPEkvD({+r{4MIr#rR=X0&<1zl%+-bqwtqCe$0%Y^wfKL&`*_FFn#eD(~34 zNBRE?@y{hvbR>zj&_v6BcV_B`ca6-<8JJ_s{9e>ti>Ka6uz!lCpR{GhY5DbZ|E8a` z;i-4h`kO9Ve%(pSe|NIltATf-QNUhqnLR(??_GY>@pXRG@%8_c#P7Y!%iaRbZ`V%1J-hmop#p#>#4D$H~~ z*@G&p%>7Ue?zuKR^-f;!?_#nkL^>w_V#sdni_Q4kBhyZpUclhek&ek2-FkejflO{duscfAPuj2)7|C0jL;k8;v?7}#!+b@Z>5W# z7yDriSc{A}Ycz!(8%^L70#E>|&bPdXyc7)$TaVahfT8I05UWDnLNBjNrydW(+L-bO-wQ5@wKM7{8jn}E{m zaxS{wf@1{ubn5R9t-}AgGY~0VJoLLrg=CV!G+7HBocv`6>9|JRa9@ms zPa~RVo{eC46j2h03?(pSYe;H*GKL^()>2|Bg=d}(Yq5zr@2z6ucyPu&Yi_SVNvUr= z0dwy!%@FBQO8?8_Z+VXlw=8xsbTWwLH4~?Q*vF9{o?_rfqtrO+sBzTM>+iv8bP#+t zLi0EJXnkmi4}JChSS%JSTGr(|;)1;e&BVqN1Ue&_JO)Hbpyu`pqTU1ve;QFI(y*rt zTZx&xRc>@viRefiC8dcydxaTOwgG#EnZ#6zaDSY*bxe)>NeLFkyVEkB>M$k4*ZK#L)bY*D-!5 zK&UT9<*oSy`g|m&QYZ-(OQDIm_tap@HW28Dk_x6tg=8vkEYrkSIE~(>BR-~yDx+J^ z3;tcxiHxzC$~qNHBR*LBwF|EB@IZ|4KK4)sCg(e!#+1`2N2ahuM{?hXlW&ca#vvR>~Z7+tr>*}<_tY4TS+xZ8DFXTw-#G9kb~W$d*FSrdtQFapMErA0 z_Cg22?kG`j0#PrZobhB+5t-cOE>NKKUB%=q_Mo>*bUvw_f)(tJ5*dyonI#gFsf;JR z+S`a6S7>}-PR3!A4B|{H=wes;gSB7dKOg+*1+ArvQN(XG3G0kkWqv338L7_IP953v zor5%guY+ShI6?Q1`5capXe4B>)Ie#~)Gvdcn@5EVa$@m)pf+V0Mm6=x1*-3aiEBo!Ved8p|rW5Ag zUrG`A?B8=3k5Yg?>F1T*ukzb}eVpj4G1v}?tqI0n9_QEJ{2h*F_*w%TYwSR0lyH=vjro^|4ka+>8d&hjIjr_J zX2hB`f7%L)PsUJXb*2b9D{5LE>7QXTUW~Yydw=PhuKu&)>Z~(%cKoyd&%H;>!~K-H zD!6UUCOZ1NaT#2UY#rm^)8`*+7TOYF?{}K%?$UOhzIgQ)_@MadcRT^sViPBS*@37R zaGil4qTU3@f21A4cdW64$Y7kgAF9cC!~nrwEsi!as4ZY)mWB5 z#LiAacp%2y`%AHvm@jHYw>;d>g_QY^I=)VLAV$k0{j@yNpHb{Bk4)=?v)qsw)89ky z=m18^h|}n%_4&37-oNANJ}Rq=X>04|C;NWFkN5ug9TETJBkkCVP3X)Lz7wG{Q4fN4 zOpRrlOmja}lleXL+L`p+p#(4ZccG+IOxXseTEfJ}+Q;Vo4CU0@hl#X z<1IExSYjuIEKPtEp_WRKiqr~G6)N6Z(ewcXYN)C{MC}i#_yMJnN~Ma5zVcFuwgM6! zDxeWkB`BdHkm3ju9D;4^;C-9TeHhQpj2C%H()*lotnd5o`ObIFz2j(f6*kz=ZfnQg zX?0iRS48yMy-0@TmaBiy_#ldG0qsL=2+qW?WuNM}X&k?r!Lt25H>8407*ujJjhH`% zVky{qBZi_)c=YoEhEMe)_HT?pUCpT_y_|#1%adK8CBb*3gH-HvmA4%>GsNkWJv{Cs z&@^@X7J3}L`1IY6a8tU9H$T~nd|t+xvtuPY@gBwwevC=W_XvqAc$G|mRm`vt^02zN zmXnYT=0Pz=aX?6jux_7k*@{>syFm{jD>p)b z0-^)ymnXcC6UeeiwIf%I|? zQ(xbN&C8SjIeqDGT)w1A&euzCbl0!NtLx+cFK$KP9&#ePQh*{Uu=nt2>$V^l65!Zr z1?OP_lL_}H=do{M2#7Zxs$VCdEXjAE4St$Wl24)unuAL=Q zEdW?NETOD=uUUgM%4{N3HM5da6Odlcsm--caGD*u%A4`Tz&C{AHnOzp*LI`+xs6K5 ztN8?$j;l98SsMen#A+gURsDYPw=hDtW9U5KBDhT&bX-F2rC^|@nHPDao*7jIMN%Ln zRguuv&7*77g>0|@nxjj{QtHse^m48${In|6rI&LRRbB5p=#$WB0-K!!^f><7Q6H?^ zI8wP>sj@X#5wj9N0nd(CzCw+*P=*-*0OYKKhZp^-k;72v+TT^(5i7S2YXzoW!0OEe z=O)hA)Rb!3ms-NL!EYm$#?>i?f+7|nm+^k*t~S_vD@`6bs}PN-A^~Qq;=oqoNd_j` zgu#>D2$!w|51r_%(S)09e2qX;H5~tH^2?gR*MA4!kq*MRn(>yKS&F2fuqq<+BEL2l zgbU!eno08YdOp9^3^64Wt%n5Kp9O2DD?Wes=>f1d2CSV%@B2O?)KQI8UaMAPEeNrB zc?7OSDyq1A9w=XpNF(c+gaLrDP$Z~|pn&h-V4{F@K(!vV%FaArOH^_xO`s_s6(FW$ zLyzH{EP{Up(R-{Dxv)_%q?!q6U@Ee%MtpAKys85=z?zzYrj2UGe5V;5Z>a&k5}$$Z zkQa-;hL8ys3;_oKF(nhpA@WZYf$Qq)aje@o>^#;}0dbs%MLsH^C>UL`4Lg?7XkuEe zV(q!jnhV@RPB1);bRdtppZp{#!zcS8rX_=^J{lZ>XP^4oom4Om_ij774{t##7)R#; z7a|W{k~5H z+2~}y;qRZ{2%_t47i6IbC;}q033x^vPy_{HT0-Pb0>h{J@iZP%CudFn@wLM_?=p&X ztyJxLX<)7AZC<`+AK0t}>($NV)2w=m0c*!p%Bd;0{}@x zK~yNu1;I;i({=y=@YsLbv7NYe;wB~!@@SgnMN3;E6^6ukjA_z%6ehL<>Vd%(zQA_p zJM1)Rmr3P-dYHt3P1VGtX`||zlomphHcj26N$mI?zxVq=-#uTcH#S|;y)<>f&RUWw z4*oK8Uq%|ga3i(<)&1qY=10hb@|6^-2V2rEKyxq@cgaJFOrS^YuE*mrfMCYkR+_kg zJDe{PpZauRp5W5{NRHx&`$Pn*K9Zjhj_M+6X+EPG8vY`F8O`9|p_1E@y z<`T0Tds|@f>5O2C=ZFgcfx?kcIZ>>=f9JMfIEl2)1G*5XZ|*oBY(eI2W*m|kFnv26 zkZD04c?vMb+G#f1p2YMG<{q@!j5?TQ|iIGQzr+ zW*JTI%K3S2*gO!;8%C>S8J(Hz10 zv-vpm9tRrQBaV`I92W3#NC6kWueMVA>QL=DJ#M@2XR#}Dms}6-!yK*!zFoTamC5BY0$rnYcXj*>A7@X!=@tb_R73T~l?}5}2+J^O>q;Fg#_2 z!Qhr)m{yU>^SmgEq8%NpTShLGNs*bg^%n$A$k-s4ETE@d1yMdB%5Wq&`K0s+g^)Oz z2u;!mgr2=x{CREF=XW#d6sL4b?CcHd>j@{MbIz{x4y-)>#zbtgjr$$IVhPwlfPsbm z;e&MDGkhgzZn!IT(3S_=y?v2h!a;gDws!n-m>fWk&*|CR(ct3ws-M7f!Gd9oFQ=}p z)}A$Xc1BH85yio}2Kc)p8CHlkg~1pgA(0n0{@$K0rX1OoCA|~ahbSX3jmOV1UP1q2 z={nq12SGqCmdmc^@W*1HLNLkj@V^n};K#$>$Mr)A60ft%8mx{FeZRhV4Icb(_hI6} zSTi%>)Y(!+S9Q{%e&71Dawn#b>@lR@udGDe*on~Xj(X85^*`JreLpDC-PiyC002ov JPDHLkV1oBirqcib literal 0 HcmV?d00001 diff --git a/mods/creeper/textures/tnt_smoke.png b/mods/creeper/textures/tnt_smoke.png new file mode 100755 index 0000000000000000000000000000000000000000..488b50fe958d33fa4cd50fa383a4685db045def5 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^Fw4`$F~s6@a>4>ti^@+=>QiQE7$hEQ`G3RY@DXvHh=$u6+S=Ge zd|6pp|9|XU+`ubsmaui^1PiVPOaAGbFCN{bP0l+XkK@H9k* literal 0 HcmV?d00001 diff --git a/mods/kpgmobs b/mods/kpgmobs new file mode 160000 index 00000000..b36b7e4d --- /dev/null +++ b/mods/kpgmobs @@ -0,0 +1 @@ +Subproject commit b36b7e4d79ff2cacb2edc99bef5d442162e71c42 diff --git a/mods/mob_horse b/mods/mob_horse new file mode 160000 index 00000000..86c46b3e --- /dev/null +++ b/mods/mob_horse @@ -0,0 +1 @@ +Subproject commit 86c46b3ecf2c38c649eeb17089b86ce156962195 diff --git a/mods/mobs b/mods/mobs new file mode 160000 index 00000000..80deb912 --- /dev/null +++ b/mods/mobs @@ -0,0 +1 @@ +Subproject commit 80deb912d6031a9116c08fc2c64a917df30e98b9 diff --git a/mods/mobs/README.txt b/mods/mobs/README.txt deleted file mode 100755 index a7437835..00000000 --- a/mods/mobs/README.txt +++ /dev/null @@ -1,68 +0,0 @@ --= MOBS-MOD for MINETEST =- -by PilzAdam, KrupnovPavel, Zeg9 and TenPlus1 - - -https://forum.minetest.net/viewtopic.php?f=9&t=9917 - -This mod contains the following additions: - -- Giant Spiders (found in desert caves, drop string when killed) -- Bee's (found around flowers, drop honey when killed, right-click to pick up, also Beehives) -- Chicken (lays eggs, added fried egg, raw & cooked chicken, right-click to pick up) -- Cow (right-click with empty bucket to get bucket of milk, feed 8 wheat to replenish milk) -- Sheep (right-click for wool, feed 8 wheat to replenish wool) -- Warthog (the local pig that gives raw and cooked port) -- Rats (right-click to pick up and place, cook for a tasty treat) -- Sand, Dirt, Stone, Tree Monsters, Oerkki and Dungeon Masters as standard -- Lava Flan, Mese Monsters added to spice things up a bit -- Cook milk in furnace to get cheese wedge, 9 wedges make 1 cheese block - -..with the following new features: - -- Hitting a mob has knock-back effect like in minecraft, and with blood effect -- Mobs float in water, so monsters can still chase you -- Mobs can die from falling from a height -- Mobs have better health and drops -- Hitting a mob also puts them into fight mode (apart from animals) -- Compatible with Ethereal mod, mobs now spawn on ethereal worlds - -Changelog: - -1.27- Added new sheep, lava flan and spawn egg textures. New Lava Pick tool smelts what you dig. New atan checking function. -1.26- Pathfinding feature added thanks to rnd, when monsters attack they become scary smart in finding you :) also, beehive produces honey now :) -1.25- Mobs no longer spawn within 12 blocks of player or despawn within same range, spawners now have player detection, Code tidy and tweak. -1.24- Added feature where certain animals run away when punched (runaway = true in mob definition) -1.23- Added mob spawner block for admin to setup spawners in-game (place and right click to enter settings) -1.22- Added ability to name tamed animals and npc using nametags, also npc will attack anyone who punches them apart from owner -1.21- Added some more error checking to reduce serialize.h error and added height checks for falling off cliffs (thanks cmdskp) -1.20- Error checking added to remove bad mobs, out of map limit mobs and stop serialize.h error -1.19- Chickens now drop egg items instead of placing the egg, also throwing eggs result in 1/8 chance of spawning chick -1.18- Added docile_by_day flag so that monsters will not attack automatically during daylight hours unless hit first -1.17- Added 'dogshoot' attack type, shoots when out of reach, melee attack when in reach, also api tweaks and self.reach added -1.16- Mobs follow multiple items now, Npc's can breed -1.15- Added Feeding/Taming/Breeding function, right-click to pick up any sheep with X mark on them and replace with new one to fix compatibility. -1.14- All .self variables saved in staticdata, Fixed self.health bug -1.13- Added capture function (thanks blert2112) chance of picking up mob with hand; net; magic lasso, replaced some .x models with newer .b3d one's -1.12- Added animal ownership so that players cannot steal your tamed animals -1.11- Added flying mobs (and swimming), fly=true and fly_in="air" or "deafult:water_source" for fishy -1,10- Footstep removed (use replace), explosion routine added for exploding mobs. -1.09- reworked breeding routine, added mob rotation value, added footstep feature, added jumping mobs with sounds feature, added magic lasso for picking up animals -1.08- Mob throwing attack has been rehauled so that they can damage one another, also drops and on_die function added -1.07- Npc's can now be set to follow player or stand by using self.order and self.owner variables -beta- Npc mob added, kills monsters, attacks player when punched, right click with food to heal or gold lump for drop -1.06- Changed recovery times after breeding, and time taken to grow up (can be sped up by feeding baby animal) -1.05- Added ExeterDad's bunny's which can be picked up and tamed with 4 carrots from farming redo or farming_plus, also shears added to get wool from sheep and lastly Jordach/BSD's kitten -1.04- Added mating for sheep, cows and hogs... feed animals to make horny and hope for a baby which is half size, will grow up quick though :) -1.03- Added mob drop/replace feature so that chickens can drop eggs, cow/sheep can eat grass/wheat etc. -1.02- Sheared sheep are remembered and spawn shaven, Warthogs will attack when threatened, Api additions -1.01- Mobs that suffer fall damage or die in water/lava/sunlight will now drop items -1.0 - more work on Api so that certain mobs can float in water while some sink like a brick :) -0.9 - Spawn eggs added for all mobs (admin only, cannot be placed in protected areas)... Api tweaked -0.8 - Added sounds to monster mobs (thanks Cyberpangolin for the sfx) and also chicken sound -0.7 - mobs.protected switch added to api.lua, when set to 1 mobs no longer spawn in protected areas, also bug fixes -0.6 - Api now supports multi-textured mobs, e.g oerkki, dungeon master, rats and chickens have random skins when spawning (sheep fix TODO), also new Honey block -0.5 - Mobs now float in water, die from falling, and some code improvements -0.4 - Dungeon Masters and Mese Monsters have much better aim due to shoot_offset, also they can both shoot through nodes that aren't walkable (flowers, grass etc) plus new sheep sound :) -0.3 - Added LOTT's Spider mob, made Cobwebs, added KPavel's Bee with Honey and Beehives (made texture), Warthogs now have sound and can be tamed, taming of shaved sheep or milked cow with 8 wheat so it will not despawn, many bug fixes :) -0.2 - Cooking bucket of milk into cheese now returns empty bucket -0.1 - Initial Release diff --git a/mods/mobs/api.lua b/mods/mobs/api.lua deleted file mode 100755 index ddd3b3e1..00000000 --- a/mods/mobs/api.lua +++ /dev/null @@ -1,2804 +0,0 @@ --- Mobs Api (4th March 2016) -mobs = {} -mobs.mod = "redo" - --- Load settings -local damage_enabled = minetest.setting_getbool("enable_damage") -local peaceful_only = minetest.setting_getbool("only_peaceful_mobs") -local disable_blood = minetest.setting_getbool("mobs_disable_blood") -local creative = minetest.setting_getbool("creative_mode") -local spawn_protected = tonumber(minetest.setting_get("mobs_spawn_protected")) or 1 -local remove_far = minetest.setting_getbool("remove_far_mobs") - --- pathfinding settings -local enable_pathfinding = true -local enable_pathfind_digging = false -local stuck_timeout = 3 -- how long before mob gets stuck in place and starts searching -local stuck_path_timeout = 10 -- how long will mob follow path before giving up - --- internal functions - -local pi = math.pi -local square = math.sqrt -local atan = function(x) - - if x ~= x then - --error("atan bassed NaN") - print ("atan based NaN") - return 0 - else - return math.atan(x) - end -end - -do_attack = function(self, player) - - if self.state ~= "attack" then - - if math.random(0,100) < 90 - and self.sounds.war_cry then - - minetest.sound_play(self.sounds.war_cry,{ - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - - self.state = "attack" - self.attack = player - end -end - -set_velocity = function(self, v) - - v = v or 0 - - local yaw = (self.object:getyaw() + self.rotate) or 0 - - self.object:setvelocity({ - x = math.sin(yaw) * -v, - y = self.object:getvelocity().y, - z = math.cos(yaw) * v - }) -end - -get_velocity = function(self) - - local v = self.object:getvelocity() - - return (v.x * v.x + v.z * v.z) ^ 0.5 -end - -set_animation = function(self, type) - - if not self.animation then - return - end - - self.animation.current = self.animation.current or "" - - if type == "stand" - and self.animation.current ~= "stand" then - - if self.animation.stand_start - and self.animation.stand_end - and self.animation.speed_normal then - - self.object:set_animation({ - x = self.animation.stand_start, - y = self.animation.stand_end}, - self.animation.speed_normal, 0) - - self.animation.current = "stand" - end - - elseif type == "walk" - and self.animation.current ~= "walk" then - - if self.animation.walk_start - and self.animation.walk_end - and self.animation.speed_normal then - - self.object:set_animation({ - x = self.animation.walk_start, - y = self.animation.walk_end}, - self.animation.speed_normal, 0) - - self.animation.current = "walk" - end - - elseif type == "run" - and self.animation.current ~= "run" then - - if self.animation.run_start - and self.animation.run_end - and self.animation.speed_run then - - self.object:set_animation({ - x = self.animation.run_start, - y = self.animation.run_end}, - self.animation.speed_run, 0) - - self.animation.current = "run" - end - - elseif type == "punch" - and self.animation.current ~= "punch" then - - if self.animation.punch_start - and self.animation.punch_end - and self.animation.speed_normal then - - self.object:set_animation({ - x = self.animation.punch_start, - y = self.animation.punch_end}, - self.animation.speed_normal, 0) - - self.animation.current = "punch" - end - end -end - --- check line of sight for walkers and swimmers alike -function line_of_sight_water(self, pos1, pos2, stepsize) - - local s, pos_w = minetest.line_of_sight(pos1, pos2, stepsize) - - -- normal walking and flying mobs can see you through air - if s == true then - return true - end - - -- swimming mobs can see you through water - if s == false - and self.fly - and self.fly_in == "default:water_source" then - - local nod = minetest.get_node(pos_w).name - - if nod == "default:water_source" - or nod == "default:water_flowing" then - - return true - end - end - - return false - -end - --- particle effects -function effect(pos, amount, texture, max_size) - - minetest.add_particlespawner({ - amount = amount, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -0, y = -2, z = -0}, - maxvel = {x = 2, y = 2, z = 2}, - minacc = {x = -4, y = -4, z = -4}, - maxacc = {x = 4, y = 4, z = 4}, - minexptime = 0.1, - maxexptime = 1, - minsize = 0.5, - maxsize = (max_size or 1), - texture = texture, - }) -end - --- update nametag colour -function update_tag(self) - - local col = "#00FF00" - local qua = self.hp_max / 4 - - if self.health <= math.floor(qua * 3) then - col = "#FFFF00" - end - - if self.health <= math.floor(qua * 2) then - col = "#FF6600" - end - - if self.health <= math.floor(qua) then - col = "#FF0000" - end - - self.object:set_properties({ - nametag = self.nametag, - nametag_color = col - }) - -end - --- check if mob is dead or only hurt -function check_for_death(self) - - -- return if no change - local hp = self.object:get_hp() - - if hp == self.health then - return false - end - - -- still got some health? play hurt sound - if hp > 0 then - - self.health = hp - - if self.sounds.damage then - - minetest.sound_play(self.sounds.damage,{ - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance - }) - end - - update_tag(self) - - return false - end - - -- drop items when dead - local obj - local pos = self.object:getpos() - - for _,drop in pairs(self.drops) do - - if math.random(1, drop.chance) == 1 then - - obj = minetest.add_item(pos, - ItemStack(drop.name .. " " - .. math.random(drop.min, drop.max))) - - if obj then - - obj:setvelocity({ - x = math.random(-1, 1), - y = 6, - z = math.random(-1, 1) - }) - end - end - end - - -- play death sound - if self.sounds.death then - - minetest.sound_play(self.sounds.death,{ - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance - }) - end - - -- execute custom death function - if self.on_die then - self.on_die(self, pos) - end - - self.object:remove() - - return true -end - --- check if within map limits (-30911 to 30927) -function within_limits(pos, radius) - - if (pos.x - radius) > -30913 - and (pos.x + radius) < 30928 - and (pos.y - radius) > -30913 - and (pos.y + radius) < 30928 - and (pos.z - radius) > -30913 - and (pos.z + radius) < 30928 then - return true -- within limits - end - - return false -- beyond limits -end - --- is mob facing a cliff -local function is_at_cliff(self) - - if self.fear_height == 0 then -- if 0, no falling protection! - return false - end - - local yaw = self.object:getyaw() - local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5) - local pos = self.object:getpos() - local ypos = pos.y + self.collisionbox[2] -- just above floor - - if minetest.line_of_sight( - {x = pos.x + dir_x, y = ypos, z = pos.z + dir_z}, - {x = pos.x + dir_x, y = ypos - self.fear_height, z = pos.z + dir_z} - , 1) then - - return true - end - - return false -end - --- get node but use fallback for nil or unknown -local function node_ok(pos, fallback) - - fallback = fallback or "default:dirt" - - local node = minetest.get_node_or_nil(pos) - - if not node then - return minetest.registered_nodes[fallback] - end - - if minetest.registered_nodes[node.name] then - return node - end - - return minetest.registered_nodes[fallback] -end - --- environmental damage (water, lava, fire, light) -do_env_damage = function(self) - - -- feed/tame text timer (so mob 'full' messages dont spam chat) - if self.htimer > 0 then - self.htimer = self.htimer - 1 - end - - local pos = self.object:getpos() - - self.time_of_day = minetest.get_timeofday() - - -- remove mob if beyond map limits - if not within_limits(pos, 0) then - self.object:remove() - return - end - - -- daylight above ground - if self.light_damage ~= 0 - and pos.y > 0 - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 - and (minetest.get_node_light(pos) or 0) > 12 then - - self.object:set_hp(self.object:get_hp() - self.light_damage) - - effect(pos, 5, "tnt_smoke.png") - end - - -- what is mob standing in? - pos.y = pos.y + self.collisionbox[2] + 0.1 -- foot level - self.standing_in = node_ok(pos, "air").name - --print ("standing in " .. self.standing_in) - - if self.water_damage ~= 0 - or self.lava_damage ~= 0 then - - local nodef = minetest.registered_nodes[self.standing_in] - - pos.y = pos.y + 1 - - -- water - if self.water_damage ~= 0 - and nodef.groups.water then - - self.object:set_hp(self.object:get_hp() - self.water_damage) - - effect(pos, 5, "bubble.png") - end - - -- lava or fire - if self.lava_damage ~= 0 - and (nodef.groups.lava - or self.standing_in == "fire:basic_flame" - or self.standing_in == "fire:permanent_flame") then - - self.object:set_hp(self.object:get_hp() - self.lava_damage) - - effect(pos, 5, "fire_basic_flame.png") - end - end - - check_for_death(self) -end - --- jump if facing a solid node (not fences) -do_jump = function(self) - - if self.fly - or self.child then - return - end - - local pos = self.object:getpos() - - -- what is mob standing on? - pos.y = pos.y + self.collisionbox[2] - 0.2 - - local nod = node_ok(pos) - ---print ("standing on:", nod.name, pos.y) - - if minetest.registered_nodes[nod.name].walkable == false then - return - end - - -- where is front - local yaw = self.object:getyaw() - local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5) - local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5) - - -- what is in front of mob? - local nod = node_ok({ - x = pos.x + dir_x, - y = pos.y + 0.5, - z = pos.z + dir_z - }) - - -- thin blocks that do not need to be jumped - if nod.name == "default:snow" then - return - end - ---print ("in front:", nod.name, pos.y + 0.5) - - if minetest.registered_items[nod.name].walkable - and not nod.name:find("fence") - or self.walk_chance == 0 then - - local v = self.object:getvelocity() - - v.y = self.jump_height + 1 - v.x = v.x * 2.2 - v.z = v.z * 2.2 - - self.object:setvelocity(v) - - if self.sounds.jump then - - minetest.sound_play(self.sounds.jump, { - object = self.object, - gain = 1.0, - max_hear_distance = self.sounds.distance - }) - end - else - if self.state ~= "attack" then - self.state = "stand" - set_animation(self, "stand") - end - end -end - -function calc_velocity(pos1, pos2, old_vel, power) --MFF we use this function - -- If the two positions are equal the vector will contain nan and crash the game - if (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z) then - return { - x = 0, - y = 0, - z = 0 - } - end - - local vel = vector.direction(pos1, pos2) - vel = vector.normalize(vel) - vel = vector.multiply(vel, power) - local dist = vector.distance(pos1, pos2) - dist = math.max(dist, 1) - vel = vector.divide(vel, dist) - vel = vector.add(vel, old_vel) - return vel -end - --- this is a faster way to calculate distance -local get_distance = function(a, b) - - local x, y, z = a.x - b.x, a.y - b.y, a.z - b.z - - return square(x * x + y * y + z * z) -end - --- blast damage to entities nearby (modified from TNT mod) -function entity_physics(pos, radius, self) --/MFF (Crabman|06/23/2015)add self to use punch function - - radius = radius * 2 - - local objs = minetest.get_objects_inside_radius(pos, radius) - local obj_pos, obj_vel, dist - - for _, obj in pairs(objs) do - - obj_pos = obj:getpos() - --MFF DEBUT pumpkins - obj_vel = obj:getvelocity() - if obj_vel ~= nil then - if not (obj:get_entity_name() == "__builtin:item" and self.do_not_project_items) then - obj:setvelocity(calc_velocity(pos, obj_pos, obj_vel, radius * 10)) - end - end --MFF FIN pumpkins - --dist = math.max(1, get_distance(pos, obj_pos)) - --local damage = math.floor((4 / dist) * radius) - --obj:set_hp(obj:get_hp() - damage) - obj:punch(self.object, 1.0,{full_punch_interval=1.0, damage_groups = {fleshy=self.damage} })--/MFF (Crabman|06/23/2015) use punch - end -end - --- should mob follow what I'm holding ? -function follow_holding(self, clicker) - - local item = clicker:get_wielded_item() - local t = type(self.follow) - - -- single item - if t == "string" - and item:get_name() == self.follow then - return true - - -- multiple items - elseif t == "table" then - - for no = 1, #self.follow do - - if self.follow[no] == item:get_name() then - return true - end - end - end - - return false -end - -local function breed(self) - - -- child take 240 seconds before growing into adult - if self.child == true then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer > 240 then - - self.child = false - self.hornytimer = 0 - - self.object:set_properties({ - textures = self.base_texture, - mesh = self.base_mesh, - visual_size = self.base_size, - collisionbox = self.base_colbox, - }) - - -- jump when fully grown so not to fall into ground - self.object:setvelocity({ - x = 0, - y = self.jump_height, - z = 0 - }) - end - - return - end - - -- horny animal can mate for 40 seconds, - -- afterwards horny animal cannot mate again for 200 seconds - if self.horny == true - and self.hornytimer < 240 then - - self.hornytimer = self.hornytimer + 1 - - if self.hornytimer >= 240 then - self.hornytimer = 0 - self.horny = false - end - end - - -- find another same animal who is also horny and mate if close enough - if self.horny == true - and self.hornytimer <= 40 then - - local pos = self.object:getpos() - - effect({x = pos.x, y = pos.y + 1, z = pos.z}, 4, "heart.png") - - local ents = minetest.get_objects_inside_radius(pos, 3) - local num = 0 - local ent = nil - - for i, obj in pairs(ents) do - - ent = obj:get_luaentity() - - -- check for same animal with different colour - local canmate = false - - if ent then - - if ent.name == self.name then - canmate = true - else - local entname = string.split(ent.name,":") - local selfname = string.split(self.name,":") - - if entname[1] == selfname[1] then - entname = string.split(entname[2],"_") - selfname = string.split(selfname[2],"_") - - if entname[1] == selfname[1] then - canmate = true - end - end - end - end - - if ent - and canmate == true - and ent.horny == true - and ent.hornytimer <= 40 then - num = num + 1 - end - - -- found your mate? then have a baby - if num > 1 then - - self.hornytimer = 41 - ent.hornytimer = 41 - - -- spawn baby - minetest.after(5, function(dtime) - - local mob = minetest.add_entity(pos, self.name) - local ent2 = mob:get_luaentity() - local textures = self.base_texture - - if self.child_texture then - textures = self.child_texture[1] - end - - mob:set_properties({ - textures = textures, - visual_size = { - x = self.base_size.x / 2, - y = self.base_size.y / 2 - }, - collisionbox = { - self.base_colbox[1] / 2, - self.base_colbox[2] / 2, - self.base_colbox[3] / 2, - self.base_colbox[4] / 2, - self.base_colbox[5] / 2, - self.base_colbox[6] / 2 - }, - }) - ent2.child = true - ent2.tamed = true - ent2.owner = self.owner - end) - - num = 0 - - break - end - end - end -end - -function replace(self, pos) - - if self.replace_rate - and self.child == false - and math.random(1, self.replace_rate) == 1 then - - local pos = self.object:getpos() - - pos.y = pos.y + self.replace_offset - --- print ("replace node = ".. minetest.get_node(pos).name, pos.y) - - if self.replace_what - and self.replace_with - and self.object:getvelocity().y == 0 - and #minetest.find_nodes_in_area(pos, pos, self.replace_what) > 0 then - - minetest.set_node(pos, {name = self.replace_with}) - - -- when cow/sheep eats grass, replace wool and milk - if self.gotten == true then - self.gotten = false - self.object:set_properties(self) - end - end - end -end - --- check if daytime and also if mob is docile during daylight hours -function day_docile(self) - - if self.docile_by_day == false then - - return false - - elseif self.docile_by_day == true - and self.time_of_day > 0.2 - and self.time_of_day < 0.8 then - - return true - end -end - --- path finding and smart mob routine by rnd -function smart_mobs(self, s, p, dist, dtime) - - local s1 = self.path.lastpos - - -- is it becoming stuck? - if math.abs(s1.x - s.x) + math.abs(s1.z - s.z) < 1.5 then - self.path.stuck_timer = self.path.stuck_timer + dtime - else - self.path.stuck_timer = 0 - end - - self.path.lastpos = {x = s.x, y = s.y, z = s.z} - - -- im stuck, search for path - if (self.path.stuck_timer > stuck_timeout and not self.path.following) - or (self.path.stuck_timer > stuck_path_timeout - and self.path.following) then - - self.path.stuck_timer = 0 - - -- lets try find a path, first take care of positions - -- since pathfinder is very sensitive - local sheight = self.collisionbox[5] - self.collisionbox[2] - - -- round position to center of node to avoid stuck in walls - -- also adjust height for player models! - s.x = math.floor(s.x + 0.5) - s.y = math.floor(s.y + 0.5) - sheight - s.z = math.floor(s.z + 0.5) - - local ssight, sground - ssight, sground = minetest.line_of_sight(s, { - x = s.x, y = s.y - 4, z = s.z}, 1) - - -- determine node above ground - if not ssight then - s.y = sground.y + 1 - end - - local p1 = self.attack:getpos() - - p1.x = math.floor(p1.x + 0.5) - p1.y = math.floor(p1.y + 0.5) - p1.z = math.floor(p1.z + 0.5) - - self.path.way = minetest.find_path(s, p1, 16, 2, 6, "Dijkstra") --"A*_noprefetch") - - -- attempt to unstick mob that is "daydreaming" - self.object:setpos({ - x = s.x + 0.1 * (math.random() * 2 - 1), - y = s.y + 1, - z = s.z + 0.1 * (math.random() * 2 - 1) - }) - - self.state = "" - do_attack(self, self.attack) - - -- no path found, try something else - if not self.path.way then - - self.path.following = false --- self.path.stuck = true - - -- lets make way by digging/building if not accessible - if enable_pathfind_digging then - - -- add block and remove one block above so - -- there is room to jump if needed - if s.y < p1.y then - - if not minetest.is_protected(s, "") then - minetest.set_node(s, {name = "default:dirt"}) - end - - local sheight = math.ceil(self.collisionbox[5]) + 1 - - -- assume mob is 2 blocks high so it digs above its head - s.y = s.y + sheight - - if not minetest.is_protected(s, "") then - - local node1 = minetest.get_node(s).name - - if node1 ~= "air" - and node1 ~= "ignore" then - minetest.set_node(s, {name = "air"}) - minetest.add_item(s, ItemStack(node1)) - end - end - - s.y = s.y - sheight - self.object:setpos({x = s.x, y = s.y + 2, z = s.z}) - - else -- dig 2 blocks to make door toward player direction - - local yaw1 = self.object:getyaw() + pi / 2 - - local p1 = { - x = s.x + math.cos(yaw1), - y = s.y, - z = s.z + math.sin(yaw1) - } - - if not minetest.is_protected(p1, "") then - - local node1 = minetest.get_node(p1).name - - if node1 ~= "air" - and node1 ~= "ignore" then - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - p1.y = p1.y + 1 - node1 = minetest.get_node(p1).name - - if node1 ~= "air" - and node1 ~= "ignore" then - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - end - end - end - - -- will try again in 2 second - self.path.stuck_timer = stuck_timeout - 2 - - -- frustration! cant find the damn path :( - if self.sounds.random then - minetest.sound_play(self.sounds.random, { - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - - else - - -- yay i found path - if self.sounds.attack then - - set_velocity(self, self.walk_velocity) - - minetest.sound_play(self.sounds.attack, { - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - - -- follow path now that it has it - self.path.following = true - end - end -end - --- register mob function -function mobs:register_mob(name, def) - -minetest.register_entity(name, { - - stepheight = def.stepheight or 0.6, - name = name, - type = def.type, - attack_type = def.attack_type, - fly = def.fly, - fly_in = def.fly_in or "air", - owner = def.owner or "", - order = def.order or "", - on_die = def.on_die, - do_custom = def.do_custom, - jump_height = def.jump_height or 6, - jump_chance = def.jump_chance or 0, - drawtype = def.drawtype, -- DEPRECATED, use rotate instead - rotate = math.rad(def.rotate or 0), -- 0=front, 90=side, 180=back, 270=side2 - lifetimer = def.lifetimer or 180, -- 3 minutes - hp_min = def.hp_min or 5, - hp_max = def.hp_max or 10, - physical = true, - collisionbox = def.collisionbox, - visual = def.visual, - visual_size = def.visual_size or {x = 1, y = 1}, - mesh = def.mesh, - makes_footstep_sound = def.makes_footstep_sound or false, - view_range = def.view_range or 5, - walk_velocity = def.walk_velocity or 1, - run_velocity = def.run_velocity or 2, - damage = def.damage or 0, - light_damage = def.light_damage or 0, - water_damage = def.water_damage or 0, - lava_damage = def.lava_damage or 0, - fall_damage = def.fall_damage or 1, - fall_speed = def.fall_speed or -10, -- must be lower than -2 (default: -10) - drops = def.drops or {}, - armor = def.armor, - on_rightclick = def.on_rightclick, - arrow = def.arrow, - shoot_interval = def.shoot_interval, - sounds = def.sounds or {}, - animation = def.animation, - follow = def.follow, - jump = def.jump or true, - walk_chance = def.walk_chance or 50, - attacks_monsters = def.attacks_monsters or false, - group_attack = def.group_attack or false, - --fov = def.fov or 120, - passive = def.passive or false, - recovery_time = def.recovery_time or 0.5, - knock_back = def.knock_back or 1, --Modif MFF, default value is "or 3", - blood_amount = def.blood_amount or 5, - blood_texture = def.blood_texture or "mobs_blood.png", - shoot_offset = def.shoot_offset or 0, - floats = def.floats or 1, -- floats in water by default - replace_rate = def.replace_rate, - replace_what = def.replace_what, - replace_with = def.replace_with, - replace_offset = def.replace_offset or 0, - timer = 0, - env_damage_timer = 0, -- only used when state = "attack" - tamed = false, - pause_timer = 0, - horny = false, - hornytimer = 0, - child = false, - gotten = false, - health = 0, - reach = def.reach or 3, - htimer = 0, - do_not_project_items = def.do_not_project_items or false, --MFF pumpkins - child_texture = def.child_texture, - docile_by_day = def.docile_by_day or false, - time_of_day = 0.5, - fear_height = def.fear_height or 0, - runaway = def.runaway, - runaway_timer = 0, - pathfinding = def.pathfinding, - - on_step = function(self, dtime) - - local pos = self.object:getpos() - local yaw = self.object:getyaw() or 0 - - -- when lifetimer expires remove mob (except npc and tamed) - if self.type ~= "npc" - and not self.tamed - and self.state ~= "attack" then - - self.lifetimer = self.lifetimer - dtime - - if self.lifetimer <= 0 then - - -- only despawn away from player - local objs = minetest.get_objects_inside_radius(pos, 10) - - for _,oir in pairs(objs) do - - if oir:is_player() then - - self.lifetimer = 20 - - return - end - end - - minetest.log("action", - "lifetimer expired, removed " .. self.name) - - effect(pos, 15, "tnt_smoke.png") - - self.object:remove() - - return - end - end - - if not self.fly then - - -- floating in water (or falling) - local v = self.object:getvelocity() - - -- going up then apply gravity - if v.y > 0.1 then - - self.object:setacceleration({ - x = 0, - y = self.fall_speed, - z = 0 - }) - end - - -- in water then float up - if minetest.registered_nodes[node_ok(pos).name].groups.liquid then -- water then - - if self.floats == 1 then - - self.object:setacceleration({ - x = 0, - y = -self.fall_speed / (math.max(1, v.y) ^ 2), - z = 0 - }) - end - else - -- fall downwards - self.object:setacceleration({ - x = 0, - y = self.fall_speed, - z = 0 - }) - - -- fall damage - if self.fall_damage == 1 - and self.object:getvelocity().y == 0 then - - local d = self.old_y - self.object:getpos().y - - if d > 5 then - - self.object:set_hp(self.object:get_hp() - math.floor(d - 5)) - - effect(pos, 5, "tnt_smoke.png") - - if check_for_death(self) then - return - end - end - - self.old_y = self.object:getpos().y - end - end - end - - -- knockback timer - if self.pause_timer > 0 then - - self.pause_timer = self.pause_timer - dtime - - if self.pause_timer < 1 then - self.pause_timer = 0 - end - - return - end - - -- attack timer - self.timer = self.timer + dtime - - if self.state ~= "attack" then - - if self.timer < 1 then - return - end - - self.timer = 0 - end - - -- never go over 100 - if self.timer > 100 then - self.timer = 1 - end - - -- node replace check (cow eats grass etc.) - replace(self, pos) - - -- mob plays random sound at times - if self.sounds.random - and math.random(1, 100) == 1 then - - minetest.sound_play(self.sounds.random, { - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - - -- environmental damage timer (every 1 second) - self.env_damage_timer = self.env_damage_timer + dtime - - if (self.state == "attack" and self.env_damage_timer > 1) - or self.state ~= "attack" then - - self.env_damage_timer = 0 - - do_env_damage(self) - - -- custom function (defined in mob lua file) - if self.do_custom then - self.do_custom(self) - end - end - - -- find someone to attack - if self.type == "monster" - and damage_enabled - and self.state ~= "attack" - and not day_docile(self) then - - local s = self.object:getpos() - local p, sp, dist - local player = nil - local type = nil - local obj = nil - local min_dist = self.view_range + 1 - local min_player = nil - - for _,oir in pairs(minetest.get_objects_inside_radius(s, self.view_range)) do - - if oir:is_player() then - - player = oir - type = "player" - else - obj = oir:get_luaentity() - - if obj then - player = obj.object - type = obj.type - end - end - - if type == "player" - or type == "npc" then - - s = self.object:getpos() - p = player:getpos() - sp = s - - -- aim higher to make looking up hills more realistic - p.y = p.y + 1 - sp.y = sp.y + 1 - - dist = get_distance(p, s) - - if dist < self.view_range then - -- field of view check goes here - - -- choose closest player to attack - --if minetest.line_of_sight(sp, p, 2) == true - if line_of_sight_water(self, sp, p, 2) == true - and dist < min_dist then - min_dist = dist - min_player = player - end - end - end - end - - -- attack player - if min_player then - do_attack(self, min_player) - end - end - - -- npc, find closest monster to attack - local min_dist = self.view_range + 1 - local min_player = nil - - if self.type == "npc" - and self.attacks_monsters - and self.state ~= "attack" then - - local s = self.object:getpos() - local p, dist --MFF - local obj = nil - - for _, oir in pairs(minetest.get_objects_inside_radius(s, self.view_range)) do - - obj = oir:get_luaentity() - - if obj - and obj.type == "monster" then - - -- attack monster - p = obj.object:getpos() - - dist = get_distance(p, s) - - if dist < min_dist then - min_dist = dist - min_player = obj.object - end - end - end - - if min_player then - do_attack(self, min_player) - end - end - - -- breed and grow children - breed(self) - - -- find player to follow - if (self.follow ~= "" - or self.order == "follow") - and not self.following - and self.state ~= "attack" - and self.state ~= "runaway" then - - local s, p, dist - - for _,player in pairs(minetest.get_connected_players()) do - - s = self.object:getpos() - p = player:getpos() - dist = get_distance(p, s) - - if dist < self.view_range then - self.following = player - break - end - end - end - - if self.type == "npc" - and self.order == "follow" - and self.state ~= "attack" - and self.owner ~= "" then - - -- npc stop following player if not owner - if self.following - and self.owner - and self.owner ~= self.following:get_player_name() then - self.following = nil - end - else - -- stop following player if not holding specific item - if self.following - and self.following:is_player() - and follow_holding(self, self.following) == false then - self.following = nil - end - - end - - -- follow that thing - if self.following then - - local s = self.object:getpos() - local p - - if self.following:is_player() then - - p = self.following:getpos() - - elseif self.following.object then - - p = self.following.object:getpos() - end - - if p then - - local dist = get_distance(p, s) - - -- dont follow if out of range - if dist > self.view_range then - self.following = nil - else - local vec = { - x = p.x - s.x, - y = p.y - s.y, - z = p.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then - yaw = yaw + pi - end - - self.object:setyaw(yaw) - end - - -- anyone but standing npc's can move along - if dist > self.reach - and self.order ~= "stand" then - - if (self.jump - and get_velocity(self) <= 0.5 - and self.object:getvelocity().y == 0) - or (self.object:getvelocity().y == 0 - and self.jump_chance > 0) then - - do_jump(self) - end - - set_velocity(self, self.walk_velocity) - - if self.walk_chance ~= 0 then - set_animation(self, "walk") - end - else - set_velocity(self, 0) - set_animation(self, "stand") - end - - return - end - end - end - - -- water swimmers flop when on land - if self.fly - and self.fly_in == "default:water_source" - and self.standing_in ~= self.fly_in then - - self.state = "flop" - self.object:setvelocity({x = 0, y = -5, z = 0}) - - set_animation(self, "stand") - - return - end - - if self.state == "stand" then - - if math.random(1, 4) == 1 then - - local lp = nil - local s = self.object:getpos() - - if self.type == "npc" then - - local o = minetest.get_objects_inside_radius(self.object:getpos(), 3) - - for _,o in pairs(o) do - - if o:is_player() then - lp = o:getpos() - break - end - end - end - - -- look at any players nearby, otherwise turn randomly - if lp then - - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if lp.x > s.x then - yaw = yaw + pi - end - end - else - yaw = (math.random(0, 360) - 180) / 180 * pi - end - - self.object:setyaw(yaw) - end - - set_velocity(self, 0) - set_animation(self, "stand") - - -- npc's ordered to stand stay standing - if self.type ~= "npc" - or self.order ~= "stand" then - - if self.walk_chance ~= 0 - and math.random(1, 100) <= self.walk_chance - and is_at_cliff(self) == false then - - set_velocity(self, self.walk_velocity) - self.state = "walk" - set_animation(self, "walk") - end - end - - elseif self.state == "walk" then - - local s = self.object:getpos() - local lp = minetest.find_node_near(s, 1, {"group:water"}) - - -- if water nearby then turn away - if lp then - - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - yaw = atan(vec.z / vec.x) + 3 * pi / 2 - self.rotate - - if lp.x > s.x then - yaw = yaw + pi - end - - self.object:setyaw(yaw) - end - - -- otherwise randomly turn - elseif math.random(1, 100) <= 30 then - - yaw = (math.random(0, 360) - 180) / 180 * pi - - self.object:setyaw(yaw) - end - - -- stand for great fall in front - local temp_is_cliff = is_at_cliff(self) - - -- jump when walking comes to a halt - if temp_is_cliff == false - and self.jump - and get_velocity(self) <= 0.5 - and self.object:getvelocity().y == 0 then - - do_jump(self) - end - - if temp_is_cliff - or math.random(1, 100) <= 30 then - - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - else - set_velocity(self, self.walk_velocity) - set_animation(self, "walk") - end - - -- runaway when punched - elseif self.state == "runaway" then - - self.runaway_timer = self.runaway_timer + 1 - - -- stop after 3 seconds or when at cliff - if self.runaway_timer > 3 - or is_at_cliff(self) then - self.runaway_timer = 0 - set_velocity(self, 0) - self.state = "stand" - set_animation(self, "stand") - else - set_velocity(self, self.run_velocity) - set_animation(self, "walk") - end - - -- jump when walking comes to a halt - if self.jump - and get_velocity(self) <= 0.5 - and self.object:getvelocity().y == 0 then - - do_jump(self) - end - - -- attack routines (explode, dogfight, shoot, dogshoot) - elseif self.state == "attack" then - - -- calculate distance from mob and enemy - local s = self.object:getpos() - local p = self.attack:getpos() or s - local dist = get_distance(p, s) - - -- stop attacking if player or out of range - if (dist > self.view_range - or not self.attack - or not self.attack:getpos() - or self.attack:get_hp() <= 0) and not self.exploding then -- MFF - - --print(" ** stop attacking **", dist, self.view_range) - self.state = "stand" - set_velocity(self, 0) - set_animation(self, "stand") - self.attack = nil - self.v_start = false - self.timer = 0 - self.blinktimer = 0 - - return - end - - if self.attack_type == "explode" then - - local vec = { - x = p.x - s.x, - y = p.y - s.y, - z = p.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - yaw = atan(vec.z / vec.x) + pi / 2 - self.rotate - - if p.x > s.x then - yaw = yaw + pi - end - - self.object:setyaw(yaw) - end - - if dist > self.reach and not self.exploding then - - if not self.v_start then - - self.v_start = true - set_velocity(self, self.run_velocity) - self.timer = 0 - self.blinktimer = 0 - else - self.timer = 0 - self.blinktimer = 0 - - if get_velocity(self) <= 0.5 - and self.object:getvelocity().y == 0 then - - local v = self.object:getvelocity() - v.y = 5 - self.object:setvelocity(v) - end - - set_velocity(self, self.run_velocity) - end - - set_animation(self, "run") - else -- MFF(Mg|06/10/2016) #509 - self.exploding = true --MFF - set_velocity(self, 0) - self.timer = self.timer + dtime - self.blinktimer = (self.blinktimer or 0) + dtime - - if self.blinktimer > 0.2 then - - self.blinktimer = 0 - - if self.blinkstatus then - self.object:settexturemod("") - else - self.object:settexturemod("^[brighten") - end - - self.blinkstatus = not self.blinkstatus - end - - if self.timer > 3 then - - local pos = self.object:getpos() - - -- hurt player/mobs caught in blast area - entity_physics(pos, 3, self) --/MFF (Crabman|06/23/2015)add self to use punch function - - -- dont damage anything if area protected or next to water - if minetest.find_node_near(pos, 1, {"group:water"}) - or minetest.is_protected(pos, "") then - - if self.sounds.explode then - - minetest.sound_play(self.sounds.explode, { - object = self.object, - gain = 1.0, - max_hear_distance = 16 - }) - end - - self.object:remove() - - effect(pos, 15, "tnt_smoke.png", 5) - - return - end - - pos.y = pos.y - 1 - - mobs:explosion(pos, 2, 0, 1, self.sounds.explode) - - self.object:remove() - - return - end - end - - elseif self.attack_type == "dogfight" - or (self.attack_type == "dogshoot" and dist <= self.reach) then - - if self.fly - and dist > self.reach then - - local nod = node_ok(s) - local p1 = s - local me_y = math.floor(p1.y) - local p2 = p - local p_y = math.floor(p2.y + 1) - local v = self.object:getvelocity() - - if nod.name == self.fly_in then - - if me_y < p_y then - - self.object:setvelocity({ - x = v.x, - y = 1 * self.walk_velocity, - z = v.z - }) - - elseif me_y > p_y then - - self.object:setvelocity({ - x = v.x, - y = -1 * self.walk_velocity, - z = v.z - }) - end - else - if me_y < p_y then - - self.object:setvelocity({ - x = v.x, - y = 0.01, - z = v.z - }) - - elseif me_y > p_y then - - self.object:setvelocity({ - x = v.x, - y = -0.01, - z = v.z - }) - end - end - - end - - -- rnd: new movement direction - if self.path.following - and self.path.way - and self.attack_type ~= "dogshoot" then - - -- no paths longer than 50 - if #self.path.way > 50 - or dist < self.reach then - self.path.following = false - return - end - - local p1 = self.path.way[1] - - if not p1 then - self.path.following = false - return - end - - if math.abs(p1.x-s.x) + math.abs(p1.z - s.z) < 0.6 then - -- reached waypoint, remove it from queue - table.remove(self.path.way, 1) - end - - -- set new temporary target - p = {x = p1.x, y = p1.y, z = p1.z} - end - - local vec = { - x = p.x - s.x, - y = p.y - s.y, - z = p.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then - yaw = yaw + pi - end - - self.object:setyaw(yaw) - end - - -- move towards enemy if beyond mob reach - if dist > self.reach then - - -- path finding by rnd - if self.pathfinding -- only if mob has pathfinding enabled - and enable_pathfinding then - - smart_mobs(self, s, p, dist, dtime) - end - - -- jump attack - if (self.jump - and get_velocity(self) <= 0.5 - and self.object:getvelocity().y == 0) - or (self.object:getvelocity().y == 0 - and self.jump_chance > 0) then - - do_jump(self) - end - - if is_at_cliff(self) then - - set_velocity(self, 0) - set_animation(self, "stand") - else - - if self.path.stuck then - set_velocity(self, self.walk_velocity) - else - set_velocity(self, self.run_velocity) - end - - set_animation(self, "run") - end - - else -- rnd: if inside reach range - - self.path.stuck = false - self.path.stuck_timer = 0 - self.path.following = false -- not stuck anymore - - set_velocity(self, 0) - set_animation(self, "punch") - - if self.timer > 1 then - - self.timer = 0 - - local p2 = p - local s2 = s - - p2.y = p2.y + 1.5 - s2.y = s2.y + 1.5 - - --if minetest.line_of_sight(p2, s2) == true then - if line_of_sight_water(self, p2, s2) == true then - - -- play attack sound - if self.sounds.attack then - - minetest.sound_play(self.sounds.attack, { - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - - -- punch player - self.attack:punch(self.object, 1.0, { - full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} - }, nil) - end - end - end - - elseif self.attack_type == "shoot" - or (self.attack_type == "dogshoot" and dist > self.reach) then - - p.y = p.y - .5 - s.y = s.y + .5 - - local dist = get_distance(p, s) - local vec = { - x = p.x - s.x, - y = p.y - s.y, - z = p.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate - - if p.x > s.x then - yaw = yaw + pi - end - - self.object:setyaw(yaw) - end - - set_velocity(self, 0) - - if self.shoot_interval - and self.timer > self.shoot_interval - and math.random(1, 100) <= 60 then - - self.timer = 0 - set_animation(self, "punch") - - -- play shoot attack sound - if self.sounds.shoot_attack then - - minetest.sound_play(self.sounds.shoot_attack, { - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - - local p = self.object:getpos() - - p.y = p.y + (self.collisionbox[2] + self.collisionbox[5]) / 2 - - local obj = minetest.add_entity(p, self.arrow) - local ent = obj:get_luaentity() - local amount = (vec.x * vec.x + vec.y * vec.y + vec.z * vec.z) ^ 0.5 - local v = ent.velocity - ent.switch = 1 - - -- offset makes shoot aim accurate - vec.y = vec.y + self.shoot_offset - vec.x = vec.x * v / amount - vec.y = vec.y * v / amount - vec.z = vec.z * v / amount - - obj:setvelocity(vec) - end - end - - end -- END if self.state == "attack" - end, - - on_punch = function(self, hitter, tflp, tool_capabilities, dir) - - -- direction error check - dir = dir or {x = 0, y = 0, z = 0} - - -- weapon wear - local attach = hitter:get_attach() - if attach and attach:get_luaentity() then - local luaentity = attach:get_luaentity() - if luaentity.driver then - luaentity.driver = nil - end - hitter:set_detach() --MFF (crabman|27/7/2015) anti usebug, immortal if attached - end - local weapon = hitter:get_wielded_item() - local punch_interval = 1.4 - - if tool_capabilities then - punch_interval = tool_capabilities.full_punch_interval or 1.4 - end - - if weapon:get_definition() - and weapon:get_definition().tool_capabilities then - - weapon:add_wear(math.floor((punch_interval / 75) * 9000)) - hitter:set_wielded_item(weapon) - end - - -- weapon sounds - if weapon:get_definition().sounds ~= nil then - - local s = math.random(0, #weapon:get_definition().sounds) - - minetest.sound_play(weapon:get_definition().sounds[s], { - object = hitter, - max_hear_distance = 8 - }) - else - minetest.sound_play("default_punch", { - object = hitter, - max_hear_distance = 5 - }) - end - - -- exit here if dead - if check_for_death(self) then - return - end - - -- blood_particles - if self.blood_amount > 0 - and not disable_blood then - - local pos = self.object:getpos() - - pos.y = pos.y + (-self.collisionbox[2] + self.collisionbox[5]) / 2 - - effect(pos, self.blood_amount, self.blood_texture) - end - - -- knock back effect - if self.knock_back > 0 then - - local v = self.object:getvelocity() - local r = 1.4 - math.min(punch_interval, 1.4) - local kb = r * 5 - local up = 2 - - -- if already in air then dont go up anymore when hit - if v.y > 0 - or self.fly then - up = 0 - end - - self.object:setvelocity({ - x = dir.x * kb, - y = up, - z = dir.z * kb - }) - - self.pause_timer = r - end - - -- if skittish then run away - if self.runaway == true then - - local lp = hitter:getpos() - local s = self.object:getpos() - - local vec = { - x = lp.x - s.x, - y = lp.y - s.y, - z = lp.z - s.z - } - - if vec.x ~= 0 - and vec.z ~= 0 then - - local yaw = atan(vec.z / vec.x) + 3 * pi / 2 - self.rotate - - if lp.x > s.x then - yaw = yaw + pi - end - - self.object:setyaw(yaw) - end - - self.state = "runaway" - self.runaway_timer = 0 - self.following = nil - end - - -- attack puncher and call other mobs for help - if self.passive == false - and self.state ~= "flop" - and self.child == false - and hitter:get_player_name() ~= self.owner then - - -- attack whoever punched mob - self.state = "" - do_attack(self, hitter) - - -- alert others to the attack - local obj = nil - - for _, oir in pairs(minetest.get_objects_inside_radius(hitter:getpos(), 5)) do - - obj = oir:get_luaentity() - - if obj then - - if obj.group_attack == true - and obj.state ~= "attack" then - do_attack(obj, hitter) - end - end - end - end - end, - - on_activate = function(self, staticdata, dtime_s) - - -- remove monsters in peaceful mode, or when no data - if (self.type == "monster" and peaceful_only) - or not staticdata then - - self.object:remove() - - return - end - - -- load entity variables - local tmp = minetest.deserialize(staticdata) - - if tmp then - - for _,stat in pairs(tmp) do - self[_] = stat - end - end - - -- select random texture, set model and size - if not self.base_texture then - - self.base_texture = def.textures[math.random(1, #def.textures)] - self.base_mesh = def.mesh - self.base_size = self.visual_size - self.base_colbox = self.collisionbox - end - - -- set texture, model and size - local textures = self.base_texture - local mesh = self.base_mesh - local vis_size = self.base_size - local colbox = self.base_colbox - - -- specific texture if gotten - if self.gotten == true - and def.gotten_texture then - textures = def.gotten_texture - end - - -- specific mesh if gotten - if self.gotten == true - and def.gotten_mesh then - mesh = def.gotten_mesh - end - - -- set child objects to half size - if self.child == true then - - vis_size = { - x = self.base_size.x / 2, - y = self.base_size.y / 2 - } - - if def.child_texture then - textures = def.child_texture[1] - end - - colbox = { - self.base_colbox[1] / 2, - self.base_colbox[2] / 2, - self.base_colbox[3] / 2, - self.base_colbox[4] / 2, - self.base_colbox[5] / 2, - self.base_colbox[6] / 2 - } - end - - if self.health == 0 then - self.health = math.random (self.hp_min, self.hp_max) - end - - -- rnd: pathfinding init - self.path = {} - self.path.way = {} -- path to follow, table of positions - self.path.lastpos = {x = 0, y = 0, z = 0} - self.path.stuck = false - self.path.following = false -- currently following path? - self.path.stuck_timer = 0 -- if stuck for too long search for path - -- end init - - self.object:set_hp(self.health) - self.object:set_armor_groups({fleshy = self.armor}) - self.old_y = self.object:getpos().y - self.object:setyaw((math.random(0, 360) - 180) / 180 * pi) - self.sounds.distance = self.sounds.distance or 10 - self.textures = textures - self.mesh = mesh - self.collisionbox = colbox - self.visual_size = vis_size - self.standing_in = "" - - -- set anything changed above - self.object:set_properties(self) - update_tag(self) - end, - - get_staticdata = function(self) - - -- remove mob when out of range unless tamed - if remove_far - and self.remove_ok - and not self.tamed then - - --print ("REMOVED " .. self.name) - - self.object:remove() - - return nil - end - - self.remove_ok = true - self.attack = nil - self.following = nil - self.state = "stand" - - -- used to rotate older mobs - if self.drawtype - and self.drawtype == "side" then - self.rotate = math.rad(90) - end - - local tmp = {} - - for _,stat in pairs(self) do - - local t = type(stat) - - if t ~= 'function' - and t ~= 'nil' - and t ~= 'userdata' then - tmp[_] = self[_] - end - end - - -- print('===== '..self.name..'\n'.. dump(tmp)..'\n=====\n') - return minetest.serialize(tmp) - end, - -}) - -end -- END mobs:register_mob function - --- global functions - -mobs.spawning_mobs = {} - -function mobs:spawn_special(name, nodes, neighbors, interval, chance, active_object_count) -- MFF to special mobs - mobs.spawning_mobs[name] = true - -- chance override in minetest.conf for registered mob - local new_chance = tonumber(minetest.setting_get(name .. "_chance")) - if new_chance ~= nil then - if new_chance == 0 then - return - end - chance = new_chance - end - - minetest.register_abm({ - nodenames = nodes, - neighbors = neighbors, - interval = interval, - chance = chance, - action = function(pos, node, _, active_object_count_wider) - -- do not spawn if too many active entities in area - local count = 0 - local objs = minetest.get_objects_inside_radius(pos, 60) - for k, obj in pairs(objs) do - if obj:get_luaentity() ~= nil and obj:get_luaentity().name == name then - count = count + 1 - end - end - if count > active_object_count then - return - end - -- spawn above node - pos.y = pos.y + 1 - -- only spawn away from player - local objs = minetest.get_objects_inside_radius(pos, 10) - for _,oir in pairs(objs) do - if oir:is_player() then - return - end - end - - -- are we spawning inside solid nodes? - if minetest.registered_nodes[node_ok(pos).name].walkable == true then - return - end - - pos.y = pos.y + 1 - if minetest.registered_nodes[node_ok(pos).name].walkable == true then - return - end - - -- spawn mob half block higher than ground - pos.y = pos.y - 0.5 - minetest.add_entity(pos, name) - end - }) -end - - -function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, - interval, chance, active_object_count, min_height, max_height, spawn_in_area, day_toggle) --MFF crabman "spawn_in_area" - - mobs.spawning_mobs[name] = true - - -- chance override in minetest.conf for registered mob - local new_chance = tonumber(minetest.setting_get(name .. "_chance")) - - if new_chance ~= nil then - - if new_chance == 0 then - --print("[Mobs Redo] " .. name .. " has spawning disabled") - return - end - - chance = new_chance - - print ("[Mobs Redo] Chance setting for " .. name .. " is now " .. chance) - - end - - minetest.register_abm({ - - nodenames = nodes, - neighbors = neighbors, - interval = interval, - chance = chance, - - action = function(pos, node, _, active_object_count_wider) - - -- do not spawn if too many active entities in area - if active_object_count_wider > active_object_count - or not mobs.spawning_mobs[name] - or not pos then --MFF fix crash - return - end - - -- if toggle set to nil then ignore day/night check - if day_toggle ~= nil then - - local tod = (minetest.get_timeofday() or 0) * 24000 - - if tod > 4500 and tod < 19500 then - -- daylight, but mob wants night - if day_toggle == false then - return - end - else - -- night time but mob wants day - if day_toggle == true then - return - end - end - end - - -- spawn above node - pos.y = pos.y + 1 - - -- only spawn away from player - local objs = minetest.get_objects_inside_radius(pos, 10) - - for _,oir in pairs(objs) do - - if oir:is_player() then - return - end - end - - -- mobs cannot spawn in protected areas when enabled - if spawn_protected == 1 - and minetest.is_protected(pos, "") - and not spawn_in_area then --MFF crabman - return - end - - -- check if light and height levels are ok to spawn - local light = minetest.get_node_light(pos) - if not light - or light > max_light - or light < min_light - or pos.y > max_height - or pos.y < min_height then - return - end - - -- are we spawning inside solid nodes? - if minetest.registered_nodes[node_ok(pos).name].walkable == true then - return - end - - pos.y = pos.y + 1 - - if minetest.registered_nodes[node_ok(pos).name].walkable == true then - return - end - - -- spawn mob half block higher than ground - pos.y = pos.y - 0.5 - - local mob = minetest.add_entity(pos, name) - - if mob and mob:get_luaentity() then --- print ("[mobs] Spawned " .. name .. " at " --- .. minetest.pos_to_string(pos) .. " on " --- .. node.name .. " near " .. neighbors[1]) - else - print ("[mobs]" .. name .. " failed to spawn at " - .. minetest.pos_to_string(pos)) - end - - end - }) -end - --- compatibility with older mob registration -function mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height, spawn_in_area, day_toggle) - - mobs:spawn_specific(name, nodes, {"air"}, min_light, max_light, 30, - chance, active_object_count, -31000, max_height, spawn_in_area, day_toggle) -end - --- set content id's -local c_air = minetest.get_content_id("air") -local c_ignore = minetest.get_content_id("ignore") -local c_obsidian = minetest.get_content_id("default:obsidian") -local c_brick = minetest.get_content_id("default:obsidianbrick") -local c_chest = minetest.get_content_id("default:chest_locked") - --- explosion (cannot break protected or unbreakable nodes) -function mobs:explosion(pos, radius, fire, smoke, sound) - - radius = radius or 0 - fire = fire or 0 - smoke = smoke or 0 - - -- if area protected or near map limits then no blast damage - if minetest.is_protected(pos, "") - or not within_limits(pos, radius) then - return - end - - -- explosion sound - if sound - and sound ~= "" then - - minetest.sound_play(sound, { - pos = pos, - gain = 1.0, - max_hear_distance = 16 - }) - end - - pos = vector.round(pos) -- voxelmanip doesn't work properly unless pos is rounded ?!?! - - local vm = VoxelManip() - local minp, maxp = vm:read_from_map(vector.subtract(pos, radius), vector.add(pos, radius)) - local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) - local data = vm:get_data() - local p = {} - local pr = PseudoRandom(os.time()) - - for z = -radius, radius do - for y = -radius, radius do - local vi = a:index(pos.x + (-radius), pos.y + y, pos.z + z) - for x = -radius, radius do - - p.x = pos.x + x - p.y = pos.y + y - p.z = pos.z + z - - if p.y >= -19600 --MFF - and(x * x) + (y * y) + (z * z) <= (radius * radius) + pr:next(-radius, radius) - and data[vi] ~= c_air - and data[vi] ~= c_ignore - and data[vi] ~= c_obsidian - and data[vi] ~= c_brick - and data[vi] ~= c_chest then - - local n = node_ok(p).name - local on_blast = minetest.registered_nodes[n].on_blast - - if on_blast then - return on_blast(p) - end - - if not minetest.is_protected(p, "") --/MFF (Crabman|06/23/2015) re-added node protected in areas - and minetest.get_item_group(n, "unbreakable") ~= 1 - and minetest.get_item_group(n, "nether") == 0 then - - -- if chest then drop items inside - if n == "default:chest" - or n == "3dchest:chest" - or n == "bones:bones" then - - local meta = minetest.get_meta(p) - local inv = meta:get_inventory() - - for i = 1, inv:get_size("main") do - - local m_stack = inv:get_stack("main", i) - local obj = minetest.add_item(p, m_stack) - - if obj then - - obj:setvelocity({ - x = math.random(-2, 2), - y = 7, - z = math.random(-2, 2) - }) - end - end - end - - -- after effects - if fire > 0 - and (minetest.registered_nodes[n].groups.flammable - or math.random(1, 100) <= 30) then - - minetest.set_node(p, {name = "fire:basic_flame"}) - else - minetest.set_node(p, {name = "air"}) - - if smoke > 0 then - effect(p, 2, "tnt_smoke.png", 5) - end - end - end - end - - vi = vi + 1 - - end - end - end -end - --- register arrow for shoot attack -function mobs:register_arrow(name, def) - - if not name or not def then return end -- errorcheck - - minetest.register_entity(name, { - - physical = false, - visual = def.visual, - visual_size = def.visual_size, - textures = def.textures, - velocity = def.velocity, - hit_player = def.hit_player, - hit_node = def.hit_node, - hit_mob = def.hit_mob, - drop = def.drop or false, - collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows - timer = 0, - switch = 0, - - on_step = function(self, dtime) - - self.timer = self.timer + 1 - - local pos = self.object:getpos() - - if self.switch == 0 - or self.timer > 150 - or not within_limits(pos, 0) then - - self.object:remove() ; -- print ("removed arrow") - - return - end - - if self.hit_node then - - local node = node_ok(pos).name - - --if minetest.registered_nodes[node].walkable then - if node ~= "air" then - - self.hit_node(self, pos, node) - - if self.drop == true then - - pos.y = pos.y + 1 - - self.lastpos = (self.lastpos or pos) - - minetest.add_item(self.lastpos, self.object:get_luaentity().name) - end - - self.object:remove() ; -- print ("hit node") - - return - end - end - - if (self.hit_player or self.hit_mob) - -- clear mob entity before arrow becomes active - and self.timer > (10 - (self.velocity / 2)) then - - for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.0)) do - - if self.hit_player - and player:is_player() then - - self.hit_player(self, player) - self.object:remove() ; -- print ("hit player") - return - end - - if self.hit_mob - and player:get_luaentity() - and player:get_luaentity().name ~= self.object:get_luaentity().name - and player:get_luaentity().name ~= "__builtin:item" - and player:get_luaentity().name ~= "gauges:hp_bar" - and player:get_luaentity().name ~= "signs:text" - and player:get_luaentity().name ~= "itemframes:item" then - - self.hit_mob(self, player) - - self.object:remove() ; -- print ("hit mob") - - return - end - end - end - - self.lastpos = pos - end - }) -end - --- Spawn Egg -function mobs:register_egg(mob, desc, background, addegg) - - local invimg = background - - if addegg == 1 then - invimg = invimg .. "^mobs_egg_inv.png" -- MFF - end - - minetest.register_craftitem(mob, { - - description = desc, - inventory_image = invimg, - - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - - if pos - and within_limits(pos, 0) - and not minetest.is_protected(pos, placer:get_player_name()) then - - pos.y = pos.y + 1 - - local mob = minetest.add_entity(pos, mob) - local ent = mob:get_luaentity() - - if ent.type ~= "monster" then - -- set owner and tame if not monster - ent.owner = placer:get_player_name() - ent.tamed = true - end - - -- if not in creative then take item - if not creative then - itemstack:take_item() - end - end - - return itemstack - end, - }) -end - --- capture critter (thanks to blert2112 for idea) -function mobs:capture_mob(self, clicker, chance_hand, chance_net, chance_lasso, force_take, replacewith) - - if not self.child - and clicker:is_player() - and clicker:get_inventory() then - - -- get name of clicked mob - local mobname = self.name - - -- if not nil change what will be added to inventory - if replacewith then - mobname = replacewith - end - - local name = clicker:get_player_name() - - -- is mob tamed? - if self.tamed == false - and force_take == false then - - minetest.chat_send_player(name, "Not tamed!") - - return - end - - -- cannot pick up if not owner - if self.owner ~= name - and force_take == false then - - minetest.chat_send_player(name, self.owner.." is owner!") - - return - end - - if clicker:get_inventory():room_for_item("main", mobname) then - - -- was mob clicked with hand, net, or lasso? - local tool = clicker:get_wielded_item() - local chance = 0 - - if tool:is_empty() then - chance = chance_hand - - elseif tool:get_name() == "mobs:net" then - - chance = chance_net - - tool:add_wear(4000) -- 17 uses - - clicker:set_wielded_item(tool) - - elseif tool:get_name() == "mobs:magic_lasso" then - - chance = chance_lasso - - tool:add_wear(650) -- 100 uses - - clicker:set_wielded_item(tool) - end - - -- return if no chance - if chance == 0 then return end - - -- calculate chance.. add to inventory if successful? - if math.random(1, 100) <= chance then - - clicker:get_inventory():add_item("main", mobname) - - self.object:remove() - else - minetest.chat_send_player(name, "Missed!") - end - end - end -end - -local mob_obj = {} -local mob_sta = {} - --- feeding, taming and breeding (thanks blert2112) -function mobs:feed_tame(self, clicker, feed_count, breed, tame) - - if not self.follow then - return false - end - - -- can eat/tame with item in hand - if follow_holding(self, clicker) then - - -- if not in creative then take item - if not creative then - - local item = clicker:get_wielded_item() - - item:take_item() - - clicker:set_wielded_item(item) - end - - -- increase health - self.health = self.health + 4 - - if self.health >= self.hp_max then - - self.health = self.hp_max - - if self.htimer < 1 then - - minetest.chat_send_player(clicker:get_player_name(), - self.name:split(":")[2] - .. " at full health (" .. tostring(self.health) .. ")") - - self.htimer = 5 - end - end - - self.object:set_hp(self.health) - - update_tag(self) - - -- make children grow quicker - if self.child == true then - - self.hornytimer = self.hornytimer + 20 - - return true - end - - -- feed and tame - self.food = (self.food or 0) + 1 - if self.food >= feed_count then - - self.food = 0 - - if breed and self.hornytimer == 0 then - self.horny = true - end - - self.gotten = false - - if tame then - - if self.tamed == false then - minetest.chat_send_player(clicker:get_player_name(), - self.name:split(":")[2] - .. " has been tamed!") - end - - self.tamed = true - - if not self.owner or self.owner == "" then - self.owner = clicker:get_player_name() - end - end - - -- make sound when fed so many times - if self.sounds.random then - - minetest.sound_play(self.sounds.random, { - object = self.object, - max_hear_distance = self.sounds.distance - }) - end - end - - return true - end - - local item = clicker:get_wielded_item() - - -- if mob has been tamed you can name it with a nametag - if item:get_name() == "mobs:nametag" - and clicker:get_player_name() == self.owner then - - local name = clicker:get_player_name() - - -- store mob and nametag stack in external variables - mob_obj[name] = self - mob_sta[name] = item - - local tag = self.nametag or "" - - local formspec = "size[8,4]" - .. default.gui_bg - .. default.gui_bg_img - .. "field[0.5,1;7.5,0;name;Enter name:;" .. tag .. "]" - .. "button_exit[2.5,3.5;3,1;mob_rename;Rename]" - minetest.show_formspec(name, "mobs_nametag", formspec) - end - - return false - -end - --- inspired by blockmen's nametag mod -minetest.register_on_player_receive_fields(function(player, formname, fields) - - -- right-clicked with nametag and name entered? - if formname == "mobs_nametag" - and fields.name - and fields.name ~= "" then - - local name = player:get_player_name() - - if not mob_obj[name] - or not mob_obj[name].object then - return - end - - -- update nametag - mob_obj[name].nametag = fields.name - - update_tag(mob_obj[name]) - - -- if not in creative then take item - if not creative then - - mob_sta[name]:take_item() - - player:set_wielded_item(mob_sta[name]) - end - - -- reset external variables - mob_obj[name] = nil - mob_sta[name] = nil - - end -end) diff --git a/mods/mobs/bunny.lua b/mods/mobs/bunny.lua deleted file mode 100755 index 7feb2b83..00000000 --- a/mods/mobs/bunny.lua +++ /dev/null @@ -1,93 +0,0 @@ - --- Bunny by ExeterDad - -mobs:register_mob("mobs:bunny", { - -- animal, monster, npc - type = "animal", - -- is it aggressive - passive = true, - reach = 1, - -- health & armor - hp_min = 3, - hp_max = 6, - armor = 200, - -- textures and model - collisionbox = {-0.268, -0.5, -0.268, 0.268, 0.167, 0.268}, - visual = "mesh", - mesh = "mobs_bunny.b3d", - drawtype = "front", - textures = { - {"mobs_bunny_grey.png"}, - {"mobs_bunny_brown.png"}, - {"mobs_bunny_white.png"}, - }, - -- sounds - sounds = {}, - makes_footstep_sound = false, - -- speed and jump - walk_velocity = 1, - run_velocity = 2, - runaway = true, - jump = true, - -- drops meat when dead - drops = { - {name = "mobs:meat_raw", chance = 1, min = 1, max = 2}, - }, - -- damaged by - water_damage = 1, - lava_damage = 4, - light_damage = 0, - fear_height = 2, - -- model animation - animation = { - speed_normal = 15, - stand_start = 1, - stand_end = 15, - walk_start = 16, - walk_end = 24, - punch_start = 16, - punch_end = 24, - }, - -- follows carrot from farming redo - follow = {"farming:carrot", "farming_plus:carrot_item"}, - view_range = 8, - -- eat carrots - replace_rate = 10, - replace_what = {"farming:carrot_7", "farming:carrot_8", "farming_plus:carrot"}, - replace_with = "air", - -- right click to pick up rabbit - on_rightclick = function(self, clicker) - - -- feed or tame - if mobs:feed_tame(self, clicker, 4, true, true) then - return - end - - -- Monty Python tribute - local item = clicker:get_wielded_item() - - if item:get_name() == "mobs:lava_orb" then - - if not minetest.setting_getbool("creative_mode") then - item:take_item() - clicker:set_wielded_item(item) - end - - self.object:set_properties({ - textures = {"mobs_bunny_evil.png"}, - }) - - self.type = "monster" - self.object:set_hp(20) - - return - end - - mobs:capture_mob(self, clicker, 30, 50, 80, false, nil) - end, - - attack_type = "dogfight", - damage = 5, -}) -mobs:spawn_specific("mobs:bunny", {"default:dirt_with_grass"}, {"air"}, 8, 20, 30, 15000, 2, -31000, 31000, true, true) -mobs:register_egg("mobs:bunny", "Bunny", "mobs_bunny_inv.png", 1) diff --git a/mods/mobs/crafts.lua b/mods/mobs/crafts.lua deleted file mode 100755 index bc8582cc..00000000 --- a/mods/mobs/crafts.lua +++ /dev/null @@ -1,82 +0,0 @@ --- nametag -minetest.register_craftitem("mobs:nametag", { - description = "Nametag", - inventory_image = "mobs_nametag.png", -}) - -core.register_craft({ - type = "shapeless", - output = "mobs:nametag", - recipe = {"default:paper", "dye:black", "farming:string"}, -}) - --- leather -minetest.register_craftitem("mobs:leather", { - description = "Leather", - inventory_image = "mobs_leather.png", -}) - --- raw meat -minetest.register_craftitem("mobs:meat_raw", { - description = "Raw Meat", - inventory_image = "mobs_meat_raw.png", - on_use = minetest.item_eat(3), -}) - --- cooked meat -minetest.register_craftitem("mobs:meat", { - description = "Meat", - inventory_image = "mobs_meat.png", - on_use = minetest.item_eat(8), -}) - -minetest.register_craft({ - type = "cooking", - output = "mobs:meat", - recipe = "mobs:meat_raw", - cooktime = 5, -}) - --- golden lasso -minetest.register_tool("mobs:magic_lasso", { - description = "Magic Lasso (right-click animal to put in inventory)", - inventory_image = "mobs_magic_lasso.png", -}) - -minetest.register_craft({ - output = "mobs:magic_lasso", - recipe = { - {"farming:string", "default:gold_lump", "farming:string"}, - {"default:gold_lump", "default:diamondblock", "default:gold_lump"}, - {"farming:string", "default:gold_lump", "farming:string"}, - } -}) - --- net -minetest.register_tool("mobs:net", { - description = "Net (right-click animal to put in inventory)", - inventory_image = "mobs_net.png", -}) - -minetest.register_craft({ - output = "mobs:net", - recipe = { - {"default:stick", "", "default:stick"}, - {"default:stick", "", "default:stick"}, - {"farming:string", "default:stick", "farming:string"}, - } -}) - --- shears (right click to shear animal) -minetest.register_tool("mobs:shears", { - description = "Steel Shears (right-click to shear)", - inventory_image = "mobs_shears.png", -}) - -minetest.register_craft({ - output = 'mobs:shears', - recipe = { - {'', 'default:steel_ingot', ''}, - {'', 'group:stick', 'default:steel_ingot'}, - } -}) \ No newline at end of file diff --git a/mods/mobs/creeper.lua b/mods/mobs/creeper.lua deleted file mode 100755 index 6766f133..00000000 --- a/mods/mobs/creeper.lua +++ /dev/null @@ -1,62 +0,0 @@ - --- Creeper by Davedevils (from his subgame MineClone) - -mobs:register_mob("mobs:creeper", { - -- animal, monster, npc, barbarian - type = "monster", - -- agressive, does 21 damage to player when explode - passive = false, - attack_type = "explode", - pathfinding = false, - damage = 21, - -- health & armor - hp_min = 30, hp_max = 40, armor = 100, - -- textures and model - collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, - visual = "mesh", - mesh = "mobs_tree_monster.b3d", - drawtype = "front", - textures = { - {"mobs_creeper.png"}, - }, - blood_texture = "mobs_creeper_inv.png", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_treemonster", - explode= "tnt_explode", - }, - -- speed and jump - walk_velocity = 1, - run_velocity = 2.5, - jump = true, - view_range = 16, - -- drops mese or diamond when dead - drops = { - {name = "default:torch", - chance = 10, min = 3, max = 5,}, - {name = "default:iron_lump", - chance = 5, min = 1, max = 2,}, - {name = "default:coal_lump", - chance = 3, min = 1, max = 3,}, - }, - -- damaged by - water_damage = 2, - lava_damage = 15, - light_damage = 0, - -- model animation - animation = { - stand_start = 0, - stand_end = 24, - walk_start = 25, - walk_end = 47, - run_start = 48, - run_end = 62, - punch_start = 48, - punch_end = 62, - speed_normal = 15, - speed_run = 15, - }, -}) -mobs:spawn_specific("mobs:creeper", {"default:dirt_with_grass"}, {"air"}, 8, 20, 30, 25000, 1, -31000, 31000, false) -mobs:register_egg("mobs:creeper", "Creeper", "mobs_creeper_inv.png", 1) diff --git a/mods/mobs/dirtmonster.lua b/mods/mobs/dirtmonster.lua deleted file mode 100755 index 36b242cf..00000000 --- a/mods/mobs/dirtmonster.lua +++ /dev/null @@ -1,72 +0,0 @@ - --- Dirt Monster by PilzAdam - -mobs:register_mob("mobs:dirt_monster", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 6 damage to player when hit - passive = false, - attack_type = "dogfight", - pathfinding = false, - reach = 2, - damage = 5, - -- health & armor - hp_min = 25, - hp_max = 30, - armor = 100, - -- textures and model - collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, - visual = "mesh", - mesh = "mobs_stone_monster.b3d", - textures = { - {"mobs_dirt_monster.png"}, - }, - blood_texture = "default_dirt.png", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_dirtmonster", - }, - -- speed and jump - view_range = 16, - walk_velocity = 1.5, - run_velocity = 3, - jump = true, - -- drops dirt and coins when dead - drops = { - {name = "default:dirt", chance = 1, min = 3, max = 5,}, - {name = "maptools:silver_coin", chance = 2, min = 1, max = 1,}, - }, - -- damaged by - water_damage = 1, - lava_damage = 5, - light_damage = 2, - fear_height = 4, - -- model animation - animation = { - speed_normal = 15, - speed_run = 15, - stand_start = 0, - stand_end = 14, - walk_start = 15, - walk_end = 38, - run_start = 40, - run_end = 63, - punch_start = 40, - punch_end = 63, - }, -}) - --- spawn on dirt_with_grass and drygrass between -1 and 5 light, 1 in 12500 change, 1 dirt monster in area up to 31000 in height -mobs:spawn_specific("mobs:dirt_monster", {"default:dirt_with_grass", "default:dirt_with_dry_grass"}, {"air"}, -1, 5, 30, 12500, 1, -31000, 31000, false, false) --- register spawn egg -mobs:register_egg("mobs:dirt_monster", "Dirt Monster", "mobs_dirt_monster_inv.png", 1) - -minetest.register_craft({ - output = "mobs:dirt_monster", - recipe = { - {"default:dirt", "default:dirt", "default:dirt"}, - {"default:dirt", "default:nyancat_rainbow", "default:dirt"}, - {"default:dirt", "default:dirt", "default:dirt"} - } -}) diff --git a/mods/mobs/dog.lua b/mods/mobs/dog.lua deleted file mode 100755 index 82a49f75..00000000 --- a/mods/mobs/dog.lua +++ /dev/null @@ -1,89 +0,0 @@ - --- Dog - -mobs:register_mob("mobs:dog", { - -- animal, monster, npc, barbarian - type = "npc", - -- agressive, does 4 damage to player when hit - passive = false, - attacks_monsters = true, - attack_type = "dogfight", - damage = 2, -- 1 damage less than wolf - -- health & armor - hp_min = 15, hp_max = 20, armor = 200, - -- textures and model - collisionbox = {-0.4, -0.01, -0.4, 0.4, 1, 0.4}, - visual = "mesh", - mesh = "mobs_wolf.x", - drawtype = "front", - textures = { - {"mobs_dog.png"}, - }, - --visual_size = {x=1,y=1}, --Quel valeur lui mettre ? - blood_texture = "mobs_blood.png", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_wolf", - war_cry = "mobs_wolf_attack", - }, - -- speed and jump - walk_velocity = 2, - run_velocity = 4, - jump = true, - stepheight = 1.2, - step = 1.2, - view_range = 16, - drops = { - {name = "mobs:meat_raw", chance = 1, min = 2, max = 3,}, - }, - -- damaged by - water_damage = 0, - lava_damage = 5, - light_damage = 0, - -- Special for pet - owner = "", - order = "follow", - - on_rightclick = function(self, clicker) - local item = clicker:get_wielded_item() - local name = clicker:get_player_name() - if not name then return end - if item:get_name() == "mobs:meat_raw" then - local hp = self.object:get_hp() - -- return if full health - if hp >= self.hp_max then - minetest.chat_send_player(name, "Dog at full health.") - return - end - hp = hp + 4 -- add restorative value - -- new health shouldn't exceed self.hp_max - if hp > self.hp_max then hp = self.hp_max end - self.object:set_hp(hp) - -- Take item - if not minetest.setting_getbool("creative_mode") then - item:take_item() - clicker:set_wielded_item(item) - end - else - if self.owner == "" then - self.owner = clicker:get_player_name() - else - if self.order == "follow" then - self.order = "stand" - else - self.order = "follow" - end - end - end - end, - -- model animation - animation = { - stand_start = 0, stand_end = 14, - walk_start = 15, walk_end = 38, - run_start = 40, run_end = 63, - punch_start = 40, punch_end = 63, - speed_normal = 15, speed_run = 15, - }, -}) -mobs:register_egg("mobs:dog", "Dog", "mobs_dog_inv.png", 1) diff --git a/mods/mobs/dungeonmaster.lua b/mods/mobs/dungeonmaster.lua deleted file mode 100755 index b1c3d9ab..00000000 --- a/mods/mobs/dungeonmaster.lua +++ /dev/null @@ -1,113 +0,0 @@ - --- Dungeon Master by PilzAdam - - -mobs:register_mob("mobs:dungeon_master", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, shoots fireballs at player, deal 9 damages - passive = false, - pathfinding = false, - damage = 9, - attack_type = "dogshoot", - reach = 3, - shoot_interval = 2.5, - arrow = "mobs:fireball", - shoot_offset = 1, - -- health & armor - hp_min = 30, - hp_max = 40, - armor = 80, - -- textures and model - collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7}, - visual = "mesh", - mesh = "mobs_dungeon_master.b3d", - textures = { - {"mobs_dungeon_master.png"}, - {"mobs_dungeon_master_cobblestone.png"}, - {"mobs_dungeon_master_strangewhite.png"}, - }, - blood_texture = "mobs_blood.png", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_dungeonmaster", - shoot_attack = "mobs_fireball", - }, - -- speed and jump - walk_velocity = 1, - run_velocity = 2, - jump = false, - view_range = 16, - knock_back = 0.05, -- Very small knockback - -- drops mese or diamond when dead - drops = { - {name = "mobs:dungeon_master_blood", chance = 2, min = 1, max = 2,}, - {name = "default:diamond", chance = 4, min = 1, max = 3,}, - {name = "default:mese_crystal", chance = 4, min = 3, max = 6,}, - {name = "mobs:dungeon_master_diamond", chance = 6, min = 1, max = 1,}, - {name = "maptools:gold_coin", chance = 20, min = 1, max = 1,}, - {name = "default:diamondblock", chance = 33, min = 1, max = 1,}, - {name = "runes:scroll_watchdog", chance = 130, min = 1, max = 5}, - }, - -- damaged by - water_damage = 1, - lava_damage = 1, - light_damage = 0, - fear_height = 3, - -- model animation - animation = { - stand_start = 0, - stand_end = 19, - walk_start = 20, - walk_end = 35, - punch_start = 36, - punch_end = 48, - speed_normal = 15, - speed_run = 15, - }, -}) --- spawn on stone between 20 and -1 light, 1 in 10000 chance, 1 dungeon master in area starting at -100 and below -mobs:spawn_specific("mobs:dungeon_master", {"default:stone", "default:sandstone", "nether:netherrack"}, {"air"}, -1, 20, 30, 10000, 1, -31000, -250, false) --- register spawn egg -mobs:register_egg("mobs:dungeon_master", "Dungeon Master", "mobs_dongeon_master_inv.png", 1) - --- fireball (weapon) -mobs:register_arrow("mobs:fireball", { - visual = "sprite", - visual_size = {x = 1, y = 1}, - textures = {"mobs_fireball.png"}, - velocity = 6, - - -- direct hit, no fire... just plenty of pain - hit_player = function(self, player) - player:punch(self.object, 1.0, { -- Mettre à 2.5 aussi ? - full_punch_interval = 2.5, -- Modif MFF - damage_groups = {fleshy = 9}, -- Modif MFF - }, nil) - end, - - hit_mob = function(self, player) - player:punch(self.object, 1.0, { -- Mettre à 2.5 aussi ? - full_punch_interval = 2.5, -- Modif MFF - damage_groups = {fleshy = 9}, -- Modif MFF - }, nil) - end, - - -- node hit, bursts into flame (cannot blast through obsidian or protection redo mod items) - hit_node = function(self, pos, node) - mobs:explosion(pos, 1, 1, 0) - end -}) - -minetest.register_craftitem("mobs:dungeon_master_blood", { - description = "Dungeon Master Blood", - inventory_image = "mobs_dungeon_master_blood.png", - groups = {magic = 1}, -}) - -minetest.register_craftitem("mobs:dungeon_master_diamond", { - description = "Dungeon Master Diamond", - inventory_image = "mobs_dungeon_master_diamond.png", - groups = {magic = 1}, -}) diff --git a/mods/mobs/greenslimes.lua b/mods/mobs/greenslimes.lua deleted file mode 100755 index 96ee2d80..00000000 --- a/mods/mobs/greenslimes.lua +++ /dev/null @@ -1,169 +0,0 @@ - --- Green Slimes by TomasJLuis & TenPlus1 - --- sounds -local green_sounds = { - damage = "mobs_slimes_damage", - death = "mobs_slimes_death", - jump = "mobs_slimes_jump", - attack = "mobs_slimes_attack", -} - --- green slime textures -local green_textures = {"mobs_green_slime_sides.png", "mobs_green_slime_sides.png", "mobs_green_slime_sides.png", "mobs_green_slime_sides.png", "mobs_green_slime_front.png", "mobs_green_slime_sides.png"} - --- register small green slime -mobs:register_mob("mobs:greensmall", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 2 damage to player when hit - passive = false, - pathfinding = false, - reach = 2, - damage = 2, - attack_type = "dogfight", - attacks_monsters = true, - -- health and armor - hp_min = 4, hp_max = 8, - armor = 200, - -- textures and model - collisionbox = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, - visual = "cube", - textures = { green_textures }, - blood_texture = "mobs_green_slime_blood.png", - visual_size = {x = 0.5, y = 0.5}, - -- sounds a bit here, but mainly define in the beginning - makes_footstep_sound = false, - sounds = green_sounds, - -- speed and jump, sinks in water - walk_velocity = 4, - run_velocity = 4, - walk_chance = 0, - jump = true, - jump_chance = 30, - jump_height = 6, - view_range = 16, - floats = 1, - -- chance of dropping glue and coins - drops = { - {name = "mesecons_materials:glue", chance = 4, min = 1, max = 2}, - {name = "maptools:silver_coin", chance = 4, min = 1, max = 1,}, - }, - -- damaged by - water_damage = 0, - lava_damage = 10, - light_damage = 0, - -- model animation - -- no model animation -}) -mobs:register_egg("mobs:greensmall", "Small Green Slime", "mobs_green_slime_medium_inv.png", 1) - --- register medium green slime -mobs:register_mob("mobs:greenmedium", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 4 damage to player when hit - passive = false, - reach = 2, - damage = 3, - attack_type = "dogfight", - attacks_monsters = true, - -- health and armor - hp_min = 15, hp_max = 25, - armor = 100, - -- textures and model - collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - visual = "cube", - textures = { green_textures }, - blood_texture = "mobs_green_slime_blood.png", - visual_size = {x = 1, y = 1}, - -- sounds a bit here, but mainly define in the beginning - makes_footstep_sound = false, - sounds = green_sounds, - -- speed and jump, sinks in water - walk_velocity = 3, - run_velocity = 3, - walk_chance = 0, - jump = true, - jump_chance = 30, - jump_height = 6, - view_range = 16, - floats = 1, - -- chance of dropping glue and coins - drops = { - }, - -- damaged by - water_damage = 0, - lava_damage = 10, - light_damage = 0, - -- model animation - -- no model animation - -- do things when die - on_die = function(self, pos) - local num = math.random(2, 4) - for i=1,num do - minetest.add_entity({x=pos.x + math.random(-2, 2), y=pos.y + 1, z=pos.z + (math.random(-2, 2))}, "mobs:greensmall") - end - end, -}) -mobs:register_egg("mobs:greenmedium", "Medium Green Slime", "mobs_green_slime_medium_inv.png", 1) - --- register big green slime -mobs:register_mob("mobs:greenbig", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 6 damage to player when hit - passive = false, - reach = 2, - damage = 5, - attack_type = "dogfight", - attacks_monsters = true, - -- health and armor - hp_min = 30, hp_max = 50, - armor = 100, - -- textures and model - collisionbox = {-1, -1, -1, 1, 1, 1}, - visual = "cube", - textures = { green_textures }, - blood_texture = "mobs_green_slime_blood.png", - visual_size = {x = 2, y = 2}, - -- sounds a bit here, but mainly define in the beginning - makes_footstep_sound = false, - sounds = green_sounds, - -- speed and jump, sinks in water - walk_velocity = 2.5, - run_velocity = 2.5, - walk_chance = 0, - jump = true, - jump_chance = 30, - jump_height = 6, - view_range = 16, - floats = 1, - knock_back = 0, --this is a test - -- chance of dropping glue and coins - drops = { - }, - -- damaged by - water_damage = 0, - lava_damage = 10, - light_damage = 0, - -- model animation - -- no model animation - -- do things when die - on_die = function(self, pos) - local num = math.random(1, 2) - for i=1,num do - minetest.add_entity({x=pos.x + math.random(-2, 2), y=pos.y + 1, z=pos.z + (math.random(-2, 2))}, "mobs:greenmedium") - end - end, -}) -mobs:register_egg("mobs:greenbig", "Big Green Slime", "mobs_green_slime_big_inv.png", 1) - ---mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, chance, active_object_count, min_height, max_height) -mobs:spawn_specific("mobs:greenbig", {"default:acid_source"},{"default:acid_flowing"}, -1, 20, 30, 5000, 1, -32000, 32000, false) -mobs:spawn_specific("mobs:greenmedium", {"default:acid_source"},{"default:acid_flowing"},-1, 20, 30, 5000, 2, -32000, 32000, false) ---mobs:spawn_specific("mobs:greensmall", {"default:acid_source"},{"default:acid_flowing"},-1, 20, 30, 10000, 2, -32000, 32000) - ---mobs:register_spawn(name, nodes, max_light, min_light, chance, active_object_count, max_height) ---mobs:register_spawn("mobs:greenmedium", {"default:mossycobble"}, 20, 4, 10000, 8, 32000) ---mobs:register_spawn("mobs:greensmall", {"default:mossycobble"}, 20, 4, 10000, 8, 32000) diff --git a/mods/mobs/init.lua b/mods/mobs/init.lua deleted file mode 100755 index 9c71495b..00000000 --- a/mods/mobs/init.lua +++ /dev/null @@ -1,84 +0,0 @@ -local path = minetest.get_modpath("mobs") - --- Mob Api -dofile(path.."/api.lua") - --- Animals -dofile(path.."/chicken.lua") -- JKmurray -dofile(path.."/cow.lua") -- KrupnoPavel -dofile(path.."/sheep.lua") -- PilzAdam -dofile(path.."/pig.lua") -- farfadet46 -dofile(path.."/bee.lua") -- KrupnoPavel -dofile(path.."/bunny.lua") -- ExeterDad -dofile(path.."/kitten.lua") -- Jordach/BFD -dofile(path.."/goat.lua") -- ??? -dofile(path.."/shark.lua") -- blert2112 (animal_modpack) - --- Monsters -dofile(path.."/dirtmonster.lua") -- PilzAdam -dofile(path.."/dungeonmaster.lua") -- PilzAdam -dofile(path.."/oerkki.lua") -- PilzAdam -dofile(path.."/sandmonster.lua") -- PilzAdam -dofile(path.."/stonemonster.lua") -- PilzAdam -dofile(path.."/treemonster.lua") -- PilzAdam -dofile(path.."/wolf.lua") -- PilzAdam -dofile(path.."/dog.lua") -- CProgrammerRU -dofile(path.."/mese_monster.lua") -- Zeg9 -dofile(path.."/spider.lua") -- AspireMint -dofile(path.."/greenslimes.lua") -- davedevils/TomasJLuis/TenPlus1 -dofile(path.."/lavaslimes.lua") -- davedevils/TomasJLuis/TenPlus1 -dofile(path.."/zombie.lua") -- ??? -dofile(path.."/yeti.lua") -- ??? -dofile(path.."/minotaur.lua") -- Kalabasa - --- The bosses -dofile(path.."/pumpkins.lua") -- ??? -dofile(path.."/mese_dragon.lua") -- farfadet46 - --- begin slimes mobs compatibility changes --- cannot find mesecons?, craft glue instead -if not minetest.get_modpath("mesecons_materials") then - minetest.register_craftitem(":mesecons_materials:glue", { - image = "mesecons_glue.png", - description = "Glue", - }) -end - -if minetest.setting_get("log_mods") then minetest.log("action", "Slimes loaded") end --- end slimes mobs compatibility changes - --- NPC -dofile(path.."/npc.lua") -- TenPlus1 -dofile(path.."/npc_female.lua") -- nuttmeg20 - --- Creeper (fast impl by davedevils) -dofile(path.."/creeper.lua") - --- Mob Items -dofile(path.."/crafts.lua") - --- Spawner -dofile(path.."/spawner.lua") - --- Mob menu spawner special MFF -dofile(path.."/mff_menu.lua") - -minetest.register_alias("mobs:rat","mobs:chicken") -- aliases removed rat -minetest.register_alias("mobs:rat_cooked", "mobs:chicken_cooked") - - -local function remove_old(name) - minetest.register_entity(name, { - name = name, - on_activate = function(self, staticdata, dtime_s) - self.object:remove() - return - end, - }) -end - -remove_old("mobs:pumba") -remove_old("mobs:rat") - - -minetest.log("action", "[MOD] Mobs Redo loaded") diff --git a/mods/mobs/kitten.lua b/mods/mobs/kitten.lua deleted file mode 100755 index 91d7ab20..00000000 --- a/mods/mobs/kitten.lua +++ /dev/null @@ -1,73 +0,0 @@ - --- Kitten by Jordach / BFD - -mobs:register_mob("mobs:kitten", { - -- animal, monster, npc - type = "animal", - -- is it aggressive - passive = true, - -- health & armor - hp_min = 5, - hp_max = 10, - armor = 200, - -- textures and model - collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.1, 0.3}, - visual = "mesh", - visual_size = {x = 0.5, y = 0.5}, - mesh = "mobs_kitten.b3d", - textures = { - {"mobs_kitten_striped.png"}, - {"mobs_kitten_splotchy.png"}, - {"mobs_kitten_ginger.png"}, - {"mobs_kitten_sandy.png"}, - }, - blood_texture = "mobs_blood.png", - -- sounds - makes_footstep_sound = false, - sounds = { - random = "mobs_kitten", - }, - -- speed and jump - walk_velocity = 0.6, - run_velocity = 2, - runaway = true, - jump = false, - -- drops string - drops = { - {name = "farming:string", chance = 2, min = 1, max = 1}, - }, - -- damaged by - water_damage = 1, - lava_damage = 5, - fear_height = 3, - -- model animation - animation = { - speed_normal = 42, - stand_start = 97, - stand_end = 192, - walk_start = 0, - walk_end = 96, - }, - -- follows Rat and Raw Fish - follow = { - "fishing:fish_raw", - "fishing:clownfish_raw", - "fishing:bluewhite_raw", - "fishing:exoticfish_raw", - "fishing:carp_raw", - "fishing:perch_raw", - "fishing:catfish_raw", - }, - view_range = 10, - -- feed with raw fish to tame or right click to pick up - on_rightclick = function(self, clicker) - - if mobs:feed_tame(self, clicker, 4, true, true) then - return - end - - mobs:capture_mob(self, clicker, 50, 50, 90, false, nil) - end -}) -mobs:spawn_specific("mobs:kitten", {"default:dirt_with_grass"}, {"air"}, 0, 20, 30, 15000, 1, -31000, 31000, true, true) -mobs:register_egg("mobs:kitten", "Kitten", "mobs_kitten_inv.png", 0) diff --git a/mods/mobs/lavaslimes.lua b/mods/mobs/lavaslimes.lua deleted file mode 100755 index 5ca4ae26..00000000 --- a/mods/mobs/lavaslimes.lua +++ /dev/null @@ -1,184 +0,0 @@ - --- Lava Slimes by TomasJLuis & TenPlus1 - --- sounds -local lava_sounds = { - damage = "mobs_slimes_damage", - death = "mobs_slimes_death", - jump = "mobs_slimes_jump", - attack = "mobs_slimes_attack", -} - --- lava slime textures -local lava_textures = {"mobs_lava_slime_sides.png", "mobs_lava_slime_sides.png", "mobs_lava_slime_sides.png", "mobs_lava_slime_sides.png", "mobs_lava_slime_front.png", "mobs_lava_slime_sides.png"} - --- register small lava slime -mobs:register_mob("mobs:lavasmall", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 2 damage to player when hit - passive = false, - pathfinding = false, - reach = 2, - damage = 2, - attack_type = "dogfight", - attacks_monsters = true, - -- health and armor - hp_min = 4, - hp_max = 8, - armor = 200, - -- textures and model - collisionbox = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, - visual = "cube", - textures = { lava_textures }, - blood_texture = "mobs_lava_slime_blood.png", - visual_size = {x = 0.5, y = 0.5}, - -- sounds a bit here, but mainly define in the beginning - makes_footstep_sound = false, - sounds = lava_sounds, - -- speed and jump, sinks in water - walk_velocity = 4, - run_velocity = 4, - walk_chance = 0, - jump = true, - jump_chance = 30, - jump_height = 6, - replace_rate = 20, - footstep = "fire:basic_flame", - view_range = 16, - floats = 1, - -- chance of dropping lava orb and coins - drops = { - {name = "mobs:lava_orb", chance = 15, min = 1, max = 1,}, - {name = "maptools:silver_coin", chance = 4, min = 1, max = 1,}, - }, - -- damaged by - water_damage = 10, - lava_damage = 0, - light_damage = 0, - -- model animation - -- no model animation -}) -mobs:register_egg("mobs:lavasmall", "Small Lava Slime", "mobs_lava_slime_medium_inv.png", 1) - --- register medium lava slime -mobs:register_mob("mobs:lavamedium", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 4 damage to player when hit - passive = false, - reach = 2, - damage = 3, - attack_type = "dogfight", - attacks_monsters = true, - -- health and armor - hp_min = 15, - hp_max = 25, - armor = 100, - -- textures and model - collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, - visual = "cube", - textures = { lava_textures }, - blood_texture = "mobs_lava_slime_blood.png", - visual_size = {x = 1, y = 1}, - -- sounds a bit here, but mainly define in the beginning - makes_footstep_sound = false, - sounds = lava_sounds, - -- speed and jump, sinks in water - walk_velocity = 3, - run_velocity = 3, - walk_chance = 0, - jump = true, - jump_chance = 30, - jump_height = 6, - replace_rate = 20, - footstep = "fire:basic_flame", - view_range = 16, - floats = 1, - -- chance of dropping lava orb and coins - drops = { - }, - -- damaged by - water_damage = 10, - lava_damage = 0, - light_damage = 0, - -- model animation - -- no model animation - -- do things when die - on_die = function(self, pos) - local num = math.random(2, 4) - for i=1,num do - minetest.add_entity({x=pos.x + math.random(-2, 2), y=pos.y + 1, z=pos.z + (math.random(-2, 2))}, "mobs:lavasmall") - end - end, -}) - -mobs:register_egg("mobs:lavamedium", "Medium Lava Slime", "mobs_lava_slime_medium_inv.png", 1) - --- register big lava slime -mobs:register_mob("mobs:lavabig", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 6 damage to player when hit - passive = false, - reach = 2, - damage = 5, - attack_type = "dogfight", - attacks_monsters = true, - -- health and armor - hp_min = 30, hp_max = 50, - armor = 100, - -- textures and model - collisionbox = {-1, -1, -1, 1, 1, 1}, - visual = "cube", - textures = { lava_textures }, - blood_texture = "mobs_lava_slime_blood.png", - visual_size = {x = 2, y = 2}, - -- sounds a bit here, but mainly define in the beginning - makes_footstep_sound = false, - sounds = lava_sounds, - -- speed and jump, sinks in water - walk_velocity = 2.5, - run_velocity = 2.5, - walk_chance = 0, - jump = true, - jump_chance = 30, - jump_height = 6, - replace_rate = 20, - replace_offset = -1, - footstep = "fire:basic_flame", - view_range = 16, - floats = 1, - knock_back = 0, --this is a test - -- chance of dropping lava orb and coins - drops = { - }, - -- damaged by - water_damage = 10, - lava_damage = 0, - light_damage = 0, - -- model animation - -- no model animation - -- do things when die - on_die = function(self, pos) - local num = math.random(1, 2) - for i=1,num do - minetest.add_entity({x=pos.x + math.random(-2, 2), y=pos.y + 1, z=pos.z + (math.random(-2, 2))}, "mobs:lavamedium") - end - end, -}) - -mobs:register_egg("mobs:lavabig", "Big Lava Slime", "mobs_lava_slime_big_inv.png", 1) - ---mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, interval, chance, active_object_count, min_height, max_height) -mobs:spawn_specific("mobs:lavabig", {"default:lava_source"},{"default:lava_flowing"}, -1, 20, 30, 5000, 1, -32000, 32000, false) -mobs:spawn_specific("mobs:lavamedium", {"default:lava_source"},{"default:lava_flowing"}, -1, 20, 30, 5000, 2, -32000, 32000, false) ---mobs:spawn_specific("mobs:lavasmall", {"default:lava_source"},{"default:lava_flowing"}, -1, 20, 30, 10s000, 2, -32000, 32000, false) - --- lava orb -minetest.register_craftitem("mobs:lava_orb", { - description = "Lava orb", - inventory_image = "zmobs_lava_orb.png", -}) - -minetest.register_alias("zmobs:lava_orb", "mobs:lava_orb") diff --git a/mods/mobs/mff_menu.lua b/mods/mobs/mff_menu.lua deleted file mode 100755 index b4621169..00000000 --- a/mods/mobs/mff_menu.lua +++ /dev/null @@ -1,59 +0,0 @@ ---Menu mobs spawner -mobs.shown_spawner_menu = function(player_name) - local formspec = {"size[8,9]label[2.7,0;Mobs Spawner]"} - if mobs["spawning_mobs"] ~= nil then - local Y = 1 - local X = 1 - for name, etat in pairs(mobs["spawning_mobs"]) do - table.insert(formspec, "item_image_button["..X..","..Y..";1,1;"..name..";"..name..";]") - X = X+1 - if X > 6 then - X = 1 - Y = Y+1.2 - end - end - end - table.insert(formspec, "button_exit[3.9,8.5;1.2,1;close;Close]") - minetest.show_formspec(player_name, "mobs:spawner", table.concat(formspec)) -end - -minetest.register_on_player_receive_fields(function(player, formname, fields) - local player_name = player:get_player_name() - if not player_name then return end - if formname == "mobs:spawner" then - for f in pairs(fields) do - if string.find(f, "mobs:") then - local pos = player:getpos() - pos.y = pos.y+1 - minetest.add_entity(pos, f) - return - end - end - end -end) - - -if (minetest.get_modpath("unified_inventory")) ~= nil then - unified_inventory.register_button("menu_mobs", { - type = "image", - image = "mobs_dungeon_master_fireball.png", - tooltip = "Mobs Spawner Menu", - show_with = "server", - action = function(player) - local player_name = player:get_player_name() - if not player_name then return end - if minetest.check_player_privs(player_name, {server=true}) then - mobs.shown_spawner_menu(player_name) - end - end, - }) -else - minetest.register_chatcommand("mobs_spawner", { - params = "", - description = "Spawn entity at given (or your) position", - privs = {server=true}, - func = function(name, param) - mobs.shown_spawner_menu(name) - end, - }) -end diff --git a/mods/mobs/models/mobs_cow.b3d b/mods/mobs/models/mobs_cow.b3d deleted file mode 100644 index 2e54d29232c42bb15eea9ce97aa66e740c44e8d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67040 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 X(*;L!*-6QAGGAn2SG^8dUjzORt(Uz) diff --git a/mods/mobs/models/mobs_pig.b3d b/mods/mobs/models/mobs_pig.b3d deleted file mode 100755 index 1676c0c513bf7d8b844959376431059e97d3756e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52879 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 diff --git a/mods/mobs/npc.lua b/mods/mobs/npc.lua deleted file mode 100755 index f83adc7b..00000000 --- a/mods/mobs/npc.lua +++ /dev/null @@ -1,131 +0,0 @@ - --- Npc by TenPlus1 - -mobs.npc_drops = { "farming:meat", "farming:donut", "farming:bread", "default:apple", "default:sapling", "default:junglesapling", - "shields:shield_enhanced_wood", "3d_armor:chestplate_cactus", "3d_armor:boots_bronze", - "default:sword_steel", "default:pick_steel", "default:shovel_steel", "default:bronze_ingot", - "bucket:bucket_water", "default:stick", "cavestuff:pebble_1", "building_blocks:stick", - "default:cobble", "default:gravel", "default:clay_lump", "default:sand", "default:dirt_with_grass", - "default:dirt", "default:chest", "default:torch"} - - -mobs:register_mob("mobs:npc", { - -- animal, monster, npc - type = "npc", - -- aggressive, deals 6 damage to player/monster when hit - passive = false, - group_attack = true, - damage = 4, -- 3 damages if tamed - attack_type = "dogfight", - attacks_monsters = true, - pathfinding = false, - -- health & armor - hp_min = 20, - hp_max = 20, - armor = 200, - -- textures and model - collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35}, - visual = "mesh", - mesh = "character.b3d", - drawtype = "front", - textures = { - {"mobs_npc.png"}, - }, - child_texture = { - {"mobs_npc_baby.png"}, -- derpy baby by AmirDerAssassine - }, - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_npc", - damage = "mobs_npc_hit", - attack = "mobs_npc_attack", - death = "mobs_npc_death", - }, - -- speed and jump - walk_velocity = 3, - run_velocity = 3, - jump = true, - -- drops wood and chance of apples when dead - drops = { - {name = "default:wood", chance = 1, min = 1, max = 3}, - {name = "default:apple", chance = 2, min = 1, max = 2}, - {name = "default:axe_stone", chance = 3, min = 1, max = 1}, - {name = "maptools:silver_coin", chance = 10, min = 1, max = 1,}, - }, - -- damaged by - water_damage = 0, - lava_damage = 6, - light_damage = 0, - -- follow diamond - follow = {"farming:bread", "mobs:meat", "default:diamond"}, - view_range = 16, - -- set owner and order - owner = "", - order = "follow", - fear_height = 3, - -- model animation - animation = { - speed_normal = 30, - speed_run = 30, - stand_start = 0, - stand_end = 79, - walk_start = 168, - walk_end = 187, - run_start = 168, - run_end = 187, - punch_start = 200, - punch_end = 219, - }, - -- right clicking with "cooked meat" or "bread" will give npc more health - on_rightclick = function(self, clicker) - - local item = clicker:get_wielded_item() - local name = clicker:get_player_name() - if item:get_name() == "default:diamond" then --/MFF (Crabman|07/14/2015) tamed with diamond - if (self.diamond_count or 0) < 4 then - self.diamond_count = (self.diamond_count or 0) + 1 - if not minetest.setting_getbool("creative_mode") then - item:take_item() - clicker:set_wielded_item(item) - end - if self.diamond_count >= 4 then - self.damages = 3 - self.tamed = true - self.owner = clicker:get_player_name() - end - end - return - -- feed to heal npc - elseif not mobs:feed_tame(self, clicker, 8, true, true) then - -- right clicking with gold lump drops random item from mobs.npc_drops - if item:get_name() == "default:gold_lump" then - if not minetest.setting_getbool("creative_mode") then - item:take_item() - clicker:set_wielded_item(item) - end - - local pos = self.object:getpos() - pos.y = pos.y + 0.5 - minetest.add_item(pos, { - name = mobs.npc_drops[math.random(1, #mobs.npc_drops)] - }) - return - -- if owner switch between follow and stand - elseif self.owner and self.owner == clicker:get_player_name() then - if self.order == "follow" then - self.order = "stand" - else - self.order = "follow" - end - end - mobs:capture_mob(self, clicker, 0, 5, 80, false, nil) - end - - end, -}) - --- spawning enable for now -mobs:spawn_specific("mobs:npc", {"default:dirt_with_grass", "default:dirt", "default:junglegrass", "default:sand"}, {"air"}, -1, 20, 30, 500000, 1, -31000, 31000, true, true) --- register spawn egg -mobs:register_egg("mobs:npc", "Npc", "mobs_npc_male_inv.png", 1) diff --git a/mods/mobs/oerkki.lua b/mods/mobs/oerkki.lua deleted file mode 100755 index 4721f467..00000000 --- a/mods/mobs/oerkki.lua +++ /dev/null @@ -1,69 +0,0 @@ - --- Oerkki by PilzAdam - -mobs:register_mob("mobs:oerkki", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 7 damage when player hit - passive = false, - attack_type = "dogfight", - pathfinding = false, - reach = 2, - damage = 5, - -- health & armor - hp_min = 30, - hp_max = 40, - armor = 100, - -- textures and model - collisionbox = {-0.4, -1, -0.4, 0.4, 0.9, 0.4}, - visual = "mesh", - mesh = "mobs_oerkki.b3d", - textures = { - {"mobs_oerkki.png"}, - {"mobs_oerkki2.png"}, - }, - blood_texture = "mobs_blood.png", - -- sounds - makes_footstep_sound = false, - sounds = { - random = "mobs_oerkki", - shoot_attack = "mobs_oerkki_attack", - }, - -- speed and jump - walk_velocity = 1, - run_velocity = 3, - view_range = 16, - jump = true, - -- chance of dropping obsidian and coins - drops = { - {name = "default:obsidian", chance = 3, min = 1, max = 2,}, - {name = "maptools:silver_coin", chance = 1, min = 1, max = 1}, - }, - -- damaged by - water_damage = 2, - lava_damage = 4, - light_damage = 1, - fear_height = 4, - -- model animation - animation = { - stand_start = 0, - stand_end = 23, - walk_start = 24, - walk_end = 36, - run_start = 37, - run_end = 49, - punch_start = 37, - punch_end = 49, - speed_normal = 15, - speed_run = 15, - }, - -- replace torch with air (remove) - replace_rate = 50, - replace_what = {"default:torch"}, - replace_with = "air", - replace_offset = -1, -}) --- spawns on stone/sandstone between 5 and -1 light, 1 in 9000 chance, 1 in area starting at -10 and below -mobs:spawn_specific("mobs:oerkki", {"default:stone", "default:sandstone"}, {"air"}, -1, 5, 30, 9000, 1, -31000, -75, false) --- register spawn egg -mobs:register_egg("mobs:oerkki", "Oerkki", "mobs_oerkki_inv.png", 1) diff --git a/mods/mobs/pig.lua b/mods/mobs/pig.lua deleted file mode 100755 index d7418895..00000000 --- a/mods/mobs/pig.lua +++ /dev/null @@ -1,96 +0,0 @@ - --- Piggy by farfadet46 - -mobs:register_mob("mobs:pig", { - -- animal, monster, npc, barbarian - type = "animal", - -- aggressive, does 5 damage to player when threatened - passive = false, - attack_type = "dogfight", - group_attack = true, - reach = 2, - damage = 3, - -- health & armor - hp_min = 10, - hp_max = 15, - armor = 200, - -- textures and model - collisionbox = {-0.8, -0.01, -0.8, 0.8, 1.1, 0.8}, - visual = "mesh", - mesh = "mobs_pig.b3d", - drawtype = "front", - textures = { - {"mobs_pig_pink.png"}, - }, - visual_size = {x=1,y=1}, - blood_texture = "mobs_blood.png", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_pig", - attack = "mobs_pig_angry", - }, - -- speed and jump - walk_velocity = 1, - run_velocity = 3, - jump = true, - -- follows apple and potato - follow = {"default:apple", "farming:potato"}, - view_range = 10, - -- drops raw pork when dead - drops = { - {name = "mobs:pork_raw", chance = 1, min = 2, max = 3,}, - {name = "maptools:silver_coin", chance = 10, min = 1, max = 1,}, - }, - -- damaged by - water_damage = 1, - lava_damage = 5, - light_damage = 0, - fear_height = 2, - -- model animation - animation = { - speed_normal = 15, - stand_start = 25, - stand_end = 55, - walk_start = 60, - walk_end = 100, - punch_start = 60, - punch_end = 100, - }, - -- can be tamed by feeding 8 wheat (will not attack when tamed) - on_rightclick = function(self, clicker) - - if mobs:feed_tame(self, clicker, 8, true, true) then - return - end - - mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) - end, -}) - --- spawns on dirt or junglegrass, between 8 and 20 light, 1 in 15000 chance, 1 in area up to 31000 in height -mobs:spawn_specific("mobs:pig", {"default:dirt", "default:junglegrass", "default:dirt_with_dry_grass"}, {"air"}, 8, 20, 30, 15000, 1, -31000, 31000, true, true) - --- register spawn egg -mobs:register_egg("mobs:pig", "Pig", "mobs_pig_inv.png", 1) - --- porkchop (raw and cooked) -minetest.register_craftitem("mobs:pork_raw", { - description = "Raw Porkchop", - inventory_image = "mobs_pork_raw.png", - on_use = minetest.item_eat(4), -}) - --- cooked porkchop -minetest.register_craftitem("mobs:pork_cooked", { - description = "Cooked Porkchop", - inventory_image = "mobs_pork_cooked.png", - on_use = minetest.item_eat(8), -}) - -minetest.register_craft({ - type = "cooking", - output = "mobs:pork_cooked", - recipe = "mobs:pork_raw", - cooktime = 5, -}) diff --git a/mods/mobs/sandmonster.lua b/mods/mobs/sandmonster.lua deleted file mode 100755 index 388e7c17..00000000 --- a/mods/mobs/sandmonster.lua +++ /dev/null @@ -1,74 +0,0 @@ - --- Sand Monster by PilzAdam - -mobs:register_mob("mobs:sand_monster", { - -- animal, monster, npc, barbarian - type = "monster", - -- aggressive, deals 5 damage to player when hit - passive = false, - attack_type = "dogfight", - pathfinding = false, - reach = 2, - damage = 2, - -- health & armor - hp_min = 10, - hp_max = 15, - armor = 100, - -- textures and model - collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, - visual = "mesh", - mesh = "mobs_sand_monster.b3d", - textures = { - {"mobs_sand_monster.png"}, - }, - blood_texture = "default_sand.png", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_sandmonster", - }, - -- speed and jump, sinks in water - walk_velocity = 2, - run_velocity = 4, - view_range = 16, - jump = true, - floats = 0, - -- drops desert sand when dead - drops = { - {name = "default:desert_sand", chance = 1, min = 3, max = 5,}, - {name = "maptools:silver_coin", chance = 10, min = 1, max = 1,}, - }, - -- damaged by - water_damage = 3, - lava_damage = 4, - light_damage = 0, - fear_height = 4, - -- model animation - animation = { - speed_normal = 15, - speed_run = 15, - stand_start = 0, - stand_end = 39, - walk_start = 41, - walk_end = 72, - run_start = 74, - run_end = 105, - punch_start = 74, - punch_end = 105, - }, -}) - --- spawns on desert sand between -1 and 20 light, 1 in 25000 chance, 1 sand monster in area up to 31000 in height -mobs:spawn_specific("mobs:sand_monster", {"default:desert_sand", "default:sand"}, {"air"}, -1, 20, 30, 25000, 1, -31000, 31000, false) - --- register spawn egg -mobs:register_egg("mobs:sand_monster", "Sand Monster", "mobs_sand_monster_inv.png", 1) - -minetest.register_craft({ - output = "mobs:sand_monster", - recipe = { - {"group:sand", "group:sand", "group:sand"}, - {"group:sand", "default:nyancat_rainbow", "group:sand"}, - {"group:sand", "group:sand", "group:sand"} - } -}) diff --git a/mods/mobs/shark.lua b/mods/mobs/shark.lua deleted file mode 100755 index d653bdaa..00000000 --- a/mods/mobs/shark.lua +++ /dev/null @@ -1,100 +0,0 @@ - --- local variables -local l_colors = { - "#111010:200", --dark_grey - "#101020:225", --dark_blue - "#404030:225", --cold_grey - "#404040:210", --light_grey - "#202020:210" --grey -} -local l_skins = { - {"(shark_first.png^[colorize:"..l_colors[1]..")^(shark_second.png^[colorize:"..l_colors[5]..")^shark_third.png"}, - {"(shark_first.png^[colorize:"..l_colors[2]..")^(shark_second.png^[colorize:"..l_colors[5]..")^shark_third.png"}, - {"(shark_first.png^[colorize:"..l_colors[3]..")^(shark_second.png^[colorize:"..l_colors[4]..")^shark_third.png"} -} -local l_anims = { - speed_normal = 24, speed_run = 24, - stand_start = 1, stand_end = 80, - walk_start = 80, walk_end = 160, - run_start = 80, run_end = 160 -} -local l_model = "mobs_shark.b3d" -local l_egg_texture = "mobs_shark_shark_inv.png" -local l_spawn_in = {"default:water_source"} -local l_spawn_near = {"default:water_flowing","default:water_source","seawrecks:woodship","seawrecks:uboot"} -local l_spawn_chance = 1000000 - --- large -mobs:register_mob("mobs:shark_lg", { - type = "monster", - attack_type = "dogfight", - damage = 4, - reach = 3, - hp_min = 15, - hp_max = 20, - armor = 150, - collisionbox = {-0.75, -0.5, -0.75, 0.75, 0.5, 0.75}, - visual = "mesh", - mesh = l_model, - textures = l_skins, - makes_footstep_sound = false, - walk_velocity = 2, - run_velocity = 4, - fly = true, - fly_in = "default:water_source", - fall_speed = 0, - rotate = 270, - view_range = 10, - water_damage = 0, - lava_damage = 10, - light_damage = 0, - animation = l_anims, - do_custom = function(self) - local p = self.object:getpos() - local a = self.object:getvelocity() - if p.y > 0 and a.y > 0 then - a.y = -1 - else - local r = math.random(100) - if r >= 1 and r <=25 then a.y = 0.25 - elseif r > 25 and r <= 50 then a.y = 0 - elseif r > 50 and r <= 75 then a.y = -0.25 - end - end - self.object:setvelocity(a) - end -}) ---name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height -mobs:spawn_specific("mobs:shark_lg", l_spawn_in, l_spawn_near, -1, 20, 30, l_spawn_chance, 1, -50, -1) -mobs:register_egg("mobs:shark_lg", "Shark (large)", l_egg_texture, 1) - --- medium -mobs:register_mob("mobs:shark_md", { - type = "monster", - attack_type = "dogfight", - damage = 5, - reach = 2, - hp_min = 20, - hp_max = 25, - armor = 125, - collisionbox = {-0.57, -0.38, -0.57, 0.57, 0.38, 0.57}, - visual = "mesh", - visual_size = {x=0.75, y=0.75}, - mesh = l_model, - textures = l_skins, - makes_footstep_sound = false, - walk_velocity = 2, - run_velocity = 4, - fly = true, - fly_in = "default:water_source", - fall_speed = -1, - rotate = 270, - view_range = 10, - water_damage = 0, - lava_damage = 10, - light_damage = 0, - animation = l_anims -}) ---name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height -mobs:spawn_specific("mobs:shark_md", l_spawn_in, l_spawn_near, -1, 20, 30, l_spawn_chance, 1, -50, -1) -mobs:register_egg("mobs:shark_md", "Shark (medium)", l_egg_texture, 1) diff --git a/mods/mobs/sheep.lua b/mods/mobs/sheep.lua deleted file mode 100755 index ae753839..00000000 --- a/mods/mobs/sheep.lua +++ /dev/null @@ -1,215 +0,0 @@ - -local all_colours = { - {"black", "Black", "#000000b0"}, - {"blue", "Blue", "#015dbb70"}, - {"brown", "Brown", "#663300a0"}, - {"cyan", "Cyan", "#01ffd870"}, - {"dark_green", "Dark Green", "#005b0770"}, - {"dark_grey", "Dark Grey", "#303030b0"}, - {"green", "Green", "#61ff0170"}, - {"grey", "Grey", "#5b5b5bb0"}, - {"magenta", "Magenta", "#ff05bb70"}, - {"orange", "Orange", "#ff840170"}, - {"pink", "Pink", "#ff65b570"}, - {"red", "Red", "#ff0000a0"}, - {"violet", "Violet", "#2000c970"}, - {"white", "White", "#abababc0"}, - {"yellow", "Yellow", "#e3ff0070"}, -} - --- Sheep by PilzAdam, texture converted to minetest by AMMOnym from Summerfield pack - -for _, col in pairs(all_colours) do - - mobs:register_mob("mobs:sheep_"..col[1], { - -- animal, monster, npc, barbarian - type = "animal", - -- not aggressive - passive = true, - -- health & armor - hp_min = 8, - hp_max = 10, - armor = 200, - -- textures and model - collisionbox = {-0.5, -1, -0.5, 0.5, 0.3, 0.5}, - visual = "mesh", - mesh = "mobs_sheep.b3d", - textures = { - {"mobs_sheep_base.png^(mobs_sheep_wool.png^[colorize:" .. col[3] .. ")"}, - }, - -- specific texture and mesh for gotten - gotten_texture = {"mobs_sheep_shaved.png"}, - gotten_mesh = "mobs_sheep_shaved.b3d", - -- sounds - makes_footstep_sound = true, - sounds = { - random = "mobs_sheep", - }, - -- speed and jump - walk_velocity = 1, - run_velocity = 2, - runaway = true, - jump = true, - -- drops raw meat and woll of its color when dead - drops = { - {name = "mobs:meat_raw", chance = 1, min = 2, max = 3}, - {name = "wool:"..col[1], chance = 1, min = 1, max = 1}, - }, - -- damaged by - water_damage = 1, - lava_damage = 5, - light_damage = 0, - -- model animation - animation = { - speed_normal = 15, - speed_run = 15, - stand_start = 0, - stand_end = 80, - walk_start = 81, - walk_end = 100, - }, - follow = {"farming:wheat", "default:grass_5"}, - view_range = 8, - -- replace grass/wheat with air (eat) - replace_rate = 10, - replace_what = {"default:grass_3", "default:grass_4", "default:grass_5", "farming:wheat_8"}, - replace_with = "air", - -- right click sheep to shear sheep and get wood, feed 8 wheat for wool to grow back - replace_offset = -1, - fear_height = 3, - on_rightclick = function(self, clicker) - - local shpcolor = string.split(self.name,"_")[2] - - if shpcolor =="dark" then - shpcolor = shpcolor.."_"..string.split(self.name,"_")[3] - end - - --are we feeding? - if mobs:feed_tame(self, clicker, 8, true, true) then - - --if full grow fuzz - if self.gotten == false then - self.object:set_properties({ - textures = {"mobs_sheep_wool.png^[colorize:" .. col[3] .. "^mobs_sheep_base.png"}, - mesh = "mobs_sheep.b3d", - }) - end - - return - end - - local item = clicker:get_wielded_item() - local itemname = item:get_name() - - --are we giving a haircut> - if itemname == "mobs:shears" then - - if self.gotten == false and self.child == false then - - self.gotten = true -- shaved - - if minetest.get_modpath("wool") then - - local pos = self.object:getpos() - pos.y = pos.y + 0.5 - - local obj = minetest.add_item(pos, ItemStack("wool:"..shpcolor.." "..math.random(1,3))) - - if obj then - obj:setvelocity({ - x = math.random(-1,1), - y = 5, - z = math.random(-1,1) - }) - end - - item:add_wear(650) -- 100 uses - - clicker:set_wielded_item(item) - end - - self.object:set_properties({ - textures = {"mobs_sheep_shaved.png"}, - mesh = "mobs_sheep_shaved.b3d", - }) - end - - return - end - - local name = clicker:get_player_name() - - --are we coloring? - if itemname:find("dye:") then - - if self.gotten == false - and self.child == false - and self.tamed == true - and name == self.owner then - - local colr = string.split(itemname,":")[2] - - for _,c in pairs(all_colours) do - - if c[1] == colr then - - local pos = self.object:getpos() - - self.object:remove() - - local mob = minetest.add_entity(pos, "mobs:sheep_"..colr) - local ent = mob:get_luaentity() - - ent.owner = name - ent.tamed = true - - -- take item - if not minetest.setting_getbool("creative_mode") then - item:take_item() - clicker:set_wielded_item(item) - end - - break - end - end - end - - return - end - - --are we capturing? - mobs:capture_mob(self, clicker, 0, 5, 60, false, nil) - end - }) - - mobs:register_egg("mobs:sheep_"..col[1], col[2] .. "Sheep", "mobs_sheep_white_inv.png^[colorize:" .. col[3], 1) - -end - -mobs:spawn_specific("mobs:sheep_white", {"default:dirt_with_grass"}, {"air"}, 8, 20, 30, 15000, 2, -31000, 31000, true, true) - --- compatibility (item and entity) -minetest.register_alias("mobs:sheep", "mobs:sheep_white") - -minetest.register_entity("mobs:sheep", { - hp_max = 1, - physical = true, - collide_with_objects = true, - visual = "mesh", - mesh = "mobs_sheep.b3d", - visual_size = {x = 1, y = 1}, - textures = {"mobs_sheep_white.png"}, - velocity = {x = 0, y = 0, z = 0}, - collisionbox = {-0.4, -1, -0.4, 0.4, 0.3, 0.4}, - is_visible = true, - - on_activate = function(self, staticdata, dtime_s) - - local pos = self.object:getpos() - - self.object:remove() - - minetest.add_entity(pos, "mobs:sheep_white") - end -}) diff --git a/mods/mobs/sounds/default_punch.ogg b/mods/mobs/sounds/default_punch.ogg deleted file mode 100755 index 1c5dce32ab3676f367f0f6448576bdd1d65ed08f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5308 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 diff --git a/mods/mobs/sounds/default_punch2.ogg b/mods/mobs/sounds/default_punch2.ogg deleted file mode 100755 index 28a500bf5759c8bb16ea780d100c8bbf1a7a2609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5946 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 diff --git a/mods/mobs/sounds/mobs_eerie.ogg b/mods/mobs/sounds/mobs_eerie.ogg deleted file mode 100755 index 41ffa4d77e3e0322386b385d1ed0c980958955b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76836 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