From 28854248459a9f973ec7b8fe5bcbaf713c8af1fe Mon Sep 17 00:00:00 2001 From: maikerumine Date: Wed, 5 Jul 2017 16:43:05 -0400 Subject: [PATCH] 4.16 release --- README.md | 4 +- mods/a_mapgen_mods/flowlib/README.txt | 7 + mods/a_mapgen_mods/flowlib/init.lua | 146 +++ mods/a_mapgen_mods/flowlib/mod.conf | 1 + mods/a_mapgen_mods/roadvalleys/README.txt | 7 + mods/a_mapgen_mods/roadvalleys/depends.txt | 1 + mods/a_mapgen_mods/roadvalleys/init.lua | 373 +++++++ mods/a_mapgen_mods/roadvalleys/license.txt | 49 + mods/a_mapgen_mods/roadvalleys/nodes.lua | 43 + .../textures/roadvalleys_concrete.png | Bin 0 -> 155 bytes .../textures/roadvalleys_road_black.png | Bin 0 -> 480 bytes .../textures/roadvalleys_road_white.png | Bin 0 -> 136 bytes .../a_mapgen_mods/tsm_railcorridors/README.md | 17 + .../tsm_railcorridors/depends.txt | 3 + .../tsm_railcorridors/description.txt | 1 + .../tsm_railcorridors/gameconfig.lua | 98 ++ mods/a_mapgen_mods/tsm_railcorridors/init.lua | 580 +++++++++++ mods/a_mapgen_mods/tsm_railcorridors/mod.conf | 1 + .../tsm_railcorridors/settingtypes.txt | 30 + mods/beds/README.txt | 44 +- mods/beds/api.lua | 32 +- mods/beds/beds.lua | 16 +- mods/beds/functions.lua | 42 +- mods/beds/license.txt | 60 ++ mods/beds/spawns.lua | 4 +- mods/boats/README.txt | 23 +- mods/boats/init.lua | 54 +- mods/boats/license.txt | 63 ++ mods/bucket/README.txt | 31 +- mods/bucket/init.lua | 36 +- mods/bucket/license.txt | 51 + mods/builtin_item/.gitignore | 4 - mods/builtin_item/README.md | 25 - mods/builtin_item/depends.txt | 2 - mods/builtin_item/init.lua | 450 --------- .../builtin_item/sounds/builtin_item_lava.ogg | Bin 37367 -> 0 bytes mods/builtin_item/textures/tnt_smoke.png | Bin 202 -> 0 bytes mods/creative/README.txt | 27 +- mods/creative/depends.txt | 1 + mods/creative/init.lua | 265 +---- mods/creative/inventory.lua | 177 ++++ mods/creative/license.txt | 60 ++ mods/default/aliases.lua | 2 +- mods/default/crafting.lua | 273 +++++- mods/default/craftitems.lua | 110 ++- mods/default/functions.lua | 198 ++-- mods/default/furnace.lua | 125 +-- mods/default/init.lua | 1 + mods/default/license.txt | 6 + mods/default/mapgen.lua | 871 ++++++++++++----- mods/default/models/character.b3d | Bin 86830 -> 84526 bytes mods/default/models/character.blend | Bin 700448 -> 634876 bytes mods/default/models/chest_open.obj | 79 ++ mods/default/models/torch_ceiling.obj | 58 ++ mods/default/models/torch_floor.obj | 50 + mods/default/models/torch_wall.obj | 64 ++ mods/default/nodes.lua | 912 ++++++++++++----- mods/default/player.lua | 6 +- mods/default/schematics/acacia_bush.mts | Bin 0 -> 113 bytes mods/default/schematics/acacia_log.mts | Bin 0 -> 65 bytes mods/default/schematics/apple_log.mts | Bin 0 -> 90 bytes mods/default/schematics/apple_tree.mts | Bin 163 -> 169 bytes .../schematics/apple_tree_from_sapling.mts | Bin 167 -> 173 bytes mods/default/schematics/aspen_log.mts | Bin 0 -> 118 bytes mods/default/schematics/aspen_tree.mts | Bin 176 -> 174 bytes .../schematics/aspen_tree_from_sapling.mts | Bin 175 -> 174 bytes mods/default/schematics/bush.mts | Bin 0 -> 99 bytes mods/default/schematics/corals.mts | Bin 0 -> 171 bytes mods/default/schematics/jungle_log.mts | Bin 0 -> 96 bytes mods/default/schematics/jungle_tree.mts | Bin 251 -> 255 bytes .../schematics/jungle_tree_from_sapling.mts | Bin 246 -> 247 bytes mods/default/schematics/papyrus.mts | Bin 99 -> 73 bytes mods/default/schematics/pine_log.mts | Bin 0 -> 93 bytes mods/default/schematics/pine_tree.mts | Bin 175 -> 176 bytes .../schematics/pine_tree_from_sapling.mts | Bin 172 -> 174 bytes mods/default/sounds/default_chest_close.ogg | Bin 0 -> 10099 bytes mods/default/sounds/default_chest_open.ogg | Bin 0 -> 10578 bytes mods/default/sounds/default_dig_snappy.ogg | Bin 0 -> 7258 bytes mods/default/sounds/default_item_smoke.ogg | Bin 11917 -> 6651 bytes mods/default/sounds/default_tool_breaks.1.ogg | Bin 0 -> 6019 bytes mods/default/sounds/default_tool_breaks.2.ogg | Bin 0 -> 8440 bytes mods/default/sounds/default_tool_breaks.3.ogg | Bin 0 -> 6875 bytes .../sounds/default_water_footstep.1.ogg | Bin 0 -> 31719 bytes .../sounds/default_water_footstep.2.ogg | Bin 0 -> 29335 bytes .../sounds/default_water_footstep.3.ogg | Bin 0 -> 32107 bytes .../sounds/default_water_footstep.4.ogg | Bin 0 -> 3974 bytes .../textures/default_acacia_bush_sapling.png | Bin 0 -> 151 bytes .../textures/default_acacia_bush_stem.png | Bin 0 -> 476 bytes .../textures/default_acacia_leaves_simple.png | Bin 0 -> 688 bytes .../textures/default_bookshelf_slot.png | Bin 0 -> 191 bytes .../default/textures/default_bush_sapling.png | Bin 0 -> 165 bytes mods/default/textures/default_bush_stem.png | Bin 0 -> 428 bytes .../default/textures/default_chest_inside.png | Bin 0 -> 102 bytes mods/default/textures/default_key.png | Bin 0 -> 415 bytes .../default/textures/default_key_skeleton.png | Bin 0 -> 423 bytes .../textures/default_mese_post_light_side.png | Bin 0 -> 353 bytes .../default_mese_post_light_side_dark.png | Bin 0 -> 353 bytes .../textures/default_mese_post_light_top.png | Bin 0 -> 155 bytes mods/default/textures/default_mineral_tin.png | Bin 0 -> 171 bytes .../textures/default_rainforest_litter.png | Bin 0 -> 940 bytes .../default_rainforest_litter_side.png | Bin 0 -> 497 bytes mods/default/tools.lua | 93 +- mods/default/torch.lua | 146 +++ mods/default/trees-416.zip | Bin 0 -> 3299 bytes mods/default/trees.lua | 83 +- mods/doors/init.lua | 168 +++- mods/doors/textures/doors_door_glass.png | Bin 3064 -> 491 bytes .../textures/doors_door_obsidian_glass.png | Bin 2988 -> 420 bytes mods/dye/README.txt | 18 +- mods/dye/init.lua | 63 +- mods/dye/license.txt | 60 ++ mods/es/biome.lua | 914 ++++++++++++------ mods/farming/README.txt | 8 +- mods/farming/beanpole.lua | 93 +- mods/farming/cocoa.lua | 11 +- mods/farming/compatibility.lua | 81 +- mods/farming/corn.lua | 16 +- mods/farming/cucumber.lua | 2 +- mods/farming/depends.txt | 2 +- mods/farming/farming.conf_example | 27 + mods/farming/grapes.lua | 93 +- mods/farming/hemp.lua | 213 ++++ mods/farming/init.lua | 185 ++-- mods/farming/init.lua_orig | 192 ---- mods/farming/license.txt | 27 +- mods/farming/locale/de.txt | 2 +- mods/farming/locale/template.txt | 2 +- mods/farming/lucky_block.lua | 19 + mods/farming/mapgen.lua | 88 +- mods/farming/melon.lua | 2 +- mods/farming/pumpkin.lua | 7 +- mods/farming/textures/banana_single.png | Bin 0 -> 200 bytes mods/farming/textures/farming_hemp_1.png | Bin 0 -> 115 bytes mods/farming/textures/farming_hemp_2.png | Bin 0 -> 122 bytes mods/farming/textures/farming_hemp_3.png | Bin 0 -> 129 bytes mods/farming/textures/farming_hemp_4.png | Bin 0 -> 132 bytes mods/farming/textures/farming_hemp_5.png | Bin 0 -> 142 bytes mods/farming/textures/farming_hemp_6.png | Bin 0 -> 148 bytes mods/farming/textures/farming_hemp_7.png | Bin 0 -> 169 bytes mods/farming/textures/farming_hemp_8.png | Bin 0 -> 174 bytes mods/farming/textures/farming_hemp_fibre.png | Bin 0 -> 144 bytes mods/farming/textures/farming_hemp_leaf.png | Bin 0 -> 172 bytes mods/farming/textures/farming_hemp_oil.png | Bin 0 -> 164 bytes mods/farming/textures/farming_hemp_rope.png | Bin 0 -> 122 bytes mods/farming/textures/farming_hemp_seed.png | Bin 0 -> 147 bytes mods/farming/textures/farming_orange.png | Bin 0 -> 236 bytes mods/farming/textures/strawberry.png | Bin 0 -> 382 bytes mods/fire/README.txt | 49 +- mods/fire/init.lua | 336 ++++--- mods/fire/license.txt | 84 ++ mods/fire/sounds/fire_fire.1.ogg | Bin 0 -> 57957 bytes mods/fire/sounds/fire_fire.2.ogg | Bin 0 -> 60497 bytes mods/fire/sounds/fire_fire.3.ogg | Bin 0 -> 56781 bytes mods/fire/sounds/fire_flint_and_steel.ogg | Bin 0 -> 10443 bytes mods/fire/textures/fire_flint_steel.png | Bin 3108 -> 459 bytes mods/flowers/README.txt | 37 +- mods/flowers/init.lua | 115 ++- mods/flowers/license.txt | 62 ++ mods/flowers/mapgen.lua | 22 +- mods/flowers/schematics/waterlily.mts | Bin 92 -> 75 bytes mods/flowers/textures/flowers_waterlily.png | Bin 3363 -> 690 bytes .../textures/flowers_waterlily_bottom.png | Bin 0 -> 327 bytes mods/tnt/README.txt | 75 +- mods/tnt/depends.txt | 1 + mods/tnt/init.lua | 847 ++++++++++------ mods/tnt/license.txt | 65 ++ mods/tnt/textures/tnt_blast.png | Bin 0 -> 855 bytes mods/tnt/textures/tnt_gunpowder.png | Bin 336 -> 0 bytes mods/tnt/textures/tnt_gunpowder_burning.png | Bin 344 -> 0 bytes .../tnt_gunpowder_burning_animated.png | Bin 203 -> 0 bytes ...nt_gunpowder_burning_crossing_animated.png | Bin 0 -> 612 bytes .../tnt_gunpowder_burning_curved_animated.png | Bin 0 -> 432 bytes ...nt_gunpowder_burning_straight_animated.png | Bin 0 -> 461 bytes ..._gunpowder_burning_t_junction_animated.png | Bin 0 -> 672 bytes mods/tnt/textures/tnt_gunpowder_crossing.png | Bin 0 -> 245 bytes mods/tnt/textures/tnt_gunpowder_curved.png | Bin 0 -> 268 bytes mods/tnt/textures/tnt_gunpowder_straight.png | Bin 0 -> 225 bytes .../tnt/textures/tnt_gunpowder_t_junction.png | Bin 0 -> 328 bytes mods/tnt/textures/tnt_smoke.png | Bin 184 -> 202 bytes mods/vessels/README.txt | 60 +- mods/vessels/init.lua | 33 +- mods/vessels/license.txt | 52 + mods/vessels/textures/vessels_shelf_slot.png | Bin 0 -> 201 bytes mods/walls/README.txt | 7 + mods/walls/init-fence.lua | 247 ----- mods/walls/init-wall.lua | 199 ---- mods/walls/init.lua | 72 +- mods/walls/license.txt | 14 + mods/wool/README.txt | 36 +- mods/wool/license.txt | 60 ++ mods/xpanes/README.txt | 27 +- mods/xpanes/init.lua | 271 +++--- mods/xpanes/license.txt | 64 ++ mods/xpanes/textures/xpanes_bar.png | Bin 180 -> 155 bytes mods/xpanes/textures/xpanes_bar_top.png | Bin 0 -> 3516 bytes mods/xpanes/textures/xpanes_grey.png | Bin 82 -> 0 bytes mods/xpanes/textures/xpanes_white.png | Bin 148 -> 3496 bytes mods/{ => z_extra_mods}/alias/alias.lua | 0 mods/{ => z_extra_mods}/alias/esmobs.lua | 0 mods/{ => z_extra_mods}/alias/esorerem.lua | 0 mods/{ => z_extra_mods}/alias/init.lua | 0 mods/{ => z_extra_mods}/alias/license.txt | 0 .../alias/moreblocksrem.lua | 0 mods/{ => z_extra_mods}/alias/moreorerem.lua | 0 mods/{ => z_extra_mods}/alias/moresnowrem.lua | 0 .../{ => z_extra_mods}/alias/moretreesrem.lua | 0 mods/{ => z_extra_mods}/alias/pathv6rem.lua | 0 mods/{ => z_extra_mods}/alias/technodrem.lua | 0 .../alias/textures/default_ladder.png | Bin .../alias/textures/default_nc_back.png | Bin .../alias/textures/default_nc_front.png | Bin .../alias/textures/default_nc_rb.png | Bin .../alias/textures/default_nc_side.png | Bin .../textures/flowers_waterlily_bottom.png | Bin mods/{ => z_extra_mods}/alias/villrem.lua | 0 mods/z_extra_mods/bonemeal/README.md | 26 + mods/z_extra_mods/bonemeal/api.txt | 76 ++ mods/z_extra_mods/bonemeal/depends.txt | 6 + mods/z_extra_mods/bonemeal/description.txt | 1 + mods/z_extra_mods/bonemeal/init.lua | 482 +++++++++ mods/z_extra_mods/bonemeal/intllib.lua | 45 + mods/z_extra_mods/bonemeal/license.txt | 21 + mods/z_extra_mods/bonemeal/locale/fr.txt | 7 + .../z_extra_mods/bonemeal/locale/template.txt | 7 + mods/z_extra_mods/bonemeal/mod.conf | 1 + mods/z_extra_mods/bonemeal/mods.lua | 116 +++ mods/z_extra_mods/bonemeal/screenshot.png | Bin 0 -> 15254 bytes .../bonemeal/textures/bonemeal_bone.png | Bin 0 -> 148 bytes .../bonemeal/textures/bonemeal_fertiliser.png | Bin 0 -> 186 bytes .../bonemeal/textures/bonemeal_item.png | Bin 0 -> 186 bytes .../bonemeal/textures/bonemeal_mulch.png | Bin 0 -> 186 bytes .../bonemeal/textures/bonemeal_particle.png | Bin 0 -> 116 bytes mods/z_extra_mods/esm_map/init.lua | 36 + .../z_extra_mods/esm_map/textures/2sGp19m.png | Bin 0 -> 85418 bytes mods/z_extra_mods/esm_map/textures/zombie.lua | 132 +++ mods/{ => z_extra_mods}/nyancat/README.txt | 0 mods/{ => z_extra_mods}/nyancat/depends.txt | 0 mods/{ => z_extra_mods}/nyancat/init.lua | 0 .../nyancat/textures/nyancat_back.png | Bin .../nyancat/textures/nyancat_front.png | Bin .../nyancat/textures/nyancat_rainbow.png | Bin .../nyancat/textures/nyancat_side.png | Bin 242 files changed, 8327 insertions(+), 3662 deletions(-) create mode 100644 mods/a_mapgen_mods/flowlib/README.txt create mode 100644 mods/a_mapgen_mods/flowlib/init.lua create mode 100644 mods/a_mapgen_mods/flowlib/mod.conf create mode 100644 mods/a_mapgen_mods/roadvalleys/README.txt create mode 100644 mods/a_mapgen_mods/roadvalleys/depends.txt create mode 100644 mods/a_mapgen_mods/roadvalleys/init.lua create mode 100644 mods/a_mapgen_mods/roadvalleys/license.txt create mode 100644 mods/a_mapgen_mods/roadvalleys/nodes.lua create mode 100644 mods/a_mapgen_mods/roadvalleys/textures/roadvalleys_concrete.png create mode 100644 mods/a_mapgen_mods/roadvalleys/textures/roadvalleys_road_black.png create mode 100644 mods/a_mapgen_mods/roadvalleys/textures/roadvalleys_road_white.png create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/README.md create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/depends.txt create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/description.txt create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/gameconfig.lua create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/init.lua create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/mod.conf create mode 100644 mods/a_mapgen_mods/tsm_railcorridors/settingtypes.txt create mode 100644 mods/beds/license.txt create mode 100644 mods/boats/license.txt create mode 100644 mods/bucket/license.txt delete mode 100644 mods/builtin_item/.gitignore delete mode 100644 mods/builtin_item/README.md delete mode 100644 mods/builtin_item/depends.txt delete mode 100644 mods/builtin_item/init.lua delete mode 100644 mods/builtin_item/sounds/builtin_item_lava.ogg delete mode 100644 mods/builtin_item/textures/tnt_smoke.png create mode 100644 mods/creative/inventory.lua create mode 100644 mods/creative/license.txt create mode 100644 mods/default/models/chest_open.obj create mode 100644 mods/default/models/torch_ceiling.obj create mode 100644 mods/default/models/torch_floor.obj create mode 100644 mods/default/models/torch_wall.obj create mode 100644 mods/default/schematics/acacia_bush.mts create mode 100644 mods/default/schematics/acacia_log.mts create mode 100644 mods/default/schematics/apple_log.mts create mode 100644 mods/default/schematics/aspen_log.mts create mode 100644 mods/default/schematics/bush.mts create mode 100644 mods/default/schematics/corals.mts create mode 100644 mods/default/schematics/jungle_log.mts create mode 100644 mods/default/schematics/pine_log.mts create mode 100644 mods/default/sounds/default_chest_close.ogg create mode 100644 mods/default/sounds/default_chest_open.ogg create mode 100644 mods/default/sounds/default_dig_snappy.ogg create mode 100644 mods/default/sounds/default_tool_breaks.1.ogg create mode 100644 mods/default/sounds/default_tool_breaks.2.ogg create mode 100644 mods/default/sounds/default_tool_breaks.3.ogg create mode 100644 mods/default/sounds/default_water_footstep.1.ogg create mode 100644 mods/default/sounds/default_water_footstep.2.ogg create mode 100644 mods/default/sounds/default_water_footstep.3.ogg create mode 100644 mods/default/sounds/default_water_footstep.4.ogg create mode 100644 mods/default/textures/default_acacia_bush_sapling.png create mode 100644 mods/default/textures/default_acacia_bush_stem.png create mode 100644 mods/default/textures/default_acacia_leaves_simple.png create mode 100644 mods/default/textures/default_bookshelf_slot.png create mode 100644 mods/default/textures/default_bush_sapling.png create mode 100644 mods/default/textures/default_bush_stem.png create mode 100644 mods/default/textures/default_chest_inside.png create mode 100644 mods/default/textures/default_key.png create mode 100644 mods/default/textures/default_key_skeleton.png create mode 100644 mods/default/textures/default_mese_post_light_side.png create mode 100644 mods/default/textures/default_mese_post_light_side_dark.png create mode 100644 mods/default/textures/default_mese_post_light_top.png create mode 100644 mods/default/textures/default_mineral_tin.png create mode 100644 mods/default/textures/default_rainforest_litter.png create mode 100644 mods/default/textures/default_rainforest_litter_side.png create mode 100644 mods/default/torch.lua create mode 100644 mods/default/trees-416.zip create mode 100644 mods/dye/license.txt create mode 100644 mods/farming/farming.conf_example create mode 100644 mods/farming/hemp.lua delete mode 100644 mods/farming/init.lua_orig create mode 100644 mods/farming/lucky_block.lua create mode 100644 mods/farming/textures/banana_single.png create mode 100644 mods/farming/textures/farming_hemp_1.png create mode 100644 mods/farming/textures/farming_hemp_2.png create mode 100644 mods/farming/textures/farming_hemp_3.png create mode 100644 mods/farming/textures/farming_hemp_4.png create mode 100644 mods/farming/textures/farming_hemp_5.png create mode 100644 mods/farming/textures/farming_hemp_6.png create mode 100644 mods/farming/textures/farming_hemp_7.png create mode 100644 mods/farming/textures/farming_hemp_8.png create mode 100644 mods/farming/textures/farming_hemp_fibre.png create mode 100644 mods/farming/textures/farming_hemp_leaf.png create mode 100644 mods/farming/textures/farming_hemp_oil.png create mode 100644 mods/farming/textures/farming_hemp_rope.png create mode 100644 mods/farming/textures/farming_hemp_seed.png create mode 100644 mods/farming/textures/farming_orange.png create mode 100644 mods/farming/textures/strawberry.png create mode 100644 mods/fire/license.txt create mode 100644 mods/fire/sounds/fire_fire.1.ogg create mode 100644 mods/fire/sounds/fire_fire.2.ogg create mode 100644 mods/fire/sounds/fire_fire.3.ogg create mode 100644 mods/fire/sounds/fire_flint_and_steel.ogg create mode 100644 mods/flowers/license.txt create mode 100644 mods/flowers/textures/flowers_waterlily_bottom.png create mode 100644 mods/tnt/license.txt create mode 100644 mods/tnt/textures/tnt_blast.png delete mode 100644 mods/tnt/textures/tnt_gunpowder.png delete mode 100644 mods/tnt/textures/tnt_gunpowder_burning.png delete mode 100644 mods/tnt/textures/tnt_gunpowder_burning_animated.png create mode 100644 mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png create mode 100644 mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png create mode 100644 mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png create mode 100644 mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png create mode 100644 mods/tnt/textures/tnt_gunpowder_crossing.png create mode 100644 mods/tnt/textures/tnt_gunpowder_curved.png create mode 100644 mods/tnt/textures/tnt_gunpowder_straight.png create mode 100644 mods/tnt/textures/tnt_gunpowder_t_junction.png create mode 100644 mods/vessels/license.txt create mode 100644 mods/vessels/textures/vessels_shelf_slot.png create mode 100644 mods/walls/README.txt delete mode 100644 mods/walls/init-fence.lua delete mode 100644 mods/walls/init-wall.lua create mode 100644 mods/walls/license.txt create mode 100644 mods/wool/license.txt create mode 100644 mods/xpanes/license.txt create mode 100644 mods/xpanes/textures/xpanes_bar_top.png delete mode 100644 mods/xpanes/textures/xpanes_grey.png rename mods/{ => z_extra_mods}/alias/alias.lua (100%) rename mods/{ => z_extra_mods}/alias/esmobs.lua (100%) rename mods/{ => z_extra_mods}/alias/esorerem.lua (100%) rename mods/{ => z_extra_mods}/alias/init.lua (100%) rename mods/{ => z_extra_mods}/alias/license.txt (100%) rename mods/{ => z_extra_mods}/alias/moreblocksrem.lua (100%) rename mods/{ => z_extra_mods}/alias/moreorerem.lua (100%) rename mods/{ => z_extra_mods}/alias/moresnowrem.lua (100%) rename mods/{ => z_extra_mods}/alias/moretreesrem.lua (100%) rename mods/{ => z_extra_mods}/alias/pathv6rem.lua (100%) rename mods/{ => z_extra_mods}/alias/technodrem.lua (100%) rename mods/{ => z_extra_mods}/alias/textures/default_ladder.png (100%) rename mods/{ => z_extra_mods}/alias/textures/default_nc_back.png (100%) rename mods/{ => z_extra_mods}/alias/textures/default_nc_front.png (100%) rename mods/{ => z_extra_mods}/alias/textures/default_nc_rb.png (100%) rename mods/{ => z_extra_mods}/alias/textures/default_nc_side.png (100%) rename mods/{ => z_extra_mods}/alias/textures/flowers_waterlily_bottom.png (100%) rename mods/{ => z_extra_mods}/alias/villrem.lua (100%) create mode 100644 mods/z_extra_mods/bonemeal/README.md create mode 100644 mods/z_extra_mods/bonemeal/api.txt create mode 100644 mods/z_extra_mods/bonemeal/depends.txt create mode 100644 mods/z_extra_mods/bonemeal/description.txt create mode 100644 mods/z_extra_mods/bonemeal/init.lua create mode 100644 mods/z_extra_mods/bonemeal/intllib.lua create mode 100644 mods/z_extra_mods/bonemeal/license.txt create mode 100644 mods/z_extra_mods/bonemeal/locale/fr.txt create mode 100644 mods/z_extra_mods/bonemeal/locale/template.txt create mode 100644 mods/z_extra_mods/bonemeal/mod.conf create mode 100644 mods/z_extra_mods/bonemeal/mods.lua create mode 100644 mods/z_extra_mods/bonemeal/screenshot.png create mode 100644 mods/z_extra_mods/bonemeal/textures/bonemeal_bone.png create mode 100644 mods/z_extra_mods/bonemeal/textures/bonemeal_fertiliser.png create mode 100644 mods/z_extra_mods/bonemeal/textures/bonemeal_item.png create mode 100644 mods/z_extra_mods/bonemeal/textures/bonemeal_mulch.png create mode 100644 mods/z_extra_mods/bonemeal/textures/bonemeal_particle.png create mode 100644 mods/z_extra_mods/esm_map/init.lua create mode 100644 mods/z_extra_mods/esm_map/textures/2sGp19m.png create mode 100644 mods/z_extra_mods/esm_map/textures/zombie.lua rename mods/{ => z_extra_mods}/nyancat/README.txt (100%) rename mods/{ => z_extra_mods}/nyancat/depends.txt (100%) rename mods/{ => z_extra_mods}/nyancat/init.lua (100%) rename mods/{ => z_extra_mods}/nyancat/textures/nyancat_back.png (100%) rename mods/{ => z_extra_mods}/nyancat/textures/nyancat_front.png (100%) rename mods/{ => z_extra_mods}/nyancat/textures/nyancat_rainbow.png (100%) rename mods/{ => z_extra_mods}/nyancat/textures/nyancat_side.png (100%) diff --git a/README.md b/README.md index cccb3cdf..9c8a269c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Extreme Survival created by maikerumine
- Minetest 0.4.14 mod: "Extreme Survival"
+ Minetest 0.4.16 mod: "Extreme Survival"
namespace: extreme_survival
- (c) 2014-2016 by: maikerumine
+ (c) 2014-2017 by: maikerumine
https://github.com/maikerumine
LGPLv2.1 (SEE BOTTOM)
======================= diff --git a/mods/a_mapgen_mods/flowlib/README.txt b/mods/a_mapgen_mods/flowlib/README.txt new file mode 100644 index 00000000..5425ce96 --- /dev/null +++ b/mods/a_mapgen_mods/flowlib/README.txt @@ -0,0 +1,7 @@ +Waterlib +================ +Simple flow functions for use in Minetest mods by Qwertymine3 + +License of source code: +----------------------- +WTFPL diff --git a/mods/a_mapgen_mods/flowlib/init.lua b/mods/a_mapgen_mods/flowlib/init.lua new file mode 100644 index 00000000..96baf99b --- /dev/null +++ b/mods/a_mapgen_mods/flowlib/init.lua @@ -0,0 +1,146 @@ +flowlib = {} + +--sum of direction vectors must match an array index +local function to_unit_vector(dir_vector) + --(sum,root) + -- (0,1), (1,1+0=1), (2,1+1=2), (3,1+2^2=5), (4,2^2+2^2=8) + local inv_roots = {[0] = 1, [1] = 1, [2] = 0.70710678118655, [4] = 0.5 + , [5] = 0.44721359549996, [8] = 0.35355339059327} + local sum = dir_vector.x*dir_vector.x + dir_vector.z*dir_vector.z + return {x=dir_vector.x*inv_roots[sum],y=dir_vector.y + ,z=dir_vector.z*inv_roots[sum]} +end + +local is_touching = function(realpos,nodepos,radius) + local boarder = 0.5 - radius + return (math.abs(realpos - nodepos) > (boarder)) +end + +flowlib.is_touching = is_touching + +local is_water = function(pos) + return (minetest.get_item_group(minetest.get_node( + {x=pos.x,y=pos.y,z=pos.z}).name + , "water") ~= 0) +end + +flowlib.is_water = is_water + +local node_is_water = function(node) + return (minetest.get_item_group(node.name, "water") ~= 0) +end + +flowlib.node_is_water = node_is_water + +local is_lava = function(pos) + return (minetest.get_item_group(minetest.get_node( + {x=pos.x,y=pos.y,z=pos.z}).name + , "lava") ~= 0) +end + +flowlib.is_lava = is_lava + +local node_is_lava = function(node) + return (minetest.get_item_group(node.name, "lava") ~= 0) +end + +flowlib.node_is_lava = node_is_lava + + +local is_liquid = function(pos) + return (minetest.get_item_group(minetest.get_node( + {x=pos.x,y=pos.y,z=pos.z}).name + , "liquid") ~= 0) +end + +flowlib.is_liquid = is_liquid + +local node_is_liquid = function(node) + return (minetest.get_item_group(node.name, "liquid") ~= 0) +end + +flowlib.node_is_liquid = node_is_liquid + +--This code is more efficient +local function quick_flow_logic(node,pos_testing,direction) + local name = node.name + if minetest.registered_nodes[name].liquidtype == "source" then + local node_testing = minetest.get_node(pos_testing) + local param2_testing = node_testing.param2 + if minetest.registered_nodes[node_testing.name].liquidtype + ~= "flowing" then + return 0 + else + return direction + end + elseif minetest.registered_nodes[name].liquidtype == "flowing" then + local node_testing = minetest.get_node(pos_testing) + local param2_testing = node_testing.param2 + if minetest.registered_nodes[node_testing.name].liquidtype + == "source" then + return -direction + elseif minetest.registered_nodes[node_testing.name].liquidtype + == "flowing" then + if param2_testing < node.param2 then + if (node.param2 - param2_testing) > 6 then + return -direction + else + return direction + end + elseif param2_testing > node.param2 then + if (param2_testing - node.param2) > 6 then + return direction + else + return -direction + end + end + end + end + return 0 +end + +local quick_flow = function(pos,node) + local x = 0 + local z = 0 + + if not node_is_liquid(node) then + return {x=0,y=0,z=0} + end + + x = x + quick_flow_logic(node,{x=pos.x-1,y=pos.y,z=pos.z},-1) + x = x + quick_flow_logic(node,{x=pos.x+1,y=pos.y,z=pos.z}, 1) + z = z + quick_flow_logic(node,{x=pos.x,y=pos.y,z=pos.z-1},-1) + z = z + quick_flow_logic(node,{x=pos.x,y=pos.y,z=pos.z+1}, 1) + + return to_unit_vector({x=x,y=0,z=z}) +end + +flowlib.quick_flow = quick_flow + + + --if not in water but touching, move centre to touching block + --x has higher precedence than z + --if pos changes with x, it affects z +local move_centre = function(pos,realpos,node,radius) + if is_touching(realpos.x,pos.x,radius) then + if is_liquid({x=pos.x-1,y=pos.y,z=pos.z}) then + node = minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z}) + pos = {x=pos.x-1,y=pos.y,z=pos.z} + elseif is_liquid({x=pos.x+1,y=pos.y,z=pos.z}) then + node = minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z}) + pos = {x=pos.x+1,y=pos.y,z=pos.z} + end + end + if is_touching(realpos.z,pos.z,radius) then + if is_liquid({x=pos.x,y=pos.y,z=pos.z-1}) then + node = minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1}) + pos = {x=pos.x,y=pos.y,z=pos.z-1} + elseif is_liquid({x=pos.x,y=pos.y,z=pos.z+1}) then + node = minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1}) + pos = {x=pos.x,y=pos.y,z=pos.z+1} + end + end + return pos,node +end + +flowlib.move_centre = move_centre diff --git a/mods/a_mapgen_mods/flowlib/mod.conf b/mods/a_mapgen_mods/flowlib/mod.conf new file mode 100644 index 00000000..0d982481 --- /dev/null +++ b/mods/a_mapgen_mods/flowlib/mod.conf @@ -0,0 +1 @@ +name = flowlib diff --git a/mods/a_mapgen_mods/roadvalleys/README.txt b/mods/a_mapgen_mods/roadvalleys/README.txt new file mode 100644 index 00000000..ec1828ec --- /dev/null +++ b/mods/a_mapgen_mods/roadvalleys/README.txt @@ -0,0 +1,7 @@ +roadvalleys 0.1.0 by paramat +For Minetest 0.4.13 and later +Depends default +Licenses: Source code LGPL (2.1). Media (textures) CC BY-SA 3.0 +See license.txt for license information + +Use with Minetest core mapgen 'valleys' only. diff --git a/mods/a_mapgen_mods/roadvalleys/depends.txt b/mods/a_mapgen_mods/roadvalleys/depends.txt new file mode 100644 index 00000000..331d858c --- /dev/null +++ b/mods/a_mapgen_mods/roadvalleys/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/a_mapgen_mods/roadvalleys/init.lua b/mods/a_mapgen_mods/roadvalleys/init.lua new file mode 100644 index 00000000..3289e5d7 --- /dev/null +++ b/mods/a_mapgen_mods/roadvalleys/init.lua @@ -0,0 +1,373 @@ +-- Parameters + +local DEBUG = true + +-- Mapgen valleys noises + +local np_terrain_height = { + offset = -10, + scale = 50, + spread = {x = 1024, y = 1024, z = 1024}, + seed = 5202, + octaves = 6, + persist = 0.4, + lacunarity = 2.0, +} + +local np_valley_depth = { + offset = 5, + scale = 4, + spread = {x = 512, y = 512, z = 512}, + seed = -1914, + octaves = 1, + persist = 0.0, + lacunarity = 2.0, +} + +-- Mod noises + +-- 2D noise for patha + +local np_patha = { + offset = 0, + scale = 1, + spread = {x = 1024, y = 1024, z = 1024}, + seed = 11711, + octaves = 3, + persist = 0.4 +} + +-- 2D noise for pathb + +local np_pathb = { + offset = 0, + scale = 1, + spread = {x = 2048, y = 2048, z = 2048}, + seed = 8017, + octaves = 4, + persist = 0.4 +} + +-- 2D noise for pathc + +local np_pathc = { + offset = 0, + scale = 1, + spread = {x = 4096, y = 4096, z = 4096}, + seed = 300707, + octaves = 5, + persist = 0.4 +} + +-- 2D noise for pathd + +local np_pathd = { + offset = 0, + scale = 1, + spread = {x = 8192, y = 8192, z = 8192}, + seed = 80033, + octaves = 6, + persist = 0.4 +} + + +-- Do files + +dofile(minetest.get_modpath("roadvalleys") .. "/nodes.lua") + + +-- Constants + +local c_roadblack = minetest.get_content_id("roadvalleys:road_black") +local c_roadslab = minetest.get_content_id("roadvalleys:road_black_slab") +local c_roadwhite = minetest.get_content_id("roadvalleys:road_white") +local c_concrete = minetest.get_content_id("roadvalleys:concrete") + +local c_air = minetest.CONTENT_AIR +local c_ignore = minetest.CONTENT_IGNORE +local c_stone = minetest.get_content_id("default:stone") +local c_sastone = minetest.get_content_id("default:sandstone") +local c_destone = minetest.get_content_id("default:desert_stone") +local c_ice = minetest.get_content_id("default:ice") +local c_tree = minetest.get_content_id("default:tree") +local c_leaves = minetest.get_content_id("default:leaves") +local c_apple = minetest.get_content_id("default:apple") +local c_jungletree = minetest.get_content_id("default:jungletree") +local c_jungleleaves = minetest.get_content_id("default:jungleleaves") +local c_pinetree = minetest.get_content_id("default:pine_tree") +local c_pineneedles = minetest.get_content_id("default:pine_needles") +local c_snow = minetest.get_content_id("default:snow") +local c_acaciatree = minetest.get_content_id("default:acacia_tree") +local c_acacialeaves = minetest.get_content_id("default:acacia_leaves") +local c_aspentree = minetest.get_content_id("default:aspen_tree") +local c_aspenleaves = minetest.get_content_id("default:aspen_leaves") +local c_meselamp = minetest.get_content_id("default:meselamp") + + +-- Initialise noise objects to nil + +local nobj_terrain_height = nil +local nobj_valley_depth = nil +local nobj_patha = nil +local nobj_pathb = nil +local nobj_pathc = nil +local nobj_pathd = nil + + +-- Localise noise buffers + +local nbuf_terrain_height = {} +local nbuf_valley_depth = {} +local nbuf_patha = {} +local nbuf_pathb = {} +local nbuf_pathc = {} +local nbuf_pathd = {} + + +-- Localise data buffer + +local dbuf = {} + + +-- On generated function + +minetest.register_on_generated(function(minp, maxp, seed) + if minp.y > 0 or maxp.y < 0 then + return + end + + local t1 = os.clock() + + local x1 = maxp.x + local y1 = maxp.y + local z1 = maxp.z + local x0 = minp.x + local y0 = minp.y + local z0 = minp.z + + local sidelen = x1 - x0 + 1 + local emerlen = sidelen + 32 + local overlen = sidelen + 9 + local pmapdims = {x = overlen, y = overlen, z = 1} + local pmapminp = {x = x0 - 5, y = z0 - 5} + + nobj_terrain_height = nobj_terrain_height or + minetest.get_perlin_map(np_terrain_height, pmapdims) + nobj_valley_depth = nobj_valley_depth or + minetest.get_perlin_map(np_valley_depth, pmapdims) + nobj_patha = nobj_patha or minetest.get_perlin_map(np_patha, pmapdims) + nobj_pathb = nobj_pathb or minetest.get_perlin_map(np_pathb, pmapdims) + nobj_pathc = nobj_pathc or minetest.get_perlin_map(np_pathc, pmapdims) + nobj_pathd = nobj_pathd or minetest.get_perlin_map(np_pathd, pmapdims) + + local nvals_terrain_height = + nobj_terrain_height:get2dMap_flat(pmapminp, nbuf_terrain_height) + local nvals_valley_depth = + nobj_valley_depth:get2dMap_flat(pmapminp, nbuf_valley_depth) + local nvals_patha = nobj_patha:get2dMap_flat(pmapminp, nbuf_patha) + local nvals_pathb = nobj_pathb:get2dMap_flat(pmapminp, nbuf_pathb) + local nvals_pathc = nobj_pathc:get2dMap_flat(pmapminp, nbuf_pathc) + local nvals_pathd = nobj_pathd:get2dMap_flat(pmapminp, nbuf_pathd) + + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} + local data = vm:get_data(dbuf) + + local ni = 1 + for z = z0 - 5, z1 + 4 do + local n_xprepatha = nil + local n_xprepathb = nil + local n_xprepathc = nil + local n_xprepathd = nil + -- x0 - 5, z0 - 5 is to setup initial values of 'xprepath_', 'zprepath_' + for x = x0 - 5, x1 + 4 do + local n_patha = nvals_patha[ni] + local n_zprepatha = nvals_patha[(ni - overlen)] + local n_pathb = nvals_pathb[ni] + local n_zprepathb = nvals_pathb[(ni - overlen)] + local n_pathc = nvals_pathc[ni] + local n_zprepathc = nvals_pathc[(ni - overlen)] + local n_pathd = nvals_pathd[ni] + local n_zprepathd = nvals_pathd[(ni - overlen)] + + if x >= x0 - 4 and z >= z0 - 4 then + local n_terrain_height = nvals_terrain_height[ni] + local n_valley_depth = nvals_valley_depth[ni] + -- *** math.floor() fixes scattered bridge elements bug *** + local tlevel = math.floor(n_terrain_height + + (n_valley_depth * n_valley_depth)) + -- Add 6 to terrain level so that bridges pass over rivers + local pathy = math.min(math.max(tlevel + 6, 7), 42) + + if (n_patha >= 0 and n_xprepatha < 0) -- detect sign change of noise + or (n_patha < 0 and n_xprepatha >= 0) + or (n_patha >= 0 and n_zprepatha < 0) + or (n_patha < 0 and n_zprepatha >= 0) + + or (n_pathb >= 0 and n_xprepathb < 0) + or (n_pathb < 0 and n_xprepathb >= 0) + or (n_pathb >= 0 and n_zprepathb < 0) + or (n_pathb < 0 and n_zprepathb >= 0) + + or (n_pathc >= 0 and n_xprepathc < 0) + or (n_pathc < 0 and n_xprepathc >= 0) + or (n_pathc >= 0 and n_zprepathc < 0) + or (n_pathc < 0 and n_zprepathc >= 0) + + or (n_pathd >= 0 and n_xprepathd < 0) + or (n_pathd < 0 and n_xprepathd >= 0) + or (n_pathd >= 0 and n_zprepathd < 0) + or (n_pathd < 0 and n_zprepathd >= 0) then + -- scan disk 5 nodes above path + local tunnel = false + local excatop + + for zz = z - 4, z + 4 do + local vi = area:index(x - 4, pathy + 5, zz) + for xx = x - 4, x + 4 do + local nodid = data[vi] + if nodid == c_stone + or nodid == c_destone + or nodid == c_sastone + or nodid == c_ice then + tunnel = true + end + vi = vi + 1 + end + end + + if tunnel then + excatop = pathy + 5 + else + excatop = y1 + end + -- place path node brush + local vi = area:index(x, pathy, z) + data[vi] = c_roadwhite + + for k = -4, 4 do + local vi = area:index(x - 4, pathy, z + k) + for i = -4, 4 do + local radsq = (math.abs(i)) ^ 2 + (math.abs(k)) ^ 2 + if radsq <= 13 then + local nodid = data[vi] + if nodid ~= c_roadwhite then + data[vi] = c_roadblack + end + elseif radsq <= 25 then + local nodid = data[vi] + if nodid ~= c_roadblack + and nodid ~= c_roadwhite then + data[vi] = c_roadslab + end + end + vi = vi + 1 + end + end + -- foundations or bridge structure + for k = -4, 4 do + local vi = area:index(x - 4, pathy - 1, z + k) + for i = -4, 4 do + local radsq = (math.abs(i)) ^ 2 + (math.abs(k)) ^ 2 + if radsq <= 25 then + local nodid = data[vi] + if nodid ~= c_roadblack + and nodid ~= c_roadwhite + and nodid ~= c_roadslab then + data[vi] = c_concrete + end + end + if radsq <= 2 then + local viu = vi - emerlen + local nodid = data[viu] + if nodid ~= c_roadblack + and nodid ~= c_roadwhite + and nodid ~= c_roadslab then + data[viu] = c_concrete + end + end + vi = vi + 1 + end + end + -- bridge columns + if math.random() <= 0.0625 then + for xx = x - 1, x + 1 do + for zz = z - 1, z + 1 do + local vi = area:index(xx, pathy - 3, zz) + for y = pathy - 3, y0 - 16, -1 do + local nodid = data[vi] + if nodid == c_stone + or nodid == c_destone + or nodid == c_sastone then + break + else + data[vi] = c_concrete + end + vi = vi - emerlen + end + end + end + end + -- excavate above path + for y = pathy + 1, excatop do + for zz = z - 4, z + 4 do + local vi = area:index(x - 4, y, zz) + for xx = x - 4, x + 4 do + local nodid = data[vi] + if tunnel and y == excatop then -- tunnel ceiling + if nodid ~= c_air + and nodid ~= c_ignore + and nodid ~= c_meselamp then + if (math.abs(zz - z) == 4 + or math.abs(xx - x) == 4) + and math.random() <= 0.2 then + data[vi] = c_meselamp + else + data[vi] = c_concrete + end + end + elseif y <= pathy + 5 then + if nodid ~= c_roadblack + and nodid ~= c_roadslab + and nodid ~= c_roadwhite then + data[vi] = c_air + end + elseif nodid == c_tree + or nodid == c_leaves + or nodid == c_apple + or nodid == c_jungletree + or nodid == c_jungleleaves + or nodid == c_pinetree + or nodid == c_pineneedles + or nodid == c_snow + or nodid == c_acaciatree + or nodid == c_acacialeaves + or nodid == c_aspentree + or nodid == c_aspenleaves then + data[vi] = c_air + end + vi = vi + 1 + end + end + end + end + end + + n_xprepatha = n_patha + n_xprepathb = n_pathb + n_xprepathc = n_pathc + n_xprepathd = n_pathd + ni = ni + 1 + end + end + + vm:set_data(data) + vm:set_lighting({day = 0, night = 0}) + vm:calc_lighting() + vm:write_to_map(data) + + local chugent = math.ceil((os.clock() - t1) * 1000) + if DEBUG then + print ("[roadvalleys] "..chugent.." ms") + end +end) diff --git a/mods/a_mapgen_mods/roadvalleys/license.txt b/mods/a_mapgen_mods/roadvalleys/license.txt new file mode 100644 index 00000000..356b756a --- /dev/null +++ b/mods/a_mapgen_mods/roadvalleys/license.txt @@ -0,0 +1,49 @@ +License of source code +---------------------- +Copyright (C) 2016-2017 paramat + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +License of media (textures) +--------------------------- +Copyright (C) 2016 paramat + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + +You are free to: + +Share — copy and redistribute the material in any medium or format +Adapt — remix, transform, and build upon the material for any purpose, even commercially. + +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/a_mapgen_mods/roadvalleys/nodes.lua b/mods/a_mapgen_mods/roadvalleys/nodes.lua new file mode 100644 index 00000000..cfa59da5 --- /dev/null +++ b/mods/a_mapgen_mods/roadvalleys/nodes.lua @@ -0,0 +1,43 @@ +minetest.register_node("roadvalleys:road_black", { + description = "Road Black", + tiles = {"roadvalleys_road_black.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("roadvalleys:road_black_slab", { + description = "Road Black Slab", + tiles = {"roadvalleys_road_black.png"}, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + node_box = { + type = "fixed", + fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}}, + }, + selection_box = { + type = "fixed", + fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}}, + }, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("roadvalleys:road_white", { + description = "Road White", + tiles = {"roadvalleys_road_white.png"}, + paramtype = "light", + --light_source = 12, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("roadvalleys:concrete", { + description = "Concrete", + tiles = {"roadvalleys_concrete.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) diff --git a/mods/a_mapgen_mods/roadvalleys/textures/roadvalleys_concrete.png b/mods/a_mapgen_mods/roadvalleys/textures/roadvalleys_concrete.png new file mode 100644 index 0000000000000000000000000000000000000000..9c91051acf444e90199585606f93bbafbfad7a70 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfJyv;E9&3C4>Q`W<+FWA`%g1HrW91eG_9eVIc&2 zU}aN3O%tAR90&X#i0Hi+k#$|i7yvNFur6OE_GL0ok(P`xnswidA(+`nzde3B4T^{% z1S>fa+4sG*WR@G%$Y-j*TDZSrsB%*nqODU~28>`k@O7Y&8QdHGBS4ugK zqqR21_*(Su<=8fC>!)3|6Dxt;-09C*5D_A>Upq%cbate@_kG__660*GnK?P`sfJys!c3AQDS{vf?lo-U3d8t0S${Qqyytl7}n=wh%cG34-t biwq2*xy-Wj^+Xo|RWW$F`njxgN@xNACPyGZ literal 0 HcmV?d00001 diff --git a/mods/a_mapgen_mods/tsm_railcorridors/README.md b/mods/a_mapgen_mods/tsm_railcorridors/README.md new file mode 100644 index 00000000..8af1d886 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/README.md @@ -0,0 +1,17 @@ +# Railway corridors [`tsm_railcorridors`] +MineClone 2 adaption. NO TREASURER SUPPORT! + +* Current version 0.11.0 + +Minetest mod for adding underground corridors with rails and wood constructions with +a few treasure chests now and then. Optional Treasurer support is available for adding +treasures from various mods. + +Use the advanced settings to finetune the railway corridors. + +* Forum thread: https://forum.minetest.net/viewtopic.php?t=10339 +* License: MIT License. + +## Info for modders +Want to include this mod in a subgame, but you hate the dependencies? +You can edit the node names in gameconfig.lua to fit your needs. :-) diff --git a/mods/a_mapgen_mods/tsm_railcorridors/depends.txt b/mods/a_mapgen_mods/tsm_railcorridors/depends.txt new file mode 100644 index 00000000..a29e39b8 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/depends.txt @@ -0,0 +1,3 @@ +default +tnt +farming diff --git a/mods/a_mapgen_mods/tsm_railcorridors/description.txt b/mods/a_mapgen_mods/tsm_railcorridors/description.txt new file mode 100644 index 00000000..33bfd506 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/description.txt @@ -0,0 +1 @@ +Adds simple underground mines with railways and occasional treasure chests. diff --git a/mods/a_mapgen_mods/tsm_railcorridors/gameconfig.lua b/mods/a_mapgen_mods/tsm_railcorridors/gameconfig.lua new file mode 100644 index 00000000..060970a5 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/gameconfig.lua @@ -0,0 +1,98 @@ +-- This file stores the various node types. This makes it easier to plug this mod into subgames +-- in which you need to change the node names. + +-- Adapted for MineClone 2! + +-- Node names (Don't use aliases!) +tsm_railcorridors.nodes = { + dirt = "default:dirt", + chest = "default:chest", + rail = "carts:rail", + torch_floor = "default:torch", + torch_wall = "default:torch_wall", + + --[[ Wood types for the corridors. Corridors are made out of full wood blocks + and posts. For each corridor system, a random wood type is chosen with the chance + specified in per mille. ]] + corridor_woods = { + { wood = "default:wood", post = "default:fence_wood", chance = 900}, + { wood = "default:junglewood", post = "default:fence_junglewood", chance = 100}, + }, +} + +-- Fallback function. Returns a random treasure. This function is called for chests +-- only if the Treasurer mod is not found. +-- pr: A PseudoRandom object +function tsm_railcorridors.get_default_treasure(pr) + -- UNUSED IN MINECLONE 2! +end + +-- MineClone 2's treasure function. Gets all treasures for a single chest. +-- Based on information from Minecraft Wiki. +function tsm_railcorridors.get_treasures(pr) + local items = {} + -- First roll + local r1 = pr:next(1,71) + if r1 <= 30 then + table.insert(items, "mobs:nametag") + elseif r1 <= 50 then + table.insert(items, "farming:carrot_gold") + elseif r1 <= 60 then + -- TODO: Enchanted Book + table.insert(items, "default:book") + elseif r1 <= 65 then + -- Nothing! + elseif r1 <= 70 then + table.insert(items, "default:pick_steel") + else + -- TODO: Enchanted Golden Apple + table.insert(items, "farming:carrot_gold") + end + + -- Second roll + local r2stacks = pr:next(2,4) + for i=1, r2stacks do + local r2 = pr:next(1,83) + if r2 <= 15 then + table.insert(items, "farming:bread "..pr:next(1,3)) + elseif r2 <= 25 then + table.insert(items, "default:coal_lump "..pr:next(3,8)) + elseif r2 <= 35 then + table.insert(items, "farming:tomato "..pr:next(2,4)) + elseif r2 <= 45 then + table.insert(items, "farming:melon_slice "..pr:next(2,4)) + elseif r2 <= 55 then + table.insert(items, "farming:carrot "..pr:next(2,4)) + elseif r2 <= 65 then + table.insert(items, "default:steel_ingot "..pr:next(1,5)) + elseif r2 <= 70 then + table.insert(items, "dye:blue "..pr:next(4,9)) + elseif r2 <= 75 then + table.insert(items, "default:mese_crystal_fragment "..pr:next(4,9)) + elseif r2 <= 80 then + table.insert(items, "default:gold_ingot "..pr:next(1,3)) + else + table.insert(items, "default:diamond "..pr:next(1,2)) + end + end + + -- Third roll + for i=1, 3 do + local r3 = pr:next(1,50) + if r3 <= 20 then + table.insert(items, "carts:rail "..pr:next(4,8)) + elseif r3 <= 35 then + table.insert(items, "default:torch "..pr:next(1,16)) + elseif r3 <= 40 then + -- TODO: Activator Rail + table.insert(items, "carts:rail "..pr:next(1,4)) + elseif r3 <= 45 then + -- TODO: Detector Rail + table.insert(items, "carts:rail "..pr:next(1,4)) + else + table.insert(items, "carts:powerrail "..pr:next(1,4)) + end + end + + return items +end diff --git a/mods/a_mapgen_mods/tsm_railcorridors/init.lua b/mods/a_mapgen_mods/tsm_railcorridors/init.lua new file mode 100644 index 00000000..a45e0303 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/init.lua @@ -0,0 +1,580 @@ +tsm_railcorridors = {} + +-- Load node names +dofile(minetest.get_modpath(minetest.get_current_modname()).."/gameconfig.lua") + +-- Settings +local setting + +-- Probability function +-- TODO: Check if this is correct +local P = function (float) + return math.floor(32767 * float) +end + +-- Wahrscheinlichkeit für jeden Chunk, solche Gänge mit Schienen zu bekommen +-- Probability for every newly generated chunk to get corridors +local probability_railcaves_in_chunk = P(0.3) +setting = tonumber(minetest.setting_get("tsm_railcorridors_probability_railcaves_in_chunk")) +if setting then + probability_railcaves_in_chunk = P(setting) +end + +-- Innerhalb welcher Parameter soll sich die Pfadlänge bewegen? (Forks heben den Maximalwert auf) +-- Minimal and maximal value of path length (forks don't look up this value) +local way_min = 4; +local way_max = 7; +setting = tonumber(minetest.setting_get("tsm_railcorridors_way_min")) +if setting then + way_min = setting +end +setting = tonumber(minetest.setting_get("tsm_railcorridors_way_max")) +if setting then + way_max = setting +end + +-- Wahrsch. für jeden geraden Teil eines Korridors, Fackeln zu bekommen +-- Probability for every horizontal part of a corridor to be with torches +local probability_torches_in_segment = P(0.5) +setting = tonumber(minetest.setting_get("tsm_railcorridors_probability_torches_in_segment")) +if setting then + probability_torches_in_segment = P(setting) +end + +-- Wahrsch. für jeden Teil eines Korridors, nach oben oder nach unten zu gehen +-- Probability for every part of a corridor to go up or down +local probability_up_or_down = P(0.2) +setting = tonumber(minetest.setting_get("tsm_railcorridors_probability_up_or_down")) +if setting then + probability_up_or_down = P(setting) +end + +-- Wahrscheinlichkeit für jeden Teil eines Korridors, sich zu verzweigen – vorsicht, wenn fast jeder Gang sich verzweigt, kann der Algorithums unlösbar werden und MT hängt sich auf +-- Probability for every part of a corridor to fork – caution, too high values may cause MT to hang on. +local probability_fork = P(0.04) +setting = tonumber(minetest.setting_get("tsm_railcorridors_probability_fork")) +if setting then + probability_fork = P(setting) +end + +-- Wahrscheinlichkeit für jeden geraden Teil eines Korridors eine Kiste zu enthalten +-- Probability for every part of a corridor to contain a chest +local probability_chest = P(0.05) +setting = tonumber(minetest.setting_get("tsm_railcorridors_probability_chest")) +if setting then + probability_chest = P(setting) +end + +-- Probability for a rail corridor system to be damaged +local probability_damage = P(0.90) +setting = tonumber(minetest.setting_get("tsm_railcorridors_probability_damage")) +if setting then + probability_damage = P(setting) +end + +-- Max. and min. heights between rail corridors are generated +--local height_min = mcl_vars.mg_bedrock_overworld_max + 5 -- FIXME: Above lava layers +local height_min = -958 +--local height_max = mcl_util.layer_to_y(60) +local height_max = -23 + +-- Chaos Mode: If enabled, rail corridors don't stop generating when hitting obstacles +local chaos_mode = minetest.setting_getbool("tsm_railcorridors_chaos") or false + +-- Parameter Ende + +-- random generator +local pr +local pr_initialized = false + +local function InitRandomizer(seed) + pr = PseudoRandom(seed) + pr_initialized = true +end + + +-- Checks if the mapgen is allowed to carve through this structure and only sets +-- the node if it is allowed. Does never build in liquids. +-- If check_above is true, don't build if the node above is attached (e.g. rail) +-- or a liquid. +local function SetNodeIfCanBuild(pos, node, check_above) + if check_above then + local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name + local abovedef = minetest.registered_nodes[abovename] + if abovename == "unknown" or abovename == "ignore" or (abovedef.groups and abovedef.groups.attached_node) or abovedef.liquidtype ~= "none" then + return false + end + end + local name = minetest.get_node(pos).name + local def = minetest.registered_nodes[name] + if name ~= "unknown" and name ~= "ignore" and def.is_ground_content and def.liquidtype == "none" then + minetest.set_node(pos, node) + return true + else + return false + end +end + +-- Tries to place a rail, taking the damage chance into account +local function PlaceRail(pos, damage_chance) + if damage_chance ~= nil and damage_chance > 0 then + local x = pr:next(0,100) + if x <= damage_chance then + return false + end + end + return SetNodeIfCanBuild(pos, {name=tsm_railcorridors.nodes.rail}) +end + +-- Returns true if the node as point can be considered “ground”, that is, a solid material +-- in which mine shafts can be built into, e.g. stone, but not air or water +local function IsGround(pos) + local nodename = minetest.get_node(pos).name + local nodedef = minetest.registered_nodes[nodename] + return nodename ~= "unknown" and nodename ~= "ignore" and nodedef.is_ground_content and nodedef.walkable and nodedef.liquidtype == "none" +end + +-- Returns true if rails are allowed to be placed on top of this node +local function IsRailSurface(pos) + local nodename = minetest.get_node(pos).name + local nodedef = minetest.registered_nodes[nodename] + return nodename ~= "unknown" and nodename ~= "ignore" and nodedef.walkable and (nodedef.node_box == nil or nodedef.node_box.type == "regular") +end + +-- Checks if the node is empty space which requires to be filled by a platform +local function NeedsPlatform(pos) + local node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}) + local node2 = minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}) + local nodedef = minetest.registered_nodes[node.name] + return node.name ~= "ignore" and node.name ~= "unknown" and nodedef.is_ground_content and ((nodedef.walkable == false and node2.name ~= tsm_railcorridors.nodes.dirt) or (nodedef.groups and nodedef.groups.falling_node)) +end + +-- Create a cube filled with the specified nodes +-- Specialties: +-- * Avoids floating rails for non-solid nodes like air +-- Returns true if all nodes could be set +-- Returns false if setting one or more nodes failed +local function Cube(p, radius, node) + local y_top = p.y+radius + local nodedef = minetest.registered_nodes[node.name] + local solid = nodedef.walkable and (nodedef.node_box == nil or nodedef.node_box.type == "regular") and nodedef.liquidtype == "none" + -- Check if all the nodes could be set + local built_all = true + for zi = p.z-radius, p.z+radius do + for yi = y_top, p.y-radius, -1 do + for xi = p.x-radius, p.x+radius do + local ok = false + if not solid and yi == y_top then + local topdef = minetest.registered_nodes[minetest.get_node({x=xi,y=yi+1,z=zi}).name] + if not (topdef.groups and topdef.groups.attached_node) and topdef.liquidtype == "none" then + ok = true + end + else + ok = true + end + local built = false + if ok then + built = SetNodeIfCanBuild({x=xi,y=yi,z=zi}, node) + end + if not built then + built_all = false + end + end + end + end + return built_all +end + +local function Platform(p, radius, node) + for zi = p.z-radius, p.z+radius do + for xi = p.x-radius, p.x+radius do + local np = NeedsPlatform({x=xi,y=p.y,z=zi}) + if np then + minetest.set_node({x=xi,y=p.y-1,z=zi}, node) + end + end + end +end + + +-- Random chest items +-- Zufälliger Kisteninhalt + +-- chests +local function Place_Chest(pos, param2) + if SetNodeIfCanBuild(pos, {name=tsm_railcorridors.nodes.chest, param2=param2}) then + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local items = tsm_railcorridors.get_treasures(pr) + for i=1, math.min(#items, inv:get_size("main")) do + inv:set_stack("main", i, ItemStack(items[i])) + end + end +end + +local function WoodBulk(pos, wood) + SetNodeIfCanBuild({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=wood}) + SetNodeIfCanBuild({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=wood}) + SetNodeIfCanBuild({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=wood}) + SetNodeIfCanBuild({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=wood}) +end + +-- Gänge mit Schienen +-- Corridors with rails + +-- Returns , +-- success: true if corridor could be placed entirely +-- segments: Number of segments successfully placed +local function corridor_part(start_point, segment_vector, segment_count, wood, post, is_final) + local p = {x=start_point.x, y=start_point.y, z=start_point.z} + local torches = pr:next() < probability_torches_in_segment + local dir = {0, 0} + local torchdir = {1, 1} + local node_wood = {name=wood} + local node_fence = {name=post} + if segment_vector.x == 0 and segment_vector.z ~= 0 then + dir = {1, 0} + torchdir = {5, 4} + elseif segment_vector.x ~= 0 and segment_vector.z == 0 then + dir = {0, 1} + torchdir = {3, 2} + end + for segmentindex = 0, segment_count-1 do + local dug = Cube(p, 1, {name="air"}) + if not chaos_mode and segmentindex > 0 and not dug then return false, segmentindex end + -- Add wooden platform, if neccessary. To avoid floating rails + if segment_vector.y == 0 then + Platform({x=p.x, y=p.y-1, z=p.z}, 1, node_wood) + end + -- Diese komischen Holz-Konstruktionen + -- These strange wood structs + if segmentindex % 2 == 1 and segment_vector.y == 0 then + local calc = { + p.x+dir[1], p.z+dir[2], -- X and Z, added by direction + p.x-dir[1], p.z-dir[2], -- subtracted + p.x+dir[2], p.z+dir[1], -- orthogonal + p.x-dir[2], p.z-dir[1], -- orthogonal, the other way + } + --[[ Shape: + WWW + P.P + PrP + pfp + W = wood + P = post (above floor level) + p = post (in floor level, only placed if no floor) + + From previous generation (for reference): + f = floor + r = rail + . = air + ]] + + -- Don't place those wood structs below open air + if not (minetest.get_node({x=calc[1], y=p.y+2, z=calc[2]}).name == "air" and + minetest.get_node({x=calc[3], y=p.y+2, z=calc[4]}).name == "air" and + minetest.get_node({x=p.x, y=p.y+2, z=p.z}).name == "air") then + + -- Left post and planks + local left_ok = true + left_ok = SetNodeIfCanBuild({x=calc[1], y=p.y-1, z=calc[2]}, node_fence) + if left_ok then left_ok = SetNodeIfCanBuild({x=calc[1], y=p.y , z=calc[2]}, node_fence) end + if left_ok then left_ok = SetNodeIfCanBuild({x=calc[1], y=p.y+1, z=calc[2]}, node_wood) end + + -- Right post and planks + local right_ok = true + right_ok = SetNodeIfCanBuild({x=calc[3], y=p.y-1, z=calc[4]}, node_fence) + if right_ok then right_ok = SetNodeIfCanBuild({x=calc[3], y=p.y , z=calc[4]}, node_fence) end + if right_ok then right_ok = SetNodeIfCanBuild({x=calc[3], y=p.y+1, z=calc[4]}, node_wood) end + + -- Middle planks + local top_planks_ok = false + if left_ok and right_ok then top_planks_ok = SetNodeIfCanBuild({x=p.x, y=p.y+1, z=p.z}, node_wood) end + + if minetest.get_node({x=p.x,y=p.y-2,z=p.z}).name=="air" then + if left_ok then SetNodeIfCanBuild({x=calc[1], y=p.y-2, z=calc[2]}, node_fence) end + if right_ok then SetNodeIfCanBuild({x=calc[3], y=p.y-2, z=calc[4]}, node_fence) end + end + -- Torches on the middle planks + if torches and top_planks_ok then + -- Place torches at horizontal sides + SetNodeIfCanBuild({x=calc[5], y=p.y+1, z=calc[6]}, {name=tsm_railcorridors.nodes.torch_wall, param2=torchdir[1]}, true) + SetNodeIfCanBuild({x=calc[7], y=p.y+1, z=calc[8]}, {name=tsm_railcorridors.nodes.torch_wall, param2=torchdir[2]}, true) + end + elseif torches then + -- Try to build torches instead of the wood structs + local node = {name=tsm_railcorridors.nodes.torch_floor, param2=minetest.dir_to_wallmounted({x=0,y=-1,z=0})} + + -- Try two different height levels + local pos1 = {x=calc[1], y=p.y-2, z=calc[2]} + local pos2 = {x=calc[3], y=p.y-2, z=calc[4]} + local nodedef1 = minetest.registered_nodes[minetest.get_node(pos1).name] + local nodedef2 = minetest.registered_nodes[minetest.get_node(pos2).name] + + if nodedef1.walkable then + pos1.y = pos1.y + 1 + end + SetNodeIfCanBuild(pos1, node, true) + + if nodedef2.walkable then + pos2.y = pos2.y + 1 + end + SetNodeIfCanBuild(pos2, node, true) + + end + end + + -- nächster Punkt durch Vektoraddition + -- next way point + p = vector.add(p, segment_vector) + end + + -- End of the corridor; create the final piece + if is_final then + local dug = Cube(p, 1, {name="air"}) + if not chaos_mode and not dug then return false, segment_count end + Platform({x=p.x, y=p.y-1, z=p.z}, 1, node_wood) + end + return true, segment_count +end + +local function corridor_func(waypoint, coord, sign, up_or_down, up, wood, post, is_final, up_or_down_next, damage) + local segamount = 3 + if up_or_down then + segamount = 1 + end + if sign then + segamount = 0-segamount + end + local vek = {x=0,y=0,z=0}; + local start = table.copy(waypoint) + if coord == "x" then + vek.x=segamount + if up_or_down and up == false then + start.x=start.x+segamount + end + elseif coord == "z" then + vek.z=segamount + if up_or_down and up == false then + start.z=start.z+segamount + end + end + if up_or_down then + if up then + vek.y = 1 + else + vek.y = -1 + end + end + local segcount = pr:next(4,6) + if up_or_down and up == false then + Cube(waypoint, 1, {name="air"}) + end + local corridor_dug, corridor_segments_dug = corridor_part(start, vek, segcount, wood, post, is_final) + local corridor_vek = {x=vek.x*segcount, y=vek.y*segcount, z=vek.z*segcount} + + -- nachträglich Schienen legen + -- after this: rails + segamount = 1 + if sign then + segamount = 0-segamount + end + if coord == "x" then + vek.x=segamount + elseif coord == "z" then + vek.z=segamount + end + if up_or_down then + if up then + vek.y = 1 + else + vek.y = -1 + end + end + local chestplace = -1 + if corridor_dug and not up_or_down and pr:next() < probability_chest then + chestplace = pr:next(1,segcount+1) + end + local railsegcount + if not chaos_mode and not corridor_dug then + railsegcount = corridor_segments_dug * 3 + elseif not up_or_down then + railsegcount = segcount * 3 + else + railsegcount = segcount + end + for i=1,railsegcount do + local p = {x=waypoint.x+vek.x*i, y=waypoint.y+vek.y*i-1, z=waypoint.z+vek.z*i} + if (minetest.get_node({x=p.x,y=p.y-1,z=p.z}).name=="air" and minetest.get_node({x=p.x,y=p.y-3,z=p.z}).name~=tsm_railcorridors.nodes.rail) then + p.y = p.y - 1; + if i == chestplace then + chestplace = chestplace + 1 + end + end + if IsRailSurface({x=p.x,y=p.y-1,z=p.z}) then + PlaceRail(p, damage) + end + if i == chestplace then + if minetest.get_node({x=p.x+vek.z,y=p.y-1,z=p.z-vek.x}).name == post then + chestplace = chestplace + 1 + else + Place_Chest({x=p.x+vek.z,y=p.y,z=p.z-vek.x}, minetest.dir_to_facedir(vek)) + end + end + end + + local offset = table.copy(corridor_vek) + local final_point = vector.add(waypoint, offset) + if up_or_down then + if up then + offset.y = offset.y - 1 + final_point = vector.add(waypoint, offset) + else + offset[coord] = offset[coord] + segamount + final_point = vector.add(waypoint, offset) + if IsRailSurface({x=final_point.x,y=final_point.y-2,z=final_point.z}) then + PlaceRail({x=final_point.x,y=final_point.y-1,z=final_point.z}, damage) + end + end + end + if not corridor_dug then + return false + else + return final_point + end +end + +local function start_corridor(waypoint, coord, sign, length, psra, wood, post, damage) + local wp = waypoint + local c = coord + local s = sign + local ud = false -- up or down + local udn = false -- up or down is next + local up + for i=1,length do + local needs_platform + -- Up or down? + if udn then + needs_platform = NeedsPlatform(wp) + if needs_platform then + ud = false + end + ud = true + -- Force direction near the height limits + if wp.y >= height_max - 12 then + up = false + elseif wp.y <= height_min + 12 then + up = true + else + -- Chose random direction in between + up = pr:next(0, 2) < 1 + end + else + ud = false + end + -- Update up/down next + if pr:next() < probability_up_or_down and i~=1 and not udn and not needs_platform then + udn = i < length + elseif udn and not needs_platform then + udn = false + end + -- Make corridor / Korridor graben + wp = corridor_func(wp,c,s, ud, up, wood, post, i == length, udn, damage) + if wp == false then return end + -- Verzweigung? + -- Fork? + if pr:next() < probability_fork then + local p = {x=wp.x, y=wp.y, z=wp.z} + start_corridor(wp, c, s, pr:next(way_min,way_max), psra, wood, post, damage) + if c == "x" then c="z" else c="x" end + start_corridor(wp, c, s, pr:next(way_min,way_max), psra, wood, post, damage) + start_corridor(wp, c, not s, pr:next(way_min,way_max), psra, wood, post, damage) + WoodBulk({x=p.x, y=p.y-1, z=p.z}, wood) + WoodBulk({x=p.x, y=p.y, z=p.z}, wood) + WoodBulk({x=p.x, y=p.y+1, z=p.z}, wood) + WoodBulk({x=p.x, y=p.y+2, z=p.z}, wood) + return + end + -- coord und sign verändern + -- randomly change sign and coord + if c=="x" then + c="z" + elseif c=="z" then + c="x" + end; + s = pr:next(0, 2) < 1 + end +end + +local function place_corridors(main_cave_coords, psra) + --[[ ALWAYS start building in the ground. Prevents corridors starting + in mid-air or in liquids. ]] + if not IsGround(main_cave_coords) then + return + end + + -- Determine if this corridor system is “damaged” (some rails removed) and to which extent + local damage = 0 + if pr:next() < probability_damage then + damage = pr:next(10, 50) + end + --[[ Starter cube: A big hollow dirt cube from which the corridors will extend. + Corridor generation starts here. ]] + if pr:next(0, 100) < 50 then + Cube(main_cave_coords, 4, {name=tsm_railcorridors.nodes.dirt}) + Cube(main_cave_coords, 3, {name="air"}) + PlaceRail({x=main_cave_coords.x, y=main_cave_coords.y-3, z=main_cave_coords.z}, damage) + main_cave_coords.y =main_cave_coords.y - 1 + else + Cube(main_cave_coords, 3, {name=tsm_railcorridors.nodes.dirt}) + Cube(main_cave_coords, 2, {name="air"}) + PlaceRail({x=main_cave_coords.x, y=main_cave_coords.y-2, z=main_cave_coords.z}, damage) + end + local xs = pr:next(0, 2) < 1 + local zs = pr:next(0, 2) < 1; + + -- Select random wood type (found in gameconfig.lua) + local rnd = pr:next(1,1000) + + local woodtype = 1 + local accumulated_chance = 0 + for w=1, #tsm_railcorridors.nodes.corridor_woods do + local woodtable = tsm_railcorridors.nodes.corridor_woods[w] + accumulated_chance = accumulated_chance + woodtable.chance + if accumulated_chance > 1000 then + minetest.log("warning", "[tsm_railcorridors] Warning: Wood chances add up to over 100%!") + break + end + if rnd <= accumulated_chance then + woodtype = w + break + end + end + local wood = tsm_railcorridors.nodes.corridor_woods[woodtype].wood + local post = tsm_railcorridors.nodes.corridor_woods[woodtype].post + start_corridor(main_cave_coords, "x", xs, pr:next(way_min,way_max), psra, wood, post, damage) + start_corridor(main_cave_coords, "z", zs, pr:next(way_min,way_max), psra, wood, post, damage) + -- Auch mal die andere Richtung? + -- Try the other direction? + if pr:next(0, 100) < 70 then + start_corridor(main_cave_coords, "x", not xs, pr:next(way_min,way_max), psra, wood, post, damage) + end + if pr:next(0, 100) < 70 then + start_corridor(main_cave_coords, "z", not zs, pr:next(way_min,way_max), psra, wood, post, damage) + end +end + +minetest.register_on_generated(function(minp, maxp, blockseed) + InitRandomizer(blockseed) + if minp.y < height_max and maxp.y > height_min and pr:next() < probability_railcaves_in_chunk then + -- Get semi-random height in chunk + + local buffer = 5 + local y = pr:next(minp.y + buffer, maxp.y - buffer) + y = math.floor(math.max(height_min, math.min(height_max, y))) + local p = {x=minp.x+(maxp.x-minp.x)/2, y=y, z=minp.z+(maxp.z-minp.z)/2} + -- Haupthöhle und alle weiteren + -- Corridors; starting with main cave out of dirt + place_corridors(p, pr) + end +end) diff --git a/mods/a_mapgen_mods/tsm_railcorridors/mod.conf b/mods/a_mapgen_mods/tsm_railcorridors/mod.conf new file mode 100644 index 00000000..db3b9740 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/mod.conf @@ -0,0 +1 @@ +name = tsm_railcorridors diff --git a/mods/a_mapgen_mods/tsm_railcorridors/settingtypes.txt b/mods/a_mapgen_mods/tsm_railcorridors/settingtypes.txt new file mode 100644 index 00000000..c6668fa7 --- /dev/null +++ b/mods/a_mapgen_mods/tsm_railcorridors/settingtypes.txt @@ -0,0 +1,30 @@ +#Probability (0.0 to 1.0) for every newly generated chunk to get rail corridors. +tsm_railcorridors_probability_railcaves_in_chunk (Rail corridor probability) float 0.3 0.0 1.0 + +#Minimum rail corridor path length (excludes forks). +tsm_railcorridors_way_min (Minimum rail corridor length) int 4 1 + +#Maximum rail corridor path length (excludes forks). +tsm_railcorridors_way_max (Maximum rail corridor length) int 7 1 + +#Probability (0.0 to 1.0) for every horizontal part of a rail corridor to have torches. +tsm_railcorridors_probability_torches_in_segment (Torch probability) float 0.5 0.0 1.0 + +#Probability (0.0 to 1.0) for every part of a rail corridor to go up or down. +tsm_railcorridors_probability_up_or_down (Stairway probability) float 0.2 0.0 1.0 + +#Probability (0.0 to 1.0) for every part of a rail corridor to fork. +#Caution! Too high values may cause Minetest to hang. +tsm_railcorridors_probability_fork (Fork probability) float 0.04 0.0 1.0 + +#Probability (0.0 to 1.0) for every part of a rail corridor to contain a treasure chest. +tsm_railcorridors_probability_chest (Chest probability) float 0.05 0.0 1.0 + +#Probability (0.0 to 1.0) for a rail corridor system to have damaged/incomplete railways +tsm_railcorridors_probability_damage (Damaged railway probability) float 0.90 0.0 1.0 + +#If enabled, rail corridors continue to generate through obstacles such +#as other rail corridors (without destroying them, mostly). This may lead +#to pretty chaotic rail corridors, but they are also more free to spread. +#If disabled, rail corridors spread in a orderly fashion. +tsm_railcorridors_chaos (Chaos Mode) bool false diff --git a/mods/beds/README.txt b/mods/beds/README.txt index 9710c459..cda6ebd9 100644 --- a/mods/beds/README.txt +++ b/mods/beds/README.txt @@ -1,30 +1,26 @@ Minetest Game mod: beds ======================= -by BlockMen (c) 2014-2015 +See license.txt for license information. -Version: 1.1.1 +Authors of source code +---------------------- +Originally by BlockMen (MIT) +Various Minetest developers and contributors (MIT) -About -~~~~~ -This mod adds a bed to Minetest which allows to skip the night. To sleep rightclick the bed, if playing -in singleplayer mode the night gets skipped imideatly. If playing on server you get shown how many other -players are in bed too. If all players are sleeping the night gets skipped aswell. Also the night skip can be forced -if more than 50% of the players are lying in bed and use this option. +Authors of media (textures) +--------------------------- +BlockMen (CC BY-SA 3.0) -Another feature is a controled respawning. If you have slept in bed (not just lying in it) your respawn point -is set to the beds location and you will respawn there after death. -You can disable the respawn at beds by setting "enable_bed_respawn = false" in minetest.conf -You can also disable the night skip feature by setting "enable_bed_night_skip = false" in minetest.conf or by using -the /set command ingame. +This mod adds a bed to Minetest which allows to skip the night. +To sleep, rightclick the bed. If playing in singleplayer mode the night gets skipped +immediately. If playing multiplayer you get shown how many other players are in bed too, +if all players are sleeping the night gets skipped. The night skip can be forced if more +than 50% of the players are lying in bed and use this option. - -License of source code, textures: WTFPL ---------------------------------------- -(c) Copyright BlockMen (2014-2015) - - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +Another feature is a controlled respawning. If you have slept in bed (not just lying in +it) your respawn point is set to the beds location and you will respawn there after +death. +You can disable the respawn at beds by setting "enable_bed_respawn = false" in +minetest.conf. +You can disable the night skip feature by setting "enable_bed_night_skip = false" in +minetest.conf or by using the /set command in-game. diff --git a/mods/beds/api.lua b/mods/beds/api.lua index 53d4e488..97dde43d 100644 --- a/mods/beds/api.lua +++ b/mods/beds/api.lua @@ -16,7 +16,7 @@ local function destruct_bed(pos, n) if reverse then reverse = not reverse minetest.remove_node(other) - nodeupdate(other) + minetest.check_for_falling(other) else reverse = not reverse end @@ -33,8 +33,8 @@ function beds.register_bed(name, def) paramtype2 = "facedir", is_ground_content = false, stack_max = 1, - groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, - sounds = default.node_sound_wood_defaults(), + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1}, + sounds = def.sounds or default.node_sound_wood_defaults(), node_box = { type = "fixed", fixed = def.nodebox.bottom, @@ -46,6 +46,14 @@ function beds.register_bed(name, def) on_place = function(itemstack, placer, pointed_thing) local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + local pos if minetest.registered_items[minetest.get_node(under).name].buildable_to then pos = under @@ -59,8 +67,8 @@ function beds.register_bed(name, def) return itemstack end - local def = minetest.registered_nodes[minetest.get_node(pos).name] - if not def or not def.buildable_to then + local node_def = minetest.registered_nodes[minetest.get_node(pos).name] + if not node_def or not node_def.buildable_to then return itemstack end @@ -81,7 +89,8 @@ function beds.register_bed(name, def) minetest.set_node(pos, {name = name .. "_bottom", param2 = dir}) minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) - if not minetest.setting_getbool("creative_mode") then + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(placer:get_player_name())) then itemstack:take_item() end return itemstack @@ -91,8 +100,9 @@ function beds.register_bed(name, def) destruct_bed(pos, 1) end, - on_rightclick = function(pos, node, clicker) + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) beds.on_rightclick(pos, clicker) + return itemstack end, on_rotate = function(pos, node, user, mode, new_param2) @@ -112,8 +122,8 @@ function beds.register_bed(name, def) end local newp = vector.add(pos, minetest.facedir_to_dir(new_param2)) local node3 = minetest.get_node_or_nil(newp) - local def = node3 and minetest.registered_nodes[node3.name] - if not def or not def.buildable_to then + local node_def = node3 and minetest.registered_nodes[node3.name] + if not node_def or not node_def.buildable_to then return false end if minetest.is_protected(newp, user:get_player_name()) then @@ -136,8 +146,8 @@ function beds.register_bed(name, def) paramtype2 = "facedir", is_ground_content = false, pointable = false, - groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, - sounds = default.node_sound_wood_defaults(), + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 2}, + sounds = def.sounds or default.node_sound_wood_defaults(), drop = name .. "_bottom", node_box = { type = "fixed", diff --git a/mods/beds/beds.lua b/mods/beds/beds.lua index 5f31f136..bb2fd5d3 100644 --- a/mods/beds/beds.lua +++ b/mods/beds/beds.lua @@ -66,7 +66,7 @@ beds.register_bed("beds:bed", { }, top = { "beds_bed_top_top.png^[transformR90", - "default_wood.png", + "default_wood.png", "beds_bed_side_top_r.png", "beds_bed_side_top_r.png^[transformfx", "beds_bed_side_top.png", @@ -88,3 +88,17 @@ beds.register_bed("beds:bed", { minetest.register_alias("beds:bed_bottom_red", "beds:bed_bottom") minetest.register_alias("beds:bed_top_red", "beds:bed_top") + +-- Fuel + +minetest.register_craft({ + type = "fuel", + recipe = "beds:fancy_bed_bottom", + burntime = 13, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "beds:bed_bottom", + burntime = 12, +}) diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua index 85ee97cf..78df9a18 100644 --- a/mods/beds/functions.lua +++ b/mods/beds/functions.lua @@ -1,7 +1,7 @@ local pi = math.pi local player_in_bed = 0 local is_sp = minetest.is_singleplayer() -local enable_respawn = minetest.setting_getbool("enable_bed_respawn") +local enable_respawn = minetest.settings:get_bool("enable_bed_respawn") if enable_respawn == nil then enable_respawn = true end @@ -22,7 +22,7 @@ local function get_look_yaw(pos) end local function is_night_skip_enabled() - local enable_night_skip = minetest.setting_getbool("enable_bed_night_skip") + local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip") if enable_night_skip == nil then enable_night_skip = true end @@ -70,7 +70,7 @@ local function lay_down(player, pos, bed_pos, state, skip) -- physics, eye_offset, etc player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0}) - player:set_look_yaw(math.random(1, 180) / 100) + player:set_look_horizontal(math.random(1, 180) / 100) default.player_attached[name] = false player:set_physics_override(1, 1, 1) hud_flags.wielditem = true @@ -85,7 +85,7 @@ local function lay_down(player, pos, bed_pos, state, skip) -- physics, eye_offset, etc player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0}) local yaw, param2 = get_look_yaw(bed_pos) - player:set_look_yaw(yaw) + player:set_look_horizontal(yaw) local dir = minetest.facedir_to_dir(param2) local p = {x = bed_pos.x + dir.x / 2, y = bed_pos.y, z = bed_pos.z + dir.z / 2} player:set_physics_override(0, 0, 0) @@ -100,7 +100,7 @@ end local function update_formspecs(finished) local ges = #minetest.get_connected_players() - local form_n = "" + local form_n local is_majority = (ges / 2) < player_in_bed if finished then @@ -130,7 +130,6 @@ end function beds.skip_night() minetest.set_timeofday(0.23) - beds.set_spawns() end function beds.on_rightclick(pos, player) @@ -149,7 +148,7 @@ function beds.on_rightclick(pos, player) -- move to bed if not beds.player[name] then lay_down(player, ppos, pos) - beds.set_spawns()--hack for set spawn maikerumine + beds.set_spawns() -- save respawn positions when entering bed else lay_down(player, nil, nil, false) end @@ -174,23 +173,18 @@ end -- Callbacks - -minetest.register_on_joinplayer(function(player) - beds.read_spawns() -end) - --- respawn player at bed if enabled and valid position is found -minetest.register_on_respawnplayer(function(player) - if not enable_respawn then - return false - end - local name = player:get_player_name() - local pos = beds.spawn[name] or nil - if pos then - player:setpos(pos) - return true - end -end) +-- Only register respawn callback if respawn enabled +if enable_respawn then + -- respawn player at bed if enabled and valid position is found + minetest.register_on_respawnplayer(function(player) + local name = player:get_player_name() + local pos = beds.spawn[name] + if pos then + player:setpos(pos) + return true + end + end) +end minetest.register_on_leaveplayer(function(player) local name = player:get_player_name() diff --git a/mods/beds/license.txt b/mods/beds/license.txt new file mode 100644 index 00000000..0494b36b --- /dev/null +++ b/mods/beds/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/beds/spawns.lua b/mods/beds/spawns.lua index 48b8a669..6b1f4041 100644 --- a/mods/beds/spawns.lua +++ b/mods/beds/spawns.lua @@ -32,11 +32,11 @@ function beds.read_spawns() beds.save_spawns() os.rename(file, file .. ".backup") file = org_file - else - spawns = {} end end +beds.read_spawns() + function beds.save_spawns() if not beds.spawn then return diff --git a/mods/boats/README.txt b/mods/boats/README.txt index 1de71678..59631d9d 100644 --- a/mods/boats/README.txt +++ b/mods/boats/README.txt @@ -1,16 +1,15 @@ Minetest Game mod: boats ======================== -by PilzAdam +See license.txt for license information. -License of source code: ------------------------ -WTFPL +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +Various Minetest developers and contributors (MIT) -License of media (textures and sounds): ---------------------------------------- -WTFPL - -Authors of media files: ------------------------ -textures: Zeg9 -model: thetoon and Zeg9, modified by PavelS(SokolovPavel) +Authors of media (textures and model) +------------------------------------- +Textures: Zeg9 (CC BY-SA 3.0) +Model: thetoon and Zeg9 (CC BY-SA 3.0), + modified by PavelS(SokolovPavel) (CC BY-SA 3.0), + modified by sofar (CC BY-SA 3.0) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index f8d0ccb4..4d8f4673 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.lua @@ -34,6 +34,8 @@ end local boat = { physical = true, + -- Warning: Do not change the position of the collisionbox top surface, + -- lowering it causes the boat to fall through the world if underwater collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, visual = "mesh", mesh = "boats_boat.obj", @@ -77,7 +79,7 @@ function boat.on_rightclick(self, clicker) minetest.after(0.2, function() default.player_set_animation(clicker, "sit" , 30) end) - self.object:setyaw(clicker:get_look_yaw() - math.pi / 2) + clicker:set_look_horizontal(self.object:getyaw()) end end @@ -107,18 +109,20 @@ function boat.on_punch(self, puncher) end if not self.driver then self.removed = true + local inv = puncher:get_inventory() + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(puncher:get_player_name())) + or not inv:contains_item("main", "boats:boat") then + local leftover = inv:add_item("main", "boats:boat") + -- if no room in inventory add a replacement boat to the world + if not leftover:is_empty() then + minetest.add_item(self.object:getpos(), leftover) + end + end -- delay remove to ensure player is detached minetest.after(0.1, function() self.object:remove() end) - if not minetest.setting_getbool("creative_mode") then - local inv = puncher:get_inventory() - if inv:room_for_item("main", "boats:boat") then - inv:add_item("main", "boats:boat") - else - minetest.add_item(self.object:getpos(), "boats:boat") - end - end end end @@ -165,7 +169,7 @@ function boat.on_step(self, dtime) local p = self.object:getpos() p.y = p.y - 0.5 - local new_velo = {x = 0, y = 0, z = 0} + local new_velo local new_acce = {x = 0, y = 0, z = 0} if not is_water(p) then local nodedef = minetest.registered_nodes[minetest.get_node(p).name] @@ -219,18 +223,32 @@ minetest.register_craftitem("boats:boat", { wield_image = "boats_wield.png", wield_scale = {x = 2, y = 2, z = 1}, liquids_pointable = true, + groups = {flammable = 2}, on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local udef = minetest.registered_nodes[node.name] + if udef and udef.on_rightclick and + not (placer and placer:get_player_control().sneak) then + return udef.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + if pointed_thing.type ~= "node" then - return + return itemstack end if not is_water(pointed_thing.under) then - return + return itemstack end pointed_thing.under.y = pointed_thing.under.y + 0.5 - minetest.add_entity(pointed_thing.under, "boats:boat") - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() + boat = minetest.add_entity(pointed_thing.under, "boats:boat") + if boat then + boat:setyaw(placer:get_look_horizontal()) + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(placer:get_player_name())) then + itemstack:take_item() + end end return itemstack end, @@ -245,3 +263,9 @@ minetest.register_craft({ {"group:wood", "group:wood", "group:wood"}, }, }) + +minetest.register_craft({ + type = "fuel", + recipe = "boats:boat", + burntime = 20, +}) diff --git a/mods/boats/license.txt b/mods/boats/license.txt new file mode 100644 index 00000000..d4afe75f --- /dev/null +++ b/mods/boats/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures and model) +-------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Zeg9 +Copyright (C) 2012-2016 thetoon +Copyright (C) 2012-2016 PavelS(SokolovPavel) +Copyright (C) 2016 sofar (sofar@foo-projects.org) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/bucket/README.txt b/mods/bucket/README.txt index a6674b43..45e0ec54 100644 --- a/mods/bucket/README.txt +++ b/mods/bucket/README.txt @@ -1,26 +1,13 @@ Minetest Game mod: bucket ========================= +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2011-2012 Kahrl -Copyright (C) 2011-2012 celeron55, Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - -License of media (textures and sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ -Everything not listed in here: -Copyright (C) 2010-2012 celeron55, Perttu Ahola - +Authors of source code +---------------------- +Kahrl (LGPL 2.1) +celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) +Authors of media (textures) +--------------------------- +ElementW (CC BY-SA 3.0) diff --git a/mods/bucket/init.lua b/mods/bucket/init.lua index 3770be6a..5076dece 100644 --- a/mods/bucket/init.lua +++ b/mods/bucket/init.lua @@ -36,12 +36,17 @@ end -- inventory_image = texture of the new bucket item (ignored if itemname == nil) -- name = text description of the bucket item -- groups = (optional) groups of the bucket item, for example {water_bucket = 1} +-- force_renew = (optional) bool. Force the liquid source to renew if it has a +-- source neighbour, even if defined as 'liquid_renewable = false'. +-- Needed to avoid creating holes in sloping rivers. -- This function can be called from any mod (that depends on bucket). -function bucket.register_liquid(source, flowing, itemname, inventory_image, name, groups) +function bucket.register_liquid(source, flowing, itemname, inventory_image, name, + groups, force_renew) bucket.liquids[source] = { source = source, flowing = flowing, itemname = itemname, + force_renew = force_renew, } bucket.liquids[flowing] = bucket.liquids[source] @@ -110,8 +115,11 @@ minetest.register_craftitem("bucket:bucket_empty", { stack_max = 99, liquids_pointable = true, on_use = function(itemstack, user, pointed_thing) - -- Must be pointing to node - if pointed_thing.type ~= "node" then + if pointed_thing.type == "object" then + pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil) + return user:get_wielded_item() + elseif pointed_thing.type ~= "node" then + -- do nothing if it's neither object nor node return end -- Check if pointing to a liquid source @@ -141,7 +149,7 @@ minetest.register_craftitem("bucket:bucket_empty", { else local pos = user:getpos() pos.y = math.floor(pos.y + 0.5) - core.add_item(pos, liquiddef.itemname) + minetest.add_item(pos, liquiddef.itemname) end -- set to return empty buckets minus 1 @@ -149,9 +157,24 @@ minetest.register_craftitem("bucket:bucket_empty", { end - minetest.add_node(pointed_thing.under, {name="air"}) + -- force_renew requires a source neighbour + local source_neighbor = false + if liquiddef.force_renew then + source_neighbor = + minetest.find_node_near(pointed_thing.under, 1, liquiddef.source) + end + if not (source_neighbor and liquiddef.force_renew) then + minetest.add_node(pointed_thing.under, {name = "air"}) + end return ItemStack(giving_back) + else + -- non-liquid nodes will have their on_punch triggered + local node_def = minetest.registered_nodes[node.name] + if node_def then + node_def.on_punch(pointed_thing.under, node, user, pointed_thing) + end + return user:get_wielded_item() end end, }) @@ -171,7 +194,8 @@ bucket.register_liquid( "bucket:bucket_river_water", "bucket_river_water.png", "River Water Bucket", - {water_bucket = 1} + {water_bucket = 1}, + true ) bucket.register_liquid( diff --git a/mods/bucket/license.txt b/mods/bucket/license.txt new file mode 100644 index 00000000..a5156ae6 --- /dev/null +++ b/mods/bucket/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 Kahrl +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2011-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2015-2016 ElementW + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/builtin_item/.gitignore b/mods/builtin_item/.gitignore deleted file mode 100644 index d9c069a6..00000000 --- a/mods/builtin_item/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -## Generic ignorable patterns and files -*~ -.*.swp -debug.txt diff --git a/mods/builtin_item/README.md b/mods/builtin_item/README.md deleted file mode 100644 index b1e70fc8..00000000 --- a/mods/builtin_item/README.md +++ /dev/null @@ -1,25 +0,0 @@ -item_entity.lua - -edited by TenPlus1 - -Features: -- Items are destroyed by lava -- Items are moved along by flowing water (new routine) -- Items are removed after 120 seconds or the time that is specified by - remove_items in minetest.conf (-1 disables it) -- Particle effects added - - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/builtin_item/depends.txt b/mods/builtin_item/depends.txt deleted file mode 100644 index 7c506cfb..00000000 --- a/mods/builtin_item/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -mobs? \ No newline at end of file diff --git a/mods/builtin_item/init.lua b/mods/builtin_item/init.lua deleted file mode 100644 index febaa7e0..00000000 --- a/mods/builtin_item/init.lua +++ /dev/null @@ -1,450 +0,0 @@ --- Minetest: builtin/item_entity.lua (27th January 2016) - --- water flow functions by QwertyMine3, edited by TenPlus1 -local function to_unit_vector(dir_vector) - - local inv_roots = { - [0] = 1, - [1] = 1, - [2] = 0.70710678118655, - [4] = 0.5, - [5] = 0.44721359549996, - [8] = 0.35355339059327 - } - - local sum = dir_vector.x * dir_vector.x + dir_vector.z * dir_vector.z - - return { - x = dir_vector.x * inv_roots[sum], - y = dir_vector.y, - z = dir_vector.z * inv_roots[sum] - } -end - -local function is_touching(realpos, nodepos, radius) - - return (math.abs(realpos - nodepos) > (0.5 - radius)) -end - -local function node_ok(pos) - - local node = minetest.get_node_or_nil(pos) - - if not node then - return minetest.registered_nodes["default:dirt"] - end - - if minetest.registered_nodes[node.name] then - return node - end - - return minetest.registered_nodes["default:dirt"] -end - -local function is_water(pos) - - return (minetest.registered_nodes[ - node_ok({x = pos.x, y = pos.y, z = pos.z}).name].groups.water) -end - -local function is_liquid(pos) - - return (minetest.registered_nodes[ - node_ok({x = pos.x, y = pos.y, z = pos.z}).name].groups.liquid) -end - -local function node_is_liquid(node) - - return (minetest.registered_nodes[node.name].groups.liquid) -end - -local function quick_flow_logic(node, pos_testing, direction) - - if minetest.registered_nodes[node.name].liquidtype == "source" then - - local node_testing = node_ok(pos_testing) - local param2_testing = node_testing.param2 - - if minetest.registered_nodes[node_testing.name].liquidtype ~= "flowing" then - return 0 - else - return direction - end - - elseif minetest.registered_nodes[node.name].liquidtype == "flowing" then - - local node_testing = node_ok(pos_testing) - local param2_testing = node_testing.param2 - - if minetest.registered_nodes[node_testing.name].liquidtype == "source" then - return -direction - - elseif minetest.registered_nodes[node_testing.name].liquidtype == "flowing" then - - if param2_testing < node.param2 then - - if (node.param2 - param2_testing) > 6 then - return -direction - else - return direction - end - - elseif param2_testing > node.param2 then - - if (param2_testing - node.param2) > 6 then - return direction - else - return -direction - end - end - end - end - - return 0 -end - -local function quick_flow(pos, node) - - local x, z = 0, 0 - - if not node_is_liquid(node) then - return {x = 0, y = 0, z = 0} - end - - x = x + quick_flow_logic(node, {x = pos.x - 1, y = pos.y, z = pos.z},-1) - x = x + quick_flow_logic(node, {x = pos.x + 1, y = pos.y, z = pos.z}, 1) - z = z + quick_flow_logic(node, {x = pos.x, y = pos.y, z = pos.z - 1},-1) - z = z + quick_flow_logic(node, {x = pos.x, y = pos.y, z = pos.z + 1}, 1) - - return to_unit_vector({x = x, y = 0, z = z}) -end - ---if not in water but touching, move centre to touching block ---x has higher precedence than z -- if pos changes with x, it affects z -local function move_centre(pos, realpos, node, radius) - - if is_touching(realpos.x, pos.x, radius) then - - if is_liquid({x = pos.x - 1, y = pos.y, z = pos.z}) then - pos = {x = pos.x - 1, y = pos.y, z = pos.z} - node = node_ok(pos) - - elseif is_liquid({x = pos.x + 1, y = pos.y, z = pos.z}) then - pos = {x = pos.x + 1, y = pos.y, z = pos.z} - node = node_ok(pos) - end - end - - if is_touching(realpos.z, pos.z, radius) then - - if is_liquid({x = pos.x, y = pos.y, z = pos.z - 1}) then - pos = {x = pos.x, y = pos.y, z = pos.z - 1} - node = node_ok(pos) - - elseif is_liquid({x = pos.x, y = pos.y, z = pos.z + 1}) then - pos = {x = pos.x, y = pos.y, z = pos.z + 1} - node = node_ok(pos) - end - end - - return pos, node -end --- END water flow functions - -function core.spawn_item(pos, item) - - local obj = core.add_entity(pos, "__builtin:item") - - -- Don't use obj if it couldn't be added to the map. - if obj then - obj:get_luaentity():set_item(ItemStack(item):to_string()) - end - - return obj -end - --- if item_entity_ttl is not set, enity will have default life time --- setting to -1 disables the feature -local time_to_live = tonumber(core.setting_get("item_entity_ttl")) or 900 - --- if destroy_item is 1 then dropped items will burn inside lava -local destroy_item = tonumber(core.setting_get("destroy_item")) or 1 - --- entity gravity -local gravity = tonumber(minetest.setting_get("movement_gravity")) or 9.81 - --- particle effects for when item is destroyed -local function add_effects(pos) - - minetest.add_particlespawner({ - amount = 1, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -1, y = 2, z = -1}, - maxvel = {x = 1, y = 5, z = 1}, - minacc = {x = -4, y = -4, z = -4}, - maxacc = {x = 4, y = 4, z = 4}, - minexptime = 1, - maxexptime = 3, - minsize = 1, - maxsize = 4, - texture = "tnt_smoke.png", - }) -end - --- check if within map limits (-30911 to 30927) -local function within_limits(pos) - - if pos.x > -30913 - and pos.x < 30928 - and pos.y > -30913 - and pos.y < 30928 - and pos.z > -30913 - and pos.z < 30928 then - return true -- within limits - end - - return false -- beyond limits -end - -core.register_entity(":__builtin:item", { - initial_properties = { - hp_max = 1, - physical = true, - collide_with_objects = false, - collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3}, - visual = "wielditem", - visual_size = {x = 0.4, y = 0.4}, - textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, - is_visible = false, - infotext = "", - }, - - itemstring = "", - physical_state = true, - age = 0, - - set_item = function(self, itemstring) - - self.itemstring = itemstring - - local stack = ItemStack(itemstring) - local itemname = stack:get_name() - local max_count = stack:get_stack_max() - local count = math.min(stack:get_count(), max_count) - local size = 0.2 + 0.1 * (count / max_count) - - if not core.registered_items[itemname] then - itemname = "unknown" - end - - self.object:set_properties({ - is_visible = true, - visual = "wielditem", - textures = {itemname}, - visual_size = {x = size, y = size}, - collisionbox = {-size, -size, -size, size, size, size}, - automatic_rotate = math.pi * 0.5, - infotext = core.registered_items[itemname].description - }) - end, - - update_gravity = function(self) - if not self.physical_state then - self.object:setacceleration({x = 0, y = 0, z = 0}) - return - end - - self.object:setacceleration({x = 0, y = -gravity, z = 0}) - end, - - get_staticdata = function(self) - - return core.serialize({ - itemstring = self.itemstring, - always_collect = self.always_collect, - age = self.age, - dropped_by = self.dropped_by - }) - end, - - on_activate = function(self, staticdata, dtime_s) - - -- special function to fast remove entities (xanadu only) - if (mobs and mobs.entity and mobs.entity == false) - or not self then - - self.object:remove() - - return - end - - if string.sub(staticdata, 1, string.len("return")) == "return" then - - local data = core.deserialize(staticdata) - - if data and type(data) == "table" then - - self.itemstring = data.itemstring - self.always_collect = data.always_collect - self.age = data.age or 0 - self.age = self.age + dtime_s - self.dropped_by = data.dropped_by - end - else - self.itemstring = staticdata - end - - self.object:set_armor_groups({immortal = 1}) - self.object:setvelocity({x = 0, y = 2, z = 0}) - self:update_gravity() - self:set_item(self.itemstring) - end, - - try_merge_with = function(self, own_stack, object, entity) - - if self.age == entity.age then - -- Can not merge with itself - return false - end - - local stack = ItemStack(entity.itemstring) - local name = stack:get_name() - - if own_stack:get_name() ~= name or own_stack:get_free_space() == 0 then - -- Can not merge different or full stack - return false - end - - local count = own_stack:get_count() - local total_count = stack:get_count() + count - local max_count = stack:get_stack_max() - - -- Merge the remote stack into this one - if total_count > max_count then - return false - end - - local pos = object:getpos() - pos.y = pos.y + ((total_count - count) / max_count) * 0.15 - - self:set_item(name .. " " .. total_count) - - entity.itemstring = "" - object:remove() - - return true - end, - - on_step = function(self, dtime) - - self.age = self.age + dtime - if time_to_live > 0 and self.age > time_to_live then - self.itemstring = "" - self.object:remove() - return - end - - local pos = self.object:getpos() - local node = node_ok({ - x = pos.x, - y = pos.y - 0.5, - z = pos.z - }) - local def = core.registered_nodes[node.name] - - -- destroy item when dropped into lava (if enabled) - if destroy_item > 0 and def.groups.lava then - minetest.sound_play("builtin_item_lava", { - pos = pos, - max_hear_distance = 6, - gain = 0.5 - }) - add_effects(pos) - self.object:remove() - return - end - - -- flowing water pushes item along (by QwertyMine3) - local nod = node_ok({x = pos.x, y = pos.y + 0.5, z = pos.z}) - if minetest.registered_nodes[nod.name].liquidtype == "flowing" then - - local vec = quick_flow(self.object:getpos(), - node_ok(self.object:getpos())) - - if vec then - - local v = self.object:getvelocity() - - self.object:setvelocity( - {x = vec.x, y = v.y, z = vec.z}) - - end - - return - end - - -- Ignore is walkable -> stop until the block loaded - local entity_fall = (def and not def.walkable) - - if self.physical_state == entity_fall then - return - end - - self.object:setvelocity({x = 0, y = 0, z = 0}) - self.physical_state = entity_fall - self.object:set_properties({ - physical = entity_fall - }) - - self:update_gravity() - - -- Collect the items around to merge with - local own_stack = ItemStack(self.itemstring) - if own_stack:get_free_space() == 0 then - return - end - - local objects = core.get_objects_inside_radius(pos, 0.8) - - for k, object in pairs(objects) do - - local entity = object:get_luaentity() - - if entity and entity.name == "__builtin:item" then - - if self:try_merge_with(own_stack, object, entity) then - - own_stack = ItemStack(self.itemstring) - - if own_stack:get_free_space() == 0 then - return - end - end - end - end - end, - - on_punch = function(self, puncher) - - local inv = puncher:get_inventory() - - if inv and self.itemstring ~= "" then - - local left = inv:add_item("main", self.itemstring) - - if left and not left:is_empty() then - - self:set_item(left:to_string()) - - return - end - end - - self.itemstring = "" - self.object:remove() - end, -}) diff --git a/mods/builtin_item/sounds/builtin_item_lava.ogg b/mods/builtin_item/sounds/builtin_item_lava.ogg deleted file mode 100644 index 5c293fe9b4f694ede253f328c8283b69b3ebfad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37367 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 diff --git a/mods/creative/README.txt b/mods/creative/README.txt index fa735524..82357f30 100644 --- a/mods/creative/README.txt +++ b/mods/creative/README.txt @@ -1,23 +1,12 @@ Minetest Game mod: creative =========================== +See license.txt for license information. -Implements creative mode. - -Switch on by using the "creative_mode" setting. - -Registered items that -- have a description, and -- do not have the group not_in_creative_inventory -are added to the creative inventory. - -License of source code and media files: ---------------------------------------- -Copyright (C) 2012 Perttu Ahola (celeron55) -Copyright (C) 2016 Jean-Patrick G. (kilbith) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Jean-Patrick G. (kilbith) (MIT) +Author of media (textures) +-------------------------- +Jean-Patrick G. (kilbith) (CC BY-SA 3.0) diff --git a/mods/creative/depends.txt b/mods/creative/depends.txt index 4ad96d51..975e6525 100644 --- a/mods/creative/depends.txt +++ b/mods/creative/depends.txt @@ -1 +1,2 @@ default +sfinv diff --git a/mods/creative/init.lua b/mods/creative/init.lua index 1e7b4087..51d6f792 100644 --- a/mods/creative/init.lua +++ b/mods/creative/init.lua @@ -1,228 +1,22 @@ --- minetest/creative/init.lua - creative = {} -local player_inventory = {} -local creative_mode = minetest.setting_getbool("creative_mode") --- Create detached creative inventory after loading all mods -creative.init_creative_inventory = function(owner) - local owner_name = owner:get_player_name() - player_inventory[owner_name] = { - size = 0, - filter = "", - start_i = 1, - tab_id = 2, - } +local creative_mode_cache = minetest.settings:get_bool("creative_mode") - minetest.create_detached_inventory("creative_" .. owner_name, { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - if creative_mode and not to_list == "main" then - return count - else - return 0 - end - end, - allow_put = function(inv, listname, index, stack, player) - return 0 - end, - allow_take = function(inv, listname, index, stack, player) - if creative_mode then - return -1 - else - return 0 - end - end, - on_move = function(inv, from_list, from_index, to_list, to_index, count, player) - end, - on_put = function(inv, listname, index, stack, player) - end, - on_take = function(inv, listname, index, stack, player) - local player_name, stack_name = player:get_player_name(), stack:get_name() - --print(player_name .. " takes item from creative inventory; listname = " .. listname .. ", index = " .. index .. ", stack = " .. dump(stack:to_table())) - if stack then - minetest.log("action", player_name .. " takes " .. stack_name .. " from creative inventory") - --print("Stack name: " .. stack_name .. ", Stack count: " .. stack:get_count()) - end - end, - }) - - creative.update_creative_inventory(owner_name) - --print("creative inventory size: " .. player_inventory[player_name].size) +function creative.is_enabled_for(name) + return creative_mode_cache end -local function tab_category(tab_id) - local id_category = { - nil, -- Reserved for crafting tab. - minetest.registered_items, - minetest.registered_nodes, - minetest.registered_tools, - minetest.registered_craftitems - } +dofile(minetest.get_modpath("creative") .. "/inventory.lua") - -- If index out of range, show default ("All") page. - return id_category[tab_id] or id_category[2] -end - -function creative.update_creative_inventory(player_name) - local creative_list = {} - local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) - local inv = player_inventory[player_name] - - for name, def in pairs(tab_category(inv.tab_id)) do - if not (def.groups.not_in_creative_inventory == 1) and - def.description and def.description ~= "" and - (def.name:find(inv.filter, 1, true) or - def.description:lower():find(inv.filter, 1, true)) then - creative_list[#creative_list+1] = name - end - end - - table.sort(creative_list) - player_inv:set_size("main", #creative_list) - player_inv:set_list("main", creative_list) - inv.size = #creative_list -end - --- Create the trash field -local trash = minetest.create_detached_inventory("creative_trash", { - -- Allow the stack to be placed and remove it in on_put() - -- This allows the creative inventory to restore the stack - allow_put = function(inv, listname, index, stack, player) - if creative_mode then - return stack:get_count() - else - return 0 - end - end, - on_put = function(inv, listname) - inv:set_list(listname, {}) - end, -}) -trash:set_size("main", 1) - -creative.formspec_add = "" - -creative.set_creative_formspec = function(player, start_i) - local player_name = player:get_player_name() - local inv = player_inventory[player_name] - local pagenum = math.floor(start_i / (3*8) + 1) - local pagemax = math.ceil(inv.size / (3*8)) - - player:set_inventory_formspec([[ - size[8,8.6] - image[4.06,3.4;0.8,0.8;creative_trash_icon.png] - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] - list[detached:creative_trash;main;4,3.3;1,1;] - listring[] - tablecolumns[color;text;color;text] - tableoptions[background=#00000000;highlight=#00000000;border=false] - button[5.4,3.2;0.8,0.9;creative_prev;<] - button[7.25,3.2;0.8,0.9;creative_next;>] - button[2.1,3.4;0.8,0.5;creative_search;?] - button[2.75,3.4;0.8,0.5;creative_clear;X] - tooltip[creative_search;Search] - tooltip[creative_clear;Reset] - listring[current_player;main] - ]] .. - "field[0.3,3.5;2.2,1;creative_filter;;" .. minetest.formspec_escape(inv.filter) .. "]" .. - "listring[detached:creative_" .. player_name .. ";main]" .. - "tabheader[0,0;creative_tabs;Crafting,All,Nodes,Tools,Items;" .. tostring(inv.tab_id) .. ";true;false]" .. - "list[detached:creative_" .. player_name .. ";main;0,0;8,3;" .. tostring(start_i) .. "]" .. - "table[6.05,3.35;1.15,0.5;pagenum;#FFFF00," .. tostring(pagenum) .. ",#FFFFFF,/ " .. tostring(pagemax) .. "]" .. - default.get_hotbar_bg(0,4.7) .. - default.gui_bg .. default.gui_bg_img .. default.gui_slots - .. creative.formspec_add - ) -end - -creative.set_crafting_formspec = function(player) - player:set_inventory_formspec([[ - size[8,8.6] - list[current_player;craft;2,0.75;3,3;] - list[current_player;craftpreview;6,1.75;1,1;] - list[current_player;main;0,4.7;8,1;] - list[current_player;main;0,5.85;8,3;8] - list[detached:creative_trash;main;0,2.75;1,1;] - image[0.06,2.85;0.8,0.8;creative_trash_icon.png] - image[5,1.75;1,1;gui_furnace_arrow_bg.png^[transformR270] - tabheader[0,0;creative_tabs;Crafting,All,Nodes,Tools,Items;1;true;false] - listring[current_player;main] - listring[current_player;craft] - ]] .. - default.get_hotbar_bg(0,4.7) .. - default.gui_bg .. default.gui_bg_img .. default.gui_slots - ) -end - -minetest.register_on_joinplayer(function(player) - -- If in creative mode, modify player's inventory forms - if not creative_mode then - return - end - creative.init_creative_inventory(player) - creative.set_creative_formspec(player, 0) -end) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "" or not creative_mode then - return - end - - local player_name = player:get_player_name() - local inv = player_inventory[player_name] - - if fields.quit then - if inv.tab_id == 1 then - creative.set_crafting_formspec(player) - end - elseif fields.creative_tabs then - local tab = tonumber(fields.creative_tabs) - inv.tab_id = tab - player_inventory[player_name].start_i = 1 - - if tab == 1 then - creative.set_crafting_formspec(player) - else - creative.update_creative_inventory(player_name) - creative.set_creative_formspec(player, 0) - end - elseif fields.creative_clear then - player_inventory[player_name].start_i = 1 - inv.filter = "" - creative.update_creative_inventory(player_name) - creative.set_creative_formspec(player, 0) - elseif fields.creative_search then - player_inventory[player_name].start_i = 1 - inv.filter = fields.creative_filter:lower() - creative.update_creative_inventory(player_name) - creative.set_creative_formspec(player, 0) - else - local start_i = player_inventory[player_name].start_i or 0 - - if fields.creative_prev then - start_i = start_i - 3*8 - if start_i < 0 then - start_i = inv.size - (inv.size % (3*8)) - if inv.size == start_i then - start_i = math.max(0, inv.size - (3*8)) - end - end - elseif fields.creative_next then - start_i = start_i + 3*8 - if start_i >= inv.size then - start_i = 0 - end - end - - player_inventory[player_name].start_i = start_i - creative.set_creative_formspec(player, start_i) - end -end) - -if creative_mode then - local digtime = 0.5 - local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 3} +if creative_mode_cache then + -- Dig time is modified according to difference (leveldiff) between tool + -- 'maxlevel' and node 'level'. Digtime is divided by the larger of + -- leveldiff and 1. + -- To speed up digging in creative, hand 'maxlevel' and 'digtime' have been + -- increased such that nodes of differing levels have an insignificant + -- effect on digtime. + local digtime = 42 + local caps = {times = {digtime, digtime, digtime}, uses = 0, maxlevel = 256} minetest.register_item(":", { type = "none", @@ -242,22 +36,27 @@ if creative_mode then damage_groups = {fleshy = 10}, } }) +end - minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) - return true - end) +-- Unlimited node placement +minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack) + return creative.is_enabled_for(placer:get_player_name()) +end) - function minetest.handle_node_drops(pos, drops, digger) - if not digger or not digger:is_player() then - return - end - local inv = digger:get_inventory() - if inv then - for _, item in ipairs(drops) do - item = ItemStack(item):get_name() - if not inv:contains_item("main", item) then - inv:add_item("main", item) - end +-- Don't pick up if the item is already in the inventory +local old_handle_node_drops = minetest.handle_node_drops +function minetest.handle_node_drops(pos, drops, digger) + if not digger or not digger:is_player() then + return + end + if not creative.is_enabled_for(digger:get_player_name()) then + return old_handle_node_drops(pos, drops, digger) + end + local inv = digger:get_inventory() + if inv then + for _, item in ipairs(drops) do + if not inv:contains_item("main", item, true) then + inv:add_item("main", item) end end end diff --git a/mods/creative/inventory.lua b/mods/creative/inventory.lua new file mode 100644 index 00000000..0e1d813e --- /dev/null +++ b/mods/creative/inventory.lua @@ -0,0 +1,177 @@ +local player_inventory = {} + +function creative.init_creative_inventory(player) + local player_name = player:get_player_name() + player_inventory[player_name] = { + size = 0, + filter = "", + start_i = 0 + } + + minetest.create_detached_inventory("creative_" .. player_name, { + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2) + if not to_list == "main" then + return count + else + return 0 + end + end, + allow_put = function(inv, listname, index, stack, player2) + return 0 + end, + allow_take = function(inv, listname, index, stack, player2) + return -1 + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player2) + end, + on_put = function(inv, listname, index, stack, player2) + end, + on_take = function(inv, listname, index, stack, player2) + if stack and stack:get_count() > 0 then + minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory") + end + end, + }, player_name) + + return player_inventory[player_name] +end + +function creative.update_creative_inventory(player_name, tab_content) + local creative_list = {} + local inv = player_inventory[player_name] or + creative.init_creative_inventory(minetest.get_player_by_name(player_name)) + local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name}) + + for name, def in pairs(tab_content) do + if not (def.groups.not_in_creative_inventory == 1) and + def.description and def.description ~= "" and + (def.name:find(inv.filter, 1, true) or + def.description:lower():find(inv.filter, 1, true)) then + creative_list[#creative_list+1] = name + end + end + + table.sort(creative_list) + player_inv:set_size("main", #creative_list) + player_inv:set_list("main", creative_list) + inv.size = #creative_list +end + +-- Create the trash field +local trash = minetest.create_detached_inventory("creative_trash", { + -- Allow the stack to be placed and remove it in on_put() + -- This allows the creative inventory to restore the stack + allow_put = function(inv, listname, index, stack, player) + return stack:get_count() + end, + on_put = function(inv, listname) + inv:set_list(listname, {}) + end, +}) +trash:set_size("main", 1) + +creative.formspec_add = "" + +function creative.register_tab(name, title, items) + sfinv.register_page("creative:" .. name, { + title = title, + is_in_nav = function(self, player, context) + return creative.is_enabled_for(player:get_player_name()) + end, + get = function(self, player, context) + local player_name = player:get_player_name() + creative.update_creative_inventory(player_name, items) + local inv = player_inventory[player_name] + local start_i = inv.start_i or 0 + local pagenum = math.floor(start_i / (3*8) + 1) + local pagemax = math.ceil(inv.size / (3*8)) + return sfinv.make_formspec(player, context, + "label[6.2,3.35;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" .. + [[ + image[4.06,3.4;0.8,0.8;creative_trash_icon.png] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] + list[current_player;main;0,4.7;8,1;] + list[current_player;main;0,5.85;8,3;8] + list[detached:creative_trash;main;4,3.3;1,1;] + listring[] + button[5.4,3.2;0.8,0.9;creative_prev;<] + button[7.25,3.2;0.8,0.9;creative_next;>] + button[2.1,3.4;0.8,0.5;creative_search;?] + button[2.75,3.4;0.8,0.5;creative_clear;X] + tooltip[creative_search;Search] + tooltip[creative_clear;Reset] + listring[current_player;main] + field_close_on_enter[creative_filter;false] + ]] .. + "field[0.3,3.5;2.2,1;creative_filter;;" .. minetest.formspec_escape(inv.filter) .. "]" .. + "listring[detached:creative_" .. player_name .. ";main]" .. + "list[detached:creative_" .. player_name .. ";main;0,0;8,3;" .. tostring(start_i) .. "]" .. + default.get_hotbar_bg(0,4.7) .. + default.gui_bg .. default.gui_bg_img .. default.gui_slots + .. creative.formspec_add, false) + end, + on_enter = function(self, player, context) + local player_name = player:get_player_name() + local inv = player_inventory[player_name] + if inv then + inv.start_i = 0 + end + end, + on_player_receive_fields = function(self, player, context, fields) + local player_name = player:get_player_name() + local inv = player_inventory[player_name] + assert(inv) + + if fields.creative_clear then + inv.start_i = 0 + inv.filter = "" + creative.update_creative_inventory(player_name, items) + sfinv.set_player_inventory_formspec(player, context) + elseif fields.creative_search or + fields.key_enter_field == "creative_filter" then + inv.start_i = 0 + inv.filter = fields.creative_filter:lower() + creative.update_creative_inventory(player_name, items) + sfinv.set_player_inventory_formspec(player, context) + elseif not fields.quit then + local start_i = inv.start_i or 0 + + if fields.creative_prev then + start_i = start_i - 3*8 + if start_i < 0 then + start_i = inv.size - (inv.size % (3*8)) + if inv.size == start_i then + start_i = math.max(0, inv.size - (3*8)) + end + end + elseif fields.creative_next then + start_i = start_i + 3*8 + if start_i >= inv.size then + start_i = 0 + end + end + + inv.start_i = start_i + sfinv.set_player_inventory_formspec(player, context) + end + end + }) +end + +minetest.register_on_joinplayer(function(player) + creative.update_creative_inventory(player:get_player_name(), minetest.registered_items) +end) + +creative.register_tab("all", "All", minetest.registered_items) +creative.register_tab("nodes", "Nodes", minetest.registered_nodes) +creative.register_tab("tools", "Tools", minetest.registered_tools) +creative.register_tab("craftitems", "Items", minetest.registered_craftitems) + +local old_homepage_name = sfinv.get_homepage_name +function sfinv.get_homepage_name(player) + if creative.is_enabled_for(player:get_player_name()) then + return "creative:all" + else + return old_homepage_name(player) + end +end diff --git a/mods/creative/license.txt b/mods/creative/license.txt new file mode 100644 index 00000000..4ad1d5ff --- /dev/null +++ b/mods/creative/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2016 Jean-Patrick G. (kilbith) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua index 1259ac0e..6db3fc8d 100644 --- a/mods/default/aliases.lua +++ b/mods/default/aliases.lua @@ -22,7 +22,7 @@ minetest.register_alias("papyrus", "default:papyrus") minetest.register_alias("bookshelf", "default:bookshelf") minetest.register_alias("glass", "default:glass") minetest.register_alias("wooden_fence", "default:fence_wood") -minetest.register_alias("rail", "default:rail") +minetest.register_alias("rail", "carts:rail") minetest.register_alias("ladder", "default:ladder_wood") minetest.register_alias("wood", "default:wood") minetest.register_alias("mese", "default:mese") diff --git a/mods/default/crafting.lua b/mods/default/crafting.lua index 7ce62d2b..50ffb1ae 100644 --- a/mods/default/crafting.lua +++ b/mods/default/crafting.lua @@ -35,6 +35,20 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'default:wood', + recipe = { + {'default:bush_stem'}, + } +}) + +minetest.register_craft({ + output = 'default:acacia_wood', + recipe = { + {'default:acacia_bush_stem'}, + } +}) + minetest.register_craft({ output = 'default:stick 4', recipe = { @@ -339,11 +353,9 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'default:rail 24', + output = 'default:skeleton_key', recipe = { - {'default:steel_ingot', '', 'default:steel_ingot'}, - {'default:steel_ingot', 'group:stick', 'default:steel_ingot'}, - {'default:steel_ingot', '', 'default:steel_ingot'}, + {'default:gold_ingot'}, } }) @@ -380,12 +392,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - type = "shapeless", - output = "default:bronze_ingot", - recipe = {"default:steel_ingot", "default:copper_ingot"}, -}) - minetest.register_craft({ output = 'default:coalblock', recipe = { @@ -434,6 +440,31 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "default:tinblock", + recipe = { + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + {"default:tin_ingot", "default:tin_ingot", "default:tin_ingot"}, + } +}) + +minetest.register_craft({ + output = "default:tin_ingot 9", + recipe = { + {"default:tinblock"}, + } +}) + +minetest.register_craft({ + output = "default:bronze_ingot 9", + recipe = { + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"}, + {"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"}, + } +}) + minetest.register_craft({ output = 'default:bronzeblock', recipe = { @@ -483,34 +514,98 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'default:sandstone', + output = "default:sandstone", recipe = { - {'group:sand', 'group:sand'}, - {'group:sand', 'group:sand'}, + {"default:sand", "default:sand"}, + {"default:sand", "default:sand"}, } }) minetest.register_craft({ - output = 'default:sand 4', + output = "default:sand 4", recipe = { - {'default:sandstone'}, + {"default:sandstone"}, } }) minetest.register_craft({ - output = 'default:sandstonebrick 4', + output = "default:sandstonebrick 4", recipe = { - {'default:sandstone', 'default:sandstone'}, - {'default:sandstone', 'default:sandstone'}, + {"default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone"}, } }) minetest.register_craft({ - output = 'default:sandstone_block 9', + output = "default:sandstone_block 9", recipe = { - {'default:sandstone', 'default:sandstone', 'default:sandstone'}, - {'default:sandstone', 'default:sandstone', 'default:sandstone'}, - {'default:sandstone', 'default:sandstone', 'default:sandstone'}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + {"default:sandstone", "default:sandstone", "default:sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone", + recipe = { + {"default:desert_sand", "default:desert_sand"}, + {"default:desert_sand", "default:desert_sand"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sand 4", + recipe = { + {"default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_brick 4", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:desert_sandstone_block 9", + recipe = { + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + {"default:desert_sandstone", "default:desert_sandstone", "default:desert_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone", + recipe = { + {"default:silver_sand", "default:silver_sand"}, + {"default:silver_sand", "default:silver_sand"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sand 4", + recipe = { + {"default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_brick 4", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone"}, + } +}) + +minetest.register_craft({ + output = "default:silver_sandstone_block 9", + recipe = { + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, + {"default:silver_sandstone", "default:silver_sandstone", "default:silver_sandstone"}, } }) @@ -570,11 +665,11 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'default:ladder_wood 3', + output = "default:ladder_wood 5", recipe = { - {'group:stick', '', 'group:stick'}, - {'group:stick', 'group:stick', 'group:stick'}, - {'group:stick', '', 'group:stick'}, + {"group:stick", "", "group:stick"}, + {"group:stick", "group:stick", "group:stick"}, + {"group:stick", "", "group:stick"}, } }) @@ -620,10 +715,19 @@ minetest.register_craft({ }) minetest.register_craft({ - output = 'default:meselamp 1', + output = 'default:meselamp', recipe = { - {'', 'default:mese_crystal',''}, - {'default:mese_crystal', 'default:glass', 'default:mese_crystal'}, + {'default:glass'}, + {'default:mese_crystal'}, + } +}) + +minetest.register_craft({ + output = "default:mese_post_light 3", + recipe = { + {"", "default:glass", ""}, + {"default:mese_crystal", "default:mese_crystal", "default:mese_crystal"}, + {"", "group:wood", ""}, } }) @@ -764,6 +868,12 @@ minetest.register_craft({ recipe = "default:copper_lump", }) +minetest.register_craft({ + type = "cooking", + output = "default:tin_ingot", + recipe = "default:tin_lump", +}) + minetest.register_craft({ type = "cooking", output = "default:gold_ingot", @@ -776,6 +886,20 @@ minetest.register_craft({ recipe = "default:clay_lump", }) +minetest.register_craft({ + type = 'cooking', + output = 'default:gold_ingot', + recipe = 'default:skeleton_key', + cooktime = 5, +}) + +minetest.register_craft({ + type = 'cooking', + output = 'default:gold_ingot', + recipe = 'default:key', + cooktime = 5, +}) + -- -- Fuels -- @@ -867,6 +991,18 @@ minetest.register_craft({ burntime = 10, }) +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_sapling", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_sapling", + burntime = 7, +}) + minetest.register_craft({ type = "fuel", recipe = "default:aspen_sapling", @@ -901,34 +1037,46 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", recipe = "default:fence_aspen_wood", - burntime = 11, + burntime = 5, }) minetest.register_craft({ type = "fuel", recipe = "default:fence_pine_wood", - burntime = 13, + burntime = 6, }) minetest.register_craft({ type = "fuel", recipe = "default:fence_wood", - burntime = 15, + burntime = 7, }) minetest.register_craft({ type = "fuel", recipe = "default:fence_acacia_wood", - burntime = 17, + burntime = 8, }) minetest.register_craft({ type = "fuel", recipe = "default:fence_junglewood", - burntime = 19, + burntime = 9, }) +minetest.register_craft({ + type = "fuel", + recipe = "default:bush_stem", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:acacia_bush_stem", + burntime = 8, +}) + minetest.register_craft({ type = "fuel", recipe = "default:junglegrass", @@ -962,7 +1110,7 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", recipe = "default:ladder_wood", - burntime = 5, + burntime = 2, }) minetest.register_craft({ @@ -1024,3 +1172,58 @@ minetest.register_craft({ recipe = "default:dry_grass_1", burntime = 2, }) + +minetest.register_craft({ + type = "fuel", + recipe = "default:paper", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:book_written", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:dry_shrub", + burntime = 2, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "group:stick", + burntime = 1, +}) + + +minetest.register_craft({ + type = "fuel", + recipe = "default:pick_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:shovel_wood", + burntime = 4, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:axe_wood", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "default:sword_wood", + burntime = 5, +}) diff --git a/mods/default/craftitems.lua b/mods/default/craftitems.lua index 0c51c713..33cdd5f6 100644 --- a/mods/default/craftitems.lua +++ b/mods/default/craftitems.lua @@ -12,14 +12,23 @@ minetest.register_craftitem("default:paper", { groups = {flammable = 3}, }) + local lpp = 14 -- Lines per book's page local function book_on_use(itemstack, user) local player_name = user:get_player_name() - local data = minetest.deserialize(itemstack:get_metadata()) + local meta = itemstack:get_meta() local title, text, owner = "", "", player_name local page, page_max, lines, string = 1, 1, {}, "" - if data then + -- Backwards compatibility + local old_data = minetest.deserialize(itemstack:get_metadata()) + if old_data then + meta:from_table({ fields = old_data }) + end + + local data = meta:to_table().fields + + if data.owner then title = data.title text = data.text owner = data.owner @@ -63,6 +72,7 @@ local function book_on_use(itemstack, user) end minetest.show_formspec(player_name, "default:book", formspec) + return itemstack end minetest.register_on_player_receive_fields(function(player, formname, fields) @@ -81,35 +91,42 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) new_stack = ItemStack("default:book_written") end else - data = minetest.deserialize(stack:get_metadata()) + data = stack:get_meta():to_table().fields + end + + if data and data.owner and data.owner ~= player:get_player_name() then + return end if not data then data = {} end data.title = fields.title + data.owner = player:get_player_name() + data.description = "\""..fields.title.."\" by "..data.owner data.text = fields.text data.text_len = #data.text data.page = 1 data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) - data.owner = player:get_player_name() - local data_str = minetest.serialize(data) if new_stack then - new_stack:set_metadata(data_str) + new_stack:get_meta():from_table({ fields = data }) if inv:room_for_item("main", new_stack) then inv:add_item("main", new_stack) else minetest.add_item(player:getpos(), new_stack) end else - stack:set_metadata(data_str) + stack:get_meta():from_table({ fields = data }) end elseif fields.book_next or fields.book_prev then - local data = minetest.deserialize(stack:get_metadata()) + local data = stack:get_meta():to_table().fields if not data or not data.page then return end + data.page = tonumber(data.page) + data.page_max = tonumber(data.page_max) + if fields.book_next then data.page = data.page + 1 if data.page > data.page_max then @@ -122,11 +139,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end - local data_str = minetest.serialize(data) - stack:set_metadata(data_str) - book_on_use(stack, player) + stack:get_meta():from_table({fields = data}) + stack = book_on_use(stack, player) end + -- Update stack player:set_wielded_item(stack) end) @@ -167,13 +184,69 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv if not original then return end - local copymeta = original:get_metadata() + local copymeta = original:get_meta():to_table() -- copy of the book held by player's mouse cursor - itemstack:set_metadata(copymeta) + itemstack:get_meta():from_table(copymeta) -- put the book with metadata back in the craft grid craft_inv:set_stack("craft", index, original) end) +minetest.register_craftitem("default:skeleton_key", { + description = "Skeleton Key", + inventory_image = "default_key_skeleton.png", + groups = {key = 1}, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + local node = minetest.get_node(pos) + + if not node then + return itemstack + end + + local on_skeleton_key_use = minetest.registered_nodes[node.name].on_skeleton_key_use + if not on_skeleton_key_use then + return itemstack + end + + -- make a new key secret in case the node callback needs it + local random = math.random + local newsecret = string.format( + "%04x%04x%04x%04x", + random(2^16) - 1, random(2^16) - 1, + random(2^16) - 1, random(2^16) - 1) + + local secret, _, _ = on_skeleton_key_use(pos, user, newsecret) + + if secret then + local inv = minetest.get_inventory({type="player", name=user:get_player_name()}) + + -- update original itemstack + itemstack:take_item() + + -- finish and return the new key + local new_stack = ItemStack("default:key") + local meta = new_stack:get_meta() + meta:set_string("secret", secret) + meta:set_string("description", "Key to "..user:get_player_name().."'s " + ..minetest.registered_nodes[node.name].description) + + if itemstack:get_count() == 0 then + itemstack = new_stack + else + if inv:add_item("main", new_stack):get_count() > 0 then + minetest.add_item(user:getpos(), new_stack) + end -- else: added to inventory successfully + end + + return itemstack + end + end +}) + minetest.register_craftitem("default:coal_lump", { description = "Coal Lump", inventory_image = "default_coal_lump.png", @@ -190,6 +263,11 @@ minetest.register_craftitem("default:copper_lump", { inventory_image = "default_copper_lump.png", }) +minetest.register_craftitem("default:tin_lump", { + description = "Tin Lump", + inventory_image = "default_tin_lump.png", +}) + minetest.register_craftitem("default:mese_crystal", { description = "Mese Crystal", inventory_image = "default_mese_crystal.png", @@ -220,6 +298,11 @@ minetest.register_craftitem("default:copper_ingot", { inventory_image = "default_copper_ingot.png", }) +minetest.register_craftitem("default:tin_ingot", { + description = "Tin Ingot", + inventory_image = "default_tin_ingot.png", +}) + minetest.register_craftitem("default:bronze_ingot", { description = "Bronze Ingot", inventory_image = "default_bronze_ingot.png", @@ -249,4 +332,3 @@ minetest.register_craftitem("default:flint", { description = "Flint", inventory_image = "default_flint.png" }) - diff --git a/mods/default/functions.lua b/mods/default/functions.lua index 429ce9fe..5dc22cab 100644 --- a/mods/default/functions.lua +++ b/mods/default/functions.lua @@ -18,7 +18,7 @@ end function default.node_sound_stone_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_hard_footstep", gain = 0.5} + {name = "default_hard_footstep", gain = 0.3} table.dug = table.dug or {name = "default_hard_footstep", gain = 1.0} default.node_sound_defaults(table) @@ -28,9 +28,9 @@ end function default.node_sound_dirt_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_dirt_footstep", gain = 1.0} + {name = "default_dirt_footstep", gain = 0.4} table.dug = table.dug or - {name = "default_dirt_footstep", gain = 1.5} + {name = "default_dirt_footstep", gain = 1.0} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -52,7 +52,7 @@ end function default.node_sound_gravel_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_gravel_footstep", gain = 0.5} + {name = "default_gravel_footstep", gain = 0.4} table.dug = table.dug or {name = "default_gravel_footstep", gain = 1.0} table.place = table.place or @@ -64,7 +64,7 @@ end function default.node_sound_wood_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_wood_footstep", gain = 0.5} + {name = "default_wood_footstep", gain = 0.3} table.dug = table.dug or {name = "default_wood_footstep", gain = 1.0} default.node_sound_defaults(table) @@ -74,11 +74,9 @@ end function default.node_sound_leaves_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_grass_footstep", gain = 0.35} + {name = "default_grass_footstep", gain = 0.45} table.dug = table.dug or {name = "default_grass_footstep", gain = 0.7} - table.dig = table.dig or - {name = "default_dig_crumbly", gain = 0.4} table.place = table.place or {name = "default_place_node", gain = 1.0} default.node_sound_defaults(table) @@ -88,6 +86,8 @@ end function default.node_sound_glass_defaults(table) table = table or {} table.footstep = table.footstep or + {name = "default_glass_footstep", gain = 0.3} + table.dig = table.dig or {name = "default_glass_footstep", gain = 0.5} table.dug = table.dug or {name = "default_break_glass", gain = 1.0} @@ -98,7 +98,7 @@ end function default.node_sound_metal_defaults(table) table = table or {} table.footstep = table.footstep or - {name = "default_metal_footstep", gain = 0.5} + {name = "default_metal_footstep", gain = 0.4} table.dig = table.dig or {name = "default_dig_metal", gain = 0.5} table.dug = table.dug or @@ -109,6 +109,14 @@ function default.node_sound_metal_defaults(table) return table end +function default.node_sound_water_defaults(table) + table = table or {} + table.footstep = table.footstep or + {name = "default_water_footstep", gain = 0.2} + default.node_sound_defaults(table) + return table +end + -- -- Lavacooling -- @@ -123,18 +131,17 @@ default.cool_lava = function(pos, node) {pos = pos, max_hear_distance = 16, gain = 0.25}) end -minetest.register_abm({ - label = "Lava cooling", - nodenames = {"default:lava_source", "default:lava_flowing"}, - neighbors = {"group:water"}, - interval = 1, - chance = 1, - catch_up = false, - action = function(...) - default.cool_lava(...) - end, -}) - +if minetest.settings:get_bool("enable_lavacooling") ~= false then + minetest.register_abm({ + label = "Lava cooling", + nodenames = {"default:lava_source", "default:lava_flowing"}, + neighbors = {"group:cools_lava", "group:water"}, + interval = 1, + chance = 2, + catch_up = false, + action = default.cool_lava, + }) +end -- -- optimized helper to put all items in an inventory into a drops list @@ -176,6 +183,9 @@ function default.grow_cactus(pos, node) if height == 4 or node.name ~= "air" then return end + if minetest.get_node_light(pos) < 13 then + return + end minetest.set_node(pos, {name = "default:cactus"}) return true end @@ -199,6 +209,9 @@ function default.grow_papyrus(pos, node) if height == 4 or node.name ~= "air" then return end + if minetest.get_node_light(pos) < 13 then + return + end minetest.set_node(pos, {name = "default:papyrus"}) return true end @@ -209,9 +222,7 @@ minetest.register_abm({ neighbors = {"group:sand"}, interval = 12, chance = 83, - action = function(...) - default.grow_cactus(...) - end + action = default.grow_cactus }) minetest.register_abm({ @@ -220,9 +231,7 @@ minetest.register_abm({ neighbors = {"default:dirt", "default:dirt_with_grass"}, interval = 14, chance = 71, - action = function(...) - default.grow_papyrus(...) - end + action = default.grow_papyrus }) @@ -311,47 +320,65 @@ default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) end end --- Leafdecay ABM - -minetest.register_abm({ - label = "Leaf decay", - nodenames = {"group:leafdecay"}, - neighbors = {"air"}, - interval = 2, - chance = 10, - catch_up = false, - - action = function(pos, node, _, _) - -- Check if leaf is placed - if node.param2 ~= 0 then - return +-- Leafdecay +local function leafdecay_after_destruct(pos, oldnode, def) + for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius), + vector.add(pos, def.radius), def.leaves)) do + local node = minetest.get_node(v) + local timer = minetest.get_node_timer(v) + if node.param2 == 0 and not timer:is_started() then + timer:start(math.random(20, 120) / 10) end + end +end - local rad = minetest.registered_nodes[node.name].groups.leafdecay - -- Assume ignore is a trunk, to make this - -- work at the border of a loaded area - if minetest.find_node_near(pos, rad, {"ignore", "group:tree"}) then - return - end - -- Drop stuff - local itemstacks = minetest.get_node_drops(node.name) - for _, itemname in ipairs(itemstacks) do - if itemname ~= node.name or - minetest.get_item_group(node.name, "leafdecay_drop") ~= 0 then - local p_drop = { - x = pos.x - 0.5 + math.random(), - y = pos.y - 0.5 + math.random(), - z = pos.z - 0.5 + math.random(), - } - minetest.add_item(p_drop, itemname) +local function leafdecay_on_timer(pos, def) + if minetest.find_node_near(pos, def.radius, def.trunks) then + return false + end + + local node = minetest.get_node(pos) + local drops = minetest.get_node_drops(node.name) + for _, item in ipairs(drops) do + local is_leaf + for _, v in pairs(def.leaves) do + if v == item then + is_leaf = true end end - -- Remove node - minetest.remove_node(pos) - nodeupdate(pos) + if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or + not is_leaf then + minetest.add_item({ + x = pos.x - 0.5 + math.random(), + y = pos.y - 0.5 + math.random(), + z = pos.z - 0.5 + math.random(), + }, item) + end end -}) + minetest.remove_node(pos) + minetest.check_for_falling(pos) +end + +function default.register_leafdecay(def) + assert(def.leaves) + assert(def.trunks) + assert(def.radius) + for _, v in pairs(def.trunks) do + minetest.override_item(v, { + after_destruct = function(pos, oldnode) + leafdecay_after_destruct(pos, oldnode, def) + end, + }) + end + for _, v in pairs(def.leaves) do + minetest.override_item(v, { + on_timer = function(pos) + leafdecay_on_timer(pos, def) + end, + }) + end +end -- -- Convert dirt to something that fits the environment @@ -429,7 +456,7 @@ minetest.register_abm({ minetest.register_abm({ label = "Moss growth", - nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble"}, + nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", "walls:cobble"}, neighbors = {"group:water"}, interval = 16, chance = 200, @@ -441,6 +468,8 @@ minetest.register_abm({ minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2}) elseif node.name == "stairs:stair_cobble" then minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2}) + elseif node.name == "walls:cobble" then + minetest.set_node(pos, {name = "walls:mossycobble", param2 = node.param2}) end end }) @@ -500,3 +529,46 @@ minetest.register_abm({ minetest.set_node(pos, {name = "default:coral_skeleton"}) end, }) + + +-- +-- NOTICE: This method is not an official part of the API yet! +-- This method may change in future. +-- + +function default.can_interact_with_node(player, pos) + if player then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + else + return false + end + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if not owner or owner == "" or owner == player:get_player_name() then + return true + end + + -- is player wielding the right key? + local item = player:get_wielded_item() + if item:get_name() == "default:key" then + local key_meta = item:get_meta() + + if key_meta:get_string("secret") == "" then + local key_oldmeta = item:get_metadata() + if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then + return false + end + + key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) + item:set_metadata("") + end + + return meta:get_string("key_lock_secret") == key_meta:get_string("secret") + end + + return false +end diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua index 17c9280d..4b822058 100644 --- a/mods/default/furnace.lua +++ b/mods/default/furnace.lua @@ -4,7 +4,7 @@ -- local function active_formspec(fuel_percent, item_percent) - local formspec = + local formspec = "size[8,8.5]".. default.gui_bg.. default.gui_bg_img.. @@ -22,6 +22,8 @@ local function active_formspec(fuel_percent, item_percent) "listring[current_player;main]".. "listring[current_name;src]".. "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_player;main]".. default.get_hotbar_bg(0, 4.25) return formspec end @@ -42,6 +44,8 @@ local inactive_formspec = "listring[current_player;main]".. "listring[current_name;src]".. "listring[current_player;main]".. + "listring[current_name;fuel]".. + "listring[current_player;main]".. default.get_hotbar_bg(0, 4.25) -- @@ -109,62 +113,78 @@ local function furnace_node_timer(pos, elapsed) local fuel_totaltime = meta:get_float("fuel_totaltime") or 0 local inv = meta:get_inventory() - local srclist = inv:get_list("src") - local fuellist = inv:get_list("fuel") + local srclist, fuellist - -- - -- Cooking - -- + local cookable, cooked + local fuel - -- Check if we have cookable content - local cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) - local cookable = true + local update = true + while update do + update = false - if cooked.time == 0 then - cookable = false - end + srclist = inv:get_list("src") + fuellist = inv:get_list("fuel") - -- Check if we have enough fuel to burn - if fuel_time < fuel_totaltime then - -- The furnace is currently active and has enough fuel - fuel_time = fuel_time + 1 + -- + -- Cooking + -- - -- If there is a cookable item then check if it is ready yet - if cookable then - src_time = src_time + 1 - if src_time >= cooked.time then - -- Place result in dst list if possible - if inv:room_for_item("dst", cooked.item) then - inv:add_item("dst", cooked.item) - inv:set_stack("src", 1, aftercooked.items[1]) - src_time = 0 + -- Check if we have cookable content + local aftercooked + cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + cookable = cooked.time ~= 0 + + -- Check if we have enough fuel to burn + if fuel_time < fuel_totaltime then + -- The furnace is currently active and has enough fuel + fuel_time = fuel_time + elapsed + -- If there is a cookable item then check if it is ready yet + if cookable then + src_time = src_time + elapsed + if src_time >= cooked.time then + -- Place result in dst list if possible + if inv:room_for_item("dst", cooked.item) then + inv:add_item("dst", cooked.item) + inv:set_stack("src", 1, aftercooked.items[1]) + src_time = src_time - cooked.time + update = true + end end end - end - else - -- Furnace ran out of fuel - if cookable then - -- We need to get new fuel - local fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) - - if fuel.time == 0 then - -- No valid fuel in fuel list - fuel_totaltime = 0 - fuel_time = 0 - src_time = 0 - else - -- Take fuel from fuel list - inv:set_stack("fuel", 1, afterfuel.items[1]) - - fuel_totaltime = fuel.time - fuel_time = 0 - end else - -- We don't need to get new fuel since there is no cookable item - fuel_totaltime = 0 + -- Furnace ran out of fuel + if cookable then + -- We need to get new fuel + local afterfuel + fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist}) + + if fuel.time == 0 then + -- No valid fuel in fuel list + fuel_totaltime = 0 + src_time = 0 + else + -- Take fuel from fuel list + inv:set_stack("fuel", 1, afterfuel.items[1]) + update = true + fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) + src_time = src_time + elapsed + end + else + -- We don't need to get new fuel since there is no cookable item + fuel_totaltime = 0 + src_time = 0 + end fuel_time = 0 - src_time = 0 end + + elapsed = 0 + end + + if fuel and fuel_totaltime > fuel.time then + fuel_totaltime = fuel.time + end + if srclist[1]:is_empty() then + src_time = 0 end -- @@ -192,7 +212,7 @@ local function furnace_node_timer(pos, elapsed) local active = "inactive " local result = false - if fuel_time <= fuel_totaltime and fuel_totaltime ~= 0 then + if fuel_totaltime ~= 0 then active = "active " local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) fuel_state = fuel_percent .. "%" @@ -206,8 +226,7 @@ local function furnace_node_timer(pos, elapsed) end swap_node(pos, "default:furnace") -- stop timer on the inactive furnace - local timer = minetest.get_node_timer(pos) - timer:stop() + minetest.get_node_timer(pos):stop() end local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")" @@ -255,13 +274,11 @@ minetest.register_node("default:furnace", { end, on_metadata_inventory_move = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(1.0) + minetest.get_node_timer(pos):start(1.0) end, on_metadata_inventory_put = function(pos) -- start timer function, it will sort out whether furnace can burn or not. - local timer = minetest.get_node_timer(pos) - timer:start(1.0) + minetest.get_node_timer(pos):start(1.0) end, on_blast = function(pos) local drops = {} diff --git a/mods/default/init.lua b/mods/default/init.lua index 08e9efe4..7b5f62f3 100644 --- a/mods/default/init.lua +++ b/mods/default/init.lua @@ -41,6 +41,7 @@ dofile(default_path.."/functions.lua") dofile(default_path.."/trees.lua") dofile(default_path.."/nodes.lua") dofile(default_path.."/furnace.lua") +dofile(default_path.."/torch.lua") dofile(default_path.."/tools.lua") dofile(default_path.."/item_entity.lua") dofile(default_path.."/craftitems.lua") diff --git a/mods/default/license.txt b/mods/default/license.txt index 137923c8..72af7284 100644 --- a/mods/default/license.txt +++ b/mods/default/license.txt @@ -41,6 +41,9 @@ Copyright (C) 2010-2016: asl97 KevDoy Mito551 + GreenXenith + kaeza + kilbith You are free to: Share — copy and redistribute the material in any medium or format. @@ -144,6 +147,9 @@ Copyright (C) 2009 cmusounddesign Copyright (C) 2010 Tomlija Copyright (C) 2010 lsprice Copyright (C) 2014 sonictechtonic +Copyright (C) 2015 yadronoff +Copyright (C) 2007 HerbertBoland +Copyright (C) 2006 AGFX You are free to: Share — copy and redistribute the material in any medium or format. diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua index 52aa294c..1305226a 100644 --- a/mods/default/mapgen.lua +++ b/mods/default/mapgen.lua @@ -1,5 +1,5 @@ -- --- Aliases for map generator outputs +-- Aliases for map generators -- minetest.register_alias("mapgen_stone", "default:stone") @@ -34,17 +34,21 @@ minetest.register_alias("mapgen_pine_needles", "default:pine_needles") minetest.register_alias("mapgen_cobble", "default:cobble") minetest.register_alias("mapgen_stair_cobble", "stairs:stair_cobble") minetest.register_alias("mapgen_mossycobble", "default:mossycobble") +minetest.register_alias("mapgen_stair_desert_stone", "stairs:stair_desert_stone") minetest.register_alias("mapgen_sandstonebrick", "default:sandstonebrick") -minetest.register_alias("mapgen_stair_sandstonebrick", "stairs:stair_sandstonebrick") +minetest.register_alias("mapgen_stair_sandstone_block", "stairs:stair_sandstone_block") -- -- Register ores -- -function default.register_ores() - -- Blob ores - -- These first to avoid other ores in blobs +-- Blob ores +-- These first to avoid other ores in blobs + +-- Mgv6 + +function default.register_mgv6_blob_ores() -- Clay -- This first to avoid clay in sand blobs @@ -73,8 +77,7 @@ function default.register_ores() minetest.register_ore({ ore_type = "blob", ore = "default:sand", - wherein = {"default:stone", "default:sandstone", - "default:desert_stone"}, + wherein = {"default:stone", "default:desert_stone"}, clust_scarcity = 16 * 16 * 16, clust_size = 5, y_min = -31, @@ -131,8 +134,123 @@ function default.register_ores() persist = 0.0 }, }) +end - -- Scatter ores + +-- All mapgens except mgv6 + +function default.register_blob_ores() + + -- Clay + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -15, + y_max = 0, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Silver sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:silver_sand", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, + biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean", + "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean", + "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest", + "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest", + "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", + "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", + "rainforest", "rainforest_swamp", "rainforest_ocean", "underground", + "floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} + }) + + -- Dirt + + minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, + biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", + "deciduous_forest", "deciduous_forest_shore", "savanna", "savanna_shore", + "rainforest", "rainforest_swamp", "floatland_grassland", + "floatland_coniferous_forest"} + }) + + -- Gravel + + minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, + biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean", + "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean", + "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest", + "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest", + "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", + "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", + "rainforest", "rainforest_swamp", "rainforest_ocean", "underground", + "floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} + }) +end + + +-- Scatter ores +-- All mapgens + +function default.register_ores() -- Coal @@ -239,6 +357,41 @@ function default.register_ores() y_max = -64, }) + -- Tin + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 4, + clust_size = 3, + y_min = -127, + y_max = -32, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = -128, + }) + -- Gold minetest.register_ore({ @@ -374,15 +527,14 @@ end -- Register biomes -- --- All mapgens except mgv6 and singlenode +-- All mapgens except mgv6 -function default.register_biomes() - minetest.clear_registered_biomes() +function default.register_biomes(upper_limit) - -- Permanent ice + -- Icesheet minetest.register_biome({ - name = "glacier", + name = "icesheet", node_dust = "default:snowblock", node_top = "default:snowblock", depth_top = 1, @@ -396,38 +548,38 @@ function default.register_biomes() node_riverbed = "default:gravel", depth_riverbed = 2, y_min = -8, - y_max = 31000, + y_max = upper_limit, heat_point = 0, - humidity_point = 50, + humidity_point = 73, }) minetest.register_biome({ - name = "glacier_ocean", + name = "icesheet_ocean", node_dust = "default:snowblock", node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, --node_stone = "", - --node_water_top = "", - --depth_water_top = , + node_water_top = "default:ice", + depth_water_top = 10, --node_water = "", --node_river_water = "", y_min = -112, y_max = -9, heat_point = 0, - humidity_point = 50, + humidity_point = 73, }) - -- Cold + -- Tundra minetest.register_biome({ name = "tundra", - --node_dust = "", - node_top = "default:dirt_with_snow", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, + node_dust = "default:snowblock", + --node_top = , + --depth_top = , + --node_filler = , + --depth_filler = , --node_stone = "", --node_water_top = "", --depth_water_top = , @@ -436,9 +588,9 @@ function default.register_biomes() node_riverbed = "default:gravel", depth_riverbed = 2, y_min = 2, - y_max = 31000, - heat_point = 15, - humidity_point = 35, + y_max = upper_limit, + heat_point = 0, + humidity_point = 40, }) minetest.register_biome({ @@ -457,8 +609,8 @@ function default.register_biomes() depth_riverbed = 2, y_min = -3, y_max = 1, - heat_point = 15, - humidity_point = 35, + heat_point = 0, + humidity_point = 40, }) minetest.register_biome({ @@ -477,10 +629,11 @@ function default.register_biomes() depth_riverbed = 2, y_min = -112, y_max = -4, - heat_point = 15, - humidity_point = 35, + heat_point = 0, + humidity_point = 40, }) + -- Taiga minetest.register_biome({ name = "taiga", @@ -497,9 +650,9 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = 2, - y_max = 31000, - heat_point = 15, - humidity_point = 65, + y_max = upper_limit, + heat_point = 25, + humidity_point = 70, }) minetest.register_biome({ @@ -518,16 +671,16 @@ function default.register_biomes() depth_riverbed = 2, y_min = -112, y_max = 1, - heat_point = 15, - humidity_point = 65, + heat_point = 25, + humidity_point = 70, }) - -- Temperate + -- Snowy grassland minetest.register_biome({ - name = "stone_grassland", - --node_dust = "", - node_top = "default:dirt_with_grass", + name = "snowy_grassland", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", depth_top = 1, node_filler = "default:dirt", depth_filler = 1, @@ -538,34 +691,14 @@ function default.register_biomes() --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = 6, - y_max = 31000, - heat_point = 40, - humidity_point = 35, - }) - - minetest.register_biome({ - name = "stone_grassland_dunes", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, y_min = 5, - y_max = 5, - heat_point = 40, + y_max = upper_limit, + heat_point = 20, humidity_point = 35, }) minetest.register_biome({ - name = "stone_grassland_ocean", + name = "snowy_grassland_ocean", --node_dust = "", node_top = "default:sand", depth_top = 1, @@ -580,10 +713,73 @@ function default.register_biomes() depth_riverbed = 2, y_min = -112, y_max = 4, - heat_point = 40, + heat_point = 20, humidity_point = 35, }) + -- Grassland + + minetest.register_biome({ + name = "grassland", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 6, + y_max = upper_limit, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = 5, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 50, + humidity_point = 35, + }) + + -- Coniferous forest minetest.register_biome({ name = "coniferous_forest", @@ -600,9 +796,9 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = 6, - y_max = 31000, - heat_point = 40, - humidity_point = 65, + y_max = upper_limit, + heat_point = 45, + humidity_point = 70, }) minetest.register_biome({ @@ -621,8 +817,8 @@ function default.register_biomes() depth_riverbed = 2, y_min = 5, y_max = 5, - heat_point = 40, - humidity_point = 65, + heat_point = 45, + humidity_point = 70, }) minetest.register_biome({ @@ -641,71 +837,11 @@ function default.register_biomes() depth_riverbed = 2, y_min = -112, y_max = 4, - heat_point = 40, - humidity_point = 65, - }) - - - minetest.register_biome({ - name = "sandstone_grassland", - --node_dust = "", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, - y_min = 6, - y_max = 31000, - heat_point = 60, - humidity_point = 35, - }) - - minetest.register_biome({ - name = "sandstone_grassland_dunes", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, - y_min = 5, - y_max = 5, - heat_point = 60, - humidity_point = 35, - }) - - minetest.register_biome({ - name = "sandstone_grassland_ocean", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 3, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - node_riverbed = "default:sand", - depth_riverbed = 2, - y_min = -112, - y_max = 4, - heat_point = 60, - humidity_point = 35, + heat_point = 45, + humidity_point = 70, }) + -- Deciduous forest minetest.register_biome({ name = "deciduous_forest", @@ -722,13 +858,13 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = 1, - y_max = 31000, + y_max = upper_limit, heat_point = 60, - humidity_point = 65, + humidity_point = 68, }) minetest.register_biome({ - name = "deciduous_forest_swamp", + name = "deciduous_forest_shore", --node_dust = "", node_top = "default:dirt", depth_top = 1, @@ -741,10 +877,10 @@ function default.register_biomes() --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -3, + y_min = -1, y_max = 0, heat_point = 60, - humidity_point = 65, + humidity_point = 68, }) minetest.register_biome({ @@ -762,12 +898,12 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = -112, - y_max = -4, + y_max = -2, heat_point = 60, - humidity_point = 65, + humidity_point = 68, }) - -- Hot + -- Desert minetest.register_biome({ name = "desert", @@ -784,9 +920,9 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = 5, - y_max = 31000, - heat_point = 85, - humidity_point = 20, + y_max = upper_limit, + heat_point = 92, + humidity_point = 16, }) minetest.register_biome({ @@ -805,10 +941,95 @@ function default.register_biomes() depth_riverbed = 2, y_min = -112, y_max = 4, - heat_point = 85, - humidity_point = 20, + heat_point = 92, + humidity_point = 16, }) + -- Sandstone desert + + minetest.register_biome({ + name = "sandstone_desert", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 60, + humidity_point = 0, + }) + + -- Cold desert + + minetest.register_biome({ + name = "cold_desert", + --node_dust = "", + node_top = "default:silver_sand", + depth_top = 1, + node_filler = "default:silver_sand", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 40, + humidity_point = 0, + }) + + -- Savanna minetest.register_biome({ name = "savanna", @@ -825,13 +1046,13 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = 1, - y_max = 31000, - heat_point = 85, - humidity_point = 50, + y_max = upper_limit, + heat_point = 89, + humidity_point = 42, }) minetest.register_biome({ - name = "savanna_swamp", + name = "savanna_shore", --node_dust = "", node_top = "default:dirt", depth_top = 1, @@ -844,10 +1065,10 @@ function default.register_biomes() --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -3, + y_min = -1, y_max = 0, - heat_point = 85, - humidity_point = 50, + heat_point = 89, + humidity_point = 42, }) minetest.register_biome({ @@ -865,16 +1086,17 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = -112, - y_max = -4, - heat_point = 85, - humidity_point = 50, + y_max = -2, + heat_point = 89, + humidity_point = 42, }) + -- Rainforest minetest.register_biome({ name = "rainforest", --node_dust = "", - node_top = "default:dirt_with_grass", + node_top = "default:dirt_with_rainforest_litter", depth_top = 1, node_filler = "default:dirt", depth_filler = 3, @@ -886,9 +1108,9 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = 1, - y_max = 31000, - heat_point = 85, - humidity_point = 80, + y_max = upper_limit, + heat_point = 86, + humidity_point = 65, }) minetest.register_biome({ @@ -905,10 +1127,10 @@ function default.register_biomes() --node_river_water = "", node_riverbed = "default:sand", depth_riverbed = 2, - y_min = -3, + y_min = -1, y_max = 0, - heat_point = 85, - humidity_point = 80, + heat_point = 86, + humidity_point = 65, }) minetest.register_biome({ @@ -926,9 +1148,9 @@ function default.register_biomes() node_riverbed = "default:sand", depth_riverbed = 2, y_min = -112, - y_max = -4, - heat_point = 85, - humidity_point = 80, + y_max = -2, + heat_point = 86, + humidity_point = 65, }) -- Underground @@ -953,6 +1175,100 @@ function default.register_biomes() end +-- Biomes for floatlands + +function default.register_floatland_biomes(floatland_level, shadow_limit) + + -- Coniferous forest + + minetest.register_biome({ + name = "floatland_coniferous_forest", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 70, + }) + + -- Grassland + + minetest.register_biome({ + name = "floatland_grassland", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 35, + }) + + -- Sandstone desert + + minetest.register_biome({ + name = "floatland_sandstone_desert", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 0, + }) + + -- Floatland ocean / underground + + minetest.register_biome({ + name = "floatland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = shadow_limit, + y_max = floatland_level + 1, + heat_point = 50, + humidity_point = 50, + }) +end + + -- -- Register decorations -- @@ -960,7 +1276,6 @@ end -- Mgv6 function default.register_mgv6_decorations() - minetest.clear_registered_decorations() -- Papyrus @@ -1047,7 +1362,8 @@ function default.register_mgv6_decorations() }) end --- All mapgens except mgv6 and singlenode + +-- All mapgens except mgv6 local function register_grass_decoration(offset, scale, length) minetest.register_decoration({ @@ -1062,13 +1378,12 @@ local function register_grass_decoration(offset, scale, length) octaves = 3, persist = 0.6 }, - biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest", - "stone_grassland_dunes", "sandstone_grassland_dunes", - "coniferous_forest_dunes"}, + biomes = {"grassland", "grassland_dunes", "deciduous_forest", + "coniferous_forest", "coniferous_forest_dunes", + "floatland_grassland", "floatland_coniferous_forest"}, y_min = 1, y_max = 31000, - decoration = "default:grass_"..length, + decoration = "default:grass_" .. length, }) end @@ -1088,12 +1403,12 @@ local function register_dry_grass_decoration(offset, scale, length) biomes = {"savanna"}, y_min = 1, y_max = 31000, - decoration = "default:dry_grass_"..length, + decoration = "default:dry_grass_" .. length, }) end + function default.register_decorations() - minetest.clear_registered_decorations() -- Apple tree and log @@ -1112,8 +1427,9 @@ function default.register_decorations() biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts", flags = "place_center_x, place_center_z", + rotation = "random", }) minetest.register_decoration({ @@ -1131,20 +1447,7 @@ function default.register_decorations() biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:tree", param2 = 12, prob = 191}, - {name = "default:tree", param2 = 12}, - {name = "default:tree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_brown", prob = 63}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1153,39 +1456,26 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt_with_grass", "default:dirt"}, - sidelen = 80, + place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + sidelen = 16, fill_ratio = 0.1, biomes = {"rainforest", "rainforest_swamp"}, - y_min = 0, + y_min = -1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt_with_grass", "default:dirt"}, - sidelen = 80, + place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + sidelen = 16, fill_ratio = 0.005, biomes = {"rainforest", "rainforest_swamp"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:jungletree", param2 = 12, prob = 191}, - {name = "default:jungletree", param2 = 12}, - {name = "default:jungletree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_brown", prob = 127}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1204,10 +1494,10 @@ function default.register_decorations() octaves = 3, persist = 0.66 }, - biomes = {"taiga", "coniferous_forest"}, + biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, y_min = 2, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", flags = "place_center_x, place_center_z", }) @@ -1226,20 +1516,7 @@ function default.register_decorations() biomes = {"taiga", "coniferous_forest"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:pine_tree", param2 = 12, prob = 191}, - {name = "default:pine_tree", param2 = 12}, - {name = "default:pine_tree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_red", prob = 63}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1261,7 +1538,7 @@ function default.register_decorations() biomes = {"savanna"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -1281,17 +1558,7 @@ function default.register_decorations() biomes = {"savanna"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 2, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:acacia_tree", param2 = 12, prob = 191}, - {name = "default:acacia_tree", param2 = 12}, - {name = "default:acacia_tree", param2 = 12, prob = 127}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1313,7 +1580,7 @@ function default.register_decorations() biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts", flags = "place_center_x, place_center_z", }) @@ -1332,23 +1599,11 @@ function default.register_decorations() biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:aspen_tree", param2 = 12}, - {name = "default:aspen_tree", param2 = 12}, - {name = "default:aspen_tree", param2 = 12, prob = 127}, - {name = "flowers:mushroom_red", prob = 63}, - {name = "flowers:mushroom_brown", prob = 63}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts", flags = "place_center_x", rotation = "random", }) + -- Large cactus minetest.register_decoration({ @@ -1366,7 +1621,7 @@ function default.register_decorations() biomes = {"desert"}, y_min = 5, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts", + schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts", flags = "place_center_x", rotation = "random", }) @@ -1407,10 +1662,53 @@ function default.register_decorations() octaves = 3, persist = 0.7 }, - biomes = {"savanna_swamp"}, + biomes = {"savanna_shore"}, y_min = 0, y_max = 0, - schematic = minetest.get_modpath("default").."/schematics/papyrus.mts", + schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts", + }) + + -- Bush + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"snowy_grassland", "grassland", "deciduous_forest", + "floatland_grassland"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Acacia bush + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 90155, + octaves = 3, + persist = 0.7, + }, + biomes = {"savanna"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts", + flags = "place_center_x, place_center_z", }) -- Grasses @@ -1433,8 +1731,8 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 80, + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 16, fill_ratio = 0.1, biomes = {"rainforest"}, y_min = 1, @@ -1446,7 +1744,8 @@ function default.register_decorations() minetest.register_decoration({ deco_type = "simple", - place_on = {"default:desert_sand", "default:dirt_with_snow"}, + place_on = {"default:desert_sand", + "default:sand", "default:silver_sand"}, sidelen = 16, noise_params = { offset = 0, @@ -1456,24 +1755,72 @@ function default.register_decorations() octaves = 3, persist = 0.6 }, - biomes = {"desert", "tundra"}, + biomes = {"desert", "sandstone_desert", "cold_desert"}, y_min = 2, y_max = 31000, decoration = "default:dry_shrub", }) + + -- Coral reef + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:sand"}, + noise_params = { + offset = -0.15, + scale = 0.1, + spread = {x = 100, y = 100, z = 100}, + seed = 7013, + octaves = 3, + persist = 1, + }, + biomes = { + "desert_ocean", + "savanna_ocean", + "rainforest_ocean", + }, + y_min = -8, + y_max = -2, + schematic = minetest.get_modpath("default") .. "/schematics/corals.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) end -- --- Detect mapgen to select functions +-- Detect mapgen, flags and parameters to select functions -- +-- Get setting or default +local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or + "mountains, ridges, nofloatlands" +local captures_float = string.match(mgv7_spflags, "floatlands") +local captures_nofloat = string.match(mgv7_spflags, "nofloatlands") + +local mgv7_floatland_level = minetest.get_mapgen_setting("mgv7_floatland_level") or 1280 +local mgv7_shadow_limit = minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024 + +minetest.clear_registered_biomes() +minetest.clear_registered_ores() +minetest.clear_registered_decorations() + local mg_name = minetest.get_mapgen_setting("mg_name") if mg_name == "v6" then + default.register_mgv6_blob_ores() default.register_ores() default.register_mgv6_decorations() +elseif mg_name == "v7" and captures_float == "floatlands" and + captures_nofloat ~= "nofloatlands" then + -- Mgv7 with floatlands + default.register_biomes(mgv7_shadow_limit - 1) + default.register_floatland_biomes(mgv7_floatland_level, mgv7_shadow_limit) + default.register_blob_ores() + default.register_ores() + default.register_decorations() else - default.register_biomes() + default.register_biomes(31000) + default.register_blob_ores() default.register_ores() default.register_decorations() end diff --git a/mods/default/models/character.b3d b/mods/default/models/character.b3d index 7558e6f849369c419c8d307f022811ed546bc9f2..9ab454366bee8fb6c9e45e64ac0d77808d5ea66f 100644 GIT binary patch literal 84526 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 literal 86830 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 XOIzrRcy5N_d+3Xs7_U|y)V=wCU({5p diff --git a/mods/default/models/character.blend b/mods/default/models/character.blend index 7324325a1197155471dcd0a5aba574d001115c1f..fca9f6597fe998d1aebcac4abe126b13099a5788 100644 GIT binary patch delta 106862 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

-W7H0l~9`+fS?&c5zAo?f_r6Ko;0 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 diff --git a/mods/default/models/chest_open.obj b/mods/default/models/chest_open.obj new file mode 100644 index 00000000..72ba175a --- /dev/null +++ b/mods/default/models/chest_open.obj @@ -0,0 +1,79 @@ +# Blender v2.78 (sub 0) OBJ File: 'chest-open.blend' +# www.blender.org +o Top_Cube.002_None_Top_Cube.002_None_bottom +v -0.500000 0.408471 0.720970 +v -0.500000 1.115578 0.013863 +v -0.500000 0.894607 -0.207108 +v -0.500000 0.187501 0.499999 +v 0.500000 1.115578 0.013863 +v 0.500000 0.408471 0.720970 +v 0.500000 0.187501 0.499999 +v 0.500000 0.894607 -0.207108 +v -0.500000 0.187500 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.187500 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 0.0000 0.6875 +vt 1.0000 1.0000 +vt 0.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.6875 +vt 0.0000 0.6875 +vt 0.0000 0.0000 +vt 1.0000 0.5000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 1.0000 -0.0000 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Top +s off +f 6/1/1 5/2/1 2/3/1 1/4/1 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Bottom +f 11/5/2 10/6/2 14/7/2 13/8/2 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Right-Left +f 1/9/3 2/10/3 3/11/3 4/12/3 +f 5/13/4 6/1/4 7/14/4 8/15/4 +f 4/12/3 9/16/3 10/17/3 11/18/3 +f 12/19/4 7/14/4 13/8/4 14/20/4 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Back +f 6/21/5 1/9/5 4/12/5 7/22/5 +f 7/22/6 4/12/6 11/18/6 13/23/6 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Front +f 2/10/7 5/24/7 8/25/7 3/11/7 +f 9/16/8 12/26/8 14/27/8 10/17/8 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Inside +f 4/28/9 3/29/9 8/30/9 7/31/9 +f 7/31/10 12/32/10 9/33/10 4/28/10 diff --git a/mods/default/models/torch_ceiling.obj b/mods/default/models/torch_ceiling.obj new file mode 100644 index 00000000..ea51f3ce --- /dev/null +++ b/mods/default/models/torch_ceiling.obj @@ -0,0 +1,58 @@ +# Blender v2.77 (sub 0) OBJ File: 'torch_ceiling.blend' +# www.blender.org +mtllib torch_ceiling.mtl +o Cube_Cube.001 +v -0.062469 -0.047331 0.068152 +v -0.062469 -0.559515 -0.164388 +v -0.062469 0.004344 -0.045667 +v -0.062469 -0.507839 -0.278206 +v 0.062531 -0.047331 0.068152 +v 0.062531 -0.559515 -0.164388 +v 0.062531 0.004344 -0.045667 +v 0.062531 -0.507839 -0.278206 +v 0.353584 0.040000 0.363553 +v 0.353584 -0.397500 0.363553 +v -0.353522 0.040000 -0.343553 +v -0.353522 -0.397500 -0.343553 +v 0.353584 0.040000 -0.343553 +v -0.353522 0.040000 0.363553 +v 0.353584 -0.397500 -0.343553 +v -0.353522 -0.397500 0.363553 +vt 0.5625 0.5000 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.5000 +vt 0.4375 0.0000 +vt 0.5625 0.0000 +vt 0.5625 0.1250 +vt 0.4375 0.1250 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.0000 +vt 0.5625 0.6250 +vt 0.5625 0.0000 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5625 +vt 0.0000 0.5625 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vn 0.0000 0.9105 0.4134 +vn -0.0000 -0.4134 0.9105 +vn -1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +usemtl Material.001 +s off +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/9/2 4/6/2 8/5/2 7/10/2 +f 1/11/3 3/9/3 4/6/3 2/12/3 +f 5/13/2 1/11/2 2/12/2 6/14/2 +f 7/10/3 8/5/3 6/14/3 5/13/3 +usemtl Material.002 +f 9/15/4 10/16/4 12/17/4 11/18/4 +f 13/19/5 14/20/5 16/21/5 15/22/5 diff --git a/mods/default/models/torch_floor.obj b/mods/default/models/torch_floor.obj new file mode 100644 index 00000000..e2487efe --- /dev/null +++ b/mods/default/models/torch_floor.obj @@ -0,0 +1,50 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_floor.blend' +# www.blender.org +mtllib torch_floor.mtl +o Cube_Cube.001 +v 0.062500 0.062500 -0.062500 +v 0.062500 -0.500000 -0.062500 +v 0.062500 0.062500 0.062500 +v 0.062500 -0.500000 0.062500 +v -0.062500 0.062500 -0.062500 +v -0.062500 -0.500000 -0.062500 +v -0.062500 0.062500 0.062500 +v -0.062500 -0.500000 0.062500 +v -0.353553 -0.500000 0.353553 +v -0.353553 0.500000 0.353553 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.500000 -0.353553 +v -0.353553 -0.500000 -0.353553 +v 0.353553 -0.500000 0.353553 +v -0.353553 0.500000 -0.353553 +v 0.353553 0.500000 0.353553 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +g Cube_Cube.001_Cube_Cube.001_Material.001 +usemtl Material.001 +s off +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +g Cube_Cube.001_Cube_Cube.001_Material.002 +usemtl Material.002 +f 9/9/4 10/10/4 12/11/4 11/12/4 +f 13/12/5 14/9/5 16/10/5 15/11/5 diff --git a/mods/default/models/torch_wall.obj b/mods/default/models/torch_wall.obj new file mode 100644 index 00000000..57baa9e6 --- /dev/null +++ b/mods/default/models/torch_wall.obj @@ -0,0 +1,64 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_wall.blend' +# www.blender.org +mtllib torch_wall.mtl +o Cube_Cube.001 +v 0.062469 -0.195248 0.023570 +v 0.062469 -0.476498 -0.463570 +v 0.062469 -0.303502 0.086070 +v 0.062469 -0.584752 -0.401070 +v -0.062531 -0.195248 0.023570 +v -0.062531 -0.476498 -0.463570 +v -0.062531 -0.303502 0.086070 +v -0.062531 -0.584752 -0.401070 +v -0.353584 -0.613553 0.022500 +v -0.353584 -0.613553 0.460000 +v 0.353522 0.093553 0.022500 +v 0.353522 0.093553 0.460000 +v -0.353584 0.093553 0.022500 +v 0.353522 -0.613553 0.022500 +v -0.353584 0.093553 0.460000 +v 0.353522 -0.613553 0.460000 +v 0.353553 0.056811 -0.121957 +v 0.353553 -0.224439 -0.609096 +v -0.353553 -0.555561 0.231596 +v -0.353553 -0.836811 -0.255543 +v -0.353553 0.056811 -0.121957 +v -0.353553 -0.224439 -0.609096 +v 0.353553 -0.555561 0.231596 +v 0.353553 -0.836811 -0.255543 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 0.000000 0.562500 +vt 0.000000 -0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.562500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.000000 0.500000 0.866000 +vn -0.000000 0.866000 -0.500000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.612400 -0.353600 +vn -0.707100 -0.612400 0.353600 +vn -0.707100 0.707100 -0.000000 +vn -0.707100 -0.707100 -0.000000 +g Cube_Cube.001_Cube_Cube.001_Material.001 +usemtl Material.001 +s off +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +f 17/9/4 18/10/4 20/11/4 19/12/4 +f 21/9/5 22/10/5 24/11/5 23/12/5 +g Cube_Cube.001_Cube_Cube.001_Material.002 +usemtl Material.002 +f 9/12/6 10/13/6 12/14/6 11/9/6 +f 13/9/7 14/12/7 16/13/7 15/14/7 diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index f14d0e9d..f14e8b21 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -30,6 +30,12 @@ default:desert_stone_block default:sandstone default:sandstonebrick default:sandstone_block +default:desert_sandstone +default:desert_sandstone_brick +default:desert_sandstone_block +default:silver_sandstone +default:silver_sandstone_brick +default:silver_sandstone_block default:obsidian default:obsidianbrick @@ -44,6 +50,7 @@ default:dirt_with_grass default:dirt_with_grass_footsteps default:dirt_with_dry_grass default:dirt_with_snow +default:dirt_with_rainforest_litter default:sand default:desert_sand @@ -100,6 +107,10 @@ default:steelblock default:stone_with_copper default:copperblock + +default:stone_with_tin +default:tinblock + default:bronzeblock default:stone_with_gold @@ -131,6 +142,13 @@ default:dry_grass_3 default:dry_grass_4 default:dry_grass_5 +default:bush_stem +default:bush_leaves +default:bush_sapling +default:acacia_bush_stem +default:acacia_bush_leaves +default:acacia_bush_sapling + Corals ------ @@ -154,8 +172,6 @@ default:lava_flowing Tools / "Advanced" crafting / Non-"natural" ------------------------------------------- -default:torch - default:chest default:chest_locked @@ -176,11 +192,10 @@ default:fence_aspen_wood default:glass default:obsidian_glass -default:rail - default:brick default:meselamp +default:mese_post_light Misc ---- @@ -272,7 +287,6 @@ minetest.register_node("default:desert_stone_block", { sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("default:sandstone", { description = "Sandstone", tiles = {"default_sandstone.png"}, @@ -298,6 +312,55 @@ minetest.register_node("default:sandstone_block", { sounds = default.node_sound_stone_defaults(), }) +minetest.register_node("default:desert_sandstone", { + description = "Desert Sandstone", + tiles = {"default_desert_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_brick", { + description = "Desert Sandstone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_desert_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:desert_sandstone_block", { + description = "Desert Sandstone Block", + tiles = {"default_desert_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone", { + description = "Silver Sandstone", + tiles = {"default_silver_sandstone.png"}, + groups = {crumbly = 1, cracky = 3}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_brick", { + description = "Silver Sandstone Brick", + paramtype2 = "facedir", + place_param2 = 0, + tiles = {"default_silver_sandstone_brick.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:silver_sandstone_block", { + description = "Silver Sandstone Block", + tiles = {"default_silver_sandstone_block.png"}, + is_ground_content = false, + groups = {cracky = 2}, + sounds = default.node_sound_stone_defaults(), +}) minetest.register_node("default:obsidian", { description = "Obsidian", @@ -377,13 +440,28 @@ minetest.register_node("default:dirt_with_snow", { tiles = {"default_snow.png", "default_dirt.png", {name = "default_dirt.png^default_snow_side.png", tileable_vertical = false}}, - groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + groups = {crumbly = 3, spreading_dirt_type = 1, snowy = 1}, drop = 'default:dirt', sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, }), }) +minetest.register_node("default:dirt_with_rainforest_litter", { + description = "Dirt with Rainforest Litter", + tiles = { + "default_rainforest_litter.png", + "default_dirt.png", + {name = "default_dirt.png^default_rainforest_litter_side.png", + tileable_vertical = false} + }, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}, + }), +}) + minetest.register_node("default:sand", { description = "Sand", tiles = {"default_sand.png"}, @@ -437,7 +515,6 @@ minetest.register_node("default:snow", { paramtype = "light", buildable_to = true, floodable = true, - walkable = false, drawtype = "nodebox", node_box = { type = "fixed", @@ -445,7 +522,7 @@ minetest.register_node("default:snow", { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, }, }, - groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1}, + groups = {crumbly = 3, falling_node = 1, puts_out_fire = 1, snowy = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, dug = {name = "default_snow_footstep", gain = 0.2}, @@ -463,12 +540,19 @@ minetest.register_node("default:snow", { minetest.register_node("default:snowblock", { description = "Snow Block", tiles = {"default_snow.png"}, - groups = {crumbly = 3, puts_out_fire = 1}, + groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1, snowy = 1}, sounds = default.node_sound_dirt_defaults({ footstep = {name = "default_snow_footstep", gain = 0.15}, dug = {name = "default_snow_footstep", gain = 0.2}, dig = {name = "default_snow_footstep", gain = 0.2} }), + + on_construct = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "default:dirt_with_grass" then + minetest.set_node(pos, {name = "default:dirt_with_snow"}) + end + end, }) minetest.register_node("default:ice", { @@ -476,7 +560,7 @@ minetest.register_node("default:ice", { tiles = {"default_ice.png"}, is_ground_content = false, paramtype = "light", - groups = {cracky = 3, puts_out_fire = 1}, + groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1}, sounds = default.node_sound_glass_defaults(), }) @@ -508,7 +592,6 @@ minetest.register_node("default:wood", { minetest.register_node("default:sapling", { description = "Sapling", drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_sapling.png"}, inventory_image = "default_sapling.png", wield_image = "default_sapling.png", @@ -518,16 +601,16 @@ minetest.register_node("default:sapling", { on_timer = default.grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} }, groups = {snappy = 2, dig_immediate = 3, flammable = 2, attached_node = 1, sapling = 1}, sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(60,234)) + minetest.get_node_timer(pos):start(math.random(2400,4800)) end, ---[[ + on_place = function(itemstack, placer, pointed_thing) itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, "default:sapling", @@ -540,14 +623,12 @@ minetest.register_node("default:sapling", { return itemstack end, - ]] }) minetest.register_node("default:leaves", { description = "Leaves", drawtype = "allfaces_optional", waving = 1, - visual_scale = 1.3, tiles = {"default_leaves.png"}, special_tiles = {"default_leaves_simple.png"}, paramtype = "light", @@ -576,7 +657,6 @@ minetest.register_node("default:leaves", { minetest.register_node("default:apple", { description = "Apple", drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_apple.png"}, inventory_image = "default_apple.png", paramtype = "light", @@ -585,7 +665,7 @@ minetest.register_node("default:apple", { is_ground_content = false, selection_box = { type = "fixed", - fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2} + fixed = {-3 / 16, -7 / 16, -3 / 16, 3 / 16, 4 / 16, 3 / 16} }, groups = {fleshy = 3, dig_immediate = 3, flammable = 2, leafdecay = 3, leafdecay_drop = 1}, @@ -613,7 +693,7 @@ minetest.register_node("default:jungletree", { }) minetest.register_node("default:junglewood", { - description = "Junglewood Planks", + description = "Jungle Wood Planks", paramtype2 = "facedir", place_param2 = 0, tiles = {"default_junglewood.png"}, @@ -626,7 +706,6 @@ minetest.register_node("default:jungleleaves", { description = "Jungle Leaves", drawtype = "allfaces_optional", waving = 1, - visual_scale = 1.3, tiles = {"default_jungleleaves.png"}, special_tiles = {"default_jungleleaves_simple.png"}, paramtype = "light", @@ -647,7 +726,6 @@ minetest.register_node("default:jungleleaves", { minetest.register_node("default:junglesapling", { description = "Jungle Sapling", drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_junglesapling.png"}, inventory_image = "default_junglesapling.png", wield_image = "default_junglesapling.png", @@ -657,16 +735,16 @@ minetest.register_node("default:junglesapling", { on_timer = default.grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} }, groups = {snappy = 2, dig_immediate = 3, flammable = 2, attached_node = 1, sapling = 1}, sounds = default.node_sound_leaves_defaults(), on_construct = function(pos) - minetest.get_node_timer(pos):start(math.random(60,234)) + minetest.get_node_timer(pos):start(math.random(2400,4800)) end, ---[[ + on_place = function(itemstack, placer, pointed_thing) itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, "default:junglesapling", @@ -679,7 +757,6 @@ minetest.register_node("default:junglesapling", { return itemstack end, - ]] }) @@ -708,7 +785,6 @@ minetest.register_node("default:pine_wood", { minetest.register_node("default:pine_needles",{ description = "Pine Needles", drawtype = "allfaces_optional", - visual_scale = 1.3, tiles = {"default_pine_needles.png"}, waving = 1, paramtype = "light", @@ -729,7 +805,6 @@ minetest.register_node("default:pine_needles",{ minetest.register_node("default:pine_sapling", { description = "Pine Sapling", drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_pine_sapling.png"}, inventory_image = "default_pine_sapling.png", wield_image = "default_pine_sapling.png", @@ -739,7 +814,7 @@ minetest.register_node("default:pine_sapling", { on_timer = default.grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} }, groups = {snappy = 2, dig_immediate = 3, flammable = 3, attached_node = 1, sapling = 1}, @@ -748,7 +823,7 @@ minetest.register_node("default:pine_sapling", { on_construct = function(pos) minetest.get_node_timer(pos):start(math.random(2400,4800)) end, ---[[ + on_place = function(itemstack, placer, pointed_thing) itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, "default:pine_sapling", @@ -761,7 +836,6 @@ minetest.register_node("default:pine_sapling", { return itemstack end, - ]] }) @@ -790,8 +864,8 @@ minetest.register_node("default:acacia_wood", { minetest.register_node("default:acacia_leaves", { description = "Acacia Leaves", drawtype = "allfaces_optional", - visual_scale = 1.3, tiles = {"default_acacia_leaves.png"}, + special_tiles = {"default_acacia_leaves_simple.png"}, waving = 1, paramtype = "light", is_ground_content = false, @@ -811,7 +885,6 @@ minetest.register_node("default:acacia_leaves", { minetest.register_node("default:acacia_sapling", { description = "Acacia Tree Sapling", drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_acacia_sapling.png"}, inventory_image = "default_acacia_sapling.png", wield_image = "default_acacia_sapling.png", @@ -821,7 +894,7 @@ minetest.register_node("default:acacia_sapling", { on_timer = default.grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} }, groups = {snappy = 2, dig_immediate = 3, flammable = 2, attached_node = 1, sapling = 1}, @@ -830,7 +903,7 @@ minetest.register_node("default:acacia_sapling", { on_construct = function(pos) minetest.get_node_timer(pos):start(math.random(2400,4800)) end, ---[[ + on_place = function(itemstack, placer, pointed_thing) itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, "default:acacia_sapling", @@ -843,7 +916,6 @@ minetest.register_node("default:acacia_sapling", { return itemstack end, - ]] }) minetest.register_node("default:aspen_tree", { @@ -871,7 +943,6 @@ minetest.register_node("default:aspen_wood", { minetest.register_node("default:aspen_leaves", { description = "Aspen Leaves", drawtype = "allfaces_optional", - visual_scale = 1.3, tiles = {"default_aspen_leaves.png"}, waving = 1, paramtype = "light", @@ -892,7 +963,6 @@ minetest.register_node("default:aspen_leaves", { minetest.register_node("default:aspen_sapling", { description = "Aspen Tree Sapling", drawtype = "plantlike", - visual_scale = 1.0, tiles = {"default_aspen_sapling.png"}, inventory_image = "default_aspen_sapling.png", wield_image = "default_aspen_sapling.png", @@ -902,7 +972,7 @@ minetest.register_node("default:aspen_sapling", { on_timer = default.grow_sapling, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3} + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 0.5, 3 / 16} }, groups = {snappy = 2, dig_immediate = 3, flammable = 3, attached_node = 1, sapling = 1}, @@ -911,7 +981,7 @@ minetest.register_node("default:aspen_sapling", { on_construct = function(pos) minetest.get_node_timer(pos):start(math.random(2400,4800)) end, ---[[ + on_place = function(itemstack, placer, pointed_thing) itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, "default:aspen_sapling", @@ -924,7 +994,6 @@ minetest.register_node("default:aspen_sapling", { return itemstack end, - ]] }) -- @@ -981,6 +1050,24 @@ minetest.register_node("default:copperblock", { sounds = default.node_sound_metal_defaults(), }) + +minetest.register_node("default:stone_with_tin", { + description = "Tin Ore", + tiles = {"default_stone.png^default_mineral_tin.png"}, + groups = {cracky = 2}, + drop = "default:tin_lump", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("default:tinblock", { + description = "Tin Block", + tiles = {"default_tin_block.png"}, + is_ground_content = false, + groups = {cracky = 1, level = 2}, + sounds = default.node_sound_metal_defaults(), +}) + + minetest.register_node("default:bronzeblock", { description = "Bronze Block", tiles = {"default_bronze_block.png"}, @@ -1050,7 +1137,7 @@ minetest.register_node("default:cactus", { tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, paramtype2 = "facedir", - groups = {snappy = 1, choppy = 3}, + groups = {choppy = 3}, sounds = default.node_sound_wood_defaults(), on_place = minetest.rotate_node, }) @@ -1066,7 +1153,7 @@ minetest.register_node("default:papyrus", { walkable = false, selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16}, }, groups = {snappy = 3, flammable = 2}, sounds = default.node_sound_leaves_defaults(), @@ -1080,7 +1167,6 @@ minetest.register_node("default:dry_shrub", { description = "Dry Shrub", drawtype = "plantlike", waving = 1, - visual_scale = 1.0, tiles = {"default_dry_shrub.png"}, inventory_image = "default_dry_shrub.png", wield_image = "default_dry_shrub.png", @@ -1092,7 +1178,7 @@ minetest.register_node("default:dry_shrub", { sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}, }, }) @@ -1100,7 +1186,7 @@ minetest.register_node("default:junglegrass", { description = "Jungle Grass", drawtype = "plantlike", waving = 1, - visual_scale = 1.3, + visual_scale = 1.69, tiles = {"default_junglegrass.png"}, inventory_image = "default_junglegrass.png", wield_image = "default_junglegrass.png", @@ -1108,11 +1194,11 @@ minetest.register_node("default:junglegrass", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, flammable = 1}, + groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 1.19, 7 / 16}, }, }) @@ -1133,7 +1219,7 @@ minetest.register_node("default:grass_1", { sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16, 6 / 16}, }, on_place = function(itemstack, placer, pointed_thing) @@ -1163,7 +1249,7 @@ for i = 2, 5 do sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, }, }) end @@ -1185,7 +1271,7 @@ minetest.register_node("default:dry_grass_1", { sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16, 6 / 16}, }, on_place = function(itemstack, placer, pointed_thing) @@ -1215,12 +1301,155 @@ for i = 2, 5 do sounds = default.node_sound_leaves_defaults(), selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5}, + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -1 / 16, 6 / 16}, }, }) end +minetest.register_node("default:bush_stem", { + description = "Bush Stem", + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_bush_stem.png"}, + inventory_image = "default_bush_stem.png", + wield_image = "default_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:bush_leaves", { + description = "Bush Leaves", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:bush_sapling"}, rarity = 5}, + {items = {"default:bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:bush_sapling", { + description = "Bush Sapling", + drawtype = "plantlike", + tiles = {"default_bush_sapling.png"}, + inventory_image = "default_bush_sapling.png", + wield_image = "default_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(1200, 2400)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + +minetest.register_node("default:acacia_bush_stem", { + description = "Acacia Bush Stem", + drawtype = "plantlike", + visual_scale = 1.41, + tiles = {"default_acacia_bush_stem.png"}, + inventory_image = "default_acacia_bush_stem.png", + wield_image = "default_acacia_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + }, +}) + +minetest.register_node("default:acacia_bush_leaves", { + description = "Acacia Bush Leaves", + drawtype = "allfaces_optional", + waving = 1, + tiles = {"default_acacia_leaves_simple.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"default:acacia_bush_sapling"}, rarity = 5}, + {items = {"default:acacia_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("default:acacia_bush_sapling", { + description = "Acacia Bush Sapling", + drawtype = "plantlike", + tiles = {"default_acacia_bush_sapling.png"}, + inventory_image = "default_acacia_bush_sapling.png", + wield_image = "default_acacia_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = default.grow_sapling, + selection_box = { + type = "fixed", + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, 2 / 16, 3 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, flammable = 2, + attached_node = 1, sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_construct = function(pos) + minetest.get_node_timer(pos):start(math.random(1200, 2400)) + end, + + on_place = function(itemstack, placer, pointed_thing) + itemstack = default.sapling_on_place(itemstack, placer, pointed_thing, + "default:acacia_bush_sapling", + -- minp, maxp to be checked, relative to sapling pos + {x = -1, y = 0, z = -1}, + {x = 1, y = 1, z = 1}, + -- maximum interval of interior volume check + 2) + + return itemstack + end, +}) + + -- -- Corals -- @@ -1294,7 +1523,8 @@ minetest.register_node("default:water_source", { liquid_alternative_source = "default:water_source", liquid_viscosity = 1, post_effect_color = {a = 103, r = 30, g = 60, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), }) minetest.register_node("default:water_flowing", { @@ -1339,7 +1569,8 @@ minetest.register_node("default:water_flowing", { liquid_viscosity = 1, post_effect_color = {a = 103, r = 30, g = 60, b = 90}, groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1}, + not_in_creative_inventory = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), }) @@ -1385,7 +1616,8 @@ minetest.register_node("default:river_water_source", { liquid_renewable = false, liquid_range = 2, post_effect_color = {a = 103, r = 30, g = 76, b = 90}, - groups = {water = 3, liquid = 3, puts_out_fire = 1}, + groups = {water = 3, liquid = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), }) minetest.register_node("default:river_water_flowing", { @@ -1432,7 +1664,8 @@ minetest.register_node("default:river_water_flowing", { liquid_range = 2, post_effect_color = {a = 103, r = 30, g = 76, b = 90}, groups = {water = 3, liquid = 3, puts_out_fire = 1, - not_in_creative_inventory = 1}, + not_in_creative_inventory = 1, cools_lava = 1}, + sounds = default.node_sound_water_defaults(), }) @@ -1533,71 +1766,7 @@ minetest.register_node("default:lava_flowing", { -- Tools / "Advanced" crafting / Non-"natural" -- -minetest.register_node("default:torch", { - description = "Torch", - drawtype = "torchlike", - tiles = { - { - name = "default_torch_on_floor_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0 - }, - }, - { - name="default_torch_on_ceiling_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0 - }, - }, - { - name="default_torch_animated.png", - animation = { - type = "vertical_frames", - aspect_w = 16, - aspect_h = 16, - length = 3.0 - }, - }, - }, - inventory_image = "default_torch_on_floor.png", - wield_image = "default_torch_on_floor.png", - paramtype = "light", - paramtype2 = "wallmounted", - sunlight_propagates = true, - is_ground_content = false, - walkable = false, - light_source = default.LIGHT_MAX - 1, - selection_box = { - type = "wallmounted", - wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1}, - wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1}, - wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1}, - }, - groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1}, - legacy_wallmounted = true, - sounds = default.node_sound_defaults(), -}) - - -local chest_formspec = - "size[8,9]" .. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. - "list[current_name;main;0,0.3;8,4;]" .. - "list[current_player;main;0,4.85;8,1;]" .. - "list[current_player;main;0,6.08;8,3;8]" .. - "listring[current_name;main]" .. - "listring[current_player;main]" .. - default.get_hotbar_bg(0,4.85) - -local function get_locked_chest_formspec(pos) +local function get_chest_formspec(pos) local spos = pos.x .. "," .. pos.y .. "," .. pos.z local formspec = "size[8,9]" .. @@ -1610,141 +1779,287 @@ local function get_locked_chest_formspec(pos) "listring[nodemeta:" .. spos .. ";main]" .. "listring[current_player;main]" .. default.get_hotbar_bg(0,4.85) - return formspec + return formspec end -local function has_locked_chest_privilege(meta, player) - local name = "" - if player then - if minetest.check_player_privs(player, "protection_bypass") then - return true - end - name = player:get_player_name() - end - if name ~= meta:get_string("owner") then +local function chest_lid_obstructed(pos) + local above = { x = pos.x, y = pos.y + 1, z = pos.z } + local def = minetest.registered_nodes[minetest.get_node(above).name] + -- allow ladders, signs, wallmounted things and torches to not obstruct + if def.drawtype == "airlike" or + def.drawtype == "signlike" or + def.drawtype == "torchlike" or + (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then return false end return true end -minetest.register_node("default:chest", { - description = "Chest", - tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}, - paramtype2 = "facedir", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, - legacy_facedir_simple = true, - is_ground_content = false, - sounds = default.node_sound_wood_defaults(), +local open_chests = {} - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", chest_formspec) - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - on_metadata_inventory_move = function(pos, from_list, from_index, +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:chest" then + return + end + if not player or not fields.quit then + return + end + local pn = player:get_player_name() + + if not open_chests[pn] then + return + end + + local pos = open_chests[pn].pos + local sound = open_chests[pn].sound + local swap = open_chests[pn].swap + local node = minetest.get_node(pos) + + open_chests[pn] = nil + for k, v in pairs(open_chests) do + if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then + return true + end + end + minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap, + param2 = node.param2 }) + minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10}) + return true +end) + +function default.register_chest(name, d) + local def = table.copy(d) + def.drawtype = "mesh" + def.visual = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.legacy_facedir_simple = true + def.is_ground_content = false + + if def.protected then + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Locked Chest (owned by " .. + meta:get_string("owner") .. ")") + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and + default.can_interact_with_node(player, pos) + end + def.allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return count + end + def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if not default.can_interact_with_node(clicker, pos) then + return itemstack + end + + minetest.sound_play(def.sound_open, {gain = 0.3, + pos = pos, max_hear_distance = 10}) + if not chest_lid_obstructed(pos) then + minetest.swap_node(pos, + { name = "default:" .. name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", get_chest_formspec(pos)) + open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function() end + def.on_key_use = function(pos, player) + local secret = minetest.get_meta(pos):get_string("key_lock_secret") + local itemstack = player:get_wielded_item() + local key_meta = itemstack:get_meta() + + if key_meta:get_string("secret") == "" then + key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) + itemstack:set_metadata("") + end + + if secret ~= key_meta:get_string("secret") then + return + end + + minetest.show_formspec( + player:get_player_name(), + "default:chest_locked", + get_chest_formspec(pos) + ) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pn = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= pn then + minetest.record_protection_violation(pos, pn) + minetest.chat_send_player(pn, "You do not own this chest.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked chest", owner + end + else + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end + def.on_rightclick = function(pos, node, clicker) + minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, + max_hear_distance = 10}) + if not chest_lid_obstructed(pos) then + minetest.swap_node(pos, { + name = "default:" .. name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", get_chest_formspec(pos)) + open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + end + + def.on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) minetest.log("action", player:get_player_name() .. " moves stuff in chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) + end + def.on_metadata_inventory_put = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " moves " .. stack:get_name() .. " to chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) + end + def.on_metadata_inventory_take = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " takes " .. stack:get_name() .. " from chest at " .. minetest.pos_to_string(pos)) - end, - on_blast = function(pos) + end + def.on_blast = function(pos) local drops = {} default.get_inventory_drops(pos, "main", drops) drops[#drops+1] = "default:chest" minetest.remove_node(pos) return drops - end, -}) + end -minetest.register_node("default:chest_locked", { - description = "Locked Chest", - tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", - "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"}, - paramtype2 = "facedir", - groups = {choppy = 2, oddly_breakable_by_hand = 2}, - legacy_facedir_simple = true, - is_ground_content = false, + local def_opened = table.copy(def) + local def_closed = table.copy(def) + + def_opened.mesh = "chest_open.obj" + def_opened.drop = "default:" .. name + def_opened.groups.not_in_creative_inventory = 1 + def_opened.selection_box = { + type = "fixed", + fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 }, + } + def_opened.can_dig = function() + return false + end + + def_closed.mesh = nil + def_closed.drawtype = nil + def_closed.tiles[6] = def.tiles[5] -- swap textures around for "normal" + def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh + def_closed.tiles[3] = def.tiles[3].."^[transformFX" + + minetest.register_node("default:" .. name, def_closed) + minetest.register_node("default:" .. name .. "_open", def_opened) + + -- convert old chests to this new variant + minetest.register_lbm({ + label = "update chests to opening chests", + name = "default:upgrade_" .. name .. "_v2", + nodenames = {"default:" .. name}, + action = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", nil) + local inv = meta:get_inventory() + local list = inv:get_list("default:chest") + if list then + inv:set_size("main", 8*4) + inv:set_list("main", list) + inv:set_list("default:chest", nil) + end + end + }) +end + + +default.register_chest("chest", { + description = "Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_front.png", + "default_chest_inside.png" + }, sounds = default.node_sound_wood_defaults(), - - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", "Locked Chest (owned by " .. - meta:get_string("owner") .. ")") - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8 * 4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") and has_locked_chest_privilege(meta, player) - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, - to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " moves " .. stack:get_name() .. - " to locked chest at " .. minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name() .. - " takes " .. stack:get_name() .. - " from locked chest at " .. minetest.pos_to_string(pos)) - end, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local meta = minetest.get_meta(pos) - if has_locked_chest_privilege(meta, clicker) then - minetest.show_formspec( - clicker:get_player_name(), - "default:chest_locked", - get_locked_chest_formspec(pos) - ) - end - return itemstack - end, - on_blast = function() end, + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, }) +default.register_chest("chest_locked", { + description = "Locked Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_lock.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = true, +}) local bookshelf_formspec = "size[8,7;]" .. @@ -1758,6 +2073,25 @@ local bookshelf_formspec = "listring[current_player;main]" .. default.get_hotbar_bg(0,2.85) +local function get_bookshelf_formspec(inv) + local formspec = bookshelf_formspec + local invlist = inv and inv:get_list("books") + -- Inventory slots overlay + local bx, by = 0, 0.3 + for i = 1, 16 do + if i == 9 then + bx = 0 + by = by + 1 + end + if not invlist or invlist[i]:is_empty() then + formspec = formspec .. + "image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]" + end + bx = bx + 1 + end + return formspec +end + minetest.register_node("default:bookshelf", { description = "Bookshelf", tiles = {"default_wood.png", "default_wood.png", "default_wood.png", @@ -1769,7 +2103,7 @@ minetest.register_node("default:bookshelf", { on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", bookshelf_formspec) + meta:set_string("formspec", get_bookshelf_formspec(nil)) local inv = meta:get_inventory() inv:set_size("books", 8 * 2) end, @@ -1786,14 +2120,20 @@ minetest.register_node("default:bookshelf", { on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) minetest.log("action", player:get_player_name() .. " moves stuff in bookshelf at " .. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory())) end, on_metadata_inventory_put = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " moves stuff to bookshelf at " .. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory())) end, on_metadata_inventory_take = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " takes stuff from bookshelf at " .. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_bookshelf_formspec(meta:get_inventory())) end, on_blast = function(pos) local drops = {} @@ -1924,7 +2264,7 @@ default.register_fence("default:fence_acacia_wood", { }) default.register_fence("default:fence_junglewood", { - description = "Junglewood Fence", + description = "Jungle Wood Fence", texture = "default_fence_junglewood.png", inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126", wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126", @@ -1958,6 +2298,7 @@ minetest.register_node("default:glass", { drawtype = "glasslike_framed_optional", tiles = {"default_glass.png", "default_glass_detail.png"}, paramtype = "light", + paramtype2 = "glasslikeliquidlevel", sunlight_propagates = true, is_ground_content = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, @@ -1969,6 +2310,7 @@ minetest.register_node("default:obsidian_glass", { drawtype = "glasslike_framed_optional", tiles = {"default_obsidian_glass.png", "default_obsidian_glass_detail.png"}, paramtype = "light", + paramtype2 = "glasslikeliquidlevel", is_ground_content = false, sunlight_propagates = true, sounds = default.node_sound_glass_defaults(), @@ -1976,27 +2318,6 @@ minetest.register_node("default:obsidian_glass", { }) -minetest.register_node("default:rail", { - description = "Rail", - drawtype = "raillike", - tiles = {"default_rail.png", "default_rail_curved.png", - "default_rail_t_junction.png", "default_rail_crossing.png"}, - inventory_image = "default_rail.png", - wield_image = "default_rail.png", - paramtype = "light", - sunlight_propagates = true, - walkable = false, - is_ground_content = false, - selection_box = { - type = "fixed", - -- but how to specify the dimensions for curved and sideways rails? - fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, - }, - groups = {dig_immediate = 2, attached_node = 1, - connect_to_raillike = minetest.raillike_group("rail")}, -}) - - minetest.register_node("default:brick", { description = "Brick Block", paramtype2 = "facedir", @@ -2020,6 +2341,27 @@ minetest.register_node("default:meselamp", { light_source = default.LIGHT_MAX, }) +minetest.register_node("default:mese_post_light", { + description = "Mese Post Light", + tiles = {"default_mese_post_light_top.png", "default_mese_post_light_top.png", + "default_mese_post_light_side_dark.png", "default_mese_post_light_side_dark.png", + "default_mese_post_light_side.png", "default_mese_post_light_side.png"}, + wield_image = "default_mese_post_light_side.png", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16}, + }, + }, + paramtype = "light", + light_source = default.LIGHT_MAX, + sunlight_propagates = true, + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), +}) + -- -- Misc -- @@ -2031,3 +2373,69 @@ minetest.register_node("default:cloud", { sounds = default.node_sound_defaults(), groups = {not_in_creative_inventory = 1}, }) + +-- +-- register trees for leafdecay +-- + +if minetest.get_mapgen_setting("mg_name") == "v6" then + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 2, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 3, + }) + + default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 3, + }) +else + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 3, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 2, + }) + + default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 2, + }) +end + +default.register_leafdecay({ + trunks = {"default:acacia_tree"}, + leaves = {"default:acacia_leaves"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:aspen_tree"}, + leaves = {"default:aspen_leaves"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:bush_stem"}, + leaves = {"default:bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_bush_stem"}, + leaves = {"default:acacia_bush_leaves"}, + radius = 1, +}) diff --git a/mods/default/player.lua b/mods/default/player.lua index 8fb0aca8..0a2078d6 100644 --- a/mods/default/player.lua +++ b/mods/default/player.lua @@ -94,11 +94,7 @@ minetest.register_on_joinplayer(function(player) default.player_attached[player:get_player_name()] = false default.player_set_model(player, "character.b3d") player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) - - -- set GUI - if not minetest.setting_getbool("creative_mode") then - player:set_inventory_formspec(default.gui_survival_form) - end + player:hud_set_hotbar_image("gui_hotbar.png") player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") end) diff --git a/mods/default/schematics/acacia_bush.mts b/mods/default/schematics/acacia_bush.mts new file mode 100644 index 0000000000000000000000000000000000000000..df95586110928918f10e78311b6a0a974b7e150a GIT binary patch literal 113 zcmeYb3HD`RVPFQq`uchhm6%z?AeEAumROooVwISjn4FmypHy0$5ucNqSe9DMAc0M; uxFj{VVoq`b1GAe7hj8K{0mm@mc=>$!eEyUx|JSo`n&?`<$e_o_-UI-1Y9pTj literal 0 HcmV?d00001 diff --git a/mods/default/schematics/acacia_log.mts b/mods/default/schematics/acacia_log.mts new file mode 100644 index 0000000000000000000000000000000000000000..037bca8c32152f0927ff027811e918e713872b91 GIT binary patch literal 65 zcmeYb3HD`RVPIxpVqmPV2a?Q*nMDl3DXD3Rr8y;5iOGq{nThcwMX9M3bCMGnnB5Fg T5<1pzXP;zaW5d8XmC+Rd7>*KA literal 0 HcmV?d00001 diff --git a/mods/default/schematics/apple_log.mts b/mods/default/schematics/apple_log.mts new file mode 100644 index 0000000000000000000000000000000000000000..e7ee8f2b84ab06165c4537cd4607ec56e3066608 GIT binary patch literal 90 zcmeYb3HD`RVPFPA#`^kt5F;_Oh=C_1H7&6;r^KqHC^eNqEG;L$JhiCUDz~&aqbNT= qH$JH-zdWyEPI3YRvztLmLITt0N3Y*XK5^uclao{6WDtsDOalOtHXH!} literal 0 HcmV?d00001 diff --git a/mods/default/schematics/apple_tree.mts b/mods/default/schematics/apple_tree.mts index ac09b46694037b0824dd4c0e3762d66d0fff1a76..2bd57c1fc4aa36e2f03c6ac2989c86b575e2784e 100644 GIT binary patch delta 33 rcmV++0N($j0jU9yd;|aT`;mVa6Cb;I`{n;*nn%9-h9Up}c91F27*-Hl delta 27 jcmZ3xSVl94NFDkf~JX$QoKTEl<(I%3oT#b=U1=aK7H!QBPS=Pz{w!`m2m|C DeorWw literal 0 HcmV?d00001 diff --git a/mods/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts index 724aae08d67834daea27dcfdcc9c2def13b435bd..429a831c775320ace3f86c566380abea4dafb162 100644 GIT binary patch delta 74 zcmV-Q0JZd%YePY-7{V>o2q)@?3$@%t`}AU;U!QM}lSK>wDhA?uFo~T71^@98 g_5bS`>VZT(b`}r=)lknZ1OesYG72aH04DA`jmYI6RR910 delta 76 zcmV-S0JHzD0k8p(Yej)y44Yf15l++(7izhQ_UXkwzdqj{CyN*WR1C!RU=lkE3jX6G i>i^d>)B}ln3|4(Tm;|Yzo?8e4%EM(8Py_%cayty#a~{C} diff --git a/mods/default/schematics/aspen_tree_from_sapling.mts b/mods/default/schematics/aspen_tree_from_sapling.mts index b7ca161903056454f78f4672000947d2ebf60035..b7ab3ee6b71ff54ed06229486b50a9dd4f918479 100644 GIT binary patch delta 74 zcmV-Q0JZd%YePY-7{V>o2q)@?3$@%t`}AU;U!QM}lSK>wDhA?uFo~T71@$1} gKb(b102PBUgv82%DyEKG2m;E(WfV{Z0L!{I4W+Ffga7~l delta 75 zcmV-R0JQ(E0j~j&Yea!x44Yf15l++(7izhQ_UXkwzdqj{CyN*WR1C!RU=lkE3hF_` he>e-304fGy2#J*iRZJbX5CoKm%P61-0076$HVk1=8^!7|$4yv7NJ1%B5g^Qap r8meX7DB9LcJ0r5Da)VW-m6~JM(;b;E0~;3%XX1mVfBXa<$QDa9du3V% delta 185 zcmV;q07n1+0s8@v6a+s%KR=NeI)4EUgD?nGKI#*A0#EBxdag(Gk_?^;FQ(`iU4%%r)B+7$w=iH82Q!3)*X4Hu? njZcYXd!0%@Z7MeyRhp$abr!YKVc@AHAT*x-@e?=zvUf&fMvquW diff --git a/mods/default/schematics/jungle_tree_from_sapling.mts b/mods/default/schematics/jungle_tree_from_sapling.mts index babaa45f7a11de1fc017b341cea0751974ce2ab4..f93f01419c5dc002519f603b5620dcaa58ecd819 100644 GIT binary patch delta 181 zcmV;m080P%0rvrr6a-&iUtf_JI)7~r!ypK?T+E~N2pr)ZeQOzRBGCH7ELpN=ilBTv zUs}o+u*r%epJ$f^U3x2+l3_|IQ_`+V){f~k_$*_0CcD%0kDtI3@{u|;Tu4`J delta 180 zcmV;l089V(0rmlq6a+s%KR=NeI)4ie!ypK?T+E|*1di~IzA3}j4|HZROP1`BB1(bh ziy?dghnT&a|Ld&>-9|f@Qpc2BrleoX^kPh6Ui9uBc2wt(GB~EJRcmY7YP(z0s*9)H zeVwoAe)#Wfz3!9x0Ss=I7ZNikae9E$#igbInnedC(KR3Q8HKk%sasmUhn?XuK0@LS5uir{OapaMclT+Yi5Q<|=0|4+Z9U=e# literal 0 HcmV?d00001 diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts index 3a3fa7ad0e7f7c3bbd3282856d1985734b62d702..6f27d83921216011779cb297d1a771de9fdd0f85 100644 GIT binary patch delta 123 zcmV->0EGXq0k8oNO;l4&00aO901p5Ke}6xb4nAY;Qd-O92`Wg= dP@p-3ef0m09zCqgE-96V#IAlU!UhRpH4Zn*He3Jz delta 122 zcmV-=0EPds0j~iLO;l4&00aO901f~Je}9n=K4W8GAQ>>iA+=@6a|<%bNHtjyU?Pdd z2xURcV}hGUx-7yixtnqF#N|()B_2i c(*O1NxL{M@CQcLO;l4&00aO901p5Ke}6xb4nSX^05HNKwPh)F6*9?4HCYf~B9p}k zWkF14f}2dbEW%ZkhaGLhiV{~1K)Q<0ug{MsmWvStvw3 Z1cDV4B38S3*H>g(%?;W99Q8UNud7*P*_ XV08q!)N%_BK%HHI-6eJZC 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 oI%2I^rHkG7UHiYQ^0NTEfZvX%Q literal 0 HcmV?d00001 diff --git a/mods/default/sounds/default_chest_open.ogg b/mods/default/sounds/default_chest_open.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c73c072c05d0b42e5e9ed50e3d7398dcc476fa16 GIT binary patch literal 10578 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 iVWAb+Qau#%`3!5TPhq zFxirQtt44ONh+nM`rqMszTfBn{rz6w-{*Db&i&kT?>YCJ^FHTu?s0c_D~JpF>ls9Z z8FPj=N~YCeGO!Te05T+DgcDD}PAy;#stidHUXorB$6eS+QHU4t+j?yyZ8n=yt) zHZTYdX0T?c*6^NW5(J4rkdr({IL*xz!=M!^p3kHm<&0YQ#%0ptS|wc)vFyJ)l;#<6 z2;zal75S;fGo~KhICn_}YCr*wa%|rX6kojMYaIWRFS}iQN^43zeY!Dd_-4CJ5U`B? zQQ2q&k<*c5Wn&~kcNH1XCVPV(AfR-!;EI5H8!FOF{as1gG2M4Ji>bQviZwlkf~qxr zcr)yvjY~x%uj9qQZrm*Wua19R4-`0yA+OXK5kokKeJrLlGXSvKPzwcx12rL&6ohFN zqO%J5tXKZ{ClyOEtzHddD{FHSc!C{mLtKYLf`>!G>@uSr?uFUii*^`^c3h2imW=tU zeG8jd<+OFxQ81`L4wo^7DcZHY=nbxjJ1VA}3p&Fw35q{;7bdmXwA9U`f|65r_Ew#D zXSGUawb1$!2nLpLo&rjC>HlbMb{Ve!chf)HrUdB&TR!ziKJ}M3CdxkzP~ls*a2o`C zs!vpD4bU_R)O;Fv05p@J!|gP)XP?cs{Otse+aX9Fi){5rwgYPrRr>?9Yyql zDL5AS?@z=!UVtL9xo#OA;c$&)=XJA$1GbWda3i4&Nnk;2;agO8Pxi_)oN)GZK^Y>a z|8bmkjzWD|X3n|?y}G5QfG;r}S*-5^P^nu@;MO&RXAOFbGPoo?Pd`pAuK?#iWWd|QteD$U= zm|fjp0kaV{6T`v(h#XFc?7~r}j;8YbJ8}vXsc-gC*F@T7yJYlC|D{j~GB5)HLtc1cptAASnov z15S<-i4RCN^wB#3$Ii%aD#Y;?wn#?Z5YZ6AZQd1>Y@ncbFBR7;wDOv$D1O*1G6}6i zMQwgkdeU@y9~`7T9>@}c!m(}G7Ri8a)AoYH-B|uyS{qJ*k=AF5QO%Ilz@SS-U8d;8 zeWvXtG)Y2yZi%Q%91CoM_`pxFuqRm@rjLLivJg=K6HOy_V`h?x9oT6k5s$k;x9Y~h zcSLnyd2=I0Fbt$sH|8las>@)S9@%4{2tlYvFz_=})I4Jhi6}s?{p6pgX%Y}U=kN zLXnb9@hG~<%vNMF%b0cE%nFu6(Hygg*-`DztSIlOuDn&@wE(CUH<{HcOs2}M>hd2< zm4&*S%m!9R_3fOBTMKndg3T%m4Svjuid)r-9BKn=f$hK0u=ipqrnB_cd_!47gU>>P ze^;G1vY0vFq}2K3c1QKnLc^Y#U|CC2@JpKGlr7N1`*diY!)kQ3_x^{hA02=}-#6TI zUt~SlcE?8=%&}LL4>|9nGTgJlNtvu1=B5(n z5p%vlsj~?P!oFbpBJb}-I*w}tLT)unFwCWGmH)ZtINSe+?$p=d;z}X@r`G^BU>t0S zb?6t$DszSJgF(Eqvj{5@rB+ms2yq@&VvXgM4LpW#Mba$r9a!(hx=r~RH5>w9HCs?3 zY=~!+AP9I>n=Sz4;y#0;WhJ6kre(E&6{AFgfXCJ$9DJ}tNU)n1H>diaPe*&%>HBPZ_UXbs_Y>$iz8gADm@hlpBb}H#L@c5fK@6n z5$tgAsxQs(0EBE}Lha00pqJLy0sC@}3` zI5-CQR(0V(Ct?T)px!Ht1RaCc#~~2$?@(Y4!wBLKXhZ=BQt|^8(QV5!fmc!rK+fcX z&U11m9>-TmJAz@OXsJXX4yaTXAOvjJYQrJW>=#i08eUo&@Qteci0JyO zi`QR8dgjLKKWg@WSMUFAEV=KIh(S zK7Q{pzpgPuc;gBTgJd8mbu(($u527t_}Z3ak(8~eqG@6@0AC1t4GZ4_h0AY>jg57q z7B^3E%O5@yRnqd72fa?_ba42_RfT7LynaRI8O3gpIag$kmOkji*rj8-;^=h z8cXj#F8t=v(9ry%tfZ}7BSqM%Dq65*+?GF`{Nq#lwDzkTLdddcXB@uiCNCr{n#@JnjV=-38f50whpyPpUDp7T6*trXswzm z(^lX9{?lX9FXU)Ce>07zVfTx0|5#L%v>L&Nopb` z_&14V5EUW>8@kCpYDB%H2t!Ej4vNCor4E;hAC`$ z5?#xGRAGNw>X*XHzcs#{)JR3-==fj5NnPE{Quv*H`{tp=l5=rOKjhZrwi>3M`ewmP zdl0L(h|Iw|w#bdWp!=3mn%-JkaE}*6_zcTUDr}1uaMTzc!k@!E><&3nNRfw5T}2x5 zoS3=?l`dS|UeWKo$YoiZLuM|z>zLzs{x z9dIzHRLt8!yBI}$zdTz0Yk(9*?V`3cu8v%g-xL^aAL?uOiHDu@QQ`17@|nlsoB2Ee zUMcr}BwTj3M_kW9hgr|6`-)s-X)Wi9c^j6jDk)6{#+ZzK$Z=#ji(kEcU!i}n<9q_5 zHAMW-+()MgpM8~b_q8)k<%aQkhKa5Zj$Fy|q`oOP>B_p&EHeK+)73bu+%&;7a__)2 zTC^25RcUhL2Xf@Ga;9^BQU3-h)$pI5+^Z0f&u z_tWX5fX7FhuW@VdtdO*2d9U~-ocGH4Qs$5Sy?g3M-{hZ;w}R&0lk@m{o_)^uNnROV zb*pK*w-}_h{HiMaNK7wk?CMnGO`&tL@RPbz@xSg=dT~AIo)3Fi!c_UfHt2lJ(*V2E zm0;8PGiT3hpA@#8EhRE_X4f6xu*ySM=n=clkG{XJove>lZ&zT($O7C@^`CGJ%B6w z_0`wjnIw1JF84iGScY(kBG5VXAYqlEr zHh)Uduljt$;%l$TXsL{1k9+s6tZvu{B+-T}J^z`@3_4da{3+zrjbj~#icX7ZKOQid zeeq>8C;Top)%Cj{aQ(DqNjW7Z)jW_d-M+#+*O2PymfKR*I12BsipK7F9(%HNhmP;g zW82Njw=}MDm3t!$CyW9I?+D&4(^=kcx1en>e8*W7nueR z!;0)e&K|fbowmI6qpxJ~V|%cwWtMsRp3h4`scL~sV+8l}ZJ%?$8QGAJW~M6Z{o2V* z&6KEN+`Ol>c<3$M{@%{AW?7zNp@QX@!#;?veelERx+lMG8;ar^JMt^}?_4tMk1gKi zzxGn_*4oVz3Wz^Rrw#O7mEpU}D+9>#R%*XA_RANg^+ly16lOnskg|P0UZnkDRThUH za1Q;J&WE~M$XbyKHw#{w`SeWu{^s+MDp}cdp%0e}@;+<&Q77K(kX3hQ@*AJrC9b_T zEdvv>C;XIg;6k;OzvFsM)n;jDiE&^3F7o-$ug_{~k4+z9j;JtlZ(I4Fx>K*E6ga`` z@D&^5dkN<`yc^s*tB+MCFpVClcMA_Bz!FKOSv5)mZdaT}Py-sQ&SDlJ{TX^~sdhYyDzkOBDsP*u|SJwyOrV7_Kn+hBm(IH_0$L-cGPLUU zpZ?wIe9dUCtf}#KWY|rm{lO%ag6}~hJC)aN%d4ZeEh-{whu=M7Jy{3~aPU>gidr*q zF5N$MODIi>S2cuw(5htSZT0Q4RL>uEk=jq&at%H==^ht&1Irsh^1$`Od8xC?Zgad} zx!DxyjGyu1;u>LVAI^SwRqJwmsl3_uM+Dy~os}EkwS6^D3u@6H>M<0WDwrd0B8>8D zt|n^!-j^^Ga>SRek+>@hS1Yx{(!YS-&46X+IymZ#_8%v$oj|<3bXi-aM%V55!ag&i zQ`Rm+o8p&!L=9*7O4QhwU~@jt<$vjTBm5w%OONrlH)>JKt4m3_TQ46%=+_?%2LHnGs}f?v+dk3zdnih zJ=^{L%lymwLf30e6Q52S+GaeeK2SV@*$zFZyy`B@(Bz{u*1P`rAfWFY&I~zP&3b>~ z;QP|@%2knWe@%qs-oaP9l%AK53i<1P@@qRryzVSY54@ZQ^Lo3*zgH{Ki|glrC*QjS zg1tpiXLsk;&drlww42&Ky!M(u9#73pVXBmG7LhqA6E&?%`M!03?gV|(FMmh3I^0*C z)e`hw3auCOwJ413*}{M2?Yxhz)*GTD-HeTtlb;;>eQ@aD0rA2B)obaY`eZAx0`4YVEja1QWeGb$8yo# z_=}-Wbi*^MX0B^MD+A8En+=|IY!6JfF26V*s?f3K+-Q1MnmN%LIp2OHP6#HeK_N#R z2{X8LLzeA+TT*zfx8m@6(T>KI;8!aVMzw)x#C z{>KSB(FFmvYvSCtJj!&!2`W9nyb~K)N>z9Dv#m}I;2OXP#_CI@px_60z*|sNk(GuN zrAVh4we}bKBE$#8JVl9v6fJ_2{K7kS<2?P(KP{ZNtudA8KE=gRmxMNDDE+}tYOmj! z9tR_}R}-ttGBU~f_a`1coMD?fV;%E4Q+EIe}A)9UYHvwZ`!Fr}mZ!SC>ln2#^W9(1W~(`MK@5F1}`1 z+Nsm?3UL!>TMg06?+hxI<%Z>(&tH&Y4(4}Pof--9{B%~i_blb@TkZUeYXzz!5t_WM zYp*2}3H*6#PDq14e1D)B+C8N;l2y4k+;}$QVl7x%zZ#DwrtcNAmp}F9&*sNpeP6eEFd2KJbi%v-?tToy#1;t!v=RPep5Hvn_6T34)!x4;f4VS9@{IQOcxznh67Dsx;;j8|*-hDoKMZ&N=TgNqUp8c&Yf?$*;Y zT~hNt`B5TKIi1uPiafZFs&PsHeq^zizU> zOACQ@q4j7F&^}@Y4r1C6E#X6C*@*LLlS@AWsa*%!2ZMI5wr9%>Uv*>kEu$6QKEYWo zk;NV;Ko?))DLq|2aGKQD!Q;%9h&z?k?3I<31&!>bo#}Qv-N(Y-jhlEm+w@-C$t83z N@WW2e3-wod{vRheoE`uG literal 0 HcmV?d00001 diff --git a/mods/default/sounds/default_item_smoke.ogg b/mods/default/sounds/default_item_smoke.ogg index e1c84078650aa03625017c458ceacce324422deb..038a46e4f7ba09b151b9a45d9581564c8e836038 100644 GIT binary patch literal 6651 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 diff --git a/mods/default/sounds/default_tool_breaks.1.ogg b/mods/default/sounds/default_tool_breaks.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2a571ae28d42304ec086ff85779220a8de7fb907 GIT binary patch literal 6019 zcmai1c|6qJ_y0^}Ph<&A9yHS!QN}(+maJnR#y%-)$T}vK#KVw~BxIRNWyIK;tnrA% zAezV)*-CaPT5K`D&rHwr{Jy_Gey{I+-MOE0@44rF&pr3td(K$<`q}}zfWJ$9+g1>Z zoW45y93l<55FF;=M_>&=3`YnJ4{g(b=2h_BVU3TiX|qX={ShEW8$ zPJSWhj#`KL%AEJ}aA1SWn8~OpqtumA%IY%mAM;56RwN4=virBJoWUsv2%rZ5FoJ}F zF@+#b5|T2ok(`1WFank&4J?FXp(+-xU2sC0Y(c(3qO1I$J!v?AC2&puq9`dzpGTGi z*KtaZL+F51A{rd?V~q(J{L>hr&w*Tho`a+*Wi5fYX{~iA$q4Nv1dh$gkoFqX<;Inw z!O1XnQ=2$0^cFs?UbFiNrvGYd)!b>;QRlmu36raY;n+r zLT~+iin$V%IV8E*=K!h^Bb=n%8uO2lVBdTm{xxC}aK%S(pw|hs!Rd<=&_UsoiCM zsk!DfkTQLC37com8Y8fv*v&%QJd`ZL>J~LV%gXC%11W3z{5V=p8Hek?|zxaeVuN|$0~H@i8$R9Y!`LIBk&bm~Z1E7mSheb6aj89kdDSLNUm zP*#n_ASoGGKDPa2K-(K|NqVK(vXDIzk&nq?dlMS>Y6jYBc=xH}?KJQ> zhd{@yK-U`L`#aw6*PqaJhluw<~ zN{5-H!~N2IFJ%?w-e;)t< z2y{LX?dpYE?t>3tm2h@S16ZR0JKTROmVIiLBA{V;Sr@h$N@6G#rJ3<6WhcqE!sf90 z+{ihGa%}$EK6D(pT@-DQM$a-MWwY)TCtwTSD^v%n6&l8{U4R)e&vuW5@ zs2M0W3H_LC$3V;9&3J`AeE0S~B!%n=a>*GCvuX0}w`TI7e>6kDpMkuZmk}U@0477A zuWzeaioz{LjI2fR10qHPnQE`q)NSo?mZFve_Bdy8%YjU|rK+W+D9%pA2q%WK%d*5} zdcRQ%9Ja@eiQ{m!-mX7EKOs)2S`Lfj1_mv0)kLs6mKiv9=U*t?kUh>-12<5kZX1rb z#d$k}$QQhaYH*H&L`zZpke%hQ7!H?(8y@h+Wf9%Oad=1k&=Ah?XVmau6n>C+R)U2* zG(f~%Ai56*PTV2loes0L!s9@#)InrWt3VLS@o$}R!#{`v#6Y}=(GUyS2$zWmWhXMd z**dehc0?k+CeSlG&~?8Rs58htn~5L0Lwqk0gkQVyS}pK>I3BNwcN_}DYbH1kMY-GK z+#S7#H65IPg7=U{oRBca4G`@v#Jdx{-Rp?%&O!LuziMur-+F~we6IS-INV(;YoG>M z5ybzpbaB09S+U{k5uLs&Vjqq;W{-Ej6X+@#gg0S>IztD6tadKP~JE+8VjaF zXV_Pcq+)Zf0|UtL0f2G>YF0*#4~$|NT;T1zosQ;~C1t40%8=5qvrtmH%OW|>1`|NZ z$Z$!fWu#*RP~u>$p9CZHnYhB%k3f7vDJOu100OC=&i8zCss3H5@JsjPsf8sAHHVz< zA(E(6YE9s!dr0tGUtaFY9;q)cS-j`R9#LF;4oXp}g~K{Q?3MH75)RTP4wV z@w1*nFHl9gjF%9$Lxu##QzR(^3x*^vC;;rTkmq2l{SbWfqeOQhywL%DKDl~ulmK?2k#F>QZevTTXP_iOYPCxM z1HCR|5kMQ13Kuev0Al(;^Ityma)Ae7ezwLV}?X63ICAZE89 z7-}?1Q$w(7;!Z4AV&#dkBVmdtRa5kgq6Vkz?q@htWLuSwvE+0ej!(8g&C3eqRnY1} zC+${Ftl6g{ak zZK#Vm%Hh`21_pZ`1EE+as2+q@OY1`dV*D%V06E{zenAGr1tTah2>~YS06DqbmmNLt zCg;Ac1H52h1d9Z)4ggw)F^P#Y$|`CaTF13d>KTAO@w>#t#IOlHu#Jgf|I^^~KFS^f zSpPIw6AyRt8!E`A#$?yXD;<&h;}02GSy{xfBZm+DA%{RJs~m+NL8-x%jvYO$tlZXA zRbFc4>gOtb>lWlg0L(9lR{3S?u^3sG$$3k}aP#?>6BBn_5Zhl$-EEq=Hk05L(!#Xo z4Z2r1rkA%nQ$(WDtR(a2;TqePDe#NOT>8|7yGRc1$?m!731S~E3(~f(Ww&-@p6*N5 z8vb+d+C*5&!zrm0NiT!Wx`?pJAVh&ya>L+XhcA?Gi(bnw(HIH2zwo4E545xS78i0xq4Xwojhp1jp`Qli_wCmj}Uq5bX+a%&p7 zxgH3*WbNa2?w41~8}vi$bKLH$iBv`BTzrsRR%teaD>xo<3#+7n3qW$6F5GXGWqB}N z?Z@)LKiwM^&WS0+MRzS(*h_}Qz4&h8ePS`-wXkUY*>_eHq{UiDdpgulOByD9=rm&N zSE()r!kw)?^*te;vx~E5Gx4h1uhVHx)TbwUG(&XuQJ}i``%0MemZl-vpKYHa^3Zob z^;>IE?=hL|(e*ubt+m&^YcWx^=9oCFF)bIv{si%E-z71Mlo8m$=f< zZ9lJ{>Z-;ipI2ItS5hQGKQ|mj@4mxl&-1gC_o_(Q2_=3Aib5|ZxerXwWOF+p@IQa( zk^$QmQs>qS?KeL-_O>#H9ryOnTq-Pwc-y6CKfx+TNnf3!rA9=n8t%vML}%_i<~ttN z81YC%HOZb++X zoNLso2*y0%ZXv~=^DX*Yykx-6>W1@8(fhhb(LN=c&xWY8xRsyVWAqX6y-VE=7nd@* z#dbsBS(*1RW6O!eqoZPS6NlYL6d%NuJoEvUETZaak4f|Bo!hyP5w2sUVXnJ>e?yf| z@BNDtbSCGgj!_Assf<0hR0b~HC;>i0P>&z*C*TFS=N zCsR1x@WAN}-7BW~YDKTFyIbpS{o(t^+nAfLDs~p8f|lNNB`mv))#097KfaVbFvmoY zW{c{&nfA4YDKmTU{bYn+IFoo`qI~$-K$b7PgXy?)y8lqq)kn(Xi@WXJw+Nr5e^Aup zKh}QIy+6F-V#6PFD~--z9ttA2n#PAk@s64Ed3`ASl^6lE2E^RBhV3;(-Ce2s^egnO z^wE!s)CBVv!I3fRIa=xkijnWZYpXd+?nErHdGd#zV%P1FD@)yX;$OE{48{B6KksOlQBB7ud5kke z?46s_cCKb?&cE5#>$Yi~mN>he1?Zden|!&|9`UQY<;{smx8*J!0_X0%@xD!$Aolp- zlWIS7DQOEX_pe`G9vvZ+XsqYT2|VycoJDIdGc~@__rxE-$>B zciqm7ca`meLOH>gP7p{&v7`sg>6hD&e5RVj>$9o-iOyjKT^tchU6&yicFmSP6F&!~ zW|$S4PtMoeSK;KHMDap&WdMlFLAYRO*FhWKT^xov_3>o zI)3!zUh~0*)$W#+&AXW`pAW?I!`z)*j->bgf$|U6K4H_hYj|m5XkheL<0;167neHv zm2dZ(XGJYDjvqNj|{P8;P z+M|Oj^GieNZ?2XshOcU$u7G&qn)SF>w#KeQpHvlfc9Fy*Avr`l(nfD^maLV=U7;f< zrUdNm&YphO*@V58e=s6>#k4q@x!u)CThn!!vp7+4)jK1)F(T`{{juQjlpo(XwH<*M zr6=_0+>>4Vhx!w)dyeA>->)eBng~TdY$D9KDcjt8F&_!cS)pOsAUAB2vodSDV)6_d?B`>Zeiyf$M}_rp$iB z&FqiwZSQ<4QV;G|jI76J6Cd67Zm|Ync22oecohdM-;6e|1{pRxhMKxdSG?&%xiqzE z{kk?Z*EOZSV$rwNxAfF%1&$krb2@zoW3{b}R?$B;Q)En?SyXAa(lavtYs`@l{L6jJ z@pb9-(PAQ_{$pA&;xRmTee}$yUW=>i1;n145#K9zb`DXsW|5Lpm-|!9Gxv>XOz1Ga zch?TNou~~S8jX%RnH05^xH@T)P@p#QUe-_|)m&jYuJPiUBzj{{lZdYQNTOLg&vD~EFyn{??DrL{Au z?GrygYd@Pf7e=in9%m?YoiNYQY;)GR3&`U3X&3m5-rO&jS}86nP-qm!Z9<8zUvfmFu&o^V|HPD>t09OP=smiuXXSuD4cp=&g|W zwnqGV4R2;J&OgP*Hfnik4*QQqM=A%u*?!IpeLPF}5}k8F{AYV`>pPJ$ljRiHOBwFt zIS-0{AnM;4O!hpS(9I%P5ytQOq!g+97o{0F?f#NjcHCRl!$cx0IUiyRwDV`FaeQia zxnk@$(&(bdm)sJNUD;z+>H62n*mx1{3XiOcU_bypq>Bl8O)wMXzn}8}lMN4s6~$k+ z-~~E%;H7anYL3&#q0mc0tnIIf#_wv2 z&#$3dq>P<6Zu>taK!?#4iz!Qa=*Y>9HYLh!|Mo|N=GnLCG%4C4Y1^BfMg=<>u`eIa zth6;D`b+EUt;lmVuO@7ZU6cI|wmAphE%I)IgeWfHbAyf3eAPTVuV1fvAy#{5gk`M zj>qN3xxg7jcW}h`g8D>lkjxBM7P$^cY1mj>JF^{yG zZZHXKi8bVl5Pw8avsg7_2(dK(%b(E4$E>p7U7) z09m?BM7D86_QQz97tv%PVK^cn5CDk5X{40&WmOaI^%@{YDjg^OtC}X+FrTx7Hl!Y~ zx6LPcA$Eb86{JNh?(+Wb@3%z1fqAEb>VxfI> zibe?tsnvKP-f9rWFa%NO&2q~x)>Jw|H?N^4>1|&N2CbZ-b5D!obRu}i2wyM&QN-U+P@pi z7o1^Ct{u?a^dPuEeqP2)iB6%iuJh*BDz1$3_GR&AY9+zKW`w?@G~U=@4YrsPTyALM zP*{P0L$ebQ6zBHi0Bx^G!fYL@N04m!0-BrZN+FQ<*PI-LtpNa?P1b&zYyVp}SbJ%B z^=QE=JSZVOsIQE4w;4%tM^*Wmj)tQ5{HDOV@BY9z$p-cR)W1sy4>$+t?0**mZDqoA z!IpRusQnqgNi3LiRJD^=>-q-LM&yM(f`| zBMlvmk{nGd-6xW5CieVh{;Q%%&zDFG0Jq|}p>bT$xH*|<9(9F>?E-)T3E@OW{NRtC zlZoR|kK?tEv-3*Idz13(O_~7qoCKgIkPu2lj%P%^XGET7^wNvChi{Vd@>2vma#m}L zR{pPg>DbemQ8OJQ35gnq~LSuLtiWdM1dXvo>3zxprHwt zJSKc*&S_s{ahlniR+2#PZLm(Iws9rs~(M>L)C2tl$k zG7$~(&LrBL>rBAvySt++9j#tFn*O5=>I`BZB%-I1-6xow(0ftcQjQaDX!K3A(TF4Z zW*BP3&%yv{VPrFQ(-5@_p2HIN8739vu)DrTsD-5;gN+ECi)H~VF;5;+2zJ?d+`cGD~H0?7vkh^FbIjotOSIK zV0L*DOf?%5iy-C9jzdK9W-|#cW?A>?{o=?nK!oRK(OdEJw#Fe|@@BJ`MhI6iVJJaS zi0~2+5eaQ$wCbU;(gj6sBMq>GDp_XT~&f8bttIS zV^EZax_BiM#tB-<0=EZ6IjBQhK~ch$lefqULk%o1XE%>pcGXlEI-F0AC&;VCt^@@6J@ zcu9+)L!|hkE}XCq4fPUma>qhE8;BrGp5Mx3)l<@HuJ2G$$>gIgj5ouqHMFt@KPp@R zML{c59f}%8CWF9q=>GYU3z5)$*bWCcC;&h#Oni|;iUN#c2_)d@jE{qna)u;GEOLaz zA{JRg;!IXjgLUB!*$D|IktGRn2nTUSFxGzuBlP{?oaP@uXc&$dKtO=Y(N?H5yAG?=)QNc=@{rQN{N+ZaH#TE&6Ha@{( z!J8ILEB?I2F4ux1rN1u~taOwLO;kEv{kmKWW*n7{D;+K%(NSXwt7>J@QLWf)ktY9zbG0+TJD&?z zfj6-#1e-_#)BEx?1fud9J)C`i@p@!1^q|3)dbTk2l{+u1%46(c3FLT z?~=tM3Mv*@LnyHoCJsHYeGW~B58qY4!MDgc1B1s8WUWJkS7L>y9$X*s=*e7ZV+=`tU;ED@7M-vEHSFS@A1!$QCR zNvGxD${`ADCJr?N@;+9p)l~>KJm8% z1_qu33Sb);`1eaAQ2u-fAbe>M2u0))+YC4hIk>nuI0S_Spn^hBC=UlGw-CP&Cl?1N zhp>nUl#7dt6Ur|F+5G(uUbq3#VOCsP-uiTmU zvS@&~pWdClZ?7k8uNa%gmGbZ~MfVD+NIT(|#JB5evlx2r?0)on|BUzQ!j!4c;}0Y> z@t4ziXNAV>U#HK@>Eb$hTlVCZ51)3!Xo;DGH~r{8dvpbOWGClG!6sXp&FFsg`z-yi zP@hL}{unZ0EBy3^^<7miy7zIHNyaM%muSn9f9{^D30wYCv8Tj);S_m419355uy0l7 z0g{Npj0ZB=W3~?gg99x`(yBiFmY4mrym`6I-_>`NwlD;(f&8sQkUJ(lp>}8po zERS>^l(^`a4Xn1C{{iZI$b*A^oHZrAy)W85T34E~IDuCEW5ygX*>jDG?3 zDg)0DCDXwMK}&YIJv%0aQ}1uBxR_yoH+fGU)b74Y4%2?$`l9-?A#763czoY*yxV2YZ^+)Pkk>dIEGZKc>$SZQoju9;dfjWlB)@F!debz; zTbqE7Q30H-WnWwnLJ2IQTR*0f*-MFzRRCUm-{FQ|A5FT=v?xsD&Q4a@Vx|T6*;8*; z)d{N~yF)jNoX{0HrBWo9^%3SjW&%+0GVz12dBTrs;%QK{+;*}3T;qSLO|{L7Thf-A z9cQ8-$9)&kx??8^&v_EtML(CXtF%t#dNC%~R(Kl~MYa@}Uewi6GJ7?6!p8ZI9M>l$tcx+|G$=ARqv%c2l zKr*IgV>2_xDFM@tX1>YeD95&~mN#_etoZ3I$Y_zU?bYAwEp1!NMJX`;Gt9zC46G%7 zzA6Qi@dUrE(rzm~s!i1w7Pdw9XGSc-<*_h(#JHl0;;`TiwjmGb@#@@aIsCI+TMMwN zf-)F5-rV6x=f4Rbw_e;*jD8Fi6$#HRyZ)nBBwy@(z1kQK-hHQ060j<*=jP!Z_Q>xv ztf8>$OxbVBdHX|$oxBTPkH{YZ+RXzgYd%^e(@<69)riE0#BdH>AKExFHm--)ODuP+ zTYL-qc!n{nVjI%&IFMEwimAXKe{fG8sRx=hKO}#b|GC3SeQM=_NOtk3_0qE`zp^$q zbxAhDyHUMMTkY4}1SI1YQCH%OEIq1s*M+80@J?ive83jMv$pZ8@9d+TIOxFPpR!T9 zW;J6KwnEBSY~!cVWW8kTeA!gnEV&cMH)n~Bsks6zolY+-ev>+cLPceN%91w25tg$2 zdz7&o^nX-*KESccdwWLe^I9Y9Y^G@T;ZII=kD|XmePE`c`sZMdxC=h+3}v!?zuEq9 zV53)3>zRiAPRTJ1#bDp7^^#N4dO^(+3l;Oju6~?ae$^OBZ2BX>W9jXW542SerHp;A zns#^Z3#<*j56-dx%HjDc8~1;5TV17{3CX>Mlzvm!goSBOI+gTfmLC;{fNn`g*!(0 zx68XXCzaz^3kXg-e@y&m-Rl>xZ;$RQt-SADoHsA+A5xm&-xw27DyX~N`!m4PDsxgV zOPjT>`a+h*r-PzHHT{?60ZF}H0ixcgD&Gv*xUSv*YO(Dn?c(%`0tW|@*`KaFbw?{5 zM*A0iD@|H2`}#98ro-yJx$JGZ!?QDs6^Y)o!{^YaIj5W;wXkf;O134L%oRk-)S*S1 zyZWGWo|(nSSX6#I*N$)WfZlHF^I`HXO?~ufWA`l%No+SNx!$C$2|IJASO?o*(BON| zvu!SG>dLa@BL~uX?SWP(iCF#FY1TVVti@tRB&^K4zB+*&eJb<2J2`ZHYfk3kM&4%) zZ1;>jCBwFMp3TS^>D5a;A9Fg#wN5-w-tJ7l!yF2@%5FBSzHadHdHrhipHf@N?Vhz^ zCDECe7s(=2H82ldOI}a-Zqg7L=8eSnx)p*KxTflq)}Cr3V_ZuUQ}K<~zLn%SbJy1A z;R+on^F3>#E=?tyz6L6QB#f`u%*C#3h+;8Is0Q07v$QPHKaT4PoAQnkQc|p5#fVm# z6}Ak(HZE^l7k8-mYo+GdWOap^EhIaVhlMTJux~i61nj9*d`#KIQy>*Ro+MPyu9{PWX+o``@2YbW*rpNBd1$r&D3KJ)TJM#F9 zm1P#(fXA`wvg_gllcxt~=mZ{G(asZ+260ulj={6xfK0%^wB2LuWJ=kJagN3s=OeP` zNIkjjo)Gm4sk)bR>}__5Lex!cx*S7OpqNQ+0exUHQkfEN_#!=_0l+OL)by2FZ>wZ3?-y$<<`U9rWQ~bH! zf_G%EOWv&d?ZIVo?06X>t5fObb7DjnXUnYc%T=rIPSjQ(wbk#)vbhhhF7ZdOJ4LIu zuTNljSPpRN_ZFf^qsqJZ0EM(IH=;lk3d_N4Gv$Mvvc1D`$8E=Lp~2qt3Af8?-0Z7( z_UX(zJaunQ5L0>X_*ai&qpY8Te@Ot^(XEA>w4DtBqqCW0I^4+Un zp7rMX3s{O`cbX>X+;NfrEhms9kLKpi_W5p zC-HEmW^cm_hi@$3*7fp8=FhzL8=0bGD0_35)#(+mJicy2R73onbIw}~_9p-Ru9@2x zk$75+w=3f#mDr^DBHW&Hwsu3$rou@w^84XT_PdPBL%Q2&Yf`oM04}F4g(`zlq$N+) zymzkgxOJ>|Q24=JBcFoznei7xW-c_Vj5#OTlX^-q=g|dLX3^fsbf%9v_4V3bg+7fr z;B@NR@@G|zjy!7CKiUc%Br!00FdhD@$&kl+TkO>0Wa?l!GtOlNx>qqRuw|EUW#u?C z^QpnG?}@;)Hy$uB`g5b$pLHPcib6{G$y^lm8DSj5&2Hfn~xOU<^%V9=0 zSk=m{`Xkz1dd@pby!E~mS|79Zb%!al?)n=)p)~jCZbPHfHFidP!Av1m`a{Ta&Xhu# zLWnVP`0^}GMeOr}b`h@Gx^SO_EUQ}X2}XC5;u0a&jPAy)u?6ER+`!@PTMttwnKl8L z0u~i(ftZ(FnD~xCucCL09=TDC7*FOe{!4W1iIAB?z<&VI4Q(QpIyHq@hnH~17^mkewu=; zP48l2>BV`qF#+B(5(RtG{g)##0^!Dte^f`@PDvIk+!9^v+~WC#7lC;=(vjRLpbZl5 zPyAT`H6~TACgN6(3YE^|Rca*K?qNCJ+4T_&9C~ap^l<(#go2HSuYsz{82nAc za4l#k;$=vE@s#12kcQZ&_xp=J4r>8RL;} zTDOZENA`__E~*Qs72P1$kyy2nkc=3`_~IEN3S1M6Wyj4cZe%ES)TQRM;@@UozUEr{ zOxsvv1z433*fIS~oBY z%d)q%N@103Gj7sLySI&PHpH@>ccz1 zoYiUu#wUi|kRdfSd;BuQ^>dCOpdVcKjr6vpl{9l#ZtmIJ+nrXMO--!vZHAj?kM_O&wTN@z0)Zp>`Hqn4~ZML;vH3=kU`R8( z4Rgd>5olF#r#H4YN_PE&!(*MZnpL8MhN3E8!`brf+5w}lMnprJ6->SBoe7VPvu8Ro zG!C6t>^>qAtCEIi%zKhOYK6N>N_va6`IVlGexAU2~uTLp^Vv;!*0;f-BpL1G! z8`RY!;U`PrN4vn__qW3R<676#vA6cx{Pc6qKKjqKq?HJlYg*|tOt1@dD@^wqNs|p! z&&cydMUMZJ;%hkYK-71cJaC(-UL_;jdN^pQWRQQ`??;2|9em8obOY`h7M$)(UlhrA zUE;^gCf1euj~w;w^&d2#LN~r)sh;je%VTTTjy40_D4VtYWcHd8m}9-l4=tw83RVU; zb01mkIY#=xa!fkpmmDTX=%aNRG0#l+vaQZcDJ9gN@ije&=p_x+oNu5 zCZ7XMwawy8WOiG`w;y?2j(MF@W`z9!@ogTxSIh5QtC%vnNYSBP7r_KtO8?FS7T`}5 zz0xfj%p93iP^mm;!#`YSKD&wDN{Uq#hf7I`R;RyrJ%{qOP^u7|6dUi8Lbg_!vi9-q z{DaMDy!G=npSkBmMm1&iqE^%So=&5W+METQjAxc}%jQN*)kdlWA}1?duIl7Ggi(q$ z_lXJ7Mq-)l_Md&mk@m08^v6+lhN!Z>6L>tNz?LhY^nqxlC^=oRbJBxq)gS-tQ=yS0 zAkWuewpewYyD%&NW5H8t2I05rA=FGa+o~I3yK6CvjceQH$46(k>l)t)Hu;A?D|DjC zSs}x%#Q5P_-MdF&xq4{3op|AT@2DVd1FO9Htk4VhObr^UVf$kHx4_=*IMEfG2BE6E z7Rp=Li}m65s4E2wO9hMcpBVz5ROI4>Gw4gbLDsV Y+?@l@U}n!y`)^;fZj|SuFY*Kb14D+35C8xG literal 0 HcmV?d00001 diff --git a/mods/default/sounds/default_tool_breaks.3.ogg b/mods/default/sounds/default_tool_breaks.3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a99c4b7e34ad54a62448577846e3b309b725c87f GIT binary patch literal 6875 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 literal 0 HcmV?d00001 diff --git a/mods/default/sounds/default_water_footstep.2.ogg b/mods/default/sounds/default_water_footstep.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8d79c1f4b21f1b45fe9b70e370efe29d1927bd14 GIT binary patch literal 29335 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

^%a5VKE_cnukzrqZRKcouE3oX3N@I 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 literal 0 HcmV?d00001 diff --git a/mods/default/sounds/default_water_footstep.4.ogg b/mods/default/sounds/default_water_footstep.4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6f1eab8245fdc475451e6eb98186bd6db141fbfd GIT binary patch literal 3974 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 I`T9}qKQy`}3;+NC literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_acacia_bush_sapling.png b/mods/default/textures/default_acacia_bush_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..940b3aacb8df878a5d49d274791cff1c396066f5 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWP0r8pbG3^J3&_hz@T$~{ zoUhk5?e`m?EMrNKUoeBivm0qZj+b|S`KgqI*Z6-}p`aHN@)Y%j=eb7!AHlYg&@6!Q>#(%P;+l3*6sasy4 z+DS*}N4f|8FZDNIvo0jfb9(D>y=A+*p1iBi*B@mH5D|Lk3EuH96P@K5oAswZMU*Di z5n5^V1o^x?6>~HjFq0&FeI=qq&_?5fC%kqp3(2x$LhsPYEWz29Ko}(nKpe-2_)&th zvXI656>ZxN>F$5tvskTAD#AqOAfgaN2_~5x5}cKVEKim^+}$DKao!D6*p!8&Sx(n= zgL?=B39LSx&@~NB)qn&RPy4?21Z(-WyH*-tdv&AgdXJ6`Ix?hLidLGYZb;JR1ltm}G`4DcJfIke(r Sq7MrI00006f+Gg1gQW30zFAY zK~y-)ZIdx*6JZ#JpWNNw3W9@ewTDS;QY5B?4%ZyHD7K4;Py#M>$slB~LxpzNvDst5 z!9_6T5R^=z(4|8gkRFksOQaOj(zFOF9ZE&;FNwo>*Gu&q@A%$(-{<`<)c)l303N=W zqkG%~AbD>TRac0vXIZvOqP^xw0Bb(O)=P)rgwWCA<4Ay$Qy7|bUknc@0Mx5p(Oz?8 z%`WqLf0IYiX@B{9cZ5*#F+IaFX>K+6TtnoGrUX!RSD;dGg!h4L!9>*+Dg{S8%P&cw zUm&q#uzjQXj{|^Y&J_th&lgRp4G$=&y29{)LTYN76t2Z(yCmY{$aF3$k6QZ}mPydr z_6J9*xDSlqM;k3~4x>kuA` z(A?;VAaKBSaGo?kbE6}!Tt|8WUVZWV84={6#b!El0$|KUBtT-vz_3hWvnGchyZmqLrwtKZ z&!Qx(s~olVvF0-z>~#Q0O-&PP-KJ7-#K|fCKjP6(=8*ZKDXYgNx5B{*XxH#=KzgKu zAOXLj;Aq|zrgLElP_xT!oO74wRSS?vE7IH3fWJB27{QF5gL<_qTDduC%tWLo;>{l^ W`u2$0lZa~o0000&XcWP3$~pn0RdDc-S;~`rLTfZ%K%G82Wf5eaJ};n4BQsk?D(XY_i3u<=T%O449&%cs6ley6r>mdK II;Vst06Lv3;{X5v literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_bush_stem.png b/mods/default/textures/default_bush_stem.png new file mode 100644 index 0000000000000000000000000000000000000000..18b615f72d9199891bac311a8e3302b9d64d8bd9 GIT binary patch literal 428 zcmV;d0aN~oP)PyFB&2tgp)BDSdi|2Y-gDt)L`Ng$ZSvC~CLMMc6F)VnLs%$=(l z_SkcgMp5AK#TR1mZ}>1%yO zetZ9-s%r{sn-tELj41%9oX2~|dc99HrWMfc0g-|6q3n!h!B!A zJu(T0*q;+|jk(KM#o69A*#-I0Fd7d4m_{M{{Q*-p;@D3{h6xK;WWK5B?*(dP@O1TaS?83{1OQEB B9=-qo literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_key.png b/mods/default/textures/default_key.png new file mode 100644 index 0000000000000000000000000000000000000000..783d3139efe0796e53f53a21edc25e63a50b531d GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) zj5kl})B`yR$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4)+#>Uq6a&uNd?1zVUZ~u4u_KipW z-rm3bPn944FN@3LG2HpGppr*F<7K9S&5qLPifZO_8|TJ8uxDmITwmz<^gj;|&;R72 z%aUm&K1nzBrt!Ba7U;+9E@@Uge7g7H>Fe`(8b99SiQo4xB>@N?JapU8>KZ9ovE!yB zOG}I4VFw3~86Pifi#4b>s;T%crpl89GzugOG_I+gxr-5KJkR-gd(v8F_T_Lh11+6& q()d3&2j}99G?0NZzNe;0GcaV|kE@kAAXx$o0R~T3KbLh*2~7Yk2A1{! literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_key_skeleton.png b/mods/default/textures/default_key_skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..2b3497d37fc91be0c835905eb75e68dceaecb864 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) zj5kl})B`yR$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4Kc?0OZvb{%2g00e$p8*g+*JXL%rc|_?Z`;ID69Uh4pB5C}po~eQb zi8mVS(`Niko6=Em#@brzw+Yva7i+@$EzGCKy?6U7_To;=9)64InhjBJE7dzVl$=(V zs@{IE!T}{MwLr1?^O0(opMw4 z@=NK>H+Ne}9Q^ID|G(2b{!BCJ9JBch5{plMR%DoZ%JNvo8sAeFPw^=+zh}Ot*7Bk7 zz=FH`j!B%Y*mGc~k1Jc1{R{mDYhCf|$wH6%`To7-^ILF0eCCR(#ZE?1AAljj;OXk; Jvd$@?2>_%1p#A^= literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_mese_post_light_side.png b/mods/default/textures/default_mese_post_light_side.png new file mode 100644 index 0000000000000000000000000000000000000000..c23b551a7cc0c6771679dbcfc0ff94f493ae859a GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}OMp*^E0FfGl=rhyEDX~wk29NC z=s2~+sjI7N;>3w_=FC~Sa^_HHI~YrX{DK)Ap4~_Tagw~Fdh=kWrprL`GEgz)he~n5THA`|WcZD8bP0l+XkK4xXID literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_mese_post_light_side_dark.png b/mods/default/textures/default_mese_post_light_side_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c4fc7ceac3c46b6186e313504f2ff17f3c40e62f GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}OMp*^E0DI(max{940TkDa@Wia zH7p1>>gwv6IC0{fIdfL7T)An}rb}09FJEc6e6{h))#gXf(jPu8d;Bcp@zbJ5PfH&^ z%YXd5@X7Q1hmRLMd0zbZdG*uhHBX;6K6z31_{qj+FWR5I=y~#D#?u$mp1z5*Qd|BKYiZ!@$<1yUk--OJW&I52V+T)UoeBivm0q3PLj8~3quF1tOt<8 zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifGRpHyvCKGC$_Nw+^K@|xk+|G@!d=M0L4@^y zr2OF%me0@peZTzFsm+&8r@e7J(z%!OvVg$tx)_04Yh8iE73Ty}gUbaxXN3yX%@7xG ulvyjV?QxaBrA;a&XcU;w@Z`l6i*$+GZN;;&{oxklM|d%x!jI3s4b*r>mdKI;Vst0QkEkJpcdz literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_mineral_tin.png b/mods/default/textures/default_mineral_tin.png new file mode 100644 index 0000000000000000000000000000000000000000..232d4b537c1d5e93736577096f23f8d558bb4387 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeX1=6QZow{)0!nuoQjvhaK z{J^mThxT8;ar4BXlLwC<6JPN=8mNM?B*-tA!Qt7BG$6;?)5S4_<9f0KQxk{UVumSU z2~3?Zzopr04g>;umAu6 literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_rainforest_litter.png b/mods/default/textures/default_rainforest_litter.png new file mode 100644 index 0000000000000000000000000000000000000000..d762deb46cdc5c5746128223b9fd0d26e50a11fd GIT binary patch literal 940 zcmWlY_jcL_6vi(CB-xS>7=u-8HX23(WAF%I47LFyS%8dXm*GL|q>k&Pb=#!7O`Fc7 z!%bUv4|ngl>0ar4gXTf{20c~Jx#RbJ=Y0R&dr_;+Q@x&E0HEYbv0-fc|BaiCDa7a{ z07TVPy_D>SOdq73Fv7r;3vzClc0dM884CyndZEvSOkiO6F_Etrko!giNLH6jj>SlA(^11;K#~7$OSM~0EvSH3l$#} z0+ym5E&Gvt5KVB%CVA-e=1LHigO+;0G#i0R$SjK13BfWc zAZiHYFeIW@EeH!Cs~onLBA603mm{bWHVP}TNIB9oCW00Ll{KeDlfn`e4p&*c&LUM7 zud!H_vsMj2elIYzc6ygouK z$87mAa#g~cF{+-RIx&1DPB-IJGfubS^m2l3C+w|JyFBS!P1-t1M>FNxND^yFM{A5+ z8Mm*e9P26PM#`zCo$U$N+Bnmh=sz)L+ZuQ7jMK*_`?u4slNt9`c3?B>-OTz@wID($OAXNf60hMZ|b|jF5L6n zwjGhkLk_SFL5awR{-E+b_o!@!p*ZD_a_f_qVhrYe_{CfP$ z4{mvuVPMmle(TB~kDa-At~Y)7hGE=pvM60^`tazt7aLvM*x}XH_VsgT{@ypf5ad#= JcxASG;Xk&n%v%5e literal 0 HcmV?d00001 diff --git a/mods/default/textures/default_rainforest_litter_side.png b/mods/default/textures/default_rainforest_litter_side.png new file mode 100644 index 0000000000000000000000000000000000000000..7ccb11de3dd24a3894a2b1aac37eec9cec190204 GIT binary patch literal 497 zcmV41u{;IB??&%q492U(4Ljxo8olEc{_Cf~48!<2ujl6(`HC8Y(P!Pcd*VQ@n z^r^ZICML?}CO+`O2cLTUaFL?#sYBq4^5_7|0ZMJTHLDoAmfMRZ$EGGTiU=Iqnr}L> zOcwLe?YSQmCPgNb3>7>XDG4K@S~88Qe_Y~C!Qdh>CAz4H0>dz3?)gM+45AGuo#UuT zDMF@2i8oj)9G%06a2O(EO8A&qSi>p@W5p1#Sgo;f3|1qem1d;T1aK~p&nk52h~8r}Ltd1)F)RMSM3Wo(;{OoVD~F)~eU+bTbL_C1uMgKGxek0Vl8&1x#-I&yKvMzo>rMttA0 zoKFeIZRqMf(e=Fk%+r%q#YCc>&kB}Rf%vB9#oO)XYTp5Hbdj>EP^KUw@bVK+RJl;m zRzw(^w&%JHJb$;_^e$jT064$+8rJ|1?i4hA&9e{v=IqgO1DwBlf4%0n`sjJ{oi)I2 n-ve;UpHBaZ8~&U2fB(!c=U>}SPA;3(00000NkvXXu0mjfm*(TO literal 0 HcmV?d00001 diff --git a/mods/default/tools.lua b/mods/default/tools.lua index d4dd9739..45c779f1 100644 --- a/mods/default/tools.lua +++ b/mods/default/tools.lua @@ -33,7 +33,9 @@ minetest.register_tool("default:pick_wood", { damage_groups = {fleshy=2}, }, groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:pick_stone", { description = "Stone Pickaxe", inventory_image = "default_tool_stonepick.png", @@ -45,7 +47,9 @@ minetest.register_tool("default:pick_stone", { }, damage_groups = {fleshy=3}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:pick_steel", { description = "Steel Pickaxe", inventory_image = "default_tool_steelpick.png", @@ -57,7 +61,9 @@ minetest.register_tool("default:pick_steel", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:pick_bronze", { description = "Bronze Pickaxe", inventory_image = "default_tool_bronzepick.png", @@ -69,7 +75,9 @@ minetest.register_tool("default:pick_bronze", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:pick_mese", { description = "Mese Pickaxe", inventory_image = "default_tool_mesepick.png", @@ -81,7 +89,9 @@ minetest.register_tool("default:pick_mese", { }, damage_groups = {fleshy=5}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:pick_diamond", { description = "Diamond Pickaxe", inventory_image = "default_tool_diamondpick.png", @@ -93,6 +103,7 @@ minetest.register_tool("default:pick_diamond", { }, damage_groups = {fleshy=5}, }, + sound = {breaks = "default_tool_breaks"}, }) -- @@ -112,7 +123,9 @@ minetest.register_tool("default:shovel_wood", { damage_groups = {fleshy=2}, }, groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:shovel_stone", { description = "Stone Shovel", inventory_image = "default_tool_stoneshovel.png", @@ -125,7 +138,9 @@ minetest.register_tool("default:shovel_stone", { }, damage_groups = {fleshy=2}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:shovel_steel", { description = "Steel Shovel", inventory_image = "default_tool_steelshovel.png", @@ -138,7 +153,9 @@ minetest.register_tool("default:shovel_steel", { }, damage_groups = {fleshy=3}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:shovel_bronze", { description = "Bronze Shovel", inventory_image = "default_tool_bronzeshovel.png", @@ -151,7 +168,9 @@ minetest.register_tool("default:shovel_bronze", { }, damage_groups = {fleshy=3}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:shovel_mese", { description = "Mese Shovel", inventory_image = "default_tool_meseshovel.png", @@ -164,7 +183,9 @@ minetest.register_tool("default:shovel_mese", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:shovel_diamond", { description = "Diamond Shovel", inventory_image = "default_tool_diamondshovel.png", @@ -177,6 +198,7 @@ minetest.register_tool("default:shovel_diamond", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, }) -- @@ -195,7 +217,9 @@ minetest.register_tool("default:axe_wood", { damage_groups = {fleshy=2}, }, groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:axe_stone", { description = "Stone Axe", inventory_image = "default_tool_stoneaxe.png", @@ -207,7 +231,9 @@ minetest.register_tool("default:axe_stone", { }, damage_groups = {fleshy=3}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:axe_steel", { description = "Steel Axe", inventory_image = "default_tool_steelaxe.png", @@ -219,7 +245,9 @@ minetest.register_tool("default:axe_steel", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:axe_bronze", { description = "Bronze Axe", inventory_image = "default_tool_bronzeaxe.png", @@ -231,7 +259,9 @@ minetest.register_tool("default:axe_bronze", { }, damage_groups = {fleshy=4}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:axe_mese", { description = "Mese Axe", inventory_image = "default_tool_meseaxe.png", @@ -243,7 +273,9 @@ minetest.register_tool("default:axe_mese", { }, damage_groups = {fleshy=6}, }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:axe_diamond", { description = "Diamond Axe", inventory_image = "default_tool_diamondaxe.png", @@ -255,6 +287,7 @@ minetest.register_tool("default:axe_diamond", { }, damage_groups = {fleshy=7}, }, + sound = {breaks = "default_tool_breaks"}, }) -- @@ -273,7 +306,9 @@ minetest.register_tool("default:sword_wood", { damage_groups = {fleshy=2}, }, groups = {flammable = 2}, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:sword_stone", { description = "Stone Sword", inventory_image = "default_tool_stonesword.png", @@ -284,8 +319,10 @@ minetest.register_tool("default:sword_stone", { snappy={times={[2]=1.4, [3]=0.40}, uses=20, maxlevel=1}, }, damage_groups = {fleshy=4}, - } + }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:sword_steel", { description = "Steel Sword", inventory_image = "default_tool_steelsword.png", @@ -296,8 +333,10 @@ minetest.register_tool("default:sword_steel", { snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=30, maxlevel=2}, }, damage_groups = {fleshy=6}, - } + }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:sword_bronze", { description = "Bronze Sword", inventory_image = "default_tool_bronzesword.png", @@ -308,8 +347,10 @@ minetest.register_tool("default:sword_bronze", { snappy={times={[1]=2.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2}, }, damage_groups = {fleshy=6}, - } + }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:sword_mese", { description = "Mese Sword", inventory_image = "default_tool_mesesword.png", @@ -320,8 +361,10 @@ minetest.register_tool("default:sword_mese", { snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3}, }, damage_groups = {fleshy=7}, - } + }, + sound = {breaks = "default_tool_breaks"}, }) + minetest.register_tool("default:sword_diamond", { description = "Diamond Sword", inventory_image = "default_tool_diamondsword.png", @@ -332,5 +375,45 @@ minetest.register_tool("default:sword_diamond", { snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=40, maxlevel=3}, }, damage_groups = {fleshy=8}, - } + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:key", { + description = "Key", + inventory_image = "default_key.png", + groups = {key = 1, not_in_creative_inventory = 1}, + stack_max = 1, + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer and placer:get_player_control().sneak) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + node = minetest.get_node(pos) + + if not node or node.name == "ignore" then + return itemstack + end + + local ndef = minetest.registered_nodes[node.name] + if not ndef then + return itemstack + end + + local on_key_use = ndef.on_key_use + if on_key_use then + on_key_use(pos, placer) + end + + return nil + end }) diff --git a/mods/default/torch.lua b/mods/default/torch.lua new file mode 100644 index 00000000..3c3ae965 --- /dev/null +++ b/mods/default/torch.lua @@ -0,0 +1,146 @@ + +--[[ + +Torch mod - formerly mod "Torches" +====================== + +(c) Copyright BlockMen (2013-2015) +(C) Copyright sofar (2016) + +This mod changes the default torch drawtype from "torchlike" to "mesh", +giving the torch a three dimensional appearance. The mesh contains the +proper pixel mapping to make the animation appear as a particle above +the torch, while in fact the animation is just the texture of the mesh. + + +License: +~~~~~~~~ +(c) Copyright BlockMen (2013-2015) + +Textures and Meshes/Models: +CC-BY 3.0 BlockMen +Note that the models were entirely done from scratch by sofar. + +Code: +Licensed under the GNU LGPL version 2.1 or higher. +You can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License +as published by the Free Software Foundation; + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt + +--]] + +minetest.register_node("default:torch", { + description = "Torch", + drawtype = "mesh", + mesh = "torch_floor.obj", + inventory_image = "default_torch_on_floor.png", + wield_image = "default_torch_on_floor.png", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + liquids_pointable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + ((not placer) or (placer and not placer:get_player_control().sneak)) then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack + end + + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) + local fakestack = itemstack + if wdir == 0 then + fakestack:set_name("default:torch_ceiling") + elseif wdir == 1 then + fakestack:set_name("default:torch") + else + fakestack:set_name("default:torch_wall") + end + + itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) + itemstack:set_name("default:torch") + + return itemstack + end +}) + +minetest.register_node("default:torch_wall", { + drawtype = "mesh", + mesh = "torch_wall.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:torch_ceiling", { + drawtype = "mesh", + mesh = "torch_ceiling.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_lbm({ + name = "default:3dtorch", + nodenames = {"default:torch", "torches:floor", "torches:wall"}, + action = function(pos, node) + if node.param2 == 0 then + minetest.set_node(pos, {name = "default:torch_ceiling", + param2 = node.param2}) + elseif node.param2 == 1 then + minetest.set_node(pos, {name = "default:torch", + param2 = node.param2}) + else + minetest.set_node(pos, {name = "default:torch_wall", + param2 = node.param2}) + end + end +}) diff --git a/mods/default/trees-416.zip b/mods/default/trees-416.zip new file mode 100644 index 0000000000000000000000000000000000000000..f82a2c0e6e17dc2eadf7d7a15022abb649a6e49c GIT binary patch literal 3299 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 literal 0 HcmV?d00001 diff --git a/mods/default/trees.lua b/mods/default/trees.lua index 3bc66887..81c9831e 100644 --- a/mods/default/trees.lua +++ b/mods/default/trees.lua @@ -17,7 +17,7 @@ function default.can_grow(pos) return false end local light_level = minetest.get_node_light(pos) - if not light_level or light_level < 10 then + if not light_level or light_level < 13 then return false end return true @@ -27,8 +27,7 @@ end -- 'is snow nearby' function local function is_snow_nearby(pos) - return minetest.find_node_near(pos, 1, - {"default:snow", "default:snowblock", "default:dirt_with_snow"}) + return minetest.find_node_near(pos, 1, {"group:snowy"}) end @@ -37,7 +36,7 @@ end function default.grow_sapling(pos) if not default.can_grow(pos) then -- try a bit later again - minetest.get_node_timer(pos):start(math.random(2, 6)) + minetest.get_node_timer(pos):start(math.random(240, 600)) return end @@ -78,6 +77,14 @@ function default.grow_sapling(pos) minetest.log("action", "An aspen sapling grows into a tree at ".. minetest.pos_to_string(pos)) default.grow_new_aspen_tree(pos) + elseif node.name == "default:bush_sapling" then + minetest.log("action", "A bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_bush(pos) + elseif node.name == "default:acacia_bush_sapling" then + minetest.log("action", "An acacia bush sapling grows into a bush at ".. + minetest.pos_to_string(pos)) + default.grow_acacia_bush(pos) end end @@ -373,7 +380,7 @@ function default.grow_new_apple_tree(pos) local path = minetest.get_modpath("default") .. "/schematics/apple_tree_from_sapling.mts" minetest.place_schematic({x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}, - path, "0", nil, false) + path, "random", nil, false) end @@ -426,7 +433,30 @@ function default.grow_new_aspen_tree(pos) path, "0", nil, false) end ---[[ + +-- Bushes do not need 'from sapling' schematic variants because +-- only the stem node is force-placed in the schematic. + +-- Bush + +function default.grow_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + +-- Acacia bush + +function default.grow_acacia_bush(pos) + local path = minetest.get_modpath("default") .. + "/schematics/acacia_bush.mts" + minetest.place_schematic({x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}, + path, "0", nil, false) +end + + -- -- Sapling 'on place' function to check protection of node and resulting tree volume -- @@ -458,21 +488,48 @@ function default.sapling_on_place(itemstack, placer, pointed_thing, return itemstack end -- Check tree volume for protection - if not default.intersects_protection( + if default.intersects_protection( vector.add(pos, minp_relative), vector.add(pos, maxp_relative), player_name, interval) then - minetest.set_node(pos, {name = sapling_name}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - else minetest.record_protection_violation(pos, player_name) -- Print extra information to explain minetest.chat_send_player(player_name, "Tree will intersect protection") + return itemstack + end + + minetest.log("action", player_name .. " places node " + .. sapling_name .. " at " .. minetest.pos_to_string(pos)) + + local take_item = not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) + local newnode = {name = sapling_name} + local ndef = minetest.registered_nodes[sapling_name] + minetest.set_node(pos, newnode) + + -- Run callback + if ndef and ndef.after_place_node then + -- Deepcopy place_to and pointed_thing because callback can modify it + if ndef.after_place_node(table.copy(pos), placer, + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + -- Run script hook + for _, callback in ipairs(minetest.registered_on_placenodes) do + -- Deepcopy pos, node and pointed_thing because callback can modify them + if callback(table.copy(pos), table.copy(newnode), + placer, table.copy(node or {}), + itemstack, table.copy(pointed_thing)) then + take_item = false + end + end + + if take_item then + itemstack:take_item() end return itemstack end -]] \ No newline at end of file diff --git a/mods/doors/init.lua b/mods/doors/init.lua index a80b6786..13347a37 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -6,6 +6,15 @@ local _doors = {} _doors.registered_doors = {} _doors.registered_trapdoors = {} +local function replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("doors_owner") + if owner and owner ~= "" then + meta:set_string("owner", owner) + meta:set_string("doors_owner", "") + end +end + -- returns an object to a door object or nil function doors.get(pos) local node_name = minetest.get_node(pos).name @@ -82,7 +91,7 @@ minetest.register_node("doors:hidden", { on_blast = function() end, tiles = {"doors_blank.png"}, -- 1px transparent block inside door hinge near node top. - nodebox = { + node_box = { type = "fixed", fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, }, @@ -139,13 +148,10 @@ function _doors.door_toggle(pos, node, clicker) state = tonumber(state) end - if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then - local owner = meta:get_string("doors_owner") - if owner ~= "" then - if clicker:get_player_name() ~= owner then - return false - end - end + replace_old_owner_information(pos) + + if clicker and not default.can_interact_with_node(clicker, pos) then + return false end -- until Lua-5.2 we have no bitwise operators :( @@ -196,11 +202,13 @@ local function on_place_node(place_to, newnode, end local function can_dig_door(pos, digger) - local digger_name = digger and digger:get_player_name() - if digger_name and minetest.get_player_privs(digger_name).protection_bypass then + replace_old_owner_information(pos) + if default.can_interact_with_node(digger, pos) then return true + else + minetest.record_protection_violation(pos, digger:get_player_name()) + return false end - return minetest.get_meta(pos):get_string("doors_owner") == digger_name end function doors.register(name, def) @@ -246,6 +254,7 @@ function doors.register(name, def) minetest.register_craftitem(":" .. name, { description = def.description, inventory_image = def.inventory_image, + groups = table.copy(def.groups), on_place = function(itemstack, placer, pointed_thing) local pos @@ -256,7 +265,8 @@ function doors.register(name, def) local node = minetest.get_node(pointed_thing.under) local pdef = minetest.registered_nodes[node.name] - if pdef and pdef.on_rightclick then + if pdef and pdef.on_rightclick and + not placer:get_player_control().sneak then return pdef.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) end @@ -314,14 +324,16 @@ function doors.register(name, def) meta:set_int("state", state) if def.protected then - meta:set_string("doors_owner", pn) + meta:set_string("owner", pn) meta:set_string("infotext", "Owned by " .. pn) end - if not minetest.setting_getbool("creative_mode") then + if not (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) then itemstack:take_item() end + minetest.sound_play(def.sounds.place, {pos = pos}) + on_place_node(pos, minetest.get_node(pos), placer, node, itemstack, pointed_thing) @@ -364,13 +376,40 @@ function doors.register(name, def) end def.after_dig_node = function(pos, node, meta, digger) minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) - nodeupdate({x = pos.x, y = pos.y + 1, z = pos.z}) + minetest.check_for_falling({x = pos.x, y = pos.y + 1, z = pos.z}) + end + def.on_rotate = function(pos, node, user, mode, new_param2) + return false end - def.on_rotate = screwdriver and screwdriver.rotate_simple or false if def.protected then def.can_dig = can_dig_door def.on_blast = function() end + def.on_key_use = function(pos, player) + local door = doors.get(pos) + door:toggle(player) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pname = player:get_player_name() + + -- verify placer is owner of lockable door + if owner ~= pname then + minetest.record_protection_violation(pos, pname) + minetest.chat_send_player(pname, "You do not own this locked door.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked door", owner + end else def.on_blast = function(pos, intensity) minetest.remove_node(pos) @@ -422,7 +461,7 @@ doors.register("door_steel", { inventory_image = "doors_item_steel.png", protected = true, groups = {cracky = 1, level = 2}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), sound_open = "doors_steel_door_open", sound_close = "doors_steel_door_close", recipe = { @@ -490,14 +529,11 @@ end function _doors.trapdoor_toggle(pos, node, clicker) node = node or minetest.get_node(pos) - if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then - local meta = minetest.get_meta(pos) - local owner = meta:get_string("doors_owner") - if owner ~= "" then - if clicker:get_player_name() ~= owner then - return false - end - end + + replace_old_owner_information(pos) + + if clicker and not default.can_interact_with_node(clicker, pos) then + return false end local def = minetest.registered_nodes[node.name] @@ -519,7 +555,7 @@ function doors.register_trapdoor(name, def) if not name:find(":") then name = "doors:" .. name end - + local name_closed = name local name_opened = name.."_open" @@ -539,13 +575,38 @@ function doors.register_trapdoor(name, def) def.after_place_node = function(pos, placer, itemstack, pointed_thing) local pn = placer:get_player_name() local meta = minetest.get_meta(pos) - meta:set_string("doors_owner", pn) + meta:set_string("owner", pn) meta:set_string("infotext", "Owned by "..pn) - return minetest.setting_getbool("creative_mode") + return (creative and creative.is_enabled_for and creative.is_enabled_for(pn)) end def.on_blast = function() end + def.on_key_use = function(pos, player) + local door = doors.get(pos) + door:toggle(player) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + replace_old_owner_information(pos) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pname = player:get_player_name() + + -- verify placer is owner of lockable door + if owner ~= pname then + minetest.record_protection_violation(pos, pname) + minetest.chat_send_player(pname, "You do not own this trapdoor.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked trapdoor", owner + end else def.on_blast = function(pos, intensity) minetest.remove_node(pos) @@ -621,7 +682,7 @@ doors.register_trapdoor("doors:trapdoor_steel", { tile_front = "doors_trapdoor_steel.png", tile_side = "doors_trapdoor_steel_side.png", protected = true, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_metal_defaults(), sound_open = "doors_steel_door_open", sound_close = "doors_steel_door_close", groups = {cracky = 1, level = 2, door = 1}, @@ -696,7 +757,7 @@ function doors.register_fencegate(name, def) fence_open.collision_box = { type = "fixed", fixed = {{-1/2, -1/2, -1/4, -3/8, 1/2, 1/4}, - {-5/8, -3/8, -1/2, -3/8, 3/8, 0}}, + {-1/2, -3/8, -1/2, -3/8, 3/8, 0}}, } minetest.register_node(":" .. name .. "_closed", fence_closed) @@ -726,7 +787,7 @@ doors.register_fencegate("doors:gate_acacia_wood", { }) doors.register_fencegate("doors:gate_junglewood", { - description = "Junglewood Fence Gate", + description = "Jungle Wood Fence Gate", texture = "default_junglewood.png", material = "default:junglewood", groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} @@ -745,3 +806,48 @@ doors.register_fencegate("doors:gate_aspen_wood", { material = "default:aspen_wood", groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} }) + + +----fuels---- + +minetest.register_craft({ + type = "fuel", + recipe = "doors:trapdoor", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:door_wood", + burntime = 14, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_wood_closed", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_acacia_wood_closed", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_junglewood_closed", + burntime = 9, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_pine_wood_closed", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_aspen_wood_closed", + burntime = 5, +}) diff --git a/mods/doors/textures/doors_door_glass.png b/mods/doors/textures/doors_door_glass.png index f597299bdfaa2389d40c5179069ccd5685b937f9..26c427b9fef32a34b2fd8daa7bff4117933d1924 100644 GIT binary patch delta 429 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 DKBSx> delta 2962 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 IM6N<$f)I_IfB*mh diff --git a/mods/dye/README.txt b/mods/dye/README.txt index b1035419..a2fbdd24 100644 --- a/mods/dye/README.txt +++ b/mods/dye/README.txt @@ -1,15 +1,13 @@ Minetest Game mod: dye ====================== - +See license.txt for license information. See init.lua for documentation. -License of source code and media files: ---------------------------------------- -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) +Authors of media (textures) +--------------------------- +Perttu Ahola (celeron55) (CC BY-SA 3.0) diff --git a/mods/dye/init.lua b/mods/dye/init.lua index d414d77c..80284576 100644 --- a/mods/dye/init.lua +++ b/mods/dye/init.lua @@ -74,36 +74,39 @@ minetest.register_craft({ }) -- Mix recipes --- Just mix everything to everything somehow sanely - -local mixbases = {"pink", "magenta", "red", "orange", "brown", "yellow", "green", "dark_green", "cyan", "blue", "violet", "black", "dark_grey", "grey", "white"} - -local mixes = { - -- pink, magenta, red, orange, brown, yellow, green, dark_green, cyan, blue, violet, black, dark_grey, grey, white - white = {"pink", "pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet","grey", "grey", "grey","white"}, - grey = {"pink", "pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet","dark_grey","grey", "grey"}, - dark_grey = {"brown", "brown", "brown", "brown", "brown", "brown", "dark_green","dark_green","blue", "blue", "violet","black", "dark_grey"}, - black = {"black", "black", "black", "black", "black", "black", "black", "black", "black","black", "black", "black"}, - violet = {"magenta","magenta","magenta","red", "brown", "red", "cyan", "brown", "blue", "violet","violet"}, - blue = {"violet", "violet", "magenta","brown", "brown", "dark_green","cyan", "cyan", "cyan", "blue"}, - cyan = {"brown", "blue", "brown", "dark_green","dark_grey", "green", "cyan", "dark_green","cyan"}, - dark_green = {"brown", "brown", "brown", "brown", "brown", "green", "green", "dark_green"}, - green = {"yellow", "brown", "yellow", "yellow", "dark_green","green", "green"}, - yellow = {"orange", "red", "orange", "yellow", "orange", "yellow"}, - brown = {"brown", "brown", "brown", "orange", "brown"}, - orange = {"orange", "red", "orange", "orange"}, - red = {"pink", "magenta","red"}, - magenta = {"magenta","magenta"}, - pink = {"pink"}, +local dye_recipes = { + -- src1, src2, dst + -- RYB mixes + {"red", "blue", "violet"}, -- "purple" + {"yellow", "red", "orange"}, + {"yellow", "blue", "green"}, + -- RYB complementary mixes + {"yellow", "violet", "dark_grey"}, + {"blue", "orange", "dark_grey"}, + -- CMY mixes - approximation + {"cyan", "yellow", "green"}, + {"cyan", "magenta", "blue"}, + {"yellow", "magenta", "red"}, + -- other mixes that result in a color we have + {"red", "green", "brown"}, + {"magenta", "blue", "violet"}, + {"green", "blue", "cyan"}, + {"pink", "violet", "magenta"}, + -- mixes with black + {"white", "black", "grey"}, + {"grey", "black", "dark_grey"}, + {"green", "black", "dark_green"}, + {"orange", "black", "brown"}, + -- mixes with white + {"white", "red", "pink"}, + {"white", "dark_grey", "grey"}, + {"white", "dark_green", "green"}, } -for one, results in pairs(mixes) do - for i, result in ipairs(results) do - local another = mixbases[i] - minetest.register_craft({ - type = "shapeless", - output = 'dye:' .. result .. ' 2', - recipe = {'dye:' .. one, 'dye:' .. another}, - }) - end +for _, mix in pairs(dye_recipes) do + minetest.register_craft({ + type = "shapeless", + output = 'dye:' .. mix[3] .. ' 2', + recipe = {'dye:' .. mix[1], 'dye:' .. mix[2]}, + }) end diff --git a/mods/dye/license.txt b/mods/dye/license.txt new file mode 100644 index 00000000..bf9d3501 --- /dev/null +++ b/mods/dye/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/es/biome.lua b/mods/es/biome.lua index c6c35d83..26dc82cc 100644 --- a/mods/es/biome.lua +++ b/mods/es/biome.lua @@ -9,16 +9,116 @@ minetest.clear_registered_biomes() minetest.clear_registered_decorations() + + + +-- Biomes for floatlands + +function default.register_floatland_biomes(floatland_level, shadow_limit) + + -- Coniferous forest + + minetest.register_biome({ + name = "floatland_coniferous_forest", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 70, + }) + + -- Grassland + + minetest.register_biome({ + name = "floatland_grassland", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 35, + }) + + -- Sandstone desert + + minetest.register_biome({ + name = "floatland_sandstone_desert", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 0, + }) + + -- Floatland ocean / underground + + minetest.register_biome({ + name = "floatland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = shadow_limit, + y_max = floatland_level + 1, + heat_point = 50, + humidity_point = 50, + }) +end + -- -- Register biomes -- + -- All mapgens except mgv6 and singlenode - -- Permanent ice + +function default.register_biomes(upper_limit) + + -- Icesheet minetest.register_biome({ - name = "glacier", + name = "icesheet", node_dust = "default:snowblock", node_top = "default:snowblock", depth_top = 1, @@ -29,48 +129,52 @@ minetest.clear_registered_decorations() depth_water_top = 10, --node_water = "", node_river_water = "default:ice", + node_riverbed = "default:gravel", + depth_riverbed = 2, y_min = -8, - y_max = 31000, + y_max = upper_limit, heat_point = 0, - humidity_point = 50, + humidity_point = 73, }) minetest.register_biome({ - name = "glacier_ocean", + name = "icesheet_ocean", node_dust = "default:snowblock", - node_top = "default:snowblock", + node_top = "default:sand", depth_top = 1, - node_filler = "default:ice", + node_filler = "default:sand", depth_filler = 3, --node_stone = "", - --node_water_top = "", - --depth_water_top = , + node_water_top = "default:ice", + depth_water_top = 10, --node_water = "", --node_river_water = "", y_min = -112, y_max = -9, heat_point = 0, - humidity_point = 50, + humidity_point = 73, }) - -- Cold + -- Tundra minetest.register_biome({ name = "tundra", - --node_dust = "", - node_top = "default:dirt_with_snow", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, + node_dust = "default:snowblock", + --node_top = , + --depth_top = , + --node_filler = , + --depth_filler = , --node_stone = "", --node_water_top = "", --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:gravel", + depth_riverbed = 2, y_min = 2, - y_max = 31000, - heat_point = 15, - humidity_point = 35, + y_max = upper_limit, + heat_point = 0, + humidity_point = 40, }) minetest.register_biome({ @@ -85,16 +189,18 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:gravel", + depth_riverbed = 2, y_min = -3, y_max = 1, - heat_point = 15, - humidity_point = 35, + heat_point = 0, + humidity_point = 40, }) minetest.register_biome({ name = "tundra_ocean", --node_dust = "", - node_top = "default:ice", + node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, @@ -103,12 +209,15 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:gravel", + depth_riverbed = 2, y_min = -112, y_max = -4, - heat_point = 15, - humidity_point = 35, + heat_point = 0, + humidity_point = 40, }) + -- Taiga minetest.register_biome({ name = "taiga", @@ -122,16 +231,18 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 2, - y_max = 31000, - heat_point = 15, - humidity_point = 65, + y_max = upper_limit, + heat_point = 25, + humidity_point = 70, }) minetest.register_biome({ name = "taiga_ocean", --node_dust = "", - node_top = "default:dirt", + node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, @@ -140,16 +251,60 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = -112, y_max = 1, - heat_point = 15, - humidity_point = 65, + heat_point = 25, + humidity_point = 70, }) - -- Temperate + -- Snowy grassland minetest.register_biome({ - name = "stone_grassland", + name = "snowy_grassland", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 20, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "snowy_grassland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 20, + humidity_point = 35, + }) + + -- Grassland + + minetest.register_biome({ + name = "grassland", --node_dust = "", node_top = "default:dirt_with_grass", depth_top = 1, @@ -160,14 +315,16 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 6, - y_max = 31000, - heat_point = 40, + y_max = upper_limit, + heat_point = 50, humidity_point = 35, }) minetest.register_biome({ - name = "stone_grassland_dunes", + name = "grassland_dunes", --node_dust = "", node_top = "default:sand", depth_top = 1, @@ -178,14 +335,16 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 5, y_max = 5, - heat_point = 40, + heat_point = 50, humidity_point = 35, }) minetest.register_biome({ - name = "stone_grassland_ocean", + name = "grassland_ocean", --node_dust = "", node_top = "default:sand", depth_top = 1, @@ -196,12 +355,15 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = -112, y_max = 4, - heat_point = 40, + heat_point = 50, humidity_point = 35, }) + -- Coniferous forest minetest.register_biome({ name = "coniferous_forest", @@ -215,10 +377,12 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 6, - y_max = 31000, - heat_point = 40, - humidity_point = 65, + y_max = upper_limit, + heat_point = 45, + humidity_point = 70, }) minetest.register_biome({ @@ -226,17 +390,19 @@ minetest.clear_registered_decorations() --node_dust = "", node_top = "default:sand", depth_top = 1, - node_filler = "default:gravel", + node_filler = "default:sand", depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 5, y_max = 5, - heat_point = 40, - humidity_point = 65, + heat_point = 45, + humidity_point = 70, }) minetest.register_biome({ @@ -251,66 +417,15 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = -112, y_max = 4, - heat_point = 40, - humidity_point = 65, + heat_point = 45, + humidity_point = 70, }) - - minetest.register_biome({ - name = "sandstone_grassland", - --node_dust = "", - node_top = "default:dirt_with_grass", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 1, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - y_min = 6, - y_max = 31000, - heat_point = 60, - humidity_point = 35, - }) - - minetest.register_biome({ - name = "sandstone_grassland_dunes", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 2, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - y_min = 5, - y_max = 5, - heat_point = 60, - humidity_point = 35, - }) - - minetest.register_biome({ - name = "sandstone_grassland_ocean", - --node_dust = "", - node_top = "default:sand", - depth_top = 1, - node_filler = "default:sand", - depth_filler = 3, - node_stone = "default:sandstone", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - y_min = -112, - y_max = 4, - heat_point = 60, - humidity_point = 35, - }) + -- Deciduous forest minetest.register_biome({ name = "deciduous_forest", @@ -324,14 +439,16 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 1, - y_max = 31000, + y_max = upper_limit, heat_point = 60, - humidity_point = 65, + humidity_point = 68, }) minetest.register_biome({ - name = "deciduous_forest_swamp", + name = "deciduous_forest_shore", --node_dust = "", node_top = "default:dirt", depth_top = 1, @@ -342,16 +459,18 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = -3, + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -1, y_max = 0, heat_point = 60, - humidity_point = 65, + humidity_point = 68, }) minetest.register_biome({ name = "deciduous_forest_ocean", --node_dust = "", - node_top = "default:dirt", + node_top = "default:sand", depth_top = 1, node_filler = "default:sand", depth_filler = 3, @@ -360,13 +479,15 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = -112, - y_max = -4, + y_max = -2, heat_point = 60, - humidity_point = 65, + humidity_point = 68, }) - -- Hot + -- Desert minetest.register_biome({ name = "desert", @@ -380,10 +501,12 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 5, - y_max = 31000, - heat_point = 85, - humidity_point = 20, + y_max = upper_limit, + heat_point = 92, + humidity_point = 16, }) minetest.register_biome({ @@ -398,12 +521,99 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = -112, y_max = 4, - heat_point = 85, - humidity_point = 20, + heat_point = 92, + humidity_point = 16, }) + -- Sandstone desert + + minetest.register_biome({ + name = "sandstone_desert", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 60, + humidity_point = 0, + }) + + -- Cold desert + + minetest.register_biome({ + name = "cold_desert", + --node_dust = "", + node_top = "default:silver_sand", + depth_top = 1, + node_filler = "default:silver_sand", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 40, + humidity_point = 0, + }) + + -- Savanna minetest.register_biome({ name = "savanna", @@ -417,32 +627,16 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, y_min = 1, - y_max = 31000, - heat_point = 85, - humidity_point = 50, + y_max = upper_limit, + heat_point = 89, + humidity_point = 42, }) minetest.register_biome({ - name = "savanna_swamp", - --node_dust = "", - node_top = "es:dry_dirt", - depth_top = 1, - node_filler = "default:dirt", - depth_filler = 3, - --node_stone = "", - --node_water_top = "", - --depth_water_top = , - --node_water = "", - --node_river_water = "", - y_min = -3, - y_max = 0, - heat_point = 85, - humidity_point = 50, - }) - - minetest.register_biome({ - name = "savanna_ocean", + name = "savanna_shore", --node_dust = "", node_top = "es:mud", depth_top = 1, @@ -453,29 +647,54 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = -112, - y_max = -4, - heat_point = 85, - humidity_point = 50, + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -1, + y_max = 0, + heat_point = 89, + humidity_point = 42, }) - minetest.register_biome({ - name = "rainforest", + name = "savanna_ocean", --node_dust = "", - node_top = "default:dirt_with_grass", + node_top = "es:mud", depth_top = 1, - node_filler = "default:dirt", + node_filler = "es:mud", depth_filler = 3, --node_stone = "", --node_water_top = "", --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "es:mud", + depth_riverbed = 2, + y_min = -112, + y_max = -2, + heat_point = 89, + humidity_point = 42, + }) + + -- Rainforest + + minetest.register_biome({ + name = "rainforest", + --node_dust = "", + node_top = "default:dirt_with_rainforest_litter", + depth_top = 1, + node_filler = "es:mud", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "es:mud", + depth_riverbed = 2, y_min = 1, - y_max = 31000, - heat_point = 85, - humidity_point = 80, + y_max = upper_limit, + heat_point = 86, + humidity_point = 65, }) minetest.register_biome({ @@ -490,10 +709,12 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", - y_min = -3, + node_riverbed = "es:mud", + depth_riverbed = 2, + y_min = -1, y_max = 0, - heat_point = 85, - humidity_point = 80, + heat_point = 86, + humidity_point = 65, }) minetest.register_biome({ @@ -508,10 +729,12 @@ minetest.clear_registered_decorations() --depth_water_top = , --node_water = "", --node_river_water = "", + node_riverbed = "es:mud", + depth_riverbed = 2, y_min = -112, - y_max = -4, - heat_point = 85, - humidity_point = 80, + y_max = -2, + heat_point = 86, + humidity_point = 65, }) -- Underground @@ -532,8 +755,8 @@ minetest.clear_registered_decorations() y_max = -113, heat_point = 50, humidity_point = 50, - }) - + }) +--end --ES BIOMES --HOT minetest.register_biome({ @@ -680,7 +903,7 @@ minetest.clear_registered_decorations() heat_point = 25, humidity_point = 35, }) - +end --DECORATIONS @@ -1052,12 +1275,95 @@ end --DEFAULT V7 ---- --- Register decorations --- +function default.register_mgv6_decorations() + + -- Papyrus + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 100, y = 100, z = 100}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + y_min = 1, + y_max = 1, + decoration = "default:papyrus", + height = 2, + height_max = 4, + spawn_by = "default:water_source", + num_spawn_by = 1, + }) + + -- Cacti + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.012, + scale = 0.024, + spread = {x = 100, y = 100, z = 100}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "default:cactus", + height = 3, + height_max = 4, + }) + + -- Long grasses + + for length = 1, 5 do + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.007, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "default:grass_"..length, + }) + end + + -- Dry shrubs + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.035, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "default:dry_shrub", + }) +end --- All mapgens except mgv6 and singlenode +-- All mapgens except mgv6 local function register_grass_decoration(offset, scale, length) minetest.register_decoration({ @@ -1072,13 +1378,12 @@ local function register_grass_decoration(offset, scale, length) octaves = 3, persist = 0.6 }, - biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest", - "stone_grassland_dunes", "sandstone_grassland_dunes", - "coniferous_forest_dunes"}, + biomes = {"grassland", "grassland_dunes", "deciduous_forest", + "coniferous_forest", "coniferous_forest_dunes", + "floatland_grassland", "floatland_coniferous_forest"}, y_min = 1, y_max = 31000, - decoration = "default:grass_"..length, + decoration = "default:grass_" .. length, }) end @@ -1098,12 +1403,12 @@ local function register_dry_grass_decoration(offset, scale, length) biomes = {"savanna"}, y_min = 1, y_max = 31000, - decoration = "default:dry_grass_"..length, + decoration = "default:dry_grass_" .. length, }) end ---function default.register_decorations() - --minetest.clear_registered_decorations() + +function default.register_decorations() -- Apple tree and log @@ -1122,8 +1427,9 @@ end biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/apple_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts", flags = "place_center_x, place_center_z", + rotation = "random", }) minetest.register_decoration({ @@ -1141,20 +1447,7 @@ end biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:tree", param2 = 12, prob = 191}, - {name = "default:tree", param2 = 12}, - {name = "default:tree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_brown", prob = 63}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1163,39 +1456,26 @@ end minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt_with_grass", "default:dirt"}, - sidelen = 80, - fill_ratio = 0.09, + place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + sidelen = 16, + fill_ratio = 0.1, biomes = {"rainforest", "rainforest_swamp"}, - y_min = 0, + y_min = -1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/jungle_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) minetest.register_decoration({ deco_type = "schematic", - place_on = {"default:dirt_with_grass", "default:dirt"}, - sidelen = 80, - fill_ratio = 0.01, + place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + sidelen = 16, + fill_ratio = 0.005, biomes = {"rainforest", "rainforest_swamp"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:jungletree", param2 = 12, prob = 191}, - {name = "default:jungletree", param2 = 12}, - {name = "default:jungletree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_brown", prob = 127}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1214,10 +1494,10 @@ end octaves = 3, persist = 0.66 }, - biomes = {"taiga", "coniferous_forest"}, + biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, y_min = 2, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/pine_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", flags = "place_center_x, place_center_z", }) @@ -1236,20 +1516,7 @@ end biomes = {"taiga", "coniferous_forest"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:pine_tree", param2 = 12, prob = 191}, - {name = "default:pine_tree", param2 = 12}, - {name = "default:pine_tree", param2 = 12, prob = 127}, - {name = "air", prob = 0}, - {name = "flowers:mushroom_red", prob = 63}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1271,7 +1538,7 @@ end biomes = {"savanna"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/acacia_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts", flags = "place_center_x, place_center_z", rotation = "random", }) @@ -1291,17 +1558,7 @@ end biomes = {"savanna"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 2, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:acacia_tree", param2 = 12, prob = 191}, - {name = "default:acacia_tree", param2 = 12}, - {name = "default:acacia_tree", param2 = 12, prob = 127}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts", flags = "place_center_x", rotation = "random", }) @@ -1323,7 +1580,7 @@ end biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/aspen_tree.mts", + schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts", flags = "place_center_x, place_center_z", }) @@ -1342,23 +1599,11 @@ end biomes = {"deciduous_forest"}, y_min = 1, y_max = 31000, - schematic = { - size = {x = 3, y = 3, z = 1}, - data = { - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "air", prob = 0}, - {name = "default:aspen_tree", param2 = 12}, - {name = "default:aspen_tree", param2 = 12}, - {name = "default:aspen_tree", param2 = 12, prob = 127}, - {name = "flowers:mushroom_red", prob = 63}, - {name = "flowers:mushroom_brown", prob = 63}, - {name = "air", prob = 0}, - }, - }, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts", flags = "place_center_x", rotation = "random", }) + -- Large cactus minetest.register_decoration({ @@ -1376,7 +1621,7 @@ end biomes = {"desert"}, y_min = 5, y_max = 31000, - schematic = minetest.get_modpath("default").."/schematics/large_cactus.mts", + schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts", flags = "place_center_x", rotation = "random", }) @@ -1400,7 +1645,7 @@ end y_max = 31000, decoration = "default:cactus", height = 2, - y_max = 5, + height_max = 5, }) -- Papyrus @@ -1417,10 +1662,53 @@ end octaves = 3, persist = 0.7 }, - biomes = {"savanna_swamp"}, + biomes = {"savanna_shore"}, y_min = 0, y_max = 0, - schematic = minetest.get_modpath("default").."/schematics/papyrus.mts", + schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts", + }) + + -- Bush + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"snowy_grassland", "grassland", "deciduous_forest", + "floatland_grassland"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Acacia bush + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 90155, + octaves = 3, + persist = 0.7, + }, + biomes = {"savanna"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts", + flags = "place_center_x, place_center_z", }) -- Grasses @@ -1443,8 +1731,8 @@ end minetest.register_decoration({ deco_type = "simple", - place_on = {"default:dirt_with_grass"}, - sidelen = 80, + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 16, fill_ratio = 0.1, biomes = {"rainforest"}, y_min = 1, @@ -1456,7 +1744,8 @@ end minetest.register_decoration({ deco_type = "simple", - place_on = {"default:desert_sand", "default:dirt_with_snow"}, + place_on = {"default:desert_sand", + "default:sand", "default:silver_sand"}, sidelen = 16, noise_params = { offset = 0, @@ -1466,83 +1755,72 @@ end octaves = 3, persist = 0.6 }, - biomes = {"desert", "tundra"}, + biomes = {"desert", "sandstone_desert", "cold_desert"}, y_min = 2, y_max = 31000, decoration = "default:dry_shrub", }) ---end + -- Coral reef --- --- Generate nyan cats --- - --- All mapgens except singlenode - -function default.make_nyancat(pos, facedir, length) - local tailvec = {x = 0, y = 0, z = 0} - if facedir == 0 then - tailvec.z = 1 - elseif facedir == 1 then - tailvec.x = 1 - elseif facedir == 2 then - tailvec.z = -1 - elseif facedir == 3 then - tailvec.x = -1 - else - facedir = 0 - tailvec.z = 1 - end - local p = {x = pos.x, y = pos.y, z = pos.z} - minetest.set_node(p, {name = "default:nyancat", param2 = facedir}) - for i = 1, length do - p.x = p.x + tailvec.x - p.z = p.z + tailvec.z - minetest.set_node(p, {name = "default:nyancat_rainbow", param2 = facedir}) - end -end - -function default.generate_nyancats(minp, maxp, seed) - local y_min = -31000 - --local y_max = -32 - local y_max = 32 - if maxp.y < y_min or minp.y > y_max then - return - end - local y_min = math.max(minp.y, y_min) - local y_max = math.min(maxp.y, y_max) - local volume = (maxp.x - minp.x + 1) * (y_max - y_min + 1) * (maxp.z - minp.z + 1) - local pr = PseudoRandom(seed + 9324342) - local max_num_nyancats = math.floor(volume / (16 * 16 * 16)) - for i = 1, max_num_nyancats do - if pr:next(0, 1000) == 0 then - local x0 = pr:next(minp.x, maxp.x) - local y0 = pr:next(minp.y, maxp.y) - local z0 = pr:next(minp.z, maxp.z) - local p0 = {x = x0, y = y0, z = z0} - default.make_nyancat(p0, pr:next(0, 3), pr:next(3, 15)) - end - end + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:sand"}, + noise_params = { + offset = -0.15, + scale = 0.1, + spread = {x = 100, y = 100, z = 100}, + seed = 7013, + octaves = 3, + persist = 1, + }, + biomes = { + "desert_ocean", + "savanna_ocean", + "rainforest_ocean", + }, + y_min = -8, + y_max = -2, + schematic = minetest.get_modpath("default") .. "/schematics/corals.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) end -- --- Detect mapgen to select functions +-- Detect mapgen, flags and parameters to select functions -- --- Mods using singlenode mapgen can call these functions to enable --- the use of minetest.generate_ores or minetest.generate_decorations ---[[ -local mg_params = minetest.get_mapgen_params() -if mg_params.mgname == "v6" then +-- Get setting or default +local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or + "mountains, ridges, nofloatlands" +local captures_float = string.match(mgv7_spflags, "floatlands") +local captures_nofloat = string.match(mgv7_spflags, "nofloatlands") + +local mgv7_floatland_level = minetest.get_mapgen_setting("mgv7_floatland_level") or 1280 +local mgv7_shadow_limit = minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024 + +minetest.clear_registered_biomes() +minetest.clear_registered_ores() +minetest.clear_registered_decorations() + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" then + default.register_mgv6_blob_ores() default.register_ores() default.register_mgv6_decorations() - minetest.register_on_generated(default.generate_nyancats) -elseif mg_params.mgname ~= "singlenode" then - default.register_biomes() +elseif mg_name == "v7" and captures_float == "floatlands" and + captures_nofloat ~= "nofloatlands" then + -- Mgv7 with floatlands + default.register_biomes(mgv7_shadow_limit - 1) + default.register_floatland_biomes(mgv7_floatland_level, mgv7_shadow_limit) + default.register_blob_ores() + default.register_ores() + default.register_decorations() +else + default.register_biomes(31000) + default.register_blob_ores() default.register_ores() default.register_decorations() - minetest.register_on_generated(default.generate_nyancats) end -]] \ No newline at end of file diff --git a/mods/farming/README.txt b/mods/farming/README.txt index 86a5fe3e..95c8154d 100644 --- a/mods/farming/README.txt +++ b/mods/farming/README.txt @@ -13,6 +13,8 @@ This mod works by adding your new plant to the {growing=1} group and numbering t Changelog: +1.25 - Added check for farming.conf setting file to disable specific crops globally (inside mod folder) or world specific (inside world folder) +1.24 - Added Hemp which can be crafted into fibre, paper, string, rope and oil. 1.23 - Huge code tweak and tidy done and added barley seeds to be found in dry grass, barley can make flour for bread also. 1.22 - Added grape bushes at high climates which can be cultivated into grape vines using trellis (9 sticks). 1.21 - Added auto-refill code for planting crops (thanks crabman77), also fixed a few bugs @@ -45,6 +47,9 @@ Changelog: 0.1 - Fixed growing bug 0.0 - Initial release +Lucky Blocks: 11 (plus 3 for default farming items) + + License of media (textures): ---------------------------- Created by PilzAdam (License: WTFPL): @@ -147,4 +152,5 @@ Created by TenPlus1 farming_rhubarb_2.png farming_rhubarb_3.png farming_rhubarb.png - farming_rhubarb_pie.png \ No newline at end of file + farming_rhubarb_pie.png + farming_hemp*.png diff --git a/mods/farming/beanpole.lua b/mods/farming/beanpole.lua index cef27673..fd933837 100644 --- a/mods/farming/beanpole.lua +++ b/mods/farming/beanpole.lua @@ -6,6 +6,60 @@ local S = farming.intllib +-- place beans +function place_beans(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- check if pointing at bean pole + if under.name ~= "farming:beanpole" then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.set_node(pt.under, {name = plantname}) + + minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}) + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:beans", + placer:get_wield_index() + ) + end + end + + return itemstack +end + -- beans minetest.register_craftitem("farming:beans", { description = S("Green Beans"), @@ -13,39 +67,8 @@ minetest.register_craftitem("farming:beans", { on_use = minetest.item_eat(1), on_place = function(itemstack, placer, pointed_thing) - - if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then - return - end - - local nodename = minetest.get_node(pointed_thing.under).name - - if nodename == "farming:beanpole" then - minetest.set_node(pointed_thing.under, {name = "farming:beanpole_1"}) - - minetest.sound_play("default_place_node", {pos = pointed_thing.above, gain = 1.0}) - else - return - end - - if not minetest.setting_getbool("creative_mode") then - - itemstack:take_item() - - -- check for refill - if itemstack:get_count() == 0 then - - minetest.after(0.20, - farming.refill_plant, - placer, - "farming:beans", - placer:get_wield_index() - ) - end - end - - return itemstack - end + return place_beans(itemstack, placer, pointed_thing, "farming:beanpole_1") + end, }) -- beans can be used for green dye @@ -62,7 +85,7 @@ minetest.register_node("farming:beanpole", { drawtype = "plantlike", tiles = {"farming_beanpole.png"}, inventory_image = "farming_beanpole.png", - visual_scale = 1.45, + visual_scale = 1.90, -- 1.45, paramtype = "light", walkable = false, buildable_to = true, @@ -125,7 +148,7 @@ minetest.register_craft({ local crop_def = { drawtype = "plantlike", tiles = {"farming_beanpole_1.png"}, - visual_scale = 1.45, + visual_scale = 1.90, -- 1.45, paramtype = "light", walkable = false, buildable_to = true, diff --git a/mods/farming/cocoa.lua b/mods/farming/cocoa.lua index 29cc96b0..fad1733e 100644 --- a/mods/farming/cocoa.lua +++ b/mods/farming/cocoa.lua @@ -10,14 +10,21 @@ function place_cocoa(itemstack, placer, pointed_thing, plantname) if not pt or pt.type ~= "node" then return end - + local under = minetest.get_node(pt.under) - + -- return if any of the nodes are not registered if not minetest.registered_nodes[under.name] then return end + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + -- check if pointing at jungletree if under.name ~= "default:jungletree" or minetest.get_node(pt.above).name ~= "air" then diff --git a/mods/farming/compatibility.lua b/mods/farming/compatibility.lua index a875d9bc..b7c906c8 100644 --- a/mods/farming/compatibility.lua +++ b/mods/farming/compatibility.lua @@ -7,9 +7,27 @@ if eth then minetest.register_alias("farming_plus:banana_leaves", "ethereal:bananaleaves") minetest.register_alias("farming_plus:banana", "ethereal:banana") else + minetest.register_node(":ethereal:banana", { + description = "Banana", + drawtype = "torchlike", + tiles = {"banana_single.png"}, + inventory_image = "banana_single.png", + wield_image = "banana_single.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + }) + minetest.register_alias("farming_plus:banana_sapling", "default:sapling") minetest.register_alias("farming_plus:banana_leaves", "default:leaves") - minetest.register_alias("farming_plus:banana", "default:apple") + minetest.register_alias("farming_plus:banana", "ethereal:banana") end -- Carrot @@ -18,10 +36,10 @@ minetest.register_alias("farming_plus:carrot_1", "farming:carrot_1") minetest.register_alias("farming_plus:carrot_2", "farming:carrot_4") minetest.register_alias("farming_plus:carrot_3", "farming:carrot_6") minetest.register_alias("farming_plus:carrot", "farming:carrot_8") +minetest.register_alias("farming_plus:carrot_item", "farming:carrot") -- Cocoa - -minetest.register_alias("farming_plus:cocoa_sapling", "farming:cocoa_beans") +minetest.register_alias("farming_plus:cocoa_sapling", "farming:cocoa_2") minetest.register_alias("farming_plus:cocoa_leaves", "default:leaves") minetest.register_alias("farming_plus:cocoa", "default:apple") minetest.register_alias("farming_plus:cocoa_bean", "farming:cocoa_beans") @@ -30,13 +48,33 @@ minetest.register_alias("farming_plus:cocoa_bean", "farming:cocoa_beans") minetest.register_alias("farming_plus:orange_1", "farming:tomato_1") minetest.register_alias("farming_plus:orange_2", "farming:tomato_4") minetest.register_alias("farming_plus:orange_3", "farming:tomato_6") -minetest.register_alias("farming_plus:orange", "farming:tomato_8") +--minetest.register_alias("farming_plus:orange", "farming:tomato_8") if eth then minetest.register_alias("farming_plus:orange_item", "ethereal:orange") + minetest.register_alias("farming_plus:orange", "ethereal:orange") minetest.register_alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") else - minetest.register_alias("farming_plus:orange_item", "default:apple") + minetest.register_node(":ethereal:orange", { + description = "Orange", + drawtype = "plantlike", + tiles = {"farming_orange.png"}, + inventory_image = "farming_orange.png", + wield_image = "farming_orange.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} + }, + groups = {fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(4), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_alias("farming_plus:orange_item", "ethereal:orange") + minetest.register_alias("farming_plus:orange", "ethereal:orange") minetest.register_alias("farming_plus:orange_seed", "default:sapling") end @@ -49,15 +87,15 @@ minetest.register_alias("farming_plus:potato_seed", "farming:potato") -- Pumpkin minetest.register_alias("farming:pumpkin_seed", "farming:pumpkin_slice") -minetest.register_alias("farming:pumpkin_face", "farming:pumpkin") -minetest.register_alias("farming:pumpkin_face_light", "farming:jackolantern") +minetest.register_alias("farming:pumpkin_face", "farming:jackolantern") +minetest.register_alias("farming:pumpkin_face_light", "farming:jackolantern_on") minetest.register_alias("farming:big_pumpkin", "farming:pumpkin") minetest.register_alias("farming:big_pumpkin_side", "air") minetest.register_alias("farming:big_pumpkin_corner", "air") minetest.register_alias("farming:big_pumpkin_top", "air") -minetest.register_alias("farming:scarecrow", "farming:pumpkin") +minetest.register_alias("farming:scarecrow", "farming:jackolantern") minetest.register_alias("farming:scarecrow_bottom", "default:fence_wood") -minetest.register_alias("farming:scarecrow_light", "farming:jackolantern") +minetest.register_alias("farming:scarecrow_light", "farming:jackolantern_on") minetest.register_alias("farming:pumpkin_flour", "farming:pumpkin_dough") -- Rhubarb @@ -76,8 +114,15 @@ if eth then minetest.register_alias("farming_plus:strawberry_3", "ethereal:strawberry_5") minetest.register_alias("farming_plus:strawberry", "ethereal:strawberry_7") else - minetest.register_alias("farming_plus:strawberry_item", "farming:raspberries") - minetest.register_alias("farming_plus:strawberry_seed", "farming:raspberries") + minetest.register_craftitem(":ethereal:strawberry", { + description = "Strawberry", + inventory_image = "strawberry.png", + wield_image = "strawberry.png", + on_use = minetest.item_eat(1), + }) + + minetest.register_alias("farming_plus:strawberry_item", "ethereal:strawberry") + minetest.register_alias("farming_plus:strawberry_seed", "ethereal:strawberry") minetest.register_alias("farming_plus:strawberry_1", "farming:raspberry_1") minetest.register_alias("farming_plus:strawberry_2", "farming:raspberry_2") minetest.register_alias("farming_plus:strawberry_3", "farming:raspberry_3") @@ -95,3 +140,17 @@ minetest.register_alias("farming_plus:tomato", "farming:tomato_8") -- Weed minetest.register_alias("farming:weed", "default:grass_2") + +-- Classic Bushes compatibility +if minetest.get_modpath("bushes_classic") then + + if eth then + minetest.register_alias("bushes:strawberry", "farming:strawberry") + else + minetest.register_alias("bushes:strawberry", "farming:raspberries") + end + + minetest.register_alias("bushes:blueberry", "farming:blueberries") + minetest.register_alias("bushes:raspberry", "farming:raspberries") + +end \ No newline at end of file diff --git a/mods/farming/corn.lua b/mods/farming/corn.lua index f178a48d..402ec828 100644 --- a/mods/farming/corn.lua +++ b/mods/farming/corn.lua @@ -31,9 +31,21 @@ minetest.register_craft({ }) -- ethanol (thanks to JKMurray for this idea) -minetest.register_craftitem("farming:bottle_ethanol", { +minetest.register_node("farming:bottle_ethanol", { description = S("Bottle of Ethanol"), + drawtype = "plantlike", + tiles = {"farming_bottle_ethanol.png"}, inventory_image = "farming_bottle_ethanol.png", + wield_image = "farming_bottle_ethanol.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), }) minetest.register_craft( { @@ -89,7 +101,7 @@ minetest.register_node("farming:corn_5", table.copy(crop_def)) -- stage 6 crop_def.tiles = {"farming_corn_6.png"} -crop_def.visual_scale = 1.45 +crop_def.visual_scale = 1.9 -- 1.45 minetest.register_node("farming:corn_6", table.copy(crop_def)) -- stage 7 diff --git a/mods/farming/cucumber.lua b/mods/farming/cucumber.lua index 8e292154..eb29347b 100644 --- a/mods/farming/cucumber.lua +++ b/mods/farming/cucumber.lua @@ -48,7 +48,7 @@ crop_def.tiles = {"farming_cucumber_4.png"} crop_def.groups.growing = 0 crop_def.drop = { items = { - {items = {'farming:cucumber'}, rarity = 1}, + {items = {'farming:cucumber 2'}, rarity = 1}, {items = {'farming:cucumber 2'}, rarity = 2}, } } diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt index 8c4c21f4..8a8d2a27 100644 --- a/mods/farming/depends.txt +++ b/mods/farming/depends.txt @@ -1,3 +1,3 @@ default -wool intllib? +lucky_block? \ No newline at end of file diff --git a/mods/farming/farming.conf_example b/mods/farming/farming.conf_example new file mode 100644 index 00000000..696d0079 --- /dev/null +++ b/mods/farming/farming.conf_example @@ -0,0 +1,27 @@ + +--[[ + Farming settings can be changed here and kept inside mod folder + even after the mod has been updated, or you can place inside + world folder for map specific settings. +--]] + +-- true to enable crop/food in-game and on mapgen +farming.carrot = true +farming.potato = true +farming.tomato = true +farming.cucumber = true +farming.corn = true +farming.coffee = true +farming.coffee = true +farming.melon = true +farming.sugar = true +farming.pumpkin = true +farming.cocoa = true +farming.raspberry = true +farming.blueberry = true +farming.rhubarb = true +farming.beans = true +farming.grapes = true +farming.barley = true +farming.hemp = true +farming.donuts = true diff --git a/mods/farming/grapes.lua b/mods/farming/grapes.lua index 7a3bfc5f..9070d0e3 100644 --- a/mods/farming/grapes.lua +++ b/mods/farming/grapes.lua @@ -1,6 +1,60 @@ local S = farming.intllib +-- place trellis +function place_grapes(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- check if pointing at trellis + if under.name ~= "farming:trellis" then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.set_node(pt.under, {name = plantname}) + + minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}) + + if not minetest.setting_getbool("creative_mode") then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:grapes", + placer:get_wield_index() + ) + end + end + + return itemstack +end + -- grapes minetest.register_craftitem("farming:grapes", { description = S("Grapes"), @@ -8,39 +62,8 @@ minetest.register_craftitem("farming:grapes", { on_use = minetest.item_eat(2), on_place = function(itemstack, placer, pointed_thing) - - if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then - return - end - - local nodename = minetest.get_node(pointed_thing.under).name - - if nodename == "farming:trellis" then - minetest.set_node(pointed_thing.under, {name = "farming:grapes_1"}) - - minetest.sound_play("default_place_node", {pos = pointed_thing.above, gain = 1.0}) - else - return - end - - if not minetest.setting_getbool("creative_mode") then - - itemstack:take_item() - - -- check for refill - if itemstack:get_count() == 0 then - - minetest.after(0.20, - farming.refill_plant, - placer, - "farming:grapes", - placer:get_wield_index() - ) - end - end - - return itemstack - end + return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") + end, }) -- grapes can be used for violet dye @@ -57,7 +80,7 @@ minetest.register_node("farming:trellis", { drawtype = "plantlike", tiles = {"farming_trellis.png"}, inventory_image = "farming_trellis.png", - visual_scale = 1.45, + visual_scale = 1.9, -- 1.45, paramtype = "light", walkable = false, buildable_to = true, @@ -120,7 +143,7 @@ minetest.register_craft({ local crop_def = { drawtype = "plantlike", tiles = {"farming_grapes_1.png"}, - visual_scale = 1.45, + visual_scale = 1.9, -- 1.45, paramtype = "light", walkable = false, buildable_to = true, diff --git a/mods/farming/hemp.lua b/mods/farming/hemp.lua new file mode 100644 index 00000000..29b6a42d --- /dev/null +++ b/mods/farming/hemp.lua @@ -0,0 +1,213 @@ + +local S = farming.intllib + +-- hemp seeds +minetest.register_node("farming:seed_hemp", { + description = S("Hemp Seed"), + tiles = {"farming_hemp_seed.png"}, + inventory_image = "farming_hemp_seed.png", + wield_image = "farming_hemp_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:hemp_1") + end, +}) + +-- harvested hemp +minetest.register_craftitem("farming:hemp_leaf", { + description = S("Hemp Leaf"), + inventory_image = "farming_hemp_leaf.png", +}) + +-- hemp oil +minetest.register_node("farming:hemp_oil", { + description = S("Bottle of Hemp Oil"), + drawtype = "plantlike", + tiles = {"farming_hemp_oil.png"}, + inventory_image = "farming_hemp_oil.png", + wield_image = "farming_hemp_oil.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:hemp_oil", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"", "vessels:glass_bottle", ""} + } +}) + +minetest.register_craft( { + output = "farming:hemp_oil", + recipe = { + {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, + {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, + {"farming:seed_hemp", "vessels:glass_bottle", "farming:seed_hemp"} + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hemp_oil", + burntime = 20, + replacements = {{ "farming:hemp_oil", "vessels:glass_bottle"}} +}) + +-- hemp fibre +minetest.register_craftitem("farming:hemp_fibre", { + description = S("Hemp Fibre"), + inventory_image = "farming_hemp_fibre.png", +}) + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "bucket:bucket_water", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{ "bucket:bucket_water", "bucket:bucket_empty"}} +}) + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "bucket:bucket_river_water", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{ "bucket:bucket_river_water", "bucket:bucket_empty"}} +}) + +-- paper +minetest.register_craft( { + output = "default:paper", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + } +}) + +-- string +minetest.register_craft( { + output = "farming:cotton", + recipe = { + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + } +}) + +-- hemp rope +minetest.register_node("farming:hemp_rope", { + description = S("Hemp Rope"), + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + tiles = {"farming_hemp_rope.png"}, + wield_image = "farming_hemp_rope.png", + inventory_image = "farming_hemp_rope.png", + drawtype = "plantlike", + groups = {flammable = 2, choppy = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, +}) + +-- string +minetest.register_craft( { + output = "farming:hemp_rope 6", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:cotton", "farming:cotton", "farming:cotton"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + } +}) + +-- hemp definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_hemp_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:hemp_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_hemp_2.png"} +minetest.register_node("farming:hemp_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_hemp_3.png"} +minetest.register_node("farming:hemp_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_hemp_4.png"} +minetest.register_node("farming:hemp_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_hemp_5.png"} +minetest.register_node("farming:hemp_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_hemp_6.png"} +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf'}, rarity = 2}, + {items = {'farming:seed_hemp'}, rarity = 1}, + } +} +minetest.register_node("farming:hemp_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_hemp_7.png"} +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf'}, rarity = 1}, + {items = {'farming:hemp_leaf'}, rarity = 3}, + {items = {'farming:seed_hemp'}, rarity = 1}, + {items = {'farming:seed_hemp'}, rarity = 3}, + } +} +minetest.register_node("farming:hemp_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_hemp_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf 2'}, rarity = 1}, + {items = {'farming:hemp_leaf'}, rarity = 2}, + {items = {'farming:seed_hemp'}, rarity = 1}, + {items = {'farming:seed_hemp'}, rarity = 2}, + } +} +minetest.register_node("farming:hemp_8", table.copy(crop_def)) diff --git a/mods/farming/init.lua b/mods/farming/init.lua index 922be4a7..ab30f60d 100644 --- a/mods/farming/init.lua +++ b/mods/farming/init.lua @@ -1,5 +1,5 @@ --[[ - Minetest Farming Redo Mod 1.22 (4th June 2016) + Farming Redo Mod 1.25 (6th May 2017) by TenPlus1 NEW growing routine by prestidigitator auto-refill by crabman77 @@ -14,38 +14,6 @@ farming.select = { fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} } -farming.DEBUG = false --- farming.DEBUG = {} -- Uncomment to turn on profiling code/functions - -local DEBUG_abm_runs = 0 -local DEBUG_abm_time = 0 -local DEBUG_timer_runs = 0 -local DEBUG_timer_time = 0 - -if farming.DEBUG then - - function farming.DEBUG.reset_times() - DEBUG_abm_runs = 0 - DEBUG_abm_time = 0 - DEBUG_timer_runs = 0 - DEBUG_timer_time = 0 - end - - function farming.DEBUG.report_times() - - local abm_n = DEBUG_abm_runs - local abm_dt = DEBUG_abm_time - local abm_avg = (abm_n > 0 and abm_dt / abm_n) or 0 - local timer_n = DEBUG_timer_runs - local timer_dt = DEBUG_timer_time - local timer_avg = (timer_n > 0 and timer_dt / timer_n) or 0 - local dt = abm_dt + timer_dt - - print("ABM ran for "..abm_dt.."µs over "..abm_n.." runs: "..abm_avg.."µs/run") - print("Timer ran for "..timer_dt.."µs over "..timer_n.." runs: "..timer_avg.."µs/run") - print("Total farming time: "..dt.."µs") - end -end local statistics = dofile(farming.path.."/statistics.lua") @@ -163,7 +131,7 @@ local function plant_name_stage(node) local name - if type(node) == 'table' then + if type(node) == "table" then if node.name then name = node.name @@ -346,30 +314,13 @@ end minetest.after(0, function() - for _, node_def in pairs(minetest.registered_nodes) do + for _, node_def in ipairs(minetest.registered_nodes) do register_plant_node(node_def) end end) local abm_func = farming.handle_growth -if farming.DEBUG then - - local normal_abm_func = abm_func - - abm_func = function(...) - - local t0 = minetest.get_us_time() - local r = { normal_abm_func(...) } - local t1 = minetest.get_us_time() - - DEBUG_abm_runs = DEBUG_abm_runs + 1 - DEBUG_abm_time = DEBUG_abm_time + (t1 - t0) - - return unpack(r) - end -end - -- Just in case a growing type or added node is missed (also catches existing -- nodes added to map before timers were incorporated). @@ -399,8 +350,7 @@ function farming.plant_growth_timer(pos, elapsed, node_name) if stages.plant_name == "farming:cocoa" then - if not minetest.find_node_near(pos, 1, - {"default:jungletree", "moretrees:jungletree_leaves_green"}) then + if not minetest.find_node_near(pos, 1, {"default:jungletree"}) then return true end @@ -465,23 +415,6 @@ function farming.plant_growth_timer(pos, elapsed, node_name) return growth ~= max_growth end -if farming.DEBUG then - - local timer_func = farming.plant_growth_timer; - - farming.plant_growth_timer = function(pos, elapsed, node_name) - - local t0 = minetest.get_us_time() - local r = { timer_func(pos, elapsed, node_name) } - local t1 = minetest.get_us_time() - - DEBUG_timer_runs = DEBUG_timer_runs + 1 - DEBUG_timer_time = DEBUG_timer_time + (t1 - t0) - - return unpack(r) - end -end - -- refill placed plant by crabman (26/08/2015) local can_refill_plant = { ["farming:blueberry_1"] = "farming:blueberries", @@ -502,6 +435,7 @@ local can_refill_plant = { ["farming:rhubarb_1"] = "farming:rhubarb", ["farming:cocoa_1"] = "farming:cocoa_beans", ["farming:barley_1"] = "farming:seed_barley", + ["farming:hemp_1"] = "farming:seed_hemp", } function farming.refill_plant(player, plantname, index) @@ -513,7 +447,7 @@ function farming.refill_plant(player, plantname, index) return end - for i, stack in pairs(inv:get_list("main")) do + for i, stack in ipairs(inv:get_list("main")) do if stack:get_name() == plantname and i ~= index then @@ -538,6 +472,14 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) end local under = minetest.get_node(pt.under) + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + local above = minetest.get_node(pt.above) -- check if pointing at the top of the node @@ -587,7 +529,7 @@ function farming.place_seed(itemstack, placer, pointed_thing, plantname) end end --- Function to register plants (for compatibility) +-- Function to register plants (default farming compatibility) farming.register_plant = function(name, def) @@ -623,7 +565,8 @@ farming.register_plant = function(name, def) selection_box = farming.select, on_place = function(itemstack, placer, pointed_thing) - return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":"..pname.."_1") + return farming.place_seed(itemstack, placer, + pointed_thing, mname .. ":" .. pname .. "_1") end, }) @@ -636,15 +579,19 @@ farming.register_plant = function(name, def) -- Register growing steps for i = 1, def.steps do + local base_rarity = 1 + if def.steps ~= 1 then + base_rarity = 8 - (i - 1) * 7 / (def.steps - 1) + end local drop = { items = { - {items = {mname .. ":" .. pname}, rarity = 9 - i}, - {items = {mname .. ":" .. pname}, rarity= 18 - i * 2}, - {items = {mname .. ":seed_" .. pname}, rarity = 9 - i}, - {items = {mname .. ":seed_" .. pname}, rarity = 18 - i * 2}, + {items = {mname .. ":" .. pname}, rarity = base_rarity}, + {items = {mname .. ":" .. pname}, rarity = base_rarity * 2}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity}, + {items = {mname .. ":seed_" .. pname}, rarity = base_rarity * 2}, } } - + local g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, growing = 1} -- Last step doesn't need growing=1 so Abm never has to check these @@ -667,7 +614,7 @@ farming.register_plant = function(name, def) sounds = default.node_sound_leaves_defaults(), }) --- register_plant_node(node_name) + register_plant_node(node_name) end -- Return info @@ -675,29 +622,71 @@ farming.register_plant = function(name, def) return r end --- load crops +-- default settings +farming.carrot = true +farming.potato = true +farming.tomato = true +farming.cucumber = true +farming.corn = true +farming.coffee = true +farming.coffee = true +farming.melon = true +farming.sugar = true +farming.pumpkin = true +farming.cocoa = true +farming.raspberry = true +farming.blueberry = true +farming.rhubarb = true +farming.beans = true +farming.grapes = true +farming.barley = true +farming.hemp = true +farming.donuts = true + + +-- Load new global settings if found inside mod folder +local input = io.open(farming.path.."/farming.conf", "r") +if input then + dofile(farming.path .. "/farming.conf") + input:close() + input = nil +end + +-- load new world-specific settings if found inside world folder +local worldpath = minetest.get_worldpath() +local input = io.open(worldpath.."/farming.conf", "r") +if input then + dofile(worldpath .. "/farming.conf") + input:close() + input = nil +end + + +-- load crops dofile(farming.path.."/soil.lua") dofile(farming.path.."/hoes.lua") dofile(farming.path.."/grass.lua") dofile(farming.path.."/wheat.lua") dofile(farming.path.."/cotton.lua") -dofile(farming.path.."/carrot.lua") -dofile(farming.path.."/potato.lua") -dofile(farming.path.."/tomato.lua") -dofile(farming.path.."/cucumber.lua") -dofile(farming.path.."/corn.lua") -dofile(farming.path.."/coffee.lua") -dofile(farming.path.."/melon.lua") -dofile(farming.path.."/sugar.lua") -dofile(farming.path.."/pumpkin.lua") -dofile(farming.path.."/cocoa.lua") -dofile(farming.path.."/raspberry.lua") -dofile(farming.path.."/blueberry.lua") -dofile(farming.path.."/rhubarb.lua") -dofile(farming.path.."/beanpole.lua") -dofile(farming.path.."/grapes.lua") -dofile(farming.path.."/barley.lua") -dofile(farming.path.."/donut.lua") +if farming.carrot then dofile(farming.path.."/carrot.lua") end +if farming.potato then dofile(farming.path.."/potato.lua") end +if farming.tomato then dofile(farming.path.."/tomato.lua") end +if farming.cucumber then dofile(farming.path.."/cucumber.lua") end +if farming.corn then dofile(farming.path.."/corn.lua") end +if farming.coffee then dofile(farming.path.."/coffee.lua") end +if farming.melon then dofile(farming.path.."/melon.lua") end +if farming.sugar then dofile(farming.path.."/sugar.lua") end +if farming.pumpkin then dofile(farming.path.."/pumpkin.lua") end +if farming.cocoa then dofile(farming.path.."/cocoa.lua") end +if farming.raspberry then dofile(farming.path.."/raspberry.lua") end +if farming.blueberry then dofile(farming.path.."/blueberry.lua") end +if farming.rhubarb then dofile(farming.path.."/rhubarb.lua") end +if farming.beans then dofile(farming.path.."/beanpole.lua") end +if farming.grapes then dofile(farming.path.."/grapes.lua") end +if farming.barley then dofile(farming.path.."/barley.lua") end +if farming.hemp then dofile(farming.path.."/hemp.lua") end +if farming.donuts then dofile(farming.path.."/donut.lua") end dofile(farming.path.."/mapgen.lua") dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility +--dofile(farming.path.."/lucky_block.lua") diff --git a/mods/farming/init.lua_orig b/mods/farming/init.lua_orig deleted file mode 100644 index aee9976f..00000000 --- a/mods/farming/init.lua_orig +++ /dev/null @@ -1,192 +0,0 @@ ---[[ - Minetest Farming Redo Mod 1.14 (11th May 2015) - by TenPlus1 -]] - -farming = {} -farming.mod = "redo" -farming.path = minetest.get_modpath("farming") -farming.hoe_on_use = default.hoe_on_use - -dofile(farming.path.."/soil.lua") -dofile(farming.path.."/hoes.lua") -dofile(farming.path.."/grass.lua") -dofile(farming.path.."/wheat.lua") -dofile(farming.path.."/cotton.lua") -dofile(farming.path.."/carrot.lua") -dofile(farming.path.."/potato.lua") -dofile(farming.path.."/tomato.lua") -dofile(farming.path.."/cucumber.lua") -dofile(farming.path.."/corn.lua") -dofile(farming.path.."/coffee.lua") -dofile(farming.path.."/melon.lua") -dofile(farming.path.."/sugar.lua") -dofile(farming.path.."/pumpkin.lua") -dofile(farming.path.."/cocoa.lua") -dofile(farming.path.."/raspberry.lua") -dofile(farming.path.."/blueberry.lua") -dofile(farming.path.."/rhubarb.lua") -dofile(farming.path.."/beanpole.lua") -dofile(farming.path.."/donut.lua") -dofile(farming.path.."/mapgen.lua") -dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility - --- Place Seeds on Soil - -function farming.place_seed(itemstack, placer, pointed_thing, plantname) - local pt = pointed_thing - - -- check if pointing at a node - if not pt and pt.type ~= "node" then - return - end - - local under = minetest.get_node(pt.under) - local above = minetest.get_node(pt.above) - - -- check if pointing at the top of the node - if pt.above.y ~= pt.under.y+1 then - return - end - - -- return if any of the nodes is not registered - if not minetest.registered_nodes[under.name] - or not minetest.registered_nodes[above.name] then - return - end - - -- can I replace above node, and am I pointing at soil - if not minetest.registered_nodes[above.name].buildable_to - or minetest.get_item_group(under.name, "soil") < 2 - or minetest.get_item_group(above.name, "plant") ~= 0 then -- ADDED this line for multiple seed placement bug - return - end - - -- add the node and remove 1 item from the itemstack - if not minetest.is_protected(pt.above, placer:get_player_name()) then - minetest.add_node(pt.above, {name=plantname}) - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - end -end - --- Single ABM Handles Growing of All Plants - -minetest.register_abm({ - nodenames = {"group:growing"}, - neighbors = {"farming:soil_wet", "default:jungletree"}, - interval = 80, - chance = 2, - - action = function(pos, node) - - -- split plant name (e.g. farming:wheat_1) - local plant = node.name:split("_")[1].."_" - local numb = node.name:split("_")[2] - - -- fully grown ? - if not minetest.registered_nodes[plant..(numb + 1)] then return end - - -- cocoa pod on jungle tree ? - if plant ~= "farming:cocoa_" then - - -- growing on wet soil ? - if minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name ~= "farming:soil_wet" then return end - end - - -- enough light ? - if minetest.get_node_light(pos) < 13 then return end - - -- grow - minetest.set_node(pos, {name=plant..(numb + 1)}) - - end -}) - --- Function to register plants (for compatibility) - -farming.register_plant = function(name, def) - local mname = name:split(":")[1] - local pname = name:split(":")[2] - - -- Check def table - if not def.description then - def.description = "Seed" - end - if not def.inventory_image then - def.inventory_image = "unknown_item.png" - end - if not def.steps then - return nil - end - - -- Register seed - minetest.register_node(":" .. mname .. ":seed_" .. pname, { - description = def.description, - tiles = {def.inventory_image}, - inventory_image = def.inventory_image, - wield_image = def.inventory_image, - drawtype = "signlike", - groups = {seed = 1, snappy = 3, attached_node = 1}, - paramtype = "light", - paramtype2 = "wallmounted", - walkable = false, - sunlight_propagates = true, - selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, - on_place = function(itemstack, placer, pointed_thing) - return farming.place_seed(itemstack, placer, pointed_thing, mname .. ":"..pname.."_1") - end - }) - - -- Register harvest - minetest.register_craftitem(":" .. mname .. ":" .. pname, { - description = pname:gsub("^%l", string.upper), - inventory_image = mname .. "_" .. pname .. ".png", - }) - - -- Register growing steps - for i=1,def.steps do - local drop = { - items = { - {items = {mname .. ":" .. pname}, rarity = 9 - i}, - {items = {mname .. ":" .. pname}, rarity= 18 - i * 2}, - {items = {mname .. ":seed_" .. pname}, rarity = 9 - i}, - {items = {mname .. ":seed_" .. pname}, rarity = 18 - i * 2}, - } - } - - local g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, growing = 1} - -- Last step doesn't need growing=1 so Abm never has to check these - if i == def.steps then - g = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1} - end - - minetest.register_node(mname .. ":" .. pname .. "_" .. i, { - drawtype = "plantlike", - waving = 1, - tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, - paramtype = "light", - walkable = false, - buildable_to = true, - is_ground_content = true, - drop = drop, - selection_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},}, - groups = g, - sounds = default.node_sound_leaves_defaults(), - }) - end - - -- Return info - local r = {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} - return r -end - ---[[ Cotton (example, is already registered in cotton.lua) -farming.register_plant("farming:cotton", { - description = "Cotton seed", - inventory_image = "farming_cotton_seed.png", - steps = 8, -}) ---]] diff --git a/mods/farming/license.txt b/mods/farming/license.txt index 5d30c149..fec6f6aa 100644 --- a/mods/farming/license.txt +++ b/mods/farming/license.txt @@ -1,14 +1,21 @@ +The MIT License (MIT) - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 +Copyright (c) 2016 TenPlus1 - Copyright (C) 2004 Sam Hocevar +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. \ No newline at end of file +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/mods/farming/locale/de.txt b/mods/farming/locale/de.txt index 82cee4f1..9b85a046 100644 --- a/mods/farming/locale/de.txt +++ b/mods/farming/locale/de.txt @@ -74,7 +74,7 @@ Baked Potato = Ofenkartoffel #pumpkin.lua Pumpkin = Kürbis Pumpkin Slice = Kürbisscheibe -Jack 'O Lantern = Kürbislaterne +Jack 'O Lantern (punch to turn on and off) = Kürbislaterne (Punch zum Ein- und Ausschalten) Pumpkin Bread = Kürbisbrot Pumpkin Dough = Kürbisteig diff --git a/mods/farming/locale/template.txt b/mods/farming/locale/template.txt index 6d067f58..3f527304 100644 --- a/mods/farming/locale/template.txt +++ b/mods/farming/locale/template.txt @@ -72,7 +72,7 @@ Baked Potato = #pumpkin.lua Pumpkin = Pumpkin Slice = -Jack 'O Lantern = +Jack 'O Lantern (punch to turn on and off) = Pumpkin Bread = Pumpkin Dough = diff --git a/mods/farming/lucky_block.lua b/mods/farming/lucky_block.lua new file mode 100644 index 00000000..94d7d366 --- /dev/null +++ b/mods/farming/lucky_block.lua @@ -0,0 +1,19 @@ + +-- add lucky blocks + +if minetest.get_modpath("lucky_block") then + + lucky_block:add_blocks({ + {"dro", {"farming:corn"}, 5}, + {"dro", {"farming:coffee_cup_hot"}, 1}, + {"dro", {"farming:bread"}, 5}, + {"nod", "farming:jackolantern", 0}, + {"tro", "farming:jackolantern_on"}, + {"nod", "default:river_water_source", 1}, + {"dro", {"farming:trellis", "farming:grapes"}, 5}, + {"dro", {"farming:bottle_ethanol"}, 1}, + {"nod", "farming:melon", 0}, + {"dro", {"farming:donut", "farming:donut_chocolate", "farming:donut_apple"}, 5}, + {"dro", {"farming:hemp_leaf", "farming:hemp_fibre", "farming:seed_hemp"}, 5}, + }) +end diff --git a/mods/farming/mapgen.lua b/mods/farming/mapgen.lua index dcd51a33..3f71d2fd 100644 --- a/mods/farming/mapgen.lua +++ b/mods/farming/mapgen.lua @@ -1,5 +1,11 @@ + -- decoration function -local function register_plant(name, min, max, spawnby, num) +local function register_plant(name, min, max, spawnby, num, enabled) + + if enabled ~= true then + return + end + minetest.register_decoration({ deco_type = "simple", place_on = {"default:dirt_with_grass"}, @@ -20,44 +26,50 @@ local function register_plant(name, min, max, spawnby, num) }) end -function farming.register_mgv6_decorations() - register_plant("potato_3", 15, 40, "", -1) - register_plant("tomato_7", 5, 20, "", -1) - register_plant("carrot_8", 1, 30, "group:water", 1) - register_plant("cucumber_4", 1, 20, "group:water", 1) - register_plant("corn_7", 12, 22, "", -1) - register_plant("corn_8", 10, 20, "", -1) - register_plant("coffee_5", 20, 45, "", -1) - register_plant("melon_8", 1, 20, "group:water", 1) - register_plant("pumpkin_8", 1, 20, "group:water", 1) - register_plant("raspberry_4", 3, 10, "", -1) - register_plant("rhubarb_3", 3, 15, "", -1) - register_plant("blueberry_4", 3, 10, "", -1) - register_plant("beanbush", 18, 35, "", -1) - register_plant("grapebush", 25, 45, "", -1) -end --- v7 maps have a beach so plants growing near water is limited to 6 high -function farming.register_mgv7_decorations() - register_plant("potato_3", 15, 40, "", -1) - register_plant("tomato_7", 5, 20, "", -1) - register_plant("carrot_8", 1, 6, "", -1) - register_plant("cucumber_4", 1, 6, "", -1) - register_plant("corn_7", 12, 22, "", -1) - register_plant("corn_8", 10, 20, "", -1) - register_plant("coffee_5", 20, 45, "", -1) - register_plant("melon_8", 1, 6, "", -1) - register_plant("pumpkin_8", 1, 6, "", -1) - register_plant("raspberry_4", 3, 10, "", -1) - register_plant("rhubarb_3", 3, 15, "", -1) - register_plant("blueberry_4", 3, 10, "", -1) - register_plant("beanbush", 18, 35, "", -1) - register_plant("grapebush", 25, 45, "", -1) -end +-- add crops to mapgen +--register_plant("potato_3", 15, 40, "", -1, farming.potato) +--register_plant("tomato_7", 5, 20, "", -1, farming.tomato) +--register_plant("corn_7", 12, 22, "", -1, farming.corn) +--register_plant("coffee_5", 20, 45, "", -1, farming.coffee) +--register_plant("raspberry_4", 3, 10, "", -1, farming.raspberry) +--register_plant("rhubarb_3", 3, 15, "", -1, farming.rhubarb) +--register_plant("blueberry_4", 3, 10, "", -1, farming.blueberry) +--register_plant("beanbush", 18, 35, "", -1, farming.beans) +--register_plant("grapebush", 25, 45, "", -1, farming.grapes) + --- detect mapgen if minetest.get_mapgen_params().mgname == "v6" then - farming.register_mgv6_decorations() + + --register_plant("carrot_8", 1, 30, "group:water", 1, farming.carrot) + --register_plant("cucumber_4", 1, 20, "group:water", 1, farming.cucumber) + --register_plant("melon_8", 1, 20, "group:water", 1, farming.melon) + --register_plant("pumpkin_8", 1, 20, "group:water", 1, farming.pumpkin) else - farming.register_mgv7_decorations() -end \ No newline at end of file + -- v7 maps have a beach so plants growing near water is limited to 6 high + --register_plant("carrot_8", 1, 6, "", -1, farming.carrot) + --register_plant("cucumber_4", 1, 6, "", -1, farming.cucumber) + --register_plant("melon_8", 1, 6, "", -1, farming.melon) + --register_plant("pumpkin_8", 1, 6, "", -1, farming.pumpkin) +end + +if farming.hemp then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 420, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = "farming:hemp_7", + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end diff --git a/mods/farming/melon.lua b/mods/farming/melon.lua index f01ce047..e2f65644 100644 --- a/mods/farming/melon.lua +++ b/mods/farming/melon.lua @@ -41,7 +41,7 @@ local crop_def = { snappy = 3, flammable = 2, plant = 1, attached_node = 1, not_in_creative_inventory = 1, growing = 1 }, - sounds = default.node_sound_wood_defaults() + sounds = default.node_sound_leaves_defaults() } -- stage 1 diff --git a/mods/farming/pumpkin.lua b/mods/farming/pumpkin.lua index ebbbd877..8bff7789 100644 --- a/mods/farming/pumpkin.lua +++ b/mods/farming/pumpkin.lua @@ -53,7 +53,7 @@ minetest.register_craft({ -- jack 'o lantern minetest.register_node("farming:jackolantern", { - description = S("Jack 'O Lantern"), + description = S("Jack 'O Lantern (punch to turn on and off)"), tiles = { "farming_pumpkin_top.png", "farming_pumpkin_top.png", @@ -82,7 +82,10 @@ minetest.register_node("farming:jackolantern_on", { }, light_source = default.LIGHT_MAX - 1, paramtype2 = "facedir", - groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2}, + groups = { + choppy = 1, oddly_breakable_by_hand = 1, flammable = 2, + not_in_creative_inventory = 1 + }, sounds = default.node_sound_wood_defaults(), drop = "farming:jackolantern", on_punch = function(pos, node, puncher) diff --git a/mods/farming/textures/banana_single.png b/mods/farming/textures/banana_single.png new file mode 100644 index 0000000000000000000000000000000000000000..b15ed2fa270a525be476f37959a93f66316bc7b3 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=1EO-0r%3VdjG6d9v-b zitCnW@7tn(?TqPzs}^5g*j{97$OkH7ED7=pW^j0RBMrz2^>lFz;kcfhz`*Rr$Z=MI zC)GgGXo0bdj6%u5axJ_$%~>L6=H*77Wm~qa2^Dov^?9~>n*VtQ sBZ;Hh+SWmiS`p6HRtsi1J2$d0bRHL~pM1&O5oiH}r>mdKI;Vst01O2_SO5S3 literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_1.png b/mods/farming/textures/farming_hemp_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb45108273f62dab7619fc6de9058858a9cc969 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t_%$647rR9jjV3-gth|( z8B2ovf*Bm1-ADs+Bs^UlLpZJ{CoEvmXyE8$Q#kmHK}AARf`RKb!w2_08FD~144$rj JF6*2Ung9?I8g&2w literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_2.png b/mods/farming/textures/farming_hemp_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a676173cc121e25ad11a1ba92c14f3bf604443db GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|47rTfan=lttX*GT zX8^?+OM?7@862M7NCR?YJY5_^IIbrrC*kHxL>Bh#!AasziV*6pC QexN!APgg&ebxsLQ03=Nu`Tzg` literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_3.png b/mods/farming/textures/farming_hemp_3.png new file mode 100644 index 0000000000000000000000000000000000000000..57136d5072aa265a9527dfac39d6cc5e2d5ba123 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|47rTfan=lttX*GT zX8^?+OM?7@862M7NCR?|JzX3_IIbrrD2SclVBq}5rf`tskx?UuGqZwXIitr0D+d(@ Y?K4b1az76&0xDl8?e70Tsn^Mvo0v b4k`?x8q6izX8*Yf)WP8C>gTe~DWM4fZ;&A$ literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_5.png b/mods/farming/textures/farming_hemp_5.png new file mode 100644 index 0000000000000000000000000000000000000000..890a3d28e9486272f4f8c62a6bd9d0a78bf87918 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|47rTfan=lttX*GT zX8^?+OM?7@862M7NCR>VJY5_^IIbrr9N?6YZaBgiuMoI_)#C&U183O;31tCe`A4ji lTGbq!-Z4!`C~fdyU^uD97WB(&`a+;y22WQ%mvv4FO#l-7C7b{N literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_6.png b/mods/farming/textures/farming_hemp_6.png new file mode 100644 index 0000000000000000000000000000000000000000..258d4e3815f596d725cf2d1a6c19bd3fa99a7ce4 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|47rTfan=lttX*GT zX8^?+OM?7@862M7NCR@rJY5_^IIbrrI53-;IW*Zaco>*5e`JhTSe?KLJY5_^IIbrrB&7T}aG>Tz0S|M2qdqrt_ZcxZHnwjK{5*ep z&KmM8V{b@eVpTAl$uPl%nK_{8Cqwf~#d}O_jZVUhY-~HZ9XP|-6%L*_z`!u2nlJi& T>FZfQvl%>H{an^LB{Ts5IB7CX literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_fibre.png b/mods/farming/textures/farming_hemp_fibre.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3c9187ef0e0d751ca94ea5078ac23b368d3b14 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|47rTfan=lttX*GT zX8^?+OM?7@862M7NCR?=JY5_^IIbrrC@>Z1G6<~_bx3+;%*M9tMyA6eqdkp{pI-(m o7}i!XF_*{OVP;!);sh(hV{PvDF;Ti-fw~zyUHx3vIVCg!0J)?n^#A|> literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_leaf.png b/mods/farming/textures/farming_hemp_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..997c8f0cd73688c33f89d20d2bb5e78731db87d9 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|47rTfan=lttX*GT zX8^?+OM?7@862M7NCR^GJY5_^IIbrrBv>3c(BNWV&5-$wfvt_{A43{jW>uH@nQ7A7qru}`=9Yh$CKhe=CgV`n2H!^T8mYpVnX Pko63nu6{1-oD!M)fl)HSs!N#qp zPwlnezWemS!s01O+|=PKS(deSK^k zt38>to*rOK-O=WpvF*YIrjWMmj0_33!#u0hBo?(DT+Hmjz`(D-&H7jE=PjTS44$rj JF6*2UngF~sH;@1T literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_rope.png b/mods/farming/textures/farming_hemp_rope.png new file mode 100644 index 0000000000000000000000000000000000000000..03a7082ff3a0d69445172c3ff65c2d3c2625a7ab GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|hNf)Iy+SjWi7L$5 z6Au(;ED7=pW^j0RBMr!r@pN$v;kcfhknsD^fddDu7(F(yGjP7-c4(?GWH@Bc?Rqon RkS|ajgQu&X%Q~loCIGt-Au<2} literal 0 HcmV?d00001 diff --git a/mods/farming/textures/farming_hemp_seed.png b/mods/farming/textures/farming_hemp_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..6be42c8607dc7e118b5493ae531668ed0031a823 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b&o$z|YbWXZ`@uB%qs z~85ATGG#ao_ft=UF~G==1gE ziQ*Dj{R=D_tCnpKXw>XkDAS;5y4dvDO9s=H8IGcs2d|lxNIj_(SGY5mSH)c6`-~}5 hc3t0_x@>+Vp?wsOMq4~c)I$ztaD0e0sw5wQ{w;t literal 0 HcmV?d00001 diff --git a/mods/farming/textures/strawberry.png b/mods/farming/textures/strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..5b43e6bc99bc21663a9e91440fcc97a2320b5adf GIT binary patch literal 382 zcmV-^0fGLBP)U1tMAsC~XQXdKo#37T$6IK&m1K!cZOn z0004WQchC^n!~IR0GvPyIJQwW;ofr5@vS_Kk7&-n<{r4R7rea`}dn-usvKah|<3eHx&}k07WI z`e^tbA;t*d0!DATge86gx><#a56X$J{usBwLD+9@5O}LQAv0evdU2--{q|!1v(hB0g#UjTEfK8F8}}l07*qoM6N<$f~dNbB>(^b literal 0 HcmV?d00001 diff --git a/mods/fire/README.txt b/mods/fire/README.txt index 14022f03..099da1c2 100644 --- a/mods/fire/README.txt +++ b/mods/fire/README.txt @@ -1,36 +1,35 @@ Minetest Game mod: fire ======================= +See license.txt for license information. -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - -License of media (textures and sounds) +Authors of media (textures and sounds) -------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ Everything not listed in here: -Copyright (C) 2012 Perttu Ahola (celeron55) +Copyright (C) 2012 Perttu Ahola (celeron55) (CC BY-SA 3.0) -fire_small.ogg sampled from: - http://www.freesound.org/people/dobroide/sounds/4211/ +Muadtralk (CC BY-SA 3.0) + fire_basic_flame_animated.png -fire_large.ogg sampled from: - http://www.freesound.org/people/Dynamicell/sounds/17548/ +Gambit (CC BY-SA 3.0) + fire_flint_steel.png -fire_basic_flame_animated.png: - Muadtralk +dobroide (CC BY 3.0) +http://www.freesound.org/people/dobroide/sounds/4211/ + fire_small.ogg -fire_flint_steel.png - Gambit (WTFPL) +Dynamicell (CC BY 3.0) +http://www.freesound.org/people/Dynamicell/sounds/17548/ + fire_large.ogg + fire_fire.*.ogg +fire_small.ogg and fire_large.ogg are unused but kept temporarily to not break +other mods that may use them. + +Benboncan (CC BY 3.0) +https://www.freesound.org/people/Benboncan/sounds/66457/ + fire_flint_and_steel.ogg diff --git a/mods/fire/init.lua b/mods/fire/init.lua index 34613da5..f97636b5 100644 --- a/mods/fire/init.lua +++ b/mods/fire/init.lua @@ -1,11 +1,13 @@ --- minetest/fire/init.lua - -- Global namespace for functions fire = {} --- Register flame nodes +-- +-- Items +-- + +-- Flame nodes minetest.register_node("fire:basic_flame", { drawtype = "firelike", @@ -22,7 +24,7 @@ minetest.register_node("fire:basic_flame", { }, inventory_image = "fire_basic_flame.png", paramtype = "light", - light_source = 14, + light_source = 13, walkable = false, buildable_to = true, sunlight_propagates = true, @@ -34,22 +36,14 @@ minetest.register_node("fire:basic_flame", { minetest.remove_node(pos) return end - -- restart timer + -- Restart timer return true end, drop = "", on_construct = function(pos) minetest.get_node_timer(pos):start(math.random(30, 60)) - minetest.after(0, fire.update_sounds_around, pos) end, - - on_destruct = function(pos) - minetest.after(0, fire.update_sounds_around, pos) - end, - - on_blast = function() - end, -- unaffected by explosions }) minetest.register_node("fire:permanent_flame", { @@ -68,16 +62,13 @@ minetest.register_node("fire:permanent_flame", { }, inventory_image = "fire_basic_flame.png", paramtype = "light", - light_source = 14, + light_source = 13, walkable = false, buildable_to = true, sunlight_propagates = true, damage_per_second = 4, groups = {igniter = 2, dig_immediate = 3}, drop = "", - - on_blast = function() - end, }) @@ -86,46 +77,41 @@ minetest.register_node("fire:permanent_flame", { minetest.register_tool("fire:flint_and_steel", { description = "Flint and Steel", inventory_image = "fire_flint_steel.png", + sound = {breaks = "default_tool_breaks"}, + on_use = function(itemstack, user, pointed_thing) - itemstack:add_wear(1000) - local pt = pointed_thing - if pt.type == "node" then - local node_under = minetest.get_node(pt.under).name - local is_coalblock = node_under == "default:coalblock" - local is_tnt = node_under == "tnt:tnt" - local is_gunpowder = node_under == "tnt:gunpowder" - if minetest.get_item_group(node_under, "flammable") >= 1 or - is_coalblock or is_tnt or is_gunpowder then - local flame_pos = pt.above - if is_coalblock then - flame_pos = {x = pt.under.x, y = pt.under.y + 1, z = pt.under.z} - elseif is_tnt or is_gunpowder then - flame_pos = pt.under - end - if minetest.get_node(flame_pos).name == "air" or - is_tnt or is_gunpowder then - local player_name = user:get_player_name() - if not minetest.is_protected(flame_pos, player_name) then - if is_coalblock then - minetest.set_node(flame_pos, - {name = "fire:permanent_flame"}) - elseif is_tnt then - minetest.set_node(flame_pos, - {name = "tnt:tnt_burning"}) - elseif is_gunpowder then - minetest.set_node(flame_pos, - {name = "tnt:gunpowder_burning"}) - else - minetest.set_node(flame_pos, - {name = "fire:basic_flame"}) - end - else - minetest.chat_send_player(player_name, "This area is protected") - end - end + local sound_pos = pointed_thing.above or user:get_pos() + minetest.sound_play( + "fire_flint_and_steel", + {pos = sound_pos, gain = 0.5, max_hear_distance = 8} + ) + local player_name = user:get_player_name() + if pointed_thing.type == "node" then + local node_under = minetest.get_node(pointed_thing.under).name + local nodedef = minetest.registered_nodes[node_under] + if not nodedef then + return + end + if minetest.is_protected(pointed_thing.under, player_name) then + minetest.chat_send_player(player_name, "This area is protected") + return + end + if nodedef.on_ignite then + nodedef.on_ignite(pointed_thing.under, user) + elseif minetest.get_item_group(node_under, "flammable") >= 1 + and minetest.get_node(pointed_thing.above).name == "air" then + minetest.set_node(pointed_thing.above, {name = "fire:basic_flame"}) end end - if not minetest.setting_getbool("creative_mode") then + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + -- Wear tool + local wdef = itemstack:get_definition() + itemstack:add_wear(1000) + -- Tool break sound + if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then + minetest.sound_play(wdef.sound.breaks, {pos = sound_pos, gain = 0.5}) + end return itemstack end end @@ -149,78 +135,146 @@ minetest.override_item("default:coalblock", { minetest.remove_node(pos) end end, + on_ignite = function(pos, igniter) + local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} + if minetest.get_node(flame_pos).name == "air" then + minetest.set_node(flame_pos, {name = "fire:permanent_flame"}) + end + end, }) --- Get sound area of position +-- +-- Sound +-- -fire.D = 6 -- size of sound areas +local flame_sound = minetest.settings:get_bool("flame_sound") +if flame_sound == nil then + -- Enable if no setting present + flame_sound = true +end -function fire.get_area_p0p1(pos) - local p0 = { - x = math.floor(pos.x / fire.D) * fire.D, - y = math.floor(pos.y / fire.D) * fire.D, - z = math.floor(pos.z / fire.D) * fire.D, - } - local p1 = { - x = p0.x + fire.D - 1, - y = p0.y + fire.D - 1, - z = p0.z + fire.D - 1 - } - return p0, p1 +if flame_sound then + + local handles = {} + local timer = 0 + + -- Parameters + + local radius = 8 -- Flame node search radius around player + local cycle = 3 -- Cycle time for sound updates + + -- Update sound for player + + function fire.update_player_sound(player) + local player_name = player:get_player_name() + -- Search for flame nodes in radius around player + local ppos = player:getpos() + local areamin = vector.subtract(ppos, radius) + local areamax = vector.add(ppos, radius) + local fpos, num = minetest.find_nodes_in_area( + areamin, + areamax, + {"fire:basic_flame", "fire:permanent_flame"} + ) + -- Total number of flames in radius + local flames = (num["fire:basic_flame"] or 0) + + (num["fire:permanent_flame"] or 0) + -- Stop previous sound + if handles[player_name] then + minetest.sound_stop(handles[player_name]) + handles[player_name] = nil + end + -- If flames + if flames > 0 then + -- Find centre of flame positions + local fposmid = fpos[1] + -- If more than 1 flame + if #fpos > 1 then + local fposmin = areamax + local fposmax = areamin + for i = 1, #fpos do + local fposi = fpos[i] + if fposi.x > fposmax.x then + fposmax.x = fposi.x + end + if fposi.y > fposmax.y then + fposmax.y = fposi.y + end + if fposi.z > fposmax.z then + fposmax.z = fposi.z + end + if fposi.x < fposmin.x then + fposmin.x = fposi.x + end + if fposi.y < fposmin.y then + fposmin.y = fposi.y + end + if fposi.z < fposmin.z then + fposmin.z = fposi.z + end + end + fposmid = vector.divide(vector.add(fposmin, fposmax), 2) + end + -- Play sound + local handle = minetest.sound_play( + "fire_fire", + { + pos = fposmid, + to_player = player_name, + gain = math.min(0.06 * (1 + flames * 0.125), 0.18), + max_hear_distance = 32, + loop = true, -- In case of lag + } + ) + -- Store sound handle for this player + if handle then + handles[player_name] = handle + end + end + end + + -- Cycle for updating players sounds + + minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer < cycle then + return + end + + timer = 0 + local players = minetest.get_connected_players() + for n = 1, #players do + fire.update_player_sound(players[n]) + end + end) + + -- Stop sound and clear handle on player leave + + minetest.register_on_leaveplayer(function(player) + local player_name = player:get_player_name() + if handles[player_name] then + minetest.sound_stop(handles[player_name]) + handles[player_name] = nil + end + end) end --- Fire sounds table --- key: position hash of low corner of area --- value: {handle=sound handle, name=sound name} -fire.sounds = {} - - --- Update fire sounds in sound area of position +-- Deprecated function kept temporarily to avoid crashes if mod fire nodes call it function fire.update_sounds_around(pos) - local p0, p1 = fire.get_area_p0p1(pos) - local cp = {x = (p0.x + p1.x) / 2, y = (p0.y + p1.y) / 2, z = (p0.z + p1.z) / 2} - local flames_p = minetest.find_nodes_in_area(p0, p1, {"fire:basic_flame"}) - --print("number of flames at "..minetest.pos_to_string(p0).."/" - -- ..minetest.pos_to_string(p1)..": "..#flames_p) - local should_have_sound = (#flames_p > 0) - local wanted_sound = nil - if #flames_p >= 9 then - wanted_sound = {name = "fire_large", gain = 0.7} - elseif #flames_p > 0 then - wanted_sound = {name = "fire_small", gain = 0.9} - end - local p0_hash = minetest.hash_node_position(p0) - local sound = fire.sounds[p0_hash] - if not sound then - if should_have_sound then - fire.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, - {pos = cp, max_hear_distance = 16, loop = true}), - name = wanted_sound.name, - } - end - else - if not wanted_sound then - minetest.sound_stop(sound.handle) - fire.sounds[p0_hash] = nil - elseif sound.name ~= wanted_sound.name then - minetest.sound_stop(sound.handle) - fire.sounds[p0_hash] = { - handle = minetest.sound_play(wanted_sound, - {pos = cp, max_hear_distance = 16, loop = true}), - name = wanted_sound.name, - } - end - end end +-- +-- ABMs +-- + -- Extinguish all flames quickly with water, snow, ice minetest.register_abm({ + label = "Extinguish flame", nodenames = {"fire:basic_flame", "fire:permanent_flame"}, neighbors = {"group:puts_out_fire"}, interval = 3, @@ -229,18 +283,31 @@ minetest.register_abm({ action = function(pos, node, active_object_count, active_object_count_wider) minetest.remove_node(pos) minetest.sound_play("fire_extinguish_flame", - {pos = pos, max_hear_distance = 16, gain = 0.25}) + {pos = pos, max_hear_distance = 16, gain = 0.15}) end, }) --- Enable the following ABMs according to 'disable fire' setting +-- Enable the following ABMs according to 'enable fire' setting -if minetest.setting_getbool("disable_fire") then +local fire_enabled = minetest.settings:get_bool("enable_fire") +if fire_enabled == nil then + -- enable_fire setting not specified, check for disable_fire + local fire_disabled = minetest.settings:get_bool("disable_fire") + if fire_disabled == nil then + -- Neither setting specified, check whether singleplayer + fire_enabled = minetest.is_singleplayer() + else + fire_enabled = not fire_disabled + end +end - -- Remove basic flames only +if not fire_enabled then + + -- Remove basic flames only if fire disabled minetest.register_abm({ + label = "Remove disabled fire", nodenames = {"fire:basic_flame"}, interval = 7, chance = 1, @@ -248,11 +315,12 @@ if minetest.setting_getbool("disable_fire") then action = minetest.remove_node, }) -else +else -- Fire enabled -- Ignite neighboring nodes, add basic flames minetest.register_abm({ + label = "Ignite flame", nodenames = {"group:flammable"}, neighbors = {"group:igniter"}, interval = 7, @@ -270,9 +338,10 @@ else end, }) - -- Remove flammable nodes + -- Remove flammable nodes around basic flame minetest.register_abm({ + label = "Remove flammable nodes", nodenames = {"fire:basic_flame"}, neighbors = "group:flammable", interval = 5, @@ -281,49 +350,16 @@ else action = function(pos, node, active_object_count, active_object_count_wider) local p = minetest.find_node_near(pos, 1, {"group:flammable"}) if p then - -- remove flammable nodes around flame local flammable_node = minetest.get_node(p) local def = minetest.registered_nodes[flammable_node.name] if def.on_burn then def.on_burn(p) else minetest.remove_node(p) - nodeupdate(p) + minetest.check_for_falling(p) end end end, }) end - - --- Rarely ignite things from far - ---[[ Currently disabled to reduce the chance of uncontrollable spreading - fires that disrupt servers. Also for less lua processing load. - -minetest.register_abm({ - nodenames = {"group:igniter"}, - neighbors = {"air"}, - interval = 5, - chance = 10, - action = function(pos, node, active_object_count, active_object_count_wider) - local reg = minetest.registered_nodes[node.name] - if not reg or not reg.groups.igniter or reg.groups.igniter < 2 then - return - end - local d = reg.groups.igniter - local p = minetest.find_node_near(pos, d, {"group:flammable"}) - if p then - -- If there is water or stuff like that around flame, don't ignite - if fire.flame_should_extinguish(p) then - return - end - local p2 = fire.find_pos_for_flame_around(p) - if p2 then - minetest.set_node(p2, {name = "fire:basic_flame"}) - end - end - end, -}) ---]] diff --git a/mods/fire/license.txt b/mods/fire/license.txt new file mode 100644 index 00000000..43f9cd7f --- /dev/null +++ b/mods/fire/license.txt @@ -0,0 +1,84 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2012-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures and sounds) +--------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Muadtralk +Copyright (C) 2013-2016 Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) +Copyright (C) 2005 dobroide +Copyright (C) 2006 Dynamicell +Copyright (C) 2009 Benboncan + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ diff --git a/mods/fire/sounds/fire_fire.1.ogg b/mods/fire/sounds/fire_fire.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..cbfee4c65f4739acc951e8f87f30d824f1ae21ea GIT binary patch literal 57957 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%0AypZXh?iy`+ z7!&L27LDSp3v`U<%RCmW?Dl(%`x;>`_!eAjrR3}~#O%+OQ_I?Lre$uok)&8SH{iW& z0VP&^17kE^5X8%eC@KkxFjV*zDKcK^x&<3y$@r`ixyL=5%qPUkm!XW*=Vx`7F_pX= zIq-lXAypd;0*stjun)yP)?3h0Wx14tBv$1Owd{}mhr(maHYgt<3drA)L`IB z*D+V;sjXcmY|}J5RTWe&gJ)W1(pWSPu5~d$&8>)jL%~K>!`p{choYC$r{m(>Za-lN zG4)~z%R&uNB?+5>y9?IDLj|5}Zz2$1I1E=))oxl!U_Ru)Z(O9AeDm(unYl))H0oL^ zB96<#su;rM%T4@3JIMg!?^C`JnsS}%^39T^%h{+NS8{5EAvH-G2=u(NcVb}G&q>e% z$F?{DrT@CWOaN@42(Mz~b_WV?W&1|$gW%kv5PqbQF?1RSJ!?m*LtTH2Qx7cQFw%M# zRo$KKyS!KHWGdXdUct3GYVq$Q?o72KtHw{~_WZ*tp)%7pB*45~DQ7U1GcvkFK<|by zQGwf&&KA2hI8?mg5-&SEBw>#CIkVCr+*Q4Kf$aU$0?|ZXVMx*pHX}c%Fe#DbW6CUqP?jCcVE%Mke9~`% zS^GXD5Gb?e#LxGp=lFB4dv!V<%HF1oK^++igU_?sp*Xgl{=1$OXxAkT#l*ZwM|zR1 zNAS4}X+U`;u_FhSe~@`6^$Pv)x$FsR!NS@S1@+g5f=&$M9^#S(TDmv7B~xNp9(l(d zr&Z{@K#q>{afnB1a_$aMbMF&$qe|biNRv(=9qeBp zo6aB#Oyiaeq10gvMGxit3e5P&5I(LzryG4PoB1YP?>?E1-l`3n?;1-}0r+F|(2c=h zl>G8nL}ckOI&mt!e+7jbc-6TlftVZB`|L{3q|q;4bifvP?8CGX711nCNVEjlw{14L z9*gw$Ru7Mf9L1X1NoHYV{=mQm z@01ryZPke~hyWgPAez*1HPcPte4`Z*?*OBmf8PGKxnVxLdrU8*H}G02?lRb)K9TQ( zU@#@^2?uk^PCSH*ixN1{DGZp12~oI%foI?!#Wd$`-8{N3?cBd7_$wJfH6Ca$m%Do9 zhSdijz7J8u9fC>)Fv)`jq?c8S&a`&$yGLHye(pC%UYhzoyKtiXmd&v0=Jh^KZNtGx zA=1aA>5`tZLN7GKgGG0Qb&>Xl{NrUXNA#yg#a?_f+|9q`@bw%!o4%a)$N5iy7r!ca zpzKI^6Xz{#?%5Er>(1)3ZCX5cBEKX~t~l6PY|PpUAIDlSRww-gcu+i4L_>!7{B46n zOOLyVht$GdbKpo1na2G&%q=7rBlafB)O;f7f$5K9i`;I?ubWK@wn7w^oJQTqXyvg7+pxlu(i1xCY=Jj#j;dgE(WVuZTyWr9eBW!vr} zWR92W9ZQOfxsYm{8vckKY7_)EKwA981Yk=CRsV6;h&BI87j&MmGAADCdQ8I|CKz!f zo~~4JBeD~z2v~H2hpfVYbN3Erau5U5FESl}*Wl2+i<%HE*PmS$9@G}Er(994Ki|I% z--MWs<#8SwnDd0$bi=0RDcarroP=!TB}|>Wr+N$b<6iUVVX;f6?n+8j&qR=e!mSA4 zZk45z33hkj?tnZ!4px6AW&n6ieZ=mt5$&sgKJ(@Qvt~7ATy0_6S zu}#D9P+pN3a9f3)3dI|Y1nTyF7Y|^Xky>s5Xz+fKZKmm**E8icYl@mvcfAwO7Dgj6 zR*ZPB)J=q)S_3t(2fd&V^eqk3@(?gaoX~N1)E{t(F-~zg3-`7WQ7CR_v;C35(}|Se z%+N??i_bE@G}-u2QQ*|kZf1h$kVf>Y5c^GBmJx@QgcgfGZ8yfDU#<9k(^6dl#o@tV zJ3s83877V8O?l1)z`B}zQO_6eH{T>Kh3JBR$6L2;D;#7*qZ?W}k)4UxPtLEO*c^be zL%Ud?WelQ-uUiP)oxa>IesZ>D&$O2CV{6~W3l|Xq%}(iVYyTEjG6=}4b?(*~r=X z&+}M>Q$JbwNe*Zh!ybnIrNnlg2f)CG^t9q`lm9~K=x)*S;`m*uwaX)QUh+oY%(R|e zd9!5$??uJrP5A3?2yj~{b@76u)NIPl(qeGSYJ4FP@tnb;?y!B;!`3pduj|hKWDJx; zozQ(o)4DgWTjnift`suVGQ%_&S`J6%MHl%a87tP?>sqldioPZDjIPw4>%Wwtx{eFnVLAsR$&x(x5-tL=czGpT97Yq)q9EI^f z39$eKvLv1Vik}dXbHC^l-7!q`LJ>~-1sTo6h<;7AjY>jsBTMFFzJB?X8NQVO5q#`n(kAKdcrWF|2nWlZghB+ZxiIUdi4J5`8|W?1L0euf#K z6LU(GrBr{^A)wi)2uh1b)N=z!LTrX{1&kv_Da<*l-Y)z7_Vw7F>Y;W1A1c9^WjEz_GTZ_x-M&rxa#iC5e) z9ld%#%=8*UszgEMs;R=1@CnJ35eL&VmqR7xs=ehA=d@bSzt*G~PnWOp6iqlYQ+>C- zs_}ncN<2UlEU&`h$cb+P-UIJv{YK>_1!wLiCv!J2c09mQP&14?Ej?3GmfwchO>H?V zZQ?us5^oO+nkKnP``X*-S#uueXsA}E5dVrQk{(8D9iUR7SBWp0XuvD%dloz3gVfa> z)F1->l58(i!T?cScx4P@#$*Z|P_=8KmYaYZgtotJ%x?1$nRmSY_+d`5*Ny#|=PnXA7t>EN!Vo1z}s{8dJBGs3#jO+15(PA)`Rq7yxI>q$n zPHcDDUEfZ?mf}%QDLdlWnhC~f@jebc2t^@_JsU^w=AEuI+*r$w~rv6-@)loP1 zyWs+LXn7q`bFoa=Ya-LaZqp>pX$Rh{lQDr zXrWC#cPJ|q5MQffq^Q_zIj)Zf{eTVTOtaH=whWr~KuW}70&_Cz_H?)Dh*4u!NGE<( zJ@85%l)q@x(qrCp{j2OPUB);ah0xGK1i-5F@4(`Hk;h5$=qN9zNHL-doh`v>k$M02 zZkE+;2#Y%vPz&|H$^$$ESZ@FT{=-%vfUk4pY!$pbJbU|03^X+K3=H7>1|0((c=n;? zG(ig0z9v042&Eg4th=y4;MWrCszqeypn?ea||2CiZrrFht|JI z^z%wl!IwGhagzhJT;V2S4ik`&>~YJ|G82=t7U5qj8jPGt@XpI~R&0#Jbt1|OpjK9a z|7-CD$*UzJm!;mxToXmoSL4f$l|~V%f0L4`qfplh--EX8-$82#f(`IKdJ44!#rN9l zv(_xp`gjY@7s5P(@jC8rvl~|TRN`NMjx^3nXUC80#}AU6E=ym()gTuR2S0WPivoU* zps=rvYHI?(D=3POc*_tf41oiO9S6QH;wZ24KcT3hj7S7R9-=2E)E%p$AQ?j-0#yhK52`4jRjybh74wfRZ zCnQaF1Ey!9sDkk9fkWtg#7M!PVn)gbKzp0|@X?6lTS@7#{2GY1 zh)EGb*w!l04}d+XNW`|^^@5g#^!Z(fWgZ>gD1kYbsy;Q`=QHV*m9Kao=ee9whfU;L5L%LWy4sA zEVyju4i;ZKREbn;M};(k6Id8S&?tY5DN%@O^W3>d2R(h8=vCV_^grH})en}vrZAih+|04avilagS!W*E z)$pTxfy3BBu35t8ss;22QKAOaE-lT>Rs?s)@0~*o2-d~OQ_$2%5gkf&=a-WRE4NXd zNVY(OFd(Lkn9%?9!g?BMA*3$0N3IXccHw;B^cP0)|50 z4irU-D49)jC1pnQcb#+X5=-A=Xd6dUtvk~P2f&mRWN8W>Rp{l80Kx9xoAj&HMFmIa zu;q@ooU?LGHvZYCGAX5XLrBPGC1kP-x(u$Ht~({bh>M`Rja9SGp8w&q*jG0hIbUUt z5qnd;IhTDN{#s;#syGjC+oLVQt@O$K$tYhsjZYX2mss7ba@`wmqj zXHLE@m7N*)J_K(8M`*_z-vmRz7cHG5xju~Ycix?g<=@7#dg>0E;z`OGOV=lf1w;)C zI9abxO``pY=r8DSWOSy#$x!4Cn$USe}F| z*iUnmU(zV-jQ;&`m{arGawsne|0(6RewT+hPRka6qari$Z#04FkF!YzV-%SB6Yeg67c8!N6a_-@D&&!Oh$K_C%Hi>M3W% z8c87>1DXs@5)g3&jAi(b<(*`BJ6otk_%HjG@QX!8_-l z|I$nXsIygSSCZEHwCgETRjy#c6~YRtH26O+0Vc5^z{lLwa!8it>11qzl-$i9eeFIcsxt^n5b>!~?HigT>*rQr<&*s*cZqsa}j znfCqlmfNV4pQ%yT-gkDlYF%CzHiGz@^KbG`C`B=beD_0oZKCeX!`;!x0)OEWDifMD zbqA97*(>;%3yyWiu(nJlwt5VY`@70QR{LM<^|BSoNAF)q_m`mWxqFOXJ7=&sE_CZG zby!(9R+G(Cn+H~tVx5_P99=h=8Q1)daUAiMdC8%TB$47MA_OsD`9%1#ZdE7Ym!{sY z^bq~{eOcSkbFsUa*fV3L_RFWi3s3RXymoSjZN8x}096a4HWK zAtet;bMIuS01F&3YSGk`E&dX59d+D>ln+vhVx0**c=z|dFCwI*Dc5)MoiwU3z#Eaa z$cX#xI@dw3u3Wy@4vnV0Y1=HR!dtQ#CWWg5kIG#~38l_%7a@1uN`-nSW>o(Nspohh zNm^yH$=uQ0k?7R%P(4to&w6jGG#;1Nxxpyv2=joqMG%Yl`-$>Q#I&9+DAqbvxzc42 z4+YGfD3K{g6PU(El2^J5{u8Ni#9S!yDduCdQae&%UKb~fhvB~Pa?p_VRX<@vyi=37 zaAjxibz3@*#{`F+?~?Z}vf*d~N)=`m@c&SGlaMEcPrb^<@ts{yF({E>40$xYZiNK> zh!&M#oMC&efNA-UtdkKBr;(Py#()eTHwS$3HWbajykZZ8R!v-1R1GKiucP_~OM;%x zFHbk8tK!VC4;3j7aT6YoI~&N%wBMGgf6L@v*XfsU12|Im(%fIt+x`1w@JjG=9*W~O zU47So=x3-ds#HrmX;tYgqMUpMJsGTUw{o1tka&PtjWf@wY1R+1A#sx-0|Toa6-e|u zs35JG1BJ1Ps>)4})j-}`3SA7R2QXY%bxNmI`&GJ_X$=8H-*FdfuEZb#C2G-7;{;UU z{}eJqxMsTy3$QtHBF--viMw>j!?&uZGuaq>*JL=5V4BUKDfh|3x`6HBvca{Z&8iYv zjre42YAzs7R(K0iK{Y${+sNOLn@-3puE@ZTO;Qu8*$AO{bqDIsqBMs6y4>fdUf!R| zdcN^?^4Q&C9rN%ov7%W|RJ%S$3F}0f4&uV;a;||R>r^<9-*G+aEvx957($_%?PPEE z98g?%02xF|ChtkQIQLmD8aO%;R_RqWvitS1Spm`if~1NNTET>($cG z!dR=f^`KU$jN4V<0Vf%`K-S0C6Pko9%c4^MVf;|M!|{LxP@4pSQCNr&G@afb`!Bva z+-Z=2eH}NQ?~~6pSg+$m*C@kH{?n2NUS9(2rw#Lb`QFGU(}Z>HKt2l<>%3l@2EMHl z$0+6g0HJ|NG=&p89$VbL(X{@Db<$OW8|K(#G?Eu~W%_ZxAMT?-60g7b2X)%i45B&9 z78$dLICNjjn&wmE6>*(?t)Kv-j2%(E+?orU(ftw%@P~#>a!V;t2;{$}(|)b*i2M?H z`#vlwb9M8t1}KvApt4A#l#l^I&_K*gY`h!^qo~`I&0s2GC@Ab#$eBL@gB9rt)@aa= z$#{cXfq3J4P#=PomDg3Mj{zG~hRW^b*=kKeY^YA#4D-auX=Z%C*k-rb?$mz=g4@HC zV3V4@s^8?P-VrZgk$wiACMJZQ|^gbqw+&h{BT1#sEq%$TzrRj^)Hz z`-6gi$NJn|>5*iG|4nKleYmr{oUxq?IL)O$xz-Mw6H+c$-#6MQ&Hr0Q=)VaL3HzJ9 z&;G=9uvPd{iwDHo8j8srZWL8aZeuA^p z@K+rW!G1#mENlP6a<`c5`lcBRWnOAq8qH)+nT}>eI#rz$Wi9YnPhGwxhx$~owv+#Q z%=G*sEU(1PD8xa6s%?-PJ_u~=2(jw#`m(yJjLs2#R*KwLGWkUmdwe$iNh^-({Q~gL zLyf(W?ww-o03(Ne{vPAlF!Chd*}4xoQi`8fdOKIhEhm;cI@fbZ>><4>r5=}?f1@X1 z9|dFa94ZlgMbUoH%k`zH?2iwCzQ=`FW@VfGOMM5l_0pMM#BOhBF4G6GB?gn8z$bj) zg4#b0i+C4^w|^zMGfz?tsM##ftbiPa6at>kUKXhfjP|KN+QLwYMub3aeGn#u4H?9z zpP#^v?A*vw{Xp()xS{k*If&Xn|A(88XEYo8-a+Xy-hqC<>@J|#0XqfJ+rD)&zFUb93h z+nXE4sG~+wsfh^2g>U;0cqyS0QX8y{72L1RDS#dSjrO(bPop8*XJt=A+K(-ga&-&o z8v8s7V2K!?3eThp8s4}9$}jX=it7?AKhwVV?h>;Y0qNbqGuUMxm7pi%NK| z@puM_r~@+1@+-g*wTeDFtta_52{+rq+b;F@Og;u4=FL~ayr-}aAD&;YxP)m!==eC9#>7s113@pRGp!Gg;939owa`<_8z(Cy-RE9PbBiI|<=r?bo~1UFHf9DR%$ zGSn(^VGJgr&%drz@q5X&gb$PB`+|7I#3;3{MoCX|3aR>uqr+&Qgm$KMfPs-G+*pcL zOdIkyJP3=(GnE*3xHla8q528zhqb&XW`!}f^7%_gSdv^ZWWd!NMs4IdCSZc0n5Q*w zQsUr#RG(h-al}NF*ihk%GaTW7)~znQpSH^Y4xtb+RGb=6OIia``s5n$Zqm>MdEhzY z7}rSsQWdGPmNp%i38Kmcc6w4eGO8IVi_>b4p><)_( z-&>YiD>UFu7LBb`m?y?1Y#8P~F}ZrEDNZisss`ajsjABYa{1ZqxT&eRrdVyj{#bi| zMI?@LgD~Z0F~Xv&H}2>T?n^(v?wKQ+mr?Q5954fgwt`POnWJc2gd^!3@r2otx};u+J#&4x z8u9fYuDmfxtHGs;&8~@a$YR?E*_%l#OcnDzfn4Wj=iEg*uW1$O;EzPy~^b`1tj4vw>nz2nns zu#vQ&<_{&n zpuU#7{%cg~%^B?h-o;QdjEbeHI#yBxp-~hx=?*7QV?47<4 z56_n$-mwb9FhM6irSgXyKXP<<2;a|A`y}F7^w`TM-Cv)ufbenr=wvp5Z&3e@Eo?+M z!~tbk=dLR&fd!k(-+T~q_dfs}d=ce#G`PXo`QFfKRLR15E&D$KV4hfNoOhhpeHvpYOD3L;<{dzI7+RnSMG} zk>7|h|E?z+a~bF(`iUPb6`_lb*9a(it^?<9HAED2#X+zgog9z*a&vEXBk#A~2O_5T zmsfSFteT?*dFiJ9XmQ-Ci#k|z6y$GjfO)gLcgJC;v|;;CHzu;rT}7#ROf>*abICQyYNma~`usr-$gk40LB{w}l*xb1 zUwf4{gs%wY0uvJV$xTNE5=>sICK!n|GwoH4 zlPLcU`R@cPQKe7C{Vo{O?O$e%dttFskn?*fv zToY);cxFw!`Z_=j8#+u1eqY-hH!b(qF!|kO#8c<>BFCFaCU>P_8QQO-jrevKbko|0V%%bs5(Was)L zqKnJ}Z?#R2ECOTBtnC>nMPM4AAjLxaFhP@~zI1$=md&Vlk_uS6JmE zAevEUX}PC?cpiO$#kl5lqL1*wywKMBxHgSC3Yb52sSWdtn2oUYjy5(Ah;wYOGDx$O zWFT6-e_P@_SE(})o}RSn?b5AjV*Tg=J&)hTs*m_y8dsC@ajAA`aD3Bi5v5LhE@G^P zIv1_>AVxGglh((Y3<~m3Jy&{g|@jK)LW?uy597fHG*4s&ZyEz?RtIKV^}r> zH-tK1;vKn}`!E(}5Xkq^+7k@(PD_Ua2@Pk{DXvtil3|Dzb=RF=G5E!yTfdBqFRwx4 z^ZecLk;@smiQ1EC!-2hG`B@RDveP9=j+GPJnTwMpID7h}&&aEEuHI$Z0?{Qtqn3^d z6jES@g^~dL3OdhUC-sR-hnh&#)I!H@DY)DJXlS0?7u@N3zaI8&-kN@=iqboKf1>9m z6z?jJaUd)7b^lwTG+K%-uRvXYv0a*P6cp)oCsg}1LjE3nq0`+#?3tU>4Er_C;ZZ!a zUr)_DaZl!H&i;xHD{S=emeZSFLlvh%vJ?Zxbe68T6xu9w zmvR39D>IB~Ct`uwBiGj~;t+0jUrHfA)w=vLfyJ&E^H>H1l1hZA3w8&O&q;k;q|AZ( z?H|a?<^*vxa{uHAZ-sjN%+nuVQ$2#{xB<&CAWT3exX~iouAX(Hhr+vIykBRb%Kwx@ zPs<~UYwo+NbI(q5t4r*pj~nRbW4~}uIgCsA?!55>zQ%x}!;TT}u|xcgl2w?L(-#GO zI@)nYTc;n6XI`Moj?&JO$odShxE*>XLY_yrzTAxJk$-J*kb@mhME!@0V&yIImkXDa zDrPDIjt9ze;APGUhX8zfG&9d(PciY*%mV|KzQa)=uHZ%X3*R7$(4S|$%tt!X6$`9M z1z)Ko!E`FTtYq+s+3%usVpy|m=135#k4>9o2JDKxN{^6%Vcb0^+K|%`Dz>(4^n~oe zTTHnGo59hsSm3CfTJPkUTn2-#rgO19uP^?JhSH_4K`xtD2$RkF72Z@Y{s#aLw+apg z$7;UuvfT>VOW#+ycyQ%m8M9GOv%SG-yLvTLDq!A2I#@xYP>s571_Ud?0!ZVNG`aQ} znPSNseLuE(CP&D!wVoYYrY*?n(zNiaI00|pGLe7fc>`;h*IVUc)0!LIH*B%famPp5 z-L^*eROK;bZPMv?qIb1a)4C_>5>^1weA>uYl8b^qYNw~SJR~OLWE3G zz+coMr>uGUUoibw0QA8CNS{v~Ue1`bnw6s2WyKP_64Z+JYkds(@GgYwEP`%3ptlP@ zw90GVC#i_@>d+F2er*$W!Jf*&Y<2qJwaFgq5k<|#WHki<{97THBGvv8|H3(^a^b$U z*E*)-iFv3zU*mZ#{lV+})Ms97ZeIpK>=Bf{=dw{xQUt^~b&O1waid${g7Kvl$s!Np zhyTW$w^xcQ4M@<}CFxe$FKp3$@e?jrFr*O2H46^%p}n~4Ae4q-yB3<5o_`?F`{ z-$8@^9Lc)7>s%?5Rb=(>aZd2Caw>fBmq3vyGe^L8%OqNTr>cuJt~JHBA^E%srI#h$ zxS}Gn?PfObi4UEW7VjUhabD1<4fxo@b}R2dE@X+8l>oHrA4Mg$7W-i1l3GRbbg&bcp&U5zjtNwMK}#M5Mb@LguUa z{n%R0$3(NKXa&Q9#a7UU0n+4mK2S`mCN6S=yGUr?vab=f($|2cPw9f3a*(Gdx^3dm zDFX5r6nW@fs}#Jv5Byyb=(0iwGLWRDtZ$twVf@5fgt9R0%=s6Q~2nq5OG#Lmw@&BM0^icaq74g8#rJ(QmMb1o)EX)vG zf&TtU(^%OYN6#Xk$sfH_98WAaBEXkg1V*xn5dWbA#7W^pAVo_MGzo~LoADGHhdNj* zwusHN8Fd+O6x6pd2c7HQh)&|Rq51Sa80`Ly`;o@)S`Ux_^8+>z=7x?=0!e}Mb_7dR zoRN($ye+B3`@{%-ES1EcJT6@E1UrEM&X}c|ugM;?Wd=FGa0WpDQ!Rs2-FpFGX!hZ3 zW^+kX>(pBrqs6PfnK#*BV_)Mo*DpTlroz~Wmo#u?D5D!5vPKRc*2x8OaHm>SZzAd` zZE~hz2STgz^r?W^_U|FloGWqsWF=zsxyorl!5UW`K{HE{lpMHtFNii+!Lg_(#a+_y z{P}%|ezWZ@Ag)Qb)!9S2gE;QTcV)_JxK}Yp#fV5GK*}3)H4_{c(8l<)pyLmSVk~d^ z3>j}U`#Y0g?{#MJ))#vQ`!K@kobDEM0so+be+jw2=gZ4@jFvKRD8*Jkc$*wBbJL%B zGtLJP?F`ZyYbK?9ir#;kUZKdABn2{M>G0gQ`-m>axMT?Np+|M0`Z&qU6kfV_ML0NG z4A=91Fa%y|vPZ}HVCss_4HYXKwUEG(7Da~cNaa<}ncU2WCI=FN&d7jOg*Qi*`pJo( z4xW5JGb0dlruEE_8L_--u6#fHchJ>(yh^B~Y+xIl^AK6Y{&F0J)%#dK zAk2CO!8C!NNpcBgU$WshcP$8(qVw|XN*$*7^QwHtbCL`>IILTy2Sq}|6b@jT7W$!B zO5+$d^%VdHwnfrJSGaT_$FiIxal7vBo#ADt-gd|2*6OBHJ=YHZm@bJNX#+?z(Xart zxSU#aa#1PQ!q%RsW4H)Oz;1fv$;r~|u3y*C?h=Ho`}sBxaFBYyGG&lKCkIb&3}M39 zzgj29D<8IhPuI*D7%Tkz;7VYmz-ACT$?|$lwguxpQoi*+;pFj{<>CSq2n6XeYh--} zZD1=FCxD}M*X&%3@Aa-Ny!=cA*f+|)szcv>Nf?ek=a`@3qA1EBpL!LFo4n=zt2r)Dtw}lITk|n@c-=^Fm$JrXFkAxiYWZlDvnkz3QkR;$`;b}W_bjJAUJ3lL*!{WL#P`MwD0;r-| z5y(!A;1@Y>S@y-8Z^3`e-B;jPhB}uM;KRTY?e;nD$EL@t(N~ZY(_5g38szYNd|;j< zn6DPI`Q6+USu~nR(W=hUw?%W`bbJeOzh&Y-g5dyPjYZv^V<&nQcXQ8@Sc@Q^hL6c} zIxQK$)2nPxa3;0;qCMmn)IrpQ_J7MiAs$j9%Wn3g;g9l)$lqX(Q{=)2Cq z@KB#%z&1_(v4-P3z3am%e-O_-8XjebBB?T)?2OeCcN#Z{J{W@T&K*GVNAA4K%=7TY z-m243Prd-cmuLQCC7R=3< z{+CS&@ccj30ST-+q_>M}2=Q_8S!;ZTssCBGqe}lo0CelY^E5z&nFoCW8h;+scJ|Z9_AKzP zI_rFS)I2OZd!~WE3`mIc#FBL!Wx6(`JL0joZAtg2GDp6&La0{FWhKb`>g{qjRmbps=qKo&pXJpaQo?FWO9nff(As>^U z3NF-5Xi{yg1a@n&--9aTyZ5|kbRm3*{a_U=1)J}WmCE@S@9veoH0(^ZI!wl%NgHii+niH@vE?AQ5YBKI# zY+{Q1d6{M5V89+8&HtP_X1{0VY*jgW=y@@ZU1Wg823$Bndf{6K)Pz1y690nsh7EQ< zW?1_!+R9L*Hy{5u&mA6#*McU{i?vrBe$j}04#;b9R}b*c&INfmhBnJy7BDwQjjDUZ z80o0j(d!G7#|A(+;6Nvri^zMNdc1c6#}>NJ2p- z{WEo!%NF9B%`=#n5C+_yzJ>W390Onzr5(hr@Xpd#xiw|e7_vWZhJSFBnmAxVMY9SU z?`z&DM1SM4vIgY;RsbC2Z0G#B^6|pcc7PKMkEpvwwc@3IJ#J#WwFZr#ou79(YEkBFQA*$>k<7nvhKr+cBv24beE`uj$b^cKY4uT~i}TC$p-Ke@G_b~63`luxF0kESzWP!KA2i}67Z)FDD%U1N&qUb&&p{P?n; zuFe)M3tRDMsqnsDwi>5*&Asy^YCli71#J$$Xh*F91bplusze9OJe&8#aqj6;JAo>? z!r%4-Z1Cwy2{2l{zLfTos^2!M1?T___$8s**|9dgg2li4f-n~Erm+2RyB-+{D!^jI z1m2soAoKEd72NqTq5vW-gyblOyZ4_W7!8JZiXi;&86Nr4HO#i9Pb4R~Q`&h`b<0|n&7@$E4@C+3ba1m^z4l{w3a zks+SbG>EA0vf3bz#zLSAbBpXc%bd+V#uMBsLN6+X=VlG&WZ9<@(($9V#PznxZ8P8J zfs78UukTLU^)%UKr>%o_P|g3Y>f8k>4E=yglTsyRE74Lz_{;}zv?MFTM$FoLAN4Nf zK6R|VE)NcH{GqP$7CVeGNRItZ`ItL#46X_>0;j>q`n`hjbQ)MidRhOd%dHR@#;zw6 zLzcZ-8@l6uEY{L|e=@vflrDk*@^`_i{++Y~Kg8%x=rxF;T&XZSAOSdm0hPlvK%9b9+US$avsp)?L za3yX(ly;oMm&h6-FM%@rIu887@q}HuMBfIKaiBzLFYZTM2t=5JDTj< zvcySJU=N;Atqr>l6x?cSr+%Yc(=xPt|`5D!Va$!$)34_V*+i03PMHXP1o~j05G5vne@O`Izzss;hg0za=%2koraTfRq3jb*j@qkzG!6v*yV_jBEPCD@ z>u2+`UhOD*JXkfwE~fx2YB4kaT-1yC`T&@)6W_8y)`o7{+MAm=bT8AX>O*3|G`z9p zO?j$SH=FH%>8@*5f31O>vf}d|`z12}`4NmF``aLOD*i2dM!4WLJl^b(W2VVF+Zh?b z?nY3u`flf{V&!{1_DG% zJh#-%MB3rP%Mx|mS3&b)dHto2QaJ4(KpOhFzebVpcP9(c#orZQ_2~Qkj8BQTSmOmd zmlXnR{K$6d*t0#7rdA$Boa#E^DP34mB`*^;gd_%R8(VRM7%XneojD)TKqwy$!)b;b-RtjfH=UTb|;4 z{*pG#XWKXDAlg0==Kl?L1~_EIr~W{9fO4g<8BA#R1NqC~bP6F}Uiwceub&8LXG^GXX@OmtaH&-X#DT0B`>CA|WcvMjao01sbi)GlYW5UdtrGI>Vh zUx|a}t!kWS9m4SfjZabSRb}g*-7s&Lls=mk4UH&ZZ7sI&`z$KPE5dLxpacNzGm{rb z>Fv{r%p7b6Sy95=QB}jOXNVGC@BYTpH}qN0CUor`mD5XvhuNDWoA#z}bL7;nrIUj0a+3=sQ+ZWtrA zaBZ1pzK*C+@r*w!62{~fe@`Jn-YzLFxycVDob~U}jd`_0QoSz%g%zH#KHdRD%XjRY z8-H&7T%HhVI{%F4Wx%yBojcmB31ohaBO?G8k*X%5v&-ZcJuuU2f0d@hK#4K-yYRnF z?)M3Wb*(~ymRg`p*A96-%N1bla&7tT!KmF4VH zHMfr#T!POyxtHf)xh38zR9?sJ-amUDdA^TKKTdq?@?^!OrMdF5k7sjJfjnbP#ylmi z{I+9E9=v42+|biDcIidBIr2dGA9>wpVUV4^>7!ONpu(Fd?hMJN97E;YKDO%pz|u5g z;xN=j;L@giq1%M^vzBH*Q;7gw1`&{@jElVAyS+8^BCTzhILFB~?TWK{l@ zxzRfj_Srt8 z9u9BPs=ox`I?5Yvbzil;5*7lY>eSxigkv*O_p!mT0d^=gAr340r3*f-)YZdm>?iWY z{X%;4_nAo{M9bN;K35%%RLc%bb$>NyLjhM3JLD-VTNEf#rqm+hLb+Uoilqx1eZ!bL zL&xVpx!MVwS4V`FkXJsZA)4|hcp!14?3RM%01-@@7ATyk(-6PoU%CYk?-m+FbX|w?A?r zs(Qe3oUnDZOv1Rf)-PA+`xUEXi^PTEj`&N$?1pTGqX$o z7BAP<@zn zQlG-_aQjC`UD%UDcTk7Gge%#rdXbIEGvOCjv!-zEJP97yYDTSx5_#|--K%Nb&@8rZ zXKSs@BC_(N;H7!}`Pa;RTHUPP?6AorcNwpB#3pS~;uZG!%aP&`oZP}))iA_8N19NH5*!kL{OzW@}Eshv^M+6zp?^Bzs*%A_pZP*{G{#SMgZumdh0U0bi zIGMLJYPS*3~Uy{-whX)k(m0-6^YWQW{sm5 zvzvNY@KSfH8n?tJZTdv~<01CjO2L5vK=IO@;)~vs&KbcFVKhFv<8Q_f*kSA#80 zr@|y9PF{?_O|J&}88KLM6wniCRurq2xUCQv$w4#`yzgs4L$5!{nSUM}! zU%2E5WjdhXAZoiKggeUW2g!)X>eY^=Dhj2!cRnArle`vd-@kOMGzEiY*K*GU!CSC= zZv}t&RTQSg%s853c|20TzM4$VqN%J5uj~Za+1V{z&f$$Icg*5q2kX)xw@(X4nH5?; zgMiUghqF?!yyf%ew#V-><;YX$7WF;9ECAknEh|96u>tsRHHSfGITMU+TYgW-vSx|G z1Dmc7zuf)G8+h%&Keox6R}=eN+T^S0$v8}$+L?~AvH_}+HzsYZIgy7#PjDT0XL`@L zV7-)eLll#tbIysD5z3+?^T7<|QhYNqd48W|Qx7Eur*^ZCp6mt!MDy5++eY5+yH#oD zoU+4r=%uVvL`U#^wIvKPyV%zHCab6vo%_?brkE~!eoEHZp9C;H>rAvEBH@5EqgR+j z(P-;Dq6`h)ZK&ZLBQJG?p=6oU-AU`e=E|K*Td`#V4bVZ)SC0=Xm5#nhyu~cMS;H$< z%^L$A++;HcnF9vE{SXn``VW}&#u_6TwbOz{^3wxzpMT2(OValC+%J;%>%nQ8_HXXu zZhq!i&d@1v8`T|nD;H_tR*<8Cj5sQm$z(o@;DPsm;Jde=W}0W+7!qt?Sa8hhFQcR; z&SY>LH7Fij2yI_4Nn3xOS27taBsz3NWYb$~JW)gPU7dpeQc}2GqS$Bq1iazs(n~{I z^M>W?!%pi6VV|TZp|UJM(jFytYbs%%)B^=bpq^HRzfyGo^0EzPdsI}^=djb- zq#?Ry%sL(62ho)#Lt5+Lt=mh%5q0jEUwUdA2g$S+0DdghGXPvc1NJSiHoE~I(1Nil z+!`H{o$^EK*uQ@se#`c-9N#|o^#{`1t101c^4{F_9hvK`>>~de5FycRFM~CH5!bAx zE2z0^CssP;h@cMt%Pf9xVhhM>p-Q z9=u^d6a}YM#mEY}h=oi#M`c)_j&~j-ZSE6jL zLonBi-O42^5B7rfyjh0CBnVYfn_OIH$XY`rkEj4~jlc;JYpJ#HJY~=g_ti^KyEKSs zhS4W=Umbfvg@STYi>yU87JgsiJ!WFO@_ug(T{&)fiL2Uu--}Na)_1A#^%H}<2r_Xa zQ3d{MjSGcDX98$%*a!<>BpRx!%K5Ffim1@14qcz#%=M`)4-NX6n!4@K_x8PwQT5{k za+bcb?v&>z?_HmCQE;y-O>0va3jaO_4?jjl4Klemx&6C+?x16oRtl{dHVly-+6lskKWQ z?+Tep>O)fnt-}mx3xiE@%5oeahDb%%KF|vkU z&d%FV6=hGr^3?^E%a}_1cF{UXkH1I;E4Ty_gby+*9=hnpSC z&f&Vszy;lv>k*LB@2*CIs$J;{Lrx%z-}9qrIDkG2&23KJ81uX@NNmNkybxuIx3}uJ z$X-2UGDFY)%z3V&T!al3Z**es6m(Rc83E|M#an6V9(v)`j0B0+RmRK==OTtb%+x;V zd#79zE z(E#i>N-5 zh9e{M4Z+E5A{2MmcC@$BhtLIyO4i5FRpdK+-QFzYT&mW$6d&jkpN-5}y#iqt^3FZQ z1%IA>&{kkOvqJObeKMzMv&Nv$26xbvr2qv09(*ka0+;~s-G(Q_*aR@CYDXs%6QxN- zKTo~#>aFt&X|~SFf4g5ecK@IA#Wr`vX7${>m zPaD>FZAW+NIE@AK9Sef6F0k(R(Iw5&u$j#>A7hw83?|rBh)hRz7Dv>i6WkdC+hsCFp@FLK*oK6vs0mYeci{Gu2lV5h=dW)|d0>99B`>^^{J5q3Xfr0( ztulSXA?Ba6$EZDFSzGbqv*uR}GkJO!U}l1A-39K%rBoh;XGV1(hb|p{V9zu|S|vst z9lf1wt~3~tGsdb%>k_8va!+f*t;F|(d}I<&S_mX9=USEGN=B%!sxs!!S~=Jr+%Ba` z=FXj-;HA61e@t<#u5p(Ay8GiMYS?3z=Aeem=Vy^wNTP-SW4hX2MU+x4J`1$K=kQw* z@XgE^=Y#}^`0D?D?-#(;crU!WSFbh%_KG#D0C)irYPk3Ib6zjej%;;HagA=Qq^$*j zaeicE5n-nYE>=B4)bJgTkam-V{wWH;c4HC8Ela$r8MOc|eE6(v!ooJ0i2;PI)@l z7G-zzo+HqM;xCOB3v}jO}@>< zaB&_??HFIOCl-C?NG6&U-Oo57zSPaOD*%jQ1-(K63A9fRAYGduY{_qo7gx6tFL#yw zEA-968cE3C1fs9FS|>s56&i1pBktl8zBMyvFx zJBuH-xx=R-&h;gp zyKxXbu`yQlIc-ccQ7|W4)<}}Cp~y#BzwVbA0emjK6hJosL2IG_pwgJlapM||h>73h zXleO5zkF~dspYo?EuIpM9jAsfdl!0YIY*n@?UHa9Y$kOSM#+elfmsR1|KBDk7g1L+ z%uHs~vE@2CP3!FUswmoG*+pwThanBQ#w9`F0sEYm6Q7F!lA2|W!N?Bip#1>=5Wtw$ zv|{3XrOV>7_8F|q%+3v3?)c`5^Va!9{;ccZ`1D@u{Ylk(ho2d~FUiff<(^Ir8Fi#< zgjm$ro~K7|=0=zPOr)j8S<>+VlKIWs_hri}FuJ)tbU3**hgGCT;z5#rE?ilPF|)jc zSSRXD`aKEEUNCOu45uI}s+P!fidrwI!y%ai#w?OCScyoq?tgN&_0B2m!h-J%hj&hw zZPm`RqwBbRdMTJuPAjr55oS@%e*SPoA~9klbRUPj*E`zw5HaG`bjUC)B*xvc3`iG< zfF(}}#WTn@z7yTYL{sI7wQ11KgWmwOS|KqJgbUXFeG_nH{H)!VDp91`$&yT2-s{p- z+>Ft+cXbP#Mb-g?E=AO|oj{5sVg5h>7d%`Q)^&|1PFL?Bw7+hv{RbPH;cOg!c8ijw z0z@iH0dU3)tl0qEi2VWg_iOCxVg=<6C9zHG`D7yMm8AzFAI*tb5-)}JuLE=@^)#~; zfzstP|8xKy+@rUqr)j1bFY}Jw&u$pvUtjQa)l+`)1+_Nv)A(JPi@zuRQ*!!lFGd;w zbRKnjCXE2V?*tG7o6^{LGbwAeahi{2C%ee;v3Lxhdu*X0;*+a}U z!H@!cCPhRZCEp}y|0RG5sWs-!Or>F#ETw;BTgtJWeQ=EwKX@slX&1pVely>v(|b2r z3kFYTXHx(Ke%As300000S?U3I4gdfENN~vLH#IdhEGsoNG&3|XFe)@MHty*vG%++b zHZn3eGvq2PFgGDY%Wm&2)0;=-G2(8QhjUqFfNT7 z#r{d5;({>ll)5b@Q$yYCb>fZ5v=DcTOpN#PQ@8f_0fZt^6i6{9;Qh}5R7yJE*^J^A z!%r8ih$uIOZi^7d^zG(4q5yBI)eCv6R9=JXmL!3H#*5kT>zXyDJd{Q%BF^P?wdeLE(}DXWUj|An3vXl z+2jc@8S8UZ6~t9neWqh-0E9l7V4x7Ll1|pT=>Xy*S{PN-+T3ZaH+7YNWz7KWS*FQp66_US*~FTd8P@aF)KWLsjwx z$qMc@ZYHDUI>~;s-Ugb*r~rg!Q3!&u%8lF}Kst6^K(&@rc4Kv%_e0h$GQ23mV5{I< z_LV&Ob*k& zp$gSZmhuq?eyK`nYC6{OMYK-LPb_PSiOV5eAGt3}Nk>E@#X zylNHEk*YZ&GF)FK0a{E_OgjQ*&-9STJ{*qYjjO(v!|CGuV~Imgtsqk7?|}AmN}#to z%uMdvzpd*I3g3Rvol% ztp@-cq;>$PsJ4Fq^Rl1aW?7xIC2nnHXJqUcG3M7;St?s;!yc0;)3`-GX?ECOSdR(- zT5F9v0>lJVBmQ^0rt@?b!U~xLOsc99=VHicjlP__{&->D<>&s>=*Gxc^N(2el863Z z&#aR9ea2{g!@l8BJ2nlRAhK^^qhuEm;uqZ7py6FvJhjjo>ty{vSHn%)BM?hS)!sfJ z?!9EtOvq`=IX=UEn`E-Fgm`H_28J9|raFO?RoS-=WPhhtbN1S_)&3wB{PQ}0J1BY5 z?BSCU#_fA15GFXe>S{pxb&A5mBSKU^+kZk}C}bPc%;-Oq)0`usmF{F?o|IS+(#%7h z`@2%%x7fTbk40%TjaIU^FmON9`CTea#d~=SJP4NiHK&JM{9q*TKfgGd`)D*G1qG9- zpG3KcUTH-*p3zzTdi@iws{G$a*8H)5*gln2itW$*33Kmqn7?+2!)kF_W^B2gAuFPz zprehTxa=U2+pgGlQANm65_nvn&lPjOOX|fN=MFDn zacCpUVd|v!Sz|F@c+c9irnbnlx?G4!6VTu^*5Yc5_sSng>O&;CPZPjH<+6p7?n(#ijTjMzCRN z<1Gb@QYj3o3OAsY>QF(IAOOTx88i`S zg4gEwH#1PB*t*hn^R({oYL3)?jCP%a^xbckYHds0m{Fyd3bWE-PUS@bWJYxm1PHJ@ zKo$1~9M>VKm8IJhTSB!hrXd!#MRa{4{@{~YBPquL&fo9hFSKy#T?2$N1yp3A6oDbs z{}%z}CU1A7p`qcpwYM?|Up=uYgU|6qeO?4|G{vH-oa1;uF-(hbj}ZMP3;>iOX#^uc zLH#X(O0jtn+fzp3)xO?OES?tp?wu4%PuF|-{S3*lxkAOCh;Y%7?w{N%0J2Io69&W% z0NuMP#`87LwdfaOz5Zvshz>HBcq>{P4%t>6^y~uNk_BrVbaeRG)lUQHUE>I%Uz^sD`+_z;H(@az1uu>y zBdgYhRnvts!m3rJC1c)KQa^mCn30QG_B%u?GKC~rT%KB2OP^ZQ-pRhS6U+#*#ms&8 z!c~~^gIa`D65-q=E8++FM8eHJ{zNm@B!7J7JpwQ-ZIPGxd4+<2k# z-=;;jG>xH})w$ZK0gPG&YywdQOdEjXphf{0>O^~_(#k}xu6YcXch?6{ue|I-o7Hz( zaM}%&W(6#;WCSgfEdW=>{Q_85XLimk<43nDuArK(a?ZNRoJmq)=)6By8%6=VUNP|j z$S|LO+(22yb4^o?b2IvHd-PYW&fP-y^aThhWV@D8subC;(#Iiy@}3QpYJmtW-z#Kb z2gnkW6DaONwYqOvR%xN4`BVA)m*w6+?=|(`K6jvcmzLl>^@WV&v1YY_ zkhTK;MF43vV?#dETXRma*1OB_l6}zj;0+c3WFa3?^RD%T@Lvkmf&6U&Sgip>5=Aew zvy3RBD8HNn71d|c88?-QYhJ(p8=$FJr{9M-GP+$Co!&TB>>(N#8td$%N0(wz>i9DS zBmjgSJs2p-4&?b#2jCKY*jScUBvr05d8RfCa~>J6U<&Uh!LO!QY%>f1j2;C5q)CG$ z_}2v7@afz*WJOVz8Kd3W_SVfu#yYULdvyk8`655U8*TqWW_{X0-RFalpqb zJ??^IJlg`FBd6liEoaQA&uG&60if=S@l0eliNpI}P7(l=P6-O!zB)pb9Uu$a3pjF# zzW#keQ!XM8myY;6ZaEK%!0ib#>oyxDCfq`W&FPz<*eeQbCN&IHkpoGXpAv8!M@`F+ zlR(4kI6Hlh*}1Sq{J|-`Ewo%q-Bd^bbS@>$>d2svMf)TPL?tuB0)D+j;X%6&qS@P? z9L}JiRCY(V5%Ow*NgN078+XxiY_u*BN+yg5;QkhXO>D!P*BMTCeBc$<>6+gVn;EX% zZ`nkL0zYUNwf$CRkKM*SO#zH{jRI2I5S7Z<9>AfBQvv&@O_pWs*3Du}wW`N-$zN7V zO-HHz%3Epn-$_heoW^=}>bwE0RtXSnIvNaZeqjMO#2xwOg(}%8ulgbSy_9xfRVYAg zNP2mABt`;+O1%mw$H8m>AqfXapok)JtMpo>^Kq5vGeziUH5Lu*%?J&jTmaN!xpGjp z3;H_w+)W^2fSbvwXqdRNi#h*9Ea ziz9B4MN>#JRi1K)@n4SvO@lYT|9^ym8(i9CQV0NyViA;KlnEH_11c4h0DpPN=P9aW zv;3pSeDhd&7t;zMjO@V@#SOXE$jHhvb|vTk+Xl2w8KjX27g&=szX~9tgGjEX*@~<< z8dbUF8)nO&8sl&1H1$Wqp;#82ZYc~LIl$clFgjj0fRC3-^-tNpIDO>w5;r-;kg+Z- z%sOcw*j`yS0K8%`aiIVh=l%d=SQZ$i(YCTT?yO6hqd0I`-LuU{5+cyA|5m5~q&5LI z2^I?!0kqxE09I-EK=V35o*w05SSXM$D- zB*wS}887LnCpz18k`#Ah3nT_L_V^6)(|I}cxgyw_*%IU{= literal 0 HcmV?d00001 diff --git a/mods/fire/sounds/fire_fire.2.ogg b/mods/fire/sounds/fire_fire.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8d0eb1356c3ef33949dae57847c88988a1c38a9 GIT binary patch literal 60497 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

Km#WIsL%1&itVHO@E6jtcQoT`WK2nZZ7@w% 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 vX9l2L6t2t!U4zJ8c(cvwg^#OP-C5%0+YX}0hN literal 0 HcmV?d00001 diff --git a/mods/fire/sounds/fire_flint_and_steel.ogg b/mods/fire/sounds/fire_flint_and_steel.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6996e16fc3593925f73772dcc24ed65833a4a794 GIT binary patch literal 10443 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 literal 0 HcmV?d00001 diff --git a/mods/fire/textures/fire_flint_steel.png b/mods/fire/textures/fire_flint_steel.png index 624f5565dd3029b7f3fc0ce0de374bb8977e301d..c262ebc096f471c95e66b33ca3cd44a14494419d 100644 GIT binary patch delta 434 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 0 then - seedling = seedling[math.random(#seedling)] - seedling.y = seedling.y + 1 - light = minetest.get_node_light(seedling) - if not light or light < 13 then + local soils = minetest.find_nodes_in_area_under_air( + pos0, pos1, "group:soil") + if #soils > 0 then + local seedling = soils[math.random(#soils)] + local seedling_above = + {x = seedling.x, y = seedling.y + 1, z = seedling.z} + light = minetest.get_node_light(seedling_above) + if not light or light < 13 or + -- Desert sand is in the soil group + minetest.get_node(seedling).name == "default:desert_sand" then return end - minetest.set_node(seedling, {name = node.name}) + + minetest.set_node(seedling_above, {name = node.name}) end end minetest.register_abm({ + label = "Flower spread", nodenames = {"group:flora"}, - neighbors = {"default:dirt_with_grass", "default:dirt_with_dry_grass", - "default:desert_sand"}, interval = 13, chance = 96, action = function(...) @@ -135,12 +173,12 @@ minetest.register_node("flowers:mushroom_red", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, attached_node = 1}, + groups = {snappy = 3, attached_node = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), on_use = minetest.item_eat(-5), selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, -1 / 16, 4 / 16}, } }) @@ -154,12 +192,12 @@ minetest.register_node("flowers:mushroom_brown", { sunlight_propagates = true, walkable = false, buildable_to = true, - groups = {snappy = 3, attached_node = 1}, + groups = {snappy = 3, attached_node = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), on_use = minetest.item_eat(1), selection_box = { type = "fixed", - fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3} + fixed = {-3 / 16, -0.5, -3 / 16, 3 / 16, -2 / 16, 3 / 16}, } }) @@ -167,6 +205,7 @@ minetest.register_node("flowers:mushroom_brown", { -- Mushroom spread and death minetest.register_abm({ + label = "Mushroom spread", nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"}, interval = 11, chance = 50, @@ -206,6 +245,8 @@ minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red") minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown") minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red") +minetest.register_alias("mushroom:brown_natural", "flowers:mushroom_brown") +minetest.register_alias("mushroom:red_natural", "flowers:mushroom_red") -- @@ -217,23 +258,24 @@ minetest.register_node("flowers:waterlily", { drawtype = "nodebox", paramtype = "light", paramtype2 = "facedir", - tiles = {"flowers_waterlily.png"}, + tiles = {"flowers_waterlily.png", "flowers_waterlily_bottom.png"}, inventory_image = "flowers_waterlily.png", wield_image = "flowers_waterlily.png", liquids_pointable = true, walkable = false, buildable_to = true, sunlight_propagates = true, - groups = {snappy = 3, flower = 1}, + floodable = true, + groups = {snappy = 3, flower = 1, flammable = 1}, sounds = default.node_sound_leaves_defaults(), node_placement_prediction = "", node_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.46875, 0.5} + fixed = {-0.5, -31 / 64, -0.5, 0.5, -15 / 32, 0.5} }, selection_box = { type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5} + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, -15 / 32, 7 / 16} }, on_place = function(itemstack, placer, pointed_thing) @@ -242,16 +284,21 @@ minetest.register_node("flowers:waterlily", { local def = minetest.registered_nodes[node] local player_name = placer:get_player_name() - if def and def.liquidtype == "source" and minetest.get_item_group(node, "water") > 0 then + if def and def.liquidtype == "source" and + minetest.get_item_group(node, "water") > 0 then if not minetest.is_protected(pos, player_name) then - minetest.set_node(pos, {name = "flowers:waterlily", param2 = math.random(0, 3)}) + minetest.set_node(pos, {name = "flowers:waterlily", + param2 = math.random(0, 3)}) + if not (creative and creative.is_enabled_for + and creative.is_enabled_for(player_name)) then + itemstack:take_item() + end else - minetest.chat_send_player(player_name, "This area is protected") - end - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - return itemstack + minetest.chat_send_player(player_name, "Node is protected") + minetest.record_protection_violation(pos, player_name) end end + + return itemstack end }) diff --git a/mods/flowers/license.txt b/mods/flowers/license.txt new file mode 100644 index 00000000..d3011622 --- /dev/null +++ b/mods/flowers/license.txt @@ -0,0 +1,62 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Ironzorg, VanessaE +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 RHRhino +Copyright (C) 2015-2016 Gambit +Copyright (C) 2016 yyt16384 + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua index 59ce97a3..2b960907 100644 --- a/mods/flowers/mapgen.lua +++ b/mods/flowers/mapgen.lua @@ -94,8 +94,8 @@ local function register_flower(seed, name) octaves = 3, persist = 0.6 }, - biomes = {"stone_grassland", "sandstone_grassland", - "deciduous_forest", "coniferous_forest"}, + biomes = {"grassland", "deciduous_forest", "coniferous_forest", + "floatland_grassland", "floatland_coniferous_forest"}, y_min = 1, y_max = 31000, decoration = "flowers:"..name, @@ -110,12 +110,13 @@ local function register_mushroom(name) noise_params = { offset = 0, scale = 0.006, - spread = {x = 200, y = 200, z = 200}, + spread = {x = 250, y = 250, z = 250}, seed = 2, octaves = 3, persist = 0.66 }, - biomes = {"deciduous_forest", "coniferous_forest"}, + biomes = {"deciduous_forest", "coniferous_forest", + "floatland_coniferous_forest"}, y_min = 1, y_max = 31000, decoration = "flowers:"..name, @@ -135,10 +136,10 @@ local function register_waterlily() octaves = 3, persist = 0.7 }, - biomes = {"rainforest_swamp", "savanna_swamp", "deciduous_forest_swamp"}, + biomes = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"}, y_min = 0, y_max = 0, - schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts", + schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", rotation = "random", }) end @@ -162,12 +163,9 @@ end -- Detect mapgen to select functions -- --- Mods using singlenode mapgen can call these functions to enable --- the use of minetest.generate_ores or minetest.generate_decorations - -local mg_params = minetest.get_mapgen_params() -if mg_params.mgname == "v6" then +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" then flowers.register_mgv6_decorations() -elseif mg_params.mgname ~= "singlenode" then +else flowers.register_decorations() end diff --git a/mods/flowers/schematics/waterlily.mts b/mods/flowers/schematics/waterlily.mts index 876310cce9110775b10b9cef15ae36e7a5b2d800..69e1d8e0c76ea232c9e17f52b6d4dbcb30e378fd 100644 GIT binary patch delta 48 zcma#?o}i%3oS0d}AefeuU!Gc2Y*n6El3J9LnNwLYCpjS@AtmA0`GE5W4lpoqNHR77 E0IZP`Qvd(} delta 65 zcmeZ{nV?`Jl9HO1SejE}Ri0RqS`=TLUs{x$${?7QlV6@%R16W#$;_#&n3J54kdTt_ QD?a}GfddQ-TvM1B0WE162LJ#7 diff --git a/mods/flowers/textures/flowers_waterlily.png b/mods/flowers/textures/flowers_waterlily.png index a92d3b9faa3ad04fc7df64275821dd7a465d47ef..305c4458fc0fe841adc6d7a7ec8d047f48bf078d 100644 GIT binary patch delta 667 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 diff --git a/mods/flowers/textures/flowers_waterlily_bottom.png b/mods/flowers/textures/flowers_waterlily_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbeaf400e77f91f7181a0b149453f1488646bf9 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}RDe&2>;M1%GZ)zaQN|*huqj6A z3$45M`lc@5OyvjX&{EyY0W(=!06stX-3~FgbjfdGr~JgX+wb}uP>u35D#YwD?z9}`y^ zD_vqfwCvqI<5IW%VjSPfeh7wNJzrcO!jTZ)bE0IGr~^a9?RPOe-3cp~@cx;!f1bo6 W?$`EJrLTalWbkzLb6Mw<&;$Sw9)Sn| literal 0 HcmV?d00001 diff --git a/mods/tnt/README.txt b/mods/tnt/README.txt index 46d3fca1..4e74841c 100644 --- a/mods/tnt/README.txt +++ b/mods/tnt/README.txt @@ -1,45 +1,44 @@ -=== TNT-MOD for MINETEST-C55 === -by PilzAdam +Minetest Game mod: tnt +====================== +See license.txt for license information. -Introduction: +Authors of source code +---------------------- +PilzAdam (MIT) +ShadowNinja (MIT) +sofar (sofar@foo-projects.org) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +BlockMen (CC BY-SA 3.0): +All textures not mentioned below. + +ShadowNinja (CC BY-SA 3.0): +tnt_smoke.png + +Wuzzy (CC BY-SA 3.0): +All gunpowder textures except tnt_gunpowder_inventory.png. + +sofar (sofar@foo-projects.org) (CC BY-SA 3.0): +tnt_blast.png + +Introduction +------------ This mod adds TNT to Minetest. TNT is a tool to help the player in mining. -How to install: -Unzip the archive an place it in minetest-base-directory/mods/minetest/ -if you have a windows client or a linux run-in-place client. If you have -a linux system-wide instalation place it in ~/.minetest/mods/minetest/. -If you want to install this mod only in one world create the folder -worldmods/ in your worlddirectory. -For further information or help see: -http://wiki.minetest.com/wiki/Installing_Mods - How to use the mod: -Craft gunpowder by placing coal and gravel in the crafting area. The -gunpowder can be used to craft TNT or as fuze for TNT. To craft TNT -surround gunpowder with 4 wood in a + shape. +Craft gunpowder by placing coal and gravel in the crafting area. +The gunpowder can be used to craft TNT or as fuse for TNT. +To craft TNT place items like this: +-- wood - gunpowder -- wood - +gunpowder gunpowder gunpowder +-- wood - gunpowder -- wood - + There are different ways to blow up TNT: -1. Hit it with a torch. -2. Hit a gunpowder fuze that leads to a TNT block with a torch. -3. Activate it with mesecons (fastest way) -Be aware of the damage radius of 7 blocks! + 1. Hit it with a torch. + 2. Hit a gunpowder fuse that leads to a TNT block with a torch or flint-and-steel. + 3. Activate it with mesecons (fastest way). -License: -WTFPL (see below) - -See also: -http://minetest.net/ - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. +Be aware of the damage radius of 6 blocks! diff --git a/mods/tnt/depends.txt b/mods/tnt/depends.txt index 70715c7b..5ff216f7 100644 --- a/mods/tnt/depends.txt +++ b/mods/tnt/depends.txt @@ -1,2 +1,3 @@ default fire + diff --git a/mods/tnt/init.lua b/mods/tnt/init.lua index 2f51954e..f54b2f1a 100644 --- a/mods/tnt/init.lua +++ b/mods/tnt/init.lua @@ -1,310 +1,455 @@ +tnt = {} + +-- Default to enabled when in singleplayer +local enable_tnt = minetest.settings:get_bool("enable_tnt") +if enable_tnt == nil then + enable_tnt = minetest.is_singleplayer() +end + -- loss probabilities array (one in X will be lost) local loss_prob = {} loss_prob["default:cobble"] = 3 loss_prob["default:dirt"] = 4 -local radius_max = tonumber(minetest.setting_get("tnt_radius_max") or 25) +local tnt_radius = tonumber(minetest.settings:get("tnt_radius") or 3) -local eject_drops = function(pos, stack) - local obj = minetest.add_item(pos, stack) - - if obj == nil then - return +-- Fill a list with data for content IDs, after all nodes are registered +local cid_data = {} +minetest.after(0, function() + for name, def in pairs(minetest.registered_nodes) do + cid_data[minetest.get_content_id(name)] = { + name = name, + drops = def.drops, + flammable = def.groups.flammable, + on_blast = def.on_blast, + } end - obj:get_luaentity().collect = true - obj:setacceleration({x=0, y=-10, z=0}) - obj:setvelocity({x=math.random(0,6)-3, y=10, z=math.random(0,6)-3}) +end) + +local function rand_pos(center, pos, radius) + local def + local reg_nodes = minetest.registered_nodes + local i = 0 + repeat + -- Give up and use the center if this takes too long + if i > 4 then + pos.x, pos.z = center.x, center.z + break + end + pos.x = center.x + math.random(-radius, radius) + pos.z = center.z + math.random(-radius, radius) + def = reg_nodes[minetest.get_node(pos).name] + i = i + 1 + until def and not def.walkable end -local add_drop = function(drops, pos, item) - if loss_prob[item] ~= nil then - if math.random(1,loss_prob[item]) == 1 then - return +local function eject_drops(drops, pos, radius) + local drop_pos = vector.new(pos) + for _, item in pairs(drops) do + local count = math.min(item:get_count(), item:get_stack_max()) + while count > 0 do + local take = math.max(1,math.min(radius * radius, + count, + item:get_stack_max())) + rand_pos(pos, drop_pos, radius) + local dropitem = ItemStack(item) + dropitem:set_count(take) + local obj = minetest.add_item(drop_pos, dropitem) + if obj then + obj:get_luaentity().collect = true + obj:setacceleration({x = 0, y = -10, z = 0}) + obj:setvelocity({x = math.random(-3, 3), + y = math.random(0, 10), + z = math.random(-3, 3)}) + end + count = count - take end end +end - if drops[item] == nil then - drops[item] = ItemStack(item) +local function add_drop(drops, item) + item = ItemStack(item) + local name = item:get_name() + if loss_prob[name] ~= nil and math.random(1, loss_prob[name]) == 1 then + return + end + + local drop = drops[name] + if drop == nil then + drops[name] = item else - drops[item]:add_item(item) + drop:set_count(drop:get_count() + item:get_count()) + end +end + +local basic_flame_on_construct -- cached value +local function destroy(drops, npos, cid, c_air, c_fire, + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast) + if not ignore_protection and minetest.is_protected(npos, "") then + return cid end - if drops[item]:get_free_space() == 0 then - stack = drops[item] - eject_drops(pos, stack) - drops[item] = nil + local def = cid_data[cid] + + if not def then + return c_air + elseif not ignore_on_blast and def.on_blast then + on_blast_queue[#on_blast_queue + 1] = { + pos = vector.new(npos), + on_blast = def.on_blast + } + return cid + elseif def.flammable then + on_construct_queue[#on_construct_queue + 1] = { + fn = basic_flame_on_construct, + pos = vector.new(npos) + } + return c_fire + else + local node_drops = minetest.get_node_drops(def.name, "") + for _, item in pairs(node_drops) do + add_drop(drops, item) + end + return c_air end - end ---THIS IS WHERE ALL THE DESTROY CODE IS -local destroy = function(drops, pos, last, fast) - if minetest.is_protected(pos, "") then + +local function calc_velocity(pos1, pos2, old_vel, power) + -- Avoid errors caused by a vector of zero length + if vector.equals(pos1, pos2) then + return old_vel + end + + local vel = vector.direction(pos1, pos2) + vel = vector.normalize(vel) + vel = vector.multiply(vel, power) + + -- Divide by distance + local dist = vector.distance(pos1, pos2) + dist = math.max(dist, 1) + vel = vector.divide(vel, dist) + + -- Add old velocity + vel = vector.add(vel, old_vel) + + -- randomize it a bit + vel = vector.add(vel, { + x = math.random() - 0.5, + y = math.random() - 0.5, + z = math.random() - 0.5, + }) + + -- Limit to terminal velocity + dist = vector.length(vel) + if dist > 250 then + vel = vector.divide(vel, dist / 250) + end + return vel +end + +local function entity_physics(pos, radius, drops) + local objs = minetest.get_objects_inside_radius(pos, radius) + for _, obj in pairs(objs) do + local obj_pos = obj:getpos() + local dist = math.max(1, vector.distance(pos, obj_pos)) + + local damage = (4 / dist) * radius + if obj:is_player() then + -- currently the engine has no method to set + -- player velocity. See #2960 + -- instead, we knock the player back 1.0 node, and slightly upwards + local dir = vector.normalize(vector.subtract(obj_pos, pos)) + local moveoff = vector.multiply(dir, dist + 1.0) + local newpos = vector.add(pos, moveoff) + newpos = vector.add(newpos, {x = 0, y = 0.2, z = 0}) + obj:setpos(newpos) + + obj:set_hp(obj:get_hp() - damage) + else + local do_damage = true + local do_knockback = true + local entity_drops = {} + local luaobj = obj:get_luaentity() + local objdef = minetest.registered_entities[luaobj.name] + + if objdef and objdef.on_blast then + do_damage, do_knockback, entity_drops = objdef.on_blast(luaobj, damage) + end + + if do_knockback then + local obj_vel = obj:getvelocity() + obj:setvelocity(calc_velocity(pos, obj_pos, + obj_vel, radius * 10)) + end + if do_damage then + if not obj:get_armor_groups().immortal then + obj:punch(obj, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = damage}, + }, nil) + end + end + for _, item in pairs(entity_drops) do + add_drop(drops, item) + end + end + end +end + +local function add_effects(pos, radius, drops) + minetest.add_particle({ + pos = pos, + velocity = vector.new(), + acceleration = vector.new(), + expirationtime = 0.4, + size = radius * 10, + collisiondetection = false, + vertical = false, + texture = "tnt_boom.png", + }) + minetest.add_particlespawner({ + amount = 64, + time = 0.5, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -10, y = -10, z = -10}, + maxvel = {x = 10, y = 10, z = 10}, + minacc = vector.new(), + maxacc = vector.new(), + minexptime = 1, + maxexptime = 2.5, + minsize = radius * 3, + maxsize = radius * 5, + texture = "tnt_smoke.png", + }) + + -- we just dropped some items. Look at the items entities and pick + -- one of them to use as texture + local texture = "tnt_blast.png" --fallback texture + local most = 0 + for name, stack in pairs(drops) do + local count = stack:get_count() + if count > most then + most = count + local def = minetest.registered_nodes[name] + if def and def.tiles and def.tiles[1] then + texture = def.tiles[1] + end + end + end + + minetest.add_particlespawner({ + amount = 64, + time = 0.1, + minpos = vector.subtract(pos, radius / 2), + maxpos = vector.add(pos, radius / 2), + minvel = {x = -3, y = 0, z = -3}, + maxvel = {x = 3, y = 5, z = 3}, + minacc = {x = 0, y = -10, z = 0}, + maxacc = {x = 0, y = -10, z = 0}, + minexptime = 0.8, + maxexptime = 2.0, + minsize = radius * 0.66, + maxsize = radius * 2, + texture = texture, + collisiondetection = true, + }) +end + +function tnt.burn(pos, nodename) + local name = nodename or minetest.get_node(pos).name + local def = minetest.registered_nodes[name] + if not def then return - end - - local nodename = minetest.get_node(pos).name - if minetest.registered_nodes[nodename].groups.immortal ~= nil then --mm added for immortal - return - end - if nodename ~= "air" then - minetest.remove_node(pos, (fast and 1 or 0)) - if last then - nodeupdate(pos) - end - if minetest.registered_nodes[nodename].groups.flammable ~= nil then - minetest.set_node(pos, {name="fire:basic_flame"}, (fast and 2 or 0)) - return - end - local drop = minetest.get_node_drops(nodename, "") - for _,item in ipairs(drop) do - if type(item) == "string" then - add_drop(drops, pos, item) - else - for i=1,item:get_count() do - add_drop(drops, pos, item:get_name()) - end - end - end + elseif def.on_ignite then + def.on_ignite(pos) + elseif minetest.get_item_group(name, "tnt") > 0 then + minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.set_node(pos, {name = name .. "_burning"}) + minetest.get_node_timer(pos):start(1) end end -boom = function(pos, time) - minetest.after(time, function(pos) - if minetest.get_node(pos).name ~= "tnt:tnt_burning" then - return - end - minetest.sound_play("tnt_explode", {pos=pos, gain=1.5, max_hear_distance=2*64}) - minetest.set_node(pos, {name="tnt:boom"}) - minetest.after(0.5, function(pos) - minetest.remove_node(pos) - end, {x=pos.x, y=pos.y, z=pos.z}) - +local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) + pos = vector.round(pos) + -- scan for adjacent TNT nodes first, and enlarge the explosion + local vm1 = VoxelManip() + local p1 = vector.subtract(pos, 2) + local p2 = vector.add(pos, 2) + local minp, maxp = vm1:read_from_map(p1, p2) + local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp}) + local data = vm1:get_data() + local count = 0 + local c_tnt = minetest.get_content_id("tnt:tnt") + local c_tnt_burning = minetest.get_content_id("tnt:tnt_burning") + local c_tnt_boom = minetest.get_content_id("tnt:boom") + local c_air = minetest.get_content_id("air") - local radius = 2 - local drops = {} - local list = {} - local dr = 0 - local tnts = 1 - local destroyed = 0 - while dr= (pr:next(80, 125) / 100) then + local cid = data[vi] + local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} + if cid ~= c_air then + data[vi] = destroy(drops, p, cid, c_air, c_fire, + on_blast_queue, on_construct_queue, + ignore_protection, ignore_on_blast) end - for dz=-dr,dr,dr*2 do - for dx=-dr+1,dr-1,1 do - for dy=-dr+1,dr-1,1 do - table.insert(list, {x=dx, y=dy, z=dz}) - end - end + end + vi = vi + 1 + end + end + end + + vm:set_data(data) + vm:write_to_map() + vm:update_map() + vm:update_liquids() + + -- call check_single_for_falling for everything within 1.5x blast radius + for y = -radius * 1.5, radius * 1.5 do + for z = -radius * 1.5, radius * 1.5 do + for x = -radius * 1.5, radius * 1.5 do + local rad = {x = x, y = y, z = z} + local s = vector.add(pos, rad) + local r = vector.length(rad) + if r / radius < 1.4 then + minetest.check_single_for_falling(s) + end + end + end + end + + for _, queued_data in pairs(on_blast_queue) do + local dist = math.max(1, vector.distance(queued_data.pos, pos)) + local intensity = (radius * radius) / (dist * dist) + local node_drops = queued_data.on_blast(queued_data.pos, intensity) + if node_drops then + for _, item in pairs(node_drops) do + add_drop(drops, item) end - for _,p in ipairs(list) do - local np = {x=pos.x+p.x, y=pos.y+p.y, z=pos.z+p.z} - - local node = minetest.get_node(np) - if node.name == "air" then - elseif node.name == "tnt:tnt" or node.name == "tnt:tnt_burning" then - if radius < radius_max then - if radius <= 5 then - radius = radius + 1 - elseif radius <= 10 then - radius = radius + 0.5 - else - radius = radius + 0.3 - end - minetest.remove_node(np, 2) - tnts = tnts + 1 - else - minetest.set_node(np, {name="tnt:tnt_burning"}) - boom(np, 1) - end - elseif node.name == "fire:basic_flame" - --or string.find(node.name, "default:water_") - --or string.find(node.name, "default:lava_") - or node.name == "tnt:boom" - then - - else - if math.abs(p.x)<2 and math.abs(p.y)<2 and math.abs(p.z)<2 then - destroy(drops, np, dr == radius, radius > 7) - destroyed = destroyed + 1 - else - if math.random(1,5) <= 4 then - destroy(drops, np, dr == radius, radius > 7) - destroyed = destroyed + 1 - end - end - end - end end + end - local objects = minetest.get_objects_inside_radius(pos, radius*2) - for _,obj in ipairs(objects) do - --if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then - local p = obj:getpos() - local v = obj:getvelocity() - local vec = {x=p.x-pos.x, y=p.y-pos.y, z=p.z-pos.z} - local dist = (vec.x^2+vec.y^2+vec.z^2)^0.5 - local damage = ((radius*20)/dist) - --print("DMG dist="..dist.." damage="..damage) - if obj:is_player() or (obj:get_luaentity() and obj:get_luaentity().name ~= "__builtin:item") then - obj:punch(obj, 1.0, { - full_punch_interval=1.0, - damage_groups={fleshy=damage}, - }, vec) - end - if v ~= nil then - --obj:setvelocity({x=(p.x - pos.x) + (radius / 4) + v.x, y=(p.y - pos.y) + (radius / 2) + v.y, z=(p.z - pos.z) + (radius / 4) + v.z}) - obj:setvelocity({x=(p.x - pos.x) + (radius / 2) + v.x, y=(p.y - pos.y) + radius + v.y, z=(p.z - pos.z) + (radius / 2) + v.z}) - end - --end - end + for _, queued_data in pairs(on_construct_queue) do + queued_data.fn(queued_data.pos) + end - - print("TNT exploded=" .. tnts .. " radius=" .. radius .. " destroyed="..destroyed) - - for _,stack in pairs(drops) do - eject_drops(pos, stack) - end - local radiusp = radius+1 - minetest.add_particlespawner( - 100, --amount - 0.1, --time - {x=pos.x-radiusp, y=pos.y-radiusp, z=pos.z-radiusp}, --minpos - {x=pos.x+radiusp, y=pos.y+radiusp, z=pos.z+radiusp}, --maxpos - {x=-0, y=-0, z=-0}, --minvel - {x=0, y=0, z=0}, --maxvel - {x=-0.5,y=5,z=-0.5}, --minacc - {x=0.5,y=5,z=0.5}, --maxacc - 0.1, --minexptime - 1, --maxexptime - 8, --minsize - 15, --maxsize - false, --collisiondetection - "tnt_smoke.png" --texture - ) - end, pos) + return drops, radius end -minetest.register_node("tnt:tnt", { - description = "TNT -ONLY USE BELOW -150 METERS ;-) JOIN THEM FOR HUGE BOOM", - tiles = {"tnt_top.png", "tnt_bottom.png", "tnt_side.png"}, - groups = {dig_immediate=2, mesecon=2}, - sounds = default.node_sound_wood_defaults(), - - on_punch = function(pos, node, puncher) - if puncher:get_wielded_item():get_name() == "default:torch" then - minetest.sound_play("tnt_ignite", {pos=pos}) - minetest.set_node(pos, {name="tnt:tnt_burning"}) - boom(pos, 4) - end - end, - - mesecons = { - effector = { - action_on = function(pos, node) - minetest.set_node(pos, {name="tnt:tnt_burning"}) - boom(pos, 0) - end - }, - }, -}) - -minetest.register_node("tnt:tnt_burning", { - tiles = {{name="tnt_top_burning_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}}, "tnt_bottom.png", "tnt_side.png"}, - light_source = 5, - drop = "", - sounds = default.node_sound_wood_defaults(), -}) +function tnt.boom(pos, def) + minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) + minetest.set_node(pos, {name = "tnt:boom"}) + local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, + def.ignore_on_blast) + -- append entity drops + local damage_radius = (radius / def.radius) * def.damage_radius + entity_physics(pos, damage_radius, drops) + if not def.disable_drops then + eject_drops(drops, pos, radius) + end + add_effects(pos, radius, drops) + minetest.log("action", "A TNT explosion occurred at " .. minetest.pos_to_string(pos) .. + " with radius " .. radius) +end minetest.register_node("tnt:boom", { - drawtype = "plantlike", - tiles = {"tnt_boom.png"}, - light_source = LIGHT_MAX, + drawtype = "airlike", + light_source = default.LIGHT_MAX, walkable = false, drop = "", - groups = {dig_immediate=3}, + groups = {dig_immediate = 3}, + on_construct = function(pos) + minetest.get_node_timer(pos):start(0.4) + end, + on_timer = function(pos, elapsed) + minetest.remove_node(pos) + end, + -- unaffected by explosions + on_blast = function() end, }) -burn = function(pos) - if minetest.get_node(pos).name == "tnt:tnt" then - minetest.sound_play("tnt_ignite", {pos=pos}) - minetest.set_node(pos, {name="tnt:tnt_burning"}) - boom(pos, 1) - return - end - if minetest.get_node(pos).name ~= "tnt:gunpowder" then - return - end - minetest.sound_play("tnt_gunpowder_burning", {pos=pos, gain=2}) - minetest.set_node(pos, {name="tnt:gunpowder_burning"}) - - minetest.after(1, function(pos) - if minetest.get_node(pos).name ~= "tnt:gunpowder_burning" then - return - end - minetest.after(0.5, function(pos) - minetest.remove_node(pos) - end, {x=pos.x, y=pos.y, z=pos.z}) - for dx=-1,1 do - for dz=-1,1 do - for dy=-1,1 do - pos.x = pos.x+dx - pos.y = pos.y+dy - pos.z = pos.z+dz - - if not (math.abs(dx) == 1 and math.abs(dz) == 1) then - if dy == 0 then - burn({x=pos.x, y=pos.y, z=pos.z}) - else - if math.abs(dx) == 1 or math.abs(dz) == 1 then - burn({x=pos.x, y=pos.y, z=pos.z}) - end - end - end - - pos.x = pos.x-dx - pos.y = pos.y-dy - pos.z = pos.z-dz - end - end - end - end, pos) -end - minetest.register_node("tnt:gunpowder", { description = "Gun Powder", drawtype = "raillike", paramtype = "light", + is_ground_content = false, sunlight_propagates = true, walkable = false, - tiles = {"tnt_gunpowder.png",}, + tiles = { + "tnt_gunpowder_straight.png", + "tnt_gunpowder_curved.png", + "tnt_gunpowder_t_junction.png", + "tnt_gunpowder_crossing.png" + }, inventory_image = "tnt_gunpowder_inventory.png", wield_image = "tnt_gunpowder_inventory.png", selection_box = { type = "fixed", fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, - groups = {dig_immediate=2,attached_node=1}, + groups = {dig_immediate = 2, attached_node = 1, flammable = 5, + connect_to_raillike = minetest.raillike_group("gunpowder")}, sounds = default.node_sound_leaves_defaults(), - + on_punch = function(pos, node, puncher) if puncher:get_wielded_item():get_name() == "default:torch" then - burn(pos) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + minetest.log("action", puncher:get_player_name() .. + " ignites tnt:gunpowder at " .. + minetest.pos_to_string(pos)) end end, + on_blast = function(pos, intensity) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, + on_burn = function(pos) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, + on_ignite = function(pos, igniter) + minetest.set_node(pos, {name = "tnt:gunpowder_burning"}) + end, }) minetest.register_node("tnt:gunpowder_burning", { @@ -313,46 +458,188 @@ minetest.register_node("tnt:gunpowder_burning", { sunlight_propagates = true, walkable = false, light_source = 5, - tiles = {{name="tnt_gunpowder_burning_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1}}}, + tiles = {{ + name = "tnt_gunpowder_burning_straight_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_curved_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_t_junction_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + { + name = "tnt_gunpowder_burning_crossing_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }}, selection_box = { type = "fixed", fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, drop = "", - groups = {dig_immediate=2,attached_node=1}, + groups = { + dig_immediate = 2, + attached_node = 1, + connect_to_raillike = minetest.raillike_group("gunpowder") + }, sounds = default.node_sound_leaves_defaults(), -}) - -minetest.register_abm({ - nodenames = {"tnt:tnt", "tnt:gunpowder"}, - neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"}, - interval = 2, - chance = 10, - action = function(pos, node) - if node.name == "tnt:tnt" then - minetest.set_node(pos, {name="tnt:tnt_burning"}) - boom({x=pos.x, y=pos.y, z=pos.z}, 0) - else - burn(pos) + on_timer = function(pos, elapsed) + for dx = -1, 1 do + for dz = -1, 1 do + for dy = -1, 1 do + if not (dx == 0 and dz == 0) then + tnt.burn({ + x = pos.x + dx, + y = pos.y + dy, + z = pos.z + dz, + }) + end end - end + end + end + minetest.remove_node(pos) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_gunpowder_burning", {pos = pos, gain = 2}) + minetest.get_node_timer(pos):start(1) + end, }) minetest.register_craft({ - output = "tnt:gunpowder", + output = "tnt:gunpowder 5", type = "shapeless", recipe = {"default:coal_lump", "default:gravel"} }) -minetest.register_craft({ - output = "tnt:tnt", - recipe = { - {"", "group:wood", ""}, - {"group:wood", "tnt:gunpowder", "group:wood"}, - {"", "group:wood", ""} - } -}) +if enable_tnt then + minetest.register_craft({ + output = "tnt:tnt", + recipe = { + {"group:wood", "tnt:gunpowder", "group:wood"}, + {"tnt:gunpowder", "tnt:gunpowder", "tnt:gunpowder"}, + {"group:wood", "tnt:gunpowder", "group:wood"} + } + }) -if minetest.setting_get("log_mods") then - minetest.log("action", "tnt loaded") + minetest.register_abm({ + label = "TNT ignition", + nodenames = {"group:tnt", "tnt:gunpowder"}, + neighbors = {"fire:basic_flame", "default:lava_source", "default:lava_flowing"}, + interval = 4, + chance = 1, + action = function(pos, node) + tnt.burn(pos, node.name) + end, + }) end + +function tnt.register_tnt(def) + local name + if not def.name:find(':') then + name = "tnt:" .. def.name + else + name = def.name + def.name = def.name:match(":([%w_]+)") + end + if not def.tiles then def.tiles = {} end + local tnt_top = def.tiles.top or def.name .. "_top.png" + local tnt_bottom = def.tiles.bottom or def.name .. "_bottom.png" + local tnt_side = def.tiles.side or def.name .. "_side.png" + local tnt_burning = def.tiles.burning or def.name .. "_top_burning_animated.png" + if not def.damage_radius then def.damage_radius = def.radius * 2 end + + if enable_tnt then + minetest.register_node(":" .. name, { + description = def.description, + tiles = {tnt_top, tnt_bottom, tnt_side}, + is_ground_content = false, + groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, puncher) + if puncher:get_wielded_item():get_name() == "default:torch" then + minetest.set_node(pos, {name = name .. "_burning"}) + minetest.log("action", puncher:get_player_name() .. + " ignites " .. node.name .. " at " .. + minetest.pos_to_string(pos)) + end + end, + on_blast = function(pos, intensity) + minetest.after(0.1, function() + tnt.boom(pos, def) + end) + end, + mesecons = {effector = + {action_on = + function(pos) + tnt.boom(pos, def) + end + } + }, + on_burn = function(pos) + minetest.set_node(pos, {name = name .. "_burning"}) + end, + on_ignite = function(pos, igniter) + minetest.set_node(pos, {name = name .. "_burning"}) + end, + }) + end + + minetest.register_node(":" .. name .. "_burning", { + tiles = { + { + name = tnt_burning, + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1, + } + }, + tnt_bottom, tnt_side + }, + light_source = 5, + drop = "", + sounds = default.node_sound_wood_defaults(), + groups = {falling_node = 1}, + on_timer = function(pos, elapsed) + tnt.boom(pos, def) + end, + -- unaffected by explosions + on_blast = function() end, + on_construct = function(pos) + minetest.sound_play("tnt_ignite", {pos = pos}) + minetest.get_node_timer(pos):start(4) + minetest.check_for_falling(pos) + end, + }) +end + +tnt.register_tnt({ + name = "tnt:tnt", + description = "TNT", + radius = tnt_radius, +}) diff --git a/mods/tnt/license.txt b/mods/tnt/license.txt new file mode 100644 index 00000000..210f2bdc --- /dev/null +++ b/mods/tnt/license.txt @@ -0,0 +1,65 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 PilzAdam +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2016 sofar (sofar@foo-projects.org) +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2015-2016 Wuzzy +Copyright (C) 2016 sofar (sofar@foo-projects.org) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/tnt/textures/tnt_blast.png b/mods/tnt/textures/tnt_blast.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb1096f5d81f68b0247f1bd386357f1c14c2579 GIT binary patch literal 855 zcmV-d1E~CoP)o&74tn0wNWtEkm#^jZ>SJP!74EEBU-F0SihuX3Ls`c>`{pYM;V{Pz0=Ql$KI zE%7{$!T1g-raXT7f}f5uUcEjC;P5cS7b}D@hO3*5uwod^oqJMMX4tk(Q4}cSVbTe2 zFC(OsoSuYet(im{?9=a>+^$^SfB1kD|FYXYA_x|I)2i`#D(IiI$wiI9a7ef5a2Z9s zxlp`(9x{z3Vl)HWEbd8mF~@aXF0Z%qt#hB&QdCxkQ_ zlOzdOHyQojmR`0J9yJVFYwR>l8IBX;IA$-%c>MGQCY>-C4*6^hLI~;%u`HK&S1a;l z%AN7JU2e}O@;oO}4pO9i8Y?>WjM+-iZ8``ca9x+BaNR;#h&s;xo4 z7w}FsING;)_4*tsC6`e|w;k}H?vt1*A3x5xT}(Oq@foAJ!|45=DB~fzO^3ff#Rwr7 z{TBi7?4XR4lIy#SNwh(0&FM*ql#;iX5hk6Wj7L!v*roDATCIdM8nRRYhle4PwdUpX z5XBC09McFk{PEWplu|tTHsI3;}TUTrW0;A2k5r9 heHdfdt!UP{&;J-adc&TrL81Tv002ovPDHLkV1k_Eeen;3z07mm9GqwuL@VFk5+7mR%(b*YD?DcOx2l~tv@x-U|PQ6tRka1B|v06 zztm(=x#{9c)1_5r%d5@TH(G9Jw%pQYwQKLTJC;Bj7^>&lE&x)BB|&~5oAHAMlQu8` zRaAJoIEF|_vL0-AWM<%DHel7Lp1N1||9=%BqYc+sQu=BtJ{#OCoV7D9obR2v!fqWO z2evDI4=#Usxjk3@DgXAFSGT3-zEilo?G&5Nt!;A;gg@K)_FE|P^O@_mSv8)`=*~;% wy|js2|5^Ljy-zw$pE-K=Q9==uWLe?|{_APHJjW+L4+FW<)78&qol`;+0PO&A!TEeen;3z07mm9GqwuL@VFk5+7mR%(b*YD?DcOx2l~tv@x-U|PQ6tRka1B|v06 zztm(=x#{9c)1_5r%d5@TH(G9Jw%pQYwQKLTJC;Bj819{6*lqWz2gp(^3GxG3jvp+T zw1EkzqSn*JF+@U=^&qPgGXoFH1`&z8!+ZDs`#(|TMU&ww$LkaM^W{!i`|VzLd}{OW z%nQamAh+^%A1wIAvTH`;A^Uq9d8Kdktho(xs;8@;%Q~lo FCID4Fc1i#M diff --git a/mods/tnt/textures/tnt_gunpowder_burning_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_animated.png deleted file mode 100644 index 5ee24840a0212c60051ee154b7719ce7df0de7f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!3-o-7PBt_Qk(%kA+G=b{|7Sfone^Asi_KN zF_r}R1v5B2yO9Ru6nMHghEy<~y=2&TG=Sr1!0q4hU#2iWnyz_otpdwJnO6VDE11uk zhMm0Fc4o<|TMh*>Co=XkzT5rD?atOp+kf(@LdO5TWz^+7`g)^W{;PpxX7!4PUo*bU z{eO7xlvw`wuNzGLHl8iEDf$-6U)b#!U-^e|h6Tf+IR}>&1MOz;boFyt=akR{0Id&E AssI20 diff --git a/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..a901f7bdc200ac079018060d4267d2c12dcd398b GIT binary patch literal 612 zcmV-q0-ODbP)AI z5d?s8T8>pFTW!Da>12)bUc@n5uNExh*x0M0qynWPImXH`N7;N;HQ*uxy*GYaOH50(eT4ZNIz z8W(&pv6=XgAlNUn7;#?a|>qPN1CcPuTiHA-%`+rA)s z@__b6s~&YF7epKwrqMJ4=gZ@}`T*l-tfG+w=riy4^FZc-b1t!FafK(gZJW(H{*D!Q zUH1s_rfF!NXG|mT@oDk>^@HnN2jzs2x7LEUj2a*ZZM3&VlUR-TW2tg%sH4n4`yQ@FY zs&WzwT;AKZrNiNnEb!h_-}lLXv1`)^O3HX#3o|W_w1gl{)-qB{X}%4Ux&IfCh;Q?p zXR7*xKjFdd{y^r!W*%tayom=<8@NyY>K_cFVmN3U7rx4>T9#Q>dyQ#4w2y ytExYc4=k~0od=SUn|bh7e-OW&-r~VpfA9;n;PF(;jD(y30000J!^tCfh^ z`rlh?+3WS%IT(+}&2#VUQFu^3>rfsnb0}jBCzA<)4`{9V`TliTvE6R}@IYGnE<6aX zQ2DsbgJ5x)2Uo+bx>@qJ))D}cBx&v>j^p+nDfzeNfp_3wFz9&jJQhV!<$mxIS`UZA zLCK&!olZrksyfj!hx*}xsw(H#w=}Gjy#u2tDtIuP&BFV`7*mY*|F|E-aZHKiCZKd} z^z{2dqxXXFAW4$z6Z*XVWlqYd%k%ttk)7`cz%L&j;JqNB-h~G@wKGt^AG`!O!SQ&! ai2rZc8DC!3*65S~0000P{(@P~opePCsLL^z=i4(nHq{rv- z;wg8w&5zgbupSuOxvDA_BjAe0b@^aSN6ZJJKG5-j#8DU@%qLOgKodIqIN&n}jFGU7 zKdz?_L>=g(4~#V!h5^CLMITsU?7GgmAGG=)gq5B3fhh$7fUox-r%OoN1FP|Y7zHBY z&$n(FzWXpSGns1RHO}>M1wIfB*7B|3Wjxmhw|_5$sP*voLXbuRfH;o1ZNOQU$%=S; zJ~*9D7x^HvU8;TG(_HSrWx90DbRH=3<^zrK`ugA(1j$ky!mGjH00000NkvXXu0mjf D@G;Vr literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png new file mode 100644 index 0000000000000000000000000000000000000000..a556072c01baa3ad0c0dce4719974cbac8fc7063 GIT binary patch literal 672 zcmV;R0$=@!P)DbJt>;JPk}2=WZ%IF1@no`I4ip*(|r z6vEjw%@SZd9ybFMp>xg!k)+IlAn{lVwYMW2Ju2IikVHInjhl7r1=W9%Z?vqL>#HTjo~BYrQJOGBv+<_lid!?6R}GUwz)3qL;>h_BdQ zL~q`u0Dd5jW4RvOTo=`f+~Z@u;HZAr)&rx40urYlav-c-cLUE~yXg1($g^Lx10m_b zRXq^XNemgSat_1ryvYOrzVGXSG?|MGXIc|U(*tl_mnz-(czPhUPN#F3{XnLTCplp3 z!6)Nb#hwKC^8WXIv$XHq#j>n2nlw%6=DI)}$0SX`aU9As&}cNOD)V7#&GkT3rt*HE ze2psm0Xybg6ooNgaD4ytSJVS~y)eh>tK)bT%^-`Qouqhc5U0000eyp|f0$G^M#AJ-Xhs78PfcVE!N`?GdKstPm;I+{% z=6NOnarXzgU_Q;=d6|D$g9H5QqV^K61`{CwU$~g{;Ai7vbC5*0tErzOrEm00000NkvXXu0mjfvjA$o literal 0 HcmV?d00001 diff --git a/mods/tnt/textures/tnt_gunpowder_curved.png b/mods/tnt/textures/tnt_gunpowder_curved.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8b4eacff8135621086125e0034f0f01de77f86 GIT binary patch literal 268 zcmV+n0rUQeP)cU|G%*jJ0%Df7Vnzdt##MgCUU01|$jA@!smL=#_t(20T za|pu_%d)_Gk2FmYMG>TwnCF>(yxkbXT5BH1k=wRq04R!r-+H`h8dgfN)|%_O=8sml z)-nN7~!b)01xe-HUk;uT=ucLYIzBuVfq01@FlPaMbbbnP!1b3Q(f Sv?!tg0000ZBLLe6pzW?KSQTTe%Qf!UJ4umWuVJDjnMCiIsfMR=GY_TlMJ=9@- zW0CW}GTSYKq9_EI_x^6OZ@l-4m|U}2e2!#P*R=pm)AY-v9WZ&ekM&kuA^2G&|a z2){?BMF7`DkaOnweBzwrd_GfEm3r^VIkQ@=*zI<#*K4(XHma&ZL`W&oGz~dtZnqnk z%Y~E@`~AK@hxvT2fG(FyO)05}=yto+qA0Z0R|~W&gWlmMpvU7ujFA{4MNx1(9?hH7 zbY4M3^m@G-fEXjzTD2xyp`<>ZrHoVR$C0#5Q ay^Ak!rCtr@ct0-y0000|8-G$*l2rk&Wd@@jkv%n*=n1O*?7=#%aX3dcR z3TAn_IEGl9PEJ^$YEk*=Nqx#J4THo(E&p$r96lnh6VY&cLt7i0h%YNE>;I3PiyL^Q z%@VfGoM6G#V97sy^TneZ*(4Ox7k3*^c$~9lqp|ZEppfK=LbF{z3OZOzoIAeq-P_}E g!rFy#&B9(b1|BWWe7`0JL7=q^p00i_>zopr0L%D9X8-^I delta 168 zcmX@bxPx(mL_G^L0|Ud`yN`l^lxToYh%1n8YHFG}bLO&T%dTC!cK!PGFJHb$8RZE9 zB^XPB{DK)Ap4~_TasoYF978x{Sr0l29yZ`%Ft9BC^)8u#CsE+eZbpNa5AK1Tr&&}o z{T4^e>dY@>W{WL8r8JShSZVux$EWONj;3k57T$e#K(TnCz_t0gH;?mWcz@yEEY7JD T^KNbt&~ye*S3j3^P6)=4w diff --git a/mods/vessels/README.txt b/mods/vessels/README.txt index c2a802f4..5bb798c8 100644 --- a/mods/vessels/README.txt +++ b/mods/vessels/README.txt @@ -1,50 +1,22 @@ Minetest Game mod: vessels ========================== +See license.txt for license information. -Crafts -------- -Glass bottle (yields 10) +Authors of source code +---------------------- +Originally by Vanessa Ezekowitz (LGPL 2.1) +Modified by Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) - G - G - G - G - - G - +Authors of media (textures) +--------------------------- +All not listed below, Vanessa Ezekowitz (CC BY-SA 3.0) -Drinking Glass (yields 14) +The following textures were modified by Thomas-S (CC BY-SA 3.0): + vessels_drinking_glass.png + vessels_drinking_glass_inv.png + vessels_glass_bottle.png + vessels_steel_bottle.png - G - G - G - G - G G G - -Heavy Steel Bottle (yields 5) - - S - S - S - S - - S - - -License of source code: ------------------------ -Copyright (C) 2012 Vanessa Ezekowitz -Version 2012-09-02 -Modifications by Perttu Ahola - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -http://www.gnu.org/licenses/lgpl-2.1.html - -License of media (textures and sounds) --------------------------------------- -WTFPL - -Authors of media files ------------------------ -Unless specifically noted, -Copyright (C) 2012 Vanessa Ezekowitz - -The following textures were modified by Thomas-S (License is CC0): - vessels_drinking_glass.png - vessels_drinking_glass_inv.png (Paramat helped to improve this texture) - vessels_glass_bottle.png - vessels_steel_bottle.png +The following texture was created by Wuzzy (CC BY-SA 3.0): + vessels_shelf_slot.png (based on vessels_glass_bottle.png) diff --git a/mods/vessels/init.lua b/mods/vessels/init.lua index e56cc284..688413f2 100644 --- a/mods/vessels/init.lua +++ b/mods/vessels/init.lua @@ -13,6 +13,25 @@ local vessels_shelf_formspec = "listring[current_player;main]" .. default.get_hotbar_bg(0, 2.85) +local function get_vessels_shelf_formspec(inv) + local formspec = vessels_shelf_formspec + local invlist = inv and inv:get_list("vessels") + -- Inventory slots overlay + local vx, vy = 0, 0.3 + for i = 1, 16 do + if i == 9 then + vx = 0 + vy = vy + 1 + end + if not invlist or invlist[i]:is_empty() then + formspec = formspec .. + "image[" .. vx .. "," .. vy .. ";1,1;vessels_shelf_slot.png]" + end + vx = vx + 1 + end + return formspec +end + minetest.register_node("vessels:shelf", { description = "Vessels Shelf", tiles = {"default_wood.png", "default_wood.png", "default_wood.png", @@ -24,7 +43,7 @@ minetest.register_node("vessels:shelf", { on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", vessels_shelf_formspec) + meta:set_string("formspec", get_vessels_shelf_formspec(nil)) local inv = meta:get_inventory() inv:set_size("vessels", 8 * 2) end, @@ -41,14 +60,20 @@ minetest.register_node("vessels:shelf", { on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) minetest.log("action", player:get_player_name() .. " moves stuff in vessels shelf at ".. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) end, on_metadata_inventory_put = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " moves stuff to vessels shelf at ".. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) end, on_metadata_inventory_take = function(pos, listname, index, stack, player) minetest.log("action", player:get_player_name() .. " takes stuff from vessels shelf at ".. minetest.pos_to_string(pos)) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", get_vessels_shelf_formspec(meta:get_inventory())) end, on_blast = function(pos) local drops = {} @@ -183,3 +208,9 @@ minetest.register_craft( { output = "default:steel_ingot", recipe = "vessels:steel_bottle", }) + +minetest.register_craft({ + type = "fuel", + recipe = "vessels:shelf", + burntime = 30, +}) diff --git a/mods/vessels/license.txt b/mods/vessels/license.txt new file mode 100644 index 00000000..de16a3b0 --- /dev/null +++ b/mods/vessels/license.txt @@ -0,0 +1,52 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2012-2016 Vanessa Ezekowitz +Copyright (C) 2012-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Vanessa Ezekowitz +Copyright (C) 2016 Thomas-S + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/vessels/textures/vessels_shelf_slot.png b/mods/vessels/textures/vessels_shelf_slot.png new file mode 100644 index 0000000000000000000000000000000000000000..ff29082a0371748e6eb0bd656141466790085dba GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~wg8_HS0Eh_ z5Fo)l`#wmzB*-tA!Qt7BG!Q4r+uensgH_f8$l)yTh%9Dc;1&j9Muu5)B!GhKC7!;n z><_rv_>5J&?iRBEh4ejL977~7CnqeBOGt5f+{CbpW0jD>A>{)c>JOM!cu8EGYM|74 ji1or(g9XvdgTe~DWM4f4mvQ) literal 0 HcmV?d00001 diff --git a/mods/walls/README.txt b/mods/walls/README.txt new file mode 100644 index 00000000..0389174d --- /dev/null +++ b/mods/walls/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: walls +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Auke Kok (LGPL 2.1) diff --git a/mods/walls/init-fence.lua b/mods/walls/init-fence.lua deleted file mode 100644 index c6a32ec6..00000000 --- a/mods/walls/init-fence.lua +++ /dev/null @@ -1,247 +0,0 @@ - ---[[ - -Walls mod for Minetest - -Copyright (C) 2015 Auke Kok - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - ---]] - -walls = {} ---[[ ---NEW CODE -walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) - -- inventory node, and pole-type wall start item - minetest.register_node(wall_name, { - description = wall_desc, - drawtype = "nodebox", - node_box = { - type = "connected", - fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, - -- connect_bottom = - connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, - connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, - connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, - connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, - }, - connects_to = { "group:cracky", "group:wall", "group:stone" }, - paramtype = "light", - is_ground_content = false, - tiles = { wall_texture, }, - walkable = true, - groups = { cracky = 3, wall = 1, stone = 2 }, - sounds = wall_sounds, - }) - - -- crafting recipe - minetest.register_craft({ - output = wall_name .. " 6", - recipe = { - { '', '', '' }, - { wall_mat, wall_mat, wall_mat}, - { wall_mat, wall_mat, wall_mat}, - } - }) - -end -]] ---OLD CODE FENCE LIKE -walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) - -- inventory node, and pole-type wall start item - minetest.register_node(wall_name, { - description = wall_desc, - --drawtype = "nodebox", - drawtype = "fencelike", - node_box = { - type = "connected", - fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, - -- connect_bottom = - --connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, - --connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, - --connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, - --connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, - }, - --connects_to = { "group:cracky", "group:wall", "group:stone" }, - paramtype = "light", - is_ground_content = false, - tiles = { wall_texture, }, - walkable = true, - groups = { cracky = 3, wall = 1, stone = 2 }, - sounds = wall_sounds, - }) - - -- crafting recipe - minetest.register_craft({ - output = wall_name .. " 6", - recipe = { - { '', '', '' }, - { wall_mat, wall_mat, wall_mat}, - { wall_mat, wall_mat, wall_mat}, - } - }) - - -- reverse crafting recipe - minetest.register_craft({ - output = wall_mat .. " 6", - recipe = { - { '', '', '' }, - { wall_name, wall_name, wall_name}, - { wall_name, wall_name, wall_name}, - } - }) - -end - - - - - ---CURRENT FENCE CODE REF ---[[ --- Fence registration helper --- -function default.register_fence(name, def) - minetest.register_craft({ - output = name .. " 4", - recipe = { - { def.material, 'group:stick', def.material }, - { def.material, 'group:stick', def.material }, - } - }) - - local fence_texture = "default_fence_overlay.png^" .. def.texture .. - "^default_fence_overlay.png^[makealpha:255,126,126" - -- Allow almost everything to be overridden - local default_fields = { - paramtype = "light", - drawtype = "fencelike", - inventory_image = fence_texture, - wield_image = fence_texture, - tiles = { def.texture }, - sunlight_propagates = true, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, - groups = {}, - } - for k, v in pairs(default_fields) do - if not def[k] then - def[k] = v - end - end - - -- Always add to the fence group, even if no group provided - def.groups.fence = 1 - - def.texture = nil - def.material = nil - - minetest.register_node(name, def) -end -]] - -walls.register("walls:cobble", "Cobblestone Wall", "default_cobble.png", - "default:cobble", default.node_sound_stone_defaults()) - -walls.register("walls:mossycobble", "Mossy Cobblestone Wall", "default_mossycobble.png", - "default:mossycobble", default.node_sound_stone_defaults()) - -walls.register("walls:desertcobble", "Desert Cobblestone Wall", "default_desert_cobble.png", - "default:desert_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:stone", "Stone Wall", "default_stone.png", - "default:stone", default.node_sound_stone_defaults()) - -walls.register("walls:stonebrick", "Stone Brick Wall", "default_stone_brick.png", - "default:stonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:desert_stone", "Desert Stone Wall", "default_desert_stone.png", - "default:desert_stone", default.node_sound_stone_defaults()) - -walls.register("walls:desert_stonebrick", "Desert Stone Brick Wall", "default_desert_stone_brick.png", - "default:desert_stonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:sandstone", "Sandstone Wall", "default_sandstone.png", - "default:sandstone", default.node_sound_stone_defaults()) - -walls.register("walls:sandstonebrick", "Sandstone Brick Wall", "default_sandstone_brick.png", - "default:sandstonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:obsidianbrick", "Obsidian Brick Wall", "default_obsidian_brick.png", - "default:obsidianbrick", default.node_sound_stone_defaults()) - -walls.register("walls:brick", "Brick Wall", "default_brick.png", - "default:brick", default.node_sound_stone_defaults()) - -walls.register("walls:diamondblock", "Diamond Block Wall", "default_diamond_block.png", - "default:diamondblock", default.node_sound_stone_defaults()) - -walls.register("walls:goldblock", "Gold Block Wall", "default_gold_block.png", - "default:goldblock", default.node_sound_stone_defaults()) - -walls.register("walls:mese", "Mese Block Wall", "default_mese_block.png", - "default:mese", default.node_sound_stone_defaults()) - -walls.register("walls:bronzeblock", "Bronze Block Wall", "default_bronze_block.png", - "default:bronzeblock", default.node_sound_stone_defaults()) - -walls.register("walls:copperblock", "Copper Block Wall", "default_copper_block.png", - "default:copperblock", default.node_sound_stone_defaults()) - -walls.register("walls:steelblock", "Steel Block Wall", "default_steel_block.png", - "default:steelblock", default.node_sound_stone_defaults()) - -walls.register("walls:goldblock", "Gold Block Wall", "default_gold_block.png", - "default:goldblock", default.node_sound_stone_defaults()) - -walls.register("walls:waterflowing", "Water Flowing Wall", "default_water.png", - "default:water_flowing", default.node_sound_stone_defaults()) - -walls.register("walls:nyancat_rainbow", "Nyan Cat Rainbow Wall", "default_nc_rb.png", - "default:nyancat_rainbow", default.node_sound_stone_defaults()) - -walls.register("walls:torch", "Torch Wall", "fire_basic_flame.png", - "default:torch", default.node_sound_stone_defaults()) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mods/walls/init-wall.lua b/mods/walls/init-wall.lua deleted file mode 100644 index 20685634..00000000 --- a/mods/walls/init-wall.lua +++ /dev/null @@ -1,199 +0,0 @@ - ---[[ - -Walls mod for Minetest - -Copyright (C) 2015 Auke Kok - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - ---]] - -walls = {} - ---NEW CODE -walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) - -- inventory node, and pole-type wall start item - minetest.register_node(wall_name, { - description = wall_desc, - drawtype = "nodebox", - node_box = { - type = "connected", - fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, - -- connect_bottom = - connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, - connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, - connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, - connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, - }, - connects_to = { "group:cracky", "group:wall", "group:stone" }, - paramtype = "light", - is_ground_content = false, - tiles = { wall_texture, }, - walkable = true, - groups = { cracky = 3, wall = 1, stone = 2 }, - sounds = wall_sounds, - }) - - -- crafting recipe - minetest.register_craft({ - output = wall_name .. " 6", - recipe = { - { '', '', '' }, - { wall_mat, wall_mat, wall_mat}, - { wall_mat, wall_mat, wall_mat}, - } - }) - -end - - - - ---CURRENT FENCE CODE REF - --- Fence registration helper --- -function default.register_fence(name, def) - minetest.register_craft({ - output = name .. " 4", - recipe = { - { def.material, 'group:stick', def.material }, - { def.material, 'group:stick', def.material }, - } - }) - - local fence_texture = "default_fence_overlay.png^" .. def.texture .. - "^default_fence_overlay.png^[makealpha:255,126,126" - -- Allow almost everything to be overridden - local default_fields = { - paramtype = "light", - drawtype = "fencelike", - inventory_image = fence_texture, - wield_image = fence_texture, - tiles = { def.texture }, - sunlight_propagates = true, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, - groups = {}, - } - for k, v in pairs(default_fields) do - if not def[k] then - def[k] = v - end - end - - -- Always add to the fence group, even if no group provided - def.groups.fence = 1 - - def.texture = nil - def.material = nil - - minetest.register_node(name, def) -end - - -walls.register("walls:cobble", "Cobblestone Wall", "default_cobble.png", - "default:cobble", default.node_sound_stone_defaults()) - -walls.register("walls:mossycobble", "Mossy Cobblestone Wall", "default_mossycobble.png", - "default:mossycobble", default.node_sound_stone_defaults()) - -walls.register("walls:desertcobble", "Desert Cobblestone Wall", "default_desert_cobble.png", - "default:desert_cobble", default.node_sound_stone_defaults()) - -walls.register("walls:stone", "Stone Wall", "default_stone.png", - "default:stone", default.node_sound_stone_defaults()) - -walls.register("walls:stonebrick", "Stone Brick Wall", "default_stone_brick.png", - "default:stonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:desert_stone", "Desert Stone Wall", "default_desert_stone.png", - "default:desert_stone", default.node_sound_stone_defaults()) - -walls.register("walls:desert_stonebrick", "Desert Stone Brick Wall", "default_desert_stone_brick.png", - "default:desert_stonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:sandstone", "Sandstone Wall", "default_sandstone.png", - "default:sandstone", default.node_sound_stone_defaults()) - -walls.register("walls:sandstonebrick", "Sandstone Brick Wall", "default_sandstone_brick.png", - "default:sandstonebrick", default.node_sound_stone_defaults()) - -walls.register("walls:obsidianbrick", "Obsidian Brick Wall", "default_obsidian_brick.png", - "default:obsidianbrick", default.node_sound_stone_defaults()) - -walls.register("walls:brick", "Brick Wall", "default_brick.png", - "default:brick", default.node_sound_stone_defaults()) - -walls.register("walls:diamondblock", "Diamond Block Wall", "default_diamond_block.png", - "default:diamondblock", default.node_sound_stone_defaults()) - -walls.register("walls:goldblock", "Gold Block Wall", "default_gold_block.png", - "default:goldblock", default.node_sound_stone_defaults()) - -walls.register("walls:mese", "Mese Block Wall", "default_mese_block.png", - "default:mese", default.node_sound_stone_defaults()) - -walls.register("walls:bronzeblock", "Bronze Block Wall", "default_bronze_block.png", - "default:bronzeblock", default.node_sound_stone_defaults()) - -walls.register("walls:copperblock", "Copper Block Wall", "default_copper_block.png", - "default:copperblock", default.node_sound_stone_defaults()) - -walls.register("walls:steelblock", "Steel Block Wall", "default_steel_block.png", - "default:steelblock", default.node_sound_stone_defaults()) - -walls.register("walls:goldblock", "Gold Block Wall", "default_gold_block.png", - "default:goldblock", default.node_sound_stone_defaults()) - -walls.register("walls:waterflowing", "Water Flowing Wall", "default_water.png", - "default:water_flowing", default.node_sound_stone_defaults()) - -walls.register("walls:nyancat_rainbow", "Nyan Cat Rainbow Wall", "default_nc_rb.png", - "default:nyancat_rainbow", default.node_sound_stone_defaults()) - -walls.register("walls:torch", "Torch Wall", "fire_basic_flame.png", - "default:torch", default.node_sound_stone_defaults()) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mods/walls/init.lua b/mods/walls/init.lua index 549a4104..b91321bb 100644 --- a/mods/walls/init.lua +++ b/mods/walls/init.lua @@ -1,21 +1,5 @@ - ---[[ - -Walls mod for Minetest - -Copyright (C) 2015 Auke Kok - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - ---]] - walls = {} ---NEW CODE walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sounds) -- inventory node, and pole-type wall start item minetest.register_node(wall_name, { @@ -30,12 +14,12 @@ walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sou connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, }, - connects_to = { "group:cracky", "group:wall", "group:stone"}, + connects_to = { "group:wall", "group:stone" }, paramtype = "light", is_ground_content = false, tiles = { wall_texture, }, walkable = true, - groups = { cracky = 3, wall = 1, stone = 2,not_in_craft_guide=1,oddly_breakable_by_hand = 1 }, + groups = { cracky = 3, wall = 1, stone = 2, oddly_breakable_by_hand = 1, not_in_craft_guide=1}, sounds = wall_sounds, }) @@ -51,55 +35,6 @@ walls.register = function(wall_name, wall_desc, wall_texture, wall_mat, wall_sou end - - - ---CURRENT FENCE CODE REF - --- Fence registration helper --- -function default.register_fence(name, def) - minetest.register_craft({ - output = name .. " 4", - recipe = { - { def.material, 'group:stick', def.material }, - { def.material, 'group:stick', def.material }, - } - }) - - local fence_texture = "default_fence_overlay.png^" .. def.texture .. - "^default_fence_overlay.png^[makealpha:255,126,126" - -- Allow almost everything to be overridden - local default_fields = { - paramtype = "light", - drawtype = "fencelike", - inventory_image = fence_texture, - wield_image = fence_texture, - tiles = { def.texture }, - sunlight_propagates = true, - is_ground_content = false, - selection_box = { - type = "fixed", - fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, - }, - groups = {}, - } - for k, v in pairs(default_fields) do - if not def[k] then - def[k] = v - end - end - - -- Always add to the fence group, even if no group provided - def.groups.fence = 1 - - def.texture = nil - def.material = nil - - minetest.register_node(name, def) -end - - walls.register("walls:cobble", "Cobblestone Wall", "default_cobble.png", "default:cobble", default.node_sound_stone_defaults()) @@ -259,6 +194,5 @@ walls.register("walls:pillar", "Quartz Pillar Wall", "quartz_pillar_side.png", "quartz:pillar", default.node_sound_stone_defaults()) walls.register("walls:chiseled", "Quartz Chisled Wall", "quartz_chiseled.png", - "quartz:chiseled", default.node_sound_stone_defaults()) - + "quartz:chiseled", default.node_sound_stone_defaults()) diff --git a/mods/walls/license.txt b/mods/walls/license.txt new file mode 100644 index 00000000..ccfaf1cd --- /dev/null +++ b/mods/walls/license.txt @@ -0,0 +1,14 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2015 Auke Kok + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html diff --git a/mods/wool/README.txt b/mods/wool/README.txt index f57b6dd3..a66677dd 100644 --- a/mods/wool/README.txt +++ b/mods/wool/README.txt @@ -1,28 +1,16 @@ Minetest Game mod: wool ======================= +See license.txt for license information. -Mostly backward-compatible with jordach's 16-color wool mod. - -License of source code: ------------------------ -Copyright (C) 2012 Perttu Ahola (celeron55) - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. - -License of media (textures and sounds) --------------------------------------- -Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) -http://creativecommons.org/licenses/by-sa/3.0/ - -Authors of media files ------------------------ -Cisoun: -- wool_black.png wool_brown.png wool_dark_green.png wool_green.png -- wool_magenta.png wool_pink.png wool_violet.png wool_yellow.png wool_blue.png -- wool_cyan.png wool_dark_grey.png wool_grey.png wool_orange.png wool_red.png -- wool_white.png +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) +Authors of media (textures) +--------------------------- +Cisoun (CC BY-SA 3.0): + wool_black.png wool_brown.png wool_dark_green.png wool_green.png + wool_magenta.png wool_pink.png wool_violet.png wool_yellow.png + wool_blue.png wool_cyan.png wool_dark_grey.png wool_grey.png + wool_orange.png wool_red.png wool_white.png diff --git a/mods/wool/license.txt b/mods/wool/license.txt new file mode 100644 index 00000000..93101636 --- /dev/null +++ b/mods/wool/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Cisoun + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/xpanes/README.txt b/mods/xpanes/README.txt index b89e74a2..bcbc1294 100644 --- a/mods/xpanes/README.txt +++ b/mods/xpanes/README.txt @@ -1,16 +1,21 @@ Minetest Game mod: xpanes ========================= +See license.txt for license information. -License: --------- -Copyright (C) xyz -modified by BlockMen (iron bars) +Authors of source code +---------------------- +Originally by xyz (MIT) +BlockMen (MIT) +sofar (MIT) +Various Minetest developers and contributors (MIT) -Gambit (WTFPL): - xpanes_bar.png +Authors of media (textures) +--------------------------- +xyz (CC BY-SA 3.0): + All textures not mentioned below. -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +Gambit (CC BY-SA 3.0): + xpanes_bar.png + +paramat (CC BY-SA 3.0): + xpanes_bar_top.png diff --git a/mods/xpanes/init.lua b/mods/xpanes/init.lua index 9189912e..77278a5c 100644 --- a/mods/xpanes/init.lua +++ b/mods/xpanes/init.lua @@ -1,156 +1,146 @@ -xpanes = {} -local function rshift(x, by) - return math.floor(x / 2 ^ by) +local function is_pane(pos) + return minetest.get_item_group(minetest.get_node(pos).name, "pane") > 0 end -local directions = { - {x = 1, y = 0, z = 0}, - {x = 0, y = 0, z = 1}, - {x = -1, y = 0, z = 0}, - {x = 0, y = 0, z = -1}, -} +local function connects_dir(pos, name, dir) + local aside = vector.add(pos, minetest.facedir_to_dir(dir)) + if is_pane(aside) then + return true + end -local function update_pane(pos, name) - if not minetest.get_node(pos).name:find("^xpanes:"..name) then + local connects_to = minetest.registered_nodes[name].connects_to + if not connects_to then + return false + end + local list = minetest.find_nodes_in_area(aside, aside, connects_to) + + if #list > 0 then + return true + end + + return false +end + +local function swap(pos, node, name, param2) + if node.name == name and node.param2 == param2 then return end - local sum = 0 - for i, dir in pairs(directions) do - local node = minetest.get_node(vector.add(pos, dir)) - local def = minetest.registered_nodes[node.name] - local pane_num = def and def.groups.pane or 0 - if pane_num > 0 or not def or (def.walkable ~= false and - def.drawtype ~= "nodebox") then - sum = sum + 2 ^ (i - 1) + + minetest.set_node(pos, {name = name, param2 = param2}) +end + +local function update_pane(pos) + if not is_pane(pos) then + return + end + local node = minetest.get_node(pos) + local name = node.name + if name:sub(-5) == "_flat" then + name = name:sub(1, -6) + end + + local any = node.param2 + local c = {} + local count = 0 + for dir = 0, 3 do + c[dir] = connects_dir(pos, name, dir) + if c[dir] then + any = dir + count = count + 1 end end - if sum == 0 then - sum = 15 - end - minetest.set_node(pos, {name = "xpanes:"..name.."_"..sum}) -end -local function update_nearby(pos, node) - node = node or minetest.get_node(pos) - local name = node.name - if not name or node.name:sub(1, 7) ~= "xpanes:" then - return - end - local underscore_pos = string.find(name, "_[^_]*$") or 0 - local len = name:len() - local num = tonumber(name:sub(underscore_pos+1, len)) - if not num or num < 1 or num > 15 then - name = name:sub(8) + if count == 0 then + swap(pos, node, name .. "_flat", any) + elseif count == 1 then + swap(pos, node, name .. "_flat", (any + 1) % 4) + elseif count == 2 then + if (c[0] and c[2]) or (c[1] and c[3]) then + swap(pos, node, name .. "_flat", (any + 1) % 4) + else + swap(pos, node, name, 0) + end else - name = name:sub(8, underscore_pos - 1) - end - for i, dir in pairs(directions) do - update_pane(vector.add(pos, dir), name) + swap(pos, node, name, 0) end end -minetest.register_on_placenode(update_nearby) -minetest.register_on_dignode(update_nearby) +minetest.register_on_placenode(function(pos, node) + if minetest.get_item_group(node, "pane") then + update_pane(pos) + end + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end +end) -local half_boxes = { - {0, -0.5, -1/32, 0.5, 0.5, 1/32}, - {-1/32, -0.5, 0, 1/32, 0.5, 0.5}, - {-0.5, -0.5, -1/32, 0, 0.5, 1/32}, - {-1/32, -0.5, -0.5, 1/32, 0.5, 0} -} - -local full_boxes = { - {-0.5, -0.5, -1/32, 0.5, 0.5, 1/32}, - {-1/32, -0.5, -0.5, 1/32, 0.5, 0.5} -} - -local sb_half_boxes = { - {0, -0.5, -0.06, 0.5, 0.5, 0.06}, - {-0.06, -0.5, 0, 0.06, 0.5, 0.5}, - {-0.5, -0.5, -0.06, 0, 0.5, 0.06}, - {-0.06, -0.5, -0.5, 0.06, 0.5, 0} -} - -local sb_full_boxes = { - {-0.5, -0.5, -0.06, 0.5, 0.5, 0.06}, - {-0.06, -0.5, -0.5, 0.06, 0.5, 0.5} -} - -local pane_def_fields = { - drawtype = "airlike", - paramtype = "light", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - pointable = false, - diggable = false, - buildable_to = true, - air_equivalent = true, -} +minetest.register_on_dignode(function(pos) + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end +end) +xpanes = {} function xpanes.register_pane(name, def) for i = 1, 15 do - local need = {} - local cnt = 0 - for j = 1, 4 do - if rshift(i, j - 1) % 2 == 1 then - need[j] = true - cnt = cnt + 1 - end - end - local take = {} - local take2 = {} - if need[1] == true and need[3] == true then - need[1] = nil - need[3] = nil - table.insert(take, full_boxes[1]) - table.insert(take2, sb_full_boxes[1]) - end - if need[2] == true and need[4] == true then - need[2] = nil - need[4] = nil - table.insert(take, full_boxes[2]) - table.insert(take2, sb_full_boxes[2]) - end - for k in pairs(need) do - table.insert(take, half_boxes[k]) - table.insert(take2, sb_half_boxes[k]) - end - local texture = def.textures[1] - if cnt == 1 then - texture = def.textures[1].."^"..def.textures[2] - end - minetest.register_node(":xpanes:"..name.."_"..i, { - drawtype = "nodebox", - tiles = {def.textures[3], def.textures[3], texture}, - paramtype = "light", - groups = def.groups, - drop = "xpanes:"..name, - sounds = def.sounds, - node_box = { - type = "fixed", - fixed = take - }, - selection_box = { - type = "fixed", - fixed = take2 - } - }) + minetest.register_alias("xpanes:" .. name .. "_" .. i, "xpanes:" .. name .. "_flat") end - for k, v in pairs(pane_def_fields) do - def[k] = def[k] or v - end + local flatgroups = table.copy(def.groups) + flatgroups.pane = 1 + minetest.register_node(":xpanes:" .. name .. "_flat", { + description = def.description, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + inventory_image = def.inventory_image, + wield_image = def.wield_image, + paramtype2 = "facedir", + tiles = {def.textures[3], def.textures[3], def.textures[1]}, + groups = flatgroups, + drop = "xpanes:" .. name .. "_flat", + sounds = def.sounds, + node_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + selection_box = { + type = "fixed", + fixed = {{-1/2, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + connect_sides = { "left", "right" }, + }) - def.on_construct = function(pos) - update_pane(pos, name) - end - - minetest.register_node(":xpanes:"..name, def) + local groups = table.copy(def.groups) + groups.pane = 1 + groups.not_in_creative_inventory = 1 + minetest.register_node(":xpanes:" .. name, { + drawtype = "nodebox", + paramtype = "light", + is_ground_content = false, + sunlight_propagates = true, + description = def.description, + tiles = {def.textures[3], def.textures[3], def.textures[1]}, + groups = groups, + drop = "xpanes:" .. name .. "_flat", + sounds = def.sounds, + node_box = { + type = "connected", + fixed = {{-1/32, -1/2, -1/32, 1/32, 1/2, 1/32}}, + connect_front = {{-1/32, -1/2, -1/2, 1/32, 1/2, -1/32}}, + connect_left = {{-1/2, -1/2, -1/32, -1/32, 1/2, 1/32}}, + connect_back = {{-1/32, -1/2, 1/32, 1/32, 1/2, 1/2}}, + connect_right = {{1/32, -1/2, -1/32, 1/2, 1/2, 1/32}}, + }, + connects_to = {"group:pane", "group:stone", "group:glass", "group:wood", "group:tree"}, + }) minetest.register_craft({ - output = "xpanes:"..name.." 16", + output = "xpanes:" .. name .. "_flat 16", recipe = def.recipe }) end @@ -161,7 +151,7 @@ xpanes.register_pane("pane", { inventory_image = "default_glass.png", wield_image = "default_glass.png", sounds = default.node_sound_glass_defaults(), - groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3, pane=1}, + groups = {snappy=2, cracky=3, oddly_breakable_by_hand=3}, recipe = { {"default:glass", "default:glass", "default:glass"}, {"default:glass", "default:glass", "default:glass"} @@ -170,14 +160,25 @@ xpanes.register_pane("pane", { xpanes.register_pane("bar", { description = "Iron bar", - textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_space.png"}, + textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_bar_top.png"}, inventory_image = "xpanes_bar.png", wield_image = "xpanes_bar.png", - groups = {cracky=2, pane=1}, - sounds = default.node_sound_stone_defaults(), + groups = {cracky=2}, + sounds = default.node_sound_metal_defaults(), recipe = { {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} } }) +minetest.register_lbm({ + name = "xpanes:gen2", + nodenames = {"group:pane"}, + action = function(pos, node) + update_pane(pos) + for i = 0, 3 do + local dir = minetest.facedir_to_dir(i) + update_pane(vector.add(pos, dir)) + end + end +}) diff --git a/mods/xpanes/license.txt b/mods/xpanes/license.txt new file mode 100644 index 00000000..dff72274 --- /dev/null +++ b/mods/xpanes/license.txt @@ -0,0 +1,64 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 xyz +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2016 Auke Kok +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 xyz +Copyright (C) 2013-2016 Gambit +Copyright (C) 2016 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/xpanes/textures/xpanes_bar.png b/mods/xpanes/textures/xpanes_bar.png index 4d17ceb855793cd0cd05229e774968fd017cbfe4..3ea62a9382bc1bf942cdfb1786accaadeeb516c3 100644 GIT binary patch delta 139 zcmdnOIGb^TL_G%s5LnGvuop-%l?3?(Gcc4*K5GHwg?PF+hE&|D?K{YOz<`Ho=4Ry& zUso4zXmDSfbX_-ViJe~Ggo6z{ZX#b57(S-`_3n6l<&0R5>XOar7mR+K%;1i%zv*Co r^5sVH-|rJ8&$G=ITjI0SB&Kn0z|`NfRTF^bGkCiCxv;ErN@xNAY7{t1 delta 164 zcmbQuxP@_oL_G^L0|Ud`yN`l^lxToYh%1nuJb7|)aq)r$3$n7ZDl03aqM`~CIoyE~ zj3q&S!3+-1ZlnP@zMd|QAsp9}0|J8rgNlNR5)(=ooLJph+1$1|unMFxd_16ZhD)Gh z*)iP&YuPI^$Wx)dmCR&CJHKF1;H!C~$BwF>s{up5Cu)s|7Tf N!PC{xWt~$(6959yH1+@h diff --git a/mods/xpanes/textures/xpanes_bar_top.png b/mods/xpanes/textures/xpanes_bar_top.png new file mode 100644 index 0000000000000000000000000000000000000000..887518aa2aa038594626d0583cb5ecf70de269b8 GIT binary patch literal 3516 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCnnvn2oAJB1(c1%M}WW^3yVNQWZ)n z3sMzQD>Bm<7%FbPot|6tSb?YQe{q*BlaNr;;{*fa>So)2`w||Rc;0?{{Y>4Nwp)jc zI4a~FgSP+waqq5qjYhXcpts@i7au3;%;eTODL?=4r0JFM{QrV>e%$?;^{{Bd;g1sE zukJgr{yLx9>HT+q&AlqBzSd#-3GD<4Wn-<|vz~B?{P=LWs;u&>_NNrf*IZ`Kb9&#; zKdRssY{6`O&-vKW;~I>{9EKuyILk{?_rDS`dMEYi^R1nmtJLpB?!J6(`cwYxK^F4i z%@xZpewu8z{%**NzFVnJW{Y>8QAu=DCDPg1V3NUZSCPX@ zSKQW-R88y@U1T1Au=w-UK(%ELtT|1!u4K;N7IajkwY=@lnHWo-_@+NIU$-bN4oGKi zd*;Nnnk$bn&+fTX@g1AvtEU(gDQ`(}GH~i|e>AVSZpoa+DtS%6Czn@>K0B(+XxQtR zcjqFP!wP-h(pT2q)sxKsao%8PvP$)fNcebLFe!M~v#=R+m~X8Vf8JlBo~_NGa_C0a zNrlC%o(_(hlg!hUoBB9wxYEu!RxmRLJ#|~x?8_loAk@F{;_-}asZS60E@o8_i9X)I zCe6CRMdWAlqzTTh&0WD)S1j|~JWXPeORr&+OnS)1gruyCXC|d;YpQt8O4>9f$WOJH z&*G5D@f^M7bBZ-3wkVW1zHbs+nzN_X*X-`2wCG!(!n7_e_qr;z`f5nAZf|tPjeojk z#kyPXobs~{%A6kieaG#2-}X%Ji+R1!`?}ojuUCro)wjBSohEg6V)a}p-K^#rXUfW! zvTeVq%F_GTh22;nSy5oSBLnBzX31}xIrxj3XP)ozUC5KQgxPPgBM(ce`ZYiG-P$|D zcUn#@FMK@x#LmWd+CU<2V)c`6JX_87eSf7=_U6#SmHe{o(Fb37l+;+(9NKlB?T0mU zrp}xX?2`Pax1KGp_?mFnTmN46{|ydHj`kj%{&DrQ4beXqJbLFn;cs-~yUAy4(9?85lUTGJ$zD!q>+tIX_n~F(p4KRj(qq0O$+`1{?c|g2d$P)DnfH)bz|e zTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1qj1R9FEG$W1LtRH(?! z$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvQ?0~DO|i&7O#^i1>&bX_Yl%Z!xlxD;%PQqrt~ zT-=~W0C~1b86_nJR{Hwo<>h+i#(Mch>H3D2mX`VkM*2oZxO-9i^u0dZ`ye;a9*kN-QW%d0*JyB& z6apkE9!*`N!9`LCkfeAtbq%fH;zBf_QuBbVrgC8Oh~a;O1F&hu7T^=&nw6DRTwE-$ z!|)JLgfYq6-G!lpRn`N@;VkfoEM{Qf76xHPhFNnYfP(BLp1!W^54hQdg{}Vy^NIq6 zq&!_5LpZJ{|M)+jvE$!WWe)|b-O?=&VpKF4w%m~U_NUcJ&>cJ+8|dB6OVhm{PQ0}W1< zzOFp&e?s!to~OCDS5A0s?fmo(e_ucUE3+f}Wbg28S6+D9(PrDiUA&z6=U?u!Uzd6` z=FUC+g}Hw>&R=ixBSvbM%CSh}NT>N0vz|8XEcR*J^Hp-ijZgnAe$~k5g}V9FcpY?K z&%yf8ds^4L3y(wls{Mj4Y<}~kS*$%{#&qlT@$vDla_=sff9hZHUh;4EAK8~1gsSW( z__usA{uku;OO5~iM7_NCHqZZ5{8KQmjInugs5igoUGkjkud+@>6y59IHGNas1?#kJ z*Pv8g#t`1 zUVKRj%|a||rilDLJ}H?$RMdCXtgBbHW}Kar-ug7Ba^8xoM<%UIH7?c;YwlJLKcDw5 zZjYE=lW;iqtBn-(kGp6c5!&GfVVoVk4d(>2V|xhFiF-Q~<`rWm|(&Q1Qi@-KVVmX#lsOhw-= zWLtSNx9M5oqREmSg-Q(DJsVUE{L?OKs?K|&wmCu~bYYJ|>7kb7Rs;*q&%d|Mn6 z{CB-A<-vC5e}z2%8Pe*uJbduicquS{Bx21NnFS@upp0SbwUf8Of#bpU)fv^7*YmoT<5Tyl zPYi~NBDbd3{kg@!z?qc^%!LuYK32*3xq68y`AMmI6}bgKS1>Tx*jE%JCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWj?1RP3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}6yY17;GAESs$imLqGzD%T9H|1q-4jXU{jQm zW)m6U+;3Q)sSlHq0-losWHO-@PHPt8fqP0cGQ z);H8M)Ca3iNw#v!FUm~>>d(wgOi$G>$V*q!2f0=s>Rh1j_2J$Jxq_1 zgNvjPAW89P>KY9$l0twa#iOZfXayG+q5+kf2W&N!1Di(-{~H{DO)KUApAgso|Nk#P zB7FkLWlZvRcVXyYmGuB}I14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf18#OeCk|A^<>}%W!f`!00mx=zV0@&w R#~8?B@O1TaS?83{1OUBqR%rkL delta 106 zcmZ1>J%w?C1Sbar5LngC4xMbtD;Ii)O+?t5+ebKq6(}m384^+AoS&PUnpXl+#o%0& znpl#WqEMb$lA+-4=^K!um&y(l=kj!M4B?PX{=v_{$jHcG7N6b#Qts*M=d#Wzp$Pz3 CpBbe9 diff --git a/mods/alias/alias.lua b/mods/z_extra_mods/alias/alias.lua similarity index 100% rename from mods/alias/alias.lua rename to mods/z_extra_mods/alias/alias.lua diff --git a/mods/alias/esmobs.lua b/mods/z_extra_mods/alias/esmobs.lua similarity index 100% rename from mods/alias/esmobs.lua rename to mods/z_extra_mods/alias/esmobs.lua diff --git a/mods/alias/esorerem.lua b/mods/z_extra_mods/alias/esorerem.lua similarity index 100% rename from mods/alias/esorerem.lua rename to mods/z_extra_mods/alias/esorerem.lua diff --git a/mods/alias/init.lua b/mods/z_extra_mods/alias/init.lua similarity index 100% rename from mods/alias/init.lua rename to mods/z_extra_mods/alias/init.lua diff --git a/mods/alias/license.txt b/mods/z_extra_mods/alias/license.txt similarity index 100% rename from mods/alias/license.txt rename to mods/z_extra_mods/alias/license.txt diff --git a/mods/alias/moreblocksrem.lua b/mods/z_extra_mods/alias/moreblocksrem.lua similarity index 100% rename from mods/alias/moreblocksrem.lua rename to mods/z_extra_mods/alias/moreblocksrem.lua diff --git a/mods/alias/moreorerem.lua b/mods/z_extra_mods/alias/moreorerem.lua similarity index 100% rename from mods/alias/moreorerem.lua rename to mods/z_extra_mods/alias/moreorerem.lua diff --git a/mods/alias/moresnowrem.lua b/mods/z_extra_mods/alias/moresnowrem.lua similarity index 100% rename from mods/alias/moresnowrem.lua rename to mods/z_extra_mods/alias/moresnowrem.lua diff --git a/mods/alias/moretreesrem.lua b/mods/z_extra_mods/alias/moretreesrem.lua similarity index 100% rename from mods/alias/moretreesrem.lua rename to mods/z_extra_mods/alias/moretreesrem.lua diff --git a/mods/alias/pathv6rem.lua b/mods/z_extra_mods/alias/pathv6rem.lua similarity index 100% rename from mods/alias/pathv6rem.lua rename to mods/z_extra_mods/alias/pathv6rem.lua diff --git a/mods/alias/technodrem.lua b/mods/z_extra_mods/alias/technodrem.lua similarity index 100% rename from mods/alias/technodrem.lua rename to mods/z_extra_mods/alias/technodrem.lua diff --git a/mods/alias/textures/default_ladder.png b/mods/z_extra_mods/alias/textures/default_ladder.png similarity index 100% rename from mods/alias/textures/default_ladder.png rename to mods/z_extra_mods/alias/textures/default_ladder.png diff --git a/mods/alias/textures/default_nc_back.png b/mods/z_extra_mods/alias/textures/default_nc_back.png similarity index 100% rename from mods/alias/textures/default_nc_back.png rename to mods/z_extra_mods/alias/textures/default_nc_back.png diff --git a/mods/alias/textures/default_nc_front.png b/mods/z_extra_mods/alias/textures/default_nc_front.png similarity index 100% rename from mods/alias/textures/default_nc_front.png rename to mods/z_extra_mods/alias/textures/default_nc_front.png diff --git a/mods/alias/textures/default_nc_rb.png b/mods/z_extra_mods/alias/textures/default_nc_rb.png similarity index 100% rename from mods/alias/textures/default_nc_rb.png rename to mods/z_extra_mods/alias/textures/default_nc_rb.png diff --git a/mods/alias/textures/default_nc_side.png b/mods/z_extra_mods/alias/textures/default_nc_side.png similarity index 100% rename from mods/alias/textures/default_nc_side.png rename to mods/z_extra_mods/alias/textures/default_nc_side.png diff --git a/mods/alias/textures/flowers_waterlily_bottom.png b/mods/z_extra_mods/alias/textures/flowers_waterlily_bottom.png similarity index 100% rename from mods/alias/textures/flowers_waterlily_bottom.png rename to mods/z_extra_mods/alias/textures/flowers_waterlily_bottom.png diff --git a/mods/alias/villrem.lua b/mods/z_extra_mods/alias/villrem.lua similarity index 100% rename from mods/alias/villrem.lua rename to mods/z_extra_mods/alias/villrem.lua diff --git a/mods/z_extra_mods/bonemeal/README.md b/mods/z_extra_mods/bonemeal/README.md new file mode 100644 index 00000000..ed9e0e90 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/README.md @@ -0,0 +1,26 @@ +Bonemeal mod [bonemeal] + +This mod adds four new items into the game, bones which can be dug from normal +dirt which can be made into bonemeal, mulch which is is crafted using a tree and +8x leaves, and fertiliser which is a mixture of them both. + +Each item can be used on saplings and crops for a chance to grow them quicker as +well as dirt which will generate random grass, flowers or whichever decoration +is registered. + +Mulch has a strength of 1, Bonemeal 2 and Fertiliser 3 which means the stronger +the item, the more chance of growing saplings in low light, making crops sprout +quicker or simply decorate a larger area with grass and flowers. + +The api.txt document shows how to add your own saplings, crops and grasses to +the list by using one of the 3 commands included and the mod.lua file gives you +many examples by using some of the popular mods available. + +https://forum.minetest.net/viewtopic.php?f=9&t=16446 + +Changelog: + +- 0.1 - Initial release +- 0.2 - Added global on_use function for bonemeal growth +- 0.3 - Added strength to on_use global for new items (mulch and fertiliser). +- 0.4 - Added Intllib support and fr.txt file diff --git a/mods/z_extra_mods/bonemeal/api.txt b/mods/z_extra_mods/bonemeal/api.txt new file mode 100644 index 00000000..3140ac57 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/api.txt @@ -0,0 +1,76 @@ + +Bonemeal API +============ + +This guide will show you how to add saplings, crops and dirt types for the +bonemeal mod to use from withhin your own mods. Please make sure that bonemeal +appears in the depends.txt file of your mod so everything work properly. + + +Function Usage +============== + + +Adding Crops +------------ + +bonemeal:add_crop({ nodename_start, growing_steps, seed_name }) + +This command is used to add new crops for bonemeal to work on. + +e.g. + +bonemeal:add_crop({ + {"farming:cotton_", 8, "farming:seed_cotton"}, + {"farming:wheat_", 8, "farming:seed_wheat"}, +}) + + +Adding Saplings +--------------- + +bonemeal:add_sapling({ sapling_node, function, soil_type[sand, dirt, nodename] }) + +This command will add new saplings for bonemeal to grow on sand, soil or a +specified node type. + +bonemeal:add_sapling({ + {"ethereal:palm_sapling", ethereal.grow_palm_tree, "soil"}, + {"ethereal:palm_sapling", ethereal.grow_palm_tree, "sand"}, +}) + + +Adding Dirt Decoration +---------------------- + +bonemeal:add_deco({ dirt_node, {grass_node_list}, {decor_node_list} }) + +This command will add grass and decoration to specific dirt types, use "" to +add an empty node. + +e.g. + +bonemeal:add_deco({"default:dirt_with_dry_grass", {"default:dry_grass_1", ""}, + {"flowers:rose", "flowers:viola"} }) + + +Global ON_USE Function +---------------------- + +bonemeal:on_use(pos, strength) + +This function can be called from other mods to grow plants using alternative +bonemeal items and have the same effect. + + {pos} is the location to apply growing + {strength} is how strong to grow [low of 1 to high of 4] + +Note: Higher strength items require lower light levels, and a strength of 4 +needs no light at all. + + +Final Words +=========== + +I hope this guide helps you add your own plants so you can grow them quickly +with the items included. Please check the mods.lua for more examples. diff --git a/mods/z_extra_mods/bonemeal/depends.txt b/mods/z_extra_mods/bonemeal/depends.txt new file mode 100644 index 00000000..4d286ca7 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/depends.txt @@ -0,0 +1,6 @@ +default +intllib? +farming? +ethereal? +moretrees? +technic_worldgen? diff --git a/mods/z_extra_mods/bonemeal/description.txt b/mods/z_extra_mods/bonemeal/description.txt new file mode 100644 index 00000000..f85f0a20 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/description.txt @@ -0,0 +1 @@ +Adds bone and bonemeal giving the ability to quickly grow plants and saplings. \ No newline at end of file diff --git a/mods/z_extra_mods/bonemeal/init.lua b/mods/z_extra_mods/bonemeal/init.lua new file mode 100644 index 00000000..5241d392 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/init.lua @@ -0,0 +1,482 @@ + +bonemeal = {} + +-- Load support for intllib. +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP .. "/intllib.lua") + + +-- default crops +local crops = { + {"farming:cotton_", 8, "farming:seed_cotton"}, + {"farming:wheat_", 8, "farming:seed_wheat"}, +} + + +-- special pine check for nearby snow +local function pine_grow(pos) + + if minetest.find_node_near(pos, 1, + {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then + + default.grow_new_snowy_pine_tree(pos) + else + default.grow_new_pine_tree(pos) + end +end + + +-- default saplings +local saplings = { + {"default:sapling", default.grow_new_apple_tree, "soil"}, + {"default:junglesapling", default.grow_new_jungle_tree, "soil"}, + {"default:acacia_sapling", default.grow_new_acacia_tree, "soil"}, + {"default:aspen_sapling", default.grow_new_aspen_tree, "soil"}, + {"default:pine_sapling", pine_grow, "soil"}, +} + +-- helper tables ( "" denotes a blank item ) +local green_grass = { + "default:grass_2", "default:grass_3", "default:grass_4", + "default:grass_5", "", "" +} + +local dry_grass = { + "default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4", + "default:dry_grass_5", "", "" +} + +local flowers = { + "flowers:dandelion_white", "flowers:dandelion_yellow", "flowers:geranium", + "flowers:rose", "flowers:tulip", "flowers:viola", "" +} + +-- add additional bakedclay flowers if enabled +if minetest.get_modpath("bakedclay") then + flowers[7] = "bakedclay:delphinium" + flowers[8] = "bakedclay:thistle" + flowers[9] = "bakedclay:lazarus" + flowers[10] = "bakedclay:mannagrass" + flowers[11] = "" +end + +-- default biomes deco +local deco = { + {"default:dirt_with_dry_grass", dry_grass, flowers}, + {"default:sand", {}, {"default:dry_shrub", "", "", ""} }, + {"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} }, + {"default:silver_sand", {}, {"default:dry_shrub", "", "", ""} }, +} + + +----- local functions + + +-- particles +local function particle_effect(pos) + + minetest.add_particlespawner({ + amount = 4, + time = 0.15, + minpos = pos, + maxpos = pos, + minvel = {x = -1, y = 2, z = -1}, + maxvel = {x = 1, y = 4, z = 1}, + minacc = {x = -1, y = -1, z = -1}, + maxacc = {x = 1, y = 1, z = 1}, + minexptime = 1, + maxexptime = 1, + minsize = 1, + maxsize = 3, + texture = "bonemeal_particle.png", + }) +end + + +-- tree type check +local function grow_tree(pos, object) + + if type(object) == "table" and object.axiom then + -- grow L-system tree + minetest.remove_node(pos) + minetest.spawn_tree(pos, object) + + elseif type(object) == "string" and minetest.registered_nodes[object] then + -- place node + minetest.set_node(pos, {name = object}) + + elseif type(object) == "function" then + -- function + object(pos) + end +end + + +-- sapling check +local function check_sapling(pos, nodename) + + -- what is sapling placed on? + local under = minetest.get_node({ + x = pos.x, + y = pos.y - 1, + z = pos.z + }) + + local can_grow, grow_on + + -- check list for sapling and function + for n = 1, #saplings do + + if saplings[n][1] == nodename then + + grow_on = saplings[n][3] + + -- sapling grows on top of specific node + if grow_on + and grow_on ~= "soil" + and grow_on ~= "sand" + and grow_on == under.name then + can_grow = true + end + + -- sapling grows on top of soil (default) + if can_grow == nil + and (grow_on == nil or grow_on == "soil") + and minetest.get_item_group(under.name, "soil") > 0 then + can_grow = true + end + + -- sapling grows on top of sand + if can_grow == nil + and grow_on == "sand" + and minetest.get_item_group(under.name, "sand") > 0 then + can_grow = true + end + + -- check if we can grow sapling + if can_grow then + particle_effect(pos) + grow_tree(pos, saplings[n][2]) + return + end + end + end +end + + +-- crops check +local function check_crops(pos, nodename, strength) + + local stage = "" + + -- grow registered crops + for n = 1, #crops do + + if string.find(nodename, crops[n][1]) + or nodename == crops[n][3] then + + -- get stage number or set to 0 for seed + stage = tonumber( nodename:split("_")[2] ) or 0 + stage = math.min(stage + strength, crops[n][2]) + + minetest.set_node(pos, {name = crops[n][1] .. stage}) + + particle_effect(pos) + + return + + end + + end + +end + + +-- check soil for specific decoration placement +local function check_soil(pos, nodename, strength) + + -- set radius according to strength + local side = strength - 1 + local tall = math.max(strength - 2, 0) + + -- get area of land with free space above + local dirt = minetest.find_nodes_in_area_under_air( + {x = pos.x - side, y = pos.y - tall, z = pos.z - side}, + {x = pos.x + side, y = pos.y + tall, z = pos.z + side}, + {"group:soil", "group:sand"}) + + -- set default grass and decoration + local grass = green_grass + local decor = flowers + + -- choose grass and decoration to use on dirt patch + for n = 1, #deco do + + -- do we have a grass match? + if nodename == deco[n][1] then + grass = deco[n][2] or {} + decor = deco[n][3] or {} + end + end + + local pos2, nod + + -- loop through soil + for _,n in pairs(dirt) do + + pos2 = n + + pos2.y = pos2.y + 1 + + -- place random decoration (rare) + if math.random(1, 5) == 5 then + nod = decor[math.random(1, #decor)] or "" + if nod ~= "" then + minetest.set_node(pos2, {name = nod}) + end + else + -- place random grass (common) + nod = grass[math.random(1, #grass)] or "" + if nod ~= "" then + minetest.set_node(pos2, {name = nod}) + end + end + + particle_effect(pos2) + end +end + + +-- global functions + + +-- add to sapling list +-- {sapling node, schematic or function name, "soil"|"sand"|specific_node} +--e.g. {"default:sapling", default.grow_new_apple_tree, "soil"} + +function bonemeal:add_sapling(list) + + for n = 1, #list do + table.insert(saplings, list[n]) + end +end + + +-- add to crop list to force grow +-- {crop name start_, growth steps, seed node (if required)} +-- e.g. {"farming:wheat_", 8, "farming:seed_wheat"} +function bonemeal:add_crop(list) + + for n = 1, #list do + table.insert(crops, list[n]) + end +end + + +-- add grass and flower/plant decoration for specific dirt types +-- {dirt_node, {grass_nodes}, {flower_nodes} +-- e.g. {"default:dirt_with_dry_grass", dry_grass, flowers} +function bonemeal:add_deco(list) + + for n = 1, #list do + table.insert(deco, list[n]) + end +end + + +-- global on_use function for bonemeal +function bonemeal:on_use(pos, strength) + + -- get node pointed at + local node = minetest.get_node(pos) + + -- return if nothing there + if node.name == "ignore" then + return + end + + -- make sure strength is between 1 and 4 + strength = strength or 2 + strength = math.max(strength, 1) + strength = math.min(strength, 4) + + -- grow grass and flowers + if minetest.get_item_group(node.name, "soil") > 0 + or minetest.get_item_group(node.name, "sand") > 0 then + check_soil(pos, node.name, strength) + return + end + + -- light check depending on strength (strength of 4 = no light needed) + if (minetest.get_node_light(pos) or 0) < (12 - (strength * 3)) then + return + end + + -- check for tree growth if pointing at sapling + if minetest.get_item_group(node.name, "sapling") > 0 + and math.random(1, (5 - strength)) == 1 then + check_sapling(pos, node.name) + return + end + + -- check for crop growth + check_crops(pos, node.name, strength) +end + + +----- items + + +-- mulch (strength 1) +minetest.register_craftitem("bonemeal:mulch", { + description = S("Mulch"), + inventory_image = "bonemeal_mulch.png", + + on_use = function(itemstack, user, pointed_thing) + + -- did we point at a node? + if pointed_thing.type ~= "node" then + return + end + + -- is area protected? + if minetest.is_protected(pointed_thing.under, user:get_player_name()) then + return + end + + -- take item if not in creative + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + + -- call global on_use function with strength of 1 + bonemeal:on_use(pointed_thing.under, 1) + + return itemstack + end, +}) + +-- bonemeal (strength 2) +minetest.register_craftitem("bonemeal:bonemeal", { + description = S("Bone Meal"), + inventory_image = "bonemeal_item.png", + + on_use = function(itemstack, user, pointed_thing) + + -- did we point at a node? + if pointed_thing.type ~= "node" then + return + end + + -- is area protected? + if minetest.is_protected(pointed_thing.under, user:get_player_name()) then + return + end + + -- take item if not in creative + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + + -- call global on_use function with strength of 2 + bonemeal:on_use(pointed_thing.under, 2) + + return itemstack + end, +}) + + +-- fertiliser (strength 3) +minetest.register_craftitem("bonemeal:fertiliser", { + description = S("Fertiliser"), + inventory_image = "bonemeal_fertiliser.png", + + on_use = function(itemstack, user, pointed_thing) + + -- did we point at a node? + if pointed_thing.type ~= "node" then + return + end + + -- is area protected? + if minetest.is_protected(pointed_thing.under, user:get_player_name()) then + return + end + + -- take item if not in creative + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + + -- call global on_use function with strength of 3 + bonemeal:on_use(pointed_thing.under, 3) + + return itemstack + end, +}) + + +-- bone +minetest.register_craftitem("bonemeal:bone", { + description = S("Bone"), + inventory_image = "bonemeal_bone.png", +}) + + +--- crafting recipes + + +-- bonemeal (from bone) +minetest.register_craft({ + type = "shapeless", + output = "bonemeal:bonemeal 2", + recipe = {"bonemeal:bone"}, +}) + +-- bonemeal (from player bones) +minetest.register_craft({ + type = "shapeless", + output = "bonemeal:bonemeal 4", + recipe = {"bones:bones"}, +}) + +-- mulch +minetest.register_craft({ + type = "shapeless", + output = "bonemeal:mulch 4", + recipe = { + "group:tree", "group:leaves", "group:leaves", + "group:leaves", "group:leaves", "group:leaves", + "group:leaves", "group:leaves", "group:leaves" + }, +}) + +-- fertiliser +minetest.register_craft({ + type = "shapeless", + output = "bonemeal:fertiliser 2", + recipe = {"bonemeal:bonemeal", "bonemeal:mulch"}, +}) + +--[[ +-- add bones to dirt +minetest.override_item("default:dirt", { + drop = { + max_items = 1, + items = { + { + items = {"bonemeal:bone", "default:dirt"}, + rarity = 30, + }, + { + items = {"default:dirt"}, + } + } + }, +}) +]] + +-- add support for other mods +dofile(minetest.get_modpath("bonemeal") .. "/mods.lua") + +print (S("[bonemeal] loaded")) diff --git a/mods/z_extra_mods/bonemeal/intllib.lua b/mods/z_extra_mods/bonemeal/intllib.lua new file mode 100644 index 00000000..6669d720 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +return gettext, ngettext diff --git a/mods/z_extra_mods/bonemeal/license.txt b/mods/z_extra_mods/bonemeal/license.txt new file mode 100644 index 00000000..fec6f6aa --- /dev/null +++ b/mods/z_extra_mods/bonemeal/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 TenPlus1 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/mods/z_extra_mods/bonemeal/locale/fr.txt b/mods/z_extra_mods/bonemeal/locale/fr.txt new file mode 100644 index 00000000..874b106d --- /dev/null +++ b/mods/z_extra_mods/bonemeal/locale/fr.txt @@ -0,0 +1,7 @@ +# init.lua + +Mulch = Paillis +Bone Meal = Poudre d'os +Fertiliser = Engrais +Bone = Os +[bonemeal] loaded = [bonemeal] chargé diff --git a/mods/z_extra_mods/bonemeal/locale/template.txt b/mods/z_extra_mods/bonemeal/locale/template.txt new file mode 100644 index 00000000..f4023ac3 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/locale/template.txt @@ -0,0 +1,7 @@ +# init.lua + +Mulch = +Bone Meal = +Fertiliser = +Bone = +[bonemeal] loaded = diff --git a/mods/z_extra_mods/bonemeal/mod.conf b/mods/z_extra_mods/bonemeal/mod.conf new file mode 100644 index 00000000..fec08dc7 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/mod.conf @@ -0,0 +1 @@ +name = bonemeal \ No newline at end of file diff --git a/mods/z_extra_mods/bonemeal/mods.lua b/mods/z_extra_mods/bonemeal/mods.lua new file mode 100644 index 00000000..4accbe64 --- /dev/null +++ b/mods/z_extra_mods/bonemeal/mods.lua @@ -0,0 +1,116 @@ + + +-- craft bones from animalmaterials into bonemeal +if minetest.get_modpath("animalmaterials") then + + minetest.register_craft({ + type = "shapeless", + output = "bonemeal:bonemeal 2", + recipe = {"animalmaterials:bone"}, + }) +end + + +if farming and farming.mod and farming.mod == "redo" then + + bonemeal:add_crop({ + {"farming:tomato_", 8}, + {"farming:corn_", 8}, + {"farming:melon_", 8}, + {"farming:pumpkin_", 8}, + {"farming:beanpole_", 5}, + {"farming:blueberry_", 4}, + {"farming:raspberry_", 4}, + {"farming:carrot_", 8}, + {"farming:cocoa_", 3}, + {"farming:coffee_", 5}, + {"farming:cucumber_", 4}, + {"farming:potato_", 4}, + {"farming:grapes_", 8}, + {"farming:rhubarb_", 3}, + {"farming:barley_", 7}, + {"farming:hemp_", 8}, + }) +end + + +if minetest.get_modpath("ethereal") then + + bonemeal:add_crop({ + {"ethereal:strawberry_", 8}, + {"ethereal:onion_", 5}, + }) + + bonemeal:add_sapling({ + {"ethereal:palm_sapling", ethereal.grow_palm_tree, "soil"}, + {"ethereal:palm_sapling", ethereal.grow_palm_tree, "sand"}, + {"ethereal:yellow_tree_sapling", ethereal.grow_yellow_tree, "soil"}, + {"ethereal:big_tree_sapling", ethereal.grow_big_tree, "soil"}, + {"ethereal:banana_tree_sapling", ethereal.grow_banana_tree, "soil"}, + {"ethereal:frost_tree_sapling", ethereal.grow_frost_tree, "soil"}, + {"ethereal:mushroom_sapling", ethereal.grow_mushroom_tree, "soil"}, + {"ethereal:willow_sapling", ethereal.grow_willow_tree, "soil"}, + {"ethereal:redwood_sapling", ethereal.grow_redwood_tree, "soil"}, + {"ethereal:orange_tree_sapling", ethereal.grow_orange_tree, "soil"}, + {"ethereal:bamboo_sprout", ethereal.grow_bamboo_tree, "soil"}, + {"ethereal:birch_sapling", ethereal.grow_birch_tree, "soil"}, + }) + + local grass = {"default:grass_3", "default:grass_4", "default:grass_5", ""} + + bonemeal:add_deco({ + {"ethereal:crystal_dirt", {"ethereal:crystalgrass", "", "", "", ""}, {}}, + {"ethereal:fiery_dirt", {"ethereal:dry_shrub", "", "", "", ""}, {}}, + {"ethereal:prairie_dirt", grass, {"flowers:dandelion_white", + "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", + "flowers:tulip", "flowers:viola", "ethereal:strawberry_7"}}, + {"ethereal:gray_dirt", {}, {"ethereal:snowygrass", "", ""}}, + {"ethereal:cold_dirt", {}, {"ethereal:snowygrass", "", ""}}, + {"ethereal:mushroom_dirt", {}, {"flowers:mushroom_red", "flowers:mushroom_brown", "", "", ""}}, + {"ethereal:jungle_dirt", grass, {"default:junglegrass", "", "", ""}}, + {"ethereal:grove_dirt", grass, {"ethereal:fern", "", "", ""}}, + {"ethereal:bamboo_dirt", grass, {}}, + }) +end + + +if minetest.get_modpath("moretrees") then + + -- special fir check for snow + local function fir_grow(pos) + + if minetest.find_node_near(pos, 1, + {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then + + moretrees.grow_fir_snow(pos) + else + moretrees.grow_fir(pos) + end + end + + bonemeal:add_sapling({ + {"moretrees:beech_sapling", moretrees.spawn_beech_object, "soil"}, + {"moretrees:apple_tree_sapling", moretrees.spawn_apple_tree_object, "soil"}, + {"moretrees:oak_sapling", moretrees.spawn_oak_object, "soil"}, + {"moretrees:sequoia_sapling", moretrees.spawn_sequoia_object, "soil"}, + --{"moretrees:birch_sapling", moretrees.spawn_birch_object, "soil"}, + {"moretrees:birch_sapling", moretrees.grow_birch, "soil"}, + {"moretrees:palm_sapling", moretrees.spawn_palm_object, "soil"}, + {"moretrees:palm_sapling", moretrees.spawn_palm_object, "sand"}, + {"moretrees:date_palm_sapling", moretrees.spawn_date_palm_object, "soil"}, + {"moretrees:date_palm_sapling", moretrees.spawn_date_palm_object, "sand"}, + --{"moretrees:spruce_sapling", moretrees.spawn_spruce_object, "soil"}, + {"moretrees:spruce_sapling", moretrees.grow_spruce, "soil"}, + {"moretrees:cedar_sapling", moretrees.spawn_cedar_object, "soil"}, + {"moretrees:poplar_sapling", moretrees.spawn_poplar_object, "soil"}, + {"moretrees:willow_sapling", moretrees.spawn_willow_object, "soil"}, + {"moretrees:rubber_tree_sapling", moretrees.spawn_rubber_tree_object, "soil"}, + {"moretrees:fir_sapling", fir_grow, "soil"}, + }) + +elseif minetest.get_modpath("technic_worldgen") then + + bonemeal:add_sapling({ + {"moretrees:rubber_tree_sapling", technic.rubber_tree_model, "soil"}, + }) +end diff --git a/mods/z_extra_mods/bonemeal/screenshot.png b/mods/z_extra_mods/bonemeal/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..c4b9fa718333f8a3d2d64c35b96daf21553cc365 GIT binary patch literal 15254 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 g1#x+a{My?f?N!3zopr009U@dH?_b literal 0 HcmV?d00001 diff --git a/mods/z_extra_mods/bonemeal/textures/bonemeal_item.png b/mods/z_extra_mods/bonemeal/textures/bonemeal_item.png new file mode 100644 index 0000000000000000000000000000000000000000..f141263050deb0b33da6e60aa72dc8be63378ebb GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b$43CSocZaRDR=BKY8 z9cn*#0;L#Bg8YIR9G=}s19BogT^vI=uKS+5&D&tW!Fu5~ufkiVB=H418m9eCpET)* zLd~25s*FFnHa9+s=@FV-yYS~q{B-6 literal 0 HcmV?d00001 diff --git a/mods/z_extra_mods/bonemeal/textures/bonemeal_particle.png b/mods/z_extra_mods/bonemeal/textures/bonemeal_particle.png new file mode 100644 index 0000000000000000000000000000000000000000..71ef90f8155d14b78236a1bb3ad25e4cdd145f8d GIT binary patch literal 116 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

$?E7bVHP~MkoZL@h&o4;P|w=v(rJdo`C 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

OI+{9H8ZL`}*nlRsobo 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 z z@y9i+M-!u2`@8+l?0wlj5YBWx82IVRU7z=g#BSC`E1KZ6KBDg)@Y!M9h*IU?OJ>o<^z ze?+vee-II_tO80VvVgwcFF^pJ>({})Ae7BVw~o%g0}O};EI@(*t{iG~s2bRy;gF7%=chNTfcoilmeuB6$Ex)Ph(VBzwtWpg3AscLfW(l0=~9FAs{ zKAnpqj^Z#_cd?bBq#wHeVkJ_J8ABz%@f1KS=D21&N*?Q^ZAYIe+ec$la)Md9CG;_t zm@M>wTb@R?9-FIYjpAORyxwMx^shH=zpGRM2!SWAo6`EAsQ zZ2VX4sIzu-8&lP;4u4HiKUvxjxg7&=v1faT?&&zAh>&69ohDf}5${VxyHV7pqm=&U zoV8t(7NL?zw7ChzGA5grrp9dXKz8F* zXo-5kZq{%u#=?x`v37c)LHYU44~QgU#V0V&e@&4ODvf~C7WVL-4u``8y$1m|F`#au z6`bUCG}KWUg%hqn&;B9$E{Vh4BP;gi`6mZB`D2z|)K5$XW-nDuR(i&q?TM7@>r1?u z@5Sd*%`dDCTdA&pYLiHrZfovMSa7!Q7?FBy2g zG1Q%5BXAr>NdDe~u6;7<=V4`H;-BPoW=c|Oogy_V$a(%~V8gPm)_?zZ0eu2Vz8haz zFxtwVM)}E0{yE9Byvj^;HL?ZJ=7ytz`6@}HaBoVip+eo7cau4ynMG#g%Y1m zBm6wc@ric!h@91j+U{iPi#S4`&zhpZPm%X2Z-QcdX1D_@z;ArGF06%z`EFe9_XIQT z)}O6UJ_?%#jBQ}ps7@GuYQ|d}WFg?1XcUg=kXf^lopu@V`N|`I!O78>3*S*z0 z{n1-w{}~zzOs7;SwRdWZlC9~rpK|l-jmIyemV5}6?SahZhLwNzzlF;a5&f&t{Mp61 zVN0!vbIA_mDH%U+PuDd`+co#(0cGf8fZv#Ep?G>I>K)vHT;iQKco6e1d?2*!WdGPMDRSug ze!GFun{WkM;}xgMi$Zvk*{gbmceii{h>Fy7srl#|oXW#NfTU>lQ%WJ-Fsq!hwozND zropFfbP0V@v<*&ABW?Ln@4=l~X-cNLwd5+FtHT%H_4f52Pu9|W`=;*_$YiU~NYK46 zyOchFDD45VPNy1NEF+9rfI*#mMFWm?ruK4C4rMaFcWMF+U!P* z5Q~}pb{qQ12QHTN_i<*Z>)8=v9F=URnVDY%yqP3R(RL8iK#1-vj1*f74cH{2@+~qV zG8|bw0LAEdh0uS3F|21MH{=)_lx;;=k^HFZvNJ$a-F6 z?DG7vRsoEns6RWR<@6Q5fj^bQ{r6=*&YA9P*k%Zy-V4ThO>Agrp_22olehc&H*jw< zlTT1LPL;NsOb%GO+G;X>bQ-Am4h%aM9=^MDIeyhF$K*U&;44yv!cvT)@~sy|t|;V1WVb6z9cX{{&Xjm7U%^9WmOe&^1PePvhWNS#jji+l;Thl3$xg44Pu_-80tM zrdYtl0)n2?DNVnhU`h*!39c2|bAGF9+X)Evg-V&xy;(!Y73D9Rl9_e;q6QSENui<$ zVh?}jSf0#BVWRy=>M+ggmomeg!1(8*hF-gLmn!zzBS{mP=0CGo09Dp`cy@=^fLxSX z?B3yYF8qU+2%y4rA^%}6HWTnNSmOZ7CIOHCY3~7V=9?!l{)z<`K>IqXxgr6PVEmO= z=rWeY9C|g?32+%XV7}MFBwtV}*a5uzb=Am+U?eE*=9nZZ`Ex`4XVF&>fa*m+{MI%5 z7myetzb>w>hiX3GobGd?Jkhnb%DYQG&kYFF4fOw7`zT#Gdt_udQ0fZ8^5I(e`cn8lA|LFk1~WHx6$XHU&I zK@QK`Hl*doNH9>v*AzuQxyuMaa_mZGzY(>H+IGI`^Pt37n$D!FM|-HGJe!}BEg2Sv zwMN?3Bq|+Rj{>->8xjMIp?=5^BCM+ucc;p8Uz;$zHIKdHQ7D?A8Pbb1cw=pz2Y!?D zEy{|)OE#W{uiv#Xw^~qf(~1BJN7^XKTIkKCGl3bzR=pQz@6da+vYnw^&xwoRqME=r{qk=q9!e-CYw6Wz zYG!zdzouVs4Z@^(qWk$zKLfRMoH};IPg_{9wQ~YxwM2Z-L`fLzq7@Li6duSSENl=k z0MrM>J{)wIznMZ}NSMEA;a@u}wEDU|{dt?wGo7TX_n{cnH8u+<04CO6^6*LUGQWN^ z^)A$-G$rT5##7rJ%59mRovoV4T>Qy4wJgQ&wzUwb;Z-79M1KCPEs^=w`_FBzx$lci zX?J<1=YEK~a_bE4a$HeVj(%E^h@C`t;?&HK68UL?BQ?++0@r(DeecYQi2W*JBhrEE zf8c}%ph$&R6*iP2D$W1292!KhTe+s~f3u|9T*%NEWlnu)L(J8GDvod60(cG^m1UBC zjWTNZUG4v&7EmYRXNgK>(}R8uGG(ZA`w-#fe%C7Ra9S00bXIglHj z_bvV2I$(D{@`1%M`2)iLKF#4(VC_s_AcOgC&23sE$syVMxJdiQ-5-E|WtRL>M&jzk zvHI`UHNdS$WmXFMfJOAW5MCFQD4wY^PAK{T`B#pQKKcj@sz?-%AH<5U1*G07JBO@c zC@aZF{{Wz*1*wA?31(i&)>YU}24va4LJ07jwrShS;>hMRw7ik>9m6F4MRu{2e}nVTB$DP2OP#l*dpybsM7Icc z3OcmRBp?7GdZ#k>_s#dMVk-4NT^&v9ydBA>ntrBfQ>8Vo>L{Cjou_L+vb0on*l)Yw zxWpu|>PVG7tXv5s{B-w9suOZIch>PL`q+LZBjfuJQHjN%leJhG&#d3=x29HBxz<>5 zxb|{;HW$gaKj3w;))MQv26S0kTD&j7Gp!$$@HrXjkgo?7HC)|RPW#2mNzj*O^EoSB zNEU+>pg!4r7%?B(o-Q^+&8}nuDA2sekJ;aC!5fHpqno2r+|DUH=tx3F-)*UCOOP*! ze>r_gFwTe$3njPD0Q=Lz!_F9wD#x*)7YRuugwvFai<2rV=MhJYAVMs++l)EXm~Laj zRO;4ol&x%+5lL-5!6W zyY;GWdJt*oA`?nXS>Ea10v$V@nb&v6^^6J047Kw}u#vW!KFhKuD^CK{t-VJhfY#Fb= z`)5!S?V?C92BI9&3Jp+7vIZCbt1`fyRuX?@J#S}cJ1(DCzUwAn69*fTr}Pm zX){0bcQAmXP&#jSX#ixYcDW5kmwKe}LLLMNaz)4xfW>n9ty==Q*9O=fmaC6MBG5(Q zHblCtJYUz*4^(>U7JvW%!$I&GGh!kGyo}fO6Tsk{v}+?v-34HO|$%<|t4QkSk4$crTUkSDn}NZq~Jj#0C_WncFqH_EskWcZ7NLh$owKdtF3 z?x^GebIcgwNlg)UIkm6ncLP8!aGe}q z>bz&iMFY}*#F*VBzm8qH&^$rnZi)lGv92|_liAHv$~{m z(HYtz7qQVk(uG3{VVzM4`X2U&qO)J&e{dXW9?z{$7a>Ws@>|E_Cw za{3p6kk71fw6LU1^3z?|AIY=^Hr<-q?WUJi*YPW+*R-w3Qb9gqm{Uv8u!THwKi^!W z%LR0#+BjT|qV42b3emQhJ2&WV*UZ{CDX^%sxK#q%8}V6t+Nmh3P>8M2-|%vCr?w$#>t24ME9S zW5NW@`4YEOU2rPdMXIVYEGMo9)RM|wO+Cq0rIFqL^vNupOdd%TaM7n}Vh@KWd$5{) z(q6)(i1{Obg!j$&3x*+QAgS04uFQJt%{9V_Zx*)7L6V=P@6p-Buit4Npy3e~CQH-$ z`W&j{mSqysJ?Nf1_qW#h$Azn+xzU_yqa9-Sn`0hSfZfDcSZVn_E;(LmeK*O#XYPOGZfJ=9)owlR|~0bhcL^jhBcJ>C5k7I zv^awj*K@UjP}UQq2x_o6SjXyc&yn+8e@J4 z93bS~0jD*8xaL%`Wl`=N`kE+zi3CC5oxKr(PpuURG(&R0ABaXWmSnsu1j;b%<62X7 zY*3&umBY)9Pj?J$K=dCcOy3EmX|<2e^Q%wB2Xf6+u^sV31|jyBAa|wlh+wc8g{n;H zjxqx!TOgiyeQD|Sd9>c(4O)Rqi_b$99=~k+XCt22y;DqEtu9Vl&S<3F1K(u(gT)#4 zdB5RD|6I1o6IUyCzEi(b65pgoKc{!7C+OX!TXGt0{SwPB3((p7$KvwXDKv6haAUIY zP|{F_oHbcE$75efw! zN&v-q#3Ffcr!s(D`rFBvlK=DuaHoRLpu+=m?~O0*YDt59Ibpkf{HH!Ew-Zip3qHxG zF;FU=dd&>Ong*OT*S&y7sXh>UPG-^30_w|->dhSiN=b)H+y=2nbmb{p9Ver}H?3M2 zJ%yZ7p=%<+>*k*zynbgPjIha?HkX1^XKN~igu2=IZAUr)9x)H zY7>QY1u!Yd^uVfJ+U^VfBL6Mtl@GdDU0GG$wh`H&$xZGJoCNO2cvDuuc{lp`;X*lV zJ@Mynm6yJm<`-^{2Vqp^O$HB6kINOh`Cm?we}9sC&gOk|032pkE9dpUBvibH{T>j> zpskdKd-?9vVwTVJyF-^BNwQR)-0Qzc#p(GK5Di(ZAtrpcvMSn-Rmw?gX2Z4}I)ysX zPzKRTkIN!RYGQ_xmf1pIl@c}YNJ|@oz8j2wP2NunF zie^)CVbJ7nzNRB^@S(hybop&cgApZQxjh4$h;O5Waw|PT!ps)=mG(6#Y@CV ziyWQ6bu7tJ^l1X}K4?bp%YWeMHNDxe`h(o}c9AjsnyE}U{RhzSA+bt9Xb`c5&!cDO zT`t-uy27`H*PSDml4^fpj_ZfU-Y-QiEyjmaaP$j{?^t(zTlc{-ZPprsQ~w!Ro#WJ> zvm|@ew|4J;OMd^jW%7sRqF?NDhyE)@^H38yx}754{FWZ-fj z@%Iw7#YFQyns(Df_j(6X5dl>MRq9YB+RMXp+GlD{<}8N%{8-w^F}K0tEsW>LQ~Hqp zdmIRKMNZ)xlwfkgAi(M7cS_^@+6ML-K7*3YnCbwvN7N{qZhae>xVX_oQUwTEpr~e_ z)ju2Vu3K6zPNnNdB?3tm zJA2j~F#ZNao37sfVfRx+#0Hw`b_wPJE7S%O?mUcZ(VvpS5z9ofNn>(3g(+0Tk z*giu;`R~TqpC-0Xir={I%qrNgE+jfCj^xy(u1oX$e0QZ<;b}$~f%YnafrP;89()P( z;q4-Q+asyV38cIZn1rlW;sp?D>g0oGGJ{H%|6riC{10XkfKG0*>JPr9OIQ0#~ zKa=_K$_{bpYEYfr5Wo%BHhL+mUEuoRBbs8*LXXU+i1p^9&W;!9#um#qs$JJmj8}=j zV7DaGDhb|C#fH8bQvCxmdO;{f_8~yr?|CnKzqp(p839qP6+4Uj_D*4kVWSk?Any&s zqby^kShWIE$3r_xRomseZz}XJ2NNWwoPZiVT)|tfDS+;U9sdJU#3mZ999A$m3zM08 zVN%1h;WCLNlJ7VR0l|}B?#YLyRh1d$(2U zMfthhWE3|?gSTUIXV!gXe~ToBq($=?G?~z6A6Zi_N>v*EV>ZKp>N0%f0xs;*5=)+4 zBdcgEA_Cv4bbJJ6Vv>38FNkD85~4QEDfr~@=yAZ8aO~T50y8J~DH?GfSN*L2P}jW_x5oX;7D zZg*XQqc|mA`l_^FOeCP0hWkOaTO{~)`8Nn>h!=kiA_b3YSM>F<@*C@>wv>`;LUV7? zuFxY)-R|_~JBb5Axh*Em3YF8(gFv>7n8}GE{;ITauu9C>>+R~y9TQjqV z*l=w7RAO4QU(@w<5M2!SDREY;Gz@pc+m!sd1j{t?GOLP4NCG8>pt$QZM!}2#P^q(j z6QlRi%{u%BIq$mJocn%a%^az=@0oJ2T37VBR=*ym(U8369w#Ut$z|vlf8gY$%l*(o zu?*GXcidE0X@>O;JJ9>zt*k(Z;e^?EW5h^1fmunf?+%Il;h_se#Wda}lXnToJ(AGy z2>)SoP?vhmVfOMuRzG!lYYk?H{<&ChSf@VV0b1;Te2F?wmeu38=u@C=;uQ+=pvZE5 zLq?FHz4=d4A%z`aPXX%wu{JW||3}XdIaSjJ%7G&KhqYJ$g)#o&ctEZjiMz@=cxea; z!1i2WjAbIAviIx2R{=>G50nmaRbLwllBZU`7Fo#vM9Qyxz-H!IB?cgP6u?NIjAfdd z4F82qIhbBm%9SXJph&0$CEWj+9x(qT;3d!%D471~8!8zmY4w_T;Nwa`^xKQUVMYM= z9nK}?)q2F2${kTMBxceWF#U_q1MTZ)vvavRVv~K#FeYys6#dpI z{Gv8`@`$)1-?K5AI@(#|vk_eUx0xDKz6mG7^r&2=`x+yt#K~%!MwL$#u~em#2hXaz zL$qAPk^+KTU2X(2nMZg9_W~p&(QHwPiVm8ZpGQ%`$9Oex*PpLk0k*0A%Tm7T@cPBX zp>o>n4m?S26Z7+1yg~CpN1}$U-w@?<+^eiY!g!Hev4> z^Z}6}y4plx7WZD64We@}7M4V8d+(4awASY3nrwPVO~KN{WP(EMR59y3{b+6 zv?Xn*4JpKuu(47M3ZCFo*l=*mO^I)A(mtrn;*)8RFlA6d7{(0uCZ{yB7Z2fdaO4MaH4W;epk_B-NQSu2WFf*zr` zeX^K!istXtwh&=C3b&F>R_KX9edI$@a^+*j-sYDINA|gKIS_0j?a`#Ys-+^H+#oBY z^cz=xUM&7I=LbYC`BeMiQP59`Y_;P#x388H7S&Otx3aG(=mLKLUICN`2;qO(DJ>{BwA^RrO<7f7*N*@;xs34leypMbSDR-HLsI}s$fsce16_fb}`S@ z%IuixsI%M_1giY}RB#sM-iKc3*dzBArbr9VlV9qYU8 zMN+hS3gC*uKTf0U*L_is7yO=nM}m#V^UFHgUc=^N->Mhc(fH0>;)ls~{pab^qm8mi z!u=$se*4K7r~D>g2;P4Pelai+-#<&Ji@#8HfjYgb{J!#=kYuLLE3EsP><-)E&Ca~q zjP#Bkqt8c|g=#V+t8?;YWquDga@413>Bdh-t&_DLWSa{Qr}q_DvMzw5xa>Qz^F*{V zZ$q!!^!{s>%&&*dESu>FQ@iSH+RgyMznTtE30+j9G;lK6fTw-XY03Raci=Zg z4-Du8A?+r#gA=Gjr$A~sG5TJf%qZsIQiv@`Wzz*`9GC4ejRwNQW)tRR?#ElAOS^cU zFc^&-r#5J4oUU3m zXcNFt28bws>)wD~HctPvfJ?AxTIsW`wf1$5z>s6DYaZXLlBrX4AuAT4-Fd*-TW}|h ze*u<*aR3I%#u%5yz@h~@7lh1I(s0=^r`OyjES(^&b`?v@1lExnSdw{79Ff?4w5i(7I! z_$v-EL8xpSsKAZ+bgwz4e7HznfyhS}GenNHRfTk`^RMle=`ZDBV{wx$n2E$ngDQj0 z-Aq3u4a(h`)bRFL_90f?;1Xn*_u~W6{q=P84a2SEds^h~swIdRszT0bY=ktMbYEu- z%Ay&e?A+VRE=Uut4j8?qRriT_FT+)IL}VnMPakN*a4V9w%b;lY`jx4P9HI?|phZiE+5J?Ktw3VPp* zq+Ng~; z!@Y0W=cK6LM_NqYP{CP~6o~uX`50o8vIOOx)red9H2TYjcVQB#;qCxd*54BfJ*Cf< zR~oSz{U7C|%a;@;zHZsczlbjMHT#|PW}^7Nmpb2?05(n6UBU@?hqg|ZKlx5*H~q+O zI{TtQm%7}857FeB+fpmTSzw>#CA;%k<>2cteX}|Gub@EKiLesQzk^T;lQLza zlw$9lv@o98_-Q)JVt{;HsE3eB`;Q0K<8xN)OHBf7@EdqHIOEswY9Sgv5>JjGrl8*8 zF7wuDFsXu326H6)u1q29iq^G$QJV9j`BLRg&Q8~>pJ5;@?E-SvZh+sP3Y6PXc0GIWsNCAb)NNHG790%Dgc6uqDI^q{c4b9Fcjtlb*xB5}!q26ZwSP$k~Nu3Y^qj$W~Aau}0fU zMfgI`8K)Uoz^(00pd4|M~btAW5w&!7QO!2ML}|(~Z7w+A}*u?sS>$Z_VUd zKdzT4Z9ncq9m}Kf#6hpKxe?UX%EZ23k*le|x%T}RT;t8yx|+0K>xl0)y%&sB`=_Z> zyw^;C^ERq}shyngPHtYsyZ3QMPsBE*7cII>{a)`WnPwDQFFJX@e=92|`U#DI@dI~M z24IgZTFgysh?*_M&25T>mU-IbI=@QXozv>S*M;Be+pDjY(gwfJZs{`+qQ5%cz0<)T z!hh-On_0;>(d-{k3npz-xea1>|5D39F{}fR_lH9P;j%PTX?p9A@wIzehKv=zXbk1R z!qSQBF&Vr1R$s0;a4u&&j?s5?O|ylvu|u}Yd zc`(SFSCcaLQNMYen1E3T?F_+B*CMqW+9A}FaM#0h?fZU%%He*`?%%fraImJio2KcqF98*IZwzykxfghV|R!?uWhd$Nzf4{hSoY_*m)xG^}P zY(8GJQC?vmhAmC{j)SVGYnnfTrAmVhIMnmslSxRGRwar2RxS*id6iSWblm}%6)-1R zhIv9>9co@_%qmW30%&t!iTFR!ehO1oX51Y;a!mTvNup5|b)Myoo_g1m^JDBe?p{=5 zmsgoz(qoW1aZCpNZZHf{wrh^3>fI(hH2?|--A&LgIRV_vkMQ=dyy9vSDn5wCD0J5} zW*@Mo{6}ETXBKUF|Gg}xJPbaaxHEIO(;dQw65;K_b9K{s|CbY<4Y2fGzy2RDO|4lQ zFp4F6ybBBhPyHR2w%$HLH3hR(t@!FJC*3}pXy#B7M9NJlm6Xu3YzjrgjT@_$E@z;Z zTU#)Gl-dcFab?nKiTk3#4O(RD9@vb}pxg5BNRtIk3TCI627@a3vjqwU_V!?(dHo1@ zp?@4CN7rn*a>1`=noK!0&6kcv?BX3C=#9T?z<=1*rnLDyA)6KM#01ha;`+!$pXyoM zS`;DuG%ftFx8}pL%~)p__CqvTM^_<}&oPMk!jpHgA>aD@0r@6YvtV9YQH4**vN-6F z6}Cw3BaOQ%o2?a}TZ;7TA4aTPmiWQTpgkr6ke7AbO6^H%sxC;qKYVGm4&<;9II8*x zvirEt>dm;NyQ4g`2m5<#KY=)w=|Wai z0e)C;2|_Ou!(Fk+#01jFbgvOTnPTKjlHj{z85kv2vvRi3UpK7kAF{5pcv@0#kVjpHhH$*2#9HpGmhEiyMfg z8(ZK_zBT4OZR#qYPZhpjmcmxK#Mm;%&_$Pb%3Io9PLy2bnjM z*#$g#K!+I?liH>n4BLT|2V8PWsu`~lXZ?!96lwuZqaOZc40KY688DB@;pDpyeZ_qO zkP|3tZOHWGaCd|4{9L}(lCW=hZaR>=I)Db_jhoG%tXc}DY2^h$5d^Tk0$oQ417Ndw zh=lv`TI2^98@RPXATwqlya6_YHOE}Q=lQQs#+1zl7)A$ZVtkWw1DxQZ_5bYfy2SiB z(oiy#46K3Aysi-kP#tijuMG+ygWK@_)23obM}IZLc{4a%^3A9F`h8+sg@9hRL1(U_ zvm^~~uQR0pPUM7)kV}i4yT2?KrxH}+`3Bn>)#npSjeRKD@?mpY6IOg|q(}zlb9Opc z^(M!{aMEc(XaSgvP;b>GEb>ciFH43n)E+a5SdB?zc(E?YktoOG@~h8x*an%!Lzs3E~y zI+@C1eY*N_7w#{UID@g2CYe{_h&j($`bTTp>Dz|#O3krb00$rEh0MOL0+HhMc-Y3? zRwLm7oAzAX_D8cERZUKTK4Qv-AS@WQfw%^^?dPm8<5HL*6PVXvR% za+_ySZx@!SY1%E`Q>nMDzR`dA=8~%K_W$wq)lpHkU)!UA3J5425`uJtbW2Hhr*t>c zElLa^-8p~^-7&OCNeK*{(%m8bo$+~o@B6NAz2CQ%f5^-^_ncX?@4c^mU3>3)`}6vO zZNGGBY;vLYv3Hv>a$)^NLEcw&P4kPe@4pbm!{;5}8XUi;j6R=h|Crq6%_nB?uf_Jp zd^|H9wE9fC)HwISp09}U=x^J{%_GaVB)pK0$$#<3e_N<=tmq3GkSI#f|8AClyR9ye zhOM}rq=L!-O9kAse+SXflVQ3_E&#p-QY&jr&WZ}l649h*aN4*SbG{U3i}X1PPdp4acJez!U~75-VdX3IfU!h^CRvkT`LH#b*ogI>tU8LYpHJ7iwc zvT%eTp`rxOv138ZVP-|;ri+6`u2LntfuajLQE9dN*wJj%C^W+v;+FkVOqKiAnTkH3e zbl0A?U(aH_uecqzgp7Ys1+$C>tea|}KGd6>!|+O`RGbuRt3Zte>Lc#Q|KMUQz_D&Dw)+X{ zg&)kel29X0KLd^o|DQ(WB-ObR6m(}a(Kt5GOPwAl8`BVl09#P1VcC?C6U5=zeh0Wpj)GgPxTql z)_IO`u{M}5yiZc$P?Pb?8kSF%dmX~%RPGIbp`+t!#6(;;Wga1oYqt?^wCMIAgv2*c z^KI~!hKiFDdo?YxB`Jbv6D&XBuE5XfPW8G^UTyP9>%Igf3tei!`2@+sm7db=osdVs z`hbUdk|n3w2Q<=Bx&i{!qSt=e_|z|Bdgk3`Rt@82dg_m0O>^Buo{@n{GTUZQ%q{y#CPS_j1%~^wsw=1;fak@lH}2iC03JEkCwXR5RG?FM66)PD*9&cTcY> zrjZ1MhLc_fZ7&BUN5AqmKaQCp#qCZXjrVOasx#JXD4l3kD4d8co@wxQKlNFk#26V7 zye#=5Be}&P;3N4V=wObW!m9PN0T0O_t%tGPnbDOz2eAT>F;x^W5K#X0ihJ`o4eKi$ zMr)lT%MjLxgRs?dtn_Mb<>dQ>sfNh2de7TOEmpo8${=QoT`61wCVf zt8-s}qUfVUoSj7YVX{XNPwS9n=brZl^eMUDo{k%U9Ysk6pYfF&VKqJ4!3QHUroc(` zrbnQxLJEW}z@2wP=Ruxn!JKILNXQ=^gL2N_Ie?b;{>dLj5pRN&)LtN>^Dpn$JfNcX z|KB@+$rvC1!YJHcLtdVLOGu?Ql=mBq?9^i}?&u^~rHeG&Br9E_svghoCsw9afSb~f z8-jUjN;uE9#W5mb-qze7H+_j`a?VrL}&Cfraa})FW-dtOKQI zs(R-H;v4A`(-rL#cDfL%2YZFe+-+F8uw;Ra)ZRqZ4N8gD2>L6vCHnWI!adVf#0g&P zK9{Yv?l(QO*{}MTlJyOz3U)6;`j@ccROo!B8Y{GSou}zVPT?W_W*M@r8w=z%&$!f} z0e|imq5Ucx&5IYkB}r}42Svk1&D*zi=|yme^ac6!!{c*1FaHKxQ^!hTFT6;}EU#;^ z?TL!H6KI|{E&>tpl7r(0H#X+Hf#k0e`1C<+#5Vu;cNQOQ2*sG&yW z0-##MNMyu>Rk^7dsbhK7x*x;Vb1+?Bwlcu#e<8Qh z+Vwa3{JWBRBg?Rk|LuhWpG_Cqz{q~%dbIr<;QkDb*FEmH=l*kbB^SbrbnM8UUGK8o z^taw=s^#f5INmN^NEhcK@ZDYah`&sW$3IR6vjhqF6+p(ZJ4@J!bQvnV5R-oq9tgzr z8@Yohl#>C#aLbj~zYZ)B#qmtwn3k@kdC?wMpWDzseYGDdfEh8z+aWew^@DhmGmH_p zZzsQ@A|y1D@TY-dXky@jne*Qd$rMLiEyrw=g4 z-VTxZn;1N!`vni-2M?p$FCuqy0}tovteW0lI_#EiqQAWD7mrd@BPWgT2_vJl%m>=I zYpl6+>hCWf<^sAfl7+6;L@iPmh+!cXyWag_<}_+C&B9FgVu>6zY7bHUeZ|(QetHQN zIjZSVTJL&Z19Vm6r>Y^$lK!RhwmIbAqF5uhOk|k_s$DWFOtbgN{>))lGmT?M9$!mX z?YH)y8|t1dQ|H|%Mgs?_hZ^;5B8AKkKyU2B-x3R~eIcqrP4W*B8JpfSIvy}VFs0&t@} zfn0=2m(yMD14QFzIm;b=1s`+6!6$F?PZjy9dfKzLC)?Kc>7O?o?lC z7Jm-SX48BUi55|iV)f)MW~;qSr6=#N;7b>ek+i7RsW=qly&vTM59$gWYOgTQQooV; zo>f_n0Y&Yb16z+SJ~fW(CSGLHcH3!Un+?y&SkcJlLRG^&XlPY`F!3x zv8&f{=@a0;>OT>pfZk7vVGl@?ZJC~dx3;f-uh%mf3SX_sl}-yD&9sj|Em;>&>Vjo) zbIuuXfOKOd3GixxKexiMlN)^Vw2nT?waKYN*D-i-y-GIvXNb$~Y8SLSx{8iOaS{_83@4{)EwxWM+vVn!H!;wTQLtCVY! zwPgaI!zZhIZ4_XyKK~zUed@{>&2Vk;9GJ@RczJsIsBCHlNPT!qnFE2Z1K+cr_A-^K z+0~IY{Bi3mx?A@L2-=vo=zIQB8SEEBK5evrxL6nSti|AA+rKF9jEA`!IxhEWW(SBo1kc zCT>9UciNT|(Zc1Z_-3f(4(rs=$>8k2)ouQrHe9f&0yX`;`OV}83NMICPvSCa`=jCf zE?r3Q4moj0wZ(Q$_)Y8a((QGXI)_++L)!^)0NZ=R^@O7NgMjshRa081dbha?%n2Hy zRlrEDAXlg=BO6m(Jg|Bkn^=}hjpN+Za&q<9@d1+FH_ujw6pw|fdAL7QOy^Lo36^X- zS#Q<{S3PN`OepbvNh$Won3VW-e)F}vJj2V#?(b^~yWGe;2_?Egpwv7x^X%{4)fL_e zHAV!Hc-EIF)=*bPufv_TvC9%7)Sf;~SsqEH&Cj{i?k76b(Bs{TX1l|-wv2T>0Zk#B z_sXluuCMDImOTGKOe9Ji;#3t0kx!AI()7R$xafTfUo-gdEKS}_huoPt5mJ+=2S4I%tG~#j}G#j>9ldra1Yy75Q~xl~k?nx+=PM zWFBHuc}tm|h?@YEOcjGEWP3H8n2-9$Pl>nCV^udp8C10M{O&2l?Yu#Or;U!cc#}W1 zOYmaKH1BNdh)Zk~$b2dRw6PZ{Vdotgf=K>pi$?ZDWbSk!nr6-ydL>oGlWRbPizVr3 z<8>SaVge{|fnmih+b5xlPB%7gf;(fB2@xY!1uby_w)tCZy%)#6?e&tIM&fFhc|fW` zviSqkQtJTpym~2kzTEXwC=m0pva}njYERh++bKobl2% zqx7vxowih<#W#x|=8`+YHnvkn9y5y*etS0?K(13Yq7Izovp2Q5n~N8OjY!HmILit; zQh=uehYb=m^5I+ST2%|u)>Xdo8@MUWLiN5=cHB6G{G{2frHrgG0>JqbQ>mbZOcVr{ zL1KJ-Q8z1e$fIPhIOxKd#hamm4g!dd1>Cc+$3%wY?1n>UU_S`8h-*YggS z^tF`0(XrlVdo^f1;Ku^1@|I^&{nE(oR!ZzqV3+SS@RGNafpL#AevBA~G1k6-?W}lk zd-iWnKCrE&6TSInlN}YYVV$ip^+kb0;%7JG!mdx>H|g%71XtQtqq&cA7wz9BE;oE% z1Y|#$-$zskR&lCvX5BfJhv`=$T@(3h#*FEE-wv>d2+)4*U*i+m+V+H&Sq7K>X~~Q7 zc*1IZT$Zc4Ae$pw*0;B}<`{5CSeMs%)<{Fn_51kC&EiAuVlO#aA5)Fx0k>Q1S-@4d z5j0}09OBkkO?)yPk~dFBOPBEd3TobWEz++hzk?nNrENX*MuA~#J5Sr;r^lC9Muj3+2Tk$p^$r7yNx*3u zBZsUlVzL!+ron~hTbDz7hpv!imn2-N`c;Pp0lFDc?}X18^LiPY5>vG^GcvztTUze0 zW3wY(W@S513mGap;C9<8My@BHxw~B{Y^#!zqV`%)xfC#Vn}9LDB%KfoQtNC}uljz} z#LK8qqHvZMFEzBVT)XjSHrybXA>w)tDJ|}2GF%4Yq-blU!@w{Q*$XGkHqr+-2QRm? z&D#cVH})d3e}@c=XCEYp5P$HvO*Q?~mg@IuI0x98!@E=B4uP=0d~)e9KpFx_E%WZs zD8O7xYR&vX#mM48pz)UFg2;c^=rhV)`srPho*s|yWvUS7QYN=pP0X*EvS&WF8R8nr zb+Z**$=pLx0XMz=7n5{Hp)BNHITfTI&=1xpRN46(3lgs-B<~)eAKz z8t}I^zvx4nP_y{wVQ|Pbvd@wZ=N?hp&U6Pa3 zZ}7Wt#CrIp64Y?oK+Xti1X$HZyi{Bw@mlCN*aX!Q7q}G9O^VNSuRY*gwUf2yT3wuK zGmO7r@#{*Il`+2BD^WCfQjEc_W9}xA-`Qo=xSAB#g->_r!Q!cq%Ptu|^v;Chb(us# zr2eSG^-gO??ZK^O8nIG;*&Gh6n5t3CVWEF(`M7Db2>$17HebHUM_OB9Jne^+IhM(S zO`=SpydIho4o1(MaVvdlfsrl2Y<`L~%Ua;X<{1mi|EdMJ?vOHc%01H!+O7AMbq_D^ zUYhrBj%4S)`)p<7>uiPz+KDo1PjV_*Q()%;svO!KGvJC!at?yntc!sf`r#Zsjo)=A zBWAHh0yNn==YN|zPN@p};KfKej$ASGC_{1jtFjMnw2JX$stc_XYoD}aZSCN(Dnl7A zOC9b_JA?NB^em9K`;9O9-KClj%&IEcIJ_T?kHZiXZ}^QF+g-s~nL9csUXVp7?0dcT zHQ&M3$b0dMq&SvDl5P6zwMzV~OAw3Dx0UeY0qk%6U%w3X*alx+(5~)M+R!F?AG=)c zu$)vXWxnF)^G%Ue7<8(Nc(I;DBRhd}qF2t4yZ)Jxg49n`W-y7dB!eiu?bi2Ejz3{4 zhfVd;Oc)=@Xi4p{4c#awcCn1Qxz9`(g~o5#e#93&d#93o{V*7Y7^8`kQU)t^Vk14>_4R@$pXR?oIT z3h}n91%U!raj-S6wUUqmm@$r@#swyXZBMPFBf|8|9Y-r2rC@;Mq}Bu0|I< zMMx*Hx&JLwu@ayX(!TL}i8D^aDBx58=p1a@LZEZS^8~s|MaB~dY13gF{8Z!59P6Hh z1L#K8smBMA^8xR=F`jJir@Jg36>XLr4IM6q1DLq54$~7LAMO|fcJcSP~nlp7i9@ng!H-mF$L>dggASexc zZvea@IIfG<(t!+0u&PTa`oJI^ZAje;EA&EvD)iVoaK0;`Q5qVGj(4rA(5|a5a7Rt_ zHfgy^>@qupPh{?R$*tQeiZQNmZ_b`?o@!k|c0~pW)h5;|E(M1P(}h%*TM99=QD3nA zy4-7`pCdFy@*BC^`f>*(9+$CChj}5uf0EhHla$VcPehmYUe-A$c51j_AJ*-%dQ=%- zpY|-;x~fWlXYD=Lu~{%DCHN9ds&3P?45N^<`4CN}Pg_4_Rl=Y>q2(Rk0-Ez9<$J z!N102H>lrNqLhXG#1=c%zGtv(^JR20v5VXM1D)Cb1xye;X*jA7x%KForouWi-)~^8 z(X@;EqM6lSdh3-*Xqss-;8&h>#gnX>naHXBR9w&Csh7wI)gIUd68yGw0A+FHpqoNkG0DrFCS4NRkRmuFnryVJ!1 zcGUT)JUS4K0%OctG=B_?GD!VfbU_`Vi9BpI z6v&Bogt+ld5E$4jR+7KG6S4m5MjBu_Nk-M!yU7}|(0?xk6;Yx{(k57CHc$?yqZhvV z$J8TSHi_)tViIP6<2WiZDyp6&q=yD;C4 zc96tvm=S%d%>JAPlNeX`!~6w7`sINSpXJpumSNjIEBC{ngZqkuTSkuNgh1l~AWKYZ zE$LI6r1^dtHYR4meH(nS=>G!lBT zz=BFf&ss}Mg*%(xedd0~!iCph#>|cB}Z-+(vZuC6v zYvyY&hT2Y%q2ioMBR|Z$YCLsvBIWI{>RHeYIa>!Ft}3q<(2H}5tRhrQO{HJNgo7Sq1N7dDEV@qGj( zjz9I?38bL2w25vtEGUhR4$q>yC55ddl~H2%qL}+TNW9#;{_fsdGO5or?WqgKFBR7p zR>2$Hvfp~Ve~zw*4rz|f7r9=cahWQ@Dl?@|K{9N<7UhzJptM$7VH z*Gs2~MR*y{c_BcQFx?>!Q&DC=+Q9~W%$1-{+t=0}>i_4C!uuc~Fa*Lv(sH3^=0kwK z1}yXU#l%PTbRbMunu`M;`n%-Q8A=4}i1teVVH%x)g#nban4<7Xju;r0`@T4{Dk+p7 zXZwPpKi$-KdnNm&mbQ4q>px;^>gDH0zp#w%`?Br*x4s~eU)2m@-5r@*Tb{v>erq$m zE9iM#6a0~eeW30cUzCrnkCxmnHUrm|A!Vk4i6#8~@iec{X$$WGmL-OqBtfuijjVac zlm)kEpF!`pCj3=EX-&fsb_KV*2!ei=694-8%A7SMsnQ(9<>bdp4JuAEeqn;CJ~hqx zJUy=8LR`eJ<@$VGZv8ZYUxw$OuQa%~WCe04|%W<_stc^vZ+in!xS0UP3cs3G_qH z&IY#Eg_iDyliQCZ`Goj=ZmKm9xq65nwzAd=Z!MiZ|Te`Ct|ueBhv`=Zz#S0 zNa8X~>btDTzhmRP-$acnZagGgTaCI}XrjSD(bn#Q5bliE%#Q6`goPK}7ZK=*h0 z)9qg~E%b=p29*th1G>ojQIrK>8^Ie-o%dOjUo%#FfsFl?=EFavd7w+8z6y2PLq)-C zjZYg;VoQY5A#)zn8px^ZgRr4`ND*gjQr3*a)^e7>O;+O+{}8~Q1L7|9JZ2v-t3Zf0 zkFUqI(rqmgerIamc5;I*kI>%>I?u6w&}oAzCB?YV@Q}Am82HkMPm}#_#~fK_Z~+G3 zJf=XD2bdC=P_QQZiqmHOqBNsndq3=ty*KEUGGKVTkR&9)Dkq-~7nK1FXHftXO2(*e zaGN^FPFBUzBzBXCxkf026HN#$L;XP%ya8|dHouWE4?|syU5TP|1qB96cqzqYr7a5h z$SO%d;ee{$`J~#L$hA(E7qH)s!|YuOFWUe#Tret>-1fgsCFxMM<|rEP8E`B;$*K=FV;O#EjKo z>-`0>@pW2L`A>pEWLy#jJ=5D;DQ3)HpSwEWQHd%=$QJ&VlfQnt9{rQe-8q#Jl|t(R>R(Yz-Yy?JZxn#Sfntx{&HyhyfhQWsL-SK%nYOVa+{K)VxlebowPlrCpguWe#45g~3%*88Qp=AB>qokO^ z+h*5$0f%x*sN(87&5{knd0o(w;;VGV(`5jRF!yXm$64Z{OC|Jdz9IjFA?#5*Z-W7- z#DISMLe=>dn?*_14b;PT)#1yz%VW4m{Sy=TyA@D9UC}eT_mP1}J$4hP`ssh`9cEnu zub(13?G9j)2t`=*&XoR$+Yh6!LGpw7BV*PGew>6+E7AqE5yu3eg5Vbfv4McSq3c8a zlPw<$)T{zeord|DUbEh$$K0LM>}CL21D(n;9I5sKNKU&1e-rYF*>A{$Jo=?H$c~b4F=?IzyyTGX~sWS_Oo(pR&>;4s18(tp2 za1*|&Cv1lk%j+K=d+N=?iqs9{6u{ZVnt1G8d_ro?(8x)JVOMb~HQIO_XC9p=CZks; zSca63)%a4LC=H@Hgrgh&f+eze~r0i))YvbiC-vI10uUGr1&9dxHGj`QWo zS*b%C|4s7Dqb18#@gah(30|Y}v|wh}9xa~sFPS8tU4YW7rMdg}!__NK>)&`nDTt#| z&|wAyZgSkJYVi;t^U#DaD_Ji>91W?iL)i$27%mPoWS*45Y%&`lGSwoS)8^bfvD9Yw zjo3ucAVT|RT$gS8F;Mu??VxMBccZSxkMt9vuHQI$?v~TG6T=OXAEhv&hF+Jni_9AZ)RV$PNQE1wsYt?dO1m>!RA9g?z*PvAgQSG)fp?ARy88i9vvd8V{IR zIovh6Eq7OZEgi0_%mQJ4nxpuSJe?C^(^DNyg>bll3XKm;#VSU(Q!$2)g;h6L+0gV_ z$;-9Q{P_ypxkOY(E(Gg43;+S8&+JZ8xe`H~Vlp9|uK|lrK-l!lWiU%IHlV76r}Yyt zr?JbHaqa^ax1|DH9|^K_Qwh>R2~?YSel9oAMu=>QD~rq9c3*|=Bvta5f9p|^D_4Al z7@~HK9g<`}kSqNN@qoD!kBX#QHa<}hD+D*-r;4`lzkTv&OtX6GeH0zjyW&&{L4F~= zxVxK*hmrl%k>6`}9P*0H_YiW>dpQEvwR9EQsCQFDqhvXT~)r_+lIzsoT5%C@T0Tb ztJrIAFIJ8z6p-<4@$$nhQ30DanSp4^Z_17vz2j4S6O22qx5I8kA6U%Dp1A zo8`H??-=uR?}4F~Xk;V)cQ&e?JOHUK^P!>Yau!cWE0(b#BHHuqSb)tvmJ0#9@DNI; z&&Fn<|3f^+WM$gPP9~PWtyDN6C$krAkr1pg@fugSK-fK~?CbruzBxTx!EqQI_5Q{z))60Fr zqU-^WQ~OqTpMxBK1S~}`Euai}6-!E^5W|24^CTP2zgSnXEa0!LfQG+GSW+^JmTl|( z1)v!QKwy8|1E8~IeOWh}(s>1}zrOC{9TK~)QBDY1pf>`ZIELveBz{LA)(lDO%(Xe?rlqN9>p!#U1k9RTFU2ZC(m_@HA=%OMTJLya;H2S&3^! zXG`NGxB0@+!c_sBUu~(`SN^w~M5?+rd%w&w7uj2#Aq(rI$Uw^bRO_%Ey>hk*M)K_b zO`HC!jhleWLCgCC1K|7jF`Wj)(?Cav&O(ohUWdjXtHp(@^GZGuS6u)%%kwAlynP$r z-9=)`1faJVq3O$|w#w}XUk{2JGjMXs1RBp>n@;unl8gyTRU}jSbGGDnWFOy}%YVUW zV*d6POM{!x6qfpaTSdKIhu}Ld^4M6Sm415RVRB;*_AfQ_2@y>K$bNE|i9h%p`uT~F zjVbj{Lfdg8T#1broCS7iS}Z@-pG@TVg|Iw}vbqp~(Dwh_ti4`*Px;KzNov>O3hJv9;m!zZPK7=T_Lue1MAnzeOnvsT@m^I|(Kp}%lK zN{z~E`c4`L=c$Q{-T`nco-J#hDlH_WcQZ@eKIwJs*iqeAC6w{K?(J{_z|*2q`^uKd z+^OmPQZSOCMhisge70e;9LTN*PcFDbSt zT@qZQ8-jF}KP)Fm1DCc!tY2R|uNEZ|B?gFKZ zzy9&A!&WE>bU-$wZG}vOu1oOOi6Ub4==I|ZY*G3$9$6JmKITso#9)Bcv*$xp4H4Gy z0}lUOIbTc?4xFensDHUV`CT>dDI%Ev?Lh%{L}2`c{BW|SnjnH>e=Mk=gWTNK@gudo zvT+_pqo%OIViZ36ETqYOhEA62xrr9|&D}pc%_f0!p8nZt09fU@OV-COdDQw+h6sv>fQvtl4)bHp9!5qMsRqyS zl2=p(gCWBsgR;L*ouY=>7UWY3#ViYfax@34V5xC47Bx*Qr*assh}Y}J&J@G=9ZBbY zX{K?v3TxRfH!^HAL?>Sv^SZb(vfA#4!5wDOX<#Iv*Qm*z%6A>8o{&uY*lafS$s3Q1 zTJD>kkE%Iple;wBgVyuuNu|WK(M=9YNl{3MpY)Qi!EmZ}{p~FVNyRW-7RvtAxN&`X zg=~#I$0<;>1%-TMTS|h$DiKM__R0iYSql9bTe`Ez`u#v!@a_= z>E1wnho{|V6UXNo5Rw1<$O;0adSa)Ba{J~`+@)A})%5!)iW)qXu4rFMiM(c*-mIi5Pv{(THGQd-Q!o5o%;PT;BK1g!x>8g`Gs15#$J;+oy@@WRYdSVTv{Avo_n5?q7}dEpFTvsc2p{GAwInPj&2 zm~p6irbZY+R4H?`l^5496)cmQ4_dYA-)p@z%)BXRAqX1B;Y zLDr!D`sX=8K$@(O%T^*_N(FT^_g}!w%NDDX>`G%^wc422B+mQaMCV^ef9=#_)%^|o7&7%i<414# z@eQ0J@p|j@A8m|8IQNqh-eGllBeuPbO*2qKs|=N)VhZE80CJ~pm#)uR--*_veVO%43%?t?-gUX+1qh1u~XD*S&@vM0j=MeaIkD zvAuQq4xFJ!h%5?;-G=#>7}n7*6#R(R3{)`w(4$j?-6Z8LHg5xVL+5F<%<=-U)bWKX zCO~bi?vnfbZ5_e~&$lQ}dZo7wvyua!uy@`25njiMriTmqJe879XPTuFNoH>VT#7)b z*@XLh6DaMCjk{DVq0h^YHqP2U2`d#y#if~#0FJ+J^kZ!Kbsu~?M3zBbk#xTBAvZCW zYUtZU)XO$BzLsaNNZW3w!-v$1ee5ekz^&hd4J<50AC4F9vSGG>fM=PU*$QT#BoxF+ zrXH6zg1y0zo;C7b?^3sMRc=~ms9v*{3O*N>D7Xix-<>)=X^X6r9kbMIxiHOGBOx}oDqKq;{~8J+06#CphR_C{q2x6IVXX7 z_ez>CKo88Yi!jc4Z%e)7l)uiGCN?TA&hV9T zUD}c+bE5Dk$^^P)+Ezlh24%cQCNFEAXvAJqm~P^Tf`SqoOx;KS^9a>+qqL`XxeF!} zMh`G%G#Hc4P6c!{s7Wbl37!9|TInTD+Kk=Ye0-i0BTNFYS@lm&!TdoFy5~;*jOf&W zww?Kknn9UUlaLSQej^2JdSIc)dLhr`hmmD*K`lMC6cPLozEl1J>g``)nkA4>;0mB! z2I#nf-zPh{lOvp@ysU>5vrFxNx@i#gIi}Etsg$3&3G9&65rl5YE<0sEqZ9x4_J101 zW^b=M@llL}M6>Yo-7Mi~&MC{_4MfEY(ApENng?jpz3+O#96dliDUd_q16!oBAuEV; z=M93K{HgHB^=&pvt3ozsubM(M{=dcR&V`)($Hi6_zn6-Ac*}HfynmRj?RdX?TVuN_ z+a>;V`dPO6idq~_*Y#Y~@|bJ=ZNT>?g>G`J){=Cg)OLrA1|?`Rq!cM)I|S_;`N|J- zGTtXYwFLZZwzeWy!Bw07S5Ei3G7Ec?Z@&G}+?aN4e^XM%}1^%j^-~`wEk7DnE2}ZOXkCT3ap_^66M6xT5&seUxln($HM^(s384s{E=ZT`W$Dh)WLwgF z$@}@v)U}(Na^{+WYaf%Lk`aUtjy^r*Z3nUY%4=`J_iyfiRY>bm6iC_ zDfHm*&7GHda%nlYoE5t%y+NP8nG?J7b+#b$I5*sRqsD}_heqN^BQX=)|YHa~Jt zrBV|63rP+;8c~dm*eu|vfYE|}{xAfL-0_o6>X}Ft`p&Cqg3X1|^FNQrr4tqCeuAEL z*vfZjyZi>v68+PaQ>PaaYZ>XV--x?T2vVkTlCuA=Cb6Bz^1hmDVg$oQnSVRQGF0^H z@Bwk6h;9oiqL+&6A~ilxTU`am9=1ZbWS~h0NGyQ73a{kDNyg~e2|(~QEtfKC>P=p) z1LQ0MUkeBj0Sjn9^Nf;F&&E~F0}`XgeO4Ylqwse=orn!uwe4!nKcd{ac2?%vi_0uK zyi6>dD3BXFRhX?RwH1%@O`f|#F@ef1vAn;HQE0co*^&yB zMy&_#vBFXxlM*>@Qt-JvA7JjD-33gWDhz`2?5+B?Y?)!r2bn3CYCL1HsI2h2 zKI{ED)41PZ+zX!4?bNLW-wdOram>~^ai9uzMbJOF;%egg&yUKtp38a*LFuyjbH-38 z*m4c&{iX>F{-BGw-P`UDaZ;Z!GPsNs!%tu0OV;2T-sIuh43! zB$di?ICtzhLKe(WWkRoR*|tS&*hfRPKc$$hN2qux6H3bPnzpzuOwv9BGOFZX-W%M|QmU#zeZSBWvL9^fL8U)pSGZK(fwcn$Zm);H~zmn@p zBd}YyLt23y9e`kUeH}$jnmm>QMSZv$+`L=bx<_`5E2|31z%Qdy zHJhp8yx(L9DimDn4~^+@pS$XA>fimCKP^|>wkH_v{9s`fNBO2uVMoU02KM@7tficW z)izI6Xa}l_nPbeH+b98h&qSvn?)Do0(bJFPREyXk<5BI}w)1R}S?MSYI`eSDZ99Ms zohIIlB3cKilSSH!iCNZBl;JJ-qdHk#0l2C1M>iFA;@^w|&i5!qOk+|dj%PTwIz|uq}%5rr$d&FTRePAo4)aPj@O)Z z$+z|q9t_$gTTf7b?iD(+Uz0?IXfh_Tw9oj5vpgiQz#)fC_c&w2Tc_U9C8B&!Fi+O9h=DvS4tN>=DnoUH^2F)$x{! z!Ts#4s!ilp)uEk!((|W#$ev2N*2TTVa!m9&bZppa*V|xOENkj^5umi2n8^i?#$v^( zTm3UDr0?u4#)+#V-VdH^^DxZ{H6KESzq#{%$45C=Y&*bJu5J-15sP$qO~u|_vUW@H zFyQ-A-u^|xH;LUB1JOh%qKe_Oci>kO3NhOmprVwo0JXr2H~kezHS)ChNq{aXJB$sY zx;c~(X0$+Uzru$fYaT1CZsY?KCsl+`=lPqgiQnKXbVNJ^ zTvxFMGZ4HP-iZ~^eUm1b^@>&QCIEBN%dy{h(fQnl zVZ!XlKcho3Ss!W*G_Nij8+rN{CiNyCD2*h!Nq)08F(-_N<8yqe%3-#wpyrLOZZb>oUmN<(McX?Ig->q$uAhWVG`jg~4UByrfWjp>T-JUauGimgDc$@WHKg72Pku{j z#yG|`F)yn~SM#QkeT!z3SqUZ$^!FwSK$VL&uNP0Da3>ctrfcHF>w6JD-C4b{R1eui zf(j*!d|p~4>F#(xV6z zOIPbn>~`o;A|9v5Qg-!~t`+DTZVPNtI&Y*Cj;H=n)G(v2&wa|^FwQe!)=uLp>4mkH zR%5-pg`ZF6=Nhn&6`ST@Ew;2K4^uz$>16G;QLWURxIPd_hff%o?R$8`xcJHPRMYQj z+LDUZ!^L7eWOil680!K=ImCay`oNtmNHkRlRj2Or6}$Ggc5pn2rR5Uj5yVNfs}~5t z7?|yk|8-0PijcKGrG6?7M=04Of|y4ma;J$XC+Mi8lNZ@ z{ee@|JL6eb5%z<$tWm)TJvA)?-Uyy)OBY_kUzl~KM*@MAKgX=t3H#sBfb~F)kTN7g z#1TthR$E?Ln4iS^+~f{FIpnQynT#(Ee+Q)v6|v&BM=vpi)w;~J7HV6oR=-J{u^2(`-J5Fq`TBSyy=4r0TO;7BU9}=;oy#2 z=kEL|2W<;FhkoYXp2pf|$Mq?TG}U_ae7&n``UlaICW8F3WQnoGRW=O%YTYz8t64B{ zi=0z=ncUBxC_zF+Pt>Z!%M;c@5-f`3xerQ4GLEWHt7o{8Lc5DTQN+J+x^k4j!;40b zLSf*A%X(aAr@d8FkmWWVwX%IXD_c3AU5pv}N3}Ufy1U@cG?;HL$3MjBaF}Bh3pa<4)=-KCAE7!Bo1v`RavAvd+tBir6q=dlcn5!v=SZj} zOl*XlzrmS*$<_M=!G3_WgH_!=+~26K@0IvsU<_Naf{BE_*jBV#JB?)S*6$56sk{dv zb^{9Is2)zb@~cO5iuYlIdAe#xCd&0>cxSoEu7o*g#)DRvBL{b0_1Fdt=Co+29i#^0 zOhOl-s(E?>EatSz#9|9n^;q=u^na>xMdD`t!$la)@tTm3-U6Gb@!~rD2_V=USPd8( zSSEOzq8<(-fjWYL*#U@xD*x!=u!TlZQTee}=-b z?ytB)e6oC&jBfjvvjPT~IH3+)(+5T)gv~48If=5aItb@HvwW6^a3f$fz#yb<$)ve; zM%J^Z@5~JLy*Y<1`r~Fyyo1-?c-ZeRl;swfopT6r_bRG-xH0_vPTQ9xC#UUw9h(+0 zs@XN=vJuDRW^vmKkKx%@gZjk-$Us6HUQZ6`8cq%e@F&X8xr&QUj7<16FDoantLQGFODdcnmx zDPK_6fazY&FIBMEu-XJfe&O?wpuy_qT|1ysvZ~&m%5*Q_@Y)w3sh{>tQ!^U8fD98r zz8gy_l(1T%epG?d8mP%rNTo}#C+UjIB_sD+!%eg9z?u06R?IzJ?9Gavmf`G>uqx!h zu0X*$+%3q+2LMnaR1m|wub}x+uKWvADSGPb+-D|CkAN8f9Vw&pA2;=>VeURb2loce z9*{NQsz~vuOcfO{H7HPl?hg!mP-PcHoi_I)VHpfe^3c1+T7SA6{jr+x4$2Keq#YAL zcE6z~eHDHJ{`Ycq)Yn zJ!AA0{u+4WatbL>09LI&MFezU6mQz)2R)n-L|3_`w}nTo`KLy>;PNWteE&&2T-&|m zSS(f5sg93INV`7CmC9I}@r6UpB~;*$M^O#Re<^+C!oZbfQt>?2wTuL2MSPJb{8M5t zP>-rhAWEJoiZ)ppTE^TfbWo)KIU@!BP2r@k*CL9+AWX^MYy9r=Iikpr{I+vueMUef ziac{Bpm*tZ31uqEnx)5kr+6MlqRl317^$8>yIDMD$jCCjdRzIDCkaAfn#k zIeXy%>GZamw526YKO|xh70}?FE$G}BJG3kRJklN@T4!pMa4V6L!n2rE2R}(7%=&5u z{5&?H6mKA$dc>~f6I;o8TBbpE>=9P-CW0HK6eX)IRK;;7Z2V8GZP2=}MZ#P8l zehW<*bm^Z{O9@3;6s4<^0PUAR9oEo0#=bjZV)9)zloE1Rdke5&C7G#qA|9moGv@nj zb>E2IZ+#G1WL`a0U#g@u%LLa^bJ^q@+nneH5xkjj`SzLS z`pRnMF8Rk*0=rE4{1=v5NKsj+Pq~ zC+Rs=Fl7%m$Q{Mdw3@;*UHHpb=4dTQGWyZ{s73+IREj)|3V0g?Pr;T>!P|p+yeZ&? zq-v6{Kb<~{u73%no$Qe~pmWqbb{!1Bl_so!H%Rgb1p#x`3b)}y0Ej@lC&^1FvAT@- zYY@0NZyvC|JhmBK+*(-laF6x*42 zjiR~zR_{e!EUtQym{zJ%N({>QGJN~8P1VKVK?R9x(!GJ$M;5G^#=$OD1p~)Ru#x?cRXIg#q#|G>@Tc0Ujq+tHB z;CQ&#I=Z=Pw{|3DXe?h6dYS%aAqmTI;dT;yiE{G8IE&Cow}4}5(gp0=-=`X`<6yPs zyY0LP;zx z=UuM1zE`_GZCO4*CA=A!{bS;v4p?w{GIwl{6L=k{Sp}3%=qgQmj=SFJ@j>~WYEp4&k5{22C2S9M`!T=pT^!guE{Tc6h~0}2#QLFw1lLS1__BF&FBWn(G3CuqJqTe zl8(_Sqe}$o9^EM22n>+H;6C&7`Tkz_{&9b=d-exoJA2Oaob&E9K-o-D^Vz*D6xg=I-}7?#BWk%moGQZ{vWpbQJZZgFN{ zxx?&YyB~A8c^SmVQ}9>_xNw&WJ_9ix2?V}7+#Mg%ksm|{KO~%JI6QOosYBHS0O?Qv z`GL5e|Jqv71h{zR_cA;(ou)ZQAFyvh^&Lf0z1vv-D9-ykF;f{L*X*b*ChRm`8QQYe zr*m%X5Hni9rv!Kk$ieNIzFWvHz}U&(Ls)~G=^rHgDGcnzm#ghGH(gOY)p$sA-0}UPPsv_1kg~C)1 z2Fy%8C;DjGgz2jm9=i!xFYO+l(~S27sh{b%NrJnQ?V}ayO@36QJ=lOx z?N4QTREq%h<_;SGJ59ubv*|mi?2Chy&&;6F8 zf&kDVI%wpp=2F)Qt0FKL?@y_dz8v8&ULW7_i*NBfQqqk-@~u8f{o$12;21vw#M_at z>PQ5zZ6p2FPPwzw0&=jz-?1Fq6{NRyrB|+k2P12H5{BRh`Qt67M%2*aIqHL zeZaz;8uEVzX4BHz^p4Wl_A=;r!a#9({Co3LSaS&pxlw2lXG;J@W5f;8SG zTynP0EYP0DMpftZeV56iS zDWBE+GczDxyi=-Vo7V&D-~?n~3I!~~P{XA;!8_6u0bE#(k7P;X@5ipV_AH_Xzx&2f zJ#(`*WA4&?{6bsJ#WFyUBcccu{FRkeQ==tCd7}&t;eYP`ZrH3~9R)<9lu)q^aG&pb ze9xK7c`8gbvX|1TrUav^6%J2p{AfA3cI1b9fX{Jik##fkGczmv6xzN(x!}Gjcep%D zt|8k)CUoaBcM&m_g~F7jTky9_7qKYTY%^tT z|9tcTPn<)Fck33!p(OPA9)=Us)_>-D_iNC8I)becimj`=^K0EOEQJ1C|DfUcr8o!z z=`2Q47~|&fZJ?Pm?v#5$I{J5>8>-|BQp(TWzZ`NG5rD346lU|yRpr@O9M(?G7;{kv zY;4~Jo@HbAZ!}%)t3ZD;vZc)Ca1IEkhZOIe-Y?#F7(WpUF!F}TL6%m|tp6W%KsNZE zyN#T)Bki%?OKL8suVlI5Xj8lCoQhH^J*w#NzS-Q&mJRZEHMz}-#3Aif$N9dp3;6?2 zoc3W6h69B@U{wIt)gek+1PpWe!t3{f1d4lrq8&J9cf<+Ss%t)h;0eDCZcoQFEgX(Z zB8Sd&EusN|;7;K?gL*5QkMzzaAE-6GvCS>BS$%6f`f$TbTgSR#Kvveb;zZ)|lE;~c zF!KHyjkeonvBmJeh2z9`Vg|W<2BBaF?&0VCsq7E{P`__XOao!wI7Q`ja$iULq2GXO zOob6!pjJF+#4`k_A^a77B!|mzx9su4!YCqs8IfPyKN-d}1$jzFU_3G;pylg58(TbBTqlaR`=re9W>( z-ToEZpr4<-OP2Ig8K`iR;If#IN)J15ux`4)OSXq~V!>NWa#WPGazlnud6uW<4RXc# zBYdf<+^w8hdIoFMO)CU}nY`QNxf@+*;eQS_za0EG% znZ-(rg)+;k*W1D3eDt`M-Du$g%ITtTHrkZa;QZQD?nhP07E-6x^pU5sa%^gS0jpbJJGr2s*-P3ndT?$ceg^b}V=pWald zO8zq&`;RG=Yk8gq-bNS^roPCUlMq{<@4ei##+UnT%9#4!KHzaLvo60P`+2dfoP_%A z+1!W5IN7p*2^%;{`TZn6Lcm{5O+BHZn2@-EWsn0Ouq89It$j(`Q=V#@-5Z9s-&>+B zmYv157~fnQT(4jHNPNeR5b!^=Se813PWeP;%QcjDr_pFCyH|Fom?CFxqw zzwU}dc>Pk^rvt-M`V3MR1A@;gY$I#_f(Evx=6e=Y(Wh)GqX1p>VVjP43t(ZxSn6&M zLjyjc-5ORW=edhy_4}NGo5ce{PXE1rFbb+qhHmslp>s@nHnjUJz?|$YT&1#9=Hqy2 zK&gX7xy``@!*NRj2jid5l`AM&MY`%c9t`(gcJVj9;XruDzcq1n8kKzh#XNL{%r!WI zgGxmxzdC|1162Lt;?T^I12nQ_$hp)A9XEnb9lJeBjWKt+ z3V6jMaP;za2(hSsb+exl2zxpiv}~$9a+s2_NY_Hx{2tW$9u$JdH?#0Ci#W^gR{Xd~ z_={3u(L3uNDUrmlW89EtDVrVy0ilvv&{5jwns$evm zsTRj096+=c*mwu1sd;N(Lz^p#O3u-zyCnxZJ0tQ%waOUZ(|~~8%YYmeLtec!NU62o z_)R$T#z}MZ(rJxwZDPmTlsA}Uj-D)=3j0t^N@)d_K3CRzKqm>`s|`)*bmEnWBm6&G z#%hIv{--^#+*gc|WI*6Mj?^^4I0`x*a%VSoguYEblzD3T8ei>CEuQGA;A%*LQOMM2 zmJ0plbrH@G;E=?5FSvi-k>CX?1Jbn37+L!WyEDBt+a=oU>j#AC7J{dR%ng`~?UCz^ z@7GmEHg^mI2cde2xHTC-N2sJnD?hS8^b~DvqSLDtUyLuS`~uJCcAXMv{V}y|5|?MZ zmh#4LnhWL&9QEjp`u)=v?$he%aQ7gd*oL`qPdk2O*m}GxB)qJduI??SzUoi5j~YTI zg+XZNc=c?aD*W0-L_di~BOl(Fd8{G!DztmF^NtJ;VWtM6>|#wlKA!a_A#cP1qxFJc z+uoM_jZJv#_9>O8>Y-QOd|Uaf5NBN!joZjU`8A8{46eAHev%{G1VO{3-G|ftutv=x zQFxM}fD^Hsh}iTvv$L;beyA6$hhM*gkzS_fS5uvR)8)GlIm8{>NrfdvMQtIo;f6UU z=DMX1zxg=BR|$6T2R%!pnwcy6f~}rOR4sJ&N2u@d)2Qc`9ca}fwfIpYsLM ze7vtSa%q`l`q@gu&sG%vOY%kJy)mh?ZrI#Y4jid&xt$;5K~tpz%z4OJC7fcWJs1-J zCJgIyK-*`aJL4ZtswC(en*?QC+S|JTrIYHhtwj5c->os2nruws3x6H#5!VWWV=IqP z^#CO$n?x%QVRlhWcRc+Zc>X6A04k3Ce$;hNX@F{T68M%L-vxPEZUoN1fvkmwFoaL=AQ z%uKUAW~|t9l?_A__iOJWy?w90KgP4JmoN(qlroB=rEQ(vUgj<@U4C~-LczPtBxVx%o6|IgZwU zQ{y6kI&Yr;tU14RvMrZs-%T7{O8dpP6KqIl%HvFBYQHI4F_K7crAzUiDBJu&W5LH@ zqX9w8Bl4(8Q?eh6BqO53&^*@h?Zk=$J#Afsb-`+}XlC@MEhQ#tYGa!kR^|Bv5+Jxe zx3w;HhGCjqtXna=zK5DBp-B?YUpyS4;~0M>6;^~LIjm}kP zto?6RC3?7M@b*w1>kq2ns1VQp=2?J05*P+%Kpq>okY>03Z&L%Qn9m9*Bua&!N8Y0$ zngI5_^v&UD(3svI3Sx_q(_T2RC;b4E_z}TkF`8`((tLG+PRIih)iyRUoD&>VMLWN}L?&0H1`y&Biy9l@FdrhUOscu!+Yn}t$LOY(8F6eFNXIYs@*lHtkB&YEci^s zx(D+@(}05R;V_)c4Y*_=_e$KSsDg9 zUOtP$*#>e%{?AGOAs3+yfA+8|IOijl(P2+m7=Ft$ijRO6$Z-0f4KH#BGEdBAfQ6eP zfb_=Tg~R?RM6kwZXk~$y8FlF}O=V|=_2f70D(=y*CsSW9>t-`9!Hcn&F_xcgCzG2u zLlidy+nWU~%WdaJw+^=^JvZ~G2dD<{;FIG&rl@9-ChJS8L!*Z#OS+hxJ*f75j*?_L z?^Wu}r|UxZ{l@X6ynlr+aoe};wK>|;LlOcyhN0!ABR7WbcbNn4E(}P%yl#DU{%)^L z#9QWQ!KBLW-DYg&$@0a{NwfTj+_l76VH?mQ096@HC$@oEY7pAQn52z7lTO?^G)?~l zVK81nW7@+GInB8mH^04I;Uycv93443>R*}$Ttn9muLwt;l9t@RTET)k+v9B*I?zwwM45&vIlDhoFg%xX)R$U>7?44t^w-jO_g6c01$ddh-A?d=tZg?72prXI*y(9sk;8YL1V4HMFe1wRHqai-ciN&xw7hcCCjiS4ED zm(BcH`*`y+pVgppeZhIgyk`&DoSwxA)`T@U6KU}(*}K`Vxg7*lZ*B-K4mdaR`k#zQ zUVOf}%6I;@f+09Elnz~5_-*JvKeh+)idTwg^V2mQ2Ab6^`%aeho(E7jw)dSD@^~le zc5dX$!pg%1ih6PCn)x=;6}R#wu3|6o@jn~TryOSZovd7V?__p6poM4a&YbjwM(uE= z_8jyt>((xn1!c1QJZHqm^{bGU&9%0)&jU~~!knM9U;sl1fW*kv_kUH(y?*b@F;k)2%%o^BLFscX!Ps9rd;MA7y=V48%t~ zP9LLGm=o`RQh|KfUSM?o<4CQdZl=i-u^*{pm(69-blHB29{pHa)hmoI(ZByNki~ZO z`RE7gX0aEIMwiVURFMfk5y&bWTH{$#wjW-^kTx~S)?;G_a4gdsx?wx_pO*JY zw0${|tRR2iORn{}C#el}ZI!Sm1V;W*mNh+8y|sdxzP?UtI)0LXICj91}7b{ODYyllMF zIc2{REqS k7EzM`wz8N32r%l9ZltlYyATn(EQ3jOWJHVy0DxW!(FgKq#Rjq4yHd zblcm^ZD5)FplNUGyFkUFeZv-J<|ns|xSy3gZ@Q$WfvB_BX2yfk7V{Ki!^a|rC-a3!V4c}6y zUyo%w3^=o|eA^~7-Fo;5=}s7BL77G~bxLOcG=rCpj&IIO96d)hIjnZRu#GwwQF!TH zbJ%_LlN$j~7Mh+OF?H~FK!vKv>CZog6M%NYGqo=TFIpF^JGYu`0&U;z&j?IE>)f)t zSXhq~vXpsjR&EA&H);|8`y9c37J6pHPSLx(xczuKZu@{*Bomq>`C~a>W zuiu~X8ib=Gw?0$3r6xeSl>E}C2P?{*^h<5X?$x!*Q!dRu7U^V{vZr)iqV^c^*7@=| z1nhMAnn|^LHCh7w6K}Og?P}sO(iJwv;|-y7f;Jk;+n6ZG%5wGqO+cWc-PVF@&apOz=WY4>yWiI(AaC6_ZA%k?yJW5kG$B)u&WUitHciUAc zlqnkC6GbcOdK`T-D|vQ}Ev`ldyha<% zyB&Vh$)`|Dzp$MwrrZeNG_89CAC&_lvQfT z4SKHqV>?!pB@T)-)4wpP%RIK)0RdHCjT)Ma4KoqGIh$)l6FeQG zTGX%hnktJ@Q3326{PNMXrQ49hdL@%|5Ijb~qZ{TMh@!W;3$)aMKD@=^i<+t8@p0{j zNwfAXeS!S%AVvh(ut(qgr6o#GQFyHQ>0bf=e_-sd8udAdFPtuzD`yqvH6^8iO^bki zsOTx|=hRx@dXZivzLSf%(!CnqW2 z&75}5@J#@+jAw+I#hTna6}Ah{R7h( zx8vqzZCZ-@XLWZ<#-SB@slrmzQkvo&WE$ot zzA|;%+7Opp{b$yH)OD@)IzQQc62XF#trIlk%^7u2dhIeQuEsU__6jL4FjsCw9K95{ zPeai9^*E`u>dip>pW)Ie+K>_20e|$tHGpv9H>Z;Kt_T=)>UlA47xD=EX`yZtF-**? zyW>D(`ETY#%G!t2=L!|yEDp=Y39bm_Q6~KuRRTQ0mSw8m=J1zoXw_<~$X2Y)`iC$Y zH9l+K%CG&_J4)@n1AH6iHOl4pS8g$m7eCXZ;D8{z`05$vDMt#_9A|s5!c!BVg#*Ou zehx5M9rS;E^yast&sAsNT;N|x?=vf*2z)WO17Lj-TZi8h+#c+_0t&@QO$ks9v-^_1 z_%yqh570j>c$L||NQWe_TmIv3gKEFqZGV%06^S(mAS(L)5<^B*56r7S*(Ul?u5+@T zir?v(lGyIXJgx}YiHmNXoX@1o{_;-2h5KU3PGiMB*Zjt=L$a>1eAT`1`3f#Xl6yWx zrz)hxyx}wlA)7yv=#=u4pxMFL;@ydacOP-cY?H&js~oQ<3+319>gtw+UTMtDwUQbg zK-t{0{AO-S124LVt$GrtrY9Xs9jL#q2_CaMJM-{z2X05G`5!5%p#$yZr@brK?T$0{ z3#9X%(vtjmIJ{QpO`h`x|V`L&Sd?1Fy>2-9$JC}du^WjSDF-qwu*37cI zOkov;v)=$$zLxNv3b?z4A};4klla;TO=aWzYgKejeF7NdY&nq+%K1_^Zo&W7+kXMr zYoq{CD2k6-&oV&{=<$*52$&cd0PzV4fbbg>B)jK%J=v33-0%tv85?sERxC*|yA^4nBa8FZi}CT_+|)dq>zmBIYV0Q!R1}PJ0qFC$0usOZPz3r@?dVI9Tn83 zSFz&w_a@C)rw3ZxhT;AnOU%DN_CJPWx-0iWP2}*4l6@wc`$bw0Qd`c7)X^H!qPspe z^6Yg4V+$!7fp-h`LXr8?j)fg`N^MbaM$)(D4Kbyk4qp1U@_A&S z(ky;2@O~cQNnP~$(R8hG;5`=$t1v%j?ZwYu@DGR67hPKdil2BDq<#^N`k1x5OCMuw z(koe1LbiWck+>XB+j<$Q`gP(nLOO>+ZqNVm96%b zt!Zz=4uk=(5uhKXx;x)`PaKK0Ed1%qjK-A;>&6~t6cFY4-^X=8R*}@dTF^Y;3CWga z#)`d;0Q*q?S9=0l|J?ddISLca+K%sPkXS5cK z9;bMEmm>U(s>RsCSBvQOYitR5boIg)^-2Aju0%_MW1QO{#i-_vxWMm;v$+bAISv4K zWz5qm!E{*lL{b*j>Sg)-Sz2XN^#P8^%c~CNY_jO8bxLQ&!t%gWRWFItIkPP9Ota<_ zx3i0}ZtbgN@F~K|XvDkb7`c!pQDJGPBL|iBjDEDTQf#D~*cSxyK7VCxJazfB(!;|nTF?g%W9*=%9;feU^kZ?F4C)WA=4mxsvdD;({nD#NmY*_u4 z3Tp??kR75r-G!{&&W0=TS7Z4BpoZM()%*9XiQpR{=)haq@Kfkd3P79$2DVl|FaT)+ zJFsRU9Gt%mQ?PGdWB>mD`~u4&aB!pmQ34o$JG9{7{NI-uQ+o)( ziFpzc5iufhxfj9vt>N$3!nEpfZJb;j9UX;*g-Pc~0r4PY!+r5=rtglrT>cOSOXsLl z($iPA;@-=6wZH?vXoySvl#)W#4XKUI&4{jCYhqm6gd24BJ>8BoH7w;_Z>Auu;Rq*SAGQ1ogAKxc~ONU-uTr_PL71fO~ zfZ5pCNWyc;BOn=jk1ula;hsz+ND_K{NV58C>i(cqrpkSDeqe2N$Lu2A$M7mGVMhx1 z$;pYeb-C`;+~rihMqf5ZOsiY5mNejd@l;CPO9NYn_u7TeC2RV2LXBmL1k7s=3UfNj z6+Ti%qBdVJfURa_bSOTznn)5767Dq3FzgT$gk7_UMk_^AM%HJuXwm$`XldFTiqzvs zKMRL=(kZQw#l79#-rf!wgv?&p@%;k|r;KE`ePJW9K-4$KUCHt~jZ(Wtqx>=4Q=GM$$y2fQuv4nv%khVPW^=vQ*(@<^v_V z`ZM8Oxsnn}`D1%~4sRP=3PX`DXU|97J+vSfu<*pZX1=Rvw%pP^?n+-V z>D8o)@k!2P<5w+?p`oEZuBBcbj_#RK!w##AJkPt^^;N&3pG4PFe80o98!aU(yMM&%zl4s~|Us92_=k;-M&H6QC13hJ(m!WV@ik>7mHCoas8? zjKKm3C(H4QHvy?7QfiZ?8%!lm=BMtqGXjnY4kj`iiLA;*uZ+h}0ho3yp7NZ_lrrj5bnEXb z+K7SaeaKM%1ohh8U9Lk$*L;$wxG$YME?+sWnZ*I3)_tX90K*r}ehfd-5$28%{dmf0 zK(%3gz>ub_;r@;}zhqeV763;j!PouNI|prAVaV6^gWTu>WA+w5==C2=+A(FU z2Z+9gfvux^KRn93M=>i?$U_~8FWeX-dxnr(lHd2rQ-pPEkFJoxW7~hL*}VeJ?^g}i z4ioK@F7;_5Vt7T1yw+4$W%c5HV6C|c@67g^kh)N0V`F22vKfJpWTp*?m%XKmH4RO` zX?nDD&T|k5#K#9ud7!}rKCPCwym|X)u=iDwome5V=rzyNUk6>OafAc7o@)L8wUEBU z4Q##bDB92Mzo%^KHS5Xmo8ti+x5mC4G?a!>o1cL!7hWyD02y#3GAXIHD2drFad7R5 zkFY-ZfpC7G#L`rNALj!B=;4kw-8ci7rk^eqvx+b75eb%)W(*s23nvl|{s(|qm7?q} zPOz0kjjr98`jrJK9RF2#eTS_+Pvl+$l;6RY93D&myXuc779KI7b^+V%C?ldI3!-p^MK>op$ehMUe!Vr=}lb(l9KaDCluCRD)u(oM=2C}o0E06 zC+4UjW-0(opev+90WA z<@OlE9E`74)tTk91yRP+il9{4S4z^rJ{&b*kq%g`fF^UQ(*$nvIiO}CQHBGt2^ z(!N12UVhbfN*Ur=dHOmbrq-EW9YGdz{-qB|3l}fwNkP;W*j20pYzu2@CH_7GZT&EG z?PneNw91a*v$OX{oFM>`)epddx&Zet6l7m%1&vtIngV!SbFr5*Wr@!@D3tZVHCWb0 z5*>0?2oU4vf za)6C5{#oS@g{P<~pI=i>u*5;N*}fSXJ*~)+fa0sAcP^ zE6PGME=J@bdi0Q30pPS%*)0CwhHV0M!~P}7#+IuyF(RU3Vl<7S#8`3?X|6RjF-cnJ zz)*aBZt7;Pq`4w61{Q*smr=9J|`Y7K@WLptI| zHVX?1Ha0e1^0xfTUa2R(TG6G5Uc3tcICP-e?6-`eKrQ|RagR*%q}vKc6+Wd6Ue*ua zNi%?lhAZu(yb38JOFL|>CZ3%|m9&Ni-tGVf0FDi!Sc!;_1uSs1T&Tq%CwTJ{j|Qcr-czuoZ$-!T z_H1)8%_Cl>$iA}Icgz-)H#EAkXz6EoU8O6`O|CKY@O@Zog%q%wm@=%Nqtk_=q)bHU zEXkY~Cmb0RkW2weH9F8hDN{L=X`E-?vx>&qxjt(0M}b&1`541cA(P@Xu^@7n;>Ymr zAT2dT8JM8HNR8fWfnxc`@K9t0IUG@^qSIluK2#>InhV55d46w~gOz}07!7RJl3w}K z9uga;&cbuPMAsJyx(jt_BX|`~4F@LTZj{JCbIJ^4rch%RFiDAv0aqTd&x0nNh8(v6 z8E#(#M6K_}l$-+Hh|>v&=sHsv0|KM9jm_zF1~+*`DrfcJ$cX*Hv53HG)h4iVYs z2t`XQS-v1tShIOQY}X#^lYNj04uuR!aSS3Wh~a(O!sQeih@ivR{f)J?yc@Ykzymmu z!Vx+{*_#zkhBJzwk}p(0XB|QzDvDUKZEtPOvP$p%#Mjl;RT2^sK0ZEtKM*e$m$I4~ zMMRg>2_LXF7kOb}p}=8^`dMhghP6L#mC$o*#;`s3G$@HlyR5B{4m4-UV6_3Q4@1gw zrcV(T1N^tRxY)dklHC{38Faej!fiXD_+L}G{;D%L-7|n<@&BTy{HG56KPWd+4+eVL zKi@ z(PovJnMu^_`lfWGjClH?C7(IJL*$n`Ca$TH-Q7JsnDBD1BIH~3&bn7S{PB*snJH}R z7$MZ|r4;@dJ)pWG95C&kZ4z}q?dCeO_K_eZ zt{O}U){i@zM|pbFrKd2UdeWn(r!cWr`|73aHImCSbx`nD*v|{?Ye|k{ukwrJ?YNK+ zn}=Eeb-2EH@TVu7zg!F~C;2iQu>f?!g8d>7g|vx%8QG*DC+~ z?bQh#+A6shVQ{FOJ;3EsKK)ReowOxb(KDuc!vMzY%mVi^A{fxOV!ZCWVQ=lS<`Qg>{^wz^q3_U7IbRD;$>*$WY|JVu zcT#`dds(zmG^uLO-vjP;A?z$_Go5$8Yw^xEgzp|;=0GrmTYqWhYZSA};Ng{6POB;_ z|KUV~Rpj-ZvrP#&rRj=h)9Cq1h%AjPz&|+3eLy?Wpz1Sa@sl6R9BKKg@w2Qk>`Ox! zba8=2OPL|?4B1m1hxD(rDc#G6GC5ORiFF{qe(?a>rJbE3Ul8gCiOY7&IQ39fET}C0 z4L_kVtg$|)&_*~Ou#zx}nNRGdo-0>M*|ZKyq@<)Aog3cSIcSm@x5TL1Sy>Bm%b0%Z z!=*~59NIj=uij4MPfN31#1k*H#$rF@$?Z|qqMS#$5T1wB_$ok`o%8#4ZkHJM(wmIFFbGCO&01~5?(cyVbQWD+ztI-pRiASE)Ak2Au`7f& z=!v3xdp1_-XRt_Dp+ESkT2A>O`WK%PZM6g3-Ca%Z_VNDSUYRKmu=DbxJ9jI=W>%cD zxk|Az_dU^Y8Ui&21G^m#vqsNq%AtRknZoY>w==nl@j~*3#DKO&htv;yk7Mh#UsfbW zWnV92%2l(Am9&Lgn?(4rtE}EMJG}oaxr=Ts)hJ#|CJeB8be4|#I1Pin6h0q@LyNpr z%rx#Id_Z$8wX>=BlyAwi{hkGALHBHTp!+O}`esNRZ*Ux)`Tn=xO}N?a%uM%%ia6=K z@XMV(uMCNxXGv}et;)FXDTD8aL(Zqg^>?fU$kKv8HJ8FlC+c|jNyC7kQB=yZ&b=8* zKoZ=^&#()dSAWT_lfnNwLk|&Y{)@5etytSAq$~$c{}S`Gv^lShi<|m^+Mmo{^;7p` zM3cS3OP^SA{RN9ObFIzWf$l6Pq!z^*%*op4e)xUdzLm_6UoQ79!zL5|3FrYWIr$3J zY_)EVf8q9}|I$vrg>c}Od%smg+??Wl?no9QZ3$6SH^X=ZM>(^;{1x+Q z*}y+wkx~`N8a8Ppw~fV|0$s!{Qf>q0I%5tn8IM_>{S1uK(M@dhX(!Z-F#kD$e4*2y zUDYlq6q6cK;IjSN=IEN6iAFKQ8WFhxU6mRsh&eQUL_QUXKT>wv_G~9LnC->W@ca)C z%o`Ly2107A^|Vk{fR&8R;4+lIJQ?J>R`a@Hya61{eAedX(&Bym2pet)Knuy38~|Hy zh4;$2y2Zmb(Qed_4d-Z#^;nL~=Rpm&ZU;b61jdg;;s!@E=f3Y3LGkeelLVe*B8DtL z3tX$``uEvXa@311jc9927?e_OGq{ef#u(UWxqAdIYOkC=OH>4S){;A6@CWnwxV#L= z2=l$WeTUQ~;?aPlAVOW~W5fTV`}pFjv-8t%0&9vX*{Bdc7SWEDa`m|Sb-M4Fl6|ek zg=13ho5+aRczJo5n|DY`f|CqW@2Oe7#wBr@NKs)6A@KxTfpiFGCMFU#G@v_aHmvbD zPb1fN%CqsYGRGq^Y;$X1{2vC_|GR|oh~|bq*&v%umfn05`!fYORoMz@vk(6ZLTJj% literal 0 HcmV?d00001 diff --git a/mods/z_extra_mods/esm_map/textures/zombie.lua b/mods/z_extra_mods/esm_map/textures/zombie.lua new file mode 100644 index 00000000..5b2dd4e6 --- /dev/null +++ b/mods/z_extra_mods/esm_map/textures/zombie.lua @@ -0,0 +1,132 @@ +--MCmobs v0.4 +--maikerumine +--made for MC like Survival game +--License for code WTFPL and otherwise stated in readmes + +-- intllib +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +--dofile(minetest.get_modpath("mobs").."/api.lua") + + +--################### +--################### ZOMBIE +--################### + + +local zombie = { + type = "monster", + hp_min = 20, + hp_max = 20, + armor = 90, + collisionbox = {-0.3, -0.01, -0.3, 0.3, 1.94, 0.3}, + visual = "mesh", + mesh = "mobs_mc_zombie.b3d", + textures = { + {"mobs_mc_zombie.png"}, + }, + visual_size = {x=3, y=3}, + makes_footstep_sound = true, + sounds = { + random = "zombie1", + death = "zombiedeath", + damage = "zombiehurt1", + distance = 16, + }, + walk_velocity = .8, + run_velocity = 1.6, + damage = 3, + fear_height = 4, + pathfinding = 1, + jump = true, + --jump_height = 3, + group_attack = true, + drops = { + {name = mobs_mc.items.rotten_flesh, + chance = 1, + min = 0, + max = 2,}, + {name = mobs_mc.items.iron_ingot, + -- approximation to 8.5% + chance = 11, + min = 1, + max = 1,}, + {name = mobs_mc.items.carrot, + -- approximation to 8.5% + chance = 11, + min = 1, + max = 1,}, + {name = mobs_mc.items.potato, + -- approximation to 8.5% + chance = 11, + min = 1, + max = 1,}, + }, + animation = { + speed_normal = 25, speed_run = 50, + stand_start = 40, stand_end = 80, + walk_start = 0, walk_end = 40, + run_start = 0, run_end = 40, + }, + lava_damage = 4, + -- TODO: Burn mob only when in direct sunlight + light_damage = 2, + view_range = 16, + attack_type = "dogfight", +} + +mobs:register_mob("mobs_mc:zombie", zombie) + +-- Baby zombie. +-- A smaller and more dangerous variant of the zombie + +local baby_zombie = table.copy(zombie) +baby_zombie.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} +baby_zombie.visual_size = {x=0.75, y=0.75} +baby_zombie.walk_velocity = 1.2 +baby_zombie.run_velocity = 2.4 +baby_zombie.light_damage = 0 + +mobs:register_mob("mobs_mc:baby_zombie", baby_zombie) + +-- Husk. +-- Desert variant of the zombie +local husk = table.copy(zombie) +husk.textures = {{"mobs_mc_husk.png"}} +husk.light_damage = 0 +husk.water_damage = 3 +-- TODO: Husks avoid water + +mobs:register_mob("mobs_mc:husk", husk) + +-- Baby husk. +-- A smaller and more dangerous variant of the husk +local baby_husk = table.copy(husk) +baby_husk.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} +baby_husk.visual_size = {x=0.75, y=0.75} +baby_husk.walk_velocity = 1.2 +baby_husk.run_velocity = 2.4 + +mobs:register_mob("mobs_mc:baby_husk", baby_husk) + + +-- Spawning + +mobs:register_spawn("mobs_mc:zombie", mobs_mc.spawn.solid, 7, 0, 6000, 4, 31000) +-- Baby zombie is 20 times less likely than regular zombies +mobs:register_spawn("mobs_mc:baby_zombie", mobs_mc.spawn.solid, 7, 0, 60000, 4, 31000) +mobs:register_spawn("mobs_mc:husk", mobs_mc.spawn.desert, 7, 0, 6500, 4, 31000) +mobs:register_spawn("mobs_mc:baby_husk", mobs_mc.spawn.desert, 7, 0, 65000, 4, 31000) + + +-- Compatibility +mobs:alias_mob("mobs:zombie", "mobs_mc:zombie") + +-- Spawn eggs +mobs:register_egg("mobs_mc:husk", S("Husk"), "mobs_mc_spawn_icon_husk.png", 0) +mobs:register_egg("mobs_mc:zombie", S("Zombie"), "mobs_mc_spawn_icon_zombie.png", 0) + +if minetest.settings:get_bool("log_mods") then + minetest.log("action", "MC Zombie loaded") +end diff --git a/mods/nyancat/README.txt b/mods/z_extra_mods/nyancat/README.txt similarity index 100% rename from mods/nyancat/README.txt rename to mods/z_extra_mods/nyancat/README.txt diff --git a/mods/nyancat/depends.txt b/mods/z_extra_mods/nyancat/depends.txt similarity index 100% rename from mods/nyancat/depends.txt rename to mods/z_extra_mods/nyancat/depends.txt diff --git a/mods/nyancat/init.lua b/mods/z_extra_mods/nyancat/init.lua similarity index 100% rename from mods/nyancat/init.lua rename to mods/z_extra_mods/nyancat/init.lua diff --git a/mods/nyancat/textures/nyancat_back.png b/mods/z_extra_mods/nyancat/textures/nyancat_back.png similarity index 100% rename from mods/nyancat/textures/nyancat_back.png rename to mods/z_extra_mods/nyancat/textures/nyancat_back.png diff --git a/mods/nyancat/textures/nyancat_front.png b/mods/z_extra_mods/nyancat/textures/nyancat_front.png similarity index 100% rename from mods/nyancat/textures/nyancat_front.png rename to mods/z_extra_mods/nyancat/textures/nyancat_front.png diff --git a/mods/nyancat/textures/nyancat_rainbow.png b/mods/z_extra_mods/nyancat/textures/nyancat_rainbow.png similarity index 100% rename from mods/nyancat/textures/nyancat_rainbow.png rename to mods/z_extra_mods/nyancat/textures/nyancat_rainbow.png diff --git a/mods/nyancat/textures/nyancat_side.png b/mods/z_extra_mods/nyancat/textures/nyancat_side.png similarity index 100% rename from mods/nyancat/textures/nyancat_side.png rename to mods/z_extra_mods/nyancat/textures/nyancat_side.png