Compare commits
6 commits
Author | SHA1 | Date | |
---|---|---|---|
9843a1ce00 | |||
086688d469 | |||
adef3706c5 | |||
70c32b3e05 | |||
de1a41f9d7 | |||
e37bec811c |
260
mods-download
|
@ -3,136 +3,136 @@ rm -rf mods
|
||||||
mkdir mods
|
mkdir mods
|
||||||
cd mods
|
cd mods
|
||||||
|
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/3d_armor.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/3d_armor.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/unified_inventory.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/unified_inventory.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/unifiedbricks.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/unifiedbricks.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/moreblocks.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/moreblocks.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/moreores.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/moreores.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mywalls.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mywalls.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/xdecor.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/xdecor.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/vehicle_mash.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/vehicle_mash.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/lib_mount
|
git clone --depth 1 --branch master https://github.com/minetest-mods/lib_mount
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/workbench.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/workbench.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/ts_furniture.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_furniture.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/playeranim.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/playeranim.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/skinsdb.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/skinsdb.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/letters.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/letters.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/ts_doors.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_doors.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/trash_can.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/trash_can.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/throwing_arrows.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/throwing_arrows.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/throwing.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/throwing.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/stained_glass.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/stained_glass.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/xban2.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/xban2.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/drinks.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/drinks.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/jukebox.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/jukebox.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/carpets.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/carpets.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/chat2.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/chat2.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mymillwork.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mymillwork.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/signs_api.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/signs_api.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/crops.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/crops.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mtfoods.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mtfoods.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mysheetmetal.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mysheetmetal.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/ts_workshop.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_workshop.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/myroofs.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/myroofs.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/ts_paper.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_paper.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mydeck.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mydeck.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/enchanting.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/enchanting.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/interact.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/interact.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/stargate.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/stargate.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mypaths.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mypaths.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mycorners.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mycorners.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mymasonhammer.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mymasonhammer.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mywoodslopes.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mywoodslopes.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/display_api.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/display_api.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/font_api.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/font_api.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/trees_lib.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/trees_lib.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/intllib.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/intllib.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/more_chests.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/more_chests.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/flowerpot.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/flowerpot.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/cloud_items.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/cloud_items.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/compost.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/compost.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/death_compass.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/death_compass.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/smartfs.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/smartfs.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/unifieddyes.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/unifieddyes.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/basic_materials.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/basic_materials.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/biome_lib.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/biome_lib.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/moretrees.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/moretrees.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/homedecor_modpack.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/homedecor_modpack.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/signs_lib.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/signs_lib.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/currency.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/currency.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/plantlife_modpack.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/plantlife_modpack.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/new_campfire.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/new_campfire.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/coloredwood.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/coloredwood.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/basic_signs.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/basic_signs.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://cheapiesystems.com/git/roads
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/roads.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/blox.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/blox.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/cheapie/plasticbox.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/plasticbox.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/torusJKL/charcoal.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/charcoal.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Sokomine/windmill.git
|
git clone --depth 1 --branch master https://github.com/Sokomine/windmill.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/farming.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/farming.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/protector.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/protector.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/playerplus.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/playerplus.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mobs_npc.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_npc.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mobs_redo.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_redo.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mobs_water.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_water.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mobs_monster.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_monster.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mobs_animal.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_animal.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mob_horse.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mob_horse.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/bows.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bows.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/builtin_item.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/builtin_item.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/bonemeal.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bonemeal.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/stamina.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/stamina.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/wine.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/wine.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/bees.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bees.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/wool.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/wool.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/regrow.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/regrow.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/ambience.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/ambience.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/bakedclay.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bakedclay.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/stairs.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/stairs.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/anvils.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/anvils.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/carts.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/carts.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/doors.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/doors.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/pie.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/pie.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/castle.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/castle.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/TenPlus1/mobs_sky.git
|
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_sky.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Uberi/Minetest-WorldEdit.git
|
git clone --depth 1 --branch master https://github.com/Uberi/Minetest-WorldEdit.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/realchess.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/realchess.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Grizzly-Adam/BBQ.git
|
git clone --depth 1 --branch master https://github.com/Grizzly-Adam/BBQ.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mydoors.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mydoors.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/TumeniNodes/angledwalls.git
|
git clone --depth 1 --branch master https://github.com/TumeniNodes/angledwalls.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/pyrollo/display_modpack.git
|
git clone --depth 1 --branch master https://github.com/pyrollo/display_modpack.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Sokomine/cottages.git
|
git clone --depth 1 --branch master https://github.com/Sokomine/cottages.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/joe7575/techpack.git
|
git clone --depth 1 --branch master https://github.com/joe7575/techpack.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/random-geek/morelights.git
|
git clone --depth 1 --branch master https://github.com/random-geek/morelights.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://repo.or.cz/minetest_mtg_plus.git
|
git clone --depth 1 --branch master https://repo.or.cz/minetest_mtg_plus.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/spectator_mode.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/spectator_mode.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Extex101/christmas.git
|
git clone --depth 1 --branch master https://github.com/Extex101/christmas.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/gloopblocks.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/gloopblocks.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/minetest-mods/mylandscaping.git
|
git clone --depth 1 --branch master https://github.com/minetest-mods/mylandscaping.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/minislots.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/minislots.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/v-rob/bridger.git
|
git clone --depth 1 --branch master https://github.com/v-rob/bridger.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/AiTechEye/smartshop.git
|
git clone --depth 1 --branch master https://github.com/AiTechEye/smartshop.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://repo.or.cz/minetest_colorcubes.git
|
git clone --depth 1 --branch master https://repo.or.cz/minetest_colorcubes.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/DonBatman/myboardgames.git
|
git clone --depth 1 --branch master https://github.com/DonBatman/myboardgames.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/mt-mods/ilights.git
|
git clone --depth 1 --branch master https://gitlab.com/VanessaE/ilights.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/TumeniNodes/angledstairs.git
|
git clone --depth 1 --branch master https://github.com/TumeniNodes/angledstairs.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/TumeniNodes/artdeco.git
|
git clone --depth 1 --branch master https://github.com/TumeniNodes/artdeco.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/TumeniNodes/facade.git
|
git clone --depth 1 --branch master https://github.com/TumeniNodes/facade.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/TumeniNodes/stoneworks.git
|
git clone --depth 1 --branch master https://github.com/TumeniNodes/stoneworks.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Delaroyas/simplyslopes.git
|
git clone --depth 1 --branch master https://github.com/Delaroyas/simplyslopes.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/joe7575/tubelib2.git
|
git clone --depth 1 --branch master https://github.com/joe7575/tubelib2.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Ezhh/abriflame.git
|
git clone --depth 1 --branch master https://github.com/Ezhh/abriflame.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Ezhh/abriglass.git
|
git clone --depth 1 --branch master https://github.com/Ezhh/abriglass.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/brittm3/Minetest-lpanes.git
|
git clone --depth 1 --branch master https://github.com/brittm3/Minetest-lpanes.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/qwrwed/lightsplus.git
|
git clone --depth 1 --branch master https://github.com/qwrwed/lightsplus.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/khonkhortisan/rubiks.git
|
git clone --depth 1 --branch master https://github.com/khonkhortisan/rubiks.git
|
||||||
git clone --recurse-submodules --branch master https://git.bananach.space/advtrains.git
|
git clone --branch master https://git.bananach.space/advtrains.git
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://github.com/Dragonop/claycrafter
|
git clone --depth 1 --branch master https://github.com/Dragonop/claycrafter
|
||||||
git clone --recurse-submodules --depth 1 --branch master https://notabug.org/NetherEran/hot_air_balloons.git
|
git clone --depth 1 --branch master https://notabug.org/NetherEran/hot_air_balloons.git
|
||||||
git clone --recurse-submodules --branch master https://cheapiesystems.com/git/prefab_redo
|
git clone --branch master https://cheapiesystems.com/git/prefab_redo
|
||||||
git clone --recurse-submodules --branch master https://cheapiesystems.com/git/mail
|
git clone --branch master https://cheapiesystems.com/git/mail
|
||||||
git clone --recurse-submodules --branch master https://github.com/mt-mods/home_workshop_modpack.git
|
git clone --branch master https://gitlab.com/VanessaE/home_workshop_modpack.git
|
||||||
git clone --recurse-submodules --branch master https://git.bananach.space/basic_trains.git
|
git clone --branch master https://git.bananach.space/basic_trains.git
|
||||||
|
|
||||||
#Clean git stuff
|
#Clean git stuff
|
||||||
rm -rf $(find . -name .git*)
|
rm -rf $(find . -name .git*)
|
||||||
|
|
|
@ -1,151 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
rm -rf mods
|
|
||||||
mkdir mods
|
|
||||||
cd mods
|
|
||||||
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/3d_armor.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/unified_inventory.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/unifiedbricks.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/moreblocks.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/moreores.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mywalls.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/xdecor.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/vehicle_mash.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/lib_mount
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/workbench.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_furniture.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/playeranim.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/skinsdb.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/letters.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_doors.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/trash_can.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/throwing_arrows.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/throwing.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/stained_glass.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/xban2.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/drinks.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/jukebox.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/carpets.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/chat2.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mymillwork.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/signs_api.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/crops.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mtfoods.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mysheetmetal.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_workshop.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/myroofs.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/ts_paper.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mydeck.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/enchanting.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/interact.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/stargate.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mypaths.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mycorners.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mymasonhammer.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mywoodslopes.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/display_api.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/font_api.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/trees_lib.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/intllib.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/more_chests.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/flowerpot.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/cloud_items.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/compost.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/death_compass.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/smartfs.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/unifieddyes.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/basic_materials.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/biome_lib.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/moretrees.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/homedecor_modpack.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/signs_lib.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/currency.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/plantlife_modpack.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/new_campfire.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/coloredwood.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/basic_signs.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/roads.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/blox.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/plasticbox.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/charcoal.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Sokomine/windmill.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/farming.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/protector.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/playerplus.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_npc.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_redo.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_water.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_monster.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_animal.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mob_horse.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bows.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/builtin_item.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bonemeal.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/stamina.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/wine.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bees.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/wool.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/regrow.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/ambience.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/bakedclay.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/stairs.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/anvils.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/carts.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/doors.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/pie.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/castle.git
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/TenPlus1/mobs_sky.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Uberi/Minetest-WorldEdit.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/realchess.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Grizzly-Adam/BBQ.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mydoors.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/TumeniNodes/angledwalls.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/pyrollo/display_modpack.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Sokomine/cottages.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/joe7575/techpack.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/random-geek/morelights.git
|
|
||||||
git clone --depth 1 --branch master https://repo.or.cz/minetest_mtg_plus.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/spectator_mode.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Extex101/christmas.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/gloopblocks.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/minetest-mods/mylandscaping.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/minislots.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/v-rob/bridger.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/AiTechEye/smartshop.git
|
|
||||||
git clone --depth 1 --branch master https://repo.or.cz/minetest_colorcubes.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/DonBatman/myboardgames.git
|
|
||||||
git clone --depth 1 --branch master https://gitlab.com/VanessaE/ilights.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/TumeniNodes/angledstairs.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/TumeniNodes/artdeco.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/TumeniNodes/facade.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/TumeniNodes/stoneworks.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Delaroyas/simplyslopes.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/joe7575/tubelib2.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Ezhh/abriflame.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Ezhh/abriglass.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/brittm3/Minetest-lpanes.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/qwrwed/lightsplus.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/khonkhortisan/rubiks.git
|
|
||||||
git clone --branch master https://git.bananach.space/advtrains.git
|
|
||||||
git clone --depth 1 --branch master https://github.com/Dragonop/claycrafter
|
|
||||||
git clone --depth 1 --branch master https://notabug.org/NetherEran/hot_air_balloons.git
|
|
||||||
git clone --branch master https://cheapiesystems.com/git/prefab_redo
|
|
||||||
git clone --branch master https://cheapiesystems.com/git/mail
|
|
||||||
git clone --branch master https://gitlab.com/VanessaE/home_workshop_modpack.git
|
|
||||||
git clone --branch master https://git.bananach.space/basic_trains.git
|
|
||||||
|
|
||||||
#Clean git stuff
|
|
||||||
rm -rf $(find . -name .git*)
|
|
||||||
|
|
||||||
#Make some fixes
|
|
||||||
#1
|
|
||||||
if [[ $(grep -R "run_at_every_load = false" homedecor_modpack/homedecor_kitchen/init.lua | wc -l) = 1 ]]
|
|
||||||
then
|
|
||||||
echo "Applying fix for unknown kitchen_cabinet blocks: https://git.my-web.xyz/milan/minetest-mm/issues/34"
|
|
||||||
echo "This fix can be removed after some time"
|
|
||||||
sed -i 's/run_at_every_load = false,/run_at_every_load = true,/' homedecor_modpack/homedecor_kitchen/init.lua
|
|
||||||
fi
|
|
||||||
|
|
||||||
#update skins-db
|
|
||||||
cd skinsdb/updater
|
|
||||||
python3 update_skins.py
|
|
|
@ -1,5 +1,5 @@
|
||||||
load_mod_interact = false
|
load_mod_interact = false
|
||||||
load_mod_christmas = true
|
load_mod_christmas = false
|
||||||
load_mod_advtrains_luaautomation = false
|
load_mod_advtrains_luaautomation = false
|
||||||
load_mod_advtrains_interlocking = false
|
load_mod_advtrains_interlocking = false
|
||||||
load_mod_advtrains_line_automation = false
|
load_mod_advtrains_line_automation = false
|
||||||
|
@ -47,6 +47,7 @@ load_mod_nature_classic = true
|
||||||
load_mod_homedecor_clocks = true
|
load_mod_homedecor_clocks = true
|
||||||
load_mod_signs_road = true
|
load_mod_signs_road = true
|
||||||
load_mod_homedecor_cobweb = true
|
load_mod_homedecor_cobweb = true
|
||||||
|
load_mod_along_shore = true
|
||||||
load_mod_artdeco = true
|
load_mod_artdeco = true
|
||||||
load_mod_carts = true
|
load_mod_carts = true
|
||||||
load_mod_mobs_butterfly = true
|
load_mod_mobs_butterfly = true
|
||||||
|
@ -77,6 +78,7 @@ load_mod_death_compass = true
|
||||||
load_mod_facade = true
|
load_mod_facade = true
|
||||||
load_mod_inbox = true
|
load_mod_inbox = true
|
||||||
load_mod_cloud_items = true
|
load_mod_cloud_items = true
|
||||||
|
load_mod_flowers_plus = true
|
||||||
load_mod_bows = true
|
load_mod_bows = true
|
||||||
load_mod_3dmushrooms = true
|
load_mod_3dmushrooms = true
|
||||||
load_mod_minislots_engine = true
|
load_mod_minislots_engine = true
|
||||||
|
@ -262,6 +264,7 @@ load_mod_serialize_lib = true
|
||||||
load_mod_hot_air_balloons = true
|
load_mod_hot_air_balloons = true
|
||||||
load_mod_mobs_bat = true
|
load_mod_mobs_bat = true
|
||||||
load_mod_home_workshop_machines = true
|
load_mod_home_workshop_machines = true
|
||||||
|
load_mod_home_workshop_common = true
|
||||||
load_mod_home_workshop_misc = true
|
load_mod_home_workshop_misc = true
|
||||||
load_mod_computers = true
|
load_mod_computers = true
|
||||||
load_mod_advtrains_assets = true
|
load_mod_advtrains_assets = true
|
||||||
|
@ -269,7 +272,3 @@ load_mod_advtrains_train_subway = true
|
||||||
load_mod_advtrains_train_japan = true
|
load_mod_advtrains_train_japan = true
|
||||||
load_mod_advtrains_train_industrial = true
|
load_mod_advtrains_train_industrial = true
|
||||||
load_mod_advtrains_train_steam = true
|
load_mod_advtrains_train_steam = true
|
||||||
load_mod_home_vending_machines = true
|
|
||||||
load_mod_pl_sunflowers = true
|
|
||||||
load_mod_pl_seaweed = true
|
|
||||||
load_mod_pl_waterlilies = true
|
|
||||||
|
|
274
mods-list-old
|
@ -1,274 +0,0 @@
|
||||||
load_mod_interact = false
|
|
||||||
load_mod_christmas = false
|
|
||||||
load_mod_advtrains_luaautomation = false
|
|
||||||
load_mod_advtrains_interlocking = false
|
|
||||||
load_mod_advtrains_line_automation = false
|
|
||||||
load_mod_advtrains_signals_ks = false
|
|
||||||
load_mod_workbench = true
|
|
||||||
load_mod_wool = true
|
|
||||||
load_mod_wine = true
|
|
||||||
load_mod_mobs_birds = true
|
|
||||||
load_mod_plasticbox = true
|
|
||||||
load_mod_minislots_golden7s_deluxe = true
|
|
||||||
load_mod_mail = true
|
|
||||||
load_mod_worldedit = true
|
|
||||||
load_mod_letters = true
|
|
||||||
load_mod_trafficlight = true
|
|
||||||
load_mod_jukebox = true
|
|
||||||
load_mod_tubelib_addons1 = true
|
|
||||||
load_mod_plasmascreen = true
|
|
||||||
load_mod_mobs_npc = true
|
|
||||||
load_mod_my_future_doors = true
|
|
||||||
load_mod_itemframes = true
|
|
||||||
load_mod_homedecor_office = true
|
|
||||||
load_mod_stargate = true
|
|
||||||
load_mod_charcoal = true
|
|
||||||
load_mod_homedecor_lighting = true
|
|
||||||
load_mod_angledwalls = true
|
|
||||||
load_mod_builtin_item = true
|
|
||||||
load_mod_homedecor_exterior = true
|
|
||||||
load_mod_flowerpot = true
|
|
||||||
load_mod_3d_armor_stand = true
|
|
||||||
load_mod_junglegrass = true
|
|
||||||
load_mod_mobs_crocs = true
|
|
||||||
load_mod_homedecor_electrical = true
|
|
||||||
load_mod_homedecor_doors_and_gates = true
|
|
||||||
load_mod_homedecor_common = true
|
|
||||||
load_mod_homedecor_furniture_medieval = true
|
|
||||||
load_mod_morelights = true
|
|
||||||
load_mod_homedecor_bedroom = true
|
|
||||||
load_mod_homedecor_laundry = true
|
|
||||||
load_mod_blox = true
|
|
||||||
load_mod_homedecor_3d_extras = true
|
|
||||||
load_mod_mymillwork = true
|
|
||||||
load_mod_drinks = true
|
|
||||||
load_mod_angledstairs = true
|
|
||||||
load_mod_nature_classic = true
|
|
||||||
load_mod_homedecor_clocks = true
|
|
||||||
load_mod_signs_road = true
|
|
||||||
load_mod_homedecor_cobweb = true
|
|
||||||
load_mod_along_shore = true
|
|
||||||
load_mod_artdeco = true
|
|
||||||
load_mod_carts = true
|
|
||||||
load_mod_mobs_butterfly = true
|
|
||||||
load_mod_mobs_animal = true
|
|
||||||
load_mod_mobs_monster = true
|
|
||||||
load_mod_lavalamp = true
|
|
||||||
load_mod_mtg_plus = true
|
|
||||||
load_mod_homedecor_gastronomy = true
|
|
||||||
load_mod_anvils = true
|
|
||||||
load_mod_moreblocks = true
|
|
||||||
load_mod_molehills = true
|
|
||||||
load_mod_ontime_clocks = true
|
|
||||||
load_mod_mtfoods = true
|
|
||||||
load_mod_sl_controller = true
|
|
||||||
load_mod_intllib = true
|
|
||||||
load_mod_display_api = true
|
|
||||||
load_mod_worldedit_gui = true
|
|
||||||
load_mod_bridger = true
|
|
||||||
load_mod_homedecor_trash_cans = true
|
|
||||||
load_mod_3d_armor_ui = true
|
|
||||||
load_mod_gloopblocks = true
|
|
||||||
load_mod_mobs = true
|
|
||||||
load_mod_worldedit_shortcommands = true
|
|
||||||
load_mod_worldedit_brush = true
|
|
||||||
load_mod_bbq = true
|
|
||||||
load_mod_wieldview = true
|
|
||||||
load_mod_death_compass = true
|
|
||||||
load_mod_facade = true
|
|
||||||
load_mod_inbox = true
|
|
||||||
load_mod_cloud_items = true
|
|
||||||
load_mod_flowers_plus = true
|
|
||||||
load_mod_bows = true
|
|
||||||
load_mod_3dmushrooms = true
|
|
||||||
load_mod_minislots_engine = true
|
|
||||||
load_mod_ambience = true
|
|
||||||
load_mod_lib_mount = true
|
|
||||||
load_mod_streetshotfix = true
|
|
||||||
load_mod_carpets = true
|
|
||||||
load_mod_windmill = true
|
|
||||||
load_mod_chat2 = true
|
|
||||||
load_mod_xban2 = true
|
|
||||||
load_mod_coloredwood = true
|
|
||||||
load_mod_homedecor_misc = true
|
|
||||||
load_mod_3d_armor_ip = true
|
|
||||||
load_mod_techpack_stairway = true
|
|
||||||
load_mod_shields = true
|
|
||||||
load_mod_morelights_extras = true
|
|
||||||
load_mod_homedecor_roofing = true
|
|
||||||
load_mod_mys_n_l = true
|
|
||||||
load_mod_smartfs = true
|
|
||||||
load_mod_steles = true
|
|
||||||
load_mod_homedecor_seating = true
|
|
||||||
load_mod_enchanting = true
|
|
||||||
load_mod_mycanadiancheckers = true
|
|
||||||
load_mod_mychess = true
|
|
||||||
load_mod_asphaltstairs = true
|
|
||||||
load_mod_manholes = true
|
|
||||||
load_mod_building_blocks = true
|
|
||||||
load_mod_3d_armor = true
|
|
||||||
load_mod_doors = true
|
|
||||||
load_mod_dryplants = true
|
|
||||||
load_mod_stoneworks = true
|
|
||||||
load_mod_bees = true
|
|
||||||
load_mod_mymasonhammer = true
|
|
||||||
load_mod_minislots_golden7s = true
|
|
||||||
load_mod_3d_armor_sfinv = true
|
|
||||||
load_mod_morelights_vintage = true
|
|
||||||
load_mod_infrastructure = true
|
|
||||||
load_mod_bakedclay = true
|
|
||||||
load_mod_ilights = true
|
|
||||||
load_mod_castle = true
|
|
||||||
load_mod_currency = true
|
|
||||||
load_mod_basic_signs = true
|
|
||||||
load_mod_youngtrees = true
|
|
||||||
load_mod_bonemeal = true
|
|
||||||
load_mod_minislots_work_files = true
|
|
||||||
load_mod_mylittle_bg = true
|
|
||||||
load_mod_vines = true
|
|
||||||
load_mod_ts_doors = true
|
|
||||||
load_mod_moretrees = true
|
|
||||||
load_mod_smartshop = true
|
|
||||||
load_mod_mobs_fish = true
|
|
||||||
load_mod_homedecor_foyer = true
|
|
||||||
load_mod_colorcubes = true
|
|
||||||
load_mod_fake_fire = true
|
|
||||||
load_mod_compost = true
|
|
||||||
load_mod_concretestairs = true
|
|
||||||
load_mod_signs_api = true
|
|
||||||
load_mod_mytrouble = true
|
|
||||||
load_mod_more_chests = true
|
|
||||||
load_mod_ts_paper = true
|
|
||||||
load_mod_crops = true
|
|
||||||
load_mod_boards = true
|
|
||||||
load_mod_trees_lib = true
|
|
||||||
load_mod_mydiamondblock = true
|
|
||||||
load_mod_signs_lib = true
|
|
||||||
load_mod_homedecor_climate_control = true
|
|
||||||
load_mod_protector = true
|
|
||||||
load_mod_font_metro = true
|
|
||||||
load_mod_homedecor_kitchen = true
|
|
||||||
load_mod_homedecor_electronics = true
|
|
||||||
load_mod_signs = true
|
|
||||||
load_mod_mobs_jellyfish = true
|
|
||||||
load_mod_mobs_sharks = true
|
|
||||||
load_mod_mobs_turtles = true
|
|
||||||
load_mod_safer_lua = true
|
|
||||||
load_mod_morelights_modern = true
|
|
||||||
load_mod_homedecor_pictures_and_paintings = true
|
|
||||||
load_mod_moreores = true
|
|
||||||
load_mod_my_game_pieces = true
|
|
||||||
load_mod_mydraughts = true
|
|
||||||
load_mod_my_saloon_doors = true
|
|
||||||
load_mod_throwing_arrows = true
|
|
||||||
load_mod_basic_materials = true
|
|
||||||
load_mod_mygomoku = true
|
|
||||||
load_mod_worldedit_commands = true
|
|
||||||
load_mod_regrow = true
|
|
||||||
load_mod_gravelsieve = true
|
|
||||||
load_mod_homedecor_tables = true
|
|
||||||
load_mod_mycorners = true
|
|
||||||
load_mod_homedecor_furniture = true
|
|
||||||
load_mod_homedecor_fences = true
|
|
||||||
load_mod_mypachisi = true
|
|
||||||
load_mod_homedecor_books = true
|
|
||||||
load_mod_mypirinola = true
|
|
||||||
load_mod_unified_inventory = true
|
|
||||||
load_mod_mypitfall = true
|
|
||||||
load_mod_mys_n_l_mini = true
|
|
||||||
load_mod_labels = true
|
|
||||||
load_mod_myuno = true
|
|
||||||
load_mod_mydeck = true
|
|
||||||
load_mod_my_castle_doors = true
|
|
||||||
load_mod_biome_lib = true
|
|
||||||
load_mod_my_misc_doors = true
|
|
||||||
load_mod_my_cottage_doors = true
|
|
||||||
load_mod_woodsoils = true
|
|
||||||
load_mod_lcdlib = true
|
|
||||||
load_mod_ts_workshop = true
|
|
||||||
load_mod_my_default_doors = true
|
|
||||||
load_mod_ferns = true
|
|
||||||
load_mod_my_door_wood = true
|
|
||||||
load_mod_my_fancy_doors = true
|
|
||||||
load_mod_my_garage_door = true
|
|
||||||
load_mod_emergencyphone = true
|
|
||||||
load_mod_my_hidden_doors = true
|
|
||||||
load_mod_homedecor_wardrobe = true
|
|
||||||
load_mod_my_old_doors = true
|
|
||||||
load_mod_homedecor_bathroom = true
|
|
||||||
load_mod_my_sliding_doors = true
|
|
||||||
load_mod_homedecor_windows_and_treatments = true
|
|
||||||
load_mod_bushes = true
|
|
||||||
load_mod_mylandscaping = true
|
|
||||||
load_mod_streetsmod = true
|
|
||||||
load_mod_mypaths = true
|
|
||||||
load_mod_mob_horse = true
|
|
||||||
load_mod_streetsawards = true
|
|
||||||
load_mod_myroofs = true
|
|
||||||
load_mod_pie = true
|
|
||||||
load_mod_mysheetmetal = true
|
|
||||||
load_mod_skinsdb = true
|
|
||||||
load_mod_mywalls = true
|
|
||||||
load_mod_mywoodslopes = true
|
|
||||||
load_mod_tubelib_addons3 = true
|
|
||||||
load_mod_new_campfire = true
|
|
||||||
load_mod_bushes_classic = true
|
|
||||||
load_mod_farming = true
|
|
||||||
load_mod_cavestuff = true
|
|
||||||
load_mod_font_api = true
|
|
||||||
load_mod_poisonivy = true
|
|
||||||
load_mod_xdecor = true
|
|
||||||
load_mod_trunks = true
|
|
||||||
load_mod_playeranim = true
|
|
||||||
load_mod_playerplus = true
|
|
||||||
load_mod_prefab_redo = true
|
|
||||||
load_mod_realchess = true
|
|
||||||
load_mod_asphalt = true
|
|
||||||
load_mod_constructionarea = true
|
|
||||||
load_mod_delineator = true
|
|
||||||
load_mod_roadsigns = true
|
|
||||||
load_mod_steelsupport = true
|
|
||||||
load_mod_streetlamps = true
|
|
||||||
load_mod_streetsconcrete = true
|
|
||||||
load_mod_mymazes = true
|
|
||||||
load_mod_streetspoles = true
|
|
||||||
load_mod_simplyslopes = true
|
|
||||||
load_mod_spectator_mode = true
|
|
||||||
load_mod_stained_glass = true
|
|
||||||
load_mod_stairs = true
|
|
||||||
load_mod_tubelib_addons2 = true
|
|
||||||
load_mod_stamina = true
|
|
||||||
load_mod_smartline = true
|
|
||||||
load_mod_techpack_warehouse = true
|
|
||||||
load_mod_tubelib = true
|
|
||||||
load_mod_throwing = true
|
|
||||||
load_mod_cottages = true
|
|
||||||
load_mod_trash_can = true
|
|
||||||
load_mod_myconnect4 = true
|
|
||||||
load_mod_ts_furniture = true
|
|
||||||
load_mod_tubelib2 = true
|
|
||||||
load_mod_mycheckers = true
|
|
||||||
load_mod_unifiedbricks = true
|
|
||||||
load_mod_unifieddyes = true
|
|
||||||
load_mod_vehicle_mash = true
|
|
||||||
load_mod_rubiks = true
|
|
||||||
load_mod_lightsplus = true
|
|
||||||
load_mod_abriflame = true
|
|
||||||
load_mod_lpanes = true
|
|
||||||
load_mod_abriglass = true
|
|
||||||
load_mod_advtrains_train_track = true
|
|
||||||
load_mod_advtrains = true
|
|
||||||
load_mod_advtrains_itrainmap = true
|
|
||||||
load_mod_claycrafter = true
|
|
||||||
load_mod_serialize_lib = true
|
|
||||||
load_mod_hot_air_balloons = true
|
|
||||||
load_mod_mobs_bat = true
|
|
||||||
load_mod_home_workshop_machines = true
|
|
||||||
load_mod_home_workshop_common = true
|
|
||||||
load_mod_home_workshop_misc = true
|
|
||||||
load_mod_computers = true
|
|
||||||
load_mod_advtrains_assets = true
|
|
||||||
load_mod_advtrains_train_subway = true
|
|
||||||
load_mod_advtrains_train_japan = true
|
|
||||||
load_mod_advtrains_train_industrial = true
|
|
||||||
load_mod_advtrains_train_steam = true
|
|
|
@ -53,7 +53,6 @@ Change the following default settings by going to Main Menu>>Settings(Tab)>>All
|
||||||
armor_material_gold = true
|
armor_material_gold = true
|
||||||
armor_material_mithril = true
|
armor_material_mithril = true
|
||||||
armor_material_crystal = true
|
armor_material_crystal = true
|
||||||
armor_material_nether = true
|
|
||||||
|
|
||||||
### Initialization glitches when a player first joins
|
### Initialization glitches when a player first joins
|
||||||
**Increase to prevent glitches**
|
**Increase to prevent glitches**
|
||||||
|
|
|
@ -132,7 +132,6 @@ armor = {
|
||||||
gold = "default:gold_ingot",
|
gold = "default:gold_ingot",
|
||||||
mithril = "moreores:mithril_ingot",
|
mithril = "moreores:mithril_ingot",
|
||||||
crystal = "ethereal:crystal_ingot",
|
crystal = "ethereal:crystal_ingot",
|
||||||
nether = "nether:nether_ingot",
|
|
||||||
},
|
},
|
||||||
fire_nodes = {
|
fire_nodes = {
|
||||||
{"nether:lava_source", 5, 8},
|
{"nether:lava_source", 5, 8},
|
||||||
|
@ -177,7 +176,6 @@ armor.config = {
|
||||||
material_gold = true,
|
material_gold = true,
|
||||||
material_mithril = true,
|
material_mithril = true,
|
||||||
material_crystal = true,
|
material_crystal = true,
|
||||||
material_nether = true,
|
|
||||||
set_elements = "head torso legs feet shield",
|
set_elements = "head torso legs feet shield",
|
||||||
set_multiplier = 1.1,
|
set_multiplier = 1.1,
|
||||||
water_protect = true,
|
water_protect = true,
|
||||||
|
|
|
@ -15,7 +15,6 @@ ARMOR_MATERIALS = {
|
||||||
gold = "default:gold_ingot",
|
gold = "default:gold_ingot",
|
||||||
mithril = "moreores:mithril_ingot",
|
mithril = "moreores:mithril_ingot",
|
||||||
crystal = "ethereal:crystal_ingot",
|
crystal = "ethereal:crystal_ingot",
|
||||||
nether = "nether:nether_ingot",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Enable fire protection (defaults true if using ethereal mod)
|
-- Enable fire protection (defaults true if using ethereal mod)
|
||||||
|
|
|
@ -868,92 +868,6 @@ if armor.materials.crystal then
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Nether
|
|
||||||
--
|
|
||||||
-- Requires `armor_material_nether`.
|
|
||||||
--
|
|
||||||
-- @section nether
|
|
||||||
|
|
||||||
if armor.materials.nether then
|
|
||||||
--- Nether Helmet
|
|
||||||
--
|
|
||||||
-- @helmet 3d_armor:helmet_nether
|
|
||||||
-- @img 3d_armor_inv_helmet_nether.png
|
|
||||||
-- @grp armor_head 1
|
|
||||||
-- @grp armor_heal 14
|
|
||||||
-- @grp armor_use 200
|
|
||||||
-- @grp armor_fire 1
|
|
||||||
-- @armorgrp fleshy 18
|
|
||||||
-- @damagegrp cracky 3
|
|
||||||
-- @damagegrp snappy 2
|
|
||||||
-- @damagegrp level 3
|
|
||||||
armor:register_armor("3d_armor:helmet_nether", {
|
|
||||||
description = S("Nether Helmet"),
|
|
||||||
inventory_image = "3d_armor_inv_helmet_nether.png",
|
|
||||||
groups = {armor_head=1, armor_heal=14, armor_use=100, armor_fire=1},
|
|
||||||
armor_groups = {fleshy=18},
|
|
||||||
damage_groups = {cracky=3, snappy=2, level=3},
|
|
||||||
})
|
|
||||||
--- Nether Chestplate
|
|
||||||
--
|
|
||||||
-- @chestplate 3d_armor:chestplate_nether
|
|
||||||
-- @img 3d_armor_inv_chestplate_nether.png
|
|
||||||
-- @grp armor_torso 1
|
|
||||||
-- @grp armor_heal 14
|
|
||||||
-- @grp armor_use 200
|
|
||||||
-- @grp armor_fire 1
|
|
||||||
-- @armorgrp fleshy 25
|
|
||||||
-- @damagegrp cracky 3
|
|
||||||
-- @damagegrp snappy 2
|
|
||||||
-- @damagegrp level 3
|
|
||||||
armor:register_armor("3d_armor:chestplate_nether", {
|
|
||||||
description = S("Nether Chestplate"),
|
|
||||||
inventory_image = "3d_armor_inv_chestplate_nether.png",
|
|
||||||
groups = {armor_torso=1, armor_heal=14, armor_use=200, armor_fire=1},
|
|
||||||
armor_groups = {fleshy=25},
|
|
||||||
damage_groups = {cracky=3, snappy=2, level=3},
|
|
||||||
})
|
|
||||||
--- Nether Leggings
|
|
||||||
--
|
|
||||||
-- @leggings 3d_armor:leggings_nether
|
|
||||||
-- @img 3d_armor_inv_leggings_nether.png
|
|
||||||
-- @grp armor_legs 1
|
|
||||||
-- @grp armor_heal 14
|
|
||||||
-- @grp armor_use 200
|
|
||||||
-- @grp armor_fire 1
|
|
||||||
-- @armorgrp fleshy 25
|
|
||||||
-- @damagegrp cracky 3
|
|
||||||
-- @damagegrp snappy 2
|
|
||||||
-- @damagegrp level 3
|
|
||||||
armor:register_armor("3d_armor:leggings_nether", {
|
|
||||||
description = S("Nether Leggings"),
|
|
||||||
inventory_image = "3d_armor_inv_leggings_nether.png",
|
|
||||||
groups = {armor_legs=1, armor_heal=14, armor_use=200, armor_fire=1},
|
|
||||||
armor_groups = {fleshy=25},
|
|
||||||
damage_groups = {cracky=3, snappy=2, level=3},
|
|
||||||
})
|
|
||||||
--- Nether Boots
|
|
||||||
--
|
|
||||||
-- @boots 3d_armor:boots_nether
|
|
||||||
-- @img 3d_armor_inv_boots_nether.png
|
|
||||||
-- @grp armor_feet 1
|
|
||||||
-- @grp armor_heal 14
|
|
||||||
-- @grp armor_use 200
|
|
||||||
-- @grp armor_fire 1
|
|
||||||
-- @armorgrp fleshy 18
|
|
||||||
-- @damagegrp cracky 3
|
|
||||||
-- @damagegrp snappy 2
|
|
||||||
-- @damagegrp level 3
|
|
||||||
armor:register_armor("3d_armor:boots_nether", {
|
|
||||||
description = S("Nether Boots"),
|
|
||||||
inventory_image = "3d_armor_inv_boots_nether.png",
|
|
||||||
groups = {armor_feet=1, armor_heal=14, armor_use=200, armor_fire=1},
|
|
||||||
armor_groups = {fleshy=18},
|
|
||||||
damage_groups = {cracky=3, snappy=2, level=3},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
--- Crafting
|
--- Crafting
|
||||||
--
|
--
|
||||||
-- @section craft
|
-- @section craft
|
||||||
|
@ -972,7 +886,6 @@ end
|
||||||
-- - gold: default:gold_ingot
|
-- - gold: default:gold_ingot
|
||||||
-- - mithril: moreores:mithril_ingot
|
-- - mithril: moreores:mithril_ingot
|
||||||
-- - crystal: ethereal:crystal_ingot
|
-- - crystal: ethereal:crystal_ingot
|
||||||
-- - nether: nether:nether_ingot
|
|
||||||
--
|
--
|
||||||
-- helmet: chestplate: leggings:
|
-- helmet: chestplate: leggings:
|
||||||
-- ┌───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐
|
-- ┌───┬───┬───┐ ┌───┬───┬───┐ ┌───┬───┬───┐
|
||||||
|
|
|
@ -19,7 +19,6 @@ Helmets:
|
||||||
[3d_armor:helmet_gold] X = [default:gold_ingot]
|
[3d_armor:helmet_gold] X = [default:gold_ingot]
|
||||||
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
|
[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] *
|
||||||
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
|
[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] **
|
||||||
[3d_armor:helmet_nether] X = [ethereal:nether_ingot] **
|
|
||||||
|
|
||||||
Chestplates:
|
Chestplates:
|
||||||
|
|
||||||
|
@ -39,7 +38,6 @@ Chestplates:
|
||||||
[3d_armor:chestplate_gold] X = [default:gold_ingot]
|
[3d_armor:chestplate_gold] X = [default:gold_ingot]
|
||||||
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
|
[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] *
|
||||||
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
|
[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] **
|
||||||
[3d_armor:chestplate_nether] X = [ethereal:nether_ingot] **
|
|
||||||
|
|
||||||
Leggings:
|
Leggings:
|
||||||
|
|
||||||
|
@ -59,7 +57,6 @@ Leggings:
|
||||||
[3d_armor:leggings_gold] X = [default:gold_ingot]
|
[3d_armor:leggings_gold] X = [default:gold_ingot]
|
||||||
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
|
[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] *
|
||||||
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
|
[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] **
|
||||||
[3d_armor:leggings_nether] X = [ethereal:nether_ingot] **
|
|
||||||
|
|
||||||
Boots:
|
Boots:
|
||||||
|
|
||||||
|
@ -77,8 +74,6 @@ Boots:
|
||||||
[3d_armor:boots_gold] X = [default:gold_ingot]
|
[3d_armor:boots_gold] X = [default:gold_ingot]
|
||||||
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
|
[3d_armor:boots_mithril] X = [moreores:mithril_ingot] *
|
||||||
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
|
[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] **
|
||||||
[3d_armor:boots_nether] X = [ethereal:nether_ingot] **
|
|
||||||
|
|
||||||
* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
|
* Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549
|
||||||
** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal
|
** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal
|
||||||
** Requires nether mod - https://github.com/minetest-mods/nether.git
|
|
||||||
|
|
|
@ -6,4 +6,3 @@ fire?
|
||||||
ethereal?
|
ethereal?
|
||||||
bakedclay?
|
bakedclay?
|
||||||
moreores?
|
moreores?
|
||||||
nether?
|
|
||||||
|
|
|
@ -105,9 +105,6 @@ end
|
||||||
if not minetest.get_modpath("ethereal") then
|
if not minetest.get_modpath("ethereal") then
|
||||||
armor.materials.crystal = nil
|
armor.materials.crystal = nil
|
||||||
end
|
end
|
||||||
if not minetest.get_modpath("nether") then
|
|
||||||
armor.materials.nether = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
dofile(modpath.."/armor.lua")
|
dofile(modpath.."/armor.lua")
|
||||||
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
# textdomain: 3d_armor
|
|
||||||
|
|
||||||
|
|
||||||
### api.lua ###
|
|
||||||
|
|
||||||
3d_armor: Detached armor inventory is nil @1=3d_armor : Abgetrennter Rüstungsbestand ist nicht gesetzt: @1
|
|
||||||
3d_armor: Player name is nil @1=3d_armor : Spielername ist nicht gesetzt: @1
|
|
||||||
3d_armor: Player reference is nil @1=3d_armor : Spielerreferenz ist nicht gesetzt: @1
|
|
||||||
|
|
||||||
### armor.lua ###
|
|
||||||
|
|
||||||
Admin Boots=Adminstiefel
|
|
||||||
Admin Chestplate=Adminbrustplatte
|
|
||||||
Admin Helmet=Adminhelm
|
|
||||||
Admin Leggings=Adminhose
|
|
||||||
Bronze Boots=Bronzestiefel
|
|
||||||
Bronze Chestplate=Bronzebrustplatte
|
|
||||||
Bronze Helmet=Bronzehelm
|
|
||||||
Bronze Leggings=Bronzehose
|
|
||||||
Cactus Boots=Kaktusstiefel
|
|
||||||
Cactus Chestplate=Kaktusbrustplatte
|
|
||||||
Cactus Helmet=Kaktushelm
|
|
||||||
Cactus Leggings=Kaktushose
|
|
||||||
Crystal Boots=Kristallstiefel
|
|
||||||
Crystal Chestplate=Kristallbrustplatte
|
|
||||||
Crystal Helmet=Kristallhelm
|
|
||||||
Crystal Leggings=Kristallhose
|
|
||||||
Nether Boots=Netherstiefel
|
|
||||||
Nether Chestplate=Netherbrustplatte
|
|
||||||
Nether Helmet=Netherhelm
|
|
||||||
Nether Leggings=Netherhose
|
|
||||||
Diamond Boots=Diamantstiefel
|
|
||||||
Diamond Chestplate=Diamantbrustplatte
|
|
||||||
Diamond Helmet=Diamanthelm
|
|
||||||
Diamond Leggings=Diamanthose
|
|
||||||
Gold Boots=Goldstiefel
|
|
||||||
Gold Chestplate=Goldbrustplatte
|
|
||||||
Gold Helmet=Goldhelm
|
|
||||||
Gold Leggings=Goldhose
|
|
||||||
Mithril Boots=Mithrilstiefel
|
|
||||||
Mithril Chestplate=Mithrilbrustplatte
|
|
||||||
Mithril Helmet=Mithrilhelm
|
|
||||||
Mithril Leggings=Mithrilhose
|
|
||||||
Steel Boots=Stahlstiefel
|
|
||||||
Steel Chestplate=Stahlbrustplatte
|
|
||||||
Steel Helmet=Stahlhelm
|
|
||||||
Steel Leggings=Stahlhose
|
|
||||||
Wood Boots=Holzstiefel
|
|
||||||
Wood Chestplate=Holzbrustplatte
|
|
||||||
Wood Helmet=Holzhelm
|
|
||||||
Wood Leggings=Holzhose
|
|
||||||
|
|
||||||
### init.lua ###
|
|
||||||
|
|
||||||
3d_armor: Failed to initialize player=3d_armor : Initialisierung des Spielers fehlgeschlagen
|
|
||||||
Fire=Feuer
|
|
||||||
Heal=Heilen
|
|
||||||
Level=Stufe
|
|
||||||
Radiation=Strahlen
|
|
||||||
Your @1 got destroyed!=Deine @1 wurde zerstört!
|
|
||||||
Your @1 is almost broken!=Deine @1 ist fast kaputt!
|
|
||||||
[3d_armor] Fire Nodes disabled=[3d_armor] Feuer-Knoten deaktiviert
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=Botas de cristal
|
||||||
Crystal Chestplate=Peto de cristal
|
Crystal Chestplate=Peto de cristal
|
||||||
Crystal Helmet=Casco de cristal
|
Crystal Helmet=Casco de cristal
|
||||||
Crystal Leggings=Grebas de cristal
|
Crystal Leggings=Grebas de cristal
|
||||||
Nether Boots=Botas de nether
|
|
||||||
Nether Chestplate=Peto de nether
|
|
||||||
Nether Helmet=Casco de nether
|
|
||||||
Nether Leggings=Grebas de nether
|
|
||||||
Diamond Boots=Botas de diamante
|
Diamond Boots=Botas de diamante
|
||||||
Diamond Chestplate=Peto de diamante
|
Diamond Chestplate=Peto de diamante
|
||||||
Diamond Helmet=Casco de diamante
|
Diamond Helmet=Casco de diamante
|
||||||
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=Bottes en cristal
|
||||||
Crystal Chestplate=Cuirasse en cristal
|
Crystal Chestplate=Cuirasse en cristal
|
||||||
Crystal Helmet=Casque en cristal
|
Crystal Helmet=Casque en cristal
|
||||||
Crystal Leggings=Jambières en cristal
|
Crystal Leggings=Jambières en cristal
|
||||||
Nether Boots=Bottes en nether
|
|
||||||
Nether Chestplate=Cuirasse en nether
|
|
||||||
Nether Helmet=Casque en nether
|
|
||||||
Nether Leggings=Jambières en nether
|
|
||||||
Diamond Boots=Bottes en diamant
|
Diamond Boots=Bottes en diamant
|
||||||
Diamond Chestplate=Cuirasse en diamant
|
Diamond Chestplate=Cuirasse en diamant
|
||||||
Diamond Helmet=Casque en diamant
|
Diamond Helmet=Casque en diamant
|
||||||
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=Stivali di cristallo
|
||||||
Crystal Chestplate=Corazza di cristallo
|
Crystal Chestplate=Corazza di cristallo
|
||||||
Crystal Helmet=Elmo di cristallo
|
Crystal Helmet=Elmo di cristallo
|
||||||
Crystal Leggings=Gambali di cristallo
|
Crystal Leggings=Gambali di cristallo
|
||||||
Nether Boots=Stivali di nether
|
|
||||||
Nether Chestplate=Corazza di nether
|
|
||||||
Nether Helmet=Elmo di nether
|
|
||||||
Nether Leggings=Gambali di nether
|
|
||||||
Diamond Boots=Stivali di diamante
|
Diamond Boots=Stivali di diamante
|
||||||
Diamond Chestplate=Corazza di diamante
|
Diamond Chestplate=Corazza di diamante
|
||||||
Diamond Helmet=Elmo di diamante
|
Diamond Helmet=Elmo di diamante
|
||||||
|
@ -87,4 +83,3 @@ Diamond Shield=Scudo di diamante
|
||||||
Gold Shield=Scudo d'oro
|
Gold Shield=Scudo d'oro
|
||||||
Mithril Shield=Scudo di mithril
|
Mithril Shield=Scudo di mithril
|
||||||
Crystal Shield=Scudo di cristallo
|
Crystal Shield=Scudo di cristallo
|
||||||
Nether Shield=Scudo di nether
|
|
||||||
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=But Kristal
|
||||||
Crystal Chestplate=Perisai Dada Kristal
|
Crystal Chestplate=Perisai Dada Kristal
|
||||||
Crystal Helmet=Helmet Kristal
|
Crystal Helmet=Helmet Kristal
|
||||||
Crystal Leggings=Perisai Kaki Kristal
|
Crystal Leggings=Perisai Kaki Kristal
|
||||||
Nether Boots=But Nether
|
|
||||||
Nether Chestplate=Perisai Dada Nether
|
|
||||||
Nether Helmet=Helmet Nether
|
|
||||||
Nether Leggings=Perisai Kaki Nether
|
|
||||||
Diamond Boots=But Intan
|
Diamond Boots=But Intan
|
||||||
Diamond Chestplate=Perisai Dada Intan
|
Diamond Chestplate=Perisai Dada Intan
|
||||||
Diamond Helmet=Helmet Intan
|
Diamond Helmet=Helmet Intan
|
||||||
|
@ -87,4 +83,3 @@ Diamond Shield=Perisai Pegang Intan
|
||||||
Gold Shield=Perisai Pegang Emas
|
Gold Shield=Perisai Pegang Emas
|
||||||
Mithril Shield=Perisai Pegang Mithril
|
Mithril Shield=Perisai Pegang Mithril
|
||||||
Crystal Shield=Perisai Pegang Kristal
|
Crystal Shield=Perisai Pegang Kristal
|
||||||
Nether Shield=Perisai Pegang Nether
|
|
||||||
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=Botas de Cristal
|
||||||
Crystal Chestplate=Peitoral de Cristal
|
Crystal Chestplate=Peitoral de Cristal
|
||||||
Crystal Helmet=Capacete de Cristal
|
Crystal Helmet=Capacete de Cristal
|
||||||
Crystal Leggings=Calças de Cristal
|
Crystal Leggings=Calças de Cristal
|
||||||
Nether Boots=Botas de Nether
|
|
||||||
Nether Chestplate=Peitoral de Nether
|
|
||||||
Nether Helmet=Capacete de Nether
|
|
||||||
Nether Leggings=Calças de Nether
|
|
||||||
Diamond Boots=Botas de Diamante
|
Diamond Boots=Botas de Diamante
|
||||||
Diamond Chestplate=Peitoral de Diamante
|
Diamond Chestplate=Peitoral de Diamante
|
||||||
Diamond Helmet=Capacete de Diamante
|
Diamond Helmet=Capacete de Diamante
|
||||||
|
@ -87,4 +83,3 @@ Diamond Shield=Escudo de Diamante
|
||||||
Gold Shield=Escudo de Ouro
|
Gold Shield=Escudo de Ouro
|
||||||
Mithril Shield=Escudo de Mithril
|
Mithril Shield=Escudo de Mithril
|
||||||
Crystal Shield=Escudo de Cristal
|
Crystal Shield=Escudo de Cristal
|
||||||
Nether Shield=Escudo de Nether
|
|
||||||
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=Botas de Cristal
|
||||||
Crystal Chestplate=Peitoral de Cristal
|
Crystal Chestplate=Peitoral de Cristal
|
||||||
Crystal Helmet=Capacete de Cristal
|
Crystal Helmet=Capacete de Cristal
|
||||||
Crystal Leggings=Calças de Cristal
|
Crystal Leggings=Calças de Cristal
|
||||||
Nether Boots=Botas de Nether
|
|
||||||
Nether Chestplate=Peitoral de Nether
|
|
||||||
Nether Helmet=Capacete de Nether
|
|
||||||
Nether Leggings=Calças de Nether
|
|
||||||
Diamond Boots=Botas de Diamante
|
Diamond Boots=Botas de Diamante
|
||||||
Diamond Chestplate=Peitoral de Diamante
|
Diamond Chestplate=Peitoral de Diamante
|
||||||
Diamond Helmet=Capacete de Diamante
|
Diamond Helmet=Capacete de Diamante
|
||||||
|
@ -87,4 +83,3 @@ Diamond Shield=Escudo de Diamante
|
||||||
Gold Shield=Escudo de Ouro
|
Gold Shield=Escudo de Ouro
|
||||||
Mithril Shield=Escudo de Mithril
|
Mithril Shield=Escudo de Mithril
|
||||||
Crystal Shield=Escudo de Cristal
|
Crystal Shield=Escudo de Cristal
|
||||||
Nether Shield=Escudo de Nether
|
|
||||||
|
|
|
@ -25,10 +25,6 @@ Crystal Boots=
|
||||||
Crystal Chestplate=
|
Crystal Chestplate=
|
||||||
Crystal Helmet=
|
Crystal Helmet=
|
||||||
Crystal Leggings=
|
Crystal Leggings=
|
||||||
Nether Boots=
|
|
||||||
Nether Chestplate=
|
|
||||||
Nether Helmet=
|
|
||||||
Nether Leggings=
|
|
||||||
Diamond Boots=
|
Diamond Boots=
|
||||||
Diamond Chestplate=
|
Diamond Chestplate=
|
||||||
Diamond Helmet=
|
Diamond Helmet=
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name = 3d_armor
|
name = 3d_armor
|
||||||
depends = default
|
depends = default
|
||||||
optional_depends = player_monoids, armor_monoid, pova, fire, ethereal, bakedclay, moreores, nether
|
optional_depends = player_monoids, armor_monoid, pova, fire, ethereal, bakedclay, moreores
|
||||||
description = Adds craftable armor that is visible to other players.
|
description = Adds craftable armor that is visible to other players.
|
||||||
|
|
Before Width: | Height: | Size: 324 B |
Before Width: | Height: | Size: 264 B |
Before Width: | Height: | Size: 581 B |
Before Width: | Height: | Size: 384 B |
Before Width: | Height: | Size: 525 B |
Before Width: | Height: | Size: 267 B |
Before Width: | Height: | Size: 322 B |
Before Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 267 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 255 B |
|
@ -38,11 +38,6 @@
|
||||||
3d_armor/textures/3d_armor_leggings_crystal.png:legs
|
3d_armor/textures/3d_armor_leggings_crystal.png:legs
|
||||||
3d_armor/textures/3d_armor_boots_crystal.png:feet
|
3d_armor/textures/3d_armor_boots_crystal.png:feet
|
||||||
|
|
||||||
3d_armor/textures/3d_armor_helmet_nether.png:head
|
|
||||||
3d_armor/textures/3d_armor_chestplate_nether.png:torso
|
|
||||||
3d_armor/textures/3d_armor_leggings_nether.png:legs
|
|
||||||
3d_armor/textures/3d_armor_boots_nether.png:feet
|
|
||||||
|
|
||||||
3d_armor/textures/3d_armor_helmet_admin.png:head
|
3d_armor/textures/3d_armor_helmet_admin.png:head
|
||||||
3d_armor/textures/3d_armor_chestplate_admin.png:torso
|
3d_armor/textures/3d_armor_chestplate_admin.png:torso
|
||||||
3d_armor/textures/3d_armor_leggings_admin.png:legs
|
3d_armor/textures/3d_armor_leggings_admin.png:legs
|
||||||
|
|
|
@ -8,7 +8,6 @@ armor_material_diamond (Enable diamond armor) bool true
|
||||||
armor_material_gold (Enable gold armor) bool true
|
armor_material_gold (Enable gold armor) bool true
|
||||||
armor_material_mithril (Enable mithril armor) bool true
|
armor_material_mithril (Enable mithril armor) bool true
|
||||||
armor_material_crystal (Enable crystal armor) bool true
|
armor_material_crystal (Enable crystal armor) bool true
|
||||||
armor_material_nether (Enable nether armor) bool true
|
|
||||||
|
|
||||||
# Increase this if you get initialization glitches when a player first joins.
|
# Increase this if you get initialization glitches when a player first joins.
|
||||||
armor_init_delay (Initialization delay) int 2
|
armor_init_delay (Initialization delay) int 2
|
||||||
|
|
|
@ -17,7 +17,6 @@ Shields -- Crafting Guide
|
||||||
[shields:shield_gold] X = [default:gold_ingot]
|
[shields:shield_gold] X = [default:gold_ingot]
|
||||||
[shields:shield_mithril] X = [moreores:mithril_ingot]
|
[shields:shield_mithril] X = [moreores:mithril_ingot]
|
||||||
[shields:shield_crystal] X = [ethereal:crystal_ingot]
|
[shields:shield_crystal] X = [ethereal:crystal_ingot]
|
||||||
[shields:shield_nether] X = [ethereal:nether_ingot]
|
|
||||||
|
|
||||||
Enhanced Shields
|
Enhanced Shields
|
||||||
----------------
|
----------------
|
||||||
|
|
|
@ -370,35 +370,6 @@ if armor.materials.crystal then
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
if armor.materials.nether then
|
|
||||||
--- Nether Shield
|
|
||||||
--
|
|
||||||
-- @shield shields:shield_nether
|
|
||||||
-- @img shields_inv_shield_nether.png
|
|
||||||
-- @grp armor_shield 1
|
|
||||||
-- @grp armor_heal 17
|
|
||||||
-- @grp armor_use 200
|
|
||||||
-- @grp armor_fire 1
|
|
||||||
-- @armorgrp fleshy 20
|
|
||||||
-- @damagegrp cracky 3
|
|
||||||
-- @damagegrp snappy 2
|
|
||||||
-- @damagegrp level 3
|
|
||||||
armor:register_armor("shields:shield_nether", {
|
|
||||||
description = S("Nether Shield"),
|
|
||||||
inventory_image = "shields_inv_shield_nether.png",
|
|
||||||
groups = {armor_shield=1, armor_heal=17, armor_use=200, armor_fire=1},
|
|
||||||
armor_groups = {fleshy=20},
|
|
||||||
damage_groups = {cracky=3, snappy=2, level=3},
|
|
||||||
reciprocate_damage = true,
|
|
||||||
on_damage = function(player, index, stack)
|
|
||||||
play_sound_effect(player, "default_glass_footstep")
|
|
||||||
end,
|
|
||||||
on_destroy = function(player, index, stack)
|
|
||||||
play_sound_effect(player, "default_break_glass")
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
for k, v in pairs(armor.materials) do
|
for k, v in pairs(armor.materials) do
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "shields:shield_"..k,
|
output = "shields:shield_"..k,
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
# textdomain: shields
|
|
||||||
|
|
||||||
|
|
||||||
### init.lua ###
|
|
||||||
|
|
||||||
Admin Shield=Adminschild
|
|
||||||
Bronze Shield=Bronzeschild
|
|
||||||
Cactus Shield=Kaktusschild
|
|
||||||
Crystal Shield=Kristallschild
|
|
||||||
Nether Shield=Netherschild
|
|
||||||
Diamond Shield=Diamantschild
|
|
||||||
Enhanced Cactus Shield=verbessert Kaktusschild
|
|
||||||
Enhanced Wood Shield=verbessert Holzschild
|
|
||||||
Gold Shield=Goldschild
|
|
||||||
Mithril Shield=Mithrilschild
|
|
||||||
Steel Shield=Stahlschild
|
|
||||||
Wooden Shield=Holzschild
|
|
|
@ -7,7 +7,6 @@ Admin Shield=Bouclier d'admin
|
||||||
Bronze Shield=Bouclier en bronze
|
Bronze Shield=Bouclier en bronze
|
||||||
Cactus Shield=Bouclier en cactus
|
Cactus Shield=Bouclier en cactus
|
||||||
Crystal Shield=Bouclier en cristal
|
Crystal Shield=Bouclier en cristal
|
||||||
Nether Shield=Bouclier en nether
|
|
||||||
Diamond Shield=Bouclier en diamant
|
Diamond Shield=Bouclier en diamant
|
||||||
Enhanced Cactus Shield=Bouclier en cactus amélioré
|
Enhanced Cactus Shield=Bouclier en cactus amélioré
|
||||||
Enhanced Wood Shield=Bouclier en bois amélioré
|
Enhanced Wood Shield=Bouclier en bois amélioré
|
||||||
|
|
|
@ -7,7 +7,6 @@ Admin Shield=
|
||||||
Bronze Shield=
|
Bronze Shield=
|
||||||
Cactus Shield=
|
Cactus Shield=
|
||||||
Crystal Shield=
|
Crystal Shield=
|
||||||
Nether Shield=
|
|
||||||
Diamond Shield=
|
Diamond Shield=
|
||||||
Enhanced Cactus Shield=
|
Enhanced Cactus Shield=
|
||||||
Enhanced Wood Shield=
|
Enhanced Wood Shield=
|
||||||
|
|
|
@ -8,5 +8,4 @@ shields/textures/shields_shield_gold.png:shield
|
||||||
shields/textures/shields_shield_diamond.png:shield
|
shields/textures/shields_shield_diamond.png:shield
|
||||||
shields/textures/shields_shield_mithril.png:shield
|
shields/textures/shields_shield_mithril.png:shield
|
||||||
shields/textures/shields_shield_crystal.png:shield
|
shields/textures/shields_shield_crystal.png:shield
|
||||||
shields/textures/shields_shield_nether.png:shield
|
|
||||||
shields/textures/shields_shield_admin.png:shield
|
shields/textures/shields_shield_admin.png:shield
|
||||||
|
|
Before Width: | Height: | Size: 468 B |
Before Width: | Height: | Size: 518 B |
Before Width: | Height: | Size: 517 B |
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
tempdir=/tmp/mt
|
|
||||||
confpath=$tempdir/minetest.conf
|
|
||||||
worldpath=$tempdir/world
|
|
||||||
|
|
||||||
use_docker=y
|
|
||||||
[ -x ../../bin/minetestserver ] && use_docker=
|
|
||||||
|
|
||||||
rm -rf $tempdir
|
|
||||||
mkdir -p $worldpath
|
|
||||||
# the docker image doesn't have devtest
|
|
||||||
[ -n "$use_docker" ] || printf '%s\n' gameid=devtest >$worldpath/world.mt
|
|
||||||
printf '%s\n' mg_name=singlenode '[end_of_params]' >$worldpath/map_meta.txt
|
|
||||||
printf '%s\n' worldedit_run_tests=true max_forceloaded_blocks=9999 >$confpath
|
|
||||||
|
|
||||||
if [ -n "$use_docker" ]; then
|
|
||||||
chmod -R 777 $tempdir
|
|
||||||
docker run --rm -i \
|
|
||||||
-v $confpath:/etc/minetest/minetest.conf \
|
|
||||||
-v $tempdir:/var/lib/minetest/.minetest \
|
|
||||||
-v "$PWD/worldedit":/var/lib/minetest/.minetest/world/worldmods/worldedit \
|
|
||||||
registry.gitlab.com/minetest/minetest/server:${MINETEST_VER}
|
|
||||||
else
|
|
||||||
mkdir $worldpath/worldmods
|
|
||||||
ln -s "$PWD/worldedit" $worldpath/worldmods/worldedit
|
|
||||||
../../bin/minetestserver --config $confpath --world $worldpath --logfile /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
test -f $worldpath/tests_ok || exit 1
|
|
||||||
exit 0
|
|
|
@ -23,7 +23,7 @@ There is a nice installation guide over at the [Minetest Wiki](http://wiki.minet
|
||||||
8. You should have a mod selection screen. Select the one named something like `Minetest-WorldEdit` by left clicking once and press the **Enable Modpack** button.
|
8. You should have a mod selection screen. Select the one named something like `Minetest-WorldEdit` by left clicking once and press the **Enable Modpack** button.
|
||||||
9. Press the **Save** button. You can now use WorldEdit in that world. Repeat steps 7 to 9 to enable WorldEdit for other worlds too.
|
9. Press the **Save** button. You can now use WorldEdit in that world. Repeat steps 7 to 9 to enable WorldEdit for other worlds too.
|
||||||
|
|
||||||
If you are having trouble, try asking for help in the [IRC channel](https://web.libera.chat/#minetest) (faster but may not always have helpers online)
|
If you are having trouble, try asking for help in the [IRC channel](https://webchat.freenode.net/?channels=#minetest) (faster but may not always have helpers online)
|
||||||
or ask on the [forum topic](https://forum.minetest.net/viewtopic.php?id=572) (slower but more likely to get help).
|
or ask on the [forum topic](https://forum.minetest.net/viewtopic.php?id=572) (slower but more likely to get help).
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
|
|
|
@ -38,7 +38,3 @@ if minetest.settings:get_bool("log_mods") then
|
||||||
print("[WorldEdit] Loaded!")
|
print("[WorldEdit] Loaded!")
|
||||||
end
|
end
|
||||||
|
|
||||||
if minetest.settings:get_bool("worldedit_run_tests") then
|
|
||||||
dofile(path .. "/test.lua")
|
|
||||||
minetest.after(0, worldedit.run_tests)
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,448 +0,0 @@
|
||||||
---------------------
|
|
||||||
-- Helpers
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
local vec = vector.new
|
|
||||||
local vecw = function(axis, n, base)
|
|
||||||
local ret = vec(base)
|
|
||||||
ret[axis] = n
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
local pos2str = minetest.pos_to_string
|
|
||||||
local get_node = minetest.get_node
|
|
||||||
local set_node = minetest.set_node
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
-- Nodes
|
|
||||||
---------------------
|
|
||||||
local air = "air"
|
|
||||||
local testnode1
|
|
||||||
local testnode2
|
|
||||||
local testnode3
|
|
||||||
-- Loads nodenames to use for tests
|
|
||||||
local function init_nodes()
|
|
||||||
testnode1 = minetest.registered_aliases["mapgen_stone"]
|
|
||||||
testnode2 = minetest.registered_aliases["mapgen_dirt"]
|
|
||||||
testnode3 = minetest.registered_aliases["mapgen_cobble"] or minetest.registered_aliases["mapgen_dirt_with_grass"]
|
|
||||||
assert(testnode1 and testnode2 and testnode3)
|
|
||||||
end
|
|
||||||
-- Writes repeating pattern into given area
|
|
||||||
local function place_pattern(pos1, pos2, pattern)
|
|
||||||
local pos = vec()
|
|
||||||
local node = {name=""}
|
|
||||||
local i = 1
|
|
||||||
for z = pos1.z, pos2.z do
|
|
||||||
pos.z = z
|
|
||||||
for y = pos1.y, pos2.y do
|
|
||||||
pos.y = y
|
|
||||||
for x = pos1.x, pos2.x do
|
|
||||||
pos.x = x
|
|
||||||
node.name = pattern[i]
|
|
||||||
set_node(pos, node)
|
|
||||||
i = i % #pattern + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
-- Area management
|
|
||||||
---------------------
|
|
||||||
assert(minetest.get_mapgen_setting("mg_name") == "singlenode")
|
|
||||||
local area = {}
|
|
||||||
do
|
|
||||||
local areamin, areamax
|
|
||||||
local off
|
|
||||||
local c_air = minetest.get_content_id(air)
|
|
||||||
local vbuffer = {}
|
|
||||||
-- Assign a new area for use, will emerge and then call ready()
|
|
||||||
area.assign = function(min, max, ready)
|
|
||||||
areamin = min
|
|
||||||
areamax = max
|
|
||||||
minetest.emerge_area(min, max, function(bpos, action, remaining)
|
|
||||||
assert(action ~= minetest.EMERGE_ERRORED)
|
|
||||||
if remaining > 0 then return end
|
|
||||||
minetest.after(0, function()
|
|
||||||
area.clear()
|
|
||||||
ready()
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
-- Reset area contents and state
|
|
||||||
area.clear = function()
|
|
||||||
local vmanip = minetest.get_voxel_manip(areamin, areamax)
|
|
||||||
local vpos1, vpos2 = vmanip:get_emerged_area()
|
|
||||||
local vcount = (vpos2.x - vpos1.x + 1) * (vpos2.y - vpos1.y + 1) * (vpos2.z - vpos1.z + 1)
|
|
||||||
if #vbuffer ~= vcount then
|
|
||||||
vbuffer = {}
|
|
||||||
for i = 1, vcount do
|
|
||||||
vbuffer[i] = c_air
|
|
||||||
end
|
|
||||||
end
|
|
||||||
vmanip:set_data(vbuffer)
|
|
||||||
vmanip:write_to_map()
|
|
||||||
off = vec(0, 0, 0)
|
|
||||||
end
|
|
||||||
-- Returns an usable area [pos1, pos2] that does not overlap previous ones
|
|
||||||
area.get = function(sizex, sizey, sizez)
|
|
||||||
local size
|
|
||||||
if sizey == nil or sizez == nil then
|
|
||||||
size = {x=sizex, y=sizex, z=sizex}
|
|
||||||
else
|
|
||||||
size = {x=sizex, y=sizey, z=sizez}
|
|
||||||
end
|
|
||||||
local pos1 = vector.add(areamin, off)
|
|
||||||
local pos2 = vector.subtract(vector.add(pos1, size), 1)
|
|
||||||
if pos2.x > areamax.x or pos2.y > areamax.y or pos2.z > areamax.z then
|
|
||||||
error("Internal failure: out of space")
|
|
||||||
end
|
|
||||||
off = vector.add(off, size)
|
|
||||||
return pos1, pos2
|
|
||||||
end
|
|
||||||
-- Returns an axis and count (= n) relative to the last-requested area that is unoccupied
|
|
||||||
area.dir = function(n)
|
|
||||||
local pos1 = vector.add(areamin, off)
|
|
||||||
if pos1.x + n <= areamax.x then
|
|
||||||
off.x = off.x + n
|
|
||||||
return "x", n
|
|
||||||
elseif pos1.x + n <= areamax.y then
|
|
||||||
off.y = off.y + n
|
|
||||||
return "y", n
|
|
||||||
elseif pos1.z + n <= areamax.z then
|
|
||||||
off.z = off.z + n
|
|
||||||
return "z", n
|
|
||||||
end
|
|
||||||
error("Internal failure: out of space")
|
|
||||||
end
|
|
||||||
-- Returns [XYZ] margin (list of pos pairs) of n around last-requested area
|
|
||||||
-- (may actually be larger but doesn't matter)
|
|
||||||
area.margin = function(n)
|
|
||||||
local pos1, pos2 = area.get(n)
|
|
||||||
return {
|
|
||||||
{ vec(areamin.x, areamin.y, pos1.z), pos2 }, -- X/Y
|
|
||||||
{ vec(areamin.x, pos1.y, areamin.z), pos2 }, -- X/Z
|
|
||||||
{ vec(pos1.x, areamin.y, areamin.z), pos2 }, -- Y/Z
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Split an existing area into two non-overlapping [pos1, half1], [half2, pos2] parts; returns half1, half2
|
|
||||||
area.split = function(pos1, pos2)
|
|
||||||
local axis
|
|
||||||
if pos2.x - pos1.x >= 1 then
|
|
||||||
axis = "x"
|
|
||||||
elseif pos2.y - pos1.y >= 1 then
|
|
||||||
axis = "y"
|
|
||||||
elseif pos2.z - pos1.z >= 1 then
|
|
||||||
axis = "z"
|
|
||||||
else
|
|
||||||
error("Internal failure: area too small to split")
|
|
||||||
end
|
|
||||||
local hspan = math.floor((pos2[axis] - pos1[axis] + 1) / 2)
|
|
||||||
local half1 = vecw(axis, pos1[axis] + hspan - 1, pos2)
|
|
||||||
local half2 = vecw(axis, pos1[axis] + hspan, pos2)
|
|
||||||
return half1, half2
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
-- Checks
|
|
||||||
---------------------
|
|
||||||
local check = {}
|
|
||||||
-- Check that all nodes in [pos1, pos2] are the node(s) specified
|
|
||||||
check.filled = function(pos1, pos2, nodes)
|
|
||||||
if type(nodes) == "string" then
|
|
||||||
nodes = { nodes }
|
|
||||||
end
|
|
||||||
local _, counts = minetest.find_nodes_in_area(pos1, pos2, nodes)
|
|
||||||
local total = worldedit.volume(pos1, pos2)
|
|
||||||
local sum = 0
|
|
||||||
for _, n in pairs(counts) do
|
|
||||||
sum = sum + n
|
|
||||||
end
|
|
||||||
if sum ~= total then
|
|
||||||
error((total - sum) .. " " .. table.concat(nodes, ",") .. " nodes missing in " ..
|
|
||||||
pos2str(pos1) .. " -> " .. pos2str(pos2))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Check that none of the nodes in [pos1, pos2] are the node(s) specified
|
|
||||||
check.not_filled = function(pos1, pos2, nodes)
|
|
||||||
if type(nodes) == "string" then
|
|
||||||
nodes = { nodes }
|
|
||||||
end
|
|
||||||
local _, counts = minetest.find_nodes_in_area(pos1, pos2, nodes)
|
|
||||||
for nodename, n in pairs(counts) do
|
|
||||||
if n ~= 0 then
|
|
||||||
error(counts[nodename] .. " " .. nodename .. " nodes found in " ..
|
|
||||||
pos2str(pos1) .. " -> " .. pos2str(pos2))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Check that all of the areas are only made of node(s) specified
|
|
||||||
check.filled2 = function(list, nodes)
|
|
||||||
for _, pos in ipairs(list) do
|
|
||||||
check.filled(pos[1], pos[2], nodes)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Check that none of the areas contain the node(s) specified
|
|
||||||
check.not_filled2 = function(list, nodes)
|
|
||||||
for _, pos in ipairs(list) do
|
|
||||||
check.not_filled(pos[1], pos[2], nodes)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- Checks presence of a repeating pattern in [pos1, po2] (cf. place_pattern)
|
|
||||||
check.pattern = function(pos1, pos2, pattern)
|
|
||||||
local pos = vec()
|
|
||||||
local i = 1
|
|
||||||
for z = pos1.z, pos2.z do
|
|
||||||
pos.z = z
|
|
||||||
for y = pos1.y, pos2.y do
|
|
||||||
pos.y = y
|
|
||||||
for x = pos1.x, pos2.x do
|
|
||||||
pos.x = x
|
|
||||||
local node = get_node(pos)
|
|
||||||
if node.name ~= pattern[i] then
|
|
||||||
error(pattern[i] .. " not found at " .. pos2str(pos) .. " (i=" .. i .. ")")
|
|
||||||
end
|
|
||||||
i = i % #pattern + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
-- The actual tests
|
|
||||||
---------------------
|
|
||||||
local tests = {}
|
|
||||||
local function register_test(name, func, opts)
|
|
||||||
assert(type(name) == "string")
|
|
||||||
assert(func == nil or type(func) == "function")
|
|
||||||
if not opts then
|
|
||||||
opts = {}
|
|
||||||
else
|
|
||||||
opts = table.copy(opts)
|
|
||||||
end
|
|
||||||
opts.name = name
|
|
||||||
opts.func = func
|
|
||||||
table.insert(tests, opts)
|
|
||||||
end
|
|
||||||
-- How this works:
|
|
||||||
-- register_test registers a test with a name and function
|
|
||||||
-- The function should return if the test passes or otherwise cause a Lua error
|
|
||||||
-- The basic structure is: get areas + do operations + check results
|
|
||||||
-- Helpers:
|
|
||||||
-- area.get must be used to retrieve areas that can be operated on (these will be cleared before each test)
|
|
||||||
-- check.filled / check.not_filled can be used to check the result
|
|
||||||
-- area.margin + check.filled2 is useful to make sure nodes weren't placed too far
|
|
||||||
-- place_pattern + check.pattern is useful to test ops that operate on existing data
|
|
||||||
|
|
||||||
|
|
||||||
register_test("Internal self-test")
|
|
||||||
register_test("is area loaded?", function()
|
|
||||||
local pos1, _ = area.get(1)
|
|
||||||
assert(get_node(pos1).name == "air")
|
|
||||||
end, {dry=true})
|
|
||||||
|
|
||||||
register_test("area.split", function()
|
|
||||||
for i = 2, 6 do
|
|
||||||
local pos1, pos2 = area.get(1, 1, i)
|
|
||||||
local half1, half2 = area.split(pos1, pos2)
|
|
||||||
assert(pos1.x == half1.x and pos1.y == half1.y)
|
|
||||||
assert(half1.x == half2.x and half1.y == half2.y)
|
|
||||||
assert(half1.z + 1 == half2.z)
|
|
||||||
if i % 2 == 0 then
|
|
||||||
assert((half1.z - pos1.z) == (pos2.z - half2.z)) -- divided equally
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end, {dry=true})
|
|
||||||
|
|
||||||
register_test("check.filled", function()
|
|
||||||
local pos1, pos2 = area.get(1, 2, 1)
|
|
||||||
set_node(pos1, {name=testnode1})
|
|
||||||
set_node(pos2, {name=testnode2})
|
|
||||||
check.filled(pos1, pos1, testnode1)
|
|
||||||
check.filled(pos1, pos2, {testnode1, testnode2})
|
|
||||||
check.not_filled(pos1, pos1, air)
|
|
||||||
check.not_filled(pos1, pos2, {air, testnode3})
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("pattern", function()
|
|
||||||
local pos1, pos2 = area.get(3, 2, 1)
|
|
||||||
local pattern = {testnode1, testnode3}
|
|
||||||
place_pattern(pos1, pos2, pattern)
|
|
||||||
assert(get_node(pos1).name == testnode1)
|
|
||||||
check.pattern(pos1, pos2, pattern)
|
|
||||||
end)
|
|
||||||
|
|
||||||
|
|
||||||
register_test("Generic node manipulations")
|
|
||||||
register_test("worldedit.set", function()
|
|
||||||
local pos1, pos2 = area.get(10)
|
|
||||||
local m = area.margin(1)
|
|
||||||
|
|
||||||
worldedit.set(pos1, pos2, testnode1)
|
|
||||||
|
|
||||||
check.filled(pos1, pos2, testnode1)
|
|
||||||
check.filled2(m, air)
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("worldedit.set mix", function()
|
|
||||||
local pos1, pos2 = area.get(10)
|
|
||||||
local m = area.margin(1)
|
|
||||||
|
|
||||||
worldedit.set(pos1, pos2, {testnode1, testnode2})
|
|
||||||
|
|
||||||
check.filled(pos1, pos2, {testnode1, testnode2})
|
|
||||||
check.filled2(m, air)
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("worldedit.replace", function()
|
|
||||||
local pos1, pos2 = area.get(10)
|
|
||||||
local half1, half2 = area.split(pos1, pos2)
|
|
||||||
|
|
||||||
worldedit.set(pos1, half1, testnode1)
|
|
||||||
worldedit.set(half2, pos2, testnode2)
|
|
||||||
worldedit.replace(pos1, pos2, testnode1, testnode3)
|
|
||||||
|
|
||||||
check.not_filled(pos1, pos2, testnode1)
|
|
||||||
check.filled(pos1, half1, testnode3)
|
|
||||||
check.filled(half2, pos2, testnode2)
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("worldedit.replace inverse", function()
|
|
||||||
local pos1, pos2 = area.get(10)
|
|
||||||
local half1, half2 = area.split(pos1, pos2)
|
|
||||||
|
|
||||||
worldedit.set(pos1, half1, testnode1)
|
|
||||||
worldedit.set(half2, pos2, testnode2)
|
|
||||||
worldedit.replace(pos1, pos2, testnode1, testnode3, true)
|
|
||||||
|
|
||||||
check.filled(pos1, half1, testnode1)
|
|
||||||
check.filled(half2, pos2, testnode3)
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- FIXME?: this one looks overcomplicated
|
|
||||||
register_test("worldedit.copy", function()
|
|
||||||
local pos1, pos2 = area.get(4)
|
|
||||||
local axis, n = area.dir(2)
|
|
||||||
local m = area.margin(1)
|
|
||||||
local b = pos1[axis]
|
|
||||||
|
|
||||||
-- create one slice with testnode1, one with testnode2
|
|
||||||
worldedit.set(pos1, vecw(axis, b + 1, pos2), testnode1)
|
|
||||||
worldedit.set(vecw(axis, b + 2, pos1), pos2, testnode2)
|
|
||||||
worldedit.copy(pos1, pos2, axis, n)
|
|
||||||
|
|
||||||
-- should have three slices now
|
|
||||||
check.filled(pos1, vecw(axis, b + 1, pos2), testnode1)
|
|
||||||
check.filled(vecw(axis, b + 2, pos1), pos2, testnode1)
|
|
||||||
check.filled(vecw(axis, b + 4, pos1), vector.add(pos2, vecw(axis, n)), testnode2)
|
|
||||||
check.filled2(m, "air")
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("worldedit.copy2", function()
|
|
||||||
local pos1, pos2 = area.get(6)
|
|
||||||
local m1 = area.margin(1)
|
|
||||||
local pos1_, pos2_ = area.get(6)
|
|
||||||
local m2 = area.margin(1)
|
|
||||||
|
|
||||||
local pattern = {testnode1, testnode2, testnode3, testnode1, testnode2}
|
|
||||||
place_pattern(pos1, pos2, pattern)
|
|
||||||
worldedit.copy2(pos1, pos2, vector.subtract(pos1_, pos1))
|
|
||||||
|
|
||||||
check.pattern(pos1, pos2, pattern)
|
|
||||||
check.pattern(pos1_, pos2_, pattern)
|
|
||||||
check.filled2(m1, "air")
|
|
||||||
check.filled2(m2, "air")
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("worldedit.move (overlap)", function()
|
|
||||||
local pos1, pos2 = area.get(7)
|
|
||||||
local axis, n = area.dir(2)
|
|
||||||
local m = area.margin(1)
|
|
||||||
|
|
||||||
local pattern = {testnode2, testnode1, testnode2, testnode3, testnode3}
|
|
||||||
place_pattern(pos1, pos2, pattern)
|
|
||||||
worldedit.move(pos1, pos2, axis, n)
|
|
||||||
|
|
||||||
check.filled(pos1, vecw(axis, pos1[axis] + n - 1, pos2), "air")
|
|
||||||
check.pattern(vecw(axis, pos1[axis] + n, pos1), vecw(axis, pos2[axis] + n, pos2), pattern)
|
|
||||||
check.filled2(m, "air")
|
|
||||||
end)
|
|
||||||
|
|
||||||
register_test("worldedit.move", function()
|
|
||||||
local pos1, pos2 = area.get(10)
|
|
||||||
local axis, n = area.dir(10)
|
|
||||||
local m = area.margin(1)
|
|
||||||
|
|
||||||
local pattern = {testnode1, testnode3, testnode3, testnode2}
|
|
||||||
place_pattern(pos1, pos2, pattern)
|
|
||||||
worldedit.move(pos1, pos2, axis, n)
|
|
||||||
|
|
||||||
check.filled(pos1, pos2, "air")
|
|
||||||
check.pattern(vecw(axis, pos1[axis] + n, pos1), vecw(axis, pos2[axis] + n, pos2), pattern)
|
|
||||||
check.filled2(m, "air")
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- TODO: the rest (also testing param2 + metadata)
|
|
||||||
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
-- Main function
|
|
||||||
---------------------
|
|
||||||
worldedit.run_tests = function()
|
|
||||||
do
|
|
||||||
local v = minetest.get_version()
|
|
||||||
print("Running " .. #tests .. " tests for WorldEdit " ..
|
|
||||||
worldedit.version_string .. " on " .. v.project .. " " .. (v.hash or v.string))
|
|
||||||
end
|
|
||||||
|
|
||||||
init_nodes()
|
|
||||||
|
|
||||||
-- emerge area from (0,0,0) ~ (56,56,56) and keep it loaded
|
|
||||||
-- Note: making this area smaller speeds up tests
|
|
||||||
local wanted = vec(56, 56, 56)
|
|
||||||
for x = 0, math.floor(wanted.x/16) do
|
|
||||||
for y = 0, math.floor(wanted.y/16) do
|
|
||||||
for z = 0, math.floor(wanted.z/16) do
|
|
||||||
assert(minetest.forceload_block({x=x*16, y=y*16, z=z*16}, true))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
area.assign(vec(0, 0, 0), wanted, function()
|
|
||||||
|
|
||||||
local failed = 0
|
|
||||||
for _, test in ipairs(tests) do
|
|
||||||
if not test.func then
|
|
||||||
local s = "---- " .. test.name .. " "
|
|
||||||
print(s .. string.rep("-", 60 - #s))
|
|
||||||
else
|
|
||||||
if not test.dry then
|
|
||||||
area.clear()
|
|
||||||
end
|
|
||||||
local ok, err = pcall(test.func)
|
|
||||||
print(string.format("%-60s %s", test.name, ok and "pass" or "FAIL"))
|
|
||||||
if not ok then
|
|
||||||
print(" " .. err)
|
|
||||||
failed = failed + 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
print("Done, " .. failed .. " tests failed.")
|
|
||||||
if failed == 0 then
|
|
||||||
io.close(io.open(minetest.get_worldpath() .. "/tests_ok", "w"))
|
|
||||||
end
|
|
||||||
minetest.request_shutdown()
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- for debug purposes
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
|
||||||
minetest.set_player_privs(player:get_player_name(),
|
|
||||||
minetest.string_to_privs("fly,fast,noclip,basic_debug,debug,interact"))
|
|
||||||
end)
|
|
||||||
minetest.register_on_punchnode(function(pos, node, puncher)
|
|
||||||
minetest.chat_send_player(puncher:get_player_name(), pos2str(pos))
|
|
||||||
end)
|
|
|
@ -216,7 +216,7 @@ elseif minetest.global_exists("sfinv") then -- sfinv installed
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return minetest.log("error",
|
error(
|
||||||
"worldedit_gui requires a supported gui management mod to be installed.\n"..
|
"worldedit_gui requires a supported gui management mod to be installed.\n"..
|
||||||
"To use the it you need to either:\n"..
|
"To use the it you need to either:\n"..
|
||||||
"* use minetest_game or another sfinv-compatible subgame\n"..
|
"* use minetest_game or another sfinv-compatible subgame\n"..
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
image: debian/stable
|
|
||||||
packages:
|
|
||||||
- git
|
|
||||||
- curl
|
|
||||||
- minetest-server
|
|
||||||
- unzip
|
|
||||||
- wget
|
|
||||||
- lua-busted
|
|
||||||
sources :
|
|
||||||
- https://git.sr.ht/~gpcf/advtrains
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- download_mt_server: |
|
|
||||||
mkdir bin
|
|
||||||
wget https://lifomaps.de/advtrains-test/builtin.tar.gz
|
|
||||||
tar xf builtin.tar.gz
|
|
||||||
curl https://lifomaps.de/advtrains-test/minetestserver -o ~/bin/minetestserver
|
|
||||||
chmod +x ~/bin/minetestserver
|
|
||||||
- install_mt_game : |
|
|
||||||
curl -L https://github.com/minetest/minetest_game/archive/master.zip -o master.zip
|
|
||||||
mkdir -p .minetest/games/
|
|
||||||
cd .minetest/games
|
|
||||||
unzip ../../master.zip
|
|
||||||
mv minetest_game-master minetest_game
|
|
||||||
- install_test_world: |
|
|
||||||
mkdir -p .minetest/worlds/
|
|
||||||
curl https://lifomaps.de/advtrains-test/testworld.tar.gz -o ~/testworld.tar.gz
|
|
||||||
cd .minetest/worlds/
|
|
||||||
tar xf ../../testworld.tar.gz
|
|
||||||
- run_unit_tests : |
|
|
||||||
cd advtrains/advtrains
|
|
||||||
busted
|
|
||||||
cd ../advtrains_interlocking
|
|
||||||
busted
|
|
||||||
cd ../serialize_lib
|
|
||||||
busted
|
|
||||||
- activate_test_env: |
|
|
||||||
cd advtrains
|
|
||||||
git merge --no-commit origin/luaatcdebug
|
|
||||||
- install_advtrains : |
|
|
||||||
mkdir .minetest/mods
|
|
||||||
cp -r advtrains .minetest/mods
|
|
||||||
cd .minetest/mods
|
|
||||||
git clone https://git.bananach.space/basic_trains.git/
|
|
||||||
- run_test_world: |
|
|
||||||
echo "bind_address = 127.0.0.1" > minetest.conf
|
|
||||||
~/bin/minetestserver --port 31111 --gameid minetest_game --config ~/minetest.conf --world ~/.minetest/worlds/advtrains_testworld
|
|
|
@ -1,5 +0,0 @@
|
||||||
((nil (tab-width . 8))
|
|
||||||
(lua-mode (indent-tabs-mode . t)
|
|
||||||
(lua-indent-level . 8)
|
|
||||||
(lua-indent-close-paren-align . nil)
|
|
||||||
(lua-indent-nested-block-content-align . nil)))
|
|
|
@ -1,107 +0,0 @@
|
||||||
|
|
||||||
# ADVTRAINS – realistic trains in Minetest!
|
|
||||||
by orwell96 and contributors (see below)
|
|
||||||
|
|
||||||
[![builds.sr.ht status](https://builds.sr.ht/~gpcf/advtrains/commits/.build.yml.svg)](https://builds.sr.ht/~gpcf/advtrains/commits/.build.yml?)
|
|
||||||
|
|
||||||
For up-to-date information, visit <https://advtrains.de/>
|
|
||||||
|
|
||||||
License of code: GNU AGPL version 3
|
|
||||||
License of media: CC-BY-SA 3.0
|
|
||||||
|
|
||||||
(up to commit 1bb1d8 (2020-02-14), the license has been LGPL 2.1)
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
To use advtrains, you need to install a mod providing trains. *Note
|
|
||||||
that advtrains no longer comes bundled with any trains out of the
|
|
||||||
box*. Some selected train mods by the authors of advtrains are:
|
|
||||||
|
|
||||||
* [Basic trains](https://git.bananach.space/basic_trains.git/) by
|
|
||||||
orwell96, mbblp et al. The classic selection of trains for
|
|
||||||
advtrains, formerly included in the mod.
|
|
||||||
* [Moretrains](https://git.bananach.space/moretrains.git) by rbduck,
|
|
||||||
with improvements by gpcf and Marnack.
|
|
||||||
* [dlxtrains](https://github.com/Marnack/dlxtrains_modpack) by Marnack
|
|
||||||
|
|
||||||
|
|
||||||
Further information is available on the [wiki](https://advtrains.de/wiki/).
|
|
||||||
|
|
||||||
|
|
||||||
## How to contribute
|
|
||||||
|
|
||||||
* [Bug tracker](https://bugs.linux-forks.de/advtrains)
|
|
||||||
* [Discussion and Support mailing list][srht-discuss]
|
|
||||||
* Send patches via [git-send-email][gsm] to the [dev mailing
|
|
||||||
list][srht-devel]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[srht-discuss]: https://lists.sr.ht/~gpcf/advtrains-discuss
|
|
||||||
[srht-devel]: https://lists.sr.ht/~gpcf/advtrains-devel
|
|
||||||
[gsm]: https://git-send-email.io/
|
|
||||||
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
### Coding
|
|
||||||
|
|
||||||
Various features and bugfixes have been contributed by:
|
|
||||||
|
|
||||||
- gpcf
|
|
||||||
- Blockhead
|
|
||||||
- ywang
|
|
||||||
|
|
||||||
Small code contributions:
|
|
||||||
|
|
||||||
- hlqkj
|
|
||||||
- Maverick2797
|
|
||||||
- AntumDeluge
|
|
||||||
- lemon-melon
|
|
||||||
- mbblp
|
|
||||||
- Andrey K
|
|
||||||
- Hume2
|
|
||||||
- Linus Jahn
|
|
||||||
- Pedro Gimeno
|
|
||||||
- Relatio
|
|
||||||
- Thomas Rudin
|
|
||||||
- h-v-smacker
|
|
||||||
- imcasper
|
|
||||||
- rubenwardy
|
|
||||||
- techniX
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Assets:
|
|
||||||
|
|
||||||
* Gravel Texture : from Minetest Game
|
|
||||||
* Initial rail model/texture : DS-minetest
|
|
||||||
* Models for signals/bumpers : mbb
|
|
||||||
* Steam engine / wagon texture: mbb
|
|
||||||
* Detailed Steam engine : mbb / Krokoschlange(animation)
|
|
||||||
* Industrial engine/wagons : mbb
|
|
||||||
* Inventory images : mbb
|
|
||||||
* Node texture for LuaATC controller: Jeija (from Mesecons)
|
|
||||||
* Mod Description : hajo
|
|
||||||
|
|
||||||
#### Sounds:
|
|
||||||
|
|
||||||
* advtrains\_crossing\_bell : Codesound
|
|
||||||
* advtrains\_japan\_horn : Codesound
|
|
||||||
* advtrains\_steam\_whistle : googol
|
|
||||||
* advtrains\_subway\_horn : https://freesound.org/people/Mullumbimby/sounds/385283/
|
|
||||||
* advtrains\_subway\_\* : Gabriel (gbl08ma)
|
|
||||||
* 45 degree platforms design : Och_Noe
|
|
||||||
|
|
||||||
### Testers:
|
|
||||||
|
|
||||||
* gpcf (Linuxforks server)
|
|
||||||
* imcasper (tss Branch)
|
|
||||||
* Cato (C&C Servers)
|
|
||||||
|
|
||||||
|
|
||||||
If I forgot someone please punish me for that. Also see the Git commit
|
|
||||||
log.
|
|
||||||
|
|
||||||
You can see this mod in action on various minetest servers, including
|
|
||||||
the Linuxforks minetest server.
|
|
|
@ -75,13 +75,6 @@ advtrains.register_wagon(name, prototype, description, inventory_image)
|
||||||
^- Getting on by walking in then takes effect.
|
^- Getting on by walking in then takes effect.
|
||||||
^- Positive values mean front, negative ones back. Resulting position is automatically shifted to the right side.
|
^- Positive values mean front, negative ones back. Resulting position is automatically shifted to the right side.
|
||||||
|
|
||||||
coupler_types_front = {scharfenberg=true},
|
|
||||||
coupler_types_back = {chain=true},
|
|
||||||
^- Defines the available coupler types on this wagon on the front and back side. Wagon will only couple to wagons that have a matching coupler. (this property does not have any visual impact)
|
|
||||||
^- Default: not given (nil) - causes the wagon to couple to any other wagon regardless of coupler type.
|
|
||||||
^- Empty table ({}): This wagon does not couple to any other wagon (e.g. for Linetrack vehicles)
|
|
||||||
^- Register coupler types using ''advtrains.register_coupler_type(type, name)''. advtrains defines the default types "chain" (Buffer and Chain) and "scharfenberg" (Scharfenberg coupler).
|
|
||||||
|
|
||||||
wagon_span=2,
|
wagon_span=2,
|
||||||
^- How far this wagon extends from its base position. Is the half of the wagon length.
|
^- How far this wagon extends from its base position. Is the half of the wagon length.
|
||||||
^- Used to determine in which distance the other wagons have to be positioned. Will require tweaking.
|
^- Used to determine in which distance the other wagons have to be positioned. Will require tweaking.
|
||||||
|
|
|
@ -93,7 +93,6 @@ function atc.train_reset_command(train, keep_tarvel)
|
||||||
train.atc_delay=nil
|
train.atc_delay=nil
|
||||||
train.atc_brake_target=nil
|
train.atc_brake_target=nil
|
||||||
train.atc_wait_finish=nil
|
train.atc_wait_finish=nil
|
||||||
train.atc_wait_autocouple=nil
|
|
||||||
train.atc_arrow=nil
|
train.atc_arrow=nil
|
||||||
if not keep_tarvel then
|
if not keep_tarvel then
|
||||||
train.tarvelocity=nil
|
train.tarvelocity=nil
|
||||||
|
@ -200,16 +199,10 @@ local matchptn={
|
||||||
return #match+1
|
return #match+1
|
||||||
end,
|
end,
|
||||||
["B([0-9]+)"]=function(id, train, match)
|
["B([0-9]+)"]=function(id, train, match)
|
||||||
local btar = tonumber(match)
|
if train.velocity>tonumber(match) then
|
||||||
if train.velocity>btar then
|
train.atc_brake_target=tonumber(match)
|
||||||
train.atc_brake_target=btar
|
if not train.tarvelocity or train.tarvelocity>train.atc_brake_target then
|
||||||
if not train.tarvelocity or train.tarvelocity>btar then
|
train.tarvelocity=train.atc_brake_target
|
||||||
train.tarvelocity=btar
|
|
||||||
end
|
|
||||||
else
|
|
||||||
-- independent of brake target, must make sure that tarvelocity is not greater than it
|
|
||||||
if train.tarvelocity and train.tarvelocity>btar then
|
|
||||||
train.tarvelocity=btar
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return #match+1
|
return #match+1
|
||||||
|
@ -274,10 +267,6 @@ local matchptn={
|
||||||
advtrains.interlocking.ars_set_disable(train, match=="0")
|
advtrains.interlocking.ars_set_disable(train, match=="0")
|
||||||
return 2
|
return 2
|
||||||
end,
|
end,
|
||||||
["Cpl"]=function(id, train)
|
|
||||||
train.atc_wait_autocouple=true
|
|
||||||
return 3
|
|
||||||
end,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
eval_conditional = function(command, arrow, speed)
|
eval_conditional = function(command, arrow, speed)
|
||||||
|
@ -369,13 +358,11 @@ function atc.execute_atc_command(id, train)
|
||||||
local match=string.match(command, "^"..pattern)
|
local match=string.match(command, "^"..pattern)
|
||||||
if match then
|
if match then
|
||||||
local patlen=func(id, train, match)
|
local patlen=func(id, train, match)
|
||||||
--atdebug("Executing: "..string.sub(command, 1, patlen))
|
|
||||||
--atdebug("Train ATC State: tvel=",train.tarvelocity,"brktar=",train.atc_brake_target,"delay=",train.atc_delay,"wfinish=",train.atc_wait_finish,"wacpl=",train.atc_wait_autocouple)
|
atprint("Executing: "..string.sub(command, 1, patlen))
|
||||||
|
|
||||||
train.atc_command=string.sub(command, patlen+1)
|
train.atc_command=string.sub(command, patlen+1)
|
||||||
if train.atc_delay<=0
|
if train.atc_delay<=0 and not train.atc_wait_finish then
|
||||||
and not train.atc_wait_finish
|
|
||||||
and not train.atc_wait_autocouple then
|
|
||||||
--continue (recursive, cmds shouldn't get too long, and it's a end-recursion.)
|
--continue (recursive, cmds shouldn't get too long, and it's a end-recursion.)
|
||||||
atc.execute_atc_command(id, train)
|
atc.execute_atc_command(id, train)
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,24 +11,17 @@
|
||||||
-- When the initiating train has autocouple set, trains are immediately coupled
|
-- When the initiating train has autocouple set, trains are immediately coupled
|
||||||
-- When not, a couple entity is spawned and coupling commences on click
|
-- When not, a couple entity is spawned and coupling commences on click
|
||||||
-- Coupling MUST preserve the train ID of the initiating train, so it is done like this:
|
-- Coupling MUST preserve the train ID of the initiating train, so it is done like this:
|
||||||
|
-- initiating train is reversed
|
||||||
|
-- stationary train is reversed if required, so that it points towards the initiating train
|
||||||
|
-- do_connect_trains(initiating, stationary)
|
||||||
|
-- As a result, the coupled train is reversed in direction. Alternative way of doing things (might be considered later):
|
||||||
|
-- stationary train is reversed if required, so that it points away from the initiating train
|
||||||
-- index of initiating train is set so that it matches the front pos of stationary train
|
-- index of initiating train is set so that it matches the front pos of stationary train
|
||||||
|
-- wagons of stationary train are inserted at the beginning of initiating train
|
||||||
-- remove stationary train
|
-- remove stationary train
|
||||||
-- wagons of stationary train are inserted at the beginning of initiating train (considers direction of stat_train and inserts reverse if required)
|
|
||||||
|
|
||||||
-- train.couple_* contain references to ObjectRefs of couple objects, which contain all relevant information
|
-- train.couple_* contain references to ObjectRefs of couple objects, which contain all relevant information
|
||||||
-- These objectRefs will delete themselves once the couples no longer match (see below)
|
-- These objectRefs will delete themselves once the couples no longer match (see below)
|
||||||
|
|
||||||
advtrains.coupler_types = {}
|
|
||||||
|
|
||||||
function advtrains.register_coupler_type(code, name)
|
|
||||||
advtrains.coupler_types[code] = name
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Register some default couplers
|
|
||||||
advtrains.register_coupler_type("chain", attrans("Buffer and Chain Coupler"))
|
|
||||||
advtrains.register_coupler_type("scharfenberg", attrans("Scharfenberg Coupler"))
|
|
||||||
|
|
||||||
|
|
||||||
local function create_couple_entity(pos, train1, t1_is_front, train2, t2_is_front)
|
local function create_couple_entity(pos, train1, t1_is_front, train2, t2_is_front)
|
||||||
local id1 = train1.id
|
local id1 = train1.id
|
||||||
local id2 = train2.id
|
local id2 = train2.id
|
||||||
|
@ -149,22 +142,14 @@ end
|
||||||
-- Called from train_step_b() when the current train (init_train) just stopped at one of the end indices of another train (stat_train)
|
-- Called from train_step_b() when the current train (init_train) just stopped at one of the end indices of another train (stat_train)
|
||||||
-- Depending on autocouple, either couples immediately or spawns a couple entity
|
-- Depending on autocouple, either couples immediately or spawns a couple entity
|
||||||
function advtrains.couple_initiate_with(init_train, stat_train, stat_is_front)
|
function advtrains.couple_initiate_with(init_train, stat_train, stat_is_front)
|
||||||
--atdebug("Couple init autocouple=",init_train.autocouple,"atc_w_acpl=",init_train.atc_wait_autocouple)
|
--atdebug("Initiating couplign between init=",init_train.id,"stat=",stat_train.id,"backside=",stat_is_backside)
|
||||||
if init_train.autocouple or init_train.atc_wait_autocouple then
|
if init_train.autocouple then
|
||||||
local cplmatch, msg = advtrains.check_matching_coupler_types(init_train, true, stat_train, stat_is_front)
|
advtrains.couple_trains(init_train, true, stat_train, stat_is_front)
|
||||||
if cplmatch then
|
else
|
||||||
advtrains.couple_trains(init_train, false, stat_train, stat_is_front)
|
local pos = advtrains.path_get_interpolated(init_train, init_train.index)
|
||||||
-- clear atc couple waiting blocker
|
create_couple_entity(pos, init_train, true, stat_train, stat_is_front)
|
||||||
init_train.atc_wait_autocouple = nil
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
-- get here if either autocouple is not on or couples dont match
|
|
||||||
local pos = advtrains.path_get_interpolated(init_train, init_train.index)
|
|
||||||
create_couple_entity(pos, init_train, true, stat_train, stat_is_front)
|
|
||||||
-- clear ATC command on collision
|
|
||||||
advtrains.atc.train_reset_command(init_train)
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- check if the player has permission for the first/last wagon of the train
|
-- check if the player has permission for the first/last wagon of the train
|
||||||
|
@ -192,147 +177,54 @@ function advtrains.safe_couple_trains(train1, t1_is_front, train2, t2_is_front,
|
||||||
wck_t2 = check_twagon_owner(train2, t2_is_front, pname)
|
wck_t2 = check_twagon_owner(train2, t2_is_front, pname)
|
||||||
end
|
end
|
||||||
if (wck_t1 or wck_t2) or not pname then
|
if (wck_t1 or wck_t2) or not pname then
|
||||||
|
advtrains.couple_trains(train1, t1_is_front, train2, t2_is_front)
|
||||||
local cplmatch, msg = advtrains.check_matching_coupler_types(train1, t1_is_front, train2, t2_is_front)
|
|
||||||
if cplmatch then
|
|
||||||
advtrains.couple_trains(train1, not t1_is_front, train2, t2_is_front)
|
|
||||||
else
|
|
||||||
minetest.chat_send_player(pname, msg)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Actually performs the train coupling. Always retains train ID of train1
|
-- Actually performs the train coupling. Always retains train ID of train1
|
||||||
function advtrains.couple_trains(init_train, invert_init_train, stat_train, stat_train_opposite)
|
function advtrains.couple_trains(train1, t1_is_front, train2, t2_is_front)
|
||||||
--atdebug("Couple trains init=",init_train.id,"initinv=",invert_init_train,"stat=",stat_train.id,"statreverse=",stat_train_opposite)
|
--atdebug("Couple trains init=",init_train.id,"stat=",stat_train.id,"statreverse=",stat_must_reverse)
|
||||||
|
-- see comment on top of file
|
||||||
if not advtrains.train_ensure_init(init_train.id, init_train) then
|
if t1_is_front then
|
||||||
atwarn("Coupling: initiating train",init_train.id,"is not initialized! Operation aborted!")
|
advtrains.invert_train(train1.id)
|
||||||
return
|
|
||||||
end
|
end
|
||||||
if not advtrains.train_ensure_init(stat_train.id, stat_train) then
|
if not t2_is_front then
|
||||||
atwarn("Coupling: stationary train",stat_train.id,"is not initialized! Operation aborted!")
|
advtrains.invert_train(train2.id)
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- only used with the couple entity
|
advtrains.do_connect_trains(train1, train2)
|
||||||
if invert_init_train then
|
end
|
||||||
advtrains.invert_train(init_train.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
local itp = init_train.trainparts
|
-- Adds the wagons of first to second and deletes second_id afterwards
|
||||||
local init_wagoncnt = #itp
|
-- Assumes that second_id stands right behind first_id and both trains point to the same direction
|
||||||
local stp = stat_train.trainparts
|
function advtrains.do_connect_trains(first, second)
|
||||||
local stat_wagoncnt = #stp
|
|
||||||
local stat_trainlen = stat_train.trainlen -- save the train length of stat train, to be added to index
|
|
||||||
|
|
||||||
if stat_train_opposite then
|
|
||||||
-- insert wagons in inverse order and set their wagon_flipped state
|
|
||||||
for i=1,stat_wagoncnt do
|
|
||||||
table.insert(itp, 1, stp[i])
|
|
||||||
local wdata = advtrains.wagons[stp[i]]
|
|
||||||
if wdata then
|
|
||||||
wdata.wagon_flipped = not wdata.wagon_flipped
|
|
||||||
else
|
|
||||||
atwarn("While coupling, wagon",stp[i],"of stationary train",stat_train.id,"not found!")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
--insert wagons in normal order
|
|
||||||
for i=stat_wagoncnt,1,-1 do
|
|
||||||
table.insert(itp, 1, stp[i])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- TODO: migrate some of the properties from stat_train to init_train?
|
|
||||||
|
|
||||||
advtrains.remove_train(stat_train.id)
|
if not advtrains.train_ensure_init(first.id, first) then
|
||||||
|
atwarn("Coupling: first train",first.id,"is not initialized! Operation aborted!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if not advtrains.train_ensure_init(second.id, second) then
|
||||||
|
atwarn("Coupling: second train",second.id,"is not initialized! Operation aborted!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local first_wagoncnt=#first.trainparts
|
||||||
|
local second_wagoncnt=#second.trainparts
|
||||||
|
|
||||||
|
for _,v in ipairs(second.trainparts) do
|
||||||
|
table.insert(first.trainparts, v)
|
||||||
|
end
|
||||||
|
|
||||||
|
advtrains.remove_train(second.id)
|
||||||
|
|
||||||
-- Set train index forward
|
first.velocity = 0
|
||||||
init_train.index = advtrains.path_get_index_by_offset(init_train, init_train.index, stat_trainlen)
|
|
||||||
|
advtrains.update_trainpart_properties(first.id)
|
||||||
advtrains.update_trainpart_properties(init_train.id)
|
advtrains.couple_invalidate(first)
|
||||||
advtrains.update_train_start_and_end(init_train)
|
|
||||||
|
|
||||||
advtrains.couple_invalidate(init_train)
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Couple types matching check
|
|
||||||
-- returns: true, nil if OK
|
|
||||||
-- false, errmsg if there is an error
|
|
||||||
function advtrains.check_matching_coupler_types(t1, t1_front, t2, t2_front)
|
|
||||||
-- 1. get wagons
|
|
||||||
local t1_wid
|
|
||||||
if t1_front then
|
|
||||||
t1_wid = t1.trainparts[1]
|
|
||||||
else
|
|
||||||
t1_wid = t1.trainparts[#t1.trainparts]
|
|
||||||
end
|
|
||||||
local t2_wid
|
|
||||||
if t2_front then
|
|
||||||
t2_wid = t2.trainparts[1]
|
|
||||||
else
|
|
||||||
t2_wid = t2.trainparts[#t2.trainparts]
|
|
||||||
end
|
|
||||||
|
|
||||||
--atdebug("CMCT: t1_wid",t1_wid,"t2_wid",t2_wid,"")
|
|
||||||
|
|
||||||
if not t1_wid or not t2_wid then
|
|
||||||
return false, "Unable to retrieve wagons from train"--note: no translation needed, case should not occur
|
|
||||||
end
|
|
||||||
|
|
||||||
local t1_wagon = advtrains.wagons[t1_wid]
|
|
||||||
local t2_wagon = advtrains.wagons[t2_wid]
|
|
||||||
|
|
||||||
if not t1_wagon or not t2_wagon then
|
|
||||||
return false, "At least one of wagons "..t1_wagon.." or "..t2_wagon.." does not exist"--note: no translation needed, case should not occur
|
|
||||||
end
|
|
||||||
|
|
||||||
-- these calls do not fail, they may return placeholder - doesn't matter
|
|
||||||
local _,t1_wpro = advtrains.get_wagon_prototype(t1_wagon)
|
|
||||||
local _,t2_wpro = advtrains.get_wagon_prototype(t2_wagon)
|
|
||||||
|
|
||||||
-- get correct couplers table (front/back)
|
|
||||||
local t1_cplt
|
|
||||||
if not t1_front == not t1_wagon.wagon_flipped then --fancy XOR
|
|
||||||
t1_cplt = t1_wpro.coupler_types_back
|
|
||||||
else
|
|
||||||
t1_cplt = t1_wpro.coupler_types_front
|
|
||||||
end
|
|
||||||
local t2_cplt
|
|
||||||
if not t2_front == not t2_wagon.wagon_flipped then --fancy XOR
|
|
||||||
t2_cplt = t2_wpro.coupler_types_back
|
|
||||||
else
|
|
||||||
t2_cplt = t2_wpro.coupler_types_front
|
|
||||||
end
|
|
||||||
|
|
||||||
--atdebug("CMCT: t1",t1_cplt,"t2",t2_cplt,"")
|
|
||||||
|
|
||||||
-- if at least one of the trains has no couplers table, it always couples (fallback behavior and mode for universal shunters)
|
|
||||||
if not t1_cplt or not t2_cplt then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- have common coupler?
|
|
||||||
for typ,_ in pairs(t1_cplt) do
|
|
||||||
if t2_cplt[typ] then
|
|
||||||
--atdebug("CMCT: Matching type",typ)
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
--no match, give user an info
|
|
||||||
local t1_cplhr, t2_cplhr = {},{}
|
|
||||||
for typ,_ in pairs(t1_cplt) do
|
|
||||||
table.insert(t1_cplhr, advtrains.coupler_types[typ] or typ)
|
|
||||||
end
|
|
||||||
if #t1_cplhr==0 then t1_cplhr[1]=attrans("<none>") end
|
|
||||||
for typ,_ in pairs(t2_cplt) do
|
|
||||||
table.insert(t2_cplhr, advtrains.coupler_types[typ] or typ)
|
|
||||||
end
|
|
||||||
if #t2_cplhr==0 then t2_cplhr[1]=attrans("<none>") end
|
|
||||||
return false, attrans("Can not couple: The couplers of the trains do not match (@1 and @2).", table.concat(t1_cplhr, ","), table.concat(t2_cplhr, ","))
|
|
||||||
end
|
|
||||||
|
|
||||||
-- DECOUPLING --
|
-- DECOUPLING --
|
||||||
function advtrains.split_train_at_fc(train, count_empty, length_limit)
|
function advtrains.split_train_at_fc(train, count_empty, length_limit)
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
% advtrains_speed_lessp(3advtrains) | Advtrains Developer's Manual
|
|
||||||
|
|
||||||
# NAME
|
|
||||||
`advtrains.speed.lessp`, `advtrains.speed.greaterp`, `advtrains.speed.not_lessp`, `advtrains.speed_not_greaterp`, `advtrains.speed.equalp`, `advtrains.speed.not_equalp`, `advtrains.speed.max`, `advtrains.speed.min` - speed restriction comparison functions
|
|
||||||
|
|
||||||
# SYNOPSIS
|
|
||||||
Each function takes two arguments and returns a boolean or (for `advtrains.speed.max` and `advtrains.speed.min`) a valid speed limit
|
|
||||||
|
|
||||||
# DESCRIPTION
|
|
||||||
|
|
||||||
The functions above correspond to the arithmetic `<`, `>`, `>=`, `<=`, `==`, `~=` operators and the `math.max` and `math.min` functions, respectively. The constants `nil` and `false` are treated as -1.
|
|
||||||
|
|
||||||
# NOTES
|
|
||||||
|
|
||||||
These functions are trivial to implement and the implementation can be easily embedded into existing code. They are simply provided for convenience.
|
|
|
@ -1,18 +0,0 @@
|
||||||
% advtrains_speed_set_restriction(3advtrains) | Advtrains Developer's Manual
|
|
||||||
|
|
||||||
# NAME
|
|
||||||
`advtrains.speed.set_restriction`, `advtrains.speed.merge_aspect` - modify speed restriction
|
|
||||||
|
|
||||||
# SYNOPSIS
|
|
||||||
* `advtrains.speed.set_restriction(train, rtype, rval)`
|
|
||||||
* `advtrains.speed.merge_aspect(train, asp)`
|
|
||||||
|
|
||||||
# DESCRIPTION
|
|
||||||
|
|
||||||
The `advtrains.speed.set_restriction` function sets the speed restriction of type `rtype` of `train` to `rval` and updates the speed restriction value to the strictest speed restriction in the table, or `nil` if all speed restrictions are `nil` or `-1`. If the speed restriction table does not exist, it is created with the `"main"` speed restriction being the speed restriction value of `train`.
|
|
||||||
|
|
||||||
The `advtrains.speed.merge_aspect` function merges the main aspect of `asp` into the speed restriction table with the same procedure described above. If the signal aspect table does not provide the type of speed restriction, the restriction type `"main"` is assumed.
|
|
||||||
|
|
||||||
# SIDE EFFECTS
|
|
||||||
|
|
||||||
Both functions modify `train.speed_restriction` and `train.speed_restrictions_t`.
|
|
|
@ -1,24 +0,0 @@
|
||||||
% signal_aspect(7advtrains) | Advtrains Developer's Manual
|
|
||||||
|
|
||||||
# DESCRIPTION
|
|
||||||
|
|
||||||
The signal aspect table used by advtrains has the following fields:
|
|
||||||
|
|
||||||
* `main`: The main speed restriction
|
|
||||||
* `dst`: The `main` aspect of the distant signal (not implemented)
|
|
||||||
* `type`: The type of speed restriction given by the signal
|
|
||||||
* `shunt`: Whether shunting is allowed
|
|
||||||
* `proceed_as_main`: Whether to proceed without shunting
|
|
||||||
|
|
||||||
The `main` and `dst` fields may contain the following values:
|
|
||||||
* `-1`: No speed restriction
|
|
||||||
* `nil`: No information is available
|
|
||||||
|
|
||||||
The `type` field can be any valid table index, but it should usually be one of the following values:
|
|
||||||
* "main": The main signal aspect used before the introduction of speed restriction types. This is the default value if the `type` field is absent.
|
|
||||||
* "line": The speed limit for the physical line.
|
|
||||||
* "temp": The speed limit that is temporarily introduced.
|
|
||||||
|
|
||||||
# NOTES
|
|
||||||
|
|
||||||
A signal with the `main` aspect of zero should not provide distant signal aspect.
|
|
|
@ -198,8 +198,6 @@ advtrains.meseconrules =
|
||||||
|
|
||||||
advtrains.fpath=minetest.get_worldpath().."/advtrains"
|
advtrains.fpath=minetest.get_worldpath().."/advtrains"
|
||||||
|
|
||||||
advtrains.speed = dofile(advtrains.modpath.."/speed.lua")
|
|
||||||
|
|
||||||
dofile(advtrains.modpath.."/path.lua")
|
dofile(advtrains.modpath.."/path.lua")
|
||||||
dofile(advtrains.modpath.."/trainlogic.lua")
|
dofile(advtrains.modpath.."/trainlogic.lua")
|
||||||
dofile(advtrains.modpath.."/trainhud.lua")
|
dofile(advtrains.modpath.."/trainhud.lua")
|
||||||
|
@ -469,8 +467,8 @@ advtrains.avt_save = function(remove_players_from_wagons)
|
||||||
"trainparts", "recently_collided_with_env",
|
"trainparts", "recently_collided_with_env",
|
||||||
"atc_brake_target", "atc_wait_finish", "atc_command", "atc_delay", "door_open",
|
"atc_brake_target", "atc_wait_finish", "atc_command", "atc_delay", "door_open",
|
||||||
"text_outside", "text_inside", "line", "routingcode",
|
"text_outside", "text_inside", "line", "routingcode",
|
||||||
"il_sections", "speed_restriction", "speed_restrictions_t", "is_shunt",
|
"il_sections", "speed_restriction", "is_shunt",
|
||||||
"points_split", "autocouple", "atc_wait_autocouple", "ars_disable",
|
"points_split", "autocouple", "ars_disable",
|
||||||
})
|
})
|
||||||
--then save it
|
--then save it
|
||||||
tmp_trains[id]=v
|
tmp_trains[id]=v
|
||||||
|
|
|
@ -70,8 +70,3 @@ This track can not be removed!=Diese Schiene kann nicht entfernt werden!
|
||||||
Position is occupied by a train.=Ein Zug steht an dieser Position.
|
Position is occupied by a train.=Ein Zug steht an dieser Position.
|
||||||
There's a Track Circuit Break here.=Hier ist eine Gleisabschnittsgrenze (TCB).
|
There's a Track Circuit Break here.=Hier ist eine Gleisabschnittsgrenze (TCB).
|
||||||
There's a Signal Influence Point here.=Hier ist ein Signal-Beeinflussungspunkt.
|
There's a Signal Influence Point here.=Hier ist ein Signal-Beeinflussungspunkt.
|
||||||
Buffer and Chain Coupler=Schraubenkupplung
|
|
||||||
Scharfenberg Coupler=Scharfenbergkupplung
|
|
||||||
Japanese Train Inter-Wagon Connection=Waggonzwischenverbindung Japanischer Personenzug
|
|
||||||
Can not couple: The couplers of the trains do not match (@1 and @2).=Kann nicht ankuppeln: Die Kupplungen der Züge passen nicht zueinander (@1 und @2)
|
|
||||||
<none>=<keine>
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ local function look_ahead(id, train)
|
||||||
--local brake_i = advtrains.path_get_index_by_offset(train, train.index, brakedst + params.BRAKE_SPACE)
|
--local brake_i = advtrains.path_get_index_by_offset(train, train.index, brakedst + params.BRAKE_SPACE)
|
||||||
-- worst case (don't use index_by_offset)
|
-- worst case (don't use index_by_offset)
|
||||||
local brake_i = atfloor(train.index + brakedst + params.BRAKE_SPACE)
|
local brake_i = atfloor(train.index + brakedst + params.BRAKE_SPACE)
|
||||||
--atprint("LZB: looking ahead up to ", brake_i)
|
atprint("LZB: looking ahead up to ", brake_i)
|
||||||
|
|
||||||
--local aware_i = advtrains.path_get_index_by_offset(train, brake_i, AWARE_ZONE)
|
--local aware_i = advtrains.path_get_index_by_offset(train, brake_i, AWARE_ZONE)
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ local function call_runover_callbacks(id, train)
|
||||||
local ckp = train.lzb.checkpoints
|
local ckp = train.lzb.checkpoints
|
||||||
while ckp[i] do
|
while ckp[i] do
|
||||||
if ckp[i].index <= idx then
|
if ckp[i].index <= idx then
|
||||||
--atprint("LZB: checkpoint run over: i=",ckp[i].index,"s=",ckp[i].speed,"p=",ckp[i].pos)
|
atprint("LZB: checkpoint run over: i=",ckp[i].index,"s=",ckp[i].speed)
|
||||||
-- call callback
|
-- call callback
|
||||||
local it = ckp[i]
|
local it = ckp[i]
|
||||||
if it.callback then
|
if it.callback then
|
||||||
|
@ -153,7 +153,7 @@ local function apply_checkpoint_to_path(train, checkpoint)
|
||||||
if not checkpoint.speed then
|
if not checkpoint.speed then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
--atprint("LZB: applying checkpoint: i=",checkpoint.index,"s=",checkpoint.speed,"p=",checkpoint.pos)
|
atprint("LZB: applying checkpoint: i=",checkpoint.index,"s=",checkpoint.speed)
|
||||||
|
|
||||||
if checkpoint.speed == 0 then
|
if checkpoint.speed == 0 then
|
||||||
train.lzb.zero_checkpoint = true
|
train.lzb.zero_checkpoint = true
|
||||||
|
@ -196,9 +196,6 @@ s = v0 * ------- + - * | ------- | = -----------
|
||||||
|
|
||||||
-- Removes all LZB checkpoints and restarts the traverser at the current train index
|
-- Removes all LZB checkpoints and restarts the traverser at the current train index
|
||||||
function advtrains.lzb_invalidate(train)
|
function advtrains.lzb_invalidate(train)
|
||||||
--advtrains.atprint_context_tid = train.id
|
|
||||||
--atprint("LZB: invalidate")
|
|
||||||
--advtrains.atprint_context_tid = nil
|
|
||||||
train.lzb = {
|
train.lzb = {
|
||||||
trav_index = atfloor(train.index) + 1,
|
trav_index = atfloor(train.index) + 1,
|
||||||
checkpoints = {},
|
checkpoints = {},
|
||||||
|
@ -208,11 +205,8 @@ end
|
||||||
-- LZB part of path_invalidate_ahead. Clears all checkpoints that are ahead of start_idx
|
-- LZB part of path_invalidate_ahead. Clears all checkpoints that are ahead of start_idx
|
||||||
-- in contrast to path_inv_ahead, doesn't complain if start_idx is behind train.index, clears everything then
|
-- in contrast to path_inv_ahead, doesn't complain if start_idx is behind train.index, clears everything then
|
||||||
function advtrains.lzb_invalidate_ahead(train, start_idx)
|
function advtrains.lzb_invalidate_ahead(train, start_idx)
|
||||||
--advtrains.atprint_context_tid = train.id
|
|
||||||
--atprint("LZB: invalidate ahead i=",start_idx)
|
|
||||||
if train.lzb then
|
if train.lzb then
|
||||||
local idx = atfloor(start_idx)
|
local idx = atfloor(start_idx)
|
||||||
--atprint("LZB: invalidate ahead p=",train.path[start_idx])
|
|
||||||
local i = 1
|
local i = 1
|
||||||
while train.lzb.checkpoints[i] do
|
while train.lzb.checkpoints[i] do
|
||||||
if train.lzb.checkpoints[i].index >= idx then
|
if train.lzb.checkpoints[i].index >= idx then
|
||||||
|
@ -231,7 +225,6 @@ function advtrains.lzb_invalidate_ahead(train, start_idx)
|
||||||
apply_checkpoint_to_path(train, ckp)
|
apply_checkpoint_to_path(train, ckp)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
--advtrains.atprint_context_tid = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Add LZB control point
|
-- Add LZB control point
|
||||||
|
|
|
@ -302,7 +302,7 @@ ndb.run_lbm = function(pos, node)
|
||||||
minetest.swap_node(pos, newnode)
|
minetest.swap_node(pos, newnode)
|
||||||
local ndef=minetest.registered_nodes[nodeid]
|
local ndef=minetest.registered_nodes[nodeid]
|
||||||
if ndef and ndef.advtrains and ndef.advtrains.on_updated_from_nodedb then
|
if ndef and ndef.advtrains and ndef.advtrains.on_updated_from_nodedb then
|
||||||
ndef.advtrains.on_updated_from_nodedb(pos, newnode, node)
|
ndef.advtrains.on_updated_from_nodedb(pos, newnode)
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,7 +18,7 @@ end
|
||||||
|
|
||||||
local function aspect(b)
|
local function aspect(b)
|
||||||
return {
|
return {
|
||||||
main = b and -1 or 0,
|
main = (not b) and 0, -- b ? false : 0
|
||||||
shunt = false,
|
shunt = false,
|
||||||
proceed_as_main = true,
|
proceed_as_main = true,
|
||||||
dst = false,
|
dst = false,
|
||||||
|
@ -27,7 +27,7 @@ return {
|
||||||
end
|
end
|
||||||
|
|
||||||
local suppasp = {
|
local suppasp = {
|
||||||
main = {0, -1},
|
main = {0, false},
|
||||||
dst = {false},
|
dst = {false},
|
||||||
shunt = nil,
|
shunt = nil,
|
||||||
proceed_as_main = true,
|
proceed_as_main = true,
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
package.path = "../?.lua;" .. package.path
|
|
||||||
advtrains = {}
|
|
||||||
_G.advtrains = advtrains
|
|
||||||
local speed = require("speed")
|
|
||||||
|
|
||||||
describe("Arithmetic functions on speed restrictions", function()
|
|
||||||
it("should work", function()
|
|
||||||
local a = math.random()
|
|
||||||
local b = math.random(20)
|
|
||||||
-- This test is basically a "typo check"
|
|
||||||
assert.is_true (speed.lessp(a, b))
|
|
||||||
assert.is_false(speed.greaterp(a, b))
|
|
||||||
assert.is_false(speed.not_lessp(a, b))
|
|
||||||
assert.is_true (speed.not_greaterp(a, b))
|
|
||||||
assert.is_false(speed.lessp(a, a))
|
|
||||||
assert.is_false(speed.greaterp(a, a))
|
|
||||||
assert.is_true (speed.equalp(a, a))
|
|
||||||
assert.is_false(speed.not_equalp(a, a))
|
|
||||||
assert.equal(b, speed.max(a, b))
|
|
||||||
assert.equal(a, speed.min(a, b))
|
|
||||||
end)
|
|
||||||
it("should handle -1", function()
|
|
||||||
assert.is_false(speed.lessp(-1, math.random()))
|
|
||||||
end)
|
|
||||||
it("should handle nil", function()
|
|
||||||
assert.is_true(speed.greaterp(nil, math.random()))
|
|
||||||
end)
|
|
||||||
it("should handle mixed nil and -1", function()
|
|
||||||
assert.is_true(speed.equalp(nil, -1))
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
|
|
||||||
describe("The speed restriction setter", function()
|
|
||||||
it("should set the signal aspect", function()
|
|
||||||
local t = {speed_restrictions_t = {x = 5, y = 9}}
|
|
||||||
local u = {speed_restrictions_t = {x = 7, y = 9}, speed_restriction = 7}
|
|
||||||
speed.merge_aspect(t, {main = 7, type = "x"})
|
|
||||||
assert.same(u, t)
|
|
||||||
end)
|
|
||||||
it("should work with existing signal aspect tables", function()
|
|
||||||
local t = {speed_restrictions_t = {main = 5, foo = 3}}
|
|
||||||
local u = {speed_restrictions_t = {main = 7, foo = 3}, speed_restriction = 3}
|
|
||||||
speed.merge_aspect(t, {main = 7})
|
|
||||||
assert.same(u, t)
|
|
||||||
end)
|
|
||||||
it("should work with distant signals", function()
|
|
||||||
local t = {speed_restrictions_t = {main = 5}}
|
|
||||||
local u = {speed_restrictions_t = {main = 5}, speed_restriction = 5}
|
|
||||||
speed.merge_aspect(t, {})
|
|
||||||
assert.same(u, t)
|
|
||||||
end)
|
|
||||||
it("should create the restriction table if necessary", function()
|
|
||||||
local t = {speed_restriction = 5}
|
|
||||||
local u = {speed_restriction = 3, speed_restrictions_t = {main = 5, foo = 3}}
|
|
||||||
speed.merge_aspect(t, {main = 3, type = "foo"})
|
|
||||||
assert.same(u, t)
|
|
||||||
end)
|
|
||||||
it("should also create the restriction table for trains without any speed limit", function()
|
|
||||||
local t = {}
|
|
||||||
local u = {speed_restrictions_t = {}}
|
|
||||||
speed.merge_aspect(t, {})
|
|
||||||
assert.same(u, t)
|
|
||||||
end)
|
|
||||||
it("should set the speed restriction to nil if that is the case", function()
|
|
||||||
local t = {speed_restriction = math.random(20)}
|
|
||||||
local u = {speed_restrictions_t = {main = -1}}
|
|
||||||
speed.merge_aspect(t, {main = -1})
|
|
||||||
assert.same(u, t)
|
|
||||||
end)
|
|
||||||
end)
|
|
|
@ -1,88 +0,0 @@
|
||||||
-- auxiliary functions for the reworked speed restriction system
|
|
||||||
|
|
||||||
local function s_lessp(a, b)
|
|
||||||
if not a or a == -1 then
|
|
||||||
return false
|
|
||||||
elseif not b or b == -1 then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return a < b
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_greaterp(a, b)
|
|
||||||
return s_lessp(b, a)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_not_lessp(a, b)
|
|
||||||
return not s_lessp(a, b)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_not_greaterp(a, b)
|
|
||||||
return not s_greaterp(a, b)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_equalp(a, b)
|
|
||||||
return (a or -1) == (b or -1)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_not_equalp(a, b)
|
|
||||||
return (a or -1) ~= (b or -1)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_max(a, b)
|
|
||||||
if s_lessp(a, b) then
|
|
||||||
return b
|
|
||||||
else
|
|
||||||
return a
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function s_min(a, b)
|
|
||||||
if s_lessp(a, b) then
|
|
||||||
return a
|
|
||||||
else
|
|
||||||
return b
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_speed_restriction_from_table (tbl)
|
|
||||||
local strictest = -1
|
|
||||||
for _, v in pairs(tbl) do
|
|
||||||
strictest = s_min(strictest, v)
|
|
||||||
end
|
|
||||||
if strictest == -1 then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
return strictest
|
|
||||||
end
|
|
||||||
|
|
||||||
local function set_speed_restriction (tbl, rtype, rval)
|
|
||||||
if rval then
|
|
||||||
tbl[rtype or "main"] = rval
|
|
||||||
end
|
|
||||||
return tbl
|
|
||||||
end
|
|
||||||
|
|
||||||
local function set_speed_restriction_for_train (train, rtype, rval)
|
|
||||||
local t = train.speed_restrictions_t or {main = train.speed_restriction}
|
|
||||||
train.speed_restrictions_t = set_speed_restriction(t, rtype, rval)
|
|
||||||
train.speed_restriction = get_speed_restriction_from_table(t)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function merge_speed_restriction_from_aspect_to_train (train, asp)
|
|
||||||
return set_speed_restriction_for_train(train, asp.type, asp.main)
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
lessp = s_lessp,
|
|
||||||
greaterp = s_greaterp,
|
|
||||||
not_lessp = s_not_lessp,
|
|
||||||
not_greaterp = s_not_greaterp,
|
|
||||||
equalp = s_equalp,
|
|
||||||
not_equalp = s_not_equalp,
|
|
||||||
max = s_max,
|
|
||||||
min = s_min,
|
|
||||||
set_restriction = set_speed_restriction_for_train,
|
|
||||||
merge_aspect = merge_speed_restriction_from_aspect_to_train,
|
|
||||||
}
|
|
|
@ -281,8 +281,6 @@ function advtrains.hud_train_format(train, flip)
|
||||||
local oc = lzb.checkpoints
|
local oc = lzb.checkpoints
|
||||||
for i = 1, #oc do
|
for i = 1, #oc do
|
||||||
local spd = oc[i].speed
|
local spd = oc[i].speed
|
||||||
spd = advtrains.speed.min(spd, train.speed_restriction)
|
|
||||||
if spd == -1 then spd = nil end
|
|
||||||
local c = not spd and "lime" or (type(spd) == "number" and (spd == 0) and "red" or "orange") or nil
|
local c = not spd and "lime" or (type(spd) == "number" and (spd == 0) and "red" or "orange") or nil
|
||||||
if c then
|
if c then
|
||||||
ht[#ht+1] = sformat("130,10=(advtrains_hud_bg.png^[resize\\:30x5^[colorize\\:%s)",c)
|
ht[#ht+1] = sformat("130,10=(advtrains_hud_bg.png^[resize\\:30x5^[colorize\\:%s)",c)
|
||||||
|
|
|
@ -251,11 +251,6 @@ local callbacks_update, run_callbacks_update = mkcallback("update")
|
||||||
local callbacks_create, run_callbacks_create = mkcallback("create")
|
local callbacks_create, run_callbacks_create = mkcallback("create")
|
||||||
local callbacks_remove, run_callbacks_remove = mkcallback("remove")
|
local callbacks_remove, run_callbacks_remove = mkcallback("remove")
|
||||||
|
|
||||||
-- required to call from couple.lua
|
|
||||||
function advtrains.update_train_start_and_end(train)
|
|
||||||
recalc_end_index(train)
|
|
||||||
run_callbacks_update(train.id, train)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- train_ensure_init: responsible for creating a state that we can work on, after one of the following events has happened:
|
-- train_ensure_init: responsible for creating a state that we can work on, after one of the following events has happened:
|
||||||
-- - the train's path got cleared
|
-- - the train's path got cleared
|
||||||
|
@ -392,7 +387,7 @@ function advtrains.train_step_b(id, train, dtime)
|
||||||
-- interlocking speed restriction
|
-- interlocking speed restriction
|
||||||
elseif train.speed_restriction then
|
elseif train.speed_restriction then
|
||||||
--atprint("in train_step_b: applying interlocking speed restriction",train.speed_restriction)
|
--atprint("in train_step_b: applying interlocking speed restriction",train.speed_restriction)
|
||||||
sit_v_cap = math.min(sit_v_cap or math.huge, train.speed_restriction)
|
sit_v_cap = train.speed_restriction
|
||||||
end
|
end
|
||||||
|
|
||||||
--apply off-track handling:
|
--apply off-track handling:
|
||||||
|
@ -423,11 +418,9 @@ function advtrains.train_step_b(id, train, dtime)
|
||||||
ctrl_lever = userc
|
ctrl_lever = userc
|
||||||
else
|
else
|
||||||
if train.atc_command then
|
if train.atc_command then
|
||||||
if (not train.atc_delay or train.atc_delay<=0)
|
if (not train.atc_delay or train.atc_delay<=0) and not train.atc_wait_finish then
|
||||||
and not train.atc_wait_finish
|
|
||||||
and not train.atc_wait_autocouple then
|
|
||||||
advtrains.atc.execute_atc_command(id, train)
|
advtrains.atc.execute_atc_command(id, train)
|
||||||
elseif train.atc_delay and train.atc_delay > 0 then
|
else
|
||||||
train.atc_delay=train.atc_delay-dtime
|
train.atc_delay=train.atc_delay-dtime
|
||||||
end
|
end
|
||||||
elseif train.atc_delay then
|
elseif train.atc_delay then
|
||||||
|
@ -648,8 +641,7 @@ function advtrains.train_step_b(id, train, dtime)
|
||||||
if target_is_inside then
|
if target_is_inside then
|
||||||
local our_index = advtrains.path_project(otrn, ref_index, id)
|
local our_index = advtrains.path_project(otrn, ref_index, id)
|
||||||
--atdebug("Backprojected our_index",our_index)
|
--atdebug("Backprojected our_index",our_index)
|
||||||
if our_index and our_index <= new_index_curr_tv
|
if our_index and our_index <= new_index_curr_tv then
|
||||||
and our_index >= train.index then --FIX: If train was already past the collision point in the previous step, there is no collision! Fixes bug with split_at_index
|
|
||||||
-- ON_TRACK COLLISION IS HAPPENING
|
-- ON_TRACK COLLISION IS HAPPENING
|
||||||
-- the actual collision is handled in train_step_c, so set appropriate signal variables
|
-- the actual collision is handled in train_step_c, so set appropriate signal variables
|
||||||
train.ontrack_collision_info = {
|
train.ontrack_collision_info = {
|
||||||
|
@ -719,15 +711,12 @@ function advtrains.train_step_c(id, train, dtime)
|
||||||
if train.ontrack_collision_info then
|
if train.ontrack_collision_info then
|
||||||
train.velocity = 0
|
train.velocity = 0
|
||||||
train.acceleration = 0
|
train.acceleration = 0
|
||||||
--advtrains.atc.train_reset_command(train) will occur in couple_initiate_with if required
|
advtrains.atc.train_reset_command(train)
|
||||||
|
|
||||||
local otrn = advtrains.trains[train.ontrack_collision_info.otid]
|
local otrn = advtrains.trains[train.ontrack_collision_info.otid]
|
||||||
|
|
||||||
if otrn.velocity == 0 then -- other train must be standing, else don't initiate coupling
|
if otrn.velocity == 0 then -- other train must be standing, else don't initiate coupling
|
||||||
advtrains.couple_initiate_with(train, otrn, not train.ontrack_collision_info.same_dir)
|
advtrains.couple_initiate_with(train, otrn, not train.ontrack_collision_info.same_dir)
|
||||||
else
|
|
||||||
-- other collision - stop any ATC control
|
|
||||||
advtrains.atc.train_reset_command(train)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
train.ontrack_collision_info = nil
|
train.ontrack_collision_info = nil
|
||||||
|
@ -1119,7 +1108,6 @@ end
|
||||||
|
|
||||||
function advtrains.split_train_at_index(train, index)
|
function advtrains.split_train_at_index(train, index)
|
||||||
-- this function splits a train at index, creating a new train from the back part of the train.
|
-- this function splits a train at index, creating a new train from the back part of the train.
|
||||||
--atdebug("split_train_at_index invoked on",train.id,"index",index)
|
|
||||||
|
|
||||||
local train_id=train.id
|
local train_id=train.id
|
||||||
if index > #train.trainparts then
|
if index > #train.trainparts then
|
||||||
|
@ -1142,7 +1130,6 @@ function advtrains.split_train_at_index(train, index)
|
||||||
|
|
||||||
local p_index=advtrains.path_get_index_by_offset(train, train.index, - data.pos_in_train + wagon.wagon_span)
|
local p_index=advtrains.path_get_index_by_offset(train, train.index, - data.pos_in_train + wagon.wagon_span)
|
||||||
local pos, connid, frac = advtrains.path_getrestore(train, p_index)
|
local pos, connid, frac = advtrains.path_getrestore(train, p_index)
|
||||||
--atdebug("new train position p_index",p_index,"pos",pos,"connid",connid,"frac",frac)
|
|
||||||
local tp = {}
|
local tp = {}
|
||||||
for k,v in ipairs(train.trainparts) do
|
for k,v in ipairs(train.trainparts) do
|
||||||
if k >= index then
|
if k >= index then
|
||||||
|
@ -1152,14 +1139,12 @@ function advtrains.split_train_at_index(train, index)
|
||||||
end
|
end
|
||||||
advtrains.update_trainpart_properties(train_id)
|
advtrains.update_trainpart_properties(train_id)
|
||||||
recalc_end_index(train)
|
recalc_end_index(train)
|
||||||
--atdebug("old train index",train.index,"end_index",train.end_index)
|
|
||||||
run_callbacks_update(train_id, train)
|
run_callbacks_update(train_id, train)
|
||||||
|
|
||||||
--create subtrain
|
--create subtrain
|
||||||
local newtrain_id=advtrains.create_new_train_at(pos, connid, frac, tp)
|
local newtrain_id=advtrains.create_new_train_at(pos, connid, frac, tp)
|
||||||
local newtrain=advtrains.trains[newtrain_id]
|
local newtrain=advtrains.trains[newtrain_id]
|
||||||
--atdebug("new train created with ID",newtrain_id,"index",newtrain.index,"end_index",newtrain.end_index)
|
|
||||||
|
|
||||||
newtrain.velocity=train.velocity
|
newtrain.velocity=train.velocity
|
||||||
-- copy various properties from the old to the new train
|
-- copy various properties from the old to the new train
|
||||||
newtrain.door_open = train.door_open
|
newtrain.door_open = train.door_open
|
||||||
|
@ -1168,7 +1153,6 @@ function advtrains.split_train_at_index(train, index)
|
||||||
newtrain.line = train.line
|
newtrain.line = train.line
|
||||||
newtrain.routingcode = train.routingcode
|
newtrain.routingcode = train.routingcode
|
||||||
newtrain.speed_restriction = train.speed_restriction
|
newtrain.speed_restriction = train.speed_restriction
|
||||||
newtrain.speed_restrictions_t = table.copy(train.speed_restrictions_t or {main=train.speed_restriction})
|
|
||||||
newtrain.is_shunt = train.is_shunt
|
newtrain.is_shunt = train.is_shunt
|
||||||
newtrain.points_split = advtrains.merge_tables(train.points_split)
|
newtrain.points_split = advtrains.merge_tables(train.points_split)
|
||||||
newtrain.autocouple = train.autocouple
|
newtrain.autocouple = train.autocouple
|
||||||
|
@ -1211,10 +1195,10 @@ function advtrains.invert_train(train_id)
|
||||||
-- If interlocking present, check whether this train is in a section and then set as shunt move after reversion
|
-- If interlocking present, check whether this train is in a section and then set as shunt move after reversion
|
||||||
if advtrains.interlocking and train.il_sections and #train.il_sections > 0 then
|
if advtrains.interlocking and train.il_sections and #train.il_sections > 0 then
|
||||||
train.is_shunt = true
|
train.is_shunt = true
|
||||||
advtrains.speed.set_restriction(train, "main", advtrains.SHUNT_SPEED_MAX)
|
train.speed_restriction = advtrains.SHUNT_SPEED_MAX
|
||||||
else
|
else
|
||||||
train.is_shunt = false
|
train.is_shunt = false
|
||||||
advtrains.speed.set_restriction(train, "main", -1)
|
train.speed_restriction = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1316,23 +1316,14 @@ function advtrains.register_wagon(sysname_p, prototype, desc, inv_img, nincreati
|
||||||
minetest.register_entity(":"..sysname,prototype)
|
minetest.register_entity(":"..sysname,prototype)
|
||||||
advtrains.wagon_prototypes[sysname] = prototype
|
advtrains.wagon_prototypes[sysname] = prototype
|
||||||
|
|
||||||
--group classification to make recipe searching easier
|
|
||||||
local wagon_groups = { not_in_creative_inventory = nincreative and 1 or 0}
|
|
||||||
if prototype.is_locomotive then wagon_groups['at_loco'] = 1 end
|
|
||||||
if prototype.seat_groups then
|
|
||||||
if prototype.seat_groups.dstand then wagon_groups['at_control'] = 1 end
|
|
||||||
if prototype.seat_groups.pass then wagon_groups['at_pax'] = 1 end
|
|
||||||
end
|
|
||||||
if prototype.has_inventory then wagon_groups['at_freight'] = 1 end
|
|
||||||
|
|
||||||
minetest.register_craftitem(":"..sysname, {
|
minetest.register_craftitem(":"..sysname, {
|
||||||
description = desc,
|
description = desc,
|
||||||
inventory_image = inv_img,
|
inventory_image = inv_img,
|
||||||
wield_image = inv_img,
|
wield_image = inv_img,
|
||||||
stack_max = 1,
|
stack_max = 1,
|
||||||
|
|
||||||
groups = wagon_groups,
|
groups = { not_in_creative_inventory = nincreative and 1 or 0},
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
if not pointed_thing.type == "node" then
|
if not pointed_thing.type == "node" then
|
||||||
return
|
return
|
||||||
|
|
|
@ -14,19 +14,19 @@ local SHUNT_SPEED_MAX = advtrains.SHUNT_SPEED_MAX
|
||||||
|
|
||||||
local il = advtrains.interlocking
|
local il = advtrains.interlocking
|
||||||
|
|
||||||
local function get_over_function(speed, shunt, asptype)
|
local function get_over_function(speed, shunt)
|
||||||
return function(pos, id, train, index, speed, lzbdata)
|
return function(pos, id, train, index, speed, lzbdata)
|
||||||
if speed == 0 and minetest.settings:get_bool("at_il_force_lzb_halt") then
|
if speed == 0 and minetest.settings:get_bool("at_il_force_lzb_halt") then
|
||||||
atwarn(id,"overrun LZB 0 restriction (red signal) ",pos)
|
atwarn(id,"overrun LZB 0 restriction (red signal) ",pos)
|
||||||
-- Set train 1 index backward. Hope this does not lead to bugs...
|
-- Set train 1 index backward. Hope this does not lead to bugs...
|
||||||
--train.index = index - 0.5
|
--train.index = index - 0.5
|
||||||
advtrains.speed.set_restriction(train, "main", 0)
|
train.speed_restriction = 0
|
||||||
|
|
||||||
--TODO temporary
|
--TODO temporary
|
||||||
--advtrains.drb_dump(id)
|
--advtrains.drb_dump(id)
|
||||||
--error("Debug: "..id.." triggered LZB-0")
|
--error("Debug: "..id.." triggered LZB-0")
|
||||||
else
|
else
|
||||||
advtrains.speed.set_restriction(train, asptype, speed or -1)
|
train.speed_restriction = speed
|
||||||
train.is_shunt = shunt
|
train.is_shunt = shunt
|
||||||
end
|
end
|
||||||
--atdebug("train drove over IP: speed=",speed,"shunt=",shunt)
|
--atdebug("train drove over IP: speed=",speed,"shunt=",shunt)
|
||||||
|
@ -94,7 +94,6 @@ advtrains.tnc_register_on_approach(function(pos, id, train, index, has_entered,
|
||||||
end
|
end
|
||||||
-- nspd can now be: 1. !=0: new speed restriction, 2. =0: stop here or 3. nil: keep travspd
|
-- nspd can now be: 1. !=0: new speed restriction, 2. =0: stop here or 3. nil: keep travspd
|
||||||
if nspd then
|
if nspd then
|
||||||
travspd = nspd
|
|
||||||
if nspd == -1 then
|
if nspd == -1 then
|
||||||
travspd = nil
|
travspd = nil
|
||||||
else
|
else
|
||||||
|
@ -107,7 +106,7 @@ advtrains.tnc_register_on_approach(function(pos, id, train, index, has_entered,
|
||||||
lspd = travspd
|
lspd = travspd
|
||||||
|
|
||||||
local udata = {signal_pos = spos}
|
local udata = {signal_pos = spos}
|
||||||
local callback = get_over_function(lspd, travsht, asp.type)
|
local callback = get_over_function(lspd, travsht)
|
||||||
lzbdata.il_shunt = travsht
|
lzbdata.il_shunt = travsht
|
||||||
lzbdata.il_speed = travspd
|
lzbdata.il_speed = travspd
|
||||||
--atdebug("new lzbdata",lzbdata)
|
--atdebug("new lzbdata",lzbdata)
|
||||||
|
|
|
@ -133,11 +133,9 @@ function advtrains.interlocking.ars_check(sigd, train)
|
||||||
local tcbs = il.db.get_tcbs(sigd)
|
local tcbs = il.db.get_tcbs(sigd)
|
||||||
if not tcbs or not tcbs.routes then return end
|
if not tcbs or not tcbs.routes then return end
|
||||||
|
|
||||||
if tcbs.ars_disabled or tcbs.ars_ignore_next then
|
if tcbs.ars_disabled then
|
||||||
-- No-ARS mode of signal.
|
-- No-ARS mode of signal.
|
||||||
-- ignore...
|
-- ignore...
|
||||||
-- Note: ars_ignore_next is set by signalling formspec when route is cancelled
|
|
||||||
tcbs.ars_ignore_next = nil
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -634,28 +634,6 @@ function ildb.get_ip_by_signalpos(spos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function ildb.check_for_duplicate_ip(spos)
|
|
||||||
local main_ip_found = false
|
|
||||||
-- first pass: check for duplicates
|
|
||||||
for pts,tab in pairs(influence_points) do
|
|
||||||
for connid,pos in pairs(tab) do
|
|
||||||
if vector.equals(pos, spos) then
|
|
||||||
if main_ip_found then
|
|
||||||
atwarn("Signal at",spos,": Deleting duplicate signal influence point at",pts,"/",connid)
|
|
||||||
tab[connid] = nil
|
|
||||||
end
|
|
||||||
main_ip_found = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- second pass: delete empty tables
|
|
||||||
for pts,tab in pairs(influence_points) do
|
|
||||||
if not tab[1] and not tab[2] then -- only those two connids may exist
|
|
||||||
influence_points[pts] = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- clear signal assignment given the signal position
|
-- clear signal assignment given the signal position
|
||||||
function ildb.clear_ip_by_signalpos(spos)
|
function ildb.clear_ip_by_signalpos(spos)
|
||||||
local pts, connid = ildb.get_ip_by_signalpos(spos)
|
local pts, connid = ildb.get_ip_by_signalpos(spos)
|
||||||
|
|
|
@ -326,7 +326,6 @@ function advtrains.interlocking.show_ip_form(pos, pname, only_notset)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local form = "size[7,5]label[0.5,0.5;Signal at "..minetest.pos_to_string(pos).."]"
|
local form = "size[7,5]label[0.5,0.5;Signal at "..minetest.pos_to_string(pos).."]"
|
||||||
advtrains.interlocking.db.check_for_duplicate_ip(pos)
|
|
||||||
local pts, connid = advtrains.interlocking.db.get_ip_by_signalpos(pos)
|
local pts, connid = advtrains.interlocking.db.get_ip_by_signalpos(pos)
|
||||||
if pts then
|
if pts then
|
||||||
form = form.."label[0.5,1.5;Influence point is set at "..pts.."/"..connid.."]"
|
form = form.."label[0.5,1.5;Influence point is set at "..pts.."/"..connid.."]"
|
||||||
|
@ -429,7 +428,7 @@ function advtrains.interlocking.show_signal_aspect_selector(pname, p_suppasp, p_
|
||||||
}
|
}
|
||||||
local purpose = p_purpose or ""
|
local purpose = p_purpose or ""
|
||||||
|
|
||||||
local form = "size[7,7]label[0.5,0.5;Select Signal Aspect:]"
|
local form = "size[7,5]label[0.5,0.5;Select Signal Aspect:]"
|
||||||
form = form.."label[0.5,1;"..purpose.."]"
|
form = form.."label[0.5,1;"..purpose.."]"
|
||||||
|
|
||||||
form = form.."label[0.5,1.5;== Main Signal ==]"
|
form = form.."label[0.5,1.5;== Main Signal ==]"
|
||||||
|
@ -461,29 +460,8 @@ function advtrains.interlocking.show_signal_aspect_selector(pname, p_suppasp, p_
|
||||||
if isasp and isasp.shunt then st=2 end
|
if isasp and isasp.shunt then st=2 end
|
||||||
form = form.."dropdown[0.5,3.5;6;shunt_free;---,allowed;"..st.."]"
|
form = form.."dropdown[0.5,3.5;6;shunt_free;---,allowed;"..st.."]"
|
||||||
end
|
end
|
||||||
|
|
||||||
form = form.."label[0.5,4.5;== Distant Signal ==]"
|
form = form.."button_exit[0.5,4.5; 5,1;save;OK]"
|
||||||
local selid = 1
|
|
||||||
local entries = {}
|
|
||||||
for idx, spv in ipairs(suppasp.dst) do
|
|
||||||
local entry
|
|
||||||
if spv == 0 then
|
|
||||||
entry = "Expect to stop at the next signal"
|
|
||||||
elseif spv == -1 then
|
|
||||||
entry = "Expect to pass the next signal at maximum speed"
|
|
||||||
elseif not spv then
|
|
||||||
entry = "No info"
|
|
||||||
else
|
|
||||||
entry = string.format("Expect to pass the next signal at speed of %d", spv)
|
|
||||||
end
|
|
||||||
entries[idx] = idx.."| "..entry
|
|
||||||
if isasp and spv == (isasp.dst or false) then
|
|
||||||
selid = idx
|
|
||||||
end
|
|
||||||
end
|
|
||||||
form = form.."dropdown[0.5,5;6;dst;"..table.concat(entries, ",")..";"..selid.."]"
|
|
||||||
|
|
||||||
form = form.."button_exit[0.5,6;5,1;save;Save signal aspect]"
|
|
||||||
|
|
||||||
local token = advtrains.random_id()
|
local token = advtrains.random_id()
|
||||||
|
|
||||||
|
@ -521,11 +499,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if fields.save then
|
if fields.save then
|
||||||
local maini = ddindex(fields.main)
|
local maini = ddindex(fields.main)
|
||||||
if not maini then return end
|
if not maini then return end
|
||||||
local dsti = ddindex(fields.dst)
|
|
||||||
if not dsti then return end
|
|
||||||
local asp = {
|
local asp = {
|
||||||
main = psl.suppasp.main[maini],
|
main = psl.suppasp.main[maini],
|
||||||
dst = psl.suppasp.dst[dsti],
|
dst = false,
|
||||||
shunt = usebool(psl.suppasp.shunt, fields.shunt_free, "allowed"),
|
shunt = usebool(psl.suppasp.shunt, fields.shunt_free, "allowed"),
|
||||||
info = {}
|
info = {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,67 +0,0 @@
|
||||||
-- test the serialization function
|
|
||||||
|
|
||||||
|
|
||||||
package.path = "../?.lua;" .. package.path
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_G.advtrains = {}
|
|
||||||
_G.advtrains.interlocking = {}
|
|
||||||
|
|
||||||
require("ars")
|
|
||||||
|
|
||||||
local arstb = {{ ln="Foo"}, {c="Bar"}, {n=true, rc="Boo"}}
|
|
||||||
local arsdef = {{ ln="Foo"}, {c="Bar"}, {rc="Boo"}, default=true}
|
|
||||||
local arstr = [[LN Foo
|
|
||||||
#Bar
|
|
||||||
!RC Boo]]
|
|
||||||
local defstr = [[*
|
|
||||||
LN Foo
|
|
||||||
#Bar
|
|
||||||
RC Boo]]
|
|
||||||
il = _G.advtrains.interlocking
|
|
||||||
|
|
||||||
describe("ars_to_text", function ()
|
|
||||||
it("read table", function ()
|
|
||||||
assert.equals(il.ars_to_text(arstb),arstr)
|
|
||||||
end)
|
|
||||||
it("reads back and forth", function ()
|
|
||||||
assert.equals(il.ars_to_text(il.text_to_ars(arstr)),arstr)
|
|
||||||
end)
|
|
||||||
it("handles default routes properly", function ()
|
|
||||||
assert.equals(il.ars_to_text(arsdef),defstr)
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
|
|
||||||
describe("text_to_ars", function ()
|
|
||||||
it("writes table", function()
|
|
||||||
assert.same(il.text_to_ars(arstr),arstb)
|
|
||||||
end)
|
|
||||||
it("handles default routes properly", function ()
|
|
||||||
assert.same(il.text_to_ars(defstr),arsdef)
|
|
||||||
end)
|
|
||||||
end)
|
|
||||||
|
|
||||||
train1 = {}
|
|
||||||
train2 = {}
|
|
||||||
train3 = {}
|
|
||||||
train1.line = "Foo"
|
|
||||||
train1.routingcode = "Boo"
|
|
||||||
train2.line= "Bar"
|
|
||||||
train2.routingcode = "NotBoo NotBoo"
|
|
||||||
train3.routingcode = "Foo Boo Moo Zoo"
|
|
||||||
|
|
||||||
describe("check_rule_match", function ()
|
|
||||||
it("matches rules correctly", function()
|
|
||||||
assert.equals(il.ars_check_rule_match(arstb,train1),1)
|
|
||||||
assert.equals(il.ars_check_rule_match(arsdef,train2),nil)
|
|
||||||
end)
|
|
||||||
it("matches negative rules", function()
|
|
||||||
assert.equals(il.ars_check_rule_match(arstb,train2),3)
|
|
||||||
assert.equals(il.ars_check_rule_match(arstb,train3),nil)
|
|
||||||
end)
|
|
||||||
it("matches RC in a list correctly", function()
|
|
||||||
assert.equals(il.ars_check_rule_match(arsdef,train3),3)
|
|
||||||
end)
|
|
||||||
end)
|
|
|
@ -723,17 +723,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
connid = tonumber(connids)
|
connid = tonumber(connids)
|
||||||
if not connid or connid<1 or connid>2 then return end
|
if not connid or connid<1 or connid>2 then return end
|
||||||
end
|
end
|
||||||
if pos and connid then
|
if pos and connid and not fields.quit then
|
||||||
local sigd = {p=pos, s=connid}
|
local sigd = {p=pos, s=connid}
|
||||||
local tcbs = ildb.get_tcbs(sigd)
|
local tcbs = ildb.get_tcbs(sigd)
|
||||||
if not tcbs then return end
|
if not tcbs then return end
|
||||||
|
|
||||||
if fields.quit then
|
|
||||||
-- form quit: disable temporary ARS ignore
|
|
||||||
tcbs.ars_ignore_next = nil
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local sel_rte
|
local sel_rte
|
||||||
if fields.rtelist then
|
if fields.rtelist then
|
||||||
local tev = minetest.explode_textlist_event(fields.rtelist)
|
local tev = minetest.explode_textlist_event(fields.rtelist)
|
||||||
|
@ -746,7 +740,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
end
|
end
|
||||||
if tcbs.routeset and fields.cancelroute then
|
if tcbs.routeset and fields.cancelroute then
|
||||||
if tcbs.routes[tcbs.routeset] and tcbs.routes[tcbs.routeset].ars then
|
if tcbs.routes[tcbs.routeset] and tcbs.routes[tcbs.routeset].ars then
|
||||||
tcbs.ars_ignore_next = true
|
tcbs.ars_disabled = true
|
||||||
end
|
end
|
||||||
-- if route committed, cancel route ts info
|
-- if route committed, cancel route ts info
|
||||||
ilrs.update_route(sigd, tcbs, nil, true)
|
ilrs.update_route(sigd, tcbs, nil, true)
|
||||||
|
@ -755,7 +749,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if fields.newroute and hasprivs then
|
if fields.newroute and hasprivs then
|
||||||
advtrains.interlocking.init_route_prog(pname, sigd)
|
advtrains.interlocking.init_route_prog(pname, sigd)
|
||||||
minetest.close_formspec(pname, formname)
|
minetest.close_formspec(pname, formname)
|
||||||
tcbs.ars_ignore_next = nil
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if sel_rte and tcbs.routes[sel_rte] then
|
if sel_rte and tcbs.routes[sel_rte] then
|
||||||
|
|
11
mods/advtrains/advtrains_luaautomation/README.md
Executable file → Normal file
|
@ -260,8 +260,6 @@ There are several functions available especially for shunting operations. Some o
|
||||||
- `split_at_index(index, atc_command)`
|
- `split_at_index(index, atc_command)`
|
||||||
Splits the train at the specified index, into a train with index-1 wagons and a second train starting with the index-th wagon. The `atc_command` specified is sent to the second train after decoupling. `"S0"` or `"B0"` is common to ensure any locomotives in the remaining train don't continue to move.
|
Splits the train at the specified index, into a train with index-1 wagons and a second train starting with the index-th wagon. The `atc_command` specified is sent to the second train after decoupling. `"S0"` or `"B0"` is common to ensure any locomotives in the remaining train don't continue to move.
|
||||||
|
|
||||||
`index` must be more than 1 to avoid trying to decouple the very front of a train.
|
|
||||||
|
|
||||||
Example: train has wagons `"foo","foo","foo","bar","bar","bar"`
|
Example: train has wagons `"foo","foo","foo","bar","bar","bar"`
|
||||||
Command: `split_at_index(4,"S0")`
|
Command: `split_at_index(4,"S0")`
|
||||||
Result: first train (continues at previous speed): `"foo","foo","foo"`, second train (slows at S0): `"bar","bar","bar"`
|
Result: first train (continues at previous speed): `"foo","foo","foo"`, second train (slows at S0): `"bar","bar","bar"`
|
||||||
|
@ -314,16 +312,13 @@ Deprecated:
|
||||||
|
|
||||||
|
|
||||||
#### Interlocking
|
#### Interlocking
|
||||||
These additional functions are available when advtrains_interlocking is enabled:
|
This additional function is available when advtrains_interlocking is enabled:
|
||||||
|
|
||||||
- `atc_set_ars_disable(boolean)`
|
- `atc_set_disable_ars(boolean)`
|
||||||
Disables (true) or enables (false) the use of ARS for this train. The train will not trigger ARS (automatic route setting) on signals then.
|
Disables (true) or enables (false) the use of ARS for this train. The train will not trigger ARS (automatic route setting) on signals then.
|
||||||
|
|
||||||
Note: If you want to disable ARS from an approach callback, the call to `atc_set_ars_disable(true)` *must* happen during the approach callback, and may not be deferred to an interrupt(). Else the train might trigger an ARS before the interrupt fires.
|
Note: If you want to disable ARS from an approach callback, the call to `atc_set_disable_ars(true)` *must* happen during the approach callback, and may not be deferred to an interrupt(). Else the train might trigger an ARS before the interrupt fires.
|
||||||
|
|
||||||
- `section_occupancy(section_id)`
|
|
||||||
Returns a table of train ids for the specified section, nil if no section id is provided, false if the section id is invalid, an empty table if the section id is valid but empty of trains.
|
|
||||||
|
|
||||||
#### Approach callbacks
|
#### Approach callbacks
|
||||||
The LuaATC interface provides a way to hook into the approach callback system, which is for example used in the TSR rails (provided by advtrains_interlocking) or the station tracks (provided by advtrains_lines). However, for compatibility reasons, this behavior needs to be explicitly enabled.
|
The LuaATC interface provides a way to hook into the approach callback system, which is for example used in the TSR rails (provided by advtrains_interlocking) or the station tracks (provided by advtrains_lines). However, for compatibility reasons, this behavior needs to be explicitly enabled.
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ end
|
||||||
function ac.after_place_node(pos, player)
|
function ac.after_place_node(pos, player)
|
||||||
local meta=minetest.get_meta(pos)
|
local meta=minetest.get_meta(pos)
|
||||||
meta:set_string("formspec", ac.getform(pos, meta))
|
meta:set_string("formspec", ac.getform(pos, meta))
|
||||||
meta:set_string("infotext", "LuaATC component, unconfigured.")
|
meta:set_string("infotext", "LuaAutomation component, unconfigured.")
|
||||||
local ph=minetest.pos_to_string(pos)
|
local ph=minetest.pos_to_string(pos)
|
||||||
--just get first available key!
|
--just get first available key!
|
||||||
for en,_ in pairs(atlatc.envs) do
|
for en,_ in pairs(atlatc.envs) do
|
||||||
|
@ -48,7 +48,7 @@ function ac.getform(pos, meta_p)
|
||||||
.."button[5,0.2;2,1;save;Save]"
|
.."button[5,0.2;2,1;save;Save]"
|
||||||
.."button[7,0.2;3,1;cle;Clear Local Env.]"
|
.."button[7,0.2;3,1;cle;Clear Local Env.]"
|
||||||
.."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;Code;"..minetest.formspec_escape(code).."]"
|
.."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;Code;"..minetest.formspec_escape(code).."]"
|
||||||
.."label["..atlatc.CODE_FORM_ERRLABELPOS..";"..err.."]"
|
.."label[0,9.7;"..err.."]"
|
||||||
return form
|
return form
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -91,17 +91,17 @@ function ac.on_receive_fields(pos, formname, fields, player)
|
||||||
|
|
||||||
meta:set_string("formspec", ac.getform(pos, meta))
|
meta:set_string("formspec", ac.getform(pos, meta))
|
||||||
if nodetbl.env then
|
if nodetbl.env then
|
||||||
meta:set_string("infotext", "LuaATC component, assigned to environment '"..nodetbl.env.."'")
|
meta:set_string("infotext", "LuaAutomation component, assigned to environment '"..nodetbl.env.."'")
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", "LuaATC component, invalid enviroment set!")
|
meta:set_string("infotext", "LuaAutomation component, invalid enviroment set!")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function ac.run_in_env(pos, evtdata, customfct_p, ignore_no_code)
|
function ac.run_in_env(pos, evtdata, customfct_p)
|
||||||
local ph=minetest.pos_to_string(pos)
|
local ph=minetest.pos_to_string(pos)
|
||||||
local nodetbl = ac.nodes[ph]
|
local nodetbl = ac.nodes[ph]
|
||||||
if not nodetbl then
|
if not nodetbl then
|
||||||
atwarn("LuaATC component at",ph,": Data not in memory! Please visit component and click 'Save'!")
|
atwarn("LuaAutomation component at",ph,": Data not in memory! Please visit component and click 'Save'!")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -111,14 +111,12 @@ function ac.run_in_env(pos, evtdata, customfct_p, ignore_no_code)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not nodetbl.env or not atlatc.envs[nodetbl.env] then
|
if not nodetbl.env or not atlatc.envs[nodetbl.env] then
|
||||||
atwarn("LuaATC component at",ph,": Not an existing environment: "..(nodetbl.env or "<nil>"))
|
atwarn("LuaAutomation component at",ph,": Not an existing environment: "..(nodetbl.env or "<nil>"))
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local env = atlatc.envs[nodetbl.env]
|
local env = atlatc.envs[nodetbl.env]
|
||||||
if not nodetbl.code or nodetbl.code=="" then
|
if not nodetbl.code or nodetbl.code=="" then
|
||||||
if not ignore_no_code then
|
env:log("warning", "LuaAutomation component at",ph,": No code to run! (insert -- to suppress warning)")
|
||||||
env:log("warning", "LuaATC component at",ph,": No code to run! (insert -- to suppress warning)")
|
|
||||||
end
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ function r.fire_event(pos, evtdata, appr_internal)
|
||||||
local railtbl = atlatc.active.nodes[ph]
|
local railtbl = atlatc.active.nodes[ph]
|
||||||
|
|
||||||
if not railtbl then
|
if not railtbl then
|
||||||
atwarn("LuaATC interface rail at",ph,": Data not in memory! Please visit position and click 'Save'!")
|
atwarn("LuaAutomation ATC interface rail at",ph,": Data not in memory! Please visit position and click 'Save'!")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ function r.fire_event(pos, evtdata, appr_internal)
|
||||||
split_at_index = function(index, cmd)
|
split_at_index = function(index, cmd)
|
||||||
if not train_id then return false end
|
if not train_id then return false end
|
||||||
assertt(cmd, "string")
|
assertt(cmd, "string")
|
||||||
if type(index) ~= "number" or index < 2 then
|
if type(index) ~= "number" then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
local new_id = advtrains.split_train_at_index(train, index)
|
local new_id = advtrains.split_train_at_index(train, index)
|
||||||
|
@ -130,8 +130,9 @@ function r.fire_event(pos, evtdata, appr_internal)
|
||||||
get_rc = function()
|
get_rc = function()
|
||||||
return train.routingcode
|
return train.routingcode
|
||||||
end,
|
end,
|
||||||
atc_reset = function()
|
atc_reset = function(cmd)
|
||||||
if not train_id then return false end
|
if not train_id then return false end
|
||||||
|
assertt(cmd, "string")
|
||||||
advtrains.atc.train_reset_command(train)
|
advtrains.atc.train_reset_command(train)
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
@ -187,7 +188,7 @@ advtrains.register_tracks("default", {
|
||||||
models_prefix="advtrains_dtrack",
|
models_prefix="advtrains_dtrack",
|
||||||
models_suffix=".b3d",
|
models_suffix=".b3d",
|
||||||
shared_texture="advtrains_dtrack_shared_atc.png",
|
shared_texture="advtrains_dtrack_shared_atc.png",
|
||||||
description=atltrans("LuaATC Rail"),
|
description=atltrans("LuaAutomation ATC Rail"),
|
||||||
formats={},
|
formats={},
|
||||||
get_additional_definiton = function(def, preset, suffix, rotation)
|
get_additional_definiton = function(def, preset, suffix, rotation)
|
||||||
return {
|
return {
|
||||||
|
|
14
mods/advtrains/advtrains_luaautomation/environment.lua
Executable file → Normal file
|
@ -150,7 +150,7 @@ local static_env = {
|
||||||
--interrupts are handled per node, position unknown. (same goes for digilines)
|
--interrupts are handled per node, position unknown. (same goes for digilines)
|
||||||
--however external interrupts can be set here.
|
--however external interrupts can be set here.
|
||||||
interrupt_pos = function(parpos, imesg)
|
interrupt_pos = function(parpos, imesg)
|
||||||
local pos=atlatc.pcnaming.resolve_pos(parpos, "interrupt_pos")
|
local pos=atlatc.pcnaming.resolve_pos(parpos)
|
||||||
atlatc.interrupt.add(0, pos, {type="ext_int", ext_int=true, message=imesg})
|
atlatc.interrupt.add(0, pos, {type="ext_int", ext_int=true, message=imesg})
|
||||||
end,
|
end,
|
||||||
-- sends an atc command to train regardless of where it is in the world
|
-- sends an atc command to train regardless of where it is in the world
|
||||||
|
@ -223,18 +223,6 @@ if advtrains.interlocking then
|
||||||
local pos = atlatc.pcnaming.resolve_pos(signal)
|
local pos = atlatc.pcnaming.resolve_pos(signal)
|
||||||
return advtrains.interlocking.signal_set_aspect(pos)
|
return advtrains.interlocking.signal_set_aspect(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
--section_occupancy()
|
|
||||||
static_env.section_occupancy = function(ts_id)
|
|
||||||
if not ts_id then return nil end
|
|
||||||
ts_id = tostring(ts_id)
|
|
||||||
local response = advtrains.interlocking.db.get_ts(ts_id)
|
|
||||||
if response == nil then
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
return response.trains
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Lines-specific:
|
-- Lines-specific:
|
||||||
|
|
|
@ -14,8 +14,6 @@ minetest.register_privilege("atlatc", { description = "Player can place and modi
|
||||||
|
|
||||||
--Size of code input forms in X,Y notation. Must be at least 10x10
|
--Size of code input forms in X,Y notation. Must be at least 10x10
|
||||||
atlatc.CODE_FORM_SIZE = "15,12"
|
atlatc.CODE_FORM_SIZE = "15,12"
|
||||||
--Position of Error Label in Code Form
|
|
||||||
atlatc.CODE_FORM_ERRLABELPOS = "0,12"
|
|
||||||
|
|
||||||
--assertt helper. error if a variable is not of a type
|
--assertt helper. error if a variable is not of a type
|
||||||
function assertt(var, typ)
|
function assertt(var, typ)
|
||||||
|
@ -33,9 +31,6 @@ dofile(mp.."/interrupt.lua")
|
||||||
dofile(mp.."/active_common.lua")
|
dofile(mp.."/active_common.lua")
|
||||||
dofile(mp.."/atc_rail.lua")
|
dofile(mp.."/atc_rail.lua")
|
||||||
dofile(mp.."/operation_panel.lua")
|
dofile(mp.."/operation_panel.lua")
|
||||||
if mesecon then
|
|
||||||
dofile(mp.."/mesecon_controller.lua")
|
|
||||||
end
|
|
||||||
dofile(mp.."/pcnaming.lua")
|
dofile(mp.."/pcnaming.lua")
|
||||||
|
|
||||||
dofile(mp.."/chatcmds.lua")
|
dofile(mp.."/chatcmds.lua")
|
||||||
|
|
|
@ -1,259 +0,0 @@
|
||||||
-- mesecon_controller.lua
|
|
||||||
-- Mesecon-interfaceable Operation Panel alternative
|
|
||||||
-- Looks like a Mesecon Luacontroller
|
|
||||||
|
|
||||||
-- Luacontroller Adapted Code
|
|
||||||
-- From Mesecons mod https://mesecons.net/
|
|
||||||
-- (c) Jeija and Contributors
|
|
||||||
|
|
||||||
local BASENAME = "advtrains_luaautomation:mesecon_controller"
|
|
||||||
|
|
||||||
local rules = {
|
|
||||||
a = {x = -1, y = 0, z = 0, name="A"},
|
|
||||||
b = {x = 0, y = 0, z = 1, name="B"},
|
|
||||||
c = {x = 1, y = 0, z = 0, name="C"},
|
|
||||||
d = {x = 0, y = 0, z = -1, name="D"},
|
|
||||||
}
|
|
||||||
|
|
||||||
local function generate_name(ports)
|
|
||||||
local d = ports.d and 1 or 0
|
|
||||||
local c = ports.c and 1 or 0
|
|
||||||
local b = ports.b and 1 or 0
|
|
||||||
local a = ports.a and 1 or 0
|
|
||||||
return BASENAME..d..c..b..a
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
local function set_port(pos, rule, state)
|
|
||||||
if state then
|
|
||||||
mesecon.receptor_on(pos, {rule})
|
|
||||||
else
|
|
||||||
mesecon.receptor_off(pos, {rule})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function clean_port_states(ports)
|
|
||||||
ports.a = ports.a and true or false
|
|
||||||
ports.b = ports.b and true or false
|
|
||||||
ports.c = ports.c and true or false
|
|
||||||
ports.d = ports.d and true or false
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Local table for storing which Mesecons off events should be ignored
|
|
||||||
-- Indexed by hex encoded position
|
|
||||||
local ignored_off_events = {}
|
|
||||||
|
|
||||||
local function set_port_states(pos, ports)
|
|
||||||
local node = advtrains.ndb.get_node(pos)
|
|
||||||
local name = node.name
|
|
||||||
clean_port_states(ports)
|
|
||||||
local vports = minetest.registered_nodes[name].virtual_portstates
|
|
||||||
local new_name = generate_name(ports)
|
|
||||||
|
|
||||||
if name ~= new_name and vports then
|
|
||||||
-- Problem:
|
|
||||||
-- We need to place the new node first so that when turning
|
|
||||||
-- off some port, it won't stay on because the rules indicate
|
|
||||||
-- there is an onstate output port there.
|
|
||||||
-- When turning the output off then, it will however cause feedback
|
|
||||||
-- so that the luacontroller will receive an "off" event by turning
|
|
||||||
-- its output off.
|
|
||||||
-- Solution / Workaround:
|
|
||||||
-- Remember which output was turned off and ignore next "off" event.
|
|
||||||
local ph=minetest.pos_to_string(pos)
|
|
||||||
local railtbl = atlatc.active.nodes[ph]
|
|
||||||
if not railtbl then return end
|
|
||||||
|
|
||||||
local ign = railtbl.ignored_off_events or {}
|
|
||||||
if ports.a and not vports.a and not mesecon.is_powered(pos, rules.a) then ign.A = true end
|
|
||||||
if ports.b and not vports.b and not mesecon.is_powered(pos, rules.b) then ign.B = true end
|
|
||||||
if ports.c and not vports.c and not mesecon.is_powered(pos, rules.c) then ign.C = true end
|
|
||||||
if ports.d and not vports.d and not mesecon.is_powered(pos, rules.d) then ign.D = true end
|
|
||||||
railtbl.ignored_off_events = ign
|
|
||||||
|
|
||||||
advtrains.ndb.swap_node(pos, {name = new_name, param2 = node.param2})
|
|
||||||
|
|
||||||
-- Apply mesecon state only if node loaded
|
|
||||||
-- If node is not loaded, mesecon update will occur on next load via on_updated_from_nodedb
|
|
||||||
if advtrains.is_node_loaded(pos) then
|
|
||||||
if ports.a ~= vports.a then set_port(pos, rules.a, ports.a) end
|
|
||||||
if ports.b ~= vports.b then set_port(pos, rules.b, ports.b) end
|
|
||||||
if ports.c ~= vports.c then set_port(pos, rules.c, ports.c) end
|
|
||||||
if ports.d ~= vports.d then set_port(pos, rules.d, ports.d) end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function on_updated_from_nodedb(pos, newnode, oldnode)
|
|
||||||
-- Switch appropriate Mesecon receptors depending on the node change
|
|
||||||
local vports = minetest.registered_nodes[oldnode.name].virtual_portstates
|
|
||||||
local ports = minetest.registered_nodes[newnode.name].virtual_portstates
|
|
||||||
if ports.a ~= vports.a then set_port(pos, rules.a, ports.a) end
|
|
||||||
if ports.b ~= vports.b then set_port(pos, rules.b, ports.b) end
|
|
||||||
if ports.c ~= vports.c then set_port(pos, rules.c, ports.c) end
|
|
||||||
if ports.d ~= vports.d then set_port(pos, rules.d, ports.d) end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function ignore_offevent(pos, rule)
|
|
||||||
local ph=minetest.pos_to_string(pos)
|
|
||||||
local railtbl = atlatc.active.nodes[ph]
|
|
||||||
if not railtbl then return nil end
|
|
||||||
local ign = railtbl.ignored_off_events
|
|
||||||
if ign and ign[rule.name] then
|
|
||||||
ign[rule.name] = nil
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local valid_ports = {a=true, b=true, c=true, d=true}
|
|
||||||
|
|
||||||
local function fire_event(pos, evtdata)
|
|
||||||
local customfct={
|
|
||||||
set_mesecon_outputs = function(states)
|
|
||||||
assertt(states, "table")
|
|
||||||
set_port_states(pos, states)
|
|
||||||
end,
|
|
||||||
get_mesecon_input = function(port)
|
|
||||||
local portl = string.lower(port)
|
|
||||||
if not valid_ports[portl] then
|
|
||||||
error("get_mesecon_input: Invalid port (expected a,b,c,d)")
|
|
||||||
end
|
|
||||||
if mesecon.is_powered(pos, rules[portl]) then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
atlatc.active.run_in_env(pos, evtdata, customfct, true)
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
local output_rules = {}
|
|
||||||
local input_rules = {}
|
|
||||||
|
|
||||||
local node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, -- Bottom slab
|
|
||||||
{-5/16, -7/16, -5/16, 5/16, -6/16, 5/16}, -- Circuit board
|
|
||||||
{-3/16, -6/16, -3/16, 3/16, -5/16, 3/16}, -- IC
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
local selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = { -8/16, -8/16, -8/16, 8/16, -5/16, 8/16 },
|
|
||||||
}
|
|
||||||
|
|
||||||
for a = 0, 1 do -- 0 = off 1 = on
|
|
||||||
for b = 0, 1 do
|
|
||||||
for c = 0, 1 do
|
|
||||||
for d = 0, 1 do
|
|
||||||
local cid = tostring(d)..tostring(c)..tostring(b)..tostring(a)
|
|
||||||
local node_name = BASENAME..cid
|
|
||||||
local top = "atlatc_luacontroller_top.png"
|
|
||||||
if a == 1 then
|
|
||||||
top = top.."^atlatc_luacontroller_LED_A.png"
|
|
||||||
end
|
|
||||||
if b == 1 then
|
|
||||||
top = top.."^atlatc_luacontroller_LED_B.png"
|
|
||||||
end
|
|
||||||
if c == 1 then
|
|
||||||
top = top.."^atlatc_luacontroller_LED_C.png"
|
|
||||||
end
|
|
||||||
if d == 1 then
|
|
||||||
top = top.."^atlatc_luacontroller_LED_D.png"
|
|
||||||
end
|
|
||||||
|
|
||||||
local groups
|
|
||||||
if a + b + c + d ~= 0 then
|
|
||||||
groups = {dig_immediate=2, not_in_creative_inventory=1, save_in_at_nodedb=1}
|
|
||||||
else
|
|
||||||
groups = {dig_immediate=2, save_in_at_nodedb=1}
|
|
||||||
end
|
|
||||||
|
|
||||||
output_rules[cid] = {}
|
|
||||||
input_rules[cid] = {}
|
|
||||||
if a == 1 then table.insert(output_rules[cid], rules.a) end
|
|
||||||
if b == 1 then table.insert(output_rules[cid], rules.b) end
|
|
||||||
if c == 1 then table.insert(output_rules[cid], rules.c) end
|
|
||||||
if d == 1 then table.insert(output_rules[cid], rules.d) end
|
|
||||||
|
|
||||||
if a == 0 then table.insert( input_rules[cid], rules.a) end
|
|
||||||
if b == 0 then table.insert( input_rules[cid], rules.b) end
|
|
||||||
if c == 0 then table.insert( input_rules[cid], rules.c) end
|
|
||||||
if d == 0 then table.insert( input_rules[cid], rules.d) end
|
|
||||||
|
|
||||||
local mesecons = {
|
|
||||||
effector = {
|
|
||||||
rules = input_rules[cid],
|
|
||||||
action_change = function (pos, _, rule_name, new_state)
|
|
||||||
if new_state == "off" then
|
|
||||||
-- check for ignored off event on this node
|
|
||||||
if ignore_offevent(pos, rule_name) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
--Note: rule_name is not a *name* but actually the full rule table (position + name field)
|
|
||||||
--Event format consistent with Mesecons Luacontroller event
|
|
||||||
atlatc.interrupt.add(0, pos, {type=new_state, [new_state]=true, pin=rule_name})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
receptor = {
|
|
||||||
state = mesecon.state.on,
|
|
||||||
rules = output_rules[cid]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.register_node(node_name, {
|
|
||||||
description = "LuaATC Mesecon Controller",
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = {
|
|
||||||
top,
|
|
||||||
"atlatc_luacontroller_bottom.png",
|
|
||||||
"atlatc_luacontroller_sides.png",
|
|
||||||
"atlatc_luacontroller_sides.png",
|
|
||||||
"atlatc_luacontroller_sides.png",
|
|
||||||
"atlatc_luacontroller_sides.png"
|
|
||||||
},
|
|
||||||
inventory_image = top,
|
|
||||||
paramtype = "light",
|
|
||||||
is_ground_content = false,
|
|
||||||
groups = groups,
|
|
||||||
drop = BASENAME.."0000",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
selection_box = selection_box,
|
|
||||||
node_box = node_box,
|
|
||||||
mesecons = mesecons,
|
|
||||||
-- Virtual portstates are the ports that
|
|
||||||
-- the node shows as powered up (light up).
|
|
||||||
virtual_portstates = {
|
|
||||||
a = a == 1,
|
|
||||||
b = b == 1,
|
|
||||||
c = c == 1,
|
|
||||||
d = d == 1,
|
|
||||||
},
|
|
||||||
after_dig_node = function (pos, node, player)
|
|
||||||
mesecon.receptor_off(pos, output_rules)
|
|
||||||
atlatc.active.after_dig_node(pos, node, player)
|
|
||||||
end,
|
|
||||||
after_place_node = atlatc.active.after_place_node,
|
|
||||||
on_receive_fields = atlatc.active.on_receive_fields,
|
|
||||||
advtrains = {
|
|
||||||
on_updated_from_nodedb = on_updated_from_nodedb
|
|
||||||
},
|
|
||||||
luaautomation = {
|
|
||||||
fire_event=fire_event
|
|
||||||
},
|
|
||||||
digiline = {
|
|
||||||
receptor = {},
|
|
||||||
effector = {
|
|
||||||
action = atlatc.active.on_digiline_receive
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -7,7 +7,7 @@ end
|
||||||
minetest.register_node("advtrains_luaautomation:oppanel", {
|
minetest.register_node("advtrains_luaautomation:oppanel", {
|
||||||
drawtype = "normal",
|
drawtype = "normal",
|
||||||
tiles={"atlatc_oppanel.png"},
|
tiles={"atlatc_oppanel.png"},
|
||||||
description = "LuaATC operation panel",
|
description = "LuaAutomation operation panel",
|
||||||
groups = {
|
groups = {
|
||||||
cracky = 1,
|
cracky = 1,
|
||||||
save_in_at_nodedb=1,
|
save_in_at_nodedb=1,
|
||||||
|
|
|
@ -44,12 +44,7 @@ minetest.register_craftitem("advtrains_luaautomation:pcnaming",{
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local node = advtrains.ndb.get_node(pos)
|
local node = advtrains.ndb.get_node(pos)
|
||||||
local ndef = minetest.registered_nodes[node.name]
|
if node.name and (minetest.get_item_group(node.name, "advtrains_signal")>0 or advtrains.is_passive(pos)) then
|
||||||
if node.name and (
|
|
||||||
minetest.get_item_group(node.name, "advtrains_signal")>0 --is IL signal
|
|
||||||
or advtrains.is_passive(pos) -- is passive component
|
|
||||||
or (ndef and ndef.luaautomation) -- is active component
|
|
||||||
) then
|
|
||||||
--look if this one already has a name
|
--look if this one already has a name
|
||||||
local pn=""
|
local pn=""
|
||||||
for name, npos in pairs(atlatc.pcnaming.name_map) do
|
for name, npos in pairs(atlatc.pcnaming.name_map) do
|
||||||
|
|
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 222 B |
Before Width: | Height: | Size: 504 B |
Before Width: | Height: | Size: 8.2 KiB |
|
@ -1,52 +0,0 @@
|
||||||
% advtrains_signals_ks(7advtrains) | Advtrains User Guide
|
|
||||||
|
|
||||||
# NAME
|
|
||||||
`advtrains_signals_ks` - Ks signals for advtrains
|
|
||||||
|
|
||||||
# DESCRIPTION
|
|
||||||
|
|
||||||
This mod includes a modified subset of German rail signals. This page documents the signals implemented by this mod and some differences between this mod and German signals used in real life.
|
|
||||||
|
|
||||||
# SIGNAL ASPECTS
|
|
||||||
|
|
||||||
This section mainly describes the different signal aspects. Please note that the meaning of some signal aspects may differ from their RL counterparts, and that the differences documented in the following section are not comprehensive.
|
|
||||||
|
|
||||||
Due to historical reasons, "ex-DB" and "ex-DR" are used to refer to the former Deutsche Bundesbahn (West Germany) and the former Deutsche Reichsbahn (East Germany), respectively.
|
|
||||||
|
|
||||||
## Ks signals
|
|
||||||
The Ks signals are used like most other signals in advtrains. It has the following aspects:
|
|
||||||
|
|
||||||
* Hp 0 (red light): Stop
|
|
||||||
* Ks 1 (green light): Proceed at maximum speed or with the speed limit shown on the Zs 3 indicator directly above the signal (if present) and expect to proceed the next main signal at maximum speed or, if the green light is flashing, with the speed limit shown on the Zs 3v indicator directly below the signal
|
|
||||||
* Ks 2 (yellow light): Proceed at maximum speed or with the speed limit shown on the Zs 3 indicator directly above the signal (if present) and expect to stop in front of the next main signal.
|
|
||||||
|
|
||||||
In addition, Sh 1 (see below) may also appear with Hp 0, in which case the train continues in shunt mode.
|
|
||||||
|
|
||||||
## Shunt signals
|
|
||||||
Shunt signals are labeled "Ks Shunting signal" in-game. It has the following aspects:
|
|
||||||
|
|
||||||
* Sh 0 (two horizontally aligned red lights): Stop
|
|
||||||
* Sh 1/(ex-DR) Ra 12 (two white lights aligned on a slanted line): shunting allowed
|
|
||||||
|
|
||||||
## Signal signs
|
|
||||||
There are a few signal signs provided by this mod:
|
|
||||||
|
|
||||||
* Zs 3 (white number on a black background): Proceed with the permanent speed limit shown on the sign
|
|
||||||
* Zs 10 (an sign shaped like an upward-pointing arrow): The speed limit previously set by Zs 3 is lifted
|
|
||||||
* Lf 1/2 (black number on an orange background): Proceed with the temporary speed limit shown on the sign
|
|
||||||
* Lf 3 (black letter "E" on a white background): The temporary speed limit previously set by Lf 1/2 is lifted
|
|
||||||
* Lf 7 (black number on a white background): Proceed with the line speed limit shown on the sign
|
|
||||||
* Ra 10 (the black text "Halt für Rangierfahrten" on a white semicircle): Do not proceed if in shunt mode
|
|
||||||
* Proceed as main ("PAM", in-game only) ("S" below a green arrow): Proceed without shunt mode
|
|
||||||
|
|
||||||
# DIFFERENCES FROM REAL-LIFE SIGNALING
|
|
||||||
|
|
||||||
[This document](https://www.bahnstatistik.de/Signale_pdf/SB-DBAG.pdf) is used for reference,
|
|
||||||
|
|
||||||
* The speed is indicated in m/s instead of multiples of 10km/h.
|
|
||||||
* Due to the potentially large number of nodes, only certain hard-coded values are allowed.
|
|
||||||
* Certain visual effects, such as making signal signs reflective or lit at night, are not implemented.
|
|
||||||
* Distant signaling is not yet implemented.
|
|
||||||
* The location of most signals are not checked. The location of Zs 3 and Zs 3v are only checked relative to the location of the main (Ks) signal.
|
|
||||||
* The "shunt signals" in this mod are actually known as "Schutzsignale". The word "Rangiersignale" refers to a different set of signals (including acoustic signals) given by the person specifically responsible for train shunting.
|
|
||||||
* The ex-DB definition of Sh 1 ("Fahrverbot aufgehoben") is that the track section ahead is clear and does not imply that the driver is allowed to proceed.
|
|
|
@ -4,78 +4,28 @@
|
||||||
-- Note that the group value of advtrains_signal is 2, which means "step 2 of signal capabilities"
|
-- Note that the group value of advtrains_signal is 2, which means "step 2 of signal capabilities"
|
||||||
-- advtrains_signal=1 is meant for signals that do not implement set_aspect.
|
-- advtrains_signal=1 is meant for signals that do not implement set_aspect.
|
||||||
|
|
||||||
local function asp_to_zs3type(asp)
|
|
||||||
local n = tonumber(asp)
|
|
||||||
if not n or n < 4 then return "off" end
|
|
||||||
if n < 8 then return 2*math.floor(n/2) end
|
|
||||||
return math.min(16,4*math.floor(n/4))
|
|
||||||
end
|
|
||||||
|
|
||||||
local function setzs3(msp, lim, rot)
|
|
||||||
local pos = {x = msp.x, y = msp.y+1, z = msp.z}
|
|
||||||
local node = advtrains.ndb.get_node(pos)
|
|
||||||
local asp = asp_to_zs3type(lim)
|
|
||||||
if node.name:find("^advtrains_signals_ks:zs3_") then
|
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:zs3_"..asp.."_"..rot, param2 = node.param2})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function getzs3(msp)
|
|
||||||
local pos = {x = msp.x, y = msp.y+1, z = msp.z}
|
|
||||||
local nodename = advtrains.ndb.get_node(pos).name
|
|
||||||
local speed = nodename:match("^advtrains_signals_ks:zs3_(%w+)_%d+$")
|
|
||||||
if not speed then return nil end
|
|
||||||
speed = tonumber(speed)
|
|
||||||
if not speed then return false end
|
|
||||||
return speed
|
|
||||||
end
|
|
||||||
|
|
||||||
local function setzs3v(msp, lim, rot)
|
|
||||||
local pos = {x = msp.x, y = msp.y-1, z = msp.z}
|
|
||||||
local node = advtrains.ndb.get_node(pos)
|
|
||||||
local asp = asp_to_zs3type(lim)
|
|
||||||
if node.name:find("^advtrains_signals_ks:zs3v_") then
|
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:zs3v_"..asp.."_"..rot, param2 = node.param2})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function getzs3v(msp)
|
|
||||||
local pos = {x = msp.x, y = msp.y-1, z = msp.z}
|
|
||||||
local nodename = advtrains.ndb.get_node(pos).name
|
|
||||||
local speed = nodename:match("^advtrains_signals_ks:zs3v_(%w+)_%d+$")
|
|
||||||
if not speed then return nil end
|
|
||||||
speed = tonumber(speed)
|
|
||||||
if not speed then return false end
|
|
||||||
return speed
|
|
||||||
end
|
|
||||||
|
|
||||||
local setaspectf = function(rot)
|
local setaspectf = function(rot)
|
||||||
return function(pos, node, asp)
|
return function(pos, node, asp)
|
||||||
setzs3(pos, asp.main, rot)
|
|
||||||
if asp.main == 0 then
|
if asp.main == 0 then
|
||||||
if asp.shunt then
|
if asp.shunt then
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_shunt_"..rot, param2 = node.param2})
|
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_shunt_"..rot, param2 = node.param2})
|
||||||
else
|
else
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_danger_"..rot, param2 = node.param2})
|
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_danger_"..rot, param2 = node.param2})
|
||||||
end
|
end
|
||||||
setzs3v(pos, nil, rot)
|
|
||||||
else
|
else
|
||||||
if not asp.dst or asp.dst == -1 then
|
if asp.dst ~= 0 and asp.main == -1 then
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_free_"..rot, param2 = node.param2})
|
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_free_"..rot, param2 = node.param2})
|
||||||
elseif asp.dst == 0 then
|
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_slow_"..rot, param2 = node.param2})
|
|
||||||
else
|
else
|
||||||
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_nextslow_"..rot, param2 = node.param2})
|
advtrains.ndb.swap_node(pos, {name="advtrains_signals_ks:hs_slow_"..rot, param2 = node.param2})
|
||||||
end
|
end
|
||||||
setzs3v(pos, asp.dst, rot)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local suppasp = {
|
local suppasp = {
|
||||||
main = {0, 4, 6, 8, 12, 16, -1},
|
main = {0, 6, -1},
|
||||||
dst = {0, 4, 6, 8, 12, 16, -1, false},
|
dst = {0, false},
|
||||||
shunt = nil,
|
shunt = nil,
|
||||||
proceed_as_main = true,
|
proceed_as_main = true,
|
||||||
info = {
|
info = {
|
||||||
|
@ -116,10 +66,6 @@ local suppasp_ra = {
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:hs")
|
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:hs")
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:ra")
|
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:ra")
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:sign")
|
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:sign")
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:sign_lf")
|
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:sign_lf7")
|
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:zs3")
|
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:zs3v")
|
|
||||||
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:mast")
|
advtrains.trackplacer.register_tracktype("advtrains_signals_ks:mast")
|
||||||
|
|
||||||
for _, rtab in ipairs({
|
for _, rtab in ipairs({
|
||||||
|
@ -130,48 +76,16 @@ for _, rtab in ipairs({
|
||||||
}) do
|
}) do
|
||||||
local rot = rtab.rot
|
local rot = rtab.rot
|
||||||
for typ, prts in pairs({
|
for typ, prts in pairs({
|
||||||
danger = {asp = advtrains.interlocking.DANGER, n = "slow", ici=true},
|
danger = {asp = advtrains.interlocking.DANGER, n = "slow", ici=true},
|
||||||
slow = {
|
slow = {asp = { main = 6, proceed_as_main = true} , n = "free"},
|
||||||
asp = function(pos)
|
free = {asp = { main = -1, proceed_as_main = true} , n = "shunt"},
|
||||||
return { main = getzs3(pos) or -1, proceed_as_main = true, dst = 0 }
|
shunt = {asp = { main = 0, shunt = true} , n = "danger"},
|
||||||
end,
|
|
||||||
n = "nextslow"
|
|
||||||
},
|
|
||||||
nextslow = {
|
|
||||||
asp = function(pos)
|
|
||||||
return { main = getzs3(pos) or -1, proceed_as_main = true, dst = getzs3v(pos) or 6 }
|
|
||||||
end,
|
|
||||||
n = "free"
|
|
||||||
},
|
|
||||||
free = {
|
|
||||||
asp = function(pos)
|
|
||||||
return { main = getzs3(pos) or -1, proceed_as_main = true, dst = -1 }
|
|
||||||
end,
|
|
||||||
n = "shunt"
|
|
||||||
},
|
|
||||||
shunt = {asp = { main = 0, shunt = true} , n = "danger"},
|
|
||||||
}) do
|
}) do
|
||||||
local tile = "advtrains_signals_ks_ltm_"..typ..".png"
|
|
||||||
local afunc = prts.asp
|
|
||||||
if type(afunc) == "table" then
|
|
||||||
afunc = function() return prts.asp end
|
|
||||||
end
|
|
||||||
if typ == "nextslow" then
|
|
||||||
tile = {
|
|
||||||
name = tile,
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 32,
|
|
||||||
aspect_h = 32,
|
|
||||||
length = 1,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
minetest.register_node("advtrains_signals_ks:hs_"..typ.."_"..rot, {
|
minetest.register_node("advtrains_signals_ks:hs_"..typ.."_"..rot, {
|
||||||
description = "Ks Main Signal",
|
description = "Ks Main Signal",
|
||||||
drawtype = "mesh",
|
drawtype = "mesh",
|
||||||
mesh = "advtrains_signals_ks_main_smr"..rot..".obj",
|
mesh = "advtrains_signals_ks_main_smr"..rot..".obj",
|
||||||
tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", tile},
|
tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_ltm_"..typ..".png"},
|
||||||
|
|
||||||
paramtype="light",
|
paramtype="light",
|
||||||
sunlight_propagates=true,
|
sunlight_propagates=true,
|
||||||
|
@ -194,14 +108,16 @@ for _, rtab in ipairs({
|
||||||
advtrains = {
|
advtrains = {
|
||||||
set_aspect = setaspectf(rot),
|
set_aspect = setaspectf(rot),
|
||||||
supported_aspects = suppasp,
|
supported_aspects = suppasp,
|
||||||
get_aspect = afunc,
|
get_aspect = function(pos, node)
|
||||||
|
return prts.asp
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
on_rightclick = advtrains.interlocking.signal_rc_handler,
|
on_rightclick = advtrains.interlocking.signal_rc_handler,
|
||||||
can_dig = advtrains.interlocking.signal_can_dig,
|
can_dig = advtrains.interlocking.signal_can_dig,
|
||||||
after_dig_node = advtrains.interlocking.signal_after_dig,
|
after_dig_node = advtrains.interlocking.signal_after_dig,
|
||||||
})
|
})
|
||||||
-- rotatable by trackworker
|
-- rotatable by trackworker
|
||||||
advtrains.trackplacer.add_worked("advtrains_signals_ks:hs", typ, "_"..rot)
|
advtrains.trackplacer.add_worked("advtrains_signals_ks:hs", typ, "_"..rot, prts.n)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,16 +162,26 @@ for _, rtab in ipairs({
|
||||||
after_dig_node = advtrains.interlocking.signal_after_dig,
|
after_dig_node = advtrains.interlocking.signal_after_dig,
|
||||||
})
|
})
|
||||||
-- rotatable by trackworker
|
-- rotatable by trackworker
|
||||||
advtrains.trackplacer.add_worked("advtrains_signals_ks:ra", typ, "_"..rot)
|
advtrains.trackplacer.add_worked("advtrains_signals_ks:ra", typ, "_"..rot, prts.n)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Schilder:
|
--Schilder:
|
||||||
local function register_sign(prefix, typ, nxt, description, mesh, tile2, dtyp, inv, asp)
|
for typ, prts in pairs({
|
||||||
minetest.register_node("advtrains_signals_ks:"..prefix.."_"..typ.."_"..rot, {
|
-- Speed restrictions:
|
||||||
description = description,
|
["8"] = {asp = { main = 8, shunt = true }, n = "12", ici=true},
|
||||||
|
["12"] = {asp = { main = 12, shunt = true }, n = "16"},
|
||||||
|
["16"] = {asp = { main = 16, shunt = true }, n = "e"},
|
||||||
|
-- Speed restriction lifted
|
||||||
|
["e"] = {asp = { main = -1, shunt = true }, n = "hfs"},
|
||||||
|
-- Halt for shunt moves:
|
||||||
|
["hfs"] = {asp = { main = false, shunt = false }, n = "pam"},
|
||||||
|
["pam"] = {asp = { main = -1, shunt = false, proceed_as_main = true}, n = "8"},
|
||||||
|
}) do
|
||||||
|
minetest.register_node("advtrains_signals_ks:sign_"..typ.."_"..rot, {
|
||||||
|
description = "Signal Sign",
|
||||||
drawtype = "mesh",
|
drawtype = "mesh",
|
||||||
mesh = "advtrains_signals_ks_"..mesh.."_smr"..rot..".obj",
|
mesh = "advtrains_signals_ks_sign_smr"..rot..".obj",
|
||||||
tiles = {"advtrains_signals_ks_signpost.png", tile2},
|
tiles = {"advtrains_signals_ks_signpost.png", "advtrains_signals_ks_sign_"..typ..".png"},
|
||||||
|
|
||||||
paramtype="light",
|
paramtype="light",
|
||||||
sunlight_propagates=true,
|
sunlight_propagates=true,
|
||||||
|
@ -271,123 +197,22 @@ for _, rtab in ipairs({
|
||||||
advtrains_signal = 2,
|
advtrains_signal = 2,
|
||||||
not_blocking_trains = 1,
|
not_blocking_trains = 1,
|
||||||
save_in_at_nodedb = 1,
|
save_in_at_nodedb = 1,
|
||||||
not_in_creative_inventory = (rtab.ici and typ == dtyp) and 0 or 1,
|
not_in_creative_inventory = (rtab.ici and prts.ici) and 0 or 1,
|
||||||
},
|
},
|
||||||
drop = "advtrains_signals_ks:"..prefix.."_"..dtyp.."_0",
|
drop = "advtrains_signals_ks:sign_8_0",
|
||||||
inventory_image = inv,
|
inventory_image = "advtrains_signals_ks_sign_8.png",
|
||||||
advtrains = {
|
advtrains = {
|
||||||
get_aspect = function() return asp end
|
-- This is a static signal! No set_aspect
|
||||||
|
get_aspect = function(pos, node)
|
||||||
|
return prts.asp
|
||||||
|
end,
|
||||||
},
|
},
|
||||||
on_rightclick = advtrains.interlocking.signal_rc_handler,
|
on_rightclick = advtrains.interlocking.signal_rc_handler,
|
||||||
can_dig = advtrains.interlocking.signal_can_dig,
|
can_dig = advtrains.interlocking.signal_can_dig,
|
||||||
after_dig_node = advtrains.interlocking.signal_after_dig,
|
after_dig_node = advtrains.interlocking.signal_after_dig,
|
||||||
})
|
})
|
||||||
-- rotatable by trackworker
|
-- rotatable by trackworker
|
||||||
advtrains.trackplacer.add_worked("advtrains_signals_ks:"..prefix, typ, "_"..rot, nxt)
|
advtrains.trackplacer.add_worked("advtrains_signals_ks:sign", typ, "_"..rot, prts.n)
|
||||||
end
|
|
||||||
|
|
||||||
for typ, prts in pairs {
|
|
||||||
["hfs"] = {asp = {main = false, shunt = false}, n = "pam", mesh = "_hfs"},
|
|
||||||
["pam"] = {asp = {main = -1, shunt = false, proceed_as_main = true}, n = "hfs"}
|
|
||||||
} do
|
|
||||||
local mesh = prts.mesh or ""
|
|
||||||
local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"
|
|
||||||
if typ == "hfs" then
|
|
||||||
tile2 = "advtrains_signals_ks_sign_hfs.png"
|
|
||||||
end
|
|
||||||
register_sign("sign", typ, prts.n, "Signal Sign", "sign"..mesh, tile2, "hfs", "advtrains_signals_ks_sign_lf7.png", prts.asp)
|
|
||||||
end
|
|
||||||
|
|
||||||
for typ, prts in pairs {
|
|
||||||
-- Speed restrictions:
|
|
||||||
["4"] = {asp = { main = 4, shunt = true }, n = "6"},
|
|
||||||
["6"] = {asp = { main = 6, shunt = true }, n = "8"},
|
|
||||||
["8"] = {asp = { main = 8, shunt = true }, n = "12"},
|
|
||||||
["12"] = {asp = { main = 12, shunt = true }, n = "16"},
|
|
||||||
["16"] = {asp = { main = 16, shunt = true }, n = "e"},
|
|
||||||
-- Speed restriction lifted
|
|
||||||
["e"] = {asp = { main = -1, shunt = true }, n = "4", mesh = "_zs10"},
|
|
||||||
} do
|
|
||||||
local mesh = tonumber(typ) and "_zs3" or prts.mesh or ""
|
|
||||||
local tile2 = "[combine:40x40:0,0=\\(advtrains_signals_ks_sign_off.png\\^[resize\\:40x40\\):3,-2=advtrains_signals_ks_sign_"..typ..".png^[invert:rgb"
|
|
||||||
if typ == "e" then
|
|
||||||
tile2 = "advtrains_signals_ks_sign_zs10.png"
|
|
||||||
end
|
|
||||||
register_sign("sign", typ, prts.n, "Permanent local speed restriction sign", "sign"..mesh, tile2, "8", "advtrains_signals_ks_sign_8.png^[invert:rgb", prts.asp)
|
|
||||||
end
|
|
||||||
|
|
||||||
for typ, prts in pairs {
|
|
||||||
["4"] = {main = 4, n = "6"},
|
|
||||||
["6"] = {main = 6, n = "8"},
|
|
||||||
["8"] = {main = 8, n = "12"},
|
|
||||||
["12"] = {main = 12, n = "16"},
|
|
||||||
["16"] = {main = 16, n = "e"},
|
|
||||||
["e"] = {main = -1, n = "4"},
|
|
||||||
} do
|
|
||||||
local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"..(typ == "e" and "" or "^[multiply:orange")
|
|
||||||
local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)^[multiply:orange"
|
|
||||||
register_sign("sign_lf", typ, prts.n, "Temporary local speed restriction sign", "sign", tile2, "8", inv, {main = prts.main, shunt = true, type = "temp"})
|
|
||||||
end
|
|
||||||
|
|
||||||
for typ, prts in pairs {
|
|
||||||
["4"] = {main = 4, n = "6"},
|
|
||||||
["6"] = {main = 6, n = "8"},
|
|
||||||
["8"] = {main = 8, n = "12"},
|
|
||||||
["12"] = {main = 12, n = "16"},
|
|
||||||
["16"] = {main = 16, n = "20"},
|
|
||||||
["20"] = {main = 20, n = "4"},
|
|
||||||
} do
|
|
||||||
local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)"
|
|
||||||
local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)"
|
|
||||||
register_sign("sign_lf7", typ, prts.n, "Line speed restriction sign", "sign", tile2, "8", inv, {main = prts.main, shunt = true, type = "line"})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Geschwindigkeits(vor)anzeiger für Ks-Signale
|
|
||||||
for typ, prts in pairs({
|
|
||||||
["off"] = {n = "4", ici = true},
|
|
||||||
["4"] = {n = "6"},
|
|
||||||
["6"] = {n = "8"},
|
|
||||||
["8"] = {n = "12"},
|
|
||||||
["12"] = {n = "16"},
|
|
||||||
["16"] = {n = "off"},
|
|
||||||
}) do
|
|
||||||
local def = {
|
|
||||||
drawtype = "mesh",
|
|
||||||
tiles = {"advtrains_signals_ks_mast.png","advtrains_signals_ks_head.png","advtrains_signals_ks_sign_"..typ..".png^[invert:rgb^[noalpha"},
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
light_source = 4,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {rtab.sbox, {-1/4, -1/2, -1/4, 1/4, -7/16, 1/4}}
|
|
||||||
},
|
|
||||||
groups = {
|
|
||||||
cracky = 2,
|
|
||||||
not_blocking_trains = 1,
|
|
||||||
save_in_at_nodedb = 1,
|
|
||||||
not_in_creative_inventory = (rtab.ici and prts.ici) and 0 or 1,
|
|
||||||
},
|
|
||||||
after_dig_node = function(pos) advtrains.ndb.update(pos) end
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Zs 3
|
|
||||||
local t = table.copy(def)
|
|
||||||
t.description = "Ks speed limit indicator"
|
|
||||||
t.mesh = "advtrains_signals_ks_zs_top_smr"..rot..".obj"
|
|
||||||
t.drop = "advtrains_signals_ks:zs3_off_0"
|
|
||||||
t.selection_box.fixed[1][5] = 0
|
|
||||||
minetest.register_node("advtrains_signals_ks:zs3_"..typ.."_"..rot, t)
|
|
||||||
advtrains.trackplacer.add_worked("advtrains_signals_ks:zs3", typ, "_"..rot)
|
|
||||||
|
|
||||||
-- Zs 3v
|
|
||||||
local t = table.copy(def)
|
|
||||||
t.description = "Ks distant speed limit indicator"
|
|
||||||
t.mesh = "advtrains_signals_ks_zs_bottom_smr"..rot..".obj"
|
|
||||||
t.drop = "advtrains_signals_ks:zs3v_off_0"
|
|
||||||
t.tiles[3] = t.tiles[3] .. "^[multiply:yellow"
|
|
||||||
minetest.register_node("advtrains_signals_ks:zs3v_"..typ.."_"..rot, t)
|
|
||||||
advtrains.trackplacer.add_worked("advtrains_signals_ks:zs3v", typ, "_"..rot)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("advtrains_signals_ks:mast_mast_"..rot, {
|
minetest.register_node("advtrains_signals_ks:mast_mast_"..rot, {
|
||||||
|
@ -459,23 +284,3 @@ minetest.register_craft({
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
sign_material = nil
|
sign_material = nil
|
||||||
|
|
||||||
minetest.register_craft{
|
|
||||||
output = "advtrains_signals_ks:sign_8_0 1",
|
|
||||||
recipe = {{"advtrains_signals_ks:sign_lf7_8_0"}}
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.register_craft{
|
|
||||||
output = "advtrains_signals_ks:sign_hfs_0 1",
|
|
||||||
recipe = {{"advtrains_signals_ks:sign_8_0"}}
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.register_craft{
|
|
||||||
output = "advtrains_signals_ks:sign_lf_8_0 1",
|
|
||||||
recipe = {{"advtrains_signals_ks:sign_hfs_0"}}
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.register_craft{
|
|
||||||
output = "advtrains_signals_ks:sign_lf7_8_0 1",
|
|
||||||
recipe = {{"advtrains_signals_ks:sign_lf_8_0"}}
|
|
||||||
}
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ minetest.register_node("advtrains_signals_ks:zs_top", {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
||||||
},
|
},
|
||||||
mesh = "advtrains_signals_ks_zs_top_smr0.obj",
|
mesh = "advtrains_signals_ks_zs_top.obj",
|
||||||
tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
|
tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
|
||||||
description="Ks Speed Restriction Signal (top)",
|
description="Ks Speed Restriction Signal (top)",
|
||||||
sunlight_propagates=true,
|
sunlight_propagates=true,
|
||||||
|
@ -81,7 +81,7 @@ minetest.register_node("advtrains_signals_ks:zs_bottom", {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
||||||
},
|
},
|
||||||
mesh = "advtrains_signals_ks_zs_bottom_smr0.obj",
|
mesh = "advtrains_signals_ks_zs_bottom.obj",
|
||||||
tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
|
tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png"},
|
||||||
description="Ks Speed Restriction Signal (bottom)",
|
description="Ks Speed Restriction Signal (bottom)",
|
||||||
sunlight_propagates=true,
|
sunlight_propagates=true,
|
||||||
|
|
|
@ -1,262 +0,0 @@
|
||||||
# Blender v2.92.0 OBJ File: 'rangierhalttafel.blend'
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_hfs_smr0.mtl
|
|
||||||
o Cube
|
|
||||||
v -0.024805 1.055075 -0.274918
|
|
||||||
v -0.035079 1.055075 -0.299723
|
|
||||||
v -0.000000 1.055075 -0.264644
|
|
||||||
v -0.024805 1.055075 -0.324528
|
|
||||||
v 0.024805 1.055075 -0.274918
|
|
||||||
v -0.000000 1.055075 -0.334802
|
|
||||||
v 0.035079 1.055075 -0.299723
|
|
||||||
v 0.024805 1.055075 -0.324528
|
|
||||||
v 0.024805 1.055075 -0.324528
|
|
||||||
v 0.035079 1.055075 -0.299723
|
|
||||||
v -0.000000 1.055075 -0.334802
|
|
||||||
v 0.024805 1.055075 -0.274918
|
|
||||||
v -0.035079 1.055075 -0.299723
|
|
||||||
v -0.000000 1.055075 -0.264644
|
|
||||||
v -0.024805 1.055075 -0.324528
|
|
||||||
v -0.024805 1.055075 -0.274918
|
|
||||||
v -0.000000 -0.698893 -0.299723
|
|
||||||
v -0.035079 -0.499729 -0.299723
|
|
||||||
v -0.024804 -0.499729 -0.274918
|
|
||||||
v 0.000000 -0.499729 -0.264644
|
|
||||||
v 0.024805 -0.499729 -0.274918
|
|
||||||
v 0.035080 -0.499729 -0.299723
|
|
||||||
v 0.024805 -0.499729 -0.324528
|
|
||||||
v 0.000000 -0.499729 -0.334802
|
|
||||||
v -0.024804 -0.499729 -0.324528
|
|
||||||
v 0.340021 0.866098 -0.338486
|
|
||||||
v 0.340021 0.866098 -0.324528
|
|
||||||
v -0.340022 0.866098 -0.338486
|
|
||||||
v -0.340022 0.866098 -0.324528
|
|
||||||
v -0.333488 0.932433 -0.338486
|
|
||||||
v -0.333488 0.932433 -0.324528
|
|
||||||
v -0.314139 0.996219 -0.338486
|
|
||||||
v -0.314139 0.996219 -0.324528
|
|
||||||
v -0.282718 1.055004 -0.338486
|
|
||||||
v -0.282718 1.055004 -0.324528
|
|
||||||
v -0.240432 1.106529 -0.338486
|
|
||||||
v -0.240432 1.106529 -0.324528
|
|
||||||
v -0.188906 1.148815 -0.338486
|
|
||||||
v -0.188906 1.148815 -0.324528
|
|
||||||
v -0.130121 1.180236 -0.338486
|
|
||||||
v -0.130121 1.180236 -0.324528
|
|
||||||
v -0.066335 1.199586 -0.338486
|
|
||||||
v -0.066335 1.199586 -0.324528
|
|
||||||
v -0.000000 1.206119 -0.338486
|
|
||||||
v -0.000000 1.206119 -0.324528
|
|
||||||
v 0.066335 1.199586 -0.338486
|
|
||||||
v 0.066335 1.199586 -0.324528
|
|
||||||
v 0.130121 1.180236 -0.338486
|
|
||||||
v 0.130121 1.180236 -0.324528
|
|
||||||
v 0.188906 1.148815 -0.338486
|
|
||||||
v 0.188906 1.148815 -0.324528
|
|
||||||
v 0.240431 1.106529 -0.338486
|
|
||||||
v 0.240431 1.106529 -0.324528
|
|
||||||
v 0.282717 1.055003 -0.338486
|
|
||||||
v 0.282717 1.055003 -0.324528
|
|
||||||
v 0.314139 0.996218 -0.338486
|
|
||||||
v 0.314139 0.996218 -0.324528
|
|
||||||
v 0.333488 0.932432 -0.338486
|
|
||||||
v 0.333488 0.932432 -0.324528
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.009730 0.997467
|
|
||||||
vt 0.000000 0.983831
|
|
||||||
vt 0.000000 0.967080
|
|
||||||
vt 0.009730 0.957025
|
|
||||||
vt 0.023490 0.959558
|
|
||||||
vt 0.033220 0.973194
|
|
||||||
vt 0.033220 0.989946
|
|
||||||
vt 0.023490 1.000000
|
|
||||||
vt 0.250000 0.984749
|
|
||||||
vt 0.250000 0.001193
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.983556
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.983556
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.001193
|
|
||||||
vt 0.265954 0.984749
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.639500
|
|
||||||
vt 0.250000 0.005108
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.634392
|
|
||||||
vt 0.250000 0.634392
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.005108
|
|
||||||
vt 0.265954 0.639500
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.258978 0.361919
|
|
||||||
vt 0.250000 0.361919
|
|
||||||
vt 0.250000 0.331604
|
|
||||||
vt 0.258978 0.331604
|
|
||||||
vt 0.250000 0.295958
|
|
||||||
vt 0.258978 0.295958
|
|
||||||
vt 0.250000 0.256351
|
|
||||||
vt 0.258978 0.256351
|
|
||||||
vt 0.250000 0.214304
|
|
||||||
vt 0.258978 0.214304
|
|
||||||
vt 0.250000 0.171433
|
|
||||||
vt 0.258978 0.171433
|
|
||||||
vt 0.250000 0.129386
|
|
||||||
vt 0.258978 0.129386
|
|
||||||
vt 0.250000 0.089778
|
|
||||||
vt 0.258978 0.089778
|
|
||||||
vt 0.250000 0.054132
|
|
||||||
vt 0.258978 0.054132
|
|
||||||
vt 0.250000 0.023818
|
|
||||||
vt 0.258978 0.023818
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258977 0.223103
|
|
||||||
vt 0.250000 0.223103
|
|
||||||
vt 0.250000 0.196398
|
|
||||||
vt 0.258977 0.196398
|
|
||||||
vt 0.250000 0.163663
|
|
||||||
vt 0.258977 0.163663
|
|
||||||
vt 0.250000 0.126156
|
|
||||||
vt 0.258977 0.126156
|
|
||||||
vt 0.218691 0.000000
|
|
||||||
vt 0.218691 0.437382
|
|
||||||
vt 0.176027 0.433180
|
|
||||||
vt 0.135002 0.420735
|
|
||||||
vt 0.097193 0.400526
|
|
||||||
vt 0.064053 0.373329
|
|
||||||
vt 0.036856 0.340189
|
|
||||||
vt 0.016647 0.302381
|
|
||||||
vt 0.004202 0.261356
|
|
||||||
vt 0.000000 0.218691
|
|
||||||
vt 0.004202 0.176027
|
|
||||||
vt 0.016647 0.135002
|
|
||||||
vt 0.036856 0.097193
|
|
||||||
vt 0.064053 0.064053
|
|
||||||
vt 0.097193 0.036856
|
|
||||||
vt 0.135001 0.016647
|
|
||||||
vt 0.176026 0.004202
|
|
||||||
vt 0.250000 0.085319
|
|
||||||
vt 0.258977 0.085319
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258978 0.437382
|
|
||||||
vt 0.250000 0.437382
|
|
||||||
vt 0.250000 0.042722
|
|
||||||
vt 0.258977 0.042722
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258977 0.000000
|
|
||||||
vt 0.218691 0.562618
|
|
||||||
vt 0.218691 1.000000
|
|
||||||
vt 0.176026 0.995798
|
|
||||||
vt 0.135001 0.983353
|
|
||||||
vt 0.097193 0.963144
|
|
||||||
vt 0.064053 0.935947
|
|
||||||
vt 0.036856 0.902807
|
|
||||||
vt 0.016647 0.864998
|
|
||||||
vt 0.004202 0.823973
|
|
||||||
vt 0.000000 0.781309
|
|
||||||
vt 0.004202 0.738644
|
|
||||||
vt 0.016647 0.697619
|
|
||||||
vt 0.036856 0.659811
|
|
||||||
vt 0.064053 0.626671
|
|
||||||
vt 0.097193 0.599474
|
|
||||||
vt 0.135002 0.579265
|
|
||||||
vt 0.176027 0.566820
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 0.0000
|
|
||||||
vn 0.9239 0.0000 0.3827
|
|
||||||
vn 0.3827 0.0000 0.9239
|
|
||||||
vn 0.3827 0.0000 -0.9239
|
|
||||||
vn 0.9239 0.0000 -0.3827
|
|
||||||
vn -0.3827 -0.0000 0.9239
|
|
||||||
vn -0.9239 -0.0000 -0.3827
|
|
||||||
vn -0.9239 -0.0000 0.3827
|
|
||||||
vn -0.3827 -0.0000 -0.9239
|
|
||||||
vn -0.9952 0.0980 0.0000
|
|
||||||
vn -0.9569 0.2903 0.0000
|
|
||||||
vn -0.8819 0.4714 0.0000
|
|
||||||
vn -0.7730 0.6344 0.0000
|
|
||||||
vn -0.6344 0.7730 0.0000
|
|
||||||
vn -0.4714 0.8819 0.0000
|
|
||||||
vn -0.2903 0.9569 0.0000
|
|
||||||
vn -0.0980 0.9952 0.0000
|
|
||||||
vn 0.0980 0.9952 0.0000
|
|
||||||
vn 0.2903 0.9569 0.0000
|
|
||||||
vn 0.4714 0.8819 0.0000
|
|
||||||
vn 0.6344 0.7730 0.0000
|
|
||||||
vn 0.7730 0.6344 0.0000
|
|
||||||
vn 0.8819 0.4714 0.0000
|
|
||||||
vn -0.0000 -1.0000 0.0000
|
|
||||||
vn 0.9569 0.2903 0.0000
|
|
||||||
vn 0.9952 0.0980 0.0000
|
|
||||||
vn -0.0000 0.0000 -1.0000
|
|
||||||
g Cube_Cube_Material
|
|
||||||
usemtl Material
|
|
||||||
s off
|
|
||||||
f 8/1/1 6/2/1 11/3/1 9/4/1
|
|
||||||
f 2/5/1 16/6/1 1/7/1 13/8/1
|
|
||||||
f 12/9/1 10/10/1 7/11/1 5/12/1
|
|
||||||
f 6/2/1 4/13/1 15/14/1 11/3/1
|
|
||||||
f 16/6/1 14/15/1 3/16/1 1/7/1
|
|
||||||
f 10/10/1 8/1/1 9/4/1 7/11/1
|
|
||||||
f 4/17/2 2/18/2 16/19/2 14/20/2 12/21/2 10/22/2 8/23/2 6/24/2
|
|
||||||
f 5/25/3 21/26/3 22/27/3 7/28/3
|
|
||||||
f 4/13/1 2/5/1 13/8/1 15/14/1
|
|
||||||
f 14/15/1 12/9/1 5/12/1 3/16/1
|
|
||||||
f 3/29/4 20/30/4 21/31/4 5/32/4
|
|
||||||
f 9/33/5 23/34/5 24/35/5 11/36/5
|
|
||||||
f 7/37/6 22/38/6 23/39/6 9/40/6
|
|
||||||
f 1/41/7 19/42/7 20/43/7 3/44/7
|
|
||||||
f 15/45/8 25/46/8 18/47/8 13/48/8
|
|
||||||
f 13/49/9 18/50/9 19/51/9 1/52/9
|
|
||||||
f 11/53/10 24/54/10 25/55/10 15/56/10
|
|
||||||
f 28/57/11 29/58/11 31/59/11 30/60/11
|
|
||||||
f 30/60/12 31/59/12 33/61/12 32/62/12
|
|
||||||
f 32/62/13 33/61/13 35/63/13 34/64/13
|
|
||||||
f 34/64/14 35/63/14 37/65/14 36/66/14
|
|
||||||
f 36/66/15 37/65/15 39/67/15 38/68/15
|
|
||||||
f 38/68/16 39/67/16 41/69/16 40/70/16
|
|
||||||
f 40/70/17 41/69/17 43/71/17 42/72/17
|
|
||||||
f 42/72/18 43/71/18 45/73/18 44/74/18
|
|
||||||
f 44/74/19 45/73/19 47/75/19 46/76/19
|
|
||||||
f 46/76/20 47/75/20 49/77/20 48/78/20
|
|
||||||
f 48/79/21 49/80/21 51/81/21 50/82/21
|
|
||||||
f 50/82/22 51/81/22 53/83/22 52/84/22
|
|
||||||
f 52/84/23 53/83/23 55/85/23 54/86/23
|
|
||||||
f 29/87/1 27/88/1 59/89/1 57/90/1 55/91/1 53/92/1 51/93/1 49/94/1 47/95/1 45/96/1 43/97/1 41/98/1 39/99/1 37/100/1 35/101/1 33/102/1 31/103/1
|
|
||||||
f 54/86/24 55/85/24 57/104/24 56/105/24
|
|
||||||
f 26/106/25 27/107/25 29/108/25 28/109/25
|
|
||||||
f 56/105/26 57/104/26 59/110/26 58/111/26
|
|
||||||
f 58/111/27 59/110/27 27/112/27 26/113/27
|
|
||||||
g Cube_Cube_Display
|
|
||||||
usemtl Display
|
|
||||||
f 26/114/28 28/115/28 30/116/28 32/117/28 34/118/28 36/119/28 38/120/28 40/121/28 42/122/28 44/123/28 46/124/28 48/125/28 50/126/28 52/127/28 54/128/28 56/129/28 58/130/28
|
|
|
@ -1,262 +0,0 @@
|
||||||
# Blender v2.92.0 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_hfs_smr30.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.171853 1.055075 -0.276406
|
|
||||||
v 0.154594 1.055075 -0.296973
|
|
||||||
v 0.154594 1.055075 -0.296973
|
|
||||||
v 0.171853 1.055075 -0.276406
|
|
||||||
v 0.107281 1.055075 -0.282055
|
|
||||||
v 0.104941 1.055075 -0.255309
|
|
||||||
v 0.104941 1.055075 -0.255309
|
|
||||||
v 0.107281 1.055075 -0.282055
|
|
||||||
v 0.148945 1.055075 -0.232402
|
|
||||||
v 0.169512 1.055075 -0.249660
|
|
||||||
v 0.169512 1.055075 -0.249660
|
|
||||||
v 0.148945 1.055075 -0.232402
|
|
||||||
v 0.127848 1.055075 -0.299313
|
|
||||||
v 0.127848 1.055075 -0.299313
|
|
||||||
v 0.122199 1.055075 -0.234742
|
|
||||||
v 0.122199 1.055075 -0.234742
|
|
||||||
v 0.148945 -0.499729 -0.232402
|
|
||||||
v 0.169513 -0.499729 -0.249659
|
|
||||||
v 0.122199 -0.499729 -0.234742
|
|
||||||
v 0.171853 -0.499729 -0.276406
|
|
||||||
v 0.154594 -0.499729 -0.296973
|
|
||||||
v 0.104942 -0.499729 -0.255308
|
|
||||||
v 0.127849 -0.499729 -0.299313
|
|
||||||
v 0.107281 -0.499729 -0.282055
|
|
||||||
v -0.145308 0.866098 -0.457245
|
|
||||||
v -0.151753 0.866098 -0.444865
|
|
||||||
v -0.145957 0.932433 -0.441847
|
|
||||||
v -0.139512 0.932433 -0.454228
|
|
||||||
v -0.128794 0.996219 -0.432913
|
|
||||||
v -0.122349 0.996219 -0.445294
|
|
||||||
v -0.100924 1.055004 -0.418404
|
|
||||||
v -0.094479 1.055004 -0.430785
|
|
||||||
v -0.063415 1.106529 -0.398879
|
|
||||||
v -0.056970 1.106529 -0.411260
|
|
||||||
v -0.017711 1.148815 -0.375087
|
|
||||||
v -0.011266 1.148815 -0.387468
|
|
||||||
v 0.034432 1.180236 -0.347943
|
|
||||||
v 0.040877 1.180236 -0.360324
|
|
||||||
v 0.091010 1.199586 -0.318490
|
|
||||||
v 0.097456 1.199586 -0.330871
|
|
||||||
v 0.149850 1.206119 -0.287860
|
|
||||||
v 0.156295 1.206119 -0.300241
|
|
||||||
v 0.208690 1.199586 -0.257230
|
|
||||||
v 0.215135 1.199586 -0.269611
|
|
||||||
v 0.265269 1.180236 -0.227777
|
|
||||||
v 0.271714 1.180236 -0.240157
|
|
||||||
v 0.317412 1.148815 -0.200633
|
|
||||||
v 0.323857 1.148815 -0.213014
|
|
||||||
v 0.363115 1.106529 -0.176841
|
|
||||||
v 0.369560 1.106529 -0.189222
|
|
||||||
v 0.400623 1.055003 -0.157316
|
|
||||||
v 0.407068 1.055003 -0.169697
|
|
||||||
v 0.451453 0.866098 -0.130856
|
|
||||||
v 0.445658 0.932432 -0.133872
|
|
||||||
v 0.428495 0.996218 -0.142807
|
|
||||||
v 0.434940 0.996218 -0.155187
|
|
||||||
v 0.457898 0.866098 -0.143236
|
|
||||||
v 0.452103 0.932432 -0.146253
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.009730 0.997467
|
|
||||||
vt 0.000000 0.983831
|
|
||||||
vt 0.000000 0.967080
|
|
||||||
vt 0.009730 0.957025
|
|
||||||
vt 0.023490 0.959558
|
|
||||||
vt 0.033220 0.973194
|
|
||||||
vt 0.033220 0.989946
|
|
||||||
vt 0.023490 1.000000
|
|
||||||
vt 0.250000 0.984749
|
|
||||||
vt 0.250000 0.001193
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.983556
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.983556
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.001193
|
|
||||||
vt 0.265954 0.984749
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.639500
|
|
||||||
vt 0.250000 0.005108
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.634392
|
|
||||||
vt 0.250000 0.634392
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.005108
|
|
||||||
vt 0.265954 0.639500
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.258978 0.361919
|
|
||||||
vt 0.250000 0.361919
|
|
||||||
vt 0.250000 0.331604
|
|
||||||
vt 0.258978 0.331604
|
|
||||||
vt 0.250000 0.295958
|
|
||||||
vt 0.258978 0.295958
|
|
||||||
vt 0.250000 0.256351
|
|
||||||
vt 0.258978 0.256351
|
|
||||||
vt 0.250000 0.214304
|
|
||||||
vt 0.258978 0.214304
|
|
||||||
vt 0.250000 0.171433
|
|
||||||
vt 0.258978 0.171433
|
|
||||||
vt 0.250000 0.129386
|
|
||||||
vt 0.258978 0.129386
|
|
||||||
vt 0.250000 0.089778
|
|
||||||
vt 0.258978 0.089778
|
|
||||||
vt 0.250000 0.054132
|
|
||||||
vt 0.258978 0.054132
|
|
||||||
vt 0.250000 0.023818
|
|
||||||
vt 0.258978 0.023818
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258977 0.223103
|
|
||||||
vt 0.250000 0.223103
|
|
||||||
vt 0.250000 0.196398
|
|
||||||
vt 0.258977 0.196398
|
|
||||||
vt 0.250000 0.163663
|
|
||||||
vt 0.258977 0.163663
|
|
||||||
vt 0.250000 0.126156
|
|
||||||
vt 0.258977 0.126156
|
|
||||||
vt 0.218691 0.000000
|
|
||||||
vt 0.218691 0.437382
|
|
||||||
vt 0.176027 0.433180
|
|
||||||
vt 0.135002 0.420735
|
|
||||||
vt 0.097193 0.400526
|
|
||||||
vt 0.064053 0.373329
|
|
||||||
vt 0.036856 0.340189
|
|
||||||
vt 0.016647 0.302381
|
|
||||||
vt 0.004202 0.261356
|
|
||||||
vt 0.000000 0.218691
|
|
||||||
vt 0.004202 0.176027
|
|
||||||
vt 0.016647 0.135002
|
|
||||||
vt 0.036856 0.097193
|
|
||||||
vt 0.064053 0.064053
|
|
||||||
vt 0.097193 0.036856
|
|
||||||
vt 0.135001 0.016647
|
|
||||||
vt 0.176026 0.004202
|
|
||||||
vt 0.250000 0.085319
|
|
||||||
vt 0.258977 0.085319
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258978 0.437382
|
|
||||||
vt 0.250000 0.437382
|
|
||||||
vt 0.250000 0.042722
|
|
||||||
vt 0.258977 0.042722
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258977 0.000000
|
|
||||||
vt 0.218691 0.562618
|
|
||||||
vt 0.218691 1.000000
|
|
||||||
vt 0.176026 0.995798
|
|
||||||
vt 0.135001 0.983353
|
|
||||||
vt 0.097193 0.963144
|
|
||||||
vt 0.064053 0.935947
|
|
||||||
vt 0.036856 0.902807
|
|
||||||
vt 0.016647 0.864998
|
|
||||||
vt 0.004202 0.823973
|
|
||||||
vt 0.000000 0.781309
|
|
||||||
vt 0.004202 0.738644
|
|
||||||
vt 0.016647 0.697619
|
|
||||||
vt 0.036856 0.659811
|
|
||||||
vt 0.064053 0.626671
|
|
||||||
vt 0.097193 0.599474
|
|
||||||
vt 0.135002 0.579265
|
|
||||||
vt 0.176027 0.566820
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 -0.0000
|
|
||||||
vn 0.6428 0.0000 0.7660
|
|
||||||
vn -0.0872 -0.0000 0.9962
|
|
||||||
vn 0.7660 0.0000 -0.6428
|
|
||||||
vn 0.9962 0.0000 0.0872
|
|
||||||
vn -0.7660 -0.0000 0.6428
|
|
||||||
vn -0.6428 -0.0000 -0.7660
|
|
||||||
vn -0.9962 -0.0000 -0.0872
|
|
||||||
vn 0.0872 -0.0000 -0.9962
|
|
||||||
vn -0.8827 0.0980 -0.4595
|
|
||||||
vn -0.8488 0.2903 -0.4419
|
|
||||||
vn -0.7823 0.4714 -0.4072
|
|
||||||
vn -0.6857 0.6344 -0.3569
|
|
||||||
vn -0.5627 0.7730 -0.2929
|
|
||||||
vn -0.4181 0.8819 -0.2177
|
|
||||||
vn -0.2575 0.9569 -0.1340
|
|
||||||
vn -0.0869 0.9952 -0.0453
|
|
||||||
vn 0.0869 0.9952 0.0453
|
|
||||||
vn 0.2575 0.9569 0.1340
|
|
||||||
vn 0.4181 0.8819 0.2177
|
|
||||||
vn 0.5627 0.7730 0.2929
|
|
||||||
vn 0.6857 0.6344 0.3569
|
|
||||||
vn -0.4617 0.0000 0.8870
|
|
||||||
vn 0.7823 0.4714 0.4072
|
|
||||||
vn 0.0000 -1.0000 0.0000
|
|
||||||
vn 0.8488 0.2903 0.4419
|
|
||||||
vn 0.8827 0.0980 0.4595
|
|
||||||
vn 0.4617 0.0000 -0.8870
|
|
||||||
g Cube.001_Cube.001_Material.001
|
|
||||||
usemtl Material.001
|
|
||||||
s 1
|
|
||||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
|
||||||
f 5/5/1 6/6/1 7/7/1 8/8/1
|
|
||||||
f 9/9/1 10/10/1 11/11/1 12/12/1
|
|
||||||
f 2/2/1 13/13/1 14/14/1 3/3/1
|
|
||||||
f 6/6/1 15/15/1 16/16/1 7/7/1
|
|
||||||
f 10/10/1 1/1/1 4/4/1 11/11/1
|
|
||||||
f 13/17/2 5/18/2 6/19/2 15/20/2 9/21/2 10/22/2 1/23/2 2/24/2
|
|
||||||
f 12/25/3 17/26/3 18/27/3 11/28/3
|
|
||||||
f 13/13/1 5/5/1 8/8/1 14/14/1
|
|
||||||
f 15/15/1 9/9/1 12/12/1 16/16/1
|
|
||||||
f 16/29/4 19/30/4 17/31/4 12/32/4
|
|
||||||
f 4/33/5 20/34/5 21/35/5 3/36/5
|
|
||||||
f 11/37/6 18/38/6 20/39/6 4/40/6
|
|
||||||
f 7/41/7 22/42/7 19/43/7 16/44/7
|
|
||||||
f 14/45/8 23/46/8 24/47/8 8/48/8
|
|
||||||
f 8/49/9 24/50/9 22/51/9 7/52/9
|
|
||||||
f 3/53/10 21/54/10 23/55/10 14/56/10
|
|
||||||
f 25/57/11 26/58/11 27/59/11 28/60/11
|
|
||||||
f 28/60/12 27/59/12 29/61/12 30/62/12
|
|
||||||
f 30/62/13 29/61/13 31/63/13 32/64/13
|
|
||||||
f 32/64/14 31/63/14 33/65/14 34/66/14
|
|
||||||
f 34/66/15 33/65/15 35/67/15 36/68/15
|
|
||||||
f 36/68/16 35/67/16 37/69/16 38/70/16
|
|
||||||
f 38/70/17 37/69/17 39/71/17 40/72/17
|
|
||||||
f 40/72/18 39/71/18 41/73/18 42/74/18
|
|
||||||
f 42/74/19 41/73/19 43/75/19 44/76/19
|
|
||||||
f 44/76/20 43/75/20 45/77/20 46/78/20
|
|
||||||
f 46/79/21 45/80/21 47/81/21 48/82/21
|
|
||||||
f 48/82/22 47/81/22 49/83/22 50/84/22
|
|
||||||
f 50/84/23 49/83/23 51/85/23 52/86/23
|
|
||||||
f 26/87/24 53/88/24 54/89/24 55/90/24 51/91/24 49/92/24 47/93/24 45/94/24 43/95/24 41/96/24 39/97/24 37/98/24 35/99/24 33/100/24 31/101/24 29/102/24 27/103/24
|
|
||||||
f 52/86/25 51/85/25 55/104/25 56/105/25
|
|
||||||
f 57/106/26 53/107/26 26/108/26 25/109/26
|
|
||||||
f 56/105/27 55/104/27 54/110/27 58/111/27
|
|
||||||
f 58/111/28 54/110/28 53/112/28 57/113/28
|
|
||||||
g Cube.001_Cube.001_Display
|
|
||||||
usemtl Display
|
|
||||||
f 57/114/29 25/115/29 28/116/29 30/117/29 32/118/29 34/119/29 36/120/29 38/121/29 40/122/29 42/123/29 44/124/29 46/125/29 48/126/29 50/127/29 52/128/29 56/129/29 58/130/29
|
|
|
@ -1,262 +0,0 @@
|
||||||
# Blender v2.92.0 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_hfs_smr45.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.247016 1.055075 -0.211936
|
|
||||||
v 0.236741 1.055075 -0.236741
|
|
||||||
v 0.236741 1.055075 -0.236741
|
|
||||||
v 0.247016 1.055075 -0.211936
|
|
||||||
v 0.187132 1.055075 -0.236741
|
|
||||||
v 0.176857 1.055075 -0.211936
|
|
||||||
v 0.176857 1.055075 -0.211936
|
|
||||||
v 0.187132 1.055075 -0.236741
|
|
||||||
v 0.211936 1.055075 -0.176857
|
|
||||||
v 0.236741 1.055075 -0.187132
|
|
||||||
v 0.236741 1.055075 -0.187132
|
|
||||||
v 0.211936 1.055075 -0.176857
|
|
||||||
v 0.211936 1.055075 -0.247016
|
|
||||||
v 0.211936 1.055075 -0.247016
|
|
||||||
v 0.187132 1.055075 -0.187132
|
|
||||||
v 0.187132 1.055075 -0.187132
|
|
||||||
v 0.211936 -0.499729 -0.176857
|
|
||||||
v 0.236741 -0.499729 -0.187131
|
|
||||||
v 0.187132 -0.499729 -0.187132
|
|
||||||
v 0.247016 -0.499729 -0.211936
|
|
||||||
v 0.236741 -0.499729 -0.236741
|
|
||||||
v 0.176857 -0.499729 -0.211935
|
|
||||||
v 0.211937 -0.499729 -0.247015
|
|
||||||
v 0.187132 -0.499729 -0.236741
|
|
||||||
v -0.001086 0.866098 -0.479778
|
|
||||||
v -0.010956 0.866098 -0.469908
|
|
||||||
v -0.006336 0.932433 -0.465288
|
|
||||||
v 0.003534 0.932433 -0.475157
|
|
||||||
v 0.007346 0.996219 -0.451606
|
|
||||||
v 0.017216 0.996219 -0.461476
|
|
||||||
v 0.029564 1.055004 -0.429388
|
|
||||||
v 0.039434 1.055004 -0.439258
|
|
||||||
v 0.059465 1.106529 -0.399487
|
|
||||||
v 0.069335 1.106529 -0.409357
|
|
||||||
v 0.095899 1.148815 -0.363053
|
|
||||||
v 0.105769 1.148815 -0.372922
|
|
||||||
v 0.137466 1.180236 -0.321485
|
|
||||||
v 0.147336 1.180236 -0.331355
|
|
||||||
v 0.182570 1.199586 -0.276382
|
|
||||||
v 0.192440 1.199586 -0.286252
|
|
||||||
v 0.229476 1.206119 -0.229476
|
|
||||||
v 0.239346 1.206119 -0.239346
|
|
||||||
v 0.276382 1.199586 -0.182570
|
|
||||||
v 0.286252 1.199586 -0.192440
|
|
||||||
v 0.321485 1.180236 -0.137466
|
|
||||||
v 0.331355 1.180236 -0.147336
|
|
||||||
v 0.363053 1.148815 -0.095899
|
|
||||||
v 0.372922 1.148815 -0.105769
|
|
||||||
v 0.399486 1.106529 -0.059466
|
|
||||||
v 0.409356 1.106529 -0.069335
|
|
||||||
v 0.429387 1.055003 -0.029565
|
|
||||||
v 0.439257 1.055003 -0.039435
|
|
||||||
v 0.469907 0.866098 0.010955
|
|
||||||
v 0.465288 0.932432 0.006336
|
|
||||||
v 0.451606 0.996218 -0.007346
|
|
||||||
v 0.461476 0.996218 -0.017216
|
|
||||||
v 0.479777 0.866098 0.001085
|
|
||||||
v 0.475157 0.932432 -0.003534
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.009730 0.997467
|
|
||||||
vt 0.000000 0.983831
|
|
||||||
vt 0.000000 0.967080
|
|
||||||
vt 0.009730 0.957025
|
|
||||||
vt 0.023490 0.959558
|
|
||||||
vt 0.033220 0.973194
|
|
||||||
vt 0.033220 0.989946
|
|
||||||
vt 0.023490 1.000000
|
|
||||||
vt 0.250000 0.984749
|
|
||||||
vt 0.250000 0.001193
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.983556
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.983556
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.001193
|
|
||||||
vt 0.265954 0.984749
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.639500
|
|
||||||
vt 0.250000 0.005108
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.634392
|
|
||||||
vt 0.250000 0.634392
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.005108
|
|
||||||
vt 0.265954 0.639500
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.258978 0.361919
|
|
||||||
vt 0.250000 0.361919
|
|
||||||
vt 0.250000 0.331604
|
|
||||||
vt 0.258978 0.331604
|
|
||||||
vt 0.250000 0.295958
|
|
||||||
vt 0.258978 0.295958
|
|
||||||
vt 0.250000 0.256351
|
|
||||||
vt 0.258978 0.256351
|
|
||||||
vt 0.250000 0.214304
|
|
||||||
vt 0.258978 0.214304
|
|
||||||
vt 0.250000 0.171433
|
|
||||||
vt 0.258978 0.171433
|
|
||||||
vt 0.250000 0.129386
|
|
||||||
vt 0.258978 0.129386
|
|
||||||
vt 0.250000 0.089778
|
|
||||||
vt 0.258978 0.089778
|
|
||||||
vt 0.250000 0.054132
|
|
||||||
vt 0.258978 0.054132
|
|
||||||
vt 0.250000 0.023818
|
|
||||||
vt 0.258978 0.023818
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258977 0.223103
|
|
||||||
vt 0.250000 0.223103
|
|
||||||
vt 0.250000 0.196398
|
|
||||||
vt 0.258977 0.196398
|
|
||||||
vt 0.250000 0.163663
|
|
||||||
vt 0.258977 0.163663
|
|
||||||
vt 0.250000 0.126156
|
|
||||||
vt 0.258977 0.126156
|
|
||||||
vt 0.218691 0.000000
|
|
||||||
vt 0.218691 0.437382
|
|
||||||
vt 0.176027 0.433180
|
|
||||||
vt 0.135002 0.420735
|
|
||||||
vt 0.097193 0.400526
|
|
||||||
vt 0.064053 0.373329
|
|
||||||
vt 0.036856 0.340189
|
|
||||||
vt 0.016647 0.302381
|
|
||||||
vt 0.004202 0.261356
|
|
||||||
vt 0.000000 0.218691
|
|
||||||
vt 0.004202 0.176027
|
|
||||||
vt 0.016647 0.135002
|
|
||||||
vt 0.036856 0.097193
|
|
||||||
vt 0.064053 0.064053
|
|
||||||
vt 0.097193 0.036856
|
|
||||||
vt 0.135001 0.016647
|
|
||||||
vt 0.176026 0.004202
|
|
||||||
vt 0.250000 0.085319
|
|
||||||
vt 0.258977 0.085319
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258978 0.437382
|
|
||||||
vt 0.250000 0.437382
|
|
||||||
vt 0.250000 0.042722
|
|
||||||
vt 0.258977 0.042722
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258977 0.000000
|
|
||||||
vt 0.218691 0.562618
|
|
||||||
vt 0.218691 1.000000
|
|
||||||
vt 0.176026 0.995798
|
|
||||||
vt 0.135001 0.983353
|
|
||||||
vt 0.097193 0.963144
|
|
||||||
vt 0.064053 0.935947
|
|
||||||
vt 0.036856 0.902807
|
|
||||||
vt 0.016647 0.864998
|
|
||||||
vt 0.004202 0.823973
|
|
||||||
vt 0.000000 0.781309
|
|
||||||
vt 0.004202 0.738644
|
|
||||||
vt 0.016647 0.697619
|
|
||||||
vt 0.036856 0.659811
|
|
||||||
vt 0.064053 0.626671
|
|
||||||
vt 0.097193 0.599474
|
|
||||||
vt 0.135002 0.579265
|
|
||||||
vt 0.176027 0.566820
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 -0.0000
|
|
||||||
vn 0.3827 0.0000 0.9239
|
|
||||||
vn -0.3827 -0.0000 0.9239
|
|
||||||
vn 0.9239 0.0000 -0.3827
|
|
||||||
vn 0.9239 0.0000 0.3827
|
|
||||||
vn -0.9239 -0.0000 0.3827
|
|
||||||
vn -0.3827 -0.0000 -0.9239
|
|
||||||
vn -0.9239 -0.0000 -0.3827
|
|
||||||
vn 0.3827 -0.0000 -0.9239
|
|
||||||
vn -0.7037 0.0980 -0.7037
|
|
||||||
vn -0.6767 0.2903 -0.6767
|
|
||||||
vn -0.6236 0.4714 -0.6236
|
|
||||||
vn -0.5466 0.6344 -0.5466
|
|
||||||
vn -0.4486 0.7730 -0.4486
|
|
||||||
vn -0.3333 0.8819 -0.3333
|
|
||||||
vn -0.2053 0.9569 -0.2053
|
|
||||||
vn -0.0693 0.9952 -0.0693
|
|
||||||
vn 0.0693 0.9952 0.0693
|
|
||||||
vn 0.2053 0.9569 0.2053
|
|
||||||
vn 0.3333 0.8819 0.3333
|
|
||||||
vn 0.4486 0.7730 0.4486
|
|
||||||
vn 0.5466 0.6344 0.5466
|
|
||||||
vn -0.7071 0.0000 0.7071
|
|
||||||
vn 0.6236 0.4714 0.6236
|
|
||||||
vn 0.0000 -1.0000 0.0000
|
|
||||||
vn 0.6767 0.2903 0.6767
|
|
||||||
vn 0.7037 0.0980 0.7037
|
|
||||||
vn 0.7071 0.0000 -0.7071
|
|
||||||
g Cube.001_Cube.001_Material.001
|
|
||||||
usemtl Material.001
|
|
||||||
s 1
|
|
||||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
|
||||||
f 5/5/1 6/6/1 7/7/1 8/8/1
|
|
||||||
f 9/9/1 10/10/1 11/11/1 12/12/1
|
|
||||||
f 2/2/1 13/13/1 14/14/1 3/3/1
|
|
||||||
f 6/6/1 15/15/1 16/16/1 7/7/1
|
|
||||||
f 10/10/1 1/1/1 4/4/1 11/11/1
|
|
||||||
f 13/17/2 5/18/2 6/19/2 15/20/2 9/21/2 10/22/2 1/23/2 2/24/2
|
|
||||||
f 12/25/3 17/26/3 18/27/3 11/28/3
|
|
||||||
f 13/13/1 5/5/1 8/8/1 14/14/1
|
|
||||||
f 15/15/1 9/9/1 12/12/1 16/16/1
|
|
||||||
f 16/29/4 19/30/4 17/31/4 12/32/4
|
|
||||||
f 4/33/5 20/34/5 21/35/5 3/36/5
|
|
||||||
f 11/37/6 18/38/6 20/39/6 4/40/6
|
|
||||||
f 7/41/7 22/42/7 19/43/7 16/44/7
|
|
||||||
f 14/45/8 23/46/8 24/47/8 8/48/8
|
|
||||||
f 8/49/9 24/50/9 22/51/9 7/52/9
|
|
||||||
f 3/53/10 21/54/10 23/55/10 14/56/10
|
|
||||||
f 25/57/11 26/58/11 27/59/11 28/60/11
|
|
||||||
f 28/60/12 27/59/12 29/61/12 30/62/12
|
|
||||||
f 30/62/13 29/61/13 31/63/13 32/64/13
|
|
||||||
f 32/64/14 31/63/14 33/65/14 34/66/14
|
|
||||||
f 34/66/15 33/65/15 35/67/15 36/68/15
|
|
||||||
f 36/68/16 35/67/16 37/69/16 38/70/16
|
|
||||||
f 38/70/17 37/69/17 39/71/17 40/72/17
|
|
||||||
f 40/72/18 39/71/18 41/73/18 42/74/18
|
|
||||||
f 42/74/19 41/73/19 43/75/19 44/76/19
|
|
||||||
f 44/76/20 43/75/20 45/77/20 46/78/20
|
|
||||||
f 46/79/21 45/80/21 47/81/21 48/82/21
|
|
||||||
f 48/82/22 47/81/22 49/83/22 50/84/22
|
|
||||||
f 50/84/23 49/83/23 51/85/23 52/86/23
|
|
||||||
f 26/87/24 53/88/24 54/89/24 55/90/24 51/91/24 49/92/24 47/93/24 45/94/24 43/95/24 41/96/24 39/97/24 37/98/24 35/99/24 33/100/24 31/101/24 29/102/24 27/103/24
|
|
||||||
f 52/86/25 51/85/25 55/104/25 56/105/25
|
|
||||||
f 57/106/26 53/107/26 26/108/26 25/109/26
|
|
||||||
f 56/105/27 55/104/27 54/110/27 58/111/27
|
|
||||||
f 58/111/28 54/110/28 53/112/28 57/113/28
|
|
||||||
g Cube.001_Cube.001_Display
|
|
||||||
usemtl Display
|
|
||||||
f 57/114/29 25/115/29 28/116/29 30/117/29 32/118/29 34/119/29 36/120/29 38/121/29 40/122/29 42/123/29 44/124/29 46/125/29 48/126/29 50/127/29 52/128/29 56/129/29 58/130/29
|
|
|
@ -1,262 +0,0 @@
|
||||||
# Blender v2.92.0 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_hfs_smr60.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.303593 1.055075 -0.117324
|
|
||||||
v 0.302187 1.055075 -0.144136
|
|
||||||
v 0.302187 1.055075 -0.144136
|
|
||||||
v 0.303593 1.055075 -0.117324
|
|
||||||
v 0.255424 1.055075 -0.160696
|
|
||||||
v 0.237458 1.055075 -0.140744
|
|
||||||
v 0.237458 1.055075 -0.140744
|
|
||||||
v 0.255424 1.055075 -0.160696
|
|
||||||
v 0.258816 1.055075 -0.095967
|
|
||||||
v 0.285627 1.055075 -0.097372
|
|
||||||
v 0.285627 1.055075 -0.097372
|
|
||||||
v 0.258816 1.055075 -0.095967
|
|
||||||
v 0.282235 1.055075 -0.162102
|
|
||||||
v 0.282235 1.055075 -0.162102
|
|
||||||
v 0.238864 1.055075 -0.113932
|
|
||||||
v 0.238864 1.055075 -0.113932
|
|
||||||
v 0.258816 -0.499729 -0.095967
|
|
||||||
v 0.285628 -0.499729 -0.097371
|
|
||||||
v 0.238864 -0.499729 -0.113932
|
|
||||||
v 0.303593 -0.499729 -0.117324
|
|
||||||
v 0.302187 -0.499729 -0.144136
|
|
||||||
v 0.237459 -0.499729 -0.140743
|
|
||||||
v 0.282236 -0.499729 -0.162101
|
|
||||||
v 0.255424 -0.499729 -0.160696
|
|
||||||
v 0.159129 0.866098 -0.452621
|
|
||||||
v 0.146531 0.866098 -0.446612
|
|
||||||
v 0.149344 0.932433 -0.440714
|
|
||||||
v 0.161942 0.932433 -0.446723
|
|
||||||
v 0.157674 0.996219 -0.423250
|
|
||||||
v 0.170272 0.996219 -0.429259
|
|
||||||
v 0.171201 1.055004 -0.394890
|
|
||||||
v 0.183799 1.055004 -0.400899
|
|
||||||
v 0.189406 1.106529 -0.356723
|
|
||||||
v 0.202004 1.106529 -0.362732
|
|
||||||
v 0.211588 1.148815 -0.310217
|
|
||||||
v 0.224186 1.148815 -0.316226
|
|
||||||
v 0.236896 1.180236 -0.257158
|
|
||||||
v 0.249494 1.180236 -0.263167
|
|
||||||
v 0.264356 1.199586 -0.199586
|
|
||||||
v 0.276954 1.199586 -0.205595
|
|
||||||
v 0.292914 1.206119 -0.139713
|
|
||||||
v 0.305512 1.206119 -0.145722
|
|
||||||
v 0.321472 1.199586 -0.079840
|
|
||||||
v 0.334070 1.199586 -0.085849
|
|
||||||
v 0.348933 1.180236 -0.022268
|
|
||||||
v 0.361531 1.180236 -0.028277
|
|
||||||
v 0.374240 1.148815 0.030791
|
|
||||||
v 0.386839 1.148815 0.024782
|
|
||||||
v 0.396422 1.106529 0.077297
|
|
||||||
v 0.409021 1.106529 0.071287
|
|
||||||
v 0.414627 1.055003 0.115463
|
|
||||||
v 0.427225 1.055003 0.109454
|
|
||||||
v 0.439297 0.866098 0.167185
|
|
||||||
v 0.436484 0.932432 0.161288
|
|
||||||
v 0.428155 0.996218 0.143824
|
|
||||||
v 0.440753 0.996218 0.137815
|
|
||||||
v 0.451895 0.866098 0.161176
|
|
||||||
v 0.449083 0.932432 0.155279
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.033220 0.437382
|
|
||||||
vt 0.009730 0.997467
|
|
||||||
vt 0.000000 0.983831
|
|
||||||
vt 0.000000 0.967080
|
|
||||||
vt 0.009730 0.957025
|
|
||||||
vt 0.023490 0.959558
|
|
||||||
vt 0.033220 0.973194
|
|
||||||
vt 0.033220 0.989946
|
|
||||||
vt 0.023490 1.000000
|
|
||||||
vt 0.250000 0.984749
|
|
||||||
vt 0.250000 0.001193
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.983556
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.983556
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.001193
|
|
||||||
vt 0.265954 0.984749
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.250000 0.639500
|
|
||||||
vt 0.250000 0.005108
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 0.634392
|
|
||||||
vt 0.250000 0.634392
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.005108
|
|
||||||
vt 0.265954 0.639500
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.265954 0.000000
|
|
||||||
vt 0.265954 1.000000
|
|
||||||
vt 0.258978 0.361919
|
|
||||||
vt 0.250000 0.361919
|
|
||||||
vt 0.250000 0.331604
|
|
||||||
vt 0.258978 0.331604
|
|
||||||
vt 0.250000 0.295958
|
|
||||||
vt 0.258978 0.295958
|
|
||||||
vt 0.250000 0.256351
|
|
||||||
vt 0.258978 0.256351
|
|
||||||
vt 0.250000 0.214304
|
|
||||||
vt 0.258978 0.214304
|
|
||||||
vt 0.250000 0.171433
|
|
||||||
vt 0.258978 0.171433
|
|
||||||
vt 0.250000 0.129386
|
|
||||||
vt 0.258978 0.129386
|
|
||||||
vt 0.250000 0.089778
|
|
||||||
vt 0.258978 0.089778
|
|
||||||
vt 0.250000 0.054132
|
|
||||||
vt 0.258978 0.054132
|
|
||||||
vt 0.250000 0.023818
|
|
||||||
vt 0.258978 0.023818
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258977 0.223103
|
|
||||||
vt 0.250000 0.223103
|
|
||||||
vt 0.250000 0.196398
|
|
||||||
vt 0.258977 0.196398
|
|
||||||
vt 0.250000 0.163663
|
|
||||||
vt 0.258977 0.163663
|
|
||||||
vt 0.250000 0.126156
|
|
||||||
vt 0.258977 0.126156
|
|
||||||
vt 0.218691 0.000000
|
|
||||||
vt 0.218691 0.437382
|
|
||||||
vt 0.176027 0.433180
|
|
||||||
vt 0.135002 0.420735
|
|
||||||
vt 0.097193 0.400526
|
|
||||||
vt 0.064053 0.373329
|
|
||||||
vt 0.036856 0.340189
|
|
||||||
vt 0.016647 0.302381
|
|
||||||
vt 0.004202 0.261356
|
|
||||||
vt 0.000000 0.218691
|
|
||||||
vt 0.004202 0.176027
|
|
||||||
vt 0.016647 0.135002
|
|
||||||
vt 0.036856 0.097193
|
|
||||||
vt 0.064053 0.064053
|
|
||||||
vt 0.097193 0.036856
|
|
||||||
vt 0.135001 0.016647
|
|
||||||
vt 0.176026 0.004202
|
|
||||||
vt 0.250000 0.085319
|
|
||||||
vt 0.258977 0.085319
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258978 0.000000
|
|
||||||
vt 0.258978 0.437382
|
|
||||||
vt 0.250000 0.437382
|
|
||||||
vt 0.250000 0.042722
|
|
||||||
vt 0.258977 0.042722
|
|
||||||
vt 0.250000 0.000000
|
|
||||||
vt 0.258977 0.000000
|
|
||||||
vt 0.218691 0.562618
|
|
||||||
vt 0.218691 1.000000
|
|
||||||
vt 0.176026 0.995798
|
|
||||||
vt 0.135001 0.983353
|
|
||||||
vt 0.097193 0.963144
|
|
||||||
vt 0.064053 0.935947
|
|
||||||
vt 0.036856 0.902807
|
|
||||||
vt 0.016647 0.864998
|
|
||||||
vt 0.004202 0.823973
|
|
||||||
vt 0.000000 0.781309
|
|
||||||
vt 0.004202 0.738644
|
|
||||||
vt 0.016647 0.697619
|
|
||||||
vt 0.036856 0.659811
|
|
||||||
vt 0.064053 0.626671
|
|
||||||
vt 0.097193 0.599474
|
|
||||||
vt 0.135002 0.579265
|
|
||||||
vt 0.176027 0.566820
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 -0.0000
|
|
||||||
vn 0.0523 0.0000 0.9986
|
|
||||||
vn -0.6691 -0.0000 0.7431
|
|
||||||
vn 0.9986 0.0000 -0.0524
|
|
||||||
vn 0.7431 0.0000 0.6691
|
|
||||||
vn -0.9986 -0.0000 0.0523
|
|
||||||
vn -0.0523 -0.0000 -0.9986
|
|
||||||
vn -0.7431 -0.0000 -0.6691
|
|
||||||
vn 0.6691 -0.0000 -0.7431
|
|
||||||
vn -0.4284 0.0980 -0.8982
|
|
||||||
vn -0.4120 0.2903 -0.8637
|
|
||||||
vn -0.3797 0.4714 -0.7960
|
|
||||||
vn -0.3328 0.6344 -0.6977
|
|
||||||
vn -0.2731 0.7730 -0.5726
|
|
||||||
vn -0.2029 0.8819 -0.4255
|
|
||||||
vn -0.1250 0.9569 -0.2620
|
|
||||||
vn -0.0422 0.9952 -0.0885
|
|
||||||
vn 0.0422 0.9952 0.0885
|
|
||||||
vn 0.1250 0.9569 0.2620
|
|
||||||
vn 0.2029 0.8819 0.4255
|
|
||||||
vn 0.2731 0.7730 0.5726
|
|
||||||
vn 0.3328 0.6344 0.6977
|
|
||||||
vn -0.9026 0.0000 0.4305
|
|
||||||
vn 0.3797 0.4714 0.7960
|
|
||||||
vn 0.0000 -1.0000 0.0000
|
|
||||||
vn 0.4120 0.2903 0.8637
|
|
||||||
vn 0.4284 0.0980 0.8982
|
|
||||||
vn 0.9026 0.0000 -0.4305
|
|
||||||
g Cube.001_Cube.001_Material.001
|
|
||||||
usemtl Material.001
|
|
||||||
s 1
|
|
||||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
|
||||||
f 5/5/1 6/6/1 7/7/1 8/8/1
|
|
||||||
f 9/9/1 10/10/1 11/11/1 12/12/1
|
|
||||||
f 2/2/1 13/13/1 14/14/1 3/3/1
|
|
||||||
f 6/6/1 15/15/1 16/16/1 7/7/1
|
|
||||||
f 10/10/1 1/1/1 4/4/1 11/11/1
|
|
||||||
f 13/17/2 5/18/2 6/19/2 15/20/2 9/21/2 10/22/2 1/23/2 2/24/2
|
|
||||||
f 12/25/3 17/26/3 18/27/3 11/28/3
|
|
||||||
f 13/13/1 5/5/1 8/8/1 14/14/1
|
|
||||||
f 15/15/1 9/9/1 12/12/1 16/16/1
|
|
||||||
f 16/29/4 19/30/4 17/31/4 12/32/4
|
|
||||||
f 4/33/5 20/34/5 21/35/5 3/36/5
|
|
||||||
f 11/37/6 18/38/6 20/39/6 4/40/6
|
|
||||||
f 7/41/7 22/42/7 19/43/7 16/44/7
|
|
||||||
f 14/45/8 23/46/8 24/47/8 8/48/8
|
|
||||||
f 8/49/9 24/50/9 22/51/9 7/52/9
|
|
||||||
f 3/53/10 21/54/10 23/55/10 14/56/10
|
|
||||||
f 25/57/11 26/58/11 27/59/11 28/60/11
|
|
||||||
f 28/60/12 27/59/12 29/61/12 30/62/12
|
|
||||||
f 30/62/13 29/61/13 31/63/13 32/64/13
|
|
||||||
f 32/64/14 31/63/14 33/65/14 34/66/14
|
|
||||||
f 34/66/15 33/65/15 35/67/15 36/68/15
|
|
||||||
f 36/68/16 35/67/16 37/69/16 38/70/16
|
|
||||||
f 38/70/17 37/69/17 39/71/17 40/72/17
|
|
||||||
f 40/72/18 39/71/18 41/73/18 42/74/18
|
|
||||||
f 42/74/19 41/73/19 43/75/19 44/76/19
|
|
||||||
f 44/76/20 43/75/20 45/77/20 46/78/20
|
|
||||||
f 46/79/21 45/80/21 47/81/21 48/82/21
|
|
||||||
f 48/82/22 47/81/22 49/83/22 50/84/22
|
|
||||||
f 50/84/23 49/83/23 51/85/23 52/86/23
|
|
||||||
f 26/87/24 53/88/24 54/89/24 55/90/24 51/91/24 49/92/24 47/93/24 45/94/24 43/95/24 41/96/24 39/97/24 37/98/24 35/99/24 33/100/24 31/101/24 29/102/24 27/103/24
|
|
||||||
f 52/86/25 51/85/25 55/104/25 56/105/25
|
|
||||||
f 57/106/26 53/107/26 26/108/26 25/109/26
|
|
||||||
f 56/105/27 55/104/27 54/110/27 58/111/27
|
|
||||||
f 58/111/28 54/110/28 53/112/28 57/113/28
|
|
||||||
g Cube.001_Cube.001_Display
|
|
||||||
usemtl Display
|
|
||||||
f 57/114/29 25/115/29 28/116/29 30/117/29 32/118/29 34/119/29 36/120/29 38/121/29 40/122/29 42/123/29 44/124/29 46/125/29 48/126/29 50/127/29 52/128/29 56/129/29 58/130/29
|
|
|
@ -1,227 +0,0 @@
|
||||||
# Blender v2.93.5 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_zs10_smr0.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.000000 1.300000 -0.324543
|
|
||||||
v 0.100000 1.200000 -0.324543
|
|
||||||
v 0.100000 1.200000 -0.344543
|
|
||||||
v 0.000000 1.300000 -0.344543
|
|
||||||
v -0.100000 1.200000 -0.344543
|
|
||||||
v -0.100000 1.200000 -0.324543
|
|
||||||
v 0.000000 0.800000 -0.344543
|
|
||||||
v 0.100000 0.700000 -0.344543
|
|
||||||
v 0.100000 0.700000 -0.324543
|
|
||||||
v 0.000000 0.800000 -0.324543
|
|
||||||
v -0.100000 0.700000 -0.344543
|
|
||||||
v -0.100000 0.700000 -0.324543
|
|
||||||
v 0.100000 0.800000 -0.324543
|
|
||||||
v 0.000000 0.900000 -0.324543
|
|
||||||
v 0.100000 0.900000 -0.324543
|
|
||||||
v 0.000000 1.000000 -0.324543
|
|
||||||
v 0.100000 1.000000 -0.324543
|
|
||||||
v 0.000000 1.100000 -0.324543
|
|
||||||
v 0.100000 1.100000 -0.324543
|
|
||||||
v 0.000000 1.200000 -0.324543
|
|
||||||
v -0.100000 0.800000 -0.324543
|
|
||||||
v -0.100000 0.900000 -0.324543
|
|
||||||
v -0.100000 1.000000 -0.324543
|
|
||||||
v -0.100000 1.100000 -0.324543
|
|
||||||
v 0.100000 0.800000 -0.344543
|
|
||||||
v 0.100000 0.900000 -0.344543
|
|
||||||
v 0.100000 1.000000 -0.344543
|
|
||||||
v 0.100000 1.100000 -0.344543
|
|
||||||
v -0.100000 0.800000 -0.344543
|
|
||||||
v -0.100000 0.900000 -0.344543
|
|
||||||
v -0.100000 1.000000 -0.344543
|
|
||||||
v -0.100000 1.100000 -0.344543
|
|
||||||
v 0.024805 1.055075 -0.324528
|
|
||||||
v 0.000000 1.055075 -0.334802
|
|
||||||
v 0.000000 1.055075 -0.334802
|
|
||||||
v 0.024805 1.055075 -0.324528
|
|
||||||
v -0.035079 1.055075 -0.299723
|
|
||||||
v -0.024805 1.055075 -0.274918
|
|
||||||
v -0.024805 1.055075 -0.274918
|
|
||||||
v -0.035079 1.055075 -0.299723
|
|
||||||
v 0.024805 1.055075 -0.274918
|
|
||||||
v 0.035079 1.055075 -0.299723
|
|
||||||
v 0.035079 1.055075 -0.299723
|
|
||||||
v 0.024805 1.055075 -0.274918
|
|
||||||
v -0.024805 1.055075 -0.324528
|
|
||||||
v -0.024805 1.055075 -0.324528
|
|
||||||
v 0.000000 1.055075 -0.264644
|
|
||||||
v 0.000000 1.055075 -0.264644
|
|
||||||
v 0.024805 -0.499729 -0.274918
|
|
||||||
v 0.035080 -0.499729 -0.299723
|
|
||||||
v 0.000000 -0.499729 -0.264644
|
|
||||||
v 0.024805 -0.499729 -0.324528
|
|
||||||
v 0.000000 -0.499729 -0.334802
|
|
||||||
v -0.024804 -0.499729 -0.274918
|
|
||||||
v -0.024804 -0.499729 -0.324528
|
|
||||||
v -0.035079 -0.499729 -0.299723
|
|
||||||
vt 0.583333 0.875000
|
|
||||||
vt 0.583333 0.750000
|
|
||||||
vt 0.583333 0.500000
|
|
||||||
vt 0.583333 0.375000
|
|
||||||
vt 0.583333 0.250000
|
|
||||||
vt 0.583333 1.000000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.416667 0.750000
|
|
||||||
vt 0.416667 0.875000
|
|
||||||
vt 0.375000 0.875000
|
|
||||||
vt 0.458333 0.750000
|
|
||||||
vt 0.458333 0.875000
|
|
||||||
vt 0.500000 0.750000
|
|
||||||
vt 0.500000 0.875000
|
|
||||||
vt 0.541667 0.750000
|
|
||||||
vt 0.541667 0.875000
|
|
||||||
vt 0.416667 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.458333 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.541667 1.000000
|
|
||||||
vt 0.416667 0.500000
|
|
||||||
vt 0.458333 0.500000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.541667 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.416667 0.000000
|
|
||||||
vt 0.416667 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.458333 0.000000
|
|
||||||
vt 0.458333 0.250000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.250000
|
|
||||||
vt 0.541667 0.000000
|
|
||||||
vt 0.541667 0.250000
|
|
||||||
vt 0.583333 0.000000
|
|
||||||
vt 0.372863 0.578719
|
|
||||||
vt 0.372317 0.613951
|
|
||||||
vt 0.371666 0.613734
|
|
||||||
vt 0.372221 0.578991
|
|
||||||
vt 0.315877 0.640082
|
|
||||||
vt 0.292344 0.614764
|
|
||||||
vt 0.292986 0.614492
|
|
||||||
vt 0.316131 0.639438
|
|
||||||
vt 0.315346 0.553400
|
|
||||||
vt 0.349331 0.553400
|
|
||||||
vt 0.349077 0.554044
|
|
||||||
vt 0.315664 0.554020
|
|
||||||
vt 0.349861 0.640082
|
|
||||||
vt 0.349543 0.639462
|
|
||||||
vt 0.292889 0.579531
|
|
||||||
vt 0.293541 0.579748
|
|
||||||
vt 0.444102 0.636706
|
|
||||||
vt 0.409596 0.636706
|
|
||||||
vt 0.385196 0.612306
|
|
||||||
vt 0.385196 0.577799
|
|
||||||
vt 0.409596 0.553400
|
|
||||||
vt 0.444102 0.553400
|
|
||||||
vt 0.468502 0.577800
|
|
||||||
vt 0.468502 0.612306
|
|
||||||
vt 0.037160 1.987962
|
|
||||||
vt 0.036793 0.000397
|
|
||||||
vt 0.071486 0.000384
|
|
||||||
vt 0.071853 1.987948
|
|
||||||
vt 0.002468 1.987974
|
|
||||||
vt 0.002100 0.000409
|
|
||||||
vt 0.106546 1.987936
|
|
||||||
vt 0.106179 0.000371
|
|
||||||
vt 0.140872 0.000358
|
|
||||||
vt 0.141239 1.987923
|
|
||||||
vt 0.245318 1.987885
|
|
||||||
vt 0.244951 0.000319
|
|
||||||
vt 0.279643 0.000307
|
|
||||||
vt 0.280011 1.987871
|
|
||||||
vt 0.175932 1.987910
|
|
||||||
vt 0.175565 0.000345
|
|
||||||
vt 0.210258 0.000332
|
|
||||||
vt 0.210625 1.987897
|
|
||||||
vt 0.125000 1.000000
|
|
||||||
vt 0.000000 1.000000
|
|
||||||
vt -0.000000 0.875000
|
|
||||||
vt 0.000000 0.750000
|
|
||||||
vt 0.000000 0.625000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.000000 0.375000
|
|
||||||
vt 0.125000 0.375000
|
|
||||||
vt 0.250000 0.875000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.375000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.250000 0.625000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vn 0.0001 -0.7071 0.7071
|
|
||||||
vn 0.9239 0.3827 -0.0000
|
|
||||||
vn -0.0000 0.3827 -0.9239
|
|
||||||
vn 0.0002 -0.7071 -0.7071
|
|
||||||
vn -0.9239 0.3827 0.0000
|
|
||||||
vn 0.0000 0.3827 0.9239
|
|
||||||
vn -0.7071 -0.7071 0.0000
|
|
||||||
vn 0.7071 -0.7071 0.0000
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 1.0000 0.0000 0.0000
|
|
||||||
vn -1.0000 0.0000 0.0000
|
|
||||||
vn 0.0000 1.0000 0.0000
|
|
||||||
vn 0.9239 0.0000 0.3827
|
|
||||||
vn 0.3827 -0.0000 0.9239
|
|
||||||
vn 0.3827 0.0000 -0.9239
|
|
||||||
vn 0.9239 0.0000 -0.3827
|
|
||||||
vn -0.3827 -0.0000 0.9239
|
|
||||||
vn -0.9239 -0.0000 -0.3827
|
|
||||||
vn -0.9239 -0.0000 0.3827
|
|
||||||
vn -0.3827 -0.0000 -0.9239
|
|
||||||
vn 0.0000 0.0000 -1.0000
|
|
||||||
g Cube.001_Cube.001_Default_OBJ
|
|
||||||
usemtl Default_OBJ
|
|
||||||
s off
|
|
||||||
f 1/1/1 2/2/2 3/3/3 4/4/4 5/5/5 6/6/6
|
|
||||||
f 7/7/7 8/8/7 9/9/7 10/10/7
|
|
||||||
f 11/11/8 7/7/8 10/10/8 12/12/8
|
|
||||||
f 9/9/9 13/13/9 14/14/9 10/15/9
|
|
||||||
f 13/13/9 15/16/9 16/17/9 14/14/9
|
|
||||||
f 15/16/9 17/18/9 18/19/9 16/17/9
|
|
||||||
f 17/18/9 19/20/9 20/21/9 18/19/9
|
|
||||||
f 19/20/9 2/2/9 1/1/9 20/21/9
|
|
||||||
f 10/15/9 14/14/9 21/22/9 12/23/9
|
|
||||||
f 14/14/9 16/17/9 22/24/9 21/22/9
|
|
||||||
f 16/17/9 18/19/9 23/25/9 22/24/9
|
|
||||||
f 18/19/9 20/21/9 24/26/9 23/25/9
|
|
||||||
f 20/21/9 1/1/9 6/6/9 24/26/9
|
|
||||||
f 8/8/10 25/27/10 13/13/10 9/9/10
|
|
||||||
f 25/27/10 26/28/10 15/16/10 13/13/10
|
|
||||||
f 26/28/10 27/29/10 17/18/10 15/16/10
|
|
||||||
f 27/29/10 28/30/10 19/20/10 17/18/10
|
|
||||||
f 28/30/10 3/3/10 2/2/10 19/20/10
|
|
||||||
f 12/31/11 21/32/11 29/33/11 11/34/11
|
|
||||||
f 21/32/11 22/35/11 30/36/11 29/33/11
|
|
||||||
f 22/35/11 23/37/11 31/38/11 30/36/11
|
|
||||||
f 23/37/11 24/39/11 32/40/11 31/38/11
|
|
||||||
f 24/39/11 6/41/11 5/5/11 32/40/11
|
|
||||||
s 1
|
|
||||||
f 33/42/9 34/43/9 35/44/9 36/45/9
|
|
||||||
f 37/46/9 38/47/9 39/48/9 40/49/9
|
|
||||||
f 41/50/9 42/51/9 43/52/9 44/53/9
|
|
||||||
f 34/43/9 45/54/9 46/55/9 35/44/9
|
|
||||||
f 38/47/9 47/56/9 48/57/9 39/48/9
|
|
||||||
f 42/51/9 33/42/9 36/45/9 43/52/9
|
|
||||||
f 45/58/12 37/59/12 38/60/12 47/61/12 41/62/12 42/63/12 33/64/12 34/65/12
|
|
||||||
f 44/66/13 49/67/13 50/68/13 43/69/13
|
|
||||||
f 45/54/9 37/46/9 40/49/9 46/55/9
|
|
||||||
f 47/56/9 41/50/9 44/53/9 48/57/9
|
|
||||||
f 48/70/14 51/71/14 49/67/14 44/66/14
|
|
||||||
f 36/72/15 52/73/15 53/74/15 35/75/15
|
|
||||||
f 43/69/16 50/68/16 52/73/16 36/72/16
|
|
||||||
f 39/76/17 54/77/17 51/78/17 48/79/17
|
|
||||||
f 46/80/18 55/81/18 56/82/18 40/83/18
|
|
||||||
f 40/83/19 56/82/19 54/77/19 39/76/19
|
|
||||||
f 35/75/20 53/74/20 55/81/20 46/80/20
|
|
||||||
g Cube.001_Cube.001_Anzeige
|
|
||||||
usemtl Anzeige
|
|
||||||
s off
|
|
||||||
f 4/84/21 3/85/21 28/86/21 27/87/21 26/88/21 25/89/21 8/90/21 7/91/21
|
|
||||||
f 32/92/21 5/93/21 4/84/21 7/91/21 11/94/21 29/95/21 30/96/21 31/97/21
|
|
|
@ -1,228 +0,0 @@
|
||||||
# Blender v2.93.5 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_zs10_smr30.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.144810 1.300000 -0.290445
|
|
||||||
v 0.234304 1.200000 -0.245825
|
|
||||||
v 0.243228 1.200000 -0.263724
|
|
||||||
v 0.153734 1.300000 -0.308343
|
|
||||||
v 0.064241 1.200000 -0.352963
|
|
||||||
v 0.055317 1.200000 -0.335064
|
|
||||||
v 0.153734 0.800000 -0.308343
|
|
||||||
v 0.243228 0.700000 -0.263724
|
|
||||||
v 0.234304 0.700000 -0.245825
|
|
||||||
v 0.144810 0.800000 -0.290445
|
|
||||||
v 0.064241 0.700000 -0.352963
|
|
||||||
v 0.055317 0.700000 -0.335064
|
|
||||||
v 0.234304 0.800000 -0.245825
|
|
||||||
v 0.144810 0.900000 -0.290445
|
|
||||||
v 0.234304 0.900000 -0.245825
|
|
||||||
v 0.144810 1.000000 -0.290445
|
|
||||||
v 0.234304 1.000000 -0.245825
|
|
||||||
v 0.144810 1.100000 -0.290445
|
|
||||||
v 0.234304 1.100000 -0.245825
|
|
||||||
v 0.144810 1.200000 -0.290445
|
|
||||||
v 0.055317 0.800000 -0.335064
|
|
||||||
v 0.055317 0.900000 -0.335064
|
|
||||||
v 0.055317 1.000000 -0.335064
|
|
||||||
v 0.055317 1.100000 -0.335064
|
|
||||||
v 0.243228 0.800000 -0.263724
|
|
||||||
v 0.243228 0.900000 -0.263724
|
|
||||||
v 0.243228 1.000000 -0.263724
|
|
||||||
v 0.243228 1.100000 -0.263724
|
|
||||||
v 0.064241 0.800000 -0.352963
|
|
||||||
v 0.064241 0.900000 -0.352963
|
|
||||||
v 0.064241 1.000000 -0.352963
|
|
||||||
v 0.064241 1.100000 -0.352963
|
|
||||||
v 0.167003 1.055075 -0.279363
|
|
||||||
v 0.149388 1.055075 -0.299626
|
|
||||||
v 0.149388 1.055075 -0.299626
|
|
||||||
v 0.167003 1.055075 -0.279363
|
|
||||||
v 0.102342 1.055075 -0.283885
|
|
||||||
v 0.100469 1.055075 -0.257101
|
|
||||||
v 0.100469 1.055075 -0.257101
|
|
||||||
v 0.102342 1.055075 -0.283885
|
|
||||||
v 0.144867 1.055075 -0.234966
|
|
||||||
v 0.165129 1.055075 -0.252580
|
|
||||||
v 0.165129 1.055075 -0.252580
|
|
||||||
v 0.144867 1.055075 -0.234966
|
|
||||||
v 0.122605 1.055075 -0.301499
|
|
||||||
v 0.122605 1.055075 -0.301499
|
|
||||||
v 0.118084 1.055075 -0.236839
|
|
||||||
v 0.118084 1.055075 -0.236839
|
|
||||||
v 0.144867 -0.499729 -0.234966
|
|
||||||
v 0.165130 -0.499729 -0.252580
|
|
||||||
v 0.118084 -0.499729 -0.236839
|
|
||||||
v 0.167003 -0.499729 -0.279363
|
|
||||||
v 0.149388 -0.499729 -0.299626
|
|
||||||
v 0.100470 -0.499729 -0.257101
|
|
||||||
v 0.122606 -0.499729 -0.301499
|
|
||||||
v 0.102342 -0.499729 -0.283885
|
|
||||||
vt 0.583333 0.875000
|
|
||||||
vt 0.583333 0.750000
|
|
||||||
vt 0.583333 0.500000
|
|
||||||
vt 0.583333 0.375000
|
|
||||||
vt 0.583333 0.250000
|
|
||||||
vt 0.583333 1.000000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.416667 0.750000
|
|
||||||
vt 0.416667 0.875000
|
|
||||||
vt 0.375000 0.875000
|
|
||||||
vt 0.458333 0.750000
|
|
||||||
vt 0.458333 0.875000
|
|
||||||
vt 0.500000 0.750000
|
|
||||||
vt 0.500000 0.875000
|
|
||||||
vt 0.541667 0.750000
|
|
||||||
vt 0.541667 0.875000
|
|
||||||
vt 0.416667 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.458333 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.541667 1.000000
|
|
||||||
vt 0.416667 0.500000
|
|
||||||
vt 0.458333 0.500000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.541667 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.416667 0.000000
|
|
||||||
vt 0.416667 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.458333 0.000000
|
|
||||||
vt 0.458333 0.250000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.250000
|
|
||||||
vt 0.541667 0.000000
|
|
||||||
vt 0.541667 0.250000
|
|
||||||
vt 0.583333 0.000000
|
|
||||||
vt 0.372863 0.578719
|
|
||||||
vt 0.372317 0.613951
|
|
||||||
vt 0.371666 0.613734
|
|
||||||
vt 0.372221 0.578991
|
|
||||||
vt 0.315877 0.640082
|
|
||||||
vt 0.292344 0.614764
|
|
||||||
vt 0.292986 0.614492
|
|
||||||
vt 0.316131 0.639438
|
|
||||||
vt 0.315346 0.553400
|
|
||||||
vt 0.349331 0.553400
|
|
||||||
vt 0.349077 0.554044
|
|
||||||
vt 0.315664 0.554020
|
|
||||||
vt 0.349861 0.640082
|
|
||||||
vt 0.349543 0.639462
|
|
||||||
vt 0.292889 0.579531
|
|
||||||
vt 0.293541 0.579748
|
|
||||||
vt 0.444102 0.636706
|
|
||||||
vt 0.409596 0.636706
|
|
||||||
vt 0.385196 0.612306
|
|
||||||
vt 0.385196 0.577799
|
|
||||||
vt 0.409596 0.553400
|
|
||||||
vt 0.444102 0.553400
|
|
||||||
vt 0.468502 0.577800
|
|
||||||
vt 0.468502 0.612306
|
|
||||||
vt 0.037160 1.987962
|
|
||||||
vt 0.036793 0.000397
|
|
||||||
vt 0.071486 0.000384
|
|
||||||
vt 0.071853 1.987948
|
|
||||||
vt 0.002468 1.987974
|
|
||||||
vt 0.002100 0.000409
|
|
||||||
vt 0.106546 1.987936
|
|
||||||
vt 0.106179 0.000371
|
|
||||||
vt 0.140872 0.000358
|
|
||||||
vt 0.141239 1.987923
|
|
||||||
vt 0.245318 1.987885
|
|
||||||
vt 0.244951 0.000319
|
|
||||||
vt 0.279643 0.000307
|
|
||||||
vt 0.280011 1.987871
|
|
||||||
vt 0.175932 1.987910
|
|
||||||
vt 0.175565 0.000345
|
|
||||||
vt 0.210258 0.000332
|
|
||||||
vt 0.210625 1.987897
|
|
||||||
vt 0.125000 1.000000
|
|
||||||
vt 0.000000 1.000000
|
|
||||||
vt -0.000000 0.875000
|
|
||||||
vt 0.000000 0.750000
|
|
||||||
vt 0.000000 0.625000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.000000 0.375000
|
|
||||||
vt 0.125000 0.375000
|
|
||||||
vt 0.250000 0.875000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.375000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.250000 0.625000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vn -0.3152 -0.7071 0.6329
|
|
||||||
vn 0.8268 0.3827 0.4122
|
|
||||||
vn 0.4122 0.3827 -0.8268
|
|
||||||
vn 0.3156 -0.7071 -0.6327
|
|
||||||
vn -0.8268 0.3827 -0.4122
|
|
||||||
vn -0.4122 0.3827 0.8268
|
|
||||||
vn -0.6328 -0.7071 -0.3155
|
|
||||||
vn 0.6328 -0.7071 0.3155
|
|
||||||
vn -0.4462 -0.0000 0.8949
|
|
||||||
vn 0.8949 -0.0000 0.4462
|
|
||||||
vn -0.8949 0.0000 -0.4462
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 -0.0000
|
|
||||||
vn 0.6561 0.0000 0.7547
|
|
||||||
vn -0.0698 -0.0000 0.9976
|
|
||||||
vn 0.7547 0.0000 -0.6561
|
|
||||||
vn 0.9976 0.0000 0.0698
|
|
||||||
vn -0.7547 -0.0000 0.6561
|
|
||||||
vn -0.6561 -0.0000 -0.7547
|
|
||||||
vn -0.9976 -0.0000 -0.0698
|
|
||||||
vn 0.0698 -0.0000 -0.9976
|
|
||||||
vn 0.4462 0.0000 -0.8949
|
|
||||||
g Cube.001_Cube.001_Default_OBJ
|
|
||||||
usemtl Default_OBJ
|
|
||||||
s off
|
|
||||||
f 1/1/1 2/2/2 3/3/3 4/4/4 5/5/5 6/6/6
|
|
||||||
f 7/7/7 8/8/7 9/9/7 10/10/7
|
|
||||||
f 11/11/8 7/7/8 10/10/8 12/12/8
|
|
||||||
f 9/9/9 13/13/9 14/14/9 10/15/9
|
|
||||||
f 13/13/9 15/16/9 16/17/9 14/14/9
|
|
||||||
f 15/16/9 17/18/9 18/19/9 16/17/9
|
|
||||||
f 17/18/9 19/20/9 20/21/9 18/19/9
|
|
||||||
f 19/20/9 2/2/9 1/1/9 20/21/9
|
|
||||||
f 10/15/9 14/14/9 21/22/9 12/23/9
|
|
||||||
f 14/14/9 16/17/9 22/24/9 21/22/9
|
|
||||||
f 16/17/9 18/19/9 23/25/9 22/24/9
|
|
||||||
f 18/19/9 20/21/9 24/26/9 23/25/9
|
|
||||||
f 20/21/9 1/1/9 6/6/9 24/26/9
|
|
||||||
f 8/8/10 25/27/10 13/13/10 9/9/10
|
|
||||||
f 25/27/10 26/28/10 15/16/10 13/13/10
|
|
||||||
f 26/28/10 27/29/10 17/18/10 15/16/10
|
|
||||||
f 27/29/10 28/30/10 19/20/10 17/18/10
|
|
||||||
f 28/30/10 3/3/10 2/2/10 19/20/10
|
|
||||||
f 12/31/11 21/32/11 29/33/11 11/34/11
|
|
||||||
f 21/32/11 22/35/11 30/36/11 29/33/11
|
|
||||||
f 22/35/11 23/37/11 31/38/11 30/36/11
|
|
||||||
f 23/37/11 24/39/11 32/40/11 31/38/11
|
|
||||||
f 24/39/11 6/41/11 5/5/11 32/40/11
|
|
||||||
s 1
|
|
||||||
f 33/42/12 34/43/12 35/44/12 36/45/12
|
|
||||||
f 37/46/12 38/47/12 39/48/12 40/49/12
|
|
||||||
f 41/50/12 42/51/12 43/52/12 44/53/12
|
|
||||||
f 34/43/12 45/54/12 46/55/12 35/44/12
|
|
||||||
f 38/47/12 47/56/12 48/57/12 39/48/12
|
|
||||||
f 42/51/12 33/42/12 36/45/12 43/52/12
|
|
||||||
f 45/58/13 37/59/13 38/60/13 47/61/13 41/62/13 42/63/13 33/64/13 34/65/13
|
|
||||||
f 44/66/14 49/67/14 50/68/14 43/69/14
|
|
||||||
f 45/54/12 37/46/12 40/49/12 46/55/12
|
|
||||||
f 47/56/12 41/50/12 44/53/12 48/57/12
|
|
||||||
f 48/70/15 51/71/15 49/67/15 44/66/15
|
|
||||||
f 36/72/16 52/73/16 53/74/16 35/75/16
|
|
||||||
f 43/69/17 50/68/17 52/73/17 36/72/17
|
|
||||||
f 39/76/18 54/77/18 51/78/18 48/79/18
|
|
||||||
f 46/80/19 55/81/19 56/82/19 40/83/19
|
|
||||||
f 40/83/20 56/82/20 54/77/20 39/76/20
|
|
||||||
f 35/75/21 53/74/21 55/81/21 46/80/21
|
|
||||||
g Cube.001_Cube.001_Anzeige
|
|
||||||
usemtl Anzeige
|
|
||||||
s off
|
|
||||||
f 4/84/22 3/85/22 28/86/22 27/87/22 26/88/22 25/89/22 8/90/22 7/91/22
|
|
||||||
f 32/92/22 5/93/22 4/84/22 7/91/22 11/94/22 29/95/22 30/96/22 31/97/22
|
|
|
@ -1,228 +0,0 @@
|
||||||
# Blender v2.93.5 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_zs10_smr45.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.229487 1.300000 -0.229487
|
|
||||||
v 0.300197 1.200000 -0.158776
|
|
||||||
v 0.314339 1.200000 -0.172918
|
|
||||||
v 0.243629 1.300000 -0.243629
|
|
||||||
v 0.172918 1.200000 -0.314339
|
|
||||||
v 0.158776 1.200000 -0.300197
|
|
||||||
v 0.243629 0.800000 -0.243629
|
|
||||||
v 0.314339 0.700000 -0.172918
|
|
||||||
v 0.300197 0.700000 -0.158776
|
|
||||||
v 0.229487 0.800000 -0.229487
|
|
||||||
v 0.172918 0.700000 -0.314339
|
|
||||||
v 0.158776 0.700000 -0.300197
|
|
||||||
v 0.300197 0.800000 -0.158776
|
|
||||||
v 0.229487 0.900000 -0.229487
|
|
||||||
v 0.300197 0.900000 -0.158776
|
|
||||||
v 0.229487 1.000000 -0.229487
|
|
||||||
v 0.300197 1.000000 -0.158776
|
|
||||||
v 0.229487 1.100000 -0.229487
|
|
||||||
v 0.300197 1.100000 -0.158776
|
|
||||||
v 0.229487 1.200000 -0.229487
|
|
||||||
v 0.158776 0.800000 -0.300197
|
|
||||||
v 0.158776 0.900000 -0.300197
|
|
||||||
v 0.158776 1.000000 -0.300197
|
|
||||||
v 0.158776 1.100000 -0.300197
|
|
||||||
v 0.314339 0.800000 -0.172918
|
|
||||||
v 0.314339 0.900000 -0.172918
|
|
||||||
v 0.314339 1.000000 -0.172918
|
|
||||||
v 0.314339 1.100000 -0.172918
|
|
||||||
v 0.172918 0.800000 -0.314339
|
|
||||||
v 0.172918 0.900000 -0.314339
|
|
||||||
v 0.172918 1.000000 -0.314339
|
|
||||||
v 0.172918 1.100000 -0.314339
|
|
||||||
v 0.247016 1.055075 -0.211936
|
|
||||||
v 0.236741 1.055075 -0.236741
|
|
||||||
v 0.236741 1.055075 -0.236741
|
|
||||||
v 0.247016 1.055075 -0.211936
|
|
||||||
v 0.187132 1.055075 -0.236741
|
|
||||||
v 0.176857 1.055075 -0.211936
|
|
||||||
v 0.176857 1.055075 -0.211936
|
|
||||||
v 0.187132 1.055075 -0.236741
|
|
||||||
v 0.211936 1.055075 -0.176857
|
|
||||||
v 0.236741 1.055075 -0.187132
|
|
||||||
v 0.236741 1.055075 -0.187132
|
|
||||||
v 0.211936 1.055075 -0.176857
|
|
||||||
v 0.211936 1.055075 -0.247016
|
|
||||||
v 0.211936 1.055075 -0.247016
|
|
||||||
v 0.187132 1.055075 -0.187132
|
|
||||||
v 0.187132 1.055075 -0.187132
|
|
||||||
v 0.211936 -0.499729 -0.176857
|
|
||||||
v 0.236741 -0.499729 -0.187131
|
|
||||||
v 0.187132 -0.499729 -0.187132
|
|
||||||
v 0.247016 -0.499729 -0.211936
|
|
||||||
v 0.236741 -0.499729 -0.236741
|
|
||||||
v 0.176857 -0.499729 -0.211935
|
|
||||||
v 0.211937 -0.499729 -0.247015
|
|
||||||
v 0.187132 -0.499729 -0.236741
|
|
||||||
vt 0.583333 0.875000
|
|
||||||
vt 0.583333 0.750000
|
|
||||||
vt 0.583333 0.500000
|
|
||||||
vt 0.583333 0.375000
|
|
||||||
vt 0.583333 0.250000
|
|
||||||
vt 0.583333 1.000000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.416667 0.750000
|
|
||||||
vt 0.416667 0.875000
|
|
||||||
vt 0.375000 0.875000
|
|
||||||
vt 0.458333 0.750000
|
|
||||||
vt 0.458333 0.875000
|
|
||||||
vt 0.500000 0.750000
|
|
||||||
vt 0.500000 0.875000
|
|
||||||
vt 0.541667 0.750000
|
|
||||||
vt 0.541667 0.875000
|
|
||||||
vt 0.416667 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.458333 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.541667 1.000000
|
|
||||||
vt 0.416667 0.500000
|
|
||||||
vt 0.458333 0.500000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.541667 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.416667 0.000000
|
|
||||||
vt 0.416667 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.458333 0.000000
|
|
||||||
vt 0.458333 0.250000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.250000
|
|
||||||
vt 0.541667 0.000000
|
|
||||||
vt 0.541667 0.250000
|
|
||||||
vt 0.583333 0.000000
|
|
||||||
vt 0.372863 0.578719
|
|
||||||
vt 0.372317 0.613951
|
|
||||||
vt 0.371666 0.613734
|
|
||||||
vt 0.372221 0.578991
|
|
||||||
vt 0.315877 0.640082
|
|
||||||
vt 0.292344 0.614764
|
|
||||||
vt 0.292986 0.614492
|
|
||||||
vt 0.316131 0.639438
|
|
||||||
vt 0.315346 0.553400
|
|
||||||
vt 0.349331 0.553400
|
|
||||||
vt 0.349077 0.554044
|
|
||||||
vt 0.315664 0.554020
|
|
||||||
vt 0.349861 0.640082
|
|
||||||
vt 0.349543 0.639462
|
|
||||||
vt 0.292889 0.579531
|
|
||||||
vt 0.293541 0.579748
|
|
||||||
vt 0.444102 0.636706
|
|
||||||
vt 0.409596 0.636706
|
|
||||||
vt 0.385196 0.612306
|
|
||||||
vt 0.385196 0.577799
|
|
||||||
vt 0.409596 0.553400
|
|
||||||
vt 0.444102 0.553400
|
|
||||||
vt 0.468502 0.577800
|
|
||||||
vt 0.468502 0.612306
|
|
||||||
vt 0.037160 1.987962
|
|
||||||
vt 0.036793 0.000397
|
|
||||||
vt 0.071486 0.000384
|
|
||||||
vt 0.071853 1.987948
|
|
||||||
vt 0.002468 1.987974
|
|
||||||
vt 0.002100 0.000409
|
|
||||||
vt 0.106546 1.987936
|
|
||||||
vt 0.106179 0.000371
|
|
||||||
vt 0.140872 0.000358
|
|
||||||
vt 0.141239 1.987923
|
|
||||||
vt 0.245318 1.987885
|
|
||||||
vt 0.244951 0.000319
|
|
||||||
vt 0.279643 0.000307
|
|
||||||
vt 0.280011 1.987871
|
|
||||||
vt 0.175932 1.987910
|
|
||||||
vt 0.175565 0.000345
|
|
||||||
vt 0.210258 0.000332
|
|
||||||
vt 0.210625 1.987897
|
|
||||||
vt 0.125000 1.000000
|
|
||||||
vt 0.000000 1.000000
|
|
||||||
vt -0.000000 0.875000
|
|
||||||
vt 0.000000 0.750000
|
|
||||||
vt 0.000000 0.625000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.000000 0.375000
|
|
||||||
vt 0.125000 0.375000
|
|
||||||
vt 0.250000 0.875000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.375000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.250000 0.625000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vn -0.4998 -0.7071 0.5002
|
|
||||||
vn 0.6533 0.3827 0.6533
|
|
||||||
vn 0.6533 0.3827 -0.6533
|
|
||||||
vn 0.5001 -0.7071 -0.4999
|
|
||||||
vn -0.6533 0.3827 -0.6532
|
|
||||||
vn -0.6533 0.3827 0.6533
|
|
||||||
vn -0.5000 -0.7071 -0.5000
|
|
||||||
vn 0.5000 -0.7071 0.5000
|
|
||||||
vn -0.7071 0.0000 0.7071
|
|
||||||
vn 0.7071 0.0000 0.7071
|
|
||||||
vn -0.7071 0.0000 -0.7071
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 -0.0000
|
|
||||||
vn 0.3827 0.0000 0.9239
|
|
||||||
vn -0.3827 -0.0000 0.9239
|
|
||||||
vn 0.9239 0.0000 -0.3827
|
|
||||||
vn 0.9239 0.0000 0.3827
|
|
||||||
vn -0.9239 -0.0000 0.3827
|
|
||||||
vn -0.3827 -0.0000 -0.9239
|
|
||||||
vn -0.9239 -0.0000 -0.3827
|
|
||||||
vn 0.3827 -0.0000 -0.9239
|
|
||||||
vn 0.7071 0.0000 -0.7071
|
|
||||||
g Cube.001_Cube.001_Default_OBJ
|
|
||||||
usemtl Default_OBJ
|
|
||||||
s off
|
|
||||||
f 1/1/1 2/2/2 3/3/3 4/4/4 5/5/5 6/6/6
|
|
||||||
f 7/7/7 8/8/7 9/9/7 10/10/7
|
|
||||||
f 11/11/8 7/7/8 10/10/8 12/12/8
|
|
||||||
f 9/9/9 13/13/9 14/14/9 10/15/9
|
|
||||||
f 13/13/9 15/16/9 16/17/9 14/14/9
|
|
||||||
f 15/16/9 17/18/9 18/19/9 16/17/9
|
|
||||||
f 17/18/9 19/20/9 20/21/9 18/19/9
|
|
||||||
f 19/20/9 2/2/9 1/1/9 20/21/9
|
|
||||||
f 10/15/9 14/14/9 21/22/9 12/23/9
|
|
||||||
f 14/14/9 16/17/9 22/24/9 21/22/9
|
|
||||||
f 16/17/9 18/19/9 23/25/9 22/24/9
|
|
||||||
f 18/19/9 20/21/9 24/26/9 23/25/9
|
|
||||||
f 20/21/9 1/1/9 6/6/9 24/26/9
|
|
||||||
f 8/8/10 25/27/10 13/13/10 9/9/10
|
|
||||||
f 25/27/10 26/28/10 15/16/10 13/13/10
|
|
||||||
f 26/28/10 27/29/10 17/18/10 15/16/10
|
|
||||||
f 27/29/10 28/30/10 19/20/10 17/18/10
|
|
||||||
f 28/30/10 3/3/10 2/2/10 19/20/10
|
|
||||||
f 12/31/11 21/32/11 29/33/11 11/34/11
|
|
||||||
f 21/32/11 22/35/11 30/36/11 29/33/11
|
|
||||||
f 22/35/11 23/37/11 31/38/11 30/36/11
|
|
||||||
f 23/37/11 24/39/11 32/40/11 31/38/11
|
|
||||||
f 24/39/11 6/41/11 5/5/11 32/40/11
|
|
||||||
s 1
|
|
||||||
f 33/42/12 34/43/12 35/44/12 36/45/12
|
|
||||||
f 37/46/12 38/47/12 39/48/12 40/49/12
|
|
||||||
f 41/50/12 42/51/12 43/52/12 44/53/12
|
|
||||||
f 34/43/12 45/54/12 46/55/12 35/44/12
|
|
||||||
f 38/47/12 47/56/12 48/57/12 39/48/12
|
|
||||||
f 42/51/12 33/42/12 36/45/12 43/52/12
|
|
||||||
f 45/58/13 37/59/13 38/60/13 47/61/13 41/62/13 42/63/13 33/64/13 34/65/13
|
|
||||||
f 44/66/14 49/67/14 50/68/14 43/69/14
|
|
||||||
f 45/54/12 37/46/12 40/49/12 46/55/12
|
|
||||||
f 47/56/12 41/50/12 44/53/12 48/57/12
|
|
||||||
f 48/70/15 51/71/15 49/67/15 44/66/15
|
|
||||||
f 36/72/16 52/73/16 53/74/16 35/75/16
|
|
||||||
f 43/69/17 50/68/17 52/73/17 36/72/17
|
|
||||||
f 39/76/18 54/77/18 51/78/18 48/79/18
|
|
||||||
f 46/80/19 55/81/19 56/82/19 40/83/19
|
|
||||||
f 40/83/20 56/82/20 54/77/20 39/76/20
|
|
||||||
f 35/75/21 53/74/21 55/81/21 46/80/21
|
|
||||||
g Cube.001_Cube.001_Anzeige
|
|
||||||
usemtl Anzeige
|
|
||||||
s off
|
|
||||||
f 4/84/22 3/85/22 28/86/22 27/87/22 26/88/22 25/89/22 8/90/22 7/91/22
|
|
||||||
f 32/92/22 5/93/22 4/84/22 7/91/22 11/94/22 29/95/22 30/96/22 31/97/22
|
|
|
@ -1,228 +0,0 @@
|
||||||
# Blender v2.93.5 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_zs10_smr60.mtl
|
|
||||||
o Cube.001
|
|
||||||
v 0.290445 1.300000 -0.144810
|
|
||||||
v 0.335064 1.200000 -0.055317
|
|
||||||
v 0.352963 1.200000 -0.064241
|
|
||||||
v 0.308343 1.300000 -0.153734
|
|
||||||
v 0.263724 1.200000 -0.243228
|
|
||||||
v 0.245825 1.200000 -0.234304
|
|
||||||
v 0.308343 0.800000 -0.153734
|
|
||||||
v 0.352963 0.700000 -0.064241
|
|
||||||
v 0.335064 0.700000 -0.055317
|
|
||||||
v 0.290445 0.800000 -0.144810
|
|
||||||
v 0.263724 0.700000 -0.243228
|
|
||||||
v 0.245825 0.700000 -0.234304
|
|
||||||
v 0.335064 0.800000 -0.055317
|
|
||||||
v 0.290445 0.900000 -0.144810
|
|
||||||
v 0.335064 0.900000 -0.055317
|
|
||||||
v 0.290445 1.000000 -0.144810
|
|
||||||
v 0.335064 1.000000 -0.055317
|
|
||||||
v 0.290445 1.100000 -0.144810
|
|
||||||
v 0.335064 1.100000 -0.055317
|
|
||||||
v 0.290445 1.200000 -0.144810
|
|
||||||
v 0.245825 0.800000 -0.234304
|
|
||||||
v 0.245825 0.900000 -0.234304
|
|
||||||
v 0.245825 1.000000 -0.234304
|
|
||||||
v 0.245825 1.100000 -0.234304
|
|
||||||
v 0.352963 0.800000 -0.064241
|
|
||||||
v 0.352963 0.900000 -0.064241
|
|
||||||
v 0.352963 1.000000 -0.064241
|
|
||||||
v 0.352963 1.100000 -0.064241
|
|
||||||
v 0.263724 0.800000 -0.243228
|
|
||||||
v 0.263724 0.900000 -0.243228
|
|
||||||
v 0.263724 1.000000 -0.243228
|
|
||||||
v 0.263724 1.100000 -0.243228
|
|
||||||
v 0.301499 1.055075 -0.122605
|
|
||||||
v 0.299626 1.055075 -0.149388
|
|
||||||
v 0.299626 1.055075 -0.149388
|
|
||||||
v 0.301499 1.055075 -0.122605
|
|
||||||
v 0.252580 1.055075 -0.165129
|
|
||||||
v 0.234966 1.055075 -0.144867
|
|
||||||
v 0.234966 1.055075 -0.144867
|
|
||||||
v 0.252580 1.055075 -0.165129
|
|
||||||
v 0.257101 1.055075 -0.100469
|
|
||||||
v 0.283885 1.055075 -0.102342
|
|
||||||
v 0.283885 1.055075 -0.102342
|
|
||||||
v 0.257101 1.055075 -0.100469
|
|
||||||
v 0.279363 1.055075 -0.167002
|
|
||||||
v 0.279363 1.055075 -0.167002
|
|
||||||
v 0.236839 1.055075 -0.118084
|
|
||||||
v 0.236839 1.055075 -0.118084
|
|
||||||
v 0.257102 -0.499729 -0.100469
|
|
||||||
v 0.283885 -0.499729 -0.102341
|
|
||||||
v 0.236839 -0.499729 -0.118084
|
|
||||||
v 0.301499 -0.499729 -0.122605
|
|
||||||
v 0.299626 -0.499729 -0.149388
|
|
||||||
v 0.234966 -0.499729 -0.144866
|
|
||||||
v 0.279364 -0.499729 -0.167002
|
|
||||||
v 0.252580 -0.499729 -0.165129
|
|
||||||
vt 0.583333 0.875000
|
|
||||||
vt 0.583333 0.750000
|
|
||||||
vt 0.583333 0.500000
|
|
||||||
vt 0.583333 0.375000
|
|
||||||
vt 0.583333 0.250000
|
|
||||||
vt 0.583333 1.000000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.375000 0.500000
|
|
||||||
vt 0.375000 0.750000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vt 0.125000 0.500000
|
|
||||||
vt 0.125000 0.750000
|
|
||||||
vt 0.416667 0.750000
|
|
||||||
vt 0.416667 0.875000
|
|
||||||
vt 0.375000 0.875000
|
|
||||||
vt 0.458333 0.750000
|
|
||||||
vt 0.458333 0.875000
|
|
||||||
vt 0.500000 0.750000
|
|
||||||
vt 0.500000 0.875000
|
|
||||||
vt 0.541667 0.750000
|
|
||||||
vt 0.541667 0.875000
|
|
||||||
vt 0.416667 1.000000
|
|
||||||
vt 0.375000 1.000000
|
|
||||||
vt 0.458333 1.000000
|
|
||||||
vt 0.500000 1.000000
|
|
||||||
vt 0.541667 1.000000
|
|
||||||
vt 0.416667 0.500000
|
|
||||||
vt 0.458333 0.500000
|
|
||||||
vt 0.500000 0.500000
|
|
||||||
vt 0.541667 0.500000
|
|
||||||
vt 0.375000 0.000000
|
|
||||||
vt 0.416667 0.000000
|
|
||||||
vt 0.416667 0.250000
|
|
||||||
vt 0.375000 0.250000
|
|
||||||
vt 0.458333 0.000000
|
|
||||||
vt 0.458333 0.250000
|
|
||||||
vt 0.500000 0.000000
|
|
||||||
vt 0.500000 0.250000
|
|
||||||
vt 0.541667 0.000000
|
|
||||||
vt 0.541667 0.250000
|
|
||||||
vt 0.583333 0.000000
|
|
||||||
vt 0.372863 0.578719
|
|
||||||
vt 0.372317 0.613951
|
|
||||||
vt 0.371666 0.613734
|
|
||||||
vt 0.372221 0.578991
|
|
||||||
vt 0.315877 0.640082
|
|
||||||
vt 0.292344 0.614764
|
|
||||||
vt 0.292986 0.614492
|
|
||||||
vt 0.316131 0.639438
|
|
||||||
vt 0.315346 0.553400
|
|
||||||
vt 0.349331 0.553400
|
|
||||||
vt 0.349077 0.554044
|
|
||||||
vt 0.315664 0.554020
|
|
||||||
vt 0.349861 0.640082
|
|
||||||
vt 0.349543 0.639462
|
|
||||||
vt 0.292889 0.579531
|
|
||||||
vt 0.293541 0.579748
|
|
||||||
vt 0.444102 0.636706
|
|
||||||
vt 0.409596 0.636706
|
|
||||||
vt 0.385196 0.612306
|
|
||||||
vt 0.385196 0.577799
|
|
||||||
vt 0.409596 0.553400
|
|
||||||
vt 0.444102 0.553400
|
|
||||||
vt 0.468502 0.577800
|
|
||||||
vt 0.468502 0.612306
|
|
||||||
vt 0.037160 1.987962
|
|
||||||
vt 0.036793 0.000397
|
|
||||||
vt 0.071486 0.000384
|
|
||||||
vt 0.071853 1.987948
|
|
||||||
vt 0.002468 1.987974
|
|
||||||
vt 0.002100 0.000409
|
|
||||||
vt 0.106546 1.987936
|
|
||||||
vt 0.106179 0.000371
|
|
||||||
vt 0.140872 0.000358
|
|
||||||
vt 0.141239 1.987923
|
|
||||||
vt 0.245318 1.987885
|
|
||||||
vt 0.244951 0.000319
|
|
||||||
vt 0.279643 0.000307
|
|
||||||
vt 0.280011 1.987871
|
|
||||||
vt 0.175932 1.987910
|
|
||||||
vt 0.175565 0.000345
|
|
||||||
vt 0.210258 0.000332
|
|
||||||
vt 0.210625 1.987897
|
|
||||||
vt 0.125000 1.000000
|
|
||||||
vt 0.000000 1.000000
|
|
||||||
vt -0.000000 0.875000
|
|
||||||
vt 0.000000 0.750000
|
|
||||||
vt 0.000000 0.625000
|
|
||||||
vt 0.000000 0.500000
|
|
||||||
vt 0.000000 0.375000
|
|
||||||
vt 0.125000 0.375000
|
|
||||||
vt 0.250000 0.875000
|
|
||||||
vt 0.250000 1.000000
|
|
||||||
vt 0.250000 0.375000
|
|
||||||
vt 0.250000 0.500000
|
|
||||||
vt 0.250000 0.625000
|
|
||||||
vt 0.250000 0.750000
|
|
||||||
vn -0.6326 -0.7071 0.3159
|
|
||||||
vn 0.4123 0.3827 0.8268
|
|
||||||
vn 0.8268 0.3827 -0.4123
|
|
||||||
vn 0.6328 -0.7071 -0.3155
|
|
||||||
vn -0.4123 0.3827 -0.8268
|
|
||||||
vn -0.8268 0.3827 0.4123
|
|
||||||
vn -0.3155 -0.7071 -0.6328
|
|
||||||
vn 0.3155 -0.7071 0.6328
|
|
||||||
vn -0.8949 0.0000 0.4462
|
|
||||||
vn 0.4462 0.0000 0.8949
|
|
||||||
vn -0.4462 0.0000 -0.8949
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 0.0000
|
|
||||||
vn 0.0698 0.0000 0.9976
|
|
||||||
vn -0.6561 -0.0000 0.7547
|
|
||||||
vn 0.9976 0.0000 -0.0698
|
|
||||||
vn 0.7547 0.0000 0.6561
|
|
||||||
vn -0.9976 -0.0000 0.0698
|
|
||||||
vn -0.0698 -0.0000 -0.9976
|
|
||||||
vn -0.7547 -0.0000 -0.6561
|
|
||||||
vn 0.6561 -0.0000 -0.7547
|
|
||||||
vn 0.8949 0.0000 -0.4462
|
|
||||||
g Cube.001_Cube.001_Default_OBJ
|
|
||||||
usemtl Default_OBJ
|
|
||||||
s off
|
|
||||||
f 1/1/1 2/2/2 3/3/3 4/4/4 5/5/5 6/6/6
|
|
||||||
f 7/7/7 8/8/7 9/9/7 10/10/7
|
|
||||||
f 11/11/8 7/7/8 10/10/8 12/12/8
|
|
||||||
f 9/9/9 13/13/9 14/14/9 10/15/9
|
|
||||||
f 13/13/9 15/16/9 16/17/9 14/14/9
|
|
||||||
f 15/16/9 17/18/9 18/19/9 16/17/9
|
|
||||||
f 17/18/9 19/20/9 20/21/9 18/19/9
|
|
||||||
f 19/20/9 2/2/9 1/1/9 20/21/9
|
|
||||||
f 10/15/9 14/14/9 21/22/9 12/23/9
|
|
||||||
f 14/14/9 16/17/9 22/24/9 21/22/9
|
|
||||||
f 16/17/9 18/19/9 23/25/9 22/24/9
|
|
||||||
f 18/19/9 20/21/9 24/26/9 23/25/9
|
|
||||||
f 20/21/9 1/1/9 6/6/9 24/26/9
|
|
||||||
f 8/8/10 25/27/10 13/13/10 9/9/10
|
|
||||||
f 25/27/10 26/28/10 15/16/10 13/13/10
|
|
||||||
f 26/28/10 27/29/10 17/18/10 15/16/10
|
|
||||||
f 27/29/10 28/30/10 19/20/10 17/18/10
|
|
||||||
f 28/30/10 3/3/10 2/2/10 19/20/10
|
|
||||||
f 12/31/11 21/32/11 29/33/11 11/34/11
|
|
||||||
f 21/32/11 22/35/11 30/36/11 29/33/11
|
|
||||||
f 22/35/11 23/37/11 31/38/11 30/36/11
|
|
||||||
f 23/37/11 24/39/11 32/40/11 31/38/11
|
|
||||||
f 24/39/11 6/41/11 5/5/11 32/40/11
|
|
||||||
s 1
|
|
||||||
f 33/42/12 34/43/12 35/44/12 36/45/12
|
|
||||||
f 37/46/12 38/47/12 39/48/12 40/49/12
|
|
||||||
f 41/50/12 42/51/12 43/52/12 44/53/12
|
|
||||||
f 34/43/12 45/54/12 46/55/12 35/44/12
|
|
||||||
f 38/47/12 47/56/12 48/57/12 39/48/12
|
|
||||||
f 42/51/12 33/42/12 36/45/12 43/52/12
|
|
||||||
f 45/58/13 37/59/13 38/60/13 47/61/13 41/62/13 42/63/13 33/64/13 34/65/13
|
|
||||||
f 44/66/14 49/67/14 50/68/14 43/69/14
|
|
||||||
f 45/54/12 37/46/12 40/49/12 46/55/12
|
|
||||||
f 47/56/12 41/50/12 44/53/12 48/57/12
|
|
||||||
f 48/70/15 51/71/15 49/67/15 44/66/15
|
|
||||||
f 36/72/16 52/73/16 53/74/16 35/75/16
|
|
||||||
f 43/69/17 50/68/17 52/73/17 36/72/17
|
|
||||||
f 39/76/18 54/77/18 51/78/18 48/79/18
|
|
||||||
f 46/80/19 55/81/19 56/82/19 40/83/19
|
|
||||||
f 40/83/20 56/82/20 54/77/20 39/76/20
|
|
||||||
f 35/75/21 53/74/21 55/81/21 46/80/21
|
|
||||||
g Cube.001_Cube.001_Anzeige
|
|
||||||
usemtl Anzeige
|
|
||||||
s off
|
|
||||||
f 4/84/22 3/85/22 28/86/22 27/87/22 26/88/22 25/89/22 8/90/22 7/91/22
|
|
||||||
f 32/92/22 5/93/22 4/84/22 7/91/22 11/94/22 29/95/22 30/96/22 31/97/22
|
|
|
@ -1,128 +0,0 @@
|
||||||
# Blender v2.93.5 OBJ File: ''
|
|
||||||
# www.blender.org
|
|
||||||
mtllib advtrains_signals_ks_sign_zs3_smr0.mtl
|
|
||||||
o Cube.002
|
|
||||||
v 0.024805 1.055075 -0.324528
|
|
||||||
v 0.000000 1.055075 -0.334802
|
|
||||||
v 0.000000 1.055075 -0.334802
|
|
||||||
v 0.024805 1.055075 -0.324528
|
|
||||||
v -0.035079 1.055075 -0.299723
|
|
||||||
v -0.024805 1.055075 -0.274918
|
|
||||||
v -0.024805 1.055075 -0.274918
|
|
||||||
v -0.035079 1.055075 -0.299723
|
|
||||||
v 0.024805 1.055075 -0.274918
|
|
||||||
v 0.035079 1.055075 -0.299723
|
|
||||||
v 0.035079 1.055075 -0.299723
|
|
||||||
v 0.024805 1.055075 -0.274918
|
|
||||||
v -0.024805 1.055075 -0.324528
|
|
||||||
v -0.024805 1.055075 -0.324528
|
|
||||||
v 0.000000 1.055075 -0.264644
|
|
||||||
v 0.000000 1.055075 -0.264644
|
|
||||||
v 0.024805 -0.499729 -0.274918
|
|
||||||
v 0.035080 -0.499729 -0.299723
|
|
||||||
v 0.324981 1.306899 -0.346144
|
|
||||||
v 0.324981 1.306899 -0.330481
|
|
||||||
v 0.000000 0.746135 -0.330481
|
|
||||||
v 0.000000 0.746135 -0.346144
|
|
||||||
v -0.324981 1.306899 -0.346144
|
|
||||||
v -0.324981 1.306899 -0.330481
|
|
||||||
v 0.000000 -0.499729 -0.264644
|
|
||||||
v 0.024805 -0.499729 -0.324528
|
|
||||||
v 0.000000 -0.499729 -0.334802
|
|
||||||
v -0.024804 -0.499729 -0.274918
|
|
||||||
v -0.024804 -0.499729 -0.324528
|
|
||||||
v -0.035079 -0.499729 -0.299723
|
|
||||||
vt 0.372863 0.578719
|
|
||||||
vt 0.372317 0.613951
|
|
||||||
vt 0.371666 0.613734
|
|
||||||
vt 0.372221 0.578991
|
|
||||||
vt 0.315877 0.640082
|
|
||||||
vt 0.292344 0.614764
|
|
||||||
vt 0.292986 0.614492
|
|
||||||
vt 0.316131 0.639438
|
|
||||||
vt 0.315346 0.553400
|
|
||||||
vt 0.349331 0.553400
|
|
||||||
vt 0.349077 0.554044
|
|
||||||
vt 0.315664 0.554020
|
|
||||||
vt 0.349861 0.640082
|
|
||||||
vt 0.349543 0.639462
|
|
||||||
vt 0.292889 0.579531
|
|
||||||
vt 0.293541 0.579748
|
|
||||||
vt 0.444102 0.636706
|
|
||||||
vt 0.409596 0.636706
|
|
||||||
vt 0.385196 0.612306
|
|
||||||
vt 0.385196 0.577799
|
|
||||||
vt 0.409596 0.553400
|
|
||||||
vt 0.444102 0.553400
|
|
||||||
vt 0.468502 0.577800
|
|
||||||
vt 0.468502 0.612306
|
|
||||||
vt 0.037160 1.987962
|
|
||||||
vt 0.036793 0.000397
|
|
||||||
vt 0.071486 0.000384
|
|
||||||
vt 0.071853 1.987948
|
|
||||||
vt 0.677908 0.520935
|
|
||||||
vt 0.657776 0.520935
|
|
||||||
vt 0.485125 0.020439
|
|
||||||
vt 0.677907 0.020439
|
|
||||||
vt 0.312476 0.541067
|
|
||||||
vt 0.312476 0.520935
|
|
||||||
vt 0.657776 0.541067
|
|
||||||
vt 0.292344 0.020439
|
|
||||||
vt 0.292344 0.520935
|
|
||||||
vt 0.002468 1.987974
|
|
||||||
vt 0.002100 0.000409
|
|
||||||
vt 0.106546 1.987936
|
|
||||||
vt 0.106179 0.000371
|
|
||||||
vt 0.140872 0.000358
|
|
||||||
vt 0.141239 1.987923
|
|
||||||
vt 0.245318 1.987885
|
|
||||||
vt 0.244951 0.000319
|
|
||||||
vt 0.279643 0.000307
|
|
||||||
vt 0.280011 1.987871
|
|
||||||
vt 0.175932 1.987910
|
|
||||||
vt 0.175565 0.000345
|
|
||||||
vt 0.210258 0.000332
|
|
||||||
vt 0.210625 1.987897
|
|
||||||
vt 0.492188 0.003906
|
|
||||||
vt 1.003906 0.996094
|
|
||||||
vt -0.023438 0.996094
|
|
||||||
vn 0.0000 0.0000 1.0000
|
|
||||||
vn 0.0000 1.0000 0.0000
|
|
||||||
vn 0.9239 0.0000 0.3827
|
|
||||||
vn 0.8652 -0.5014 0.0000
|
|
||||||
vn -0.8652 -0.5014 0.0000
|
|
||||||
vn 0.3827 -0.0000 0.9239
|
|
||||||
vn 0.3827 0.0000 -0.9239
|
|
||||||
vn 0.9239 0.0000 -0.3827
|
|
||||||
vn -0.3827 -0.0000 0.9239
|
|
||||||
vn -0.9239 -0.0000 -0.3827
|
|
||||||
vn -0.9239 -0.0000 0.3827
|
|
||||||
vn -0.3827 -0.0000 -0.9239
|
|
||||||
vn 0.0000 0.0000 -1.0000
|
|
||||||
g Cube.002_Cube.002_Default_OBJ.001
|
|
||||||
usemtl Default_OBJ.001
|
|
||||||
s 1
|
|
||||||
f 1/1/1 2/2/1 3/3/1 4/4/1
|
|
||||||
f 5/5/1 6/6/1 7/7/1 8/8/1
|
|
||||||
f 9/9/1 10/10/1 11/11/1 12/12/1
|
|
||||||
f 2/2/1 13/13/1 14/14/1 3/3/1
|
|
||||||
f 6/6/1 15/15/1 16/16/1 7/7/1
|
|
||||||
f 10/10/1 1/1/1 4/4/1 11/11/1
|
|
||||||
f 13/17/2 5/18/2 6/19/2 15/20/2 9/21/2 10/22/2 1/23/2 2/24/2
|
|
||||||
f 12/25/3 17/26/3 18/27/3 11/28/3
|
|
||||||
f 13/13/1 5/5/1 8/8/1 14/14/1
|
|
||||||
f 19/29/4 20/30/4 21/31/4 22/32/4
|
|
||||||
f 23/33/2 24/34/2 20/30/2 19/35/2
|
|
||||||
f 21/31/1 20/30/1 24/34/1
|
|
||||||
f 22/36/5 21/31/5 24/34/5 23/37/5
|
|
||||||
f 15/15/1 9/9/1 12/12/1 16/16/1
|
|
||||||
f 16/38/6 25/39/6 17/26/6 12/25/6
|
|
||||||
f 4/40/7 26/41/7 27/42/7 3/43/7
|
|
||||||
f 11/28/8 18/27/8 26/41/8 4/40/8
|
|
||||||
f 7/44/9 28/45/9 25/46/9 16/47/9
|
|
||||||
f 14/48/10 29/49/10 30/50/10 8/51/10
|
|
||||||
f 8/51/11 30/50/11 28/45/11 7/44/11
|
|
||||||
f 3/43/12 27/42/12 29/49/12 14/48/12
|
|
||||||
g Cube.002_Cube.002_Anzeige
|
|
||||||
usemtl Anzeige
|
|
||||||
f 22/52/13 23/53/13 19/54/13
|
|