diff --git a/config-file-example b/config-file-example index 9eb2a70e..2cd34e2c 100644 --- a/config-file-example +++ b/config-file-example @@ -1,4 +1,4 @@ -mt_version="5.3.0" +mt_version="5.4.0" first_install=y ufw_enable=y ufw_ssh_port_for_accept=22 diff --git a/mods-download b/mods-download index 7dc5e2b3..95ccbb11 100755 --- a/mods-download +++ b/mods-download @@ -131,11 +131,21 @@ 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 diff --git a/mods-list b/mods-list index 460cbc6e..6e25400e 100644 --- a/mods-list +++ b/mods-list @@ -1,4 +1,9 @@ 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 @@ -35,7 +40,6 @@ load_mod_homedecor_bedroom = true load_mod_homedecor_laundry = true load_mod_blox = true load_mod_homedecor_3d_extras = true -load_mod_computer = true load_mod_mymillwork = true load_mod_drinks = true load_mod_angledstairs = true @@ -43,7 +47,6 @@ load_mod_nature_classic = true load_mod_homedecor_clocks = true load_mod_signs_road = true load_mod_homedecor_cobweb = true -load_mod_christmas = true load_mod_along_shore = true load_mod_artdeco = true load_mod_carts = true @@ -254,19 +257,18 @@ 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_luaautomation = true -load_mod_advtrains_interlocking = true -load_mod_advtrains = true load_mod_advtrains_train_steam = true -load_mod_advtrains_line_automation = true -load_mod_advtrains_itrainmap = true -load_mod_assets = true -load_mod_advtrains_signals_ks = true -load_mod_claycrafter = true -load_mod_serialize_lib = true -load_mod_mobs_sky = true -load_mod_hot_air_balloons = true -load_mod_mobs_bat = true diff --git a/mods/3d_armor/3d_armor/api.lua b/mods/3d_armor/3d_armor/api.lua index 996ec6d7..3cbfa185 100644 --- a/mods/3d_armor/3d_armor/api.lua +++ b/mods/3d_armor/3d_armor/api.lua @@ -55,12 +55,14 @@ armor = { crystal = "ethereal:crystal_ingot", }, fire_nodes = { + {"nether:lava_source", 5, 8}, {"default:lava_source", 5, 8}, {"default:lava_flowing", 5, 8}, {"fire:basic_flame", 3, 4}, {"fire:permanent_flame", 3, 4}, {"ethereal:crystal_spike", 2, 1}, {"ethereal:fire_flower", 2, 1}, + {"nether:lava_crust", 2, 1}, {"default:torch", 1, 1}, {"default:torch_ceiling", 1, 1}, {"default:torch_wall", 1, 1}, @@ -200,6 +202,10 @@ armor.update_player_visuals = function(self, player) self:run_callbacks("on_update", player) end + +-- armor is not visible on player model if enabled +local transparent_armor = minetest.settings:get_bool("armor_transparent", false) + armor.set_player_armor = function(self, player) local name, armor_inv = self:get_valid_player(player, "[set_player_armor]") if not name then @@ -258,7 +264,9 @@ armor.set_player_armor = function(self, player) tex = tex:gsub(".png$", "") local prev = def.preview or tex.."_preview" prev = prev:gsub(".png$", "") - texture = texture.."^"..tex..".png" + if not transparent_armor then + texture = texture.."^"..tex..".png" + end preview = preview.."^"..prev..".png" state = state + stack:get_wear() count = count + 1 @@ -521,12 +529,14 @@ armor.remove_all = function(self, player) self:save_armor_inventory(player) end +local skin_mod + armor.get_player_skin = function(self, name) - if (self.skin_mod == "skins" or self.skin_mod == "simple_skins") and skins.skins[name] then + if (skin_mod == "skins" or skin_mod == "simple_skins") and skins.skins[name] then return skins.skins[name]..".png" - elseif self.skin_mod == "u_skins" and u_skins.u_skins[name] then + elseif skin_mod == "u_skins" and u_skins.u_skins[name] then return u_skins.u_skins[name]..".png" - elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then + elseif skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then return wardrobe.playerSkins[name] end return armor.default_skin..".png" @@ -638,17 +648,19 @@ end armor.get_valid_player = function(self, player, msg) msg = msg or "" if not player then - minetest.log("warning", S("3d_armor: Player reference is nil @1", msg)) + minetest.log("warning", ("3d_armor%s: Player reference is nil"):format(msg)) return end local name = player:get_player_name() if not name then - minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) + minetest.log("warning", ("3d_armor%s: Player name is nil"):format(msg)) return end local inv = minetest.get_inventory({type="detached", name=name.."_armor"}) if not inv then - minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + -- This check may fail when called inside `on_joinplayer` + -- in that case, the armor will be initialized/updated later on + minetest.log("warning", ("3d_armor%s: Detached armor inventory is nil"):format(msg)) return end return name, inv @@ -663,3 +675,10 @@ armor.drop_armor = function(pos, stack) end end end + +--- Allows skin mod to be set manually. +-- +-- Useful for skin mod forks that do not use the same name. +armor.set_skin_mod = function(mod) + skin_mod = mod +end diff --git a/mods/3d_armor/3d_armor/init.lua b/mods/3d_armor/3d_armor/init.lua index 049b6fd2..7e990f3f 100644 --- a/mods/3d_armor/3d_armor/init.lua +++ b/mods/3d_armor/3d_armor/init.lua @@ -96,7 +96,7 @@ for _, mod in pairs(skin_mods) do armor:add_preview(fn) end end - armor.skin_mod = mod + armor.set_skin_mod(mod) end end if not minetest.get_modpath("moreores") then @@ -331,6 +331,7 @@ minetest.register_on_joinplayer(function(player) local player_name = player:get_player_name() minetest.after(0, function() + -- TODO: Added in 7566ecc - What's the prupose? local pplayer = minetest.get_player_by_name(player_name) if pplayer and init_player_armor(pplayer) == false then pending_players[pplayer] = 0 diff --git a/mods/3d_armor/3d_armor/textures/3d_armor_ui_form.png b/mods/3d_armor/3d_armor/textures/3d_armor_ui_form.png deleted file mode 100644 index 993809f2..00000000 Binary files a/mods/3d_armor/3d_armor/textures/3d_armor_ui_form.png and /dev/null differ diff --git a/mods/3d_armor/3d_armor_sfinv/locale/3d_armor_sfinv.es.tr b/mods/3d_armor/3d_armor_sfinv/locale/3d_armor_sfinv.es.tr new file mode 100644 index 00000000..ee72e52b --- /dev/null +++ b/mods/3d_armor/3d_armor_sfinv/locale/3d_armor_sfinv.es.tr @@ -0,0 +1,7 @@ +# textdomain: 3d_armor_sfinv + + +### init.lua ### + +3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv : Mod cargado pero no activado. +Armor=Armadura diff --git a/mods/3d_armor/3d_armor_stand/init.lua b/mods/3d_armor/3d_armor_stand/init.lua index 743ab3ad..612345b5 100644 --- a/mods/3d_armor/3d_armor_stand/init.lua +++ b/mods/3d_armor/3d_armor_stand/init.lua @@ -153,6 +153,7 @@ minetest.register_node("3d_armor_stand:armor_stand", { drawtype = "mesh", mesh = "3d_armor_stand.obj", tiles = {"3d_armor_stand.png"}, + use_texture_alpha = "clip", paramtype = "light", paramtype2 = "facedir", walkable = false, @@ -221,6 +222,7 @@ minetest.register_node("3d_armor_stand:locked_armor_stand", { drawtype = "mesh", mesh = "3d_armor_stand.obj", tiles = {"3d_armor_stand_locked.png"}, + use_texture_alpha = "clip", paramtype = "light", paramtype2 = "facedir", walkable = false, diff --git a/mods/3d_armor/3d_armor_ui/init.lua b/mods/3d_armor/3d_armor_ui/init.lua index 2a6f6548..28193e73 100644 --- a/mods/3d_armor/3d_armor_ui/init.lua +++ b/mods/3d_armor/3d_armor_ui/init.lua @@ -4,11 +4,12 @@ local F = minetest.formspec_escape local has_technic = minetest.get_modpath("technic") ~= nil if not minetest.global_exists("unified_inventory") then - minetest.log("warning", S("3d_armor_ui: Mod loaded but unused.")) + minetest.log("warning", "3d_armor_ui: Mod loaded but unused.") return end -if unified_inventory.sfinv_compat_layer then +local ui = unified_inventory +if ui.sfinv_compat_layer then return end @@ -27,25 +28,32 @@ unified_inventory.register_button("armor", { unified_inventory.register_page("armor", { get_formspec = function(player, perplayer_formspec) - local fy = perplayer_formspec.formspec_y + local fy = perplayer_formspec.form_header_y + 0.5 + local gridx = perplayer_formspec.std_inv_x + local gridy = 0.6 + local name = player:get_player_name() if armor.def[name].init_time == 0 then return {formspec="label[0,0;"..F(S("Armor not initialized!")).."]"} end - local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]".. - "label[0,0;"..F(S("Armor")).."]".. - "list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]".. - "image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]".. - "label[5.0,"..(fy + 0.0)..";"..F(S("Level"))..": "..armor.def[name].level.."]".. - "label[5.0,"..(fy + 0.5)..";"..F(S("Heal"))..": "..armor.def[name].heal.."]".. + local formspec = perplayer_formspec.standard_inv_bg.. + perplayer_formspec.standard_inv.. + ui.make_inv_img_grid(gridx, gridy, 2, 3).. + string.format("label[%f,%f;%s]", + perplayer_formspec.form_header_x, perplayer_formspec.form_header_y, F(S("Armor"))).. + string.format("list[detached:%s_armor;armor;%f,%f;2,3;]", + name, gridx + ui.list_img_offset, gridy + ui.list_img_offset) .. + "image[3.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]".. + "label[6.0,"..(fy + 0.0)..";"..F(S("Level"))..": "..armor.def[name].level.."]".. + "label[6.0,"..(fy + 0.5)..";"..F(S("Heal"))..": "..armor.def[name].heal.."]".. "listring[current_player;main]".. "listring[detached:"..name.."_armor;armor]" if armor.config.fire_protect then - formspec = formspec.."label[5.0,"..(fy + 1.0)..";".. + formspec = formspec.."label[6.0,"..(fy + 1.0)..";".. F(S("Fire"))..": "..armor.def[name].fire.."]" end if has_technic then - formspec = formspec.."label[5.0,"..(fy + 1.5)..";".. + formspec = formspec.."label[6.0,"..(fy + 1.5)..";".. F(S("Radiation"))..": "..armor.def[name].groups["radiation"].."]" end return {formspec=formspec} diff --git a/mods/3d_armor/3d_armor_ui/locale/3d_armor_ui.fr.tr b/mods/3d_armor/3d_armor_ui/locale/3d_armor_ui.fr.tr index b7538f6c..38e0f05a 100644 --- a/mods/3d_armor/3d_armor_ui/locale/3d_armor_ui.fr.tr +++ b/mods/3d_armor/3d_armor_ui/locale/3d_armor_ui.fr.tr @@ -4,7 +4,6 @@ ### init.lua ### 3d Armor=Armure 3d -3d_armor_ui: Mod loaded but unused.=3d_armor_ui : Mod chargé mais inutilisé. Armor=Armure Armor not initialized!=Armure non initialisée ! Fire=Feu diff --git a/mods/3d_armor/3d_armor_ui/locale/template.txt b/mods/3d_armor/3d_armor_ui/locale/template.txt index be95c086..0f7a8cb5 100644 --- a/mods/3d_armor/3d_armor_ui/locale/template.txt +++ b/mods/3d_armor/3d_armor_ui/locale/template.txt @@ -4,7 +4,6 @@ ### init.lua ### 3d Armor= -3d_armor_ui: Mod loaded but unused.= Armor= Armor not initialized!= Fire= diff --git a/mods/3d_armor/3d_armor_ui/mod.conf b/mods/3d_armor/3d_armor_ui/mod.conf index 68eff85f..331627e7 100644 --- a/mods/3d_armor/3d_armor_ui/mod.conf +++ b/mods/3d_armor/3d_armor_ui/mod.conf @@ -2,3 +2,4 @@ name = 3d_armor_ui depends = 3d_armor optional_depends = unified_inventory description = Adds 3d_armor page to the unified inventory. +min_minetest_version = 5.4.0 diff --git a/mods/3d_armor/settingtypes.txt b/mods/3d_armor/settingtypes.txt index fdc2857b..4195ddd0 100644 --- a/mods/3d_armor/settingtypes.txt +++ b/mods/3d_armor/settingtypes.txt @@ -58,6 +58,9 @@ armor_punch_damage (Enable damage effects) bool true # Enable migration of old armor inventories. armor_migrate_old_inventory (Migrate old armor inventories) bool true +# Don't show armor on character model. +armor_transparent (Transparent armor) bool false + [shields] diff --git a/mods/3d_armor/wieldview/init.lua b/mods/3d_armor/wieldview/init.lua index f0edeacb..6397d049 100644 --- a/mods/3d_armor/wieldview/init.lua +++ b/mods/3d_armor/wieldview/init.lua @@ -69,12 +69,12 @@ end minetest.register_on_joinplayer(function(player) local name = player:get_player_name() wieldview.wielded_item[name] = "" - minetest.after(0, function() - local pplayer = minetest.get_player_by_name(name) - if player then + minetest.after(0, function(pname) + local pplayer = minetest.get_player_by_name(pname) + if pplayer then wieldview:update_wielded_item(pplayer) end - end) + end, name) end) minetest.register_globalstep(function(dtime) diff --git a/mods/Minetest-WorldEdit/worldedit/manipulations.lua b/mods/Minetest-WorldEdit/worldedit/manipulations.lua index 3bad0ddc..54dc8885 100644 --- a/mods/Minetest-WorldEdit/worldedit/manipulations.lua +++ b/mods/Minetest-WorldEdit/worldedit/manipulations.lua @@ -640,10 +640,34 @@ function worldedit.clear_objects(pos1, pos2) worldedit.keep_loaded(pos1, pos2) + local function should_delete(obj) + -- Avoid players and WorldEdit entities + if obj:is_player() then + return false + end + local entity = obj:get_luaentity() + return not entity or not entity.name:find("^worldedit:") + end + -- Offset positions to include full nodes (positions are in the center of nodes) local pos1x, pos1y, pos1z = pos1.x - 0.5, pos1.y - 0.5, pos1.z - 0.5 local pos2x, pos2y, pos2z = pos2.x + 0.5, pos2.y + 0.5, pos2.z + 0.5 + local count = 0 + if minetest.get_objects_in_area then + local objects = minetest.get_objects_in_area({x=pos1x, y=pos1y, z=pos1z}, + {x=pos2x, y=pos2y, z=pos2z}) + + for _, obj in pairs(objects) do + if should_delete(obj) then + obj:remove() + count = count + 1 + end + end + return count + end + + -- Fallback implementation via get_objects_inside_radius -- Center of region local center = { x = pos1x + ((pos2x - pos1x) / 2), @@ -655,12 +679,8 @@ function worldedit.clear_objects(pos1, pos2) (center.x - pos1x) ^ 2 + (center.y - pos1y) ^ 2 + (center.z - pos1z) ^ 2) - local count = 0 for _, obj in pairs(minetest.get_objects_inside_radius(center, radius)) do - local entity = obj:get_luaentity() - -- Avoid players and WorldEdit entities - if not obj:is_player() and (not entity or - not entity.name:find("^worldedit:")) then + if should_delete(obj) then local pos = obj:get_pos() if pos.x >= pos1x and pos.x <= pos2x and pos.y >= pos1y and pos.y <= pos2y and diff --git a/mods/Minetest-WorldEdit/worldedit_gui/functionality.lua b/mods/Minetest-WorldEdit/worldedit_gui/functionality.lua index 2efbf9ae..6279d8a8 100644 --- a/mods/Minetest-WorldEdit/worldedit_gui/functionality.lua +++ b/mods/Minetest-WorldEdit/worldedit_gui/functionality.lua @@ -11,6 +11,7 @@ local gui_count2 = {} --mapping of player names to a quantity (arbitrary strings local gui_count3 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values) local gui_angle = {} --mapping of player names to an angle (one of 90, 180, 270, representing the angle in degrees clockwise) local gui_filename = {} --mapping of player names to file names +local gui_param2 = {} --mapping of player names to param2 values --set default values setmetatable(gui_nodename1, {__index = function() return "Cobblestone" end}) @@ -25,6 +26,7 @@ setmetatable(gui_count2, {__index = function() return "6" end}) setmetatable(gui_count3, {__index = function() return "4" end}) setmetatable(gui_angle, {__index = function() return 90 end}) setmetatable(gui_filename, {__index = function() return "building" end}) +setmetatable(gui_param2, {__index = function() return "0" end}) local axis_indices = {["X axis"]=1, ["Y axis"]=2, ["Z axis"]=3, ["Look direction"]=4} local axis_values = {"x", "y", "z", "?"} @@ -904,3 +906,31 @@ worldedit.register_gui_function("worldedit_gui_clearobjects", { execute_worldedit_command("clearobjects", name, "") end, }) + +worldedit.register_gui_function("worldedit_gui_param2", { + name = "Set Param2", + privs = we_privs("param2"), + get_formspec = function(name) + local value = gui_param2[name] or "0" + return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_param2") .. + "textarea[0.5,1;5,2;;;Some values may break the node!]".. + string.format("field[0.5,2.5;2,0.8;worldedit_gui_param2_value;New Param2;%s]", minetest.formspec_escape(value)) .. + "field_close_on_enter[worldedit_gui_param2_value;false]" .. + "button_exit[3.5,2.5;3,0.8;worldedit_gui_param2_submit;Set Param2]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_param2", function(name, fields) + local cg = { + worldedit_gui_param2_value = gui_param2, + } + local ret = handle_changes(name, "worldedit_gui_param2", fields, cg) + if fields.worldedit_gui_param2_submit then + copy_changes(name, fields, cg) + worldedit.show_page(name, "worldedit_gui_param2") + + execute_worldedit_command("param2", name, gui_param2[name]) + return true + end + return ret +end) diff --git a/mods/advtrains/advtrains/atc.lua b/mods/advtrains/advtrains/atc.lua index 4f8b937f..64cdceca 100644 --- a/mods/advtrains/advtrains/atc.lua +++ b/mods/advtrains/advtrains/atc.lua @@ -174,12 +174,16 @@ function atc.get_atc_controller_formspec(pos, meta) local formspec="size[8,6]" -- "dropdown[0,0;3;mode;static,mesecon,digiline;"..mode.."]" if mode<3 then - formspec=formspec.."field[0.5,1.5;7,1;command;"..attrans("Command")..";"..minetest.formspec_escape(command).."]" + formspec=formspec + .."style[command;font=mono]" + .."field[0.8,1.5;7,1;command;"..attrans("Command")..";"..minetest.formspec_escape(command).."]" if tonumber(mode)==2 then - formspec=formspec.."field[0.5,3;7,1;command_on;"..attrans("Command (on)")..";"..minetest.formspec_escape(command_on).."]" + formspec=formspec + .."style[command_on;font=mono]" + .."field[0.8,3;7,1;command_on;"..attrans("Command (on)")..";"..minetest.formspec_escape(command_on).."]" end else - formspec=formspec.."field[0.5,1.5;7,1;channel;"..attrans("Digiline channel")..";"..minetest.formspec_escape(channel).."]" + formspec=formspec.."field[0.8,1.5;7,1;channel;"..attrans("Digiline channel")..";"..minetest.formspec_escape(channel).."]" end return formspec.."button_exit[0.5,4.5;7,1;save;"..attrans("Save").."]" end diff --git a/mods/advtrains/advtrains/couple.lua b/mods/advtrains/advtrains/couple.lua index a38ca69a..336a6d42 100644 --- a/mods/advtrains/advtrains/couple.lua +++ b/mods/advtrains/advtrains/couple.lua @@ -1,14 +1,290 @@ --couple.lua ---defines couple entities. +--Handles coupling and discoupling of trains, and defines the coupling entities +--Rework June 2021 - some functions from trainlogic.lua have been moved here ---advtrains:discouple ---set into existing trains to split them when punched. ---they are attached to the wagons. ---[[fields -wagon +-- COUPLING -- +-- During coupling rework, the behavior of coupling was changed to make automation easier. It is now as follows: +-- Coupling is only ever initiated when a train is standing somewhere (not moving) and another train drives onto one of its ends +-- with a speed greater than 0 +-- "stationary" train is the one standing there - in old code called "train2" +-- "initiating" train is the one that approached it and bumped into it - typically an engine - in old code called "train1" +-- When the initiating train has autocouple set, trains are immediately coupled +-- 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: + -- 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 + -- wagons of stationary train are inserted at the beginning of initiating train + -- remove stationary train -wagons keep their couple entity minetest-internal id inside the field discouple_id. if it refers to nowhere, they will spawn a new one if player is near -]] +-- 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) +local function create_couple_entity(pos, train1, t1_is_front, train2, t2_is_front) + local id1 = train1.id + local id2 = train2.id + + -- delete previous couple entities + if t1_is_front then + if train1.cpl_front then train1.cpl_front:remove() end + else + if train1.cpl_back then train1.cpl_back:remove() end + end + if t2_is_front then + if train2.cpl_front then train2.cpl_front:remove() end + else + if train2.cpl_back then train2.cpl_back:remove() end + end + + local obj=minetest.add_entity(pos, "advtrains:couple") + if not obj then error("Failed creating couple object!") return end + local le=obj:get_luaentity() + le.train_id_1=id1 + le.t1_is_front=t1_is_front + le.train_id_2=id2 + le.t2_is_front=t2_is_front + --atdebug("created couple between",train1.id,train2.id,t2_is_front) + + if t1_is_front then + train1.cpl_front = obj + else + train2.cpl_back = obj + end + if t2_is_front then + train2.cpl_front = obj + else + train2.cpl_back = obj + end +end + +-- Old static couple checking. Never used for autocouple, only used for standing trains if train did not approach +local CPL_CHK_DST = -1 +local CPL_ZONE = 2 +function advtrains.train_check_couples(train) + --atdebug("rechecking couples") + if train.cpl_front then + if not train.cpl_front:get_yaw() then + -- objectref is no longer valid. reset. + train.cpl_front = nil + end + end + if not train.cpl_front then + -- recheck front couple + local front_trains, pos = advtrains.occ.get_occupations(train, atround(train.index) + CPL_CHK_DST) + if advtrains.is_node_loaded(pos) then -- if the position is loaded... + for tid, idx in pairs(front_trains) do + local other_train = advtrains.trains[tid] + if not advtrains.train_ensure_init(tid, other_train) then + atwarn("Train",tid,"is not initialized! Couldn't check couples!") + return + end + --atdebug(train.id,"front: ",idx,"on",tid,atround(other_train.index),atround(other_train.end_index)) + if other_train.velocity == 0 then + if idx>=other_train.index and idx<=other_train.index + CPL_ZONE then + create_couple_entity(pos, train, true, other_train, true) + break + end + if idx<=other_train.end_index and idx>=other_train.end_index - CPL_ZONE then + create_couple_entity(pos, train, true, other_train, false) + break + end + end + end + end + end + if train.cpl_back then + if not train.cpl_back:get_yaw() then + -- objectref is no longer valid. reset. + train.cpl_back = nil + end + end + if not train.cpl_back then + -- recheck back couple + local back_trains, pos = advtrains.occ.get_occupations(train, atround(train.end_index) - CPL_CHK_DST) + if advtrains.is_node_loaded(pos) then -- if the position is loaded... + for tid, idx in pairs(back_trains) do + local other_train = advtrains.trains[tid] + if not advtrains.train_ensure_init(tid, other_train) then + atwarn("Train",tid,"is not initialized! Couldn't check couples!") + return + end + --atdebug(train.id,"back: ",idx,"on",tid,atround(other_train.index),atround(other_train.end_index)) + if other_train.velocity == 0 then + if idx>=other_train.index and idx<=other_train.index + CPL_ZONE then + create_couple_entity(pos, train, false, other_train, true) + break + end + if idx<=other_train.end_index and idx>=other_train.end_index - CPL_ZONE then + create_couple_entity(pos, train, false, other_train, false) + break + end + end + end + end + end +end + +-- Deletes couple entities from the train +function advtrains.couple_invalidate(train) + if train.cpl_back then + train.cpl_back:remove() + train.cpl_back = nil + end + if train.cpl_front then + train.cpl_front:remove() + train.cpl_front = nil + end + train.couples_up_to_date = nil +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) +-- Depending on autocouple, either couples immediately or spawns a couple entity +function advtrains.couple_initiate_with(init_train, stat_train, stat_is_front) + --atdebug("Initiating couplign between init=",init_train.id,"stat=",stat_train.id,"backside=",stat_is_backside) + if init_train.autocouple then + advtrains.couple_trains(init_train, true, stat_train, stat_is_front) + else + local pos = advtrains.path_get_interpolated(init_train, init_train.index) + create_couple_entity(pos, init_train, true, stat_train, stat_is_front) + end + +end + +-- check if the player has permission for the first/last wagon of the train +local function check_twagon_owner(train, b_first, pname) + local wtp = b_first and 1 or #train.trainparts + local wid = train.trainparts[wtp] + local wdata = advtrains.wagons[wid] + if wdata then + return advtrains.check_driving_couple_protection(pname, wdata.owner, wdata.whitelist) + end + return false +end + +-- Perform coupling, but check if the player is authorized to couple +function advtrains.safe_couple_trains(train1, t1_is_front, train2, t2_is_front, pname) + + if pname and not minetest.check_player_privs(pname, "train_operator") then + minetest.chat_send_player(pname, "Missing train_operator privilege") + return false + end + + local wck_t1, wck_t2 + if pname then + wck_t1 = check_twagon_owner(train1, t1_is_front, pname) + wck_t2 = check_twagon_owner(train2, t2_is_front, pname) + end + if (wck_t1 or wck_t2) or not pname then + advtrains.couple_trains(train1, t1_is_front, train2, t2_is_front) + end +end + +-- Actually performs the train coupling. Always retains train ID of train1 +function advtrains.couple_trains(train1, t1_is_front, train2, t2_is_front) + --atdebug("Couple trains init=",init_train.id,"stat=",stat_train.id,"statreverse=",stat_must_reverse) + -- see comment on top of file + if t1_is_front then + advtrains.invert_train(train1.id) + end + if not t2_is_front then + advtrains.invert_train(train2.id) + end + + advtrains.do_connect_trains(train1, train2) +end + +-- Adds the wagons of first to second and deletes second_id afterwards +-- Assumes that second_id stands right behind first_id and both trains point to the same direction +function advtrains.do_connect_trains(first, second) + + 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) + + first.velocity = 0 + + advtrains.update_trainpart_properties(first.id) + advtrains.couple_invalidate(first) + return true +end + + + +-- DECOUPLING -- +function advtrains.split_train_at_fc(train, count_empty, length_limit) + -- splits train at first different current FC by convention, + -- locomotives have empty FC so are ignored + -- count_empty is used to split off locomotives + -- length_limit limits the length of the first train to length_limit wagons + local train_id = train.id + local fc = false + local ind = 0 + for i = 1, #train.trainparts do + local w_id = train.trainparts[i] + local data = advtrains.wagons[w_id] + if length_limit and i > length_limit then + ind = i + break + end + if data then + local wfc = advtrains.get_cur_fc(data) + if wfc ~= "" or count_empty then + if fc then + if fc ~= wfc then + ind = i + break + end + else + fc = wfc + end + end + end + end + if ind > 0 then + return advtrains.split_train_at_index(train, ind), fc + end + if fc then + return nil, fc + end +end + +function advtrains.train_step_fc(train) + for i=1,#train.trainparts do + local w_id = train.trainparts[i] + local data = advtrains.wagons[w_id] + if data then + advtrains.step_fc(data) + end + end +end + + +-- split_train_at_index() is in trainlogic.lua because it needs access to two local functions + +function advtrains.split_train_at_wagon(wagon_id) + --get train + local data = advtrains.wagons[wagon_id] + advtrains.split_train_at_index(advtrains.trains[data.train_id], data.pos_in_trainparts) +end + + +-- COUPLE ENTITIES -- local couple_max_dist=3 @@ -36,8 +312,6 @@ minetest.register_entity("advtrains:discouple", { if pname and pname~="" and self.wagon then if advtrains.safe_decouple_wagon(self.wagon.id, pname) then self.object:remove() - else - minetest.add_entity(self.object:getpos(), "advtrains:lockmarker") end end end, @@ -60,10 +334,6 @@ minetest.register_entity("advtrains:discouple", { -- advtrains:couple -- Couple entity -local function lockmarker(obj) - minetest.add_entity(obj:get_pos(), "advtrains:lockmarker") - obj:remove() -end minetest.register_entity("advtrains:couple", { visual="sprite", @@ -75,108 +345,71 @@ minetest.register_entity("advtrains:couple", { is_couple=true, static_save = false, on_activate=function(self, staticdata) - if staticdata=="COUPLE" then - --couple entities have no right to exist further... - atprint("Couple loaded from staticdata, destroying") - self.object:remove() - return - end - self.object:set_armor_groups({immmortal=1}) + if staticdata=="COUPLE" then + --couple entities have no right to exist further... + --atdebug("Couple loaded from staticdata, destroying") + self.object:remove() + return + end + self.object:set_armor_groups({immmortal=1}) end, get_staticdata=function(self) return "COUPLE" end, on_rightclick=function(self, clicker) - if not self.train_id_1 or not self.train_id_2 then return end - - local pname=clicker - if type(clicker)~="string" then pname=clicker:get_player_name() end - - if advtrains.safe_couple_trains(self.train_id_1, self.train_id_2, self.t1_is_front, self.t2_is_front, pname) then - self.object:remove() - else - lockmarker(self.object) - end - end, - on_step=function(self, dtime) - if advtrains.wagon_outside_range(self.object:getpos()) then - self.object:remove() - return - end + if not self.train_id_1 or not self.train_id_2 then return end - if not self.train_id_1 or not self.train_id_2 then atprint("Couple: train ids not set!") self.object:remove() return end - local train1=advtrains.trains[self.train_id_1] - local train2=advtrains.trains[self.train_id_2] - if not train1 or not train2 then - atprint("Couple: trains missing, destroying") - self.object:remove() - return - end - - --shh, silence here, this is an on-step callback! - if not advtrains.train_ensure_init(self.train_id_1, train1) then - --atwarn("Train",self.train_id_1,"is not initialized! Operation aborted!") - return - end - if not advtrains.train_ensure_init(self.train_id_2, train2) then - --atwarn("Train",self.train_id_2,"is not initialized! Operation aborted!") - return - end - - if train1.velocity>0 or train2.velocity>0 then - if not self.position_set then --ensures that train stands a single time before check fires. Using flag below - return - end - atprint("Couple: train is moving, destroying") - self.object:remove() - return - end - - if not self.position_set then - local tp1 - if self.t1_is_front then - tp1=advtrains.path_get_interpolated(train1, train1.index) - else - tp1=advtrains.path_get_interpolated(train1, train1.end_index) - end - local tp2 - if self.t2_is_front then - tp2=advtrains.path_get_interpolated(train2, train2.index) - else - tp2=advtrains.path_get_interpolated(train2, train2.end_index) - end - local pos_median=advtrains.pos_median(tp1, tp2) - if not vector.equals(pos_median, self.object:getpos()) then - self.object:set_pos(pos_median) - end - self.position_set=true - end - atprintbm("couple step", t) - advtrains.atprint_context_tid=nil + local pname=clicker + if type(clicker)~="string" then pname=clicker:get_player_name() end + + local train1=advtrains.trains[self.train_id_1] + local train2=advtrains.trains[self.train_id_2] + + advtrains.safe_couple_trains(train1, self.t1_is_front, train2, self.t2_is_front, pname) + self.object:remove() end, -}) -minetest.register_entity("advtrains:lockmarker", { - visual="sprite", - textures = {"advtrains_cpl_lock.png"}, - collisionbox = {-0.3,-0.3,-0.3, 0.3,0.3,0.3}, - visual_size = {x=0.7, y=0.7}, - initial_sprite_basepos = {x=0, y=0}, - - is_lockmarker=true, - static_save = false, - on_activate=function(self, staticdata) - if staticdata=="COUPLE" then - --couple entities have no right to exist further... - atprint("Couple loaded from staticdata, destroying") - self.object:remove() - return - end - self.object:set_armor_groups({immmortal=1}) - self.life=5 - end, - get_staticdata=function(self) return "COUPLE" end, on_step=function(self, dtime) - self.life=(self.life or 5)-dtime - if self.life<0 then + if advtrains.wagon_outside_range(self.object:getpos()) then + --atdebug("Couple Removing outside range") self.object:remove() + return + end + + if not self.train_id_1 or not self.train_id_2 then + --atdebug("Couple Removing ids missing") + self.object:remove() + return + end + local train1=advtrains.trains[self.train_id_1] + local train2=advtrains.trains[self.train_id_2] + if not train1 or not train2 then + --atdebug("Couple Removing trains missing") + self.object:remove() + return + end + + if self.position_set and train1.velocity>0 or train2.velocity>0 then + --atdebug("Couple: train is moving, destroying") + self.object:remove() + return + end + + if not self.position_set then + local tp1 + if self.t1_is_front then + tp1=advtrains.path_get_interpolated(train1, train1.index) + else + tp1=advtrains.path_get_interpolated(train1, train1.end_index) + end + local tp2 + if self.t2_is_front then + tp2=advtrains.path_get_interpolated(train2, train2.index) + else + tp2=advtrains.path_get_interpolated(train2, train2.end_index) + end + local pos_median=advtrains.pos_median(tp1, tp2) + if not vector.equals(pos_median, self.object:getpos()) then + self.object:set_pos(pos_median) + end + self.position_set=true end end, -}) +}) diff --git a/mods/advtrains/advtrains/depends.txt b/mods/advtrains/advtrains/depends.txt deleted file mode 100644 index e4a8899a..00000000 --- a/mods/advtrains/advtrains/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -default -serialize_lib -mesecons? -digtron? diff --git a/mods/advtrains/advtrains/init.lua b/mods/advtrains/advtrains/init.lua index 7cc0ccdb..083281e4 100644 --- a/mods/advtrains/advtrains/init.lua +++ b/mods/advtrains/advtrains/init.lua @@ -569,11 +569,13 @@ advtrains.mainloop_runcnt=0 advtrains.global_slowdown = 1 local t = 0 +local within_mainstep = false minetest.register_globalstep(function(dtime_mt) if no_action then -- the advtrains globalstep is skipped by command. Return immediately return end + within_mainstep = true advtrains.mainloop_runcnt=advtrains.mainloop_runcnt+1 --atprint("Running the main loop, runcnt",advtrains.mainloop_runcnt) @@ -586,6 +588,7 @@ minetest.register_globalstep(function(dtime_mt) if GENERATE_ATRICIFIAL_LAG then dtime = HOW_MANY_LAG if os.clock()", stna) ndb_nodeids[stid] = stna end diff --git a/mods/advtrains/advtrains/p_mesecon_iface.lua b/mods/advtrains/advtrains/p_mesecon_iface.lua index 0eef96ae..33fcecda 100644 --- a/mods/advtrains/advtrains/p_mesecon_iface.lua +++ b/mods/advtrains/advtrains/p_mesecon_iface.lua @@ -1,7 +1,7 @@ -- p_mesecon_iface.lua -- Mesecons interface by overriding the switch -if not mesecon then return end +if minetest.get_modpath("mesecons_switch") == nil then return end minetest.override_item("mesecons_switch:mesecon_switch_off", { groups = { diff --git a/mods/advtrains/advtrains/path.lua b/mods/advtrains/advtrains/path.lua index 714781ad..f2b8a13a 100644 --- a/mods/advtrains/advtrains/path.lua +++ b/mods/advtrains/advtrains/path.lua @@ -417,3 +417,42 @@ function advtrains.path_lookup(train, pos) end return nil end + +-- Projects the path of "train" onto the path of "onto_train_id", and returns the index on onto_train's path +-- that corresponds to "index" on "train"'s path, as well as whether both trains face each other +-- index may be fractional +-- returns: res_index, trains_facing +-- returns nil when path can not be projected, either because trains are on different tracks or +-- node at "index" happens to be on a turnout and it's the wrong direction +-- Note - duplicate with similar functionality is in train_step_b() - that code combines train detection with projecting +function advtrains.path_project(train, index, onto_train_id) + local base_idx = atfloor(index) + local frac_part = index - base_idx + local base_pos = advtrains.path_get(train, base_idx) + local base_cn = train.path_cn[base_idx] + local otrn = advtrains.trains[onto_train_id] + -- query occupation + local occ = advtrains.occ.get_trains_over(base_pos) + -- is wanted train id contained? + local ob_idx = occ[onto_train_id] + if not ob_idx then + return nil + end + + -- retrieve other train's cn and cp + local ocn = otrn.path_cn[ob_idx] + local ocp = otrn.path_cp[ob_idx] + + if base_cn == ocn then + -- same direction + return ob_idx + frac_part, false + elseif base_cn == ocp then + -- facing trains - subtract index frac + return ob_idx - frac_part, true + else + -- same path item but no common connections - deny + return nil + end +end + + diff --git a/mods/advtrains/advtrains/settingtypes.txt b/mods/advtrains/advtrains/settingtypes.txt index 6acff807..2b627cb5 100644 --- a/mods/advtrains/advtrains/settingtypes.txt +++ b/mods/advtrains/advtrains/settingtypes.txt @@ -56,3 +56,8 @@ advtrains_dtime_limit (DTime Limit for slow-down) float 0.2 0 5 # Time interval in seconds in which advtrains stores its save data to disk # Nevertheless, advtrains saves all data when shutting down the server. advtrains_save_interval (Save Interval) int 60 20 3600 + +# Enable forgiving collision mode +# If enabled, trains only collide with nodes with "normal" drawtype. +advtrains_forgiving_collision (Forgiving Collision mode) bool false + diff --git a/mods/advtrains/advtrains/signals.lua b/mods/advtrains/advtrains/signals.lua index 9df2f998..5fb1d1b3 100644 --- a/mods/advtrains/advtrains/signals.lua +++ b/mods/advtrains/advtrains/signals.lua @@ -9,6 +9,12 @@ local function can_dig_func(pos) end return true end +local function after_dig_func(pos) + if advtrains.interlocking then + return advtrains.interlocking.signal_after_dig(pos) + end + return true +end local function aspect(b) return { @@ -67,7 +73,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", rules=advtrains.meseconrules, ["action_"..f.as] = function (pos, node) advtrains.ndb.swap_node(pos, {name = "advtrains:retrosignal_"..f.as..rotation, param2 = node.param2}, true) - advtrains.interlocking.signal_on_aspect_changed(pos) + if advtrains.interlocking then + advtrains.interlocking.signal_on_aspect_changed(pos) + end end }}, on_rightclick=function(pos, node, player) @@ -79,7 +87,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", advtrains.interlocking.show_ip_form(pos, pname) elseif advtrains.check_turnout_signal_protection(pos, player:get_player_name()) then advtrains.ndb.swap_node(pos, {name = "advtrains:retrosignal_"..f.as..rotation, param2 = node.param2}, true) - advtrains.interlocking.signal_on_aspect_changed(pos) + if advtrains.interlocking then + advtrains.interlocking.signal_on_aspect_changed(pos) + end end end, -- new signal API @@ -97,6 +107,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", supported_aspects = suppasp, }, can_dig = can_dig_func, + after_dig_node = after_dig_func, }) advtrains.trackplacer.add_worked("advtrains:retrosignal", r, rotation, nil) @@ -127,7 +138,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", rules=advtrains.meseconrules, ["action_"..f.as] = function (pos, node) advtrains.setstate(pos, f.als, node) - advtrains.interlocking.signal_on_aspect_changed(pos) + if advtrains.interlocking then + advtrains.interlocking.signal_on_aspect_changed(pos) + end end }}, on_rightclick=function(pos, node, player) @@ -139,7 +152,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", advtrains.interlocking.show_ip_form(pos, pname) elseif advtrains.check_turnout_signal_protection(pos, player:get_player_name()) then advtrains.setstate(pos, f.als, node) - advtrains.interlocking.signal_on_aspect_changed(pos) + if advtrains.interlocking then + advtrains.interlocking.signal_on_aspect_changed(pos) + end end end, -- new signal API @@ -163,6 +178,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", end, }, can_dig = can_dig_func, + after_dig_node = after_dig_func, }) advtrains.trackplacer.add_worked("advtrains:signal", r, rotation, nil) end @@ -198,6 +214,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", rules = mrules_wallsignal, ["action_"..f.as] = function (pos, node) advtrains.setstate(pos, f.als, node) + if advtrains.interlocking then + advtrains.interlocking.signal_on_aspect_changed(pos) + end end }}, on_rightclick=function(pos, node, player) @@ -209,6 +228,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", advtrains.interlocking.show_ip_form(pos, pname) elseif advtrains.check_turnout_signal_protection(pos, player:get_player_name()) then advtrains.setstate(pos, f.als, node) + if advtrains.interlocking then + advtrains.interlocking.signal_on_aspect_changed(pos) + end end end, -- new signal API @@ -232,6 +254,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", end, }, can_dig = can_dig_func, + after_dig_node = after_dig_func, }) end end diff --git a/mods/advtrains/advtrains/trackplacer.lua b/mods/advtrains/advtrains/trackplacer.lua index 356df15f..fe762909 100644 --- a/mods/advtrains/advtrains/trackplacer.lua +++ b/mods/advtrains/advtrains/trackplacer.lua @@ -286,6 +286,7 @@ function tp.register_track_placer(nnprefix, imgprefix, dispname, def) return itemstack, false end if minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to then + local s if def.suitable_substrate then s = def.suitable_substrate(upos) else diff --git a/mods/advtrains/advtrains/tracks.lua b/mods/advtrains/advtrains/tracks.lua index ba597202..261818e3 100644 --- a/mods/advtrains/advtrains/tracks.lua +++ b/mods/advtrains/advtrains/tracks.lua @@ -442,6 +442,15 @@ Depending on the number of connections: - conn3 <> conn4 ]] +-- Notify the user if digging the rail is not allowed +local function can_dig_callback(pos, player) + local ok, reason = advtrains.can_dig_or_modify_track(pos) + if not ok and player then + minetest.chat_send_player(player:get_player_name(), attrans("This track can not be removed!") .. " " .. reason) + end + return ok +end + function advtrains.register_tracks(tracktype, def, preset) advtrains.trackplacer.register_tracktype(def.nodename_prefix, preset.tpdefault) if preset.regtp then @@ -478,7 +487,7 @@ function advtrains.register_tracks(tracktype, def, preset) not_blocking_trains=1, }, - can_dig = advtrains.can_dig_or_modify_track, + can_dig = can_dig_callback, after_dig_node=function(pos) advtrains.ndb.update(pos) end, @@ -515,7 +524,7 @@ function advtrains.register_tracks(tracktype, def, preset) end ndef.on_rightclick = function(pos, node, player) if advtrains.check_turnout_signal_protection(pos, player:get_player_name()) then - advtrains.setstate(pos, newstate, node) + advtrains.setstate(pos, nil, node) advtrains.log("Switch", player:get_player_name(), pos) end end @@ -613,7 +622,7 @@ function advtrains.can_dig_or_modify_track(pos) return false, attrans("There's a Track Circuit Break here.") end -- signal ip? - if advtrains.interlocking.db.is_ip_at(pos) then + if advtrains.interlocking.db.is_ip_at(pos, true) then -- is_ip_at with purge parameter return false, attrans("There's a Signal Influence Point here.") end end @@ -658,7 +667,7 @@ function sl.create_slopeplacer_on_place(def, preset) local yaw=player.get_look_horizontal and player:get_look_horizontal() or (player:get_look_yaw() - math.pi/2) --rounding unit vectors is a nice way for selecting 1 of 8 directions since sin(30°) is 0.5. - dirvec={x=math.floor(math.sin(-yaw)+0.5), y=0, z=math.floor(math.cos(-yaw)+0.5)} + local dirvec={x=math.floor(math.sin(-yaw)+0.5), y=0, z=math.floor(math.cos(-yaw)+0.5)} --translate to direction to look up inside the preset table local param2, rot45=({ [-1]={ diff --git a/mods/advtrains/advtrains/trainlogic.lua b/mods/advtrains/advtrains/trainlogic.lua index c9c7e769..00c04bf1 100644 --- a/mods/advtrains/advtrains/trainlogic.lua +++ b/mods/advtrains/advtrains/trainlogic.lua @@ -139,9 +139,13 @@ minetest.register_on_joinplayer(function(player) advtrains.hhud[player:get_player_name()] = nil --independent of this, cause all wagons of the train which are loaded to reattach their players --needed because already loaded wagons won't call reattach_all() - for _,wagon in pairs(minetest.luaentities) do - if wagon.is_wagon and wagon.initialized and wagon.train_id==id then - wagon:reattach_all() + local pname = player:get_player_name() + local id=advtrains.player_to_train_mapping[pname] + if id then + for _,wagon in pairs(minetest.luaentities) do + if wagon.is_wagon and wagon.initialized and wagon.train_id==id then + wagon:reattach_all() + end end end end) @@ -160,6 +164,8 @@ minetest.register_on_dieplayer(function(player) wagon:get_off_plr(pname) end end + -- just in case no wagon felt responsible for this player: clear train mapping + advtrains.player_to_train_mapping[pname] = nil end end) @@ -389,7 +395,7 @@ function advtrains.train_step_b(id, train, dtime) local back_off_track=train.end_index 1) then + if back_off_track and (not sit_v_cap or sit_v_cap > 1) then --atprint("in train_step_b: applying back_off_track") sit_v_cap = 1 elseif front_off_track then @@ -582,12 +588,76 @@ function advtrains.train_step_b(id, train, dtime) else --atprint("in train_step_b: movement calculation reusing from LZB newindex=",new_index_curr_tv) end - + -- if the zeroappr mechanism has hit, go no further than zeroappr index if lzb_next_zero_barrier and new_index_curr_tv > lzb_next_zero_barrier then --atprint("in train_step_b: Zero barrier hit, clipping to newidx_tv=",new_index_curr_tv, "zb_idx=",lzb_next_zero_barrier) new_index_curr_tv = lzb_next_zero_barrier end + + -- New same-track collision system - check for any other trains within the range we're going to move + -- do the checks if we either are moving or about to start moving + if new_index_curr_tv > train.index or accelerating then -- only if train is actually advancing + -- Note: duplicate code from path_project() because of subtle differences: no frac processing and scanning all occupations + --[[train.debug = "" + local atdebug = function(t, ...) + local text=advtrains.print_concat_table({t, ...}) + train.debug = train.debug..text.."\n" + end]] + local base_idx = atfloor(new_index_curr_tv + 1) + local base_pos = advtrains.path_get(train, base_idx) + local base_cn = train.path_cn[base_idx] + --atdebug(id,"Begin Checking for on-track collisions new_idx=",new_index_curr_tv,"base_idx=",base_idx,"base_pos=",base_pos,"base_cn=",base_cn) + -- query occupation + local occ = advtrains.occ.get_trains_over(base_pos) + -- iterate other trains + for otid, ob_idx in pairs(occ) do + if otid ~= id then + --atdebug(id,"Found other train",otid," with matching index ",ob_idx) + -- Phase 1 - determine if trains are facing and which is the relefant stpo index + local otrn = advtrains.trains[otid] + + -- retrieve other train's cn and cp + local ocn = otrn.path_cn[ob_idx] + local ocp = otrn.path_cp[ob_idx] + + local target_is_inside, ref_index, facing + + if base_cn == ocn then + -- same direction + ref_index = otrn.end_index + same_dir = true + target_is_inside = (ob_idx >= ref_index) + --atdebug("Same direction: ref_index",ref_index,"inside=",target_is_inside) + elseif base_cn == ocp then + -- facing trains - subtract index frac + ref_index = otrn.index + same_dir = false + target_is_inside = (ob_idx <= ref_index) + --atdebug("Facing direction: ref_index",ref_index,"inside=",target_is_inside) + end + + -- Phase 2 - project ref_index back onto our path and check again (necessary because there might be a turnout on the way and we are driving into the flank + if target_is_inside then + local our_index = advtrains.path_project(otrn, ref_index, id) + --atdebug("Backprojected our_index",our_index) + if our_index and our_index <= new_index_curr_tv then + -- ON_TRACK COLLISION IS HAPPENING + -- the actual collision is handled in train_step_c, so set appropriate signal variables + train.ontrack_collision_info = { + otid = otid, + same_dir = same_dir, + } + -- clip newindex + --atdebug("-- Collision detected!") + new_index_curr_tv = our_index + end + end + end + end + end + + -- ## Movement happens here ## train.index = new_index_curr_tv recalc_end_index(train) @@ -633,21 +703,42 @@ function advtrains.train_step_c(id, train, dtime) advtrains.spawn_wagons(id) train.check_trainpartload=2 end - - --- 8. check for collisions with other trains and damage players --- - + local train_moves=(train.velocity~=0) - - --- Check whether this train can be coupled to another, and set couple entities accordingly - if not train.was_standing and not train_moves then - advtrains.train_check_couples(train) + local very_short_train = train.trainlen < 3 + + --- On-track collision handling - detected in train_step_b, but handled here so all other train movements have already happened. + if train.ontrack_collision_info then + train.velocity = 0 + train.acceleration = 0 + advtrains.atc.train_reset_command(train) + + local otrn = advtrains.trains[train.ontrack_collision_info.otid] + + 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) + end + + train.ontrack_collision_info = nil + train.couples_up_to_date = true end - train.was_standing = not train_moves - + + -- handle couples if on_track collision handling did not fire if train_moves then - + train.couples_up_to_date = nil + elseif not train.couples_up_to_date then + if not very_short_train then -- old coupling system is buggy for short trains + advtrains.train_check_couples(train) -- no guarantee for train order here + end + train.couples_up_to_date = true + end + + --- 8. check for collisions with other trains and damage players --- + if train_moves then + -- Note: this code handles collisions with trains that are not on the same path as the current train + -- The same-track collisions and coupling handling is found in couple.lua and handled from train_step_b() and code 2 blocks above. local collided = false - local coll_grace=1 + local coll_grace=2 local collindex = advtrains.path_get_index_by_offset(train, train.index, -coll_grace) local collpos = advtrains.path_get(train, atround(collindex)) if collpos then @@ -658,13 +749,14 @@ function advtrains.train_step_c(id, train, dtime) local testpos=vector.add(rcollpos, {x=x, y=0, z=z}) --- 8a Check collision --- if not collided then - - local col_tr = advtrains.occ.check_collision(testpos, id) - if col_tr then - advtrains.train_check_couples(train) - train.velocity = 0 - advtrains.atc.train_reset_command(train) - collided = true + if not very_short_train then -- position collision system is buggy for short trains + local col_tr = advtrains.occ.check_collision(testpos, id) + if col_tr then + train.velocity = 0 + train.acceleration = 0 + advtrains.atc.train_reset_command(train) + collided = true + end end --- 8b damage players --- @@ -698,7 +790,7 @@ function advtrains.train_step_c(id, train, dtime) local objs = minetest.get_objects_inside_radius(rcollpos, 2) for _,obj in ipairs(objs) do if not obj:is_player() and obj:get_armor_groups().fleshy and obj:get_armor_groups().fleshy > 0 - and obj:get_luaentity() and obj:get_luaentity().name~="signs:text" then + and obj:get_luaentity() and obj:get_luaentity().name~="signs_lib:text" then obj:punch(obj, 1, { full_punch_interval = 1.0, damage_groups = {fleshy = 1000}, }, nil) end end @@ -894,7 +986,7 @@ function advtrains.remove_train(id) run_callbacks_remove(id, train) - advtrains.path_invalidate(train) + advtrains.path_invalidate(train, true) advtrains.couple_invalidate(train) local tp = train.trainparts @@ -1014,53 +1106,6 @@ function advtrains.spawn_wagons(train_id) end end -function advtrains.split_train_at_fc(train, count_empty, length_limit) - -- splits train at first different current FC by convention, - -- locomotives have empty FC so are ignored - -- count_empty is used to split off locomotives - -- length_limit limits the length of the first train to length_limit wagons - local train_id = train.id - local fc = false - local ind = 0 - for i = 1, #train.trainparts do - local w_id = train.trainparts[i] - local data = advtrains.wagons[w_id] - if length_limit and i > length_limit then - ind = i - break - end - if data then - local wfc = advtrains.get_cur_fc(data) - if wfc ~= "" or count_empty then - if fc then - if fc ~= wfc then - ind = i - break - end - else - fc = wfc - end - end - end - end - if ind > 0 then - return advtrains.split_train_at_index(train, ind), fc - end - if fc then - return nil, fc - end -end - -function advtrains.train_step_fc(train) - for i=1,#train.trainparts do - local w_id = train.trainparts[i] - local data = advtrains.wagons[w_id] - if data then - advtrains.step_fc(data) - end - end -end - 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. @@ -1076,6 +1121,12 @@ function advtrains.split_train_at_index(train, index) atwarn("Train",train_id,"is not initialized! Operation aborted!") return end + + -- make sure that the train is fully on track before splitting. May cause problems otherwise + if train.index > train.path_trk_f or train.end_index < train.path_trk_b then + atwarn("Train",train_id,": cannot split train because it is off track!") + return + end 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) @@ -1095,171 +1146,21 @@ function advtrains.split_train_at_index(train, index) local newtrain=advtrains.trains[newtrain_id] newtrain.velocity=train.velocity + -- copy various properties from the old to the new train + newtrain.door_open = train.door_open + newtrain.text_outside = train.text_outside + newtrain.text_inside = train.text_inside + newtrain.line = train.line + newtrain.routingcode = train.routingcode + newtrain.speed_restriction = train.speed_restriction + newtrain.is_shunt = train.is_shunt + newtrain.points_split = advtrains.merge_tables(train.points_split) + newtrain.autocouple = train.autocouple + return newtrain_id -- return new train ID, so new train can be manipulated end -function advtrains.split_train_at_wagon(wagon_id) - --get train - local data = advtrains.wagons[wagon_id] - advtrains.split_train_at_index(advtrains.trains[data.train_id], data.pos_in_trainparts) -end - --- coupling -local CPL_CHK_DST = -1 -local CPL_ZONE = 2 - --- 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 -local function createcouple(pos, train1, t1_is_front, train2, t2_is_front) - local id1 = train1.id - local id2 = train2.id - if train1.autocouple or train2.autocouple then - -- couple trains - train1.autocouple = nil - train2.autocouple = nil - minetest.after(0, advtrains.safe_couple_trains, id1, id2, t1_is_front, t2_is_front, false, false, train1.velocity, train2.velocity) - return - end - - local obj=minetest.add_entity(pos, "advtrains:couple") - if not obj then error("Failed creating couple object!") return end - local le=obj:get_luaentity() - le.train_id_1=id1 - le.train_id_2=id2 - le.t1_is_front=t1_is_front - le.t2_is_front=t2_is_front - --atdebug("created couple between",train1.id,t1_is_front,train2.id,t2_is_front) - if t1_is_front then - train1.cpl_front = obj - else - train1.cpl_back = obj - end - if t2_is_front then - train2.cpl_front = obj - else - train2.cpl_back = obj - end - -end - -function advtrains.train_check_couples(train) - --atdebug("rechecking couples") - if train.cpl_front then - if not train.cpl_front:get_yaw() then - -- objectref is no longer valid. reset. - train.cpl_front = nil - end - end - if not train.cpl_front then - -- recheck front couple - local front_trains, pos = advtrains.occ.get_occupations(train, atround(train.index) + CPL_CHK_DST) - if advtrains.is_node_loaded(pos) then -- if the position is loaded... - for tid, idx in pairs(front_trains) do - local other_train = advtrains.trains[tid] - if not advtrains.train_ensure_init(tid, other_train) then - atwarn("Train",tid,"is not initialized! Couldn't check couples!") - return - end - --atdebug(train.id,"front: ",idx,"on",tid,atround(other_train.index),atround(other_train.end_index)) - if other_train.velocity == 0 then - if idx>=other_train.index and idx<=other_train.index + CPL_ZONE then - createcouple(pos, train, true, other_train, true) - break - end - if idx<=other_train.end_index and idx>=other_train.end_index - CPL_ZONE then - createcouple(pos, train, true, other_train, false) - break - end - end - end - end - end - if train.cpl_back then - if not train.cpl_back:get_yaw() then - -- objectref is no longer valid. reset. - train.cpl_back = nil - end - end - if not train.cpl_back then - -- recheck back couple - local back_trains, pos = advtrains.occ.get_occupations(train, atround(train.end_index) - CPL_CHK_DST) - if advtrains.is_node_loaded(pos) then -- if the position is loaded... - for tid, idx in pairs(back_trains) do - local other_train = advtrains.trains[tid] - if not advtrains.train_ensure_init(tid, other_train) then - atwarn("Train",tid,"is not initialized! Couldn't check couples!") - return - end - if other_train.velocity == 0 then - if idx>=other_train.index and idx<=other_train.index + CPL_ZONE then - createcouple(pos, train, false, other_train, true) - break - end - if idx<=other_train.end_index and idx>=other_train.end_index - CPL_ZONE then - createcouple(pos, train, false, other_train, false) - break - end - end - end - end - end -end - -function advtrains.couple_invalidate(train) - if train.cpl_back then - train.cpl_back:remove() - train.cpl_back = nil - end - if train.cpl_front then - train.cpl_front:remove() - train.cpl_front = nil - end - train.was_standing = nil -end - --- relevant code for this comment is in couple.lua - ---there are 4 cases: ---1/2. F<->R F<->R regular, put second train behind first ---->frontpos of first train will match backpos of second ---3. F<->R R<->F flip one of these trains, take the other as new train ---->backpos's will match ---4. R<->F F<->R flip one of these trains and take it as new parent ---->frontpos's will match - - -function advtrains.do_connect_trains(first_id, second_id, vel) - local first, second=advtrains.trains[first_id], advtrains.trains[second_id] - - if not advtrains.train_ensure_init(first_id, first) then - atwarn("Train",first_id,"is not initialized! Operation aborted!") - return - end - if not advtrains.train_ensure_init(second_id, second) then - atwarn("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) - if vel < 0 then - advtrains.invert_train(first_id) - vel = -vel - end - first.velocity= vel or 0 - - advtrains.update_trainpart_properties(first_id) - advtrains.couple_invalidate(first) - return true -end - function advtrains.invert_train(train_id) local train=advtrains.trains[train_id] @@ -1346,44 +1247,61 @@ function advtrains.invalidate_path(id) end --not blocking trains group -function advtrains.train_collides(node) - if node and minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].walkable then + +if minetest.settings:get_bool("advtrains_forgiving_collision") then + function advtrains.train_collides(node) + if node and minetest.registered_nodes[node.name] then + local ndef = minetest.registered_nodes[node.name] + -- if the node is drawtype normal (that is a full cube) then it does collide + if ndef.drawtype == "normal" then + -- except if it is not_blocking_trains + if ndef.groups.not_blocking_trains and ndef.groups.not_blocking_trains ~= 0 then + return false + end + return true + end + end + return false + end +else + function advtrains.train_collides(node) + if node and minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].walkable then if not minetest.registered_nodes[node.name].groups.not_blocking_trains then return true end - end - return false -end - -local nonblocknodes={ - "default:fence_wood", - "default:fence_acacia_wood", - "default:fence_aspen_wood", - "default:fence_pine_wood", - "default:fence_junglewood", - "default:torch", - "bones:bones", - - "default:sign_wall", - "signs:sign_wall", - "signs:sign_wall_blue", - "signs:sign_wall_brown", - "signs:sign_wall_orange", - "signs:sign_wall_green", - "signs:sign_yard", - "signs:sign_wall_white_black", - "signs:sign_wall_red", - "signs:sign_wall_white_red", - "signs:sign_wall_yellow", - "signs:sign_post", - "signs:sign_hanging", - - -} -minetest.after(0, function() - for _,name in ipairs(nonblocknodes) do - if minetest.registered_nodes[name] then - minetest.registered_nodes[name].groups.not_blocking_trains=1 end + return false end -end) + + local nonblocknodes={ + "default:fence_wood", + "default:fence_acacia_wood", + "default:fence_aspen_wood", + "default:fence_pine_wood", + "default:fence_junglewood", + "default:torch", + "bones:bones", + + "default:sign_wall", + "signs:sign_wall", + "signs:sign_wall_blue", + "signs:sign_wall_brown", + "signs:sign_wall_orange", + "signs:sign_wall_green", + "signs:sign_yard", + "signs:sign_wall_white_black", + "signs:sign_wall_red", + "signs:sign_wall_white_red", + "signs:sign_wall_yellow", + "signs:sign_post", + "signs:sign_hanging", + + } + minetest.after(0, function() + for _,name in ipairs(nonblocknodes) do + if minetest.registered_nodes[name] then + minetest.registered_nodes[name].groups.not_blocking_trains=1 + end + end + end) +end diff --git a/mods/advtrains/advtrains/wagons.lua b/mods/advtrains/advtrains/wagons.lua index f918571d..4093f065 100644 --- a/mods/advtrains/advtrains/wagons.lua +++ b/mods/advtrains/advtrains/wagons.lua @@ -934,6 +934,7 @@ function wagon:show_bordcom(pname) if not self:train() then return end local train = self:train() local data = advtrains.wagons[self.id] + local linhei local form = "size[11,9]label[0.5,0;AdvTrains Boardcom v0.1]" form=form.."textarea[0.5,1.5;7,1;text_outside;"..attrans("Text displayed outside on train")..";"..(minetest.formspec_escape(train.text_outside or "")).."]" @@ -1239,70 +1240,6 @@ function wagon:reattach_all() end end -local function check_twagon_owner(train, b_first, pname) - local wtp = b_first and 1 or #train.trainparts - local wid = train.trainparts[wtp] - local wdata = advtrains.wagons[wid] - if wdata then - return advtrains.check_driving_couple_protection(pname, wdata.owner, wdata.whitelist) - end - return false -end - -function advtrains.safe_couple_trains(id1, id2, t1f, t2f, pname, try_run,v1,v2) - - if pname and not minetest.check_player_privs(pname, "train_operator") then - minetest.chat_send_player(pname, "Missing train_operator privilege") - return false - end - - local train1=advtrains.trains[id1] - local train2=advtrains.trains[id2] - - if not advtrains.train_ensure_init(id1, train1) - or not advtrains.train_ensure_init(id2, train2) then - return false - end - local wck_t1, wck_t2 - if pname then - wck_t1 = check_twagon_owner(train1, t1f, pname) - wck_t2 = check_twagon_owner(train2, t2f, pname) - end - if (wck_t1 or wck_t2) or not pname then - if not v1 then - v1 = 0 - end - if not v2 then - v2 = 0 - end - if try_run then - return true - end - if t1f then - if t2f then - v1 = -v1 - advtrains.invert_train(id1) - advtrains.do_connect_trains(id1, id2, v1+v2) - else - advtrains.do_connect_trains(id2, id1, v1+v2) - end - else - if t2f then - advtrains.do_connect_trains(id1, id2, v1+v2) - else - v2 = -v2 - advtrains.invert_train(id2) - advtrains.do_connect_trains(id1, id2, v1+v2) - end - end - return true - else - minetest.chat_send_player(pname, "You must be authorized for at least one wagon.") - return false - end -end - - function advtrains.safe_decouple_wagon(w_id, pname, try_run) if not minetest.check_player_privs(pname, "train_operator") then minetest.chat_send_player(pname, "Missing train_operator privilege") diff --git a/mods/advtrains/advtrains_interlocking/database.lua b/mods/advtrains/advtrains_interlocking/database.lua index 68d41382..a35d446a 100644 --- a/mods/advtrains/advtrains_interlocking/database.lua +++ b/mods/advtrains/advtrains_interlocking/database.lua @@ -562,9 +562,23 @@ function ildb.set_sigd_for_signal(pos, sigd) end -- checks if there's any influence point set to this position -function ildb.is_ip_at(pos) +-- if purge is true, checks whether the associated signal still exists +-- and deletes the ip if not. +function ildb.is_ip_at(pos, purge) local pts = advtrains.roundfloorpts(pos) if influence_points[pts] then + if purge then + -- is there still a signal assigned to it? + for connid, sigpos in pairs(influence_points[pts]) do + local asp = advtrains.interlocking.signal_get_aspect(sigpos) + if not asp then + atlog("Clearing orphaned signal influence point", pts, "/", connid) + ildb.clear_ip_signal(pts, connid) + end + end + -- if there's no side left after purging, return false + if not influence_points[pts] then return false end + end return true end return false diff --git a/mods/advtrains/advtrains_interlocking/demosignals.lua b/mods/advtrains/advtrains_interlocking/demosignals.lua index fe60a73d..1c1b8b2b 100644 --- a/mods/advtrains/advtrains_interlocking/demosignals.lua +++ b/mods/advtrains/advtrains_interlocking/demosignals.lua @@ -41,7 +41,6 @@ minetest.register_node("advtrains_interlocking:ds_danger", { advtrains_signal = 2, save_in_at_nodedb = 1, }, - sounds = default.node_sound_stone_defaults(), advtrains = { set_aspect = setaspect, supported_aspects = suppasp, @@ -51,6 +50,7 @@ minetest.register_node("advtrains_interlocking:ds_danger", { }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) minetest.register_node("advtrains_interlocking:ds_free", { description = "Demo signal at Free", @@ -60,7 +60,6 @@ minetest.register_node("advtrains_interlocking:ds_free", { advtrains_signal = 2, save_in_at_nodedb = 1, }, - sounds = default.node_sound_stone_defaults(), advtrains = { set_aspect = setaspect, supported_aspects = suppasp, @@ -72,6 +71,7 @@ minetest.register_node("advtrains_interlocking:ds_free", { }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) minetest.register_node("advtrains_interlocking:ds_slow", { description = "Demo signal at Slow", @@ -81,7 +81,6 @@ minetest.register_node("advtrains_interlocking:ds_slow", { advtrains_signal = 2, save_in_at_nodedb = 1, }, - sounds = default.node_sound_stone_defaults(), advtrains = { set_aspect = setaspect, supported_aspects = suppasp, @@ -93,5 +92,6 @@ minetest.register_node("advtrains_interlocking:ds_slow", { }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) diff --git a/mods/advtrains/advtrains_interlocking/depends.txt b/mods/advtrains/advtrains_interlocking/depends.txt deleted file mode 100644 index fdf6b172..00000000 --- a/mods/advtrains/advtrains_interlocking/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -advtrains -advtrains_train_track? \ No newline at end of file diff --git a/mods/advtrains/advtrains_interlocking/mod.conf b/mods/advtrains/advtrains_interlocking/mod.conf new file mode 100644 index 00000000..3b2d0294 --- /dev/null +++ b/mods/advtrains/advtrains_interlocking/mod.conf @@ -0,0 +1,7 @@ +name=advtrains_interlocking +title=Advanced Trains Interlocking System +description=Interlocking system for Advanced Trains +author=orwell96 + +depends=advtrains +optional_depends=advtrains_train_track diff --git a/mods/advtrains/advtrains_interlocking/route_ui.lua b/mods/advtrains/advtrains_interlocking/route_ui.lua index 64e45ee3..1999941a 100644 --- a/mods/advtrains/advtrains_interlocking/route_ui.lua +++ b/mods/advtrains/advtrains_interlocking/route_ui.lua @@ -25,8 +25,8 @@ function atil.show_route_edit_form(pname, sigd, routeid) if not route then return end local form = "size[9,10]label[0.5,0.2;Route overview]" - form = form.."field[0.8,1.2;5.2,1;name;Route name;"..minetest.formspec_escape(route.name).."]" - form = form.."button[5.5,0.9;1,1;setname;Set]" + form = form.."field[0.8,1.2;6.5,1;name;Route name;"..minetest.formspec_escape(route.name).."]" + form = form.."button[7.0,0.9;1.5,1;setname;Set]" -- construct textlist for route information local tab = {} @@ -80,15 +80,16 @@ function atil.show_route_edit_form(pname, sigd, routeid) itab("Route ends on dead-end") end - form = form.."textlist[0.5,2;7,4;rtelog;"..table.concat(tab, ",").."]" + form = form.."textlist[0.5,2;7.75,3.9;rtelog;"..table.concat(tab, ",").."]" - form = form.."button[0.5,6;2,1;back;<<< Back to signal]" - form = form.."button[3.5,6;2,1;aspect;Signal Aspect]" - form = form.."button[5.5,6;2,1;delete;Delete Route]" + form = form.."button[0.5,6;3,1;back;<<< Back to signal]" + form = form.."button[4.5,6;2,1;aspect;Signal Aspect]" + form = form.."button[6.5,6;2,1;delete;Delete Route]" --atdebug(route.ars) - form = form.."textarea[1,7.3;5.2,3;ars;ARS Rule List;"..atil.ars_to_text(route.ars).."]" - form = form.."button[6,7.7;1,1;savears;Save]" + form = form.."style[ars;font=mono]" + form = form.."textarea[0.8,7.3;5,3;ars;ARS Rule List;"..atil.ars_to_text(route.ars).."]" + form = form.."button[5.5,7.23;3,1;savears;Save ARS List]" minetest.show_formspec(pname, "at_il_routeedit_"..minetest.pos_to_string(sigd.p).."_"..sigd.s.."_"..routeid, form) diff --git a/mods/advtrains/advtrains_interlocking/tcb_ts_ui.lua b/mods/advtrains/advtrains_interlocking/tcb_ts_ui.lua old mode 100644 new mode 100755 index 38d4453e..34fbf7ff --- a/mods/advtrains/advtrains_interlocking/tcb_ts_ui.lua +++ b/mods/advtrains/advtrains_interlocking/tcb_ts_ui.lua @@ -120,13 +120,41 @@ minetest.register_node("advtrains_interlocking:tcb_node", { -- Crafting + +-- set some fallbacks +local tcb_core = "default:mese_crystal" +local tcb_secondary = "default:mese_crystal_fragment" + +--alternative recipe items +--core +if minetest.get_modpath("basic_materials") then + tcb_core = "basic_materials:ic" +elseif minetest.get_modpath("technic") then + tcb_core = "technic:control_logic_unit" +end +--print("TCB Core: "..tcb_core) +--secondary +if minetest.get_modpath("mesecons") then + tcb_secondary = 'mesecons:wire_00000000_off' +end +--print("TCB Secondary: "..tcb_secondary) + minetest.register_craft({ output = 'advtrains_interlocking:tcb_node 4', recipe = { - {'mesecons:wire_00000000_off', 'basic_materials:ic', 'mesecons:wire_00000000_off'}, + {tcb_secondary,tcb_core,tcb_secondary}, + {'advtrains:dtrack_placer','','advtrains:dtrack_placer'} }, + --actually use track in the tcb recipe + replacements = { + {"advtrains:dtrack_placer","advtrains:dtrack_placer"}, + {"advtrains:dtrack_placer","advtrains:dtrack_placer"}, + } }) +--nil the temp crafting variables +tcb_core= nil +tcb_secondary = nil minetest.register_on_punchnode(function(pos, node, player, pointed_thing) local pname = player:get_player_name() diff --git a/mods/advtrains/advtrains_itrainmap/depends.txt b/mods/advtrains/advtrains_itrainmap/depends.txt deleted file mode 100644 index 6f00bf69..00000000 --- a/mods/advtrains/advtrains_itrainmap/depends.txt +++ /dev/null @@ -1 +0,0 @@ -advtrains \ No newline at end of file diff --git a/mods/advtrains/advtrains_itrainmap/mod.conf b/mods/advtrains/advtrains_itrainmap/mod.conf new file mode 100644 index 00000000..6468fc46 --- /dev/null +++ b/mods/advtrains/advtrains_itrainmap/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_itrainmap +title=Advanced Trains Interactive Train Map (currently broken) +description=Map formspec showing tracks and trains +author=orwell96 + +depends=advtrains diff --git a/mods/advtrains/advtrains_line_automation/depends.txt b/mods/advtrains/advtrains_line_automation/depends.txt deleted file mode 100644 index ce2e23c2..00000000 --- a/mods/advtrains/advtrains_line_automation/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -advtrains_interlocking -advtrains_train_track? \ No newline at end of file diff --git a/mods/advtrains/advtrains_line_automation/mod.conf b/mods/advtrains/advtrains_line_automation/mod.conf new file mode 100644 index 00000000..e9851c83 --- /dev/null +++ b/mods/advtrains/advtrains_line_automation/mod.conf @@ -0,0 +1,7 @@ +name=advtrains_line_automation +title=Advanced Trains Line Automation +description=Tools for automatic train lines +author=orwell96 + +depends=advtrains_interlocking +optional_depends=advtrains_train_track diff --git a/mods/advtrains/advtrains_line_automation/stoprail.lua b/mods/advtrains/advtrains_line_automation/stoprail.lua index 9c1470a8..55a4785a 100644 --- a/mods/advtrains/advtrains_line_automation/stoprail.lua +++ b/mods/advtrains/advtrains_line_automation/stoprail.lua @@ -50,19 +50,18 @@ local function show_stoprailform(pos, player) end local form = "size[8,7]" - form = form.."field[0.5,0.5;7,1;stn;"..attrans("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]" - form = form.."field[0.5,1.5;7,1;stnname;"..attrans("Station Name")..";"..minetest.formspec_escape(stnname).."]" - form = form.."field[0.5,2.5;1.5,1;ddelay;"..attrans("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]" - form = form.."field[2,2.5;2,1;speed;"..attrans("Departure Speed")..";"..minetest.formspec_escape(stdata.speed).."]" - form = form.."checkbox[5,1.75;reverse;"..attrans("Reverse train")..";"..(stdata.reverse and "true" or "false").."]" - form = form.."checkbox[5,2.0;kick;"..attrans("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]" - form = form.."label[0.5,3;Door side:]" - form = form.."dropdown[0.5,3;2;doors;Left,Right,Closed;"..door_dropdown[stdata.doors].."]" - form = form.."field[5,3.5;2,1;track;"..attrans("Track")..";"..minetest.formspec_escape(stdata.track).."]" - form = form.."field[5,4.5;2,1;wait;"..attrans("Stop Time")..";"..stdata.wait.."]" - - form = form.."textarea[0.5,4;4,2;ars;Trains stopping here (ARS rules);"..advtrains.interlocking.ars_to_text(stdata.ars).."]" - + form = form.."style[stn,ars;font=mono]" + form = form.."field[0.8,0.8;2,1;stn;"..attrans("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]" + form = form.."field[2.8,0.8;5,1;stnname;"..attrans("Station Name")..";"..minetest.formspec_escape(stnname).."]" + form = form.."field[0.80,2.0;1.75,1;ddelay;"..attrans("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]" + form = form.."field[2.55,2.0;1.75,1;speed;"..attrans("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]" + form = form.."field[4.30,2.0;1.75,1;track;"..attrans("Track")..";"..minetest.formspec_escape(stdata.track).."]" + form = form.."field[6.05,2.0;1.75,1;wait;"..attrans("Stop Time")..";"..stdata.wait.."]" + form = form.."label[0.5,2.6;"..attrans("Door Side").."]" + form = form.."dropdown[0.51,3.0;2;doors;Left,Right,Closed;"..door_dropdown[stdata.doors].."]" + form = form.."checkbox[3.00,2.7;reverse;"..attrans("Reverse train")..";"..(stdata.reverse and "true" or "false").."]" + form = form.."checkbox[3.00,3.1;kick;"..attrans("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]" + form = form.."textarea[0.8,4.2;7,2;ars;Trains stopping here (ARS rules);"..advtrains.interlocking.ars_to_text(stdata.ars).."]" form = form.."button[0.5,6;7,1;save;"..attrans("Save").."]" minetest.show_formspec(pname, "at_lines_stop_"..pe, form) @@ -89,23 +88,20 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) tmp_checkboxes[pe].reverse = (fields.reverse == "true") end if fields.save then - if fields.stn and stdata.stn ~= fields.stn then - if fields.stn ~= "" then - local stn = advtrains.lines.stations[fields.stn] - if stn then - if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then - stdata.stn = fields.stn - else - minetest.chat_send_player(pname, "Station code '"..fields.stn.."' does already exist and is owned by "..stn.owner) - end - else - advtrains.lines.stations[fields.stn] = {name = fields.stnname, owner = pname} + if fields.stn and stdata.stn ~= fields.stn and fields.stn ~= "" then + local stn = advtrains.lines.stations[fields.stn] + if stn then + if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then stdata.stn = fields.stn + else + minetest.chat_send_player(pname, "Station code '"..fields.stn.."' does already exist and is owned by "..stn.owner) + show_stoprailform(pos,player) + return end + else + advtrains.lines.stations[fields.stn] = {name = fields.stnname, owner = pname} + stdata.stn = fields.stn end - updatemeta(pos) - show_stoprailform(pos, player) - return end local stn = advtrains.lines.stations[stdata.stn] if stn and fields.stnname and fields.stnname ~= stn.name then diff --git a/mods/advtrains/advtrains_luaautomation/README.md b/mods/advtrains/advtrains_luaautomation/README.md index 5232c22f..683e45c6 100644 --- a/mods/advtrains/advtrains_luaautomation/README.md +++ b/mods/advtrains/advtrains_luaautomation/README.md @@ -93,6 +93,9 @@ Removes any pending interrupts of this node. Make this active component send a digiline message on the specified channel. Not available in init code. + - `atc_send_to_train(, )` + Sends the specified ATC command to the train specified by its train id. This happens regardless of where the train is in the world, and can be used to remote-control trains. Returns true on success. If the train ID does not exist, returns false and does nothing. See [atc_command.txt](../atc_command.txt) for the ATC command syntax. + #### Interlocking Route Management Functions If `advtrains_interlocking` is enabled, the following aditional functions can be used: @@ -230,6 +233,9 @@ In addition to the above environment functions, the following functions are avai - `atc_set_text_inside(text)` Set text shown to train passengers. Pass nil to show no text. `text` must be a string. + - `atc_set_text_inside(text) / atc_set_text_outside(text)` + Getters for inside/outside text, return nil when no train is there. + - `get_line()` Returns the "Line" property of the train (a string). This can be used to distinguish between trains of different lines and route them appropriately. diff --git a/mods/advtrains/advtrains_luaautomation/active_common.lua b/mods/advtrains/advtrains_luaautomation/active_common.lua index d168badb..9bf83778 100644 --- a/mods/advtrains/advtrains_luaautomation/active_common.lua +++ b/mods/advtrains/advtrains_luaautomation/active_common.lua @@ -41,9 +41,14 @@ function ac.getform(pos, meta_p) sel=#envs_asvalues end end - local form = "size[10,10]dropdown[0,0;3;env;"..table.concat(envs_asvalues, ",")..";"..sel.."]" - .."button[4,0;2,1;save;Save]button[7,0;2,1;cle;Clear local env] textarea[0.2,1;10,10;code;Code;"..minetest.formspec_escape(code).."]" - .."label[0,9.8;"..err.."]" + local form = "size["..atlatc.CODE_FORM_SIZE.."]" + .."style[code;font=mono]" + .."label[0,-0.1;Environment]" + .."dropdown[0,0.3;3;env;"..table.concat(envs_asvalues, ",")..";"..sel.."]" + .."button[5,0.2;2,1;save;Save]" + .."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).."]" + .."label[0,9.7;"..err.."]" return form end diff --git a/mods/advtrains/advtrains_luaautomation/atc_rail.lua b/mods/advtrains/advtrains_luaautomation/atc_rail.lua index 0dee0a56..b862129a 100644 --- a/mods/advtrains/advtrains_luaautomation/atc_rail.lua +++ b/mods/advtrains/advtrains_luaautomation/atc_rail.lua @@ -151,6 +151,14 @@ function r.fire_event(pos, evtdata, appr_internal) advtrains.trains[train_id].text_inside=text return true end, + atc_get_text_outside = function() + if not train_id then return false end + return advtrains.trains[train_id].text_outside + end, + atc_get_text_inside = function(text) + if not train_id then return false end + return advtrains.trains[train_id].text_inside + end, atc_set_lzb_tsr = function(speed) if not appr_internal then error("atc_set_lzb_tsr() can only be used during 'approach' events!") @@ -193,7 +201,10 @@ advtrains.register_tracks("default", { --set arrowconn (for ATC) local ph=minetest.pos_to_string(pos) local _, conns=advtrains.get_rail_info_at(pos, advtrains.all_tracktypes) - atlatc.active.nodes[ph].arrowconn=conns[1].c + local nodeent = atlatc.active.nodes[ph] + if nodeent then + nodeent.arrowconn=conns[1].c + end end, advtrains = { diff --git a/mods/advtrains/advtrains_luaautomation/chatcmds.lua b/mods/advtrains/advtrains_luaautomation/chatcmds.lua index 468698be..b6ffaee7 100644 --- a/mods/advtrains/advtrains_luaautomation/chatcmds.lua +++ b/mods/advtrains/advtrains_luaautomation/chatcmds.lua @@ -1,27 +1,18 @@ --chatcmds.lua --Registers commands to modify the init and step code for LuaAutomation ---position helper. ---punching a node will result in that position being saved and inserted into a text field on the top of init form. -local punchpos={} - -minetest.register_on_punchnode(function(pos, node, player, pointed_thing) - local pname=player:get_player_name() - punchpos[pname]=pos -end) - local function get_init_form(env, pname) local err = env.init_err or "" local code = env.init_code or "" - local ppos=punchpos[pname] - local pp="" - if ppos then - pp="POS"..minetest.pos_to_string(ppos) - end - local form = "size[10,10]button[0,0;2,1;run;Run InitCode]button[2,0;2,1;cls;Clear S]" - .."button[4,0;2,1;save;Save] button[6,0;2,1;del;Delete Env.] field[8.1,0.5;2,1;punchpos;Last punched position;"..pp.."]" - .."textarea[0.2,1;10,10;code;Environment initialization code;"..minetest.formspec_escape(code).."]" - .."label[0,9.8;"..err.."]" + + local form = "size["..atlatc.CODE_FORM_SIZE.."]" + .."style[code;font=mono]" + .."button[0.0,0.2;2.5,1;run;Run Init Code]" + .."button[2.5,0.2;2.5,1;cls;Clear S]" + .."button[5.0,0.2;2.5,1;save;Save]" + .."button[7.5,0.2;2.5,1;del;Delete Env.]" + .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;Environment initialization code;"..minetest.formspec_escape(code).."]" + .."label[0.0,9.7;"..err.."]" return form end diff --git a/mods/advtrains/advtrains_luaautomation/depends.txt b/mods/advtrains/advtrains_luaautomation/depends.txt deleted file mode 100644 index d5523e1a..00000000 --- a/mods/advtrains/advtrains_luaautomation/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -advtrains -advtrains_interlocking? -advtrains_line_automation? -mesecons_switch? \ No newline at end of file diff --git a/mods/advtrains/advtrains_luaautomation/environment.lua b/mods/advtrains/advtrains_luaautomation/environment.lua index 9ef320c0..63aa68d8 100644 --- a/mods/advtrains/advtrains_luaautomation/environment.lua +++ b/mods/advtrains/advtrains_luaautomation/environment.lua @@ -153,6 +153,17 @@ local static_env = { local pos=atlatc.pcnaming.resolve_pos(parpos) atlatc.interrupt.add(0, pos, {type="ext_int", ext_int=true, message=imesg}) end, + -- sends an atc command to train regardless of where it is in the world + atc_send_to_train = function(train_id, command) + assertt(command, "string") + local train = advtrains.trains[train_id] + if train then + advtrains.atc.train_set_command(train, command, true) + return true + else + return false + end + end, } -- If interlocking is present, enable route setting functions diff --git a/mods/advtrains/advtrains_luaautomation/init.lua b/mods/advtrains/advtrains_luaautomation/init.lua index a54fb253..ab625b10 100644 --- a/mods/advtrains/advtrains_luaautomation/init.lua +++ b/mods/advtrains/advtrains_luaautomation/init.lua @@ -2,12 +2,8 @@ -- Lua automation features for advtrains -- Uses global table 'atlatc' (AdvTrains_LuaATC) --- Boilerplate to support localized strings if intllib mod is installed. -if intllib then - atltrans = intllib.Getter() -else - atltrans = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end -end +--TODO: re-add localization (if merging localization, discard this hunk please) +atltrans = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end --Privilege --Only trusted players should be enabled to build stuff which can break the server. @@ -16,6 +12,9 @@ atlatc = { envs = {}} minetest.register_privilege("atlatc", { description = "Player can place and modify LUA ATC components. Grant with care! Allows to execute bad LUA code.", give_to_singleplayer = false, default= false }) +--Size of code input forms in X,Y notation. Must be at least 10x10 +atlatc.CODE_FORM_SIZE = "15,12" + --assertt helper. error if a variable is not of a type function assertt(var, typ) if type(var)~=typ then diff --git a/mods/advtrains/advtrains_luaautomation/mod.conf b/mods/advtrains/advtrains_luaautomation/mod.conf new file mode 100644 index 00000000..a7376034 --- /dev/null +++ b/mods/advtrains/advtrains_luaautomation/mod.conf @@ -0,0 +1,7 @@ +name=advtrains_luaautomation +title=Advanced Trains LuaATC +description=Lua control interface to Advanced Trains +author=orwell96 + +depends=advtrains +optional_depends=advtrains_interlocking,advtrains_line_automation,mesecons_switch diff --git a/mods/advtrains/advtrains_signals_ks/depends.txt b/mods/advtrains/advtrains_signals_ks/depends.txt deleted file mode 100644 index 9ddc3eb7..00000000 --- a/mods/advtrains/advtrains_signals_ks/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -advtrains -advtrains_interlocking \ No newline at end of file diff --git a/mods/advtrains/advtrains_signals_ks/init.lua b/mods/advtrains/advtrains_signals_ks/init.lua old mode 100644 new mode 100755 index 1c60a0eb..b05506ec --- a/mods/advtrains/advtrains_signals_ks/init.lua +++ b/mods/advtrains/advtrains_signals_ks/init.lua @@ -105,7 +105,6 @@ for _, rtab in ipairs({ }, drop = "advtrains_signals_ks:hs_danger_0", inventory_image = "advtrains_signals_ks_hs_inv.png", - sounds = default.node_sound_stone_defaults(), advtrains = { set_aspect = setaspectf(rot), supported_aspects = suppasp, @@ -115,6 +114,7 @@ for _, rtab in ipairs({ }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) -- rotatable by trackworker advtrains.trackplacer.add_worked("advtrains_signals_ks:hs", typ, "_"..rot, prts.n) @@ -150,7 +150,6 @@ for _, rtab in ipairs({ }, drop = "advtrains_signals_ks:ra_danger_0", inventory_image = "advtrains_signals_ks_ra_inv.png", - sounds = default.node_sound_stone_defaults(), advtrains = { set_aspect = setaspectf_ra(rot), supported_aspects = suppasp_ra, @@ -160,6 +159,7 @@ for _, rtab in ipairs({ }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) -- rotatable by trackworker advtrains.trackplacer.add_worked("advtrains_signals_ks:ra", typ, "_"..rot, prts.n) @@ -201,7 +201,6 @@ for _, rtab in ipairs({ }, drop = "advtrains_signals_ks:sign_8_0", inventory_image = "advtrains_signals_ks_sign_8.png", - sounds = default.node_sound_stone_defaults(), advtrains = { -- This is a static signal! No set_aspect get_aspect = function(pos, node) @@ -210,6 +209,7 @@ for _, rtab in ipairs({ }, on_rightclick = advtrains.interlocking.signal_rc_handler, can_dig = advtrains.interlocking.signal_can_dig, + after_dig_node = advtrains.interlocking.signal_after_dig, }) -- rotatable by trackworker advtrains.trackplacer.add_worked("advtrains_signals_ks:sign", typ, "_"..rot, prts.n) @@ -236,7 +236,6 @@ for _, rtab in ipairs({ not_in_creative_inventory = (rtab.ici) and 0 or 1, }, drop = "advtrains_signals_ks:mast_mast_0", - sounds = default.node_sound_stone_defaults(), }) advtrains.trackplacer.add_worked("advtrains_signals_ks:mast","mast", "_"..rot) end @@ -270,11 +269,18 @@ minetest.register_craft({ }, }) +local sign_material = "default:sign_wall_steel" --fallback +if minetest.get_modpath("basic_materials") then + sign_material = "basic_materials:plastic_sheet" +end +--print("Sign Material: "..sign_material) + minetest.register_craft({ output = "advtrains_signals_ks:sign_8_0 2", recipe = { - {'basic_materials:plastic_sheet', 'dye:black'}, + {sign_material, 'dye:black'}, {'default:stick', ''}, {'default:stick', ''}, }, }) +sign_material = nil diff --git a/mods/advtrains/advtrains_signals_ks/mod.conf b/mods/advtrains/advtrains_signals_ks/mod.conf new file mode 100644 index 00000000..7036efa3 --- /dev/null +++ b/mods/advtrains/advtrains_signals_ks/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_signals_ks +title=Advtrains Interlocking Signal Set - German 'Ks' signals +description=Default signal set for the Advanced Trains Interlocking system +author=orwell96 + +depends=advtrains_interlocking diff --git a/mods/advtrains/advtrains_train_industrial/depends.txt b/mods/advtrains/advtrains_train_industrial/depends.txt deleted file mode 100644 index 0492ba2e..00000000 --- a/mods/advtrains/advtrains_train_industrial/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -advtrains -advtrains_train_track -intllib? diff --git a/mods/advtrains/advtrains_train_japan/depends.txt b/mods/advtrains/advtrains_train_japan/depends.txt deleted file mode 100644 index 0492ba2e..00000000 --- a/mods/advtrains/advtrains_train_japan/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -advtrains -advtrains_train_track -intllib? diff --git a/mods/advtrains/advtrains_train_steam/depends.txt b/mods/advtrains/advtrains_train_steam/depends.txt deleted file mode 100755 index 0492ba2e..00000000 --- a/mods/advtrains/advtrains_train_steam/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -advtrains -advtrains_train_track -intllib? diff --git a/mods/advtrains/advtrains_train_subway/depends.txt b/mods/advtrains/advtrains_train_subway/depends.txt deleted file mode 100644 index 0492ba2e..00000000 --- a/mods/advtrains/advtrains_train_subway/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -advtrains -advtrains_train_track -intllib? diff --git a/mods/advtrains/advtrains_train_track/depends.txt b/mods/advtrains/advtrains_train_track/depends.txt deleted file mode 100644 index a85be06f..00000000 --- a/mods/advtrains/advtrains_train_track/depends.txt +++ /dev/null @@ -1,4 +0,0 @@ -default -advtrains -mesecons? -digtron? diff --git a/mods/advtrains/advtrains_train_track/init.lua b/mods/advtrains/advtrains_train_track/init.lua old mode 100644 new mode 100755 index 78d1392b..6bb8b338 --- a/mods/advtrains/advtrains_train_track/init.lua +++ b/mods/advtrains/advtrains_train_track/init.lua @@ -226,25 +226,25 @@ local function train_load(pos, train_id, unload) local inv = minetest.get_inventory({type="node", pos={x=pos.x, y=pos.y-1, z=pos.z}}) if inv and train.velocity < 2 then for k, v in ipairs(train.trainparts) do - - local i=minetest.get_inventory({type="detached", name="advtrains_wgn_"..v}) - if i then - if not unload then - for _, item in ipairs(inv:get_list("main")) do - if i:get_list("box") and i:room_for_item("box", item) then - i:add_item("box", item) - inv:remove_item("main", item) - end - end - else - for _, item in ipairs(i:get_list("box")) do - if inv:get_list("main") and inv:room_for_item("main", item) then - i:remove_item("box", item) - inv:add_item("main", item) - end - end - end - end + + local i=minetest.get_inventory({type="detached", name="advtrains_wgn_"..v}) + if i and i:get_list("box") then + if not unload then + for _, item in ipairs(inv:get_list("main")) do + if i:get_list("box") and i:room_for_item("box", item) then + i:add_item("box", item) + inv:remove_item("main", item) + end + end + else + for _, item in ipairs(i:get_list("box")) do + if inv:get_list("main") and inv:room_for_item("main", item) then + i:remove_item("box", item) + inv:add_item("main", item) + end + end + end + end end end end @@ -298,15 +298,27 @@ advtrains.register_tracks("default", { end }, advtrains.trackpresets.t_30deg_straightonly) +-- mod-dependent crafts +local loader_core = "default:mese_crystal" --fallback +if minetest.get_modpath("basic_materials") then + loader_core = "basic_materials:ic" +elseif minetest.get_modpath("technic") then + loader_core = "technic:control_logic_unit" +end +--print("Loader Core: "..loader_core) + minetest.register_craft({ type="shapeless", output = 'advtrains:dtrack_load_placer', recipe = { "advtrains:dtrack_placer", - "basic_materials:ic", + loader_core, "default:chest" }, }) +loader_core = nil --nil the crafting variable + +--craft between load/unload tracks minetest.register_craft({ type="shapeless", output = 'advtrains:dtrack_unload_placer', diff --git a/mods/advtrains/advtrains_train_track/mod.conf b/mods/advtrains/advtrains_train_track/mod.conf new file mode 100644 index 00000000..2aece3ee --- /dev/null +++ b/mods/advtrains/advtrains_train_track/mod.conf @@ -0,0 +1,7 @@ +name=advtrains_train_track +title=Advtrains Default Tracks +description=Default track set for Advanced Trains +author=orwell96 + +depends=advtrains +optional_depends=mesecons,digtron diff --git a/mods/advtrains/assets/mod.conf b/mods/advtrains/assets/mod.conf new file mode 100644 index 00000000..5b662517 --- /dev/null +++ b/mods/advtrains/assets/mod.conf @@ -0,0 +1,4 @@ +name=advtrains_assets +title=(Not a mod) Advtrains blender models and raw textures +description=Directory containing the model and texture files for future reference. Not included in release. +author=orwell96 diff --git a/mods/advtrains/modpack.conf b/mods/advtrains/modpack.conf new file mode 100644 index 00000000..e01f4629 --- /dev/null +++ b/mods/advtrains/modpack.conf @@ -0,0 +1,4 @@ +name=advtrains +title=Advanced Trains +description=Realistic trains and various equipment for railways, with a focus on automated train operation. No trains included, please install those separately. +author=orwell96 diff --git a/mods/advtrains/serialize_lib/api.md b/mods/advtrains/serialize_lib/api.md new file mode 100644 index 00000000..c4ccd773 --- /dev/null +++ b/mods/advtrains/serialize_lib/api.md @@ -0,0 +1,120 @@ +# serialize_lib API + +## Serialization Library (serialize.lua) + +### config table + +Serialization functions accept a config table. Currently only one configuration option is defined. + + config = { + skip_empty_tables = false + -- used for write_to_fd/write_to_file + -- if true, does not store empty tables + -- On next read, keys that mapped to empty tables resolve to nil + } + +If you want to use all-default config options, you can pass `nil` as the config parameter. + +### Serialization limits + + * Only strings, booleans, numbers and tables can be serialized, no functions or userdata + * serialize_lib requires that no reference loops are present in the table to be serialized. Currently, when passing a table that has a reference loop, serialize_lib will produce a stack overflow. + +### Functions + +All of these functions call `error()` if an error occurs. Errors can be caught with `pcall()`. + +#### write_to_fd(root_table, file, config) +Writes the contents of `root_table` to the file from the file handle given by `file`, and closes the file descriptor afterwards. + +#### write_to_file(root_table, filename, config) +First, opens `filename` for write. Then, writes the contents of `root_table` to the file. + +#### read_from_fd(file) +Reads the file from the file handle given by `file`, and closes the file descriptor afterwards. Returns the deserialized table. + +#### read_from_file(filename) +First, opens `filename` for read. Then, reads the file and returns the deserialized table. + +### External Lua Module +serialize.lua can be loaded as a standard Lua module even outside Minetest, like this: + + local serialize = require("serialize") + +## General API + +### Minetest wrappers for serialization functions + +Serialize_lib wraps write_to_file and read_from_file into 2 functions that do not throw errors but instead log the fact to the server log and have an appropriate return value: + +#### serialize_lib.write_table_to_file(root_table, filename) + +Serializes `root_table` into `filename`. On success, returns true. On failure, logs the error, then returns false and the error message. + +#### serialize_lib.read_table_from_file(filename) + +Deserializes the given file. On success, returns the deserialized table. On failure, logs the error, then returns false and the error message. + +## Atomic API + +serialize_lib provides functions for atomic saving. This means that if the process is interrupted during writing the save file, it is ensured that no save data gets corrupted and that instead the old state is read. + +The atomic system is flexible, and can be used not only to save serialized Lua tables but arbitrary file formats by means of a callback function. This callback function gets passed a file descriptor to operate on. + +### Concept +The plain scheme just overwrites the file in place. This however poses problems when we are interrupted right within the write, so we have incomplete data. So, the following scheme is applied: + +Unix: + + 1. writes to `filename.new` + 2. moves `filename.new` to `filename`, clobbering previous file + +Windows: + + 1. writes to `filename.new` + 2. delete `filename` + 3. moves `filename.new` to `filename` + +We count a new version of the state as "committed" after stage 2. + +During loading, we apply the following order of precedence: + + 1. `filename` + 2. `filename.new` (windows only, in case we were interrupted just before 3. when saving) + +### Functions + +All of these functions return either true on success or nil, error on error. + +#### serialize_lib.load_atomic(filename, callback) + +Load a saved state. + +If 'callback' is nil: reads serialized table. Returns the read table, or nil,err on error. + +If 'callback' is a function (signature `func(file_handle)` ): Counterpart to save_atomic with function argument. Opens the file and calls callback on it. If the callback function throws an error, and strict loading is enabled, that error is propagated. The callback's first return value is returned by load_atomic. + +#### serialize_lib.save_atomic(data, filename, callback, config) + +Save a file atomically. + +'data' is the data to be saved (when a callback is used, this can be nil) + +If 'callback' is nil: 'data' must be a table, and is serialized into the file + +If 'callback' is a function (signature `func(data, file_handle)` ): Opens the file and calls callback on it. The 'data' argument is the data passed to save_atomic(). If the callback function throws an error, and strict loading is enabled, that error is propagated. The callback's first return value is returned by load_atomic(). + +Important: the callback must close the file in all cases! + +#### serialize_lib.save_atomic_multiple(parts_table, filename_prefix, callbacks_table, config) + +Saves multiple files synchronously. First writes all data to all `filename`.new files, then moves all files in quick succession to avoid inconsistent backups. parts_table is a table where the keys are used as part of the filename and the values are the respective data written to it. + + * Example: if `parts_table={foo={...}, bar={...}}`, then `filename_prefix`foo and `filename_prefix`bar are written out. + +If 'callbacks_table' is defined, it is consulted for callbacks the same way save_atomic does. + + * Example: if `callbacks_table = {foo = func()...}`, then the callback is used during writing of file 'foo' (but not for 'bar') + * Note however that you must at least insert a "true" in the parts_table if you don't use the data argument. + +Important: the callback must close the file in all cases! diff --git a/mods/advtrains/serialize_lib/atomic.lua b/mods/advtrains/serialize_lib/atomic.lua index 182cf426..886b6a4a 100644 --- a/mods/advtrains/serialize_lib/atomic.lua +++ b/mods/advtrains/serialize_lib/atomic.lua @@ -65,7 +65,7 @@ local function save_atomic_move_file(filename) end local function open_file_and_save_callback(callback, filename) - local file, err = io.open(filename, "w") + local file, err = io.open(filename, "wb") if not file then error("Failed opening file '"..filename.."' for write:\n"..err) end @@ -75,7 +75,7 @@ local function open_file_and_save_callback(callback, filename) end local function open_file_and_load_callback(filename, callback) - local file, err = io.open(filename, "r") + local file, err = io.open(filename, "rb") if not file then error("Failed opening file '"..filename.."' for read:\n"..err) end @@ -97,7 +97,7 @@ function serialize_lib.load_atomic(filename, callback) local cbfunc = callback or ser.read_from_fd -- try - local file, ret = io.open(filename, "r") + local file, ret = io.open(filename, "rb") if file then -- read the file using the callback local success @@ -107,7 +107,7 @@ function serialize_lib.load_atomic(filename, callback) end end - if minetest.settings:get_bool("serialize_lib_strict_loading") then + if minetest.settings:get_bool("serialize_lib_strict_loading", true) then serialize_lib.save_lock = true error("Loading data from file '"..filename.."' failed:\n" ..ret.."\nDisable Strict Loading to ignore.") @@ -117,7 +117,7 @@ function serialize_lib.load_atomic(filename, callback) serialize_lib.log_warn(ret) -- try .new - file, ret = io.open(filename..".new", "r") + file, ret = io.open(filename..".new", "rb") if file then -- read the file using the callback local success @@ -151,7 +151,7 @@ function serialize_lib.save_atomic(data, filename, callback, config) local cbfunc = callback or ser.write_to_fd - local file, ret = io.open(filename..".new", "w") + local file, ret = io.open(filename..".new", "wb") if file then -- save the file using the callback local success @@ -189,7 +189,7 @@ function serialize_lib.save_atomic_multiple(parts_table, filename_prefix, callba end local success = false - local file, ret = io.open(filename..".new", "w") + local file, ret = io.open(filename..".new", "wb") if file then -- save the file using the callback success, ret = pcall(cbfunc, data, file, config) diff --git a/mods/advtrains/serialize_lib/init.lua b/mods/advtrains/serialize_lib/init.lua index 20ffa4d6..afc68843 100644 --- a/mods/advtrains/serialize_lib/init.lua +++ b/mods/advtrains/serialize_lib/init.lua @@ -57,6 +57,7 @@ function serialize_lib.read_table_from_file(filename) local succ, ret = pcall(ser.read_from_file, filename) if not succ then serialize_lib.log_error(ret) + return false,ret end return ret end @@ -67,8 +68,9 @@ function serialize_lib.write_table_to_file(root_table, filename) local succ, ret = pcall(ser.write_to_file, root_table, filename) if not succ then serialize_lib.log_error(ret) + return false,ret end - return ret + return true end diff --git a/mods/advtrains/serialize_lib/license.txt b/mods/advtrains/serialize_lib/license.txt new file mode 100644 index 00000000..f36a7b77 --- /dev/null +++ b/mods/advtrains/serialize_lib/license.txt @@ -0,0 +1,662 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + + Copyright (C) {{ year }} {{ organization }} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/mods/advtrains/serialize_lib/mod.conf b/mods/advtrains/serialize_lib/mod.conf index ac3a1bd8..a2fd6bb0 100644 --- a/mods/advtrains/serialize_lib/mod.conf +++ b/mods/advtrains/serialize_lib/mod.conf @@ -1 +1,4 @@ -name = serialize_lib +name=serialize_lib +title=Lua Serialization Library +description=A library to efficiently write and read Lua tables to/from a file, with support for atomic operations +author=orwell96 diff --git a/mods/advtrains/serialize_lib/readme.md b/mods/advtrains/serialize_lib/readme.md index ac364b8e..1a14187f 100644 --- a/mods/advtrains/serialize_lib/readme.md +++ b/mods/advtrains/serialize_lib/readme.md @@ -4,4 +4,45 @@ Created out of the need to have a robust data store for advtrains. The main purpose is to load and store large Lua table structures into files, without loading everything in memory and exhausting the function constant limit of LuaJIT. -Also contains various utilities to handle files on disk in a safe manner, retain multiple versions of the same file a.s.o. \ No newline at end of file +Also contains various utilities to handle files on disk in a safe manner, retain multiple versions of the same file a.s.o. + +## API documentation + +For API documentation, see `api.md`. + +## Configuration + +serialize_lib includes two configuration options: + +### serialize_lib_strict_loading (Strict loading) + * Type: boolean + * Default: false + +Enable strict file loading mode + +If enabled, if any error occurs during loading of a file using the 'atomic' API, an error is thrown. You probably need to disable this option for initial loading after creating the world. + +### serialize_lib_no_auto_windows_mode (No automatic Windows Mode) + * Type: boolean + * Default: false + +Do not automatically switch to "Windows mode" when saving atomically + +Normally, when renaming filename.new to filename fails, serialize_lib automatically switches to a mode where it deletes filename prior to moving. Enable this option to prevent this behavior and abort saving instead. + +## License +serialize_lib +Copyright (C) 2020-2021 orwell96 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . \ No newline at end of file diff --git a/mods/advtrains/serialize_lib/serialize.lua b/mods/advtrains/serialize_lib/serialize.lua index 12a26c4d..78ddcfdc 100644 --- a/mods/advtrains/serialize_lib/serialize.lua +++ b/mods/advtrains/serialize_lib/serialize.lua @@ -3,6 +3,9 @@ -- Contains the serialization and deserialization routines --[[ +Version history: +1 - initial +2 - also escaping CR character as &r Structure of entry: [keytype][key]:[valuetype][val] @@ -19,7 +22,7 @@ Table: E example: -LUA_SER v=1 { +LUA_SER v=2 { Skey:Svalue key = "value", N1:Seins [1] = "eins", B1:T [true] = { @@ -32,7 +35,7 @@ String representations: In strings the following characters are escaped by & '&' -> '&&' (line break) -> '&n' -(CR) -> '&r' --> required? +(CR) -> '&r' ':' -> '&:' All other characters are unchanged as they bear no special meaning. ]] @@ -97,6 +100,7 @@ end function escape_chars(str) local rstr = string.gsub(str, "&", "&&") rstr = string.gsub(rstr, ":", "&:") + rstr = string.gsub(rstr, "\r", "&r") rstr = string.gsub(rstr, "\n", "&n") return rstr end @@ -113,6 +117,8 @@ function read_table(t, file) file:close() error("Unexpected EOF or read error!") end + -- possibly windows fix: strip trailing \r's from line + line = string.gsub(line, "\r$", "") if line=="E" then -- done with this table @@ -172,6 +178,7 @@ end function unescape_chars(str) --TODO local rstr = string.gsub(str, "&:", ":") rstr = string.gsub(rstr, "&n", "\n") + rstr = string.gsub(rstr, "&r", "\r") rstr = string.gsub(rstr, "&&", "&") return rstr end @@ -187,7 +194,7 @@ config = { -- Writes the passed table into the passed file descriptor, and closes the file local function write_to_fd(root_table, file, config) - file:write("LUA_SER v=1\n") + file:write("LUA_SER v=2\n") write_table(root_table, file, config) file:write("E\nEND_SER\n") file:close() @@ -197,14 +204,18 @@ end -- Throws errors when something is wrong. Closes the file. -- config: see above local function read_from_fd(file) - local first_line = file:read("*l") - if first_line ~= "LUA_SER v=1" then + local first_line = file:read("*line") + -- possibly windows fix: strip trailing \r's from line + first_line = string.gsub(first_line, "\r$", "") + if not string.match(first_line, "LUA_SER v=[12]") then file:close() error("Expected header, got '"..first_line.."' instead!") end local t = {} read_table(t, file) - local last_line = file:read("*l") + local last_line = file:read("*line") + -- possibly windows fix: strip trailing \r's from line + last_line = string.gsub(last_line, "\r$", "") file:close() if last_line ~= "END_SER" then error("Missing END_SER, got '"..last_line.."' instead!") @@ -216,7 +227,7 @@ end -- config: see above function write_to_file(root_table, filename, config) -- try opening the file - local file, err = io.open(filename, "w") + local file, err = io.open(filename, "wb") if not file then error("Failed opening file '"..filename.."' for write:\n"..err) end @@ -228,7 +239,7 @@ end -- Opens the passed filename, and returns its deserialized contents function read_from_file(filename) -- try opening the file - local file, err = io.open(filename, "r") + local file, err = io.open(filename, "rb") if not file then error("Failed opening file '"..filename.."' for read:\n"..err) end diff --git a/mods/ambience/README.md b/mods/ambience/README.md index 2a513835..689ca017 100644 --- a/mods/ambience/README.md +++ b/mods/ambience/README.md @@ -18,5 +18,7 @@ Based on Immersive Sounds .36 mod by Neuromancer and optimized to run on servers - 1.3 - Added API for use with other mods, code rewrite - 1.4 - Re-ordered water sets to come before fire and lava, day/night sounds play when leaves around and above ground - 1.5 - Added 'flame_sound' and fire redo check, code tidy and tweak, added ephemeral flag for background sounds. +- 1.6 - Finding env_sounds disables water and lava sets, added 'ambience_water_move' flag to override water walking sounds, use eye level for head node. +- 1.7 - Music will play every 20-30 minutes if found, use '/mvol 0' to stop playing music or disable in-game. Code license: MIT diff --git a/mods/ambience/init.lua b/mods/ambience/init.lua index 1f7bb4f0..b9d424cf 100644 --- a/mods/ambience/init.lua +++ b/mods/ambience/init.lua @@ -1,15 +1,9 @@ ambience = {} --- override default water sounds -minetest.override_item("default:water_source", { sounds = {} }) -minetest.override_item("default:water_flowing", { sounds = {} }) -minetest.override_item("default:river_water_source", { sounds = {} }) -minetest.override_item("default:river_water_flowing", { sounds = {} }) - -- settings local SOUNDVOLUME = 1.0 -local MUSICVOLUME = 1.0 +local MUSICVOLUME = 0.6 local play_music = minetest.settings:get_bool("ambience_music") ~= false local pplus = minetest.get_modpath("playerplus") local radius = 6 @@ -19,8 +13,6 @@ local sound_set_order = {} -- needed because pairs loops randomly through tables local set_nodes = {} -- all the nodes needed for sets --- global functions - -- add set to list ambience.add_set = function(set_name, def) @@ -73,10 +65,7 @@ end -- return set from list using name ambience.get_set = function(set_name) - - if sound_sets[set_name] then - return sound_sets[set_name] - end + return sound_sets[set_name] end @@ -100,42 +89,61 @@ ambience.del_set = function(set_name) end +-- setup table when player joins +minetest.register_on_joinplayer(function(player) + playing[player:get_player_name()] = {music = -1} +end) + +-- remove table when player leaves +minetest.register_on_leaveplayer(function(player) + playing[player:get_player_name()] = nil +end) + + -- plays music and selects sound set local get_ambience = function(player, tod, name) - -- play server or local music if available - if play_music and playing[name] then + -- play server or local music if music enabled and music not already playing + if play_music and MUSICVOLUME > 0 + and playing[name] and playing[name].music < 0 then - -- play at midnight - if tod >= 0.0 and tod <= 0.01 then + -- count backwards + playing[name].music = playing[name].music -1 - if not playing[name].music then + -- play music every 20 minutes + if playing[name].music < -(60 * 20) then - playing[name].music = minetest.sound_play("ambience_music", { - to_player = player:get_player_name(), - gain = MUSICVOLUME - }) - end + playing[name].music = minetest.sound_play("ambience_music", { + to_player = name, + gain = MUSICVOLUME + }) - elseif tod > 0.1 and playing[name].music then + -- reset music timer after 10 minutes + minetest.after(60 * 10, function(name) - playing[name].music = nil + if playing[name] then + playing[name].music = -1 + end + end, name) end - end +--print("-- music count", playing[name].music) + + end -- get foot and head level nodes at player position local pos = player:get_pos() ; if not pos then return end + local prop = player:get_properties() - pos.y = pos.y + 1.4 -- head level + pos.y = pos.y + prop.eye_height -- eye level - local nod_head = pplus and name and playerplus[name].nod_head or - minetest.get_node(pos).name + local nod_head = pplus and name and playerplus[name] + and playerplus[name].nod_head or minetest.get_node(pos).name - pos.y = pos.y - 1.2 -- foot level + pos.y = (pos.y - prop.eye_height) + 0.2 -- foot level - local nod_feet = pplus and name and playerplus[name].nod_feet or - minetest.get_node(pos).name + local nod_feet = pplus and name and playerplus[name] + and playerplus[name].nod_feet or minetest.get_node(pos).name pos.y = pos.y - 0.2 -- reset pos @@ -168,6 +176,8 @@ local get_ambience = function(player, tod, name) end end end + + return nil, nil -- ADDED end @@ -182,49 +192,44 @@ minetest.register_globalstep(function(dtime) if timer < 1 then return end timer = 0 - -- get list of players and set some variables - local players = minetest.get_connected_players() local player_name, number, chance, ambience, handler, ok local tod = minetest.get_timeofday() -- loop through players - for n = 1, #players do + for _, player in ipairs(minetest.get_connected_players()) do - player_name = players[n]:get_player_name() + player_name = player:get_player_name() --local t1 = os.clock() - local set_name, MORE_GAIN = get_ambience(players[n], tod, player_name) + local set_name, MORE_GAIN = get_ambience(player, tod, player_name) --print(string.format("elapsed time: %.4f\n", os.clock() - t1)) - ok = true -- everything starts off ok + ok = playing[player_name] -- everything starts off ok if player found - -- stop current sound if another set active or gain changed - if playing[player_name] - and playing[player_name].handler then + -- are we playing something already? + if ok and playing[player_name].handler then + -- stop current sound if another set active or gain changed if playing[player_name].set ~= set_name - or (playing[player_name].set == set_name - and playing[player_name].gain ~= MORE_GAIN) then + or playing[player_name].gain ~= MORE_GAIN then ---print ("-- change stop", set_name, playing[player_name].old_handler) +--print ("-- change stop", set_name, playing[player_name].handler) - minetest.sound_stop(playing[player_name].old_handler) + minetest.sound_stop(playing[player_name].handler) playing[player_name].set = nil - playing[player_name].handler = nil playing[player_name].gain = nil + playing[player_name].handler = nil else ok = false -- sound set still playing, skip new sound end end - -- set random chance and reset seed + -- set random chance chance = random(1, 1000) - math.randomseed(tod + chance) - -- if chance is lower than set frequency then select set if ok and set_name and chance < sound_sets[set_name].frequency then @@ -248,33 +253,29 @@ minetest.register_globalstep(function(dtime) --print("-- current handler", handler) -- set what player is currently listening to - playing[player_name] = { - set = set_name, gain = MORE_GAIN, - handler = handler, old_handler = handler - } + playing[player_name].set = set_name + playing[player_name].gain = MORE_GAIN + playing[player_name].handler = handler -- set timer to stop sound - minetest.after(ambience.length, function() - ---print("-- after", set_name, handler) - - -- make sure we are stopping same sound we started - if playing[player_name] - and playing[player_name].handler - and playing[player_name].old_handler == handler then + minetest.after(ambience.length, function(handler, player_name) --print("-- timed stop", set_name, handler) - - --minetest.sound_stop(playing[player_name].handler) + if handler then minetest.sound_stop(handler) - - -- reset player variables and backup handler - playing[player_name] = { - set = nil, gain = nil, - handler = nil, old_handler = nil - } end - end) + + -- reset variables if handlers match + if playing[player_name] + and playing[player_name].handler == handler then + +--print("-- timed reset", handler, player_name) + + playing[player_name].set = nil + playing[player_name].gain = nil + playing[player_name].handler = nil + end + end, handler, player_name) end end end @@ -295,30 +296,34 @@ minetest.register_chatcommand("svol", { if SOUNDVOLUME > 1.0 then SOUNDVOLUME = 1.0 end return true, "Sound volume set to " .. SOUNDVOLUME - end, + end }) -- music volume command (0 stops music) minetest.register_chatcommand("mvol", { params = "", - description = "set music volume (0.1 to 1.0)", + description = "set music volume (0.1 to 1.0, 0 to stop music)", privs = {server = true}, func = function(name, param) MUSICVOLUME = tonumber(param) or MUSICVOLUME - -- ability to stop music just as it begins - if MUSICVOLUME == 0 and playing[name].music then + -- ability to stop music by setting volume to 0 + if MUSICVOLUME == 0 and playing[name].music + and playing[name].music >= 0 then + minetest.sound_stop(playing[name].music) + + playing[name].music = -1 end - if MUSICVOLUME < 0.1 then MUSICVOLUME = 0.1 end + if MUSICVOLUME < 0 then MUSICVOLUME = 0 end if MUSICVOLUME > 1.0 then MUSICVOLUME = 1.0 end return true, "Music volume set to " .. MUSICVOLUME - end, + end }) diff --git a/mods/ambience/settingtypes.txt b/mods/ambience/settingtypes.txt index 6d591d10..fafa5292 100644 --- a/mods/ambience/settingtypes.txt +++ b/mods/ambience/settingtypes.txt @@ -1,2 +1,5 @@ # If enabled will play a random music file from ./minetest/sounds at midnight ambience_music (Ambience music) bool true + +# If enabled then ambience will take over sounds when moving in water +ambience_water_move (Ambience water movement) bool true diff --git a/mods/ambience/soundsets.lua b/mods/ambience/soundsets.lua index 657674f9..9dc5d3e4 100644 --- a/mods/ambience/soundsets.lua +++ b/mods/ambience/soundsets.lua @@ -25,14 +25,22 @@ ambience.add_set("underwater", { end }) --- Splashing sound plays when player walks inside water nodes +-- Splashing sound plays when player walks inside water nodes (if enabled) + +if minetest.settings:get_bool("ambience_water_move") ~= false then + +-- override default water sounds +minetest.override_item("default:water_source", { sounds = {} }) +minetest.override_item("default:water_flowing", { sounds = {} }) +minetest.override_item("default:river_water_source", { sounds = {} }) +minetest.override_item("default:river_water_flowing", { sounds = {} }) ambience.add_set("splash", { frequency = 1000, sounds = { - {name = "swim_splashing", length = 3}, + {name = "swim_splashing", length = 3} }, sound_check = function(def) @@ -49,7 +57,9 @@ ambience.add_set("splash", { end }) --- check for env_sounds mod, if not found enable water flowing sounds +end + +-- check for env_sounds mod, if not found enable water flowing and lava sounds if not minetest.get_modpath("env_sounds") then -- Water sound plays when near flowing water @@ -102,8 +112,34 @@ ambience.add_set("river", { end }) +-- Lava sound plays when near lava + +ambience.add_set("lava", { + + frequency = 1000, + + sounds = { + {name = "lava", length = 7} + }, + + nodes = {"default:lava_source", "default:lava_flowing"}, + + sound_check = function(def) + + local c = (def.totals["default:lava_source"] or 0) + + (def.totals["default:lava_flowing"] or 0) + + if c > 20 then + return "lava", 0.5 + + elseif c > 5 then + return "lava" + end + end +}) + else - print ("[Ambience] found env_sounds, flowing water sounds disabled.") + print ("[Ambience] found env_sounds, flowing water and lava sounds disabled.") end -- Only add fire sounds set if flame_sound is disabled or fire redo active @@ -170,32 +206,6 @@ ambience.add_set("largefire", { end --- Lava sound plays when near lava - -ambience.add_set("lava", { - - frequency = 1000, - - sounds = { - {name = "lava", length = 7} - }, - - nodes = {"default:lava_source", "default:lava_flowing"}, - - sound_check = function(def) - - local c = (def.totals["default:lava_source"] or 0) - + (def.totals["default:lava_flowing"] or 0) - - if c > 20 then - return "lava", 0.5 - - elseif c > 5 then - return "lava" - end - end -}) - -- Beach sounds play when below y-pos 6 and 150+ water source found ambience.add_set("beach", { @@ -228,7 +238,7 @@ ambience.add_set("ice", { frequency = 250, sounds = { - {name = "icecrack", length = 23}, + {name = "icecrack", length = 23, gain = 0.7}, {name = "desertwind", length = 8}, {name = "wind", length = 9} }, @@ -270,7 +280,7 @@ ambience.add_set("desert", { end }) --- Cave sounds play when below player position Y -25 +-- Cave sounds play when below player position Y -25 and water nearby ambience.add_set("cave", { @@ -283,7 +293,9 @@ ambience.add_set("cave", { sound_check = function(def) - if def.pos.y < -25 then + local c = (def.totals["default:water_source"] or 0) + + if c > 0 and def.pos.y < -25 then return "cave" end end diff --git a/mods/anvils/depends.txt b/mods/anvils/depends.txt index 1ab50c5d..bc6710fa 100644 --- a/mods/anvils/depends.txt +++ b/mods/anvils/depends.txt @@ -4,4 +4,6 @@ farming? ethereal? moreores? 3d_armor? +shields? xanadu? +mobs? diff --git a/mods/anvils/init.lua b/mods/anvils/init.lua index 408295cd..7586d901 100644 --- a/mods/anvils/init.lua +++ b/mods/anvils/init.lua @@ -208,6 +208,7 @@ local anvildef = { is_ground_content = false, paramtype2 = "facedir", drawtype = "nodebox", + use_texture_alpha = "clip", node_box = { type = "fixed", fixed = { @@ -219,6 +220,21 @@ local anvildef = { sounds = default.node_sound_metal_defaults(), +---------------- added + can_dig = function(pos, player) + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + if inv:is_empty("input") and inv:is_empty("output") then + + if not minetest.is_protected(pos, player:get_player_name()) then + return true + end + end + end, +----------------- + after_dig_node = function(pos, oldnode, oldmetadata, digger) local meta = minetest.get_meta(pos) diff --git a/mods/anvils/tools.lua b/mods/anvils/tools.lua index 7375fe4a..d84729e2 100644 --- a/mods/anvils/tools.lua +++ b/mods/anvils/tools.lua @@ -141,7 +141,46 @@ if minetest.get_modpath("3d_armor") then end end +if minetest.get_modpath("shields") then + + if armor.materials.steel then + add_tool("shields:shield_steel", "default:steel_ingot", 7) + end + + if armor.materials.bronze then + add_tool("shields:shield_bronze", "default:bronze_ingot", 7) + end + + if armor.materials.diamond then + add_tool("shields:shield_diamond", "default:diamond", 7) + end + + if armor.materials.gold then + add_tool("shields:shield_gold", "default:gold_ingot", 7) + end + + if armor.materials.mithril then + add_tool("shields:shield_mithril", "moreores:mithril_ingot", 7) + end + + if armor.materials.crystal then + add_tool("shields:shield_crystal", "ethereal:crystal_ingot", 7) + end +end + +if minetest.get_modpath("mobs_monster") then + add_tool("mobs:pick_lava", "mobs:lava_orb", 3, true) +end + -- Xanadu mod if minetest.get_modpath("xanadu") then add_tool("xanadu:axe_super", "default:diamond", 18, true) + add_tool("mobs:pick_lava", "mobs:lava_orb", 3, true) + add_tool("xanadu:helmet_ccrystal", "ethereal:crystal_ingot", 5) + add_tool("xanadu:chestplate_ccrystal", "ethereal:crystal_ingot", 8) + add_tool("xanadu:leggings_ccrystal", "ethereal:crystal_ingot", 7) + add_tool("xanadu:boots_ccrystal", "ethereal:crystal_ingot", 4) + add_tool("3d_armor:boots_nyan", "nyancat:nyancat_rainbow", 4) + add_tool("3d_armor:helmet_watercrystal", "ethereal:crystal_ingot", 5) + add_tool("3d_armor:boots_mese", "default:mese_crystal", 8) end diff --git a/mods/bakedclay/README.md b/mods/bakedclay/README.md index e740e03b..d699179c 100644 --- a/mods/bakedclay/README.md +++ b/mods/bakedclay/README.md @@ -2,11 +2,13 @@ Baked Clay This mod lets the player bake clay into hardened blocks and colour them with dye (8x baked clay and 1x dye in centre), stairs and slabs are also available. +Cooking baked clay turns it into glazed terracotta blocks. https://forum.minetest.net/viewtopic.php?id=8890 Changelog: +- 1.0 - Added glazed terracotta blocks when you cook baked clay in furnace (thanks D3monPixel) - 0.9 - Baked clay now works in the technic cnc machine - 0.8 - Cooking clay block in furnace gives natural baked clay which you can dye - 0.7 - Added support for stairsplus so that stairs are registered properly @@ -17,7 +19,7 @@ Changelog: - 0.2 - Any colour of baked clay can be re-dyed into another colour - 0.1 - Initial Release -Lucky Blocks: 9 +Lucky Blocks: 10 Note: Under settings you will find 'colored_clay_compatibility' switch that when enabled will register aliases for the older colored clay mod and it's stairplus stairs. diff --git a/mods/bakedclay/init.lua b/mods/bakedclay/init.lua index 133d199e..61fc73bf 100644 --- a/mods/bakedclay/init.lua +++ b/mods/bakedclay/init.lua @@ -17,7 +17,7 @@ local clay = { {"brown", "Brown"}, {"pink", "Pink"}, {"dark_grey", "Dark Grey"}, - {"dark_green", "Dark Green"}, + {"dark_green", "Dark Green"} } local techcnc_mod = minetest.get_modpath("technic_cnc") @@ -27,42 +27,50 @@ local stairsplus_mod = minetest.get_modpath("moreblocks") for _, clay in pairs(clay) do - -- node definition + -- node minetest.register_node("bakedclay:" .. clay[1], { description = clay[2] .. " Baked Clay", tiles = {"baked_clay_" .. clay[1] ..".png"}, groups = {cracky = 3, bakedclay = 1}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults() }) - -- craft from dye and any baked clay + -- craft recipe + if clay[1] ~= "natural" then + minetest.register_craft({ output = "bakedclay:" .. clay[1] .. " 8", recipe = { {"group:bakedclay", "group:bakedclay", "group:bakedclay"}, {"group:bakedclay", "dye:" .. clay[1], "group:bakedclay"}, {"group:bakedclay", "group:bakedclay", "group:bakedclay"} - }, + } }) end - -- register stairsplus stairs if found + -- stairs plus if stairsplus_mod then - stairsplus:register_all("bakedclay", "baked_clay_" .. clay[1], "bakedclay:" .. clay[1], { + stairsplus:register_all("bakedclay", "baked_clay_" .. clay[1], + "bakedclay:" .. clay[1], { description = clay[2] .. " Baked Clay", tiles = {"baked_clay_" .. clay[1] .. ".png"}, groups = {cracky = 3}, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults() }) - stairsplus:register_alias_all("bakedclay", clay[1], "bakedclay", "baked_clay_" .. clay[1]) - minetest.register_alias("stairs:slab_bakedclay_".. clay[1], "bakedclay:slab_baked_clay_" .. clay[1]) - minetest.register_alias("stairs:stair_bakedclay_".. clay[1], "bakedclay:stair_baked_clay_" .. clay[1]) + stairsplus:register_alias_all("bakedclay", clay[1], + "bakedclay", "baked_clay_" .. clay[1]) - -- register all stair types for stairs redo + minetest.register_alias("stairs:slab_bakedclay_".. clay[1], + "bakedclay:slab_baked_clay_" .. clay[1]) + + minetest.register_alias("stairs:stair_bakedclay_".. clay[1], + "bakedclay:stair_baked_clay_" .. clay[1]) + + -- stairs redo elseif stairs_mod and stairs.mod then stairs.register_all("bakedclay_" .. clay[1], "bakedclay:" .. clay[1], @@ -71,7 +79,7 @@ for _, clay in pairs(clay) do clay[2] .. " Baked Clay", default.node_sound_stone_defaults()) - -- register stair and slab using default stairs + -- default stairs elseif stairs_mod then stairs.register_stair_and_slab("bakedclay_".. clay[1], "bakedclay:".. clay[1], @@ -92,6 +100,56 @@ for _, clay in pairs(clay) do end end +-- Terracotta blocks (textures by D3monPixel, thanks for use :) +for _, clay in pairs(clay) do + + if clay[1] ~= "natural" then + + local texture = "baked_clay_terracotta_" .. clay[1] ..".png" + + minetest.register_node("bakedclay:terracotta_" .. clay[1], { + description = clay[2] .. " Glazed Terracotta", + tiles = { + texture .. "", + texture .. "", + texture .. "^[transformR180", + texture .. "", + texture .. "^[transformR270", + texture .. "^[transformR90", + }, + paramtype2 = "facedir", + groups = {cracky = 3, terracotta = 1}, + sounds = default.node_sound_stone_defaults(), + on_place = minetest.rotate_node + }) + + minetest.register_craft({ + type = "cooking", + output = "bakedclay:terracotta_" .. clay[1], + recipe = "bakedclay:" .. clay[1] + }) + end +end + +-- special light blue glazed terracotta block +local texture = "baked_clay_terracotta_light_blue.png" + +minetest.register_node("bakedclay:terracotta_light_blue", { + description = "Light Blue Glazed Terracotta", + tiles = { + texture .. "", + texture .. "", + texture .. "^[transformR180", + texture .. "", + texture .. "^[transformR270", + texture .. "^[transformR90", + }, + paramtype2 = "facedir", + groups = {cracky = 3, terracotta = 1}, + sounds = default.node_sound_stone_defaults(), + on_place = minetest.rotate_node +}) + -- cook clay block into white baked clay minetest.register_craft({ @@ -108,34 +166,29 @@ minetest.register_craft( { recipe = {"dye:black", "dye:black", "dye:white"} }) --- only add light grey recipe if unifieddye mod isnt present (conflict) -if not minetest.get_modpath("unifieddyes") then -minetest.register_craft( { - type = "shapeless", - output = "dye:grey 3", - recipe = {"dye:black", "dye:white", "dye:white"} -}) -end - minetest.register_craft( { type = "shapeless", output = "dye:green 4", recipe = {"default:cactus"} }) -minetest.register_craft( { - type = "shapeless", - output = "dye:black 4", - recipe = {"default:coal_lump"} -}) - minetest.register_craft( { type = "shapeless", output = "dye:brown 4", recipe = {"default:dry_shrub"} }) --- 2x2 red bakedclay makes 16x clay brick +-- only add light grey recipe if unifieddye mod isnt present (conflict) +if not minetest.get_modpath("unifieddyes") then + + minetest.register_craft( { + type = "shapeless", + output = "dye:grey 3", + recipe = {"dye:black", "dye:white", "dye:white"} + }) +end + +-- 2x2 red baked clay makes 16x clay brick minetest.register_craft( { output = "default:clay_brick 16", recipe = { @@ -176,10 +229,17 @@ local function add_simple_flower(name, desc, box, f_groups) end local flowers = { - {"delphinium", "Blue Delphinium", {-0.15, -0.5, -0.15, 0.15, 0.3, 0.15}, {color_cyan = 1}}, - {"thistle", "Thistle", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_magenta = 1}}, - {"lazarus", "Lazarus Bell", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_pink = 1}}, - {"mannagrass", "Reed Mannagrass", {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_dark_green = 1}}, + {"delphinium", "Blue Delphinium", + {-0.15, -0.5, -0.15, 0.15, 0.3, 0.15}, {color_cyan = 1}}, + + {"thistle", "Thistle", + {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_magenta = 1}}, + + {"lazarus", "Lazarus Bell", + {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_pink = 1}}, + + {"mannagrass", "Reed Mannagrass", + {-0.15, -0.5, -0.15, 0.15, 0.2, 0.15}, {color_dark_green = 1}} } for _,item in pairs(flowers) do @@ -202,7 +262,7 @@ minetest.register_decoration({ }, y_min = 10, y_max = 90, - decoration = "bakedclay:delphinium", + decoration = "bakedclay:delphinium" }) minetest.register_decoration({ @@ -219,7 +279,7 @@ minetest.register_decoration({ }, y_min = 15, y_max = 90, - decoration = "bakedclay:thistle", + decoration = "bakedclay:thistle" }) minetest.register_decoration({ @@ -238,7 +298,7 @@ minetest.register_decoration({ y_max = 90, decoration = "bakedclay:lazarus", spawn_by = "default:jungletree", - num_spawn_by = 1, + num_spawn_by = 1 }) minetest.register_decoration({ @@ -257,13 +317,15 @@ minetest.register_decoration({ y_max = 15, decoration = "bakedclay:mannagrass", spawn_by = "group:water", - num_spawn_by = 1, + num_spawn_by = 1 }) --- add lucky blocks +-- lucky blocks if minetest.get_modpath("lucky_block") then + local p = "bakedclay:" + lucky_block:add_blocks({ {"dro", {"bakedclay:"}, 10, true}, {"fal", {p.."black", p.."blue", p.."brown", p.."cyan", p.."dark_green", @@ -295,13 +357,36 @@ lucky_block:add_blocks({ {name = p.."red", max = 30}, {name = p.."violet", max = 30}, {name = p.."white", max = 30}, - {name = p.."yellow", max = 30}, + {name = p.."yellow", max = 30} }}, }) + +p = "bakedclay:terracotta_" + +lucky_block:add_blocks({ + {"nod", "default:chest", 0, { + {name = p.."light_blue", max = 20}, + {name = p.."black", max = 20}, + {name = p.."blue", max = 20}, + {name = p.."brown", max = 20}, + {name = p.."cyan", max = 20}, + {name = p.."dark_green", max = 20}, + {name = p.."dark_grey", max = 20}, + {name = p.."green", max = 20}, + {name = p.."grey", max = 20}, + {name = p.."magenta", max = 20}, + {name = p.."orange", max = 20}, + {name = p.."pink", max = 20}, + {name = p.."red", max = 20}, + {name = p.."violet", max = 20}, + {name = p.."white", max = 20}, + {name = p.."yellow", max = 20} + }} +}) end - -- colored clay compatibility + if minetest.settings:get_bool("colored_clay_compatibility") == true then local cc = { diff --git a/mods/bakedclay/license.txt b/mods/bakedclay/license.txt index fec6f6aa..da710ed8 100644 --- a/mods/bakedclay/license.txt +++ b/mods/bakedclay/license.txt @@ -19,3 +19,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Textures by D3monPixel (https://mcpedl.com/better-glazed-terracotta-pack) + baked_clay_terracotta*.png diff --git a/mods/bakedclay/textures/baked_clay_terracotta_black.png b/mods/bakedclay/textures/baked_clay_terracotta_black.png new file mode 100644 index 00000000..1011a685 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_black.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_blue.png b/mods/bakedclay/textures/baked_clay_terracotta_blue.png new file mode 100644 index 00000000..8ced312b Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_blue.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_brown.png b/mods/bakedclay/textures/baked_clay_terracotta_brown.png new file mode 100644 index 00000000..6b1163b8 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_brown.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_cyan.png b/mods/bakedclay/textures/baked_clay_terracotta_cyan.png new file mode 100644 index 00000000..13ebba71 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_cyan.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_dark_green.png b/mods/bakedclay/textures/baked_clay_terracotta_dark_green.png new file mode 100644 index 00000000..43297d38 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_dark_green.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_dark_grey.png b/mods/bakedclay/textures/baked_clay_terracotta_dark_grey.png new file mode 100644 index 00000000..8eab4edc Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_dark_grey.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_green.png b/mods/bakedclay/textures/baked_clay_terracotta_green.png new file mode 100644 index 00000000..20a10e36 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_green.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_grey.png b/mods/bakedclay/textures/baked_clay_terracotta_grey.png new file mode 100644 index 00000000..a51e1daf Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_grey.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_light_blue.png b/mods/bakedclay/textures/baked_clay_terracotta_light_blue.png new file mode 100644 index 00000000..12bc97ec Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_light_blue.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_magenta.png b/mods/bakedclay/textures/baked_clay_terracotta_magenta.png new file mode 100644 index 00000000..5d6eb3a5 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_magenta.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_orange.png b/mods/bakedclay/textures/baked_clay_terracotta_orange.png new file mode 100644 index 00000000..df798b7d Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_orange.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_pink.png b/mods/bakedclay/textures/baked_clay_terracotta_pink.png new file mode 100644 index 00000000..8f010ac7 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_pink.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_red.png b/mods/bakedclay/textures/baked_clay_terracotta_red.png new file mode 100644 index 00000000..ee46623b Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_red.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_violet.png b/mods/bakedclay/textures/baked_clay_terracotta_violet.png new file mode 100644 index 00000000..f8376b93 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_violet.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_white.png b/mods/bakedclay/textures/baked_clay_terracotta_white.png new file mode 100644 index 00000000..8d753283 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_white.png differ diff --git a/mods/bakedclay/textures/baked_clay_terracotta_yellow.png b/mods/bakedclay/textures/baked_clay_terracotta_yellow.png new file mode 100644 index 00000000..726cd532 Binary files /dev/null and b/mods/bakedclay/textures/baked_clay_terracotta_yellow.png differ diff --git a/mods/basic_signs/init.lua b/mods/basic_signs/init.lua index da2a34bc..c657fa38 100644 --- a/mods/basic_signs/init.lua +++ b/mods/basic_signs/init.lua @@ -23,6 +23,7 @@ signs_lib.register_sign("basic_signs:sign_wall_locked", { allow_onpole = true, allow_onpole_horizontal = true, allow_yard = true, + use_texture_alpha = "clip", }) signs_lib.register_sign("basic_signs:sign_wall_glass", { @@ -45,7 +46,7 @@ signs_lib.register_sign("basic_signs:sign_wall_glass", { allow_onpole = true, allow_onpole_horizontal = true, allow_yard = true, - use_texture_alpha = true, + use_texture_alpha = "blend", }) signs_lib.register_sign("basic_signs:sign_wall_obsidian_glass", { @@ -68,7 +69,7 @@ signs_lib.register_sign("basic_signs:sign_wall_obsidian_glass", { allow_onpole = true, allow_onpole_horizontal = true, allow_yard = true, - use_texture_alpha = true, + use_texture_alpha = "blend", }) minetest.register_alias("locked_sign:sign_wall_locked", "basic_signs:sign_wall_locked") @@ -93,7 +94,7 @@ signs_lib.register_sign("basic_signs:sign_wall_plastic", { allow_onpole = true, allow_onpole_horizontal = true, allow_yard = true, - use_texture_alpha = true, + use_texture_alpha = "clip", }) -- array : color, translated color, default text color @@ -137,6 +138,7 @@ for i, color in ipairs(sign_colors) do allow_onpole = true, allow_onpole_horizontal = true, allow_yard = true, + use_texture_alpha = "clip", }) minetest.register_alias("basic_signs:sign_wall_steel_"..color[1].."_onpole", "basic_signs:sign_steel_"..color[1].."_onpole") diff --git a/mods/advtrains/advtrains_train_industrial/init.lua b/mods/basic_trains/advtrains_train_industrial/init.lua old mode 100644 new mode 100755 similarity index 99% rename from mods/advtrains/advtrains_train_industrial/init.lua rename to mods/basic_trains/advtrains_train_industrial/init.lua index dde7d83f..f22f8065 --- a/mods/advtrains/advtrains_train_industrial/init.lua +++ b/mods/basic_trains/advtrains_train_industrial/init.lua @@ -45,7 +45,7 @@ advtrains.register_wagon("engine_industrial_big", { seats = { { name=S("Driver Stand (right)"), - attach_offset={x=5, y=7, z=20}, + attach_offset={x=5, y=-3, z=20}, view_offset={x=5.2, y=-4, z=11}, driving_ctrl_access=true, group = "dstand", diff --git a/mods/basic_trains/advtrains_train_industrial/mod.conf b/mods/basic_trains/advtrains_train_industrial/mod.conf new file mode 100644 index 00000000..84418088 --- /dev/null +++ b/mods/basic_trains/advtrains_train_industrial/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_train_industrial +title=Advtrains Industrial Train (Basic Trains) +description=Industrial train set for Advanced Trains +author=orwell96 + +depends=advtrains,advtrains_train_track diff --git a/mods/advtrains/advtrains_train_industrial/models/advtrains_engine_industrial.b3d b/mods/basic_trains/advtrains_train_industrial/models/advtrains_engine_industrial.b3d similarity index 100% rename from mods/advtrains/advtrains_train_industrial/models/advtrains_engine_industrial.b3d rename to mods/basic_trains/advtrains_train_industrial/models/advtrains_engine_industrial.b3d diff --git a/mods/advtrains/advtrains_train_industrial/models/advtrains_engine_industrial_big.b3d b/mods/basic_trains/advtrains_train_industrial/models/advtrains_engine_industrial_big.b3d similarity index 100% rename from mods/advtrains/advtrains_train_industrial/models/advtrains_engine_industrial_big.b3d rename to mods/basic_trains/advtrains_train_industrial/models/advtrains_engine_industrial_big.b3d diff --git a/mods/advtrains/advtrains_train_industrial/models/advtrains_wagon_tank.b3d b/mods/basic_trains/advtrains_train_industrial/models/advtrains_wagon_tank.b3d similarity index 100% rename from mods/advtrains/advtrains_train_industrial/models/advtrains_wagon_tank.b3d rename to mods/basic_trains/advtrains_train_industrial/models/advtrains_wagon_tank.b3d diff --git a/mods/advtrains/advtrains_train_industrial/models/advtrains_wagon_wood.b3d b/mods/basic_trains/advtrains_train_industrial/models/advtrains_wagon_wood.b3d similarity index 100% rename from mods/advtrains/advtrains_train_industrial/models/advtrains_wagon_wood.b3d rename to mods/basic_trains/advtrains_train_industrial/models/advtrains_wagon_wood.b3d diff --git a/mods/advtrains/advtrains_train_industrial/sounds/advtrains_industrial_horn.ogg b/mods/basic_trains/advtrains_train_industrial/sounds/advtrains_industrial_horn.ogg similarity index 100% rename from mods/advtrains/advtrains_train_industrial/sounds/advtrains_industrial_horn.ogg rename to mods/basic_trains/advtrains_train_industrial/sounds/advtrains_industrial_horn.ogg diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_engine_industrial.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_engine_industrial.png diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial_big.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_engine_industrial_big.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial_big.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_engine_industrial_big.png diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial_inv.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_engine_industrial_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_engine_industrial_inv.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_engine_industrial_inv.png diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_tank.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_tank.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_tank.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_tank.png diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_tank_inv.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_tank_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_tank_inv.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_tank_inv.png diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_wood.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_wood.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_wood.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_wood.png diff --git a/mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_wood_inv.png b/mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_wood_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_industrial/textures/advtrains_wagon_wood_inv.png rename to mods/basic_trains/advtrains_train_industrial/textures/advtrains_wagon_wood_inv.png diff --git a/mods/advtrains/advtrains_train_japan/init.lua b/mods/basic_trains/advtrains_train_japan/init.lua similarity index 100% rename from mods/advtrains/advtrains_train_japan/init.lua rename to mods/basic_trains/advtrains_train_japan/init.lua diff --git a/mods/basic_trains/advtrains_train_japan/mod.conf b/mods/basic_trains/advtrains_train_japan/mod.conf new file mode 100644 index 00000000..2f6c2538 --- /dev/null +++ b/mods/basic_trains/advtrains_train_japan/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_train_japan +title=Advtrains Japanese Train (Basic Trains) +description=Japanese train set for Advanced Trains +author=orwell96 + +depends=advtrains,advtrains_train_track diff --git a/mods/advtrains/advtrains_train_japan/models/advtrains_engine_japan.b3d b/mods/basic_trains/advtrains_train_japan/models/advtrains_engine_japan.b3d similarity index 100% rename from mods/advtrains/advtrains_train_japan/models/advtrains_engine_japan.b3d rename to mods/basic_trains/advtrains_train_japan/models/advtrains_engine_japan.b3d diff --git a/mods/advtrains/advtrains_train_japan/models/advtrains_wagon_japan.b3d b/mods/basic_trains/advtrains_train_japan/models/advtrains_wagon_japan.b3d similarity index 100% rename from mods/advtrains/advtrains_train_japan/models/advtrains_wagon_japan.b3d rename to mods/basic_trains/advtrains_train_japan/models/advtrains_wagon_japan.b3d diff --git a/mods/advtrains/advtrains_train_japan/sounds/advtrains_japan_horn.ogg b/mods/basic_trains/advtrains_train_japan/sounds/advtrains_japan_horn.ogg similarity index 100% rename from mods/advtrains/advtrains_train_japan/sounds/advtrains_japan_horn.ogg rename to mods/basic_trains/advtrains_train_japan/sounds/advtrains_japan_horn.ogg diff --git a/mods/advtrains/advtrains_train_japan/textures/advtrains_engine_japan.png b/mods/basic_trains/advtrains_train_japan/textures/advtrains_engine_japan.png similarity index 100% rename from mods/advtrains/advtrains_train_japan/textures/advtrains_engine_japan.png rename to mods/basic_trains/advtrains_train_japan/textures/advtrains_engine_japan.png diff --git a/mods/advtrains/advtrains_train_japan/textures/advtrains_engine_japan_inv.png b/mods/basic_trains/advtrains_train_japan/textures/advtrains_engine_japan_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_japan/textures/advtrains_engine_japan_inv.png rename to mods/basic_trains/advtrains_train_japan/textures/advtrains_engine_japan_inv.png diff --git a/mods/advtrains/advtrains_train_japan/textures/advtrains_wagon_japan.png b/mods/basic_trains/advtrains_train_japan/textures/advtrains_wagon_japan.png similarity index 100% rename from mods/advtrains/advtrains_train_japan/textures/advtrains_wagon_japan.png rename to mods/basic_trains/advtrains_train_japan/textures/advtrains_wagon_japan.png diff --git a/mods/advtrains/advtrains_train_japan/textures/advtrains_wagon_japan_inv.png b/mods/basic_trains/advtrains_train_japan/textures/advtrains_wagon_japan_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_japan/textures/advtrains_wagon_japan_inv.png rename to mods/basic_trains/advtrains_train_japan/textures/advtrains_wagon_japan_inv.png diff --git a/mods/advtrains/advtrains_train_steam/init.lua b/mods/basic_trains/advtrains_train_steam/init.lua similarity index 98% rename from mods/advtrains/advtrains_train_steam/init.lua rename to mods/basic_trains/advtrains_train_steam/init.lua index 057ad8f5..2f46ac29 100755 --- a/mods/advtrains/advtrains_train_steam/init.lua +++ b/mods/basic_trains/advtrains_train_steam/init.lua @@ -81,13 +81,13 @@ advtrains.register_wagon("detailed_steam_engine", { seats = { { name=S("Driver Stand (left)"), - attach_offset={x=-5, y=10, z=-10}, + attach_offset={x=-8, y=0, z=-10}, view_offset={x=9, y=-2, z=-6}, group = "dstand", }, { name=S("Driver Stand (right)"), - attach_offset={x=5, y=10, z=-10}, + attach_offset={x=8, y=0, z=-10}, view_offset={x=0, y=6, z=0}, group = "dstand", }, diff --git a/mods/basic_trains/advtrains_train_steam/mod.conf b/mods/basic_trains/advtrains_train_steam/mod.conf new file mode 100644 index 00000000..02a036a3 --- /dev/null +++ b/mods/basic_trains/advtrains_train_steam/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_train_steam +title=Advtrains Steam Train (Basic Trains) +description=Steam train set for Advanced Trains +author=orwell96 + +depends=advtrains,advtrains_train_track diff --git a/mods/advtrains/advtrains_train_steam/models/advtrains_detailed_steam_engine.b3d b/mods/basic_trains/advtrains_train_steam/models/advtrains_detailed_steam_engine.b3d similarity index 100% rename from mods/advtrains/advtrains_train_steam/models/advtrains_detailed_steam_engine.b3d rename to mods/basic_trains/advtrains_train_steam/models/advtrains_detailed_steam_engine.b3d diff --git a/mods/advtrains/advtrains_train_steam/models/advtrains_engine_steam.b3d b/mods/basic_trains/advtrains_train_steam/models/advtrains_engine_steam.b3d similarity index 100% rename from mods/advtrains/advtrains_train_steam/models/advtrains_engine_steam.b3d rename to mods/basic_trains/advtrains_train_steam/models/advtrains_engine_steam.b3d diff --git a/mods/advtrains/advtrains_train_steam/models/advtrains_passenger_wagon.b3d b/mods/basic_trains/advtrains_train_steam/models/advtrains_passenger_wagon.b3d similarity index 100% rename from mods/advtrains/advtrains_train_steam/models/advtrains_passenger_wagon.b3d rename to mods/basic_trains/advtrains_train_steam/models/advtrains_passenger_wagon.b3d diff --git a/mods/advtrains/advtrains_train_steam/models/advtrains_wagon.b3d b/mods/basic_trains/advtrains_train_steam/models/advtrains_wagon.b3d similarity index 100% rename from mods/advtrains/advtrains_train_steam/models/advtrains_wagon.b3d rename to mods/basic_trains/advtrains_train_steam/models/advtrains_wagon.b3d diff --git a/mods/advtrains/advtrains_train_steam/models/advtrains_wagon_box.b3d b/mods/basic_trains/advtrains_train_steam/models/advtrains_wagon_box.b3d similarity index 100% rename from mods/advtrains/advtrains_train_steam/models/advtrains_wagon_box.b3d rename to mods/basic_trains/advtrains_train_steam/models/advtrains_wagon_box.b3d diff --git a/mods/advtrains/advtrains_train_steam/screenshot.png b/mods/basic_trains/advtrains_train_steam/screenshot.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/screenshot.png rename to mods/basic_trains/advtrains_train_steam/screenshot.png diff --git a/mods/advtrains/advtrains_train_steam/sounds/advtrains_steam_loop.ogg b/mods/basic_trains/advtrains_train_steam/sounds/advtrains_steam_loop.ogg similarity index 100% rename from mods/advtrains/advtrains_train_steam/sounds/advtrains_steam_loop.ogg rename to mods/basic_trains/advtrains_train_steam/sounds/advtrains_steam_loop.ogg diff --git a/mods/advtrains/advtrains_train_steam/sounds/advtrains_steam_whistle.ogg b/mods/basic_trains/advtrains_train_steam/sounds/advtrains_steam_whistle.ogg similarity index 100% rename from mods/advtrains/advtrains_train_steam/sounds/advtrains_steam_whistle.ogg rename to mods/basic_trains/advtrains_train_steam/sounds/advtrains_steam_whistle.ogg diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_detailed_engine_steam_inv.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_detailed_engine_steam_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_detailed_engine_steam_inv.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_detailed_engine_steam_inv.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_detailed_steam_engine.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_detailed_steam_engine.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_detailed_steam_engine.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_detailed_steam_engine.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_engine_steam.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_engine_steam.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_engine_steam.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_engine_steam.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_engine_steam_inv.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_engine_steam_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_engine_steam_inv.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_engine_steam_inv.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_wagon.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_wagon.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_wagon_box.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon_box.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_wagon_box.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon_box.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_wagon_box_inv.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon_box_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_wagon_box_inv.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon_box_inv.png diff --git a/mods/advtrains/advtrains_train_steam/textures/advtrains_wagon_inv.png b/mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_steam/textures/advtrains_wagon_inv.png rename to mods/basic_trains/advtrains_train_steam/textures/advtrains_wagon_inv.png diff --git a/mods/advtrains/advtrains_train_subway/init.lua b/mods/basic_trains/advtrains_train_subway/init.lua similarity index 100% rename from mods/advtrains/advtrains_train_subway/init.lua rename to mods/basic_trains/advtrains_train_subway/init.lua diff --git a/mods/basic_trains/advtrains_train_subway/mod.conf b/mods/basic_trains/advtrains_train_subway/mod.conf new file mode 100644 index 00000000..233a9b80 --- /dev/null +++ b/mods/basic_trains/advtrains_train_subway/mod.conf @@ -0,0 +1,6 @@ +name=advtrains_train_subway +title=Advtrains Subway Train (Basic Trains) +description=Subway train set for Advanced Trains +author=orwell96 + +depends=advtrains,advtrains_train_track diff --git a/mods/advtrains/advtrains_train_subway/models/advtrains_subway_wagon.b3d b/mods/basic_trains/advtrains_train_subway/models/advtrains_subway_wagon.b3d similarity index 100% rename from mods/advtrains/advtrains_train_subway/models/advtrains_subway_wagon.b3d rename to mods/basic_trains/advtrains_train_subway/models/advtrains_subway_wagon.b3d diff --git a/mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_arrive.ogg b/mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_arrive.ogg similarity index 100% rename from mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_arrive.ogg rename to mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_arrive.ogg diff --git a/mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_dclose.ogg b/mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_dclose.ogg similarity index 100% rename from mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_dclose.ogg rename to mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_dclose.ogg diff --git a/mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_depart.ogg b/mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_depart.ogg similarity index 100% rename from mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_depart.ogg rename to mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_depart.ogg diff --git a/mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_dopen.ogg b/mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_dopen.ogg similarity index 100% rename from mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_dopen.ogg rename to mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_dopen.ogg diff --git a/mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_horn.ogg b/mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_horn.ogg similarity index 100% rename from mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_horn.ogg rename to mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_horn.ogg diff --git a/mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_loop.ogg b/mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_loop.ogg similarity index 100% rename from mods/advtrains/advtrains_train_subway/sounds/advtrains_subway_loop.ogg rename to mods/basic_trains/advtrains_train_subway/sounds/advtrains_subway_loop.ogg diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_inv.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_inv.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_inv.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_inv.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line0.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line0.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line0.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line0.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line0_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line0_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line0_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line0_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line1.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line1.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line1.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line1.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line1_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line1_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line1_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line1_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line2.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line2.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line2.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line2.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line2_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line2_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line2_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line2_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line3.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line3.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line3.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line3.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line3_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line3_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line3_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line3_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line4.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line4.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line4.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line4.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line4_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line4_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line4_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line4_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line5.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line5.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line5.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line5.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line5_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line5_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line5_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line5_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line6.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line6.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line6.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line6.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line6_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line6_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line6_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line6_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line7.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line7.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line7.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line7.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line7_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line7_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line7_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line7_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line8.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line8.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line8.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line8.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line8_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line8_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line8_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line8_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line9.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line9.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line9.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line9.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line9_.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line9_.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line9_.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line9_.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_lineX.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_lineX.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_lineX.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_lineX.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_0.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_0.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_0.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_0.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_1.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_1.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_1.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_1.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_2.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_2.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_2.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_2.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_3.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_3.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_3.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_3.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_4.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_4.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_4.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_4.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_5.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_5.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_5.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_5.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_6.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_6.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_6.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_6.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_7.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_7.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_7.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_7.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_8.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_8.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_8.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_8.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_9.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_9.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_line_9.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_line_9.png diff --git a/mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_livery.png b/mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_livery.png similarity index 100% rename from mods/advtrains/advtrains_train_subway/textures/advtrains_subway_wagon_livery.png rename to mods/basic_trains/advtrains_train_subway/textures/advtrains_subway_wagon_livery.png diff --git a/mods/basic_trains/license.txt b/mods/basic_trains/license.txt new file mode 100644 index 00000000..83596b37 --- /dev/null +++ b/mods/basic_trains/license.txt @@ -0,0 +1,198 @@ +Copyright (C) 2016-2020 Moritz Blei (orwell96) and contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + +================================= + +GNU AFFERO GENERAL PUBLIC LICENSE + +Version 3, 19 November 2007 + +Copyright © 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +Preamble + +The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. + +A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. + +The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. + +An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. + +The precise terms and conditions for copying, distribution and modification follow. +TERMS AND CONDITIONS +0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based on the Program. + +To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. +1. Source Code. + +The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. + +A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. +2. Basic Permissions. + +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. +8. Termination. + +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. +13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. \ No newline at end of file diff --git a/mods/basic_trains/license_media.txt b/mods/basic_trains/license_media.txt new file mode 100755 index 00000000..888cf00e --- /dev/null +++ b/mods/basic_trains/license_media.txt @@ -0,0 +1,68 @@ +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. + "Creative Commons Compatible License" means a license that is listed at https://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. + "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + to Distribute and Publicly Perform Adaptations. + + For the avoidance of doubt: + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. + You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. + If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + + Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/mods/basic_trains/modpack.conf b/mods/basic_trains/modpack.conf new file mode 100644 index 00000000..4cf3dcbf --- /dev/null +++ b/mods/basic_trains/modpack.conf @@ -0,0 +1,4 @@ +name=basic_trains +title=Advtrains Basic Trains +description=Collection of basic trains for the Advanced Trains mod. Formerly included in Advtrains package. +author=orwell96 diff --git a/mods/bees/init.lua b/mods/bees/init.lua index 2928b44a..c2b93828 100644 --- a/mods/bees/init.lua +++ b/mods/bees/init.lua @@ -412,7 +412,10 @@ minetest.register_node("bees:hive_wild", { if meta:get_int("agressive") == 1 and inv:contains_item("queen", "bees:queen") then - clicker:set_hp(clicker:get_hp() - 4) + -- damage inside timer to stop death duplication glitch + minetest.after(0.1, function() + clicker:set_hp(clicker:get_hp() - 4) + end, clicker) else meta:set_int("agressive", 1) end @@ -509,7 +512,10 @@ minetest.register_node("bees:hive_artificial", { if meta:get_int("agressive") == 1 and inv:contains_item("queen", "bees:queen") then - clicker:set_hp(clicker:get_hp() - 4) + -- damage inside timer to stop death duplication glitch + minetest.after(0.1, function() + clicker:set_hp(clicker:get_hp() - 4) + end, clicker) else meta:set_int("agressive", 1) end @@ -691,16 +697,23 @@ minetest.register_abm({ minetest.register_abm({ nodenames = {"group:leaves"}, neighbors = {"air"}, - interval = 800, - chance = 10, + interval = 300, + chance = 4, action = function(pos) - if floor(pos.x / 40) ~= pos.x / 40 - or floor(pos.z / 40) ~= pos.z / 40 - or floor(pos.y / 5) ~= pos.y / 5 then return end + if floor(pos.x / 20) ~= pos.x / 20 + or floor(pos.z / 20) ~= pos.z / 20 + or floor(pos.y / 3) ~= pos.y / 3 then return end local p = {x = pos.x, y = pos.y - 1, z = pos.z} + + -- skip if nearby hive found + if minetest.find_node_near(p, 25, {"bees:hive_artificial", "bees:hive_wild", + "bees:hive_industrial"}) then + return + end + local nod = minetest.get_node_or_nil(p) local def = nod and minetest.registered_nodes[nod.name] diff --git a/mods/bees/readme.txt b/mods/bees/readme.txt index 5c2636f5..a0668c17 100644 --- a/mods/bees/readme.txt +++ b/mods/bees/readme.txt @@ -14,6 +14,7 @@ FEATURES - Make wild hive abm less intensive (thanks VanessaE) - Added 9x Lucky Blocks - Smokers have 200 uses before breaking +- Hives are spread out 20 blocks apart, 3 high and only spawn when no other hives around 2.2.2 - Pipeworks compatibility (Industrial beehive) diff --git a/mods/biome_lib/API.txt b/mods/biome_lib/API.txt index 0dd15c35..b2bd94d8 100644 --- a/mods/biome_lib/API.txt +++ b/mods/biome_lib/API.txt @@ -1,30 +1,28 @@ This document describes the Plantlife mod API. -Last revision: 2015-02-16 +Last revision: 2021-04-20 ========= Functions ========= -There are three main functions defined by the main "biome_lib" mod: +There are two main functions defined by this mod: -spawn_on_surfaces() -register_generate_plant() -grow_plants() +biome_lib.register_active_spawner() +biome_lib.register_on_generate() There are also several internal, helper functions that can be called if so desired, but they are not really intended for use by other mods and may change at any time. They are briefly described below these main functions, but see init.lua for details. -Most functions in plants lib are declared locally to avoid namespace -collisions with other mods. They are accessible via the "biome_lib" method, -e.g. biome_lib:spawn_on_surfaces() and so forth. +Most functions in biome_lib are either declared locally or kept within its +own namespace to avoid collisions/conflicts with other mods. ===== -spawn_on_surfaces(biome) -spawn_on_surfaces(sdelay, splant, sradius, schance, ssurface, savoid) +biome_lib.register_active_spawner(biome) +biome_lib.register_active_spawner(sdelay, splant, sradius, schance, ssurface, savoid) This first function is an ABM-based spawner function originally created as part of Ironzorg's flowers mod. It has since been largely extended and @@ -112,9 +110,9 @@ biome = { depth_max = num, -- If the object spawns on top of a water source, the -- water must be at most this deep. Defaults to 1. min_elevation = num, -- Surface must be at this altitude or higher to - -- spawn at all. Defaults to -31000... - max_elevation = num, -- ...but must be no higher than this altitude. - -- Defaults to +31000. + -- spawn at all. Defaults to -16 meters. + max_elevation = num, -- Surface must be no higher than this altitude. + -- Defaults to +48. near_nodes = {table}, -- List of nodes that must be somewhere in the -- vicinity in order for the plant to spawn. Can also -- be a string with a single node name. If not @@ -220,7 +218,7 @@ checking is disabled. Same holds true for the nneighbors bit above that. ===== -biome_lib:register_generate_plant(biome, nodes_or_function_or_treedef) +biome_lib.register_on_generate(biome, nodes_or_function_or_treedef) To register an object to be spawned at mapgen time rather than via an ABM, call this function with two parameters: a table with your object's biome @@ -270,8 +268,8 @@ biome = { depth = num, -- How deep/thick of a layer the spawned-on node must -- be. Typically used for water. min_elevation = num, -- Minimum elevation in meters/nodes. Defaults to - -- -31000 (unlimited). - max_elevation = num, -- Max elevation. Defaults to +31000 (unlimited). + -- -16 meters. + max_elevation = num, -- Max elevation. Defaults to +48m. near_nodes = {table}, -- what nodes must be in the general vicinity of the -- object being spawned. near_nodes_size = num, -- how wide of a search area to look for the nodes @@ -334,18 +332,17 @@ will be called in the form: somefunction(pos) - ===== -biome_lib:grow_plants(options) +biome_lib.update_plant(options) -The third function, grow_plants() is used to turn the spawned nodes above -into something else over time. This function has no return value, and accepts -a biome definition table as the only parameter. These are defined like so: +This third function is used to turn the spawned nodes above into something +else over time. This function has no return value, and accepts a biome +definition table as the only parameter. These are defined like so: options = { label = string, -- set this to identify the ABM for Minetest's -- profiler. If not set, biome_lib will set it to - -- "biome_lib grow_plants(): " appended with the node + -- "biome_lib.update_plant(): " appended with the node -- in grow_plant (or the first item if it's a table) grow_plant = "string" or {table}, -- Name(s) of the node(s) to be grown -- into something else. This value is passed to the @@ -426,7 +423,7 @@ and grow_result is ignored. ===== -find_adjacent_wall(pos, verticals, randomflag) +biome_lib.find_adjacent_wall(pos, verticals, randomflag) Of the few helper functions, this one expects a position parameter and a table with the list of nodes that should be considered as walls. The code will @@ -438,7 +435,7 @@ random wall it finds adjacent to the target position. Defaults to false if not specified. ===== -is_node_loaded(pos) +biome_lib.is_node_loaded(pos) This acts as a wrapper for the minetest.get_node_or_nil(node_pos) function and accepts a single position parameter. Returns true if the node in @@ -446,15 +443,25 @@ question is already loaded, or false if not. ===== -dbg(string) +biome_lib.dbg(string, level) This is a simple debug output function which takes one string parameter. It just checks if DEBUG is true and outputs the phrase "[Plantlife] " followed by the supplied string, via the print() function, if so. +'level' is a number that, if supplied, dictates the lowest 'biome_lib_debug' +can be set to in minetest.conf for this message to be displayed. Both the +default log level and the default message level are 0, thus always showing the +supplied message. + +Although it's not set in stone, a good practice is to use a level of 0 (or +just omit the value) for anything that generally important enough that it +ought always be shown, 1 for errors, 2 for warnings, 3 for info, 4 for verbose +spammy stuff. + ===== -biome_lib:generate_tree(pos, treemodel) -biome_lib:grow_tree(pos, treemodel) +biome_lib.generate_ltree(pos, treemodel) +biome_lib.grow_ltree(pos, treemodel) In the case of the growing code and the mapgen-based tree generator code, generating a tree is done via the above two calls, which in turn immediately @@ -462,13 +469,13 @@ call the usual spawn_tree() functions. This rerouting exists as a way for other mods to hook into biome_lib's tree-growing functions in general, perhaps to execute something extra whenever a tree is spawned. -biome_lib:generate_tree(pos, treemodel) is called any time a tree is spawned +biome_lib.generate_ltree(pos, treemodel) is called any time a tree is spawned at map generation time. 'pos' is the position of the block on which the tree is to be placed. 'treemodel' is the standard L-Systems tree definition table expected by the spawn_tree() function. Refer to the 'trunk' field in that table to derive the name of the tree being spawned. -biome_lib:grow_tree(pos, treemodel) does the same sort of thing whenever a +biome_lib.grow_ltree(pos, treemodel) does the same sort of thing whenever a tree is spawned within the abm-based growing code, for example when growing a sapling into a tree. @@ -477,22 +484,6 @@ sapling into a tree. There are other, internal helper functions that are not meant for use by other mods. Don't rely on them, as they are subject to change without notice. - -=============== -Global Settings -=============== - -Set this to true if you want the mod to spam your console with debug info :-) - - plantlife_debug = false - -To slow down the playback of the queue (e.g. for really slow machines where -the 0.2 second max limiter isn't enough), set: - - biome_lib_queue_run_ratio = - -Default is 100 (basically percent of maximum runtime) - ====================== Fertile Ground Mapping ====================== @@ -504,7 +495,6 @@ Perlin noise used. The first one is for a "fertile ground" layer, which I tend to refer to as the generic "stuff can potentially grow here" layer. Its values are hard-coded: - biome_lib.plantlife_seed_diff = 329 perlin_octaves = 3 perlin_persistence = 0.6 perlin_scale = 100 @@ -588,3 +578,79 @@ And this particular one is mapped slightly differently from the others: (Note the +150 and +50 offsets) + +================== +Default game nodes +================== + +Although this project was intended to be used with minetest_game, it can be +configured to work with something else instead. All you need to do is provide +the names of the nodes in your game you want biome_lib's internals to use. + +See settingtypes.txt for a list. Any item listed there can be changed either +by adding it to your minetest.conf, or by using the "all settings" menu in +Minetest, whatever's appropriate for your particular setup. + +================== +Engine Decorations +================== + +If a call to biome_lib.register_on_generate() contains items and biome +definition settings that are suitable, biome_lib will pass that call on to the +engine instead, to use its built-in decorations feature, since it'll be much +faster than Lua. + +For this to work, first the item to be added must either be a node, or a +table with a list of nodes that biome_lib would normally pick from randomly. +That is to say, you cannot specify an L-tree or a function here, as the engine +does not support that sort of thing (biome_lib will just switch to its normal +handling if you do). + +Second, these biome definition items must not be present: + +* below_nodes +* avoid_nodes +* avoid_radius +* neighbors +* ncount +* depth +* near_nodes_size +* near_nodes_vertical +* temp_min +* temp_max +* verticals_list +* delete_above +* delete_above_surround + +The plantlife_limit definition item is ignored when checking if a particular +call can be routed to the engine. + +The call given to the engine will use the remaining biome definition items in +the following manner: + +deco_type = "simple", +flags = "all_floors" +decoration = node or table with node list +place_on = surface +y_min = min_elevation +y_max = max_elevation +spawn_by = near_nodes +num_spawn_by = near_nodes_count +param2 = \_ set to the range specified by the biome definition's +param2_max = / random_facedir table, if present, otherwise omitted +noise_params = { + octaves = biome_lib.fertile_perlin_octaves, + persist = biome_lib.fertile_perlin_persistence * (250/biome_lib.fertile_perlin_scale), + scale = ((100-biome.rarity)/100) * (math.min(biome.max_count, 6400)/6400), + seed = biome.seed_diff, + offset = 0, + spread = {x = 100, y = 100, z = 100}, + lacunarity = 2, + flags = "absvalue" +} + +If the biome definition's check_air setting is false, "force_placement" is +added to the decoration's flags setting. + +If the biome def's spawn_replace_node is set to true, the decoration's +place_offset_y is set to -1 (otherwise it is omitted). diff --git a/mods/biome_lib/README.md b/mods/biome_lib/README.md index ac39750f..21779e01 100644 --- a/mods/biome_lib/README.md +++ b/mods/biome_lib/README.md @@ -12,7 +12,7 @@ Both mapgen-based spawning and ABM-based spawning is supported. Growing code is It is primarily intended for mapgen v6, but it should work fine when used with mapgen v7. -**Dependencies**: default from minetest_game +**Dependencies:** nothing, but if you don't use `minetest_game`, you'll need to supply some settings (see API.txt). **Recommends**: [Plantlife Modpack](https://github.com/minetest-mods/plantlife_modpack), [More Trees](https://github.com/minetest-mods/moretrees) @@ -25,4 +25,6 @@ It is primarily intended for mapgen v6, but it should work fine when used with m * biome_lib:find_valid_wall() * biome_lib:is_node_loaded() -For a complete description of these functions as well as several of the internal variables within the mod, [read the API.txt document](https://raw.githubusercontent.com/minetest-mods/biome_lib/master/API.txt) included in this package. +For a complete description of these functions as well as several of the internal variables within the mod, see `API.txt`. + +**Configuration:** This mod has several variables you can set in your `minetest.conf` to change things a bit, from the default nodes it uses, to the debug log level and the block queue behavior. For a list with complete descriptions, see `settingtypes.txt`. diff --git a/mods/biome_lib/api.lua b/mods/biome_lib/api.lua new file mode 100644 index 00000000..d4ec661f --- /dev/null +++ b/mods/biome_lib/api.lua @@ -0,0 +1,689 @@ +biome_lib.block_log = {} +biome_lib.block_recheck_list = {} +biome_lib.run_block_recheck_list = false + +biome_lib.actionslist_aircheck = {} +biome_lib.actionslist_no_aircheck = {} + +biome_lib.surfaceslist_aircheck = {} +biome_lib.surfaceslist_no_aircheck = {} + +biome_lib.registered_decorations = {} + +biome_lib.fertile_perlin_octaves = 3 +biome_lib.fertile_perlin_persistence = 0.6 +biome_lib.fertile_perlin_scale = 100 + +local temperature_seeddiff = 112 +local temperature_octaves = 3 +local temperature_persistence = 0.5 +local temperature_scale = 150 + +local humidity_seeddiff = 9130 +local humidity_octaves = 3 +local humidity_persistence = 0.5 +local humidity_scale = 250 + +local time_speed = tonumber(minetest.settings:get("time_speed")) +biome_lib.time_scale = 1 + +if time_speed and time_speed > 0 then + biome_lib.time_scale = 72 / time_speed +end + +biome_lib.air = {name = "air"} + +-- the mapgen rarely creates useful surfaces outside this range, but mods can +-- still specify a wider range if needed. +biome_lib.mapgen_elevation_limit = { ["min"] = -16, ["max"] = 48 } + +--PerlinNoise(seed, octaves, persistence, scale) + +biome_lib.perlin_temperature = PerlinNoise(temperature_seeddiff, temperature_octaves, temperature_persistence, temperature_scale) +biome_lib.perlin_humidity = PerlinNoise(humidity_seeddiff, humidity_octaves, humidity_persistence, humidity_scale) + +-- Local functions + +local function tableize(s) + return string.split(string.trim(string.gsub(s, " ", ""))) +end + +function biome_lib.dbg(msg, level) + local l = tonumber(level) or 0 + if biome_lib.debug_log_level >= l then + print(os.date("%Y-%m-%d %H:%M:%S").." [Biome Lib]: "..msg) + minetest.log("verbose", "[Biome Lib]: "..msg) + end +end + +local function get_biome_data(pos, perlin_fertile) + local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z}) + + if type(minetest.get_biome_data) == "function" then + local data = minetest.get_biome_data(pos) + if data then + return fertility, data.heat / 100, data.humidity / 100 + end + end + + local temperature = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) + local humidity = biome_lib.perlin_humidity:get2d({x=pos.x+150, y=pos.z+50}) + + return fertility, temperature, humidity +end + +function biome_lib.is_node_loaded(node_pos) + local n = minetest.get_node_or_nil(node_pos) + if (not n) or (n.name == "ignore") then + return false + end + return true +end + +function biome_lib.set_defaults(biome) + + biome.seed_diff = biome.seed_diff or 0 + biome.min_elevation = biome.min_elevation or biome_lib.mapgen_elevation_limit.min + biome.max_elevation = biome.max_elevation or biome_lib.mapgen_elevation_limit.max + biome.temp_min = biome.temp_min or 1 + biome.temp_max = biome.temp_max or -1 + biome.humidity_min = biome.humidity_min or 1 + biome.humidity_max = biome.humidity_max or -1 + biome.plantlife_limit = biome.plantlife_limit or 0.1 + biome.near_nodes_vertical = biome.near_nodes_vertical or 1 + +-- specific to on-generate + + biome.neighbors = biome.neighbors or biome.surface + biome.near_nodes_size = biome.near_nodes_size or 0 + biome.near_nodes_count = biome.near_nodes_count or 1 + biome.rarity = biome.rarity or 50 + biome.max_count = biome.max_count or 125 + if biome.check_air ~= false then biome.check_air = true end + +-- specific to abm spawner + biome.seed_diff = biome.seed_diff or 0 + biome.light_min = biome.light_min or 0 + biome.light_max = biome.light_max or 15 + biome.depth_max = biome.depth_max or 1 + biome.facedir = biome.facedir or 0 + return biome +end + +local function search_table(t, s) + for i = 1, #t do + if t[i] == s then return true end + end + return false +end + +-- register the list of surfaces to spawn stuff on, filtering out all duplicates. +-- separate the items by air-checking or non-air-checking map eval methods + +function biome_lib.register_on_generate(biomedef, nodes_or_function_or_model) + + -- if calling code passes an undefined node for a surface or + -- as a node to be spawned, don't register an action for it. + + if type(nodes_or_function_or_model) == "string" + and string.find(nodes_or_function_or_model, ":") + and not minetest.registered_nodes[nodes_or_function_or_model] then + biome_lib.dbg("Warning: Ignored registration for undefined spawn node: "..dump(nodes_or_function_or_model), 2) + return + end + + if type(nodes_or_function_or_model) == "string" + and not string.find(nodes_or_function_or_model, ":") then + biome_lib.dbg("Warning: Registered function call using deprecated string method: "..dump(nodes_or_function_or_model), 2) + end + + biome_lib.mapgen_elevation_limit.min = math.min(biomedef.min_elevation or 0, biome_lib.mapgen_elevation_limit.min) + biome_lib.mapgen_elevation_limit.max = math.max(biomedef.max_elevation or 0, biome_lib.mapgen_elevation_limit.max) + + local decor_def = biome_lib.can_use_decorations(biomedef, nodes_or_function_or_model) + + if decor_def then + biome_lib.dbg("Using engine decorations instead of biome_lib functions for node(s): "..dump(nodes_or_function_or_model), 3) + biome_lib.registered_decorations[#biome_lib.registered_decorations + 1] = nodes_or_function_or_model + minetest.register_decoration(decor_def) + return + elseif biomedef.check_air == false then + biome_lib.dbg("Register no-air-check mapgen hook: "..dump(nodes_or_function_or_model), 3) + biome_lib.actionslist_no_aircheck[#biome_lib.actionslist_no_aircheck + 1] = { biomedef, nodes_or_function_or_model } + local s = biomedef.surface + if type(s) == "string" then + if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then + if not search_table(biome_lib.surfaceslist_no_aircheck, s) then + biome_lib.surfaceslist_no_aircheck[#biome_lib.surfaceslist_no_aircheck + 1] = s + end + else + biome_lib.dbg("Warning: Ignored no-air-check registration for undefined surface node: "..dump(s), 2) + end + else + for i = 1, #biomedef.surface do + local s = biomedef.surface[i] + if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then + if not search_table(biome_lib.surfaceslist_no_aircheck, s) then + biome_lib.surfaceslist_no_aircheck[#biome_lib.surfaceslist_no_aircheck + 1] = s + end + else + biome_lib.dbg("Warning: Ignored no-air-check registration for undefined surface node: "..dump(s), 2) + end + end + end + else + biome_lib.dbg("Register with-air-checking mapgen hook: "..dump(nodes_or_function_or_model), 3) + biome_lib.actionslist_aircheck[#biome_lib.actionslist_aircheck + 1] = { biomedef, nodes_or_function_or_model } + local s = biomedef.surface + if type(s) == "string" then + if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then + if not search_table(biome_lib.surfaceslist_aircheck, s) then + biome_lib.surfaceslist_aircheck[#biome_lib.surfaceslist_aircheck + 1] = s + end + else + biome_lib.dbg("Warning: Ignored with-air-checking registration for undefined surface node: "..dump(s), 2) + end + else + for i = 1, #biomedef.surface do + local s = biomedef.surface[i] + if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then + if not search_table(biome_lib.surfaceslist_aircheck, s) then + biome_lib.surfaceslist_aircheck[#biome_lib.surfaceslist_aircheck + 1] = s + end + else + biome_lib.dbg("Warning: Ignored with-air-checking registration for undefined surface node: "..dump(s), 2) + end + end + end + end +end + +-- Function to check whether a position matches the given biome definition +-- Returns true when the surface can be populated + +local function populate_single_surface(biome, pos, perlin_fertile_area, checkair) + local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } + + if math.random(1, 100) <= biome.rarity then + return + end + + local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area) + + local pos_biome_ok = pos.y >= biome.min_elevation and pos.y <= biome.max_elevation + and fertility > biome.plantlife_limit + and temperature <= biome.temp_min and temperature >= biome.temp_max + and humidity <= biome.humidity_min and humidity >= biome.humidity_max + + if not pos_biome_ok then + return -- Y position mismatch, outside of biome + end + + local biome_surfaces_string = dump(biome.surface) + local surface_ok = false + + if not biome.depth then + local dest_node = minetest.get_node(pos) + if string.find(biome_surfaces_string, dest_node.name) then + surface_ok = true + else + if string.find(biome_surfaces_string, "group:") then + for j = 1, #biome.surface do + if string.find(biome.surface[j], "^group:") + and minetest.get_item_group(dest_node.name, biome.surface[j]) then + surface_ok = true + break + end + end + end + end + elseif not string.find(biome_surfaces_string, + minetest.get_node({ x = pos.x, y = pos.y-biome.depth-1, z = pos.z }).name) then + surface_ok = true + end + + if not surface_ok then + return -- Surface does not match the given node group/name + end + + if checkair and minetest.get_node(p_top).name ~= "air" then + return + end + + if biome.below_nodes and + not string.find(dump(biome.below_nodes), + minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name + ) then + return -- Node below does not match + end + + if biome.ncount and + #minetest.find_nodes_in_area( + {x=pos.x-1, y=pos.y, z=pos.z-1}, + {x=pos.x+1, y=pos.y, z=pos.z+1}, + biome.neighbors + ) <= biome.ncount then + return -- Not enough similar biome nodes around + end + + if biome.near_nodes and + #minetest.find_nodes_in_area( + {x=pos.x-biome.near_nodes_size, y=pos.y-biome.near_nodes_vertical, z=pos.z-biome.near_nodes_size}, + {x=pos.x+biome.near_nodes_size, y=pos.y+biome.near_nodes_vertical, z=pos.z+biome.near_nodes_size}, + biome.near_nodes + ) < biome.near_nodes_count then + return -- Long distance neighbours do not match + end + + -- Position fits into given biome + return true +end + +function biome_lib.populate_surfaces(b, nodes_or_function_or_model, snodes, checkair) + local items_added = 0 + + local biome = biome_lib.set_defaults(b) + + -- filter stage 1 - find nodes from the supplied surfaces that are within the current biome. + + local in_biome_nodes = {} + local perlin_fertile_area = minetest.get_perlin(biome.seed_diff, biome_lib.fertile_perlin_octaves, biome_lib.fertile_perlin_persistence, biome_lib.fertile_perlin_scale) + + for i = 1, #snodes do + local pos = vector.new(snodes[i]) + if populate_single_surface(biome, pos, perlin_fertile_area, checkair) then + in_biome_nodes[#in_biome_nodes + 1] = pos + end + end + + -- filter stage 2 - find places within that biome area to place the plants. + + local num_in_biome_nodes = #in_biome_nodes + + if num_in_biome_nodes == 0 then + return 0 + end + + for i = 1, math.min(math.ceil(biome.max_count/25), num_in_biome_nodes) do + local tries = 0 + local spawned = false + while tries < 2 and not spawned do + local pos = in_biome_nodes[math.random(1, num_in_biome_nodes)] + if biome.spawn_replace_node then + pos.y = pos.y-1 + end + local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } + + if not (biome.avoid_nodes and biome.avoid_radius + and minetest.find_node_near(p_top, biome.avoid_radius + + math.random(-1.5,2), biome.avoid_nodes)) then + if biome.delete_above then + minetest.swap_node(p_top, biome_lib.air) + minetest.swap_node({x=p_top.x, y=p_top.y+1, z=p_top.z}, biome_lib.air) + end + + if biome.delete_above_surround then + minetest.swap_node({x=p_top.x-1, y=p_top.y, z=p_top.z}, biome_lib.air) + minetest.swap_node({x=p_top.x+1, y=p_top.y, z=p_top.z}, biome_lib.air) + minetest.swap_node({x=p_top.x, y=p_top.y, z=p_top.z-1}, biome_lib.air) + minetest.swap_node({x=p_top.x, y=p_top.y, z=p_top.z+1}, biome_lib.air) + + minetest.swap_node({x=p_top.x-1, y=p_top.y+1, z=p_top.z}, biome_lib.air) + minetest.swap_node({x=p_top.x+1, y=p_top.y+1, z=p_top.z}, biome_lib.air) + minetest.swap_node({x=p_top.x, y=p_top.y+1, z=p_top.z-1}, biome_lib.air) + minetest.swap_node({x=p_top.x, y=p_top.y+1, z=p_top.z+1}, biome_lib.air) + end + + if biome.spawn_replace_node then + minetest.swap_node(pos, biome_lib.air) + end + + local objtype = type(nodes_or_function_or_model) + + if objtype == "table" then + if nodes_or_function_or_model.axiom then + biome_lib.generate_ltree(p_top, nodes_or_function_or_model) + biome_lib.dbg("An L-tree was spawned at "..minetest.pos_to_string(p_top), 4) + spawned = true + else + local fdir = nil + if biome.random_facedir then + fdir = math.random(biome.random_facedir[1], biome.random_facedir[2]) + end + local n=nodes_or_function_or_model[math.random(#nodes_or_function_or_model)] + minetest.swap_node(p_top, { name = n, param2 = fdir }) + biome_lib.dbg("Node \""..n.."\" was randomly picked from a list and placed at "..minetest.pos_to_string(p_top), 4) + spawned = true + end + elseif objtype == "string" and + minetest.registered_nodes[nodes_or_function_or_model] then + local fdir = nil + if biome.random_facedir then + fdir = math.random(biome.random_facedir[1], biome.random_facedir[2]) + end + minetest.swap_node(p_top, { name = nodes_or_function_or_model, param2 = fdir }) + biome_lib.dbg("Node \""..nodes_or_function_or_model.."\" was placed at "..minetest.pos_to_string(p_top), 4) + spawned = true + elseif objtype == "function" then + nodes_or_function_or_model(pos) + biome_lib.dbg("A function was run on surface node at "..minetest.pos_to_string(pos), 4) + spawned = true + elseif objtype == "string" and pcall(loadstring(("return %s(...)"): + format(nodes_or_function_or_model)),pos) then + spawned = true + biome_lib.dbg("An obsolete string-specified function was run on surface node at "..minetest.pos_to_string(p_top), 4) + else + biome_lib.dbg("Warning: Ignored invalid definition for object "..dump(nodes_or_function_or_model).." that was pointed at {"..dump(pos).."}", 2) + end + else + tries = tries + 1 + end + end + if spawned then items_added = items_added + 1 end + end + return items_added +end + +-- Primary log read-out/mapgen spawner + +local function confirm_block_surroundings(p) + local n=minetest.get_node_or_nil(p) + if not n or n.name == "ignore" then return false end + + for x = -32,32,64 do -- step of 64 causes it to only check the 8 corner blocks + for y = -32,32,64 do + for z = -32,32,64 do + local n=minetest.get_node_or_nil({x=p.x + x, y=p.y + y, z=p.z + z}) + if not n or n.name == "ignore" then return false end + end + end + end + return true +end + +function biome_lib.generate_block(shutting_down) + + if shutting_down then + if #biome_lib.block_recheck_list > 0 then + for i = 1, #biome_lib.block_recheck_list do + biome_lib.block_log[#biome_lib.block_log + 1] = biome_lib.block_recheck_list[i] + end + biome_lib.block_recheck_list = {} + end + biome_lib.run_block_recheck_list = false + else + if biome_lib.run_block_recheck_list + and not biome_lib.block_recheck_list[1] then + biome_lib.run_block_recheck_list = false + end + end + + local blocklog = biome_lib.run_block_recheck_list + and biome_lib.block_recheck_list + or biome_lib.block_log + + if not blocklog[1] then return end + + local minp = blocklog[1][1] + local maxp = blocklog[1][2] + local airflag = blocklog[1][3] + local pos_hash = minetest.hash_node_position(minp) + + if not biome_lib.pos_hash then -- we need to read the maplock and get the surfaces list + local now = minetest.get_us_time() + biome_lib.pos_hash = {} + minetest.load_area(minp) + if not confirm_block_surroundings(minp) + and not shutting_down + and (blocklog[1][4] + biome_lib.block_timeout) > now then -- if any neighbors appear not to be loaded and the block hasn't expired yet, defer it + + if biome_lib.run_block_recheck_list then + biome_lib.block_log[#biome_lib.block_log + 1] = table.copy(biome_lib.block_recheck_list[1]) + table.remove(biome_lib.block_recheck_list, 1) + else + biome_lib.block_recheck_list[#biome_lib.block_recheck_list + 1] = table.copy(biome_lib.block_log[1]) + table.remove(biome_lib.block_log, 1) + end + biome_lib.pos_hash = nil + biome_lib.dbg("Mapblock at "..minetest.pos_to_string(minp).. + " had a neighbor not fully emerged, skipped it for now.", 4) + return + else + biome_lib.pos_hash.surface_node_list = airflag + and minetest.find_nodes_in_area_under_air(minp, maxp, biome_lib.surfaceslist_aircheck) + or minetest.find_nodes_in_area(minp, maxp, biome_lib.surfaceslist_no_aircheck) + if #biome_lib.pos_hash.surface_node_list == 0 then + biome_lib.dbg("Mapblock at "..minetest.pos_to_string(minp).." dequeued: no detected surfaces.", 4) + table.remove(blocklog, 1) + biome_lib.pos_hash = nil + return + else + biome_lib.pos_hash.action_index = 1 + biome_lib.dbg("Mapblock at "..minetest.pos_to_string(minp).. + " has "..#biome_lib.pos_hash.surface_node_list.. + " surface nodes to work on (airflag="..dump(airflag)..")", 4) + end + end + elseif not (airflag and biome_lib.actionslist_aircheck[biome_lib.pos_hash.action_index]) + and not (not airflag and biome_lib.actionslist_no_aircheck[biome_lib.pos_hash.action_index]) then + -- the block is finished, remove it + if #biome_lib.pos_hash.surface_node_list > 0 then + biome_lib.dbg("Deleted mapblock "..minetest.pos_to_string(minp).." from the block log", 4) + end + table.remove(blocklog, 1) + biome_lib.pos_hash = nil + else + -- below, [1] is biome, [2] is the thing to be added + local added = 0 + if airflag then + if biome_lib.actionslist_aircheck[biome_lib.pos_hash.action_index] then + added = biome_lib.populate_surfaces( + biome_lib.actionslist_aircheck[biome_lib.pos_hash.action_index][1], + biome_lib.actionslist_aircheck[biome_lib.pos_hash.action_index][2], + biome_lib.pos_hash.surface_node_list, true) + biome_lib.pos_hash.action_index = biome_lib.pos_hash.action_index + 1 + end + else + if biome_lib.actionslist_no_aircheck[biome_lib.pos_hash.action_index] then + added = biome_lib.populate_surfaces( + biome_lib.actionslist_no_aircheck[biome_lib.pos_hash.action_index][1], + biome_lib.actionslist_no_aircheck[biome_lib.pos_hash.action_index][2], + biome_lib.pos_hash.surface_node_list, false) + biome_lib.pos_hash.action_index = biome_lib.pos_hash.action_index + 1 + end + end + if added > 0 then + biome_lib.dbg("biome_lib.populate_surfaces ran on mapblock at ".. + minetest.pos_to_string(minp)..". Entry #".. + (biome_lib.pos_hash.action_index-1).." added "..added.." items.", 4) + end + end +end + +-- The spawning ABM + +function biome_lib.register_active_spawner(sd,sp,sr,sc,ss,sa) + + local b = {} + + if type(sd) ~= "table" then + b.spawn_delay = sd -- old api expects ABM interval param here. + b.spawn_plants = {sp} + b.avoid_radius = sr + b.spawn_chance = sc + b.spawn_surfaces = {ss} + b.avoid_nodes = sa + else + b = sd + end + + if b.spawn_delay*biome_lib.time_scale >= 1 then + b.interval = b.spawn_delay*biome_lib.time_scale + else + b.interval = 1 + end + + local biome = biome_lib.set_defaults(b) + + biome.spawn_plants_count = #(biome.spawn_plants) + + local n + if type(biome.spawn_plants) == "table" then + n = "random: "..biome.spawn_plants[1]..", ..." + else + n = biome.spawn_plants + end + biome.label = biome.label or "biome_lib spawn_on_surfaces(): "..n + + minetest.register_abm({ + nodenames = biome.spawn_surfaces, + interval = biome.interval, + chance = biome.spawn_chance, + neighbors = biome.neighbors, + label = biome.label, + action = function(pos, node, active_object_count, active_object_count_wider) + local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } + local n_top = minetest.get_node(p_top) + local perlin_fertile_area = minetest.get_perlin(biome.seed_diff, biome_lib.fertile_perlin_octaves, biome_lib.fertile_perlin_persistence, biome_lib.fertile_perlin_scale) + + local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area) + + local pos_biome_ok = pos.y >= biome.min_elevation and pos.y <= biome.max_elevation + and fertility > biome.plantlife_limit + and temperature <= biome.temp_min and temperature >= biome.temp_max + and humidity <= biome.humidity_min and humidity >= biome.humidity_max + and biome_lib.is_node_loaded(p_top) + + if not pos_biome_ok then + return -- Outside of biome + end + + local n_light = minetest.get_node_light(p_top, nil) + if n_light < biome.light_min or n_light > biome.light_max then + return -- Too dark or too bright + end + + if biome.avoid_nodes and biome.avoid_radius and minetest.find_node_near( + p_top, biome.avoid_radius + math.random(-1.5,2), biome.avoid_nodes) then + return -- Nodes to avoid are nearby + end + + if biome.neighbors and biome.ncount and + #minetest.find_nodes_in_area( + {x=pos.x-1, y=pos.y, z=pos.z-1}, + {x=pos.x+1, y=pos.y, z=pos.z+1}, + biome.neighbors + ) <= biome.ncount then + return -- Near neighbour nodes are not present + end + + local NEAR_DST = biome.near_nodes_size + if biome.near_nodes and biome.near_nodes_count and biome.near_nodes_size and + #minetest.find_nodes_in_area( + {x=pos.x-NEAR_DST, y=pos.y-biome.near_nodes_vertical, z=pos.z-NEAR_DST}, + {x=pos.x+NEAR_DST, y=pos.y+biome.near_nodes_vertical, z=pos.z+NEAR_DST}, + biome.near_nodes + ) < biome.near_nodes_count then + return -- Far neighbour nodes are not present + end + + if (biome.air_count and biome.air_size) and + #minetest.find_nodes_in_area( + {x=p_top.x-biome.air_size, y=p_top.y, z=p_top.z-biome.air_size}, + {x=p_top.x+biome.air_size, y=p_top.y, z=p_top.z+biome.air_size}, + "air" + ) < biome.air_count then + return -- Not enough air + end + + local walldir = biome_lib.find_adjacent_wall(p_top, biome.verticals_list, biome.choose_random_wall) + if biome.alt_wallnode and walldir then + if n_top.name == "air" then + minetest.swap_node(p_top, { name = biome.alt_wallnode, param2 = walldir }) + end + return + end + + local currentsurface = minetest.get_node(pos).name + + if biome_lib.default_water_nodes[currentsurface] and + #minetest.find_nodes_in_area( + {x=pos.x, y=pos.y-biome.depth_max-1, z=pos.z}, + vector.new(pos), + biome_lib.default_wet_surfaces + ) == 0 then + return -- On water but no ground nearby + end + + local rnd = math.random(1, biome.spawn_plants_count) + local plant_to_spawn = biome.spawn_plants[rnd] + local fdir = biome.facedir + if biome.random_facedir then + fdir = math.random(biome.random_facedir[1],biome.random_facedir[2]) + end + if type(biome.spawn_plants) == "string" then + assert(loadstring(biome.spawn_plants.."(...)"))(pos) + elseif not biome.spawn_on_side and not biome.spawn_on_bottom and not biome.spawn_replace_node then + if n_top.name == "air" then + minetest.swap_node(p_top, { name = plant_to_spawn, param2 = fdir }) + end + elseif biome.spawn_replace_node then + minetest.swap_node(pos, { name = plant_to_spawn, param2 = fdir }) + + elseif biome.spawn_on_side then + local onside = biome_lib.find_open_side(pos) + if onside then + minetest.swap_node(onside.newpos, { name = plant_to_spawn, param2 = onside.facedir }) + end + elseif biome.spawn_on_bottom then + if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then + minetest.swap_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = plant_to_spawn, param2 = fdir} ) + end + end + end + }) +end + +-- Function to decide how to replace a plant - either grow it, replace it with +-- a tree, run a function, or die with an error. + +function biome_lib.replace_plant(pos, replacement, grow_function, walldir, seeddiff) + local growtype = type(grow_function) + if growtype == "table" then + minetest.swap_node(pos, biome_lib.air) + biome_lib.grow_ltree(pos, grow_function) + return + elseif growtype == "function" then + local perlin_fertile_area = minetest.get_perlin(seeddiff, biome_lib.fertile_perlin_octaves, biome_lib.fertile_perlin_persistence, biome_lib.fertile_perlin_scale) + local fertility, temperature, _ = get_biome_data(pos, perlin_fertile_area) + grow_function(pos, fertility, temperature, walldir) + return + elseif growtype == "string" then + local perlin_fertile_area = minetest.get_perlin(seeddiff, biome_lib.fertile_perlin_octaves, biome_lib.fertile_perlin_persistence, biome_lib.fertile_perlin_scale) + local fertility, temperature, _ = get_biome_data(pos, perlin_fertile_area) + assert(loadstring(grow_function.."(...)"))(pos, fertility, temperature, walldir) + return + elseif growtype == "nil" then + minetest.swap_node(pos, { name = replacement, param2 = walldir}) + return + elseif growtype ~= "nil" and growtype ~= "string" and growtype ~= "table" then + error("Invalid grow function "..dump(grow_function).." used on object at ("..dump(pos)..")") + end +end + +-- Check for infinite stacks + +if minetest.get_modpath("unified_inventory") or not minetest.settings:get_bool("creative_mode") then + biome_lib.expect_infinite_stacks = false +else + biome_lib.expect_infinite_stacks = true +end + +-- read a field from a node's definition + +function biome_lib.get_nodedef_field(nodename, fieldname) + if not minetest.registered_nodes[nodename] then + return nil + end + return minetest.registered_nodes[nodename][fieldname] +end diff --git a/mods/biome_lib/block_queue_checks.lua b/mods/biome_lib/block_queue_checks.lua new file mode 100644 index 00000000..ffa6825c --- /dev/null +++ b/mods/biome_lib/block_queue_checks.lua @@ -0,0 +1,140 @@ +-- Iterate through the mapblock log, +-- populating blocks with new stuff in the process. + +minetest.register_globalstep(function(dtime) + if not biome_lib.block_log[1] then return end -- the block log is empty + + if math.random(100) > biome_lib.queue_ratio then return end + for s = 1, biome_lib.entries_per_step do + biome_lib.generate_block() + end +end) + +-- Periodically wake-up the queue to give old blocks a chance to time-out +-- if the player isn't currently exploring (i.e. they're just playing in one area) + +function biome_lib.wake_up_queue() + if #biome_lib.block_recheck_list > 1 + and #biome_lib.block_log == 0 then + biome_lib.block_log[#biome_lib.block_log + 1] = + table.copy(biome_lib.block_recheck_list[#biome_lib.block_recheck_list]) + biome_lib.block_recheck_list[#biome_lib.block_recheck_list] = nil + biome_lib.run_block_recheck_list = true + biome_lib.dbg("Woke-up the map queue to give old blocks a chance to time-out.", 3) + end + minetest.after(biome_lib.block_queue_wakeup_time, biome_lib.wake_up_queue) +end + +biome_lib.wake_up_queue() + +-- Play out the entire log all at once on shutdown +-- to prevent unpopulated map areas + +local function format_time(t) + if t > 59999999 then + return os.date("!%M minutes and %S seconds", math.ceil(t/1000000)) + else + return os.date("!%S seconds", math.ceil(t/1000000)) + end +end + +function biome_lib.check_remaining_time() + if minetest.get_us_time() > (biome_lib.shutdown_last_timestamp + 10000000) then -- report progress every 10s + biome_lib.shutdown_last_timestamp = minetest.get_us_time() + + local entries_remaining = #biome_lib.block_log + #biome_lib.block_recheck_list + + local total_purged = biome_lib.starting_count - entries_remaining + local elapsed_time = biome_lib.shutdown_last_timestamp - biome_lib.shutdown_start_time + biome_lib.dbg(string.format("%i entries, approximately %s remaining.", + entries_remaining, format_time(elapsed_time/total_purged * entries_remaining))) + end +end + +--Purge the block log at shutdown + +minetest.register_on_shutdown(function() + + biome_lib.shutdown_start_time = minetest.get_us_time() + biome_lib.shutdown_last_timestamp = minetest.get_us_time()+1 + + biome_lib.starting_count = #biome_lib.block_log + #biome_lib.block_recheck_list + + if biome_lib.starting_count == 0 then + return + end + + biome_lib.dbg("Stand by, purging the mapblock log ".. + "(there are "..biome_lib.starting_count.." entries) ...", 0) + + while #biome_lib.block_log > 0 do + biome_lib.generate_block(true) + biome_lib.check_remaining_time() + end + + if #biome_lib.block_recheck_list > 0 then + biome_lib.block_log = table.copy(biome_lib.block_recheck_list) + biome_lib.block_recheck_list = {} + while #biome_lib.block_log > 0 do + biome_lib.generate_block(true) + biome_lib.check_remaining_time() + end + end + biome_lib.dbg("Log purge completed after ".. + format_time(minetest.get_us_time() - biome_lib.shutdown_start_time)..".", 0) +end) + +-- "Record" the map chunks being generated by the core mapgen, +-- split into individual mapblocks to reduce lag + +minetest.register_on_generated(function(minp, maxp, blockseed) + local timestamp = minetest.get_us_time() + for y = 0, 4 do + local miny = minp.y + y*16 + + if miny >= biome_lib.mapgen_elevation_limit.min + and (miny + 15) <= biome_lib.mapgen_elevation_limit.max then + + for x = 0, 4 do + local minx = minp.x + x*16 + + for z = 0, 4 do + local minz = minp.z + z*16 + + local bmin = {x=minx, y=miny, z=minz} + local bmax = {x=minx + 15, y=miny + 15, z=minz + 15} + biome_lib.block_log[#biome_lib.block_log + 1] = { bmin, bmax, true, timestamp } + biome_lib.block_log[#biome_lib.block_log + 1] = { bmin, bmax, false, timestamp } + end + end + else + biome_lib.dbg("Did not enqueue mapblocks at elevation "..miny.."m, they're out of range of any generate_plant() calls.", 4) + end + end + biome_lib.run_block_recheck_list = true +end) + +if biome_lib.debug_log_level >= 3 then + biome_lib.last_count = 0 + + function biome_lib.show_pending_block_count() + if biome_lib.last_count ~= #biome_lib.block_log then + biome_lib.dbg(string.format("Pending block counts - ready to process: %-8icurrently deferred: %i", + #biome_lib.block_log, #biome_lib.block_recheck_list), 3) + biome_lib.last_count = #biome_lib.block_log + biome_lib.queue_idle_flag = false + elseif not biome_lib.queue_idle_flag then + if #biome_lib.block_recheck_list > 0 then + biome_lib.dbg("Mapblock queue only contains blocks that can't yet be processed.", 3) + biome_lib.dbg("Idling the queue until new blocks arrive or the next wake-up call occurs.", 3) + else + biome_lib.dbg("Mapblock queue has run dry.", 3) + biome_lib.dbg("Idling the queue until new blocks arrive.", 3) + end + biome_lib.queue_idle_flag = true + end + minetest.after(1, biome_lib.show_pending_block_count) + end + + biome_lib.show_pending_block_count() +end diff --git a/mods/biome_lib/compat.lua b/mods/biome_lib/compat.lua new file mode 100644 index 00000000..5180e973 --- /dev/null +++ b/mods/biome_lib/compat.lua @@ -0,0 +1,115 @@ +-- compatibility shims for old mods + +function biome_lib:register_generate_plant(b, n) + biome_lib.dbg("Warning: biome_lib:register_generate_plant() is deprecated!", 2) + biome_lib.dbg("Use biome_lib.register_on_generate() instead", 2) + biome_lib.dbg("Item: "..dump(n), 2) + biome_lib.register_on_generate(b, n) +end + +function biome_lib:spawn_on_surfaces(sd, sp, sr, sc, ss, sa) + biome_lib.dbg("Warning: biome_lib:spawn_on_surfaces() is deprecated!", 2) + biome_lib.dbg("Use biome_lib.register_active_spawner() instead.", 2) + biome_lib.dbg("Item: "..dump(sd.spawn_plants or sp[1] or sp), 2) + biome_lib.register_active_spawner(sd, sp, sr, sc, ss, sa) +end + +function biome_lib:replace_object(p, r, f, w, d) + biome_lib.dbg("Warning: biome_lib:replace_object() is deprecated!", 2) + biome_lib.dbg("Use biome_lib.replace_plant() instead.", 2) + biome_lib.dbg("Item: "..dump(r), 2) + biome_lib.replace_plant(p, r, f, w, d) +end + +function biome_lib:grow_plants(o) + biome_lib.dbg("Warning: biome_lib:grow_plants() is deprecated!", 2) + biome_lib.dbg("Use biome_lib.update_plant() instead.", 2) + biome_lib.dbg("Item: "..dump(o.grow_nodes), 2) + biome_lib.update_plant(o) +end + +function biome_lib.generate_ltree(p, n) + minetest.spawn_tree(p, n) +end + +function biome_lib.grow_ltree(p, n) + minetest.spawn_tree(p, n) +end + +function biome_lib:generate_tree(p, n) + biome_lib.dbg("Warning: biome_lib:generate_tree() is deprecated!", 2) + biome_lib.dbg("Use biome_lib.generate_ltree() instead.", 2) + biome_lib.dbg("Item: "..dump(n), 2) + biome_lib.generate_ltree(p, n) +end + +function biome_lib:grow_tree(p, n) + biome_lib.dbg("Warning: biome_lib:grow_tree() is deprecated!", 2) + biome_lib.dbg("Use biome_lib.grow_ltree() instead.", 2) + biome_lib.dbg("Item: "..dump(n), 2) + biome_lib.grow_ltree(p, n) +end + +function biome_lib.can_use_decorations(b, nodes_or_function_or_treedef) + if not b or not nodes_or_function_or_treedef + or b.below_nodes + or b.avoid_nodes + or b.avoid_radius + or b.neighbors + or b.ncount + or b.depth + or b.near_nodes_size + or b.near_nodes_vertical + or b.temp_min + or b.temp_max + or b.verticals_list + or b.delete_above + or b.delete_above_surround + or ( type(nodes_or_function_or_treedef) == "string" and not minetest.registered_nodes[nodes_or_function_or_treedef] ) + or ( type(nodes_or_function_or_treedef) == "table" and nodes_or_function_or_treedef.axiom ) + or type(nodes_or_function_or_treedef) == "function" + then return false + end + + local biome = biome_lib.set_defaults(b) + + local decor_def = { + ["deco_type"] = "simple", + ["flags"] = "all_floors", + ["decoration"] = nodes_or_function_or_treedef, + ["place_on"] = biome.surface, + ["y_min"] = biome.min_elevation, + ["y_max"] = biome.max_elevation, + ["spawn_by"] = biome.near_nodes, + ["num_spawn_by"] = biome.near_nodes and biome.near_nodes_count, + } + + local r = (100-biome.rarity)/100 + local mc = math.min(biome.max_count, 6400)/6400 + + decor_def.noise_params = { + octaves = biome_lib.fertile_perlin_octaves, + persist = biome_lib.fertile_perlin_persistence * (100/biome_lib.fertile_perlin_scale), + scale = math.min(r, mc), + seed = biome.seed_diff, + offset = 0, + spread = {x = 100, y = 100, z = 100}, + lacunarity = 2, + flags = "absvalue" + } + + if not b.check_air then + decor_def.flags = decor_def.flags..",force_placement" + end + + if b.spawn_replace_node then + decor_def.place_offset_y = -1 + end + + if b.random_facedir then + decor_def.param2 = math.min(b.random_facedir[1], b.random_facedir[2]) + decor_def.param2_max = math.max(b.random_facedir[1], b.random_facedir[2]) + end + + return decor_def +end diff --git a/mods/biome_lib/depends.txt b/mods/biome_lib/depends.txt deleted file mode 100644 index c48fe0d0..00000000 --- a/mods/biome_lib/depends.txt +++ /dev/null @@ -1,3 +0,0 @@ -default -intllib? - diff --git a/mods/biome_lib/growth.lua b/mods/biome_lib/growth.lua index 807b69c5..e03417db 100644 --- a/mods/biome_lib/growth.lua +++ b/mods/biome_lib/growth.lua @@ -1,5 +1,3 @@ -local time_scale = ... - -- The growing ABM function biome_lib.check_surface(name, nodes) @@ -15,13 +13,13 @@ function biome_lib.check_surface(name, nodes) return false end -function biome_lib:grow_plants(opts) +function biome_lib.update_plant(opts) local options = opts options.height_limit = options.height_limit or 5 - options.ground_nodes = options.ground_nodes or { "default:dirt_with_grass" } - options.grow_nodes = options.grow_nodes or { "default:dirt_with_grass" } + options.ground_nodes = options.ground_nodes or biome_lib.default_ground_nodes + options.grow_nodes = options.grow_nodes or biome_lib.default_grow_nodes options.seed_diff = options.seed_diff or 0 local n @@ -32,10 +30,10 @@ function biome_lib:grow_plants(opts) n = options.grow_plant end - options.label = options.label or "biome_lib grow_plants(): "..n + options.label = options.label or "biome_lib.update_plant(): "..n - if options.grow_delay*time_scale >= 1 then - options.interval = options.grow_delay*time_scale + if options.grow_delay*biome_lib.time_scale >= 1 then + options.interval = options.grow_delay*biome_lib.time_scale else options.interval = 1 end @@ -53,12 +51,12 @@ function biome_lib:grow_plants(opts) local root_node = minetest.get_node({x=pos.x, y=pos.y-options.height_limit, z=pos.z}) local walldir = nil if options.need_wall and options.verticals_list then - walldir = biome_lib:find_adjacent_wall(p_top, options.verticals_list, options.choose_random_wall) + walldir = biome_lib.find_adjacent_wall(p_top, options.verticals_list, options.choose_random_wall) end - if (n_top.name == "air" or n_top.name == "default:snow") + if biome_lib.default_grow_through_nodes[n_top.name] and (not options.need_wall or (options.need_wall and walldir)) then if options.grow_vertically and walldir then - if biome_lib:search_downward(pos, options.height_limit, options.ground_nodes) then + if biome_lib.search_downward(pos, options.height_limit, options.ground_nodes) then minetest.swap_node(p_top, { name = options.grow_plant, param2 = walldir}) end @@ -67,24 +65,10 @@ function biome_lib:grow_plants(opts) minetest.swap_node(pos, biome_lib.air) else - biome_lib:replace_object(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff) + biome_lib.replace_plant(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff) end end end end }) end - - --- spawn_tree() on generate is routed through here so that other mods can hook --- into it. - -function biome_lib:generate_tree(pos, nodes_or_function_or_model) - minetest.spawn_tree(pos, nodes_or_function_or_model) -end - --- and this one's for the call used in the growing code - -function biome_lib:grow_tree(pos, nodes_or_function_or_model) - minetest.spawn_tree(pos, nodes_or_function_or_model) -end diff --git a/mods/biome_lib/init.lua b/mods/biome_lib/init.lua index b8635b9d..cbefb9a0 100644 --- a/mods/biome_lib/init.lua +++ b/mods/biome_lib/init.lua @@ -1,37 +1,12 @@ --- Biome library mod by Vanessa Ezekowitz +-- Biome library mod by VanessaE -- -- I got the temperature map idea from "hmmmm", values used for it came from -- Splizard's snow mod. -- --- Various settings - most of these probably won't need to be changed - biome_lib = {} -biome_lib.air = {name = "air"} - -plantslib = setmetatable({}, { __index=function(t,k) print("Use of deprecated function:", k) return biome_lib[k] end }) - -biome_lib.blocklist_aircheck = {} -biome_lib.blocklist_no_aircheck = {} - -biome_lib.surface_nodes_aircheck = {} -biome_lib.surface_nodes_no_aircheck = {} - -biome_lib.surfaceslist_aircheck = {} -biome_lib.surfaceslist_no_aircheck = {} - -biome_lib.actioncount_aircheck = {} -biome_lib.actioncount_no_aircheck = {} - -biome_lib.actionslist_aircheck = {} -biome_lib.actionslist_no_aircheck = {} - biome_lib.modpath = minetest.get_modpath("biome_lib") -biome_lib.total_no_aircheck_calls = 0 - -biome_lib.queue_run_ratio = tonumber(minetest.settings:get("biome_lib_queue_run_ratio")) or 100 - -- Boilerplate to support localized strings if intllib mod is installed. local S if minetest.global_exists("intllib") then @@ -45,692 +20,82 @@ else end biome_lib.intllib = S -local DEBUG = false --... except if you want to spam the console with debugging info :-) - -function biome_lib:dbg(msg) - if DEBUG then - print("[Plantlife] "..msg) - minetest.log("verbose", "[Plantlife] "..msg) +local c1 = minetest.settings:get("biome_lib_default_grow_through_nodes") +biome_lib.default_grow_through_nodes = {["air"] = true} +if c1 then + for _, i in ipairs(tableize(c1)) do + biome_lib.default_grow_through_nodes[i] = true end -end - -biome_lib.plantlife_seed_diff = 329 -- needs to be global so other mods can see it - -local perlin_octaves = 3 -local perlin_persistence = 0.6 -local perlin_scale = 100 - -local temperature_seeddiff = 112 -local temperature_octaves = 3 -local temperature_persistence = 0.5 -local temperature_scale = 150 - -local humidity_seeddiff = 9130 -local humidity_octaves = 3 -local humidity_persistence = 0.5 -local humidity_scale = 250 - -local time_scale = 1 -local time_speed = tonumber(minetest.settings:get("time_speed")) - -if time_speed and time_speed > 0 then - time_scale = 72 / time_speed -end - ---PerlinNoise(seed, octaves, persistence, scale) - -biome_lib.perlin_temperature = PerlinNoise(temperature_seeddiff, temperature_octaves, temperature_persistence, temperature_scale) -biome_lib.perlin_humidity = PerlinNoise(humidity_seeddiff, humidity_octaves, humidity_persistence, humidity_scale) - --- Local functions - -local function get_biome_data(pos, perlin_fertile) - local fertility = perlin_fertile:get_2d({x=pos.x, y=pos.z}) - - if type(minetest.get_biome_data) == "function" then - local data = minetest.get_biome_data(pos) - if data then - return fertility, data.heat / 100, data.humidity / 100 - end - end - - local temperature = biome_lib.perlin_temperature:get2d({x=pos.x, y=pos.z}) - local humidity = biome_lib.perlin_humidity:get2d({x=pos.x+150, y=pos.z+50}) - - return fertility, temperature, humidity -end - -function biome_lib:is_node_loaded(node_pos) - local n = minetest.get_node_or_nil(node_pos) - if (not n) or (n.name == "ignore") then - return false - end - return true -end - -function biome_lib:set_defaults(biome) - biome.seed_diff = biome.seed_diff or 0 - biome.min_elevation = biome.min_elevation or -31000 - biome.max_elevation = biome.max_elevation or 31000 - biome.temp_min = biome.temp_min or 1 - biome.temp_max = biome.temp_max or -1 - biome.humidity_min = biome.humidity_min or 1 - biome.humidity_max = biome.humidity_max or -1 - biome.plantlife_limit = biome.plantlife_limit or 0.1 - biome.near_nodes_vertical = biome.near_nodes_vertical or 1 - --- specific to on-generate - - biome.neighbors = biome.neighbors or biome.surface - biome.near_nodes_size = biome.near_nodes_size or 0 - biome.near_nodes_count = biome.near_nodes_count or 1 - biome.rarity = biome.rarity or 50 - biome.max_count = biome.max_count or 5 - if biome.check_air ~= false then biome.check_air = true end - --- specific to abm spawner - biome.seed_diff = biome.seed_diff or 0 - biome.light_min = biome.light_min or 0 - biome.light_max = biome.light_max or 15 - biome.depth_max = biome.depth_max or 1 - biome.facedir = biome.facedir or 0 -end - -local function search_table(t, s) - for i = 1, #t do - if t[i] == s then return true end - end - return false -end - --- register the list of surfaces to spawn stuff on, filtering out all duplicates. --- separate the items by air-checking or non-air-checking map eval methods - -function biome_lib:register_generate_plant(biomedef, nodes_or_function_or_model) - - -- if calling code passes an undefined node for a surface or - -- as a node to be spawned, don't register an action for it. - - if type(nodes_or_function_or_model) == "string" - and string.find(nodes_or_function_or_model, ":") - and not minetest.registered_nodes[nodes_or_function_or_model] then - biome_lib:dbg("Warning: Ignored registration for undefined spawn node: "..dump(nodes_or_function_or_model)) - return - end - - if type(nodes_or_function_or_model) == "string" - and not string.find(nodes_or_function_or_model, ":") then - biome_lib:dbg("Warning: Registered function call using deprecated string method: "..dump(nodes_or_function_or_model)) - end - - if biomedef.check_air == false then - biome_lib:dbg("Register no-air-check mapgen hook: "..dump(nodes_or_function_or_model)) - biome_lib.actionslist_no_aircheck[#biome_lib.actionslist_no_aircheck + 1] = { biomedef, nodes_or_function_or_model } - local s = biomedef.surface - if type(s) == "string" then - if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then - if not search_table(biome_lib.surfaceslist_no_aircheck, s) then - biome_lib.surfaceslist_no_aircheck[#biome_lib.surfaceslist_no_aircheck + 1] = s - end - else - biome_lib:dbg("Warning: Ignored no-air-check registration for undefined surface node: "..dump(s)) - end - else - for i = 1, #biomedef.surface do - local s = biomedef.surface[i] - if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then - if not search_table(biome_lib.surfaceslist_no_aircheck, s) then - biome_lib.surfaceslist_no_aircheck[#biome_lib.surfaceslist_no_aircheck + 1] = s - end - else - biome_lib:dbg("Warning: Ignored no-air-check registration for undefined surface node: "..dump(s)) - end - end - end - else - biome_lib:dbg("Register with-air-checking mapgen hook: "..dump(nodes_or_function_or_model)) - biome_lib.actionslist_aircheck[#biome_lib.actionslist_aircheck + 1] = { biomedef, nodes_or_function_or_model } - local s = biomedef.surface - if type(s) == "string" then - if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then - if not search_table(biome_lib.surfaceslist_aircheck, s) then - biome_lib.surfaceslist_aircheck[#biome_lib.surfaceslist_aircheck + 1] = s - end - else - biome_lib:dbg("Warning: Ignored with-air-checking registration for undefined surface node: "..dump(s)) - end - else - for i = 1, #biomedef.surface do - local s = biomedef.surface[i] - if s and (string.find(s, "^group:") or minetest.registered_nodes[s]) then - if not search_table(biome_lib.surfaceslist_aircheck, s) then - biome_lib.surfaceslist_aircheck[#biome_lib.surfaceslist_aircheck + 1] = s - end - else - biome_lib:dbg("Warning: Ignored with-air-checking registration for undefined surface node: "..dump(s)) - end - end - end - end -end - --- Function to check whether a position matches the given biome definition --- Returns true when the surface can be populated - -local function populate_single_surface(biome, pos, perlin_fertile_area, checkair) - local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } - - if math.random(1, 100) <= biome.rarity then - return - end - - local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area) - - local pos_biome_ok = pos.y >= biome.min_elevation and pos.y <= biome.max_elevation - and fertility > biome.plantlife_limit - and temperature <= biome.temp_min and temperature >= biome.temp_max - and humidity <= biome.humidity_min and humidity >= biome.humidity_max - - if not pos_biome_ok then - return -- Y position mismatch, outside of biome - end - - local biome_surfaces_string = dump(biome.surface) - local surface_ok = false - - if not biome.depth then - local dest_node = minetest.get_node(pos) - if string.find(biome_surfaces_string, dest_node.name) then - surface_ok = true - else - if string.find(biome_surfaces_string, "group:") then - for j = 1, #biome.surface do - if string.find(biome.surface[j], "^group:") - and minetest.get_item_group(dest_node.name, biome.surface[j]) then - surface_ok = true - break - end - end - end - end - elseif not string.find(biome_surfaces_string, - minetest.get_node({ x = pos.x, y = pos.y-biome.depth-1, z = pos.z }).name) then - surface_ok = true - end - - if not surface_ok then - return -- Surface does not match the given node group/name - end - - if checkair and minetest.get_node(p_top).name ~= "air" then - return - end - - if biome.below_nodes and - not string.find(dump(biome.below_nodes), - minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name - ) then - return -- Node below does not match - end - - if biome.ncount and - #minetest.find_nodes_in_area( - {x=pos.x-1, y=pos.y, z=pos.z-1}, - {x=pos.x+1, y=pos.y, z=pos.z+1}, - biome.neighbors - ) <= biome.ncount then - return -- Not enough similar biome nodes around - end - - if biome.near_nodes and - #minetest.find_nodes_in_area( - {x=pos.x-biome.near_nodes_size, y=pos.y-biome.near_nodes_vertical, z=pos.z-biome.near_nodes_size}, - {x=pos.x+biome.near_nodes_size, y=pos.y+biome.near_nodes_vertical, z=pos.z+biome.near_nodes_size}, - biome.near_nodes - ) < biome.near_nodes_count then - return -- Long distance neighbours do not match - end - - -- Position fits into given biome - return true -end - -function biome_lib:populate_surfaces(biome, nodes_or_function_or_model, snodes, checkair) - - biome_lib:set_defaults(biome) - - -- filter stage 1 - find nodes from the supplied surfaces that are within the current biome. - - local in_biome_nodes = {} - local perlin_fertile_area = minetest.get_perlin(biome.seed_diff, perlin_octaves, perlin_persistence, perlin_scale) - - for i = 1, #snodes do - local pos = vector.new(snodes[i]) - if populate_single_surface(biome, pos, perlin_fertile_area, checkair) then - in_biome_nodes[#in_biome_nodes + 1] = pos - end - end - - -- filter stage 2 - find places within that biome area to place the plants. - - local num_in_biome_nodes = #in_biome_nodes - - if num_in_biome_nodes == 0 then - return - end - - for i = 1, math.min(biome.max_count, num_in_biome_nodes) do - local tries = 0 - local spawned = false - while tries < 2 and not spawned do - local pos = in_biome_nodes[math.random(1, num_in_biome_nodes)] - if biome.spawn_replace_node then - pos.y = pos.y-1 - end - local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } - - if not (biome.avoid_nodes and biome.avoid_radius - and minetest.find_node_near(p_top, biome.avoid_radius - + math.random(-1.5,2), biome.avoid_nodes)) then - if biome.delete_above then - minetest.swap_node(p_top, biome_lib.air) - minetest.swap_node({x=p_top.x, y=p_top.y+1, z=p_top.z}, biome_lib.air) - end - - if biome.delete_above_surround then - minetest.swap_node({x=p_top.x-1, y=p_top.y, z=p_top.z}, biome_lib.air) - minetest.swap_node({x=p_top.x+1, y=p_top.y, z=p_top.z}, biome_lib.air) - minetest.swap_node({x=p_top.x, y=p_top.y, z=p_top.z-1}, biome_lib.air) - minetest.swap_node({x=p_top.x, y=p_top.y, z=p_top.z+1}, biome_lib.air) - - minetest.swap_node({x=p_top.x-1, y=p_top.y+1, z=p_top.z}, biome_lib.air) - minetest.swap_node({x=p_top.x+1, y=p_top.y+1, z=p_top.z}, biome_lib.air) - minetest.swap_node({x=p_top.x, y=p_top.y+1, z=p_top.z-1}, biome_lib.air) - minetest.swap_node({x=p_top.x, y=p_top.y+1, z=p_top.z+1}, biome_lib.air) - end - - if biome.spawn_replace_node then - minetest.swap_node(pos, biome_lib.air) - end - - local objtype = type(nodes_or_function_or_model) - - if objtype == "table" then - if nodes_or_function_or_model.axiom then - biome_lib:generate_tree(p_top, nodes_or_function_or_model) - spawned = true - else - local fdir = nil - if biome.random_facedir then - fdir = math.random(biome.random_facedir[1], biome.random_facedir[2]) - end - minetest.swap_node(p_top, { name = nodes_or_function_or_model[math.random(#nodes_or_function_or_model)], param2 = fdir }) - spawned = true - end - elseif objtype == "string" and - minetest.registered_nodes[nodes_or_function_or_model] then - local fdir = nil - if biome.random_facedir then - fdir = math.random(biome.random_facedir[1], biome.random_facedir[2]) - end - minetest.swap_node(p_top, { name = nodes_or_function_or_model, param2 = fdir }) - spawned = true - elseif objtype == "function" then - nodes_or_function_or_model(pos) - spawned = true - elseif objtype == "string" and pcall(loadstring(("return %s(...)"): - format(nodes_or_function_or_model)),pos) then - spawned = true - else - biome_lib:dbg("Warning: Ignored invalid definition for object "..dump(nodes_or_function_or_model).." that was pointed at {"..dump(pos).."}") - end - else - tries = tries + 1 - end - end - end -end - --- Primary mapgen spawner, for mods that can work with air checking enabled on --- a surface during the initial map read stage. - -function biome_lib:generate_block_with_air_checking() - if #biome_lib.blocklist_aircheck == 0 then - return - end - - local minp = biome_lib.blocklist_aircheck[1][1] - local maxp = biome_lib.blocklist_aircheck[1][2] - - -- use the block hash as a unique key into the surface nodes - -- tables, so that we can write the tables thread-safely. - - local blockhash = minetest.hash_node_position(minp) - - if not biome_lib.surface_nodes_aircheck.blockhash then - - if type(minetest.find_nodes_in_area_under_air) == "function" then -- use newer API call - biome_lib.surface_nodes_aircheck.blockhash = - minetest.find_nodes_in_area_under_air(minp, maxp, biome_lib.surfaceslist_aircheck) - else - local search_area = minetest.find_nodes_in_area(minp, maxp, biome_lib.surfaceslist_aircheck) - - -- search the generated block for air-bounded surfaces the slow way. - - biome_lib.surface_nodes_aircheck.blockhash = {} - - for i = 1, #search_area do - local pos = search_area[i] - local p_top = { x=pos.x, y=pos.y+1, z=pos.z } - if minetest.get_node(p_top).name == "air" then - biome_lib.surface_nodes_aircheck.blockhash[#biome_lib.surface_nodes_aircheck.blockhash + 1] = pos - end - end - end - biome_lib.actioncount_aircheck.blockhash = 1 - - else - if biome_lib.actioncount_aircheck.blockhash <= #biome_lib.actionslist_aircheck then - -- [1] is biome, [2] is node/function/model - biome_lib:populate_surfaces( - biome_lib.actionslist_aircheck[biome_lib.actioncount_aircheck.blockhash][1], - biome_lib.actionslist_aircheck[biome_lib.actioncount_aircheck.blockhash][2], - biome_lib.surface_nodes_aircheck.blockhash, true) - biome_lib.actioncount_aircheck.blockhash = biome_lib.actioncount_aircheck.blockhash + 1 - else - if biome_lib.surface_nodes_aircheck.blockhash then - table.remove(biome_lib.blocklist_aircheck, 1) - biome_lib.surface_nodes_aircheck.blockhash = nil - end - end - end -end - --- Secondary mapgen spawner, for mods that require disabling of --- checking for air during the initial map read stage. - -function biome_lib:generate_block_no_aircheck() - if #biome_lib.blocklist_no_aircheck == 0 then - return - end - - local minp = biome_lib.blocklist_no_aircheck[1][1] - local maxp = biome_lib.blocklist_no_aircheck[1][2] - - local blockhash = minetest.hash_node_position(minp) - - if not biome_lib.surface_nodes_no_aircheck.blockhash then - - -- directly read the block to be searched into the chunk cache - - biome_lib.surface_nodes_no_aircheck.blockhash = - minetest.find_nodes_in_area(minp, maxp, biome_lib.surfaceslist_no_aircheck) - biome_lib.actioncount_no_aircheck.blockhash = 1 - - else - if biome_lib.actioncount_no_aircheck.blockhash <= #biome_lib.actionslist_no_aircheck then - biome_lib:populate_surfaces( - biome_lib.actionslist_no_aircheck[biome_lib.actioncount_no_aircheck.blockhash][1], - biome_lib.actionslist_no_aircheck[biome_lib.actioncount_no_aircheck.blockhash][2], - biome_lib.surface_nodes_no_aircheck.blockhash, false) - biome_lib.actioncount_no_aircheck.blockhash = biome_lib.actioncount_no_aircheck.blockhash + 1 - else - if biome_lib.surface_nodes_no_aircheck.blockhash then - table.remove(biome_lib.blocklist_no_aircheck, 1) - biome_lib.surface_nodes_no_aircheck.blockhash = nil - end - end - end -end - --- "Play" them back, populating them with new stuff in the process - -local step_duration = tonumber(minetest.settings:get("dedicated_server_step")) -minetest.register_globalstep(function(dtime) - if dtime >= step_duration + 0.1 -- don't attempt to populate if lag is already too high - or math.random(100) > biome_lib.queue_run_ratio - or (#biome_lib.blocklist_aircheck == 0 and #biome_lib.blocklist_no_aircheck == 0) then - return - end - - biome_lib.globalstep_start_time = minetest.get_us_time() - biome_lib.globalstep_runtime = 0 - while (#biome_lib.blocklist_aircheck > 0 or #biome_lib.blocklist_no_aircheck > 0) - and biome_lib.globalstep_runtime < 200000 do -- 0.2 seconds, in uS. - if #biome_lib.blocklist_aircheck > 0 then - biome_lib:generate_block_with_air_checking() - end - if #biome_lib.blocklist_no_aircheck > 0 then - biome_lib:generate_block_no_aircheck() - end - biome_lib.globalstep_runtime = minetest.get_us_time() - biome_lib.globalstep_start_time - end -end) - --- Play out the entire log all at once on shutdown --- to prevent unpopulated map areas - -minetest.register_on_shutdown(function() - if #biome_lib.blocklist_aircheck == 0 then - return - end - - print("[biome_lib] Stand by, playing out the rest of the aircheck mapblock log") - print("(there are "..#biome_lib.blocklist_aircheck.." entries)...") - while #biome_lib.blocklist_aircheck > 0 do - biome_lib:generate_block_with_air_checking(0.1) - end -end) - -minetest.register_on_shutdown(function() - if #biome_lib.blocklist_aircheck == 0 then - return - end - - print("[biome_lib] Stand by, playing out the rest of the no-aircheck mapblock log") - print("(there are "..#biome_lib.blocklist_no_aircheck.." entries)...") - while #biome_lib.blocklist_no_aircheck > 0 do - biome_lib:generate_block_no_aircheck(0.1) - end -end) - --- The spawning ABM - -function biome_lib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa) - - local biome = {} - - if type(sd) ~= "table" then - biome.spawn_delay = sd -- old api expects ABM interval param here. - biome.spawn_plants = {sp} - biome.avoid_radius = sr - biome.spawn_chance = sc - biome.spawn_surfaces = {ss} - biome.avoid_nodes = sa - else - biome = sd - end - - if biome.spawn_delay*time_scale >= 1 then - biome.interval = biome.spawn_delay*time_scale - else - biome.interval = 1 - end - - biome_lib:set_defaults(biome) - biome.spawn_plants_count = #(biome.spawn_plants) - - local n - if type(biome.spawn_plants) == "table" then - n = "random: "..biome.spawn_plants[1]..", ..." - else - n = biome.spawn_plants - end - biome.label = biome.label or "biome_lib spawn_on_surfaces(): "..n - - minetest.register_abm({ - nodenames = biome.spawn_surfaces, - interval = biome.interval, - chance = biome.spawn_chance, - neighbors = biome.neighbors, - label = biome.label, - action = function(pos, node, active_object_count, active_object_count_wider) - local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } - local n_top = minetest.get_node(p_top) - local perlin_fertile_area = minetest.get_perlin(biome.seed_diff, perlin_octaves, perlin_persistence, perlin_scale) - - local fertility, temperature, humidity = get_biome_data(pos, perlin_fertile_area) - - local pos_biome_ok = pos.y >= biome.min_elevation and pos.y <= biome.max_elevation - and fertility > biome.plantlife_limit - and temperature <= biome.temp_min and temperature >= biome.temp_max - and humidity <= biome.humidity_min and humidity >= biome.humidity_max - and biome_lib:is_node_loaded(p_top) - - if not pos_biome_ok then - return -- Outside of biome - end - - local n_light = minetest.get_node_light(p_top, nil) - if n_light < biome.light_min or n_light > biome.light_max then - return -- Too dark or too bright - end - - if biome.avoid_nodes and biome.avoid_radius and minetest.find_node_near( - p_top, biome.avoid_radius + math.random(-1.5,2), biome.avoid_nodes) then - return -- Nodes to avoid are nearby - end - - if biome.neighbors and biome.ncount and - #minetest.find_nodes_in_area( - {x=pos.x-1, y=pos.y, z=pos.z-1}, - {x=pos.x+1, y=pos.y, z=pos.z+1}, - biome.neighbors - ) <= biome.ncount then - return -- Near neighbour nodes are not present - end - - local NEAR_DST = biome.near_nodes_size - if biome.near_nodes and biome.near_nodes_count and biome.near_nodes_size and - #minetest.find_nodes_in_area( - {x=pos.x-NEAR_DST, y=pos.y-biome.near_nodes_vertical, z=pos.z-NEAR_DST}, - {x=pos.x+NEAR_DST, y=pos.y+biome.near_nodes_vertical, z=pos.z+NEAR_DST}, - biome.near_nodes - ) < biome.near_nodes_count then - return -- Far neighbour nodes are not present - end - - if (biome.air_count and biome.air_size) and - #minetest.find_nodes_in_area( - {x=p_top.x-biome.air_size, y=p_top.y, z=p_top.z-biome.air_size}, - {x=p_top.x+biome.air_size, y=p_top.y, z=p_top.z+biome.air_size}, - "air" - ) < biome.air_count then - return -- Not enough air - end - - local walldir = biome_lib:find_adjacent_wall(p_top, biome.verticals_list, biome.choose_random_wall) - if biome.alt_wallnode and walldir then - if n_top.name == "air" then - minetest.swap_node(p_top, { name = biome.alt_wallnode, param2 = walldir }) - end - return - end - - local currentsurface = minetest.get_node(pos).name - - if currentsurface == "default:water_source" and - #minetest.find_nodes_in_area( - {x=pos.x, y=pos.y-biome.depth_max-1, z=pos.z}, - vector.new(pos), - {"default:dirt", "default:dirt_with_grass", "default:sand"} - ) == 0 then - return -- On water but no ground nearby - end - - local rnd = math.random(1, biome.spawn_plants_count) - local plant_to_spawn = biome.spawn_plants[rnd] - local fdir = biome.facedir - if biome.random_facedir then - fdir = math.random(biome.random_facedir[1],biome.random_facedir[2]) - end - if type(biome.spawn_plants) == "string" then - assert(loadstring(biome.spawn_plants.."(...)"))(pos) - elseif not biome.spawn_on_side and not biome.spawn_on_bottom and not biome.spawn_replace_node then - if n_top.name == "air" then - minetest.swap_node(p_top, { name = plant_to_spawn, param2 = fdir }) - end - elseif biome.spawn_replace_node then - minetest.swap_node(pos, { name = plant_to_spawn, param2 = fdir }) - - elseif biome.spawn_on_side then - local onside = biome_lib:find_open_side(pos) - if onside then - minetest.swap_node(onside.newpos, { name = plant_to_spawn, param2 = onside.facedir }) - end - elseif biome.spawn_on_bottom then - if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then - minetest.swap_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = plant_to_spawn, param2 = fdir} ) - end - end - end - }) -end - --- Function to decide how to replace a plant - either grow it, replace it with --- a tree, run a function, or die with an error. - -function biome_lib:replace_object(pos, replacement, grow_function, walldir, seeddiff) - local growtype = type(grow_function) - if growtype == "table" then - minetest.swap_node(pos, biome_lib.air) - biome_lib:grow_tree(pos, grow_function) - return - elseif growtype == "function" then - local perlin_fertile_area = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale) - local fertility, temperature, _ = get_biome_data(pos, perlin_fertile_area) - grow_function(pos, fertility, temperature, walldir) - return - elseif growtype == "string" then - local perlin_fertile_area = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale) - local fertility, temperature, _ = get_biome_data(pos, perlin_fertile_area) - assert(loadstring(grow_function.."(...)"))(pos, fertility, temperature, walldir) - return - elseif growtype == "nil" then - minetest.swap_node(pos, { name = replacement, param2 = walldir}) - return - elseif growtype ~= "nil" and growtype ~= "string" and growtype ~= "table" then - error("Invalid grow function "..dump(grow_function).." used on object at ("..dump(pos)..")") - end -end - - -dofile(biome_lib.modpath .. "/search_functions.lua") -assert(loadfile(biome_lib.modpath .. "/growth.lua"))(time_scale) - - - --- Check for infinite stacks - -if minetest.get_modpath("unified_inventory") or not minetest.settings:get_bool("creative_mode") then - biome_lib.expect_infinite_stacks = false else - biome_lib.expect_infinite_stacks = true + biome_lib.default_grow_through_nodes["default:snow"] = true end --- read a field from a node's definition - -function biome_lib:get_nodedef_field(nodename, fieldname) - if not minetest.registered_nodes[nodename] then - return nil +local c2 = minetest.settings:get("biome_lib_default_water_nodes") +biome_lib.default_water_nodes = {} +if c2 then + for _, i in ipairs(tableize(c2)) do + biome_lib.default_water_nodes[i] = true end - return minetest.registered_nodes[nodename][fieldname] +else + biome_lib.default_water_nodes["default:water_source"] = true + biome_lib.default_water_nodes["default:water_flowing"] = true + biome_lib.default_water_nodes["default:river_water_source"] = true + biome_lib.default_water_nodes["default:river_water_flowing"] = true end -print("[Biome Lib] Loaded") +local c3 = minetest.settings:get("biome_lib_default_wet_surfaces") +local c4 = minetest.settings:get("biome_lib_default_ground_nodes") +local c5 = minetest.settings:get("biome_lib_default_grow_nodes") -minetest.after(0, function() - print("[Biome Lib] Registered a total of "..(#biome_lib.surfaceslist_aircheck)+(#biome_lib.surfaceslist_no_aircheck).." surface types to be evaluated, spread") - print("[Biome Lib] across "..#biome_lib.actionslist_aircheck.." actions with air-checking and "..#biome_lib.actionslist_no_aircheck.." actions without.") +biome_lib.default_wet_surfaces = c3 and tableize(c3) or {"default:dirt", "default:dirt_with_grass", "default:sand"} +biome_lib.default_ground_nodes = c4 and tableize(c4) or {"default:dirt_with_grass"} +biome_lib.default_grow_nodes = c5 and tableize(c5) or {"default:dirt_with_grass"} + +biome_lib.debug_log_level = tonumber(minetest.settings:get("biome_lib_debug_log_level")) or 0 + +local rr = tonumber(minetest.settings:get("biome_lib_queue_ratio")) or -200 +biome_lib.queue_ratio = 100 - rr +biome_lib.entries_per_step = math.max(-rr, 1) + +-- the timer that manages the block timeout is in microseconds, but the timer +-- that manages the queue wakeup call has to be in seconds, and works best if +-- it takes a fraction of the block timeout interval. + +local t = tonumber(minetest.settings:get("biome_lib_block_timeout")) or 300 + +biome_lib.block_timeout = t * 1000000 + +-- we don't want the wakeup function to trigger TOO often, +-- in case the user's block timeout setting is really low + +biome_lib.block_queue_wakeup_time = math.min(t/2, math.max(20, t/10)) + +-- the actual important stuff starts here ;-) + +dofile(biome_lib.modpath .. "/api.lua") +dofile(biome_lib.modpath .. "/search_functions.lua") +dofile(biome_lib.modpath .. "/growth.lua") +dofile(biome_lib.modpath .. "/compat.lua") + +minetest.after(0.01, function() + -- report the final registration results and enable the active block queue stuff + + local n = #biome_lib.actionslist_aircheck + #biome_lib.actionslist_no_aircheck + + biome_lib.dbg("All mapgen registrations completed.", 0) + + if n > 0 then + biome_lib.dbg("Total items/actions to handle manually: "..n.." ("..#biome_lib.actionslist_no_aircheck.." without air checks)", 0) + biome_lib.dbg("Total surface types to handle manually: "..#biome_lib.surfaceslist_aircheck + #biome_lib.surfaceslist_no_aircheck, 0) + else + biome_lib.dbg("There are no \"handle manually\" items/actions registered,", 0) + biome_lib.dbg("so the mapblock queue will not be not used this session.", 0) + end + + biome_lib.dbg("Items sent to the engine's decorations handler: "..#biome_lib.registered_decorations, 0) + biome_lib.dbg("Elevation range: "..biome_lib.mapgen_elevation_limit.min.." to "..string.format("%+d", biome_lib.mapgen_elevation_limit.max).." meters.", 0) + + if n > 0 then + dofile(biome_lib.modpath .. "/block_queue_checks.lua") + end end) - diff --git a/mods/biome_lib/mod.conf b/mods/biome_lib/mod.conf index 033b72e9..86b044a3 100644 --- a/mods/biome_lib/mod.conf +++ b/mods/biome_lib/mod.conf @@ -1,2 +1,3 @@ name = biome_lib min_minetest_version = 5.2.0 +optional_depends = default, intllib diff --git a/mods/biome_lib/search_functions.lua b/mods/biome_lib/search_functions.lua index d665b5fe..2bd48b7e 100644 --- a/mods/biome_lib/search_functions.lua +++ b/mods/biome_lib/search_functions.lua @@ -2,7 +2,7 @@ -- function to decide if a node has a wall that's in verticals_list{} -- returns wall direction of valid node, or nil if invalid. -function biome_lib:find_adjacent_wall(pos, verticals, randomflag) +function biome_lib.find_adjacent_wall(pos, verticals, randomflag) local verts = dump(verticals) if randomflag then local walltab = {} @@ -27,7 +27,7 @@ end -- node that matches the ground table. Returns the new position, or nil if -- height limit is exceeded before finding it. -function biome_lib:search_downward(pos, heightlimit, ground) +function biome_lib.search_downward(pos, heightlimit, ground) for i = 0, heightlimit do if string.find(dump(ground), minetest.get_node({x=pos.x, y=pos.y-i, z = pos.z}).name) then return {x=pos.x, y=pos.y-i, z = pos.z} @@ -36,7 +36,7 @@ function biome_lib:search_downward(pos, heightlimit, ground) return false end -function biome_lib:find_open_side(pos) +function biome_lib.find_open_side(pos) if minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name == "air" then return {newpos = { x=pos.x-1, y=pos.y, z=pos.z }, facedir = 2} end @@ -51,10 +51,3 @@ function biome_lib:find_open_side(pos) end return nil end - --- "Record" the chunks being generated by the core mapgen - -minetest.register_on_generated(function(minp, maxp, blockseed) - biome_lib.blocklist_aircheck[#biome_lib.blocklist_aircheck + 1] = { minp, maxp } - biome_lib.blocklist_no_aircheck[#biome_lib.blocklist_no_aircheck + 1] = { minp, maxp } -end) diff --git a/mods/biome_lib/settingtypes.txt b/mods/biome_lib/settingtypes.txt new file mode 100644 index 00000000..24558f8a --- /dev/null +++ b/mods/biome_lib/settingtypes.txt @@ -0,0 +1,48 @@ +# Comma-separated list of things that a spawned node is allowed to grow +# through. Air is always added to whatever else you specify here. +biome_lib_default_grow_through_nodes (List of things a plant can grow through) string default:snow + +# Comma-separated list of nodes that should be treated as water or water-like +# for the sake of looking for neighboring wet ground. +biome_lib_default_water_nodes (List of "water-like" sources) string default:water_source,default:water_flowing,default:river_water_source,default:river_water_flowing + +# Comma-separated list of nodes that should be considered "wet" if one of +# the configured "water-like" sources is nearby. +biome_lib_default_wet_surfaces (List of "wet" nodes) string default:dirt,default:dirt_with_grass,default:sand + +# Comma-separated list of nodes that something must be sitting on to be +# able to actively change from one thing to another (such as a sapling +# growing into a tree), to be used if the mod that added that growable +# thing didn't provide its own list of suitable surfaces. +biome_lib_default_grow_nodes (List of default surfaces a plant can thrive on) string default:dirt_with_grass + +# Comma-separated list of nodes to use as the "root" of something that can +# gradually climb up a wall (such as ivy), to be used if the mod that added +# the climing thing didn't provide its own list. +biome_lib_default_ground_nodes (List of default root nodes) string default:dirt_with_grass + +# biome_lib divides its workload into "actions", as dictated by the sum +# total of all mods that use it, and this sets how much of that work is done +# per globalstep tick. If positive, a single action is executed on that +# percentage of ticks, on average. If negative, it becomes positive, and +# that many actions are executed on every single tick, skipping none. +# More negative means more throughput, at the expense of lag. On fast PC's, +# a setting of between -500 and -2000 might be good. +biome_lib_queue_ratio (Queue run ratio) int -200 + +# Minetest's map generator allows neighboring areas to overflow into one +# another, to create smooth terrain, but it often hands the map blocks that +# comprise those areas to Lua (and hence, to biome_lib) before that overflow +# function happens, which causes the mapgen to overwrite whatever Lua does +# to them. This setting (in seconds) makes biome_lib wait before adding its +# normal output to those map blocks, to give the engine plenty of time to +# run that overflow feature first. +biome_lib_block_timeout (Deferred block timeout) int 300 + +# This does just what it sounds like - it shows all debug output that's sent +# with a level equal to or greater than this value. A setting of 0 shows only +# the bare necessities, such as the startup and shutdown messages, 1 adds +# internal non-fatal errors to what's shown, 2 adds warnings, 3 adds other +# basic info, 4 adds all the verbose debugging spew. 3 is perhaps the most +# useful setting. +biome_lib_debug_log_level (Debug log level) int 0 diff --git a/mods/bonemeal/init.lua b/mods/bonemeal/init.lua index 71cff14c..ef32e610 100644 --- a/mods/bonemeal/init.lua +++ b/mods/bonemeal/init.lua @@ -37,6 +37,17 @@ local function pine_grow(pos) end +-- special function for cactus growth +local function cactus_grow(pos) + default.grow_cactus(pos, minetest.get_node(pos)) +end + +-- special function for papyrus growth +local function papyrus_grow(pos) + default.grow_papyrus(pos, minetest.get_node(pos)) +end + + -- default saplings local saplings = { {"default:sapling", default.grow_new_apple_tree, "soil"}, @@ -49,7 +60,9 @@ local saplings = { {"default:acacia_bush_sapling", default.grow_acacia_bush, "soil"}, {"default:large_cactus_seedling", default.grow_large_cactus, "sand"}, {"default:blueberry_bush_sapling", default.grow_blueberry_bush, "soil"}, - {"default:pine_bush_sapling", default.grow_pine_bush, "soil"} + {"default:pine_bush_sapling", default.grow_pine_bush, "soil"}, + {"default:cactus", cactus_grow, "sand"}, + {"default:papyrus", papyrus_grow, "soil"}, } -- helper tables ( "" denotes a blank item ) @@ -82,6 +95,8 @@ end) -- default biomes deco local deco = { + {"default:dry_dirt", dry_grass, {}}, + {"default:dry_dirt_with_dry_grass", dry_grass, {}}, {"default:dirt_with_dry_grass", dry_grass, flowers}, {"default:sand", {}, {"default:dry_shrub", "", "", ""} }, {"default:desert_sand", {}, {"default:dry_shrub", "", "", ""} }, @@ -605,51 +620,51 @@ minetest.register_craft({ -- bonemeal (from bone) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "bonemeal:bonemeal 2", - recipe = {"group:bone"} + recipe = {{"group:bone"}} }) -- bonemeal (from player bones) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "bonemeal:bonemeal 4", - recipe = {"bones:bones"} + recipe = {{"bones:bones"}} }) -- bonemeal (from coral skeleton) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "bonemeal:bonemeal 2", - recipe = {"default:coral_skeleton"} + recipe = {{"default:coral_skeleton"}} }) -- mulch minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "bonemeal:mulch 4", recipe = { - "group:tree", "group:leaves", "group:leaves", - "group:leaves", "group:leaves", "group:leaves", - "group:leaves", "group:leaves", "group:leaves" + {"group:tree", "group:leaves", "group:leaves"}, + {"group:leaves", "group:leaves", "group:leaves"}, + {"group:leaves", "group:leaves", "group:leaves"} } }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "bonemeal:mulch", recipe = { - "group:seed", "group:seed", "group:seed", - "group:seed", "group:seed", "group:seed", - "group:seed", "group:seed", "group:seed" + {"group:seed", "group:seed", "group:seed"}, + {"group:seed", "group:seed", "group:seed"}, + {"group:seed", "group:seed", "group:seed"} } }) -- fertiliser minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "bonemeal:fertiliser 2", - recipe = {"bonemeal:bonemeal", "bonemeal:mulch"} + recipe = {{"bonemeal:bonemeal", "bonemeal:mulch"}} }) diff --git a/mods/bonemeal/mods.lua b/mods/bonemeal/mods.lua index 9e3a63ce..dfbcd6ff 100644 --- a/mods/bonemeal/mods.lua +++ b/mods/bonemeal/mods.lua @@ -44,7 +44,9 @@ if farming and farming.mod and farming.mod == "redo" then {"farming:lettuce_", 5}, {"farming:blackberry_", 4}, {"farming:vanilla_", 8}, - {"farming:soy_", 7} + {"farming:soy_", 7}, + {"farming:artichoke_", 5}, + {"farming:parsley_", 3} }) end diff --git a/mods/bows/lucky_block.lua b/mods/bows/lucky_block.lua index f6d0e826..58d61ed0 100644 --- a/mods/bows/lucky_block.lua +++ b/mods/bows/lucky_block.lua @@ -11,13 +11,13 @@ if minetest.get_modpath("lucky_block") then {"dro", {"bows:arrow_diamond"}, 5}, {"nod", "default:chest", 0, { {name = "default:stick", max = 5}, - {name = "default:flint", max = 3}, - {name = "default:steel_ingot", max = 3}, - {name = "default:bronze_ingot", max = 3}, - {name = "default:mese_crystal_fragment", max = 3}, + {name = "default:flint", max = 5}, + {name = "default:steel_ingot", max = 5}, + {name = "default:bronze_ingot", max = 5}, + {name = "default:mese_crystal_fragment", max = 5}, {name = "farming:string", max = 5}, - {name = bows.feather, max = 4}, - {name = "bows:bow_bowie", max = 1} + {name = bows.feather, max = 5}, + {name = "bows:bow_bowie", max = 1, chance = 4} }}, }) -end \ No newline at end of file +end diff --git a/mods/bridger/.luacheckrc b/mods/bridger/.luacheckrc new file mode 100644 index 00000000..8bfd380b --- /dev/null +++ b/mods/bridger/.luacheckrc @@ -0,0 +1,15 @@ + +globals = { + "minetest", +} + +read_globals = { + -- Builtin + "vector", + + -- Mod Deps + "default", + "stairsplus", + "stairs", + "mesecon", +} diff --git a/mods/bridger/README.md b/mods/bridger/README.md new file mode 100644 index 00000000..e1e19fee --- /dev/null +++ b/mods/bridger/README.md @@ -0,0 +1,7 @@ +# Bridger [bridger] + +[![luacheck](https://github.com/v-rob/bridger/workflows/luacheck/badge.svg)](https://github.com/v-rob/bridger/actions) + +Adds a large number of advanced nodes conducive to building large, industrial bridges to [Minetest](https://www.minetest.net). Also see the [forum post](https://forum.minetest.net/viewtopic.php?t=18243). + +![](screenshot.png?raw=true) diff --git a/mods/bridger/alias.lua b/mods/bridger/alias.lua index 0518a85f..f9ea4634 100644 --- a/mods/bridger/alias.lua +++ b/mods/bridger/alias.lua @@ -6,18 +6,17 @@ local bridger_colors = { } for _, color in pairs(bridger_colors) do - local oldname = color local newname = string.lower(color) if minetest.get_modpath("moreblocks") then - stairsplus:register_alias_all("bridges", "block_"..oldname, "bridger", "block_"..newname) - minetest.register_alias("bridges:step_"..oldname, "bridger:panel_block_"..newname) + stairsplus:register_alias_all("bridges", "block_" .. oldname, "bridger", "block_" .. newname) + minetest.register_alias("bridges:step_" .. oldname, "bridger:panel_block_" .. newname) elseif minetest.get_modpath("stairs") then - minetest.register_alias("stairs:slab_block_"..oldname, "stairs:slab_block_"..newname) - minetest.register_alias("stairs:stair_block_"..oldname, "stairs:stair_block_"..newname) + minetest.register_alias("stairs:slab_block_" .. oldname, "stairs:slab_block_" .. newname) + minetest.register_alias("stairs:stair_block_" .. oldname, "stairs:stair_block_" .. newname) end - + local bridger_error1 = { "block_", "step_", @@ -41,12 +40,11 @@ for _, color in pairs(bridger_colors) do "truss_substructure_end_left_slant_", "truss_substructure_end_right_slant_" } - - + for _, prefix in pairs (bridger_error1) do - minetest.register_alias("bridges:"..prefix..oldname, "bridger:"..prefix..newname) + minetest.register_alias("bridges:" .. prefix .. oldname, "bridger:" .. prefix .. newname) end - + local bridger_error2 = { "truss_substructure_mid", "truss_substructure_simple", @@ -58,18 +56,19 @@ for _, color in pairs(bridger_colors) do "truss_superstructure_simple", "truss_superstructure_simple_end_right" } - + for _, prefix in pairs (bridger_error2) do - minetest.register_alias("bridges:"..prefix..oldname, "bridger:"..prefix.."_"..newname) + minetest.register_alias("bridges:" .. prefix .. oldname, "bridger:" .. prefix .. "_" .. newname) end - - minetest.register_alias("bridges:truss_superstructure_simple_end"..oldname, "bridger:truss_superstructure_simple_end_left_"..newname) - minetest.register_alias("bridges:girder_left_end"..oldname, "bridger:girder_left_"..newname) - + + minetest.register_alias("bridges:truss_superstructure_simple_end" .. oldname, + "bridger:truss_superstructure_simple_end_left_" .. newname) + minetest.register_alias("bridges:girder_left_end" .. oldname, "bridger:girder_left_" .. newname) + end minetest.register_alias("bridges:corrugated_steel", "bridger:corrugated_steel_steel") minetest.register_alias("bridges:corrugated_steel_ceiling", "bridger:corrugated_steel_ceiling_steel") minetest.register_alias("bridges:scaffolding", "bridger:scaffolding") minetest.register_alias("bridges:zbridges_diagonal_steel_rod", "bridger:bridges_diagonal_steel_rod") -minetest.register_alias("bridges:zbridges_steel_rod", "bridger:bridges_steel_rod") \ No newline at end of file +minetest.register_alias("bridges:zbridges_steel_rod", "bridger:bridges_steel_rod") diff --git a/mods/bridger/crafts.lua b/mods/bridger/crafts.lua index 86aaf318..458cde6d 100644 --- a/mods/bridger/crafts.lua +++ b/mods/bridger/crafts.lua @@ -4,32 +4,31 @@ minetest.register_craftitem("bridger:bridges_wooden_rod", { }) minetest.register_craft({ - output = 'default:stick', + output = "default:stick", recipe = { - {'bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:bridges_wooden_rod 3', + output = "bridger:bridges_wooden_rod 3", recipe = { - {'group:stick'}, - {'group:stick'}, - {'group:stick'}, + {"group:stick"}, + {"group:stick"}, + {"group:stick"}, } }) minetest.register_craft({ - output = 'bridger:scaffolding 2', + output = "bridger:scaffolding 2", recipe = { - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, - {'','group:stick',''}, - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, + {"", "group:stick", ""}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, } }) -if minetest.settings:get_bool("bridger_enable_trusses") then - +if minetest.settings:get_bool("bridger_enable_trusses", true) then minetest.register_craftitem("bridger:bridges_steel_rod", { description = "Steel Rod", inventory_image = "bridges_steel_rod.png", @@ -41,33 +40,33 @@ if minetest.settings:get_bool("bridger_enable_trusses") then }) minetest.register_craft({ - output = 'bridger:bridges_steel_rod 3', + output = "bridger:bridges_steel_rod 3", recipe = { - {'default:steel_ingot'}, + {"default:steel_ingot"}, } }) minetest.register_craft({ - output = 'bridger:bridges_diagonal_steel_rod 3', + output = "bridger:bridges_diagonal_steel_rod 3", recipe = { - {'','','bridger:bridges_steel_rod'}, - {'','bridger:bridges_steel_rod',''}, - {'bridger:bridges_steel_rod','',''}, + {"", "", "bridger:bridges_steel_rod"}, + {"", "bridger:bridges_steel_rod", ""}, + {"bridger:bridges_steel_rod", "", ""}, } }) - - minetest.register_craft({ - output = 'bridger:train_deck_white', - type = 'shapeless', - recipe = {'bridger:bridges_diagonal_steel_rod','bridger:bridges_diagonal_steel_rod'}, - }) minetest.register_craft({ - output = 'bridger:block_white', + output = "bridger:train_deck_white", + type = "shapeless", + recipe = {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_diagonal_steel_rod"}, + }) + + minetest.register_craft({ + output = "bridger:block_white", recipe = { - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, } }) @@ -76,551 +75,569 @@ if minetest.settings:get_bool("bridger_enable_trusses") then "red", "steel", "white", + "yellow" } for c in ipairs(bridge_colors) do - local bridge_colors = bridge_colors[c] + local bridge_color = bridge_colors[c] minetest.register_craft({ - output = 'bridger:deck_'..bridge_colors..' 8', + output = "bridger:deck_" .. bridge_color .. " 8", recipe = { - {'bridger:block_'..bridge_colors}, + {"bridger:block_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:deck_edge_'..bridge_colors..' 14', + output = "bridger:deck_edge_" .. bridge_color .. " 14", recipe = { - {'','bridger:block_'..bridge_colors}, - {'bridger:block_'..bridge_colors,''}, + {"", "bridger:block_" .. bridge_color}, + {"bridger:block_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:step_'..bridge_colors..' 12', + output = "bridger:step_" .. bridge_color .. " 12", recipe = { - {'','bridger:block_'..bridge_colors}, - {'bridger:block_'..bridge_colors,'bridger:block_'..bridge_colors}, + {"", "bridger:block_" .. bridge_color}, + {"bridger:block_" .. bridge_color, "bridger:block_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:step_'..bridge_colors..' 12', + output = "bridger:step_" .. bridge_color .. " 12", recipe = { - {'bridger:block_'..bridge_colors,''}, - {'bridger:block_'..bridge_colors,'bridger:block_'..bridge_colors}, + {"bridger:block_" .. bridge_color, ""}, + {"bridger:block_" .. bridge_color, "bridger:block_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:block_'..bridge_colors, + output = "bridger:block_" .. bridge_color, recipe = { - {'bridger:step_'..bridge_colors,'bridger:step_'..bridge_colors}, - {'bridger:step_'..bridge_colors,'bridger:step_'..bridge_colors}, + {"bridger:step_" .. bridge_color, "bridger:step_" .. bridge_color}, + {"bridger:step_" .. bridge_color, "bridger:step_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:suspension_cable_'..bridge_colors..' 16', + output = "bridger:suspension_cable_" .. bridge_color .. " 16", recipe = { - {'bridger:block_'..bridge_colors}, - {'bridger:block_'..bridge_colors}, - {'bridger:block_'..bridge_colors}, + {"bridger:block_" .. bridge_color}, + {"bridger:block_" .. bridge_color}, + {"bridger:block_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:suspension_top_'..bridge_colors..' 8', + output = "bridger:suspension_top_" .. bridge_color .. " 8", recipe = { - {'bridger:block_'..bridge_colors,'bridger:block_'..bridge_colors,'bridger:block_'..bridge_colors}, - {'','bridger:block_'..bridge_colors,''}, - {'','bridger:block_'..bridge_colors,''}, + {"bridger:block_" .. bridge_color, "bridger:block_" .. bridge_color, "bridger:block_" .. bridge_color}, + {"", "bridger:block_" .. bridge_color, ""}, + {"", "bridger:block_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:girder_mid_'..bridge_colors..' 4', + output = "bridger:girder_mid_" .. bridge_color .. " 4", recipe = { - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:block_'..bridge_colors,'bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:block_" .. bridge_color, "bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:girder_left_end_'..bridge_colors..' 4', + output = "bridger:girder_left_end_" .. bridge_color .. " 4", recipe = { - {'','','bridger:bridges_steel_rod'}, - {'','bridger:block_'..bridge_colors,'bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, + {"", "", "bridger:bridges_steel_rod"}, + {"", "bridger:block_" .. bridge_color, "bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:girder_right_'..bridge_colors..' 4', + output = "bridger:girder_right_" .. bridge_color .. " 4", recipe = { - {'bridger:bridges_steel_rod','',''}, - {'bridger:bridges_steel_rod','bridger:block_'..bridge_colors,''}, - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod", "", ""}, + {"bridger:bridges_steel_rod", "bridger:block_" .. bridge_color, ""}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:corrugated_steel_'..bridge_colors, - type = 'shapeless', - recipe = {'bridger:deck_'..bridge_colors,'default:coal_lump'}, + output = "bridger:corrugated_steel_" .. bridge_color, + type = "shapeless", + recipe = {"bridger:deck_" .. bridge_color, "default:coal_lump"}, }) minetest.register_craft({ - output = 'bridger:corrugated_steel_ceiling_'..bridge_colors..' 3', + output = "bridger:corrugated_steel_ceiling_" .. bridge_color .. " 3", recipe = { - {'bridger:corrugated_steel'..bridge_colors,'bridger:corrugated_steel'..bridge_colors,'bridger:corrugated_steel'..bridge_colors}, + { + "bridger:corrugated_steel" .. bridge_color, + "bridger:corrugated_steel" .. bridge_color, + "bridger:corrugated_steel" .. bridge_color + }, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_left_slant_white', + output = "bridger:truss_superstructure_left_slant_white", recipe = { - {'','bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, - {'bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod',''}, + {"", "bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, + {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod", ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_right_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_left_slant_'..bridge_colors}, + {"bridger:truss_superstructure_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_left_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_right_slant_'..bridge_colors}, + {"bridger:truss_superstructure_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:corrugated_steel_ceiling_'..bridge_colors..' 3', + output = "bridger:corrugated_steel_ceiling_" .. bridge_color .. " 3", recipe = { - {'bridger:corrugated_steel'..bridge_colors,'bridger:corrugated_steel'..bridge_colors,'bridger:corrugated_steel'..bridge_colors}, + { + "bridger:corrugated_steel" .. bridge_color, + "bridger:corrugated_steel" .. bridge_color, + "bridger:corrugated_steel" .. bridge_color + }, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_tall_left_slant_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_left_slant_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_left_slant_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_tall_right_slant_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_right_slant_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_right_slant_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_tall_right_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_tall_left_slant_'..bridge_colors}, + {"bridger:truss_superstructure_tall_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_tall_left_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_tall_right_slant_'..bridge_colors}, + {"bridger:truss_superstructure_tall_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_up_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_up_left_slant_" .. bridge_color, recipe = { - {'','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_left_slant_'..bridge_colors,''}, + {"", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_left_slant_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_up_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_up_right_slant_" .. bridge_color, recipe = { - {'','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_right_slant_'..bridge_colors,''}, + {"", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_right_slant_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_down_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_down_left_slant_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','',''}, - {'','bridger:truss_superstructure_left_slant_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", ""}, + {"", "bridger:truss_superstructure_left_slant_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_down_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_down_right_slant_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','',''}, - {'','bridger:truss_superstructure_right_slant_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", ""}, + {"", "bridger:truss_superstructure_right_slant_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_up_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_up_right_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_up_left_slant_'..bridge_colors}, + {"bridger:truss_superstructure_up_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_up_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_up_left_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_up_right_slant_'..bridge_colors}, + {"bridger:truss_superstructure_up_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_down_right_slant_'..bridge_colors, + output = "bridger:truss_superstructure_down_right_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_down_left_slant_'..bridge_colors}, + {"bridger:truss_superstructure_down_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_down_left_slant_'..bridge_colors, + output = "bridger:truss_superstructure_down_left_slant_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_down_right_slant_'..bridge_colors}, + {"bridger:truss_superstructure_down_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_end_left_slant_white', + output = "bridger:truss_superstructure_end_left_slant_white", recipe = { - {'','','bridger:bridges_diagonal_steel_rod'}, - {'','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, - {'bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod',''}, + {"", "", "bridger:bridges_diagonal_steel_rod"}, + {"", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, + {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod", ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_end_right_'..bridge_colors, + output = "bridger:truss_superstructure_end_right_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_end_left_slant_'..bridge_colors}, + {"bridger:truss_superstructure_end_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_end_left_'..bridge_colors, + output = "bridger:truss_superstructure_end_left_" .. bridge_color, recipe = { - {'bridger:truss_superstructure_end_right_slant_'..bridge_colors}, + {"bridger:truss_superstructure_end_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_mid_'..bridge_colors, - type = 'shapeless', - recipe = {'bridger:truss_superstructure_left_slant_'..bridge_colors,'bridger:truss_superstructure_right_slant_'..bridge_colors}, + output = "bridger:truss_superstructure_mid_" .. bridge_color, + type = "shapeless", + recipe = { + "bridger:truss_superstructure_left_slant_" .. bridge_color, + "bridger:truss_superstructure_right_slant_" .. bridge_color + }, }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_mid_'..bridge_colors, - type = 'shapeless', - recipe = {'bridger:truss_superstructure_tall_left_slant_'..bridge_colors,'bridger:truss_superstructure_tall_right_slant_'..bridge_colors}, + output = "bridger:truss_superstructure_tall_mid_" .. bridge_color, + type = "shapeless", + recipe = { + "bridger:truss_superstructure_tall_left_slant_" .. bridge_color, + "bridger:truss_superstructure_tall_right_slant_" .. bridge_color + }, }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_mid_'..bridge_colors, + output = "bridger:truss_superstructure_tall_mid_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_mid_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_mid_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_up_mid_'..bridge_colors, + output = "bridger:truss_superstructure_up_mid_" .. bridge_color, recipe = { - {'','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_mid_'..bridge_colors,''}, + {"", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_mid_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_down_mid_'..bridge_colors, + output = "bridger:truss_superstructure_down_mid_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','',''}, - {'','bridger:truss_superstructure_mid_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", ""}, + {"", "bridger:truss_superstructure_mid_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_left_slant_white', + output = "bridger:truss_substructure_left_slant_white", recipe = { - {'','bridger:bridges_steel_rod',''}, - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, - {'','bridger:bridges_steel_rod',''}, + {"", "bridger:bridges_steel_rod", ""}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, + {"", "bridger:bridges_steel_rod", ""}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_right_slant_'..bridge_colors, + output = "bridger:truss_substructure_right_slant_" .. bridge_color, recipe = { - {'bridger:truss_substructure_left_slant_'..bridge_colors}, + {"bridger:truss_substructure_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_left_slant_'..bridge_colors, + output = "bridger:truss_substructure_left_slant_" .. bridge_color, recipe = { - {'bridger:truss_substructure_right_slant_'..bridge_colors}, + {"bridger:truss_substructure_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_end_left_slant_white', + output = "bridger:truss_substructure_end_left_slant_white", recipe = { - {'','bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod'}, + {"", "bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_end_right_'..bridge_colors, + output = "bridger:truss_substructure_end_right_" .. bridge_color, recipe = { - {'bridger:truss_substructure_end_left_slant_'..bridge_colors}, + {"bridger:truss_substructure_end_left_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_end_left_'..bridge_colors, + output = "bridger:truss_substructure_end_left_" .. bridge_color, recipe = { - {'bridger:truss_substructure_end_right_slant_'..bridge_colors}, + {"bridger:truss_substructure_end_right_slant_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_substructure_mid_'..bridge_colors, - type = 'shapeless', - recipe = {'bridger:truss_substructure_left_slant_'..bridge_colors,'bridger:truss_substructure_right_slant_'..bridge_colors}, + output = "bridger:truss_substructure_mid_" .. bridge_color, + type = "shapeless", + recipe = { + "bridger:truss_substructure_left_slant_" .. bridge_color, + "bridger:truss_substructure_right_slant_" .. bridge_color + }, }) minetest.register_craft({ - output = 'bridger:truss_substructure_simple_white', + output = "bridger:truss_substructure_simple_white", recipe = { - {'','bridger:bridges_steel_rod',''}, - {'bridger:bridges_diagonal_steel_rod','','bridger:bridges_diagonal_steel_rod'}, - {'','bridger:bridges_steel_rod',''}, + {"", "bridger:bridges_steel_rod", ""}, + {"bridger:bridges_diagonal_steel_rod", "", "bridger:bridges_diagonal_steel_rod"}, + {"", "bridger:bridges_steel_rod", ""}, } }) minetest.register_craft({ - output = 'bridger:small_upper_chord_white', + output = "bridger:small_upper_chord_white", recipe = { - {'','bridger:bridges_steel_rod',''}, - {'','bridger:bridges_diagonal_steel_rod',''}, - {'','bridger:bridges_steel_rod',''}, + {"", "bridger:bridges_steel_rod", ""}, + {"", "bridger:bridges_diagonal_steel_rod", ""}, + {"", "bridger:bridges_steel_rod", ""}, } }) minetest.register_craft({ - output = 'bridger:medium_upper_chord_white', + output = "bridger:medium_upper_chord_white", recipe = { - {'','bridger:bridges_steel_rod',''}, - {'','bridger:bridges_diagonal_steel_rod',''}, - {'','bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod'}, + {"", "bridger:bridges_steel_rod", ""}, + {"", "bridger:bridges_diagonal_steel_rod", ""}, + {"", "bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:medium_upper_chord_white', + output = "bridger:medium_upper_chord_white", recipe = { - {'bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod',''}, - {'','bridger:bridges_diagonal_steel_rod',''}, - {'','bridger:bridges_steel_rod',''}, + {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod", ""}, + {"", "bridger:bridges_diagonal_steel_rod", ""}, + {"", "bridger:bridges_steel_rod", ""}, } }) minetest.register_craft({ - output = 'bridger:small_upper_chord_slanted_'..bridge_colors, + output = "bridger:small_upper_chord_slanted_" .. bridge_color, recipe = { - {'bridger:small_upper_chord_'..bridge_colors}, + {"bridger:small_upper_chord_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:medium_upper_chord_slanted_'..bridge_colors, + output = "bridger:medium_upper_chord_slanted_" .. bridge_color, recipe = { - {'bridger:medium_upper_chord_'..bridge_colors}, + {"bridger:medium_upper_chord_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:medium_upper_chord_slanted_'..bridge_colors, + output = "bridger:medium_upper_chord_slanted_" .. bridge_color, recipe = { - {'bridger:medium_upper_chord_'..bridge_colors}, + {"bridger:medium_upper_chord_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:small_upper_chord_'..bridge_colors, + output = "bridger:small_upper_chord_" .. bridge_color, recipe = { - {'bridger:small_upper_chord_slanted_'..bridge_colors}, + {"bridger:small_upper_chord_slanted_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:medium_upper_chord_'..bridge_colors, + output = "bridger:medium_upper_chord_" .. bridge_color, recipe = { - {'bridger:medium_upper_chord_slanted_'..bridge_colors}, + {"bridger:medium_upper_chord_slanted_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:medium_upper_chord_'..bridge_colors, + output = "bridger:medium_upper_chord_" .. bridge_color, recipe = { - {'bridger:medium_upper_chord_slanted_'..bridge_colors}, + {"bridger:medium_upper_chord_slanted_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:large_upper_chord_white', + output = "bridger:large_upper_chord_white", recipe = { - {'bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod',''}, - {'','bridger:bridges_diagonal_steel_rod',''}, - {'','bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod'}, + {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod", ""}, + {"", "bridger:bridges_diagonal_steel_rod", ""}, + {"", "bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:small_support_white', + output = "bridger:small_support_white", recipe = { - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:small_support_top_'..bridge_colors, + output = "bridger:small_support_top_" .. bridge_color, recipe = { - {'bridger:small_support_'..bridge_colors}, - {'bridger:small_support_'..bridge_colors}, + {"bridger:small_support_" .. bridge_color}, + {"bridger:small_support_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:medium_support_white', + output = "bridger:medium_support_white", recipe = { - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, - {'','','bridger:bridges_diagonal_steel_rod'}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, + {"", "", "bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:medium_support_white', + output = "bridger:medium_support_white", recipe = { - {'bridger:bridges_diagonal_steel_rod','',''}, - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, + {"bridger:bridges_diagonal_steel_rod", "", ""}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:medium_support_bot_white', + output = "bridger:medium_support_bot_white", recipe = { - {'bridger:bridges_steel_rod','bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:large_support_white', + output = "bridger:large_support_white", recipe = { - {'bridger:bridges_diagonal_steel_rod','',''}, - {'bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod'}, - {'','','bridger:bridges_diagonal_steel_rod'}, + {"bridger:bridges_diagonal_steel_rod", "", ""}, + {"bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod"}, + {"", "", "bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:large_support_bot_white', + output = "bridger:large_support_bot_white", recipe = { - {'bridger:bridges_steel_rod','','bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod", "", "bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_simple_end_right_white', + output = "bridger:truss_superstructure_simple_end_right_white", recipe = { - {'bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod'}, - {'bridger:bridges_steel_rod'}, + {"bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod"}, + {"bridger:bridges_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_simple_end_left_white', + output = "bridger:truss_superstructure_simple_end_left_white", recipe = { - {'bridger:bridges_diagonal_steel_rod'}, - {'bridger:bridges_diagonal_steel_rod'}, - {'bridger:bridges_diagonal_steel_rod'}, + {"bridger:bridges_diagonal_steel_rod"}, + {"bridger:bridges_diagonal_steel_rod"}, + {"bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_simple_white', + output = "bridger:truss_superstructure_simple_white", recipe = { - {'bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod'}, - {'bridger:bridges_diagonal_steel_rod','','bridger:bridges_diagonal_steel_rod'}, - {'bridger:bridges_diagonal_steel_rod','bridger:bridges_steel_rod','bridger:bridges_diagonal_steel_rod'}, + {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod"}, + {"bridger:bridges_diagonal_steel_rod", "", "bridger:bridges_diagonal_steel_rod"}, + {"bridger:bridges_diagonal_steel_rod", "bridger:bridges_steel_rod", "bridger:bridges_diagonal_steel_rod"}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_simple_end_right_'..bridge_colors, + output = "bridger:truss_superstructure_tall_simple_end_right_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod'}, - {'bridger:truss_superstructure_tall_simple_end_right_'..bridge_colors}, + {"bridger:bridges_steel_rod"}, + {"bridger:truss_superstructure_tall_simple_end_right_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_simple_end_left_'..bridge_colors, + output = "bridger:truss_superstructure_tall_simple_end_left_" .. bridge_color, recipe = { - {'bridger:bridges_diagonal_steel_rod'}, - {'bridger:truss_superstructure_tall_simple_end_left_'..bridge_colors}, + {"bridger:bridges_diagonal_steel_rod"}, + {"bridger:truss_superstructure_tall_simple_end_left_" .. bridge_color}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_simple_'..bridge_colors, + output = "bridger:truss_superstructure_tall_simple_" .. bridge_color, recipe = { - {'bridger:bridges_diagonal_steel_rod','','bridger:bridges_diagonal_steel_rod'}, - {'','bridger:truss_superstructure_simple_'..bridge_colors,''}, + {"bridger:bridges_diagonal_steel_rod", "", "bridger:bridges_diagonal_steel_rod"}, + {"", "bridger:truss_superstructure_simple_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_tall_simple_'..bridge_colors, + output = "bridger:truss_superstructure_tall_simple_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_simple_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_simple_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_up_simple_'..bridge_colors, + output = "bridger:truss_superstructure_up_simple_" .. bridge_color, recipe = { - {'','','bridger:bridges_steel_rod'}, - {'','bridger:truss_superstructure_simple_'..bridge_colors,''}, + {"", "", "bridger:bridges_steel_rod"}, + {"", "bridger:truss_superstructure_simple_" .. bridge_color, ""}, } }) minetest.register_craft({ - output = 'bridger:truss_superstructure_down_mid_'..bridge_colors, + output = "bridger:truss_superstructure_down_mid_" .. bridge_color, recipe = { - {'bridger:bridges_steel_rod','',''}, - {'','bridger:truss_superstructure_simple_'..bridge_colors,''}, + {"bridger:bridges_steel_rod", "", ""}, + {"", "bridger:truss_superstructure_simple_" .. bridge_color, ""}, } }) end @@ -684,334 +701,343 @@ if minetest.settings:get_bool("bridger_enable_trusses") then } for c in ipairs(bridge_nodes) do - local bridge_nodes = bridge_nodes[c] + local bridge_node = bridge_nodes[c] minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'white', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'yellow','dye:white'}, + output = "bridger:" .. bridge_node .. "white", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "yellow", "dye:white"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'white', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'steel','dye:white'}, + output = "bridger:" .. bridge_node .. "white", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "steel", "dye:white"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'white', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'green','dye:white'}, + output = "bridger:" .. bridge_node .. "white", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "green", "dye:white"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'white', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'red','dye:white'}, + output = "bridger:" .. bridge_node .. "white", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "red", "dye:white"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'red', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'white','dye:red'}, + output = "bridger:" .. bridge_node .. "red", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "white", "dye:red"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'red', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'steel','dye:red'}, + output = "bridger:" .. bridge_node .. "red", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "steel", "dye:red"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'red', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'green','dye:red'}, + output = "bridger:" .. bridge_node .. "red", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "green", "dye:red"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'red', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'yellow','dye:red'}, + output = "bridger:" .. bridge_node .. "red", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "yellow", "dye:red"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'green', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'white','dye:green'}, + output = "bridger:" .. bridge_node .. "green", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "white", "dye:green"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'green', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'steel','dye:green'}, + output = "bridger:" .. bridge_node .. "green", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "steel", "dye:green"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'green', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'yellow','dye:green'}, + output = "bridger:" .. bridge_node .. "green", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "yellow", "dye:green"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'green', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'red','dye:green'}, + output = "bridger:" .. bridge_node .. "green", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "red", "dye:green"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'white','dye:black'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "white", "dye:black"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'yellow','dye:black'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "yellow", "dye:black"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'green','dye:black'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "green", "dye:black"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'red','dye:black'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "red", "dye:black"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'white','dye:dark_grey'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "white", "dye:dark_grey"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'yellow','dye:dark_grey'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "yellow", "dye:dark_grey"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'green','dye:dark_grey'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "green", "dye:dark_grey"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'steel', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'red','dye:dark_grey'}, + output = "bridger:" .. bridge_node .. "steel", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "red", "dye:dark_grey"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'yellow', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'white','dye:yellow'}, + output = "bridger:" .. bridge_node .. "yellow", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "white", "dye:yellow"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'yellow', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'steel','dye:yellow'}, + output = "bridger:" .. bridge_node .. "yellow", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "steel", "dye:yellow"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'yellow', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'green','dye:yellow'}, + output = "bridger:" .. bridge_node .. "yellow", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "green", "dye:yellow"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'yellow', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'red','dye:yellow'}, + output = "bridger:" .. bridge_node .. "yellow", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "red", "dye:yellow"}, }) minetest.register_craft({ - output = 'bridger:'..bridge_nodes..'red', - type = 'shapeless', - recipe = {'bridger:'..bridge_nodes..'yellow','dye:red'}, + output = "bridger:" .. bridge_node .. "red", + type = "shapeless", + recipe = {"bridger:" .. bridge_node .. "yellow", "dye:red"}, }) end end -if minetest.settings:get_bool("bridger_enable_trestles") then +if minetest.settings:get_bool("bridger_enable_trestles", true) then minetest.register_craft({ - output = 'bridger:trestle_support_small', + output = "bridger:trestle_support_small", recipe = { - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:trestle_support_small', + output = "bridger:trestle_support_small", recipe = { - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','group:stick','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "group:stick", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:trestle_deck', + output = "bridger:trestle_deck", recipe = { - {'bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:trestle_side', + output = "bridger:trestle_side", recipe = { - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'','group:stick',''}, - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"", "group:stick", ""}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:trestle_substructure_small', + output = "bridger:trestle_substructure_small", recipe = { - {'group:stick','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'','group:stick','bridger:bridges_wooden_rod'}, - {'','','group:stick'}, + {"group:stick", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"", "group:stick", "bridger:bridges_wooden_rod"}, + {"", "", "group:stick"}, } }) minetest.register_craft({ - output = 'bridger:trestle_substructure_large', + output = "bridger:trestle_substructure_large", recipe = { - {'group:stick','','bridger:bridges_wooden_rod'}, - {'group:stick','group:stick','bridger:bridges_wooden_rod'}, - {'','group:stick','group:stick'}, + {"group:stick", "", "bridger:bridges_wooden_rod"}, + {"group:stick", "group:stick", "bridger:bridges_wooden_rod"}, + {"", "group:stick", "group:stick"}, } }) minetest.register_craft({ - output = 'bridger:lattice_truss', + output = "bridger:lattice_truss", recipe = { - {'group:stick','','group:stick'}, - {'','bridger:bridges_wooden_rod',''}, - {'group:stick','','group:stick'}, + {"group:stick", "", "group:stick"}, + {"", "bridger:bridges_wooden_rod", ""}, + {"group:stick", "", "group:stick"}, } }) minetest.register_craft({ - output = 'bridger:deck_wood', + output = "bridger:deck_wood", recipe = { - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, } }) end -if minetest.settings:get_bool("bridger_enable_wooden_bridges") then +if minetest.settings:get_bool("bridger_enable_wooden_bridges", true) then minetest.register_craft({ - output = 'bridger:small_beam', + output = "bridger:small_beam", recipe = { - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'','group:wood',''}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:small_beam_mid', + output = "bridger:small_beam_mid", recipe = { - {'','bridger:bridges_wooden_rod',''}, - {'','group:wood',''}, + {"", "bridger:bridges_wooden_rod", ""}, + {"", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:small_beam_end', + output = "bridger:small_beam_end", recipe = { - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, - {'','group:wood',''}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, + {"", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:small_beam_3', + output = "bridger:small_beam_corner", recipe = { - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, - {'','group:wood',''}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "", ""}, + {"", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:small_beam_4', + output = "bridger:small_beam_3", recipe = { - {'bridger:bridges_wooden_rod','','bridger:bridges_wooden_rod'}, - {'','',''}, - {'','group:wood',''}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, + {"", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:small_beam_stair', + output = "bridger:small_beam_4", recipe = { - {'','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','','group:wood'}, - {'bridger:bridges_wooden_rod','group:wood',''}, + {"bridger:bridges_wooden_rod", "", "bridger:bridges_wooden_rod"}, + {"", "", ""}, + {"", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:large_beam', + output = "bridger:small_beam_stair", recipe = { - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','group:wood','bridger:bridges_wooden_rod'}, + {"", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "", "group:wood"}, + {"bridger:bridges_wooden_rod", "group:wood", ""}, } }) minetest.register_craft({ - output = 'bridger:large_fancy_beam', + output = "bridger:large_beam", recipe = { - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','group:wood','bridger:bridges_wooden_rod'}, - {'bridger:bridges_wooden_rod','bridger:bridges_wooden_rod','bridger:bridges_wooden_rod'}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "group:wood", "bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:large_beam_swivel_normal', + output = "bridger:large_fancy_beam", recipe = { - {'bridger:large_beam'}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "group:wood", "bridger:bridges_wooden_rod"}, + {"bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod", "bridger:bridges_wooden_rod"}, } }) minetest.register_craft({ - output = 'bridger:large_beam', + output = "bridger:large_beam_swivel_normal", recipe = { - {'bridger:large_beam_swivel_normal'}, + {"bridger:large_beam"}, } }) minetest.register_craft({ - output = 'bridger:large_drawbridge_normal', + output = "bridger:large_beam", recipe = { - {'bridger:small_beam','bridger:small_beam'}, + {"bridger:large_beam_swivel_normal"}, } }) minetest.register_craft({ - output = 'bridger:small_beam 2', + output = "bridger:large_drawbridge_normal", recipe = { - {'bridger:large_drawbridge_normal'}, + {"bridger:small_beam", "bridger:small_beam"}, } }) minetest.register_craft({ - output = 'bridger:foundation 3', + output = "bridger:small_beam 2", recipe = { - {'','default:clay',''}, - {'default:clay','default:clay','default:clay'}, + {"bridger:large_drawbridge_normal"}, } }) -end \ No newline at end of file + + minetest.register_craft({ + output = "bridger:foundation 3", + recipe = { + {"", "default:clay", ""}, + {"default:clay", "default:clay", "default:clay"}, + } + }) +end diff --git a/mods/bridger/description.txt b/mods/bridger/description.txt index 4b827bae..8f7b41cd 100644 --- a/mods/bridger/description.txt +++ b/mods/bridger/description.txt @@ -1 +1 @@ -A mod that adds various bridge nodes to Minetest. \ No newline at end of file +Adds a large number of advanced nodes conducive to building large, industrial bridges. diff --git a/mods/bridger/init.lua b/mods/bridger/init.lua index 0cc38830..2ad2a066 100644 --- a/mods/bridger/init.lua +++ b/mods/bridger/init.lua @@ -3,7 +3,6 @@ minetest.register_node("bridger:scaffolding", { drawtype = "glasslike_framed_optional", tiles = {"bridges_scaffolding.png", "bridges_scaffolding_detail.png"}, paramtype = "light", - paramtype2 = "glasslikeliquidlevel", sunlight_propagates = true, walkable = false, climbable = true, @@ -12,9 +11,9 @@ minetest.register_node("bridger:scaffolding", { }) -dofile(minetest.get_modpath("bridger").."/nodes.lua") -dofile(minetest.get_modpath("bridger").."/crafts.lua") +dofile(minetest.get_modpath("bridger") .. "/nodes.lua") +dofile(minetest.get_modpath("bridger") .. "/crafts.lua") if minetest.settings:get_bool("Bridger_enable_alias") then - dofile(minetest.get_modpath("bridger").."/alias.lua") -end \ No newline at end of file + dofile(minetest.get_modpath("bridger") .. "/alias.lua") +end diff --git a/mods/bridger/mod.conf b/mods/bridger/mod.conf index 2de2cde5..49270286 100644 --- a/mods/bridger/mod.conf +++ b/mods/bridger/mod.conf @@ -1 +1,4 @@ -name = bridger \ No newline at end of file +name = bridger +depends = default +optional_depends = stairs, moreblocks, mesecons +description = Adds a large number of advanced nodes conducive to building large, industrial bridges. diff --git a/mods/bridger/nodes.lua b/mods/bridger/nodes.lua index 418ea0be..37f3842f 100644 --- a/mods/bridger/nodes.lua +++ b/mods/bridger/nodes.lua @@ -23,8 +23,7 @@ local function rotate_and_place(itemstack, placer, pointed_thing) return minetest.item_place(itemstack, placer, pointed_thing, param2) end -if not minetest.settings:get_bool("bridger_disable_trusses") then - +if minetest.settings:get_bool("bridger_enable_trusses", true) then local bridge_colors = { {"Green", "green"}, {"Red", "red"}, @@ -35,7 +34,7 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then for _, row in ipairs(bridge_colors) do local bridge_desc = row[1] - local bridge_colors = row[2] + local bridge_color = row[2] minetest.register_node("bridger:foundation", { description = "Bridge Foundation", @@ -46,10 +45,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then node_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.75, 0.5, 0.501, 0.75}, -- NodeBox1 - {-0.501, -0.5, -0.501, 0.501, 0.6876, 0.501}, -- NodeBox2 - {-0.75, -0.5, -0.5, 0.75, 0.501, 0.5}, -- NodeBox3 - {-0.75, -0.5, -0.75, 0.75, 0.499, 0.75}, -- NodeBox4 + {-0.5, -0.5, -0.75, 0.5, 0.501, 0.75}, + {-0.501, -0.5, -0.501, 0.501, 0.6876, 0.501}, + {-0.75, -0.5, -0.5, 0.75, 0.501, 0.5}, + {-0.75, -0.5, -0.75, 0.75, 0.499, 0.75}, }, }, selection_box = { @@ -62,39 +61,39 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_stone_defaults(), }) - minetest.register_node("bridger:block_"..bridge_colors, { - description = bridge_desc.." Block", + minetest.register_node("bridger:block_" .. bridge_color, { + description = bridge_desc .. " Block", drawtype = "normal", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", groups = {cracky=3}, sounds = default.node_sound_metal_defaults(), }) if minetest.get_modpath("moreblocks") then - stairsplus:register_all("bridger", "block_"..bridge_colors, "bridger:block_"..bridge_colors, { + stairsplus:register_all("bridger", "block_" .. bridge_color, "bridger:block_" .. bridge_color, { description = bridge_desc, - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, groups = {cracky=3}, sounds = default.node_sound_metal_defaults(), }) - - minetest.register_alias("bridger:step_"..bridge_colors, "bridger:panel_block_"..bridge_colors) + + minetest.register_alias("bridger:step_" .. bridge_color, "bridger:panel_block_" .. bridge_color) elseif minetest.get_modpath("stairs") then stairs.register_stair_and_slab( - "block_"..bridge_colors, - "bridger:block_"..bridge_colors, + "block_" .. bridge_color, + "bridger:block_" .. bridge_color, {cracky=3}, - {"bridges_"..bridge_colors..".png"}, - bridge_desc.." Stair", - bridge_desc.." Slab", + {"bridges_" .. bridge_color .. ".png"}, + bridge_desc .. " Stair", + bridge_desc .. " Slab", default.node_sound_metal_defaults() ) - minetest.register_node("bridger:step_"..bridge_colors, { - description = bridge_desc.." Step", + minetest.register_node("bridger:step_" .. bridge_color, { + description = bridge_desc .. " Step", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", node_box = { @@ -114,10 +113,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then }) end - minetest.register_node("bridger:suspension_top_"..bridge_colors, { - description = bridge_desc.." Cable Top", + minetest.register_node("bridger:suspension_top_" .. bridge_color, { + description = bridge_desc .. " Cable Top", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", node_box = { @@ -137,10 +136,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then end, }) - minetest.register_node("bridger:suspension_cable_"..bridge_colors, { - description = bridge_desc.." Cable", + minetest.register_node("bridger:suspension_cable_" .. bridge_color, { + description = bridge_desc .. " Cable", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", node_box = { type = "fixed", @@ -152,10 +151,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:deck_"..bridge_colors, { - description = bridge_desc.." Deck", + minetest.register_node("bridger:deck_" .. bridge_color, { + description = bridge_desc .. " Deck", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", sunlight_propagates = true, node_box = { @@ -174,10 +173,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:deck_edge_"..bridge_colors, { - description = bridge_desc.." Deck Edge", + minetest.register_node("bridger:deck_edge_" .. bridge_color, { + description = bridge_desc .. " Deck Edge", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -198,44 +197,44 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:train_deck_"..bridge_colors, { - description = bridge_desc.." Train Deck", + minetest.register_node("bridger:train_deck_" .. bridge_color, { + description = bridge_desc .. " Train Deck", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {0.375, 0.375, 0.375, 0.5, 0.501, 0.5}, -- NodeBox1 - {0.3125, 0.375, 0.3125, 0.4375, 0.501, 0.4375}, -- NodeBox2 - {0.25, 0.375, 0.25, 0.375, 0.501, 0.375}, -- NodeBox3 - {0.1875, 0.375, 0.1875, 0.3125, 0.501, 0.3125}, -- NodeBox4 - {0.125, 0.375, 0.125, 0.25, 0.501, 0.25}, -- NodeBox5 - {0.0625, 0.375, 0.0625, 0.1875, 0.501, 0.1875}, -- NodeBox6 - {0, 0.375, 0, 0.125, 0.501, 0.125}, -- NodeBox7 - {-0.0625, 0.375, -0.0625, 0.0625, 0.501, 0.0625}, -- NodeBox8 - {-0.125, 0.375, -0.125, 0, 0.501, 0}, -- NodeBox9 - {-0.1875, 0.375, -0.1875, -0.0625, 0.501, -0.0625}, -- NodeBox10 - {-0.25, 0.375, -0.25, -0.125, 0.501, -0.125}, -- NodeBox11 - {-0.3125, 0.375, -0.3125, -0.1875, 0.501, -0.1875}, -- NodeBox12 - {-0.4375, 0.375, -0.4375, -0.3125, 0.501, -0.3125}, -- NodeBox13 - {-0.375, 0.375, -0.375, -0.25, 0.501, -0.25}, -- NodeBox14 - {-0.5, 0.375, -0.5, -0.375, 0.501, -0.375}, -- NodeBox15 - {-0.5, 0.375, 0.375, -0.375, 0.501, 0.5}, -- NodeBox16 - {-0.4375, 0.375, 0.3125, -0.3125, 0.501, 0.4375}, -- NodeBox17 - {-0.375, 0.375, 0.25, -0.25, 0.501, 0.375}, -- NodeBox18 - {-0.3125, 0.375, 0.1875, -0.1875, 0.501, 0.3125}, -- NodeBox19 - {-0.25, 0.375, 0.125, -0.125, 0.501, 0.25}, -- NodeBox20 - {-0.1875, 0.375, 0.0625, -0.0625, 0.501, 0.1875}, -- NodeBox21 - {-0.125, 0.375, 0, 0, 0.501, 0.125}, -- NodeBox22 - {0, 0.375, -0.125, 0.125, 0.501, 0}, -- NodeBox23 - {0.0625, 0.375, -0.1875, 0.1875, 0.501, -0.0625}, -- NodeBox24 - {0.125, 0.375, -0.25, 0.25, 0.501, -0.125}, -- NodeBox25 - {0.1875, 0.375, -0.3125, 0.3125, 0.501, -0.1875}, -- NodeBox26 - {0.25, 0.375, -0.375, 0.375, 0.501, -0.25}, -- NodeBox27 - {0.3125, 0.375, -0.4375, 0.4375, 0.501, -0.3125}, -- NodeBox28 - {0.375, 0.375, -0.5, 0.5, 0.501, -0.375}, -- NodeBox29 + {0.375, 0.375, 0.375, 0.5, 0.501, 0.5}, + {0.3125, 0.375, 0.3125, 0.4375, 0.501, 0.4375}, + {0.25, 0.375, 0.25, 0.375, 0.501, 0.375}, + {0.1875, 0.375, 0.1875, 0.3125, 0.501, 0.3125}, + {0.125, 0.375, 0.125, 0.25, 0.501, 0.25}, + {0.0625, 0.375, 0.0625, 0.1875, 0.501, 0.1875}, + {0, 0.375, 0, 0.125, 0.501, 0.125}, + {-0.0625, 0.375, -0.0625, 0.0625, 0.501, 0.0625}, + {-0.125, 0.375, -0.125, 0, 0.501, 0}, + {-0.1875, 0.375, -0.1875, -0.0625, 0.501, -0.0625}, + {-0.25, 0.375, -0.25, -0.125, 0.501, -0.125}, + {-0.3125, 0.375, -0.3125, -0.1875, 0.501, -0.1875}, + {-0.4375, 0.375, -0.4375, -0.3125, 0.501, -0.3125}, + {-0.375, 0.375, -0.375, -0.25, 0.501, -0.25}, + {-0.5, 0.375, -0.5, -0.375, 0.501, -0.375}, + {-0.5, 0.375, 0.375, -0.375, 0.501, 0.5}, + {-0.4375, 0.375, 0.3125, -0.3125, 0.501, 0.4375}, + {-0.375, 0.375, 0.25, -0.25, 0.501, 0.375}, + {-0.3125, 0.375, 0.1875, -0.1875, 0.501, 0.3125}, + {-0.25, 0.375, 0.125, -0.125, 0.501, 0.25}, + {-0.1875, 0.375, 0.0625, -0.0625, 0.501, 0.1875}, + {-0.125, 0.375, 0, 0, 0.501, 0.125}, + {0, 0.375, -0.125, 0.125, 0.501, 0}, + {0.0625, 0.375, -0.1875, 0.1875, 0.501, -0.0625}, + {0.125, 0.375, -0.25, 0.25, 0.501, -0.125}, + {0.1875, 0.375, -0.3125, 0.3125, 0.501, -0.1875}, + {0.25, 0.375, -0.375, 0.375, 0.501, -0.25}, + {0.3125, 0.375, -0.4375, 0.4375, 0.501, -0.3125}, + {0.375, 0.375, -0.5, 0.5, 0.501, -0.375}, }, }, selection_box = { @@ -248,22 +247,22 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:girder_mid_"..bridge_colors, { - description = bridge_desc.." Girder Middle", + minetest.register_node("bridger:girder_mid_" .. bridge_color, { + description = bridge_desc .. " Girder Middle", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.4375, 0.5, 0.5, 0.5}, -- NodeBox194 - {-0.5, 0.4375, 0.375, 0.5, 0.5, 0.5}, -- NodeBox195 - {0.46875, -0.5, 0.375, 0.5, 0.5, 0.5}, -- NodeBox196 - {-0.5, -0.5, 0.375, -0.46875, 0.5, 0.5}, -- NodeBox197 - {-0.5, -0.5, 0.375, 0.5, -0.4375, 0.5}, -- NodeBox198 - {-0.5, -0.625, 0.4375, 0.5, -0.5, 0.5}, -- NodeBox213 + {-0.5, -0.5, 0.4375, 0.5, 0.5, 0.5}, + {-0.5, 0.4375, 0.375, 0.5, 0.5, 0.5}, + {0.46875, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.46875, 0.5, 0.5}, + {-0.5, -0.5, 0.375, 0.5, -0.4375, 0.5}, + {-0.5, -0.625, 0.4375, 0.5, -0.5, 0.5}, }, }, selection_box = { @@ -276,34 +275,34 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:girder_right_"..bridge_colors, { - description = bridge_desc.." Girder Right End", + minetest.register_node("bridger:girder_right_" .. bridge_color, { + description = bridge_desc .. " Girder Right End", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, 0.4375, 0.375, -0.25, 0.5, 0.5}, -- NodeBox195 - {-0.5, -0.5, 0.375, -0.46875, 0.5, 0.5}, -- NodeBox197 - {-0.5, -0.5, 0.375, 0.5, -0.4375, 0.5}, -- NodeBox198 - {-0.3125, 0.375, 0.375, -0.0625, 0.4375, 0.5}, -- NodeBox199 - {-0.125, 0.3125, 0.375, 0.0625, 0.375, 0.5}, -- NodeBox200 - {0, 0.25, 0.375, 0.125, 0.3125, 0.5}, -- NodeBox201 - {0.4375, -0.5, 0.375, 0.5, -0.25, 0.5}, -- NodeBox202 - {0.375, -0.3125, 0.375, 0.4375, -0.0625, 0.5}, -- NodeBox203 - {0.3125, -0.125, 0.375, 0.375, 0.0625, 0.5}, -- NodeBox204 - {0.25, 0, 0.375, 0.3125, 0.125, 0.5}, -- NodeBox205 - {0.1875, 0.0625, 0.375, 0.25, 0.1875, 0.5}, -- NodeBox206 - {0.125, 0.125, 0.375, 0.1875, 0.25, 0.5}, -- NodeBox207 - {0.0625, 0.1875, 0.375, 0.1875, 0.25, 0.5}, -- NodeBox208 - {-0.5, -0.5, 0.4375, -0.0625, 0.4375, 0.5}, -- NodeBox209 - {-0.5, -0.5, 0.4375, 0.4375, -0.0625, 0.5}, -- NodeBox210 - {-0.5, -0.5, 0.4375, 0.125, 0.3125, 0.5}, -- NodeBox211 - {-0.5, -0.5, 0.4375, 0.3125, 0.125, 0.5}, -- NodeBox212 - {-0.5, -0.625, 0.4375, 0.5, -0.5, 0.5}, -- NodeBox213 + {-0.5, 0.4375, 0.375, -0.25, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.46875, 0.5, 0.5}, + {-0.5, -0.5, 0.375, 0.5, -0.4375, 0.5}, + {-0.3125, 0.375, 0.375, -0.0625, 0.4375, 0.5}, + {-0.125, 0.3125, 0.375, 0.0625, 0.375, 0.5}, + {0, 0.25, 0.375, 0.125, 0.3125, 0.5}, + {0.4375, -0.5, 0.375, 0.5, -0.25, 0.5}, + {0.375, -0.3125, 0.375, 0.4375, -0.0625, 0.5}, + {0.3125, -0.125, 0.375, 0.375, 0.0625, 0.5}, + {0.25, 0, 0.375, 0.3125, 0.125, 0.5}, + {0.1875, 0.0625, 0.375, 0.25, 0.1875, 0.5}, + {0.125, 0.125, 0.375, 0.1875, 0.25, 0.5}, + {0.0625, 0.1875, 0.375, 0.1875, 0.25, 0.5}, + {-0.5, -0.5, 0.4375, -0.0625, 0.4375, 0.5}, + {-0.5, -0.5, 0.4375, 0.4375, -0.0625, 0.5}, + {-0.5, -0.5, 0.4375, 0.125, 0.3125, 0.5}, + {-0.5, -0.5, 0.4375, 0.3125, 0.125, 0.5}, + {-0.5, -0.625, 0.4375, 0.5, -0.5, 0.5}, }, }, selection_box = { @@ -316,34 +315,34 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:girder_left_"..bridge_colors, { - description = bridge_desc.." Girder Left End", + minetest.register_node("bridger:girder_left_" .. bridge_color, { + description = bridge_desc .. " Girder Left End", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, + tiles = {"bridges_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {0.25, 0.4375, 0.375, 0.5, 0.5, 0.5}, -- NodeBox195 - {0.46875, -0.5, 0.375, 0.5, 0.5, 0.5}, -- NodeBox197 - {-0.5, -0.5, 0.375, 0.5, -0.4375, 0.5}, -- NodeBox198 - {0.0625, 0.375, 0.375, 0.3125, 0.4375, 0.5}, -- NodeBox199 - {-0.0625, 0.3125, 0.375, 0.125, 0.375, 0.5}, -- NodeBox200 - {-0.125, 0.25, 0.375, -0, 0.3125, 0.5}, -- NodeBox201 - {-0.5, -0.5, 0.375, -0.4375, -0.25, 0.5}, -- NodeBox202 - {-0.4375, -0.3125, 0.375, -0.375, -0.0625, 0.5}, -- NodeBox203 - {-0.375, -0.125, 0.375, -0.3125, 0.0625, 0.5}, -- NodeBox204 - {-0.3125, 0, 0.375, -0.25, 0.125, 0.5}, -- NodeBox205 - {-0.25, 0.0625, 0.375, -0.1875, 0.1875, 0.5}, -- NodeBox206 - {-0.1875, 0.125, 0.375, -0.125, 0.25, 0.5}, -- NodeBox207 - {-0.1875, 0.1875, 0.375, -0.0625, 0.25, 0.5}, -- NodeBox208 - {0.0625, -0.5, 0.4375, 0.5, 0.4375, 0.5}, -- NodeBox209 - {-0.4375, -0.5, 0.4375, 0.5, -0.0625, 0.5}, -- NodeBox210 - {-0.125, -0.5, 0.4375, 0.5, 0.3125, 0.5}, -- NodeBox211 - {-0.3125, -0.5, 0.4375, 0.5, 0.125, 0.5}, -- NodeBox212 - {-0.5, -0.625, 0.4375, 0.5, -0.5, 0.5}, -- NodeBox213 + {0.25, 0.4375, 0.375, 0.5, 0.5, 0.5}, + {0.46875, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, 0.5, -0.4375, 0.5}, + {0.0625, 0.375, 0.375, 0.3125, 0.4375, 0.5}, + {-0.0625, 0.3125, 0.375, 0.125, 0.375, 0.5}, + {-0.125, 0.25, 0.375, -0, 0.3125, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, -0.25, 0.5}, + {-0.4375, -0.3125, 0.375, -0.375, -0.0625, 0.5}, + {-0.375, -0.125, 0.375, -0.3125, 0.0625, 0.5}, + {-0.3125, 0, 0.375, -0.25, 0.125, 0.5}, + {-0.25, 0.0625, 0.375, -0.1875, 0.1875, 0.5}, + {-0.1875, 0.125, 0.375, -0.125, 0.25, 0.5}, + {-0.1875, 0.1875, 0.375, -0.0625, 0.25, 0.5}, + {0.0625, -0.5, 0.4375, 0.5, 0.4375, 0.5}, + {-0.4375, -0.5, 0.4375, 0.5, -0.0625, 0.5}, + {-0.125, -0.5, 0.4375, 0.5, 0.3125, 0.5}, + {-0.3125, -0.5, 0.4375, 0.5, 0.125, 0.5}, + {-0.5, -0.625, 0.4375, 0.5, -0.5, 0.5}, }, }, selection_box = { @@ -356,53 +355,55 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Right Slant", + minetest.register_node("bridger:truss_superstructure_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox215 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox217 - {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, -- NodeBox218 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, }, }, selection_box = { @@ -421,53 +422,55 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Left Slant", + minetest.register_node("bridger:truss_superstructure_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox215 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox217 - {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, -- NodeBox218 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, }, }, selection_box = { @@ -486,51 +489,53 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_end_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure End Right Slant", + minetest.register_node("bridger:truss_superstructure_end_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure End Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_end_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_end_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_end_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_end_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox215 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, }, }, selection_box = { @@ -549,51 +554,53 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_end_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure End Left Slant", + minetest.register_node("bridger:truss_superstructure_end_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure End Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_end_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_end_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_end_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_end_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox217 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, }, }, selection_box = { @@ -612,84 +619,86 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_mid_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Middle", + minetest.register_node("bridger:truss_superstructure_mid_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Middle", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_mid.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_mid.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_mid.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_mid.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox215 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox217 - {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, -- NodeBox218 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, }, }, selection_box = { @@ -708,51 +717,53 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_tall_right_slant_"..bridge_colors, { - description = bridge_desc.." Tall Truss Superstructure Right Slant", + minetest.register_node("bridger:truss_superstructure_tall_right_slant_" .. bridge_color, { + description = bridge_desc .. " Tall Truss Superstructure Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, -- NodeBox4 - {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, -- NodeBox5 - {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, -- NodeBox6 - {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, -- NodeBox7 - {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, -- NodeBox8 - {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, -- NodeBox9 - {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, -- NodeBox10 - {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, -- NodeBox11 - {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, -- NodeBox12 - {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, -- NodeBox13 - {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, -- NodeBox14 - {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, -- NodeBox15 - {0.25, 2, 0.375, 0.375, 2.125, 0.5}, -- NodeBox16 - {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, -- NodeBox17 - {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, -- NodeBox20 - {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, -- NodeBox21 - {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, -- NodeBox22 - {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, -- NodeBox23 - {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, -- NodeBox24 - {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, -- NodeBox25 - {0.875, 0.8125, 0.375, 1, 1, 0.5}, -- NodeBox26 - {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, -- NodeBox27 - {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, -- NodeBox28 - {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, -- NodeBox29 - {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, -- NodeBox30 - {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, -- NodeBox31 - {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, -- NodeBox32 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, + {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, + {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, + {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, + {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, + {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, + {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, + {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, + {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, + {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, + {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, + {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, + {0.25, 2, 0.375, 0.375, 2.125, 0.5}, + {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, + {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, + {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, + {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, + {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, + {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, + {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, + {0.875, 0.8125, 0.375, 1, 1, 0.5}, + {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, + {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, + {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, + {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, + {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, }, }, selection_box = { @@ -771,51 +782,53 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_tall_left_slant_"..bridge_colors, { - description = bridge_desc.." Tall Truss Superstructure Left Slant", + minetest.register_node("bridger:truss_superstructure_tall_left_slant_" .. bridge_color, { + description = bridge_desc .. " Tall Truss Superstructure Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, -- NodeBox4 - {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, -- NodeBox5 - {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, -- NodeBox6 - {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, -- NodeBox7 - {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, -- NodeBox8 - {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, -- NodeBox9 - {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, -- NodeBox10 - {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, -- NodeBox11 - {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, -- NodeBox12 - {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, -- NodeBox13 - {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, -- NodeBox14 - {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, -- NodeBox15 - {0.625, 2, 0.375, 0.75, 2.125, 0.5}, -- NodeBox16 - {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, -- NodeBox17 - {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, -- NodeBox20 - {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, -- NodeBox21 - {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, -- NodeBox22 - {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, -- NodeBox23 - {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, -- NodeBox24 - {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox25 - {0, 0.8125, 0.375, 0.125, 1, 0.5}, -- NodeBox26 - {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, -- NodeBox27 - {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, -- NodeBox28 - {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, -- NodeBox29 - {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, -- NodeBox30 - {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, -- NodeBox31 - {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox32 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, + {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, + {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, + {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, + {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, + {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, + {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, + {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, + {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, + {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, + {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, + {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, + {0.625, 2, 0.375, 0.75, 2.125, 0.5}, + {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, + {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, + {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, + {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, + {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, + {0, 0.8125, 0.375, 0.125, 1, 0.5}, + {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, + {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, + {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, + {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, + {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, }, }, selection_box = { @@ -834,80 +847,82 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_tall_mid_"..bridge_colors, { - description = bridge_desc.." Tall Truss Superstructure Middle", + minetest.register_node("bridger:truss_superstructure_tall_mid_" .. bridge_color, { + description = bridge_desc .. " Tall Truss Superstructure Middle", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_mid.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_mid.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_mid.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_mid.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, -- NodeBox4 - {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, -- NodeBox5 - {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, -- NodeBox6 - {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, -- NodeBox7 - {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, -- NodeBox8 - {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, -- NodeBox9 - {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, -- NodeBox10 - {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, -- NodeBox11 - {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, -- NodeBox12 - {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, -- NodeBox13 - {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, -- NodeBox14 - {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, -- NodeBox15 - {0.625, 2, 0.375, 0.75, 2.125, 0.5}, -- NodeBox16 - {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, -- NodeBox17 - {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, -- NodeBox20 - {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, -- NodeBox21 - {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, -- NodeBox22 - {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, -- NodeBox23 - {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, -- NodeBox24 - {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox25 - {0, 0.8125, 0.375, 0.125, 1, 0.5}, -- NodeBox26 - {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, -- NodeBox27 - {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, -- NodeBox28 - {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, -- NodeBox29 - {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, -- NodeBox30 - {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, -- NodeBox31 - {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox32 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox33 - {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, -- NodeBox5 - {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, -- NodeBox6 - {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, -- NodeBox7 - {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, -- NodeBox8 - {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, -- NodeBox9 - {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, -- NodeBox10 - {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, -- NodeBox11 - {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, -- NodeBox12 - {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, -- NodeBox13 - {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, -- NodeBox14 - {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, -- NodeBox15 - {0.25, 2, 0.375, 0.375, 2.125, 0.5}, -- NodeBox16 - {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, -- NodeBox17 - {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, -- NodeBox20 - {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, -- NodeBox21 - {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, -- NodeBox22 - {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, -- NodeBox23 - {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, -- NodeBox24 - {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, -- NodeBox25 - {0.875, 0.8125, 0.375, 1, 1, 0.5}, -- NodeBox26 - {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, -- NodeBox27 - {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, -- NodeBox28 - {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, -- NodeBox29 - {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, -- NodeBox30 - {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, -- NodeBox31 - {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, -- NodeBox32 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, + {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, + {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, + {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, + {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, + {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, + {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, + {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, + {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, + {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, + {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, + {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, + {0.625, 2, 0.375, 0.75, 2.125, 0.5}, + {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, + {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, + {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, + {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, + {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, + {0, 0.8125, 0.375, 0.125, 1, 0.5}, + {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, + {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, + {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, + {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, + {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, + {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, + {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, + {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, + {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, + {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, + {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, + {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, + {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, + {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, + {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, + {0.25, 2, 0.375, 0.375, 2.125, 0.5}, + {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, + {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, + {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, + {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, + {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, + {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, + {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, + {0.875, 0.8125, 0.375, 1, 1, 0.5}, + {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, + {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, + {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, + {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, + {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, }, }, selection_box = { @@ -926,79 +941,81 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_tall_simple_"..bridge_colors, { - description = bridge_desc.." Tall Truss Superstructure Middle Simple", + minetest.register_node("bridger:truss_superstructure_tall_simple_" .. bridge_color, { + description = bridge_desc .. " Tall Truss Superstructure Middle Simple", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_simple.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_simple.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_simple.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_simple.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, -- NodeBox5 - {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, -- NodeBox6 - {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, -- NodeBox7 - {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, -- NodeBox8 - {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, -- NodeBox9 - {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, -- NodeBox10 - {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, -- NodeBox11 - {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, -- NodeBox12 - {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, -- NodeBox13 - {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, -- NodeBox14 - {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, -- NodeBox15 - {0.625, 2, 0.375, 0.75, 2.125, 0.5}, -- NodeBox16 - {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, -- NodeBox17 - {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, -- NodeBox20 - {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, -- NodeBox21 - {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, -- NodeBox22 - {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, -- NodeBox23 - {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, -- NodeBox24 - {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox25 - {0, 0.8125, 0.375, 0.125, 1, 0.5}, -- NodeBox26 - {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, -- NodeBox27 - {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, -- NodeBox28 - {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, -- NodeBox29 - {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, -- NodeBox30 - {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, -- NodeBox31 - {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox32 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox33 - {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, -- NodeBox5 - {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, -- NodeBox6 - {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, -- NodeBox7 - {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, -- NodeBox8 - {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, -- NodeBox9 - {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, -- NodeBox10 - {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, -- NodeBox11 - {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, -- NodeBox12 - {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, -- NodeBox13 - {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, -- NodeBox14 - {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, -- NodeBox15 - {0.25, 2, 0.375, 0.375, 2.125, 0.5}, -- NodeBox16 - {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, -- NodeBox17 - {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, -- NodeBox20 - {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, -- NodeBox21 - {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, -- NodeBox22 - {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, -- NodeBox23 - {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, -- NodeBox24 - {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, -- NodeBox25 - {0.875, 0.8125, 0.375, 1, 1, 0.5}, -- NodeBox26 - {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, -- NodeBox27 - {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, -- NodeBox28 - {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, -- NodeBox29 - {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, -- NodeBox30 - {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, -- NodeBox31 - {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, -- NodeBox32 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox33 - + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, 3.375, 0.375, 1.5, 3.5, 0.5}, + {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, + {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, + {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, + {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, + {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, + {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, + {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, + {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, + {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, + {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, + {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, + {0.625, 2, 0.375, 0.75, 2.125, 0.5}, + {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, + {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, + {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, + {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, + {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, + {0, 0.8125, 0.375, 0.125, 1, 0.5}, + {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, + {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, + {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, + {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, + {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, + {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, + {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, + {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, + {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, + {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, + {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, + {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, + {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, + {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, + {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, + {0.25, 2, 0.375, 0.375, 2.125, 0.5}, + {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, + {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, + {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, + {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, + {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, + {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, + {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, + {0.875, 0.8125, 0.375, 1, 1, 0.5}, + {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, + {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, + {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, + {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, + {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + }, }, selection_box = { @@ -1017,12 +1034,14 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_tall_simple_end_left_"..bridge_colors, { - description = bridge_desc.." Tall Truss Superstructure Simple Left End", + minetest.register_node("bridger:truss_superstructure_tall_simple_end_left_" .. bridge_color, { + description = bridge_desc .. " Tall Truss Superstructure Simple Left End", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_simple_end_left.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_simple_end_left.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_simple_end_left.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_simple_end_left.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -1036,12 +1055,14 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_tall_simple_end_right_"..bridge_colors, { - description = bridge_desc.." Tall Truss Superstructure Simple Right End", + minetest.register_node("bridger:truss_superstructure_tall_simple_end_right_" .. bridge_color, { + description = bridge_desc .. " Tall Truss Superstructure Simple Right End", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_simple_end_right.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_tall_simple_end_right.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_simple_end_right.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_tall_simple_end_right.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -1055,84 +1076,86 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_simple_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Middle Simple", + minetest.register_node("bridger:truss_superstructure_simple_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Middle Simple", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_simple.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_simple.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_simple.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_simple.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, -- NodeBox218 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, {-0.5, 2.3125, 0.375, -0.375, 2.4375, 0.5}, - + }, }, selection_box = { @@ -1151,12 +1174,14 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_simple_end_left_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Simple Left End", + minetest.register_node("bridger:truss_superstructure_simple_end_left_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Simple Left End", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_simple_end_left.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_simple_end_left.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_simple_end_left.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_simple_end_left.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -1170,12 +1195,14 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_simple_end_right_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Simple Right End", + minetest.register_node("bridger:truss_superstructure_simple_end_right_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Simple Right End", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_simple_end_right.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_simple_end_right.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_simple_end_right.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_simple_end_right.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -1189,68 +1216,70 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_up_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Up Right Slant", + minetest.register_node("bridger:truss_superstructure_up_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Up Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, -- NodeBox4 - {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, -- NodeBox34 - {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, -- NodeBox35 - {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, -- NodeBox36 - {0.875, 3.125, 0.375, 1, 3.25, 0.5}, -- NodeBox37 - {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, -- NodeBox38 - {0.625, 3, 0.375, 0.75, 3.125, 0.5}, -- NodeBox39 - {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, -- NodeBox40 - {0.375, 2.875, 0.375, 0.5, 3, 0.5}, -- NodeBox41 - {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, -- NodeBox42 - {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, -- NodeBox43 - {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, -- NodeBox44 - {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, -- NodeBox45 - {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, -- NodeBox46 - {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, -- NodeBox47 - {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, -- NodeBox48 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, + {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, + {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, + {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, + {0.875, 3.125, 0.375, 1, 3.25, 0.5}, + {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, + {0.625, 3, 0.375, 0.75, 3.125, 0.5}, + {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, + {0.375, 2.875, 0.375, 0.5, 3, 0.5}, + {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, + {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, + {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, + {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, + {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, + {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, + {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, }, }, selection_box = { @@ -1269,66 +1298,68 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_up_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Up Left Slant", + minetest.register_node("bridger:truss_superstructure_up_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Up Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, -- NodeBox4 - {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, -- NodeBox34 - {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, -- NodeBox35 - {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, -- NodeBox36 - {0.875, 3.125, 0.375, 1, 3.25, 0.5}, -- NodeBox37 - {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, -- NodeBox38 - {0.625, 3, 0.375, 0.75, 3.125, 0.5}, -- NodeBox39 - {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, -- NodeBox40 - {0.375, 2.875, 0.375, 0.5, 3, 0.5}, -- NodeBox41 - {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, -- NodeBox42 - {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, -- NodeBox43 - {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, -- NodeBox44 - {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, -- NodeBox45 - {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, -- NodeBox46 - {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, -- NodeBox47 - {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, -- NodeBox48 - {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, -- NodeBox5 - {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, -- NodeBox6 - {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, -- NodeBox7 - {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, -- NodeBox8 - {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, -- NodeBox9 - {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, -- NodeBox10 - {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, -- NodeBox11 - {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, -- NodeBox12 - {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, -- NodeBox13 - {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, -- NodeBox14 - {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, -- NodeBox15 - {0.625, 2, 0.375, 0.75, 2.125, 0.5}, -- NodeBox16 - {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, -- NodeBox17 - {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, -- NodeBox20 - {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, -- NodeBox21 - {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, -- NodeBox22 - {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, -- NodeBox23 - {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, -- NodeBox24 - {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox25 - {0, 0.8125, 0.375, 0.125, 1, 0.5}, -- NodeBox26 - {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, -- NodeBox27 - {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, -- NodeBox28 - {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, -- NodeBox29 - {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, -- NodeBox30 - {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, -- NodeBox31 - {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox32 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, + {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, + {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, + {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, + {0.875, 3.125, 0.375, 1, 3.25, 0.5}, + {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, + {0.625, 3, 0.375, 0.75, 3.125, 0.5}, + {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, + {0.375, 2.875, 0.375, 0.5, 3, 0.5}, + {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, + {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, + {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, + {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, + {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, + {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, + {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, + {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, + {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, + {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, + {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, + {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, + {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, + {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, + {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, + {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, + {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, + {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, + {0.625, 2, 0.375, 0.75, 2.125, 0.5}, + {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, + {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, + {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, + {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, + {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, + {0, 0.8125, 0.375, 0.125, 1, 0.5}, + {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, + {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, + {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, + {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, + {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, }, }, selection_box = { @@ -1347,97 +1378,99 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_up_mid_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Up Middle", + minetest.register_node("bridger:truss_superstructure_up_mid_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Up Middle", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_mid.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_mid.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_mid.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_mid.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, -- NodeBox4 - {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, -- NodeBox34 - {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, -- NodeBox35 - {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, -- NodeBox36 - {0.875, 3.125, 0.375, 1, 3.25, 0.5}, -- NodeBox37 - {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, -- NodeBox38 - {0.625, 3, 0.375, 0.75, 3.125, 0.5}, -- NodeBox39 - {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, -- NodeBox40 - {0.375, 2.875, 0.375, 0.5, 3, 0.5}, -- NodeBox41 - {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, -- NodeBox42 - {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, -- NodeBox43 - {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, -- NodeBox44 - {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, -- NodeBox45 - {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, -- NodeBox46 - {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, -- NodeBox47 - {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, -- NodeBox48 - {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, -- NodeBox5 - {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, -- NodeBox6 - {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, -- NodeBox7 - {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, -- NodeBox8 - {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, -- NodeBox9 - {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, -- NodeBox10 - {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, -- NodeBox11 - {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, -- NodeBox12 - {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, -- NodeBox13 - {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, -- NodeBox14 - {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, -- NodeBox15 - {0.625, 2, 0.375, 0.75, 2.125, 0.5}, -- NodeBox16 - {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, -- NodeBox17 - {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, -- NodeBox20 - {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, -- NodeBox21 - {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, -- NodeBox22 - {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, -- NodeBox23 - {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, -- NodeBox24 - {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox25 - {0, 0.8125, 0.375, 0.125, 1, 0.5}, -- NodeBox26 - {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, -- NodeBox27 - {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, -- NodeBox28 - {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, -- NodeBox29 - {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, -- NodeBox30 - {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, -- NodeBox31 - {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox32 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox33 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 3.5, 0.5}, + {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, + {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, + {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, + {0.875, 3.125, 0.375, 1, 3.25, 0.5}, + {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, + {0.625, 3, 0.375, 0.75, 3.125, 0.5}, + {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, + {0.375, 2.875, 0.375, 0.5, 3, 0.5}, + {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, + {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, + {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, + {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, + {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, + {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, + {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, + {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, + {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, + {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, + {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, + {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, + {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, + {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, + {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, + {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, + {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, + {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, + {0.625, 2, 0.375, 0.75, 2.125, 0.5}, + {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, + {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, + {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, + {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, + {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, + {0, 0.8125, 0.375, 0.125, 1, 0.5}, + {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, + {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, + {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, + {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, + {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, }, }, selection_box = { @@ -1456,95 +1489,97 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_up_simple_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Up Simple", + minetest.register_node("bridger:truss_superstructure_up_simple_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Up Simple", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_simple.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_up_simple.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_simple.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_up_simple.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, -- NodeBox2 - {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, -- NodeBox34 - {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, -- NodeBox35 - {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, -- NodeBox36 - {0.875, 3.125, 0.375, 1, 3.25, 0.5}, -- NodeBox37 - {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, -- NodeBox38 - {0.625, 3, 0.375, 0.75, 3.125, 0.5}, -- NodeBox39 - {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, -- NodeBox40 - {0.375, 2.875, 0.375, 0.5, 3, 0.5}, -- NodeBox41 - {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, -- NodeBox42 - {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, -- NodeBox43 - {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, -- NodeBox44 - {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, -- NodeBox45 - {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, -- NodeBox46 - {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, -- NodeBox47 - {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, -- NodeBox48 - {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, -- NodeBox5 - {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, -- NodeBox6 - {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, -- NodeBox7 - {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, -- NodeBox8 - {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, -- NodeBox9 - {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, -- NodeBox10 - {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, -- NodeBox11 - {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, -- NodeBox12 - {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, -- NodeBox13 - {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, -- NodeBox14 - {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, -- NodeBox15 - {0.625, 2, 0.375, 0.75, 2.125, 0.5}, -- NodeBox16 - {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, -- NodeBox17 - {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, -- NodeBox20 - {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, -- NodeBox21 - {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, -- NodeBox22 - {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, -- NodeBox23 - {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, -- NodeBox24 - {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox25 - {0, 0.8125, 0.375, 0.125, 1, 0.5}, -- NodeBox26 - {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, -- NodeBox27 - {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, -- NodeBox28 - {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, -- NodeBox29 - {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, -- NodeBox30 - {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, -- NodeBox31 - {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, -- NodeBox32 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox33 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 3.375, 0.375, 1.5, 3.5, 0.5}, + {1.25, 3.3125, 0.375, 1.375, 3.4375, 0.5}, + {1.125, 3.25, 0.375, 1.25, 3.375, 0.5}, + {1, 3.1875, 0.375, 1.125, 3.3125, 0.5}, + {0.875, 3.125, 0.375, 1, 3.25, 0.5}, + {0.75, 3.0625, 0.375, 0.875, 3.1875, 0.5}, + {0.625, 3, 0.375, 0.75, 3.125, 0.5}, + {0.5, 2.9375, 0.375, 0.625, 3.0625, 0.5}, + {0.375, 2.875, 0.375, 0.5, 3, 0.5}, + {0.25, 2.8125, 0.375, 0.375, 2.9375, 0.5}, + {0.125, 2.75, 0.375, 0.25, 2.875, 0.5}, + {0, 2.6875, 0.375, 0.125, 2.8125, 0.5}, + {-0.125, 2.625, 0.375, -1.2666e-007, 2.75, 0.5}, + {-0.25, 2.5625, 0.375, -0.125, 2.6875, 0.5}, + {-0.375, 2.5, 0.375, -0.25, 2.625, 0.5}, + {-0.5, 2.4375, 0.375, -0.375, 2.5625, 0.5}, + {1.3125, 3.25, 0.375, 1.4375, 3.375, 0.5}, + {1.25, 3.125, 0.375, 1.375, 3.3125, 0.5}, + {1.1875, 3, 0.375, 1.3125, 3.1875, 0.5}, + {1.125, 2.875, 0.375, 1.25, 3.0625, 0.5}, + {1.0625, 2.75, 0.375, 1.1875, 2.9375, 0.5}, + {1, 2.625, 0.375, 1.125, 2.8125, 0.5}, + {0.9375, 2.5625, 0.375, 1.0625, 2.6875, 0.5}, + {0.875, 2.4375, 0.375, 1, 2.625, 0.5}, + {0.8125, 2.3125, 0.375, 0.9375, 2.5, 0.5}, + {0.75, 2.1875, 0.375, 0.875, 2.375, 0.5}, + {0.6875, 2.0625, 0.375, 0.8125, 2.25, 0.5}, + {0.625, 2, 0.375, 0.75, 2.125, 0.5}, + {0.5625, 1.875, 0.375, 0.6875, 2.0625, 0.5}, + {0.5, 1.75, 0.375, 0.625, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.375, 1.5, 0.375, 0.5, 1.6875, 0.5}, + {0.3125, 1.375, 0.375, 0.4375, 1.5625, 0.5}, + {0.25, 1.3125, 0.375, 0.375, 1.4375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.375, 0.5}, + {0.125, 1.0625, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 0.9375, 0.375, 0.1875, 1.125, 0.5}, + {0, 0.8125, 0.375, 0.125, 1, 0.5}, + {-0.0625, 0.75, 0.375, 0.0625, 0.875, 0.5}, + {-0.125, 0.625, 0.375, -3.35276e-008, 0.8125, 0.5}, + {-0.1875, 0.5, 0.375, -0.0625, 0.6875, 0.5}, + {-0.25, 0.375, 0.375, -0.125, 0.5625, 0.5}, + {-0.3125, 0.25, 0.375, -0.1875, 0.4375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.3125, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, }, }, selection_box = { @@ -1563,66 +1598,68 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_down_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Down Right Slant", + minetest.register_node("bridger:truss_superstructure_down_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Down Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox4 - {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, -- NodeBox34 - {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, -- NodeBox35 - {1, 2.625, 0.375, 1.125, 2.75, 0.5}, -- NodeBox36 - {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, -- NodeBox37 - {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, -- NodeBox38 - {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, -- NodeBox39 - {0.5, 2.875, 0.375, 0.625, 3, 0.5}, -- NodeBox40 - {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, -- NodeBox41 - {0.25, 3, 0.375, 0.375, 3.125, 0.5}, -- NodeBox42 - {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, -- NodeBox43 - {0, 3.125, 0.375, 0.125, 3.25, 0.5}, -- NodeBox44 - {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, -- NodeBox45 - {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, -- NodeBox46 - {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, -- NodeBox47 - {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, -- NodeBox48 - {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, -- NodeBox5 - {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, -- NodeBox6 - {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, -- NodeBox7 - {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, -- NodeBox8 - {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, -- NodeBox9 - {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, -- NodeBox10 - {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, -- NodeBox11 - {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, -- NodeBox12 - {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, -- NodeBox13 - {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, -- NodeBox14 - {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, -- NodeBox15 - {0.25, 2, 0.375, 0.375, 2.125, 0.5}, -- NodeBox16 - {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, -- NodeBox17 - {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, -- NodeBox20 - {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, -- NodeBox21 - {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, -- NodeBox22 - {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, -- NodeBox23 - {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, -- NodeBox24 - {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, -- NodeBox25 - {0.875, 0.8125, 0.375, 1, 1, 0.5}, -- NodeBox26 - {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, -- NodeBox27 - {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, -- NodeBox28 - {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, -- NodeBox29 - {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, -- NodeBox30 - {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, -- NodeBox31 - {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, -- NodeBox32 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, + {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, + {1, 2.625, 0.375, 1.125, 2.75, 0.5}, + {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, + {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, + {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, + {0.5, 2.875, 0.375, 0.625, 3, 0.5}, + {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, + {0.25, 3, 0.375, 0.375, 3.125, 0.5}, + {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, + {0, 3.125, 0.375, 0.125, 3.25, 0.5}, + {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, + {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, + {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, + {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, + {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, + {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, + {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, + {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, + {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, + {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, + {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, + {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, + {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, + {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, + {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, + {0.25, 2, 0.375, 0.375, 2.125, 0.5}, + {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, + {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, + {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, + {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, + {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, + {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, + {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, + {0.875, 0.8125, 0.375, 1, 1, 0.5}, + {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, + {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, + {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, + {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, + {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, }, }, selection_box = { @@ -1641,68 +1678,70 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_down_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Down Left Slant", + minetest.register_node("bridger:truss_superstructure_down_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Down Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox4 - {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, -- NodeBox34 - {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, -- NodeBox35 - {1, 2.625, 0.375, 1.125, 2.75, 0.5}, -- NodeBox36 - {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, -- NodeBox37 - {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, -- NodeBox38 - {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, -- NodeBox39 - {0.5, 2.875, 0.375, 0.625, 3, 0.5}, -- NodeBox40 - {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, -- NodeBox41 - {0.25, 3, 0.375, 0.375, 3.125, 0.5}, -- NodeBox42 - {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, -- NodeBox43 - {0, 3.125, 0.375, 0.125, 3.25, 0.5}, -- NodeBox44 - {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, -- NodeBox45 - {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, -- NodeBox46 - {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, -- NodeBox47 - {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, -- NodeBox48 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, + {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, + {1, 2.625, 0.375, 1.125, 2.75, 0.5}, + {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, + {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, + {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, + {0.5, 2.875, 0.375, 0.625, 3, 0.5}, + {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, + {0.25, 3, 0.375, 0.375, 3.125, 0.5}, + {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, + {0, 3.125, 0.375, 0.125, 3.25, 0.5}, + {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, + {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, + {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, + {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, }, }, selection_box = { @@ -1721,97 +1760,99 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_down_mid_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Down Middle", + minetest.register_node("bridger:truss_superstructure_down_mid_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Down Middle", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_mid.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_mid.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_mid.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_mid.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, -- NodeBox2 - {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, -- NodeBox3 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox4 - {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, -- NodeBox34 - {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, -- NodeBox35 - {1, 2.625, 0.375, 1.125, 2.75, 0.5}, -- NodeBox36 - {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, -- NodeBox37 - {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, -- NodeBox38 - {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, -- NodeBox39 - {0.5, 2.875, 0.375, 0.625, 3, 0.5}, -- NodeBox40 - {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, -- NodeBox41 - {0.25, 3, 0.375, 0.375, 3.125, 0.5}, -- NodeBox42 - {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, -- NodeBox43 - {0, 3.125, 0.375, 0.125, 3.25, 0.5}, -- NodeBox44 - {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, -- NodeBox45 - {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, -- NodeBox46 - {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, -- NodeBox47 - {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, -- NodeBox48 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 - {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, -- NodeBox5 - {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, -- NodeBox6 - {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, -- NodeBox7 - {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, -- NodeBox8 - {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, -- NodeBox9 - {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, -- NodeBox10 - {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, -- NodeBox11 - {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, -- NodeBox12 - {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, -- NodeBox13 - {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, -- NodeBox14 - {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, -- NodeBox15 - {0.25, 2, 0.375, 0.375, 2.125, 0.5}, -- NodeBox16 - {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, -- NodeBox17 - {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, -- NodeBox20 - {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, -- NodeBox21 - {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, -- NodeBox22 - {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, -- NodeBox23 - {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, -- NodeBox24 - {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, -- NodeBox25 - {0.875, 0.8125, 0.375, 1, 1, 0.5}, -- NodeBox26 - {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, -- NodeBox27 - {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, -- NodeBox28 - {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, -- NodeBox29 - {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, -- NodeBox30 - {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, -- NodeBox31 - {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, -- NodeBox32 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 3.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, + {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, + {1, 2.625, 0.375, 1.125, 2.75, 0.5}, + {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, + {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, + {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, + {0.5, 2.875, 0.375, 0.625, 3, 0.5}, + {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, + {0.25, 3, 0.375, 0.375, 3.125, 0.5}, + {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, + {0, 3.125, 0.375, 0.125, 3.25, 0.5}, + {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, + {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, + {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, + {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, + {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, + {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, + {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, + {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, + {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, + {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, + {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, + {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, + {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, + {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, + {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, + {0.25, 2, 0.375, 0.375, 2.125, 0.5}, + {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, + {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, + {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, + {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, + {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, + {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, + {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, + {0.875, 0.8125, 0.375, 1, 1, 0.5}, + {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, + {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, + {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, + {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, + {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, }, }, selection_box = { @@ -1830,95 +1871,97 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_down_simple_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Down Simple", + minetest.register_node("bridger:truss_superstructure_down_simple_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Down Simple", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_simple.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_down_simple.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_simple.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_superstructure_down_simple.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox1 - {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, -- NodeBox2 - {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, -- NodeBox34 - {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, -- NodeBox35 - {1, 2.625, 0.375, 1.125, 2.75, 0.5}, -- NodeBox36 - {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, -- NodeBox37 - {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, -- NodeBox38 - {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, -- NodeBox39 - {0.5, 2.875, 0.375, 0.625, 3, 0.5}, -- NodeBox40 - {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, -- NodeBox41 - {0.25, 3, 0.375, 0.375, 3.125, 0.5}, -- NodeBox42 - {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, -- NodeBox43 - {0, 3.125, 0.375, 0.125, 3.25, 0.5}, -- NodeBox44 - {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, -- NodeBox45 - {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, -- NodeBox46 - {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, -- NodeBox47 - {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, -- NodeBox48 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 - {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, -- NodeBox5 - {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, -- NodeBox6 - {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, -- NodeBox7 - {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, -- NodeBox8 - {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, -- NodeBox9 - {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, -- NodeBox10 - {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, -- NodeBox11 - {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, -- NodeBox12 - {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, -- NodeBox13 - {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, -- NodeBox14 - {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, -- NodeBox15 - {0.25, 2, 0.375, 0.375, 2.125, 0.5}, -- NodeBox16 - {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, -- NodeBox17 - {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, -- NodeBox18 - {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, -- NodeBox19 - {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, -- NodeBox20 - {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, -- NodeBox21 - {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, -- NodeBox22 - {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, -- NodeBox23 - {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, -- NodeBox24 - {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, -- NodeBox25 - {0.875, 0.8125, 0.375, 1, 1, 0.5}, -- NodeBox26 - {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, -- NodeBox27 - {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, -- NodeBox28 - {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, -- NodeBox29 - {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, -- NodeBox30 - {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, -- NodeBox31 - {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, -- NodeBox32 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox33 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {1.375, 2.4375, 0.375, 1.5, 2.5625, 0.5}, + {1.25, 2.5, 0.375, 1.375, 2.625, 0.5}, + {1.125, 2.5625, 0.375, 1.25, 2.6875, 0.5}, + {1, 2.625, 0.375, 1.125, 2.75, 0.5}, + {0.875, 2.6875, 0.375, 1, 2.8125, 0.5}, + {0.75, 2.75, 0.375, 0.875, 2.875, 0.5}, + {0.625, 2.8125, 0.375, 0.75, 2.9375, 0.5}, + {0.5, 2.875, 0.375, 0.625, 3, 0.5}, + {0.375, 2.9375, 0.375, 0.5, 3.0625, 0.5}, + {0.25, 3, 0.375, 0.375, 3.125, 0.5}, + {0.125, 3.0625, 0.375, 0.25, 3.1875, 0.5}, + {0, 3.125, 0.375, 0.125, 3.25, 0.5}, + {-0.125, 3.1875, 0.375, -1.2666e-007, 3.3125, 0.5}, + {-0.25, 3.25, 0.375, -0.125, 3.375, 0.5}, + {-0.375, 3.3125, 0.375, -0.25, 3.4375, 0.5}, + {-0.5, 3.375, 0.375, -0.375, 3.5, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, + {-0.4375, 3.25, 0.375, -0.3125, 3.375, 0.5}, + {-0.375, 3.125, 0.375, -0.25, 3.3125, 0.5}, + {-0.3125, 3, 0.375, -0.1875, 3.1875, 0.5}, + {-0.25, 2.875, 0.375, -0.125, 3.0625, 0.5}, + {-0.1875, 2.75, 0.375, -0.0625, 2.9375, 0.5}, + {-0.125, 2.625, 0.375, 1.11759e-008, 2.8125, 0.5}, + {-0.0625, 2.5625, 0.375, 0.0625, 2.6875, 0.5}, + {0, 2.4375, 0.375, 0.125, 2.625, 0.5}, + {0.0625, 2.3125, 0.375, 0.1875, 2.5, 0.5}, + {0.125, 2.1875, 0.375, 0.25, 2.375, 0.5}, + {0.1875, 2.0625, 0.375, 0.3125, 2.25, 0.5}, + {0.25, 2, 0.375, 0.375, 2.125, 0.5}, + {0.3125, 1.875, 0.375, 0.4375, 2.0625, 0.5}, + {0.375, 1.75, 0.375, 0.5, 1.9375, 0.5}, + {0.4375, 1.625, 0.375, 0.5625, 1.8125, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.6875, 0.5}, + {0.5625, 1.375, 0.375, 0.6875, 1.5625, 0.5}, + {0.625, 1.3125, 0.375, 0.75, 1.4375, 0.5}, + {0.6875, 1.1875, 0.375, 0.8125, 1.375, 0.5}, + {0.75, 1.0625, 0.375, 0.875, 1.25, 0.5}, + {0.8125, 0.9375, 0.375, 0.9375, 1.125, 0.5}, + {0.875, 0.8125, 0.375, 1, 1, 0.5}, + {0.9375, 0.75, 0.375, 1.0625, 0.875, 0.5}, + {1, 0.625, 0.375, 1.125, 0.8125, 0.5}, + {1.0625, 0.5, 0.375, 1.1875, 0.6875, 0.5}, + {1.125, 0.375, 0.375, 1.25, 0.5625, 0.5}, + {1.1875, 0.25, 0.375, 1.3125, 0.4375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.3125, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, }, }, selection_box = { @@ -1937,50 +1980,52 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_substructure_end_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Substructure End Right Slant", + minetest.register_node("bridger:truss_substructure_end_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Substructure End Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_substructure_end_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_substructure_end_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_substructure_end_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_substructure_end_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, -- NodeBox122 - {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, -- NodeBox126 - {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, -- NodeBox127 - {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, -- NodeBox128 - {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, -- NodeBox129 - {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, -- NodeBox130 - {-0.125, 1, 0.375, 0, 1.125, 0.5}, -- NodeBox131 - {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, -- NodeBox132 - {0, 0.875, 0.375, 0.125, 1, 0.5}, -- NodeBox133 - {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, -- NodeBox134 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox135 - {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, -- NodeBox136 - {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, -- NodeBox137 - {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, -- NodeBox138 - {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, -- NodeBox139 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox140 - {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, -- NodeBox141 - {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, -- NodeBox142 - {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, -- NodeBox143 - {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, -- NodeBox144 - {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, -- NodeBox145 - {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, -- NodeBox146 - {0.875, 0, 0.375, 1, 0.125, 0.5}, -- NodeBox147 - {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, -- NodeBox148 - {1, -0.125, 0.375, 1.125, 0, 0.5}, -- NodeBox149 - {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, -- NodeBox150 - {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, -- NodeBox151 - {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, -- NodeBox152 - {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, -- NodeBox153 - {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, -- NodeBox154 - {1.375, -0.5, 0.375, 1.5, -0.375, 0.5}, -- NodeBox189 - {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, -- NodeBox190 + {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, + {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, + {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, + {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, + {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, + {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, + {-0.125, 1, 0.375, 0, 1.125, 0.5}, + {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, + {0, 0.875, 0.375, 0.125, 1, 0.5}, + {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, + {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, + {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, + {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, + {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, + {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, + {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, + {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, + {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, + {0.875, 0, 0.375, 1, 0.125, 0.5}, + {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, + {1, -0.125, 0.375, 1.125, 0, 0.5}, + {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, + {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, + {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, + {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, + {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, + {1.375, -0.5, 0.375, 1.5, -0.375, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, }, }, selection_box = { @@ -1999,50 +2044,52 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_substructure_end_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Substructure End Left Slant", + minetest.register_node("bridger:truss_substructure_end_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Substructure End Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_substructure_end_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_substructure_end_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. + ".png^bridges_substructure_end_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. + ".png^bridges_substructure_end_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, -- NodeBox122 - {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, -- NodeBox126 - {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, -- NodeBox127 - {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, -- NodeBox128 - {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, -- NodeBox129 - {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, -- NodeBox130 - {1, 1, 0.375, 1.125, 1.125, 0.5}, -- NodeBox131 - {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, -- NodeBox132 - {0.875, 0.875, 0.375, 1, 1, 0.5}, -- NodeBox133 - {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, -- NodeBox134 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox135 - {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, -- NodeBox136 - {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, -- NodeBox137 - {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, -- NodeBox138 - {0.5, 0.5, 0.375, 0.625, 0.625, 0.5}, -- NodeBox139 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox140 - {0.375, 0.375, 0.375, 0.5, 0.5, 0.5}, -- NodeBox141 - {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, -- NodeBox142 - {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, -- NodeBox143 - {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, -- NodeBox144 - {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, -- NodeBox145 - {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, -- NodeBox146 - {0, 0, 0.375, 0.125, 0.125, 0.5}, -- NodeBox147 - {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, -- NodeBox148 - {-0.125, -0.125, 0.375, 0, 0, 0.5}, -- NodeBox149 - {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, -- NodeBox150 - {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, -- NodeBox151 - {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, -- NodeBox152 - {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, -- NodeBox153 - {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, -- NodeBox154 - {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, -- NodeBox188 - {-0.5, -0.5, 0.375, -0.375, -0.375, 0.5}, -- NodeBox192 + {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, + {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, + {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, + {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, + {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, + {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, + {1, 1, 0.375, 1.125, 1.125, 0.5}, + {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, + {0.875, 0.875, 0.375, 1, 1, 0.5}, + {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, + {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, + {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, + {0.5, 0.5, 0.375, 0.625, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.375, 0.375, 0.375, 0.5, 0.5, 0.5}, + {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, + {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, + {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, + {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, + {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, + {0, 0, 0.375, 0.125, 0.125, 0.5}, + {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, + {-0.125, -0.125, 0.375, 0, 0, 0.5}, + {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, + {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, + {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, + {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, + {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, -0.375, 0.5}, }, }, selection_box = { @@ -2061,51 +2108,51 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_substructure_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Substructure Right Slant", + minetest.register_node("bridger:truss_substructure_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Substructure Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_substructure_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_substructure_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, -- NodeBox122 - {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, -- NodeBox126 - {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, -- NodeBox127 - {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, -- NodeBox128 - {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, -- NodeBox129 - {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, -- NodeBox130 - {-0.125, 1, 0.375, 0, 1.125, 0.5}, -- NodeBox131 - {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, -- NodeBox132 - {0, 0.875, 0.375, 0.125, 1, 0.5}, -- NodeBox133 - {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, -- NodeBox134 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox135 - {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, -- NodeBox136 - {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, -- NodeBox137 - {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, -- NodeBox138 - {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, -- NodeBox139 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox140 - {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, -- NodeBox141 - {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, -- NodeBox142 - {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, -- NodeBox143 - {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, -- NodeBox144 - {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, -- NodeBox145 - {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, -- NodeBox146 - {0.875, 0, 0.375, 1, 0.125, 0.5}, -- NodeBox147 - {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, -- NodeBox148 - {1, -0.125, 0.375, 1.125, 0, 0.5}, -- NodeBox149 - {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, -- NodeBox150 - {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, -- NodeBox151 - {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, -- NodeBox152 - {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, -- NodeBox153 - {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, -- NodeBox154 - {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, -- NodeBox188 - {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, -- NodeBox189 - {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, -- NodeBox190 + {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, + {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, + {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, + {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, + {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, + {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, + {-0.125, 1, 0.375, 0, 1.125, 0.5}, + {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, + {0, 0.875, 0.375, 0.125, 1, 0.5}, + {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, + {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, + {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, + {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, + {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, + {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, + {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, + {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, + {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, + {0.875, 0, 0.375, 1, 0.125, 0.5}, + {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, + {1, -0.125, 0.375, 1.125, 0, 0.5}, + {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, + {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, + {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, + {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, + {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, + {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, }, }, selection_box = { @@ -2124,52 +2171,52 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_substructure_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Substructure Left Slant", + minetest.register_node("bridger:truss_substructure_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Substructure Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_substructure_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_substructure_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, -- NodeBox122 - {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, -- NodeBox126 - {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, -- NodeBox127 - {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, -- NodeBox128 - {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, -- NodeBox129 - {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, -- NodeBox130 - {1, 1, 0.375, 1.125, 1.125, 0.5}, -- NodeBox131 - {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, -- NodeBox132 - {0.875, 0.875, 0.375, 1, 1, 0.5}, -- NodeBox133 - {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, -- NodeBox134 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox135 - {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, -- NodeBox136 - {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, -- NodeBox137 - {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, -- NodeBox138 - {0.5, 0.5, 0.375, 0.625, 0.625, 0.5}, -- NodeBox139 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox140 - {0.375, 0.375, 0.375, 0.5, 0.5, 0.5}, -- NodeBox141 - {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, -- NodeBox142 - {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, -- NodeBox143 - {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, -- NodeBox144 - {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, -- NodeBox145 - {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, -- NodeBox146 - {0, 0, 0.375, 0.125, 0.125, 0.5}, -- NodeBox147 - {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, -- NodeBox148 - {-0.125, -0.125, 0.375, 0, 0, 0.5}, -- NodeBox149 - {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, -- NodeBox150 - {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, -- NodeBox151 - {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, -- NodeBox152 - {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, -- NodeBox153 - {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, -- NodeBox154 - {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, -- NodeBox188 - {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, -- NodeBox189 - {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, -- NodeBox190 - {-0.5, -0.5, 0.375, -0.375, -0.375, 0.5}, -- NodeBox192 + {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, + {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, + {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, + {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, + {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, + {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, + {1, 1, 0.375, 1.125, 1.125, 0.5}, + {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, + {0.875, 0.875, 0.375, 1, 1, 0.5}, + {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, + {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, + {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, + {0.5, 0.5, 0.375, 0.625, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.375, 0.375, 0.375, 0.5, 0.5, 0.5}, + {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, + {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, + {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, + {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, + {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, + {0, 0, 0.375, 0.125, 0.125, 0.5}, + {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, + {-0.125, -0.125, 0.375, 0, 0, 0.5}, + {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, + {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, + {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, + {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, + {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, + {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, -0.375, 0.5}, }, }, selection_box = { @@ -2188,76 +2235,76 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_substructure_simple_"..bridge_colors, { - description = bridge_desc.." Truss Substructure Simple", + minetest.register_node("bridger:truss_substructure_simple_" .. bridge_color, { + description = bridge_desc .. " Truss Substructure Simple", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_substructure_simple.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_substructure_simple.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_simple.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_simple.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, -- NodeBox121 - {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, -- NodeBox122 - {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, -- NodeBox126 - {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, -- NodeBox127 - {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, -- NodeBox128 - {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, -- NodeBox129 - {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, -- NodeBox130 - {-0.125, 1, 0.375, 0, 1.125, 0.5}, -- NodeBox131 - {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, -- NodeBox132 - {0, 0.875, 0.375, 0.125, 1, 0.5}, -- NodeBox133 - {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, -- NodeBox134 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox135 - {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, -- NodeBox136 - {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, -- NodeBox137 - {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, -- NodeBox138 - {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, -- NodeBox139 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox140 - {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, -- NodeBox141 - {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, -- NodeBox142 - {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, -- NodeBox143 - {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, -- NodeBox144 - {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, -- NodeBox145 - {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, -- NodeBox146 - {0.875, 0, 0.375, 1, 0.125, 0.5}, -- NodeBox147 - {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, -- NodeBox148 - {1, -0.125, 0.375, 1.125, 0, 0.5}, -- NodeBox149 - {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, -- NodeBox150 - {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, -- NodeBox151 - {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, -- NodeBox152 - {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, -- NodeBox153 - {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, -- NodeBox154 - {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, -- NodeBox157 - {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, -- NodeBox158 - {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, -- NodeBox159 - {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, -- NodeBox160 - {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, -- NodeBox161 - {1, 1, 0.375, 1.125, 1.125, 0.5}, -- NodeBox162 - {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, -- NodeBox163 - {0.875, 0.875, 0.375, 1, 1, 0.5}, -- NodeBox164 - {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, -- NodeBox165 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox166 - {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, -- NodeBox167 - {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, -- NodeBox168 - {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, -- NodeBox169 - {0.375, 0.375, 0.375, 0.625, 0.625, 0.5}, -- NodeBox170 - {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, -- NodeBox171 - {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, -- NodeBox172 - {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, -- NodeBox173 - {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, -- NodeBox174 - {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, -- NodeBox175 - {0, 0, 0.375, 0.125, 0.125, 0.5}, -- NodeBox176 - {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, -- NodeBox177 - {-0.125, -0.125, 0.375, 0, 0, 0.5}, -- NodeBox178 - {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, -- NodeBox179 - {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, -- NodeBox180 - {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, -- NodeBox181 - {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, -- NodeBox182 - {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, -- NodeBox183 + {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, + {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, + {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, + {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, + {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, + {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, + {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, + {-0.125, 1, 0.375, 0, 1.125, 0.5}, + {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, + {0, 0.875, 0.375, 0.125, 1, 0.5}, + {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, + {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, + {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, + {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, + {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, + {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, + {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, + {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, + {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, + {0.875, 0, 0.375, 1, 0.125, 0.5}, + {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, + {1, -0.125, 0.375, 1.125, 0, 0.5}, + {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, + {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, + {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, + {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, + {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, + {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, + {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, + {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, + {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, + {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, + {1, 1, 0.375, 1.125, 1.125, 0.5}, + {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, + {0.875, 0.875, 0.375, 1, 1, 0.5}, + {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, + {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, + {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, + {0.375, 0.375, 0.375, 0.625, 0.625, 0.5}, + {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, + {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, + {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, + {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, + {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, + {0, 0, 0.375, 0.125, 0.125, 0.5}, + {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, + {-0.125, -0.125, 0.375, 0, 0, 0.5}, + {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, + {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, + {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, + {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, + {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, }, }, selection_box = { @@ -2276,78 +2323,78 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_substructure_mid_"..bridge_colors, { - description = bridge_desc.." Truss Substructure Middle", + minetest.register_node("bridger:truss_substructure_mid_" .. bridge_color, { + description = bridge_desc .. " Truss Substructure Middle", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_substructure_mid.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_substructure_mid.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_mid.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_substructure_mid.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, -- NodeBox121 - {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, -- NodeBox122 - {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, -- NodeBox126 - {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, -- NodeBox127 - {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, -- NodeBox128 - {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, -- NodeBox129 - {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, -- NodeBox130 - {-0.125, 1, 0.375, 0, 1.125, 0.5}, -- NodeBox131 - {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, -- NodeBox132 - {0, 0.875, 0.375, 0.125, 1, 0.5}, -- NodeBox133 - {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, -- NodeBox134 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox135 - {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, -- NodeBox136 - {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, -- NodeBox137 - {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, -- NodeBox138 - {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, -- NodeBox139 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox140 - {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, -- NodeBox141 - {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, -- NodeBox142 - {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, -- NodeBox143 - {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, -- NodeBox144 - {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, -- NodeBox145 - {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, -- NodeBox146 - {0.875, 0, 0.375, 1, 0.125, 0.5}, -- NodeBox147 - {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, -- NodeBox148 - {1, -0.125, 0.375, 1.125, 0, 0.5}, -- NodeBox149 - {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, -- NodeBox150 - {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, -- NodeBox151 - {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, -- NodeBox152 - {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, -- NodeBox153 - {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, -- NodeBox154 - {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, -- NodeBox157 - {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, -- NodeBox158 - {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, -- NodeBox159 - {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, -- NodeBox160 - {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, -- NodeBox161 - {1, 1, 0.375, 1.125, 1.125, 0.5}, -- NodeBox162 - {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, -- NodeBox163 - {0.875, 0.875, 0.375, 1, 1, 0.5}, -- NodeBox164 - {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, -- NodeBox165 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox166 - {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, -- NodeBox167 - {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, -- NodeBox168 - {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, -- NodeBox169 - {0.375, 0.375, 0.375, 0.625, 0.625, 0.5}, -- NodeBox170 - {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, -- NodeBox171 - {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, -- NodeBox172 - {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, -- NodeBox173 - {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, -- NodeBox174 - {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, -- NodeBox175 - {0, 0, 0.375, 0.125, 0.125, 0.5}, -- NodeBox176 - {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, -- NodeBox177 - {-0.125, -0.125, 0.375, 0, 0, 0.5}, -- NodeBox178 - {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, -- NodeBox179 - {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, -- NodeBox180 - {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, -- NodeBox181 - {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, -- NodeBox182 - {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, -- NodeBox183 - {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, -- NodeBox184 - {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, -- NodeBox185 + {-0.5, -0.5, 0.375, 1.5, -0.375, 0.5}, + {-0.5, 1.375, 0.375, 1.5, 1.5, 0.5}, + {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, + {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, + {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, + {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, + {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, + {-0.125, 1, 0.375, 0, 1.125, 0.5}, + {-0.0625, 0.9375, 0.375, 0.0625, 1.0625, 0.5}, + {0, 0.875, 0.375, 0.125, 1, 0.5}, + {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, + {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, + {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, + {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, + {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, + {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, + {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, + {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, + {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, + {0.875, 0, 0.375, 1, 0.125, 0.5}, + {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, + {1, -0.125, 0.375, 1.125, 0, 0.5}, + {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, + {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, + {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, + {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, + {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, + {1.3125, 1.3125, 0.375, 1.4375, 1.4375, 0.5}, + {1.25, 1.25, 0.375, 1.375, 1.375, 0.5}, + {1.1875, 1.1875, 0.375, 1.3125, 1.3125, 0.5}, + {1.125, 1.125, 0.375, 1.25, 1.25, 0.5}, + {1.0625, 1.0625, 0.375, 1.1875, 1.1875, 0.5}, + {1, 1, 0.375, 1.125, 1.125, 0.5}, + {0.9375, 0.9375, 0.375, 1.0625, 1.0625, 0.5}, + {0.875, 0.875, 0.375, 1, 1, 0.5}, + {0.8125, 0.8125, 0.375, 0.9375, 0.9375, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.6875, 0.6875, 0.375, 0.8125, 0.8125, 0.5}, + {0.625, 0.625, 0.375, 0.75, 0.75, 0.5}, + {0.5625, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, + {0.375, 0.375, 0.375, 0.625, 0.625, 0.5}, + {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, + {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, + {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, + {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, + {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, + {0, 0, 0.375, 0.125, 0.125, 0.5}, + {-0.0625, -0.0625, 0.375, 0.0625, 0.0625, 0.5}, + {-0.125, -0.125, 0.375, 0, 0, 0.5}, + {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, + {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, + {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, + {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, + {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 1.5, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 1.5, 0.5}, }, }, selection_box = { @@ -2366,47 +2413,47 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:small_upper_chord_"..bridge_colors, { - description = bridge_desc.." Small Upper Chord", + minetest.register_node("bridger:small_upper_chord_" .. bridge_color, { + description = bridge_desc .. " Small Upper Chord", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_small_upper_chord.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_small_upper_chord.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_small_upper_chord.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_small_upper_chord.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, 0.375, 0.4375, 0.5, 0.5, 0.5}, -- NodeBox250 - {0.4375, 0.375, -1.5, 0.5, 0.5, 0.5}, -- NodeBox251 - {-0.5, 0.375, -1.5, 0.5, 0.5, -1.4375}, -- NodeBox252 - {-0.5, 0.375, -1.5, -0.4375, 0.5, 0.5}, -- NodeBox253 - {-0.4375, 0.375, 0.25, -0.3125, 0.5, 0.4375}, -- NodeBox260 - {-0.375, 0.375, 0.125, -0.25, 0.5, 0.3125}, -- NodeBox261 - {-0.3125, 0.375, 0, -0.1875, 0.5, 0.1875}, -- NodeBox262 - {-0.25, 0.375, -0.125, -0.125, 0.5, 0.0625}, -- NodeBox263 - {-0.1875, 0.375, -0.25, -0.0625, 0.5, -0.0625}, -- NodeBox264 - {-0.4375, 0.375, -1.4375, -0.3125, 0.5, -1.25}, -- NodeBox265 - {-0.375, 0.375, -1.3125, -0.25, 0.5, -1.125}, -- NodeBox266 - {-0.3125, 0.375, -1.1875, -0.1875, 0.5, -1}, -- NodeBox267 - {-0.25, 0.375, -1.0625, -0.125, 0.5, -0.875}, -- NodeBox268 - {-0.1875, 0.375, -0.9375, -0.0625, 0.5, -0.75}, -- NodeBox269 - {-0.125, 0.375, -0.8125, 0, 0.5, -0.625}, -- NodeBox270 - {-0.125, 0.375, -0.375, 0, 0.5, -0.1875}, -- NodeBox271 - {0.3125, 0.375, 0.25, 0.4375, 0.5, 0.4375}, -- NodeBox272 - {0.25, 0.375, 0.125, 0.375, 0.5, 0.3125}, -- NodeBox273 - {0.1875, 0.375, 0, 0.3125, 0.5, 0.1875}, -- NodeBox274 - {0.125, 0.375, -0.125, 0.25, 0.5, 0.0625}, -- NodeBox275 - {0.0625, 0.375, -0.25, 0.1875, 0.5, -0.0625}, -- NodeBox276 - {0, 0.375, -0.375, 0.125, 0.5, -0.1875}, -- NodeBox277 - {-0.0625, 0.375, -0.625, 0.0625, 0.5, -0.375}, -- NodeBox278 - {0.3125, 0.375, -1.4375, 0.4375, 0.5, -1.25}, -- NodeBox279 - {0.25, 0.375, -1.3125, 0.375, 0.5, -1.125}, -- NodeBox280 - {0.1875, 0.375, -1.1875, 0.3125, 0.5, -1}, -- NodeBox281 - {0.125, 0.375, -1.0625, 0.25, 0.5, -0.875}, -- NodeBox282 - {0.0625, 0.375, -0.9375, 0.1875, 0.5, -0.75}, -- NodeBox283 - {0, 0.375, -0.8125, 0.125, 0.5, -0.625}, -- NodeBox284 + {-0.5, 0.375, 0.4375, 0.5, 0.5, 0.5}, + {0.4375, 0.375, -1.5, 0.5, 0.5, 0.5}, + {-0.5, 0.375, -1.5, 0.5, 0.5, -1.4375}, + {-0.5, 0.375, -1.5, -0.4375, 0.5, 0.5}, + {-0.4375, 0.375, 0.25, -0.3125, 0.5, 0.4375}, + {-0.375, 0.375, 0.125, -0.25, 0.5, 0.3125}, + {-0.3125, 0.375, 0, -0.1875, 0.5, 0.1875}, + {-0.25, 0.375, -0.125, -0.125, 0.5, 0.0625}, + {-0.1875, 0.375, -0.25, -0.0625, 0.5, -0.0625}, + {-0.4375, 0.375, -1.4375, -0.3125, 0.5, -1.25}, + {-0.375, 0.375, -1.3125, -0.25, 0.5, -1.125}, + {-0.3125, 0.375, -1.1875, -0.1875, 0.5, -1}, + {-0.25, 0.375, -1.0625, -0.125, 0.5, -0.875}, + {-0.1875, 0.375, -0.9375, -0.0625, 0.5, -0.75}, + {-0.125, 0.375, -0.8125, 0, 0.5, -0.625}, + {-0.125, 0.375, -0.375, 0, 0.5, -0.1875}, + {0.3125, 0.375, 0.25, 0.4375, 0.5, 0.4375}, + {0.25, 0.375, 0.125, 0.375, 0.5, 0.3125}, + {0.1875, 0.375, 0, 0.3125, 0.5, 0.1875}, + {0.125, 0.375, -0.125, 0.25, 0.5, 0.0625}, + {0.0625, 0.375, -0.25, 0.1875, 0.5, -0.0625}, + {0, 0.375, -0.375, 0.125, 0.5, -0.1875}, + {-0.0625, 0.375, -0.625, 0.0625, 0.5, -0.375}, + {0.3125, 0.375, -1.4375, 0.4375, 0.5, -1.25}, + {0.25, 0.375, -1.3125, 0.375, 0.5, -1.125}, + {0.1875, 0.375, -1.1875, 0.3125, 0.5, -1}, + {0.125, 0.375, -1.0625, 0.25, 0.5, -0.875}, + {0.0625, 0.375, -0.9375, 0.1875, 0.5, -0.75}, + {0, 0.375, -0.8125, 0.125, 0.5, -0.625}, }, }, selection_box = { @@ -2419,98 +2466,98 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:small_upper_chord_slanted_"..bridge_colors, { - description = bridge_desc.." Small Slanted Upper Chord", + minetest.register_node("bridger:small_upper_chord_slanted_" .. bridge_color, { + description = bridge_desc .. " Small Slanted Upper Chord", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_small_upper_chord_slanted.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_small_upper_chord_slanted.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_small_upper_chord_slanted.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_small_upper_chord_slanted.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5625, -1.5, -0.4375, -0.4375, -1.375}, -- NodeBox1 - {-0.5, -0.5625, -1.5, 0.5, -0.4375, -1.4375}, -- NodeBox2 - {0.4375, -0.5625, -1.5, 0.5, -0.4375, -1.375}, -- NodeBox3 - {0.4375, -0.5, -1.375, 0.5, -0.375, -1.25}, -- NodeBox4 - {0.4375, -0.4375, -1.25, 0.5, -0.3125, -1.125}, -- NodeBox5 - {0.4375, -0.375, -1.125, 0.5, -0.25, -1}, -- NodeBox6 - {0.4375, -0.3125, -1, 0.5, -0.1875, -0.875}, -- NodeBox7 - {0.4375, -0.25, -0.875, 0.5, -0.125, -0.75}, -- NodeBox8 - {0.4375, -0.1875, -0.75, 0.5, -0.0625, -0.625}, -- NodeBox9 - {0.4375, -0.125, -0.625, 0.5, -2.23517e-008, -0.5}, -- NodeBox10 - {0.4375, -0.0625, -0.5, 0.5, 0.0625, -0.375}, -- NodeBox11 - {0.4375, 0, -0.375, 0.5, 0.125, -0.25}, -- NodeBox12 - {0.4375, 0.0625, -0.25, 0.5, 0.1875, -0.125}, -- NodeBox13 - {0.4375, 0.125, -0.125, 0.5, 0.25, -1.04308e-007}, -- NodeBox14 - {0.4375, 0.1875, 0, 0.5, 0.3125, 0.125}, -- NodeBox15 - {0.4375, 0.25, 0.125, 0.5, 0.375, 0.25}, -- NodeBox16 - {0.4375, 0.3125, 0.25, 0.5, 0.4375, 0.375}, -- NodeBox17 - {0.4375, 0.375, 0.375, 0.5, 0.5, 0.5}, -- NodeBox18 - {-0.5, 0.375, 0.4375, 0.5, 0.5, 0.5}, -- NodeBox19 - {-0.5, -0.5, -1.375, -0.4375, -0.375, -1.25}, -- NodeBox20 - {-0.5, -0.4375, -1.25, -0.4375, -0.3125, -1.125}, -- NodeBox21 - {-0.5, -0.375, -1.125, -0.4375, -0.25, -1}, -- NodeBox22 - {-0.5, -0.3125, -1, -0.4375, -0.1875, -0.875}, -- NodeBox23 - {-0.5, -0.25, -0.875, -0.4375, -0.125, -0.75}, -- NodeBox24 - {-0.5, -0.1875, -0.75, -0.4375, -0.0625, -0.625}, -- NodeBox25 - {-0.5, -0.125, -0.625, -0.4375, 1.11759e-008, -0.5}, -- NodeBox26 - {-0.5, -0.0625, -0.5, -0.4375, 0.0625, -0.375}, -- NodeBox27 - {-0.5, 0, -0.375, -0.4375, 0.125, -0.25}, -- NodeBox28 - {-0.5, 0.0625, -0.25, -0.4375, 0.1875, -0.125}, -- NodeBox29 - {-0.5, 0.125, -0.125, -0.4375, 0.25, 1.41561e-007}, -- NodeBox30 - {-0.5, 0.1875, 0, -0.4375, 0.3125, 0.125}, -- NodeBox31 - {-0.5, 0.25, 0.125, -0.4375, 0.375, 0.25}, -- NodeBox32 - {-0.5, 0.3125, 0.25, -0.4375, 0.4375, 0.375}, -- NodeBox33 - {-0.5, 0.375, 0.375, -0.4375, 0.5, 0.5}, -- NodeBox34 - {-0.4375, -0.5625, -1.5, -0.3125, -0.4375, -1.375}, -- NodeBox35 - {-0.4375, -0.5, -1.375, -0.3125, -0.375, -1.25}, -- NodeBox36 - {-0.375, -0.5, -1.3125, -0.25, -0.375, -1.25}, -- NodeBox37 - {-0.375, -0.4375, -1.25, -0.25, -0.3125, -1.125}, -- NodeBox38 - {-0.3125, -0.4375, -1.1875, -0.1875, -0.3125, -1.125}, -- NodeBox39 - {-0.3125, -0.375, -1.125, -0.1875, -0.25, -1}, -- NodeBox40 - {-0.25, -0.375, -1.0625, -0.125, -0.25, -1}, -- NodeBox41 - {-0.25, -0.3125, -1, -0.125, -0.1875, -0.875}, -- NodeBox42 - {-0.1875, -0.3125, -0.9375, -0.0625, -0.1875, -0.875}, -- NodeBox43 - {-0.1875, -0.25, -0.875, -0.0624999, -0.125, -0.75}, -- NodeBox44 - {-0.125, -0.25, -0.8125, 0.125, -0.125, -0.75}, -- NodeBox45 - {-0.125, -0.1875, -0.75, 0.125, -0.0624999, -0.625}, -- NodeBox46 - {-0.0625, -0.125, -0.625, 0.0625, 9.31323e-008, -0.5}, -- NodeBox47 - {-0.0625, -0.0625, -0.5, 0.0625, 0.0625001, -0.375}, -- NodeBox48 - {-0.125, 0, -0.375, 0.125, 0.125, -0.25}, -- NodeBox49 - {-0.4375, 0.375, 0.375, -0.3125, 0.5, 0.4375}, -- NodeBox62 - {-0.4375, 0.3125, 0.25, -0.3125, 0.4375, 0.375}, -- NodeBox63 - {-0.375, 0.25, 0.125, -0.25, 0.375, 0.25}, -- NodeBox64 - {-0.375, 0.3125, 0.25, -0.25, 0.4375, 0.3125}, -- NodeBox65 - {-0.3125, 0.25, 0.125, -0.1875, 0.375, 0.1875}, -- NodeBox66 - {-0.3125, 0.1875, 0, -0.1875, 0.3125, 0.125}, -- NodeBox67 - {-0.25, 0.1875, 0, -0.125, 0.3125, 0.0625}, -- NodeBox68 - {-0.25, 0.125, -0.125, -0.125, 0.25, 1.30385e-008}, -- NodeBox69 - {-0.1875, 0.125, -0.125, -0.0625, 0.25, -0.0625}, -- NodeBox70 - {-0.1875, 0.0625, -0.25, -0.0625, 0.1875, -0.125}, -- NodeBox71 - {-0.125, 0.0625, -0.25, 0.125, 0.1875, -0.1875}, -- NodeBox72 - {0.0625, 0.0625, -0.25, 0.1875, 0.1875, -0.125}, -- NodeBox73 - {0.0625, 0.125, -0.125, 0.1875, 0.25, -0.0625}, -- NodeBox74 - {0.125, 0.125, -0.125, 0.25, 0.25, 0}, -- NodeBox75 - {0.125, 0.1875, 0, 0.25, 0.3125, 0.0625}, -- NodeBox76 - {0.1875, 0.1875, 0, 0.3125, 0.3125, 0.125}, -- NodeBox77 - {0.1875, 0.25, 0.125, 0.3125, 0.375, 0.1875}, -- NodeBox78 - {0.25, 0.25, 0.125, 0.375, 0.375, 0.25}, -- NodeBox79 - {0.25, 0.3125, 0.25, 0.375, 0.4375, 0.3125}, -- NodeBox80 - {0.3125, 0.3125, 0.3125, 0.4375, 0.4375, 0.375}, -- NodeBox81 - {0.3125, 0.375, 0.375, 0.4375, 0.5, 0.4375}, -- NodeBox82 - {0.3125, -0.5625, -1.4375, 0.4375, -0.4375, -1.375}, -- NodeBox83 - {0.3125, -0.5, -1.375, 0.4375, -0.375, -1.25}, -- NodeBox84 - {0.25, -0.5, -1.3125, 0.375, -0.375, -1.25}, -- NodeBox85 - {0.25, -0.4375, -1.25, 0.375, -0.3125, -1.125}, -- NodeBox86 - {0.1875, -0.4375, -1.1875, 0.3125, -0.3125, -1.125}, -- NodeBox87 - {0.1875, -0.375, -1.125, 0.3125, -0.25, -1}, -- NodeBox88 - {0.125, -0.375, -1.0625, 0.25, -0.25, -1}, -- NodeBox89 - {0.125, -0.3125, -1, 0.25, -0.1875, -0.875}, -- NodeBox90 - {0.0625, -0.3125, -0.9375, 0.1875, -0.1875, -0.875}, -- NodeBox91 - {0.0625, -0.25, -0.875, 0.1875, -0.125, -0.75}, -- NodeBox92 + {-0.5, -0.5625, -1.5, -0.4375, -0.4375, -1.375}, + {-0.5, -0.5625, -1.5, 0.5, -0.4375, -1.4375}, + {0.4375, -0.5625, -1.5, 0.5, -0.4375, -1.375}, + {0.4375, -0.5, -1.375, 0.5, -0.375, -1.25}, + {0.4375, -0.4375, -1.25, 0.5, -0.3125, -1.125}, + {0.4375, -0.375, -1.125, 0.5, -0.25, -1}, + {0.4375, -0.3125, -1, 0.5, -0.1875, -0.875}, + {0.4375, -0.25, -0.875, 0.5, -0.125, -0.75}, + {0.4375, -0.1875, -0.75, 0.5, -0.0625, -0.625}, + {0.4375, -0.125, -0.625, 0.5, -2.23517e-008, -0.5}, + {0.4375, -0.0625, -0.5, 0.5, 0.0625, -0.375}, + {0.4375, 0, -0.375, 0.5, 0.125, -0.25}, + {0.4375, 0.0625, -0.25, 0.5, 0.1875, -0.125}, + {0.4375, 0.125, -0.125, 0.5, 0.25, -1.04308e-007}, + {0.4375, 0.1875, 0, 0.5, 0.3125, 0.125}, + {0.4375, 0.25, 0.125, 0.5, 0.375, 0.25}, + {0.4375, 0.3125, 0.25, 0.5, 0.4375, 0.375}, + {0.4375, 0.375, 0.375, 0.5, 0.5, 0.5}, + {-0.5, 0.375, 0.4375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -1.375, -0.4375, -0.375, -1.25}, + {-0.5, -0.4375, -1.25, -0.4375, -0.3125, -1.125}, + {-0.5, -0.375, -1.125, -0.4375, -0.25, -1}, + {-0.5, -0.3125, -1, -0.4375, -0.1875, -0.875}, + {-0.5, -0.25, -0.875, -0.4375, -0.125, -0.75}, + {-0.5, -0.1875, -0.75, -0.4375, -0.0625, -0.625}, + {-0.5, -0.125, -0.625, -0.4375, 1.11759e-008, -0.5}, + {-0.5, -0.0625, -0.5, -0.4375, 0.0625, -0.375}, + {-0.5, 0, -0.375, -0.4375, 0.125, -0.25}, + {-0.5, 0.0625, -0.25, -0.4375, 0.1875, -0.125}, + {-0.5, 0.125, -0.125, -0.4375, 0.25, 1.41561e-007}, + {-0.5, 0.1875, 0, -0.4375, 0.3125, 0.125}, + {-0.5, 0.25, 0.125, -0.4375, 0.375, 0.25}, + {-0.5, 0.3125, 0.25, -0.4375, 0.4375, 0.375}, + {-0.5, 0.375, 0.375, -0.4375, 0.5, 0.5}, + {-0.4375, -0.5625, -1.5, -0.3125, -0.4375, -1.375}, + {-0.4375, -0.5, -1.375, -0.3125, -0.375, -1.25}, + {-0.375, -0.5, -1.3125, -0.25, -0.375, -1.25}, + {-0.375, -0.4375, -1.25, -0.25, -0.3125, -1.125}, + {-0.3125, -0.4375, -1.1875, -0.1875, -0.3125, -1.125}, + {-0.3125, -0.375, -1.125, -0.1875, -0.25, -1}, + {-0.25, -0.375, -1.0625, -0.125, -0.25, -1}, + {-0.25, -0.3125, -1, -0.125, -0.1875, -0.875}, + {-0.1875, -0.3125, -0.9375, -0.0625, -0.1875, -0.875}, + {-0.1875, -0.25, -0.875, -0.0624999, -0.125, -0.75}, + {-0.125, -0.25, -0.8125, 0.125, -0.125, -0.75}, + {-0.125, -0.1875, -0.75, 0.125, -0.0624999, -0.625}, + {-0.0625, -0.125, -0.625, 0.0625, 9.31323e-008, -0.5}, + {-0.0625, -0.0625, -0.5, 0.0625, 0.0625001, -0.375}, + {-0.125, 0, -0.375, 0.125, 0.125, -0.25}, + {-0.4375, 0.375, 0.375, -0.3125, 0.5, 0.4375}, + {-0.4375, 0.3125, 0.25, -0.3125, 0.4375, 0.375}, + {-0.375, 0.25, 0.125, -0.25, 0.375, 0.25}, + {-0.375, 0.3125, 0.25, -0.25, 0.4375, 0.3125}, + {-0.3125, 0.25, 0.125, -0.1875, 0.375, 0.1875}, + {-0.3125, 0.1875, 0, -0.1875, 0.3125, 0.125}, + {-0.25, 0.1875, 0, -0.125, 0.3125, 0.0625}, + {-0.25, 0.125, -0.125, -0.125, 0.25, 1.30385e-008}, + {-0.1875, 0.125, -0.125, -0.0625, 0.25, -0.0625}, + {-0.1875, 0.0625, -0.25, -0.0625, 0.1875, -0.125}, + {-0.125, 0.0625, -0.25, 0.125, 0.1875, -0.1875}, + {0.0625, 0.0625, -0.25, 0.1875, 0.1875, -0.125}, + {0.0625, 0.125, -0.125, 0.1875, 0.25, -0.0625}, + {0.125, 0.125, -0.125, 0.25, 0.25, 0}, + {0.125, 0.1875, 0, 0.25, 0.3125, 0.0625}, + {0.1875, 0.1875, 0, 0.3125, 0.3125, 0.125}, + {0.1875, 0.25, 0.125, 0.3125, 0.375, 0.1875}, + {0.25, 0.25, 0.125, 0.375, 0.375, 0.25}, + {0.25, 0.3125, 0.25, 0.375, 0.4375, 0.3125}, + {0.3125, 0.3125, 0.3125, 0.4375, 0.4375, 0.375}, + {0.3125, 0.375, 0.375, 0.4375, 0.5, 0.4375}, + {0.3125, -0.5625, -1.4375, 0.4375, -0.4375, -1.375}, + {0.3125, -0.5, -1.375, 0.4375, -0.375, -1.25}, + {0.25, -0.5, -1.3125, 0.375, -0.375, -1.25}, + {0.25, -0.4375, -1.25, 0.375, -0.3125, -1.125}, + {0.1875, -0.4375, -1.1875, 0.3125, -0.3125, -1.125}, + {0.1875, -0.375, -1.125, 0.3125, -0.25, -1}, + {0.125, -0.375, -1.0625, 0.25, -0.25, -1}, + {0.125, -0.3125, -1, 0.25, -0.1875, -0.875}, + {0.0625, -0.3125, -0.9375, 0.1875, -0.1875, -0.875}, + {0.0625, -0.25, -0.875, 0.1875, -0.125, -0.75}, }, }, selection_box = { @@ -2523,79 +2570,79 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:medium_upper_chord_"..bridge_colors, { - description = bridge_desc.." Medium Upper Chord", + minetest.register_node("bridger:medium_upper_chord_" .. bridge_color, { + description = bridge_desc .. " Medium Upper Chord", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_medium_upper_chord.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_medium_upper_chord.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_medium_upper_chord.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_medium_upper_chord.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-1.5, 0.375, 0.4375, 1.5, 0.5, 0.5}, -- NodeBox250 - {1.4375, 0.375, -1.5, 1.5, 0.5, 0.5}, -- NodeBox251 - {-1.5, 0.375, -1.5, 1.5, 0.5, -1.4375}, -- NodeBox252 - {-1.5, 0.375, -1.5, -1.4375, 0.5, 0.5}, -- NodeBox253 - {-1.4375, 0.375, 0.3125, -1.3125, 0.5, 0.4375}, -- NodeBox285 - {-1.375, 0.375, 0.25, -1.1875, 0.5, 0.375}, -- NodeBox286 - {-1.25, 0.375, 0.1875, -1.125, 0.5, 0.3125}, -- NodeBox287 - {-1.1875, 0.375, 0.125, -1, 0.5, 0.25}, -- NodeBox289 - {-1.0625, 0.375, 0.0625, -0.9375, 0.5, 0.1875}, -- NodeBox290 - {-1, 0.375, 0, -0.8125, 0.5, 0.125}, -- NodeBox291 - {-0.875, 0.375, -0.0625, -0.75, 0.5, 0.0625}, -- NodeBox292 - {-0.8125, 0.375, -0.125, -0.625, 0.5, 0}, -- NodeBox293 - {-0.6875, 0.375, -0.1875, -0.5625, 0.5, -0.0625}, -- NodeBox294 - {-0.625, 0.375, -0.25, -0.4375, 0.5, -0.125}, -- NodeBox295 - {-0.5, 0.375, -0.3125, -0.375, 0.5, -0.1875}, -- NodeBox296 - {-0.4375, 0.375, -0.375, -0.25, 0.5, -0.25}, -- NodeBox297 - {-0.3125, 0.375, -0.4375, -0.1875, 0.5, -0.3125}, -- NodeBox298 - {-0.25, 0.375, -0.5, -0.0625, 0.5, -0.375}, -- NodeBox299 - {-0.125, 0.375, -0.5625, 0.125, 0.5, -0.4375}, -- NodeBox300 - {1.3125, 0.375, -1.4375, 1.4375, 0.5, -1.3125}, -- NodeBox301 - {1.1875, 0.375, -1.375, 1.375, 0.5, -1.25}, -- NodeBox302 - {1.125, 0.375, -1.3125, 1.25, 0.5, -1.1875}, -- NodeBox303 - {1, 0.375, -1.25, 1.1875, 0.5, -1.125}, -- NodeBox304 - {0.9375, 0.375, -1.1875, 1.0625, 0.5, -1.0625}, -- NodeBox305 - {0.8125, 0.375, -1.125, 1, 0.5, -1}, -- NodeBox306 - {0.75, 0.375, -1.0625, 0.875, 0.5, -0.9375}, -- NodeBox307 - {0.625, 0.375, -1, 0.8125, 0.5, -0.875}, -- NodeBox308 - {0.5625, 0.375, -0.9375, 0.6875, 0.5, -0.8125}, -- NodeBox309 - {0.4375, 0.375, -0.875, 0.625, 0.5, -0.75}, -- NodeBox310 - {0.375, 0.375, -0.8125, 0.5, 0.5, -0.6875}, -- NodeBox311 - {0.25, 0.375, -0.75, 0.4375, 0.5, -0.625}, -- NodeBox312 - {0.1875, 0.375, -0.6875, 0.3125, 0.5, -0.5625}, -- NodeBox313 - {0.0625, 0.375, -0.625, 0.25, 0.5, -0.5}, -- NodeBox314 - {1.3125, 0.375, 0.3125, 1.4375, 0.5, 0.4375}, -- NodeBox315 - {1.1875, 0.375, 0.25, 1.375, 0.5, 0.375}, -- NodeBox316 - {1.125, 0.375, 0.1875, 1.25, 0.5, 0.3125}, -- NodeBox317 - {1, 0.375, 0.125, 1.1875, 0.5, 0.25}, -- NodeBox318 - {0.9375, 0.375, 0.0625, 1.0625, 0.5, 0.1875}, -- NodeBox319 - {0.8125, 0.375, 0, 1, 0.5, 0.125}, -- NodeBox320 - {0.75, 0.375, -0.0625, 0.875, 0.5, 0.0625}, -- NodeBox321 - {0.625, 0.375, -0.125, 0.8125, 0.5, 0}, -- NodeBox322 - {0.5625, 0.375, -0.1875, 0.6875, 0.5, -0.0625}, -- NodeBox323 - {0.4375, 0.375, -0.25, 0.625, 0.5, -0.125}, -- NodeBox324 - {0.375, 0.375, -0.3125, 0.5, 0.5, -0.1875}, -- NodeBox325 - {0.25, 0.375, -0.375, 0.4375, 0.5, -0.25}, -- NodeBox326 - {0.1875, 0.375, -0.4375, 0.3125, 0.5, -0.3125}, -- NodeBox327 - {0.0625, 0.375, -0.5, 0.25, 0.5, -0.375}, -- NodeBox328 - {-1.4375, 0.375, -1.4375, -1.3125, 0.5, -1.3125}, -- NodeBox329 - {-1.375, 0.375, -1.375, -1.1875, 0.5, -1.25}, -- NodeBox330 - {-1.25, 0.375, -1.3125, -1.125, 0.5, -1.1875}, -- NodeBox331 - {-1.1875, 0.375, -1.25, -1, 0.5, -1.125}, -- NodeBox332 - {-1.0625, 0.375, -1.1875, -0.9375, 0.5, -1.0625}, -- NodeBox333 - {-1, 0.375, -1.125, -0.8125, 0.5, -1}, -- NodeBox334 - {-0.875, 0.375, -1.0625, -0.75, 0.5, -0.9375}, -- NodeBox335 - {-0.8125, 0.375, -1, -0.625, 0.5, -0.875}, -- NodeBox336 - {-0.6875, 0.375, -0.9375, -0.5625, 0.5, -0.8125}, -- NodeBox337 - {-0.625, 0.375, -0.875, -0.4375, 0.5, -0.75}, -- NodeBox338 - {-0.5, 0.375, -0.8125, -0.375, 0.5, -0.6875}, -- NodeBox339 - {-0.4375, 0.375, -0.75, -0.25, 0.5, -0.625}, -- NodeBox340 - {-0.3125, 0.375, -0.6875, -0.1875, 0.5, -0.5625}, -- NodeBox341 - {-0.25, 0.375, -0.625, -0.0625, 0.5, -0.5}, -- NodeBox342 + {-1.5, 0.375, 0.4375, 1.5, 0.5, 0.5}, + {1.4375, 0.375, -1.5, 1.5, 0.5, 0.5}, + {-1.5, 0.375, -1.5, 1.5, 0.5, -1.4375}, + {-1.5, 0.375, -1.5, -1.4375, 0.5, 0.5}, + {-1.4375, 0.375, 0.3125, -1.3125, 0.5, 0.4375}, + {-1.375, 0.375, 0.25, -1.1875, 0.5, 0.375}, + {-1.25, 0.375, 0.1875, -1.125, 0.5, 0.3125}, + {-1.1875, 0.375, 0.125, -1, 0.5, 0.25}, + {-1.0625, 0.375, 0.0625, -0.9375, 0.5, 0.1875}, + {-1, 0.375, 0, -0.8125, 0.5, 0.125}, + {-0.875, 0.375, -0.0625, -0.75, 0.5, 0.0625}, + {-0.8125, 0.375, -0.125, -0.625, 0.5, 0}, + {-0.6875, 0.375, -0.1875, -0.5625, 0.5, -0.0625}, + {-0.625, 0.375, -0.25, -0.4375, 0.5, -0.125}, + {-0.5, 0.375, -0.3125, -0.375, 0.5, -0.1875}, + {-0.4375, 0.375, -0.375, -0.25, 0.5, -0.25}, + {-0.3125, 0.375, -0.4375, -0.1875, 0.5, -0.3125}, + {-0.25, 0.375, -0.5, -0.0625, 0.5, -0.375}, + {-0.125, 0.375, -0.5625, 0.125, 0.5, -0.4375}, + {1.3125, 0.375, -1.4375, 1.4375, 0.5, -1.3125}, + {1.1875, 0.375, -1.375, 1.375, 0.5, -1.25}, + {1.125, 0.375, -1.3125, 1.25, 0.5, -1.1875}, + {1, 0.375, -1.25, 1.1875, 0.5, -1.125}, + {0.9375, 0.375, -1.1875, 1.0625, 0.5, -1.0625}, + {0.8125, 0.375, -1.125, 1, 0.5, -1}, + {0.75, 0.375, -1.0625, 0.875, 0.5, -0.9375}, + {0.625, 0.375, -1, 0.8125, 0.5, -0.875}, + {0.5625, 0.375, -0.9375, 0.6875, 0.5, -0.8125}, + {0.4375, 0.375, -0.875, 0.625, 0.5, -0.75}, + {0.375, 0.375, -0.8125, 0.5, 0.5, -0.6875}, + {0.25, 0.375, -0.75, 0.4375, 0.5, -0.625}, + {0.1875, 0.375, -0.6875, 0.3125, 0.5, -0.5625}, + {0.0625, 0.375, -0.625, 0.25, 0.5, -0.5}, + {1.3125, 0.375, 0.3125, 1.4375, 0.5, 0.4375}, + {1.1875, 0.375, 0.25, 1.375, 0.5, 0.375}, + {1.125, 0.375, 0.1875, 1.25, 0.5, 0.3125}, + {1, 0.375, 0.125, 1.1875, 0.5, 0.25}, + {0.9375, 0.375, 0.0625, 1.0625, 0.5, 0.1875}, + {0.8125, 0.375, 0, 1, 0.5, 0.125}, + {0.75, 0.375, -0.0625, 0.875, 0.5, 0.0625}, + {0.625, 0.375, -0.125, 0.8125, 0.5, 0}, + {0.5625, 0.375, -0.1875, 0.6875, 0.5, -0.0625}, + {0.4375, 0.375, -0.25, 0.625, 0.5, -0.125}, + {0.375, 0.375, -0.3125, 0.5, 0.5, -0.1875}, + {0.25, 0.375, -0.375, 0.4375, 0.5, -0.25}, + {0.1875, 0.375, -0.4375, 0.3125, 0.5, -0.3125}, + {0.0625, 0.375, -0.5, 0.25, 0.5, -0.375}, + {-1.4375, 0.375, -1.4375, -1.3125, 0.5, -1.3125}, + {-1.375, 0.375, -1.375, -1.1875, 0.5, -1.25}, + {-1.25, 0.375, -1.3125, -1.125, 0.5, -1.1875}, + {-1.1875, 0.375, -1.25, -1, 0.5, -1.125}, + {-1.0625, 0.375, -1.1875, -0.9375, 0.5, -1.0625}, + {-1, 0.375, -1.125, -0.8125, 0.5, -1}, + {-0.875, 0.375, -1.0625, -0.75, 0.5, -0.9375}, + {-0.8125, 0.375, -1, -0.625, 0.5, -0.875}, + {-0.6875, 0.375, -0.9375, -0.5625, 0.5, -0.8125}, + {-0.625, 0.375, -0.875, -0.4375, 0.5, -0.75}, + {-0.5, 0.375, -0.8125, -0.375, 0.5, -0.6875}, + {-0.4375, 0.375, -0.75, -0.25, 0.5, -0.625}, + {-0.3125, 0.375, -0.6875, -0.1875, 0.5, -0.5625}, + {-0.25, 0.375, -0.625, -0.0625, 0.5, -0.5}, }, }, selection_box = { @@ -2608,110 +2655,110 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:medium_upper_chord_slanted_"..bridge_colors, { - description = bridge_desc.." Medium Slanted Upper Chord", + minetest.register_node("bridger:medium_upper_chord_slanted_" .. bridge_color, { + description = bridge_desc .. " Medium Slanted Upper Chord", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_medium_upper_chord_slanted.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_medium_upper_chord_slanted.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_medium_upper_chord_slanted.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_medium_upper_chord_slanted.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-1.5, -0.5625, -1.5, -1.4375, -0.4375, -1.375}, -- NodeBox1 - {-1.5, -0.5625, -1.5, 1.5, -0.4375, -1.4375}, -- NodeBox2 - {1.4375, -0.5625, -1.5, 1.5, -0.4375, -1.375}, -- NodeBox3 - {1.4375, -0.5, -1.375, 1.5, -0.375, -1.25}, -- NodeBox4 - {1.4375, -0.4375, -1.25, 1.5, -0.3125, -1.125}, -- NodeBox5 - {1.4375, -0.375, -1.125, 1.5, -0.25, -1}, -- NodeBox6 - {1.4375, -0.3125, -1, 1.5, -0.1875, -0.875}, -- NodeBox7 - {1.4375, -0.25, -0.875, 1.5, -0.125, -0.75}, -- NodeBox8 - {1.4375, -0.1875, -0.75, 1.5, -0.0625, -0.625}, -- NodeBox9 - {1.4375, -0.125, -0.625, 1.5, -2.23517e-008, -0.5}, -- NodeBox10 - {1.4375, -0.0625, -0.5, 1.5, 0.0625, -0.375}, -- NodeBox11 - {1.4375, 0, -0.375, 1.5, 0.125, -0.25}, -- NodeBox12 - {1.4375, 0.0625, -0.25, 1.5, 0.1875, -0.125}, -- NodeBox13 - {1.4375, 0.125, -0.125, 1.5, 0.25, -9.68575e-008}, -- NodeBox14 - {1.4375, 0.1875, 0, 1.5, 0.3125, 0.125}, -- NodeBox15 - {1.4375, 0.25, 0.125, 1.5, 0.375, 0.25}, -- NodeBox16 - {1.4375, 0.3125, 0.25, 1.5, 0.4375, 0.375}, -- NodeBox17 - {1.4375, 0.375, 0.375, 1.5, 0.5, 0.5}, -- NodeBox18 - {-1.5, 0.375, 0.4375, 1.5, 0.5, 0.5}, -- NodeBox19 - {-1.5, -0.5, -1.375, -1.4375, -0.375, -1.25}, -- NodeBox20 - {-1.5, -0.4375, -1.25, -1.4375, -0.3125, -1.125}, -- NodeBox21 - {-1.5, -0.375, -1.125, -1.4375, -0.25, -1}, -- NodeBox22 - {-1.5, -0.3125, -1, -1.4375, -0.1875, -0.875}, -- NodeBox23 - {-1.5, -0.25, -0.875, -1.4375, -0.125, -0.75}, -- NodeBox24 - {-1.5, -0.1875, -0.75, -1.4375, -0.0625, -0.625}, -- NodeBox25 - {-1.5, -0.125, -0.625, -1.4375, 1.11759e-008, -0.5}, -- NodeBox26 - {-1.5, -0.0625, -0.5, -1.4375, 0.0625, -0.375}, -- NodeBox27 - {-1.5, 0, -0.375, -1.4375, 0.125, -0.25}, -- NodeBox28 - {-1.5, 0.0625, -0.25, -1.4375, 0.1875, -0.125}, -- NodeBox29 - {-1.5, 0.125, -0.125, -1.4375, 0.25, 1.49012e-007}, -- NodeBox30 - {-1.5, 0.1875, 0, -1.4375, 0.3125, 0.125}, -- NodeBox31 - {-1.5, 0.25, 0.125, -1.4375, 0.375, 0.25}, -- NodeBox32 - {-1.5, 0.3125, 0.25, -1.4375, 0.4375, 0.375}, -- NodeBox33 - {-1.5, 0.375, 0.375, -1.4375, 0.5, 0.5}, -- NodeBox34 - {-1.4375, -0.5625, -1.4375, -1.3125, -0.4375, -1.375}, -- NodeBox93 - {-1.4375, -0.5, -1.375, -1.1875, -0.375, -1.3125}, -- NodeBox94 - {-1.375, -0.5, -1.3125, -1.125, -0.375, -1.25}, -- NodeBox95 - {-1.25, -0.4375, -1.25, -1, -0.3125, -1.1875}, -- NodeBox96 - {-1.1875, -0.4375, -1.1875, -0.9375, -0.3125, -1.125}, -- NodeBox97 - {-1.0625, -0.375, -1.125, -0.8125, -0.25, -1.0625}, -- NodeBox98 - {-1, -0.375, -1.0625, -0.75, -0.25, -1}, -- NodeBox99 - {-0.875, -0.3125, -1, -0.625, -0.1875, -0.9375}, -- NodeBox100 - {-0.8125, -0.3125, -0.9375, -0.5625, -0.1875, -0.875}, -- NodeBox101 - {-0.6875, -0.25, -0.875, -0.4375, -0.125, -0.8125}, -- NodeBox102 - {-0.625, -0.25, -0.8125, -0.375, -0.125, -0.75}, -- NodeBox103 - {-0.5, -0.1875, -0.75, -0.25, -0.0625, -0.6875}, -- NodeBox104 - {-0.4375, -0.1875, -0.6875, -0.1875, -0.0625, -0.625}, -- NodeBox105 - {-0.3125, -0.125, -0.625, -0.0625, 3.35276e-008, -0.5625}, -- NodeBox106 - {-0.25, -0.125, -0.5625, 0.25, 3.35276e-008, -0.5}, -- NodeBox107 - {-0.25, -0.0625, -0.5, 0.25, 0.0625, -0.4375}, -- NodeBox108 - {-0.3125, -0.0625, -0.4375, -0.0625, 0.0625, -0.375}, -- NodeBox109 - {-0.4375, 0, -0.375, -0.1875, 0.125, -0.3125}, -- NodeBox110 - {-0.5, 0, -0.3125, -0.25, 0.125, -0.25}, -- NodeBox111 - {-0.625, 0.0625, -0.25, -0.375, 0.1875, -0.1875}, -- NodeBox112 - {-0.6875, 0.0625, -0.1875, -0.4375, 0.1875, -0.125}, -- NodeBox113 - {-0.8125, 0.125, -0.125, -0.5625, 0.25, -0.0625001}, -- NodeBox114 - {-0.875, 0.125, -0.0625, -0.625, 0.25, -9.87202e-008}, -- NodeBox115 - {-1, 0.1875, 0, -0.75, 0.3125, 0.0624999}, -- NodeBox116 - {-1.0625, 0.1875, 0.0625, -0.8125, 0.3125, 0.125}, -- NodeBox117 - {-1.1875, 0.25, 0.125, -0.9375, 0.375, 0.1875}, -- NodeBox118 - {-1.25, 0.25, 0.1875, -1, 0.375, 0.25}, -- NodeBox119 - {-1.375, 0.3125, 0.25, -1.125, 0.4375, 0.3125}, -- NodeBox120 - {-1.4375, 0.3125, 0.3125, -1.1875, 0.4375, 0.375}, -- NodeBox121 - {-1.4375, 0.375, 0.375, -1.3125, 0.5, 0.4375}, -- NodeBox122 - {1.3125, 0.375, 0.375, 1.4375, 0.5, 0.4375}, -- NodeBox123 - {1.1875, 0.3125, 0.3125, 1.4375, 0.4375, 0.375}, -- NodeBox124 - {1.125, 0.3125, 0.25, 1.375, 0.4375, 0.3125}, -- NodeBox125 - {1, 0.25, 0.1875, 1.25, 0.375, 0.25}, -- NodeBox126 - {0.9375, 0.25, 0.125, 1.1875, 0.375, 0.1875}, -- NodeBox127 - {0.8125, 0.1875, 0.0625, 1.0625, 0.3125, 0.125}, -- NodeBox128 - {0.75, 0.1875, 0, 1, 0.3125, 0.0624999}, -- NodeBox129 - {0.625, 0.125, -0.0625, 0.875, 0.25, -1.2666e-007}, -- NodeBox130 - {0.5625, 0.125, -0.125, 0.8125, 0.25, -0.0625001}, -- NodeBox131 - {0.4375, 0.0625, -0.1875, 0.6875, 0.1875, -0.125}, -- NodeBox132 - {0.375, 0.0625, -0.25, 0.625, 0.1875, -0.1875}, -- NodeBox133 - {0.25, 0, -0.3125, 0.5, 0.125, -0.25}, -- NodeBox134 - {0.1875, 0, -0.375, 0.4375, 0.125, -0.3125}, -- NodeBox135 - {0.0625, -0.0625, -0.4375, 0.3125, 0.0625, -0.375}, -- NodeBox136 - {0.0625, -0.125, -0.625, 0.3125, 3.72529e-009, -0.5625}, -- NodeBox137 - {0.1875, -0.1875, -0.6875, 0.4375, -0.0625, -0.625}, -- NodeBox138 - {0.25, -0.1875, -0.75, 0.5, -0.0625, -0.6875}, -- NodeBox139 - {0.375, -0.25, -0.8125, 0.625, -0.125, -0.75}, -- NodeBox140 - {0.4375, -0.25, -0.875, 0.6875, -0.125, -0.8125}, -- NodeBox141 - {0.5625, -0.3125, -0.9375, 0.8125, -0.1875, -0.875}, -- NodeBox142 - {0.625, -0.3125, -1, 0.875, -0.1875, -0.9375}, -- NodeBox143 - {0.75, -0.375, -1.0625, 1, -0.25, -1}, -- NodeBox144 - {0.8125, -0.375, -1.125, 1.0625, -0.25, -1.0625}, -- NodeBox145 - {0.9375, -0.4375, -1.1875, 1.1875, -0.3125, -1.125}, -- NodeBox146 - {1, -0.4375, -1.25, 1.25, -0.3125, -1.1875}, -- NodeBox147 - {1.125, -0.5, -1.3125, 1.375, -0.375, -1.25}, -- NodeBox148 - {1.1875, -0.5, -1.375, 1.4375, -0.375, -1.3125}, -- NodeBox149 - {1.3125, -0.5625, -1.4375, 1.4375, -0.4375, -1.375}, -- NodeBox150 + {-1.5, -0.5625, -1.5, -1.4375, -0.4375, -1.375}, + {-1.5, -0.5625, -1.5, 1.5, -0.4375, -1.4375}, + {1.4375, -0.5625, -1.5, 1.5, -0.4375, -1.375}, + {1.4375, -0.5, -1.375, 1.5, -0.375, -1.25}, + {1.4375, -0.4375, -1.25, 1.5, -0.3125, -1.125}, + {1.4375, -0.375, -1.125, 1.5, -0.25, -1}, + {1.4375, -0.3125, -1, 1.5, -0.1875, -0.875}, + {1.4375, -0.25, -0.875, 1.5, -0.125, -0.75}, + {1.4375, -0.1875, -0.75, 1.5, -0.0625, -0.625}, + {1.4375, -0.125, -0.625, 1.5, -2.23517e-008, -0.5}, + {1.4375, -0.0625, -0.5, 1.5, 0.0625, -0.375}, + {1.4375, 0, -0.375, 1.5, 0.125, -0.25}, + {1.4375, 0.0625, -0.25, 1.5, 0.1875, -0.125}, + {1.4375, 0.125, -0.125, 1.5, 0.25, -9.68575e-008}, + {1.4375, 0.1875, 0, 1.5, 0.3125, 0.125}, + {1.4375, 0.25, 0.125, 1.5, 0.375, 0.25}, + {1.4375, 0.3125, 0.25, 1.5, 0.4375, 0.375}, + {1.4375, 0.375, 0.375, 1.5, 0.5, 0.5}, + {-1.5, 0.375, 0.4375, 1.5, 0.5, 0.5}, + {-1.5, -0.5, -1.375, -1.4375, -0.375, -1.25}, + {-1.5, -0.4375, -1.25, -1.4375, -0.3125, -1.125}, + {-1.5, -0.375, -1.125, -1.4375, -0.25, -1}, + {-1.5, -0.3125, -1, -1.4375, -0.1875, -0.875}, + {-1.5, -0.25, -0.875, -1.4375, -0.125, -0.75}, + {-1.5, -0.1875, -0.75, -1.4375, -0.0625, -0.625}, + {-1.5, -0.125, -0.625, -1.4375, 1.11759e-008, -0.5}, + {-1.5, -0.0625, -0.5, -1.4375, 0.0625, -0.375}, + {-1.5, 0, -0.375, -1.4375, 0.125, -0.25}, + {-1.5, 0.0625, -0.25, -1.4375, 0.1875, -0.125}, + {-1.5, 0.125, -0.125, -1.4375, 0.25, 1.49012e-007}, + {-1.5, 0.1875, 0, -1.4375, 0.3125, 0.125}, + {-1.5, 0.25, 0.125, -1.4375, 0.375, 0.25}, + {-1.5, 0.3125, 0.25, -1.4375, 0.4375, 0.375}, + {-1.5, 0.375, 0.375, -1.4375, 0.5, 0.5}, + {-1.4375, -0.5625, -1.4375, -1.3125, -0.4375, -1.375}, + {-1.4375, -0.5, -1.375, -1.1875, -0.375, -1.3125}, + {-1.375, -0.5, -1.3125, -1.125, -0.375, -1.25}, + {-1.25, -0.4375, -1.25, -1, -0.3125, -1.1875}, + {-1.1875, -0.4375, -1.1875, -0.9375, -0.3125, -1.125}, + {-1.0625, -0.375, -1.125, -0.8125, -0.25, -1.0625}, + {-1, -0.375, -1.0625, -0.75, -0.25, -1}, + {-0.875, -0.3125, -1, -0.625, -0.1875, -0.9375}, + {-0.8125, -0.3125, -0.9375, -0.5625, -0.1875, -0.875}, + {-0.6875, -0.25, -0.875, -0.4375, -0.125, -0.8125}, + {-0.625, -0.25, -0.8125, -0.375, -0.125, -0.75}, + {-0.5, -0.1875, -0.75, -0.25, -0.0625, -0.6875}, + {-0.4375, -0.1875, -0.6875, -0.1875, -0.0625, -0.625}, + {-0.3125, -0.125, -0.625, -0.0625, 3.35276e-008, -0.5625}, + {-0.25, -0.125, -0.5625, 0.25, 3.35276e-008, -0.5}, + {-0.25, -0.0625, -0.5, 0.25, 0.0625, -0.4375}, + {-0.3125, -0.0625, -0.4375, -0.0625, 0.0625, -0.375}, + {-0.4375, 0, -0.375, -0.1875, 0.125, -0.3125}, + {-0.5, 0, -0.3125, -0.25, 0.125, -0.25}, + {-0.625, 0.0625, -0.25, -0.375, 0.1875, -0.1875}, + {-0.6875, 0.0625, -0.1875, -0.4375, 0.1875, -0.125}, + {-0.8125, 0.125, -0.125, -0.5625, 0.25, -0.0625001}, + {-0.875, 0.125, -0.0625, -0.625, 0.25, -9.87202e-008}, + {-1, 0.1875, 0, -0.75, 0.3125, 0.0624999}, + {-1.0625, 0.1875, 0.0625, -0.8125, 0.3125, 0.125}, + {-1.1875, 0.25, 0.125, -0.9375, 0.375, 0.1875}, + {-1.25, 0.25, 0.1875, -1, 0.375, 0.25}, + {-1.375, 0.3125, 0.25, -1.125, 0.4375, 0.3125}, + {-1.4375, 0.3125, 0.3125, -1.1875, 0.4375, 0.375}, + {-1.4375, 0.375, 0.375, -1.3125, 0.5, 0.4375}, + {1.3125, 0.375, 0.375, 1.4375, 0.5, 0.4375}, + {1.1875, 0.3125, 0.3125, 1.4375, 0.4375, 0.375}, + {1.125, 0.3125, 0.25, 1.375, 0.4375, 0.3125}, + {1, 0.25, 0.1875, 1.25, 0.375, 0.25}, + {0.9375, 0.25, 0.125, 1.1875, 0.375, 0.1875}, + {0.8125, 0.1875, 0.0625, 1.0625, 0.3125, 0.125}, + {0.75, 0.1875, 0, 1, 0.3125, 0.0624999}, + {0.625, 0.125, -0.0625, 0.875, 0.25, -1.2666e-007}, + {0.5625, 0.125, -0.125, 0.8125, 0.25, -0.0625001}, + {0.4375, 0.0625, -0.1875, 0.6875, 0.1875, -0.125}, + {0.375, 0.0625, -0.25, 0.625, 0.1875, -0.1875}, + {0.25, 0, -0.3125, 0.5, 0.125, -0.25}, + {0.1875, 0, -0.375, 0.4375, 0.125, -0.3125}, + {0.0625, -0.0625, -0.4375, 0.3125, 0.0625, -0.375}, + {0.0625, -0.125, -0.625, 0.3125, 3.72529e-009, -0.5625}, + {0.1875, -0.1875, -0.6875, 0.4375, -0.0625, -0.625}, + {0.25, -0.1875, -0.75, 0.5, -0.0625, -0.6875}, + {0.375, -0.25, -0.8125, 0.625, -0.125, -0.75}, + {0.4375, -0.25, -0.875, 0.6875, -0.125, -0.8125}, + {0.5625, -0.3125, -0.9375, 0.8125, -0.1875, -0.875}, + {0.625, -0.3125, -1, 0.875, -0.1875, -0.9375}, + {0.75, -0.375, -1.0625, 1, -0.25, -1}, + {0.8125, -0.375, -1.125, 1.0625, -0.25, -1.0625}, + {0.9375, -0.4375, -1.1875, 1.1875, -0.3125, -1.125}, + {1, -0.4375, -1.25, 1.25, -0.3125, -1.1875}, + {1.125, -0.5, -1.3125, 1.375, -0.375, -1.25}, + {1.1875, -0.5, -1.375, 1.4375, -0.375, -1.3125}, + {1.3125, -0.5625, -1.4375, 1.4375, -0.4375, -1.375}, }, }, selection_box = { @@ -2724,75 +2771,75 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:large_upper_chord_"..bridge_colors, { - description = bridge_desc.." Large Upper Chord", + minetest.register_node("bridger:large_upper_chord_" .. bridge_color, { + description = bridge_desc .. " Large Upper Chord", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_large_upper_chord.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_large_upper_chord.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_large_upper_chord.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_large_upper_chord.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-2.5, 0.375, 0.4375, 2.5, 0.5, 0.5}, -- NodeBox250 - {2.4375, 0.375, -1.5, 2.5, 0.5, 0.5}, -- NodeBox251 - {-2.5, 0.375, -1.5, 2.5, 0.5, -1.4375}, -- NodeBox252 - {-2.5, 0.375, -1.5, -2.4375, 0.5, 0.5}, -- NodeBox253 - {-2.4375, 0.375, 0.3125, -2.1875, 0.5, 0.4375}, -- NodeBox343 - {-2.3125, 0.375, 0.25, -2, 0.5, 0.375}, -- NodeBox344 - {-2.125, 0.375, 0.1875, -1.875, 0.5, 0.3125}, -- NodeBox345 - {-2, 0.375, 0.125, -1.6875, 0.5, 0.25}, -- NodeBox346 - {-1.875, 0.375, 0.0625, -1.5, 0.5, 0.1875}, -- NodeBox347 - {-1.625, 0.375, 0, -1.375, 0.5, 0.125}, -- NodeBox348 - {-1.5, 0.375, -0.0625, -1.1875, 0.5, 0.0625}, -- NodeBox349 - {-1.3125, 0.375, -0.125, -1, 0.5, 0}, -- NodeBox350 - {-1.125, 0.375, -0.1875, -0.875, 0.5, -0.0625}, -- NodeBox351 - {-1, 0.375, -0.25, -0.6875, 0.5, -0.125}, -- NodeBox352 - {-0.8125, 0.375, -0.3125, -0.5, 0.5, -0.1875}, -- NodeBox353 - {-0.625, 0.375, -0.375, -0.375, 0.5, -0.25}, -- NodeBox354 - {-0.5, 0.375, -0.4375, -0.1875, 0.5, -0.3125}, -- NodeBox355 - {2.1875, 0.375, 0.3125, 2.4375, 0.5, 0.4375}, -- NodeBox356 - {2, 0.375, 0.25, 2.3125, 0.5, 0.375}, -- NodeBox357 - {1.875, 0.375, 0.1875, 2.125, 0.5, 0.3125}, -- NodeBox358 - {1.6875, 0.375, 0.125, 2, 0.5, 0.25}, -- NodeBox359 - {1.5, 0.375, 0.0625, 1.8125, 0.5, 0.1875}, -- NodeBox360 - {1.1875, 0.375, -0.0625, 1.5, 0.5, 0.0625}, -- NodeBox361 - {1.375, 0.375, 0, 1.625, 0.5, 0.125}, -- NodeBox362 - {1, 0.375, -0.125, 1.3125, 0.5, 0}, -- NodeBox363 - {0.875, 0.375, -0.1875, 1.125, 0.5, -0.0625}, -- NodeBox364 - {0.6875, 0.375, -0.25, 1, 0.5, -0.125}, -- NodeBox365 - {0.5, 0.375, -0.3125, 0.8125, 0.5, -0.1875}, -- NodeBox366 - {0.375, 0.375, -0.375, 0.625, 0.5, -0.25}, -- NodeBox367 - {0.1875, 0.375, -0.4375, 0.5, 0.5, -0.3125}, -- NodeBox368 - {-0.375, 0.375, -0.625, 0.3125, 0.5, -0.375}, -- NodeBox369 - {2.1875, 0.375, -1.4375, 2.4375, 0.5, -1.3125}, -- NodeBox370 - {2, 0.375, -1.375, 2.3125, 0.5, -1.25}, -- NodeBox371 - {1.875, 0.375, -1.3125, 2.125, 0.5, -1.1875}, -- NodeBox372 - {1.6875, 0.375, -1.25, 2, 0.5, -1.125}, -- NodeBox373 - {1.5, 0.375, -1.1875, 1.8125, 0.5, -1.0625}, -- NodeBox374 - {1.375, 0.375, -1.125, 1.625, 0.5, -1}, -- NodeBox375 - {1.1875, 0.375, -1.0625, 1.5, 0.5, -0.9375}, -- NodeBox376 - {1, 0.375, -1, 1.3125, 0.5, -0.875}, -- NodeBox377 - {0.875, 0.375, -0.9375, 1.125, 0.5, -0.8125}, -- NodeBox378 - {0.6875, 0.375, -0.875, 1, 0.5, -0.75}, -- NodeBox379 - {0.5, 0.375, -0.8125, 0.8125, 0.5, -0.6875}, -- NodeBox380 - {0.375, 0.375, -0.75, 0.625, 0.5, -0.625}, -- NodeBox381 - {0.1875, 0.375, -0.6875, 0.5, 0.5, -0.5625}, -- NodeBox382 - {-2.4375, 0.375, -1.4375, -2.1875, 0.5, -1.3125}, -- NodeBox383 - {-2.3125, 0.375, -1.375, -2, 0.5, -1.25}, -- NodeBox384 - {-2.125, 0.375, -1.3125, -1.875, 0.5, -1.1875}, -- NodeBox385 - {-2, 0.375, -1.25, -1.6875, 0.5, -1.125}, -- NodeBox386 - {-1.8125, 0.375, -1.1875, -1.5, 0.5, -1.0625}, -- NodeBox387 - {-1.625, 0.375, -1.125, -1.375, 0.5, -1}, -- NodeBox388 - {-1.5, 0.375, -1.0625, -1.1875, 0.5, -0.9375}, -- NodeBox389 - {-1.3125, 0.375, -1, -1, 0.5, -0.875}, -- NodeBox390 - {-1.125, 0.375, -0.9375, -0.875, 0.5, -0.8125}, -- NodeBox391 - {-1, 0.375, -0.875, -0.6875, 0.5, -0.75}, -- NodeBox392 - {-0.8125, 0.375, -0.8125, -0.5, 0.5, -0.6875}, -- NodeBox393 - {-0.625, 0.375, -0.75, -0.375, 0.5, -0.625}, -- NodeBox394 - {-0.5, 0.375, -0.6875, -0.1875, 0.5, -0.5625}, -- NodeBox395 + {-2.5, 0.375, 0.4375, 2.5, 0.5, 0.5}, + {2.4375, 0.375, -1.5, 2.5, 0.5, 0.5}, + {-2.5, 0.375, -1.5, 2.5, 0.5, -1.4375}, + {-2.5, 0.375, -1.5, -2.4375, 0.5, 0.5}, + {-2.4375, 0.375, 0.3125, -2.1875, 0.5, 0.4375}, + {-2.3125, 0.375, 0.25, -2, 0.5, 0.375}, + {-2.125, 0.375, 0.1875, -1.875, 0.5, 0.3125}, + {-2, 0.375, 0.125, -1.6875, 0.5, 0.25}, + {-1.875, 0.375, 0.0625, -1.5, 0.5, 0.1875}, + {-1.625, 0.375, 0, -1.375, 0.5, 0.125}, + {-1.5, 0.375, -0.0625, -1.1875, 0.5, 0.0625}, + {-1.3125, 0.375, -0.125, -1, 0.5, 0}, + {-1.125, 0.375, -0.1875, -0.875, 0.5, -0.0625}, + {-1, 0.375, -0.25, -0.6875, 0.5, -0.125}, + {-0.8125, 0.375, -0.3125, -0.5, 0.5, -0.1875}, + {-0.625, 0.375, -0.375, -0.375, 0.5, -0.25}, + {-0.5, 0.375, -0.4375, -0.1875, 0.5, -0.3125}, + {2.1875, 0.375, 0.3125, 2.4375, 0.5, 0.4375}, + {2, 0.375, 0.25, 2.3125, 0.5, 0.375}, + {1.875, 0.375, 0.1875, 2.125, 0.5, 0.3125}, + {1.6875, 0.375, 0.125, 2, 0.5, 0.25}, + {1.5, 0.375, 0.0625, 1.8125, 0.5, 0.1875}, + {1.1875, 0.375, -0.0625, 1.5, 0.5, 0.0625}, + {1.375, 0.375, 0, 1.625, 0.5, 0.125}, + {1, 0.375, -0.125, 1.3125, 0.5, 0}, + {0.875, 0.375, -0.1875, 1.125, 0.5, -0.0625}, + {0.6875, 0.375, -0.25, 1, 0.5, -0.125}, + {0.5, 0.375, -0.3125, 0.8125, 0.5, -0.1875}, + {0.375, 0.375, -0.375, 0.625, 0.5, -0.25}, + {0.1875, 0.375, -0.4375, 0.5, 0.5, -0.3125}, + {-0.375, 0.375, -0.625, 0.3125, 0.5, -0.375}, + {2.1875, 0.375, -1.4375, 2.4375, 0.5, -1.3125}, + {2, 0.375, -1.375, 2.3125, 0.5, -1.25}, + {1.875, 0.375, -1.3125, 2.125, 0.5, -1.1875}, + {1.6875, 0.375, -1.25, 2, 0.5, -1.125}, + {1.5, 0.375, -1.1875, 1.8125, 0.5, -1.0625}, + {1.375, 0.375, -1.125, 1.625, 0.5, -1}, + {1.1875, 0.375, -1.0625, 1.5, 0.5, -0.9375}, + {1, 0.375, -1, 1.3125, 0.5, -0.875}, + {0.875, 0.375, -0.9375, 1.125, 0.5, -0.8125}, + {0.6875, 0.375, -0.875, 1, 0.5, -0.75}, + {0.5, 0.375, -0.8125, 0.8125, 0.5, -0.6875}, + {0.375, 0.375, -0.75, 0.625, 0.5, -0.625}, + {0.1875, 0.375, -0.6875, 0.5, 0.5, -0.5625}, + {-2.4375, 0.375, -1.4375, -2.1875, 0.5, -1.3125}, + {-2.3125, 0.375, -1.375, -2, 0.5, -1.25}, + {-2.125, 0.375, -1.3125, -1.875, 0.5, -1.1875}, + {-2, 0.375, -1.25, -1.6875, 0.5, -1.125}, + {-1.8125, 0.375, -1.1875, -1.5, 0.5, -1.0625}, + {-1.625, 0.375, -1.125, -1.375, 0.5, -1}, + {-1.5, 0.375, -1.0625, -1.1875, 0.5, -0.9375}, + {-1.3125, 0.375, -1, -1, 0.5, -0.875}, + {-1.125, 0.375, -0.9375, -0.875, 0.5, -0.8125}, + {-1, 0.375, -0.875, -0.6875, 0.5, -0.75}, + {-0.8125, 0.375, -0.8125, -0.5, 0.5, -0.6875}, + {-0.625, 0.375, -0.75, -0.375, 0.5, -0.625}, + {-0.5, 0.375, -0.6875, -0.1875, 0.5, -0.5625}, }, }, selection_box = { @@ -2805,110 +2852,110 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:large_upper_chord_slanted_"..bridge_colors, { - description = bridge_desc.." Large Slanted Upper Chord", + minetest.register_node("bridger:large_upper_chord_slanted_" .. bridge_color, { + description = bridge_desc .. " Large Slanted Upper Chord", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_large_upper_chord_slanted.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_large_upper_chord_slanted.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_large_upper_chord_slanted.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_large_upper_chord_slanted.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-2.5, -0.5625, -1.5, -2.4375, -0.4375, -1.375}, -- NodeBox1 - {-2.5, -0.5625, -1.5, 2.5, -0.4375, -1.4375}, -- NodeBox2 - {2.4375, -0.5625, -1.5, 2.5, -0.4375, -1.375}, -- NodeBox3 - {2.4375, -0.5, -1.375, 2.5, -0.375, -1.25}, -- NodeBox4 - {2.4375, -0.4375, -1.25, 2.5, -0.3125, -1.125}, -- NodeBox5 - {2.4375, -0.375, -1.125, 2.5, -0.25, -1}, -- NodeBox6 - {2.4375, -0.3125, -1, 2.5, -0.1875, -0.875}, -- NodeBox7 - {2.4375, -0.25, -0.875, 2.5, -0.125, -0.75}, -- NodeBox8 - {2.4375, -0.1875, -0.75, 2.5, -0.0625, -0.625}, -- NodeBox9 - {2.4375, -0.125, -0.625, 2.5, -2.23517e-008, -0.5}, -- NodeBox10 - {2.4375, -0.0625, -0.5, 2.5, 0.0625, -0.375}, -- NodeBox11 - {2.4375, 0, -0.375, 2.5, 0.125, -0.25}, -- NodeBox12 - {2.4375, 0.0625, -0.25, 2.5, 0.1875, -0.125}, -- NodeBox13 - {2.4375, 0.125, -0.125, 2.5, 0.25, -9.68575e-008}, -- NodeBox14 - {2.4375, 0.1875, 0, 2.5, 0.3125, 0.125}, -- NodeBox15 - {2.4375, 0.25, 0.125, 2.5, 0.375, 0.25}, -- NodeBox16 - {2.4375, 0.3125, 0.25, 2.5, 0.4375, 0.375}, -- NodeBox17 - {2.4375, 0.375, 0.375, 2.5, 0.5, 0.5}, -- NodeBox18 - {-2.5, 0.375, 0.4375, 2.5, 0.5, 0.5}, -- NodeBox19 - {-2.5, -0.5, -1.375, -2.4375, -0.375, -1.25}, -- NodeBox20 - {-2.5, -0.4375, -1.25, -2.4375, -0.3125, -1.125}, -- NodeBox21 - {-2.5, -0.375, -1.125, -2.4375, -0.25, -1}, -- NodeBox22 - {-2.5, -0.3125, -1, -2.4375, -0.1875, -0.875}, -- NodeBox23 - {-2.5, -0.25, -0.875, -2.4375, -0.125, -0.75}, -- NodeBox24 - {-2.5, -0.1875, -0.75, -2.4375, -0.0625, -0.625}, -- NodeBox25 - {-2.5, -0.125, -0.625, -2.4375, 1.11759e-008, -0.5}, -- NodeBox26 - {-2.5, -0.0625, -0.5, -2.4375, 0.0625, -0.375}, -- NodeBox27 - {-2.5, 0, -0.375, -2.4375, 0.125, -0.25}, -- NodeBox28 - {-2.5, 0.0625, -0.25, -2.4375, 0.1875, -0.125}, -- NodeBox29 - {-2.5, 0.125, -0.125, -2.4375, 0.25, 1.67638e-007}, -- NodeBox30 - {-2.5, 0.1875, 0, -2.4375, 0.3125, 0.125}, -- NodeBox31 - {-2.5, 0.25, 0.125, -2.4375, 0.375, 0.25}, -- NodeBox32 - {-2.5, 0.3125, 0.25, -2.4375, 0.4375, 0.375}, -- NodeBox33 - {-2.5, 0.375, 0.375, -2.4375, 0.5, 0.5}, -- NodeBox34 - {-2.4375, -0.5625, -1.4375, -2.1875, -0.4375, -1.375}, -- NodeBox164 - {-2.4375, -0.5625, -1.375, -2, -0.4375, -1.3125}, -- NodeBox165 - {-2.3125, -0.5625, -1.3125, -1.875, -0.4375, -1.25}, -- NodeBox166 - {-2.125, -0.4375, -1.25, -1.6875, -0.3125, -1.1875}, -- NodeBox167 - {-2, -0.4375, -1.1875, -1.5625, -0.3125, -1.125}, -- NodeBox168 - {-1.8125, -0.375, -1.125, -1.375, -0.25, -1.0625}, -- NodeBox169 - {-1.6875, -0.375, -1.0625, -1.25, -0.25, -1}, -- NodeBox170 - {-1.5, -0.3125, -1, -1.0625, -0.1875, -0.9375}, -- NodeBox171 - {-1.375, -0.3125, -0.9375, -0.937501, -0.1875, -0.875}, -- NodeBox172 - {-1.1875, -0.25, -0.875, -0.750001, -0.125, -0.8125}, -- NodeBox173 - {-1.0625, -0.25, -0.8125, -0.625001, -0.125, -0.75}, -- NodeBox174 - {-0.875, -0.1875, -0.75, -0.437501, -0.0624999, -0.6875}, -- NodeBox175 - {-0.75, -0.1875, -0.6875, -0.312501, -0.0624999, -0.625}, -- NodeBox176 - {-0.5625, -0.125, -0.625, -0.125001, 1.60187e-007, -0.5625}, -- NodeBox177 - {-0.4375, -0.125, -0.5625, 0.4375, 1.56462e-007, -0.5}, -- NodeBox178 - {-0.4375, -0.0625, -0.5, 0.4375, 0.0625001, -0.4375}, -- NodeBox179 - {-0.5625, -0.0625, -0.4375, -0.125, 0.0625001, -0.375}, -- NodeBox180 - {-0.75, 0, -0.375, -0.3125, 0.125, -0.3125}, -- NodeBox181 - {-0.875, 0, -0.3125, -0.4375, 0.125, -0.25}, -- NodeBox182 - {-1.0625, 0.0625, -0.25, -0.625, 0.1875, -0.1875}, -- NodeBox183 - {-1.1875, 0.0625, -0.1875, -0.75, 0.1875, -0.125}, -- NodeBox184 - {-1.375, 0.125, -0.125, -0.9375, 0.25, -0.0625001}, -- NodeBox185 - {-1.5, 0.125, -0.0625, -1.0625, 0.25, -7.07805e-008}, -- NodeBox186 - {-1.6875, 0.1875, 0, -1.25, 0.3125, 0.0624999}, -- NodeBox187 - {-1.8125, 0.1875, 0.0625, -1.375, 0.3125, 0.125}, -- NodeBox188 - {-2, 0.25, 0.125, -1.5625, 0.375, 0.1875}, -- NodeBox189 - {-2.125, 0.25, 0.1875, -1.6875, 0.375, 0.25}, -- NodeBox190 - {-2.3125, 0.3125, 0.25, -1.875, 0.4375, 0.3125}, -- NodeBox191 - {-2.4375, 0.3125, 0.3125, -2, 0.4375, 0.375}, -- NodeBox192 - {-2.4375, 0.375, 0.375, -2.1875, 0.5, 0.4375}, -- NodeBox193 - {2.1875, 0.375, 0.375, 2.4375, 0.5, 0.4375}, -- NodeBox194 - {2, 0.3125, 0.3125, 2.4375, 0.4375, 0.375}, -- NodeBox195 - {1.875, 0.3125, 0.25, 2.3125, 0.4375, 0.3125}, -- NodeBox196 - {1.6875, 0.25, 0.1875, 2.125, 0.375, 0.25}, -- NodeBox197 - {1.5625, 0.25, 0.125, 2, 0.375, 0.1875}, -- NodeBox198 - {1.375, 0.1875, 0.0625, 1.8125, 0.3125, 0.125}, -- NodeBox199 - {1.25, 0.1875, 0, 1.6875, 0.3125, 0.0624999}, -- NodeBox200 - {1.0625, 0.125, -0.0625, 1.5, 0.25, -6.70552e-008}, -- NodeBox201 - {0.9375, 0.125, -0.125, 1.375, 0.25, -0.0625001}, -- NodeBox202 - {0.75, 0.0625, -0.1875, 1.1875, 0.1875, -0.125}, -- NodeBox203 - {0.625, 0.0625, -0.25, 1.0625, 0.1875, -0.1875}, -- NodeBox204 - {0.4375, 0, -0.3125, 0.875, 0.125, -0.25}, -- NodeBox205 - {0.3125, 0, -0.375, 0.75, 0.125, -0.3125}, -- NodeBox206 - {0.125, 0, -0.4375, 0.5625, 0.125, -0.375}, -- NodeBox207 - {0.125, -0.125, -0.625, 0.5625, 1.22935e-007, -0.5625}, -- NodeBox208 - {0.3125, -0.1875, -0.6875, 0.75, -0.0624999, -0.625}, -- NodeBox209 - {0.4375, -0.1875, -0.75, 0.875, -0.0624999, -0.6875}, -- NodeBox210 - {0.625, -0.25, -0.8125, 1.0625, -0.125, -0.75}, -- NodeBox211 - {0.75, -0.25, -0.875, 1.1875, -0.125, -0.8125}, -- NodeBox212 - {0.9375, -0.3125, -0.9375, 1.375, -0.1875, -0.875}, -- NodeBox213 - {1.0625, -0.3125, -1, 1.5, -0.1875, -0.9375}, -- NodeBox214 - {1.25, -0.375, -1.0625, 1.6875, -0.25, -1}, -- NodeBox215 - {1.375, -0.375, -1.125, 1.8125, -0.25, -1.0625}, -- NodeBox216 - {1.5625, -0.4375, -1.1875, 2, -0.3125, -1.125}, -- NodeBox217 - {1.6875, -0.4375, -1.25, 2.125, -0.3125, -1.1875}, -- NodeBox218 - {1.875, -0.5, -1.3125, 2.3125, -0.375, -1.25}, -- NodeBox219 - {2, -0.5, -1.375, 2.4375, -0.375, -1.3125}, -- NodeBox220 - {2.1875, -0.5625, -1.4375, 2.4375, -0.4375, -1.375}, -- NodeBox221 + {-2.5, -0.5625, -1.5, -2.4375, -0.4375, -1.375}, + {-2.5, -0.5625, -1.5, 2.5, -0.4375, -1.4375}, + {2.4375, -0.5625, -1.5, 2.5, -0.4375, -1.375}, + {2.4375, -0.5, -1.375, 2.5, -0.375, -1.25}, + {2.4375, -0.4375, -1.25, 2.5, -0.3125, -1.125}, + {2.4375, -0.375, -1.125, 2.5, -0.25, -1}, + {2.4375, -0.3125, -1, 2.5, -0.1875, -0.875}, + {2.4375, -0.25, -0.875, 2.5, -0.125, -0.75}, + {2.4375, -0.1875, -0.75, 2.5, -0.0625, -0.625}, + {2.4375, -0.125, -0.625, 2.5, -2.23517e-008, -0.5}, + {2.4375, -0.0625, -0.5, 2.5, 0.0625, -0.375}, + {2.4375, 0, -0.375, 2.5, 0.125, -0.25}, + {2.4375, 0.0625, -0.25, 2.5, 0.1875, -0.125}, + {2.4375, 0.125, -0.125, 2.5, 0.25, -9.68575e-008}, + {2.4375, 0.1875, 0, 2.5, 0.3125, 0.125}, + {2.4375, 0.25, 0.125, 2.5, 0.375, 0.25}, + {2.4375, 0.3125, 0.25, 2.5, 0.4375, 0.375}, + {2.4375, 0.375, 0.375, 2.5, 0.5, 0.5}, + {-2.5, 0.375, 0.4375, 2.5, 0.5, 0.5}, + {-2.5, -0.5, -1.375, -2.4375, -0.375, -1.25}, + {-2.5, -0.4375, -1.25, -2.4375, -0.3125, -1.125}, + {-2.5, -0.375, -1.125, -2.4375, -0.25, -1}, + {-2.5, -0.3125, -1, -2.4375, -0.1875, -0.875}, + {-2.5, -0.25, -0.875, -2.4375, -0.125, -0.75}, + {-2.5, -0.1875, -0.75, -2.4375, -0.0625, -0.625}, + {-2.5, -0.125, -0.625, -2.4375, 1.11759e-008, -0.5}, + {-2.5, -0.0625, -0.5, -2.4375, 0.0625, -0.375}, + {-2.5, 0, -0.375, -2.4375, 0.125, -0.25}, + {-2.5, 0.0625, -0.25, -2.4375, 0.1875, -0.125}, + {-2.5, 0.125, -0.125, -2.4375, 0.25, 1.67638e-007}, + {-2.5, 0.1875, 0, -2.4375, 0.3125, 0.125}, + {-2.5, 0.25, 0.125, -2.4375, 0.375, 0.25}, + {-2.5, 0.3125, 0.25, -2.4375, 0.4375, 0.375}, + {-2.5, 0.375, 0.375, -2.4375, 0.5, 0.5}, + {-2.4375, -0.5625, -1.4375, -2.1875, -0.4375, -1.375}, + {-2.4375, -0.5625, -1.375, -2, -0.4375, -1.3125}, + {-2.3125, -0.5625, -1.3125, -1.875, -0.4375, -1.25}, + {-2.125, -0.4375, -1.25, -1.6875, -0.3125, -1.1875}, + {-2, -0.4375, -1.1875, -1.5625, -0.3125, -1.125}, + {-1.8125, -0.375, -1.125, -1.375, -0.25, -1.0625}, + {-1.6875, -0.375, -1.0625, -1.25, -0.25, -1}, + {-1.5, -0.3125, -1, -1.0625, -0.1875, -0.9375}, + {-1.375, -0.3125, -0.9375, -0.937501, -0.1875, -0.875}, + {-1.1875, -0.25, -0.875, -0.750001, -0.125, -0.8125}, + {-1.0625, -0.25, -0.8125, -0.625001, -0.125, -0.75}, + {-0.875, -0.1875, -0.75, -0.437501, -0.0624999, -0.6875}, + {-0.75, -0.1875, -0.6875, -0.312501, -0.0624999, -0.625}, + {-0.5625, -0.125, -0.625, -0.125001, 1.60187e-007, -0.5625}, + {-0.4375, -0.125, -0.5625, 0.4375, 1.56462e-007, -0.5}, + {-0.4375, -0.0625, -0.5, 0.4375, 0.0625001, -0.4375}, + {-0.5625, -0.0625, -0.4375, -0.125, 0.0625001, -0.375}, + {-0.75, 0, -0.375, -0.3125, 0.125, -0.3125}, + {-0.875, 0, -0.3125, -0.4375, 0.125, -0.25}, + {-1.0625, 0.0625, -0.25, -0.625, 0.1875, -0.1875}, + {-1.1875, 0.0625, -0.1875, -0.75, 0.1875, -0.125}, + {-1.375, 0.125, -0.125, -0.9375, 0.25, -0.0625001}, + {-1.5, 0.125, -0.0625, -1.0625, 0.25, -7.07805e-008}, + {-1.6875, 0.1875, 0, -1.25, 0.3125, 0.0624999}, + {-1.8125, 0.1875, 0.0625, -1.375, 0.3125, 0.125}, + {-2, 0.25, 0.125, -1.5625, 0.375, 0.1875}, + {-2.125, 0.25, 0.1875, -1.6875, 0.375, 0.25}, + {-2.3125, 0.3125, 0.25, -1.875, 0.4375, 0.3125}, + {-2.4375, 0.3125, 0.3125, -2, 0.4375, 0.375}, + {-2.4375, 0.375, 0.375, -2.1875, 0.5, 0.4375}, + {2.1875, 0.375, 0.375, 2.4375, 0.5, 0.4375}, + {2, 0.3125, 0.3125, 2.4375, 0.4375, 0.375}, + {1.875, 0.3125, 0.25, 2.3125, 0.4375, 0.3125}, + {1.6875, 0.25, 0.1875, 2.125, 0.375, 0.25}, + {1.5625, 0.25, 0.125, 2, 0.375, 0.1875}, + {1.375, 0.1875, 0.0625, 1.8125, 0.3125, 0.125}, + {1.25, 0.1875, 0, 1.6875, 0.3125, 0.0624999}, + {1.0625, 0.125, -0.0625, 1.5, 0.25, -6.70552e-008}, + {0.9375, 0.125, -0.125, 1.375, 0.25, -0.0625001}, + {0.75, 0.0625, -0.1875, 1.1875, 0.1875, -0.125}, + {0.625, 0.0625, -0.25, 1.0625, 0.1875, -0.1875}, + {0.4375, 0, -0.3125, 0.875, 0.125, -0.25}, + {0.3125, 0, -0.375, 0.75, 0.125, -0.3125}, + {0.125, 0, -0.4375, 0.5625, 0.125, -0.375}, + {0.125, -0.125, -0.625, 0.5625, 1.22935e-007, -0.5625}, + {0.3125, -0.1875, -0.6875, 0.75, -0.0624999, -0.625}, + {0.4375, -0.1875, -0.75, 0.875, -0.0624999, -0.6875}, + {0.625, -0.25, -0.8125, 1.0625, -0.125, -0.75}, + {0.75, -0.25, -0.875, 1.1875, -0.125, -0.8125}, + {0.9375, -0.3125, -0.9375, 1.375, -0.1875, -0.875}, + {1.0625, -0.3125, -1, 1.5, -0.1875, -0.9375}, + {1.25, -0.375, -1.0625, 1.6875, -0.25, -1}, + {1.375, -0.375, -1.125, 1.8125, -0.25, -1.0625}, + {1.5625, -0.4375, -1.1875, 2, -0.3125, -1.125}, + {1.6875, -0.4375, -1.25, 2.125, -0.3125, -1.1875}, + {1.875, -0.5, -1.3125, 2.3125, -0.375, -1.25}, + {2, -0.5, -1.375, 2.4375, -0.375, -1.3125}, + {2.1875, -0.5625, -1.4375, 2.4375, -0.4375, -1.375}, }, }, selection_box = { @@ -2921,106 +2968,106 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:small_support_"..bridge_colors, { - description = bridge_desc.." Small Support", + minetest.register_node("bridger:small_support_" .. bridge_color, { + description = bridge_desc .. " Small Support", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_small_support.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_small_support.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_small_support.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_small_support.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, -- NodeBox1 - {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, -- NodeBox2 - {-0.4375, -0.4375, -0.5, -0.3125, -0.3125, -0.375}, -- NodeBox3 - {-0.375, -0.375, -0.5, -0.25, -0.25, -0.375}, -- NodeBox4 - {-0.3125, -0.3125, -0.5, -0.1875, -0.1875, -0.375}, -- NodeBox5 - {-0.25, -0.25, -0.5, -0.125, -0.125, -0.375}, -- NodeBox6 - {-0.1875, -0.1875, -0.5, -0.0625, -0.0625, -0.375}, -- NodeBox7 - {-0.125, -0.125, -0.5, 0.125, 0.125, -0.375}, -- NodeBox8 - {0.0625, 0.0625, -0.5, 0.1875, 0.1875, -0.375}, -- NodeBox9 - {0.125, 0.125, -0.5, 0.25, 0.25, -0.375}, -- NodeBox10 - {0.1875, 0.1875, -0.5, 0.3125, 0.3125, -0.375}, -- NodeBox11 - {0.25, 0.25, -0.5, 0.375, 0.375, -0.375}, -- NodeBox12 - {0.3125, 0.3125, -0.5, 0.4375, 0.4375, -0.375}, -- NodeBox13 - {-0.4375, 0.3125, -0.5, -0.3125, 0.4375, -0.375}, -- NodeBox14 - {-0.375, 0.25, -0.5, -0.25, 0.375, -0.375}, -- NodeBox15 - {-0.3125, 0.1875, -0.5, -0.1875, 0.3125, -0.375}, -- NodeBox16 - {-0.25, 0.125, -0.5, -0.125, 0.25, -0.375}, -- NodeBox17 - {-0.1875, 0.0625, -0.5, -0.0625, 0.1875, -0.375}, -- NodeBox18 - {0.0625, -0.1875, -0.5, 0.1875, -0.0625, -0.375}, -- NodeBox19 - {0.125, -0.25, -0.5, 0.25, -0.125, -0.375}, -- NodeBox20 - {0.1875, -0.3125, -0.5, 0.3125, -0.1875, -0.375}, -- NodeBox21 - {0.25, -0.375, -0.5, 0.375, -0.25, -0.375}, -- NodeBox22 - {0.3125, -0.4375, -0.5, 0.4375, -0.3125, -0.375}, -- NodeBox23 - {-0.5, -0.4375, 0.3125, -0.375, -0.3125, 0.4375}, -- NodeBox3 - {-0.5, -0.375, 0.25, -0.375, -0.25, 0.375}, -- NodeBox4 - {-0.5, -0.3125, 0.1875, -0.375, -0.1875, 0.3125}, -- NodeBox5 - {-0.5, -0.25, 0.125, -0.375, -0.125, 0.25}, -- NodeBox6 - {-0.5, -0.1875, 0.0625, -0.375, -0.0625, 0.1875}, -- NodeBox7 - {-0.5, -0.125, -0.125, -0.375, 0.125, 0.125}, -- NodeBox8 - {-0.5, 0.0625, -0.1875, -0.375, 0.1875, -0.0625}, -- NodeBox9 - {-0.5, 0.125, -0.25, -0.375, 0.25, -0.125}, -- NodeBox10 - {-0.5, 0.1875, -0.3125, -0.375, 0.3125, -0.1875}, -- NodeBox11 - {-0.5, 0.25, -0.375, -0.375, 0.375, -0.25}, -- NodeBox12 - {-0.5, 0.3125, -0.4375, -0.375, 0.4375, -0.3125}, -- NodeBox13 - {-0.5, 0.3125, 0.3125, -0.375, 0.4375, 0.4375}, -- NodeBox14 - {-0.5, 0.25, 0.25, -0.375, 0.375, 0.375}, -- NodeBox15 - {-0.5, 0.1875, 0.1875, -0.375, 0.3125, 0.3125}, -- NodeBox16 - {-0.5, 0.125, 0.125, -0.375, 0.25, 0.25}, -- NodeBox17 - {-0.5, 0.0625, 0.0625, -0.375, 0.1875, 0.1875}, -- NodeBox18 - {-0.5, -0.1875, -0.1875, -0.375, -0.0625, -0.0625}, -- NodeBox19 - {-0.5, -0.25, -0.25, -0.375, -0.125, -0.125}, -- NodeBox20 - {-0.5, -0.3125, -0.3125, -0.375, -0.1875, -0.1875}, -- NodeBox21 - {-0.5, -0.375, -0.375, -0.375, -0.25, -0.25}, -- NodeBox22 - {-0.5, -0.4375, -0.4375, -0.375, -0.3125, -0.3125}, -- NodeBox23 - {0.3125, -0.4375, 0.375, 0.4375, -0.3125, 0.5}, -- NodeBox3 - {0.25, -0.375, 0.375, 0.375, -0.25, 0.5}, -- NodeBox4 - {0.1875, -0.3125, 0.375, 0.3125, -0.1875, 0.5}, -- NodeBox5 - {0.125, -0.25, 0.375, 0.25, -0.125, 0.5}, -- NodeBox6 - {0.0625, -0.1875, 0.375, 0.1875, -0.0625, 0.5}, -- NodeBox7 - {-0.125, -0.125, 0.375, 0.125, 0.125, 0.5}, -- NodeBox8 - {-0.1875, 0.0625, 0.375, -0.0625, 0.1875, 0.5}, -- NodeBox9 - {-0.25, 0.125, 0.375, -0.125, 0.25, 0.5}, -- NodeBox10 - {-0.3125, 0.1875, 0.375, -0.1875, 0.3125, 0.5}, -- NodeBox11 - {-0.375, 0.25, 0.375, -0.25, 0.375, 0.5}, -- NodeBox12 - {-0.4375, 0.3125, 0.375, -0.3125, 0.4375, 0.5}, -- NodeBox13 - {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, -- NodeBox14 - {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, -- NodeBox15 - {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, -- NodeBox16 - {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, -- NodeBox17 - {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, -- NodeBox18 - {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, -- NodeBox19 - {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, -- NodeBox20 - {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, -- NodeBox21 - {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, -- NodeBox22 - {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, -- NodeBox23 - {0.375, -0.4375, -0.4375, 0.5, -0.3125, -0.3125}, -- NodeBox3 - {0.375, -0.375, -0.375, 0.5, -0.25, -0.25}, -- NodeBox4 - {0.375, -0.3125, -0.3125, 0.5, -0.1875, -0.1875}, -- NodeBox5 - {0.375, -0.25, -0.25, 0.5, -0.125, -0.125}, -- NodeBox6 - {0.375, -0.1875, -0.1875, 0.5, -0.0625, -0.0625}, -- NodeBox7 - {0.375, -0.125, -0.125, 0.5, 0.125, 0.125}, -- NodeBox8 - {0.375, 0.0625, 0.0625, 0.5, 0.1875, 0.1875}, -- NodeBox9 - {0.375, 0.125, 0.125, 0.5, 0.25, 0.25}, -- NodeBox10 - {0.375, 0.1875, 0.1875, 0.5, 0.3125, 0.3125}, -- NodeBox11 - {0.375, 0.25, 0.25, 0.5, 0.375, 0.375}, -- NodeBox12 - {0.375, 0.3125, 0.3125, 0.5, 0.4375, 0.4375}, -- NodeBox13 - {0.375, 0.3125, -0.4375, 0.5, 0.4375, -0.3125}, -- NodeBox14 - {0.375, 0.25, -0.375, 0.5, 0.375, -0.25}, -- NodeBox15 - {0.375, 0.1875, -0.3125, 0.5, 0.3125, -0.1875}, -- NodeBox16 - {0.375, 0.125, -0.25, 0.5, 0.25, -0.125}, -- NodeBox17 - {0.375, 0.0625, -0.1875, 0.5, 0.1875, -0.0625}, -- NodeBox18 - {0.375, -0.1875, 0.0625, 0.5, -0.0625, 0.1875}, -- NodeBox19 - {0.375, -0.25, 0.125, 0.5, -0.125, 0.25}, -- NodeBox20 - {0.375, -0.3125, 0.1875, 0.5, -0.1875, 0.3125}, -- NodeBox21 - {0.375, -0.375, 0.25, 0.5, -0.25, 0.375}, -- NodeBox22 - {0.375, -0.4375, 0.3125, 0.5, -0.3125, 0.4375}, -- NodeBox23 - {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, -- NodeBox1 - {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, -- NodeBox2 + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {-0.4375, -0.4375, -0.5, -0.3125, -0.3125, -0.375}, + {-0.375, -0.375, -0.5, -0.25, -0.25, -0.375}, + {-0.3125, -0.3125, -0.5, -0.1875, -0.1875, -0.375}, + {-0.25, -0.25, -0.5, -0.125, -0.125, -0.375}, + {-0.1875, -0.1875, -0.5, -0.0625, -0.0625, -0.375}, + {-0.125, -0.125, -0.5, 0.125, 0.125, -0.375}, + {0.0625, 0.0625, -0.5, 0.1875, 0.1875, -0.375}, + {0.125, 0.125, -0.5, 0.25, 0.25, -0.375}, + {0.1875, 0.1875, -0.5, 0.3125, 0.3125, -0.375}, + {0.25, 0.25, -0.5, 0.375, 0.375, -0.375}, + {0.3125, 0.3125, -0.5, 0.4375, 0.4375, -0.375}, + {-0.4375, 0.3125, -0.5, -0.3125, 0.4375, -0.375}, + {-0.375, 0.25, -0.5, -0.25, 0.375, -0.375}, + {-0.3125, 0.1875, -0.5, -0.1875, 0.3125, -0.375}, + {-0.25, 0.125, -0.5, -0.125, 0.25, -0.375}, + {-0.1875, 0.0625, -0.5, -0.0625, 0.1875, -0.375}, + {0.0625, -0.1875, -0.5, 0.1875, -0.0625, -0.375}, + {0.125, -0.25, -0.5, 0.25, -0.125, -0.375}, + {0.1875, -0.3125, -0.5, 0.3125, -0.1875, -0.375}, + {0.25, -0.375, -0.5, 0.375, -0.25, -0.375}, + {0.3125, -0.4375, -0.5, 0.4375, -0.3125, -0.375}, + {-0.5, -0.4375, 0.3125, -0.375, -0.3125, 0.4375}, + {-0.5, -0.375, 0.25, -0.375, -0.25, 0.375}, + {-0.5, -0.3125, 0.1875, -0.375, -0.1875, 0.3125}, + {-0.5, -0.25, 0.125, -0.375, -0.125, 0.25}, + {-0.5, -0.1875, 0.0625, -0.375, -0.0625, 0.1875}, + {-0.5, -0.125, -0.125, -0.375, 0.125, 0.125}, + {-0.5, 0.0625, -0.1875, -0.375, 0.1875, -0.0625}, + {-0.5, 0.125, -0.25, -0.375, 0.25, -0.125}, + {-0.5, 0.1875, -0.3125, -0.375, 0.3125, -0.1875}, + {-0.5, 0.25, -0.375, -0.375, 0.375, -0.25}, + {-0.5, 0.3125, -0.4375, -0.375, 0.4375, -0.3125}, + {-0.5, 0.3125, 0.3125, -0.375, 0.4375, 0.4375}, + {-0.5, 0.25, 0.25, -0.375, 0.375, 0.375}, + {-0.5, 0.1875, 0.1875, -0.375, 0.3125, 0.3125}, + {-0.5, 0.125, 0.125, -0.375, 0.25, 0.25}, + {-0.5, 0.0625, 0.0625, -0.375, 0.1875, 0.1875}, + {-0.5, -0.1875, -0.1875, -0.375, -0.0625, -0.0625}, + {-0.5, -0.25, -0.25, -0.375, -0.125, -0.125}, + {-0.5, -0.3125, -0.3125, -0.375, -0.1875, -0.1875}, + {-0.5, -0.375, -0.375, -0.375, -0.25, -0.25}, + {-0.5, -0.4375, -0.4375, -0.375, -0.3125, -0.3125}, + {0.3125, -0.4375, 0.375, 0.4375, -0.3125, 0.5}, + {0.25, -0.375, 0.375, 0.375, -0.25, 0.5}, + {0.1875, -0.3125, 0.375, 0.3125, -0.1875, 0.5}, + {0.125, -0.25, 0.375, 0.25, -0.125, 0.5}, + {0.0625, -0.1875, 0.375, 0.1875, -0.0625, 0.5}, + {-0.125, -0.125, 0.375, 0.125, 0.125, 0.5}, + {-0.1875, 0.0625, 0.375, -0.0625, 0.1875, 0.5}, + {-0.25, 0.125, 0.375, -0.125, 0.25, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.3125, 0.5}, + {-0.375, 0.25, 0.375, -0.25, 0.375, 0.5}, + {-0.4375, 0.3125, 0.375, -0.3125, 0.4375, 0.5}, + {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, + {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, + {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, + {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, + {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, + {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, + {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, + {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, + {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, + {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, + {0.375, -0.4375, -0.4375, 0.5, -0.3125, -0.3125}, + {0.375, -0.375, -0.375, 0.5, -0.25, -0.25}, + {0.375, -0.3125, -0.3125, 0.5, -0.1875, -0.1875}, + {0.375, -0.25, -0.25, 0.5, -0.125, -0.125}, + {0.375, -0.1875, -0.1875, 0.5, -0.0625, -0.0625}, + {0.375, -0.125, -0.125, 0.5, 0.125, 0.125}, + {0.375, 0.0625, 0.0625, 0.5, 0.1875, 0.1875}, + {0.375, 0.125, 0.125, 0.5, 0.25, 0.25}, + {0.375, 0.1875, 0.1875, 0.5, 0.3125, 0.3125}, + {0.375, 0.25, 0.25, 0.5, 0.375, 0.375}, + {0.375, 0.3125, 0.3125, 0.5, 0.4375, 0.4375}, + {0.375, 0.3125, -0.4375, 0.5, 0.4375, -0.3125}, + {0.375, 0.25, -0.375, 0.5, 0.375, -0.25}, + {0.375, 0.1875, -0.3125, 0.5, 0.3125, -0.1875}, + {0.375, 0.125, -0.25, 0.5, 0.25, -0.125}, + {0.375, 0.0625, -0.1875, 0.5, 0.1875, -0.0625}, + {0.375, -0.1875, 0.0625, 0.5, -0.0625, 0.1875}, + {0.375, -0.25, 0.125, 0.5, -0.125, 0.25}, + {0.375, -0.3125, 0.1875, 0.5, -0.1875, 0.3125}, + {0.375, -0.375, 0.25, 0.5, -0.25, 0.375}, + {0.375, -0.4375, 0.3125, 0.5, -0.3125, 0.4375}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, }, }, selection_box = { @@ -3033,190 +3080,190 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:small_support_top_"..bridge_colors, { - description = bridge_desc.." Small Support Top", + minetest.register_node("bridger:small_support_top_" .. bridge_color, { + description = bridge_desc .. " Small Support Top", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_small_support_top.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_small_support_top.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_small_support_top.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_small_support_top.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {0.375, -0.5, -0.5, 0.5, 1.5, -0.375}, -- NodeBox1 - {-0.5, -0.5, -0.5, -0.375, 1.5, -0.375}, -- NodeBox2 - {0.3125, -0.4375, -0.5, 0.4375, -0.3125, -0.375}, -- NodeBox3 - {0.25, -0.375, -0.5, 0.375, -0.25, -0.375}, -- NodeBox4 - {0.1875, -0.3125, -0.5, 0.3125, -0.1875, -0.375}, -- NodeBox5 - {0.125, -0.25, -0.5, 0.25, -0.125, -0.375}, -- NodeBox6 - {0.0625, -0.1875, -0.5, 0.1875, -0.0625, -0.375}, -- NodeBox7 - {-0.125, -0.125, -0.5, 0.125, 0.125, -0.375}, -- NodeBox8 - {-0.1875, -0.1875, -0.5, -0.0625, -0.0625, -0.375}, -- NodeBox9 - {-0.25, -0.25, -0.5, -0.125, -0.125, -0.375}, -- NodeBox10 - {-0.3125, -0.3125, -0.5, -0.1875, -0.1875, -0.375}, -- NodeBox11 - {-0.375, -0.375, -0.5, -0.25, -0.25, -0.375}, -- NodeBox12 - {-0.4375, -0.4375, -0.5, -0.3125, -0.3125, -0.375}, -- NodeBox13 - {0.0625, 0.0625, -0.5, 0.1875, 0.1875, -0.375}, -- NodeBox14 - {0.125, 0.125, -0.5, 0.25, 0.25, -0.375}, -- NodeBox15 - {0.1875, 0.1875, -0.5, 0.3125, 0.3125, -0.375}, -- NodeBox16 - {0.25, 0.25, -0.5, 0.375, 0.375, -0.375}, -- NodeBox17 - {0.3125, 0.3125, -0.5, 0.4375, 0.4375, -0.375}, -- NodeBox18 - {-0.1875, 0.0625, -0.5, -0.0625, 0.1875, -0.375}, -- NodeBox19 - {-0.25, 0.125, -0.5, -0.125, 0.25, -0.375}, -- NodeBox20 - {-0.3125, 0.1875, -0.5, -0.1875, 0.3125, -0.375}, -- NodeBox21 - {-0.375, 0.25, -0.5, -0.25, 0.375, -0.375}, -- NodeBox22 - {-0.4375, 0.3125, -0.5, -0.3125, 0.4375, -0.375}, -- NodeBox23 - {-0.4375, 0.5625, -0.5, -0.3125, 0.6875, -0.375}, -- NodeBox24 - {-0.375, 0.625, -0.5, -0.25, 0.75, -0.375}, -- NodeBox25 - {-0.3125, 0.6875, -0.5, -0.1875, 0.8125, -0.375}, -- NodeBox26 - {-0.25, 0.75, -0.5, -0.125, 0.875, -0.375}, -- NodeBox27 - {-0.1875, 0.8125, -0.5, -0.0625001, 0.9375, -0.375}, -- NodeBox28 - {0.3125, 0.5625, -0.5, 0.4375, 0.6875, -0.375}, -- NodeBox29 - {0.25, 0.625, -0.5, 0.375, 0.75, -0.375}, -- NodeBox30 - {0.1875, 0.6875, -0.5, 0.3125, 0.8125, -0.375}, -- NodeBox31 - {0.125, 0.75, -0.5, 0.25, 0.875, -0.375}, -- NodeBox32 - {0.0625, 0.8125, -0.5, 0.1875, 0.9375, -0.375}, -- NodeBox33 - {-0.125, 0.875, -0.5, 0.125, 1.125, -0.375}, -- NodeBox34 - {0.0625, 1.0625, -0.5, 0.1875, 1.1875, -0.375}, -- NodeBox35 - {0.125, 1.125, -0.5, 0.25, 1.25, -0.375}, -- NodeBox36 - {0.1875, 1.1875, -0.5, 0.3125, 1.3125, -0.375}, -- NodeBox37 - {0.25, 1.25, -0.5, 0.375, 1.375, -0.375}, -- NodeBox38 - {0.3125, 1.3125, -0.5, 0.4375, 1.4375, -0.375}, -- NodeBox39 - {-0.1875, 1.0625, -0.5, -0.0625, 1.1875, -0.375}, -- NodeBox40 - {-0.25, 1.125, -0.5, -0.125, 1.25, -0.375}, -- NodeBox41 - {-0.3125, 1.1875, -0.5, -0.1875, 1.3125, -0.375}, -- NodeBox42 - {-0.375, 1.25, -0.5, -0.25, 1.375, -0.375}, -- NodeBox43 - {-0.4375, 1.3125, -0.5, -0.3125, 1.4375, -0.375}, -- NodeBox44 - {-0.5, -0.5, 0.375, -0.375, 1.5, 0.5}, -- NodeBox1 - {0.375, -0.5, 0.375, 0.5, 1.5, 0.5}, -- NodeBox2 - {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, -- NodeBox3 - {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, -- NodeBox4 - {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, -- NodeBox5 - {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, -- NodeBox6 - {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, -- NodeBox7 - {-0.125, -0.125, 0.375, 0.125, 0.125, 0.5}, -- NodeBox8 - {0.0625, -0.1875, 0.375, 0.1875, -0.0625, 0.5}, -- NodeBox9 - {0.125, -0.25, 0.375, 0.25, -0.125, 0.5}, -- NodeBox10 - {0.1875, -0.3125, 0.375, 0.3125, -0.1875, 0.5}, -- NodeBox11 - {0.25, -0.375, 0.375, 0.375, -0.25, 0.5}, -- NodeBox12 - {0.3125, -0.4375, 0.375, 0.4375, -0.3125, 0.5}, -- NodeBox13 - {-0.1875, 0.0625, 0.375, -0.0625, 0.1875, 0.5}, -- NodeBox14 - {-0.25, 0.125, 0.375, -0.125, 0.25, 0.5}, -- NodeBox15 - {-0.3125, 0.1875, 0.375, -0.1875, 0.3125, 0.5}, -- NodeBox16 - {-0.375, 0.25, 0.375, -0.25, 0.375, 0.5}, -- NodeBox17 - {-0.4375, 0.3125, 0.375, -0.3125, 0.4375, 0.5}, -- NodeBox18 - {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, -- NodeBox19 - {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, -- NodeBox20 - {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, -- NodeBox21 - {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, -- NodeBox22 - {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, -- NodeBox23 - {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, -- NodeBox24 - {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, -- NodeBox25 - {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, -- NodeBox26 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox27 - {0.0625001, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, -- NodeBox28 - {-0.4375, 0.5625, 0.375, -0.3125, 0.6875, 0.5}, -- NodeBox29 - {-0.375, 0.625, 0.375, -0.25, 0.75, 0.5}, -- NodeBox30 - {-0.3125, 0.6875, 0.375, -0.1875, 0.8125, 0.5}, -- NodeBox31 - {-0.25, 0.75, 0.375, -0.125, 0.875, 0.5}, -- NodeBox32 - {-0.1875, 0.8125, 0.375, -0.0625, 0.9375, 0.5}, -- NodeBox33 - {-0.125, 0.875, 0.375, 0.125, 1.125, 0.5}, -- NodeBox34 - {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, -- NodeBox35 - {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, -- NodeBox36 - {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, -- NodeBox37 - {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, -- NodeBox38 - {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, -- NodeBox39 - {0.0625, 1.0625, 0.375, 0.1875, 1.1875, 0.5}, -- NodeBox40 - {0.125, 1.125, 0.375, 0.25, 1.25, 0.5}, -- NodeBox41 - {0.1875, 1.1875, 0.375, 0.3125, 1.3125, 0.5}, -- NodeBox42 - {0.25, 1.25, 0.375, 0.375, 1.375, 0.5}, -- NodeBox43 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox44 - {0.375, -0.4375, 0.3125, 0.5, -0.3125, 0.4375}, -- NodeBox3 - {0.375, -0.375, 0.25, 0.5, -0.25, 0.375}, -- NodeBox4 - {0.375, -0.3125, 0.1875, 0.5, -0.1875, 0.3125}, -- NodeBox5 - {0.375, -0.25, 0.125, 0.5, -0.125, 0.25}, -- NodeBox6 - {0.375, -0.1875, 0.0625, 0.5, -0.0625, 0.1875}, -- NodeBox7 - {0.375, -0.125, -0.125, 0.5, 0.125, 0.125}, -- NodeBox8 - {0.375, -0.1875, -0.1875, 0.5, -0.0625, -0.0625}, -- NodeBox9 - {0.375, -0.25, -0.25, 0.5, -0.125, -0.125}, -- NodeBox10 - {0.375, -0.3125, -0.3125, 0.5, -0.1875, -0.1875}, -- NodeBox11 - {0.375, -0.375, -0.375, 0.5, -0.25, -0.25}, -- NodeBox12 - {0.375, -0.4375, -0.4375, 0.5, -0.3125, -0.3125}, -- NodeBox13 - {0.375, 0.0625, 0.0625, 0.5, 0.1875, 0.1875}, -- NodeBox14 - {0.375, 0.125, 0.125, 0.5, 0.25, 0.25}, -- NodeBox15 - {0.375, 0.1875, 0.1875, 0.5, 0.3125, 0.3125}, -- NodeBox16 - {0.375, 0.25, 0.25, 0.5, 0.375, 0.375}, -- NodeBox17 - {0.375, 0.3125, 0.3125, 0.5, 0.4375, 0.4375}, -- NodeBox18 - {0.375, 0.0625, -0.1875, 0.5, 0.1875, -0.0625}, -- NodeBox19 - {0.375, 0.125, -0.25, 0.5, 0.25, -0.125}, -- NodeBox20 - {0.375, 0.1875, -0.3125, 0.5, 0.3125, -0.1875}, -- NodeBox21 - {0.375, 0.25, -0.375, 0.5, 0.375, -0.25}, -- NodeBox22 - {0.375, 0.3125, -0.4375, 0.5, 0.4375, -0.3125}, -- NodeBox23 - {0.375, 0.5625, -0.4375, 0.5, 0.6875, -0.3125}, -- NodeBox24 - {0.375, 0.625, -0.375, 0.5, 0.75, -0.25}, -- NodeBox25 - {0.375, 0.6875, -0.3125, 0.5, 0.8125, -0.1875}, -- NodeBox26 - {0.375, 0.75, -0.25, 0.5, 0.875, -0.125}, -- NodeBox27 - {0.375, 0.8125, -0.1875, 0.5, 0.9375, -0.0625001}, -- NodeBox28 - {0.375, 0.5625, 0.3125, 0.5, 0.6875, 0.4375}, -- NodeBox29 - {0.375, 0.625, 0.25, 0.5, 0.75, 0.375}, -- NodeBox30 - {0.375, 0.6875, 0.1875, 0.5, 0.8125, 0.3125}, -- NodeBox31 - {0.375, 0.75, 0.125, 0.5, 0.875, 0.25}, -- NodeBox32 - {0.375, 0.8125, 0.0625, 0.5, 0.9375, 0.1875}, -- NodeBox33 - {0.375, 0.875, -0.125, 0.5, 1.125, 0.125}, -- NodeBox34 - {0.375, 1.0625, 0.0625, 0.5, 1.1875, 0.1875}, -- NodeBox35 - {0.375, 1.125, 0.125, 0.5, 1.25, 0.25}, -- NodeBox36 - {0.375, 1.1875, 0.1875, 0.5, 1.3125, 0.3125}, -- NodeBox37 - {0.375, 1.25, 0.25, 0.5, 1.375, 0.375}, -- NodeBox38 - {0.375, 1.3125, 0.3125, 0.5, 1.4375, 0.4375}, -- NodeBox39 - {0.375, 1.0625, -0.1875, 0.5, 1.1875, -0.0625}, -- NodeBox40 - {0.375, 1.125, -0.25, 0.5, 1.25, -0.125}, -- NodeBox41 - {0.375, 1.1875, -0.3125, 0.5, 1.3125, -0.1875}, -- NodeBox42 - {0.375, 1.25, -0.375, 0.5, 1.375, -0.25}, -- NodeBox43 - {0.375, 1.3125, -0.4375, 0.5, 1.4375, -0.3125}, -- NodeBox44 - {-0.5, -0.4375, -0.4375, -0.375, -0.3125, -0.3125}, -- NodeBox3 - {-0.5, -0.375, -0.375, -0.375, -0.25, -0.25}, -- NodeBox4 - {-0.5, -0.3125, -0.3125, -0.375, -0.1875, -0.1875}, -- NodeBox5 - {-0.5, -0.25, -0.25, -0.375, -0.125, -0.125}, -- NodeBox6 - {-0.5, -0.1875, -0.1875, -0.375, -0.0625, -0.0625}, -- NodeBox7 - {-0.5, -0.125, -0.125, -0.375, 0.125, 0.125}, -- NodeBox8 - {-0.5, -0.1875, 0.0625, -0.375, -0.0625, 0.1875}, -- NodeBox9 - {-0.5, -0.25, 0.125, -0.375, -0.125, 0.25}, -- NodeBox10 - {-0.5, -0.3125, 0.1875, -0.375, -0.1875, 0.3125}, -- NodeBox11 - {-0.5, -0.375, 0.25, -0.375, -0.25, 0.375}, -- NodeBox12 - {-0.5, -0.4375, 0.3125, -0.375, -0.3125, 0.4375}, -- NodeBox13 - {-0.5, 0.0625, -0.1875, -0.375, 0.1875, -0.0625}, -- NodeBox14 - {-0.5, 0.125, -0.25, -0.375, 0.25, -0.125}, -- NodeBox15 - {-0.5, 0.1875, -0.3125, -0.375, 0.3125, -0.1875}, -- NodeBox16 - {-0.5, 0.25, -0.375, -0.375, 0.375, -0.25}, -- NodeBox17 - {-0.5, 0.3125, -0.4375, -0.375, 0.4375, -0.3125}, -- NodeBox18 - {-0.5, 0.0625, 0.0625, -0.375, 0.1875, 0.1875}, -- NodeBox19 - {-0.5, 0.125, 0.125, -0.375, 0.25, 0.25}, -- NodeBox20 - {-0.5, 0.1875, 0.1875, -0.375, 0.3125, 0.3125}, -- NodeBox21 - {-0.5, 0.25, 0.25, -0.375, 0.375, 0.375}, -- NodeBox22 - {-0.5, 0.3125, 0.3125, -0.375, 0.4375, 0.4375}, -- NodeBox23 - {-0.5, 0.5625, 0.3125, -0.375, 0.6875, 0.4375}, -- NodeBox24 - {-0.5, 0.625, 0.25, -0.375, 0.75, 0.375}, -- NodeBox25 - {-0.5, 0.6875, 0.1875, -0.375, 0.8125, 0.3125}, -- NodeBox26 - {-0.5, 0.75, 0.125, -0.375, 0.875, 0.25}, -- NodeBox27 - {-0.5, 0.8125, 0.0625001, -0.375, 0.9375, 0.1875}, -- NodeBox28 - {-0.5, 0.5625, -0.4375, -0.375, 0.6875, -0.3125}, -- NodeBox29 - {-0.5, 0.625, -0.375, -0.375, 0.75, -0.25}, -- NodeBox30 - {-0.5, 0.6875, -0.3125, -0.375, 0.8125, -0.1875}, -- NodeBox31 - {-0.5, 0.75, -0.25, -0.375, 0.875, -0.125}, -- NodeBox32 - {-0.5, 0.8125, -0.1875, -0.375, 0.9375, -0.0625}, -- NodeBox33 - {-0.5, 0.875, -0.125, -0.375, 1.125, 0.125}, -- NodeBox34 - {-0.5, 1.0625, -0.1875, -0.375, 1.1875, -0.0625}, -- NodeBox35 - {-0.5, 1.125, -0.25, -0.375, 1.25, -0.125}, -- NodeBox36 - {-0.5, 1.1875, -0.3125, -0.375, 1.3125, -0.1875}, -- NodeBox37 - {-0.5, 1.25, -0.375, -0.375, 1.375, -0.25}, -- NodeBox38 - {-0.5, 1.3125, -0.4375, -0.375, 1.4375, -0.3125}, -- NodeBox39 - {-0.5, 1.0625, 0.0625, -0.375, 1.1875, 0.1875}, -- NodeBox40 - {-0.5, 1.125, 0.125, -0.375, 1.25, 0.25}, -- NodeBox41 - {-0.5, 1.1875, 0.1875, -0.375, 1.3125, 0.3125}, -- NodeBox42 - {-0.5, 1.25, 0.25, -0.375, 1.375, 0.375}, -- NodeBox43 - {-0.5, 1.3125, 0.3125, -0.375, 1.4375, 0.4375}, -- NodeBox44 + {0.375, -0.5, -0.5, 0.5, 1.5, -0.375}, + {-0.5, -0.5, -0.5, -0.375, 1.5, -0.375}, + {0.3125, -0.4375, -0.5, 0.4375, -0.3125, -0.375}, + {0.25, -0.375, -0.5, 0.375, -0.25, -0.375}, + {0.1875, -0.3125, -0.5, 0.3125, -0.1875, -0.375}, + {0.125, -0.25, -0.5, 0.25, -0.125, -0.375}, + {0.0625, -0.1875, -0.5, 0.1875, -0.0625, -0.375}, + {-0.125, -0.125, -0.5, 0.125, 0.125, -0.375}, + {-0.1875, -0.1875, -0.5, -0.0625, -0.0625, -0.375}, + {-0.25, -0.25, -0.5, -0.125, -0.125, -0.375}, + {-0.3125, -0.3125, -0.5, -0.1875, -0.1875, -0.375}, + {-0.375, -0.375, -0.5, -0.25, -0.25, -0.375}, + {-0.4375, -0.4375, -0.5, -0.3125, -0.3125, -0.375}, + {0.0625, 0.0625, -0.5, 0.1875, 0.1875, -0.375}, + {0.125, 0.125, -0.5, 0.25, 0.25, -0.375}, + {0.1875, 0.1875, -0.5, 0.3125, 0.3125, -0.375}, + {0.25, 0.25, -0.5, 0.375, 0.375, -0.375}, + {0.3125, 0.3125, -0.5, 0.4375, 0.4375, -0.375}, + {-0.1875, 0.0625, -0.5, -0.0625, 0.1875, -0.375}, + {-0.25, 0.125, -0.5, -0.125, 0.25, -0.375}, + {-0.3125, 0.1875, -0.5, -0.1875, 0.3125, -0.375}, + {-0.375, 0.25, -0.5, -0.25, 0.375, -0.375}, + {-0.4375, 0.3125, -0.5, -0.3125, 0.4375, -0.375}, + {-0.4375, 0.5625, -0.5, -0.3125, 0.6875, -0.375}, + {-0.375, 0.625, -0.5, -0.25, 0.75, -0.375}, + {-0.3125, 0.6875, -0.5, -0.1875, 0.8125, -0.375}, + {-0.25, 0.75, -0.5, -0.125, 0.875, -0.375}, + {-0.1875, 0.8125, -0.5, -0.0625001, 0.9375, -0.375}, + {0.3125, 0.5625, -0.5, 0.4375, 0.6875, -0.375}, + {0.25, 0.625, -0.5, 0.375, 0.75, -0.375}, + {0.1875, 0.6875, -0.5, 0.3125, 0.8125, -0.375}, + {0.125, 0.75, -0.5, 0.25, 0.875, -0.375}, + {0.0625, 0.8125, -0.5, 0.1875, 0.9375, -0.375}, + {-0.125, 0.875, -0.5, 0.125, 1.125, -0.375}, + {0.0625, 1.0625, -0.5, 0.1875, 1.1875, -0.375}, + {0.125, 1.125, -0.5, 0.25, 1.25, -0.375}, + {0.1875, 1.1875, -0.5, 0.3125, 1.3125, -0.375}, + {0.25, 1.25, -0.5, 0.375, 1.375, -0.375}, + {0.3125, 1.3125, -0.5, 0.4375, 1.4375, -0.375}, + {-0.1875, 1.0625, -0.5, -0.0625, 1.1875, -0.375}, + {-0.25, 1.125, -0.5, -0.125, 1.25, -0.375}, + {-0.3125, 1.1875, -0.5, -0.1875, 1.3125, -0.375}, + {-0.375, 1.25, -0.5, -0.25, 1.375, -0.375}, + {-0.4375, 1.3125, -0.5, -0.3125, 1.4375, -0.375}, + {-0.5, -0.5, 0.375, -0.375, 1.5, 0.5}, + {0.375, -0.5, 0.375, 0.5, 1.5, 0.5}, + {-0.4375, -0.4375, 0.375, -0.3125, -0.3125, 0.5}, + {-0.375, -0.375, 0.375, -0.25, -0.25, 0.5}, + {-0.3125, -0.3125, 0.375, -0.1875, -0.1875, 0.5}, + {-0.25, -0.25, 0.375, -0.125, -0.125, 0.5}, + {-0.1875, -0.1875, 0.375, -0.0625, -0.0625, 0.5}, + {-0.125, -0.125, 0.375, 0.125, 0.125, 0.5}, + {0.0625, -0.1875, 0.375, 0.1875, -0.0625, 0.5}, + {0.125, -0.25, 0.375, 0.25, -0.125, 0.5}, + {0.1875, -0.3125, 0.375, 0.3125, -0.1875, 0.5}, + {0.25, -0.375, 0.375, 0.375, -0.25, 0.5}, + {0.3125, -0.4375, 0.375, 0.4375, -0.3125, 0.5}, + {-0.1875, 0.0625, 0.375, -0.0625, 0.1875, 0.5}, + {-0.25, 0.125, 0.375, -0.125, 0.25, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.3125, 0.5}, + {-0.375, 0.25, 0.375, -0.25, 0.375, 0.5}, + {-0.4375, 0.3125, 0.375, -0.3125, 0.4375, 0.5}, + {0.0625, 0.0625, 0.375, 0.1875, 0.1875, 0.5}, + {0.125, 0.125, 0.375, 0.25, 0.25, 0.5}, + {0.1875, 0.1875, 0.375, 0.3125, 0.3125, 0.5}, + {0.25, 0.25, 0.375, 0.375, 0.375, 0.5}, + {0.3125, 0.3125, 0.375, 0.4375, 0.4375, 0.5}, + {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, + {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, + {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625001, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, + {-0.4375, 0.5625, 0.375, -0.3125, 0.6875, 0.5}, + {-0.375, 0.625, 0.375, -0.25, 0.75, 0.5}, + {-0.3125, 0.6875, 0.375, -0.1875, 0.8125, 0.5}, + {-0.25, 0.75, 0.375, -0.125, 0.875, 0.5}, + {-0.1875, 0.8125, 0.375, -0.0625, 0.9375, 0.5}, + {-0.125, 0.875, 0.375, 0.125, 1.125, 0.5}, + {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, + {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, + {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, + {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, + {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, + {0.0625, 1.0625, 0.375, 0.1875, 1.1875, 0.5}, + {0.125, 1.125, 0.375, 0.25, 1.25, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.3125, 0.5}, + {0.25, 1.25, 0.375, 0.375, 1.375, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, -0.4375, 0.3125, 0.5, -0.3125, 0.4375}, + {0.375, -0.375, 0.25, 0.5, -0.25, 0.375}, + {0.375, -0.3125, 0.1875, 0.5, -0.1875, 0.3125}, + {0.375, -0.25, 0.125, 0.5, -0.125, 0.25}, + {0.375, -0.1875, 0.0625, 0.5, -0.0625, 0.1875}, + {0.375, -0.125, -0.125, 0.5, 0.125, 0.125}, + {0.375, -0.1875, -0.1875, 0.5, -0.0625, -0.0625}, + {0.375, -0.25, -0.25, 0.5, -0.125, -0.125}, + {0.375, -0.3125, -0.3125, 0.5, -0.1875, -0.1875}, + {0.375, -0.375, -0.375, 0.5, -0.25, -0.25}, + {0.375, -0.4375, -0.4375, 0.5, -0.3125, -0.3125}, + {0.375, 0.0625, 0.0625, 0.5, 0.1875, 0.1875}, + {0.375, 0.125, 0.125, 0.5, 0.25, 0.25}, + {0.375, 0.1875, 0.1875, 0.5, 0.3125, 0.3125}, + {0.375, 0.25, 0.25, 0.5, 0.375, 0.375}, + {0.375, 0.3125, 0.3125, 0.5, 0.4375, 0.4375}, + {0.375, 0.0625, -0.1875, 0.5, 0.1875, -0.0625}, + {0.375, 0.125, -0.25, 0.5, 0.25, -0.125}, + {0.375, 0.1875, -0.3125, 0.5, 0.3125, -0.1875}, + {0.375, 0.25, -0.375, 0.5, 0.375, -0.25}, + {0.375, 0.3125, -0.4375, 0.5, 0.4375, -0.3125}, + {0.375, 0.5625, -0.4375, 0.5, 0.6875, -0.3125}, + {0.375, 0.625, -0.375, 0.5, 0.75, -0.25}, + {0.375, 0.6875, -0.3125, 0.5, 0.8125, -0.1875}, + {0.375, 0.75, -0.25, 0.5, 0.875, -0.125}, + {0.375, 0.8125, -0.1875, 0.5, 0.9375, -0.0625001}, + {0.375, 0.5625, 0.3125, 0.5, 0.6875, 0.4375}, + {0.375, 0.625, 0.25, 0.5, 0.75, 0.375}, + {0.375, 0.6875, 0.1875, 0.5, 0.8125, 0.3125}, + {0.375, 0.75, 0.125, 0.5, 0.875, 0.25}, + {0.375, 0.8125, 0.0625, 0.5, 0.9375, 0.1875}, + {0.375, 0.875, -0.125, 0.5, 1.125, 0.125}, + {0.375, 1.0625, 0.0625, 0.5, 1.1875, 0.1875}, + {0.375, 1.125, 0.125, 0.5, 1.25, 0.25}, + {0.375, 1.1875, 0.1875, 0.5, 1.3125, 0.3125}, + {0.375, 1.25, 0.25, 0.5, 1.375, 0.375}, + {0.375, 1.3125, 0.3125, 0.5, 1.4375, 0.4375}, + {0.375, 1.0625, -0.1875, 0.5, 1.1875, -0.0625}, + {0.375, 1.125, -0.25, 0.5, 1.25, -0.125}, + {0.375, 1.1875, -0.3125, 0.5, 1.3125, -0.1875}, + {0.375, 1.25, -0.375, 0.5, 1.375, -0.25}, + {0.375, 1.3125, -0.4375, 0.5, 1.4375, -0.3125}, + {-0.5, -0.4375, -0.4375, -0.375, -0.3125, -0.3125}, + {-0.5, -0.375, -0.375, -0.375, -0.25, -0.25}, + {-0.5, -0.3125, -0.3125, -0.375, -0.1875, -0.1875}, + {-0.5, -0.25, -0.25, -0.375, -0.125, -0.125}, + {-0.5, -0.1875, -0.1875, -0.375, -0.0625, -0.0625}, + {-0.5, -0.125, -0.125, -0.375, 0.125, 0.125}, + {-0.5, -0.1875, 0.0625, -0.375, -0.0625, 0.1875}, + {-0.5, -0.25, 0.125, -0.375, -0.125, 0.25}, + {-0.5, -0.3125, 0.1875, -0.375, -0.1875, 0.3125}, + {-0.5, -0.375, 0.25, -0.375, -0.25, 0.375}, + {-0.5, -0.4375, 0.3125, -0.375, -0.3125, 0.4375}, + {-0.5, 0.0625, -0.1875, -0.375, 0.1875, -0.0625}, + {-0.5, 0.125, -0.25, -0.375, 0.25, -0.125}, + {-0.5, 0.1875, -0.3125, -0.375, 0.3125, -0.1875}, + {-0.5, 0.25, -0.375, -0.375, 0.375, -0.25}, + {-0.5, 0.3125, -0.4375, -0.375, 0.4375, -0.3125}, + {-0.5, 0.0625, 0.0625, -0.375, 0.1875, 0.1875}, + {-0.5, 0.125, 0.125, -0.375, 0.25, 0.25}, + {-0.5, 0.1875, 0.1875, -0.375, 0.3125, 0.3125}, + {-0.5, 0.25, 0.25, -0.375, 0.375, 0.375}, + {-0.5, 0.3125, 0.3125, -0.375, 0.4375, 0.4375}, + {-0.5, 0.5625, 0.3125, -0.375, 0.6875, 0.4375}, + {-0.5, 0.625, 0.25, -0.375, 0.75, 0.375}, + {-0.5, 0.6875, 0.1875, -0.375, 0.8125, 0.3125}, + {-0.5, 0.75, 0.125, -0.375, 0.875, 0.25}, + {-0.5, 0.8125, 0.0625001, -0.375, 0.9375, 0.1875}, + {-0.5, 0.5625, -0.4375, -0.375, 0.6875, -0.3125}, + {-0.5, 0.625, -0.375, -0.375, 0.75, -0.25}, + {-0.5, 0.6875, -0.3125, -0.375, 0.8125, -0.1875}, + {-0.5, 0.75, -0.25, -0.375, 0.875, -0.125}, + {-0.5, 0.8125, -0.1875, -0.375, 0.9375, -0.0625}, + {-0.5, 0.875, -0.125, -0.375, 1.125, 0.125}, + {-0.5, 1.0625, -0.1875, -0.375, 1.1875, -0.0625}, + {-0.5, 1.125, -0.25, -0.375, 1.25, -0.125}, + {-0.5, 1.1875, -0.3125, -0.375, 1.3125, -0.1875}, + {-0.5, 1.25, -0.375, -0.375, 1.375, -0.25}, + {-0.5, 1.3125, -0.4375, -0.375, 1.4375, -0.3125}, + {-0.5, 1.0625, 0.0625, -0.375, 1.1875, 0.1875}, + {-0.5, 1.125, 0.125, -0.375, 1.25, 0.25}, + {-0.5, 1.1875, 0.1875, -0.375, 1.3125, 0.3125}, + {-0.5, 1.25, 0.25, -0.375, 1.375, 0.375}, + {-0.5, 1.3125, 0.3125, -0.375, 1.4375, 0.4375}, }, }, selection_box = { @@ -3229,105 +3276,105 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:medium_support_"..bridge_colors, { - description = bridge_desc.." Medium Support", + minetest.register_node("bridger:medium_support_" .. bridge_color, { + description = bridge_desc .. " Medium Support", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_medium_support.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_medium_support.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_medium_support.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_medium_support.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-1.5, -0.5, 0.3125, -1.25, 2.5, 0.5625}, -- NodeBox1 - {1.25, -0.5, 0.3125, 1.5, 2.5, 0.5625}, -- NodeBox2 - {-1.4375, 2.3125, 0.375, -1.3125, 2.4375, 0.5}, -- NodeBox3 - {-1.375, 2.25, 0.375, -1.25, 2.375, 0.5}, -- NodeBox4 - {-1.3125, 2.1875, 0.375, -1.1875, 2.3125, 0.5}, -- NodeBox5 - {-1.25, 2.125, 0.375, -1.125, 2.25, 0.5}, -- NodeBox6 - {-1.1875, 2.0625, 0.375, -1.0625, 2.1875, 0.5}, -- NodeBox7 - {-1.125, 2, 0.375, -1, 2.125, 0.5}, -- NodeBox8 - {-1.0625, 1.9375, 0.375, -0.9375, 2.0625, 0.5}, -- NodeBox9 - {-1, 1.875, 0.375, -0.875, 2, 0.5}, -- NodeBox10 - {-0.9375, 1.8125, 0.375, -0.8125, 1.9375, 0.5}, -- NodeBox11 - {-0.875, 1.75, 0.375, -0.75, 1.875, 0.5}, -- NodeBox12 - {-0.8125, 1.6875, 0.375, -0.6875, 1.8125, 0.5}, -- NodeBox13 - {-0.75, 1.625, 0.375, -0.625, 1.75, 0.5}, -- NodeBox14 - {-0.6875, 1.5625, 0.375, -0.5625, 1.6875, 0.5}, -- NodeBox15 - {-0.625, 1.5, 0.375, -0.5, 1.625, 0.5}, -- NodeBox16 - {-0.5625, 1.4375, 0.375, -0.4375, 1.5625, 0.5}, -- NodeBox17 - {-0.5, 1.375, 0.375, -0.375, 1.5, 0.5}, -- NodeBox18 - {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, -- NodeBox19 - {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, -- NodeBox20 - {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, -- NodeBox21 - {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, -- NodeBox22 - {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, -- NodeBox23 - {-0.125, 0.875, 0.375, 0.125, 1.125, 0.5}, -- NodeBox24 - {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, -- NodeBox25 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox26 - {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, -- NodeBox27 - {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, -- NodeBox28 - {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, -- NodeBox29 - {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, -- NodeBox30 - {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, -- NodeBox31 - {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, -- NodeBox32 - {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, -- NodeBox33 - {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, -- NodeBox34 - {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, -- NodeBox35 - {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, -- NodeBox36 - {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, -- NodeBox37 - {0.875, 0, 0.375, 1, 0.125, 0.5}, -- NodeBox38 - {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, -- NodeBox39 - {1, -0.125, 0.375, 1.125, 0, 0.5}, -- NodeBox40 - {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, -- NodeBox41 - {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, -- NodeBox42 - {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, -- NodeBox43 - {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, -- NodeBox44 - {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, -- NodeBox45 - {1.3125, 2.3125, 0.375, 1.4375, 2.4375, 0.5}, -- NodeBox3 - {1.25, 2.25, 0.375, 1.375, 2.375, 0.5}, -- NodeBox4 - {1.1875, 2.1875, 0.375, 1.3125, 2.3125, 0.5}, -- NodeBox5 - {1.125, 2.125, 0.375, 1.25, 2.25, 0.5}, -- NodeBox6 - {1.0625, 2.0625, 0.375, 1.1875, 2.1875, 0.5}, -- NodeBox7 - {1, 2, 0.375, 1.125, 2.125, 0.5}, -- NodeBox8 - {0.9375, 1.9375, 0.375, 1.0625, 2.0625, 0.5}, -- NodeBox9 - {0.875, 1.875, 0.375, 1, 2, 0.5}, -- NodeBox10 - {0.8125, 1.8125, 0.375, 0.9375, 1.9375, 0.5}, -- NodeBox11 - {0.75, 1.75, 0.375, 0.875, 1.875, 0.5}, -- NodeBox12 - {0.6875, 1.6875, 0.375, 0.8125, 1.8125, 0.5}, -- NodeBox13 - {0.625, 1.625, 0.375, 0.75, 1.75, 0.5}, -- NodeBox14 - {0.5625, 1.5625, 0.375, 0.6875, 1.6875, 0.5}, -- NodeBox15 - {0.5, 1.5, 0.375, 0.625, 1.625, 0.5}, -- NodeBox16 - {0.4375, 1.4375, 0.375, 0.5625, 1.5625, 0.5}, -- NodeBox17 - {0.375, 1.375, 0.375, 0.5, 1.5, 0.5}, -- NodeBox18 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox19 - {0.25, 1.25, 0.375, 0.375, 1.375, 0.5}, -- NodeBox20 - {0.1875, 1.1875, 0.375, 0.3125, 1.3125, 0.5}, -- NodeBox21 - {0.125, 1.125, 0.375, 0.25, 1.25, 0.5}, -- NodeBox22 - {0.0625, 1.0625, 0.375, 0.1875, 1.1875, 0.5}, -- NodeBox23 - {-0.1875, 0.8125, 0.375, -0.0625, 0.9375, 0.5}, -- NodeBox25 - {-0.25, 0.75, 0.375, -0.125, 0.875, 0.5}, -- NodeBox26 - {-0.3125, 0.6875, 0.375, -0.1875, 0.8125, 0.5}, -- NodeBox27 - {-0.375, 0.625, 0.375, -0.25, 0.75, 0.5}, -- NodeBox28 - {-0.4375, 0.5625, 0.375, -0.3125, 0.6875, 0.5}, -- NodeBox29 - {-0.5, 0.5, 0.375, -0.375, 0.625, 0.5}, -- NodeBox30 - {-0.5625, 0.4375, 0.375, -0.4375, 0.5625, 0.5}, -- NodeBox31 - {-0.625, 0.375, 0.375, -0.5, 0.5, 0.5}, -- NodeBox32 - {-0.6875, 0.3125, 0.375, -0.5625, 0.4375, 0.5}, -- NodeBox33 - {-0.75, 0.25, 0.375, -0.625, 0.375, 0.5}, -- NodeBox34 - {-0.8125, 0.1875, 0.375, -0.6875, 0.3125, 0.5}, -- NodeBox35 - {-0.875, 0.125, 0.375, -0.75, 0.25, 0.5}, -- NodeBox36 - {-0.9375, 0.0625, 0.375, -0.8125, 0.1875, 0.5}, -- NodeBox37 - {-1, 0, 0.375, -0.875, 0.125, 0.5}, -- NodeBox38 - {-1.0625, -0.0625, 0.375, -0.9375, 0.0625, 0.5}, -- NodeBox39 - {-1.125, -0.125, 0.375, -1, 0, 0.5}, -- NodeBox40 - {-1.1875, -0.1875, 0.375, -1.0625, -0.0625, 0.5}, -- NodeBox41 - {-1.25, -0.25, 0.375, -1.125, -0.125, 0.5}, -- NodeBox42 - {-1.3125, -0.3125, 0.375, -1.1875, -0.1875, 0.5}, -- NodeBox43 - {-1.375, -0.375, 0.375, -1.25, -0.25, 0.5}, -- NodeBox44 - {-1.4375, -0.4375, 0.375, -1.3125, -0.3125, 0.5}, -- NodeBox45 + {-1.5, -0.5, 0.3125, -1.25, 2.5, 0.5625}, + {1.25, -0.5, 0.3125, 1.5, 2.5, 0.5625}, + {-1.4375, 2.3125, 0.375, -1.3125, 2.4375, 0.5}, + {-1.375, 2.25, 0.375, -1.25, 2.375, 0.5}, + {-1.3125, 2.1875, 0.375, -1.1875, 2.3125, 0.5}, + {-1.25, 2.125, 0.375, -1.125, 2.25, 0.5}, + {-1.1875, 2.0625, 0.375, -1.0625, 2.1875, 0.5}, + {-1.125, 2, 0.375, -1, 2.125, 0.5}, + {-1.0625, 1.9375, 0.375, -0.9375, 2.0625, 0.5}, + {-1, 1.875, 0.375, -0.875, 2, 0.5}, + {-0.9375, 1.8125, 0.375, -0.8125, 1.9375, 0.5}, + {-0.875, 1.75, 0.375, -0.75, 1.875, 0.5}, + {-0.8125, 1.6875, 0.375, -0.6875, 1.8125, 0.5}, + {-0.75, 1.625, 0.375, -0.625, 1.75, 0.5}, + {-0.6875, 1.5625, 0.375, -0.5625, 1.6875, 0.5}, + {-0.625, 1.5, 0.375, -0.5, 1.625, 0.5}, + {-0.5625, 1.4375, 0.375, -0.4375, 1.5625, 0.5}, + {-0.5, 1.375, 0.375, -0.375, 1.5, 0.5}, + {-0.4375, 1.3125, 0.375, -0.3125, 1.4375, 0.5}, + {-0.375, 1.25, 0.375, -0.25, 1.375, 0.5}, + {-0.3125, 1.1875, 0.375, -0.1875, 1.3125, 0.5}, + {-0.25, 1.125, 0.375, -0.125, 1.25, 0.5}, + {-0.1875, 1.0625, 0.375, -0.0625, 1.1875, 0.5}, + {-0.125, 0.875, 0.375, 0.125, 1.125, 0.5}, + {0.0625, 0.8125, 0.375, 0.1875, 0.9375, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.1875, 0.6875, 0.375, 0.3125, 0.8125, 0.5}, + {0.25, 0.625, 0.375, 0.375, 0.75, 0.5}, + {0.3125, 0.5625, 0.375, 0.4375, 0.6875, 0.5}, + {0.375, 0.5, 0.375, 0.5, 0.625, 0.5}, + {0.4375, 0.4375, 0.375, 0.5625, 0.5625, 0.5}, + {0.5, 0.375, 0.375, 0.625, 0.5, 0.5}, + {0.5625, 0.3125, 0.375, 0.6875, 0.4375, 0.5}, + {0.625, 0.25, 0.375, 0.75, 0.375, 0.5}, + {0.6875, 0.1875, 0.375, 0.8125, 0.3125, 0.5}, + {0.75, 0.125, 0.375, 0.875, 0.25, 0.5}, + {0.8125, 0.0625, 0.375, 0.9375, 0.1875, 0.5}, + {0.875, 0, 0.375, 1, 0.125, 0.5}, + {0.9375, -0.0625, 0.375, 1.0625, 0.0625, 0.5}, + {1, -0.125, 0.375, 1.125, 0, 0.5}, + {1.0625, -0.1875, 0.375, 1.1875, -0.0625, 0.5}, + {1.125, -0.25, 0.375, 1.25, -0.125, 0.5}, + {1.1875, -0.3125, 0.375, 1.3125, -0.1875, 0.5}, + {1.25, -0.375, 0.375, 1.375, -0.25, 0.5}, + {1.3125, -0.4375, 0.375, 1.4375, -0.3125, 0.5}, + {1.3125, 2.3125, 0.375, 1.4375, 2.4375, 0.5}, + {1.25, 2.25, 0.375, 1.375, 2.375, 0.5}, + {1.1875, 2.1875, 0.375, 1.3125, 2.3125, 0.5}, + {1.125, 2.125, 0.375, 1.25, 2.25, 0.5}, + {1.0625, 2.0625, 0.375, 1.1875, 2.1875, 0.5}, + {1, 2, 0.375, 1.125, 2.125, 0.5}, + {0.9375, 1.9375, 0.375, 1.0625, 2.0625, 0.5}, + {0.875, 1.875, 0.375, 1, 2, 0.5}, + {0.8125, 1.8125, 0.375, 0.9375, 1.9375, 0.5}, + {0.75, 1.75, 0.375, 0.875, 1.875, 0.5}, + {0.6875, 1.6875, 0.375, 0.8125, 1.8125, 0.5}, + {0.625, 1.625, 0.375, 0.75, 1.75, 0.5}, + {0.5625, 1.5625, 0.375, 0.6875, 1.6875, 0.5}, + {0.5, 1.5, 0.375, 0.625, 1.625, 0.5}, + {0.4375, 1.4375, 0.375, 0.5625, 1.5625, 0.5}, + {0.375, 1.375, 0.375, 0.5, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.25, 1.25, 0.375, 0.375, 1.375, 0.5}, + {0.1875, 1.1875, 0.375, 0.3125, 1.3125, 0.5}, + {0.125, 1.125, 0.375, 0.25, 1.25, 0.5}, + {0.0625, 1.0625, 0.375, 0.1875, 1.1875, 0.5}, + {-0.1875, 0.8125, 0.375, -0.0625, 0.9375, 0.5}, + {-0.25, 0.75, 0.375, -0.125, 0.875, 0.5}, + {-0.3125, 0.6875, 0.375, -0.1875, 0.8125, 0.5}, + {-0.375, 0.625, 0.375, -0.25, 0.75, 0.5}, + {-0.4375, 0.5625, 0.375, -0.3125, 0.6875, 0.5}, + {-0.5, 0.5, 0.375, -0.375, 0.625, 0.5}, + {-0.5625, 0.4375, 0.375, -0.4375, 0.5625, 0.5}, + {-0.625, 0.375, 0.375, -0.5, 0.5, 0.5}, + {-0.6875, 0.3125, 0.375, -0.5625, 0.4375, 0.5}, + {-0.75, 0.25, 0.375, -0.625, 0.375, 0.5}, + {-0.8125, 0.1875, 0.375, -0.6875, 0.3125, 0.5}, + {-0.875, 0.125, 0.375, -0.75, 0.25, 0.5}, + {-0.9375, 0.0625, 0.375, -0.8125, 0.1875, 0.5}, + {-1, 0, 0.375, -0.875, 0.125, 0.5}, + {-1.0625, -0.0625, 0.375, -0.9375, 0.0625, 0.5}, + {-1.125, -0.125, 0.375, -1, 0, 0.5}, + {-1.1875, -0.1875, 0.375, -1.0625, -0.0625, 0.5}, + {-1.25, -0.25, 0.375, -1.125, -0.125, 0.5}, + {-1.3125, -0.3125, 0.375, -1.1875, -0.1875, 0.5}, + {-1.375, -0.375, 0.375, -1.25, -0.25, 0.5}, + {-1.4375, -0.4375, 0.375, -1.3125, -0.3125, 0.5}, }, }, selection_box = { @@ -3340,20 +3387,20 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:medium_support_bot_"..bridge_colors, { - description = bridge_desc.." Bottom Medium Support", + minetest.register_node("bridger:medium_support_bot_" .. bridge_color, { + description = bridge_desc .. " Bottom Medium Support", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_medium_support_bot.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_medium_support_bot.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_medium_support_bot.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_medium_support_bot.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-1.5625, -0.5, 0.25, -1.1875, 0.5, 0.625}, -- NodeBox1 - {1.1875, -0.5, 0.25, 1.5625, 0.5, 0.625}, -- NodeBox2 + {-1.5625, -0.5, 0.25, -1.1875, 0.5, 0.625}, + {1.1875, -0.5, 0.25, 1.5625, 0.5, 0.625}, }, }, selection_box = { @@ -3366,112 +3413,112 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:large_support_"..bridge_colors, { - description = bridge_desc.." Large Support", + minetest.register_node("bridger:large_support_" .. bridge_color, { + description = bridge_desc .. " Large Support", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_large_support.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_large_support.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_large_support.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_large_support.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-2.5, -0.5, 0.3125, -2.25, 2.5, 0.5625}, -- NodeBox1 - {2.25, -0.5, 0.3125, 2.5, 2.5, 0.5625}, -- NodeBox2 - {2.25, 2.375, 0.375, 2.375, 2.5, 0.5}, -- NodeBox48 - {2.125, 2.3125, 0.375, 2.3125, 2.4375, 0.5}, -- NodeBox49 - {2, 2.25, 0.375, 2.1875, 2.375, 0.5}, -- NodeBox50 - {1.9375, 2.1875, 0.375, 2.0625, 2.3125, 0.5}, -- NodeBox51 - {1.8125, 2.125, 0.375, 2, 2.25, 0.5}, -- NodeBox52 - {1.75, 2.0625, 0.375, 1.875, 2.1875, 0.5}, -- NodeBox53 - {1.625, 2, 0.375, 1.8125, 2.125, 0.5}, -- NodeBox54 - {1.5, 1.9375, 0.375, 1.6875, 2.0625, 0.5}, -- NodeBox55 - {1.4375, 1.875, 0.375, 1.5625, 2, 0.5}, -- NodeBox56 - {1.3125, 1.8125, 0.375, 1.5, 1.9375, 0.5}, -- NodeBox57 - {1.25, 1.75, 0.375, 1.375, 1.875, 0.5}, -- NodeBox58 - {1.125, 1.6875, 0.375, 1.3125, 1.8125, 0.5}, -- NodeBox59 - {1, 1.625, 0.375, 1.1875, 1.75, 0.5}, -- NodeBox60 - {0.9375, 1.5625, 0.375, 1.0625, 1.6875, 0.5}, -- NodeBox61 - {0.8125, 1.5, 0.375, 1, 1.625, 0.5}, -- NodeBox62 - {0.75, 1.4375, 0.375, 0.875, 1.5625, 0.5}, -- NodeBox63 - {0.625, 1.375, 0.375, 0.8125, 1.5, 0.5}, -- NodeBox64 - {0.5, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox65 - {0.4375, 1.25, 0.375, 0.5625, 1.375, 0.5}, -- NodeBox66 - {0.3125, 1.1875, 0.375, 0.5, 1.3125, 0.5}, -- NodeBox67 - {0.25, 1.125, 0.375, 0.375, 1.25, 0.5}, -- NodeBox68 - {0.125, 1.0625, 0.375, 0.3125, 1.1875, 0.5}, -- NodeBox69 - {0, 1, 0.375, 0.1875, 1.125, 0.5}, -- NodeBox70 - {-2.375, -0.5, 0.375, -2.25, -0.375, 0.5}, -- NodeBox71 - {-2.3125, -0.4375, 0.375, -2.125, -0.3125, 0.5}, -- NodeBox72 - {-2.1875, -0.375, 0.375, -2, -0.25, 0.5}, -- NodeBox73 - {-2.0625, -0.3125, 0.375, -1.9375, -0.1875, 0.5}, -- NodeBox74 - {-2, -0.25, 0.375, -1.8125, -0.125, 0.5}, -- NodeBox75 - {-1.875, -0.1875, 0.375, -1.75, -0.0625, 0.5}, -- NodeBox76 - {-1.8125, -0.125, 0.375, -1.625, 0, 0.5}, -- NodeBox77 - {-1.6875, -0.0625, 0.375, -1.5, 0.0625, 0.5}, -- NodeBox78 - {-1.5625, 0, 0.375, -1.4375, 0.125, 0.5}, -- NodeBox79 - {-1.5, 0.0625, 0.375, -1.3125, 0.1875, 0.5}, -- NodeBox80 - {-1.375, 0.125, 0.375, -1.25, 0.25, 0.5}, -- NodeBox81 - {-1.3125, 0.1875, 0.375, -1.125, 0.3125, 0.5}, -- NodeBox82 - {-1.1875, 0.25, 0.375, -1, 0.375, 0.5}, -- NodeBox83 - {-1.0625, 0.3125, 0.375, -0.9375, 0.4375, 0.5}, -- NodeBox84 - {-1, 0.375, 0.375, -0.8125, 0.5, 0.5}, -- NodeBox85 - {-0.875, 0.4375, 0.375, -0.75, 0.5625, 0.5}, -- NodeBox86 - {-0.8125, 0.5, 0.375, -0.625, 0.625, 0.5}, -- NodeBox87 - {-0.6875, 0.5625, 0.375, -0.5, 0.6875, 0.5}, -- NodeBox88 - {-0.5625, 0.625, 0.375, -0.4375, 0.75, 0.5}, -- NodeBox89 - {-0.5, 0.6875, 0.375, -0.3125, 0.8125, 0.5}, -- NodeBox90 - {-0.375, 0.75, 0.375, -0.25, 0.875, 0.5}, -- NodeBox91 - {-0.3125, 0.8125, 0.375, -0.125, 0.9375, 0.5}, -- NodeBox92 - {-0.1875, 0.875, 0.375, 0, 1, 0.5}, -- NodeBox93 - {-2.375, 2.375, 0.375, -2.25, 2.5, 0.5}, -- NodeBox48 - {-2.3125, 2.3125, 0.375, -2.125, 2.4375, 0.5}, -- NodeBox49 - {-2.1875, 2.25, 0.375, -2, 2.375, 0.5}, -- NodeBox50 - {-2.0625, 2.1875, 0.375, -1.9375, 2.3125, 0.5}, -- NodeBox51 - {-2, 2.125, 0.375, -1.8125, 2.25, 0.5}, -- NodeBox52 - {-1.875, 2.0625, 0.375, -1.75, 2.1875, 0.5}, -- NodeBox53 - {-1.8125, 2, 0.375, -1.625, 2.125, 0.5}, -- NodeBox54 - {-1.6875, 1.9375, 0.375, -1.5, 2.0625, 0.5}, -- NodeBox55 - {-1.5625, 1.875, 0.375, -1.4375, 2, 0.5}, -- NodeBox56 - {-1.5, 1.8125, 0.375, -1.3125, 1.9375, 0.5}, -- NodeBox57 - {-1.375, 1.75, 0.375, -1.25, 1.875, 0.5}, -- NodeBox58 - {-1.3125, 1.6875, 0.375, -1.125, 1.8125, 0.5}, -- NodeBox59 - {-1.1875, 1.625, 0.375, -1, 1.75, 0.5}, -- NodeBox60 - {-1.0625, 1.5625, 0.375, -0.9375, 1.6875, 0.5}, -- NodeBox61 - {-1, 1.5, 0.375, -0.8125, 1.625, 0.5}, -- NodeBox62 - {-0.875, 1.4375, 0.375, -0.75, 1.5625, 0.5}, -- NodeBox63 - {-0.8125, 1.375, 0.375, -0.625, 1.5, 0.5}, -- NodeBox64 - {-0.6875, 1.3125, 0.375, -0.5, 1.4375, 0.5}, -- NodeBox65 - {-0.5625, 1.25, 0.375, -0.4375, 1.375, 0.5}, -- NodeBox66 - {-0.5, 1.1875, 0.375, -0.3125, 1.3125, 0.5}, -- NodeBox67 - {-0.375, 1.125, 0.375, -0.25, 1.25, 0.5}, -- NodeBox68 - {-0.3125, 1.0625, 0.375, -0.125, 1.1875, 0.5}, -- NodeBox69 - {-0.1875, 1, 0.375, -0, 1.125, 0.5}, -- NodeBox70 - {2.25, -0.5, 0.375, 2.375, -0.375, 0.5}, -- NodeBox71 - {2.125, -0.4375, 0.375, 2.3125, -0.3125, 0.5}, -- NodeBox72 - {2, -0.375, 0.375, 2.1875, -0.25, 0.5}, -- NodeBox73 - {1.9375, -0.3125, 0.375, 2.0625, -0.1875, 0.5}, -- NodeBox74 - {1.8125, -0.25, 0.375, 2, -0.125, 0.5}, -- NodeBox75 - {1.75, -0.1875, 0.375, 1.875, -0.0625, 0.5}, -- NodeBox76 - {1.625, -0.125, 0.375, 1.8125, 0, 0.5}, -- NodeBox77 - {1.5, -0.0625, 0.375, 1.6875, 0.0625, 0.5}, -- NodeBox78 - {1.4375, 0, 0.375, 1.5625, 0.125, 0.5}, -- NodeBox79 - {1.3125, 0.0625, 0.375, 1.5, 0.1875, 0.5}, -- NodeBox80 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox81 - {1.125, 0.1875, 0.375, 1.3125, 0.3125, 0.5}, -- NodeBox82 - {1, 0.25, 0.375, 1.1875, 0.375, 0.5}, -- NodeBox83 - {0.9375, 0.3125, 0.375, 1.0625, 0.4375, 0.5}, -- NodeBox84 - {0.8125, 0.375, 0.375, 1, 0.5, 0.5}, -- NodeBox85 - {0.75, 0.4375, 0.375, 0.875, 0.5625, 0.5}, -- NodeBox86 - {0.625, 0.5, 0.375, 0.8125, 0.625, 0.5}, -- NodeBox87 - {0.5, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, -- NodeBox88 - {0.4375, 0.625, 0.375, 0.5625, 0.75, 0.5}, -- NodeBox89 - {0.3125, 0.6875, 0.375, 0.5, 0.8125, 0.5}, -- NodeBox90 - {0.25, 0.75, 0.375, 0.375, 0.875, 0.5}, -- NodeBox91 - {0.125, 0.8125, 0.375, 0.3125, 0.9375, 0.5}, -- NodeBox92 - {-0, 0.875, 0.375, 0.1875, 1, 0.5}, -- NodeBox93 + {-2.5, -0.5, 0.3125, -2.25, 2.5, 0.5625}, + {2.25, -0.5, 0.3125, 2.5, 2.5, 0.5625}, + {2.25, 2.375, 0.375, 2.375, 2.5, 0.5}, + {2.125, 2.3125, 0.375, 2.3125, 2.4375, 0.5}, + {2, 2.25, 0.375, 2.1875, 2.375, 0.5}, + {1.9375, 2.1875, 0.375, 2.0625, 2.3125, 0.5}, + {1.8125, 2.125, 0.375, 2, 2.25, 0.5}, + {1.75, 2.0625, 0.375, 1.875, 2.1875, 0.5}, + {1.625, 2, 0.375, 1.8125, 2.125, 0.5}, + {1.5, 1.9375, 0.375, 1.6875, 2.0625, 0.5}, + {1.4375, 1.875, 0.375, 1.5625, 2, 0.5}, + {1.3125, 1.8125, 0.375, 1.5, 1.9375, 0.5}, + {1.25, 1.75, 0.375, 1.375, 1.875, 0.5}, + {1.125, 1.6875, 0.375, 1.3125, 1.8125, 0.5}, + {1, 1.625, 0.375, 1.1875, 1.75, 0.5}, + {0.9375, 1.5625, 0.375, 1.0625, 1.6875, 0.5}, + {0.8125, 1.5, 0.375, 1, 1.625, 0.5}, + {0.75, 1.4375, 0.375, 0.875, 1.5625, 0.5}, + {0.625, 1.375, 0.375, 0.8125, 1.5, 0.5}, + {0.5, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.4375, 1.25, 0.375, 0.5625, 1.375, 0.5}, + {0.3125, 1.1875, 0.375, 0.5, 1.3125, 0.5}, + {0.25, 1.125, 0.375, 0.375, 1.25, 0.5}, + {0.125, 1.0625, 0.375, 0.3125, 1.1875, 0.5}, + {0, 1, 0.375, 0.1875, 1.125, 0.5}, + {-2.375, -0.5, 0.375, -2.25, -0.375, 0.5}, + {-2.3125, -0.4375, 0.375, -2.125, -0.3125, 0.5}, + {-2.1875, -0.375, 0.375, -2, -0.25, 0.5}, + {-2.0625, -0.3125, 0.375, -1.9375, -0.1875, 0.5}, + {-2, -0.25, 0.375, -1.8125, -0.125, 0.5}, + {-1.875, -0.1875, 0.375, -1.75, -0.0625, 0.5}, + {-1.8125, -0.125, 0.375, -1.625, 0, 0.5}, + {-1.6875, -0.0625, 0.375, -1.5, 0.0625, 0.5}, + {-1.5625, 0, 0.375, -1.4375, 0.125, 0.5}, + {-1.5, 0.0625, 0.375, -1.3125, 0.1875, 0.5}, + {-1.375, 0.125, 0.375, -1.25, 0.25, 0.5}, + {-1.3125, 0.1875, 0.375, -1.125, 0.3125, 0.5}, + {-1.1875, 0.25, 0.375, -1, 0.375, 0.5}, + {-1.0625, 0.3125, 0.375, -0.9375, 0.4375, 0.5}, + {-1, 0.375, 0.375, -0.8125, 0.5, 0.5}, + {-0.875, 0.4375, 0.375, -0.75, 0.5625, 0.5}, + {-0.8125, 0.5, 0.375, -0.625, 0.625, 0.5}, + {-0.6875, 0.5625, 0.375, -0.5, 0.6875, 0.5}, + {-0.5625, 0.625, 0.375, -0.4375, 0.75, 0.5}, + {-0.5, 0.6875, 0.375, -0.3125, 0.8125, 0.5}, + {-0.375, 0.75, 0.375, -0.25, 0.875, 0.5}, + {-0.3125, 0.8125, 0.375, -0.125, 0.9375, 0.5}, + {-0.1875, 0.875, 0.375, 0, 1, 0.5}, + {-2.375, 2.375, 0.375, -2.25, 2.5, 0.5}, + {-2.3125, 2.3125, 0.375, -2.125, 2.4375, 0.5}, + {-2.1875, 2.25, 0.375, -2, 2.375, 0.5}, + {-2.0625, 2.1875, 0.375, -1.9375, 2.3125, 0.5}, + {-2, 2.125, 0.375, -1.8125, 2.25, 0.5}, + {-1.875, 2.0625, 0.375, -1.75, 2.1875, 0.5}, + {-1.8125, 2, 0.375, -1.625, 2.125, 0.5}, + {-1.6875, 1.9375, 0.375, -1.5, 2.0625, 0.5}, + {-1.5625, 1.875, 0.375, -1.4375, 2, 0.5}, + {-1.5, 1.8125, 0.375, -1.3125, 1.9375, 0.5}, + {-1.375, 1.75, 0.375, -1.25, 1.875, 0.5}, + {-1.3125, 1.6875, 0.375, -1.125, 1.8125, 0.5}, + {-1.1875, 1.625, 0.375, -1, 1.75, 0.5}, + {-1.0625, 1.5625, 0.375, -0.9375, 1.6875, 0.5}, + {-1, 1.5, 0.375, -0.8125, 1.625, 0.5}, + {-0.875, 1.4375, 0.375, -0.75, 1.5625, 0.5}, + {-0.8125, 1.375, 0.375, -0.625, 1.5, 0.5}, + {-0.6875, 1.3125, 0.375, -0.5, 1.4375, 0.5}, + {-0.5625, 1.25, 0.375, -0.4375, 1.375, 0.5}, + {-0.5, 1.1875, 0.375, -0.3125, 1.3125, 0.5}, + {-0.375, 1.125, 0.375, -0.25, 1.25, 0.5}, + {-0.3125, 1.0625, 0.375, -0.125, 1.1875, 0.5}, + {-0.1875, 1, 0.375, -0, 1.125, 0.5}, + {2.25, -0.5, 0.375, 2.375, -0.375, 0.5}, + {2.125, -0.4375, 0.375, 2.3125, -0.3125, 0.5}, + {2, -0.375, 0.375, 2.1875, -0.25, 0.5}, + {1.9375, -0.3125, 0.375, 2.0625, -0.1875, 0.5}, + {1.8125, -0.25, 0.375, 2, -0.125, 0.5}, + {1.75, -0.1875, 0.375, 1.875, -0.0625, 0.5}, + {1.625, -0.125, 0.375, 1.8125, 0, 0.5}, + {1.5, -0.0625, 0.375, 1.6875, 0.0625, 0.5}, + {1.4375, 0, 0.375, 1.5625, 0.125, 0.5}, + {1.3125, 0.0625, 0.375, 1.5, 0.1875, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.125, 0.1875, 0.375, 1.3125, 0.3125, 0.5}, + {1, 0.25, 0.375, 1.1875, 0.375, 0.5}, + {0.9375, 0.3125, 0.375, 1.0625, 0.4375, 0.5}, + {0.8125, 0.375, 0.375, 1, 0.5, 0.5}, + {0.75, 0.4375, 0.375, 0.875, 0.5625, 0.5}, + {0.625, 0.5, 0.375, 0.8125, 0.625, 0.5}, + {0.5, 0.5625, 0.375, 0.6875, 0.6875, 0.5}, + {0.4375, 0.625, 0.375, 0.5625, 0.75, 0.5}, + {0.3125, 0.6875, 0.375, 0.5, 0.8125, 0.5}, + {0.25, 0.75, 0.375, 0.375, 0.875, 0.5}, + {0.125, 0.8125, 0.375, 0.3125, 0.9375, 0.5}, + {-0, 0.875, 0.375, 0.1875, 1, 0.5}, }, }, selection_box = { @@ -3484,20 +3531,20 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:large_support_bot_"..bridge_colors, { - description = bridge_desc.." Bottom Large Support", + minetest.register_node("bridger:large_support_bot_" .. bridge_color, { + description = bridge_desc .. " Bottom Large Support", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_large_support_bot.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_large_support_bot.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_large_support_bot.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_large_support_bot.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-2.5625, -0.5, 0.25, -2.1875, 0.5, 0.625}, -- NodeBox1 - {2.1875, -0.5, 0.25, 2.5625, 0.5, 0.625}, -- NodeBox2 + {-2.5625, -0.5, 0.25, -2.1875, 0.5, 0.625}, + {2.1875, -0.5, 0.25, 2.5625, 0.5, 0.625}, }, }, selection_box = { @@ -3510,53 +3557,53 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_right_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Right Slant", + minetest.register_node("bridger:truss_superstructure_right_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Right Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_superstructure_right_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox215 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox217 - {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, -- NodeBox218 - {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, -- NodeBox219 - {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, -- NodeBox220 - {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, -- NodeBox221 - {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, -- NodeBox222 - {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, -- NodeBox223 - {-0.125, 1.875, 0.375, 0, 2, 0.5}, -- NodeBox224 - {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, -- NodeBox225 - {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, -- NodeBox226 - {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, -- NodeBox227 - {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, -- NodeBox228 - {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, -- NodeBox229 - {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, -- NodeBox230 - {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, -- NodeBox231 - {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, -- NodeBox234 - {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, -- NodeBox235 - {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, -- NodeBox236 - {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, -- NodeBox237 - {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, -- NodeBox238 - {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, -- NodeBox239 - {0.875, 0.625, 0.375, 1, 0.75, 0.5}, -- NodeBox240 - {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, -- NodeBox241 - {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, -- NodeBox242 - {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, -- NodeBox243 - {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, -- NodeBox244 - {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, -- NodeBox245 - {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, -- NodeBox246 - {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, -- NodeBox247 - {1.375, 0, 0.375, 1.5, 0.125, 0.5}, -- NodeBox248 - {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, + {-0.4375, 2.25, 0.375, -0.3125, 2.375, 0.5}, + {-0.375, 2.1875, 0.375, -0.25, 2.3125, 0.5}, + {-0.3125, 2.0625, 0.375, -0.1875, 2.25, 0.5}, + {-0.25, 2, 0.375, -0.125, 2.125, 0.5}, + {-0.1875, 1.9375, 0.375, -0.0625, 2.0625, 0.5}, + {-0.125, 1.875, 0.375, 0, 2, 0.5}, + {-0.0625, 1.75, 0.375, 0.0625, 1.9375, 0.5}, + {0, 1.6875, 0.375, 0.125, 1.8125, 0.5}, + {0.0625, 1.625, 0.375, 0.1875, 1.75, 0.5}, + {0.125, 1.5625, 0.375, 0.25, 1.6875, 0.5}, + {0.1875, 1.4375, 0.375, 0.3125, 1.625, 0.5}, + {0.25, 1.375, 0.375, 0.375, 1.5, 0.5}, + {0.3125, 1.3125, 0.375, 0.4375, 1.4375, 0.5}, + {0.375, 1.25, 0.375, 0.5, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.5, 1.0625, 0.375, 0.625, 1.1875, 0.5}, + {0.5625, 1, 0.375, 0.6875, 1.125, 0.5}, + {0.625, 0.9375, 0.375, 0.75, 1.0625, 0.5}, + {0.6875, 0.8125, 0.375, 0.8125, 1, 0.5}, + {0.75, 0.75, 0.375, 0.875, 0.875, 0.5}, + {0.8125, 0.6875, 0.375, 0.9375, 0.8125, 0.5}, + {0.875, 0.625, 0.375, 1, 0.75, 0.5}, + {0.9375, 0.5, 0.375, 1.0625, 0.6875, 0.5}, + {1, 0.4375, 0.375, 1.125, 0.5625, 0.5}, + {1.0625, 0.375, 0.375, 1.1875, 0.5, 0.5}, + {1.125, 0.3125, 0.375, 1.25, 0.4375, 0.5}, + {1.1875, 0.1875, 0.375, 1.3125, 0.375, 0.5}, + {1.25, 0.125, 0.375, 1.375, 0.25, 0.5}, + {1.3125, 0.0625, 0.375, 1.4375, 0.1875, 0.5}, + {1.375, 0, 0.375, 1.5, 0.125, 0.5}, + {-0.4375, 2.3125, 0.375, -0.3125, 2.4375, 0.5}, }, }, selection_box = { @@ -3575,53 +3622,53 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:truss_superstructure_left_slant_"..bridge_colors, { - description = bridge_desc.." Truss Superstructure Left Slant", + minetest.register_node("bridger:truss_superstructure_left_slant_" .. bridge_color, { + description = bridge_desc .. " Truss Superstructure Left Slant", drawtype = "nodebox", - tiles = {"bridges_"..bridge_colors..".png"}, - inventory_image = "bridges_"..bridge_colors..".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", - wield_image = "bridges_"..bridge_colors..".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", + tiles = {"bridges_" .. bridge_color .. ".png"}, + inventory_image = "bridges_" .. bridge_color .. ".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", + wield_image = "bridges_" .. bridge_color .. ".png^bridges_superstructure_left_slant.png^[makealpha:255,126,126", paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, node_box = { type = "fixed", fixed = { - {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, -- NodeBox214 - {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, -- NodeBox215 - {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, -- NodeBox217 - {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, -- NodeBox218 - {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, -- NodeBox219 - {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, -- NodeBox220 - {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, -- NodeBox221 - {1.125, 2, 0.375, 1.25, 2.125, 0.5}, -- NodeBox222 - {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, -- NodeBox223 - {1, 1.875, 0.375, 1.125, 2, 0.5}, -- NodeBox224 - {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, -- NodeBox225 - {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, -- NodeBox226 - {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, -- NodeBox227 - {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, -- NodeBox228 - {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, -- NodeBox229 - {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, -- NodeBox230 - {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, -- NodeBox231 - {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, -- NodeBox232 - {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, -- NodeBox233 - {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, -- NodeBox234 - {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, -- NodeBox235 - {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, -- NodeBox236 - {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, -- NodeBox237 - {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, -- NodeBox238 - {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, -- NodeBox239 - {0, 0.625, 0.375, 0.125, 0.75, 0.5}, -- NodeBox240 - {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, -- NodeBox241 - {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, -- NodeBox242 - {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, -- NodeBox243 - {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, -- NodeBox244 - {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, -- NodeBox245 - {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, -- NodeBox246 - {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, -- NodeBox247 - {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, -- NodeBox248 - {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, -- NodeBox249 + {-0.5, -0.5, 0.375, 1.5, 0.0625, 0.5}, + {-0.5, -0.5, 0.375, -0.4375, 2.5, 0.5}, + {1.4375, -0.5, 0.375, 1.5, 2.5, 0.5}, + {-0.5, 2.375, 0.375, 1.5, 2.5, 0.5}, + {1.3125, 2.25, 0.375, 1.4375, 2.375, 0.5}, + {1.25, 2.1875, 0.375, 1.375, 2.3125, 0.5}, + {1.1875, 2.0625, 0.375, 1.3125, 2.25, 0.5}, + {1.125, 2, 0.375, 1.25, 2.125, 0.5}, + {1.0625, 1.9375, 0.375, 1.1875, 2.0625, 0.5}, + {1, 1.875, 0.375, 1.125, 2, 0.5}, + {0.9375, 1.75, 0.375, 1.0625, 1.9375, 0.5}, + {0.875, 1.6875, 0.375, 1, 1.8125, 0.5}, + {0.8125, 1.625, 0.375, 0.9375, 1.75, 0.5}, + {0.75, 1.5625, 0.375, 0.875, 1.6875, 0.5}, + {0.6875, 1.4375, 0.375, 0.8125, 1.625, 0.5}, + {0.625, 1.375, 0.375, 0.75, 1.5, 0.5}, + {0.5625, 1.3125, 0.375, 0.6875, 1.4375, 0.5}, + {0.5, 1.25, 0.375, 0.625, 1.375, 0.5}, + {0.4375, 1.125, 0.375, 0.5625, 1.3125, 0.5}, + {0.375, 1.0625, 0.375, 0.5, 1.1875, 0.5}, + {0.3125, 1, 0.375, 0.4375, 1.125, 0.5}, + {0.25, 0.9375, 0.375, 0.375, 1.0625, 0.5}, + {0.1875, 0.8125, 0.375, 0.3125, 1, 0.5}, + {0.125, 0.75, 0.375, 0.25, 0.875, 0.5}, + {0.0625, 0.6875, 0.375, 0.1875, 0.8125, 0.5}, + {0, 0.625, 0.375, 0.125, 0.75, 0.5}, + {-0.0625, 0.5, 0.375, 0.0625, 0.6875, 0.5}, + {-0.125, 0.4375, 0.375, 0, 0.5625, 0.5}, + {-0.1875, 0.375, 0.375, -0.0625, 0.5, 0.5}, + {-0.25, 0.3125, 0.375, -0.125, 0.4375, 0.5}, + {-0.3125, 0.1875, 0.375, -0.1875, 0.375, 0.5}, + {-0.375, 0.125, 0.375, -0.25, 0.25, 0.5}, + {-0.4375, 0.0625, 0.375, -0.3125, 0.1875, 0.5}, + {-0.5, 0, 0.375, -0.375, 0.125, 0.5}, + {1.375, 2.3125, 0.375, 1.5, 2.4375, 0.5}, }, }, selection_box = { @@ -3640,10 +3687,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:corrugated_steel_"..bridge_colors, { - description = bridge_desc.." Corrugated Steel", + minetest.register_node("bridger:corrugated_steel_" .. bridge_color, { + description = bridge_desc .. " Corrugated Steel", drawtype = "nodebox", - tiles = {"bridges_corrugated_steel_"..bridge_colors..".png"}, + tiles = {"bridges_corrugated_steel_" .. bridge_color .. ".png"}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -3663,10 +3710,10 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then sounds = default.node_sound_metal_defaults(), }) - minetest.register_node("bridger:corrugated_steel_ceiling_"..bridge_colors, { - description = bridge_desc.." Corrugated Steel Deck", + minetest.register_node("bridger:corrugated_steel_ceiling_" .. bridge_color, { + description = bridge_desc .. " Corrugated Steel Deck", drawtype = "nodebox", - tiles = {"bridges_corrugated_steel_"..bridge_colors..".png^[transformR90"}, + tiles = {"bridges_corrugated_steel_" .. bridge_color .. ".png^[transformR90"}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, @@ -3682,7 +3729,7 @@ if not minetest.settings:get_bool("bridger_disable_trusses") then end end -if not minetest.settings:get_bool("bridger_disable_trestles") then +if minetest.settings:get_bool("bridger_enable_trestles", true) then minetest.register_node("bridger:trestle_support", { description = "Trestle Support", drawtype = "nodebox", @@ -3695,53 +3742,53 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-1, -0.5, -0.125, -0.75, 1.5, 0.125}, -- NodeBox1 - {0.75, -0.5, -0.125, 1, 1.5, 0.125}, -- NodeBox2 - {0.625, 1.375, -0.0625, 0.75, 1.5, 0.0625}, -- NodeBox3 - {0.5625, 1.25, -0.0625, 0.6875, 1.4375, 0.0625}, -- NodeBox4 - {0.5, 1.1875, -0.0625, 0.625, 1.3125, 0.0625}, -- NodeBox5 - {0.4375, 1.125, -0.0625, 0.5625, 1.25, 0.0625}, -- NodeBox6 - {0.375, 1, -0.0625, 0.5, 1.1875, 0.0625}, -- NodeBox7 - {0.3125, 0.9375, -0.0625, 0.4375, 1.0625, 0.0625}, -- NodeBox8 - {0.25, 0.875, -0.0625, 0.375, 1, 0.0625}, -- NodeBox9 - {0.1875, 0.75, -0.0625, 0.3125, 0.9375, 0.0625}, -- NodeBox10 - {0.125, 0.6875, -0.0625, 0.25, 0.8125, 0.0625}, -- NodeBox11 - {0.0625, 0.625, -0.0625, 0.1875, 0.75, 0.0625}, -- NodeBox12 - {0, 0.5, -0.0625, 0.125, 0.6875, 0.0625}, -- NodeBox13 - {-0.0625, 0.4375, -0.0625, 0.0625, 0.5625, 0.0625}, -- NodeBox14 - {-0.125, 0.3125, -0.0625, 0, 0.5, 0.0625}, -- NodeBox15 - {-0.1875, 0.25, -0.0625, -0.0625, 0.375, 0.0625}, -- NodeBox16 - {-0.25, 0.1875, -0.0625, -0.125, 0.3125, 0.0625}, -- NodeBox17 - {-0.3125, 0.0625, -0.0625, -0.1875, 0.25, 0.0625}, -- NodeBox18 - {-0.375, 0, -0.0625, -0.25, 0.125, 0.0625}, -- NodeBox19 - {-0.4375, -0.0625, -0.0625, -0.3125, 0.0625, 0.0625}, -- NodeBox20 - {-0.5, -0.1875, -0.0625, -0.375, 0, 0.0625}, -- NodeBox21 - {-0.5625, -0.25, -0.0625, -0.4375, -0.125, 0.0625}, -- NodeBox22 - {-0.625, -0.3125, -0.0625, -0.5, -0.1875, 0.0625}, -- NodeBox23 - {-0.6875, -0.4375, -0.0625, -0.5625, -0.25, 0.0625}, -- NodeBox24 - {-0.75, -0.5, -0.0625, -0.625, -0.375, 0.0625}, -- NodeBox25 - {-0.75, 1.375, -0.0625, -0.625, 1.5, 0.0625}, -- NodeBox3 - {-0.6875, 1.25, -0.0625, -0.5625, 1.4375, 0.0625}, -- NodeBox4 - {-0.625, 1.1875, -0.0625, -0.5, 1.3125, 0.0625}, -- NodeBox5 - {-0.5625, 1.125, -0.0625, -0.4375, 1.25, 0.0625}, -- NodeBox6 - {-0.5, 1, -0.0625, -0.375, 1.1875, 0.0625}, -- NodeBox7 - {-0.4375, 0.9375, -0.0625, -0.3125, 1.0625, 0.0625}, -- NodeBox8 - {-0.375, 0.875, -0.0625, -0.25, 1, 0.0625}, -- NodeBox9 - {-0.3125, 0.75, -0.0625, -0.1875, 0.9375, 0.0625}, -- NodeBox10 - {-0.25, 0.6875, -0.0625, -0.125, 0.8125, 0.0625}, -- NodeBox11 - {-0.1875, 0.625, -0.0625, -0.0625, 0.75, 0.0625}, -- NodeBox12 - {-0.125, 0.5, -0.0625, -0, 0.6875, 0.0625}, -- NodeBox13 - {-0, 0.3125, -0.0625, 0.125, 0.5, 0.0625}, -- NodeBox15 - {0.0625, 0.25, -0.0625, 0.1875, 0.375, 0.0625}, -- NodeBox16 - {0.125, 0.1875, -0.0625, 0.25, 0.3125, 0.0625}, -- NodeBox17 - {0.1875, 0.0625, -0.0625, 0.3125, 0.25, 0.0625}, -- NodeBox18 - {0.25, 0, -0.0625, 0.375, 0.125, 0.0625}, -- NodeBox19 - {0.3125, -0.0625, -0.0625, 0.4375, 0.0625, 0.0625}, -- NodeBox20 - {0.375, -0.1875, -0.0625, 0.5, 0, 0.0625}, -- NodeBox21 - {0.4375, -0.25, -0.0625, 0.5625, -0.125, 0.0625}, -- NodeBox22 - {0.5, -0.3125, -0.0625, 0.625, -0.1875, 0.0625}, -- NodeBox23 - {0.5625, -0.4375, -0.0625, 0.6875, -0.25, 0.0625}, -- NodeBox24 - {0.625, -0.5, -0.0625, 0.75, -0.375, 0.0625}, -- NodeBox25 + {-1, -0.5, -0.125, -0.75, 1.5, 0.125}, + {0.75, -0.5, -0.125, 1, 1.5, 0.125}, + {0.625, 1.375, -0.0625, 0.75, 1.5, 0.0625}, + {0.5625, 1.25, -0.0625, 0.6875, 1.4375, 0.0625}, + {0.5, 1.1875, -0.0625, 0.625, 1.3125, 0.0625}, + {0.4375, 1.125, -0.0625, 0.5625, 1.25, 0.0625}, + {0.375, 1, -0.0625, 0.5, 1.1875, 0.0625}, + {0.3125, 0.9375, -0.0625, 0.4375, 1.0625, 0.0625}, + {0.25, 0.875, -0.0625, 0.375, 1, 0.0625}, + {0.1875, 0.75, -0.0625, 0.3125, 0.9375, 0.0625}, + {0.125, 0.6875, -0.0625, 0.25, 0.8125, 0.0625}, + {0.0625, 0.625, -0.0625, 0.1875, 0.75, 0.0625}, + {0, 0.5, -0.0625, 0.125, 0.6875, 0.0625}, + {-0.0625, 0.4375, -0.0625, 0.0625, 0.5625, 0.0625}, + {-0.125, 0.3125, -0.0625, 0, 0.5, 0.0625}, + {-0.1875, 0.25, -0.0625, -0.0625, 0.375, 0.0625}, + {-0.25, 0.1875, -0.0625, -0.125, 0.3125, 0.0625}, + {-0.3125, 0.0625, -0.0625, -0.1875, 0.25, 0.0625}, + {-0.375, 0, -0.0625, -0.25, 0.125, 0.0625}, + {-0.4375, -0.0625, -0.0625, -0.3125, 0.0625, 0.0625}, + {-0.5, -0.1875, -0.0625, -0.375, 0, 0.0625}, + {-0.5625, -0.25, -0.0625, -0.4375, -0.125, 0.0625}, + {-0.625, -0.3125, -0.0625, -0.5, -0.1875, 0.0625}, + {-0.6875, -0.4375, -0.0625, -0.5625, -0.25, 0.0625}, + {-0.75, -0.5, -0.0625, -0.625, -0.375, 0.0625}, + {-0.75, 1.375, -0.0625, -0.625, 1.5, 0.0625}, + {-0.6875, 1.25, -0.0625, -0.5625, 1.4375, 0.0625}, + {-0.625, 1.1875, -0.0625, -0.5, 1.3125, 0.0625}, + {-0.5625, 1.125, -0.0625, -0.4375, 1.25, 0.0625}, + {-0.5, 1, -0.0625, -0.375, 1.1875, 0.0625}, + {-0.4375, 0.9375, -0.0625, -0.3125, 1.0625, 0.0625}, + {-0.375, 0.875, -0.0625, -0.25, 1, 0.0625}, + {-0.3125, 0.75, -0.0625, -0.1875, 0.9375, 0.0625}, + {-0.25, 0.6875, -0.0625, -0.125, 0.8125, 0.0625}, + {-0.1875, 0.625, -0.0625, -0.0625, 0.75, 0.0625}, + {-0.125, 0.5, -0.0625, -0, 0.6875, 0.0625}, + {-0, 0.3125, -0.0625, 0.125, 0.5, 0.0625}, + {0.0625, 0.25, -0.0625, 0.1875, 0.375, 0.0625}, + {0.125, 0.1875, -0.0625, 0.25, 0.3125, 0.0625}, + {0.1875, 0.0625, -0.0625, 0.3125, 0.25, 0.0625}, + {0.25, 0, -0.0625, 0.375, 0.125, 0.0625}, + {0.3125, -0.0625, -0.0625, 0.4375, 0.0625, 0.0625}, + {0.375, -0.1875, -0.0625, 0.5, 0, 0.0625}, + {0.4375, -0.25, -0.0625, 0.5625, -0.125, 0.0625}, + {0.5, -0.3125, -0.0625, 0.625, -0.1875, 0.0625}, + {0.5625, -0.4375, -0.0625, 0.6875, -0.25, 0.0625}, + {0.625, -0.5, -0.0625, 0.75, -0.375, 0.0625}, }, }, selection_box = { @@ -3766,8 +3813,8 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-1, -0.5, -0.125, -0.75, 0.5, 0.125}, -- NodeBox1 - {0.75, -0.5, -0.125, 1, 0.5, 0.125}, -- NodeBox2 + {-1, -0.5, -0.125, -0.75, 0.5, 0.125}, + {0.75, -0.5, -0.125, 1, 0.5, 0.125}, }, }, selection_box = { @@ -3792,63 +3839,63 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-0.875, -0.5, -0.0625, 0.875, -0.375, 0.0625}, -- NodeBox1 - {-0.875, 1.375, -0.0625, 0.875, 1.5, 0.0625}, -- NodeBox2 - {-1, 1.375, -0.0625, 1, 1.5, 0}, -- NodeBox30 - {-1, -0.5, -0.0625, 1, -0.375, 0}, -- NodeBox31 - {-0.9375, 1.3125, -0.0625, -0.8125, 1.4375, 0.0625}, -- NodeBox3 - {-0.875, 1.25, -0.0625, -0.75, 1.375, 0.0625}, -- NodeBox4 - {0.25, 0.125, -0.0625, 0.375, 0.25, 0.0625}, -- NodeBox5 - {-0.8125, 1.1875, -0.0625, -0.6875, 1.3125, 0.0625}, -- NodeBox6 - {-0.75, 1.125, -0.0625, -0.625, 1.25, 0.0625}, -- NodeBox7 - {-0.6875, 1.0625, -0.0625, -0.5625, 1.1875, 0.0625}, -- NodeBox8 - {-0.625, 1, -0.0625, -0.5, 1.125, 0.0625}, -- NodeBox9 - {-0.5625, 0.9375, -0.0625, -0.4375, 1.0625, 0.0625}, -- NodeBox10 - {-0.5, 0.875, -0.0625, -0.375, 1, 0.0625}, -- NodeBox11 - {-0.4375, 0.8125, -0.0625, -0.3125, 0.9375, 0.0625}, -- NodeBox12 - {-0.375, 0.75, -0.0625, -0.25, 0.875, 0.0625}, -- NodeBox13 - {-0.3125, 0.6875, -0.0625, -0.1875, 0.8125, 0.0625}, -- NodeBox14 - {-0.25, 0.625, -0.0625, -0.125, 0.75, 0.0625}, -- NodeBox15 - {-0.1875, 0.5625, -0.0625, -0.0625, 0.6875, 0.0625}, -- NodeBox16 - {-0.125, 0.375, -0.0625, 0.125, 0.625, 0.0625}, -- NodeBox17 - {0.0625, 0.3125, -0.0625, 0.1875, 0.4375, 0.0625}, -- NodeBox18 - {0.125, 0.25, -0.0625, 0.25, 0.375, 0.0625}, -- NodeBox19 - {0.1875, 0.1875, -0.0625, 0.3125, 0.3125, 0.0625}, -- NodeBox20 - {0.3125, 0.0625, -0.0625, 0.4375, 0.1875, 0.0625}, -- NodeBox21 - {0.375, 0, -0.0625, 0.5, 0.125, 0.0625}, -- NodeBox22 - {0.4375, -0.0625, -0.0625, 0.5625, 0.0625, 0.0625}, -- NodeBox23 - {0.5, -0.125, -0.0625, 0.625, 0, 0.0625}, -- NodeBox24 - {0.5625, -0.1875, -0.0625, 0.6875, -0.0625, 0.0625}, -- NodeBox25 - {0.625, -0.25, -0.0625, 0.75, -0.125, 0.0625}, -- NodeBox26 - {0.6875, -0.3125, -0.0625, 0.8125, -0.1875, 0.0625}, -- NodeBox27 - {0.75, -0.375, -0.0625, 0.875, -0.25, 0.0625}, -- NodeBox28 - {0.8125, -0.4375, -0.0625, 0.9375, -0.3125, 0.0625}, -- NodeBox29 - {0.8125, 1.3125, -0.0625, 0.9375, 1.4375, 0.0625}, -- NodeBox3 - {0.75, 1.25, -0.0625, 0.875, 1.375, 0.0625}, -- NodeBox4 - {-0.375, 0.125, -0.0625, -0.25, 0.25, 0.0625}, -- NodeBox5 - {0.6875, 1.1875, -0.0625, 0.8125, 1.3125, 0.0625}, -- NodeBox6 - {0.625, 1.125, -0.0625, 0.75, 1.25, 0.0625}, -- NodeBox7 - {0.5625, 1.0625, -0.0625, 0.6875, 1.1875, 0.0625}, -- NodeBox8 - {0.5, 1, -0.0625, 0.625, 1.125, 0.0625}, -- NodeBox9 - {0.4375, 0.9375, -0.0625, 0.5625, 1.0625, 0.0625}, -- NodeBox10 - {0.375, 0.875, -0.0625, 0.5, 1, 0.0625}, -- NodeBox11 - {0.3125, 0.8125, -0.0625, 0.4375, 0.9375, 0.0625}, -- NodeBox12 - {0.25, 0.75, -0.0625, 0.375, 0.875, 0.0625}, -- NodeBox13 - {0.1875, 0.6875, -0.0625, 0.3125, 0.8125, 0.0625}, -- NodeBox14 - {0.125, 0.625, -0.0625, 0.25, 0.75, 0.0625}, -- NodeBox15 - {0.0625, 0.5625, -0.0625, 0.1875, 0.6875, 0.0625}, -- NodeBox16 - {-0.1875, 0.3125, -0.0625, -0.0625, 0.4375, 0.0625}, -- NodeBox18 - {-0.25, 0.25, -0.0625, -0.125, 0.375, 0.0625}, -- NodeBox19 - {-0.3125, 0.1875, -0.0625, -0.1875, 0.3125, 0.0625}, -- NodeBox20 - {-0.4375, 0.0625, -0.0625, -0.3125, 0.1875, 0.0625}, -- NodeBox21 - {-0.5, 0, -0.0625, -0.375, 0.125, 0.0625}, -- NodeBox22 - {-0.5625, -0.0625, -0.0625, -0.4375, 0.0625, 0.0625}, -- NodeBox23 - {-0.625, -0.125, -0.0625, -0.5, 0, 0.0625}, -- NodeBox24 - {-0.6875, -0.1875, -0.0625, -0.5625, -0.0625, 0.0625}, -- NodeBox25 - {-0.75, -0.25, -0.0625, -0.625, -0.125, 0.0625}, -- NodeBox26 - {-0.8125, -0.3125, -0.0625, -0.6875, -0.1875, 0.0625}, -- NodeBox27 - {-0.875, -0.375, -0.0625, -0.75, -0.25, 0.0625}, -- NodeBox28 - {-0.9375, -0.4375, -0.0625, -0.8125, -0.3125, 0.0625}, -- NodeBox29 + {-0.875, -0.5, -0.0625, 0.875, -0.375, 0.0625}, + {-0.875, 1.375, -0.0625, 0.875, 1.5, 0.0625}, + {-1, 1.375, -0.0625, 1, 1.5, 0}, + {-1, -0.5, -0.0625, 1, -0.375, 0}, + {-0.9375, 1.3125, -0.0625, -0.8125, 1.4375, 0.0625}, + {-0.875, 1.25, -0.0625, -0.75, 1.375, 0.0625}, + {0.25, 0.125, -0.0625, 0.375, 0.25, 0.0625}, + {-0.8125, 1.1875, -0.0625, -0.6875, 1.3125, 0.0625}, + {-0.75, 1.125, -0.0625, -0.625, 1.25, 0.0625}, + {-0.6875, 1.0625, -0.0625, -0.5625, 1.1875, 0.0625}, + {-0.625, 1, -0.0625, -0.5, 1.125, 0.0625}, + {-0.5625, 0.9375, -0.0625, -0.4375, 1.0625, 0.0625}, + {-0.5, 0.875, -0.0625, -0.375, 1, 0.0625}, + {-0.4375, 0.8125, -0.0625, -0.3125, 0.9375, 0.0625}, + {-0.375, 0.75, -0.0625, -0.25, 0.875, 0.0625}, + {-0.3125, 0.6875, -0.0625, -0.1875, 0.8125, 0.0625}, + {-0.25, 0.625, -0.0625, -0.125, 0.75, 0.0625}, + {-0.1875, 0.5625, -0.0625, -0.0625, 0.6875, 0.0625}, + {-0.125, 0.375, -0.0625, 0.125, 0.625, 0.0625}, + {0.0625, 0.3125, -0.0625, 0.1875, 0.4375, 0.0625}, + {0.125, 0.25, -0.0625, 0.25, 0.375, 0.0625}, + {0.1875, 0.1875, -0.0625, 0.3125, 0.3125, 0.0625}, + {0.3125, 0.0625, -0.0625, 0.4375, 0.1875, 0.0625}, + {0.375, 0, -0.0625, 0.5, 0.125, 0.0625}, + {0.4375, -0.0625, -0.0625, 0.5625, 0.0625, 0.0625}, + {0.5, -0.125, -0.0625, 0.625, 0, 0.0625}, + {0.5625, -0.1875, -0.0625, 0.6875, -0.0625, 0.0625}, + {0.625, -0.25, -0.0625, 0.75, -0.125, 0.0625}, + {0.6875, -0.3125, -0.0625, 0.8125, -0.1875, 0.0625}, + {0.75, -0.375, -0.0625, 0.875, -0.25, 0.0625}, + {0.8125, -0.4375, -0.0625, 0.9375, -0.3125, 0.0625}, + {0.8125, 1.3125, -0.0625, 0.9375, 1.4375, 0.0625}, + {0.75, 1.25, -0.0625, 0.875, 1.375, 0.0625}, + {-0.375, 0.125, -0.0625, -0.25, 0.25, 0.0625}, + {0.6875, 1.1875, -0.0625, 0.8125, 1.3125, 0.0625}, + {0.625, 1.125, -0.0625, 0.75, 1.25, 0.0625}, + {0.5625, 1.0625, -0.0625, 0.6875, 1.1875, 0.0625}, + {0.5, 1, -0.0625, 0.625, 1.125, 0.0625}, + {0.4375, 0.9375, -0.0625, 0.5625, 1.0625, 0.0625}, + {0.375, 0.875, -0.0625, 0.5, 1, 0.0625}, + {0.3125, 0.8125, -0.0625, 0.4375, 0.9375, 0.0625}, + {0.25, 0.75, -0.0625, 0.375, 0.875, 0.0625}, + {0.1875, 0.6875, -0.0625, 0.3125, 0.8125, 0.0625}, + {0.125, 0.625, -0.0625, 0.25, 0.75, 0.0625}, + {0.0625, 0.5625, -0.0625, 0.1875, 0.6875, 0.0625}, + {-0.1875, 0.3125, -0.0625, -0.0625, 0.4375, 0.0625}, + {-0.25, 0.25, -0.0625, -0.125, 0.375, 0.0625}, + {-0.3125, 0.1875, -0.0625, -0.1875, 0.3125, 0.0625}, + {-0.4375, 0.0625, -0.0625, -0.3125, 0.1875, 0.0625}, + {-0.5, 0, -0.0625, -0.375, 0.125, 0.0625}, + {-0.5625, -0.0625, -0.0625, -0.4375, 0.0625, 0.0625}, + {-0.625, -0.125, -0.0625, -0.5, 0, 0.0625}, + {-0.6875, -0.1875, -0.0625, -0.5625, -0.0625, 0.0625}, + {-0.75, -0.25, -0.0625, -0.625, -0.125, 0.0625}, + {-0.8125, -0.3125, -0.0625, -0.6875, -0.1875, 0.0625}, + {-0.875, -0.375, -0.0625, -0.75, -0.25, 0.0625}, + {-0.9375, -0.4375, -0.0625, -0.8125, -0.3125, 0.0625}, }, }, selection_box = { @@ -3873,12 +3920,12 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-0.625, 0.25, -0.5, -0.5, 0.375, 0.5}, -- NodeBox1 - {0.5, 0.25, -0.5, 0.625, 0.375, 0.5}, -- NodeBox2 - {-1.125, 0.374, 0.3125, 1.125, 0.501, 0.4375}, -- NodeBox3 - {-1.125, 0.374, 0.0625, 1.125, 0.501, 0.1875}, -- NodeBox4 - {-1.125, 0.374, -0.1875, 1.125, 0.501, -0.0625}, -- NodeBox5 - {-1.125, 0.374, -0.4375, 1.125, 0.501, -0.3125}, -- NodeBox6 + {-0.625, 0.25, -0.5, -0.5, 0.375, 0.5}, + {0.5, 0.25, -0.5, 0.625, 0.375, 0.5}, + {-1.125, 0.374, 0.3125, 1.125, 0.501, 0.4375}, + {-1.125, 0.374, 0.0625, 1.125, 0.501, 0.1875}, + {-1.125, 0.374, -0.1875, 1.125, 0.501, -0.0625}, + {-1.125, 0.374, -0.4375, 1.125, 0.501, -0.3125}, }, }, selection_box = { @@ -3903,30 +3950,30 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-1.5, 1.375, -0.0625, 0.5, 1.499, 0.0625}, -- NodeBox0 - {-1.4375, 1.3125, -0.0625, -1.3125, 1.4375, 0.0625}, -- NodeBox2 - {-1.375, 1.25, -0.0625, -1.25, 1.375, 0.0625}, -- NodeBox3 - {-1.3125, 1.1875, -0.0625, -1.125, 1.3125, 0.0625}, -- NodeBox4 - {-1.1875, 1.125, -0.0625, -1.0625, 1.25, 0.0625}, -- NodeBox5 - {-1.125, 1.0625, -0.0625, -1, 1.1875, 0.0625}, -- NodeBox6 - {-1.0625, 1, -0.0625, -0.875, 1.125, 0.0625}, -- NodeBox7 - {-0.9375, 0.9375, -0.0625, -0.8125, 1.0625, 0.0625}, -- NodeBox8 - {-0.875, 0.875, -0.0625, -0.75, 1, 0.0625}, -- NodeBox9 - {-0.8125, 0.8125, -0.0625, -0.625, 0.9375, 0.0625}, -- NodeBox10 - {-0.6875, 0.75, -0.0625, -0.5625, 0.875, 0.0625}, -- NodeBox11 - {-0.625, 0.6875, -0.0625, -0.5, 0.8125, 0.0625}, -- NodeBox12 - {-0.5625, 0.625, -0.0625, -0.375, 0.75, 0.0625}, -- NodeBox13 - {-0.4375, 0.5625, -0.0625, -0.3125, 0.6875, 0.0625}, -- NodeBox14 - {-0.375, 0.5, -0.0625, -0.25, 0.625, 0.0625}, -- NodeBox15 - {-0.3125, 0.4375, -0.0625, -0.125, 0.5625, 0.0625}, -- NodeBox16 - {-0.1875, 0.375, -0.0625, -0.0625, 0.5, 0.0625}, -- NodeBox17 - {-0.125, 0.3125, -0.0625, 0, 0.4375, 0.0625}, -- NodeBox18 - {-0.0625, 0.25, -0.0625, 0.125, 0.375, 0.0625}, -- NodeBox19 - {0.0625, 0.1875, -0.0625, 0.1875, 0.3125, 0.0625}, -- NodeBox20 - {0.125, 0.125, -0.0625, 0.25, 0.25, 0.0625}, -- NodeBox21 - {0.1875, 0.0625, -0.0625, 0.375, 0.1875, 0.0625}, -- NodeBox22 - {0.3125, 0, -0.0625, 0.4375, 0.125, 0.0625}, -- NodeBox23 - {0.4375, 0, -0.0625, 0.5, 1.5, 0.0625}, -- NodeBox24 + {-1.5, 1.375, -0.0625, 0.5, 1.499, 0.0625}, + {-1.4375, 1.3125, -0.0625, -1.3125, 1.4375, 0.0625}, + {-1.375, 1.25, -0.0625, -1.25, 1.375, 0.0625}, + {-1.3125, 1.1875, -0.0625, -1.125, 1.3125, 0.0625}, + {-1.1875, 1.125, -0.0625, -1.0625, 1.25, 0.0625}, + {-1.125, 1.0625, -0.0625, -1, 1.1875, 0.0625}, + {-1.0625, 1, -0.0625, -0.875, 1.125, 0.0625}, + {-0.9375, 0.9375, -0.0625, -0.8125, 1.0625, 0.0625}, + {-0.875, 0.875, -0.0625, -0.75, 1, 0.0625}, + {-0.8125, 0.8125, -0.0625, -0.625, 0.9375, 0.0625}, + {-0.6875, 0.75, -0.0625, -0.5625, 0.875, 0.0625}, + {-0.625, 0.6875, -0.0625, -0.5, 0.8125, 0.0625}, + {-0.5625, 0.625, -0.0625, -0.375, 0.75, 0.0625}, + {-0.4375, 0.5625, -0.0625, -0.3125, 0.6875, 0.0625}, + {-0.375, 0.5, -0.0625, -0.25, 0.625, 0.0625}, + {-0.3125, 0.4375, -0.0625, -0.125, 0.5625, 0.0625}, + {-0.1875, 0.375, -0.0625, -0.0625, 0.5, 0.0625}, + {-0.125, 0.3125, -0.0625, 0, 0.4375, 0.0625}, + {-0.0625, 0.25, -0.0625, 0.125, 0.375, 0.0625}, + {0.0625, 0.1875, -0.0625, 0.1875, 0.3125, 0.0625}, + {0.125, 0.125, -0.0625, 0.25, 0.25, 0.0625}, + {0.1875, 0.0625, -0.0625, 0.375, 0.1875, 0.0625}, + {0.3125, 0, -0.0625, 0.4375, 0.125, 0.0625}, + {0.4375, 0, -0.0625, 0.5, 1.5, 0.0625}, }, }, selection_box = { @@ -3951,38 +3998,38 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {0.4375, -0.5, -0.0625, 0.5, 1.5, 0.0625}, -- NodeBox1 - {0.25, -0.5, -0.0625, 0.4375, -0.375, 0.0625}, -- NodeBox2 - {0.125, -0.4375, -0.0625, 0.3125, -0.3125, 0.0625}, -- NodeBox3 - {0, -0.375, -0.0625, 0.1875, -0.25, 0.0625}, -- NodeBox4 - {-0.125, -0.3125, -0.0625, 0.0625, -0.1875, 0.0625}, -- NodeBox5 - {-0.25, -0.25, -0.0625, -0.0625, -0.125, 0.0625}, -- NodeBox6 - {-0.375, -0.1875, -0.0625, -0.1875, -0.0625, 0.0625}, -- NodeBox7 - {-0.5, -0.125, -0.0625, -0.3125, 0, 0.0625}, -- NodeBox8 - {-0.625, -0.0625, -0.0625, -0.4375, 0.0625, 0.0625}, -- NodeBox9 - {-0.75, 0, -0.0625, -0.5625, 0.125, 0.0625}, -- NodeBox10 - {-0.875, 0.0625, -0.0625, -0.6875, 0.1875, 0.0625}, -- NodeBox11 - {-1, 0.125, -0.0625, -0.8125, 0.25, 0.0625}, -- NodeBox12 - {-1.125, 0.1875, -0.0625, -0.9375, 0.3125, 0.0625}, -- NodeBox13 - {-1.25, 0.25, -0.0625, -1.0625, 0.375, 0.0625}, -- NodeBox14 - {-1.375, 0.3125, -0.0625, -1.1875, 0.4375, 0.0625}, -- NodeBox15 - {-1.5, 0.375, -0.0625, -1.3125, 0.5, 0.0625}, -- NodeBox16 - {-1.625, 0.4375, -0.0625, -1.4375, 0.5625, 0.0625}, -- NodeBox17 - {-1.75, 0.5, -0.0625, -1.5625, 0.625, 0.0625}, -- NodeBox18 - {-1.875, 0.5625, -0.0625, -1.6875, 0.6875, 0.0625}, -- NodeBox19 - {-2, 0.625, -0.0625, -1.8125, 0.75, 0.0625}, -- NodeBox20 - {-2.125, 0.6875, -0.0625, -1.9375, 0.8125, 0.0625}, -- NodeBox21 - {-2.25, 0.75, -0.0625, -2.0625, 0.875, 0.0625}, -- NodeBox22 - {-2.375, 0.8125, -0.0625, -2.1875, 0.9375, 0.0625}, -- NodeBox23 - {-2.5, 0.875, -0.0625, -2.3125, 1, 0.0625}, -- NodeBox24 - {-2.625, 0.9375, -0.0625, -2.4375, 1.0625, 0.0625}, -- NodeBox25 - {-2.75, 1, -0.0625, -2.5625, 1.125, 0.0625}, -- NodeBox26 - {-2.875, 1.0625, -0.0625, -2.6875, 1.1875, 0.0625}, -- NodeBox27 - {-3, 1.125, -0.0625, -2.8125, 1.25, 0.0625}, -- NodeBox28 - {-3.125, 1.1875, -0.0625, -2.9375, 1.3125, 0.0625}, -- NodeBox29 - {-3.25, 1.25, -0.0625, -3.0625, 1.375, 0.0625}, -- NodeBox30 - {-3.375, 1.3125, -0.0625, -3.1875, 1.4375, 0.0625}, -- NodeBox31 - {-3.5, 1.375, -0.0625, -3.3125, 1.5, 0.0625}, -- NodeBox32 + {0.4375, -0.5, -0.0625, 0.5, 1.5, 0.0625}, + {0.25, -0.5, -0.0625, 0.4375, -0.375, 0.0625}, + {0.125, -0.4375, -0.0625, 0.3125, -0.3125, 0.0625}, + {0, -0.375, -0.0625, 0.1875, -0.25, 0.0625}, + {-0.125, -0.3125, -0.0625, 0.0625, -0.1875, 0.0625}, + {-0.25, -0.25, -0.0625, -0.0625, -0.125, 0.0625}, + {-0.375, -0.1875, -0.0625, -0.1875, -0.0625, 0.0625}, + {-0.5, -0.125, -0.0625, -0.3125, 0, 0.0625}, + {-0.625, -0.0625, -0.0625, -0.4375, 0.0625, 0.0625}, + {-0.75, 0, -0.0625, -0.5625, 0.125, 0.0625}, + {-0.875, 0.0625, -0.0625, -0.6875, 0.1875, 0.0625}, + {-1, 0.125, -0.0625, -0.8125, 0.25, 0.0625}, + {-1.125, 0.1875, -0.0625, -0.9375, 0.3125, 0.0625}, + {-1.25, 0.25, -0.0625, -1.0625, 0.375, 0.0625}, + {-1.375, 0.3125, -0.0625, -1.1875, 0.4375, 0.0625}, + {-1.5, 0.375, -0.0625, -1.3125, 0.5, 0.0625}, + {-1.625, 0.4375, -0.0625, -1.4375, 0.5625, 0.0625}, + {-1.75, 0.5, -0.0625, -1.5625, 0.625, 0.0625}, + {-1.875, 0.5625, -0.0625, -1.6875, 0.6875, 0.0625}, + {-2, 0.625, -0.0625, -1.8125, 0.75, 0.0625}, + {-2.125, 0.6875, -0.0625, -1.9375, 0.8125, 0.0625}, + {-2.25, 0.75, -0.0625, -2.0625, 0.875, 0.0625}, + {-2.375, 0.8125, -0.0625, -2.1875, 0.9375, 0.0625}, + {-2.5, 0.875, -0.0625, -2.3125, 1, 0.0625}, + {-2.625, 0.9375, -0.0625, -2.4375, 1.0625, 0.0625}, + {-2.75, 1, -0.0625, -2.5625, 1.125, 0.0625}, + {-2.875, 1.0625, -0.0625, -2.6875, 1.1875, 0.0625}, + {-3, 1.125, -0.0625, -2.8125, 1.25, 0.0625}, + {-3.125, 1.1875, -0.0625, -2.9375, 1.3125, 0.0625}, + {-3.25, 1.25, -0.0625, -3.0625, 1.375, 0.0625}, + {-3.375, 1.3125, -0.0625, -3.1875, 1.4375, 0.0625}, + {-3.5, 1.375, -0.0625, -3.3125, 1.5, 0.0625}, }, }, selection_box = { @@ -4007,23 +4054,23 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.0625, -0.25, -0.25, 0.0625}, -- NodeBox1 - {-0.4375, -0.4375, -0.0625, -0.1875, -0.1875, 0.0625}, -- NodeBox2 - {-0.375, -0.375, -0.0625, -0.125, -0.125, 0.0625}, -- NodeBox3 - {-0.3125, -0.3125, -0.0625, -0.0625, -0.0625, 0.0625}, -- NodeBox4 - {0.0625, 0.0625, -0.0625, 0.3125, 0.3125, 0.0625}, -- NodeBox10 - {0.125, 0.125, -0.0625, 0.375, 0.375, 0.0625}, -- NodeBox11 - {0.1875, 0.1875, -0.0625, 0.4375, 0.4375, 0.0625}, -- NodeBox12 - {0.25, 0.25, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox13 - {0.25, -0.5, -0.0625, 0.5, -0.25, 0.0625}, -- NodeBox14 - {0.1875, -0.4375, -0.0625, 0.4375, -0.1875, 0.0625}, -- NodeBox15 - {-0.25, -0.25, -0.0625, 0.25, 0.25, 0.0625}, -- NodeBox16 - {0.125, -0.375, -0.0625, 0.375, -0.125, 0.0625}, -- NodeBox17 - {0.0625, -0.3125, -0.0625, 0.3125, -0.0625, 0.0625}, -- NodeBox18 - {-0.5, 0.25, -0.0625, -0.25, 0.5, 0.0625}, -- NodeBox19 - {-0.4375, 0.1875, -0.0625, -0.1875, 0.4375, 0.0625}, -- NodeBox20 - {-0.375, 0.125, -0.0625, -0.125, 0.375, 0.0625}, -- NodeBox21 - {-0.3125, 0.0625, -0.0625, -0.0625, 0.3125, 0.0625}, -- NodeBox22 + {-0.5, -0.5, -0.0625, -0.25, -0.25, 0.0625}, + {-0.4375, -0.4375, -0.0625, -0.1875, -0.1875, 0.0625}, + {-0.375, -0.375, -0.0625, -0.125, -0.125, 0.0625}, + {-0.3125, -0.3125, -0.0625, -0.0625, -0.0625, 0.0625}, + {0.0625, 0.0625, -0.0625, 0.3125, 0.3125, 0.0625}, + {0.125, 0.125, -0.0625, 0.375, 0.375, 0.0625}, + {0.1875, 0.1875, -0.0625, 0.4375, 0.4375, 0.0625}, + {0.25, 0.25, -0.0625, 0.5, 0.5, 0.0625}, + {0.25, -0.5, -0.0625, 0.5, -0.25, 0.0625}, + {0.1875, -0.4375, -0.0625, 0.4375, -0.1875, 0.0625}, + {-0.25, -0.25, -0.0625, 0.25, 0.25, 0.0625}, + {0.125, -0.375, -0.0625, 0.375, -0.125, 0.0625}, + {0.0625, -0.3125, -0.0625, 0.3125, -0.0625, 0.0625}, + {-0.5, 0.25, -0.0625, -0.25, 0.5, 0.0625}, + {-0.4375, 0.1875, -0.0625, -0.1875, 0.4375, 0.0625}, + {-0.375, 0.125, -0.0625, -0.125, 0.375, 0.0625}, + {-0.3125, 0.0625, -0.0625, -0.0625, 0.3125, 0.0625}, }, }, selection_box = { @@ -4048,38 +4095,38 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then node_box = { type = "fixed", fixed = { - {-1, 0.375, 0.25, -0.75, 0.501, 0.5}, -- NodeBox1 - {-0.25, 0.375, 0.25, 0.25, 0.501, 0.5}, -- NodeBox2 - {-0.25, 0.375, -0.5, 0.25, 0.501, -0.25}, -- NodeBox5 - {-1, 0.375, -0.5, -0.75, 0.501, -0.25}, -- NodeBox6 - {-0.9375, 0.375, -0.4375, -0.6875, 0.501, -0.1875}, -- NodeBox7 - {-0.875, 0.375, -0.375, -0.625, 0.501, -0.125}, -- NodeBox8 - {-0.8125, 0.375, -0.3125, -0.5625, 0.501, -0.0625}, -- NodeBox9 - {-0.3125, 0.375, -0.4375, -0.0625, 0.501, -0.1875}, -- NodeBox10 - {-0.375, 0.375, -0.375, -0.125, 0.501, -0.125}, -- NodeBox11 - {-0.4375, 0.375, -0.3125, -0.1875, 0.501, -0.0625}, -- NodeBox12 - {-0.75, 0.375, -0.25, -0.25, 0.501, 0.25}, -- NodeBox13 - {-0.9375, 0.375, 0.1875, -0.6875, 0.501, 0.4375}, -- NodeBox15 - {-0.875, 0.375, 0.125, -0.625, 0.501, 0.375}, -- NodeBox16 - {-0.8125, 0.375, 0.0625, -0.5625, 0.501, 0.3125}, -- NodeBox17 - {-0.4375, 0.375, 0.0625, -0.1875, 0.501, 0.3125}, -- NodeBox18 - {-0.375, 0.375, 0.125, -0.125, 0.501, 0.375}, -- NodeBox19 - {-0.3125, 0.375, 0.1875, -0.0625, 0.501, 0.4375}, -- NodeBox20 - {0.75, 0.375, -0.5, 1, 0.501, -0.25}, -- NodeBox1 - {0.75, 0.375, 0.25, 1, 0.501, 0.5}, -- NodeBox6 - {0.6875, 0.375, 0.1875, 0.9375, 0.501, 0.4375}, -- NodeBox7 - {0.625, 0.375, 0.125, 0.875, 0.501, 0.375}, -- NodeBox8 - {0.5625, 0.375, 0.0625, 0.8125, 0.501, 0.3125}, -- NodeBox9 - {0.0625, 0.375, 0.1875, 0.3125, 0.501, 0.4375}, -- NodeBox10 - {0.125, 0.375, 0.125, 0.375, 0.501, 0.375}, -- NodeBox11 - {0.1875, 0.375, 0.0625, 0.4375, 0.501, 0.3125}, -- NodeBox12 - {0.25, 0.375, -0.25, 0.75, 0.501, 0.25}, -- NodeBox13 - {0.6875, 0.375, -0.4375, 0.9375, 0.501, -0.1875}, -- NodeBox15 - {0.625, 0.375, -0.375, 0.875, 0.501, -0.125}, -- NodeBox16 - {0.5625, 0.375, -0.3125, 0.8125, 0.501, -0.0625}, -- NodeBox17 - {0.1875, 0.375, -0.3125, 0.4375, 0.501, -0.0625}, -- NodeBox18 - {0.125, 0.375, -0.375, 0.375, 0.501, -0.125}, -- NodeBox19 - {0.0625, 0.375, -0.4375, 0.3125, 0.501, -0.1875}, -- NodeBox20 + {-1, 0.375, 0.25, -0.75, 0.501, 0.5}, + {-0.25, 0.375, 0.25, 0.25, 0.501, 0.5}, + {-0.25, 0.375, -0.5, 0.25, 0.501, -0.25}, + {-1, 0.375, -0.5, -0.75, 0.501, -0.25}, + {-0.9375, 0.375, -0.4375, -0.6875, 0.501, -0.1875}, + {-0.875, 0.375, -0.375, -0.625, 0.501, -0.125}, + {-0.8125, 0.375, -0.3125, -0.5625, 0.501, -0.0625}, + {-0.3125, 0.375, -0.4375, -0.0625, 0.501, -0.1875}, + {-0.375, 0.375, -0.375, -0.125, 0.501, -0.125}, + {-0.4375, 0.375, -0.3125, -0.1875, 0.501, -0.0625}, + {-0.75, 0.375, -0.25, -0.25, 0.501, 0.25}, + {-0.9375, 0.375, 0.1875, -0.6875, 0.501, 0.4375}, + {-0.875, 0.375, 0.125, -0.625, 0.501, 0.375}, + {-0.8125, 0.375, 0.0625, -0.5625, 0.501, 0.3125}, + {-0.4375, 0.375, 0.0625, -0.1875, 0.501, 0.3125}, + {-0.375, 0.375, 0.125, -0.125, 0.501, 0.375}, + {-0.3125, 0.375, 0.1875, -0.0625, 0.501, 0.4375}, + {0.75, 0.375, -0.5, 1, 0.501, -0.25}, + {0.75, 0.375, 0.25, 1, 0.501, 0.5}, + {0.6875, 0.375, 0.1875, 0.9375, 0.501, 0.4375}, + {0.625, 0.375, 0.125, 0.875, 0.501, 0.375}, + {0.5625, 0.375, 0.0625, 0.8125, 0.501, 0.3125}, + {0.0625, 0.375, 0.1875, 0.3125, 0.501, 0.4375}, + {0.125, 0.375, 0.125, 0.375, 0.501, 0.375}, + {0.1875, 0.375, 0.0625, 0.4375, 0.501, 0.3125}, + {0.25, 0.375, -0.25, 0.75, 0.501, 0.25}, + {0.6875, 0.375, -0.4375, 0.9375, 0.501, -0.1875}, + {0.625, 0.375, -0.375, 0.875, 0.501, -0.125}, + {0.5625, 0.375, -0.3125, 0.8125, 0.501, -0.0625}, + {0.1875, 0.375, -0.3125, 0.4375, 0.501, -0.0625}, + {0.125, 0.375, -0.375, 0.375, 0.501, -0.125}, + {0.0625, 0.375, -0.4375, 0.3125, 0.501, -0.1875}, }, }, selection_box = { @@ -4093,7 +4140,7 @@ if not minetest.settings:get_bool("bridger_disable_trestles") then }) end -if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then +if minetest.settings:get_bool("bridger_enable_wooden_bridges", true) then minetest.register_node("bridger:small_beam", { description = "Small Wooden Beam Bridge", drawtype = "nodebox", @@ -4104,13 +4151,13 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 0.5}, -- NodeBox1 - {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox3 - {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, -- NodeBox4 - {0.40625, 0.375, -0.5, 0.5, 0.4375, 0.5}, -- NodeBox5 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox6 - {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, -- NodeBox7 + {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 0.5}, + {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, + {0.40625, 0.375, -0.5, 0.5, 0.4375, 0.5}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, }, }, selection_box = { @@ -4133,9 +4180,9 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 0.5}, -- NodeBox1 - {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, -- NodeBox4 - {0.40625, 0.375, -0.5, 0.5, 0.4375, 0.5}, -- NodeBox5 + {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 0.5}, + {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, + {0.40625, 0.375, -0.5, 0.5, 0.4375, 0.5}, }, }, selection_box = { @@ -4158,14 +4205,43 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 0.4375}, -- NodeBox1 - {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox3 - {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, -- NodeBox4 - {0.40625, 0.375, -0.5, 0.5, 0.4375, 0.5}, -- NodeBox5 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox6 - {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, -- NodeBox7 - {-0.5, 0.375, 0.40625, 0.5, 0.4375, 0.5}, -- NodeBox8 + {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 0.4375}, + {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, + {0.40625, 0.375, -0.5, 0.5, 0.4375, 0.5}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, + {-0.5, 0.375, 0.40625, 0.5, 0.4375, 0.5}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + }, + groups = {choppy=3}, + sounds = default.node_sound_wood_defaults(), + }) + + minetest.register_node("bridger:small_beam_corner", { + description = "Small Wooden Beam Bridge Corner", + drawtype = "nodebox", + tiles = {"default_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.5, 0.5, -0.4375, 0.4375}, + {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {-0.5, 0.375, -0.5, -0.40625, 0.4375, 0.5}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, + {-0.5, 0.375, 0.40625, 0.5, 0.4375, 0.5}, }, }, selection_box = { @@ -4188,12 +4264,12 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.4375}, -- NodeBox1 - {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox3 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox6 - {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, -- NodeBox7 - {-0.5, 0.375, 0.40625, 0.5, 0.4375, 0.5}, -- NodeBox8 + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.4375}, + {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, + {-0.5, 0.375, 0.40625, 0.5, 0.4375, 0.5}, }, }, selection_box = { @@ -4216,11 +4292,11 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- NodeBox1 - {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, -- NodeBox2 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox3 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox6 - {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, -- NodeBox7 + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, + {-0.5, -0.5, 0.40625, -0.40625, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, -0.5, 0.40625, 0.5, 0.5, 0.5}, }, }, selection_box = { @@ -4243,74 +4319,74 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.4375, -0.0625, -0.5, 0.4375, 0, 0}, -- NodeBox1 - {-0.4375, 0.4375, 0, 0.4375, 0.5, 0.5}, -- NodeBox2 - {0.40625, 0.4375, 0.40625, 0.5, 1.5, 0.5}, -- NodeBox3 - {0.40625, -0.5, -0.5, 0.5, 0.625, -0.40625}, -- NodeBox4 - {-0.5, -0.5, -0.5, -0.40625, 0.625, -0.40625}, -- NodeBox5 - {-0.5, 0.4375, 0.40625, -0.40625, 1.5, 0.5}, -- NodeBox6 - {-0.5, 1.3125, 0.375, -0.40625, 1.375, 0.5}, -- NodeBox7 - {-0.5, 1.25, 0.3125, -0.40625, 1.3125, 0.4375}, -- NodeBox8 - {-0.5, 1.1875, 0.25, -0.40625, 1.25, 0.375}, -- NodeBox9 - {-0.5, 1.125, 0.1875, -0.40625, 1.1875, 0.3125}, -- NodeBox10 - {-0.5, 1.0625, 0.125, -0.40625, 1.125, 0.25}, -- NodeBox11 - {-0.5, 1, 0.0625, -0.40625, 1.0625, 0.1875}, -- NodeBox12 - {-0.5, 0.9375, 0, -0.40625, 1, 0.125}, -- NodeBox13 - {-0.5, 0.875, -0.0625, -0.40625, 0.9375, 0.0625}, -- NodeBox14 - {-0.5, 0.8125, -0.125, -0.40625, 0.875, 0}, -- NodeBox15 - {-0.5, 0.75, -0.1875, -0.40625, 0.8125, -0.0625}, -- NodeBox16 - {-0.5, 0.6875, -0.25, -0.40625, 0.75, -0.125}, -- NodeBox17 - {-0.5, 0.625, -0.3125, -0.40625, 0.6875, -0.1875}, -- NodeBox18 - {-0.5, 0.5625, -0.375, -0.40625, 0.625, -0.25}, -- NodeBox19 - {-0.5, 0.5, -0.4375, -0.40625, 0.5625, -0.3125}, -- NodeBox20 - {-0.5, 0.4375, -0.5, -0.40625, 0.5, -0.375}, -- NodeBox21 - {0.40625, 0.4375, -0.5, 0.5, 0.5, -0.375}, -- NodeBox22 - {0.40625, 0.5, -0.4375, 0.5, 0.5625, -0.3125}, -- NodeBox23 - {0.40625, 0.5625, -0.375, 0.5, 0.625, -0.25}, -- NodeBox24 - {0.40625, 0.625, -0.3125, 0.5, 0.6875, -0.1875}, -- NodeBox25 - {0.40625, 0.6875, -0.25, 0.5, 0.75, -0.125}, -- NodeBox26 - {0.40625, 0.75, -0.1875, 0.5, 0.8125, -0.0625}, -- NodeBox27 - {0.40625, 0.8125, -0.125, 0.5, 0.875, 0}, -- NodeBox28 - {0.40625, 0.875, -0.0625, 0.5, 0.9375, 0.0625}, -- NodeBox29 - {0.40625, 0.9375, 0, 0.5, 1, 0.125}, -- NodeBox30 - {0.40625, 1, 0.0625, 0.5, 1.0625, 0.1875}, -- NodeBox31 - {0.40625, 1.0625, 0.125, 0.5, 1.125, 0.25}, -- NodeBox32 - {0.40625, 1.125, 0.1875, 0.5, 1.1875, 0.3125}, -- NodeBox33 - {0.40625, 1.1875, 0.25, 0.5, 1.25, 0.375}, -- NodeBox34 - {0.40625, 1.25, 0.3125, 0.5, 1.3125, 0.4375}, -- NodeBox35 - {0.40625, 1.3125, 0.375, 0.5, 1.375, 0.5}, -- NodeBox36 - {0.40625, -0.5, -0.5, 0.5, -0.4375, -0.375}, -- NodeBox38 - {0.40625, -0.4375, -0.4375, 0.5, -0.375, -0.3125}, -- NodeBox39 - {0.40625, -0.375, -0.375, 0.5, -0.3125, -0.25}, -- NodeBox40 - {0.40625, -0.3125, -0.3125, 0.5, -0.25, -0.1875}, -- NodeBox41 - {0.40625, -0.25, -0.25, 0.5, -0.1875, -0.125}, -- NodeBox42 - {0.40625, -0.1875, -0.1875, 0.5, -0.125, -0.0625}, -- NodeBox43 - {0.40625, -0.125, -0.125, 0.5, -0.0625, 0}, -- NodeBox44 - {0.40625, -0.0625, -0.0625, 0.5, 0, 0.0625}, -- NodeBox45 - {0.40625, 0, 0, 0.5, 0.0625, 0.125}, -- NodeBox46 - {0.40625, 0.0625, 0.0625, 0.5, 0.125, 0.1875}, -- NodeBox47 - {0.40625, 0.125, 0.125, 0.5, 0.1875, 0.25}, -- NodeBox48 - {0.40625, 0.1875, 0.1875, 0.5, 0.25, 0.3125}, -- NodeBox49 - {0.40625, 0.25, 0.25, 0.5, 0.3125, 0.375}, -- NodeBox50 - {0.40625, 0.3125, 0.3125, 0.5, 0.375, 0.4375}, -- NodeBox51 - {0.40625, 0.375, 0.375, 0.5, 0.4375, 0.5}, -- NodeBox52 - {-0.5, -0.5, -0.5, -0.40625, -0.4375, -0.375}, -- NodeBox53 - {-0.5, -0.4375, -0.4375, -0.40625, -0.375, -0.3125}, -- NodeBox54 - {-0.5, -0.375, -0.375, -0.40625, -0.3125, -0.25}, -- NodeBox55 - {-0.5, -0.3125, -0.3125, -0.40625, -0.25, -0.1875}, -- NodeBox56 - {-0.5, -0.25, -0.25, -0.40625, -0.1875, -0.125}, -- NodeBox57 - {-0.5, -0.1875, -0.1875, -0.40625, -0.125, -0.0625}, -- NodeBox58 - {-0.5, -0.125, -0.125, -0.40625, -0.0625, 0}, -- NodeBox59 - {-0.5, -0.0625, -0.0625, -0.40625, 0, 0.0625}, -- NodeBox60 - {-0.5, 0, 0, -0.40625, 0.0625, 0.125}, -- NodeBox61 - {-0.5, 0.0625, 0.0625, -0.40625, 0.125, 0.1875}, -- NodeBox62 - {-0.5, 0.125, 0.125, -0.40625, 0.1875, 0.25}, -- NodeBox63 - {-0.5, 0.1875, 0.1875, -0.40625, 0.25, 0.3125}, -- NodeBox64 - {-0.5, 0.25, 0.25, -0.40625, 0.3125, 0.375}, -- NodeBox65 - {-0.5, 0.3125, 0.3125, -0.40625, 0.375, 0.4375}, -- NodeBox66 - {-0.5, 0.375, 0.375, -0.40625, 0.4375, 0.5}, -- NodeBox67 - {-0.5, -0.5625, -0.5, -0.40625, -0.5, -0.4375}, -- NodeBox68 - {0.40625, -0.5625, -0.5, 0.5, -0.5, -0.4375}, -- NodeBox69 + {-0.4375, -0.0625, -0.5, 0.4375, 0, 0}, + {-0.4375, 0.4375, 0, 0.4375, 0.5, 0.5}, + {0.40625, 0.4375, 0.40625, 0.5, 1.5, 0.5}, + {0.40625, -0.5, -0.5, 0.5, 0.625, -0.40625}, + {-0.5, -0.5, -0.5, -0.40625, 0.625, -0.40625}, + {-0.5, 0.4375, 0.40625, -0.40625, 1.5, 0.5}, + {-0.5, 1.3125, 0.375, -0.40625, 1.375, 0.5}, + {-0.5, 1.25, 0.3125, -0.40625, 1.3125, 0.4375}, + {-0.5, 1.1875, 0.25, -0.40625, 1.25, 0.375}, + {-0.5, 1.125, 0.1875, -0.40625, 1.1875, 0.3125}, + {-0.5, 1.0625, 0.125, -0.40625, 1.125, 0.25}, + {-0.5, 1, 0.0625, -0.40625, 1.0625, 0.1875}, + {-0.5, 0.9375, 0, -0.40625, 1, 0.125}, + {-0.5, 0.875, -0.0625, -0.40625, 0.9375, 0.0625}, + {-0.5, 0.8125, -0.125, -0.40625, 0.875, 0}, + {-0.5, 0.75, -0.1875, -0.40625, 0.8125, -0.0625}, + {-0.5, 0.6875, -0.25, -0.40625, 0.75, -0.125}, + {-0.5, 0.625, -0.3125, -0.40625, 0.6875, -0.1875}, + {-0.5, 0.5625, -0.375, -0.40625, 0.625, -0.25}, + {-0.5, 0.5, -0.4375, -0.40625, 0.5625, -0.3125}, + {-0.5, 0.4375, -0.5, -0.40625, 0.5, -0.375}, + {0.40625, 0.4375, -0.5, 0.5, 0.5, -0.375}, + {0.40625, 0.5, -0.4375, 0.5, 0.5625, -0.3125}, + {0.40625, 0.5625, -0.375, 0.5, 0.625, -0.25}, + {0.40625, 0.625, -0.3125, 0.5, 0.6875, -0.1875}, + {0.40625, 0.6875, -0.25, 0.5, 0.75, -0.125}, + {0.40625, 0.75, -0.1875, 0.5, 0.8125, -0.0625}, + {0.40625, 0.8125, -0.125, 0.5, 0.875, 0}, + {0.40625, 0.875, -0.0625, 0.5, 0.9375, 0.0625}, + {0.40625, 0.9375, 0, 0.5, 1, 0.125}, + {0.40625, 1, 0.0625, 0.5, 1.0625, 0.1875}, + {0.40625, 1.0625, 0.125, 0.5, 1.125, 0.25}, + {0.40625, 1.125, 0.1875, 0.5, 1.1875, 0.3125}, + {0.40625, 1.1875, 0.25, 0.5, 1.25, 0.375}, + {0.40625, 1.25, 0.3125, 0.5, 1.3125, 0.4375}, + {0.40625, 1.3125, 0.375, 0.5, 1.375, 0.5}, + {0.40625, -0.5, -0.5, 0.5, -0.4375, -0.375}, + {0.40625, -0.4375, -0.4375, 0.5, -0.375, -0.3125}, + {0.40625, -0.375, -0.375, 0.5, -0.3125, -0.25}, + {0.40625, -0.3125, -0.3125, 0.5, -0.25, -0.1875}, + {0.40625, -0.25, -0.25, 0.5, -0.1875, -0.125}, + {0.40625, -0.1875, -0.1875, 0.5, -0.125, -0.0625}, + {0.40625, -0.125, -0.125, 0.5, -0.0625, 0}, + {0.40625, -0.0625, -0.0625, 0.5, 0, 0.0625}, + {0.40625, 0, 0, 0.5, 0.0625, 0.125}, + {0.40625, 0.0625, 0.0625, 0.5, 0.125, 0.1875}, + {0.40625, 0.125, 0.125, 0.5, 0.1875, 0.25}, + {0.40625, 0.1875, 0.1875, 0.5, 0.25, 0.3125}, + {0.40625, 0.25, 0.25, 0.5, 0.3125, 0.375}, + {0.40625, 0.3125, 0.3125, 0.5, 0.375, 0.4375}, + {0.40625, 0.375, 0.375, 0.5, 0.4375, 0.5}, + {-0.5, -0.5, -0.5, -0.40625, -0.4375, -0.375}, + {-0.5, -0.4375, -0.4375, -0.40625, -0.375, -0.3125}, + {-0.5, -0.375, -0.375, -0.40625, -0.3125, -0.25}, + {-0.5, -0.3125, -0.3125, -0.40625, -0.25, -0.1875}, + {-0.5, -0.25, -0.25, -0.40625, -0.1875, -0.125}, + {-0.5, -0.1875, -0.1875, -0.40625, -0.125, -0.0625}, + {-0.5, -0.125, -0.125, -0.40625, -0.0625, 0}, + {-0.5, -0.0625, -0.0625, -0.40625, 0, 0.0625}, + {-0.5, 0, 0, -0.40625, 0.0625, 0.125}, + {-0.5, 0.0625, 0.0625, -0.40625, 0.125, 0.1875}, + {-0.5, 0.125, 0.125, -0.40625, 0.1875, 0.25}, + {-0.5, 0.1875, 0.1875, -0.40625, 0.25, 0.3125}, + {-0.5, 0.25, 0.25, -0.40625, 0.3125, 0.375}, + {-0.5, 0.3125, 0.3125, -0.40625, 0.375, 0.4375}, + {-0.5, 0.375, 0.375, -0.40625, 0.4375, 0.5}, + {-0.5, -0.5625, -0.5, -0.40625, -0.5, -0.4375}, + {0.40625, -0.5625, -0.5, 0.5, -0.5, -0.4375}, }, }, selection_box = { @@ -4333,13 +4409,13 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.4375, -0.5, -1.5, 0.4375, -0.4375, 1.5}, -- NodeBox1 - {0.40625, -0.5, -0.6875, 0.5, 0.5, -0.59375}, -- NodeBox2 - {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, -- NodeBox3 - {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, -- NodeBox4 - {-0.5, -0.5, -0.6875, -0.40625, 0.5, -0.59375}, -- NodeBox5 - {-0.5, 0.375, -1.5, -0.40625, 0.4375, 1.5}, -- NodeBox6 - {0.40625, 0.375, -1.5, 0.5, 0.4375, 1.5}, -- NodeBox7 + {-0.4375, -0.5, -1.5, 0.4375, -0.4375, 1.5}, + {0.40625, -0.5, -0.6875, 0.5, 0.5, -0.59375}, + {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, + {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, + {-0.5, -0.5, -0.6875, -0.40625, 0.5, -0.59375}, + {-0.5, 0.375, -1.5, -0.40625, 0.4375, 1.5}, + {0.40625, 0.375, -1.5, 0.5, 0.4375, 1.5}, }, }, selection_box = { @@ -4362,55 +4438,55 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then node_box = { type = "fixed", fixed = { - {-0.4375, -0.5, -1.5, 0.4375, -0.4375, -1.375}, -- NodeBox1 - {0.40625, -0.125, -0.6875, 0.5, 0.875, -0.59375}, -- NodeBox2 - {0.40625, -0.125, 0.59375, 0.5, 0.875, 0.6875}, -- NodeBox3 - {-0.5, -0.125, 0.59375, -0.40625, 0.875, 0.6875}, -- NodeBox4 - {-0.5, -0.125, -0.6875, -0.40625, 0.875, -0.59375}, -- NodeBox5 - {-0.5, 0.375, -1.5, -0.40625, 0.4375, -1.375}, -- NodeBox6 - {0.40625, 0.375, -1.5, 0.5, 0.4375, -1.375}, -- NodeBox7 - {-0.4375, -0.4375, -1.4375, 0.4375, -0.375, -1.3125}, -- NodeBox8 - {-0.4375, -0.375, -1.375, 0.4375, -0.3125, -1.25}, -- NodeBox9 - {-0.4375, -0.3125, -1.3125, 0.4375, -0.25, -1.125}, -- NodeBox10 - {-0.4375, -0.25, -1.1875, 0.4375, -0.1875, -1}, -- NodeBox11 - {-0.4375, -0.1875, -1.0625, 0.4375, -0.125, -0.75}, -- NodeBox12 - {-0.4375, -0.125, -0.8125, 0.4375, -0.0625, -0.4375}, -- NodeBox13 - {-0.4375, -0.125, 0.4375, 0.4375, -0.0625, 0.8125}, -- NodeBox14 - {-0.4375, -0.0625, -0.5, 0.4375, 0, 0.5}, -- NodeBox15 - {-0.4375, -0.1875, 0.75, 0.4375, -0.125, 1.0625}, -- NodeBox16 - {-0.4375, -0.25, 1, 0.4375, -0.1875, 1.1875}, -- NodeBox17 - {-0.4375, -0.3125, 1.125, 0.4375, -0.25, 1.3125}, -- NodeBox18 - {-0.4375, -0.375, 1.25, 0.4375, -0.3125, 1.375}, -- NodeBox19 - {-0.4375, -0.4375, 1.3125, 0.4375, -0.375, 1.4375}, -- NodeBox20 - {-0.4375, -0.5, 1.375, 0.4375, -0.4375, 1.5}, -- NodeBox21 - {-0.5, 0.4375, -1.4375, -0.40625, 0.5, -1.3125}, -- NodeBox22 - {-0.5, 0.5, -1.375, -0.40625, 0.5625, -1.25}, -- NodeBox23 - {-0.5, 0.5625, -1.3125, -0.40625, 0.625, -1.125}, -- NodeBox24 - {-0.5, 0.625, -1.1875, -0.40625, 0.6875, -1}, -- NodeBox25 - {-0.5, 0.6875, -1.0625, -0.40625, 0.75, -0.75}, -- NodeBox26 - {-0.5, 0.75, -0.8125, -0.40625, 0.8125, -0.4375}, -- NodeBox27 - {-0.5, 0.8125, -0.5, -0.40625, 0.875, 0.5}, -- NodeBox28 - {-0.5, 0.75, 0.4375, -0.40625, 0.8125, 0.8125}, -- NodeBox29 - {-0.5, 0.6875, 0.75, -0.40625, 0.75, 1.0625}, -- NodeBox30 - {-0.5, 0.625, 1, -0.40625, 0.6875, 1.1875}, -- NodeBox31 - {-0.5, 0.5625, 1.125, -0.40625, 0.625, 1.3125}, -- NodeBox32 - {-0.5, 0.5, 1.25, -0.40625, 0.5625, 1.375}, -- NodeBox33 - {-0.5, 0.4375, 1.3125, -0.40625, 0.5, 1.4375}, -- NodeBox34 - {-0.5, 0.375, 1.375, -0.40625, 0.4375, 1.5}, -- NodeBox35 - {0.40625, 0.4375, -1.4375, 0.5, 0.5, -1.3125}, -- NodeBox36 - {0.40625, 0.5, -1.375, 0.5, 0.5625, -1.25}, -- NodeBox37 - {0.40625, 0.5625, -1.3125, 0.5, 0.625, -1.125}, -- NodeBox38 - {0.40625, 0.625, -1.1875, 0.5, 0.6875, -1}, -- NodeBox39 - {0.40625, 0.6875, -1.0625, 0.5, 0.75, -0.75}, -- NodeBox40 - {0.40625, 0.75, -0.8125, 0.5, 0.8125, -0.4375}, -- NodeBox41 - {0.40625, 0.8125, -0.5, 0.5, 0.875, 0.5}, -- NodeBox42 - {0.40625, 0.75, 0.4375, 0.5, 0.8125, 0.8125}, -- NodeBox43 - {0.40625, 0.6875, 0.75, 0.5, 0.75, 1.0625}, -- NodeBox44 - {0.40625, 0.625, 1, 0.5, 0.6875, 1.1875}, -- NodeBox45 - {0.40625, 0.5625, 1.125, 0.5, 0.625, 1.3125}, -- NodeBox46 - {0.40625, 0.5, 1.25, 0.5, 0.5625, 1.375}, -- NodeBox47 - {0.40625, 0.4375, 1.3125, 0.5, 0.5, 1.4375}, -- NodeBox48 - {0.40625, 0.375, 1.375, 0.5, 0.4375, 1.5}, -- NodeBox49 + {-0.4375, -0.5, -1.5, 0.4375, -0.4375, -1.375}, + {0.40625, -0.125, -0.6875, 0.5, 0.875, -0.59375}, + {0.40625, -0.125, 0.59375, 0.5, 0.875, 0.6875}, + {-0.5, -0.125, 0.59375, -0.40625, 0.875, 0.6875}, + {-0.5, -0.125, -0.6875, -0.40625, 0.875, -0.59375}, + {-0.5, 0.375, -1.5, -0.40625, 0.4375, -1.375}, + {0.40625, 0.375, -1.5, 0.5, 0.4375, -1.375}, + {-0.4375, -0.4375, -1.4375, 0.4375, -0.375, -1.3125}, + {-0.4375, -0.375, -1.375, 0.4375, -0.3125, -1.25}, + {-0.4375, -0.3125, -1.3125, 0.4375, -0.25, -1.125}, + {-0.4375, -0.25, -1.1875, 0.4375, -0.1875, -1}, + {-0.4375, -0.1875, -1.0625, 0.4375, -0.125, -0.75}, + {-0.4375, -0.125, -0.8125, 0.4375, -0.0625, -0.4375}, + {-0.4375, -0.125, 0.4375, 0.4375, -0.0625, 0.8125}, + {-0.4375, -0.0625, -0.5, 0.4375, 0, 0.5}, + {-0.4375, -0.1875, 0.75, 0.4375, -0.125, 1.0625}, + {-0.4375, -0.25, 1, 0.4375, -0.1875, 1.1875}, + {-0.4375, -0.3125, 1.125, 0.4375, -0.25, 1.3125}, + {-0.4375, -0.375, 1.25, 0.4375, -0.3125, 1.375}, + {-0.4375, -0.4375, 1.3125, 0.4375, -0.375, 1.4375}, + {-0.4375, -0.5, 1.375, 0.4375, -0.4375, 1.5}, + {-0.5, 0.4375, -1.4375, -0.40625, 0.5, -1.3125}, + {-0.5, 0.5, -1.375, -0.40625, 0.5625, -1.25}, + {-0.5, 0.5625, -1.3125, -0.40625, 0.625, -1.125}, + {-0.5, 0.625, -1.1875, -0.40625, 0.6875, -1}, + {-0.5, 0.6875, -1.0625, -0.40625, 0.75, -0.75}, + {-0.5, 0.75, -0.8125, -0.40625, 0.8125, -0.4375}, + {-0.5, 0.8125, -0.5, -0.40625, 0.875, 0.5}, + {-0.5, 0.75, 0.4375, -0.40625, 0.8125, 0.8125}, + {-0.5, 0.6875, 0.75, -0.40625, 0.75, 1.0625}, + {-0.5, 0.625, 1, -0.40625, 0.6875, 1.1875}, + {-0.5, 0.5625, 1.125, -0.40625, 0.625, 1.3125}, + {-0.5, 0.5, 1.25, -0.40625, 0.5625, 1.375}, + {-0.5, 0.4375, 1.3125, -0.40625, 0.5, 1.4375}, + {-0.5, 0.375, 1.375, -0.40625, 0.4375, 1.5}, + {0.40625, 0.4375, -1.4375, 0.5, 0.5, -1.3125}, + {0.40625, 0.5, -1.375, 0.5, 0.5625, -1.25}, + {0.40625, 0.5625, -1.3125, 0.5, 0.625, -1.125}, + {0.40625, 0.625, -1.1875, 0.5, 0.6875, -1}, + {0.40625, 0.6875, -1.0625, 0.5, 0.75, -0.75}, + {0.40625, 0.75, -0.8125, 0.5, 0.8125, -0.4375}, + {0.40625, 0.8125, -0.5, 0.5, 0.875, 0.5}, + {0.40625, 0.75, 0.4375, 0.5, 0.8125, 0.8125}, + {0.40625, 0.6875, 0.75, 0.5, 0.75, 1.0625}, + {0.40625, 0.625, 1, 0.5, 0.6875, 1.1875}, + {0.40625, 0.5625, 1.125, 0.5, 0.625, 1.3125}, + {0.40625, 0.5, 1.25, 0.5, 0.5625, 1.375}, + {0.40625, 0.4375, 1.3125, 0.5, 0.5, 1.4375}, + {0.40625, 0.375, 1.375, 0.5, 0.4375, 1.5}, }, }, selection_box = { @@ -4423,369 +4499,203 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then sounds = default.node_sound_wood_defaults(), }) + local mesecon_on_blastnode = nil if minetest.get_modpath("mesecons") then - minetest.register_node("bridger:large_beam_swivel_normal", { - description = "Large Wooden Swivel Bridge", - drawtype = "nodebox", - tiles = {"default_wood.png"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -1.5, 0.4375, -0.4375, 1.5}, -- NodeBox1 - {0.40625, -0.5, -0.6875, 0.5, 0.5, -0.59375}, -- NodeBox2 - {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, -- NodeBox3 - {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, -- NodeBox4 - {-0.5, -0.5, -0.6875, -0.40625, 0.5, -0.59375}, -- NodeBox5 - {-0.5, 0.375, -1.5, -0.40625, 0.4375, 1.5}, -- NodeBox6 - {0.40625, 0.375, -1.5, 0.5, 0.4375, 1.5}, -- NodeBox7 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -1.5, 0.5, 0.5, 1.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_beam_swivel_open", param2 = node.param2}) - end, - groups = {choppy=3}, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector = { - action_on = function (pos, node) - minetest.swap_node(pos, {name = "bridger:large_beam_swivel_open", param2 = node.param2}) - end, - }}, - on_blast = mesecon.on_blastnode, - }) - - minetest.register_node("bridger:large_beam_swivel_open", { - description = "Large Wooden Swivel Bridge", - drawtype = "nodebox", - tiles = {"default_wood.png^[transformR90"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-1.5, -0.5, -0.4375, 1.5, -0.4375, 0.4375}, -- NodeBox1 - {-0.6875, -0.5, -0.5, -0.59375, 0.5, -0.40625}, -- NodeBox2 - {0.59375, -0.5, -0.5, 0.6875, 0.5, -0.40625}, -- NodeBox3 - {0.59375, -0.5, 0.40625, 0.6875, 0.5, 0.5}, -- NodeBox4 - {-0.6875, -0.5, 0.40625, -0.59375, 0.5, 0.5}, -- NodeBox5 - {-1.5, 0.375, 0.40625, 1.5, 0.4375, 0.5}, -- NodeBox6 - {-1.5, 0.375, -0.5, 1.5, 0.4375, -0.40625}, -- NodeBox7 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-1.5, -0.5, -0.5, 1.5, 0.5, 0.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_beam_swivel_normal", param2 = node.param2}) - end, - drop = "bridger:large_beam_swivel_normal", - groups = {choppy=3, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector = { - action_off = function (pos, node) - minetest.swap_node(pos, {name = "bridger:large_beam_swivel_normal", param2 = node.param2}) - end, - }}, - on_blast = mesecon.on_blastnode, - }) - - minetest.register_node("bridger:large_drawbridge_normal", { - description = "Large Wooden Drawbridge", - drawtype = "nodebox", - tiles = {"default_wood.png"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 1.5}, -- NodeBox1 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox2 - {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, -- NodeBox3 - {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, -- NodeBox4 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox5 - {-0.5, 0.375, -0.5, -0.40625, 0.4375, 1.5}, -- NodeBox6 - {0.40625, 0.375, -0.5, 0.5, 0.4375, 1.5}, -- NodeBox7 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.5, 1.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_drawbridge_open", param2 = node.param2}) - end, - groups = {choppy=3}, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector = { - action_on = function (pos, node) - minetest.swap_node(pos, {name = "bridger:large_drawbridge_open", param2 = node.param2}) - end, - }}, - }) - - minetest.register_node("bridger:large_drawbridge_open", { - description = "Large Wooden Drawbridge", - drawtype = "nodebox", - tiles = {"default_wood.png"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.3125, -0.4375}, -- NodeBox1 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox2 - {0.40625, 0.875, 0.15625, 0.5, 2.125, 0.25}, -- NodeBox3 - {-0.5, 0.875, 0.15625, -0.40625, 2.125, 0.25}, -- NodeBox4 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox5 - {-0.5, 0.375, -0.5, -0.40625, 0.5625, -0.4375}, -- NodeBox6 - {0.40625, 0.375, -0.5, 0.5, 0.5625, -0.4375}, -- NodeBox7 - {-0.4375, -0.375, -0.4375, 0.4375, -0.1875, -0.375}, -- NodeBox8 - {-0.4375, -0.25, -0.375, 0.4375, -0.0625, -0.3125}, -- NodeBox9 - {-0.4375, -0.125, -0.3125, 0.4375, 0.0625, -0.25}, -- NodeBox10 - {-0.4375, 0, -0.25, 0.4375, 0.1875, -0.1875}, -- NodeBox11 - {-0.4375, 0.125, -0.1875, 0.4375, 0.3125, -0.125}, -- NodeBox12 - {-0.4375, 0.25, -0.125, 0.4375, 0.4375, -0.0625}, -- NodeBox13 - {-0.4375, 0.375, -0.0625, 0.4375, 0.5625, 0}, -- NodeBox14 - {-0.4375, 0.5, 0, 0.4375, 0.6875, 0.0625}, -- NodeBox15 - {-0.4375, 0.625, 0.0625, 0.4375, 0.8125, 0.125}, -- NodeBox16 - {-0.4375, 0.75, 0.125, 0.4375, 0.9375, 0.1875}, -- NodeBox17 - {-0.4375, 0.875, 0.1875, 0.4375, 1.0625, 0.25}, -- NodeBox18 - {-0.4375, 1, 0.25, 0.4375, 1.1875, 0.3125}, -- NodeBox19 - {-0.4375, 1.125, 0.3125, 0.4375, 1.3125, 0.375}, -- NodeBox20 - {-0.5, 0.5, -0.4375, -0.40625, 0.6875, -0.375}, -- NodeBox21 - {-0.5, 0.625, -0.375, -0.40625, 0.8125, -0.3125}, -- NodeBox22 - {-0.5, 0.75, -0.3125, -0.40625, 0.9375, -0.25}, -- NodeBox23 - {-0.5, 0.875, -0.25, -0.40625, 1.0625, -0.1875}, -- NodeBox24 - {-0.5, 1, -0.1875, -0.40625, 1.1875, -0.125}, -- NodeBox25 - {-0.5, 1.125, -0.125, -0.40625, 1.3125, -0.0625}, -- NodeBox26 - {-0.5, 1.25, -0.0625, -0.40625, 1.4375, 0}, -- NodeBox27 - {-0.5, 1.375, 0, -0.40625, 1.5625, 0.0625}, -- NodeBox28 - {-0.5, 1.5, 0.0625, -0.40625, 1.6875, 0.125}, -- NodeBox29 - {-0.5, 1.625, 0.125, -0.40625, 1.8125, 0.1875}, -- NodeBox30 - {-0.5, 1.75, 0.1875, -0.40625, 1.9375, 0.25}, -- NodeBox31 - {-0.5, 1.875, 0.25, -0.40625, 2.0625, 0.3125}, -- NodeBox32 - {-0.5, 2, 0.3125, -0.40625, 2.1875, 0.375}, -- NodeBox33 - {0.40625, 0.5, -0.4375, 0.5, 0.6875, -0.375}, -- NodeBox34 - {0.40625, 0.625, -0.375, 0.5, 0.8125, -0.3125}, -- NodeBox35 - {0.40625, 0.75, -0.3125, 0.5, 0.9375, -0.25}, -- NodeBox36 - {0.40625, 0.875, -0.25, 0.5, 1.0625, -0.1875}, -- NodeBox37 - {0.40625, 1, -0.1875, 0.5, 1.1875, -0.125}, -- NodeBox38 - {0.40625, 1.125, -0.125, 0.5, 1.3125, -0.0625}, -- NodeBox39 - {0.40625, 1.25, -0.0625, 0.5, 1.4375, 0}, -- NodeBox40 - {0.40625, 1.375, 0, 0.5, 1.5625, 0.0625}, -- NodeBox41 - {0.40625, 1.5, 0.0625, 0.5, 1.6875, 0.125}, -- NodeBox42 - {0.40625, 1.625, 0.125, 0.5, 1.8125, 0.1875}, -- NodeBox43 - {0.40625, 1.75, 0.1875, 0.5, 1.9375, 0.25}, -- NodeBox44 - {0.40625, 1.875, 0.25, 0.5, 2.0625, 0.3125}, -- NodeBox45 - {0.40625, 2, 0.3125, 0.5, 2.1875, 0.375}, -- NodeBox46 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 2.1875, 0.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_drawbridge_normal", param2 = node.param2}) - end, - drop = "bridger:large_drawbridge_normal", - groups = {choppy=3, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - mesecons = {effector = { - action_off = function (pos, node) - minetest.swap_node(pos, {name = "bridger:large_drawbridge_normal", param2 = node.param2}) - end, - }}, - on_blast = mesecon.on_blastnode, - }) - else - minetest.register_node("bridger:large_beam_swivel_normal", { - description = "Large Wooden Swivel Bridge", - drawtype = "nodebox", - tiles = {"default_wood.png"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -1.5, 0.4375, -0.4375, 1.5}, -- NodeBox1 - {0.40625, -0.5, -0.6875, 0.5, 0.5, -0.59375}, -- NodeBox2 - {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, -- NodeBox3 - {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, -- NodeBox4 - {-0.5, -0.5, -0.6875, -0.40625, 0.5, -0.59375}, -- NodeBox5 - {-0.5, 0.375, -1.5, -0.40625, 0.4375, 1.5}, -- NodeBox6 - {0.40625, 0.375, -1.5, 0.5, 0.4375, 1.5}, -- NodeBox7 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -1.5, 0.5, 0.5, 1.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_beam_swivel_open", param2 = node.param2}) - end, - groups = {choppy=3}, - sounds = default.node_sound_wood_defaults(), - }) - - minetest.register_node("bridger:large_beam_swivel_open", { - description = "Large Wooden Swivel Bridge", - drawtype = "nodebox", - tiles = {"default_wood.png^[transformR90"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-1.5, -0.5, -0.4375, 1.5, -0.4375, 0.4375}, -- NodeBox1 - {-0.6875, -0.5, -0.5, -0.59375, 0.5, -0.40625}, -- NodeBox2 - {0.59375, -0.5, -0.5, 0.6875, 0.5, -0.40625}, -- NodeBox3 - {0.59375, -0.5, 0.40625, 0.6875, 0.5, 0.5}, -- NodeBox4 - {-0.6875, -0.5, 0.40625, -0.59375, 0.5, 0.5}, -- NodeBox5 - {-1.5, 0.375, 0.40625, 1.5, 0.4375, 0.5}, -- NodeBox6 - {-1.5, 0.375, -0.5, 1.5, 0.4375, -0.40625}, -- NodeBox7 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-1.5, -0.5, -0.5, 1.5, 0.5, 0.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_beam_swivel_normal", param2 = node.param2}) - end, - drop = "bridger:large_beam_swivel_normal", - groups = {choppy=3, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - }) - - minetest.register_node("bridger:large_drawbridge_normal", { - description = "Large Wooden Drawbridge", - drawtype = "nodebox", - tiles = {"default_wood.png"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 1.5}, -- NodeBox1 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox2 - {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, -- NodeBox3 - {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, -- NodeBox4 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox5 - {-0.5, 0.375, -0.5, -0.40625, 0.4375, 1.5}, -- NodeBox6 - {0.40625, 0.375, -0.5, 0.5, 0.4375, 1.5}, -- NodeBox7 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 0.5, 1.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_drawbridge_open", param2 = node.param2}) - end, - groups = {choppy=3}, - sounds = default.node_sound_wood_defaults(), - }) - - minetest.register_node("bridger:large_drawbridge_open", { - description = "Large Wooden Drawbridge", - drawtype = "nodebox", - tiles = {"default_wood.png"}, - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.5, -0.5, 0.4375, -0.3125, -0.4375}, -- NodeBox1 - {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, -- NodeBox2 - {0.40625, 0.875, 0.15625, 0.5, 2.125, 0.25}, -- NodeBox3 - {-0.5, 0.875, 0.15625, -0.40625, 2.125, 0.25}, -- NodeBox4 - {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, -- NodeBox5 - {-0.5, 0.375, -0.5, -0.40625, 0.5625, -0.4375}, -- NodeBox6 - {0.40625, 0.375, -0.5, 0.5, 0.5625, -0.4375}, -- NodeBox7 - {-0.4375, -0.375, -0.4375, 0.4375, -0.1875, -0.375}, -- NodeBox8 - {-0.4375, -0.25, -0.375, 0.4375, -0.0625, -0.3125}, -- NodeBox9 - {-0.4375, -0.125, -0.3125, 0.4375, 0.0625, -0.25}, -- NodeBox10 - {-0.4375, 0, -0.25, 0.4375, 0.1875, -0.1875}, -- NodeBox11 - {-0.4375, 0.125, -0.1875, 0.4375, 0.3125, -0.125}, -- NodeBox12 - {-0.4375, 0.25, -0.125, 0.4375, 0.4375, -0.0625}, -- NodeBox13 - {-0.4375, 0.375, -0.0625, 0.4375, 0.5625, 0}, -- NodeBox14 - {-0.4375, 0.5, 0, 0.4375, 0.6875, 0.0625}, -- NodeBox15 - {-0.4375, 0.625, 0.0625, 0.4375, 0.8125, 0.125}, -- NodeBox16 - {-0.4375, 0.75, 0.125, 0.4375, 0.9375, 0.1875}, -- NodeBox17 - {-0.4375, 0.875, 0.1875, 0.4375, 1.0625, 0.25}, -- NodeBox18 - {-0.4375, 1, 0.25, 0.4375, 1.1875, 0.3125}, -- NodeBox19 - {-0.4375, 1.125, 0.3125, 0.4375, 1.3125, 0.375}, -- NodeBox20 - {-0.5, 0.5, -0.4375, -0.40625, 0.6875, -0.375}, -- NodeBox21 - {-0.5, 0.625, -0.375, -0.40625, 0.8125, -0.3125}, -- NodeBox22 - {-0.5, 0.75, -0.3125, -0.40625, 0.9375, -0.25}, -- NodeBox23 - {-0.5, 0.875, -0.25, -0.40625, 1.0625, -0.1875}, -- NodeBox24 - {-0.5, 1, -0.1875, -0.40625, 1.1875, -0.125}, -- NodeBox25 - {-0.5, 1.125, -0.125, -0.40625, 1.3125, -0.0625}, -- NodeBox26 - {-0.5, 1.25, -0.0625, -0.40625, 1.4375, 0}, -- NodeBox27 - {-0.5, 1.375, 0, -0.40625, 1.5625, 0.0625}, -- NodeBox28 - {-0.5, 1.5, 0.0625, -0.40625, 1.6875, 0.125}, -- NodeBox29 - {-0.5, 1.625, 0.125, -0.40625, 1.8125, 0.1875}, -- NodeBox30 - {-0.5, 1.75, 0.1875, -0.40625, 1.9375, 0.25}, -- NodeBox31 - {-0.5, 1.875, 0.25, -0.40625, 2.0625, 0.3125}, -- NodeBox32 - {-0.5, 2, 0.3125, -0.40625, 2.1875, 0.375}, -- NodeBox33 - {0.40625, 0.5, -0.4375, 0.5, 0.6875, -0.375}, -- NodeBox34 - {0.40625, 0.625, -0.375, 0.5, 0.8125, -0.3125}, -- NodeBox35 - {0.40625, 0.75, -0.3125, 0.5, 0.9375, -0.25}, -- NodeBox36 - {0.40625, 0.875, -0.25, 0.5, 1.0625, -0.1875}, -- NodeBox37 - {0.40625, 1, -0.1875, 0.5, 1.1875, -0.125}, -- NodeBox38 - {0.40625, 1.125, -0.125, 0.5, 1.3125, -0.0625}, -- NodeBox39 - {0.40625, 1.25, -0.0625, 0.5, 1.4375, 0}, -- NodeBox40 - {0.40625, 1.375, 0, 0.5, 1.5625, 0.0625}, -- NodeBox41 - {0.40625, 1.5, 0.0625, 0.5, 1.6875, 0.125}, -- NodeBox42 - {0.40625, 1.625, 0.125, 0.5, 1.8125, 0.1875}, -- NodeBox43 - {0.40625, 1.75, 0.1875, 0.5, 1.9375, 0.25}, -- NodeBox44 - {0.40625, 1.875, 0.25, 0.5, 2.0625, 0.3125}, -- NodeBox45 - {0.40625, 2, 0.3125, 0.5, 2.1875, 0.375}, -- NodeBox46 - }, - }, - selection_box = { - type = "fixed", - fixed = { - {-0.5, -0.5, -0.5, 0.5, 2.1875, 0.5}, - }, - }, - on_rightclick = function(pos, node) - minetest.set_node(pos, {name = "bridger:large_drawbridge_normal", param2 = node.param2}) - end, - drop = "bridger:large_drawbridge_normal", - groups = {choppy=3, not_in_creative_inventory=1}, - sounds = default.node_sound_wood_defaults(), - }) + mesecon_on_blastnode = mesecon.on_blastnode end + minetest.register_node("bridger:large_beam_swivel_normal", { + description = "Large Wooden Swivel Bridge", + drawtype = "nodebox", + tiles = {"default_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -1.5, 0.4375, -0.4375, 1.5}, + {0.40625, -0.5, -0.6875, 0.5, 0.5, -0.59375}, + {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, + {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, + {-0.5, -0.5, -0.6875, -0.40625, 0.5, -0.59375}, + {-0.5, 0.375, -1.5, -0.40625, 0.4375, 1.5}, + {0.40625, 0.375, -1.5, 0.5, 0.4375, 1.5}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -1.5, 0.5, 0.5, 1.5}, + }, + }, + on_rightclick = function(pos, node) + minetest.set_node(pos, {name = "bridger:large_beam_swivel_open", param2 = node.param2}) + end, + groups = {choppy=3}, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector = { + action_on = function(pos, node) + minetest.swap_node(pos, {name = "bridger:large_beam_swivel_open", param2 = node.param2}) + end, + }}, + on_blast = mesecon_on_blastnode, + }) + + minetest.register_node("bridger:large_beam_swivel_open", { + description = "Large Wooden Swivel Bridge", + drawtype = "nodebox", + tiles = {"default_wood.png^[transformR90"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-1.5, -0.5, -0.4375, 1.5, -0.4375, 0.4375}, + {-0.6875, -0.5, -0.5, -0.59375, 0.5, -0.40625}, + {0.59375, -0.5, -0.5, 0.6875, 0.5, -0.40625}, + {0.59375, -0.5, 0.40625, 0.6875, 0.5, 0.5}, + {-0.6875, -0.5, 0.40625, -0.59375, 0.5, 0.5}, + {-1.5, 0.375, 0.40625, 1.5, 0.4375, 0.5}, + {-1.5, 0.375, -0.5, 1.5, 0.4375, -0.40625}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-1.5, -0.5, -0.5, 1.5, 0.5, 0.5}, + }, + }, + on_rightclick = function(pos, node) + minetest.set_node(pos, {name = "bridger:large_beam_swivel_normal", param2 = node.param2}) + end, + drop = "bridger:large_beam_swivel_normal", + groups = {choppy=3, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector = { + action_off = function(pos, node) + minetest.swap_node(pos, {name = "bridger:large_beam_swivel_normal", param2 = node.param2}) + end, + }}, + on_blast = mesecon_on_blastnode, + }) + + minetest.register_node("bridger:large_drawbridge_normal", { + description = "Large Wooden Drawbridge", + drawtype = "nodebox", + tiles = {"default_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.5, 0.4375, -0.4375, 1.5}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, -0.5, 0.59375, 0.5, 0.5, 0.6875}, + {-0.5, -0.5, 0.59375, -0.40625, 0.5, 0.6875}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {-0.5, 0.375, -0.5, -0.40625, 0.4375, 1.5}, + {0.40625, 0.375, -0.5, 0.5, 0.4375, 1.5}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 1.5}, + }, + }, + on_rightclick = function(pos, node) + minetest.set_node(pos, {name = "bridger:large_drawbridge_open", param2 = node.param2}) + end, + groups = {choppy=3}, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector = { + action_on = function(pos, node) + minetest.swap_node(pos, {name = "bridger:large_drawbridge_open", param2 = node.param2}) + end, + }}, + }) + + minetest.register_node("bridger:large_drawbridge_open", { + description = "Large Wooden Drawbridge", + drawtype = "nodebox", + tiles = {"default_wood.png"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.5, -0.5, 0.4375, -0.3125, -0.4375}, + {0.40625, -0.5, -0.5, 0.5, 0.5, -0.40625}, + {0.40625, 0.875, 0.15625, 0.5, 2.125, 0.25}, + {-0.5, 0.875, 0.15625, -0.40625, 2.125, 0.25}, + {-0.5, -0.5, -0.5, -0.40625, 0.5, -0.40625}, + {-0.5, 0.375, -0.5, -0.40625, 0.5625, -0.4375}, + {0.40625, 0.375, -0.5, 0.5, 0.5625, -0.4375}, + {-0.4375, -0.375, -0.4375, 0.4375, -0.1875, -0.375}, + {-0.4375, -0.25, -0.375, 0.4375, -0.0625, -0.3125}, + {-0.4375, -0.125, -0.3125, 0.4375, 0.0625, -0.25}, + {-0.4375, 0, -0.25, 0.4375, 0.1875, -0.1875}, + {-0.4375, 0.125, -0.1875, 0.4375, 0.3125, -0.125}, + {-0.4375, 0.25, -0.125, 0.4375, 0.4375, -0.0625}, + {-0.4375, 0.375, -0.0625, 0.4375, 0.5625, 0}, + {-0.4375, 0.5, 0, 0.4375, 0.6875, 0.0625}, + {-0.4375, 0.625, 0.0625, 0.4375, 0.8125, 0.125}, + {-0.4375, 0.75, 0.125, 0.4375, 0.9375, 0.1875}, + {-0.4375, 0.875, 0.1875, 0.4375, 1.0625, 0.25}, + {-0.4375, 1, 0.25, 0.4375, 1.1875, 0.3125}, + {-0.4375, 1.125, 0.3125, 0.4375, 1.3125, 0.375}, + {-0.5, 0.5, -0.4375, -0.40625, 0.6875, -0.375}, + {-0.5, 0.625, -0.375, -0.40625, 0.8125, -0.3125}, + {-0.5, 0.75, -0.3125, -0.40625, 0.9375, -0.25}, + {-0.5, 0.875, -0.25, -0.40625, 1.0625, -0.1875}, + {-0.5, 1, -0.1875, -0.40625, 1.1875, -0.125}, + {-0.5, 1.125, -0.125, -0.40625, 1.3125, -0.0625}, + {-0.5, 1.25, -0.0625, -0.40625, 1.4375, 0}, + {-0.5, 1.375, 0, -0.40625, 1.5625, 0.0625}, + {-0.5, 1.5, 0.0625, -0.40625, 1.6875, 0.125}, + {-0.5, 1.625, 0.125, -0.40625, 1.8125, 0.1875}, + {-0.5, 1.75, 0.1875, -0.40625, 1.9375, 0.25}, + {-0.5, 1.875, 0.25, -0.40625, 2.0625, 0.3125}, + {-0.5, 2, 0.3125, -0.40625, 2.1875, 0.375}, + {0.40625, 0.5, -0.4375, 0.5, 0.6875, -0.375}, + {0.40625, 0.625, -0.375, 0.5, 0.8125, -0.3125}, + {0.40625, 0.75, -0.3125, 0.5, 0.9375, -0.25}, + {0.40625, 0.875, -0.25, 0.5, 1.0625, -0.1875}, + {0.40625, 1, -0.1875, 0.5, 1.1875, -0.125}, + {0.40625, 1.125, -0.125, 0.5, 1.3125, -0.0625}, + {0.40625, 1.25, -0.0625, 0.5, 1.4375, 0}, + {0.40625, 1.375, 0, 0.5, 1.5625, 0.0625}, + {0.40625, 1.5, 0.0625, 0.5, 1.6875, 0.125}, + {0.40625, 1.625, 0.125, 0.5, 1.8125, 0.1875}, + {0.40625, 1.75, 0.1875, 0.5, 1.9375, 0.25}, + {0.40625, 1.875, 0.25, 0.5, 2.0625, 0.3125}, + {0.40625, 2, 0.3125, 0.5, 2.1875, 0.375}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 2.1875, 0.5}, + }, + }, + on_rightclick = function(pos, node) + minetest.set_node(pos, {name = "bridger:large_drawbridge_normal", param2 = node.param2}) + end, + drop = "bridger:large_drawbridge_normal", + groups = {choppy=3, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + mesecons = {effector = { + action_off = function(pos, node) + minetest.swap_node(pos, {name = "bridger:large_drawbridge_normal", param2 = node.param2}) + end, + }}, + on_blast = mesecon_on_blastnode, + }) + minetest.register_node("bridger:deck_wood", { description = "Wooden Deck", drawtype = "nodebox", @@ -4807,4 +4717,4 @@ if not minetest.settings:get_bool("bridger_disable_wooden_bridges") then groups = {choppy=3}, sounds = default.node_sound_wood_defaults(), }) -end \ No newline at end of file +end diff --git a/mods/builtin_item/README.md b/mods/builtin_item/README.md index cf37e8b8..a1699c98 100644 --- a/mods/builtin_item/README.md +++ b/mods/builtin_item/README.md @@ -10,15 +10,17 @@ Features: - Particle effects added - Dropped items slide on nodes with {slippery} groups - Items stuck inside solid nodes move to nearest empty space -- Added 'dropped_step(self, pos, dtime)' custom on_step for dropped items +- Added 'dropped_step(self, pos, dtime, moveresult)' custom on_step for dropped items 'self.node_inside' contains node table that item is inside 'self.def_inside' contains node definition for above 'self.node_under' contains node table that is below item 'self.def_under' contains node definition for above 'self.age' holds age of dropped item in seconds 'self.itemstring' contains itemstring e.g. "default:dirt", "default:ice 20" + 'self.is_moving' true if dropped item is moving 'pos' holds position of dropped item 'dtime' used for timers + 'moveresult' table containing collision info return false to skip further checks by builtin_item diff --git a/mods/builtin_item/init.lua b/mods/builtin_item/init.lua index 84124875..0688c633 100644 --- a/mods/builtin_item/init.lua +++ b/mods/builtin_item/init.lua @@ -1,26 +1,18 @@ -- Minetest: builtin/item_entity.lua --- override ice to make slippery for 0.4.16 -if not minetest.raycast then - minetest.override_item("default:ice", { - groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3}}) -end - - function core.spawn_item(pos, item) - local stack = ItemStack(item) local obj = core.add_entity(pos, "__builtin:item") if obj then - obj:get_luaentity():set_item(stack:to_string()) + obj:get_luaentity():set_item(ItemStack(item):to_string()) end return obj end --- If item_entity_ttl is not set, enity will have default life time +-- If item_entity_ttl is not set, entity will have default life time -- Setting it to -1 disables the feature local time_to_live = tonumber(core.settings:get("item_entity_ttl")) or 900 local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81 @@ -78,8 +70,7 @@ local function quick_flow_logic(node, pos_testing, direction) param2 = 0 end - if minetest.registered_nodes[node_testing.name].liquidtype ~= "flowing" - and minetest.registered_nodes[node_testing.name].liquidtype ~= "source" then + if minetest.registered_nodes[node_testing.name].liquidtype ~= "flowing" then return 0 end @@ -108,7 +99,7 @@ end local function quick_flow(pos, node) - local x, z = 0.0, 0.0 + local x, z = 0, 0 x = x + quick_flow_logic(node, {x = pos.x - 1, y = pos.y, z = pos.z},-1) x = x + quick_flow_logic(node, {x = pos.x + 1, y = pos.y, z = pos.z}, 1) @@ -135,19 +126,14 @@ local function add_effects(pos) maxexptime = 3, minsize = 1, maxsize = 4, - texture = "tnt_smoke.png", + texture = "tnt_smoke.png" }) end --- print vector, helpful when debugging -local function vec_print(head, vec) - print(head, vec.x, vec.y, vec.z) -end - local water_force = tonumber(minetest.settings:get("builtin_item.waterflow_force") or 1.6) local water_drag = tonumber(minetest.settings:get("builtin_item.waterflow_drag") or 0.8) -local dry_friction = tonumber(minetest.settings:get("builtin_item.friction_dry") or 2.5) +local dry_friction = tonumber(minetest.settings:get("builtin_item.friction_dry") or 2.6) local air_drag = tonumber(minetest.settings:get("builtin_item.air_drag") or 0.4) local items_collect_on_slippery = tonumber( minetest.settings:get("builtin_item.items_collect_on_slippery") or 1) ~= 0 @@ -194,7 +180,7 @@ core.register_entity(":__builtin:item", { local col_height = size * 0.75 local def = core.registered_nodes[itemname] local glow = def and def.light_source - local c1, c2 = "","" + local c1, c2 = "", "" if not(stack:get_count() == 1) then c1 = " x" .. tostring(stack:get_count()) @@ -225,23 +211,20 @@ core.register_entity(":__builtin:item", { glow = glow, infotext = name .. c1 .. "\n(" .. itemname .. c2 .. ")" }) - end, get_staticdata = function(self) - local data = { + return core.serialize({ itemstring = self.itemstring, age = self.age, dropped_by = self.dropped_by - } - - return core.serialize(data) + }) end, on_activate = function(self, staticdata, dtime_s) - if string.sub(staticdata, 1, string.len("return")) == "return" then + if string.sub(staticdata, 1, 6) == "return" then local data = core.deserialize(staticdata) @@ -288,7 +271,7 @@ core.register_entity(":__builtin:item", { pos.y = pos.y + ((total_count - count) / max_count) * 0.15 self.object:move_to(pos) - self.age = 0 -- Handle as new entity + self.age = 0 -- Reset age -- Merge velocities local vel_a = self.object:get_velocity() @@ -317,45 +300,58 @@ core.register_entity(":__builtin:item", { -- get nodes every 1/4 second self.timer = (self.timer or 0) + dtime - if self.timer > 0.25 or not self.node_inside then + if self.timer < 0.25 and self.node_inside then + return + end - self.node_inside = minetest.get_node_or_nil(pos) - self.def_inside = self.node_inside - and core.registered_nodes[self.node_inside.name] + self.node_inside = minetest.get_node_or_nil(pos) + self.def_inside = self.node_inside + and core.registered_nodes[self.node_inside.name] - -- get ground node for collision - self.node_under = nil - self.falling_state = true + -- get ground node for collision + self.node_under = nil + self.falling_state = true - if moveresult.touching_ground then + --[[ new ground check (glitchy) + if moveresult and moveresult.touching_ground then - for _, info in ipairs(moveresult.collisions) do + for _, info in ipairs(moveresult.collisions) do - if info.axis == "y" then + if info.axis == "y" then - self.node_under = core.get_node(info.node_pos) - self.falling_state = false + self.node_under = core.get_node_or_nil(info.node_pos) + self.falling_state = false - break - end + break end end + end]] - self.def_under = self.node_under - and core.registered_nodes[self.node_under.name] + -- old ground check (stable) + self.node_under = minetest.get_node_or_nil({ + x = pos.x, + y = pos.y + self.object:get_properties().collisionbox[2] - 0.05, + z = pos.z + }) - self.timer = 0 + self.def_under = self.node_under + and core.registered_nodes[self.node_under.name] + + -- part of old ground check + if self.def_under and self.def_under.walkable then + self.falling_state = false end + + self.timer = 0 end, step_node_inside_checks = function(self) local pos = self.object:get_pos() - local node = self.node_inside - local def = self.def_inside -- Delete in 'ignore' nodes - if node and node.name == "ignore" then + if (self.node_inside and self.node_inside.name == "ignore") + or self.itemstring == "" then self.itemstring = "" self.object:remove() @@ -363,6 +359,8 @@ core.register_entity(":__builtin:item", { return true end + local def = self.def_inside + -- item inside block, move to vacant space if def and (def.walkable == nil or def.walkable == true) and (def.collision_box == nil or def.collision_box.type == "regular") @@ -384,7 +382,7 @@ core.register_entity(":__builtin:item", { pos = pos, max_hear_distance = 6, gain = 0.5 - }) + }, true) self.itemstring = "" self.object:remove() @@ -399,19 +397,17 @@ core.register_entity(":__builtin:item", { step_check_slippery = function(self) - -- don't check for slippery ground if we're not on - -- any ground to begin with - local node = self.node_under - local def = self.def_under + -- don't check for slippery if we're not on the ground + if self.falling_state or not self.node_under then - if self.falling_state or not node then self.slippery_state = false + return end - if node and def and def.walkable then + if self.node_under and self.def_under and self.def_under.walkable then - local slippery = core.get_item_group(node.name, "slippery") + local slippery = core.get_item_group(self.node_under.name, "slippery") self.slippery_state = slippery ~= 0 end @@ -419,17 +415,16 @@ core.register_entity(":__builtin:item", { step_water_physics = function(self) - local pos = self.object:get_pos() - local vel = self.object:get_velocity() - local node = self.node_inside - local def = self.def_inside - - self.waterflow_state = def and def.liquidtype == "flowing" + self.waterflow_state = self.def_inside and + self.def_inside.liquidtype == "flowing" if self.waterflow_state then + local pos = self.object:get_pos() + local vel = self.object:get_velocity() + -- get flow velocity - local flow_vel = quick_flow(pos, node) + local flow_vel = quick_flow(pos, self.node_inside) -- calculate flow force and drag local flow_force_x = flow_vel.x * water_force @@ -444,20 +439,12 @@ core.register_entity(":__builtin:item", { end end, - step_air_drag_physics = function(self) + step_gravity = function(self) local vel = self.object:get_velocity() - -- apply air drag - if self.falling_state or (self.slippery_state and not self.waterflow_state) then - self.accel.x = self.accel.x - vel.x * air_drag - self.accel.z = self.accel.z - vel.z * air_drag - end - end, - - step_gravity = function(self) - - if self.falling_state then + -- apply gravity if falling or Y velocity not 0 (just incase) + if self.falling_state or (vel and vel.y ~= 0) then self.accel.y = self.accel.y - gravity end end, @@ -471,14 +458,27 @@ core.register_entity(":__builtin:item", { local vel = self.object:get_velocity() + -- this stops the entity drift glitch by re-setting entity pos when not moving + if vel.x == 0 and vel.y == 0 and vel.z == 0 then + + if self.is_moving == true then + + self.is_moving = false + + local pos = self.object:get_pos() + + self.object:set_pos(pos) + end + else + self.is_moving = true + end + if self.slippery_state then - local node = self.node_under - -- apply slip factor (tiny friction that depends on the actual block type) - if (abs(vel.x) > 0.2 or abs(vel.z) > 0.2) then + if abs(vel.x) > 0.2 or abs(vel.z) > 0.2 then - local slippery = core.get_item_group(node.name, "slippery") + local slippery = core.get_item_group(self.node_under.name, "slippery") local slip_factor = 4.0 / (slippery + 4) self.accel.x = self.accel.x - vel.x * slip_factor @@ -497,17 +497,15 @@ core.register_entity(":__builtin:item", { step_check_timeout = function(self, dtime) - local pos = self.object:get_pos() - self.age = self.age + dtime if time_to_live > 0 and self.age > time_to_live then + add_effects(self.object:get_pos()) + self.itemstring = "" self.object:remove() - add_effects(pos) - return true end @@ -516,14 +514,13 @@ core.register_entity(":__builtin:item", { step_check_custom_step = function(self, dtime, moveresult) - local pos = self.object:get_pos() - -- do custom step function local name = ItemStack(self.itemstring):get_name() or "" local custom = core.registered_items[name] and core.registered_items[name].dropped_step - if custom and custom(self, pos, dtime, moveresult) == false then + if custom + and custom(self, self.object:get_pos(), dtime, moveresult) == false then return true -- skip further checks if false end @@ -532,8 +529,6 @@ core.register_entity(":__builtin:item", { step_try_collect = function(self) - local self_pos = self.object:get_pos() - -- Don't collect items if falling if self.falling_state then return @@ -551,6 +546,7 @@ core.register_entity(":__builtin:item", { return end + local self_pos = self.object:get_pos() local objects = core.get_objects_inside_radius(self_pos, 1.0) for _, obj in pairs(objects) do @@ -574,6 +570,18 @@ core.register_entity(":__builtin:item", { end end, + step_air_drag_physics = function(self) + + local vel = self.object:get_velocity() + + -- apply air drag + if self.falling_state + or (self.slippery_state and not self.waterflow_state) then + self.accel.x = self.accel.x - vel.x * air_drag + self.accel.z = self.accel.z - vel.z * air_drag + end + end, + on_step = function(self, dtime, moveresult) -- reset acceleration @@ -596,17 +604,16 @@ core.register_entity(":__builtin:item", { return -- destroyed end - self:step_check_slippery() - -- do physics checks, then apply self:step_water_physics() + self:step_check_slippery() self:step_ground_friction() + self:step_air_drag_physics() self:step_gravity() self:step_apply_forces() - -- do item checks - self:step_try_collect() + self:step_try_collect() -- merge end, on_punch = function(self, hitter) @@ -618,12 +625,14 @@ core.register_entity(":__builtin:item", { local left = inv:add_item("main", self.itemstring) if left and not left:is_empty() then + self:set_item(left) + return end end self.itemstring = "" self.object:remove() - end, + end }) diff --git a/mods/builtin_item/init.lua_ b/mods/builtin_item/init.lua_ deleted file mode 100644 index f98efdee..00000000 --- a/mods/builtin_item/init.lua_ +++ /dev/null @@ -1,541 +0,0 @@ --- Minetest: builtin/item_entity.lua - --- override ice to make slippery for 0.4.16 -if not minetest.raycast then - minetest.override_item("default:ice", { - groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1, slippery = 3}}) -end - - -function core.spawn_item(pos, item) - - local stack = ItemStack(item) - local obj = core.add_entity(pos, "__builtin:item") - - if obj then - obj:get_luaentity():set_item(stack:to_string()) - end - - return obj -end - - --- If item_entity_ttl is not set, enity will have default life time --- Setting it to -1 disables the feature - -local time_to_live = tonumber(core.settings:get("item_entity_ttl")) or 900 -local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81 -local destroy_item = core.settings:get_bool("destroy_item") ~= false - - --- water flow functions by QwertyMine3, edited by TenPlus1 -local inv_roots = { - [0] = 1 -} - -local function to_unit_vector(dir_vector) - - local sum = dir_vector.x * dir_vector.x + dir_vector.z * dir_vector.z - local invr_sum = 0 - - -- find inverse square root if possible - if inv_roots[sum] ~= nil then - invr_sum = inv_roots[sum] - else - -- not found, compute and save the inverse square root - invr_sum = 1.0 / math.sqrt(sum) - inv_roots[sum] = invr_sum - end - - return { - x = dir_vector.x * invr_sum, - y = dir_vector.y, - z = dir_vector.z * invr_sum - } -end - - -local function node_ok(pos) - - local node = minetest.get_node_or_nil(pos) - - if node and minetest.registered_nodes[node.name] then - return node - end - - return minetest.registered_nodes["default:dirt"] -end - - -local function quick_flow_logic(node, pos_testing, direction) - - local node_testing = node_ok(pos_testing) - local param2 = node.param2 - - if not minetest.registered_nodes[node.name].groups.liquid then - param2 = 0 - end - - if minetest.registered_nodes[node_testing.name].liquidtype ~= "flowing" - and minetest.registered_nodes[node_testing.name].liquidtype ~= "source" then - return 0 - end - - local param2_testing = node_testing.param2 - - if param2_testing < param2 then - - if (param2 - param2_testing) > 6 then - return -direction - else - return direction - end - - elseif param2_testing > param2 then - - if (param2_testing - param2) > 6 then - return direction - else - return -direction - end - end - - return 0 -end - - --- reciprocal of the length of an unit square's diagonal -local DIAG_WEIGHT = 2 / math.sqrt(2) - -local function quick_flow(pos, node) - - local x, z = 0.0, 0.0 - - x = x + quick_flow_logic(node, {x = pos.x - 1, y = pos.y, z = pos.z},-1) - x = x + quick_flow_logic(node, {x = pos.x + 1, y = pos.y, z = pos.z}, 1) - z = z + quick_flow_logic(node, {x = pos.x, y = pos.y, z = pos.z - 1},-1) - z = z + quick_flow_logic(node, {x = pos.x, y = pos.y, z = pos.z + 1}, 1) - - return to_unit_vector({x = x, y = 0, z = z}) -end --- END water flow functions - - --- particle effects for when item is destroyed -local function add_effects(pos) - - minetest.add_particlespawner({ - amount = 1, - time = 0.25, - minpos = pos, - maxpos = pos, - minvel = {x = -1, y = 2, z = -1}, - maxvel = {x = 1, y = 4, z = 1}, - minacc = {x = 0, y = 0, z = 0}, - maxacc = {x = 0, y = 0, z = 0}, - minexptime = 1, - maxexptime = 3, - minsize = 1, - maxsize = 4, - texture = "tnt_smoke.png", - }) -end - - -local water_force = 0.8 -local water_friction = 0.8 -local dry_friction = 2.5 - -core.register_entity(":__builtin:item", { - - initial_properties = { - hp_max = 1, - physical = true, - collide_with_objects = false, - collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3}, - visual = "wielditem", - visual_size = {x = 0.4, y = 0.4}, - textures = {""}, - spritediv = {x = 1, y = 1}, - initial_sprite_basepos = {x = 0, y = 0}, - is_visible = false, - infotext = "", - }, - - itemstring = "", - moving_state = true, - slippery_state = false, - age = 0, - - set_item = function(self, item) - - local stack = ItemStack(item or self.itemstring) - - self.itemstring = stack:to_string() - - if self.itemstring == "" then - return - end - - local itemname = stack:is_known() and stack:get_name() or "unknown" - local max_count = stack:get_stack_max() - local count = math.min(stack:get_count(), max_count) - local size = 0.2 + 0.1 * (count / max_count) ^ (1 / 3) - local col_height = size * 0.75 - local def = core.registered_nodes[itemname] - local glow = def and def.light_source - local c1, c2 = "","" - - if not(stack:get_count() == 1) then - c1 = " x"..tostring(stack:get_count()) - c2 = " "..tostring(stack:get_count()) - end - - local name1 = stack:get_meta():get_string("description") - local name - - if name1 == "" then - name = core.registered_items[itemname].description - else - name = name1 - end - - self.object:set_properties({ - is_visible = true, - visual = "wielditem", - textures = {itemname}, - visual_size = {x = size, y = size}, - collisionbox = {-size, -col_height, -size, size, col_height, size}, - selectionbox = {-size, -size, -size, size, size, size}, - automatic_rotate = 0.314 / size, - wield_item = self.itemstring, - glow = glow, - infotext = name .. c1 .. "\n(" .. itemname .. c2 .. ")" - }) - - end, - - get_staticdata = function(self) - - return core.serialize({ - itemstring = self.itemstring, - age = self.age, - dropped_by = self.dropped_by - }) - end, - - on_activate = function(self, staticdata, dtime_s) - - if string.sub(staticdata, 1, string.len("return")) == "return" then - - local data = core.deserialize(staticdata) - - if data and type(data) == "table" then - self.itemstring = data.itemstring - self.age = (data.age or 0) + dtime_s - self.dropped_by = data.dropped_by - end - else - self.itemstring = staticdata - end - - self.object:set_armor_groups({immortal = 1}) - self.object:set_velocity({x = 0, y = 2, z = 0}) - self.object:set_acceleration({x = 0, y = -gravity, z = 0}) - self:set_item() - end, - - try_merge_with = function(self, own_stack, object, entity) - - if self.age == entity.age then - return false -- Can not merge with itself - end - - local stack = ItemStack(entity.itemstring) - local name = stack:get_name() - - if own_stack:get_name() ~= name - or own_stack:get_meta() ~= stack:get_meta() - or own_stack:get_wear() ~= stack:get_wear() - or own_stack:get_free_space() == 0 then - return false -- Can not merge different or full stack - end - - local count = own_stack:get_count() - local total_count = stack:get_count() + count - local max_count = stack:get_stack_max() - - if total_count > max_count then - return false - end - - -- Merge the remote stack into this one - local pos = object:get_pos() - pos.y = pos.y + ((total_count - count) / max_count) * 0.15 - - self.object:move_to(pos) - self.age = 0 -- Handle as new entity - - own_stack:set_count(total_count) - self:set_item(own_stack) - - entity.itemstring = "" - object:remove() - - return true - end, - - on_step = function(self, dtime, moveresult) - - local pos = self.object:get_pos() - - self.age = self.age + dtime - - if time_to_live > 0 and self.age > time_to_live then - - self.itemstring = "" - self.object:remove() - - add_effects(pos) - - return - end - - -- get nodes every 1/4 second - self.timer = (self.timer or 0) + dtime - - if self.timer > 0.25 or not self.node_inside then - - self.node_inside = minetest.get_node_or_nil(pos) - self.def_inside = self.node_inside - and core.registered_nodes[self.node_inside.name] - - -- get ground node for collision - self.node_under = nil - - if moveresult.touching_ground then - - for _, info in ipairs(moveresult.collisions) do - - if info.axis == "y" then - - self.node_under = core.get_node(info.node_pos) - - break - end - end - end - - self.def_under = self.node_under - and core.registered_nodes[self.node_under.name] - - self.timer = 0 - end - - local node = self.node_inside - - -- Delete in 'ignore' nodes - if node and node.name == "ignore" then - - self.itemstring = "" - self.object:remove() - - return - end - - -- do custom step function - local name = ItemStack(self.itemstring):get_name() or "" - local custom = core.registered_items[name] - and core.registered_items[name].dropped_step - - if custom and custom(self, pos, dtime) == false then - return -- skip further checks if false - end - - local vel = self.object:get_velocity() - local def = self.def_inside - local is_slippery = false - local is_moving = (def and not def.walkable) or - vel.x ~= 0 or vel.y ~= 0 or vel.z ~= 0 - - -- destroy item when dropped into lava (if enabled) - if destroy_item and def and def.groups and def.groups.lava then - - minetest.sound_play("builtin_item_lava", { - pos = pos, - max_hear_distance = 6, - gain = 0.5 - }) - - self.itemstring = "" - self.object:remove() - - add_effects(pos) - - return - end - - -- water flowing - if def and def.liquidtype == "flowing" then - - -- force applies on acceleration over time, thus multiply - local force = water_force * dtime - -- friction applies on velocity over time, thus exponentiate - local friction = (1.0 + water_friction) ^ dtime - - -- get flow velocity and current vel/acc state - local vec = quick_flow(pos, node) - local a = self.object:get_acceleration() - - self.object:set_acceleration({ - x = a.x + vec.x * force, - y = a.y, - z = a.z + vec.z * force - }) - - -- apply friction to prevent items going too fast, and also to make - -- water flow override previous horizontal momentum more quickly - - local v = self.object:get_velocity() - - -- adjust friction for going against the current - local v_horz = { x = v.x, y = 0, z = v.z } - local v_dir = to_unit_vector(v_horz) - local flow_dot = v_dir.x * vec.x + v_dir.y * vec.y - - -- also maps flow_dot from [-1,0] to [0.5,2.5] - friction = 1.0 + ((friction - 1.0) * (flow_dot + 1.5)) - - self.object:set_velocity({ - x = v.x / friction, - y = v.y / friction, - z = v.z / friction - }) - - return - end - - -- item inside block, move to vacant space - if def and (def.walkable == nil or def.walkable == true) - and (def.collision_box == nil or def.collision_box.type == "regular") - and (def.node_box == nil or def.node_box.type == "regular") then - - local npos = minetest.find_node_near(pos, 1, "air") - - if npos then - self.object:move_to(npos) - end - - self.node_inside = nil -- force get_node - - return - end - - -- Switch locals to node under - node = self.node_under - def = self.def_under - - - -- Slippery node check - if def and def.walkable then - - local slippery = core.get_item_group(node.name, "slippery") - - is_slippery = slippery ~= 0 - - if is_slippery and (math.abs(vel.x) > 0.2 or math.abs(vel.z) > 0.2) then - - -- Horizontal deceleration - local slip_factor = 4.0 / (slippery + 4) - - self.object:set_acceleration({ - x = -vel.x * slip_factor, - y = 0, - z = -vel.z * slip_factor - }) - - elseif vel.y == 0 then - is_moving = false - end - end - - if self.moving_state == is_moving - and self.slippery_state == is_slippery then - return -- No further updates until moving state changes - end - - self.moving_state = is_moving - self.slippery_state = is_slippery - - local a_curr = self.object:get_acceleration() - local v_curr = self.object:get_velocity() - - if is_moving then - - self.object:set_acceleration({ - x = a_curr.x, - y = a_curr.y - gravity, - z = a_curr.z - }) - else - self.object:set_acceleration({x = 0, y = 0, z = 0}) - - -- preserve *some* velocity so items don't get stuck on the very ledges - -- of nodes once they move just enough to leave the hitbox of flowing water - self.object:set_velocity({ - x = v_curr.x / dry_friction, - y = v_curr.y / dry_friction, - z = v_curr.z / dry_friction - }) - end - - --Only collect items if not moving - if is_moving then - return - end - - -- Collect the items around to merge with - local own_stack = ItemStack(self.itemstring) - - if own_stack:get_free_space() == 0 then - return - end - - local objects = core.get_objects_inside_radius(pos, 1.0) - - for k, obj in pairs(objects) do - - local entity = obj:get_luaentity() - - if entity and entity.name == "__builtin:item" then - - if self:try_merge_with(own_stack, obj, entity) then - - own_stack = ItemStack(self.itemstring) - - if own_stack:get_free_space() == 0 then - return - end - end - end - end - end, - - on_punch = function(self, hitter) - - local inv = hitter:get_inventory() - - if inv and self.itemstring ~= "" then - - local left = inv:add_item("main", self.itemstring) - - if left and not left:is_empty() then - self:set_item(left) - return - end - end - - self.itemstring = "" - self.object:remove() - end, -}) diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua index 8f107f2e..a72ab72f 100644 --- a/mods/carts/cart_entity.lua +++ b/mods/carts/cart_entity.lua @@ -35,15 +35,10 @@ function cart_entity:on_rightclick(clicker) end local player_name = clicker:get_player_name() if self.driver and player_name == self.driver then - self.driver = nil carts:manage_attachment(clicker, nil) elseif not self.driver then - self.driver = player_name carts:manage_attachment(clicker, self.object) - - -- player_api does not update the animation - -- when the player is attached, reset to default animation - player_api.set_animation(clicker, "stand") + self.driver = player_name end end @@ -73,8 +68,9 @@ end -- 0.5.x and later: When the driver leaves function cart_entity:on_detach_child(child) if child and child:get_player_name() == self.driver then - self.driver = nil + -- Clean up eye height carts:manage_attachment(child, nil) + self.driver = nil end end @@ -142,7 +138,8 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, end local punch_interval = 1 - if tool_capabilities and tool_capabilities.full_punch_interval then + -- Faulty tool registrations may cause the interval to be set to 0 ! + if tool_capabilities and (tool_capabilities.full_punch_interval or 0) > 0 then punch_interval = tool_capabilities.full_punch_interval end time_from_last_punch = math.min(time_from_last_punch or punch_interval, punch_interval) diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua index a54b5948..36b7e129 100644 --- a/mods/carts/functions.lua +++ b/mods/carts/functions.lua @@ -12,7 +12,7 @@ function carts:manage_attachment(player, obj) end local status = obj ~= nil local player_name = player:get_player_name() - if player_api.player_attached[player_name] == status then + if obj and player:get_attach() == obj then return end player_api.player_attached[player_name] = status @@ -20,6 +20,10 @@ function carts:manage_attachment(player, obj) if status then player:set_attach(obj, "", {x=0, y=-4.5, z=0}, {x=0, y=0, z=0}) player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) + + -- player_api does not update the animation + -- when the player is attached, reset to default animation + player_api.set_animation(player, "stand") else player:set_detach() player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) diff --git a/mods/carts/mod.conf b/mods/carts/mod.conf index 0eab35c3..63347d20 100644 --- a/mods/carts/mod.conf +++ b/mods/carts/mod.conf @@ -1,4 +1,4 @@ name = carts description = Carts (formerly boost_cart) depends = default, player_api -optional_depends = dungeon_loot +optional_depends = dungeon_loot, mesecons diff --git a/mods/castle/autocraft.lua b/mods/castle/autocraft.lua index 903ba47b..b7544f14 100644 --- a/mods/castle/autocraft.lua +++ b/mods/castle/autocraft.lua @@ -10,7 +10,8 @@ minetest.register_node("castle:autocraft", { paramtype = "light", paramtype2 = "facedir", sounds = default.node_sound_wood_defaults(), - +drop = "pipeworks:autocrafter", +})--[[ on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -18,16 +19,6 @@ minetest.register_node("castle:autocraft", { inv:set_size("in", 6 * 4) -- was 8 * 3 meta:set_string("formspec", ---[[ - "size[8,11]" - ..default.gui_bg..default.gui_bg_img..default.gui_slots - .."list[context;craft;2.5,0;3,3]" - .."list[context;in;0,3.5;8,3]" - .."list[current_player;main;0,7;8,4]" - .."label[0,0;AUTOCRAFTER]" - .."label[0.5,1.2;Recipe ->]" - .."label[0,3;Materials:") ---]] "size[10,9]" ..default.gui_bg..default.gui_bg_img..default.gui_slots .."list[context;craft;7,0.5;3,3]" @@ -156,3 +147,4 @@ minetest.register_abm({ end end, }) +]] \ No newline at end of file diff --git a/mods/castle/pillars.lua b/mods/castle/pillars.lua index 94c63c98..0df86d34 100644 --- a/mods/castle/pillars.lua +++ b/mods/castle/pillars.lua @@ -9,8 +9,8 @@ local pillar = { } if minetest.get_modpath("ethereal") then - pillar[7] = {"mushroomtrunk", "Mushroom Trunk", "mushroom_trunk", "ethereal:mushroom_trunk"} - pillar[8] = {"icebrick", "Ice Brick", "brick_ice", "ethereal:icebrick"} + pillar[7] = {"mushroomtrunk", "Mushroom Trunk", "ethereal_mushroom_trunk", "ethereal:mushroom_trunk"} + pillar[8] = {"icebrick", "Ice Brick", "ethereal_brick_ice", "ethereal:icebrick"} end local grp = {cracky = 3} @@ -30,7 +30,7 @@ for n = 1, #pillar do fixed = { {-0.500000,-0.500000,-0.500000,0.500000,-0.375000,0.500000}, {-0.375000,-0.375000,-0.375000,0.375000,-0.125000,0.375000}, - {-0.250000,-0.125000,-0.250000,0.250000,0.500000,0.250000}, + {-0.250000,-0.125000,-0.250000,0.250000,0.500000,0.250000}, }, }, }) @@ -54,8 +54,8 @@ for n = 1, #pillar do node_box = { type = "fixed", fixed = { - {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000}, - {-0.375000,0.062500,-0.375000,0.375000,0.312500,0.375000}, + {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000}, + {-0.375000,0.062500,-0.375000,0.375000,0.312500,0.375000}, {-0.250000,-0.500000,-0.250000,0.250000,0.062500,0.250000}, }, }, @@ -93,5 +93,5 @@ for n = 1, #pillar do {pillar[n][4],pillar[n][4]} }, }) - grp = {cracky = 3, not_in_craft_guide = 1} + --grp = {cracky = 3, not_in_craft_guide = 1} end diff --git a/mods/castle/textures/castle_street_light.png b/mods/castle/textures/castle_street_light.png new file mode 100644 index 00000000..dc3f72ef Binary files /dev/null and b/mods/castle/textures/castle_street_light.png differ diff --git a/mods/castle/town_item.lua b/mods/castle/town_item.lua index 075d3383..b7ff8a95 100644 --- a/mods/castle/town_item.lua +++ b/mods/castle/town_item.lua @@ -1,17 +1,37 @@ +minetest.register_node("castle:light",{ + drawtype = "glasslike", + description = "Light Block", + sunlight_propagates = true, + light_source = 12, + tiles = {"castle_street_light.png"}, + groups = {cracky = 2, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + paramtype = "light" +}) + +minetest.register_craft({ + output = "castle:light", + recipe = { + {"default:stick", "default:glass", "default:stick"}, + {"default:glass", "default:torch", "default:glass"}, + {"default:stick", "default:glass", "default:stick"} + } +}) + minetest.register_node("castle:dungeon_stone", { description = "Dungeon Stone", drawtype = "normal", tiles = {"castle_dungeon_stone.png"}, groups = {cracky = 2}, paramtype = "light", - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults() }) minetest.register_craft({ - type = "shapeless", + --type = "shapeless", output = "castle:dungeon_stone", - recipe = {"default:stonebrick", "default:obsidian"}, + recipe = {{"default:stonebrick", "default:obsidian"}} }) minetest.register_node("castle:crate", { @@ -20,7 +40,8 @@ minetest.register_node("castle:crate", { tiles = { "castle_crate_top.png", "castle_crate_top.png", "castle_crate.png", "castle_crate.png", - "castle_crate.png", "castle_crate.png"}, + "castle_crate.png", "castle_crate.png" + }, groups = {choppy = 3}, paramtype = "light", sounds = default.node_sound_wood_defaults(), @@ -50,14 +71,14 @@ minetest.register_node("castle:crate", { local inv = meta:get_inventory() return inv:is_empty("main") - end, + end }) minetest.register_craft({ output = "castle:crate", recipe = { {"group:wood", "group:wood", "group:wood"}, - {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"} } }) @@ -68,20 +89,18 @@ minetest.register_node("castle:ropes",{ tiles = {"castle_ropes.png"}, groups = {choppy = 3, snappy = 3, oddly_breakable_by_hand = 3,flammable = 1}, paramtype = "light", + use_texture_alpha = "clip", + paramtype2 = "facedir", climbable = true, walkable = false, node_box = { type = "fixed", - fixed = { - {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, - }, + fixed = {{-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}} }, selection_box = { type = "fixed", - fixed = { - {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, - }, - }, + fixed = {{-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}} + } }) minetest.register_craft({ @@ -89,6 +108,6 @@ minetest.register_craft({ recipe = { {"farming:string"}, {"farming:string"}, - {"farming:string"}, + {"farming:string"} } }) diff --git a/mods/cloud_items/README.md b/mods/cloud_items/README.md index 6a9dc245..d99880cc 100644 --- a/mods/cloud_items/README.md +++ b/mods/cloud_items/README.md @@ -5,6 +5,7 @@ [![Build status](https://github.com/minetest-mods/cloud_items/workflows/build/badge.svg)](https://github.com/minetest-mods/cloud_items/actions) [![ContentDB](https://content.minetest.net/packages/Panquesito7/cloud_items/shields/downloads/)](https://content.minetest.net/packages/Panquesito7/cloud_items/) [![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) +[![Donate](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/Panquesito7/donate) Adds powerful cloud tools for Minetest. Stronger than diamond and other materials. diff --git a/mods/cloud_items/car.lua b/mods/cloud_items/car.lua index 08a42d91..870528d6 100644 --- a/mods/cloud_items/car.lua +++ b/mods/cloud_items/car.lua @@ -1,8 +1,12 @@ -- Code from the Vehicle Mash mod (WTFPL license) + +-- Translation support +local S = minetest.get_translator("cloud_items") + local name = "car_cloud" local definition = ... -definition.description = "Cloud car" +definition.description = S("Cloud car") definition.inventory_image = "cloud_items_car_cloud_inventory.png" definition.wield_image = "cloud_items_car_cloud_inventory.png" definition.textures = {"cloud_items_car_cloud.png"} diff --git a/mods/cloud_items/init.lua b/mods/cloud_items/init.lua index c3bec8ab..bd127ed5 100644 --- a/mods/cloud_items/init.lua +++ b/mods/cloud_items/init.lua @@ -528,6 +528,9 @@ local ship_def = { terrain_type = 3, max_speed_forward = 10, max_speed_reverse = 7, + max_speed_upwards = 5, + max_speed_downwards = 3.5, + accel = 4, braking = 5, turn_speed = 6, @@ -549,8 +552,8 @@ local ship_def = { } -- Cloud ship (based on the Vehicle Mash boat) -local boat_enabled = minetest.settings:get_bool("cloud_items.enable_cloud_car") -if boat_enabled or boat_enabled == nil then +local ship_enabled = minetest.settings:get_bool("cloud_items.enable_cloud_ship") +if ship_enabled or ship_enabled == nil then loadfile(minetest.get_modpath(minetest.get_current_modname()) .. "/ship.lua")(table.copy(ship_def)) end @@ -596,7 +599,7 @@ local car_def = { } -- Cloud car (similar from the CAR01 from Vehicle Mash) -local car_enabled = minetest.settings:get_bool("cloud_items.enable_cloud_ship") +local car_enabled = minetest.settings:get_bool("cloud_items.enable_cloud_car") if car_enabled or car_enabled == nil then loadfile(minetest.get_modpath(minetest.get_current_modname()) .. "/car.lua")(table.copy(car_def)) end diff --git a/mods/cloud_items/locale/cloud_items.es.tr b/mods/cloud_items/locale/cloud_items.es.tr index ad074ee4..eec6b79d 100644 --- a/mods/cloud_items/locale/cloud_items.es.tr +++ b/mods/cloud_items/locale/cloud_items.es.tr @@ -28,7 +28,7 @@ Decorative cloud Slab=Losa de Nube decorativa Inner decorative cloud Stair=Escalera interior de Nube decorativa Outer decorative cloud Stair=Escalera exterior de Nube decorativa Cloud Microblock=Microbloque de nube -Cloud Slope= +Cloud Slope=Ladera de nube Cloud Panel=Panel de nube Cloud Stairs=Escalera de nube Decorative cloud Microblock=Microbloque de nube decorativa @@ -37,4 +37,5 @@ Decorative cloud Panel=Barre en nuage decorativa Decorative cloud Stairs=Escalera de nube decorativa Cloud multitool=Multiherramienta de nube Cloud car=Carro de nube +Cloud ship=Nave de nube Cloud Gauntlets=Guanteletes de nube diff --git a/mods/cloud_items/locale/template.txt b/mods/cloud_items/locale/template.txt index c5cf5a20..a398bd1a 100644 --- a/mods/cloud_items/locale/template.txt +++ b/mods/cloud_items/locale/template.txt @@ -37,4 +37,5 @@ Decorative cloud Panel= Decorative cloud Stairs= Cloud multitool= Cloud car= +Cloud ship= Cloud Gauntlets= diff --git a/mods/cloud_items/ship.lua b/mods/cloud_items/ship.lua index f1c79e49..19a096d7 100644 --- a/mods/cloud_items/ship.lua +++ b/mods/cloud_items/ship.lua @@ -1,8 +1,12 @@ -- Code from the Vehicle Mash mod (WTFPL license) + +-- Translation support +local S = minetest.get_translator("cloud_items") + local name = "cloud_ship" local definition = ... -definition.description = "Cloud ship" +definition.description = S("Cloud ship") definition.inventory_image = "cloud_items_cloud_ship_inventory.png" definition.wield_image = "cloud_items_cloud_ship_inventory.png" definition.mesh = "cloud_items_cloud_ship.obj" diff --git a/mods/cottages/nodes_anvil.lua b/mods/cottages/nodes_anvil.lua index cfe04c3a..0b7149ca 100644 --- a/mods/cottages/nodes_anvil.lua +++ b/mods/cottages/nodes_anvil.lua @@ -9,6 +9,12 @@ local S = cottages.S +-- disable repair with anvil by setting a message for the item in question +cottages.forbid_repair = {} +-- example for hammer no longer beeing able to repair the hammer +--cottages.forbid_repair["cottages:hammer"] = 'The hammer is too complex for repairing.' + + -- the hammer for the anvil minetest.register_tool("cottages:hammer", { description = S("Steel hammer for repairing tools on the anvil"), @@ -138,6 +144,12 @@ minetest.register_node("cottages:anvil", { S('The workpiece slot is for damaged tools only.')); return 0; end + if( listname=='input' + and cottages.forbid_repair[ stack:get_name() ]) then + minetest.chat_send_player( player:get_player_name(), + S(cottages.forbid_repair[ stack:get_name() ])); + return 0; + end return stack:get_count() end, @@ -181,6 +193,14 @@ minetest.register_node("cottages:anvil", { -- 65535 is max damage local damage_state = 40-math.floor(input:get_wear()/1638); + -- just to make sure that it really can't get repaired if it should not + -- (if the check of placing the item in the input slot failed somehow) + if( puncher and name and cottages.forbid_repair[ input:get_name() ]) then + minetest.chat_send_player( name, + S(cottages.forbid_repair[ input:get_name() ])); + return; + end + local tool_name = input:get_name(); local hud_image = ""; if( tool_name diff --git a/mods/cottages/nodes_water.lua b/mods/cottages/nodes_water.lua index 44e41192..19847798 100644 --- a/mods/cottages/nodes_water.lua +++ b/mods/cottages/nodes_water.lua @@ -117,7 +117,7 @@ minetest.register_node("cottages:water_gen", { paramtype = "light", paramtype2 = "facedir", is_ground_content = false, - groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + groups = {tree = 1, choppy = 2, cracky = 1, flammable = 2}, sounds = cottages.sounds.wood, node_box = { type = "fixed", @@ -178,8 +178,14 @@ minetest.register_node("cottages:water_gen", { can_dig = function(pos,player) local meta = minetest.get_meta(pos); local inv = meta:get_inventory() - return inv:is_empty("main") and - default.can_interact_with_node(player, pos) + local bucket = meta:get_string("bucket") + local start = meta:get_string("fillstarttime") + return inv:is_empty("main") + and default.can_interact_with_node(player, pos) + and (not(bucket) or bucket == "") + and ((not(start) or start == "" or + (minetest.get_us_time()/1000000) - tonumber(start) + >= cottages.water_fill_time -2)) end, -- no inventory move allowed allow_metadata_inventory_move = function(pos, from_list, from_index, @@ -213,7 +219,7 @@ minetest.register_node("cottages:water_gen", { cottages.switch_public(pos, formname, fields, sender, 'tree trunk well') end, -- punch to place and retrieve bucket - on_punch = function(pos, node, puncher) + on_punch = function(pos, node, puncher, pointed_thing) if( not( pos ) or not( node ) or not( puncher )) then return end @@ -223,7 +229,8 @@ minetest.register_node("cottages:water_gen", { local owner = meta:get_string("owner") local public = meta:get_string("public") if( name ~= owner and public~="public") then - minetest.chat_send_player( name, S("This tree trunk well is owned by %s. You can't use it."):format(name)) + minetest.chat_send_player( name, + S("This tree trunk well is owned by %s. You can't use it."):format(owner)) return end @@ -233,13 +240,18 @@ minetest.register_node("cottages:water_gen", { -- is the well working on something? (either empty or full bucket) local bucket = meta:get_string("bucket") -- there is a bucket loaded - either empty or full - if( bucket and bucket~="") then + if( bucket and bucket~="" and bucket ~= "bucket:bucket_empty") then if( not(pinv:room_for_item("main", bucket))) then minetest.chat_send_player( puncher:get_player_name(), S("Sorry. You have no room for the bucket. Please free some ".. "space in your inventory first!")) return end + elseif( bucket and bucket == "bucket:bucket_empty") then + minetest.chat_send_player( puncher:get_player_name(), + S("Please wait until your bucket has been filled.")) + -- do not give the empty bucket back immediately + return end -- remove the old entity (either a bucket will be placed now or a bucket taken) @@ -267,8 +279,6 @@ minetest.register_node("cottages:water_gen", { if( wielded and wielded:get_name() and wielded:get_name() == "bucket:bucket_empty") then - -- remove the bucket from the players inventory - pinv:remove_item( "main", "bucket:bucket_empty") -- remember that we got a bucket loaded meta:set_string("bucket", "bucket:bucket_empty") -- create the entity @@ -280,6 +290,8 @@ minetest.register_node("cottages:water_gen", { minetest.after(cottages.water_fill_time, cottages.water_gen_fill_bucket, pos) -- the bucket will only be filled if the water ran long enough meta:set_string("fillstarttime", tostring(minetest.get_us_time()/1000000)) + -- remove the bucket from the players inventory + pinv:remove_item( "main", "bucket:bucket_empty") return; end -- buckets can also be emptied here diff --git a/mods/doors/init.lua b/mods/doors/init.lua index df12536b..96e8e7e2 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -1,12 +1,4 @@ ---[[ - -Copyright (C) 2012 PilzAdam - modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor) -Copyright (C) 2015 - Auke Kok - ---]] - -- our API object doors = { mod = "redo", @@ -14,52 +6,90 @@ doors = { registered_trapdoors = {} } + +local function replace_old_owner_information(pos) + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("doors_owner") + + if owner and owner ~= "" then + meta:set_string("owner", owner) + meta:set_string("doors_owner", "") + end +end + + -- returns an object to a door object or nil function doors.get(pos) + local node_name = minetest.get_node(pos).name + if doors.registered_doors[node_name] then + -- A normal upright door return { + pos = pos, + open = function(self, player) + if self:state() then return false end + return doors.door_toggle(self.pos, nil, player) end, + close = function(self, player) + if not self:state() then return false end + return doors.door_toggle(self.pos, nil, player) end, + toggle = function(self, player) return doors.door_toggle(self.pos, nil, player) end, + state = function(self) + local state = minetest.get_meta(self.pos):get_int("state") + return state %2 == 1 end } + elseif doors.registered_trapdoors[node_name] then + -- A trapdoor return { + pos = pos, + open = function(self, player) + if self:state() then return false end + return doors.trapdoor_toggle(self.pos, nil, player) end, + close = function(self, player) + if not self:state() then return false end + return doors.trapdoor_toggle(self.pos, nil, player) end, + toggle = function(self, player) return doors.trapdoor_toggle(self.pos, nil, player) end, + state = function(self) return minetest.get_node(self.pos).name:sub(-5) == "_open" end @@ -69,6 +99,7 @@ function doors.get(pos) end end + -- this hidden node is placed on top of the bottom, and prevents -- nodes from being placed in the top half of the door. minetest.register_node("doors:hidden", { @@ -79,6 +110,7 @@ minetest.register_node("doors:hidden", { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, + use_texture_alpha = "clip", -- has to be walkable for falling nodes to stop falling. walkable = true, pointable = false, @@ -92,51 +124,57 @@ minetest.register_node("doors:hidden", { -- 1px transparent block inside door hinge near node top. node_box = { type = "fixed", - fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, + fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32} }, -- collision_box needed otherise selection box would be full node size collision_box = { type = "fixed", - fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32}, - }, + fixed = {-15/32, 13/32, -15/32, -13/32, 1/2, -13/32} + } }) + -- table used to aid door opening/closing local transform = { { { v = "_a", param2 = 3 }, { v = "_a", param2 = 0 }, { v = "_a", param2 = 1 }, - { v = "_a", param2 = 2 }, + { v = "_a", param2 = 2 } }, { { v = "_b", param2 = 1 }, { v = "_b", param2 = 2 }, { v = "_b", param2 = 3 }, - { v = "_b", param2 = 0 }, + { v = "_b", param2 = 0 } }, { { v = "_b", param2 = 1 }, { v = "_b", param2 = 2 }, { v = "_b", param2 = 3 }, - { v = "_b", param2 = 0 }, + { v = "_b", param2 = 0 } }, { { v = "_a", param2 = 3 }, { v = "_a", param2 = 0 }, { v = "_a", param2 = 1 }, - { v = "_a", param2 = 2 }, - }, + { v = "_a", param2 = 2 } + } } + function doors.door_toggle(pos, node, clicker) + local meta = minetest.get_meta(pos) ; if not meta then return false end + node = node or minetest.get_node(pos) + local def = minetest.registered_nodes[node.name] local name = def.door.name - local state = meta:get_string("state") + if state == "" then + -- fix up lvm-placed right-hinged doors, default closed if node.name:sub(-2) == "_b" then state = 2 @@ -147,9 +185,13 @@ function doors.door_toggle(pos, node, clicker) state = tonumber(state) end + replace_old_owner_information(pos) + if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then - local owner = meta:get_string("doors_owner") + + local owner = meta:get_string("owner") local prot = meta:get_string("doors_protected") + if prot ~= "" then if minetest.is_protected(pos, clicker:get_player_name()) then @@ -165,6 +207,7 @@ function doors.door_toggle(pos, node, clicker) end local old = state + -- until Lua-5.2 we have no bitwise operators :( if state % 2 == 1 then state = state - 1 @@ -182,15 +225,19 @@ function doors.door_toggle(pos, node, clicker) end if state % 2 == 0 then - minetest.sound_play(def.door.sounds[1], {pos = pos, gain = 0.3, max_hear_distance = 10}) + + minetest.sound_play(def.door.sounds[1], + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) else - minetest.sound_play(def.door.sounds[2], {pos = pos, gain = 0.3, max_hear_distance = 10}) + minetest.sound_play(def.door.sounds[2], + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) end minetest.swap_node(pos, { - name = name .. transform[state + 1][dir+1].v, - param2 = transform[state + 1][dir+1].param2 + name = name .. transform[state + 1][dir + 1].v, + param2 = transform[state + 1][dir + 1].param2 }) + meta:set_int("state", state) return true @@ -198,32 +245,46 @@ end local function on_place_node(place_to, newnode, placer, oldnode, itemstack, pointed_thing) + -- Run script hook local _, callback + for _, callback in pairs(minetest.registered_on_placenodes) do + -- Deepcopy pos, node and pointed_thing because callback can modify them local place_to_copy = {x = place_to.x, y = place_to.y, z = place_to.z} - local newnode_copy = {name = newnode.name, param1 = newnode.param1, param2 = newnode.param2} - local oldnode_copy = {name = oldnode.name, param1 = oldnode.param1, param2 = oldnode.param2} + local newnode_copy = { + name = newnode.name, param1 = newnode.param1, param2 = newnode.param2} + local oldnode_copy = { + name = oldnode.name, param1 = oldnode.param1, param2 = oldnode.param2} local pointed_thing_copy = { - type = pointed_thing.type, + type = pointed_thing.type, above = vector.new(pointed_thing.above), under = vector.new(pointed_thing.under), - ref = pointed_thing.ref, + ref = pointed_thing.ref } - callback(place_to_copy, newnode_copy, placer, oldnode_copy, itemstack, pointed_thing_copy) + + callback(place_to_copy, newnode_copy, placer, oldnode_copy, itemstack, + pointed_thing_copy) end end + local function can_dig_door(pos, digger) + + replace_old_owner_information(pos) + local digger_name = digger and digger:get_player_name() + if digger_name and minetest.get_player_privs(digger_name).protection_bypass then return true end - return minetest.get_meta(pos):get_string("doors_owner") == digger_name + + return minetest.get_meta(pos):get_string("owner") == digger_name end function doors.register(name, def) + if not name:find(":") then name = "doors:" .. name end @@ -232,31 +293,39 @@ function doors.register(name, def) minetest.register_lbm({ name = ":doors:replace_" .. name:gsub(":", "_"), nodenames = {name.."_b_1", name.."_b_2"}, + action = function(pos, node) + local l = tonumber(node.name:sub(-1)) local meta = minetest.get_meta(pos) local h = meta:get_int("right") + 1 local p2 = node.param2 local replace = { - { { type = "a", state = 0 }, { type = "a", state = 3 } }, - { { type = "b", state = 1 }, { type = "b", state = 2 } } + {{ type = "a", state = 0 }, { type = "a", state = 3 }}, + {{ type = "b", state = 1 }, { type = "b", state = 2 }} } local new = replace[l][h] + -- retain infotext and doors_owner fields minetest.swap_node(pos, {name = name .. "_" .. new.type, param2 = p2}) meta:set_int("state", new.state) + -- properly place doors:hidden at the right spot local p3 = p2 + if new.state >= 2 then p3 = (p3 + 3) % 4 end + if new.state % 2 == 1 then + if new.state >= 2 then p3 = (p3 + 1) % 4 else p3 = (p3 + 3) % 4 end end + -- wipe meta on top node as it's unused minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name = "doors:hidden", param2 = p3}) @@ -269,7 +338,8 @@ function doors.register(name, def) groups = table.copy(def.groups), on_place = function(itemstack, placer, pointed_thing) - local pos = nil + + local pos if not pointed_thing.type == "node" then return itemstack @@ -277,9 +347,12 @@ function doors.register(name, def) local node = minetest.get_node(pointed_thing.under) local pdef = minetest.registered_nodes[node.name] - if pdef and pdef.on_rightclick and - not (placer and placer:is_player() and - placer:get_player_control().sneak) then + + if pdef + and pdef.on_rightclick + and not (placer and placer:is_player() + and placer:get_player_control().sneak) then + return pdef.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) end @@ -290,12 +363,13 @@ function doors.register(name, def) pos = pointed_thing.above node = minetest.get_node(pos) pdef = minetest.registered_nodes[node.name] + if not pdef or not pdef.buildable_to then return itemstack end end - local above = { x = pos.x, y = pos.y + 1, z = pos.z } + local above = {x = pos.x, y = pos.y + 1, z = pos.z} local top_node = minetest.get_node_or_nil(above) local topdef = top_node and minetest.registered_nodes[top_node.name] @@ -304,6 +378,7 @@ function doors.register(name, def) end local pn = placer and placer:get_player_name() or "" + if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then return itemstack end @@ -311,19 +386,20 @@ function doors.register(name, def) local dir = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 local ref = { - { x = -1, y = 0, z = 0 }, - { x = 0, y = 0, z = 1 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 0, z = -1 }, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = -1} } local aside = { x = pos.x + ref[dir + 1].x, y = pos.y + ref[dir + 1].y, - z = pos.z + ref[dir + 1].z, + z = pos.z + ref[dir + 1].z } local state = 0 + if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then state = state + 2 minetest.set_node(pos, {name = name .. "_b", param2 = dir}) @@ -334,31 +410,40 @@ function doors.register(name, def) end local meta = minetest.get_meta(pos) + meta:set_int("state", state) if def.protected then + local pn = placer:get_player_name() - meta:set_string("doors_owner", pn) + + meta:set_string("owner", pn) meta:set_string("infotext", "Owned by " .. pn) end - if not minetest.setting_getbool("creative_mode") then + if not minetest.is_creative_enabled(pn) then itemstack:take_item() end - on_place_node(pos, minetest.get_node(pos), placer, node, itemstack, pointed_thing) + minetest.sound_play(def.sounds.place, {pos = pos}, true) + + on_place_node(pos, minetest.get_node(pos), placer, node, itemstack, + pointed_thing) return itemstack end }) + def.inventory_image = nil if def.recipe then + minetest.register_craft({ output = name, - recipe = def.recipe, + recipe = def.recipe }) end + def.recipe = nil if not def.sounds then @@ -376,29 +461,40 @@ function doors.register(name, def) def.groups.not_in_creative_inventory = 1 def.groups.door = 1 def.drop = name - def.door = { - name = name, - sounds = { def.sound_close, def.sound_open }, - } + def.door = {name = name, sounds = {def.sound_close, def.sound_open}} - def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - doors.door_toggle(pos, node, clicker) - return itemstack + if not def.on_rightclick then + + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + + doors.door_toggle(pos, node, clicker) + + return itemstack + end end + def.after_dig_node = function(pos, node, meta, digger) + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + minetest.check_for_falling({x = pos.x, y = pos.y + 1, z = pos.z}) end - def.on_rotate = false + + def.on_rotate = function(pos, node, user, mode, new_param2) + return false + end if def.protected then def.can_dig = can_dig_door def.on_blast = function() end else def.on_blast = function(pos, intensity) + minetest.remove_node(pos) + -- hidden node doesn't get blasted away. minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + return {name} end end @@ -411,95 +507,137 @@ function doors.register(name, def) def.paramtype = "light" def.paramtype2 = "facedir" def.sunlight_propagates = true + def.use_texture_alpha = "clip" def.walkable = true def.is_ground_content = false def.buildable_to = false - def.selection_box = { type = "fixed", fixed = { -1/2,-1/2,-1/2,1/2,3/2,-6/16} } - def.collision_box = { type = "fixed", fixed = { -1/2,-1/2,-1/2,1/2,3/2,-6/16} } + def.selection_box = {type = "fixed", fixed = { -1/2,-1/2,-1/2,1/2,3/2,-6/16}} + def.collision_box = {type = "fixed", fixed = { -1/2,-1/2,-1/2,1/2,3/2,-6/16}} def.mesh = "door_a.obj" - minetest.register_node(":" .. name .. "_a", def) + minetest.register_node(":" .. name .. "_a", table.copy(def)) + + minetest.register_alias(name .. "_c", name .. "_b") def.mesh = "door_b.obj" - minetest.register_node(":" .. name .. "_b", def) + minetest.register_node(":" .. name .. "_b", table.copy(def)) + + minetest.register_alias(name .. "_d", name .. "_a") doors.registered_doors[name .. "_a"] = true doors.registered_doors[name .. "_b"] = true end + doors.register("door_wood", { - tiles = {{ name = "doors_door_wood.png", backface_culling = true }}, - description = "Wooden Door", - inventory_image = "doors_item_wood.png", - groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, - recipe = { - {"group:wood", "group:wood"}, - {"group:wood", "group:wood"}, - {"group:wood", "group:wood"}, - } + tiles = {{name = "doors_door_wood.png", backface_culling = true}}, + description = "Wooden Door", + inventory_image = "doors_item_wood.png", + groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + recipe = { + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"} + } }) + doors.register("door_steel", { - tiles = {{ name = "doors_door_steel.png", backface_culling = true }}, - description = "Steel Door", - inventory_image = "doors_item_steel.png", - protected = true, - groups = { cracky = 1, level = 2 }, - sounds = default.node_sound_stone_defaults(), - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - recipe = { - {"default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot"}, - } + tiles = {{name = "doors_door_steel.png", backface_culling = true}}, + description = "Steel Door", + inventory_image = "doors_item_steel.png", + protected = true, + groups = {node = 1, cracky = 1, level = 2}, + sounds = default.node_sound_stone_defaults(), + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"} + } }) + doors.register("door_glass", { - tiles = { "doors_door_glass.png"}, - description = "Glass Door", - inventory_image = "doors_item_glass.png", - groups = { cracky = 3, oddly_breakable_by_hand = 3 }, - sounds = default.node_sound_glass_defaults(), - sound_open = "doors_glass_door_open", - sound_close = "doors_glass_door_close", - recipe = { - {"default:glass", "default:glass"}, - {"default:glass", "default:glass"}, - {"default:glass", "default:glass"}, - } + tiles = { "doors_door_glass.png"}, + description = "Glass Door", + inventory_image = "doors_item_glass.png", + groups = {node = 1, cracky = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_glass_defaults(), + sound_open = "doors_glass_door_open", + sound_close = "doors_glass_door_close", + recipe = { + {"default:glass", "default:glass"}, + {"default:glass", "default:glass"}, + {"default:glass", "default:glass"} + } }) + doors.register("door_obsidian_glass", { - tiles = { "doors_door_obsidian_glass.png" }, - description = "Obsidian Glass Door", - inventory_image = "doors_item_obsidian_glass.png", - groups = { cracky = 3 }, - sounds = default.node_sound_glass_defaults(), - sound_open = "doors_glass_door_open", - sound_close = "doors_glass_door_close", - recipe = { - {"default:obsidian_glass", "default:obsidian_glass"}, - {"default:obsidian_glass", "default:obsidian_glass"}, - {"default:obsidian_glass", "default:obsidian_glass"}, - }, + tiles = { "doors_door_obsidian_glass.png" }, + description = "Obsidian Glass Door", + inventory_image = "doors_item_obsidian_glass.png", + groups = {node = 1, cracky = 3}, + sounds = default.node_sound_glass_defaults(), + sound_open = "doors_glass_door_open", + sound_close = "doors_glass_door_close", + recipe = { + {"default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass"}, + {"default:obsidian_glass", "default:obsidian_glass"} + } }) + +-- special doors (CC0 textures by Phiwari123 and IceAgeComing) +doors.register("door_phiwari", { + tiles = {{name = "doors_door_phiwari.png", backface_culling = true}}, + description = "Phiwari's Wooden Door", + inventory_image = "doors_item_phiwari.png", + groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + recipe = { + {"group:wood", "default:obsidian_glass"}, + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"} + } +}) + + +doors.register("door_iceage", { + tiles = {{name = "doors_door_iceage.png", backface_culling = true}}, + description = "IceAge's Wooden Door", + inventory_image = "doors_item_iceage.png", + groups = {node = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + recipe = { + {"group:wood", "default:iron_lump"}, + {"group:wood", "group:wood"}, + {"group:wood", "group:wood"} + } +}) + + -- Capture mods using the old API as best as possible. function doors.register_door(name, def) + if def.only_placer_can_open then def.protected = true end + def.only_placer_can_open = nil local i = name:find(":") local modname = name:sub(1, i - 1) + if not def.tiles then + if def.protected then def.tiles = {{name = "doors_door_steel.png", backface_culling = true}} else def.tiles = {{name = "doors_door_wood.png", backface_culling = true}} end + minetest.log("warning", modname .. " registered door \"" .. name .. "\" " .. "using deprecated API method \"doors.register_door()\" but " .. "did not provide the \"tiles\" parameter. A fallback tiledef " .. @@ -512,11 +650,17 @@ end ----trapdoor---- function doors.trapdoor_toggle(pos, node, clicker) + + replace_old_owner_information(pos) + node = node or minetest.get_node(pos) + if clicker and not minetest.check_player_privs(clicker, "protection_bypass") then + local meta = minetest.get_meta(pos) ; if not meta then return false end - local owner = meta:get_string("doors_owner") + local owner = meta:get_string("owner") local prot = meta:get_string("doors_protected") + if prot ~= "" then if minetest.is_protected(pos, clicker:get_player_name()) then @@ -534,15 +678,28 @@ function doors.trapdoor_toggle(pos, node, clicker) local def = minetest.registered_nodes[node.name] if string.sub(node.name, -5) == "_open" then - minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 10}) - minetest.swap_node(pos, {name = string.sub(node.name, 1, string.len(node.name) - 5), param1 = node.param1, param2 = node.param2}) + + minetest.sound_play(def.sound_close, + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) + + minetest.swap_node(pos, { + name = string.sub(node.name, 1, string.len(node.name) - 5), + param1 = node.param1, param2 = node.param2 + }) else - minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 10}) - minetest.swap_node(pos, {name = node.name .. "_open", param1 = node.param1, param2 = node.param2}) + minetest.sound_play(def.sound_open, + {pos = pos, gain = 0.3, max_hear_distance = 10}, true) + + minetest.swap_node(pos, { + name = node.name .. "_open", + param1 = node.param1, param2 = node.param2 + }) end end + function doors.register_trapdoor(name, def) + if not name:find(":") then name = "doors:" .. name end @@ -551,7 +708,9 @@ function doors.register_trapdoor(name, def) local name_opened = name.."_open" def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + doors.trapdoor_toggle(pos, node, clicker) + return itemstack end @@ -559,24 +718,30 @@ function doors.register_trapdoor(name, def) def.drawtype = "nodebox" def.paramtype = "light" def.paramtype2 = "facedir" + def.use_texture_alpha = "clip" def.is_ground_content = false if def.protected then + def.can_dig = can_dig_door def.after_place_node = function(pos, placer, itemstack, pointed_thing) + local pn = placer:get_player_name() local meta = minetest.get_meta(pos) - meta:set_string("doors_owner", pn) + + meta:set_string("owner", pn) meta:set_string("infotext", "Owned by "..pn) - return minetest.setting_getbool("creative_mode") + return minetest.is_creative_enabled(pn) end def.on_blast = function() end else def.on_blast = function(pos, intensity) + minetest.remove_node(pos) - return { name } + + return {name} end end @@ -638,13 +803,14 @@ function doors.register_trapdoor(name, def) doors.registered_trapdoors[name_closed] = true end + doors.register_trapdoor("doors:trapdoor", { description = "Trapdoor", inventory_image = "doors_trapdoor.png", wield_image = "doors_trapdoor.png", tile_front = "doors_trapdoor.png", tile_side = "doors_trapdoor_side.png", - groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1 }, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, door = 1} }) doors.register_trapdoor("doors:trapdoor_steel", { @@ -656,7 +822,7 @@ doors.register_trapdoor("doors:trapdoor_steel", { protected = true, sound_open = "doors_steel_door_open", sound_close = "doors_steel_door_close", - groups = { cracky = 1, level = 2, door = 1 }, + groups = {cracky = 1, level = 2, door = 1} }) minetest.register_craft({ @@ -664,7 +830,7 @@ minetest.register_craft({ recipe = { {"group:wood", "group:wood", "group:wood"}, {"group:wood", "group:wood", "group:wood"}, - {"", "", ""}, + {"", "", ""} } }) @@ -672,11 +838,10 @@ minetest.register_craft({ output = "doors:trapdoor_steel", recipe = { {"default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot"} } }) - -----key tool----- minetest.register_tool("doors:key", { @@ -692,9 +857,11 @@ minetest.register_tool("doors:key", { return end + replace_old_owner_information(pos) + local player_name = user:get_player_name() local meta = minetest.get_meta(pos) ; if not meta then return end - local owner = meta:get_string("doors_owner") + local owner = meta:get_string("owner") local prot = meta:get_string("doors_protected") local ok = 0 local infotext = "" @@ -728,6 +895,7 @@ minetest.register_tool("doors:key", { -- flip protected to normal if player_name == prot then + infotext = " " owner = "" prot = "" ok = 1 @@ -737,16 +905,16 @@ minetest.register_tool("doors:key", { if ok == 1 then meta:set_string("infotext", infotext) - meta:set_string("doors_owner", owner) + meta:set_string("owner", owner) meta:set_string("doors_protected", prot) - if not minetest.setting_getbool("creative_mode") then + if not minetest.is_creative_enabled(player_name) then itemstack:add_wear(65535 / 50) end end return itemstack - end, + end }) minetest.register_craft({ @@ -754,7 +922,7 @@ minetest.register_craft({ recipe = { {"", "", "default:steel_ingot"}, {"default:steel_ingot", "default:steel_ingot", ""}, - {"default:steel_ingot", "default:steel_ingot", ""}, + {"default:steel_ingot", "default:steel_ingot", ""} } }) @@ -764,33 +932,50 @@ minetest.register_craft({ --end ----fence gate---- +local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0 function doors.register_fencegate(name, def) + local fence = { description = def.description, drawtype = "mesh", - tiles = { def.texture }, + tiles = {}, paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, is_ground_content = false, drop = name .. "_closed", - connect_sides = { "left", "right" }, + connect_sides = {"left", "right"}, groups = def.groups, sounds = def.sounds, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local node_def = minetest.registered_nodes[node.name] + minetest.swap_node(pos, {name = node_def.gate, param2 = node.param2}) + minetest.sound_play(node_def.sound, {pos = pos, gain = 0.3, - max_hear_distance = 8}) + max_hear_distance = 8}, true) + return itemstack end, + selection_box = { type = "fixed", - fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}, - }, + fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4} + } } + if type(def.texture) == "string" then + fence.tiles[1] = {name = def.texture, backface_culling = true} + elseif def.texture.backface_culling == nil then + fence.tiles[1] = table.copy(def.texture) + fence.tiles[1].backface_culling = true + else + fence.tiles[1] = def.texture + end + if not fence.sounds then fence.sounds = default.node_sound_wood_defaults() end @@ -798,23 +983,25 @@ function doors.register_fencegate(name, def) fence.groups.fence = 1 local fence_closed = table.copy(fence) + fence_closed.mesh = "doors_fencegate_closed.obj" fence_closed.gate = name .. "_open" fence_closed.sound = "doors_fencegate_open" fence_closed.collision_box = { type = "fixed", - fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}, + fixed = {-1/2, -1/2, -1/4, 1/2, 1/2 + fence_collision_extra, 1/4} } local fence_open = table.copy(fence) + fence_open.mesh = "doors_fencegate_open.obj" fence_open.gate = name .. "_closed" fence_open.sound = "doors_fencegate_close" fence_open.groups.not_in_creative_inventory = 1 fence_open.collision_box = { type = "fixed", - fixed = {{-1/2, -1/2, -1/4, -3/8, 1/2, 1/4}, - {-5/8, -3/8, -14/16, -3/8, 1/2, 0}}, -- 1/2 was 3/8 + fixed = {{-1/2, -1/2, -1/8, -3/8, 1/2 + fence_collision_extra, 1/8}, + {-1/2, -3/8, -1/2, -3/8, 3/8, 0}}, } minetest.register_node(":" .. name .. "_closed", fence_closed) @@ -829,6 +1016,7 @@ function doors.register_fencegate(name, def) }) end + doors.register_fencegate("doors:gate_wood", { description = "Wooden Fence Gate", texture = "default_wood.png", @@ -864,47 +1052,46 @@ doors.register_fencegate("doors:gate_aspen_wood", { groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} }) - ----fuels---- minetest.register_craft({ type = "fuel", recipe = "doors:trapdoor", - burntime = 7, + burntime = 7 }) minetest.register_craft({ type = "fuel", recipe = "doors:door_wood", - burntime = 14, + burntime = 14 }) minetest.register_craft({ type = "fuel", recipe = "doors:gate_wood_closed", - burntime = 7, + burntime = 7 }) minetest.register_craft({ type = "fuel", recipe = "doors:gate_acacia_wood_closed", - burntime = 8, + burntime = 8 }) minetest.register_craft({ type = "fuel", recipe = "doors:gate_junglewood_closed", - burntime = 9, + burntime = 9 }) minetest.register_craft({ type = "fuel", recipe = "doors:gate_pine_wood_closed", - burntime = 6, + burntime = 6 }) minetest.register_craft({ type = "fuel", recipe = "doors:gate_aspen_wood_closed", - burntime = 5, + burntime = 5 }) diff --git a/mods/doors/textures/doors_door_iceage.png b/mods/doors/textures/doors_door_iceage.png new file mode 100644 index 00000000..39cb956b Binary files /dev/null and b/mods/doors/textures/doors_door_iceage.png differ diff --git a/mods/doors/textures/doors_door_phiwari.png b/mods/doors/textures/doors_door_phiwari.png new file mode 100644 index 00000000..5a95fa58 Binary files /dev/null and b/mods/doors/textures/doors_door_phiwari.png differ diff --git a/mods/doors/textures/doors_item_iceage.png b/mods/doors/textures/doors_item_iceage.png new file mode 100644 index 00000000..3b71d834 Binary files /dev/null and b/mods/doors/textures/doors_item_iceage.png differ diff --git a/mods/doors/textures/doors_item_phiwari.png b/mods/doors/textures/doors_item_phiwari.png new file mode 100644 index 00000000..aa634f70 Binary files /dev/null and b/mods/doors/textures/doors_item_phiwari.png differ diff --git a/mods/farming/compatibility.lua b/mods/farming/compatibility.lua index 9841f4c8..1fdf6203 100644 --- a/mods/farming/compatibility.lua +++ b/mods/farming/compatibility.lua @@ -15,13 +15,6 @@ minetest.override_item("default:apple", { leafdecay = 3, leafdecay_drop = 1} }) -if minetest.registered_nodes["flowers:mushroom_brown"] then -minetest.override_item("flowers:mushroom_brown", { - light_source = 1, - groups = {food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 2} -}) -end - --= Aliases -- Banana @@ -33,9 +26,9 @@ else minetest.register_node(":ethereal:banana", { description = S("Banana"), drawtype = "torchlike", - tiles = {"banana_single.png"}, - inventory_image = "banana_single.png", - wield_image = "banana_single.png", + tiles = {"farming_banana_single.png"}, + inventory_image = "farming_banana_single.png", + wield_image = "farming_banana_single.png", paramtype = "light", sunlight_propagates = true, walkable = false, @@ -50,9 +43,9 @@ else minetest.register_node(":ethereal:bananaleaves", { description = S("Banana Leaves"), - tiles = {"banana_leaf.png"}, - inventory_image = "banana_leaf.png", - wield_image = "banana_leaf.png", + tiles = {"farming_banana_leaf.png"}, + inventory_image = "farming_banana_leaf.png", + wield_image = "farming_banana_leaf.png", paramtype = "light", waving = 1, groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, @@ -148,8 +141,8 @@ if eth then else minetest.register_craftitem(":ethereal:strawberry", { description = S("Strawberry"), - inventory_image = "strawberry.png", - wield_image = "strawberry.png", + inventory_image = "farming_strawberry.png", + wield_image = "farming_strawberry.png", groups = {food_strawberry = 1, flammable = 2}, on_use = minetest.item_eat(1) }) diff --git a/mods/farming/crops/artichoke.lua b/mods/farming/crops/artichoke.lua new file mode 100644 index 00000000..92143f62 --- /dev/null +++ b/mods/farming/crops/artichoke.lua @@ -0,0 +1,64 @@ +local S = farming.intllib + +-- item definition +minetest.register_craftitem("farming:artichoke", { + description = S("Artichoke"), + inventory_image = "farming_artichoke.png", + groups = {seed = 2, food_artichoke = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:artichoke_1") + end, + on_use = minetest.item_eat(4) +}) + +-- crop definition +local def = { + drawtype = "plantlike", + tiles = {"farming_artichoke_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:artichoke_1", table.copy(def)) + +-- stage 2 +def.tiles = {"farming_artichoke_2.png"} +minetest.register_node("farming:artichoke_2", table.copy(def)) + +-- stage 3 +def.tiles = {"farming_artichoke_3.png"} +minetest.register_node("farming:artichoke_3", table.copy(def)) + +-- stage 4 +def.tiles = {"farming_artichoke_4.png"} +minetest.register_node("farming:artichoke_4", table.copy(def)) + +-- stage 5 (final) +def.tiles = {"farming_artichoke_5.png"} +def.groups.growing = nil +def.drop = { + items = { + {items = {"farming:artichoke 2"}, rarity = 1}, + {items = {"farming:artichoke"}, rarity = 2} + } +} +minetest.register_node("farming:artichoke_5", table.copy(def)) + +-- add to registered_plants +farming.registered_plants["farming:artichoke"] = { + crop = "farming:artichoke", + seed = "farming:artichoke", + minlight = 13, + maxlight = 15, + steps = 5 +} diff --git a/mods/farming/crops/barley.lua b/mods/farming/crops/barley.lua index 65d1f03e..e7f38408 100644 --- a/mods/farming/crops/barley.lua +++ b/mods/farming/crops/barley.lua @@ -28,11 +28,10 @@ minetest.register_craftitem("farming:barley", { -- flour minetest.register_craft({ - type = "shapeless", output = "farming:flour", recipe = { - "farming:barley", "farming:barley", "farming:barley", - "farming:barley", "farming:mortar_pestle" + {"farming:barley", "farming:barley", "farming:barley"}, + {"farming:barley", "farming:mortar_pestle", ""} }, replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} }) diff --git a/mods/farming/crops/beans.lua b/mods/farming/crops/beans.lua index 38d8fa94..59ae2ead 100644 --- a/mods/farming/crops/beans.lua +++ b/mods/farming/crops/beans.lua @@ -81,9 +81,7 @@ minetest.register_craftitem("farming:beans", { -- beans can be used for green dye minetest.register_craft({ output = "dye:green", - recipe = { - {"farming:beans"} - } + recipe = {{"farming:beans"}} }) -- beanpole diff --git a/mods/farming/crops/beetroot.lua b/mods/farming/crops/beetroot.lua index ef57986a..05e0b3a9 100644 --- a/mods/farming/crops/beetroot.lua +++ b/mods/farming/crops/beetroot.lua @@ -21,20 +21,17 @@ minetest.register_craftitem("farming:beetroot_soup", { }) minetest.register_craft({ - type = "shapeless", output = "farming:beetroot_soup", recipe = { - "group:food_beetroot", "group:food_beetroot", - "group:food_beetroot", "group:food_beetroot", - "group:food_beetroot", "group:food_beetroot","group:food_bowl" + {"group:food_beetroot", "group:food_beetroot", "group:food_beetroot"}, + {"group:food_beetroot", "group:food_bowl", "group:food_beetroot"} } }) -- red dye minetest.register_craft({ - type = "shapeless", output = "dye:red", - recipe = {"group:food_beetroot"} + recipe = {{"group:food_beetroot"}} }) local def = { diff --git a/mods/farming/crops/blueberry.lua b/mods/farming/crops/blueberry.lua index e8d83c3a..9ec14b62 100644 --- a/mods/farming/crops/blueberry.lua +++ b/mods/farming/crops/blueberry.lua @@ -36,10 +36,9 @@ minetest.register_craftitem("farming:blueberry_pie", { minetest.register_craft({ output = "farming:blueberry_pie", - type = "shapeless", recipe = { - "group:food_flour", "group:food_sugar", - "group:food_blueberries", "group:food_baking_tray" + {"group:food_flour", "group:food_sugar", "group:food_blueberries"}, + {"group:food_baking_tray", "", ""} }, replacements = {{"group:food_baking_tray", "farming:baking_tray"}} }) @@ -79,7 +78,7 @@ def.drop = { items = { {items = {"farming:blueberries 2"}, rarity = 1}, {items = {"farming:blueberries"}, rarity = 2}, - {items = {"farming:blueberries"}, rarity = 3}, + {items = {"farming:blueberries"}, rarity = 3} } } minetest.register_node("farming:blueberry_4", table.copy(def)) diff --git a/mods/farming/crops/carrot.lua b/mods/farming/crops/carrot.lua index 8be1f4eb..2dd45f3c 100644 --- a/mods/farming/crops/carrot.lua +++ b/mods/farming/crops/carrot.lua @@ -27,9 +27,10 @@ minetest.register_craftitem("farming:carrot_juice", { minetest.register_craft({ output = "farming:carrot_juice", - type = "shapeless", recipe = { - "vessels:drinking_glass", "group:food_carrot", "farming:juicer" + {"group:food_carrot"}, + {"farming:juicer"}, + {"vessels:drinking_glass"} }, replacements = { {"group:food_juicer", "farming:juicer"} diff --git a/mods/farming/crops/chili.lua b/mods/farming/crops/chili.lua index 43345566..95f3a30e 100644 --- a/mods/farming/crops/chili.lua +++ b/mods/farming/crops/chili.lua @@ -20,20 +20,17 @@ minetest.register_craftitem("farming:chili_bowl", { }) minetest.register_craft({ - type = "shapeless", output = "farming:chili_bowl", recipe = { - "group:food_chili_pepper", "group:food_barley", - "group:food_tomato", "group:food_beans", "group:food_bowl" + {"group:food_chili_pepper", "group:food_rice", "group:food_tomato"}, + {"group:food_beans", "group:food_bowl", ""} } }) -- chili can be used for red dye minetest.register_craft({ output = "dye:red", - recipe = { - {"farming:chili_pepper"} - } + recipe = {{"farming:chili_pepper"}} }) -- chili definition diff --git a/mods/farming/crops/cocoa.lua b/mods/farming/crops/cocoa.lua index 72e37d04..1fb3194d 100644 --- a/mods/farming/crops/cocoa.lua +++ b/mods/farming/crops/cocoa.lua @@ -75,9 +75,7 @@ minetest.register_craftitem("farming:cocoa_beans", { minetest.register_craft( { output = "dye:brown 2", - recipe = { - { "farming:cocoa_beans" } - } + recipe = {{"farming:cocoa_beans"}} }) -- chocolate cookie @@ -128,9 +126,7 @@ minetest.register_craft({ minetest.register_craft({ output = "farming:chocolate_dark 9", - recipe = { - {"farming:chocolate_block"} - } + recipe = {{"farming:chocolate_block"}} }) -- cocoa definition @@ -139,15 +135,11 @@ local def = { tiles = {"farming_cocoa_1.png"}, paramtype = "light", walkable = false, - drop = { - items = { - {items = {"farming:cocoa_beans 1"}, rarity = 2}, - } - }, selection_box = { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, + drop = {}, groups = { snappy = 3, flammable = 2, plant = 1, growing = 1, not_in_creative_inventory = 1, leafdecay = 1, leafdecay_drop = 1 diff --git a/mods/farming/crops/coffee.lua b/mods/farming/crops/coffee.lua index f64369c8..aa67c5e3 100644 --- a/mods/farming/crops/coffee.lua +++ b/mods/farming/crops/coffee.lua @@ -34,10 +34,10 @@ minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") minetest.register_craft( { output = "farming:coffee_cup", - type = "shapeless", recipe = { - "vessels:drinking_glass", "group:food_coffee", - "group:water_bucket", "group:food_saucepan"}, + {"group:food_saucepan", "group:food_coffee", "group:water_bucket"}, + {"", "vessels:drinking_glass", ""} + }, replacements = { {"group:water_bucket", "bucket:bucket_empty"}, {"group:food_saucepan", "farming:saucepan"} @@ -47,10 +47,10 @@ minetest.register_craft( { if minetest.get_modpath("bucket_wooden") then minetest.register_craft( { output = "farming:coffee_cup", - type = "shapeless", recipe = { - "vessels:drinking_glass", "group:food_coffee", - "group:water_bucket_wooden", "group:food_saucepan"}, + {"group:food_saucepan", "group:food_coffee", "group:water_bucket_wooden"}, + {"", "vessels:drinking_glass", ""} + }, replacements = { {"group:water_bucket_wooden", "bucket_wooden:bucket_empty"}, {"group:food_saucepan", "farming:saucepan"} diff --git a/mods/farming/crops/corn.lua b/mods/farming/crops/corn.lua index 0999fb99..fe890794 100644 --- a/mods/farming/crops/corn.lua +++ b/mods/farming/crops/corn.lua @@ -32,11 +32,30 @@ minetest.register_craft({ recipe = "group:food_corn" }) +-- popcorn +minetest.register_craftitem("farming:popcorn", { + description = S("Popcorn"), + inventory_image = "farming_popcorn.png", + groups = {food_popcorn = 1, flammable = 2}, + on_use = minetest.item_eat(4) +}) + +minetest.register_craft({ + output = "farming:popcorn", + recipe = { + {"group:food_pot", "group:food_oil", "group:food_corn"} + }, + replacements = { + {"group:food_pot", "farming:pot"}, + {"group:food_oil", "vessels:glass_bottle"} + } +}) + -- cornstarch minetest.register_craftitem("farming:cornstarch", { description = S("Cornstarch"), inventory_image = "farming_cornstarch.png", - groups = {food_cornstarch = 1, flammable = 2} + groups = {food_cornstarch = 1, food_gelatin = 1, food_flammable = 2} }) minetest.register_craft({ @@ -47,7 +66,7 @@ minetest.register_craft({ }, replacements = { {"group:food_mortar_pestle", "farming:mortar_pestle"}, - {"group:food_baking_tray", "farming:baking_tray"}, + {"group:food_baking_tray", "farming:baking_tray"} } }) @@ -72,9 +91,9 @@ minetest.register_node("farming:bottle_ethanol", { minetest.register_craft( { output = "farming:bottle_ethanol", recipe = { - { "vessels:glass_bottle", "group:food_corn", "group:food_corn"}, - { "group:food_corn", "group:food_corn", "group:food_corn"}, - { "group:food_corn", "group:food_corn", "group:food_corn"} + {"group:food_corn", "group:food_corn", "group:food_corn"}, + {"group:food_corn", "vessels:glass_bottle", "group:food_corn"}, + {"group:food_corn", "group:food_corn", "group:food_corn"} } }) @@ -82,7 +101,7 @@ minetest.register_craft({ type = "fuel", recipe = "farming:bottle_ethanol", burntime = 80, - replacements = {{ "farming:bottle_ethanol", "vessels:glass_bottle"}} + replacements = {{"farming:bottle_ethanol", "vessels:glass_bottle"}} }) -- corn definition diff --git a/mods/farming/crops/garlic.lua b/mods/farming/crops/garlic.lua index 162bacec..e1414791 100644 --- a/mods/farming/crops/garlic.lua +++ b/mods/farming/crops/garlic.lua @@ -46,6 +46,7 @@ minetest.register_node("farming:garlic_braid", { inventory_image = "crops_garlic_braid.png", wield_image = "crops_garlic_braid.png", drawtype = "nodebox", + use_texture_alpha = "clip", paramtype = "light", paramtype2 = "facedir", tiles = { diff --git a/mods/farming/crops/grapes.lua b/mods/farming/crops/grapes.lua index 8c5e4586..e0c491d8 100644 --- a/mods/farming/crops/grapes.lua +++ b/mods/farming/crops/grapes.lua @@ -76,9 +76,7 @@ minetest.register_craftitem("farming:grapes", { -- grapes can be used for violet dye minetest.register_craft({ output = "dye:violet", - recipe = { - {"farming:grapes"} - } + recipe = {{"farming:grapes"}} }) -- trellis diff --git a/mods/farming/crops/hemp.lua b/mods/farming/crops/hemp.lua index f8dfd0b5..4cc05e5f 100644 --- a/mods/farming/crops/hemp.lua +++ b/mods/farming/crops/hemp.lua @@ -65,7 +65,7 @@ minetest.register_craft({ type = "fuel", recipe = "farming:hemp_oil", burntime = 20, - replacements = {{ "farming:hemp_oil", "vessels:glass_bottle"}} + replacements = {{"farming:hemp_oil", "vessels:glass_bottle"}} }) -- hemp fibre diff --git a/mods/farming/crops/lettuce.lua b/mods/farming/crops/lettuce.lua index 07ef43ad..bbd7138d 100644 --- a/mods/farming/crops/lettuce.lua +++ b/mods/farming/crops/lettuce.lua @@ -48,7 +48,7 @@ def.groups.growing = nil def.drop = { items = { {items = {'farming:lettuce 2'}, rarity = 1}, - {items = {'farming:lettuce 1'}, rarity = 2}, + {items = {'farming:lettuce 1'}, rarity = 2} } } minetest.register_node("farming:lettuce_5", table.copy(def)) diff --git a/mods/farming/crops/melon.lua b/mods/farming/crops/melon.lua index 0549dd35..66decdc4 100644 --- a/mods/farming/crops/melon.lua +++ b/mods/farming/crops/melon.lua @@ -21,9 +21,8 @@ minetest.register_craft({ }) minetest.register_craft({ - type = "shapeless", output = "farming:melon_slice 4", - recipe = {"farming:melon_8", "farming:cutting_board"}, + recipe = {{"farming:cutting_board", "farming:melon_8"}}, replacements = {{"farming:cutting_board", "farming:cutting_board"}} }) @@ -72,17 +71,22 @@ def.tiles = {"farming_melon_7.png"} minetest.register_node("farming:melon_7", table.copy(def)) -- stage 8 (final) -def.drawtype = "nodebox" -def.description = S("Melon") -def.tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png"} -def.selection_box = {-.5, -.5, -.5, .5, .5, .5} -def.walkable = true -def.groups = { - food_melon = 1, snappy = 2, oddly_breakable_by_hand = 1, - flammable = 2, plant = 1 -} -def.drop = "farming:melon_8" -minetest.register_node("farming:melon_8", table.copy(def)) +minetest.register_node("farming:melon_8", { + description = S("Melon"), + tiles = { + "farming_melon_top.png", + "farming_melon_bottom.png", + "farming_melon_side.png" + }, + groups = { + food_melon = 1, snappy = 2, oddly_breakable_by_hand = 1, + flammable = 2, plant = 1 + }, + drop = "farming:melon_8", + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) -- add to registered_plants farming.registered_plants["farming:melon"] = { diff --git a/mods/farming/crops/mint.lua b/mods/farming/crops/mint.lua index 5bc40215..eceaa166 100644 --- a/mods/farming/crops/mint.lua +++ b/mods/farming/crops/mint.lua @@ -29,11 +29,9 @@ minetest.register_craftitem("farming:mint_tea", { minetest.register_craft({ output = "farming:mint_tea", - type = "shapeless", recipe = { - "vessels:drinking_glass", "group:food_mint", - "group:food_mint", "group:food_mint", - "farming:juicer", "group:water_bucket" + {"group:food_mint", "group:food_mint", "group:food_mint"}, + {"group:water_bucket", "farming:juicer", "vessels:drinking_glass"} }, replacements = { {"group:food_juicer", "farming:juicer"}, @@ -44,11 +42,9 @@ minetest.register_craft({ if minetest.get_modpath("bucket_wooden") then minetest.register_craft({ output = "farming:mint_tea", - type = "shapeless", recipe = { - "vessels:drinking_glass", "group:food_mint", - "group:food_mint", "group:food_mint", - "farming:juicer", "group:water_bucket_wooden" + {"group:food_mint", "group:food_mint", "group:food_mint"}, + {"group:water_bucket_wooden", "farming:juicer", "vessels:drinking_glass"} }, replacements = { {"group:food_juicer", "farming:juicer"}, @@ -92,7 +88,7 @@ def.drop = { {items = {"farming:mint_leaf 2"}, rarity = 1}, {items = {"farming:mint_leaf 2"}, rarity = 2}, {items = {"farming:seed_mint 1"}, rarity = 1}, - {items = {"farming:seed_mint 2"}, rarity = 2}, + {items = {"farming:seed_mint 2"}, rarity = 2} } } minetest.register_node("farming:mint_4", table.copy(def)) diff --git a/mods/farming/crops/onion.lua b/mods/farming/crops/onion.lua index 2a8c63f3..63cdbe53 100644 --- a/mods/farming/crops/onion.lua +++ b/mods/farming/crops/onion.lua @@ -27,12 +27,11 @@ minetest.register_craftitem("farming:onion_soup", { }) minetest.register_craft({ - type = "shapeless", output = "farming:onion_soup", recipe = { - "group:food_onion", "group:food_onion", "group:food_pot", - "group:food_onion", "group:food_onion", - "group:food_onion", "group:food_onion", "group:food_bowl" + {"group:food_onion", "group:food_onion", "group:food_onion"}, + {"group:food_onion", "group:food_pot", "group:food_onion"}, + {"", "group:food_bowl", ""} }, replacements = {{"farming:pot", "farming:pot"}} }) @@ -81,7 +80,7 @@ def.drop = { {items = {"farming:onion"}, rarity = 1}, {items = {"farming:onion"}, rarity = 2}, {items = {"farming:onion"}, rarity = 2}, - {items = {"farming:onion"}, rarity = 5}, + {items = {"farming:onion"}, rarity = 5} } } minetest.register_node("farming:onion_5", table.copy(def)) diff --git a/mods/farming/crops/parsley.lua b/mods/farming/crops/parsley.lua new file mode 100644 index 00000000..0bc20eba --- /dev/null +++ b/mods/farming/crops/parsley.lua @@ -0,0 +1,56 @@ +local S = farming.intllib + +-- item definition +minetest.register_craftitem("farming:parsley", { + description = S("Parsley"), + inventory_image = "farming_parsley.png", + groups = {seed = 2, food_parsley = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:parsley_1") + end +}) + +-- crop definition +local def = { + drawtype = "plantlike", + tiles = {"farming_parsley_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:parsley_1", table.copy(def)) + +-- stage 2 +def.tiles = {"farming_parsley_2.png"} +minetest.register_node("farming:parsley_2", table.copy(def)) + +-- stage 3 (final) +def.tiles = {"farming_parsley_3.png"} +def.groups.growing = nil +def.drop = { + items = { + {items = {"farming:parsley 2"}, rarity = 1}, + {items = {"farming:parsley"}, rarity = 2}, + {items = {"farming:parsley"}, rarity = 3} + } +} +minetest.register_node("farming:parsley_3", table.copy(def)) + +-- add to registered_plants +farming.registered_plants["farming:parsley"] = { + crop = "farming:parsley", + seed = "farming:parsley", + minlight = 13, + maxlight = 15, + steps = 3 +} diff --git a/mods/farming/crops/peas.lua b/mods/farming/crops/peas.lua index 7c6a83df..77058892 100644 --- a/mods/farming/crops/peas.lua +++ b/mods/farming/crops/peas.lua @@ -21,9 +21,8 @@ minetest.register_craftitem("farming:peas", { }) minetest.register_craft({ - type = "shapeless", output = "farming:peas", - recipe = {"farming:pea_pod"} + recipe = {{"farming:pea_pod"}} }) -- pea soup @@ -35,9 +34,12 @@ minetest.register_craftitem("farming:pea_soup", { }) minetest.register_craft({ - type = "shapeless", output = "farming:pea_soup", - recipe = {"group:food_peas", "group:food_peas", "group:food_bowl"} + recipe = { + {"group:food_peas"}, + {"group:food_peas"}, + {"group:food_bowl"} + } }) local def = { diff --git a/mods/farming/crops/pepper.lua b/mods/farming/crops/pepper.lua index 086a0c60..bdf6287a 100644 --- a/mods/farming/crops/pepper.lua +++ b/mods/farming/crops/pepper.lua @@ -30,7 +30,7 @@ minetest.register_craftitem("farming:pepper_yellow", { description = S("Yellow Pepper"), inventory_image = "crops_pepper_yellow.png", on_use = minetest.item_eat(3), - groups = {food_pepper = 1, flammable = 3}, + groups = {food_pepper = 1, flammable = 3} }) -- red pepper @@ -38,13 +38,12 @@ minetest.register_craftitem("farming:pepper_red", { description = S("Red Pepper"), inventory_image = "crops_pepper_red.png", on_use = minetest.item_eat(4), - groups = {food_pepper = 1, flammable = 3}, + groups = {food_pepper = 1, flammable = 3} }) minetest.register_craft({ - type = "shapeless", output = "farming:peppercorn", - recipe = {"group:food_pepper"} + recipe = {{"group:food_pepper"}} }) -- ground pepper @@ -69,8 +68,11 @@ minetest.register_node("farming:pepper_ground", { minetest.register_craft( { output = "farming:pepper_ground", - type = "shapeless", - recipe = {"group:food_peppercorn", "vessels:glass_bottle", "farming:mortar_pestle"}, + recipe = { + {"group:food_peppercorn"}, + {"farming:mortar_pestle"}, + {"vessels:glass_bottle"} + }, replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} }) @@ -124,9 +126,9 @@ minetest.register_node("farming:pepper_5", table.copy(def)) def.tiles = {"crops_pepper_plant_6.png"} def.drop = { max_items = 2, items = { - {items = {'farming:pepper_yellow 2'}, rarity = 1}, - {items = {'farming:pepper_yellow'}, rarity = 2}, - {items = {'farming:pepper_yellow'}, rarity = 3}, + {items = {"farming:pepper_yellow 2"}, rarity = 1}, + {items = {"farming:pepper_yellow"}, rarity = 2}, + {items = {"farming:pepper_yellow"}, rarity = 3} } } minetest.register_node("farming:pepper_6", table.copy(def)) @@ -136,9 +138,9 @@ def.tiles = {"crops_pepper_plant_7.png"} def.groups.growing = nil def.drop = { max_items = 2, items = { - {items = {'farming:pepper_red 2'}, rarity = 1}, - {items = {'farming:pepper_red'}, rarity = 2}, - {items = {'farming:pepper_red'}, rarity = 3}, + {items = {"farming:pepper_red 2"}, rarity = 1}, + {items = {"farming:pepper_red"}, rarity = 2}, + {items = {"farming:pepper_red"}, rarity = 3} } } minetest.register_node("farming:pepper_7", table.copy(def)) diff --git a/mods/farming/crops/pineapple.lua b/mods/farming/crops/pineapple.lua index 839a627a..6bb1918e 100644 --- a/mods/farming/crops/pineapple.lua +++ b/mods/farming/crops/pineapple.lua @@ -38,8 +38,7 @@ minetest.register_craftitem("farming:pineapple_ring", { minetest.register_craft( { output = "farming:pineapple_ring 5", - type = "shapeless", - recipe = {"group:food_pineapple"}, + recipe = {{"group:food_pineapple"}}, replacements = {{"farming:pineapple", "farming:pineapple_top"}} }) @@ -53,11 +52,12 @@ minetest.register_craftitem("farming:pineapple_juice", { minetest.register_craft({ output = "farming:pineapple_juice", - type = "shapeless", recipe = { - "vessels:drinking_glass", "group:food_pineapple_ring", - "group:food_pineapple_ring", "group:food_pineapple_ring", - "farming:juicer"}, + {"group:food_pineapple_ring", "group:food_pineapple_ring", + "group:food_pineapple_ring"}, + {"", "farming:juicer", ""}, + {"", "vessels:drinking_glass", ""} + }, replacements = { {"group:food_juicer", "farming:juicer"} } @@ -65,10 +65,10 @@ minetest.register_craft({ minetest.register_craft({ output = "farming:pineapple_juice 2", - type = "shapeless", recipe = { - "vessels:drinking_glass", "vessels:drinking_glass", - "group:food_pineapple", "farming:juicer" + {"group:food_pineapple", ""}, + {"farming:juicer", ""}, + {"vessels:drinking_glass", "vessels:drinking_glass"} }, replacements = { {"group:food_juicer", "farming:juicer"} diff --git a/mods/farming/crops/pumpkin.lua b/mods/farming/crops/pumpkin.lua index 5e29c015..2829d47c 100644 --- a/mods/farming/crops/pumpkin.lua +++ b/mods/farming/crops/pumpkin.lua @@ -25,9 +25,8 @@ minetest.register_craft({ }) minetest.register_craft({ - type = "shapeless", output = "farming:pumpkin_slice 4", - recipe = {"farming:pumpkin", "farming:cutting_board"}, + recipe = {{"farming:cutting_board", "farming:pumpkin"}}, replacements = {{"farming:cutting_board", "farming:cutting_board"}} }) @@ -122,8 +121,9 @@ minetest.register_craftitem("farming:pumpkin_dough", { minetest.register_craft({ output = "farming:pumpkin_dough", - type = "shapeless", - recipe = {"group:food_flour", "group:food_pumpkin_slice", "group:food_pumpkin_slice"} + recipe = { + {"group:food_pumpkin_slice", "group:food_flour", "group:food_pumpkin_slice"} + } }) minetest.register_craft({ @@ -183,7 +183,7 @@ minetest.register_node("farming:pumpkin_8", { description = S("Pumpkin"), tiles = { "farming_pumpkin_top.png", - "farming_pumpkin_top.png", + "farming_pumpkin_bottom.png", "farming_pumpkin_side.png" }, groups = { @@ -191,7 +191,9 @@ minetest.register_node("farming:pumpkin_8", { flammable = 2, plant = 1 }, drop = "farming:pumpkin_8", - sounds = default.node_sound_wood_defaults() + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node }) minetest.register_alias("farming:pumpkin", "farming:pumpkin_8") diff --git a/mods/farming/crops/rhubarb.lua b/mods/farming/crops/rhubarb.lua index 073cc18f..d0ac58af 100644 --- a/mods/farming/crops/rhubarb.lua +++ b/mods/farming/crops/rhubarb.lua @@ -45,7 +45,7 @@ local def = { }, sounds = default.node_sound_leaves_defaults(), minlight = 10, - maxlight = 12, + maxlight = 12 } -- stage 1 diff --git a/mods/farming/crops/ryeoatrice.lua b/mods/farming/crops/ryeoatrice.lua index c565a65b..090cd74b 100644 --- a/mods/farming/crops/ryeoatrice.lua +++ b/mods/farming/crops/ryeoatrice.lua @@ -18,12 +18,15 @@ minetest.override_item("farming:rye", { groups = {food_rye = 1, flammable = 4} }) +minetest.override_item("farming:rye_1", {drop = {}}) +minetest.override_item("farming:rye_2", {drop = {}}) +minetest.override_item("farming:rye_3", {drop = {}}) + minetest.register_craft({ - type = "shapeless", output = "farming:flour", recipe = { - "farming:rye", "farming:rye", "farming:rye", "farming:rye", - "farming:mortar_pestle" + {"farming:rye", "farming:rye", "farming:rye"}, + {"farming:rye", "farming:mortar_pestle", ""} }, replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} }) @@ -43,12 +46,15 @@ minetest.override_item("farming:oat", { groups = {food_oats = 1, flammable = 4} }) +minetest.override_item("farming:oat_1", {drop = {}}) +minetest.override_item("farming:oat_2", {drop = {}}) +minetest.override_item("farming:oat_3", {drop = {}}) + minetest.register_craft({ - type = "shapeless", output = "farming:flour", recipe = { - "farming:oat", "farming:oat", "farming:oat", "farming:oat", - "farming:mortar_pestle" + {"farming:oat", "farming:oat", "farming:oat"}, + {"farming:oat", "farming:mortar_pestle", ""} }, replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} }) @@ -68,6 +74,10 @@ minetest.override_item("farming:rice", { groups = {food_rice = 1, flammable = 4} }) +minetest.override_item("farming:rice_1", {drop = {}}) +minetest.override_item("farming:rice_2", {drop = {}}) +minetest.override_item("farming:rice_3", {drop = {}}) + minetest.register_craftitem("farming:rice_bread", { description = S("Rice Bread"), inventory_image = "farming_rice_bread.png", @@ -82,11 +92,10 @@ minetest.register_craftitem("farming:rice_flour", { }) minetest.register_craft({ - type = "shapeless", output = "farming:rice_flour", recipe = { - "farming:rice", "farming:rice", "farming:rice", "farming:rice", - "farming:mortar_pestle" + {"farming:rice", "farming:rice", "farming:rice"}, + {"farming:rice", "farming:mortar_pestle", ""} }, replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} }) diff --git a/mods/farming/crops/soy.lua b/mods/farming/crops/soy.lua index cb71c67d..eec33f3e 100644 --- a/mods/farming/crops/soy.lua +++ b/mods/farming/crops/soy.lua @@ -19,9 +19,51 @@ minetest.register_craftitem("farming:soy_beans", { }) minetest.register_craft({ - type = "shapeless", output = "farming:soy_beans", - recipe = {"farming:soy_pod"} + recipe = {{"farming:soy_pod"}} +}) + +-- soy sauce +minetest.register_node("farming:soy_sauce", { + description = S("Soy Sauce"), + drawtype = "plantlike", + tiles = {"farming_soy_sauce.png"}, + inventory_image = "farming_soy_sauce.png", + wield_image = "farming_soy_sauce.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = { + vessel = 1, food_soy_sauce = 1, dig_immediate = 3, attached_node = 1 + }, + sounds = default.node_sound_glass_defaults() +}) + +-- river water availability check +local bucket_water + +if minetest.get_mapgen_setting("mgname") == "valleys" +or minetest.get_modpath("ethereal") then + bucket_water = "bucket:bucket_river_water" +else + bucket_water = "bucket:bucket_water" +end + +-- soy sauce recipe +minetest.register_craft( { + output = "farming:soy_sauce", + recipe = { + {"group:food_soy", "group:food_salt", "group:food_soy"}, + {"", "group:food_juicer", ""}, + {"", bucket_water, "vessels:glass_bottle"} + }, + replacements = { + {bucket_water, "bucket:bucket_empty"}, + {"group:food_juicer", "farming:juicer"} + } }) -- soy milk @@ -46,11 +88,10 @@ minetest.register_node("farming:soy_milk", { }) minetest.register_craft( { - type = "shapeless", output = "farming:soy_milk", recipe = { - "group:food_soy", "group:food_soy", "group:food_soy", - "farming:vanilla_extract", "bucket:bucket_water", "vessels:drinking_glass" + {"group:food_soy", "group:food_soy", "group:food_soy"}, + {"farming:vanilla_extract", "bucket:bucket_water", "vessels:drinking_glass"} }, replacements = { {"bucket:bucket_water", "bucket:bucket_empty"}, @@ -68,10 +109,9 @@ minetest.register_craftitem("farming:tofu", { minetest.register_craft({ output = "farming:tofu", - type = "shapeless", recipe = { - "farming:baking_tray", "group:food_soy", "group:food_soy", - "group:food_soy", "group:food_soy", "group:food_soy", + {"farming:baking_tray", "group:food_soy", "group:food_soy"}, + {"group:food_soy", "group:food_soy", "group:food_soy"} }, replacements = {{"farming:baking_tray", "farming:baking_tray"}} }) @@ -131,7 +171,7 @@ minetest.register_node("farming:soy_4", table.copy(def)) def.tiles = {"farming_soy_5.png"} def.drop = { max_items = 1, items = { - {items = {'farming:soy_pod'}, rarity = 1}, + {items = {"farming:soy_pod"}, rarity = 1}, } } minetest.register_node("farming:soy_5", table.copy(def)) @@ -140,9 +180,9 @@ minetest.register_node("farming:soy_5", table.copy(def)) def.tiles = {"farming_soy_6.png"} def.drop = { max_items = 3, items = { - {items = {'farming:soy_pod'}, rarity = 1}, - {items = {'farming:soy_pod'}, rarity = 2}, - {items = {'farming:soy_pod'}, rarity = 3}, + {items = {"farming:soy_pod"}, rarity = 1}, + {items = {"farming:soy_pod"}, rarity = 2}, + {items = {"farming:soy_pod"}, rarity = 3}, } } minetest.register_node("farming:soy_6", table.copy(def)) @@ -152,11 +192,11 @@ def.tiles = {"farming_soy_7.png"} def.groups.growing = nil def.drop = { max_items = 5, items = { - {items = {'farming:soy_pod'}, rarity = 1}, - {items = {'farming:soy_pod'}, rarity = 2}, - {items = {'farming:soy_pod'}, rarity = 3}, - {items = {'farming:soy_pod'}, rarity = 4}, - {items = {'farming:soy_pod'}, rarity = 5} + {items = {"farming:soy_pod"}, rarity = 1}, + {items = {"farming:soy_pod"}, rarity = 2}, + {items = {"farming:soy_pod"}, rarity = 3}, + {items = {"farming:soy_pod"}, rarity = 4}, + {items = {"farming:soy_pod"}, rarity = 5} } } minetest.register_node("farming:soy_7", table.copy(def)) diff --git a/mods/farming/crops/tomato.lua b/mods/farming/crops/tomato.lua index 47879b64..6eff7c63 100644 --- a/mods/farming/crops/tomato.lua +++ b/mods/farming/crops/tomato.lua @@ -17,6 +17,23 @@ minetest.register_craftitem("farming:tomato", { on_use = minetest.item_eat(4) }) +-- tomato soup +minetest.register_craftitem("farming:tomato_soup", { + description = S("Tomato Soup"), + inventory_image = "farming_tomato_soup.png", + groups = {flammable = 2}, + on_use = minetest.item_eat(8, "farming:bowl") +}) + +minetest.register_craft({ + output = "farming:tomato_soup", + recipe = { + {"group:food_tomato"}, + {"group:food_tomato"}, + {"group:food_bowl"} + } +}) + -- tomato definition local def = { drawtype = "plantlike", diff --git a/mods/farming/crops/vanilla.lua b/mods/farming/crops/vanilla.lua index 17236a37..d17c8c39 100644 --- a/mods/farming/crops/vanilla.lua +++ b/mods/farming/crops/vanilla.lua @@ -8,7 +8,7 @@ minetest.register_craftitem("farming:vanilla", { on_place = function(itemstack, placer, pointed_thing) return farming.place_seed(itemstack, placer, pointed_thing, "farming:vanilla_1") end, - on_use = minetest.item_eat(1), + on_use = minetest.item_eat(1) }) -- crop definition @@ -49,8 +49,8 @@ minetest.register_node("farming:vanilla_extract", { minetest.register_craft( { output = "farming:vanilla_extract", recipe = { - { "group:food_vanilla", "group:food_vanilla", "group:food_vanilla"}, - { "group:food_vanilla", "farming:bottle_ethanol", "bucket:bucket_water"}, + {"group:food_vanilla", "group:food_vanilla", "group:food_vanilla"}, + {"group:food_vanilla", "farming:bottle_ethanol", "bucket:bucket_water"}, }, replacements = { {"bucket:bucket_water", "bucket:bucket_empty"}, @@ -61,7 +61,7 @@ minetest.register_craft({ type = "fuel", recipe = "farming:vanilla_extract", burntime = 25, - replacements = {{ "farming:vanilla_extract", "vessels:glass_bottle" }} + replacements = {{"farming:vanilla_extract", "vessels:glass_bottle"}} }) -- stage 1 @@ -92,9 +92,9 @@ minetest.register_node("farming:vanilla_6", table.copy(def)) def.tiles = {"farming_vanilla_7.png"} def.drop = { items = { - {items = {'farming:vanilla'}, rarity = 1}, - {items = {'farming:vanilla'}, rarity = 2}, - {items = {'farming:vanilla'}, rarity = 3} + {items = {"farming:vanilla"}, rarity = 1}, + {items = {"farming:vanilla"}, rarity = 2}, + {items = {"farming:vanilla"}, rarity = 3} } } minetest.register_node("farming:vanilla_7", table.copy(def)) @@ -104,10 +104,10 @@ def.tiles = {"farming_vanilla_8.png"} def.groups.growing = nil def.drop = { items = { - {items = {'farming:vanilla 2'}, rarity = 1}, - {items = {'farming:vanilla 2'}, rarity = 2}, - {items = {'farming:vanilla 2'}, rarity = 2}, - {items = {'farming:vanilla 2'}, rarity = 3} + {items = {"farming:vanilla 2"}, rarity = 1}, + {items = {"farming:vanilla 2"}, rarity = 2}, + {items = {"farming:vanilla 2"}, rarity = 2}, + {items = {"farming:vanilla 2"}, rarity = 3} } } minetest.register_node("farming:vanilla_8", table.copy(def)) diff --git a/mods/farming/crops/wheat.lua b/mods/farming/crops/wheat.lua index e21d7f67..1a7de8ac 100644 --- a/mods/farming/crops/wheat.lua +++ b/mods/farming/crops/wheat.lua @@ -46,9 +46,7 @@ minetest.register_craft({ minetest.register_craft({ output = "farming:wheat 3", - recipe = { - {"farming:straw"} - } + recipe = {{"farming:straw"}} }) -- check and register stairs @@ -80,11 +78,10 @@ minetest.register_craftitem("farming:flour", { }) minetest.register_craft({ - type = "shapeless", output = "farming:flour", recipe = { - "farming:wheat", "farming:wheat", "farming:wheat", - "farming:wheat", "farming:mortar_pestle" + {"farming:wheat", "farming:wheat", "farming:wheat"}, + {"farming:wheat", "farming:mortar_pestle", ""} }, replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}} }) @@ -113,9 +110,8 @@ minetest.register_craftitem("farming:bread_slice", { }) minetest.register_craft({ - type = "shapeless", output = "farming:bread_slice 5", - recipe = {"farming:bread", "group:food_cutting_board"}, + recipe = {{"group:food_cutting_board", "farming:bread"}}, replacements = {{"group:food_cutting_board", "farming:cutting_board"}} }) diff --git a/mods/farming/farming.conf_example b/mods/farming/farming.conf_example index bea7ada8..9a804a91 100644 --- a/mods/farming/farming.conf_example +++ b/mods/farming/farming.conf_example @@ -35,6 +35,8 @@ farming.blackberry = 0.002 farming.lettuce = 0.001 farming.soy = 0.001 farming.vanilla = 0.001 +farming.artichoke = 0.001 +farming.parsley = 0.002 farming.grains = true -- true or false only -- default rarety of crops on map (higher number = more crops) diff --git a/mods/farming/food.lua b/mods/farming/food.lua index 7f63b8a2..3be519e8 100644 --- a/mods/farming/food.lua +++ b/mods/farming/food.lua @@ -1,6 +1,34 @@ local S = farming.intllib +--= filter sea water into river water +minetest.register_craft({ + output = "bucket:bucket_river_water", + recipe = { + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + {"bucket:bucket_water"} + } +}) + +--= glass of water + +minetest.register_craftitem("farming:glass_water", { + description = S("Glass of Water"), + inventory_image = "farming_water_glass.png", + groups = {food_water_glass = 1, flammable = 3, vessel = 1} +}) + +minetest.register_craft({ + output = "farming:glass_water 4", + recipe = { + {"vessels:drinking_glass", "vessels:drinking_glass"}, + {"vessels:drinking_glass", "vessels:drinking_glass"}, + {"bucket:bucket_river_water", ""} + }, + replacements = {{"bucket:bucket_river_water", "bucket:bucket_empty"}} +}) + --= Sugar minetest.register_craftitem("farming:sugar", { @@ -16,6 +44,19 @@ minetest.register_craft({ recipe = "default:papyrus" }) +--= Sugar caramel + +minetest.register_craftitem("farming:caramel", { + description = S("Caramel"), + inventory_image = "farming_caramel.png", +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 6, + output = "farming:caramel", + recipe = "group:food_sugar", +}) --= Salt @@ -104,9 +145,11 @@ minetest.register_node("farming:salt_crystal", { }, }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "farming:salt 9", - recipe = {"farming:salt_crystal", "farming:mortar_pestle"}, + recipe = { + {"farming:salt_crystal", "farming:mortar_pestle"} + }, replacements = {{"farming:mortar_pestle", "farming:mortar_pestle"}} }) @@ -180,7 +223,7 @@ minetest.register_craft({ recipe = { {"group:food_gelatin", "group:food_sugar", "group:food_gelatin"}, {"group:food_sugar", "group:food_rose_water", "group:food_sugar"}, - {"group:food_cornstarch", "group:food_sugar", "dye:pink"} + {"group:food_sugar", "dye:pink", "group:food_sugar"} }, replacements = { {"group:food_cornstarch", "farming:bowl"}, @@ -198,9 +241,11 @@ minetest.register_craftitem("farming:garlic_bread", { }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "farming:garlic_bread", - recipe = {"group:food_toast", "group:food_garlic_clove", "group:food_garlic_clove"} + recipe = { + {"group:food_toast", "group:food_garlic_clove", "group:food_garlic_clove"} + } }) --= Donuts (thanks to Bockwurst for making the donut images) @@ -257,11 +302,11 @@ minetest.register_craftitem("farming:porridge", { }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "farming:porridge", recipe = { - "group:food_oats", "group:food_oats", "group:food_oats", - "group:food_oats", "group:food_bowl", "group:food_milk_glass" + {"group:food_oats", "group:food_oats", "group:food_oats"}, + {"group:food_oats", "group:food_bowl", "group:food_milk_glass"} }, replacements = { {"mobs:glass_milk", "vessels:drinking_glass"}, @@ -278,12 +323,12 @@ minetest.register_craftitem("farming:jaffa_cake", { }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "farming:jaffa_cake", recipe = { - "farming:baking_tray", "group:food_egg", "group:food_sugar", - "group:food_flour", "group:food_cocoa", "group:food_orange", - "group:food_milk" + {"farming:baking_tray", "group:food_egg", "group:food_sugar"}, + {"group:food_flour", "group:food_cocoa", "group:food_orange"}, + {"group:food_milk", "", ""} }, replacements = { {"farming:baking_tray", "farming:baking_tray"}, @@ -301,10 +346,9 @@ minetest.register_craftitem("farming:apple_pie", { minetest.register_craft({ output = "farming:apple_pie", - type = "shapeless", recipe = { - "group:food_flour", "group:food_sugar", - "group:food_apple", "group:food_baking_tray" + {"group:food_flour", "group:food_sugar", "group:food_apple"}, + {"", "group:food_baking_tray", ""} }, replacements = {{"group:food_baking_tray", "farming:baking_tray"}} }) @@ -329,11 +373,11 @@ minetest.register_craftitem("farming:cactus_juice", { }) minetest.register_craft({ - output = "farming:cactus_juice 2", - type = "shapeless", + output = "farming:cactus_juice", recipe = { - "vessels:drinking_glass", "vessels:drinking_glass", - "default:cactus", "farming:juicer" + {"default:cactus"}, + {"farming:juicer"}, + {"vessels:drinking_glass"} }, replacements = { {"group:food_juicer", "farming:juicer"} @@ -350,20 +394,16 @@ minetest.register_craftitem("farming:pasta", { minetest.register_craft({ output = "farming:pasta", - type = "shapeless", recipe = { - "group:food_flour", "group:food_mixing_bowl", - "group:food_butter" + {"group:food_flour", "group:food_butter", "group:food_mixing_bowl"} }, replacements = {{"group:food_mixing_bowl", "farming:mixing_bowl"}} }) minetest.register_craft({ output = "farming:pasta", - type = "shapeless", recipe = { - "group:food_flour", "group:food_mixing_bowl", - "group:food_oil" + {"group:food_flour", "group:food_oil", "group:food_mixing_bowl"} }, replacements = { {"group:food_mixing_bowl", "farming:mixing_bowl"}, @@ -381,10 +421,9 @@ minetest.register_craftitem("farming:spaghetti", { minetest.register_craft({ output = "farming:spaghetti", - type = "shapeless", recipe = { - "group:food_pasta", "group:food_saucepan", - "group:food_tomato", "group:food_garlic_clove", "group:food_garlic_clove" + {"group:food_pasta", "group:food_saucepan", "group:food_tomato"}, + {"group:food_garlic_clove", "group:food_garlic_clove", ""} }, replacements = {{"group:food_saucepan", "farming:saucepan"}} }) @@ -399,11 +438,10 @@ minetest.register_craftitem("farming:bibimbap", { minetest.register_craft({ output = "farming:bibimbap", - type = "shapeless", recipe = { - "group:food_skillet", "group:food_bowl", "group:food_egg", "group:food_rice", - "group:food_chicken_raw", "group:food_cabbage", "group:food_carrot", - "group:food_chili_pepper" + {"group:food_skillet", "group:food_bowl", "group:food_egg"}, + {"group:food_rice", "group:food_chicken_raw", "group:food_cabbage"}, + {"group:food_carrot", "group:food_chili_pepper", ""} }, replacements = {{"group:food_skillet", "farming:skillet"}} }) @@ -428,12 +466,11 @@ minetest.register_craftitem("farming:burger", { }) minetest.register_craft({ - type = "shapeless", output = "farming:burger", recipe = { - "farming:bread", "group:food_meat", "group:food_cheese", - "group:food_tomato", "group:food_cucumber", "group:food_onion", - "group:food_lettuce" + {"farming:bread", "group:food_meat", "group:food_cheese"}, + {"group:food_tomato", "group:food_cucumber", "group:food_onion"}, + {"group:food_lettuce", "", ""} } }) @@ -451,7 +488,7 @@ minetest.register_craft({ recipe = { "group:food_bowl", "group:food_tomato", "group:food_cucumber", "group:food_lettuce", "group:food_oil" - }, + } }) -- Triple Berry Smoothie @@ -472,3 +509,176 @@ minetest.register_craft({ "vessels:drinking_glass" } }) + +-- Patatas a la importancia + +minetest.register_craftitem("farming:spanish_potatoes", { + description = S("Spanish Potatoes"), + inventory_image = "farming_spanish_potatoes.png", + on_use = minetest.item_eat(8, "farming:bowl"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:spanish_potatoes", + recipe = { + "farming:potato", "group:food_parsley", "farming:potato", + "group:food_egg", "group:food_flour", "farming:onion", + "farming:garlic_clove", "group:food_bowl", "group:food_skillet" + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- Potato omelet + +minetest.register_craftitem("farming:potato_omelet", { + description = S("Potato omelet"), + inventory_image = "farming_potato_omelet.png", + on_use = minetest.item_eat(6, "farming:bowl") +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:potato_omelet", + recipe = { + "group:food_egg", "farming:potato", "group:food_onion", + "group:food_skillet", "group:food_bowl"}, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- Paella + +minetest.register_craftitem("farming:paella", { + description = S("Paella"), + inventory_image = "farming_paella.png", + on_use = minetest.item_eat(8, "farming:bowl") +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:paella", + recipe = { + "group:food_rice", "dye:orange", "farming:pepper_red", + "group:food_peas", "group:food_chicken", "group:food_bowl", "group:food_skillet" + }, + replacements = {{"group:food_skillet", "farming:skillet"}} +}) + +-- Flan + +minetest.register_craftitem("farming:flan", { + description = S("Vanilla Flan"), + inventory_image = "farming_vanilla_flan.png", + on_use = minetest.item_eat(6) +}) + +minetest.register_craft({ + output = "farming:flan", + recipe = { + {"group:food_sugar", "group:food_milk", "farming:caramel"}, + {"group:food_egg", "group:food_egg", "farming:vanilla_extract"} + }, + replacements = { + {"cucina_vegana:soy_milk", "vessels:drinking_glass"}, + {"group:food_milk", "bucket:bucket_empty"}, + {"farming:vanilla_extract", "vessels:glass_bottle"} + } +}) + +-- Vegan Cheese + +minetest.register_craftitem("farming:cheese_vegan", { + description = S("Vegan Cheese"), + inventory_image = "farming_cheese_vegan.png", + on_use = minetest.item_eat(2), + groups = {food_cheese = 1, flammable = 2} +}) + + +minetest.register_craft({ + output = "farming:cheese_vegan", + recipe = { + {"farming:soy_milk", "farming:soy_milk", "farming:soy_milk"}, + {"group:food_salt", "group:food_peppercorn", "farming:bottle_ethanol"}, + {"group:food_gelatin", "group:food_pot", ""} + }, + replacements = { + {"farming:soy_milk", "vessels:drinking_glass 3"}, + {"farming:pot", "farming:pot"}, + {"farming:bottle_ethanol", "vessels:glass_bottle"} + } +}) + +minetest.register_craft({ + output = "farming:cheese_vegan", + recipe = { + {"farming:soy_milk", "farming:soy_milk", "farming:soy_milk"}, + {"group:food_salt", "group:food_peppercorn", "group:food_lemon"}, + {"group:food_gelatin", "group:food_pot", ""} + }, + replacements = { + {"farming:soy_milk", "vessels:drinking_glass 3"}, + {"farming:pot", "farming:pot"} + } +}) + +-- Onigiri + +minetest.register_craftitem("farming:onigiri", { + description = S("Onirigi"), + inventory_image = "farming_onigiri.png", + on_use = minetest.item_eat(2), + groups = {flammable = 2} +}) + +minetest.register_craft({ + output = "farming:onigiri", + recipe = { + {"group:food_rice", "group:food_salt", "group:food_rice"}, + {"", "group:food_seaweed", ""} + } +}) + +-- Gyoza + +minetest.register_craftitem("farming:gyoza", { + description = S("Gyoza"), + inventory_image = "farming_gyoza.png", + on_use = minetest.item_eat(4), + groups = {flammable = 2} +}) + +minetest.register_craft({ + output = "farming:gyoza 4", + recipe = { + {"group:food_cabbage", "group:food_garlic_clove", "group:food_onion"}, + {"group:food_meat_raw", "group:food_salt", "group:food_flour"}, + {"", "group:food_skillet", ""} + + }, + replacements = { + {"group:food_skillet", "farming:skillet"} + } +}) + +-- Mochi + +minetest.register_craftitem("farming:mochi", { + description = S("Mochi"), + inventory_image = "farming_mochi.png", + on_use = minetest.item_eat(3), + groups = {flammable = 2} +}) + +minetest.register_craft({ + output = "farming:mochi", + recipe = { + {"group:food_rice", "group:food_sugar", "group:food_rice"}, + {"", "group:food_mortar_pestle", ""}, + {"", "bucket:bucket_river_water", ""} + }, + replacements = { + {"group:food_mortar_pestle", "farming:mortar_pestle"}, + {"bucket:bucket_river_water", "bucket:bucket_empty"} + } +}) diff --git a/mods/farming/hoes.lua b/mods/farming/hoes.lua index b7dcfd97..9340d55c 100644 --- a/mods/farming/hoes.lua +++ b/mods/farming/hoes.lua @@ -361,7 +361,7 @@ farming.add_to_scythe_not_drops = function(item) end minetest.register_tool("farming:scythe_mithril", { - description = S("Mithril Scythe (Right-click to harvest and replant crops)"), + description = S("Mithril Scythe (Use to harvest and replant crops)"), inventory_image = "farming_scythe_mithril.png", sound = {breaks = "default_tool_breaks"}, diff --git a/mods/farming/init.lua b/mods/farming/init.lua index 973c807e..9b9306c9 100644 --- a/mods/farming/init.lua +++ b/mods/farming/init.lua @@ -7,7 +7,7 @@ farming = { mod = "redo", - version = "20201213", + version = "20210311", path = minetest.get_modpath("farming"), select = { type = "fixed", @@ -633,6 +633,8 @@ farming.blackberry = 0.002 farming.soy = 0.001 farming.vanilla = 0.001 farming.lettuce = 0.001 +farming.artichoke = 0.001 +farming.parsley = 0.002 farming.grains = true farming.rarety = 0.002 @@ -703,6 +705,8 @@ ddoo("blackberry.lua", farming.blackberry) ddoo("soy.lua", farming.soy) ddoo("vanilla.lua", farming.vanilla) ddoo("lettuce.lua", farming.lettuce) +ddoo("artichoke.lua", farming.artichoke) +ddoo("parsley.lua", farming.parsley) dofile(farming.path .. "/food.lua") dofile(farming.path .. "/mapgen.lua") diff --git a/mods/farming/license.txt b/mods/farming/license.txt index 49606b68..e7126bfd 100644 --- a/mods/farming/license.txt +++ b/mods/farming/license.txt @@ -63,6 +63,11 @@ Created by VanessaE (License: CC BY 3.0): farming_cotton_7.png farming_cotton_8.png +Created by 7eventy7 (https://www.planetminecraft.com/member/7eventy7/) + farming_melon_top.png + farming_melon_side.png + farming_melon_bottom.png + Created by Doc (License: CC BY 3.0): farming_cucumber.png farming_cucumber_1.png @@ -155,6 +160,22 @@ Created by Felfa (CC0) farming_burger.png farming_soy*.png farming_vanilla*.png + farming_artichoke*.png + farming_parsley*.png + farming_paella.png + farming_potato_omelette.png + farming_spanish_potatoes.png + farming_vanilla_flan.png Created by gorlock (CC0) farming_salt_crystal.png + +Created by sirrobzeroone (CC0) + farming_gyoza.png + farming_pineapple_ring.png + +Created by TechM8 (https://www.deviantart.com/techm8) + farming_popcorn.png + +Created by RZR0 (CC-BY-NC-SA) + farming_blueberry_pie.png diff --git a/mods/farming/locale/farming.de.tr b/mods/farming/locale/farming.de.tr index a9183263..175990ec 100644 --- a/mods/farming/locale/farming.de.tr +++ b/mods/farming/locale/farming.de.tr @@ -21,7 +21,7 @@ Bottle of Hemp Oil=Flasche mit Hanföl Bowl of Chili=Chili Schale Bread=Brot Bronze Hoe=Bronzehacke -Cabbage=Salat +Cabbage=Weißkohl Cactus Juice=Kaktussaft Carrot=Möhre Carrot Juice=Möhrensaft @@ -61,7 +61,7 @@ Hemp Seed=Hanfsamen Hoe=Hacke Hoe Bomb (use or throw on grassy areas to hoe land)=Hackbombe (Auf Grasland werfen oder benutzen) Jack 'O Lantern (punch to turn on and off)=Kürbislaterne (Punch zum Ein- und Ausschalten) -Jaffa Cake=Jaffa-Torte +Jaffa Cake=Jaffakeks Juicer=Entsafter Melon=Melone Melon Slice=Melonenscheibe @@ -88,7 +88,7 @@ Pineapple=Ananas Pineapple Juice=Ananassaft Pineapple Ring=Ananasscheibe Pineapple Top=Ananasdeckel -Porridge=Brei +Porridge=Haferbrei Potato=Kartoffel Pumpkin=Kürbis Pumpkin Bread=Kürbisbrot diff --git a/mods/farming/locale/farming.zh_CN.tr b/mods/farming/locale/farming.zh_CN.tr index 3e9c2f94..88207055 100644 --- a/mods/farming/locale/farming.zh_CN.tr +++ b/mods/farming/locale/farming.zh_CN.tr @@ -60,7 +60,7 @@ Hemp Rope=麻绳 Hemp Seed=大麻籽 Hoe=锄头 Hoe Bomb (use or throw on grassy areas to hoe land)=锄弹(在草地上使用或扔在锄地上) -Jack 'O Lantern (punch to turn on and off)=杰克灯(按一下开关) +Jack 'O Lantern (punch to turn on and off)=南瓜灯(按一下开关) Jaffa Cake=佳发饼 Juicer=榨汁机 Melon=甜瓜 @@ -118,7 +118,7 @@ Steel Hoe=钢锄头 Stone Hoe=石锄 Straw=稻草 Strawberry=草莓 -String=字符串 +String=线 Sugar=糖 Toast=烤面包片 Toast Sandwich=三明治面包 diff --git a/mods/farming/locale/farming.zh_TW.tr b/mods/farming/locale/farming.zh_TW.tr index 5a8449b5..a72f7397 100644 --- a/mods/farming/locale/farming.zh_TW.tr +++ b/mods/farming/locale/farming.zh_TW.tr @@ -60,7 +60,7 @@ Hemp Rope=麻繩 Hemp Seed=大麻籽 Hoe=鋤頭 Hoe Bomb (use or throw on grassy areas to hoe land)=鋤彈(在草地上使用或扔在鋤地上) -Jack 'O Lantern (punch to turn on and off)=傑克燈(按一下開關) +Jack 'O Lantern (punch to turn on and off)=南瓜燈(按一下開關) Jaffa Cake=佳發餅 Juicer=榨汁機 Melon=甜瓜 @@ -118,7 +118,7 @@ Steel Hoe=鋼鋤頭 Stone Hoe=石鋤 Straw=稻草 Strawberry=草莓 -String=字符串 +String=線 Sugar=糖 Toast=烤麵包片 Toast Sandwich=三明治麵包 diff --git a/mods/farming/lucky_block.lua b/mods/farming/lucky_block.lua index 5a69a683..c6a2000d 100644 --- a/mods/farming/lucky_block.lua +++ b/mods/farming/lucky_block.lua @@ -72,6 +72,8 @@ if minetest.get_modpath("lucky_block") then {name = "farming:seed_rice", max = 15}, {name = "farming:seed_oat", max = 15}, {name = "farming:soil_wet", max = 10}, + {name = "farming:cotton_wild", max = 5}, + {name = "farming:grapebush", max = 5}, }}, }) end diff --git a/mods/farming/mapgen.lua b/mods/farming/mapgen.lua index 7febaa13..c32eebc3 100644 --- a/mods/farming/mapgen.lua +++ b/mods/farming/mapgen.lua @@ -53,6 +53,7 @@ register_plant("cabbage_6", 2, 10, nil, "", -1, farming.cabbage) register_plant("lettuce_5", 5, 30, nil, "", -1, farming.lettuce) register_plant("blackberry_4", 3, 10, nil, "", -1, farming.blackberry) register_plant("vanilla_7", 5, 35, nil, "", -1, farming.vanilla) +register_plant("parsley_3", 10, 40, nil, "", -1, farming.parsley) register_plant("mint_4", 1, 75, { "default:dirt_with_grass", "default:dirt_with_coniferous_litter"}, "group:water", 1, farming.mint) @@ -127,6 +128,28 @@ minetest.register_decoration({ end +if farming.artichoke then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = tonumber(farming.artichoke) or farming.rarety, + spread = {x = 100, y = 100, z = 100}, + seed = 448, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 13, + decoration = {"farming:artichoke_5"}, + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + + if farming.pepper then local tmp1 = {"default:dirt_with_rainforest_litter"} -- v7 diff --git a/mods/farming/textures/farming_artichoke.png b/mods/farming/textures/farming_artichoke.png new file mode 100644 index 00000000..74af38b7 Binary files /dev/null and b/mods/farming/textures/farming_artichoke.png differ diff --git a/mods/farming/textures/farming_artichoke_1.png b/mods/farming/textures/farming_artichoke_1.png new file mode 100644 index 00000000..b7f2e020 Binary files /dev/null and b/mods/farming/textures/farming_artichoke_1.png differ diff --git a/mods/farming/textures/farming_artichoke_2.png b/mods/farming/textures/farming_artichoke_2.png new file mode 100644 index 00000000..653637e0 Binary files /dev/null and b/mods/farming/textures/farming_artichoke_2.png differ diff --git a/mods/farming/textures/farming_artichoke_3.png b/mods/farming/textures/farming_artichoke_3.png new file mode 100644 index 00000000..2d203e90 Binary files /dev/null and b/mods/farming/textures/farming_artichoke_3.png differ diff --git a/mods/farming/textures/farming_artichoke_4.png b/mods/farming/textures/farming_artichoke_4.png new file mode 100644 index 00000000..9a44e928 Binary files /dev/null and b/mods/farming/textures/farming_artichoke_4.png differ diff --git a/mods/farming/textures/farming_artichoke_5.png b/mods/farming/textures/farming_artichoke_5.png new file mode 100644 index 00000000..dac25ddf Binary files /dev/null and b/mods/farming/textures/farming_artichoke_5.png differ diff --git a/mods/farming/textures/banana_leaf.png b/mods/farming/textures/farming_banana_leaf.png similarity index 100% rename from mods/farming/textures/banana_leaf.png rename to mods/farming/textures/farming_banana_leaf.png diff --git a/mods/farming/textures/banana_single.png b/mods/farming/textures/farming_banana_single.png similarity index 100% rename from mods/farming/textures/banana_single.png rename to mods/farming/textures/farming_banana_single.png diff --git a/mods/farming/textures/farming_caramel.png b/mods/farming/textures/farming_caramel.png new file mode 100644 index 00000000..bc7d1648 Binary files /dev/null and b/mods/farming/textures/farming_caramel.png differ diff --git a/mods/farming/textures/farming_cheese_vegan.png b/mods/farming/textures/farming_cheese_vegan.png new file mode 100644 index 00000000..22c439e3 Binary files /dev/null and b/mods/farming/textures/farming_cheese_vegan.png differ diff --git a/mods/farming/textures/farming_gyoza.png b/mods/farming/textures/farming_gyoza.png new file mode 100644 index 00000000..c8f036f0 Binary files /dev/null and b/mods/farming/textures/farming_gyoza.png differ diff --git a/mods/farming/textures/farming_melon_bottom.png b/mods/farming/textures/farming_melon_bottom.png new file mode 100644 index 00000000..91d1e6cd Binary files /dev/null and b/mods/farming/textures/farming_melon_bottom.png differ diff --git a/mods/farming/textures/farming_melon_side.png b/mods/farming/textures/farming_melon_side.png index 88e40c6a..07afb25d 100644 Binary files a/mods/farming/textures/farming_melon_side.png and b/mods/farming/textures/farming_melon_side.png differ diff --git a/mods/farming/textures/farming_melon_top.png b/mods/farming/textures/farming_melon_top.png index f387dbd0..29ca92d2 100644 Binary files a/mods/farming/textures/farming_melon_top.png and b/mods/farming/textures/farming_melon_top.png differ diff --git a/mods/farming/textures/farming_mint_1.png b/mods/farming/textures/farming_mint_1.png index 10ba563d..1f303aeb 100644 Binary files a/mods/farming/textures/farming_mint_1.png and b/mods/farming/textures/farming_mint_1.png differ diff --git a/mods/farming/textures/farming_mint_2.png b/mods/farming/textures/farming_mint_2.png index b0d43247..cdcde54b 100644 Binary files a/mods/farming/textures/farming_mint_2.png and b/mods/farming/textures/farming_mint_2.png differ diff --git a/mods/farming/textures/farming_mint_3.png b/mods/farming/textures/farming_mint_3.png index 3ae3d61b..4bfc43f2 100644 Binary files a/mods/farming/textures/farming_mint_3.png and b/mods/farming/textures/farming_mint_3.png differ diff --git a/mods/farming/textures/farming_mint_4.png b/mods/farming/textures/farming_mint_4.png index 83c0e901..a71a6e33 100644 Binary files a/mods/farming/textures/farming_mint_4.png and b/mods/farming/textures/farming_mint_4.png differ diff --git a/mods/farming/textures/farming_mint_leaf.png b/mods/farming/textures/farming_mint_leaf.png index da3a77f0..9e144673 100644 Binary files a/mods/farming/textures/farming_mint_leaf.png and b/mods/farming/textures/farming_mint_leaf.png differ diff --git a/mods/farming/textures/farming_mint_tea.png b/mods/farming/textures/farming_mint_tea.png index 0c7b5328..a4b6440c 100644 Binary files a/mods/farming/textures/farming_mint_tea.png and b/mods/farming/textures/farming_mint_tea.png differ diff --git a/mods/farming/textures/farming_mochi.png b/mods/farming/textures/farming_mochi.png new file mode 100644 index 00000000..7b3b2b57 Binary files /dev/null and b/mods/farming/textures/farming_mochi.png differ diff --git a/mods/farming/textures/farming_onigiri.png b/mods/farming/textures/farming_onigiri.png new file mode 100644 index 00000000..86ee7c68 Binary files /dev/null and b/mods/farming/textures/farming_onigiri.png differ diff --git a/mods/farming/textures/farming_paella.png b/mods/farming/textures/farming_paella.png new file mode 100644 index 00000000..1362ac74 Binary files /dev/null and b/mods/farming/textures/farming_paella.png differ diff --git a/mods/farming/textures/farming_parsley.png b/mods/farming/textures/farming_parsley.png new file mode 100644 index 00000000..183ecb75 Binary files /dev/null and b/mods/farming/textures/farming_parsley.png differ diff --git a/mods/farming/textures/farming_parsley_1.png b/mods/farming/textures/farming_parsley_1.png new file mode 100644 index 00000000..632928c8 Binary files /dev/null and b/mods/farming/textures/farming_parsley_1.png differ diff --git a/mods/farming/textures/farming_parsley_2.png b/mods/farming/textures/farming_parsley_2.png new file mode 100644 index 00000000..fddbf00b Binary files /dev/null and b/mods/farming/textures/farming_parsley_2.png differ diff --git a/mods/farming/textures/farming_parsley_3.png b/mods/farming/textures/farming_parsley_3.png new file mode 100644 index 00000000..e4aacb94 Binary files /dev/null and b/mods/farming/textures/farming_parsley_3.png differ diff --git a/mods/farming/textures/farming_pineapple_ring.png b/mods/farming/textures/farming_pineapple_ring.png index deb2e6d0..4cf3feb8 100644 Binary files a/mods/farming/textures/farming_pineapple_ring.png and b/mods/farming/textures/farming_pineapple_ring.png differ diff --git a/mods/farming/textures/farming_popcorn.png b/mods/farming/textures/farming_popcorn.png new file mode 100644 index 00000000..6a534b94 Binary files /dev/null and b/mods/farming/textures/farming_popcorn.png differ diff --git a/mods/farming/textures/farming_potato_omelet.png b/mods/farming/textures/farming_potato_omelet.png new file mode 100644 index 00000000..abdacada Binary files /dev/null and b/mods/farming/textures/farming_potato_omelet.png differ diff --git a/mods/farming/textures/farming_pumpkin_bottom.png b/mods/farming/textures/farming_pumpkin_bottom.png new file mode 100644 index 00000000..b23d2413 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_bottom.png differ diff --git a/mods/farming/textures/farming_soy_sauce.png b/mods/farming/textures/farming_soy_sauce.png new file mode 100644 index 00000000..f32caec4 Binary files /dev/null and b/mods/farming/textures/farming_soy_sauce.png differ diff --git a/mods/farming/textures/farming_spanish_potatoes.png b/mods/farming/textures/farming_spanish_potatoes.png new file mode 100644 index 00000000..198b50e4 Binary files /dev/null and b/mods/farming/textures/farming_spanish_potatoes.png differ diff --git a/mods/farming/textures/strawberry.png b/mods/farming/textures/farming_strawberry.png similarity index 100% rename from mods/farming/textures/strawberry.png rename to mods/farming/textures/farming_strawberry.png diff --git a/mods/farming/textures/farming_tomato_soup.png b/mods/farming/textures/farming_tomato_soup.png new file mode 100644 index 00000000..d58d53db Binary files /dev/null and b/mods/farming/textures/farming_tomato_soup.png differ diff --git a/mods/farming/textures/farming_vanilla_flan.png b/mods/farming/textures/farming_vanilla_flan.png new file mode 100644 index 00000000..c8b9ff06 Binary files /dev/null and b/mods/farming/textures/farming_vanilla_flan.png differ diff --git a/mods/farming/textures/farming_water_glass.png b/mods/farming/textures/farming_water_glass.png new file mode 100644 index 00000000..081f8d6e Binary files /dev/null and b/mods/farming/textures/farming_water_glass.png differ diff --git a/mods/farming/utensils.lua b/mods/farming/utensils.lua index 8224e7d4..f9b2d29f 100644 --- a/mods/farming/utensils.lua +++ b/mods/farming/utensils.lua @@ -20,7 +20,7 @@ minetest.register_craft({ minetest.register_craft({ type = "fuel", recipe = "farming:bowl", - burntime = 10, + burntime = 10 }) -- saucepan @@ -155,9 +155,6 @@ minetest.register_craft({ }) minetest.register_craft( { - type = "shapeless", output = "vessels:glass_fragments", - recipe = { - "farming:mixing_bowl" - } + recipe = {{"farming:mixing_bowl"}} }) diff --git a/mods/flowerpot/init.lua b/mods/flowerpot/init.lua index 135f6fff..0998e6dc 100644 --- a/mods/flowerpot/init.lua +++ b/mods/flowerpot/init.lua @@ -102,7 +102,7 @@ function flowerpot.register_node(nodename) local dropname = nodename:gsub("grass_%d", "grass_1") - minetest.register_node("flowerpot:" .. name, { + minetest.register_node(":flowerpot:" .. name, { description = S("Flowerpot with @1", desc), drawtype = "mesh", mesh = "flowerpot.obj", diff --git a/mods/gloopblocks/crafts.lua b/mods/gloopblocks/crafts.lua index 5b614bed..c7e2103b 100644 --- a/mods/gloopblocks/crafts.lua +++ b/mods/gloopblocks/crafts.lua @@ -334,3 +334,34 @@ if minetest.get_modpath("technic") then } }) end + +minetest.register_craft({ + output = "gloopblocks:concrete_sidewalk", + type = "shapeless", + recipe = { + "streets:slab_concrete_2", + "default:dirt", + } +}) + +minetest.register_craft({ + output = "gloopblocks:concrete_sidewalk 2", + type = "shapeless", + recipe = { + "streets:slab_concrete_quarter", + "default:dirt", + "default:dirt" + } +}) + +minetest.register_craft({ + output = "gloopblocks:concrete_sidewalk 4", + type = "shapeless", + recipe = { + "streets:slab_concrete", + "default:dirt", + "default:dirt", + "default:dirt", + "default:dirt" + } +}) diff --git a/mods/gloopblocks/depends.txt b/mods/gloopblocks/depends.txt deleted file mode 100644 index dfc42992..00000000 --- a/mods/gloopblocks/depends.txt +++ /dev/null @@ -1,22 +0,0 @@ -default -basic_materials -moreblocks? -stairs? -glooptest? -gloopores? -intllib? -wool? -xdecor? -caverealms? -technic? -nyancat? -usesdirt? -worldedit? -signs_lib? -bakedclay? -farming? -wool? -bushes_classic? -dryplants? -bedrock? -cottages? diff --git a/mods/gloopblocks/main.lua b/mods/gloopblocks/main.lua index ae6ffe42..7db9bba3 100644 --- a/mods/gloopblocks/main.lua +++ b/mods/gloopblocks/main.lua @@ -34,6 +34,7 @@ minetest.register_node("gloopblocks:evil_block", { light_source = 5, is_ground_content = true, groups = {cracky=2}, + sounds = default.node_sound_stone_defaults(), }) @@ -130,6 +131,30 @@ minetest.register_node("gloopblocks:scaffolding", { sounds = default.node_sound_wood_defaults(), }) +minetest.register_node("gloopblocks:concrete_sidewalk", { + description = S("Concrete sidewalk"), + tiles = { + "basic_materials_concrete_block.png", + "basic_materials_concrete_block.png^gloopblocks_concrete_sidewalk_overlay.png", + "gloopblocks_packed_dirt.png" + }, + drawtype = "mesh", + mesh = "gloopblocks_sidewalk.obj", + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + collision_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, 0.5625, 0.5 } + }, + on_rotate = screwdriver.rotate_simple, + groups = {cracky=2}, + sounds = default.node_sound_stone_defaults(), +}) + + minetest.register_alias("moreblocks:oerkkiblock", "gloopblocks:oerkki_block") minetest.register_alias("gloopblocks:obsidian", "default:obsidian") diff --git a/mods/gloopblocks/mod.conf b/mods/gloopblocks/mod.conf index a59f835f..53e09763 100644 --- a/mods/gloopblocks/mod.conf +++ b/mods/gloopblocks/mod.conf @@ -1,2 +1,4 @@ name = gloopblocks min_minetest_version = 5.2.0 +depends = default, basic_materials +optional_depends = screwdriver, stairs, wool, moreblocks, glooptest, gloopores, intllib, xdecor, caverealms, technic, nyancat, usesdirt, worldedit, signs_lib, bakedclay, farming, bushes_classic, dryplants, bedrock, cottages diff --git a/mods/gloopblocks/models/gloopblocks_sidewalk.obj b/mods/gloopblocks/models/gloopblocks_sidewalk.obj new file mode 100644 index 00000000..944d08df --- /dev/null +++ b/mods/gloopblocks/models/gloopblocks_sidewalk.obj @@ -0,0 +1,119 @@ +# Blender v2.83.5 OBJ File: 'gloopblocks sidewalk.blend' +# www.blender.org +o Cube_Cube.001 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 0.437500 -0.500000 +v -0.498047 0.445310 -0.498047 +v -0.500000 0.437500 0.500000 +v -0.498047 0.445310 0.498047 +v 0.500000 0.437500 0.500000 +v 0.498047 0.445310 0.498047 +v 0.498047 0.445310 -0.498047 +v 0.500000 0.437500 -0.500000 +v -0.498047 0.531250 -0.498047 +v -0.466425 0.562500 -0.466425 +v 0.466425 0.562500 -0.466425 +v 0.498047 0.531250 -0.498047 +v -0.466425 0.562500 0.466425 +v -0.498047 0.531250 0.498047 +v 0.498047 0.531250 0.498047 +v 0.466425 0.562500 0.466425 +vt 0.001953 0.968750 +vt 0.001953 0.882810 +vt 0.998046 0.882810 +vt 0.998046 0.968750 +vt 0.998046 0.968750 +vt 0.001953 0.968750 +vt 0.001953 0.882810 +vt 0.998046 0.882810 +vt 0.998047 0.882810 +vt 0.998047 0.968750 +vt 0.001953 0.968750 +vt 0.001953 0.882810 +vt 0.001954 0.998047 +vt 0.998047 0.998047 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.998047 0.001953 +vt 1.000000 0.000000 +vt 0.000000 0.000000 +vt 0.001954 0.001953 +vt 0.033575 0.966425 +vt 0.033575 0.033575 +vt 0.966425 0.033575 +vt 0.966425 0.966425 +vt 0.998047 0.998046 +vt 0.001953 0.998047 +vt 0.033575 0.966425 +vt 0.966425 0.966425 +vt 0.033575 0.966425 +vt 0.966425 0.966425 +vt 0.998047 0.998047 +vt 0.001953 0.998047 +vt 0.998046 0.968750 +vt 0.001953 0.968750 +vt 0.001953 0.882810 +vt 0.998046 0.882810 +vt 0.033575 0.966425 +vt 0.966425 0.966425 +vt 0.998047 0.998047 +vt 0.001953 0.998047 +vt 0.998047 0.998047 +vt 0.001954 0.998047 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 0.000000 0.000000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 0.000000 0.937500 +vt 1.000000 0.000000 +vt 1.000000 0.937500 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.2426 -0.9701 +vn 0.9701 0.2426 0.0000 +vn 0.0000 0.2426 0.9701 +vn 0.0000 1.0000 0.0000 +vn -0.9701 0.2426 0.0000 +vn -0.7029 0.7113 0.0000 +vn 0.7029 0.7113 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.7113 0.7029 +vn 0.0000 0.7113 -0.7029 +vn 0.0000 -1.0000 0.0000 +g Cube_Cube.001_concrete_top +s off +f 13/1/1 6/2/1 8/3/1 18/4/1 +f 16/5/2 19/6/2 10/7/2 11/8/2 +f 10/9/3 19/10/3 18/11/3 8/12/3 +f 6/13/4 11/14/4 12/15/4 5/16/4 +f 11/14/5 10/17/5 9/18/5 12/15/5 +f 7/19/6 9/18/6 10/17/6 8/20/6 +f 14/21/7 17/22/7 20/23/7 15/24/7 +f 8/20/8 6/13/8 5/16/8 7/19/8 +f 13/25/9 18/26/9 17/27/9 14/28/9 +f 15/29/10 20/30/10 19/31/10 16/32/10 +f 13/33/11 16/34/11 11/35/11 6/36/11 +g Cube_Cube.001_concrete_edges +f 20/37/12 17/38/12 18/39/12 19/40/12 +f 14/21/13 15/24/13 16/41/13 13/42/13 +g Cube_Cube.001_dirt +f 1/43/3 3/44/3 9/45/3 7/46/3 +f 4/47/14 3/48/14 1/49/14 2/50/14 +f 4/51/11 2/52/11 5/53/11 12/54/11 +f 3/55/2 4/47/2 12/56/2 9/57/2 +f 5/58/1 2/50/1 1/59/1 7/60/1 diff --git a/mods/gloopblocks/textures/gloopblocks_concrete_sidewalk_overlay.png b/mods/gloopblocks/textures/gloopblocks_concrete_sidewalk_overlay.png new file mode 100644 index 00000000..eeaf7974 Binary files /dev/null and b/mods/gloopblocks/textures/gloopblocks_concrete_sidewalk_overlay.png differ diff --git a/mods/gloopblocks/textures/gloopblocks_packed_dirt.png b/mods/gloopblocks/textures/gloopblocks_packed_dirt.png new file mode 100644 index 00000000..3475667c Binary files /dev/null and b/mods/gloopblocks/textures/gloopblocks_packed_dirt.png differ diff --git a/mods/home_workshop_modpack/README.txt b/mods/home_workshop_modpack/README.txt new file mode 100644 index 00000000..b22de6bc --- /dev/null +++ b/mods/home_workshop_modpack/README.txt @@ -0,0 +1,7 @@ +This is a simple modpack containing computers, tools, machines, etc. + +Most things herein were formerly part of some component of my homedecor +modpack, but as I started adding machines or tools to the modpack, some +stuff began to look a lot less "home decor"-ish. + +Most of the items herein are just decorative... for now. diff --git a/mods/homedecor_modpack/computer/.luacheckrc b/mods/home_workshop_modpack/computers/.luacheckrc similarity index 100% rename from mods/homedecor_modpack/computer/.luacheckrc rename to mods/home_workshop_modpack/computers/.luacheckrc diff --git a/mods/homedecor_modpack/computer/CHANGES.txt b/mods/home_workshop_modpack/computers/CHANGES.txt similarity index 100% rename from mods/homedecor_modpack/computer/CHANGES.txt rename to mods/home_workshop_modpack/computers/CHANGES.txt diff --git a/mods/homedecor_modpack/computer/README.txt b/mods/home_workshop_modpack/computers/README.txt similarity index 67% rename from mods/homedecor_modpack/computer/README.txt rename to mods/home_workshop_modpack/computers/README.txt index beed59e6..f7fccdef 100644 --- a/mods/homedecor_modpack/computer/README.txt +++ b/mods/home_workshop_modpack/computers/README.txt @@ -17,21 +17,27 @@ For now just use creative mode or the `/give' or `/giveme' chat commands These are the items currently defined by this mod: -computer:printer (printer scanner combo) -computer:server (rack server) -computer:tower (modern type) -computer:monitor (LCD with keyboard) -computer:router (wifi type) -computer:babytower -computer:shefriendSOO -computer:slaystation -computer:vanio -computer:spectre -computer:slaystation2 -computer:admiral64 -computer:admiral128 +"computers:shefriendSOO", +"computers:vanio", +"computers:vanio_off", +"computers:slaystation", +"computers:slaystation2", +"computers:specter", +"computers:wee", +"computers:piepad", +"computers:admiral64", +"computers:admiral128", +"computers:hueg_box", +"computers:monitor", +"computers:monitor_on", +"computers:router", +"computers:tower", +"computers:server", +"computers:server_on", +"computers:printer", +"computers:tetris_arcade", -There's also a `computer:computer' alias to `computer:babytower'. +There's also a `computers:computer' alias to `computers:babytower'. Thanks to all the people in the forums and the #minetest IRC channel for their support and suggestions; in no particular order: diff --git a/mods/homedecor_modpack/computer/TODO.txt b/mods/home_workshop_modpack/computers/TODO.txt similarity index 100% rename from mods/homedecor_modpack/computer/TODO.txt rename to mods/home_workshop_modpack/computers/TODO.txt diff --git a/mods/home_workshop_modpack/computers/aliases.lua b/mods/home_workshop_modpack/computers/aliases.lua new file mode 100644 index 00000000..35df60c5 --- /dev/null +++ b/mods/home_workshop_modpack/computers/aliases.lua @@ -0,0 +1,32 @@ +minetest.register_alias("computer:shefriendSOO", "computers:shefriendSOO") +minetest.register_alias("computer:shefriendSOO_off", "computers:shefriendSOO_off") +minetest.register_alias("computer:vanio", "computers:vanio") +minetest.register_alias("computer:vanio_off", "computers:vanio_off") +minetest.register_alias("computer:slaystation", "computers:slaystation") +minetest.register_alias("computer:slaystation_off", "computers:slaystation_off") +minetest.register_alias("computer:slaystation2", "computers:slaystation2") +minetest.register_alias("computer:slaystation2_off", "computers:slaystation2_off") +minetest.register_alias("computer:specter", "computers:specter") +minetest.register_alias("computer:specter_off", "computers:specter_off") +minetest.register_alias("computer:wee", "computers:wee") +minetest.register_alias("computer:wee_off", "computers:wee_off") +minetest.register_alias("computer:piepad", "computers:piepad") +minetest.register_alias("computer:admiral64", "computers:admiral64") +minetest.register_alias("computer:admiral64_off", "computers:admiral64_off") +minetest.register_alias("computer:admiral128", "computers:admiral128") +minetest.register_alias("computer:admiral128_off", "computers:admiral128_off") +minetest.register_alias("computer:hueg_box", "computers:hueg_box") +minetest.register_alias("computer:hueg_box_off", "computers:hueg_box_off") +minetest.register_alias("computer:monitor", "computers:monitor") +minetest.register_alias("computer:monitor_on", "computers:monitor_on") +minetest.register_alias("computer:monitor_bios", "computers:monitor") +minetest.register_alias("computer:monitor_loading", "computers:monitor") +minetest.register_alias("computer:monitor_login", "computers:monitor") +minetest.register_alias("computer:monitor_desktop", "computers:monitor") +minetest.register_alias("computer:router", "computers:router") +minetest.register_alias("computer:tower", "computers:tower") +minetest.register_alias("computer:tower_on", "computers:tower") +minetest.register_alias("computer:server", "computers:server") +minetest.register_alias("computer:server_on", "computers:server_on") +minetest.register_alias("computer:printer", "computers:printer") +minetest.register_alias("computer:tetris_arcade", "computers:tetris_arcade") diff --git a/mods/home_workshop_modpack/computers/computers.lua b/mods/home_workshop_modpack/computers/computers.lua new file mode 100644 index 00000000..0853e6b5 --- /dev/null +++ b/mods/home_workshop_modpack/computers/computers.lua @@ -0,0 +1,300 @@ +local S = minetest.get_translator("computers") + +-- Amiga 500 lookalike +computers.register("computers:shefriendSOO", { + description = S("SheFriendSOO"), + tiles_off = { front=true }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 0, 0, 17, 32, 32, 12 }, -- Monitor Screen + { 3, 3, 29, 26, 26, 3 }, -- Monitor Tube + { 0, 0, 0, 32, 4, 17 } -- Keyboard + }) +}) + +-- Some generic laptop +minetest.register_node("computers:vanio", { + drawtype = "mesh", + mesh = "computers_laptop.obj", + description = S("Pony Vanio"), + inventory_image = "computers_laptop_inv.png", + tiles = {"computers_laptop.png"}, + paramtype = "light", + paramtype2 = "facedir", + light_source = 4, + groups = {snappy=3}, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.35, -0.5, -0.35, 0.35, 0.05, 0.35}, + }, + on_rightclick = function(pos, node, clicker, itemstack) + node.name = "computers:vanio_off" + minetest.set_node(pos, node) + return itemstack + end +}) + +minetest.register_node("computers:vanio_off", { + drawtype = "mesh", + mesh = "computers_laptop_closed.obj", + tiles = {"computers_laptop.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, not_in_creative_inventory=1}, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.35, -0.5, -0.35, 0.35, -0.4, 0.25}, + }, + drop = "computers:vanio", + on_rightclick = function(pos, node, clicker, itemstack) + node.name = "computers:vanio" + minetest.set_node(pos, node) + return itemstack + end +}) + +-- Sinclair ZX Spectrum lookalike +computers.register("computers:specter", { + description = S("SX Specter"), + inventory_image = "computers_specter_inv.png", + tiles_off = { }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 3, 0, 0, 26, 4, 17 }, -- Keyboard + { 18, 0, 18, 12, 6, 14 } -- Tape Player + }) +}) + +-- Apple iPad lookalike +minetest.register_node("computers:piepad", { + description = S("Snapple Piepad"), + drawtype = "signlike", + tiles = {"computers_piepad_inv.png"}, + inventory_image = "computers_piepad_inv.png", + wield_image = "computers_piepad_inv.png", + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 8, + walkable = false, + groups = {oddly_breakable_by_hand=2}, + selection_box = {type = "wallmounted"}, + sounds = default.node_sound_wood_defaults() +}) + +-- Commodore 64 lookalike +computers.register("computers:admiral64", { + description = S("Admiral64"), + inventory_image = "computers_ad64_inv.png", + tiles_off = { }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 0, 0, 0, 32, 4, 18 } -- Keyboard + }) +}) + +-- Commodore 128 lookalike +computers.register("computers:admiral128", { + description = S("Admiral128"), + inventory_image = "computers_ad128_inv.png", + tiles_off = { }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 0, 0, 0, 32, 4, 27 } -- Keyboard + }) +}) + +-- Generic Flat Screen LCD (16x9) with keyboard +local mo_sbox = { + type = "fixed", + fixed = { -0.5, -0.5, -0.43, 0.5, 0.2, 0.25 } +} + +minetest.register_node("computers:monitor", { + description = S("Monitor and keyboard"), + inventory_image = "computers_monitor_inv.png", + drawtype = "mesh", + mesh = "computers_monitor.obj", + tiles = {"computers_black.png", "computers_monitor_plastic.png", "computers_black.png", "computers_monitor_plastic.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + groups = {snappy=3}, + selection_box = mo_sbox, + on_rightclick = function(pos, node, clicker, itemstack) + node.name = "computers:monitor_on" + minetest.set_node(pos, node) + return itemstack + end +}) + +minetest.register_node("computers:monitor_on", { + drawtype = "mesh", + mesh = "computers_monitor.obj", + tiles = {"computers_monitor_display.png^[transformFX", "computers_monitor_plastic.png", "computers_black.png", "computers_monitor_plastic.png"}, + paramtype = "light", + paramtype2 = "facedir", + light_source = 9, + walkable = false, + groups = {snappy=3, not_in_creative_inventory=1}, + selection_box = mo_sbox, + drop = "computers:monitor", + on_rightclick = function(pos, node, clicker, itemstack) + node.name = "computers:monitor" + minetest.set_node(pos, node) + return itemstack + end +}) + +--WIFI Router (linksys look-a-like) +minetest.register_node("computers:router", { + description = S("WIFI Router"), + inventory_image = "computers_router_inv.png", + tiles = { + "computers_router_t.png", + "computers_router_bt.png", + "computers_router_l.png", + "computers_router_r.png", + "computers_router_b.png", + { + name = "computers_router_f_animated.png", + animation = {type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0} + }, + }, --"computers_router_f.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = false, + groups = {snappy=3}, + sound = default.node_sound_wood_defaults(), + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.0625, 0.25, -0.375, 0.3125}, + {-0.1875, -0.4375, 0.3125, -0.125, -0.1875, 0.375}, + {0.125, -0.4375, 0.3125, 0.1875, -0.1875, 0.375}, + {-0.0625, -0.4375, 0.3125, 0.0625, -0.25, 0.375} + } + } +}) + +local pct_cbox = { + type = "fixed", + fixed = { -0.1875, -0.5, -0.36, 0.1875, 0.34, 0.46 } +} + +--Modern PC Tower +minetest.register_node("computers:tower", { + description = S("Computer Tower"), + inventory_image = "computers_tower_inv.png", + drawtype = "mesh", + mesh = "computers_tower.obj", + tiles = {"computers_tower.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3}, + sound = default.node_sound_wood_defaults(), + selection_box = pct_cbox, + collision_box = pct_cbox +}) + +--Rack Server +minetest.register_node("computers:server", { + drawtype = "nodebox", + description = S("Rack Server"), + tiles = { + 'computers_server_t.png', + 'computers_server_bt.png', + 'computers_server_l.png', + 'computers_server_r.png', + 'computers_server_bt.png', + 'computers_server_f_off.png' + }, + inventory_image = "computers_server_inv.png", + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} + }, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} + }, + sounds = default.node_sound_wood_defaults(), + on_rightclick = function(pos, node, clicker, itemstack) + node.name = "computers:server_on" + minetest.set_node(pos, node) + return itemstack + end, + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "air" then + minetest.chat_send_player( placer:get_player_name(), + S("Not enough vertical space to place a server!" )) + return itemstack + end + return minetest.item_place(itemstack, placer, pointed_thing) + end +}) + +minetest.register_node("computers:server_on", { + drawtype = "nodebox", + tiles = { + 'computers_server_t.png', + 'computers_server_bt.png', + 'computers_server_l.png', + 'computers_server_r.png', + 'computers_server_bt.png', + 'computers_server_f_on.png', + }, + inventory_image = "computers_server_inv.png", + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3,not_in_creative_inventory=1}, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} + }, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} + }, + sounds = default.node_sound_wood_defaults(), + drop = 'computers:server', + on_rightclick = function(pos, node, clicker, itemstack) + node.name = "computers:server" + minetest.set_node(pos, node) + return itemstack + end +}) + +-- Printer of some kind + +minetest.register_node("computers:printer", { + description = S("Printer-Scanner Combo"), + inventory_image = "computers_printer_inv.png", + tiles = {"computers_printer_t.png","computers_printer_bt.png","computers_printer_l.png", + "computers_printer_r.png","computers_printer_b.png","computers_printer_f.png"}, + paramtype = "light", + paramtype2 = "facedir", + walkable = true, + groups = {snappy=3}, + sound = default.node_sound_wood_defaults(), + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.3125, -0.125, 0.4375, -0.0625, 0.375}, + {-0.4375, -0.5, -0.125, 0.4375, -0.4375, 0.375}, + {-0.4375, -0.5, -0.125, -0.25, -0.0625, 0.375}, + {0.25, -0.5, -0.125, 0.4375, -0.0625, 0.375}, + {-0.4375, -0.5, -0.0625, 0.4375, -0.0625, 0.375}, + {-0.375, -0.4375, 0.25, 0.375, -0.0625, 0.4375}, + {-0.25, -0.25, 0.4375, 0.25, 0.0625, 0.5}, + {-0.25, -0.481132, -0.3125, 0.25, -0.4375, 0} + }, + }, +}) diff --git a/mods/homedecor_modpack/computer/tetris.lua b/mods/home_workshop_modpack/computers/gaming.lua similarity index 71% rename from mods/homedecor_modpack/computer/tetris.lua rename to mods/home_workshop_modpack/computers/gaming.lua index c8031c3b..cab3eff7 100644 --- a/mods/homedecor_modpack/computer/tetris.lua +++ b/mods/home_workshop_modpack/computers/gaming.lua @@ -1,4 +1,68 @@ -local S = minetest.get_translator("computer") +local S = minetest.get_translator("computers") + +-- Sony PlayStation lookalike +computers.register("computers:slaystation", { + description = S("Pony SlayStation"), + inventory_image = "computers_ps1_inv.png", + tiles_off = { top=true }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 0, 0, 11, 32, 6, 21 }, -- Console + { 1, 0, 1, 4, 2, 9 }, -- Controller 1 L Grip + { 10, 0, 1, 4, 2, 9 }, -- Controller 1 R Grip + { 5, 0, 4, 5, 2, 5 }, -- Controller 1 Center + { 18, 0, 1, 4, 2, 9 }, -- Controller 2 L Grip + { 27, 0, 1, 4, 2, 9 }, -- Controller 2 R Grip + { 22, 0, 4, 5, 2, 5 } -- Controller 2 Center + }) +}) + +-- Sony PlayStation 2 lookalike +computers.register("computers:slaystation2", { + description = S("Pony SlayStation 2"), + inventory_image = "computers_ps2_inv.png", + tiles_off = { front=true }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 2, 2, 11, 28, 3, 19 }, -- Console (Upper part) + { 2, 0, 11, 26, 2, 19 }, -- Console (Lower part) + { 1, 0, 1, 4, 2, 9 }, -- Controller 1 L Grip + { 10, 0, 1, 4, 2, 9 }, -- Controller 1 R Grip + { 5, 0, 1, 5, 2, 8 }, -- Controller 1 Center + { 18, 0, 1, 4, 2, 9 }, -- Controller 2 L Grip + { 27, 0, 1, 4, 2, 9 }, -- Controller 2 R Grip + { 22, 0, 1, 5, 2, 8 } -- Controller 2 Center + }) +}) + +-- Nintendo Wii lookalike +computers.register("computers:wee", { + description = S("Nientiendo Wee"), + inventory_image = "computers_wii_inv.png", + tiles_off = { front=true }, + node_box = computers.pixelnodebox(32, { + -- X Y Z W H L + { 11, 0, 3, 10, 6, 26 }, -- Base + { 12, 6, 4, 8, 22, 24 } -- Top + }) +}) + +-- XBox lookalike +computers.register("computers:hueg_box", { + description = S("HUEG Box"), + tiles_off = { }, + node_box = computers.pixelnodebox(16, { + -- X Y Z W H L + { 0, 0, 7, 16, 6, 9 }, -- Console + { 2, 0, 1, 11, 3, 6 }, -- Controller + { 2, 0, 0, 2, 3, 1 }, + { 11, 0, 0, 2, 3, 1 }, + }) +}) + + + +-- Tetris arcade machine local shapes = { { { x = {0, 1, 0, 1}, y = {0, 0, 1, 1} } }, @@ -27,10 +91,10 @@ local shapes = { { x = {0, 1, 2, 1}, y = {1, 1, 1, 2} }, { x = {0, 1, 1, 1}, y = {1, 0, 1, 2} } } } -local colors = { "computer_cyan.png", "computer_magenta.png", "computer_red.png", - "computer_blue.png", "computer_green.png", "computer_orange.png", "computer_yellow.png" } +local colors = { "computers_cyan.png", "computers_magenta.png", "computers_red.png", + "computers_blue.png", "computers_green.png", "computers_orange.png", "computers_yellow.png" } -local background = "image[0,0;3.55,6.66;computer_black.png]" +local background = "image[0,0;3.55,6.66;computers_black.png]" local buttons = "button[3,4.5;0.6,0.6;left;<]" .."button[3.6,4.5;0.6,0.6;rotateleft;"..minetest.formspec_escape(S("L")).."]" .."button[4.2,4.5;0.6,0.6;down;v]" @@ -242,11 +306,11 @@ local function step(pos, fields) return run end -minetest.register_node("computer:tetris_arcade", { +minetest.register_node("computers:tetris_arcade", { description=S("Tetris Arcade"), drawtype = "mesh", - mesh = "tetris_arcade.obj", - tiles = {"tetris_arcade.png"}, + mesh = "computers_tetris_arcade.obj", + tiles = {"computers_tetris_arcade.png"}, paramtype = "light", paramtype2 = "facedir", groups = {snappy=3}, @@ -282,7 +346,7 @@ minetest.register_node("computer:tetris_arcade", { return itemstack end local dir = placer:get_look_dir() - local node = {name="computer:tetris_arcade", param1=0, param2 = minetest.dir_to_facedir(dir)} + local node = {name="computers:tetris_arcade", param1=0, param2 = minetest.dir_to_facedir(dir)} minetest.set_node(pos, node) itemstack:take_item() return itemstack diff --git a/mods/homedecor_modpack/computer/init.lua b/mods/home_workshop_modpack/computers/init.lua similarity index 90% rename from mods/homedecor_modpack/computer/init.lua rename to mods/home_workshop_modpack/computers/init.lua index 8c6ef71d..c017277a 100644 --- a/mods/homedecor_modpack/computer/init.lua +++ b/mods/home_workshop_modpack/computers/init.lua @@ -1,6 +1,6 @@ -computer = {} +computers = {} -computer.register = function (name, def) +computers.register = function (name, def) if (name:sub(1, 1) == ":") then name = name:sub(2) end local modname, basename = name:match("^([^:]+):(.*)") local TEXPFX = modname.."_"..basename.."_" @@ -60,7 +60,7 @@ computer.register = function (name, def) }) end -computer.register_handheld = function (name, def) +computers.register_handheld = function (name, def) if (name:sub(1, 1) == ":") then name = name:sub(2) end local modname, basename = name:match("^([^:]+):(.*)") local TEXPFX = modname.."_"..basename.."_inv" @@ -72,7 +72,7 @@ computer.register_handheld = function (name, def) }) end -computer.pixelnodebox = function (size, boxes) +computers.pixelnodebox = function (size, boxes) local fixed = { } for _, box in ipairs(boxes) do local x, y, z, w, h, l = unpack(box) @@ -91,8 +91,8 @@ computer.pixelnodebox = function (size, boxes) } end -local MODPATH = minetest.get_modpath("computer") +local MODPATH = minetest.get_modpath("computers") dofile(MODPATH.."/computers.lua") -dofile(MODPATH.."/printers.lua") dofile(MODPATH.."/recipes.lua") -dofile(MODPATH.."/tetris.lua") +dofile(MODPATH.."/gaming.lua") +dofile(MODPATH.."/aliases.lua") diff --git a/mods/homedecor_modpack/computer/locale/computer.de.tr b/mods/home_workshop_modpack/computers/locale/computers.de.tr similarity index 88% rename from mods/homedecor_modpack/computer/locale/computer.de.tr rename to mods/home_workshop_modpack/computers/locale/computers.de.tr index 437c64d2..0d0485cf 100644 --- a/mods/homedecor_modpack/computer/locale/computer.de.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.de.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter=Z Inspektor SheFriendSOO=Freundin S00 Snapple Piepad=Apfel-Ei-Pat WIFI Router=WiFi-Router - -### printers.lua ### - -3D Printer ("bedflinger")=3D Drucker ("Bettschubser") Printer-Scanner Combo=Multifunktionsdrucker ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.es.tr b/mods/home_workshop_modpack/computers/locale/computers.es.tr similarity index 89% rename from mods/homedecor_modpack/computer/locale/computer.es.tr rename to mods/home_workshop_modpack/computers/locale/computers.es.tr index 66ec244b..f0d5a4d4 100644 --- a/mods/homedecor_modpack/computer/locale/computer.es.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.es.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=Enrutador WIFI - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=Impresora y escáner combinados ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.fr.tr b/mods/home_workshop_modpack/computers/locale/computers.fr.tr similarity index 89% rename from mods/homedecor_modpack/computer/locale/computer.fr.tr rename to mods/home_workshop_modpack/computers/locale/computers.fr.tr index 4b170d9b..91784b49 100644 --- a/mods/homedecor_modpack/computer/locale/computer.fr.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.fr.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=Routeur WiFi - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=Imprimante multi-fonction ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.it.tr b/mods/home_workshop_modpack/computers/locale/computers.it.tr similarity index 86% rename from mods/homedecor_modpack/computer/locale/computer.it.tr rename to mods/home_workshop_modpack/computers/locale/computers.it.tr index b8a72ee5..0a639cbb 100644 --- a/mods/homedecor_modpack/computer/locale/computer.it.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.it.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router= - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo= ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.ms.tr b/mods/home_workshop_modpack/computers/locale/computers.ms.tr similarity index 89% rename from mods/homedecor_modpack/computer/locale/computer.ms.tr rename to mods/home_workshop_modpack/computers/locale/computers.ms.tr index 89841cc0..e33788e5 100644 --- a/mods/homedecor_modpack/computer/locale/computer.ms.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.ms.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=Penghala WIFI - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=Pencetak Semua Dalam Satu ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.pt.tr b/mods/home_workshop_modpack/computers/locale/computers.pt.tr similarity index 89% rename from mods/homedecor_modpack/computer/locale/computer.pt.tr rename to mods/home_workshop_modpack/computers/locale/computers.pt.tr index f2824ed8..caad3ceb 100644 --- a/mods/homedecor_modpack/computer/locale/computer.pt.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.pt.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=Roteador WIFI - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=Tudo em Um Impressora-Scaner ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.pt_BR.tr b/mods/home_workshop_modpack/computers/locale/computers.pt_BR.tr similarity index 89% rename from mods/homedecor_modpack/computer/locale/computer.pt_BR.tr rename to mods/home_workshop_modpack/computers/locale/computers.pt_BR.tr index f2824ed8..caad3ceb 100644 --- a/mods/homedecor_modpack/computer/locale/computer.pt_BR.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.pt_BR.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=Roteador WIFI - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=Tudo em Um Impressora-Scaner ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.ru.tr b/mods/home_workshop_modpack/computers/locale/computers.ru.tr similarity index 91% rename from mods/homedecor_modpack/computer/locale/computer.ru.tr rename to mods/home_workshop_modpack/computers/locale/computers.ru.tr index 3e835f21..a5cca85b 100644 --- a/mods/homedecor_modpack/computer/locale/computer.ru.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.ru.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=WIFI-роутер - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=МФУ ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/computer.zh_CN.tr b/mods/home_workshop_modpack/computers/locale/computers.zh_CN.tr similarity index 89% rename from mods/homedecor_modpack/computer/locale/computer.zh_CN.tr rename to mods/home_workshop_modpack/computers/locale/computers.zh_CN.tr index c725e412..b4c67294 100644 --- a/mods/homedecor_modpack/computer/locale/computer.zh_CN.tr +++ b/mods/home_workshop_modpack/computers/locale/computers.zh_CN.tr @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router=无线路由器 - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo=打印扫描一体机 ### tetris.lua ### diff --git a/mods/homedecor_modpack/computer/locale/template.txt b/mods/home_workshop_modpack/computers/locale/template.txt similarity index 84% rename from mods/homedecor_modpack/computer/locale/template.txt rename to mods/home_workshop_modpack/computers/locale/template.txt index 2e84c9b5..ce997f61 100644 --- a/mods/homedecor_modpack/computer/locale/template.txt +++ b/mods/home_workshop_modpack/computers/locale/template.txt @@ -1,4 +1,4 @@ -# textdomain: computer +# textdomain: computers ### computers.lua ### @@ -18,10 +18,6 @@ SX Specter= SheFriendSOO= Snapple Piepad= WIFI Router= - -### printers.lua ### - -3D Printer ("bedflinger")= Printer-Scanner Combo= ### tetris.lua ### diff --git a/mods/home_workshop_modpack/computers/mod.conf b/mods/home_workshop_modpack/computers/mod.conf new file mode 100644 index 00000000..64381f03 --- /dev/null +++ b/mods/home_workshop_modpack/computers/mod.conf @@ -0,0 +1,3 @@ +name = computers +depends = default, basic_materials +optional_depends = screwdriver diff --git a/mods/homedecor_modpack/computer/models/computer_laptop.obj b/mods/home_workshop_modpack/computers/models/computers_laptop.obj similarity index 100% rename from mods/homedecor_modpack/computer/models/computer_laptop.obj rename to mods/home_workshop_modpack/computers/models/computers_laptop.obj diff --git a/mods/homedecor_modpack/computer/models/computer_laptop_closed.obj b/mods/home_workshop_modpack/computers/models/computers_laptop_closed.obj similarity index 100% rename from mods/homedecor_modpack/computer/models/computer_laptop_closed.obj rename to mods/home_workshop_modpack/computers/models/computers_laptop_closed.obj diff --git a/mods/homedecor_modpack/computer/models/computer_monitor.obj b/mods/home_workshop_modpack/computers/models/computers_monitor.obj similarity index 100% rename from mods/homedecor_modpack/computer/models/computer_monitor.obj rename to mods/home_workshop_modpack/computers/models/computers_monitor.obj diff --git a/mods/homedecor_modpack/computer/models/tetris_arcade.obj b/mods/home_workshop_modpack/computers/models/computers_tetris_arcade.obj similarity index 100% rename from mods/homedecor_modpack/computer/models/tetris_arcade.obj rename to mods/home_workshop_modpack/computers/models/computers_tetris_arcade.obj diff --git a/mods/homedecor_modpack/computer/models/computer_tower.obj b/mods/home_workshop_modpack/computers/models/computers_tower.obj similarity index 100% rename from mods/homedecor_modpack/computer/models/computer_tower.obj rename to mods/home_workshop_modpack/computers/models/computers_tower.obj diff --git a/mods/homedecor_modpack/computer/recipes.lua b/mods/home_workshop_modpack/computers/recipes.lua similarity index 85% rename from mods/homedecor_modpack/computer/recipes.lua rename to mods/home_workshop_modpack/computers/recipes.lua index f8828760..75eafb0c 100644 --- a/mods/homedecor_modpack/computer/recipes.lua +++ b/mods/home_workshop_modpack/computers/recipes.lua @@ -1,7 +1,7 @@ -- Copyright (C) 2012-2013 Diego Martínez minetest.register_craft({ - output = "computer:shefriendSOO", + output = "computers:shefriendSOO", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "default:glass", "basic_materials:plastic_sheet" }, @@ -10,7 +10,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:slaystation", + output = "computers:slaystation", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "group:wood", "basic_materials:plastic_sheet" } @@ -18,7 +18,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:vanio", + output = "computers:vanio", recipe = { { "basic_materials:plastic_sheet", "", "" }, { "default:glass", "", "" }, @@ -27,7 +27,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:specter", + output = "computers:specter", recipe = { { "", "", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, @@ -36,7 +36,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:slaystation2", + output = "computers:slaystation2", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "default:steel_ingot", "basic_materials:plastic_sheet" } @@ -44,7 +44,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:admiral64", + output = "computers:admiral64", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "group:wood", "group:wood", "group:wood" } @@ -52,7 +52,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:admiral128", + output = "computers:admiral128", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } @@ -60,7 +60,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:wee", + output = "computers:wee", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "default:copper_ingot", "basic_materials:plastic_sheet" } @@ -68,7 +68,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:piepad", + output = "computers:piepad", recipe = { { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "default:glass", "basic_materials:plastic_sheet" } @@ -78,7 +78,7 @@ minetest.register_craft({ --new stuff minetest.register_craft({ - output = "computer:monitor", + output = "computers:monitor", recipe = { { "basic_materials:plastic_sheet", "default:glass","" }, { "basic_materials:plastic_sheet", "default:glass","" }, @@ -87,7 +87,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:router", + output = "computers:router", recipe = { { "default:steel_ingot","","" }, { "default:steel_ingot" ,"basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }, @@ -96,7 +96,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:tower", + output = "computers:tower", recipe = { { "basic_materials:plastic_sheet", "default:steel_ingot", "basic_materials:plastic_sheet" }, { "basic_materials:plastic_sheet", "default:mese_crystal", "basic_materials:plastic_sheet" }, @@ -105,7 +105,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:printer", + output = "computers:printer", recipe = { { "basic_materials:plastic_sheet", "default:steel_ingot","" }, { "basic_materials:plastic_sheet", "default:mese_crystal", "basic_materials:plastic_sheet" }, @@ -114,7 +114,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:printer", + output = "computers:printer", recipe = { { "basic_materials:plastic_sheet", "default:steel_ingot","" }, { "basic_materials:plastic_sheet", "default:mese_crystal", "basic_materials:plastic_sheet" }, @@ -123,16 +123,16 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "computer:server", + output = "computers:server", recipe = { - { "computer:tower", "computer:tower", "computer:tower", }, - { "computer:tower", "computer:tower", "computer:tower" }, - { "computer:tower", "computer:tower", "computer:tower" } + { "computers:tower", "computers:tower", "computers:tower", }, + { "computers:tower", "computers:tower", "computers:tower" }, + { "computers:tower", "computers:tower", "computers:tower" } } }) minetest.register_craft({ - output = "computer:tetris_arcade", + output = "computers:tetris_arcade", recipe = { { "basic_materials:plastic_sheet", "basic_materials:energy_crystal_simple", "basic_materials:plastic_sheet", }, { "dye:black", "default:glass", "dye:black" }, diff --git a/mods/homedecor_modpack/computer/textures/computer_ad128_inv.png b/mods/home_workshop_modpack/computers/textures/computers_ad128_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_ad128_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_ad128_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_ad64_inv.png b/mods/home_workshop_modpack/computers/textures/computers_ad64_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_ad64_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_ad64_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral128_bk.png b/mods/home_workshop_modpack/computers/textures/computers_admiral128_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral128_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral128_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral128_bt.png b/mods/home_workshop_modpack/computers/textures/computers_admiral128_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral128_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral128_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral128_ft.png b/mods/home_workshop_modpack/computers/textures/computers_admiral128_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral128_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral128_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral128_lt.png b/mods/home_workshop_modpack/computers/textures/computers_admiral128_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral128_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral128_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral128_rt.png b/mods/home_workshop_modpack/computers/textures/computers_admiral128_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral128_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral128_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral128_tp.png b/mods/home_workshop_modpack/computers/textures/computers_admiral128_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral128_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral128_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral64_bk.png b/mods/home_workshop_modpack/computers/textures/computers_admiral64_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral64_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral64_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral64_bt.png b/mods/home_workshop_modpack/computers/textures/computers_admiral64_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral64_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral64_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral64_ft.png b/mods/home_workshop_modpack/computers/textures/computers_admiral64_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral64_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral64_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral64_lt.png b/mods/home_workshop_modpack/computers/textures/computers_admiral64_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral64_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral64_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral64_rt.png b/mods/home_workshop_modpack/computers/textures/computers_admiral64_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral64_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral64_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_admiral64_tp.png b/mods/home_workshop_modpack/computers/textures/computers_admiral64_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_admiral64_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_admiral64_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_black.png b/mods/home_workshop_modpack/computers/textures/computers_black.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_black.png rename to mods/home_workshop_modpack/computers/textures/computers_black.png diff --git a/mods/homedecor_modpack/computer/textures/computer_blue.png b/mods/home_workshop_modpack/computers/textures/computers_blue.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_blue.png rename to mods/home_workshop_modpack/computers/textures/computers_blue.png diff --git a/mods/homedecor_modpack/computer/textures/computer_computer_front_old.png b/mods/home_workshop_modpack/computers/textures/computers_computer_front_old.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_computer_front_old.png rename to mods/home_workshop_modpack/computers/textures/computers_computer_front_old.png diff --git a/mods/homedecor_modpack/computer/textures/computer_computer_top_old.png b/mods/home_workshop_modpack/computers/textures/computers_computer_top_old.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_computer_top_old.png rename to mods/home_workshop_modpack/computers/textures/computers_computer_top_old.png diff --git a/mods/homedecor_modpack/computer/textures/computer_cyan.png b/mods/home_workshop_modpack/computers/textures/computers_cyan.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_cyan.png rename to mods/home_workshop_modpack/computers/textures/computers_cyan.png diff --git a/mods/homedecor_modpack/computer/textures/computer_green.png b/mods/home_workshop_modpack/computers/textures/computers_green.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_green.png rename to mods/home_workshop_modpack/computers/textures/computers_green.png diff --git a/mods/homedecor_modpack/computer/textures/computer_hueg_box_bk.png b/mods/home_workshop_modpack/computers/textures/computers_hueg_box_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_hueg_box_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_hueg_box_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_hueg_box_bt.png b/mods/home_workshop_modpack/computers/textures/computers_hueg_box_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_hueg_box_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_hueg_box_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_hueg_box_ft.png b/mods/home_workshop_modpack/computers/textures/computers_hueg_box_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_hueg_box_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_hueg_box_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_hueg_box_lt.png b/mods/home_workshop_modpack/computers/textures/computers_hueg_box_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_hueg_box_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_hueg_box_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_hueg_box_rt.png b/mods/home_workshop_modpack/computers/textures/computers_hueg_box_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_hueg_box_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_hueg_box_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_hueg_box_tp.png b/mods/home_workshop_modpack/computers/textures/computers_hueg_box_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_hueg_box_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_hueg_box_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_laptop.png b/mods/home_workshop_modpack/computers/textures/computers_laptop.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_laptop.png rename to mods/home_workshop_modpack/computers/textures/computers_laptop.png diff --git a/mods/homedecor_modpack/computer/textures/computer_laptop_inv.png b/mods/home_workshop_modpack/computers/textures/computers_laptop_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_laptop_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_laptop_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_magenta.png b/mods/home_workshop_modpack/computers/textures/computers_magenta.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_magenta.png rename to mods/home_workshop_modpack/computers/textures/computers_magenta.png diff --git a/mods/homedecor_modpack/computer/textures/monitor_display.png b/mods/home_workshop_modpack/computers/textures/computers_monitor_display.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/monitor_display.png rename to mods/home_workshop_modpack/computers/textures/computers_monitor_display.png diff --git a/mods/homedecor_modpack/computer/textures/computer_monitor_inv.png b/mods/home_workshop_modpack/computers/textures/computers_monitor_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_monitor_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_monitor_inv.png diff --git a/mods/homedecor_modpack/computer/textures/monitor_plastic.png b/mods/home_workshop_modpack/computers/textures/computers_monitor_plastic.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/monitor_plastic.png rename to mods/home_workshop_modpack/computers/textures/computers_monitor_plastic.png diff --git a/mods/homedecor_modpack/computer/textures/computer_orange.png b/mods/home_workshop_modpack/computers/textures/computers_orange.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_orange.png rename to mods/home_workshop_modpack/computers/textures/computers_orange.png diff --git a/mods/homedecor_modpack/computer/textures/computer_piepad_inv.png b/mods/home_workshop_modpack/computers/textures/computers_piepad_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_piepad_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_piepad_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_piepad_inv_off.png b/mods/home_workshop_modpack/computers/textures/computers_piepad_inv_off.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_piepad_inv_off.png rename to mods/home_workshop_modpack/computers/textures/computers_piepad_inv_off.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_b.png b/mods/home_workshop_modpack/computers/textures/computers_printer_b.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_b.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_b.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_bt.png b/mods/home_workshop_modpack/computers/textures/computers_printer_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_f.png b/mods/home_workshop_modpack/computers/textures/computers_printer_f.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_f.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_f.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_inv.png b/mods/home_workshop_modpack/computers/textures/computers_printer_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_l.png b/mods/home_workshop_modpack/computers/textures/computers_printer_l.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_l.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_l.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_r.png b/mods/home_workshop_modpack/computers/textures/computers_printer_r.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_r.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_r.png diff --git a/mods/homedecor_modpack/computer/textures/computer_printer_t.png b/mods/home_workshop_modpack/computers/textures/computers_printer_t.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_printer_t.png rename to mods/home_workshop_modpack/computers/textures/computers_printer_t.png diff --git a/mods/homedecor_modpack/computer/textures/computer_ps1_inv.png b/mods/home_workshop_modpack/computers/textures/computers_ps1_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_ps1_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_ps1_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_ps2_inv.png b/mods/home_workshop_modpack/computers/textures/computers_ps2_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_ps2_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_ps2_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_red.png b/mods/home_workshop_modpack/computers/textures/computers_red.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_red.png rename to mods/home_workshop_modpack/computers/textures/computers_red.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_b.png b/mods/home_workshop_modpack/computers/textures/computers_router_b.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_b.png rename to mods/home_workshop_modpack/computers/textures/computers_router_b.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_bt.png b/mods/home_workshop_modpack/computers/textures/computers_router_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_router_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_f.png b/mods/home_workshop_modpack/computers/textures/computers_router_f.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_f.png rename to mods/home_workshop_modpack/computers/textures/computers_router_f.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_f_animated.png b/mods/home_workshop_modpack/computers/textures/computers_router_f_animated.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_f_animated.png rename to mods/home_workshop_modpack/computers/textures/computers_router_f_animated.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_inv.png b/mods/home_workshop_modpack/computers/textures/computers_router_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_router_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_l.png b/mods/home_workshop_modpack/computers/textures/computers_router_l.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_l.png rename to mods/home_workshop_modpack/computers/textures/computers_router_l.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_r.png b/mods/home_workshop_modpack/computers/textures/computers_router_r.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_r.png rename to mods/home_workshop_modpack/computers/textures/computers_router_r.png diff --git a/mods/homedecor_modpack/computer/textures/computer_router_t.png b/mods/home_workshop_modpack/computers/textures/computers_router_t.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_router_t.png rename to mods/home_workshop_modpack/computers/textures/computers_router_t.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_bt.png b/mods/home_workshop_modpack/computers/textures/computers_server_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_server_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_f_off.png b/mods/home_workshop_modpack/computers/textures/computers_server_f_off.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_f_off.png rename to mods/home_workshop_modpack/computers/textures/computers_server_f_off.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_f_on.png b/mods/home_workshop_modpack/computers/textures/computers_server_f_on.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_f_on.png rename to mods/home_workshop_modpack/computers/textures/computers_server_f_on.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_inv.png b/mods/home_workshop_modpack/computers/textures/computers_server_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_server_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_l.png b/mods/home_workshop_modpack/computers/textures/computers_server_l.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_l.png rename to mods/home_workshop_modpack/computers/textures/computers_server_l.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_r.png b/mods/home_workshop_modpack/computers/textures/computers_server_r.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_r.png rename to mods/home_workshop_modpack/computers/textures/computers_server_r.png diff --git a/mods/homedecor_modpack/computer/textures/computer_server_t.png b/mods/home_workshop_modpack/computers/textures/computers_server_t.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_server_t.png rename to mods/home_workshop_modpack/computers/textures/computers_server_t.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_bk.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_bt.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_ft.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_ft_off.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_ft_off.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_ft_off.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_ft_off.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_lt.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_rt.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_shefriendSOO_tp.png b/mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_shefriendSOO_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_shefriendSOO_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_bk.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_bt.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_ft.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_ft_off.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_ft_off.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_ft_off.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_ft_off.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_lt.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_rt.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation2_tp.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation2_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation2_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation2_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_bk.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_bt.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_ft.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_lt.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_rt.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_tp.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_slaystation_tp_off.png b/mods/home_workshop_modpack/computers/textures/computers_slaystation_tp_off.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_slaystation_tp_off.png rename to mods/home_workshop_modpack/computers/textures/computers_slaystation_tp_off.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_bk.png b/mods/home_workshop_modpack/computers/textures/computers_specter_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_bt.png b/mods/home_workshop_modpack/computers/textures/computers_specter_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_ft.png b/mods/home_workshop_modpack/computers/textures/computers_specter_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_inv.png b/mods/home_workshop_modpack/computers/textures/computers_specter_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_lt.png b/mods/home_workshop_modpack/computers/textures/computers_specter_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_rt.png b/mods/home_workshop_modpack/computers/textures/computers_specter_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_specter_tp.png b/mods/home_workshop_modpack/computers/textures/computers_specter_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_specter_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_specter_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_spectre_back.png b/mods/home_workshop_modpack/computers/textures/computers_spectre_back.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_spectre_back.png rename to mods/home_workshop_modpack/computers/textures/computers_spectre_back.png diff --git a/mods/homedecor_modpack/computer/textures/computer_spectre_bottom.png b/mods/home_workshop_modpack/computers/textures/computers_spectre_bottom.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_spectre_bottom.png rename to mods/home_workshop_modpack/computers/textures/computers_spectre_bottom.png diff --git a/mods/homedecor_modpack/computer/textures/computer_spectre_front.png b/mods/home_workshop_modpack/computers/textures/computers_spectre_front.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_spectre_front.png rename to mods/home_workshop_modpack/computers/textures/computers_spectre_front.png diff --git a/mods/homedecor_modpack/computer/textures/computer_spectre_left.png b/mods/home_workshop_modpack/computers/textures/computers_spectre_left.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_spectre_left.png rename to mods/home_workshop_modpack/computers/textures/computers_spectre_left.png diff --git a/mods/homedecor_modpack/computer/textures/computer_spectre_right.png b/mods/home_workshop_modpack/computers/textures/computers_spectre_right.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_spectre_right.png rename to mods/home_workshop_modpack/computers/textures/computers_spectre_right.png diff --git a/mods/homedecor_modpack/computer/textures/computer_spectre_top.png b/mods/home_workshop_modpack/computers/textures/computers_spectre_top.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_spectre_top.png rename to mods/home_workshop_modpack/computers/textures/computers_spectre_top.png diff --git a/mods/homedecor_modpack/computer/textures/tetris_arcade.png b/mods/home_workshop_modpack/computers/textures/computers_tetris_arcade.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/tetris_arcade.png rename to mods/home_workshop_modpack/computers/textures/computers_tetris_arcade.png diff --git a/mods/homedecor_modpack/computer/textures/computer_tower.png b/mods/home_workshop_modpack/computers/textures/computers_tower.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_tower.png rename to mods/home_workshop_modpack/computers/textures/computers_tower.png diff --git a/mods/homedecor_modpack/computer/textures/computer_tower_inv.png b/mods/home_workshop_modpack/computers/textures/computers_tower_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_tower_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_tower_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_bk.png b/mods/home_workshop_modpack/computers/textures/computers_wee_bk.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_bk.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_bk.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_bt.png b/mods/home_workshop_modpack/computers/textures/computers_wee_bt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_bt.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_bt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_ft.png b/mods/home_workshop_modpack/computers/textures/computers_wee_ft.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_ft.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_ft.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_ft_off.png b/mods/home_workshop_modpack/computers/textures/computers_wee_ft_off.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_ft_off.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_ft_off.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_lt.png b/mods/home_workshop_modpack/computers/textures/computers_wee_lt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_lt.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_lt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_rt.png b/mods/home_workshop_modpack/computers/textures/computers_wee_rt.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_rt.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_rt.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wee_tp.png b/mods/home_workshop_modpack/computers/textures/computers_wee_tp.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wee_tp.png rename to mods/home_workshop_modpack/computers/textures/computers_wee_tp.png diff --git a/mods/homedecor_modpack/computer/textures/computer_wii_inv.png b/mods/home_workshop_modpack/computers/textures/computers_wii_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_wii_inv.png rename to mods/home_workshop_modpack/computers/textures/computers_wii_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_yellow.png b/mods/home_workshop_modpack/computers/textures/computers_yellow.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_yellow.png rename to mods/home_workshop_modpack/computers/textures/computers_yellow.png diff --git a/mods/home_workshop_modpack/home_workshop_common/init.lua b/mods/home_workshop_modpack/home_workshop_common/init.lua new file mode 100644 index 00000000..b58bce18 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_common/init.lua @@ -0,0 +1,2 @@ +-- nothing to see here :P +-- this is just a stub to provide a few textures diff --git a/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_drawer_small.png b/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_drawer_small.png new file mode 100644 index 00000000..91cc300d Binary files /dev/null and b/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_drawer_small.png differ diff --git a/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_generic_metal.png b/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_generic_metal.png new file mode 100644 index 00000000..3a7c063e Binary files /dev/null and b/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_generic_metal.png differ diff --git a/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_generic_metal_bright.png b/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_generic_metal_bright.png new file mode 100644 index 00000000..da124520 Binary files /dev/null and b/mods/home_workshop_modpack/home_workshop_common/textures/home_workshop_common_generic_metal_bright.png differ diff --git a/mods/home_workshop_modpack/home_workshop_machines/init.lua b/mods/home_workshop_modpack/home_workshop_machines/init.lua new file mode 100644 index 00000000..30894406 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_machines/init.lua @@ -0,0 +1,67 @@ +local S = minetest.get_translator("home_workshop_machines") + +-- "bedflinger" style 3D Printer (Prusa i3 or equivalent) + +local cbox = { + type = "fixed", + fixed = {-0.25, -0.25, -0.5, 0.3, 0.3, 0.25 } +} + +minetest.register_node("home_workshop_machines:3dprinter_bedflinger", { + description = S('3D Printer ("bedflinger" design)'), + inventory_image = "home_workshop_machines_3dprinter_bedflinger_inv.png", + tiles = { + { name = "home_workshop_machines_3dprinter.png", color = 0xffffffff }, + "home_workshop_machines_3dprinter_filament.png" + }, + paramtype = "light", + walkable = true, + groups = {snappy=3, ud_param2_colorable = 1}, + sound = default.node_sound_wood_defaults(), + drawtype = "mesh", + mesh = "home_workshop_machines_3dprinter_bedflinger.obj", + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + selection_box = cbox, + collision_box = cbox, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end, + on_dig = unifieddyes.on_dig, + on_rotate = unifieddyes.fix_after_screwdriver_nsew, +}) + +-- COreXY style printer (Hypercube or similar) + +cbox = { + type = "fixed", + fixed = {-0.4375, -0.5, -0.5, 0.4375, 0.5, 0.375 } +} + +minetest.register_node("home_workshop_machines:3dprinter_corexy", { + description = S('3D Printer (CoreXY design)'), + tiles = { + { name = "home_workshop_machines_3dprinter.png", color = 0xffffffff }, + "home_workshop_machines_3dprinter_filament.png" + }, + paramtype = "light", + walkable = true, + groups = {snappy=3, ud_param2_colorable = 1}, + sound = default.node_sound_wood_defaults(), + drawtype = "mesh", + mesh = "home_workshop_machines_3dprinter_corexy.obj", + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + selection_box = cbox, + collision_box = cbox, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end, + on_dig = unifieddyes.on_dig, + on_rotate = unifieddyes.fix_after_screwdriver_nsew, +}) + +minetest.register_alias("computer:3dprinter_bedflinger", "home_workshop_machines:3dprinter_bedflinger") +minetest.register_alias("computers:3dprinter_bedflinger", "home_workshop_machines:3dprinter_bedflinger") +minetest.register_alias("computer:3dprinter_corexy", "home_workshop_machines:3dprinter_corexy") +minetest.register_alias("computers:3dprinter_corexy", "home_workshop_machines:3dprinter_corexy") diff --git a/mods/home_workshop_modpack/home_workshop_machines/locale/home_workshop_machines.de.tr b/mods/home_workshop_modpack/home_workshop_machines/locale/home_workshop_machines.de.tr new file mode 100644 index 00000000..11ac392e --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_machines/locale/home_workshop_machines.de.tr @@ -0,0 +1,6 @@ +# textdomain: home_workshop_machines + +### init.lua ### + +3D Printer ("bedflinger" design)=3D Drucker ("Bettschubser") +3D Printer (CoreXY design)= diff --git a/mods/home_workshop_modpack/home_workshop_machines/locale/template.txt b/mods/home_workshop_modpack/home_workshop_machines/locale/template.txt new file mode 100644 index 00000000..cbf2dbf0 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_machines/locale/template.txt @@ -0,0 +1,6 @@ +# textdomain: home_workshop_machines + +### init.lua ### + +3D Printer ("bedflinger" design)= +3D Printer (CoreXY design)= diff --git a/mods/home_workshop_modpack/home_workshop_machines/mod.conf b/mods/home_workshop_modpack/home_workshop_machines/mod.conf new file mode 100644 index 00000000..9371db0d --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_machines/mod.conf @@ -0,0 +1,3 @@ +name = home_workshop_machines +depends = default, unifieddyes +optional_depends = screwdriver diff --git a/mods/home_workshop_modpack/home_workshop_machines/models/home_workshop_machines_3dprinter_bedflinger.obj b/mods/home_workshop_modpack/home_workshop_machines/models/home_workshop_machines_3dprinter_bedflinger.obj new file mode 100644 index 00000000..0c248075 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_machines/models/home_workshop_machines_3dprinter_bedflinger.obj @@ -0,0 +1,11091 @@ +# Blender v2.83.5 OBJ File: '3d printers.blend' +# www.blender.org +o Cube.009_Cube.019 +v -0.142877 -0.199999 -0.500000 +v -0.142877 -0.197499 -0.497500 +v -0.142875 0.197499 -0.497496 +v -0.142875 0.199999 -0.499996 +v -0.142874 0.231249 -0.493746 +v -0.142874 0.231249 -0.043748 +v -0.142874 0.224999 -0.037498 +v -0.142877 -0.224999 -0.037502 +v -0.142877 -0.231249 -0.043752 +v -0.142875 0.037500 -0.449998 +v -0.142876 0.006250 -0.481248 +v -0.142876 -0.006250 -0.481248 +v -0.142876 -0.037500 -0.449999 +v -0.142876 -0.093750 -0.449999 +v -0.142876 -0.100000 -0.456249 +v -0.142876 -0.100000 -0.475081 +v -0.142876 -0.100202 -0.476620 +v -0.142876 -0.100828 -0.478130 +v -0.142876 -0.101823 -0.479426 +v -0.142876 -0.103119 -0.480421 +v -0.142876 -0.104629 -0.481047 +v -0.142876 -0.106250 -0.481260 +v -0.142876 -0.107870 -0.481047 +v -0.142876 -0.109380 -0.480421 +v -0.142876 -0.110677 -0.479426 +v -0.142876 -0.111672 -0.478130 +v -0.142876 -0.112297 -0.476620 +v -0.142876 -0.112500 -0.475081 +v -0.142876 -0.112500 -0.456250 +v -0.142876 -0.118750 -0.450000 +v -0.142876 -0.156249 -0.450000 +v -0.142877 -0.162499 -0.443750 +v -0.142876 -0.162499 -0.093751 +v -0.142876 -0.156249 -0.087501 +v -0.142875 0.156249 -0.087498 +v -0.142875 0.162499 -0.093748 +v -0.142875 0.162499 -0.443747 +v -0.142875 0.156249 -0.449997 +v -0.142875 0.118749 -0.449997 +v -0.142875 0.112500 -0.456247 +v -0.142875 0.112500 -0.475079 +v -0.142875 0.112297 -0.476618 +v -0.142875 0.111672 -0.478128 +v -0.142875 0.110677 -0.479424 +v -0.142875 0.109380 -0.480419 +v -0.142875 0.107870 -0.481045 +v -0.142875 0.106250 -0.481258 +v -0.142875 0.104629 -0.481045 +v -0.142875 0.103119 -0.480419 +v -0.142875 0.101823 -0.479424 +v -0.142875 0.100828 -0.478128 +v -0.142875 0.100202 -0.476618 +v -0.142875 0.100000 -0.475079 +v -0.142875 0.100000 -0.456247 +v -0.142875 0.093750 -0.449997 +v -0.142877 -0.224999 -0.500000 +v -0.142874 0.224999 -0.499996 +v -0.142877 -0.231249 -0.493990 +v -0.135377 -0.199999 -0.500000 +v -0.135377 -0.197499 -0.497500 +v -0.135375 0.197499 -0.497496 +v -0.135375 0.199999 -0.499996 +v -0.135374 0.231249 -0.493746 +v -0.135374 0.231249 -0.043748 +v -0.135374 0.224999 -0.037498 +v -0.135377 -0.224999 -0.037502 +v -0.135377 -0.231249 -0.043752 +v -0.135375 0.037500 -0.449998 +v -0.135376 0.006250 -0.481248 +v -0.135376 -0.006250 -0.481248 +v -0.135376 -0.037500 -0.449999 +v -0.135376 -0.093750 -0.449999 +v -0.135376 -0.100000 -0.456249 +v -0.135376 -0.100000 -0.475081 +v -0.135376 -0.100202 -0.476620 +v -0.135376 -0.100828 -0.478130 +v -0.135376 -0.101823 -0.479426 +v -0.135376 -0.103119 -0.480421 +v -0.135376 -0.104629 -0.481047 +v -0.135376 -0.106250 -0.481260 +v -0.135376 -0.107870 -0.481047 +v -0.135376 -0.109380 -0.480421 +v -0.135376 -0.110677 -0.479426 +v -0.135376 -0.111672 -0.478130 +v -0.135376 -0.112297 -0.476620 +v -0.135376 -0.112500 -0.475081 +v -0.135376 -0.112500 -0.456250 +v -0.135376 -0.118750 -0.450000 +v -0.135376 -0.156249 -0.450000 +v -0.135376 -0.162499 -0.093751 +v -0.135376 -0.156249 -0.087501 +v -0.135375 0.156249 -0.087498 +v -0.135375 0.162499 -0.093748 +v -0.135375 0.162499 -0.443747 +v -0.135375 0.156249 -0.449997 +v -0.135375 0.118749 -0.449997 +v -0.135375 0.112500 -0.456247 +v -0.135375 0.112500 -0.475079 +v -0.135375 0.112297 -0.476618 +v -0.135375 0.111672 -0.478128 +v -0.135375 0.110677 -0.479424 +v -0.135375 0.109380 -0.480419 +v -0.135375 0.107870 -0.481045 +v -0.135375 0.106250 -0.481258 +v -0.135375 0.104629 -0.481045 +v -0.135375 0.103119 -0.480419 +v -0.135375 0.101823 -0.479424 +v -0.135375 0.100828 -0.478128 +v -0.135375 0.100202 -0.476618 +v -0.135375 0.100000 -0.475079 +v -0.135375 0.100000 -0.456247 +v -0.135375 0.093750 -0.449997 +v -0.135377 -0.224999 -0.500000 +v -0.135374 0.224999 -0.499996 +v -0.135377 -0.231249 -0.493990 +v -0.135377 -0.162499 -0.443750 +v -0.061249 0.186210 -0.326249 +v -0.061249 0.186210 -0.253122 +v -0.111248 0.236209 -0.326249 +v -0.111248 0.236209 -0.253122 +v -0.111248 0.186210 -0.326249 +v -0.111248 0.186210 -0.253122 +v -0.086248 0.236209 -0.326249 +v -0.086248 0.236209 -0.253122 +v -0.061248 0.298709 -0.326249 +v -0.086248 0.298709 -0.326249 +v -0.061248 0.298709 -0.307932 +v -0.061248 0.243899 -0.307932 +v -0.086248 0.243899 -0.307932 +v -0.086248 0.298709 -0.307932 +v -0.061248 0.243899 -0.253122 +v -0.086248 0.243899 -0.253122 +v -0.061250 -0.037500 -0.326249 +v -0.061250 -0.037500 -0.253122 +v -0.086250 -0.037500 -0.326249 +v -0.086250 -0.037500 -0.253122 +v -0.061249 0.037500 -0.326249 +v -0.061249 0.037500 -0.253122 +v -0.086249 0.037500 -0.326249 +v -0.086249 0.037500 -0.253122 +v -0.061251 -0.193789 -0.326249 +v -0.061251 -0.193789 -0.253122 +v -0.061251 -0.243789 -0.326249 +v -0.061251 -0.243789 -0.253122 +v -0.111251 -0.193789 -0.326249 +v -0.111251 -0.193789 -0.253122 +v -0.111251 -0.243789 -0.326249 +v -0.111251 -0.243789 -0.253122 +v 0.271561 -0.117499 -0.499999 +v 0.244061 -0.117499 -0.499999 +v 0.271561 -0.095000 -0.499999 +v 0.244061 -0.095000 -0.499999 +v 0.268552 -0.114490 -0.441250 +v 0.271561 -0.117499 -0.444259 +v 0.247070 -0.114490 -0.441250 +v 0.244061 -0.117499 -0.444259 +v 0.268552 -0.098009 -0.441249 +v 0.271561 -0.095000 -0.444259 +v 0.247070 -0.098009 -0.441249 +v 0.244061 -0.095000 -0.444259 +v -0.006250 -0.027500 -0.316249 +v -0.006250 -0.027500 -0.261249 +v -0.006250 0.027500 -0.316249 +v -0.006250 0.027500 -0.261249 +v 0.018750 -0.027500 -0.316249 +v 0.018750 -0.027500 -0.261249 +v 0.018750 0.027500 -0.316249 +v 0.018750 0.027500 -0.261249 +v -0.148999 0.185817 -0.470511 +v -0.148999 0.185817 -0.379403 +v -0.223541 0.185817 -0.470511 +v -0.223541 0.185817 -0.379403 +v -0.148999 0.203409 -0.470510 +v -0.148999 0.203409 -0.379403 +v -0.223541 0.203409 -0.470510 +v -0.223541 0.203409 -0.379403 +v -0.223541 0.168226 -0.379403 +v -0.223541 0.168226 -0.470511 +v -0.148999 0.168226 -0.379403 +v -0.148999 0.168226 -0.470511 +v -0.074457 0.185817 -0.470511 +v -0.074457 0.185817 -0.379403 +v -0.148999 0.185817 -0.470511 +v -0.148999 0.185817 -0.379403 +v -0.074457 0.203409 -0.470510 +v -0.074457 0.203409 -0.379403 +v -0.148999 0.203409 -0.470510 +v -0.148999 0.203409 -0.379403 +v -0.148999 0.168226 -0.379403 +v -0.148999 0.168226 -0.470511 +v -0.074457 0.168226 -0.379403 +v -0.074457 0.168226 -0.470511 +v -0.148544 -0.224005 -0.437461 +v -0.148544 -0.224005 -0.194124 +v -0.279971 -0.224005 -0.437461 +v -0.279971 -0.224005 -0.194124 +v -0.148544 -0.173556 -0.437461 +v -0.148544 -0.173556 -0.194123 +v -0.279970 -0.173556 -0.437461 +v -0.279970 -0.173556 -0.194123 +v -0.243730 -0.173626 -0.497499 +v -0.246230 -0.173626 -0.499999 +v -0.277479 -0.173626 -0.474249 +v -0.183730 -0.173626 -0.467999 +v -0.178417 -0.173626 -0.463922 +v -0.178230 -0.173626 -0.462499 +v -0.178967 -0.173626 -0.459749 +v -0.180980 -0.173626 -0.457736 +v -0.183730 -0.173626 -0.456999 +v -0.271229 -0.173626 -0.456999 +v -0.277479 -0.173626 -0.441249 +v -0.142879 -0.173626 -0.497499 +v -0.271229 -0.173626 -0.499999 +v -0.277479 -0.173626 -0.493749 +v -0.271229 -0.173626 -0.467999 +v -0.182306 -0.173626 -0.467811 +v -0.180980 -0.173626 -0.467262 +v -0.179841 -0.173626 -0.466388 +v -0.178967 -0.173626 -0.465249 +v -0.178417 -0.173626 -0.461075 +v -0.179841 -0.173626 -0.458610 +v -0.182306 -0.173626 -0.457186 +v -0.277479 -0.173626 -0.450749 +v -0.174830 -0.173624 -0.037501 +v -0.142879 -0.173624 -0.037501 +v -0.243730 -0.166126 -0.497499 +v -0.246229 -0.166126 -0.499999 +v -0.178417 -0.166126 -0.463922 +v -0.178230 -0.166126 -0.462499 +v -0.183730 -0.166126 -0.456999 +v -0.271229 -0.166126 -0.456999 +v -0.277479 -0.166126 -0.441249 +v -0.271229 -0.166126 -0.499999 +v -0.277479 -0.166126 -0.493749 +v -0.182306 -0.166126 -0.467811 +v -0.180980 -0.166126 -0.467262 +v -0.179841 -0.166126 -0.466388 +v -0.178967 -0.166126 -0.465249 +v -0.174830 -0.166124 -0.037501 +v -0.142879 -0.166124 -0.037501 +v -0.142879 -0.166126 -0.497499 +v -0.277479 -0.166126 -0.474249 +v -0.271229 -0.166126 -0.467999 +v -0.183730 -0.166126 -0.467999 +v -0.178417 -0.166126 -0.461075 +v -0.178967 -0.166126 -0.459749 +v -0.179841 -0.166126 -0.458610 +v -0.180980 -0.166126 -0.457736 +v -0.182306 -0.166126 -0.457186 +v -0.277479 -0.166126 -0.450749 +v 0.269061 0.111210 -0.443750 +v -0.243437 0.111210 -0.443749 +v 0.269061 0.110830 -0.441836 +v -0.243437 0.110830 -0.441836 +v 0.269061 0.109746 -0.440214 +v -0.243437 0.109746 -0.440214 +v 0.269061 0.108124 -0.439130 +v -0.243437 0.108124 -0.439130 +v 0.269061 0.106210 -0.438750 +v -0.243437 0.106210 -0.438750 +v 0.269061 0.104297 -0.439130 +v -0.243437 0.104297 -0.439130 +v 0.269061 0.102675 -0.440214 +v -0.243437 0.102675 -0.440214 +v 0.269061 0.101591 -0.441836 +v -0.243437 0.101591 -0.441836 +v 0.269061 0.101211 -0.443750 +v -0.243437 0.101210 -0.443750 +v 0.269061 0.101591 -0.445663 +v -0.243437 0.101591 -0.445663 +v 0.269061 0.102675 -0.447285 +v -0.243437 0.102675 -0.447285 +v 0.269061 0.104297 -0.448369 +v -0.243437 0.104297 -0.448369 +v 0.269061 0.106210 -0.448750 +v -0.243437 0.106210 -0.448749 +v 0.269061 0.108124 -0.448369 +v -0.243437 0.108124 -0.448369 +v 0.269061 0.109746 -0.447285 +v -0.243437 0.109746 -0.447285 +v 0.269061 0.110830 -0.445663 +v -0.243437 0.110830 -0.445663 +v -0.108748 -0.208789 -0.418747 +v -0.108748 -0.208789 -0.393747 +v -0.107987 -0.204962 -0.418746 +v -0.107987 -0.204962 -0.393747 +v -0.105819 -0.201718 -0.418746 +v -0.105819 -0.201718 -0.393747 +v -0.102575 -0.199550 -0.418746 +v -0.102575 -0.199550 -0.393746 +v -0.098748 -0.198789 -0.418746 +v -0.098748 -0.198789 -0.393746 +v -0.094922 -0.199550 -0.418746 +v -0.094922 -0.199550 -0.393746 +v -0.091677 -0.201718 -0.418746 +v -0.091677 -0.201718 -0.393747 +v -0.089510 -0.204962 -0.418746 +v -0.089510 -0.204962 -0.393747 +v -0.088748 -0.208789 -0.418747 +v -0.088748 -0.208789 -0.393747 +v -0.089510 -0.212615 -0.418747 +v -0.089510 -0.212615 -0.393747 +v -0.091677 -0.215860 -0.418747 +v -0.091677 -0.215860 -0.393747 +v -0.094922 -0.218027 -0.418747 +v -0.094922 -0.218027 -0.393747 +v -0.098748 -0.218789 -0.418747 +v -0.098748 -0.218789 -0.393747 +v -0.102575 -0.218027 -0.418747 +v -0.102575 -0.218027 -0.393747 +v -0.105819 -0.215860 -0.418747 +v -0.105819 -0.215860 -0.393747 +v -0.107987 -0.212615 -0.418747 +v -0.107987 -0.212615 -0.393747 +v -0.098751 0.227461 -0.035004 +v -0.098751 0.227460 -0.437502 +v -0.096837 0.227081 -0.035004 +v -0.096837 0.227079 -0.437502 +v -0.095215 0.225997 -0.035004 +v -0.095215 0.225995 -0.437502 +v -0.094131 0.224375 -0.035004 +v -0.094131 0.224373 -0.437502 +v -0.093751 0.222461 -0.035004 +v -0.093751 0.222460 -0.437502 +v -0.094131 0.220548 -0.035004 +v -0.094131 0.220546 -0.437502 +v -0.095215 0.218926 -0.035004 +v -0.095215 0.218924 -0.437502 +v -0.096837 0.217842 -0.035004 +v -0.096837 0.217840 -0.437502 +v -0.098751 0.217461 -0.035004 +v -0.098751 0.217460 -0.437502 +v -0.100664 0.217842 -0.035004 +v -0.100664 0.217840 -0.437502 +v -0.102286 0.218926 -0.035004 +v -0.102286 0.218924 -0.437502 +v -0.103370 0.220548 -0.035004 +v -0.103370 0.220546 -0.437502 +v -0.103751 0.222461 -0.035004 +v -0.103751 0.222460 -0.437502 +v -0.103370 0.224375 -0.035004 +v -0.103370 0.224373 -0.437502 +v -0.102286 0.225997 -0.035004 +v -0.102286 0.225995 -0.437502 +v -0.100664 0.227081 -0.035004 +v -0.100664 0.227079 -0.437502 +v 0.124999 -0.125001 -0.416250 +v -0.125000 -0.125001 -0.416250 +v -0.124999 0.124998 -0.416248 +v 0.125000 0.124998 -0.416248 +v 0.124999 -0.125001 -0.412500 +v -0.125000 -0.125001 -0.412500 +v -0.124999 0.124998 -0.412498 +v 0.125000 0.124998 -0.412498 +v 0.043749 -0.102423 -0.432636 +v 0.074999 -0.102423 -0.432636 +v 0.043749 -0.097011 -0.432636 +v 0.074999 -0.097011 -0.432636 +v 0.043749 -0.115488 -0.432636 +v 0.074999 -0.115488 -0.432636 +v 0.043749 -0.110076 -0.432636 +v 0.074999 -0.110076 -0.432636 +v 0.043749 -0.097011 -0.447488 +v 0.043749 -0.098400 -0.450840 +v 0.074999 -0.098400 -0.450840 +v 0.074999 -0.097011 -0.447488 +v 0.043749 -0.101034 -0.453475 +v 0.043749 -0.104387 -0.454863 +v 0.074999 -0.104387 -0.454863 +v 0.074999 -0.101034 -0.453475 +v 0.043749 -0.108113 -0.454863 +v 0.043749 -0.111465 -0.453475 +v 0.074999 -0.111465 -0.453475 +v 0.074999 -0.108113 -0.454863 +v 0.043749 -0.114100 -0.450840 +v 0.043749 -0.115488 -0.447488 +v 0.074999 -0.115488 -0.447488 +v 0.074999 -0.114100 -0.450840 +v 0.252812 0.126210 -0.487497 +v 0.252811 -0.136289 -0.487499 +v 0.253193 0.126210 -0.485584 +v 0.253192 -0.136289 -0.485586 +v 0.254277 0.126210 -0.483962 +v 0.254275 -0.136289 -0.483964 +v 0.255899 0.126210 -0.482878 +v 0.255897 -0.136289 -0.482880 +v 0.257812 0.126210 -0.482497 +v 0.257811 -0.136289 -0.482499 +v 0.259726 0.126210 -0.482878 +v 0.259724 -0.136289 -0.482880 +v 0.261348 0.126210 -0.483962 +v 0.261346 -0.136289 -0.483964 +v 0.262432 0.126210 -0.485584 +v 0.262430 -0.136289 -0.485586 +v 0.262812 0.126210 -0.487497 +v 0.262811 -0.136289 -0.487499 +v 0.262432 0.126210 -0.489410 +v 0.262430 -0.136289 -0.489413 +v 0.261348 0.126210 -0.491033 +v 0.261346 -0.136289 -0.491035 +v 0.259726 0.126210 -0.492116 +v 0.259724 -0.136289 -0.492119 +v 0.257812 0.126210 -0.492497 +v 0.257811 -0.136289 -0.492499 +v 0.255899 0.126210 -0.492116 +v 0.255897 -0.136289 -0.492119 +v 0.254277 0.126210 -0.491033 +v 0.254275 -0.136289 -0.491035 +v 0.253193 0.126210 -0.489410 +v 0.253192 -0.136289 -0.489413 +v -0.280936 -0.111248 -0.474995 +v 0.281562 -0.111250 -0.474997 +v -0.280936 -0.110868 -0.473081 +v 0.281562 -0.110869 -0.473084 +v -0.280936 -0.109784 -0.471459 +v 0.281562 -0.109785 -0.471462 +v -0.280936 -0.108162 -0.470376 +v 0.281562 -0.108163 -0.470378 +v -0.280936 -0.106248 -0.469995 +v 0.281562 -0.106250 -0.469997 +v -0.280936 -0.104335 -0.470376 +v 0.281562 -0.104336 -0.470378 +v -0.280936 -0.102713 -0.471459 +v 0.281562 -0.102714 -0.471462 +v -0.280936 -0.101629 -0.473081 +v 0.281562 -0.101630 -0.473084 +v -0.280936 -0.101248 -0.474995 +v 0.281562 -0.101250 -0.474997 +v -0.280936 -0.101629 -0.476908 +v 0.281562 -0.101630 -0.476911 +v -0.280936 -0.102713 -0.478530 +v 0.281562 -0.102714 -0.478533 +v -0.280936 -0.104335 -0.479614 +v 0.281562 -0.104336 -0.479617 +v -0.280936 -0.106248 -0.479995 +v 0.281562 -0.106250 -0.479997 +v -0.280936 -0.108162 -0.479614 +v 0.281562 -0.108163 -0.479617 +v -0.280936 -0.109784 -0.478530 +v 0.281562 -0.109785 -0.478533 +v -0.280936 -0.110868 -0.476908 +v 0.281562 -0.110869 -0.476911 +v 0.269061 -0.101250 -0.443750 +v -0.243437 -0.101250 -0.443749 +v 0.269061 -0.101630 -0.441836 +v -0.243437 -0.101630 -0.441836 +v 0.269061 -0.102714 -0.440214 +v -0.243437 -0.102714 -0.440214 +v 0.269061 -0.104336 -0.439130 +v -0.243437 -0.104336 -0.439130 +v 0.269061 -0.106250 -0.438750 +v -0.243437 -0.106250 -0.438750 +v 0.269061 -0.108163 -0.439130 +v -0.243437 -0.108163 -0.439130 +v 0.269061 -0.109785 -0.440214 +v -0.243437 -0.109785 -0.440214 +v 0.269061 -0.110869 -0.441836 +v -0.243437 -0.110869 -0.441836 +v 0.269061 -0.111250 -0.443750 +v -0.243437 -0.111250 -0.443750 +v 0.269061 -0.110869 -0.445663 +v -0.243437 -0.110869 -0.445663 +v 0.269061 -0.109785 -0.447285 +v -0.243437 -0.109785 -0.447285 +v 0.269061 -0.108163 -0.448369 +v -0.243437 -0.108163 -0.448369 +v 0.269061 -0.106250 -0.448750 +v -0.243437 -0.106250 -0.448749 +v 0.269061 -0.104336 -0.448369 +v -0.243437 -0.104336 -0.448369 +v 0.269061 -0.102714 -0.447285 +v -0.243437 -0.102714 -0.447285 +v 0.269061 -0.101630 -0.445663 +v -0.243437 -0.101630 -0.445663 +v -0.135446 -0.237827 -0.431251 +v -0.135445 -0.186578 -0.431251 +v -0.131696 -0.241577 -0.431251 +v -0.127945 -0.179078 -0.431250 +v -0.120445 -0.179078 -0.431250 +v -0.112945 -0.186578 -0.431251 +v -0.112946 -0.222827 -0.431251 +v -0.076696 -0.222827 -0.431251 +v -0.072946 -0.226577 -0.431251 +v -0.072946 -0.235327 -0.431251 +v -0.079196 -0.241577 -0.431251 +v -0.135446 -0.237827 -0.456251 +v -0.135446 -0.235327 -0.458751 +v -0.135446 -0.215328 -0.478750 +v -0.135445 -0.205328 -0.478750 +v -0.135445 -0.186578 -0.460000 +v -0.131696 -0.241577 -0.452501 +v -0.097946 -0.241577 -0.437501 +v -0.097946 -0.241577 -0.438126 +v -0.112321 -0.241577 -0.452501 +v -0.079196 -0.241577 -0.437501 +v -0.072946 -0.235327 -0.437501 +v -0.072946 -0.226577 -0.437501 +v -0.076696 -0.222827 -0.437501 +v -0.112946 -0.222827 -0.437501 +v -0.112945 -0.186578 -0.437500 +v -0.120445 -0.179078 -0.437500 +v -0.127945 -0.179078 -0.437500 +v -0.134195 -0.185328 -0.458750 +v -0.134195 -0.185328 -0.437500 +v -0.125445 -0.185328 -0.458750 +v -0.125446 -0.205328 -0.478750 +v -0.125446 -0.215328 -0.478750 +v -0.125446 -0.235327 -0.458751 +v -0.118571 -0.235327 -0.458751 +v -0.118571 -0.235315 -0.458751 +v -0.125446 -0.235315 -0.458751 +v -0.097946 -0.235315 -0.438126 +v -0.097946 -0.235315 -0.437501 +v -0.125445 -0.185328 -0.437500 +v -0.125446 -0.235315 -0.437501 +v -0.135377 -0.234057 -0.042502 +v -0.135377 -0.234057 -0.057502 +v -0.135377 -0.229057 -0.037502 +v -0.135377 -0.186557 -0.057501 +v -0.135377 -0.186557 -0.037501 +v -0.127877 -0.241557 -0.039395 +v -0.127877 -0.241557 -0.055002 +v -0.130377 -0.239057 -0.057502 +v -0.126538 -0.241557 -0.037502 +v -0.134127 -0.185307 -0.037501 +v -0.125377 -0.194057 -0.037501 +v -0.125377 -0.222807 -0.037502 +v -0.091627 -0.222807 -0.037502 +v -0.087877 -0.226557 -0.037502 +v -0.087877 -0.235307 -0.037502 +v -0.094127 -0.241557 -0.037502 +v -0.134127 -0.185307 -0.057501 +v -0.125377 -0.241557 -0.052502 +v -0.094127 -0.241557 -0.043752 +v -0.097877 -0.241557 -0.043752 +v -0.106002 -0.241557 -0.052502 +v -0.097877 -0.241557 -0.044377 +v -0.125377 -0.235294 -0.052502 +v -0.130377 -0.189057 -0.057501 +v -0.087877 -0.235307 -0.043752 +v -0.087877 -0.226557 -0.043752 +v -0.091627 -0.222807 -0.043752 +v -0.125377 -0.222807 -0.043752 +v -0.125377 -0.235294 -0.043752 +v -0.125502 -0.193932 -0.052626 +v -0.106002 -0.235294 -0.052502 +v -0.097877 -0.235294 -0.044377 +v -0.097877 -0.235294 -0.043752 +v -0.078748 0.211210 -0.261247 +v -0.078368 0.211210 -0.259334 +v -0.077284 0.211210 -0.257712 +v -0.075662 0.211210 -0.256628 +v -0.073748 0.211210 -0.256247 +v -0.071835 0.211210 -0.256628 +v -0.070213 0.211209 -0.257712 +v -0.069129 0.211209 -0.259334 +v -0.068748 0.211209 -0.261247 +v -0.069129 0.211209 -0.263161 +v -0.070213 0.211209 -0.264783 +v -0.071835 0.211209 -0.265867 +v -0.073748 0.211210 -0.266247 +v -0.075662 0.211210 -0.265867 +v -0.077284 0.211210 -0.264783 +v -0.078368 0.211210 -0.263160 +v -0.078368 -0.214277 -0.263160 +v -0.078748 -0.214277 -0.261247 +v -0.071835 -0.214277 -0.265866 +v -0.069129 -0.214277 -0.263160 +v -0.075662 -0.214277 -0.265866 +v -0.071835 -0.214277 -0.256628 +v -0.075662 -0.214277 -0.256628 +v -0.078368 -0.214277 -0.259334 +v -0.069129 -0.214277 -0.259334 +v -0.077284 -0.214277 -0.264782 +v -0.073748 -0.214277 -0.266247 +v -0.070213 -0.214277 -0.264783 +v -0.068748 -0.214277 -0.261247 +v -0.070213 -0.214277 -0.257712 +v -0.073748 -0.214277 -0.256247 +v -0.077284 -0.214277 -0.257711 +v -0.072501 -0.195039 -0.283186 +v -0.072501 -0.195039 -0.280686 +v -0.079998 -0.195039 -0.283186 +v -0.079998 -0.195039 -0.280686 +v -0.072498 0.271225 -0.283181 +v -0.072498 0.271225 -0.280681 +v -0.079998 0.271225 -0.283181 +v -0.079998 0.271225 -0.280681 +v -0.237186 0.201210 -0.462497 +v -0.237187 -0.211288 -0.462499 +v -0.236805 0.201210 -0.460584 +v -0.236806 -0.211288 -0.460586 +v -0.235721 0.201210 -0.458962 +v -0.235723 -0.211288 -0.458964 +v -0.234099 0.201210 -0.457878 +v -0.234100 -0.211288 -0.457880 +v -0.232186 0.201210 -0.457497 +v -0.232187 -0.211288 -0.457500 +v -0.230272 0.201210 -0.457878 +v -0.230274 -0.211288 -0.457880 +v -0.228650 0.201210 -0.458962 +v -0.228652 -0.211288 -0.458964 +v -0.227566 0.201210 -0.460584 +v -0.227568 -0.211288 -0.460586 +v -0.227186 0.201210 -0.462497 +v -0.227187 -0.211288 -0.462499 +v -0.227566 0.201210 -0.464411 +v -0.227568 -0.211288 -0.464413 +v -0.228650 0.201210 -0.466033 +v -0.228652 -0.211288 -0.466035 +v -0.230272 0.201210 -0.467117 +v -0.230274 -0.211288 -0.467119 +v -0.232186 0.201210 -0.467497 +v -0.232187 -0.211288 -0.467499 +v -0.234099 0.201210 -0.467117 +v -0.234100 -0.211288 -0.467119 +v -0.235721 0.201210 -0.466033 +v -0.235723 -0.211288 -0.466035 +v -0.236805 0.201210 -0.464411 +v -0.236806 -0.211288 -0.464413 +v -0.167187 0.012461 -0.435000 +v -0.247187 0.012461 -0.502499 +v -0.247187 0.012461 -0.435000 +v -0.167187 0.024961 -0.435000 +v -0.247187 0.024961 -0.502499 +v -0.247187 0.024961 -0.435000 +v -0.207187 0.012461 -0.502499 +v -0.167187 0.012461 -0.450000 +v -0.207187 0.024961 -0.502499 +v -0.167187 0.024961 -0.450000 +v -0.207187 0.024961 -0.450000 +v -0.207187 0.012461 -0.450000 +v 0.252812 0.126210 -0.462497 +v 0.252811 -0.136289 -0.462499 +v 0.253193 0.126210 -0.460584 +v 0.253192 -0.136289 -0.460586 +v 0.254277 0.126210 -0.458962 +v 0.254275 -0.136289 -0.458964 +v 0.255899 0.126210 -0.457878 +v 0.255897 -0.136289 -0.457880 +v 0.257812 0.126210 -0.457497 +v 0.257811 -0.136289 -0.457500 +v 0.259726 0.126210 -0.457878 +v 0.259724 -0.136289 -0.457880 +v 0.261348 0.126210 -0.458962 +v 0.261346 -0.136289 -0.458964 +v 0.262432 0.126210 -0.460584 +v 0.262430 -0.136289 -0.460586 +v 0.262812 0.126210 -0.462497 +v 0.262811 -0.136289 -0.462499 +v 0.262432 0.126210 -0.464411 +v 0.262430 -0.136289 -0.464413 +v 0.261348 0.126210 -0.466033 +v 0.261346 -0.136289 -0.466035 +v 0.259726 0.126210 -0.467117 +v 0.259724 -0.136289 -0.467119 +v 0.257812 0.126210 -0.467497 +v 0.257811 -0.136289 -0.467499 +v 0.255899 0.126210 -0.467117 +v 0.255897 -0.136289 -0.467119 +v 0.254277 0.126210 -0.466033 +v 0.254275 -0.136289 -0.466035 +v 0.253193 0.126210 -0.464411 +v 0.253192 -0.136289 -0.464413 +v -0.237186 0.126210 -0.487497 +v -0.237187 -0.136289 -0.487499 +v -0.236805 0.126210 -0.485584 +v -0.236806 -0.136289 -0.485586 +v -0.235721 0.126210 -0.483962 +v -0.235723 -0.136289 -0.483964 +v -0.234099 0.126210 -0.482878 +v -0.234101 -0.136289 -0.482880 +v -0.232186 0.126210 -0.482497 +v -0.232187 -0.136289 -0.482499 +v -0.230272 0.126210 -0.482878 +v -0.230274 -0.136289 -0.482880 +v -0.228650 0.126210 -0.483962 +v -0.228652 -0.136289 -0.483964 +v -0.227566 0.126210 -0.485584 +v -0.227568 -0.136289 -0.485586 +v -0.227186 0.126210 -0.487497 +v -0.227187 -0.136289 -0.487499 +v -0.227566 0.126210 -0.489410 +v -0.227568 -0.136289 -0.489413 +v -0.228650 0.126210 -0.491033 +v -0.228652 -0.136289 -0.491035 +v -0.230272 0.126210 -0.492116 +v -0.230274 -0.136289 -0.492119 +v -0.232186 0.126210 -0.492497 +v -0.232187 -0.136289 -0.492499 +v -0.234099 0.126210 -0.492116 +v -0.234101 -0.136289 -0.492119 +v -0.235721 0.126210 -0.491033 +v -0.235723 -0.136289 -0.491035 +v -0.236805 0.126210 -0.489410 +v -0.236806 -0.136289 -0.489413 +v 0.271561 0.094961 -0.499999 +v 0.244061 0.094961 -0.499999 +v 0.271561 0.117460 -0.499999 +v 0.244061 0.117460 -0.499999 +v 0.268552 0.097970 -0.441250 +v 0.271561 0.094961 -0.444259 +v 0.247070 0.097970 -0.441250 +v 0.244061 0.094961 -0.444259 +v 0.268552 0.114451 -0.441249 +v 0.271561 0.117460 -0.444259 +v 0.247070 0.114451 -0.441249 +v 0.244061 0.117460 -0.444259 +v -0.218437 0.094960 -0.499999 +v -0.245937 0.094960 -0.499999 +v -0.218437 0.117460 -0.499999 +v -0.245937 0.117460 -0.499999 +v -0.221446 0.097969 -0.441250 +v -0.218437 0.094960 -0.444259 +v -0.242928 0.097969 -0.441250 +v -0.245937 0.094960 -0.444259 +v -0.221446 0.114451 -0.441249 +v -0.218437 0.117460 -0.444259 +v -0.242928 0.114451 -0.441249 +v -0.245937 0.117460 -0.444259 +v -0.218437 -0.117500 -0.499999 +v -0.245937 -0.117500 -0.499999 +v -0.218437 -0.095000 -0.499999 +v -0.245937 -0.095000 -0.499999 +v -0.221446 -0.114491 -0.441250 +v -0.218437 -0.117500 -0.444259 +v -0.242928 -0.114491 -0.441250 +v -0.245937 -0.117500 -0.444259 +v -0.221446 -0.098009 -0.441249 +v -0.218437 -0.095000 -0.444259 +v -0.242928 -0.098009 -0.441249 +v -0.245937 -0.095000 -0.444259 +v 0.257811 -0.117500 -0.452500 +v 0.257811 -0.123750 -0.452500 +v 0.266471 -0.117500 -0.457499 +v 0.266471 -0.123750 -0.457499 +v 0.266471 -0.117500 -0.467499 +v 0.266471 -0.123750 -0.467499 +v 0.257811 -0.117500 -0.472499 +v 0.257811 -0.123750 -0.472499 +v 0.249151 -0.117499 -0.467500 +v 0.249151 -0.123749 -0.467500 +v 0.249151 -0.117499 -0.457500 +v 0.249151 -0.123749 -0.457500 +v 0.257811 -0.095000 -0.452500 +v 0.257811 -0.088750 -0.452500 +v 0.249151 -0.095000 -0.457499 +v 0.249151 -0.088750 -0.457499 +v 0.249151 -0.095000 -0.467499 +v 0.249151 -0.088750 -0.467499 +v 0.257811 -0.095000 -0.472499 +v 0.257811 -0.088750 -0.472499 +v 0.266471 -0.095000 -0.467500 +v 0.266471 -0.088750 -0.467500 +v 0.266471 -0.095000 -0.457500 +v 0.266471 -0.088750 -0.457500 +v 0.257811 -0.095000 -0.477499 +v 0.257811 -0.088750 -0.477499 +v 0.249151 -0.095000 -0.482499 +v 0.249151 -0.088750 -0.482499 +v 0.249151 -0.095000 -0.492499 +v 0.249151 -0.088750 -0.492499 +v 0.257811 -0.095000 -0.497499 +v 0.257811 -0.088750 -0.497499 +v 0.266471 -0.095000 -0.492499 +v 0.266471 -0.088750 -0.492499 +v 0.266471 -0.095000 -0.482500 +v 0.266471 -0.088750 -0.482500 +v 0.257811 0.117461 -0.477499 +v 0.257811 0.123711 -0.477499 +v 0.249151 0.117461 -0.482499 +v 0.249151 0.123711 -0.482499 +v 0.249151 0.117461 -0.492499 +v 0.249151 0.123711 -0.492499 +v 0.257811 0.117461 -0.497499 +v 0.257811 0.123711 -0.497499 +v 0.266471 0.117460 -0.492499 +v 0.266471 0.123710 -0.492499 +v 0.266471 0.117460 -0.482500 +v 0.266471 0.123710 -0.482500 +v 0.257811 0.117461 -0.452500 +v 0.257811 0.123711 -0.452500 +v 0.249151 0.117461 -0.457499 +v 0.249151 0.123711 -0.457499 +v 0.249151 0.117461 -0.467499 +v 0.249151 0.123711 -0.467499 +v 0.257811 0.117461 -0.472499 +v 0.257811 0.123711 -0.472499 +v 0.266471 0.117460 -0.467500 +v 0.266471 0.123710 -0.467500 +v 0.266471 0.117460 -0.457500 +v 0.266471 0.123710 -0.457500 +v 0.257811 0.094961 -0.452500 +v 0.257811 0.088711 -0.452500 +v 0.266471 0.094961 -0.457499 +v 0.266471 0.088711 -0.457499 +v 0.266471 0.094961 -0.467499 +v 0.266471 0.088711 -0.467499 +v 0.257811 0.094961 -0.472499 +v 0.257811 0.088711 -0.472499 +v 0.249151 0.094961 -0.467500 +v 0.249151 0.088711 -0.467500 +v 0.249151 0.094961 -0.457500 +v 0.249151 0.088711 -0.457500 +v 0.257811 0.094961 -0.477499 +v 0.257811 0.088711 -0.477499 +v 0.266471 0.094961 -0.482499 +v 0.266471 0.088711 -0.482499 +v 0.266471 0.094961 -0.492499 +v 0.266471 0.088711 -0.492499 +v 0.257811 0.094961 -0.497499 +v 0.257811 0.088711 -0.497499 +v 0.249151 0.094961 -0.492499 +v 0.249151 0.088711 -0.492499 +v 0.249151 0.094961 -0.482500 +v 0.249151 0.088711 -0.482500 +v -0.232187 0.094960 -0.477499 +v -0.232187 0.088710 -0.477499 +v -0.223527 0.094960 -0.482499 +v -0.223527 0.088710 -0.482499 +v -0.223527 0.094960 -0.492499 +v -0.223527 0.088710 -0.492499 +v -0.232187 0.094960 -0.497499 +v -0.232187 0.088710 -0.497499 +v -0.240847 0.094960 -0.492499 +v -0.240847 0.088710 -0.492499 +v -0.240847 0.094960 -0.482500 +v -0.240847 0.088710 -0.482500 +v -0.232187 0.094960 -0.452500 +v -0.232187 0.088710 -0.452500 +v -0.223527 0.094960 -0.457499 +v -0.223527 0.088710 -0.457499 +v -0.223527 0.094960 -0.467499 +v -0.223527 0.088710 -0.467499 +v -0.232187 0.094960 -0.472499 +v -0.232187 0.088710 -0.472499 +v -0.240847 0.094960 -0.467500 +v -0.240847 0.088710 -0.467500 +v -0.240847 0.094960 -0.457500 +v -0.240847 0.088710 -0.457500 +v -0.232187 0.117460 -0.452500 +v -0.232187 0.123710 -0.452500 +v -0.240847 0.117460 -0.457499 +v -0.240847 0.123710 -0.457499 +v -0.240847 0.117460 -0.467499 +v -0.240847 0.123710 -0.467499 +v -0.232187 0.117460 -0.472499 +v -0.232187 0.123710 -0.472499 +v -0.223527 0.117460 -0.467500 +v -0.223527 0.123710 -0.467500 +v -0.223527 0.117460 -0.457500 +v -0.223527 0.123710 -0.457500 +v -0.232187 0.117460 -0.477499 +v -0.232187 0.123710 -0.477499 +v -0.240847 0.117460 -0.482499 +v -0.240847 0.123710 -0.482499 +v -0.240847 0.117460 -0.492499 +v -0.240847 0.123710 -0.492499 +v -0.232187 0.117460 -0.497499 +v -0.232187 0.123710 -0.497499 +v -0.223527 0.117460 -0.492499 +v -0.223527 0.123710 -0.492499 +v -0.223527 0.117460 -0.482500 +v -0.223527 0.123710 -0.482500 +v -0.232187 -0.095000 -0.477499 +v -0.232187 -0.088750 -0.477499 +v -0.240847 -0.095000 -0.482499 +v -0.240847 -0.088750 -0.482499 +v -0.240847 -0.095000 -0.492499 +v -0.240847 -0.088750 -0.492499 +v -0.232187 -0.095000 -0.497499 +v -0.232187 -0.088750 -0.497499 +v -0.223527 -0.095000 -0.492499 +v -0.223527 -0.088750 -0.492499 +v -0.223527 -0.095000 -0.482500 +v -0.223527 -0.088750 -0.482500 +v -0.232187 -0.095000 -0.452500 +v -0.232187 -0.088750 -0.452500 +v -0.240847 -0.095000 -0.457499 +v -0.240847 -0.088750 -0.457499 +v -0.240847 -0.095000 -0.467499 +v -0.240847 -0.088750 -0.467499 +v -0.232187 -0.095000 -0.472499 +v -0.232187 -0.088750 -0.472499 +v -0.223527 -0.095000 -0.467500 +v -0.223527 -0.088750 -0.467500 +v -0.223527 -0.095000 -0.457500 +v -0.223527 -0.088750 -0.457500 +v -0.232187 -0.117500 -0.452500 +v -0.232187 -0.123750 -0.452500 +v -0.223527 -0.117500 -0.457499 +v -0.223527 -0.123750 -0.457499 +v -0.223527 -0.117500 -0.467499 +v -0.223527 -0.123750 -0.467499 +v -0.232187 -0.117500 -0.472499 +v -0.232187 -0.123750 -0.472499 +v -0.240847 -0.117500 -0.467500 +v -0.240847 -0.123750 -0.467500 +v -0.240847 -0.117500 -0.457500 +v -0.240847 -0.123750 -0.457500 +v 0.257811 -0.117500 -0.477499 +v 0.257811 -0.123750 -0.477499 +v 0.266471 -0.117500 -0.482499 +v 0.266471 -0.123750 -0.482499 +v 0.266471 -0.117500 -0.492499 +v 0.266471 -0.123750 -0.492499 +v 0.257811 -0.117500 -0.497499 +v 0.257811 -0.123750 -0.497499 +v 0.249151 -0.117499 -0.492499 +v 0.249151 -0.123749 -0.492499 +v 0.249151 -0.117499 -0.482500 +v 0.249151 -0.123749 -0.482500 +v -0.232187 -0.117500 -0.477499 +v -0.232187 -0.123750 -0.477499 +v -0.223527 -0.117500 -0.482499 +v -0.223527 -0.123750 -0.482499 +v -0.223527 -0.117500 -0.492499 +v -0.223527 -0.123750 -0.492499 +v -0.232187 -0.117500 -0.497499 +v -0.232187 -0.123750 -0.497499 +v -0.240847 -0.117500 -0.492499 +v -0.240847 -0.123750 -0.492499 +v -0.240847 -0.117500 -0.482500 +v -0.240847 -0.123750 -0.482500 +v -0.245936 -0.106248 -0.464999 +v -0.252186 -0.106248 -0.464999 +v -0.245936 -0.114909 -0.469999 +v -0.252186 -0.114909 -0.469999 +v -0.245936 -0.114909 -0.479999 +v -0.252186 -0.114909 -0.479999 +v -0.245936 -0.106248 -0.484999 +v -0.252186 -0.106248 -0.484999 +v -0.245936 -0.097588 -0.480000 +v -0.252186 -0.097588 -0.480000 +v -0.245936 -0.097588 -0.470000 +v -0.252186 -0.097588 -0.470000 +v -0.245936 0.106212 -0.464999 +v -0.252186 0.106212 -0.464999 +v -0.245936 0.097551 -0.469999 +v -0.252186 0.097551 -0.469999 +v -0.245936 0.097551 -0.479999 +v -0.252186 0.097551 -0.479999 +v -0.245936 0.106212 -0.484999 +v -0.252186 0.106212 -0.484999 +v -0.245936 0.114872 -0.480000 +v -0.252186 0.114872 -0.480000 +v -0.245936 0.114872 -0.470000 +v -0.252186 0.114872 -0.470000 +v -0.218436 0.106212 -0.464999 +v -0.212186 0.106212 -0.464999 +v -0.218436 0.114872 -0.469999 +v -0.212186 0.114872 -0.469999 +v -0.218436 0.114872 -0.479999 +v -0.212186 0.114872 -0.479999 +v -0.218436 0.106212 -0.484999 +v -0.212186 0.106212 -0.484999 +v -0.218436 0.097552 -0.480000 +v -0.212186 0.097552 -0.480000 +v -0.218436 0.097552 -0.470000 +v -0.212186 0.097552 -0.470000 +v -0.218436 -0.106248 -0.464999 +v -0.212186 -0.106248 -0.464999 +v -0.218436 -0.097588 -0.469999 +v -0.212186 -0.097588 -0.469999 +v -0.218436 -0.097588 -0.479999 +v -0.212186 -0.097588 -0.479999 +v -0.218436 -0.106248 -0.484999 +v -0.212186 -0.106248 -0.484999 +v -0.218436 -0.114909 -0.480000 +v -0.212186 -0.114909 -0.480000 +v -0.218436 -0.114909 -0.470000 +v -0.212186 -0.114909 -0.470000 +v -0.129148 0.106212 -0.464999 +v -0.135398 0.106212 -0.464999 +v -0.129149 0.097552 -0.469999 +v -0.135399 0.097552 -0.469999 +v -0.129149 0.097552 -0.479999 +v -0.135399 0.097552 -0.479999 +v -0.129148 0.106212 -0.484999 +v -0.135398 0.106212 -0.484999 +v -0.129148 0.114872 -0.480000 +v -0.135398 0.114872 -0.480000 +v -0.135398 0.114872 -0.470000 +v -0.129148 0.114872 -0.470000 +v -0.142898 0.106212 -0.464999 +v -0.149148 0.106212 -0.464999 +v -0.142898 0.097552 -0.469999 +v -0.149148 0.097552 -0.469999 +v -0.142898 0.097552 -0.479999 +v -0.149148 0.097552 -0.479999 +v -0.142898 0.106212 -0.484999 +v -0.149148 0.106212 -0.484999 +v -0.142898 0.114872 -0.480000 +v -0.149148 0.114872 -0.480000 +v -0.149148 0.114872 -0.470000 +v -0.142898 0.114872 -0.470000 +v -0.142898 -0.106248 -0.464999 +v -0.149148 -0.106248 -0.464999 +v -0.142898 -0.114908 -0.469999 +v -0.149148 -0.114908 -0.469999 +v -0.142898 -0.114908 -0.479999 +v -0.149148 -0.114908 -0.479999 +v -0.142898 -0.106248 -0.484999 +v -0.149148 -0.106248 -0.484999 +v -0.142898 -0.097588 -0.480000 +v -0.149148 -0.097588 -0.480000 +v -0.149148 -0.097588 -0.470000 +v -0.142898 -0.097588 -0.470000 +v -0.232187 -0.173601 -0.452500 +v -0.232187 -0.179851 -0.452500 +v -0.223527 -0.173601 -0.457499 +v -0.223527 -0.179851 -0.457499 +v -0.223527 -0.173601 -0.467499 +v -0.223527 -0.179851 -0.467499 +v -0.232187 -0.173601 -0.472499 +v -0.232187 -0.179851 -0.472499 +v -0.240847 -0.173601 -0.467500 +v -0.240847 -0.179851 -0.467500 +v -0.240847 -0.179851 -0.457500 +v -0.240847 -0.173601 -0.457500 +v 0.244062 -0.106248 -0.464999 +v 0.237812 -0.106248 -0.464999 +v 0.244062 -0.114908 -0.469999 +v 0.237812 -0.114908 -0.469999 +v 0.244062 -0.114908 -0.479999 +v 0.237812 -0.114908 -0.479999 +v 0.244062 -0.106248 -0.484999 +v 0.237812 -0.106248 -0.484999 +v 0.244062 -0.097588 -0.480000 +v 0.237812 -0.097588 -0.480000 +v 0.244062 -0.097588 -0.470000 +v 0.237812 -0.097588 -0.470000 +v 0.244062 0.106212 -0.464999 +v 0.237812 0.106212 -0.464999 +v 0.244062 0.097552 -0.469999 +v 0.237812 0.097552 -0.469999 +v 0.244062 0.097552 -0.479999 +v 0.237812 0.097552 -0.479999 +v 0.244062 0.106212 -0.484999 +v 0.237812 0.106212 -0.484999 +v 0.244062 0.114872 -0.480000 +v 0.237812 0.114872 -0.480000 +v 0.244062 0.114872 -0.470000 +v 0.237812 0.114872 -0.470000 +v 0.271562 0.106212 -0.464999 +v 0.277812 0.106212 -0.464999 +v 0.271562 0.114872 -0.469999 +v 0.277812 0.114872 -0.469999 +v 0.271562 0.114872 -0.479999 +v 0.277812 0.114872 -0.479999 +v 0.271562 0.106212 -0.484999 +v 0.277812 0.106212 -0.484999 +v 0.271562 0.097552 -0.480000 +v 0.277812 0.097552 -0.480000 +v 0.271562 0.097552 -0.470000 +v 0.277812 0.097552 -0.470000 +v 0.271562 -0.106248 -0.464999 +v 0.277812 -0.106248 -0.464999 +v 0.271562 -0.097588 -0.469999 +v 0.277812 -0.097588 -0.469999 +v 0.271562 -0.097588 -0.479999 +v 0.277812 -0.097588 -0.479999 +v 0.271562 -0.106248 -0.484999 +v 0.277812 -0.106248 -0.484999 +v 0.271562 -0.114908 -0.480000 +v 0.277812 -0.114908 -0.480000 +v 0.271562 -0.114908 -0.470000 +v 0.277812 -0.114908 -0.470000 +v -0.232187 -0.159851 -0.452500 +v -0.232187 -0.166101 -0.452500 +v -0.223527 -0.159851 -0.457499 +v -0.223527 -0.166101 -0.457499 +v -0.223527 -0.159851 -0.467499 +v -0.223527 -0.166101 -0.467499 +v -0.232187 -0.159851 -0.472499 +v -0.232187 -0.166101 -0.472499 +v -0.240847 -0.159851 -0.467500 +v -0.240847 -0.166101 -0.467500 +v -0.240847 -0.166101 -0.457500 +v -0.240847 -0.159851 -0.457500 +v -0.071249 -0.236289 -0.437497 +v -0.126248 -0.236289 -0.492496 +v -0.126248 -0.236289 -0.437497 +v -0.071248 -0.181289 -0.437496 +v -0.126248 -0.181289 -0.492496 +v -0.126248 -0.181289 -0.437496 +v -0.101873 -0.208789 -0.437496 +v -0.101873 -0.208789 -0.412497 +v -0.100958 -0.206579 -0.437496 +v -0.100958 -0.206579 -0.412496 +v -0.098748 -0.205664 -0.437496 +v -0.098748 -0.205664 -0.412496 +v -0.096539 -0.206579 -0.437496 +v -0.096539 -0.206579 -0.412496 +v -0.095623 -0.208789 -0.437496 +v -0.095623 -0.208789 -0.412497 +v -0.096539 -0.210998 -0.437496 +v -0.096539 -0.210998 -0.412497 +v -0.098748 -0.211914 -0.437496 +v -0.098748 -0.211914 -0.412497 +v -0.100958 -0.210998 -0.437496 +v -0.100958 -0.210998 -0.412497 +v -0.071249 -0.236289 -0.443747 +v -0.126248 -0.236289 -0.486246 +v -0.126248 -0.181289 -0.486246 +v -0.071248 -0.181289 -0.486246 +v -0.126248 -0.236289 -0.443747 +v -0.126248 -0.181289 -0.443746 +v -0.071248 -0.181289 -0.443746 +v -0.071249 -0.236289 -0.492496 +v -0.071248 -0.181289 -0.492496 +v -0.071249 -0.236289 -0.486246 +v -0.232187 0.179522 -0.452500 +v -0.232187 0.173273 -0.452500 +v -0.223527 0.179522 -0.457499 +v -0.223527 0.173272 -0.457499 +v -0.223527 0.179522 -0.467499 +v -0.223527 0.173272 -0.467499 +v -0.232187 0.179522 -0.472499 +v -0.232187 0.173273 -0.472499 +v -0.240847 0.179523 -0.467500 +v -0.240847 0.173273 -0.467500 +v -0.240847 0.173273 -0.457500 +v -0.240847 0.179523 -0.457500 +v -0.232187 0.165773 -0.452500 +v -0.232187 0.159523 -0.452500 +v -0.223527 0.165773 -0.457499 +v -0.223527 0.159523 -0.457499 +v -0.223527 0.165773 -0.467499 +v -0.223527 0.159523 -0.467499 +v -0.232187 0.165773 -0.472499 +v -0.232187 0.159523 -0.472499 +v -0.240847 0.165773 -0.467500 +v -0.240847 0.159523 -0.467500 +v -0.240847 0.159523 -0.457500 +v -0.240847 0.165773 -0.457500 +v -0.061248 0.243710 -0.263122 +v -0.006248 0.243710 -0.318122 +v -0.061248 0.243710 -0.318122 +v -0.061249 0.298709 -0.263122 +v -0.006249 0.298709 -0.318121 +v -0.061249 0.298709 -0.318121 +v -0.061248 0.271209 -0.293747 +v -0.086248 0.271209 -0.293747 +v -0.061248 0.273419 -0.292831 +v -0.086248 0.273419 -0.292831 +v -0.061248 0.274334 -0.290622 +v -0.086248 0.274334 -0.290622 +v -0.061248 0.273419 -0.288412 +v -0.086248 0.273419 -0.288412 +v -0.061248 0.271209 -0.287497 +v -0.086248 0.271209 -0.287497 +v -0.061248 0.269000 -0.288412 +v -0.086248 0.269000 -0.288412 +v -0.061248 0.268084 -0.290622 +v -0.086248 0.268084 -0.290622 +v -0.061248 0.269000 -0.292831 +v -0.086248 0.269000 -0.292831 +v -0.054998 0.243710 -0.263122 +v -0.012498 0.243710 -0.318122 +v -0.012499 0.298709 -0.318121 +v -0.012499 0.298709 -0.263122 +v -0.054998 0.243710 -0.318122 +v -0.054999 0.298709 -0.318121 +v -0.054999 0.298709 -0.263122 +v -0.006248 0.243710 -0.263122 +v -0.006249 0.298709 -0.263122 +v -0.012498 0.243710 -0.263122 +v -0.098751 -0.225037 -0.035001 +v -0.098751 -0.225038 -0.437499 +v -0.096837 -0.225417 -0.035001 +v -0.096837 -0.225419 -0.437499 +v -0.095215 -0.226501 -0.035001 +v -0.095215 -0.226503 -0.437499 +v -0.094131 -0.228123 -0.035001 +v -0.094131 -0.228125 -0.437499 +v -0.093751 -0.230037 -0.035001 +v -0.093751 -0.230038 -0.437499 +v -0.094131 -0.231950 -0.035001 +v -0.094131 -0.231952 -0.437499 +v -0.095215 -0.233572 -0.035001 +v -0.095215 -0.233574 -0.437499 +v -0.096837 -0.234656 -0.035001 +v -0.096837 -0.234658 -0.437499 +v -0.098751 -0.235037 -0.035001 +v -0.098751 -0.235038 -0.437499 +v -0.100664 -0.234656 -0.035001 +v -0.100664 -0.234658 -0.437499 +v -0.102286 -0.233572 -0.035001 +v -0.102286 -0.233574 -0.437499 +v -0.103370 -0.231950 -0.035001 +v -0.103370 -0.231952 -0.437499 +v -0.103751 -0.230037 -0.035001 +v -0.103751 -0.230038 -0.437499 +v -0.103370 -0.228123 -0.035001 +v -0.103370 -0.228125 -0.437499 +v -0.102286 -0.226501 -0.035001 +v -0.102286 -0.226503 -0.437499 +v -0.100664 -0.225417 -0.035001 +v -0.100664 -0.225419 -0.437499 +v -0.108748 0.201210 -0.418747 +v -0.108748 0.201210 -0.393747 +v -0.107987 0.205036 -0.418746 +v -0.107987 0.205036 -0.393747 +v -0.105819 0.208281 -0.418746 +v -0.105819 0.208281 -0.393747 +v -0.102575 0.210448 -0.418746 +v -0.102575 0.210448 -0.393746 +v -0.098748 0.211210 -0.418746 +v -0.098748 0.211210 -0.393746 +v -0.094922 0.210448 -0.418746 +v -0.094922 0.210448 -0.393746 +v -0.091677 0.208281 -0.418746 +v -0.091677 0.208281 -0.393747 +v -0.089510 0.205036 -0.418746 +v -0.089510 0.205036 -0.393747 +v -0.088748 0.201210 -0.418747 +v -0.088748 0.201210 -0.393747 +v -0.089510 0.197383 -0.418747 +v -0.089510 0.197383 -0.393747 +v -0.091677 0.194139 -0.418747 +v -0.091677 0.194139 -0.393747 +v -0.094922 0.191971 -0.418747 +v -0.094922 0.191971 -0.393747 +v -0.098748 0.191210 -0.418747 +v -0.098748 0.191210 -0.393747 +v -0.102575 0.191971 -0.418747 +v -0.102575 0.191971 -0.393747 +v -0.105820 0.194139 -0.418747 +v -0.105820 0.194139 -0.393747 +v -0.107987 0.197383 -0.418747 +v -0.107987 0.197383 -0.393747 +v -0.071249 0.173710 -0.437497 +v -0.126248 0.173710 -0.492496 +v -0.126248 0.173710 -0.437497 +v -0.071248 0.228709 -0.437496 +v -0.126248 0.228709 -0.492496 +v -0.126248 0.228709 -0.437496 +v -0.101873 0.201210 -0.437496 +v -0.101873 0.201210 -0.412497 +v -0.100958 0.203419 -0.437496 +v -0.100958 0.203419 -0.412496 +v -0.098748 0.204335 -0.437496 +v -0.098748 0.204335 -0.412496 +v -0.096539 0.203419 -0.437496 +v -0.096539 0.203419 -0.412496 +v -0.095623 0.201210 -0.437496 +v -0.095623 0.201210 -0.412497 +v -0.096539 0.199000 -0.437496 +v -0.096539 0.199000 -0.412497 +v -0.098748 0.198085 -0.437496 +v -0.098748 0.198085 -0.412497 +v -0.100958 0.199000 -0.437496 +v -0.100958 0.199000 -0.412497 +v -0.071249 0.173710 -0.443747 +v -0.126248 0.173710 -0.486246 +v -0.126248 0.228709 -0.486246 +v -0.071248 0.228709 -0.486246 +v -0.126248 0.173710 -0.443747 +v -0.126248 0.228709 -0.443746 +v -0.071248 0.228709 -0.443746 +v -0.071249 0.173710 -0.492496 +v -0.071248 0.228709 -0.492496 +v -0.071249 0.173710 -0.486246 +v -0.078748 -0.214277 -0.317497 +v -0.078368 -0.214277 -0.319410 +v -0.077284 -0.214277 -0.321032 +v -0.075662 -0.214277 -0.322116 +v -0.073748 -0.214277 -0.322497 +v -0.071835 -0.214277 -0.322116 +v -0.070213 -0.214277 -0.321032 +v -0.069129 -0.214277 -0.319410 +v -0.068748 -0.214277 -0.317497 +v -0.069129 -0.214277 -0.315583 +v -0.070213 -0.214277 -0.313961 +v -0.071835 -0.214277 -0.312877 +v -0.073748 -0.214277 -0.312497 +v -0.075662 -0.214277 -0.312877 +v -0.077284 -0.214277 -0.313961 +v -0.078368 -0.214277 -0.315583 +v -0.078368 0.211210 -0.315584 +v -0.078748 0.211209 -0.317497 +v -0.071835 0.211210 -0.312878 +v -0.069129 0.211210 -0.315584 +v -0.075662 0.211210 -0.312878 +v -0.071835 0.211210 -0.322117 +v -0.075662 0.211210 -0.322117 +v -0.078368 0.211210 -0.319411 +v -0.069129 0.211210 -0.319411 +v -0.077284 0.211210 -0.313962 +v -0.073748 0.211210 -0.312497 +v -0.070213 0.211210 -0.313962 +v -0.068748 0.211210 -0.317497 +v -0.070213 0.211210 -0.321033 +v -0.073748 0.211210 -0.322497 +v -0.077284 0.211210 -0.321033 +v 0.043749 0.110037 -0.432636 +v 0.074999 0.110037 -0.432636 +v 0.043749 0.115449 -0.432636 +v 0.074999 0.115449 -0.432636 +v 0.043749 0.096972 -0.432636 +v 0.074999 0.096972 -0.432636 +v 0.043749 0.102384 -0.432636 +v 0.074999 0.102384 -0.432636 +v 0.043749 0.115449 -0.447488 +v 0.043749 0.114061 -0.450840 +v 0.074999 0.114061 -0.450840 +v 0.074999 0.115449 -0.447488 +v 0.043749 0.111426 -0.453475 +v 0.043749 0.108073 -0.454863 +v 0.074999 0.108073 -0.454863 +v 0.074999 0.111426 -0.453475 +v 0.043749 0.104347 -0.454863 +v 0.043749 0.100995 -0.453475 +v 0.074999 0.100995 -0.453475 +v 0.074999 0.104347 -0.454863 +v 0.043749 0.098360 -0.450840 +v 0.043749 0.096972 -0.447488 +v 0.074999 0.096972 -0.447488 +v 0.074999 0.098360 -0.450840 +v -0.135376 0.226481 -0.042503 +v -0.135376 0.226481 -0.057503 +v -0.135376 0.221481 -0.037503 +v -0.135376 0.178981 -0.057502 +v -0.135376 0.178981 -0.037503 +v -0.127877 0.233981 -0.039397 +v -0.127877 0.233981 -0.055003 +v -0.130377 0.231481 -0.057503 +v -0.126538 0.233981 -0.037503 +v -0.134126 0.177731 -0.037503 +v -0.125376 0.186481 -0.037503 +v -0.125376 0.215231 -0.037503 +v -0.091627 0.215231 -0.037503 +v -0.087877 0.218981 -0.037503 +v -0.087877 0.227731 -0.037503 +v -0.094127 0.233981 -0.037503 +v -0.134126 0.177731 -0.057502 +v -0.125377 0.233981 -0.052503 +v -0.094127 0.233981 -0.043753 +v -0.097877 0.233981 -0.043753 +v -0.106002 0.233981 -0.052503 +v -0.097877 0.233981 -0.044378 +v -0.125377 0.227718 -0.052503 +v -0.130376 0.181481 -0.057503 +v -0.087877 0.227731 -0.043753 +v -0.087877 0.218981 -0.043753 +v -0.091627 0.215231 -0.043753 +v -0.125376 0.215231 -0.043753 +v -0.125376 0.227718 -0.043753 +v -0.125501 0.186356 -0.052628 +v -0.106002 0.227718 -0.052503 +v -0.097877 0.227718 -0.044378 +v -0.097877 0.227718 -0.043753 +v -0.135446 0.230249 -0.431252 +v -0.135445 0.178999 -0.431252 +v -0.131696 0.233999 -0.431253 +v -0.127945 0.171499 -0.431252 +v -0.120445 0.171499 -0.431252 +v -0.112945 0.178999 -0.431252 +v -0.112946 0.215249 -0.431252 +v -0.076696 0.215249 -0.431252 +v -0.072946 0.218999 -0.431252 +v -0.072946 0.227749 -0.431252 +v -0.079196 0.233999 -0.431253 +v -0.135446 0.230249 -0.456252 +v -0.135446 0.227749 -0.458752 +v -0.135446 0.207749 -0.478752 +v -0.135446 0.197749 -0.478752 +v -0.135445 0.178999 -0.460002 +v -0.131696 0.233999 -0.452502 +v -0.097946 0.233999 -0.437503 +v -0.097946 0.233999 -0.438128 +v -0.112321 0.233999 -0.452502 +v -0.079196 0.233999 -0.437503 +v -0.072946 0.227749 -0.437502 +v -0.072946 0.218999 -0.437502 +v -0.076696 0.215249 -0.437502 +v -0.112946 0.215249 -0.437502 +v -0.112945 0.178999 -0.437502 +v -0.120445 0.171499 -0.437502 +v -0.127945 0.171499 -0.437502 +v -0.134195 0.177749 -0.458752 +v -0.134195 0.177749 -0.437502 +v -0.125445 0.177749 -0.458752 +v -0.125446 0.197749 -0.478752 +v -0.125446 0.207749 -0.478752 +v -0.125446 0.227749 -0.458752 +v -0.118571 0.227749 -0.458752 +v -0.118571 0.227736 -0.458752 +v -0.125446 0.227736 -0.458752 +v -0.097946 0.227736 -0.438127 +v -0.097946 0.227736 -0.437502 +v -0.125445 0.177749 -0.437502 +v -0.125446 0.227736 -0.437502 +v -0.006250 -0.027500 -0.316249 +v -0.061250 -0.027500 -0.261249 +v -0.006250 -0.027500 -0.261249 +v -0.006250 0.027500 -0.316249 +v -0.061249 0.027500 -0.261249 +v -0.006250 0.027500 -0.261249 +v -0.012500 -0.027500 -0.316249 +v -0.055000 -0.027500 -0.261249 +v -0.054999 0.027500 -0.261249 +v -0.054999 0.027500 -0.316249 +v -0.012500 -0.027500 -0.261249 +v -0.012500 0.027500 -0.261249 +v -0.012500 0.027500 -0.316249 +v -0.061250 -0.027500 -0.316249 +v -0.061249 0.027500 -0.316249 +v -0.055000 -0.027500 -0.316249 +v -0.167187 0.024961 -0.489999 +v -0.222187 0.079961 -0.489999 +v -0.222187 0.024961 -0.489999 +v -0.167187 0.024960 -0.435000 +v -0.222187 0.079960 -0.435000 +v -0.222187 0.024960 -0.435000 +v -0.197812 0.024961 -0.462499 +v -0.197812 -0.000039 -0.462499 +v -0.196897 0.024961 -0.460290 +v -0.196897 -0.000039 -0.460290 +v -0.194687 0.024961 -0.459375 +v -0.194687 -0.000039 -0.459375 +v -0.192478 0.024961 -0.460290 +v -0.192478 -0.000039 -0.460290 +v -0.191562 0.024961 -0.462499 +v -0.191562 -0.000039 -0.462499 +v -0.192478 0.024961 -0.464709 +v -0.192478 -0.000039 -0.464709 +v -0.194687 0.024961 -0.465624 +v -0.194687 -0.000039 -0.465624 +v -0.196897 0.024961 -0.464709 +v -0.196897 -0.000039 -0.464709 +v -0.167187 0.031211 -0.489999 +v -0.222187 0.073711 -0.489999 +v -0.222187 0.073710 -0.435000 +v -0.167187 0.073710 -0.435000 +v -0.222187 0.031211 -0.489999 +v -0.222187 0.031210 -0.435000 +v -0.167187 0.031210 -0.435000 +v -0.167188 0.079961 -0.489999 +v -0.167187 0.079960 -0.435000 +v -0.167188 0.073711 -0.489999 +v -0.072501 -0.195039 -0.300584 +v -0.072501 -0.195039 -0.298084 +v -0.079998 -0.195039 -0.300584 +v -0.079998 -0.195039 -0.298084 +v -0.072498 0.271225 -0.300579 +v -0.072498 0.271225 -0.298079 +v -0.079998 0.271225 -0.300579 +v -0.079998 0.271225 -0.298079 +v -0.194547 -0.003788 -0.455145 +v -0.194547 -0.003788 -0.452645 +v -0.194547 0.003711 -0.455145 +v -0.194547 0.003711 -0.452645 +v 0.224250 -0.003791 -0.455141 +v 0.224250 -0.003791 -0.452641 +v 0.224250 0.003711 -0.455141 +v 0.224250 0.003711 -0.452641 +v -0.194547 -0.003788 -0.472176 +v -0.194547 -0.003788 -0.469676 +v -0.194547 0.003711 -0.472176 +v -0.194547 0.003711 -0.469676 +v 0.224250 -0.003791 -0.472171 +v 0.224250 -0.003791 -0.469671 +v 0.224250 0.003711 -0.472171 +v 0.224250 0.003711 -0.469671 +v -0.206594 0.008035 -0.462500 +v -0.206594 -0.010715 -0.462500 +v -0.205688 0.008035 -0.457943 +v -0.205688 -0.010715 -0.457943 +v -0.203107 0.008035 -0.454080 +v -0.203107 -0.010715 -0.454080 +v -0.199244 0.008034 -0.451499 +v -0.199244 -0.010715 -0.451499 +v -0.194687 0.008034 -0.450592 +v -0.194687 -0.010715 -0.450592 +v -0.190130 0.008034 -0.451499 +v -0.190130 -0.010715 -0.451499 +v -0.186268 0.008035 -0.454080 +v -0.186268 -0.010715 -0.454080 +v -0.183686 0.008035 -0.457943 +v -0.183686 -0.010715 -0.457943 +v -0.182780 0.008035 -0.462500 +v -0.182780 -0.010715 -0.462500 +v -0.183686 0.008035 -0.467056 +v -0.183686 -0.010715 -0.467056 +v -0.186268 0.008035 -0.470919 +v -0.186268 -0.010715 -0.470919 +v -0.190131 0.008035 -0.473500 +v -0.190131 -0.010715 -0.473500 +v -0.194687 0.008035 -0.474407 +v -0.194687 -0.010715 -0.474407 +v -0.199244 0.008035 -0.473500 +v -0.199244 -0.010715 -0.473500 +v -0.203107 0.008035 -0.470919 +v -0.203107 -0.010715 -0.470919 +v -0.205688 0.008035 -0.467056 +v -0.205688 -0.010715 -0.467056 +v -0.206594 0.005356 -0.462500 +v -0.204820 0.005079 -0.462500 +v -0.204820 -0.005081 -0.462500 +v -0.206594 -0.005358 -0.462500 +v -0.205688 -0.005358 -0.457943 +v -0.204048 -0.005081 -0.458622 +v -0.204048 0.005078 -0.458622 +v -0.205688 0.005356 -0.457943 +v -0.203107 -0.005358 -0.454080 +v -0.201852 -0.005081 -0.455335 +v -0.201852 0.005078 -0.455335 +v -0.203107 0.005356 -0.454080 +v -0.199244 -0.005358 -0.451499 +v -0.198565 -0.005081 -0.453139 +v -0.198565 0.005078 -0.453139 +v -0.199244 0.005356 -0.451499 +v -0.194687 -0.005358 -0.450592 +v -0.194687 -0.005081 -0.452367 +v -0.194687 0.005078 -0.452367 +v -0.194687 0.005356 -0.450592 +v -0.190130 -0.005358 -0.451499 +v -0.190810 -0.005081 -0.453139 +v -0.190810 0.005078 -0.453139 +v -0.190130 0.005356 -0.451499 +v -0.186268 -0.005358 -0.454080 +v -0.187523 -0.005081 -0.455335 +v -0.187523 0.005078 -0.455335 +v -0.186268 0.005356 -0.454080 +v -0.183686 -0.005358 -0.457943 +v -0.185326 -0.005081 -0.458622 +v -0.185326 0.005078 -0.458622 +v -0.183686 0.005356 -0.457943 +v -0.182780 -0.005358 -0.462500 +v -0.184555 -0.005081 -0.462500 +v -0.184555 0.005079 -0.462500 +v -0.182780 0.005356 -0.462500 +v -0.183686 -0.005358 -0.467056 +v -0.185326 -0.005081 -0.466377 +v -0.185326 0.005079 -0.466377 +v -0.183686 0.005356 -0.467056 +v -0.186268 -0.005358 -0.470919 +v -0.187523 -0.005081 -0.469664 +v -0.187523 0.005079 -0.469664 +v -0.186268 0.005356 -0.470919 +v -0.190131 -0.005358 -0.473500 +v -0.190810 -0.005081 -0.471861 +v -0.190810 0.005079 -0.471861 +v -0.190131 0.005356 -0.473500 +v -0.194687 -0.005358 -0.474407 +v -0.194687 -0.005081 -0.472632 +v -0.194687 0.005079 -0.472632 +v -0.194687 0.005356 -0.474407 +v -0.199244 -0.005358 -0.473500 +v -0.198565 -0.005081 -0.471861 +v -0.198565 0.005079 -0.471861 +v -0.199244 0.005356 -0.473500 +v -0.203107 -0.005358 -0.470919 +v -0.201852 -0.005081 -0.469664 +v -0.201852 0.005079 -0.469664 +v -0.203107 0.005356 -0.470919 +v -0.205688 -0.005358 -0.467056 +v -0.204048 -0.005081 -0.466377 +v -0.204048 0.005079 -0.466377 +v -0.205688 0.005356 -0.467056 +v 0.211561 -0.011289 -0.448750 +v 0.211561 -0.011289 -0.476250 +v 0.211561 0.011211 -0.448750 +v 0.211561 0.011211 -0.476249 +v 0.270311 -0.011289 -0.460114 +v 0.258946 -0.011289 -0.448750 +v 0.268788 -0.011289 -0.454432 +v 0.264629 -0.011289 -0.450272 +v 0.258946 -0.011289 -0.476250 +v 0.270311 -0.011289 -0.464885 +v 0.264629 -0.011289 -0.474727 +v 0.268788 -0.011289 -0.470567 +v 0.258946 0.011211 -0.448750 +v 0.270311 0.011211 -0.460114 +v 0.264629 0.011211 -0.450272 +v 0.268788 0.011211 -0.454432 +v 0.270311 0.011211 -0.464885 +v 0.258946 0.011211 -0.476249 +v 0.268788 0.011211 -0.470567 +v 0.264629 0.011211 -0.474727 +v 0.014688 -0.011249 -0.432259 +v -0.014687 -0.011249 -0.432259 +v 0.014688 -0.011249 -0.459759 +v -0.014687 -0.011249 -0.459759 +v 0.014688 0.011251 -0.432259 +v -0.014687 0.011251 -0.432259 +v 0.014688 0.011251 -0.459759 +v -0.014687 0.011251 -0.459759 +v -0.129148 -0.106248 -0.464999 +v -0.135398 -0.106248 -0.464999 +v -0.129149 -0.114908 -0.469999 +v -0.135398 -0.114908 -0.469999 +v -0.129149 -0.114908 -0.479999 +v -0.135398 -0.114908 -0.479999 +v -0.129148 -0.106248 -0.484999 +v -0.135398 -0.106248 -0.484999 +v -0.129148 -0.097588 -0.480000 +v -0.135398 -0.097588 -0.480000 +v -0.135398 -0.097588 -0.470000 +v -0.129148 -0.097588 -0.470000 +v -0.068452 0.283117 -0.290622 +v -0.087202 0.283117 -0.290622 +v -0.068452 0.282211 -0.286065 +v -0.087202 0.282211 -0.286065 +v -0.068452 0.279629 -0.282202 +v -0.087202 0.279629 -0.282202 +v -0.068452 0.275766 -0.279621 +v -0.087202 0.275766 -0.279621 +v -0.068452 0.271210 -0.278714 +v -0.087202 0.271210 -0.278714 +v -0.068452 0.266653 -0.279621 +v -0.087202 0.266653 -0.279621 +v -0.068452 0.262790 -0.282202 +v -0.087202 0.262790 -0.282202 +v -0.068452 0.260209 -0.286065 +v -0.087202 0.260209 -0.286065 +v -0.068452 0.259302 -0.290622 +v -0.087202 0.259302 -0.290622 +v -0.068452 0.260209 -0.295178 +v -0.087202 0.260209 -0.295178 +v -0.068452 0.262790 -0.299041 +v -0.087202 0.262790 -0.299041 +v -0.068452 0.266653 -0.301622 +v -0.087202 0.266653 -0.301622 +v -0.068452 0.271210 -0.302529 +v -0.087202 0.271210 -0.302529 +v -0.068452 0.275766 -0.301622 +v -0.087202 0.275766 -0.301622 +v -0.068452 0.279629 -0.299041 +v -0.087202 0.279629 -0.299041 +v -0.068452 0.282211 -0.295178 +v -0.087202 0.282211 -0.295178 +v -0.071131 0.283117 -0.290622 +v -0.071408 0.281342 -0.290622 +v -0.081568 0.281342 -0.290622 +v -0.081845 0.283117 -0.290622 +v -0.081845 0.282211 -0.286065 +v -0.081568 0.280571 -0.286744 +v -0.071408 0.280571 -0.286744 +v -0.071131 0.282211 -0.286065 +v -0.081845 0.279629 -0.282202 +v -0.081568 0.278374 -0.283457 +v -0.071409 0.278374 -0.283457 +v -0.071131 0.279629 -0.282202 +v -0.081845 0.275766 -0.279621 +v -0.081568 0.275087 -0.281261 +v -0.071409 0.275087 -0.281261 +v -0.071131 0.275766 -0.279621 +v -0.081845 0.271210 -0.278714 +v -0.081568 0.271210 -0.280489 +v -0.071409 0.271210 -0.280489 +v -0.071131 0.271210 -0.278714 +v -0.081845 0.266653 -0.279621 +v -0.081568 0.267332 -0.281261 +v -0.071409 0.267332 -0.281261 +v -0.071131 0.266653 -0.279621 +v -0.081845 0.262790 -0.282202 +v -0.081568 0.264045 -0.283457 +v -0.071409 0.264045 -0.283457 +v -0.071131 0.262790 -0.282202 +v -0.081845 0.260209 -0.286065 +v -0.081568 0.261849 -0.286744 +v -0.071408 0.261849 -0.286744 +v -0.071131 0.260209 -0.286065 +v -0.081845 0.259302 -0.290622 +v -0.081568 0.261077 -0.290622 +v -0.071408 0.261077 -0.290622 +v -0.071131 0.259302 -0.290622 +v -0.081845 0.260209 -0.295178 +v -0.081568 0.261849 -0.294499 +v -0.071408 0.261849 -0.294499 +v -0.071131 0.260209 -0.295178 +v -0.081845 0.262790 -0.299041 +v -0.081568 0.264045 -0.297786 +v -0.071408 0.264045 -0.297786 +v -0.071131 0.262790 -0.299041 +v -0.081845 0.266653 -0.301622 +v -0.081568 0.267332 -0.299983 +v -0.071408 0.267332 -0.299983 +v -0.071131 0.266653 -0.301622 +v -0.081845 0.271210 -0.302529 +v -0.081568 0.271210 -0.300754 +v -0.071408 0.271210 -0.300754 +v -0.071131 0.271210 -0.302529 +v -0.081845 0.275766 -0.301622 +v -0.081568 0.275087 -0.299983 +v -0.071408 0.275087 -0.299983 +v -0.071131 0.275766 -0.301622 +v -0.081845 0.279629 -0.299041 +v -0.081568 0.278374 -0.297786 +v -0.071408 0.278374 -0.297786 +v -0.071131 0.279629 -0.299041 +v -0.081845 0.282211 -0.295178 +v -0.081568 0.280571 -0.294499 +v -0.071408 0.280571 -0.294499 +v -0.071131 0.282211 -0.295178 +v -0.280936 0.101212 -0.474995 +v 0.281562 0.101210 -0.474997 +v -0.280936 0.101592 -0.473081 +v 0.281562 0.101591 -0.473084 +v -0.280936 0.102676 -0.471459 +v 0.281562 0.102675 -0.471462 +v -0.280936 0.104298 -0.470375 +v 0.281562 0.104297 -0.470378 +v -0.280936 0.106212 -0.469995 +v 0.281562 0.106210 -0.469997 +v -0.280936 0.108125 -0.470375 +v 0.281562 0.108124 -0.470378 +v -0.280936 0.109747 -0.471459 +v 0.281562 0.109746 -0.471462 +v -0.280936 0.110831 -0.473081 +v 0.281562 0.110830 -0.473084 +v -0.280936 0.111212 -0.474995 +v 0.281562 0.111210 -0.474997 +v -0.280936 0.110831 -0.476908 +v 0.281562 0.110830 -0.476911 +v -0.280936 0.109747 -0.478530 +v 0.281562 0.109746 -0.478533 +v -0.280936 0.108125 -0.479614 +v 0.281562 0.108124 -0.479616 +v -0.280936 0.106212 -0.479995 +v 0.281562 0.106210 -0.479997 +v -0.280936 0.104298 -0.479614 +v 0.281562 0.104297 -0.479616 +v -0.280936 0.102676 -0.478530 +v 0.281562 0.102675 -0.478533 +v -0.280936 0.101592 -0.476908 +v 0.281562 0.101591 -0.476911 +v -0.232187 0.024959 -0.452500 +v -0.232187 0.031209 -0.452500 +v -0.240847 0.024959 -0.457499 +v -0.240847 0.031209 -0.457499 +v -0.240847 0.024959 -0.467499 +v -0.240847 0.031209 -0.467499 +v -0.232187 0.024959 -0.472499 +v -0.232187 0.031209 -0.472499 +v -0.223527 0.024959 -0.467500 +v -0.223527 0.031209 -0.467500 +v -0.223527 0.024959 -0.457500 +v -0.223527 0.031209 -0.457500 +v -0.232187 0.024959 -0.477499 +v -0.232187 0.031209 -0.477499 +v -0.240847 0.024959 -0.482499 +v -0.240847 0.031209 -0.482499 +v -0.240847 0.024959 -0.492499 +v -0.240847 0.031209 -0.492499 +v -0.232187 0.024959 -0.497499 +v -0.232187 0.031209 -0.497499 +v -0.223527 0.024959 -0.492499 +v -0.223527 0.031209 -0.492499 +v -0.223527 0.024959 -0.482500 +v -0.223527 0.031209 -0.482500 +v -0.232187 0.012493 -0.477499 +v -0.232187 0.006243 -0.477499 +v -0.223527 0.012493 -0.482499 +v -0.223527 0.006243 -0.482499 +v -0.223527 0.012493 -0.492499 +v -0.223527 0.006243 -0.492499 +v -0.232187 0.012493 -0.497499 +v -0.232187 0.006243 -0.497499 +v -0.240847 0.012493 -0.492499 +v -0.240847 0.006243 -0.492499 +v -0.240847 0.012493 -0.482500 +v -0.240847 0.006243 -0.482500 +v -0.232187 0.012493 -0.452500 +v -0.232187 0.006243 -0.452500 +v -0.223527 0.012493 -0.457499 +v -0.223527 0.006243 -0.457499 +v -0.223527 0.012493 -0.467499 +v -0.223527 0.006243 -0.467499 +v -0.232187 0.012493 -0.472499 +v -0.232187 0.006243 -0.472499 +v -0.240847 0.012493 -0.467500 +v -0.240847 0.006243 -0.467500 +v -0.240847 0.012493 -0.457500 +v -0.240847 0.006243 -0.457500 +v 0.257811 -0.011246 -0.452500 +v 0.257811 -0.017496 -0.452500 +v 0.266471 -0.011246 -0.457499 +v 0.266471 -0.017496 -0.457499 +v 0.266471 -0.011246 -0.467499 +v 0.266471 -0.017496 -0.467499 +v 0.257811 -0.011246 -0.472499 +v 0.257811 -0.017496 -0.472499 +v 0.249151 -0.011246 -0.467500 +v 0.249151 -0.017496 -0.467500 +v 0.249151 -0.011246 -0.457500 +v 0.249151 -0.017496 -0.457500 +v 0.257811 0.011174 -0.452500 +v 0.257811 0.017424 -0.452500 +v 0.249151 0.011174 -0.457499 +v 0.249151 0.017424 -0.457499 +v 0.249151 0.011174 -0.467499 +v 0.249151 0.017424 -0.467499 +v 0.257811 0.011174 -0.472499 +v 0.257811 0.017424 -0.472499 +v 0.266471 0.011174 -0.467500 +v 0.266471 0.017424 -0.467500 +v 0.266471 0.011174 -0.457500 +v 0.266471 0.017424 -0.457500 +v -0.243730 0.165772 -0.497499 +v -0.246230 0.165772 -0.499999 +v -0.277479 0.165772 -0.474249 +v -0.183730 0.165772 -0.467999 +v -0.178417 0.165772 -0.463922 +v -0.178230 0.165772 -0.462499 +v -0.178967 0.165772 -0.459749 +v -0.180980 0.165772 -0.457736 +v -0.183730 0.165772 -0.456999 +v -0.271229 0.165772 -0.456999 +v -0.277479 0.165772 -0.441249 +v -0.142879 0.165772 -0.497499 +v -0.271229 0.165772 -0.499999 +v -0.277479 0.165772 -0.493749 +v -0.271229 0.165772 -0.467999 +v -0.182306 0.165772 -0.467811 +v -0.180980 0.165772 -0.467262 +v -0.179841 0.165772 -0.466388 +v -0.178967 0.165772 -0.465249 +v -0.178417 0.165772 -0.461075 +v -0.179841 0.165772 -0.458610 +v -0.182306 0.165772 -0.457186 +v -0.277479 0.165772 -0.450749 +v -0.174830 0.165774 -0.037501 +v -0.142879 0.165774 -0.037501 +v -0.243730 0.173272 -0.497499 +v -0.246229 0.173272 -0.499999 +v -0.178417 0.173272 -0.463922 +v -0.178230 0.173272 -0.462499 +v -0.183730 0.173272 -0.456999 +v -0.271229 0.173272 -0.456999 +v -0.277479 0.173272 -0.441249 +v -0.271229 0.173272 -0.499999 +v -0.277479 0.173272 -0.493749 +v -0.182306 0.173272 -0.467811 +v -0.180980 0.173272 -0.467262 +v -0.179841 0.173272 -0.466388 +v -0.178967 0.173272 -0.465249 +v -0.174830 0.173274 -0.037501 +v -0.142879 0.173274 -0.037501 +v -0.142879 0.173272 -0.497499 +v -0.277479 0.173272 -0.474249 +v -0.271229 0.173272 -0.467999 +v -0.183730 0.173272 -0.467999 +v -0.178417 0.173272 -0.461075 +v -0.178967 0.173272 -0.459749 +v -0.179841 0.173272 -0.458610 +v -0.180980 0.173272 -0.457736 +v -0.182306 0.173272 -0.457186 +v -0.277479 0.173272 -0.450749 +v -0.074998 -0.102423 -0.432636 +v -0.043748 -0.102423 -0.432636 +v -0.074998 -0.097011 -0.432636 +v -0.043748 -0.097011 -0.432636 +v -0.074998 -0.115488 -0.432636 +v -0.043749 -0.115488 -0.432636 +v -0.074998 -0.110076 -0.432636 +v -0.043748 -0.110076 -0.432636 +v -0.074998 -0.097011 -0.447488 +v -0.074998 -0.098400 -0.450840 +v -0.043748 -0.098400 -0.450840 +v -0.043748 -0.097011 -0.447488 +v -0.074998 -0.101034 -0.453475 +v -0.074998 -0.104387 -0.454863 +v -0.043748 -0.104387 -0.454863 +v -0.043748 -0.101034 -0.453475 +v -0.074998 -0.108113 -0.454863 +v -0.074998 -0.111465 -0.453475 +v -0.043748 -0.111465 -0.453475 +v -0.043748 -0.108113 -0.454863 +v -0.074998 -0.114100 -0.450840 +v -0.074998 -0.115488 -0.447488 +v -0.043749 -0.115488 -0.447488 +v -0.043749 -0.114100 -0.450840 +v -0.074998 0.110037 -0.432636 +v -0.043748 0.110037 -0.432636 +v -0.074998 0.115449 -0.432636 +v -0.043748 0.115449 -0.432636 +v -0.074998 0.096972 -0.432636 +v -0.043749 0.096972 -0.432636 +v -0.074998 0.102384 -0.432636 +v -0.043748 0.102384 -0.432636 +v -0.074998 0.115449 -0.447488 +v -0.074998 0.114061 -0.450840 +v -0.043748 0.114061 -0.450840 +v -0.043748 0.115449 -0.447488 +v -0.074998 0.111426 -0.453475 +v -0.074998 0.108073 -0.454863 +v -0.043748 0.108073 -0.454863 +v -0.043748 0.111426 -0.453475 +v -0.074998 0.104347 -0.454863 +v -0.074998 0.100995 -0.453475 +v -0.043748 0.100995 -0.453475 +v -0.043748 0.104347 -0.454863 +v -0.074998 0.098360 -0.450840 +v -0.074998 0.096972 -0.447488 +v -0.043749 0.096972 -0.447488 +v -0.043749 0.098360 -0.450840 +v -0.082093 -0.119984 -0.420000 +v -0.082093 0.119981 -0.419998 +v 0.082094 0.119981 -0.419998 +v 0.082094 -0.119984 -0.420000 +v -0.082094 -0.119984 -0.432500 +v 0.082093 -0.119984 -0.432500 +v -0.082092 0.119981 -0.432500 +v 0.082094 0.119981 -0.432500 +v 0.132611 -0.127578 -0.432500 +v 0.127576 -0.132613 -0.432500 +v 0.131937 -0.130096 -0.432500 +v 0.130094 -0.131939 -0.432500 +v 0.127576 -0.132613 -0.420000 +v 0.132611 -0.127578 -0.420000 +v 0.130094 -0.131939 -0.420000 +v 0.131937 -0.130096 -0.420000 +v -0.127578 -0.132613 -0.432500 +v -0.132613 -0.127578 -0.432500 +v -0.130095 -0.131939 -0.432500 +v -0.131938 -0.130096 -0.432500 +v -0.132613 -0.127578 -0.420000 +v -0.127578 -0.132613 -0.420000 +v -0.131938 -0.130096 -0.420000 +v -0.130095 -0.131939 -0.420000 +v 0.127578 0.132611 -0.432500 +v 0.132613 0.127576 -0.432500 +v 0.130095 0.131936 -0.432500 +v 0.131938 0.130093 -0.432500 +v 0.132613 0.127576 -0.419998 +v 0.127578 0.132611 -0.419998 +v 0.131938 0.130093 -0.419998 +v 0.130095 0.131936 -0.419998 +v -0.132611 0.127576 -0.432500 +v -0.127576 0.132611 -0.432500 +v -0.131937 0.130093 -0.432500 +v -0.130094 0.131936 -0.432500 +v -0.127576 0.132611 -0.419998 +v -0.132611 0.127576 -0.419998 +v -0.130094 0.131936 -0.419998 +v -0.131937 0.130093 -0.419998 +v -0.127576 0.119981 -0.432500 +v -0.132611 0.125016 -0.432500 +v -0.130094 0.120655 -0.432500 +v -0.131937 0.122498 -0.432500 +v -0.132613 -0.125019 -0.432500 +v -0.127578 -0.119984 -0.432500 +v -0.131938 -0.122501 -0.432500 +v -0.130095 -0.120658 -0.432500 +v -0.127577 -0.119984 -0.420000 +v -0.132613 -0.125019 -0.420000 +v -0.130095 -0.120658 -0.420000 +v -0.131938 -0.122501 -0.420000 +v -0.132611 0.125016 -0.419998 +v -0.127576 0.119981 -0.419998 +v -0.131937 0.122498 -0.419998 +v -0.130094 0.120655 -0.419998 +v 0.127576 -0.119984 -0.432500 +v 0.132611 -0.125019 -0.432500 +v 0.130094 -0.120658 -0.432500 +v 0.131937 -0.122501 -0.432500 +v 0.132613 0.125016 -0.432500 +v 0.127578 0.119981 -0.432500 +v 0.131938 0.122498 -0.432500 +v 0.130095 0.120656 -0.432500 +v 0.127578 0.119981 -0.419998 +v 0.132613 0.125016 -0.419998 +v 0.130095 0.120656 -0.419998 +v 0.131938 0.122498 -0.419998 +v 0.132611 -0.125019 -0.420000 +v 0.127576 -0.119984 -0.420000 +v 0.131937 -0.122501 -0.420000 +v 0.130094 -0.120658 -0.420000 +v 0.132871 -0.132582 -0.420000 +v -0.132353 -0.132582 -0.420000 +v -0.132352 0.132642 -0.420000 +v 0.132872 0.132642 -0.420000 +v 0.132871 -0.132582 -0.416249 +v -0.132353 -0.132582 -0.416249 +v -0.132352 0.132642 -0.416249 +v 0.132872 0.132642 -0.416249 +v -0.238174 0.080868 0.135993 +v -0.235464 0.080868 0.140049 +v -0.231409 0.080868 0.142758 +v -0.226625 0.080868 0.143710 +v -0.221842 0.080868 0.142758 +v -0.217786 0.080868 0.140049 +v -0.215077 0.080868 0.135993 +v -0.214125 0.080868 0.131210 +v -0.215077 0.080868 0.126426 +v -0.217786 0.080868 0.122371 +v -0.221842 0.080868 0.119661 +v -0.226625 0.080868 0.118710 +v -0.231409 0.080868 0.119661 +v -0.235464 0.080868 0.122371 +v -0.238174 0.080868 0.126426 +v -0.239125 0.080868 0.131210 +v -0.118798 0.058162 -0.064381 +v -0.153102 0.058162 -0.065341 +v -0.119798 0.070662 -0.020898 +v -0.119798 0.058163 -0.020898 +v -0.118798 0.070662 -0.064381 +v -0.153102 0.070662 -0.065341 +v -0.242204 0.085241 0.137663 +v -0.238549 0.085241 0.143133 +v -0.233078 0.085241 0.146789 +v -0.226625 0.085241 0.148072 +v -0.220172 0.085241 0.146789 +v -0.214702 0.085241 0.143133 +v -0.211046 0.085241 0.137663 +v -0.209763 0.085241 0.131210 +v -0.211046 0.085241 0.124757 +v -0.214702 0.085241 0.119286 +v -0.220172 0.085241 0.115631 +v -0.226625 0.085241 0.114347 +v -0.233078 0.085241 0.115631 +v -0.238549 0.085241 0.119286 +v -0.242204 0.085241 0.124757 +v -0.243488 0.085241 0.131210 +v -0.242204 0.097249 0.137663 +v -0.238549 0.097249 0.143133 +v -0.233078 0.097249 0.146788 +v -0.226625 0.097249 0.148072 +v -0.220172 0.097249 0.146789 +v -0.214702 0.097249 0.143133 +v -0.211046 0.097249 0.137663 +v -0.209763 0.097249 0.131210 +v -0.211046 0.097249 0.124757 +v -0.214702 0.097249 0.119286 +v -0.220172 0.097249 0.115631 +v -0.226625 0.097249 0.114347 +v -0.233078 0.097249 0.115631 +v -0.238549 0.097249 0.119286 +v -0.242204 0.097249 0.124757 +v -0.243488 0.097249 0.131210 +v -0.238174 -0.086074 0.135994 +v -0.235464 -0.086074 0.140049 +v -0.231409 -0.086074 0.142759 +v -0.226625 -0.086074 0.143710 +v -0.221842 -0.086074 0.142759 +v -0.217786 -0.086074 0.140049 +v -0.215077 -0.086074 0.135994 +v -0.214125 -0.086074 0.131210 +v -0.215077 -0.086074 0.126427 +v -0.217786 -0.086074 0.122372 +v -0.221842 -0.086074 0.119662 +v -0.226625 -0.086074 0.118710 +v -0.231409 -0.086074 0.119662 +v -0.235464 -0.086074 0.122372 +v -0.238174 -0.086074 0.126427 +v -0.239125 -0.086074 0.131210 +v -0.118798 -0.063370 -0.064380 +v -0.153102 -0.063370 -0.065341 +v -0.119798 -0.075870 -0.020898 +v -0.119798 -0.063370 -0.020898 +v -0.118798 -0.075870 -0.064380 +v -0.153102 -0.075870 -0.065341 +v -0.242204 -0.090448 0.137663 +v -0.238549 -0.090448 0.143134 +v -0.233078 -0.090448 0.146789 +v -0.226625 -0.090448 0.148073 +v -0.220172 -0.090448 0.146789 +v -0.214702 -0.090448 0.143134 +v -0.211046 -0.090448 0.137663 +v -0.209763 -0.090448 0.131210 +v -0.211046 -0.090448 0.124757 +v -0.214702 -0.090448 0.119287 +v -0.220172 -0.090448 0.115631 +v -0.226625 -0.090448 0.114348 +v -0.233078 -0.090448 0.115631 +v -0.238549 -0.090448 0.119287 +v -0.242204 -0.090448 0.124757 +v -0.243488 -0.090448 0.131210 +v -0.242204 -0.102455 0.137663 +v -0.238549 -0.102455 0.143134 +v -0.233078 -0.102455 0.146789 +v -0.226625 -0.102455 0.148073 +v -0.220172 -0.102455 0.146789 +v -0.214702 -0.102455 0.143134 +v -0.211046 -0.102455 0.137663 +v -0.209763 -0.102455 0.131210 +v -0.211046 -0.102455 0.124757 +v -0.214702 -0.102455 0.119287 +v -0.220172 -0.102455 0.115632 +v -0.226625 -0.102455 0.114348 +v -0.233078 -0.102455 0.115632 +v -0.238549 -0.102455 0.119287 +v -0.242204 -0.102455 0.124757 +v -0.243488 -0.102455 0.131210 +v -0.259290 0.058163 0.149330 +v -0.261802 0.058163 0.145258 +v -0.261802 0.070663 0.145258 +v -0.259290 0.070663 0.149330 +v -0.252707 0.070663 0.149256 +v -0.246280 0.070663 0.144921 +v -0.246280 0.058163 0.144921 +v -0.252707 0.058163 0.149256 +v -0.261802 -0.063369 0.145258 +v -0.259290 -0.063369 0.149330 +v -0.259290 -0.075869 0.149330 +v -0.261802 -0.075869 0.145258 +v -0.246280 -0.075869 0.144922 +v -0.252707 -0.075869 0.149257 +v -0.252707 -0.063369 0.149257 +v -0.246280 -0.063369 0.144922 +v -0.203235 0.058163 0.146877 +v -0.207277 0.058163 0.149334 +v -0.207277 0.070663 0.149334 +v -0.203235 0.070663 0.146877 +v -0.214707 0.070663 0.146413 +v -0.212076 0.070663 0.149252 +v -0.212076 0.058163 0.149252 +v -0.214707 0.058163 0.146413 +v -0.207277 -0.063369 0.149334 +v -0.203235 -0.063369 0.146878 +v -0.203235 -0.075869 0.146878 +v -0.207277 -0.075869 0.149334 +v -0.212076 -0.075869 0.149253 +v -0.214707 -0.075869 0.146413 +v -0.214707 -0.063369 0.146413 +v -0.212076 -0.063369 0.149253 +v -0.215953 0.070663 0.124087 +v -0.213733 0.070663 0.130018 +v -0.225321 0.070663 0.118376 +v -0.219448 0.070663 0.120523 +v -0.236948 0.070663 0.122545 +v -0.232166 0.070663 0.119022 +v -0.232166 0.058163 0.119023 +v -0.236948 0.058163 0.122545 +v -0.219448 0.058163 0.120523 +v -0.225321 0.058163 0.118376 +v -0.213733 0.058163 0.130018 +v -0.215953 0.058163 0.124088 +v -0.213733 -0.075869 0.130019 +v -0.215953 -0.075869 0.124088 +v -0.219448 -0.075869 0.120524 +v -0.225321 -0.075869 0.118376 +v -0.232166 -0.075869 0.119023 +v -0.236948 -0.075869 0.122546 +v -0.236948 -0.063370 0.122545 +v -0.232166 -0.063370 0.119023 +v -0.225321 -0.063370 0.118376 +v -0.219448 -0.063370 0.120524 +v -0.215953 -0.063370 0.124088 +v -0.213733 -0.063369 0.130019 +v -0.004653 0.000000 -0.330167 +v -0.004653 0.000000 -0.316009 +v -0.004299 0.001781 -0.330167 +v -0.004299 0.001781 -0.316009 +v -0.003290 0.003290 -0.330167 +v -0.003290 0.003290 -0.316009 +v -0.001781 0.004299 -0.330167 +v -0.001781 0.004299 -0.316009 +v 0.000000 0.004653 -0.330167 +v 0.000000 0.004653 -0.316009 +v 0.001781 0.004299 -0.330167 +v 0.001781 0.004299 -0.316009 +v 0.003290 0.003290 -0.330167 +v 0.003290 0.003290 -0.316009 +v 0.004299 0.001781 -0.330167 +v 0.004299 0.001781 -0.316009 +v 0.004653 0.000000 -0.330167 +v 0.004653 0.000000 -0.316009 +v 0.004299 -0.001781 -0.330167 +v 0.004299 -0.001781 -0.316009 +v 0.003290 -0.003290 -0.330167 +v 0.003290 -0.003290 -0.316009 +v 0.001781 -0.004299 -0.330167 +v 0.001781 -0.004299 -0.316009 +v 0.000000 -0.004653 -0.330167 +v 0.000000 -0.004653 -0.316009 +v -0.001781 -0.004299 -0.330167 +v -0.001781 -0.004299 -0.316009 +v -0.003290 -0.003290 -0.330167 +v -0.003290 -0.003290 -0.316009 +v -0.004299 -0.001781 -0.330167 +v -0.004299 -0.001781 -0.316009 +v -0.005000 0.000000 -0.342499 +v -0.004619 0.001913 -0.342499 +v -0.003535 0.003536 -0.342499 +v -0.001913 0.004619 -0.342499 +v 0.000000 0.005000 -0.342499 +v 0.001913 0.004619 -0.342499 +v 0.003536 0.003536 -0.342499 +v 0.004619 0.001913 -0.342499 +v 0.005000 0.000000 -0.342499 +v 0.004619 -0.001913 -0.342499 +v 0.003536 -0.003535 -0.342499 +v 0.001913 -0.004619 -0.342499 +v 0.000000 -0.005000 -0.342499 +v -0.001913 -0.004619 -0.342499 +v -0.003535 -0.003535 -0.342499 +v 0.000000 0.000000 -0.349999 +v -0.004619 -0.001913 -0.342499 +v -0.010496 0.010496 -0.330167 +v -0.010496 0.010496 -0.342499 +v 0.010496 0.010496 -0.330167 +v 0.010496 0.010496 -0.342499 +v -0.010496 -0.010496 -0.330167 +v -0.010496 -0.010496 -0.342499 +v 0.010496 -0.010496 -0.330167 +v 0.010496 -0.010496 -0.342499 +v -0.332625 -0.043982 0.106628 +v -0.332625 0.038775 0.106627 +v -0.330588 -0.043982 0.085948 +v -0.330588 0.038775 0.085948 +v -0.324556 -0.043982 0.066063 +v -0.324556 0.038775 0.066063 +v -0.314761 -0.043982 0.047737 +v -0.314761 0.038775 0.047737 +v -0.301579 -0.043982 0.031674 +v -0.301579 0.038775 0.031674 +v -0.285516 -0.043982 0.018492 +v -0.285516 0.038775 0.018492 +v -0.267190 -0.043982 0.008696 +v -0.267190 0.038775 0.008696 +v -0.247305 -0.043982 0.002664 +v -0.247305 0.038775 0.002664 +v -0.226625 -0.043982 0.000628 +v -0.226625 0.038775 0.000627 +v -0.205946 -0.043982 0.002664 +v -0.205946 0.038775 0.002664 +v -0.186061 -0.043982 0.008696 +v -0.186061 0.038775 0.008696 +v -0.167735 -0.043982 0.018492 +v -0.167735 0.038775 0.018492 +v -0.151672 -0.043982 0.031674 +v -0.151672 0.038775 0.031674 +v -0.138489 -0.043982 0.047737 +v -0.138489 0.038775 0.047737 +v -0.128694 -0.043982 0.066063 +v -0.128694 0.038775 0.066063 +v -0.122662 -0.043982 0.085948 +v -0.122662 0.038775 0.085948 +v -0.120625 -0.043982 0.106628 +v -0.120625 0.038775 0.106627 +v -0.122662 -0.043982 0.127307 +v -0.122662 0.038775 0.127307 +v -0.128694 -0.043981 0.147192 +v -0.128694 0.038775 0.147192 +v -0.138489 -0.043981 0.165518 +v -0.138489 0.038775 0.165518 +v -0.151672 -0.043981 0.181581 +v -0.151672 0.038775 0.181581 +v -0.167735 -0.043981 0.194764 +v -0.167735 0.038776 0.194763 +v -0.186061 -0.043981 0.204559 +v -0.186061 0.038776 0.204559 +v -0.205946 -0.043981 0.210591 +v -0.205946 0.038776 0.210591 +v -0.226625 -0.043981 0.212628 +v -0.226625 0.038776 0.212627 +v -0.247305 -0.043981 0.210591 +v -0.247305 0.038776 0.210591 +v -0.267190 -0.043981 0.204559 +v -0.267190 0.038776 0.204559 +v -0.285516 -0.043981 0.194763 +v -0.285516 0.038776 0.194763 +v -0.301579 -0.043981 0.181581 +v -0.301579 0.038775 0.181581 +v -0.314761 -0.043981 0.165518 +v -0.314761 0.038775 0.165518 +v -0.324557 -0.043982 0.147192 +v -0.324557 0.038775 0.147192 +v -0.330589 -0.043982 0.127307 +v -0.330589 0.038775 0.127307 +v -0.350292 -0.050103 0.106628 +v -0.350292 0.044896 0.106627 +v -0.347916 -0.050103 0.082502 +v -0.347916 0.044896 0.082501 +v -0.340878 -0.050103 0.059303 +v -0.340878 0.044896 0.059302 +v -0.329450 -0.050103 0.037922 +v -0.329450 0.044896 0.037922 +v -0.314071 -0.050103 0.019182 +v -0.314071 0.044896 0.019182 +v -0.295331 -0.050103 0.003803 +v -0.295331 0.044896 0.003802 +v -0.273950 -0.050104 -0.007625 +v -0.273950 0.044896 -0.007626 +v -0.250751 -0.050104 -0.014663 +v -0.250751 0.044896 -0.014663 +v -0.226625 -0.050104 -0.017039 +v -0.226625 0.044896 -0.017039 +v -0.202499 -0.050104 -0.014663 +v -0.202499 0.044896 -0.014663 +v -0.179300 -0.050104 -0.007625 +v -0.179300 0.044896 -0.007626 +v -0.157920 -0.050103 0.003803 +v -0.157920 0.044896 0.003802 +v -0.139180 -0.050103 0.019182 +v -0.139180 0.044896 0.019182 +v -0.123800 -0.050103 0.037922 +v -0.123800 0.044896 0.037922 +v -0.112372 -0.050103 0.059303 +v -0.112372 0.044896 0.059302 +v -0.105335 -0.050103 0.082502 +v -0.105335 0.044896 0.082501 +v -0.102958 -0.050103 0.106628 +v -0.102958 0.044897 0.106627 +v -0.105335 -0.050103 0.130754 +v -0.105335 0.044897 0.130754 +v -0.112372 -0.050103 0.153953 +v -0.112372 0.044897 0.153953 +v -0.123800 -0.050103 0.175333 +v -0.123800 0.044897 0.175333 +v -0.139180 -0.050103 0.194073 +v -0.139180 0.044897 0.194073 +v -0.157920 -0.050103 0.209453 +v -0.157920 0.044897 0.209453 +v -0.179300 -0.050103 0.220881 +v -0.179300 0.044897 0.220881 +v -0.202499 -0.050103 0.227918 +v -0.202499 0.044897 0.227918 +v -0.226625 -0.050103 0.230294 +v -0.226625 0.044897 0.230294 +v -0.250751 -0.050103 0.227918 +v -0.250751 0.044897 0.227918 +v -0.273951 -0.050103 0.220881 +v -0.273951 0.044897 0.220881 +v -0.295331 -0.050103 0.209453 +v -0.295331 0.044897 0.209453 +v -0.314071 -0.050103 0.194073 +v -0.314071 0.044897 0.194073 +v -0.329450 -0.050103 0.175333 +v -0.329450 0.044897 0.175333 +v -0.340878 -0.050103 0.153953 +v -0.340878 0.044897 0.153952 +v -0.347916 -0.050103 0.130754 +v -0.347916 0.044897 0.130753 +v -0.347916 0.038646 0.082501 +v -0.350292 0.038647 0.106627 +v -0.340878 0.038646 0.059302 +v -0.329450 0.038646 0.037922 +v -0.314071 0.038646 0.019182 +v -0.295331 0.038646 0.003802 +v -0.273950 0.038646 -0.007626 +v -0.250751 0.038646 -0.014663 +v -0.226625 0.038646 -0.017039 +v -0.202499 0.038646 -0.014663 +v -0.179300 0.038646 -0.007626 +v -0.157920 0.038646 0.003802 +v -0.139180 0.038646 0.019182 +v -0.123800 0.038646 0.037922 +v -0.112372 0.038646 0.059302 +v -0.105335 0.038646 0.082501 +v -0.102958 0.038647 0.106627 +v -0.105335 0.038647 0.130754 +v -0.112372 0.038647 0.153953 +v -0.123800 0.038647 0.175333 +v -0.139180 0.038647 0.194073 +v -0.157920 0.038647 0.209453 +v -0.179300 0.038647 0.220881 +v -0.202499 0.038647 0.227918 +v -0.226625 0.038647 0.230294 +v -0.250751 0.038647 0.227918 +v -0.273951 0.038647 0.220881 +v -0.295331 0.038647 0.209453 +v -0.314071 0.038647 0.194073 +v -0.329450 0.038647 0.175333 +v -0.340878 0.038647 0.153952 +v -0.347916 0.038647 0.130753 +v -0.350292 -0.043853 0.106628 +v -0.347916 -0.043853 0.082501 +v -0.340878 -0.043853 0.059302 +v -0.329450 -0.043853 0.037922 +v -0.314071 -0.043853 0.019182 +v -0.295331 -0.043854 0.003803 +v -0.273950 -0.043854 -0.007625 +v -0.250751 -0.043854 -0.014663 +v -0.226625 -0.043854 -0.017039 +v -0.202499 -0.043854 -0.014663 +v -0.179300 -0.043854 -0.007625 +v -0.157920 -0.043853 0.003803 +v -0.139180 -0.043853 0.019182 +v -0.123800 -0.043853 0.037922 +v -0.112372 -0.043853 0.059303 +v -0.105335 -0.043853 0.082502 +v -0.102958 -0.043853 0.106628 +v -0.105335 -0.043853 0.130754 +v -0.112372 -0.043853 0.153953 +v -0.123800 -0.043853 0.175333 +v -0.139180 -0.043853 0.194073 +v -0.157920 -0.043853 0.209453 +v -0.179300 -0.043853 0.220881 +v -0.202499 -0.043853 0.227918 +v -0.226625 -0.043853 0.230294 +v -0.250751 -0.043853 0.227918 +v -0.273951 -0.043853 0.220881 +v -0.295331 -0.043853 0.209453 +v -0.314071 -0.043853 0.194073 +v -0.329450 -0.043853 0.175333 +v -0.340878 -0.043853 0.153953 +v -0.347916 -0.043853 0.130754 +v -0.199446 0.038646 0.065950 +v -0.199446 -0.043853 0.065951 +v -0.203723 0.044896 0.072352 +v -0.203723 -0.050103 0.072353 +v -0.275547 0.038647 0.106627 +v -0.267847 -0.050103 0.106628 +v -0.275547 -0.043853 0.106628 +v -0.267847 0.044897 0.106627 +v -0.274607 0.038647 0.116171 +v -0.267055 -0.050103 0.114670 +v -0.274607 -0.043853 0.116172 +v -0.267055 0.044897 0.114669 +v -0.271823 0.038647 0.125349 +v -0.264710 -0.050103 0.122403 +v -0.271823 -0.043853 0.125349 +v -0.264710 0.044897 0.122402 +v -0.207904 0.038647 0.151825 +v -0.207904 -0.043853 0.151825 +v -0.210850 0.044897 0.144712 +v -0.210850 -0.050103 0.144712 +v -0.199446 0.038647 0.147304 +v -0.199446 -0.043853 0.147305 +v -0.203723 0.044897 0.140902 +v -0.203723 -0.050103 0.140903 +v -0.217081 0.038647 0.154609 +v -0.217081 -0.043853 0.154609 +v -0.218583 0.044897 0.147058 +v -0.218583 -0.050103 0.147058 +v -0.192032 0.038647 0.141220 +v -0.192032 -0.043853 0.141221 +v -0.197477 0.044897 0.135776 +v -0.197477 -0.050103 0.135776 +v -0.178643 0.038647 0.116172 +v -0.178643 -0.043853 0.116172 +v -0.186195 0.044897 0.114669 +v -0.186195 -0.050103 0.114670 +v -0.177703 0.038647 0.106627 +v -0.177703 -0.043853 0.106628 +v -0.185403 0.044897 0.106627 +v -0.185403 -0.050103 0.106628 +v -0.181427 0.038647 0.125349 +v -0.181427 -0.043853 0.125349 +v -0.188541 0.044897 0.122402 +v -0.188541 -0.050103 0.122403 +v -0.236169 0.038646 0.058646 +v -0.236169 -0.043853 0.058646 +v -0.234667 0.044896 0.066197 +v -0.234667 -0.050103 0.066198 +v -0.267302 0.038646 0.079448 +v -0.267302 -0.043853 0.079448 +v -0.260900 -0.050103 0.083726 +v -0.260900 0.044896 0.083726 +v -0.226625 0.038646 0.057706 +v -0.226625 -0.043853 0.057706 +v -0.226625 0.044896 0.065405 +v -0.226625 -0.050103 0.065405 +v -0.245347 0.038646 0.061430 +v -0.245347 -0.043853 0.061430 +v -0.242400 -0.050103 0.068543 +v -0.242400 0.044896 0.068543 +v -0.178643 0.038646 0.097083 +v -0.178643 -0.043853 0.097084 +v -0.186195 0.044897 0.098585 +v -0.186195 -0.050103 0.098586 +v -0.261218 0.038647 0.141220 +v -0.255774 -0.050103 0.135776 +v -0.261218 -0.043853 0.141221 +v -0.255774 0.044897 0.135776 +v -0.267302 0.038647 0.133807 +v -0.260900 -0.050103 0.129529 +v -0.267302 -0.043853 0.133807 +v -0.260900 0.044897 0.129529 +v -0.253805 0.038647 0.147304 +v -0.249527 -0.050103 0.140903 +v -0.253805 -0.043853 0.147305 +v -0.249527 0.044897 0.140902 +v -0.217081 0.038646 0.058646 +v -0.217081 -0.043853 0.058646 +v -0.218583 0.044896 0.066197 +v -0.218583 -0.050103 0.066198 +v -0.185948 0.038646 0.079448 +v -0.185948 -0.043853 0.079448 +v -0.192350 0.044896 0.083726 +v -0.192350 -0.050103 0.083726 +v -0.192032 0.038646 0.072034 +v -0.192032 -0.043853 0.072035 +v -0.197477 0.044896 0.077479 +v -0.197477 -0.050103 0.077479 +v -0.207904 0.038646 0.061430 +v -0.207904 -0.043853 0.061430 +v -0.210850 0.044896 0.068543 +v -0.210850 -0.050103 0.068543 +v -0.226625 0.038647 0.155549 +v -0.226625 -0.043853 0.155549 +v -0.226625 -0.050103 0.147850 +v -0.226625 0.044897 0.147850 +v -0.185948 0.038647 0.133807 +v -0.185948 -0.043853 0.133807 +v -0.192350 0.044897 0.129529 +v -0.192350 -0.050103 0.129530 +v -0.236169 0.038647 0.154609 +v -0.236169 -0.043853 0.154609 +v -0.234667 -0.050103 0.147058 +v -0.234667 0.044897 0.147057 +v -0.261218 0.038646 0.072034 +v -0.261218 -0.043853 0.072035 +v -0.255774 -0.050103 0.077479 +v -0.255774 0.044896 0.077479 +v -0.181427 0.038646 0.087906 +v -0.181427 -0.043853 0.087906 +v -0.188541 0.044897 0.090852 +v -0.188541 -0.050103 0.090853 +v -0.253805 0.038646 0.065950 +v -0.253805 -0.043853 0.065951 +v -0.249527 -0.050103 0.072353 +v -0.249527 0.044896 0.072352 +v -0.245347 0.038647 0.151825 +v -0.245347 -0.043853 0.151825 +v -0.242400 -0.050103 0.144712 +v -0.242400 0.044897 0.144712 +v -0.271823 0.038646 0.087906 +v -0.271823 -0.043853 0.087906 +v -0.264710 -0.050103 0.090853 +v -0.264710 0.044897 0.090852 +v -0.274607 0.038646 0.097083 +v -0.274607 -0.043853 0.097084 +v -0.267055 -0.050103 0.098586 +v -0.267055 0.044897 0.098585 +v -0.103748 -0.208789 -0.406247 +v -0.103748 -0.208789 -0.031421 +v -0.103368 -0.206875 -0.406247 +v -0.103368 -0.206875 -0.031421 +v -0.102284 -0.205253 -0.406247 +v -0.100662 -0.204169 -0.406247 +v -0.098748 -0.203789 -0.406247 +v -0.098748 -0.203789 -0.031421 +v -0.096835 -0.204169 -0.406247 +v -0.096835 -0.204169 -0.031421 +v -0.095213 -0.205253 -0.406247 +v -0.094129 -0.206875 -0.406247 +v -0.094129 -0.206875 -0.031421 +v -0.093748 -0.208789 -0.406247 +v -0.094129 -0.210702 -0.406247 +v -0.094129 -0.210702 -0.031421 +v -0.095213 -0.212324 -0.406247 +v -0.095213 -0.212324 -0.031421 +v -0.096835 -0.213408 -0.406247 +v -0.098748 -0.213789 -0.406247 +v -0.098748 -0.213789 -0.031421 +v -0.100662 -0.213408 -0.406247 +v -0.100662 -0.213408 -0.031421 +v -0.102284 -0.212324 -0.406247 +v -0.102284 -0.212324 -0.031421 +v -0.103368 -0.210702 -0.406247 +v -0.103368 -0.210702 -0.031421 +v -0.096835 -0.213408 -0.031421 +v -0.100662 -0.204169 -0.031421 +v -0.093748 -0.208789 -0.031421 +v -0.095213 -0.205253 -0.031421 +v -0.102284 -0.205253 -0.031421 +v -0.103748 0.201210 -0.406247 +v -0.103748 0.201210 -0.031421 +v -0.103368 0.203123 -0.406247 +v -0.103368 0.203123 -0.031421 +v -0.102284 0.204745 -0.406247 +v -0.100662 0.205829 -0.406247 +v -0.098748 0.206210 -0.406247 +v -0.098748 0.206210 -0.031421 +v -0.096835 0.205829 -0.406247 +v -0.096835 0.205829 -0.031421 +v -0.095213 0.204745 -0.406247 +v -0.094129 0.203123 -0.406247 +v -0.094129 0.203123 -0.031421 +v -0.093748 0.201210 -0.406247 +v -0.094129 0.199296 -0.406247 +v -0.094129 0.199296 -0.031421 +v -0.095213 0.197674 -0.406247 +v -0.095213 0.197674 -0.031421 +v -0.096835 0.196590 -0.406247 +v -0.098748 0.196210 -0.406247 +v -0.098748 0.196210 -0.031421 +v -0.100662 0.196590 -0.406247 +v -0.100662 0.196590 -0.031421 +v -0.102284 0.197674 -0.406247 +v -0.102284 0.197674 -0.031421 +v -0.103368 0.199296 -0.406247 +v -0.103368 0.199296 -0.031421 +v -0.096835 0.196590 -0.031421 +v -0.100662 0.205829 -0.031421 +v -0.093748 0.201210 -0.031421 +v -0.095213 0.204745 -0.031421 +v -0.102284 0.204745 -0.031421 +v -0.034242 -0.000486 -0.249928 +v -0.033621 -0.001985 -0.249925 +v -0.032122 -0.002606 -0.249918 +v -0.030623 -0.001985 -0.249912 +v -0.030002 -0.000486 -0.249909 +v -0.030623 0.001013 -0.249912 +v -0.032122 0.001633 -0.249918 +v -0.033621 0.001013 -0.249925 +v -0.033543 -0.001985 -0.269918 +v -0.034164 -0.000486 -0.269918 +v -0.032044 -0.002606 -0.269918 +v -0.030545 -0.001985 -0.269918 +v -0.029924 -0.000486 -0.269918 +v -0.030545 0.001013 -0.269918 +v -0.032044 0.001633 -0.269918 +v -0.033543 0.001013 -0.269918 +v -0.034393 -0.000486 -0.229940 +v -0.033772 -0.001985 -0.229934 +v -0.032273 -0.002606 -0.229919 +v -0.030774 -0.001985 -0.229905 +v -0.030154 -0.000486 -0.229899 +v -0.030774 0.001013 -0.229905 +v -0.032273 0.001633 -0.229919 +v -0.033772 0.001013 -0.229934 +v -0.034622 -0.000486 -0.209953 +v -0.034001 -0.001985 -0.209944 +v -0.032503 -0.002606 -0.209921 +v -0.031004 -0.001985 -0.209898 +v -0.030383 -0.000486 -0.209889 +v -0.031004 0.001013 -0.209898 +v -0.032503 0.001633 -0.209921 +v -0.034001 0.001013 -0.209944 +v -0.034963 -0.000486 -0.189970 +v -0.034342 -0.001985 -0.189956 +v -0.032843 -0.002606 -0.189924 +v -0.031345 -0.001985 -0.189892 +v -0.030724 -0.000486 -0.189878 +v -0.031345 0.001013 -0.189892 +v -0.032843 0.001633 -0.189924 +v -0.034342 0.001013 -0.189956 +v -0.035448 -0.000486 -0.169992 +v -0.034828 -0.001985 -0.169974 +v -0.033329 -0.002606 -0.169930 +v -0.031831 -0.001985 -0.169887 +v -0.031210 -0.000486 -0.169869 +v -0.031831 0.001013 -0.169887 +v -0.033329 0.001633 -0.169930 +v -0.034828 0.001013 -0.169974 +v -0.036095 -0.000486 -0.150021 +v -0.035474 -0.001985 -0.149997 +v -0.033976 -0.002606 -0.149941 +v -0.032479 -0.001985 -0.149885 +v -0.031858 -0.000486 -0.149862 +v -0.032479 0.001013 -0.149885 +v -0.033976 0.001633 -0.149941 +v -0.035474 0.001013 -0.149997 +v -0.036924 -0.000486 -0.130059 +v -0.036303 -0.001985 -0.130029 +v -0.034806 -0.002606 -0.129959 +v -0.033309 -0.001985 -0.129888 +v -0.032689 -0.000486 -0.129859 +v -0.033309 0.001013 -0.129888 +v -0.034806 0.001633 -0.129959 +v -0.036303 0.001013 -0.130029 +v -0.038015 -0.000486 -0.110114 +v -0.037395 -0.001985 -0.110077 +v -0.035898 -0.002606 -0.109989 +v -0.034402 -0.001985 -0.109901 +v -0.033782 -0.000486 -0.109865 +v -0.034402 0.001013 -0.109901 +v -0.035898 0.001633 -0.109989 +v -0.037395 0.001013 -0.110077 +v -0.039314 -0.000486 -0.090185 +v -0.038695 -0.001985 -0.090140 +v -0.037199 -0.002606 -0.090033 +v -0.035704 -0.001985 -0.089926 +v -0.035085 -0.000486 -0.089882 +v -0.035704 0.001013 -0.089926 +v -0.037199 0.001633 -0.090033 +v -0.038695 0.001013 -0.090140 +v -0.040827 -0.000486 -0.070275 +v -0.040208 -0.001985 -0.070221 +v -0.038715 -0.002606 -0.070093 +v -0.037221 -0.001985 -0.069964 +v -0.036603 -0.000486 -0.069911 +v -0.037221 0.001013 -0.069964 +v -0.038715 0.001633 -0.070093 +v -0.040208 0.001013 -0.070221 +v -0.042633 -0.000486 -0.050392 +v -0.042015 -0.001985 -0.050329 +v -0.040524 -0.002606 -0.050176 +v -0.039033 -0.001985 -0.050024 +v -0.038415 -0.000486 -0.049960 +v -0.039033 0.001013 -0.050024 +v -0.040524 0.001633 -0.050176 +v -0.042015 0.001013 -0.050329 +v -0.044849 -0.000486 -0.030558 +v -0.044233 -0.001985 -0.030483 +v -0.042745 -0.002606 -0.030302 +v -0.041257 -0.001985 -0.030120 +v -0.040641 -0.000486 -0.030045 +v -0.041257 0.001013 -0.030120 +v -0.042745 0.001633 -0.030302 +v -0.044233 0.001013 -0.030483 +v -0.047421 -0.000486 -0.010773 +v -0.046807 -0.001985 -0.010685 +v -0.045323 -0.002606 -0.010471 +v -0.043839 -0.001985 -0.010258 +v -0.043225 -0.000486 -0.010170 +v -0.043839 0.001013 -0.010258 +v -0.045323 0.001633 -0.010471 +v -0.046807 0.001013 -0.010685 +v -0.050380 -0.000486 0.008953 +v -0.049768 -0.001985 0.009056 +v -0.048290 -0.002606 0.009306 +v -0.046812 -0.001985 0.009556 +v -0.046200 -0.000486 0.009660 +v -0.046812 0.001013 0.009556 +v -0.048290 0.001633 0.009306 +v -0.049768 0.001013 0.009056 +v -0.054058 -0.000486 0.028546 +v -0.053450 -0.001985 0.028668 +v -0.051980 -0.002606 0.028962 +v -0.050510 -0.001985 0.029257 +v -0.049901 -0.000486 0.029379 +v -0.050510 0.001013 0.029257 +v -0.051980 0.001633 0.028962 +v -0.053450 0.001013 0.028668 +v -0.058344 -0.000486 0.047997 +v -0.057740 -0.001985 0.048141 +v -0.056282 -0.002606 0.048488 +v -0.054823 -0.001985 0.048835 +v -0.054219 -0.000486 0.048978 +v -0.054823 0.001013 0.048835 +v -0.056282 0.001633 0.048488 +v -0.057740 0.001013 0.048141 +v -0.063235 -0.000486 0.067290 +v -0.062638 -0.001985 0.067459 +v -0.061195 -0.002606 0.067865 +v -0.059752 -0.001985 0.068272 +v -0.059155 -0.000486 0.068440 +v -0.059752 0.001013 0.068272 +v -0.061195 0.001633 0.067865 +v -0.062638 0.001013 0.067459 +v -0.068922 -0.000486 0.086354 +v -0.068334 -0.001985 0.086551 +v -0.066912 -0.002606 0.087027 +v -0.065491 -0.001985 0.087504 +v -0.064903 -0.000486 0.087701 +v -0.065491 0.001013 0.087504 +v -0.066912 0.001633 0.087027 +v -0.068334 0.001013 0.086551 +v -0.075941 -0.000486 0.104926 +v -0.075366 -0.001985 0.105160 +v -0.073977 -0.002606 0.105725 +v -0.072589 -0.001985 0.106289 +v -0.072014 -0.000486 0.106523 +v -0.072589 0.001013 0.106289 +v -0.073977 0.001633 0.105725 +v -0.075366 0.001013 0.105160 +v -0.084085 -0.000486 0.122971 +v -0.083529 -0.001985 0.123248 +v -0.082187 -0.002606 0.123915 +v -0.080845 -0.001985 0.124583 +v -0.080289 -0.000486 0.124860 +v -0.080845 0.001013 0.124583 +v -0.082187 0.001633 0.123915 +v -0.083529 0.001013 0.123248 +v -0.093432 -0.000486 0.140393 +v -0.092903 -0.001985 0.140718 +v -0.091627 -0.002606 0.141504 +v -0.090350 -0.001985 0.142290 +v -0.089821 -0.000486 0.142615 +v -0.090350 0.001013 0.142290 +v -0.091627 0.001633 0.141504 +v -0.092903 0.001013 0.140718 +v -0.104783 -0.000486 0.156517 +v -0.104295 -0.001985 0.156900 +v -0.103117 -0.002606 0.157827 +v -0.101939 -0.001985 0.158754 +v -0.101451 -0.000486 0.159138 +v -0.101939 0.001013 0.158754 +v -0.103117 0.001633 0.157827 +v -0.104295 0.001013 0.156900 +v -0.117928 -0.000486 0.171067 +v -0.117497 -0.001985 0.171514 +v -0.116456 -0.002606 0.172592 +v -0.115415 -0.001985 0.173671 +v -0.114984 -0.000486 0.174118 +v -0.115415 0.001013 0.173671 +v -0.116456 0.001633 0.172592 +v -0.117497 0.001013 0.171514 +v -0.132717 -0.000486 0.183763 +v -0.132359 -0.001985 0.184270 +v -0.131495 -0.002606 0.185495 +v -0.130631 -0.001985 0.186720 +v -0.130273 -0.000486 0.187227 +v -0.130631 0.001013 0.186720 +v -0.131495 0.001633 0.185495 +v -0.132359 0.001013 0.184270 +v -0.149473 -0.000486 0.193872 +v -0.149206 -0.001985 0.194432 +v -0.148561 -0.002606 0.195785 +v -0.147916 -0.001985 0.197139 +v -0.147649 -0.000486 0.197699 +v -0.147916 0.001013 0.197139 +v -0.148561 0.001633 0.195785 +v -0.149206 0.001013 0.194432 +v -0.167956 -0.000486 0.200212 +v -0.167786 -0.001985 0.200809 +v -0.167374 -0.002606 0.202250 +v -0.166963 -0.001985 0.203692 +v -0.166792 -0.000486 0.204289 +v -0.166963 0.001013 0.203692 +v -0.167374 0.001633 0.202250 +v -0.167786 0.001013 0.200809 +v -0.187063 -0.000486 0.204155 +v -0.186986 -0.001985 0.204771 +v -0.186801 -0.002606 0.206259 +v -0.186617 -0.001985 0.207746 +v -0.186540 -0.000486 0.208362 +v -0.186617 0.001013 0.207746 +v -0.186801 0.001633 0.206259 +v -0.186986 0.001013 0.204771 +v -0.206787 -0.000486 0.206291 +v -0.206787 -0.001985 0.206912 +v -0.206787 -0.002606 0.208411 +v -0.206787 -0.001985 0.209910 +v -0.206787 -0.000486 0.210531 +v -0.206787 0.001013 0.209910 +v -0.206787 0.001633 0.208411 +v -0.206787 0.001013 0.206912 +vt 0.030903 0.421869 +vt 0.250347 0.421794 +vt 0.250347 0.406261 +vt 0.030903 0.406334 +vt 0.251736 0.421794 +vt 0.251736 0.406260 +vt 0.265625 0.421790 +vt 0.265625 0.406256 +vt 0.031165 0.171877 +vt 0.031163 0.175256 +vt 0.015631 0.175256 +vt 0.015633 0.171877 +vt 0.031159 0.418497 +vt 0.015625 0.418497 +vt 0.031159 0.421875 +vt 0.015627 0.421875 +vt 0.265625 0.421785 +vt 0.015625 0.421869 +vt 0.015625 0.406334 +vt 0.265625 0.406250 +vt 0.031244 0.421872 +vt 0.031244 0.418494 +vt 0.015712 0.418494 +vt 0.015712 0.421872 +vt 0.265552 0.198904 +vt 0.265559 0.198904 +vt 0.015651 0.198904 +vt 0.015645 0.198904 +vt 0.031198 0.198903 +vt 0.031204 0.182011 +vt 0.015675 0.182011 +vt 0.015667 0.198903 +vt 0.144097 0.421831 +vt 0.137153 0.421834 +vt 0.137153 0.406298 +vt 0.144097 0.406296 +vt 0.031208 0.182011 +vt 0.031212 0.198903 +vt 0.015681 0.198903 +vt 0.015675 0.182011 +vt 0.119792 0.421839 +vt 0.088542 0.421850 +vt 0.088542 0.406314 +vt 0.119792 0.406304 +vt 0.031224 0.198902 +vt 0.031226 0.195524 +vt 0.015693 0.195524 +vt 0.015691 0.198902 +vt 0.031228 0.185345 +vt 0.031228 0.195524 +vt 0.015694 0.195524 +vt 0.015694 0.185345 +vt 0.085069 0.421852 +vt 0.084957 0.421852 +vt 0.084957 0.406317 +vt 0.085069 0.406317 +vt 0.084609 0.421852 +vt 0.084609 0.406317 +vt 0.084057 0.421852 +vt 0.084057 0.406317 +vt 0.083336 0.421852 +vt 0.083336 0.406317 +vt 0.082497 0.421852 +vt 0.082497 0.406318 +vt 0.081597 0.421852 +vt 0.081597 0.406318 +vt 0.080697 0.421852 +vt 0.080697 0.406318 +vt 0.079858 0.421852 +vt 0.079858 0.406318 +vt 0.079138 0.421854 +vt 0.079138 0.406318 +vt 0.078585 0.421854 +vt 0.078585 0.406319 +vt 0.078238 0.421854 +vt 0.078238 0.406319 +vt 0.078125 0.421854 +vt 0.078125 0.406319 +vt 0.031228 0.198902 +vt 0.015697 0.198902 +vt 0.031186 0.195525 +vt 0.031186 0.185346 +vt 0.015653 0.185346 +vt 0.015653 0.195525 +vt 0.156250 0.203125 +vt 0.156250 0.203125 +vt 0.140625 0.203125 +vt 0.140625 0.203125 +vt 0.031236 0.202280 +vt 0.031232 0.391468 +vt 0.015698 0.391468 +vt 0.015704 0.202280 +vt 0.031232 0.394846 +vt 0.015698 0.394846 +vt 0.053819 0.421858 +vt 0.227431 0.421799 +vt 0.227431 0.406264 +vt 0.053819 0.406322 +vt 0.031173 0.394848 +vt 0.031171 0.391469 +vt 0.015641 0.391469 +vt 0.015641 0.394848 +vt 0.031177 0.202282 +vt 0.015643 0.202282 +vt 0.031178 0.198904 +vt 0.074653 0.421854 +vt 0.053819 0.421862 +vt 0.053819 0.406326 +vt 0.074653 0.406319 +vt 0.031184 0.198904 +vt 0.203125 0.421813 +vt 0.203012 0.421813 +vt 0.203012 0.406276 +vt 0.203125 0.406276 +vt 0.202665 0.421813 +vt 0.202665 0.406276 +vt 0.202112 0.421813 +vt 0.202112 0.406276 +vt 0.201392 0.421813 +vt 0.201392 0.406276 +vt 0.200553 0.421813 +vt 0.200553 0.406277 +vt 0.199653 0.421814 +vt 0.199653 0.406277 +vt 0.198753 0.421814 +vt 0.198753 0.406277 +vt 0.197914 0.421814 +vt 0.197914 0.406277 +vt 0.197193 0.421814 +vt 0.197193 0.406277 +vt 0.196640 0.421814 +vt 0.196640 0.406279 +vt 0.196293 0.421814 +vt 0.196293 0.406279 +vt 0.196181 0.421814 +vt 0.196181 0.406279 +vt 0.031226 0.185345 +vt 0.015693 0.185345 +vt 0.031186 0.195525 +vt 0.031188 0.198903 +vt 0.015657 0.198903 +vt 0.015657 0.195525 +vt 0.031250 0.175124 +vt 0.031248 0.171875 +vt 0.015716 0.171875 +vt 0.015716 0.175124 +vt 0.192708 0.421814 +vt 0.161458 0.421824 +vt 0.161458 0.406290 +vt 0.192708 0.406280 +vt 0.015625 0.421875 +vt 0.029514 0.421870 +vt 0.029514 0.406334 +vt 0.015625 0.406340 +vt 0.031188 0.185346 +vt 0.015657 0.185346 +vt 0.225084 0.394848 +vt 0.056166 0.394846 +vt 0.052787 0.391468 +vt 0.015625 0.418494 +vt 0.019003 0.421872 +vt 0.262247 0.421875 +vt 0.265625 0.418497 +vt 0.228463 0.391469 +vt 0.137247 0.182011 +vt 0.083193 0.182005 +vt 0.033868 0.173226 +vt 0.247382 0.173229 +vt 0.198057 0.182006 +vt 0.144003 0.182011 +vt 0.265625 0.175256 +vt 0.262247 0.171877 +vt 0.248733 0.171877 +vt 0.247382 0.173229 +vt 0.225084 0.198904 +vt 0.228463 0.202282 +vt 0.137247 0.182011 +vt 0.144003 0.182011 +vt 0.198057 0.182006 +vt 0.033868 0.173226 +vt 0.083193 0.182005 +vt 0.228463 0.391469 +vt 0.228463 0.202282 +vt 0.225084 0.198904 +vt 0.248733 0.171877 +vt 0.262247 0.171877 +vt 0.265625 0.175256 +vt 0.265625 0.418497 +vt 0.201436 0.185346 +vt 0.201326 0.184514 +vt 0.200988 0.183698 +vt 0.200450 0.182997 +vt 0.199750 0.182459 +vt 0.198933 0.182121 +vt 0.204814 0.198904 +vt 0.201436 0.195525 +vt 0.080800 0.182996 +vt 0.081500 0.182458 +vt 0.082317 0.182120 +vt 0.056166 0.198902 +vt 0.076436 0.198902 +vt 0.079814 0.195524 +vt 0.079814 0.185345 +vt 0.079924 0.184513 +vt 0.080262 0.183697 +vt 0.195127 0.183698 +vt 0.194789 0.184514 +vt 0.194679 0.185346 +vt 0.194679 0.195525 +vt 0.191301 0.198903 +vt 0.160895 0.198903 +vt 0.197182 0.182121 +vt 0.196365 0.182459 +vt 0.195664 0.182997 +vt 0.076436 0.198902 +vt 0.056166 0.198902 +vt 0.082317 0.182120 +vt 0.081500 0.182458 +vt 0.080800 0.182996 +vt 0.080262 0.183697 +vt 0.079924 0.184513 +vt 0.079814 0.185345 +vt 0.079814 0.195524 +vt 0.191301 0.198903 +vt 0.194679 0.195525 +vt 0.194679 0.185346 +vt 0.194789 0.184514 +vt 0.195127 0.183698 +vt 0.195664 0.182997 +vt 0.196365 0.182459 +vt 0.197182 0.182121 +vt 0.160895 0.198903 +vt 0.052787 0.391468 +vt 0.056166 0.394846 +vt 0.225084 0.394848 +vt 0.262247 0.421875 +vt 0.019003 0.421872 +vt 0.015625 0.418494 +vt 0.052787 0.202280 +vt 0.015625 0.175124 +vt 0.019003 0.171875 +vt 0.032517 0.171875 +vt 0.019003 0.171875 +vt 0.015625 0.175124 +vt 0.052787 0.202280 +vt 0.032517 0.171875 +vt 0.086123 0.183697 +vt 0.086461 0.184513 +vt 0.086571 0.185345 +vt 0.086571 0.195524 +vt 0.089949 0.198902 +vt 0.120355 0.198903 +vt 0.084068 0.182120 +vt 0.084885 0.182458 +vt 0.085586 0.182996 +vt 0.198933 0.182121 +vt 0.199750 0.182459 +vt 0.200450 0.182997 +vt 0.200988 0.183698 +vt 0.201326 0.184514 +vt 0.201436 0.185346 +vt 0.201436 0.195525 +vt 0.204814 0.198904 +vt 0.084885 0.182458 +vt 0.084068 0.182120 +vt 0.120355 0.198903 +vt 0.089949 0.198902 +vt 0.086571 0.195524 +vt 0.086571 0.185345 +vt 0.086461 0.184513 +vt 0.086123 0.183697 +vt 0.085586 0.182996 +vt 0.478523 0.252502 +vt 0.478523 0.312500 +vt 0.458012 0.312500 +vt 0.458012 0.252502 +vt 0.338421 0.337090 +vt 0.338421 0.375000 +vt 0.312500 0.375000 +vt 0.312500 0.337090 +vt 0.312500 0.274590 +vt 0.312500 0.312500 +vt 0.338421 0.312500 +vt 0.338421 0.274590 +vt 0.458011 0.252502 +vt 0.458011 0.267531 +vt 0.437500 0.267531 +vt 0.437500 0.252502 +vt 0.338421 0.237040 +vt 0.370821 0.237039 +vt 0.370821 0.224079 +vt 0.312500 0.224079 +vt 0.312500 0.250000 +vt 0.338421 0.250000 +vt 0.375000 0.346512 +vt 0.407869 0.346512 +vt 0.407869 0.360756 +vt 0.403488 0.360756 +vt 0.403488 0.375000 +vt 0.375000 0.375000 +vt 0.338421 0.274590 +vt 0.338421 0.312500 +vt 0.342407 0.312500 +vt 0.342407 0.284086 +vt 0.370821 0.284086 +vt 0.370821 0.274590 +vt 0.312500 0.274590 +vt 0.370821 0.274590 +vt 0.370821 0.284086 +vt 0.342407 0.284086 +vt 0.342407 0.312500 +vt 0.312500 0.312500 +vt 0.437500 0.267531 +vt 0.458012 0.267531 +vt 0.458012 0.312500 +vt 0.437500 0.312500 +vt 0.407869 0.360756 +vt 0.407869 0.346512 +vt 0.439098 0.346512 +vt 0.439098 0.360756 +vt 0.437500 0.343408 +vt 0.437500 0.375000 +vt 0.448300 0.375000 +vt 0.448300 0.343408 +vt 0.464180 0.343408 +vt 0.464180 0.375000 +vt 0.496581 0.375000 +vt 0.496581 0.343408 +vt 0.448300 0.343408 +vt 0.448300 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.343408 +vt 0.496581 0.343408 +vt 0.496581 0.375000 +vt 0.464180 0.375000 +vt 0.464180 0.343408 +vt 0.464180 0.341737 +vt 0.496581 0.341737 +vt 0.496581 0.330937 +vt 0.464180 0.330937 +vt 0.496581 0.341737 +vt 0.464180 0.341737 +vt 0.464180 0.330937 +vt 0.496581 0.330937 +vt 0.451644 0.337090 +vt 0.451644 0.375000 +vt 0.425724 0.375000 +vt 0.425724 0.337090 +vt 0.375000 0.337090 +vt 0.375000 0.375000 +vt 0.400921 0.375000 +vt 0.400921 0.337090 +vt 0.425724 0.337090 +vt 0.425724 0.375000 +vt 0.451644 0.375000 +vt 0.451644 0.337090 +vt 0.400921 0.337090 +vt 0.400921 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.337090 +vt 0.425724 0.313785 +vt 0.425724 0.339705 +vt 0.451644 0.339705 +vt 0.451644 0.313784 +vt 0.425724 0.339705 +vt 0.425724 0.313785 +vt 0.451644 0.313784 +vt 0.451644 0.339705 +vt 0.394804 0.394044 +vt 0.417696 0.394044 +vt 0.417696 0.418456 +vt 0.394804 0.418456 +vt 0.390625 0.328125 +vt 0.390625 0.387424 +vt 0.359375 0.387424 +vt 0.359375 0.328125 +vt 0.328125 0.328125 +vt 0.328125 0.387424 +vt 0.296875 0.387424 +vt 0.296875 0.328125 +vt 0.328125 0.296875 +vt 0.359375 0.296875 +vt 0.421875 0.328125 +vt 0.421875 0.387424 +vt 0.421875 0.390625 +vt 0.421875 0.421875 +vt 0.390625 0.421875 +vt 0.390625 0.390625 +vt 0.437500 0.312500 +vt 0.448300 0.312500 +vt 0.448300 0.288739 +vt 0.437500 0.288739 +vt 0.495227 0.239883 +vt 0.518988 0.239883 +vt 0.518988 0.229083 +vt 0.495227 0.229083 +vt 0.518988 0.288739 +vt 0.518988 0.312500 +vt 0.495227 0.312500 +vt 0.495227 0.288739 +vt 0.495227 0.229083 +vt 0.518988 0.229083 +vt 0.518988 0.239883 +vt 0.495227 0.239883 +vt 0.448300 0.312500 +vt 0.437500 0.312500 +vt 0.437500 0.288739 +vt 0.448300 0.288739 +vt 0.475637 0.181108 +vt 0.475637 0.240509 +vt 0.486437 0.240509 +vt 0.486437 0.181108 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.486437 0.181108 +vt 0.486437 0.240509 +vt 0.475637 0.240509 +vt 0.475637 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.486437 0.181108 +vt 0.486437 0.240509 +vt 0.475637 0.240509 +vt 0.475637 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.475637 0.181108 +vt 0.475637 0.240509 +vt 0.486437 0.240509 +vt 0.486437 0.181108 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.578126 0.453125 +vt 0.578126 0.703124 +vt 0.828125 0.703124 +vt 0.828125 0.453125 +vt 0.671875 0.453125 +vt 0.671875 0.703124 +vt 0.734375 0.703125 +vt 0.734375 0.453126 +vt 0.828124 0.453126 +vt 0.828124 0.703125 +vt 0.578125 0.703125 +vt 0.578125 0.453126 +vt 0.734375 0.453126 +vt 0.734375 0.703125 +vt 0.671875 0.703124 +vt 0.671875 0.453125 +vt 0.578125 0.453125 +vt 0.578125 0.578125 +vt 0.828125 0.578125 +vt 0.578125 0.578125 +vt 0.828125 0.578125 +vt 0.828125 0.703125 +vt 0.162500 0.766132 +vt 0.162500 0.760997 +vt 0.157857 0.757618 +vt 0.092850 0.757618 +vt 0.091792 0.757517 +vt 0.090807 0.757220 +vt 0.089961 0.756747 +vt 0.089311 0.756132 +vt 0.088903 0.755415 +vt 0.088764 0.754645 +vt 0.088903 0.753876 +vt 0.089311 0.753159 +vt 0.062500 0.735726 +vt 0.062500 0.984375 +vt 0.086238 0.984375 +vt 0.015627 0.752543 +vt 0.015627 0.753159 +vt 0.031250 0.753159 +vt 0.031250 0.752543 +vt 0.149893 0.937500 +vt 0.125000 0.937500 +vt 0.125000 0.921875 +vt 0.149893 0.921875 +vt 0.125000 0.937499 +vt 0.203574 0.937498 +vt 0.203574 0.921875 +vt 0.125000 0.921875 +vt 0.205522 0.937498 +vt 0.225000 0.937498 +vt 0.225000 0.921875 +vt 0.205522 0.921875 +vt 0.015627 0.737753 +vt 0.015627 0.748294 +vt 0.031250 0.748294 +vt 0.031250 0.737753 +vt 0.015627 0.751672 +vt 0.031250 0.751672 +vt 0.225000 0.937498 +vt 0.156828 0.937499 +vt 0.156828 0.921875 +vt 0.225000 0.921875 +vt 0.015627 0.751672 +vt 0.015627 0.751774 +vt 0.031250 0.751774 +vt 0.031250 0.751672 +vt 0.015627 0.753876 +vt 0.015627 0.754645 +vt 0.031250 0.754645 +vt 0.031250 0.753876 +vt 0.156828 0.937499 +vt 0.225000 0.937498 +vt 0.225000 0.921875 +vt 0.156828 0.921875 +vt 0.015627 0.755415 +vt 0.031250 0.755415 +vt 0.015627 0.756132 +vt 0.031250 0.756132 +vt 0.015627 0.756747 +vt 0.031250 0.756747 +vt 0.015627 0.757220 +vt 0.031250 0.757220 +vt 0.015627 0.757517 +vt 0.031250 0.757517 +vt 0.015627 0.757618 +vt 0.031250 0.757618 +vt 0.015627 0.757618 +vt 0.015627 0.760997 +vt 0.031250 0.760997 +vt 0.031250 0.757618 +vt 0.015627 0.766132 +vt 0.031250 0.766132 +vt 0.015625 0.984375 +vt 0.031250 0.984375 +vt 0.015627 0.734375 +vt 0.031250 0.734375 +vt 0.015627 0.752071 +vt 0.031250 0.752071 +vt 0.091792 0.751774 +vt 0.090807 0.752071 +vt 0.089961 0.752543 +vt 0.089311 0.753159 +vt 0.062500 0.735726 +vt 0.137426 0.735726 +vt 0.157857 0.751672 +vt 0.092850 0.751672 +vt 0.137426 0.735726 +vt 0.089961 0.752543 +vt 0.090807 0.752071 +vt 0.091792 0.751774 +vt 0.092850 0.751672 +vt 0.157857 0.751672 +vt 0.162500 0.748294 +vt 0.139283 0.734375 +vt 0.157857 0.734375 +vt 0.162500 0.737753 +vt 0.157857 0.734375 +vt 0.139283 0.734375 +vt 0.162500 0.748294 +vt 0.162500 0.737753 +vt 0.088903 0.753876 +vt 0.088764 0.754645 +vt 0.088903 0.755415 +vt 0.089311 0.756132 +vt 0.089961 0.756747 +vt 0.090807 0.757220 +vt 0.091792 0.757517 +vt 0.092850 0.757618 +vt 0.157857 0.757618 +vt 0.162500 0.760997 +vt 0.162500 0.766132 +vt 0.086238 0.984375 +vt 0.062500 0.984375 +vt 0.755979 0.545686 +vt 0.750000 0.546875 +vt 0.744021 0.545686 +vt 0.738952 0.542298 +vt 0.735564 0.537229 +vt 0.734375 0.531250 +vt 0.735564 0.525271 +vt 0.738952 0.520201 +vt 0.744021 0.516814 +vt 0.750000 0.515625 +vt 0.755979 0.516814 +vt 0.761049 0.520201 +vt 0.764436 0.525270 +vt 0.765625 0.531250 +vt 0.764436 0.537229 +vt 0.761049 0.542298 +vt 0.750000 0.546875 +vt 0.755979 0.545686 +vt 0.761049 0.542298 +vt 0.764436 0.537229 +vt 0.765625 0.531250 +vt 0.764436 0.525270 +vt 0.761049 0.520201 +vt 0.755979 0.516814 +vt 0.750000 0.515625 +vt 0.744021 0.516814 +vt 0.738952 0.520201 +vt 0.735564 0.525271 +vt 0.734375 0.531250 +vt 0.735564 0.537229 +vt 0.738952 0.542298 +vt 0.744021 0.545686 +vt 0.718750 0.984375 +vt 0.718750 0.859375 +vt 0.734375 0.859375 +vt 0.734375 0.984375 +vt 0.703125 0.984375 +vt 0.578125 0.984375 +vt 0.578125 0.859375 +vt 0.703125 0.859375 +vt 0.718750 0.859375 +vt 0.718750 0.984375 +vt 0.734375 0.984375 +vt 0.734375 0.859375 +vt 0.578125 0.828125 +vt 0.703125 0.828125 +vt 0.703125 0.843750 +vt 0.578125 0.843750 +vt 0.703125 0.828125 +vt 0.578125 0.828125 +vt 0.578125 0.843750 +vt 0.703125 0.843750 +vt 0.406250 0.375000 +vt 0.397097 0.375000 +vt 0.384153 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.354120 +vt 0.377349 0.349406 +vt 0.381804 0.345702 +vt 0.387474 0.343750 +vt 0.393776 0.343750 +vt 0.399446 0.345702 +vt 0.403901 0.349407 +vt 0.406250 0.354120 +vt 0.443972 0.375000 +vt 0.453125 0.375000 +vt 0.453125 0.354120 +vt 0.450777 0.349407 +vt 0.446321 0.345702 +vt 0.440651 0.343750 +vt 0.434349 0.343750 +vt 0.428679 0.345702 +vt 0.424224 0.349406 +vt 0.421875 0.354120 +vt 0.421875 0.375000 +vt 0.431028 0.375000 +vt 0.249991 0.781257 +vt 0.247613 0.793214 +vt 0.240840 0.803349 +vt 0.230703 0.810122 +vt 0.218745 0.812500 +vt 0.206789 0.810122 +vt 0.196652 0.803349 +vt 0.189879 0.793214 +vt 0.187500 0.781257 +vt 0.189879 0.769301 +vt 0.196652 0.759165 +vt 0.206789 0.752393 +vt 0.218746 0.750015 +vt 0.230703 0.752393 +vt 0.240840 0.759165 +vt 0.247613 0.769301 +vt 0.247613 0.793213 +vt 0.249991 0.781257 +vt 0.247613 0.769301 +vt 0.240840 0.759165 +vt 0.230703 0.752393 +vt 0.218746 0.750015 +vt 0.206789 0.752393 +vt 0.196652 0.759165 +vt 0.189879 0.769301 +vt 0.187500 0.781257 +vt 0.189879 0.793213 +vt 0.196652 0.803349 +vt 0.206789 0.810122 +vt 0.218746 0.812500 +vt 0.230703 0.810122 +vt 0.240840 0.803349 +vt 0.249991 0.781257 +vt 0.247613 0.793213 +vt 0.240840 0.803349 +vt 0.230703 0.810122 +vt 0.218745 0.812500 +vt 0.206789 0.810122 +vt 0.196652 0.803349 +vt 0.189879 0.793213 +vt 0.187500 0.781257 +vt 0.189879 0.769301 +vt 0.196652 0.759165 +vt 0.206789 0.752393 +vt 0.218746 0.750015 +vt 0.230703 0.752393 +vt 0.240840 0.759165 +vt 0.247613 0.769301 +vt 0.247613 0.793213 +vt 0.249991 0.781257 +vt 0.247613 0.769301 +vt 0.240840 0.759165 +vt 0.230703 0.752393 +vt 0.218746 0.750015 +vt 0.206789 0.752393 +vt 0.196652 0.759165 +vt 0.189879 0.769301 +vt 0.187500 0.781257 +vt 0.189879 0.793213 +vt 0.196652 0.803349 +vt 0.206789 0.810122 +vt 0.218746 0.812500 +vt 0.230703 0.810122 +vt 0.240840 0.803349 +vt 0.495440 0.338788 +vt 0.495440 0.362148 +vt 0.485749 0.362148 +vt 0.485749 0.338788 +vt 0.474060 0.331914 +vt 0.485749 0.343893 +vt 0.485749 0.346372 +vt 0.482927 0.349263 +vt 0.478897 0.349263 +vt 0.472850 0.343067 +vt 0.474870 0.340998 +vt 0.466002 0.331910 +vt 0.482121 0.315392 +vt 0.479300 0.312500 +vt 0.483330 0.312500 +vt 0.485749 0.314978 +vt 0.485749 0.319935 +vt 0.487459 0.337035 +vt 0.487459 0.327980 +vt 0.494015 0.321263 +vt 0.494300 0.321263 +vt 0.494300 0.312500 +vt 0.497150 0.312500 +vt 0.497150 0.337035 +vt 0.464701 0.360986 +vt 0.464701 0.351055 +vt 0.465271 0.350471 +vt 0.465271 0.363907 +vt 0.461851 0.363907 +vt 0.461851 0.360986 +vt 0.482818 0.363283 +vt 0.485668 0.366204 +vt 0.476833 0.366204 +vt 0.475123 0.364451 +vt 0.475123 0.363283 +vt 0.497150 0.338788 +vt 0.485749 0.338788 +vt 0.498290 0.338788 +vt 0.498290 0.342292 +vt 0.495440 0.342293 +vt 0.495440 0.338788 +vt 0.498290 0.359233 +vt 0.495440 0.359233 +vt 0.475123 0.353936 +vt 0.479683 0.353936 +vt 0.479683 0.363283 +vt 0.479683 0.349263 +vt 0.475123 0.349263 +vt 0.461286 0.363907 +vt 0.464136 0.363907 +vt 0.464136 0.366828 +vt 0.461286 0.366828 +vt 0.460710 0.360986 +vt 0.460710 0.351055 +vt 0.461286 0.370917 +vt 0.458436 0.373838 +vt 0.458430 0.373838 +vt 0.458430 0.364199 +vt 0.461286 0.364199 +vt 0.461286 0.372669 +vt 0.461286 0.370917 +vt 0.464136 0.370917 +vt 0.464136 0.372669 +vt 0.458430 0.363907 +vt 0.461286 0.363907 +vt 0.465271 0.365075 +vt 0.465271 0.341714 +vt 0.465271 0.341708 +vt 0.458430 0.363907 +vt 0.458430 0.360986 +vt 0.500000 0.329441 +vt 0.497150 0.329441 +vt 0.497150 0.312500 +vt 0.500000 0.312500 +vt 0.479683 0.363277 +vt 0.482818 0.363277 +vt 0.466002 0.358610 +vt 0.475123 0.349263 +vt 0.475123 0.372630 +vt 0.466002 0.363283 +vt 0.485749 0.365361 +vt 0.485749 0.362148 +vt 0.495440 0.362148 +vt 0.495440 0.375000 +vt 0.495155 0.375000 +vt 0.466002 0.315421 +vt 0.466002 0.319510 +vt 0.464292 0.321263 +vt 0.447761 0.321263 +vt 0.447761 0.338203 +vt 0.444340 0.341708 +vt 0.440920 0.341708 +vt 0.437500 0.338203 +vt 0.437500 0.314253 +vt 0.439210 0.312500 +vt 0.463152 0.312500 +vt 0.460711 0.341708 +vt 0.465271 0.341708 +vt 0.412990 0.284722 +vt 0.411772 0.284722 +vt 0.411772 0.277006 +vt 0.414988 0.280093 +vt 0.394467 0.250000 +vt 0.398687 0.253574 +vt 0.398900 0.256841 +vt 0.384537 0.272462 +vt 0.398403 0.284204 +vt 0.398900 0.291828 +vt 0.397765 0.291896 +vt 0.377267 0.274538 +vt 0.375000 0.265342 +vt 0.388793 0.250340 +vt 0.379023 0.291898 +vt 0.383051 0.291896 +vt 0.383051 0.296919 +vt 0.379023 0.296921 +vt 0.375003 0.299613 +vt 0.375000 0.297297 +vt 0.379020 0.297299 +vt 0.379023 0.299615 +vt 0.431872 0.300154 +vt 0.427852 0.300154 +vt 0.427852 0.279321 +vt 0.431872 0.279321 +vt 0.437500 0.253858 +vt 0.433480 0.253858 +vt 0.433480 0.250000 +vt 0.437500 0.250000 +vt 0.427852 0.273148 +vt 0.427852 0.261188 +vt 0.433078 0.256173 +vt 0.433480 0.256173 +vt 0.437500 0.273865 +vt 0.436282 0.274691 +vt 0.426244 0.274691 +vt 0.408556 0.296685 +vt 0.404528 0.296685 +vt 0.404528 0.284726 +vt 0.408556 0.284726 +vt 0.411772 0.250000 +vt 0.424636 0.250000 +vt 0.424636 0.250772 +vt 0.411772 0.250772 +vt 0.408628 0.279398 +vt 0.411768 0.282409 +vt 0.411772 0.284726 +vt 0.398908 0.284724 +vt 0.398900 0.279320 +vt 0.408551 0.253866 +vt 0.408551 0.250000 +vt 0.410162 0.250001 +vt 0.411772 0.251545 +vt 0.383051 0.297305 +vt 0.379023 0.297307 +vt 0.375003 0.291896 +vt 0.379023 0.291898 +vt 0.424636 0.279321 +vt 0.427852 0.282407 +vt 0.427852 0.311728 +vt 0.427048 0.312500 +vt 0.424636 0.310185 +vt 0.404528 0.289741 +vt 0.404528 0.301701 +vt 0.398900 0.301701 +vt 0.398900 0.284726 +vt 0.399302 0.284726 +vt 0.434284 0.279321 +vt 0.424636 0.279321 +vt 0.424636 0.276235 +vt 0.398902 0.261573 +vt 0.402922 0.261573 +vt 0.402923 0.253865 +vt 0.423832 0.284722 +vt 0.423832 0.305556 +vt 0.421420 0.307870 +vt 0.415792 0.307870 +vt 0.411772 0.304012 +vt 0.411772 0.301697 +vt 0.415800 0.301697 +vt 0.415800 0.284722 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.249991 0.781257 +vt 0.247613 0.793213 +vt 0.240839 0.803349 +vt 0.230703 0.810122 +vt 0.218745 0.812500 +vt 0.206789 0.810122 +vt 0.196652 0.803349 +vt 0.189879 0.793213 +vt 0.187500 0.781257 +vt 0.189879 0.769301 +vt 0.196652 0.759165 +vt 0.206789 0.752393 +vt 0.218746 0.750015 +vt 0.230703 0.752393 +vt 0.240839 0.759165 +vt 0.247613 0.769301 +vt 0.247613 0.793213 +vt 0.249991 0.781257 +vt 0.247613 0.769301 +vt 0.240840 0.759165 +vt 0.230703 0.752393 +vt 0.218746 0.750015 +vt 0.206789 0.752393 +vt 0.196652 0.759165 +vt 0.189879 0.769301 +vt 0.187500 0.781257 +vt 0.189879 0.793213 +vt 0.196652 0.803349 +vt 0.206789 0.810122 +vt 0.218746 0.812500 +vt 0.230703 0.810122 +vt 0.240840 0.803349 +vt 0.521365 0.347801 +vt 0.521365 0.320023 +vt 0.546875 0.320023 +vt 0.546875 0.347801 +vt 0.347895 0.394097 +vt 0.322385 0.394097 +vt 0.322385 0.320023 +vt 0.347895 0.320023 +vt 0.373406 0.320023 +vt 0.398916 0.320023 +vt 0.398916 0.394097 +vt 0.373406 0.394097 +vt 0.347895 0.394097 +vt 0.347895 0.320023 +vt 0.373406 0.320023 +vt 0.373406 0.394097 +vt 0.322385 0.320023 +vt 0.322385 0.421875 +vt 0.296875 0.421875 +vt 0.296875 0.320023 +vt 0.546875 0.320023 +vt 0.521365 0.320023 +vt 0.521365 0.171875 +vt 0.546875 0.171875 +vt 0.409120 0.320023 +vt 0.409120 0.171875 +vt 0.439732 0.245949 +vt 0.439732 0.320023 +vt 0.521365 0.171875 +vt 0.521365 0.245949 +vt 0.409120 0.320023 +vt 0.296875 0.320023 +vt 0.327487 0.245949 +vt 0.409120 0.245949 +vt 0.296875 0.171875 +vt 0.327487 0.171875 +vt 0.249991 0.781257 +vt 0.247613 0.793214 +vt 0.240840 0.803349 +vt 0.230703 0.810122 +vt 0.218745 0.812500 +vt 0.206789 0.810122 +vt 0.196652 0.803349 +vt 0.189879 0.793214 +vt 0.187500 0.781257 +vt 0.189879 0.769301 +vt 0.196652 0.759165 +vt 0.206789 0.752393 +vt 0.218746 0.750015 +vt 0.230703 0.752393 +vt 0.240840 0.759165 +vt 0.247613 0.769301 +vt 0.247613 0.793213 +vt 0.249991 0.781257 +vt 0.247613 0.769301 +vt 0.240840 0.759165 +vt 0.230703 0.752393 +vt 0.218746 0.750015 +vt 0.206789 0.752393 +vt 0.196652 0.759165 +vt 0.189879 0.769301 +vt 0.187500 0.781257 +vt 0.189879 0.793213 +vt 0.196652 0.803349 +vt 0.206789 0.810122 +vt 0.218746 0.812500 +vt 0.230703 0.810122 +vt 0.240840 0.803349 +vt 0.249991 0.781257 +vt 0.247613 0.793214 +vt 0.240840 0.803349 +vt 0.230703 0.810122 +vt 0.218745 0.812500 +vt 0.206789 0.810122 +vt 0.196652 0.803349 +vt 0.189879 0.793214 +vt 0.187500 0.781257 +vt 0.189879 0.769301 +vt 0.196652 0.759165 +vt 0.206789 0.752393 +vt 0.218746 0.750015 +vt 0.230703 0.752393 +vt 0.240840 0.759165 +vt 0.247613 0.769301 +vt 0.247613 0.793213 +vt 0.249991 0.781257 +vt 0.247613 0.769301 +vt 0.240840 0.759165 +vt 0.230703 0.752393 +vt 0.218746 0.750015 +vt 0.206789 0.752393 +vt 0.196652 0.759165 +vt 0.189879 0.769301 +vt 0.187500 0.781257 +vt 0.189879 0.793213 +vt 0.196652 0.803349 +vt 0.206789 0.810122 +vt 0.218746 0.812500 +vt 0.230703 0.810122 +vt 0.240840 0.803349 +vt 0.394804 0.394044 +vt 0.417696 0.394044 +vt 0.417696 0.418456 +vt 0.394804 0.418456 +vt 0.390625 0.328125 +vt 0.390625 0.387424 +vt 0.359375 0.387424 +vt 0.359375 0.328125 +vt 0.328125 0.328125 +vt 0.328125 0.387424 +vt 0.296875 0.387424 +vt 0.296875 0.328125 +vt 0.328125 0.296875 +vt 0.359375 0.296875 +vt 0.421875 0.328125 +vt 0.421875 0.387424 +vt 0.421875 0.390625 +vt 0.421875 0.421875 +vt 0.390625 0.421875 +vt 0.390625 0.390625 +vt 0.394804 0.394044 +vt 0.417696 0.394044 +vt 0.417696 0.418456 +vt 0.394804 0.418456 +vt 0.390625 0.328125 +vt 0.390625 0.387424 +vt 0.359375 0.387424 +vt 0.359375 0.328125 +vt 0.328125 0.328125 +vt 0.328125 0.387424 +vt 0.296875 0.387424 +vt 0.296875 0.328125 +vt 0.328125 0.296875 +vt 0.359375 0.296875 +vt 0.421875 0.328125 +vt 0.421875 0.387424 +vt 0.421875 0.390625 +vt 0.421875 0.421875 +vt 0.390625 0.421875 +vt 0.390625 0.390625 +vt 0.394804 0.394044 +vt 0.417696 0.394044 +vt 0.417696 0.418456 +vt 0.394804 0.418456 +vt 0.390625 0.328125 +vt 0.390625 0.387424 +vt 0.359375 0.387424 +vt 0.359375 0.328125 +vt 0.328125 0.328125 +vt 0.328125 0.387424 +vt 0.296875 0.387424 +vt 0.296875 0.328125 +vt 0.328125 0.296875 +vt 0.359375 0.296875 +vt 0.421875 0.328125 +vt 0.421875 0.387424 +vt 0.421875 0.390625 +vt 0.421875 0.421875 +vt 0.390625 0.421875 +vt 0.390625 0.390625 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.755979 0.545686 +vt 0.750000 0.546875 +vt 0.744021 0.545686 +vt 0.738952 0.542298 +vt 0.735564 0.537229 +vt 0.734375 0.531250 +vt 0.735564 0.525271 +vt 0.738952 0.520201 +vt 0.744021 0.516814 +vt 0.750000 0.515625 +vt 0.755979 0.516814 +vt 0.761049 0.520201 +vt 0.764436 0.525270 +vt 0.765625 0.531250 +vt 0.764436 0.537229 +vt 0.761049 0.542298 +vt 0.750000 0.546875 +vt 0.755979 0.545686 +vt 0.761049 0.542298 +vt 0.764436 0.537229 +vt 0.765625 0.531250 +vt 0.764436 0.525270 +vt 0.761049 0.520201 +vt 0.755979 0.516814 +vt 0.750000 0.515625 +vt 0.744021 0.516814 +vt 0.738952 0.520201 +vt 0.735564 0.525271 +vt 0.734375 0.531250 +vt 0.735564 0.537229 +vt 0.738952 0.542298 +vt 0.744021 0.545686 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.406250 0.375000 +vt 0.397097 0.375000 +vt 0.384153 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.354120 +vt 0.377349 0.349406 +vt 0.381804 0.345702 +vt 0.387474 0.343750 +vt 0.393776 0.343750 +vt 0.399446 0.345702 +vt 0.403901 0.349407 +vt 0.406250 0.354120 +vt 0.443972 0.375000 +vt 0.453125 0.375000 +vt 0.453125 0.354120 +vt 0.450777 0.349407 +vt 0.446321 0.345702 +vt 0.440651 0.343750 +vt 0.434349 0.343750 +vt 0.428679 0.345702 +vt 0.424224 0.349406 +vt 0.421875 0.354120 +vt 0.421875 0.375000 +vt 0.431028 0.375000 +vt 0.412990 0.347222 +vt 0.411772 0.347222 +vt 0.411772 0.339506 +vt 0.414988 0.342593 +vt 0.394467 0.312500 +vt 0.398687 0.316074 +vt 0.398900 0.319341 +vt 0.384537 0.334962 +vt 0.398403 0.346704 +vt 0.398900 0.354328 +vt 0.397765 0.354396 +vt 0.377267 0.337039 +vt 0.375000 0.327842 +vt 0.388793 0.312840 +vt 0.379023 0.354398 +vt 0.383051 0.354396 +vt 0.383051 0.359419 +vt 0.379023 0.359421 +vt 0.375003 0.362113 +vt 0.375000 0.359797 +vt 0.379020 0.359799 +vt 0.379023 0.362115 +vt 0.431872 0.362654 +vt 0.427852 0.362654 +vt 0.427852 0.341821 +vt 0.431872 0.341821 +vt 0.437500 0.316358 +vt 0.433480 0.316358 +vt 0.433480 0.312500 +vt 0.437500 0.312500 +vt 0.427852 0.335648 +vt 0.427852 0.323688 +vt 0.433078 0.318673 +vt 0.433480 0.318673 +vt 0.437500 0.336365 +vt 0.436282 0.337191 +vt 0.426244 0.337191 +vt 0.408556 0.359185 +vt 0.404528 0.359185 +vt 0.404528 0.347226 +vt 0.408556 0.347226 +vt 0.411772 0.312500 +vt 0.424636 0.312500 +vt 0.424636 0.313272 +vt 0.411772 0.313272 +vt 0.408628 0.341898 +vt 0.411768 0.344909 +vt 0.411772 0.347226 +vt 0.398908 0.347224 +vt 0.398900 0.341820 +vt 0.408551 0.316366 +vt 0.408551 0.312500 +vt 0.410162 0.312501 +vt 0.411772 0.314045 +vt 0.383051 0.359805 +vt 0.379023 0.359807 +vt 0.375003 0.354396 +vt 0.379023 0.354398 +vt 0.424636 0.341821 +vt 0.427852 0.344907 +vt 0.427852 0.374228 +vt 0.427048 0.375000 +vt 0.424636 0.372685 +vt 0.404528 0.352241 +vt 0.404528 0.364201 +vt 0.398900 0.364201 +vt 0.398900 0.347226 +vt 0.399302 0.347226 +vt 0.434284 0.341821 +vt 0.424636 0.341821 +vt 0.424636 0.338735 +vt 0.398902 0.324073 +vt 0.402922 0.324074 +vt 0.402923 0.316365 +vt 0.423832 0.347222 +vt 0.423832 0.368056 +vt 0.421420 0.370370 +vt 0.415792 0.370370 +vt 0.411772 0.366512 +vt 0.411772 0.364197 +vt 0.415800 0.364197 +vt 0.415800 0.347222 +vt 0.370440 0.338787 +vt 0.370440 0.362148 +vt 0.360749 0.362148 +vt 0.360749 0.338787 +vt 0.349060 0.331914 +vt 0.360749 0.343893 +vt 0.360749 0.346371 +vt 0.357927 0.349263 +vt 0.353897 0.349263 +vt 0.347850 0.343067 +vt 0.349870 0.340997 +vt 0.341002 0.331910 +vt 0.357121 0.315391 +vt 0.354300 0.312500 +vt 0.358330 0.312500 +vt 0.360749 0.314978 +vt 0.360749 0.319935 +vt 0.362459 0.337035 +vt 0.362459 0.327980 +vt 0.369015 0.321262 +vt 0.369300 0.321262 +vt 0.369300 0.312500 +vt 0.372150 0.312500 +vt 0.372150 0.337035 +vt 0.339701 0.360986 +vt 0.339701 0.351055 +vt 0.340271 0.350471 +vt 0.340271 0.363907 +vt 0.336851 0.363907 +vt 0.336851 0.360986 +vt 0.357818 0.363283 +vt 0.360668 0.366204 +vt 0.351833 0.366204 +vt 0.350123 0.364451 +vt 0.350123 0.363283 +vt 0.372150 0.338787 +vt 0.360749 0.338787 +vt 0.373290 0.338787 +vt 0.373290 0.342292 +vt 0.370440 0.342292 +vt 0.370440 0.338787 +vt 0.373290 0.359233 +vt 0.370440 0.359233 +vt 0.350123 0.353936 +vt 0.354683 0.353936 +vt 0.354683 0.363283 +vt 0.354683 0.349263 +vt 0.350123 0.349263 +vt 0.336286 0.363907 +vt 0.339136 0.363907 +vt 0.339136 0.366828 +vt 0.336286 0.366828 +vt 0.335710 0.360986 +vt 0.335710 0.351055 +vt 0.336286 0.370917 +vt 0.333436 0.373838 +vt 0.333430 0.373838 +vt 0.333430 0.364199 +vt 0.336286 0.364199 +vt 0.336286 0.372669 +vt 0.336286 0.370917 +vt 0.339136 0.370917 +vt 0.339136 0.372669 +vt 0.333430 0.363907 +vt 0.336286 0.363907 +vt 0.340271 0.365075 +vt 0.340271 0.341714 +vt 0.340271 0.341708 +vt 0.333430 0.363907 +vt 0.333430 0.360986 +vt 0.375000 0.329441 +vt 0.372150 0.329441 +vt 0.372150 0.312500 +vt 0.375000 0.312500 +vt 0.354683 0.363277 +vt 0.357818 0.363277 +vt 0.341002 0.358610 +vt 0.350123 0.349263 +vt 0.350123 0.372630 +vt 0.341002 0.363283 +vt 0.360749 0.365361 +vt 0.360749 0.362148 +vt 0.370440 0.362148 +vt 0.370440 0.375000 +vt 0.370155 0.375000 +vt 0.341002 0.315421 +vt 0.341002 0.319510 +vt 0.339292 0.321263 +vt 0.322761 0.321262 +vt 0.322761 0.338203 +vt 0.319340 0.341708 +vt 0.315920 0.341708 +vt 0.312500 0.338203 +vt 0.312500 0.314252 +vt 0.314210 0.312500 +vt 0.338152 0.312500 +vt 0.335711 0.341708 +vt 0.340271 0.341708 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.203125 0.875000 +vt 0.203125 0.890625 +vt 0.140625 0.890625 +vt 0.140625 0.875000 +vt 0.265625 0.875000 +vt 0.265625 0.890625 +vt 0.078125 0.875000 +vt 0.078125 0.890625 +vt 0.015625 0.890625 +vt 0.015625 0.875000 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.296875 0.343750 +vt 0.296875 0.390625 +vt 0.296875 0.375000 +vt 0.546875 0.375000 +vt 0.546875 0.390625 +vt 0.546875 0.406250 +vt 0.296875 0.406250 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.296875 0.343750 +vt 0.296875 0.390625 +vt 0.296875 0.375000 +vt 0.546875 0.375000 +vt 0.546875 0.390625 +vt 0.546875 0.406250 +vt 0.296875 0.406250 +vt 0.693479 0.655060 +vt 0.687500 0.656250 +vt 0.681521 0.655061 +vt 0.676452 0.651673 +vt 0.673064 0.646604 +vt 0.671875 0.640625 +vt 0.673064 0.634646 +vt 0.676452 0.629576 +vt 0.681521 0.626189 +vt 0.687500 0.625000 +vt 0.693479 0.626189 +vt 0.698549 0.629576 +vt 0.701936 0.634645 +vt 0.703125 0.640625 +vt 0.701936 0.646604 +vt 0.698549 0.651673 +vt 0.734375 0.656250 +vt 0.740354 0.655060 +vt 0.745424 0.651673 +vt 0.748811 0.646604 +vt 0.750000 0.640625 +vt 0.748811 0.634645 +vt 0.745424 0.629576 +vt 0.740354 0.626189 +vt 0.734375 0.625000 +vt 0.728396 0.626189 +vt 0.723327 0.629576 +vt 0.719939 0.634646 +vt 0.718750 0.640625 +vt 0.719939 0.646604 +vt 0.723327 0.651673 +vt 0.728396 0.655061 +vt 0.500000 0.300935 +vt 0.500000 0.343750 +vt 0.468750 0.343750 +vt 0.468750 0.300935 +vt 0.455836 0.290666 +vt 0.462293 0.292042 +vt 0.467020 0.295801 +vt 0.437500 0.343750 +vt 0.437500 0.300935 +vt 0.438077 0.295801 +vt 0.439652 0.285523 +vt 0.450414 0.290666 +vt 0.406250 0.343750 +vt 0.406250 0.300935 +vt 0.500000 0.375000 +vt 0.468750 0.375000 +vt 0.393336 0.290666 +vt 0.404098 0.285523 +vt 0.405673 0.295801 +vt 0.406250 0.300935 +vt 0.375000 0.343750 +vt 0.375000 0.300935 +vt 0.376730 0.295801 +vt 0.381457 0.292042 +vt 0.387914 0.290666 +vt 0.468750 0.295801 +vt 0.500000 0.295801 +vt 0.468750 0.290666 +vt 0.500000 0.290666 +vt 0.406250 0.258403 +vt 0.437500 0.258403 +vt 0.437500 0.266806 +vt 0.406250 0.266806 +vt 0.406250 0.273861 +vt 0.437500 0.273861 +vt 0.343750 0.218750 +vt 0.343750 0.281250 +vt 0.312500 0.281250 +vt 0.312500 0.218750 +vt 0.437500 0.218750 +vt 0.437500 0.281250 +vt 0.406250 0.281250 +vt 0.406250 0.218750 +vt 0.375000 0.281250 +vt 0.375000 0.218750 +vt 0.343750 0.187500 +vt 0.375000 0.187500 +vt 0.437500 0.312500 +vt 0.406250 0.312500 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.806239 0.533102 +vt 0.785488 0.521121 +vt 0.764737 0.533102 +vt 0.764737 0.557063 +vt 0.785488 0.569044 +vt 0.693479 0.655060 +vt 0.687500 0.656250 +vt 0.681521 0.655061 +vt 0.676452 0.651673 +vt 0.673064 0.646604 +vt 0.671875 0.640625 +vt 0.673064 0.634646 +vt 0.676452 0.629576 +vt 0.681521 0.626189 +vt 0.687500 0.625000 +vt 0.693479 0.626189 +vt 0.698549 0.629576 +vt 0.701936 0.634645 +vt 0.703125 0.640625 +vt 0.701936 0.646604 +vt 0.698549 0.651673 +vt 0.734375 0.656250 +vt 0.740354 0.655060 +vt 0.745424 0.651673 +vt 0.748811 0.646604 +vt 0.750000 0.640625 +vt 0.748811 0.634645 +vt 0.745424 0.629576 +vt 0.740354 0.626189 +vt 0.734375 0.625000 +vt 0.728396 0.626189 +vt 0.723327 0.629576 +vt 0.719939 0.634646 +vt 0.718750 0.640625 +vt 0.719939 0.646604 +vt 0.723327 0.651673 +vt 0.728396 0.655061 +vt 0.249991 0.781257 +vt 0.247613 0.793213 +vt 0.240840 0.803349 +vt 0.230703 0.810122 +vt 0.218745 0.812500 +vt 0.206789 0.810122 +vt 0.196652 0.803349 +vt 0.189879 0.793213 +vt 0.187500 0.781257 +vt 0.189879 0.769301 +vt 0.196652 0.759165 +vt 0.206789 0.752393 +vt 0.218746 0.750015 +vt 0.230703 0.752393 +vt 0.240840 0.759165 +vt 0.247613 0.769301 +vt 0.247613 0.793213 +vt 0.249991 0.781257 +vt 0.247613 0.769301 +vt 0.240840 0.759165 +vt 0.230703 0.752393 +vt 0.218746 0.750015 +vt 0.206789 0.752393 +vt 0.196652 0.759165 +vt 0.189879 0.769301 +vt 0.187500 0.781257 +vt 0.189879 0.793213 +vt 0.196652 0.803349 +vt 0.206789 0.810122 +vt 0.218746 0.812500 +vt 0.230703 0.810122 +vt 0.240840 0.803349 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.806239 0.557064 +vt 0.785488 0.569044 +vt 0.764737 0.557063 +vt 0.764737 0.533102 +vt 0.785488 0.521121 +vt 0.806239 0.533102 +vt 0.162500 0.766132 +vt 0.162500 0.760997 +vt 0.157857 0.757618 +vt 0.092850 0.757618 +vt 0.091792 0.757517 +vt 0.090807 0.757220 +vt 0.089961 0.756747 +vt 0.089311 0.756132 +vt 0.088903 0.755415 +vt 0.088764 0.754645 +vt 0.088903 0.753876 +vt 0.089311 0.753159 +vt 0.062500 0.735726 +vt 0.062500 0.984375 +vt 0.086238 0.984375 +vt 0.015627 0.752543 +vt 0.015627 0.753159 +vt 0.031250 0.753159 +vt 0.031250 0.752543 +vt 0.149893 0.937500 +vt 0.125000 0.937500 +vt 0.125000 0.921875 +vt 0.149893 0.921875 +vt 0.125000 0.937499 +vt 0.203574 0.937498 +vt 0.203574 0.921875 +vt 0.125000 0.921875 +vt 0.205522 0.937498 +vt 0.225000 0.937498 +vt 0.225000 0.921875 +vt 0.205522 0.921875 +vt 0.015627 0.737753 +vt 0.015627 0.748294 +vt 0.031250 0.748294 +vt 0.031250 0.737753 +vt 0.015627 0.751672 +vt 0.031250 0.751672 +vt 0.225000 0.937498 +vt 0.156828 0.937499 +vt 0.156828 0.921875 +vt 0.225000 0.921875 +vt 0.015627 0.751672 +vt 0.015627 0.751774 +vt 0.031250 0.751774 +vt 0.031250 0.751672 +vt 0.015627 0.753876 +vt 0.015627 0.754645 +vt 0.031250 0.754645 +vt 0.031250 0.753876 +vt 0.156828 0.937499 +vt 0.225000 0.937498 +vt 0.225000 0.921875 +vt 0.156828 0.921875 +vt 0.015627 0.755415 +vt 0.031250 0.755415 +vt 0.015627 0.756132 +vt 0.031250 0.756132 +vt 0.015627 0.756747 +vt 0.031250 0.756747 +vt 0.015627 0.757220 +vt 0.031250 0.757220 +vt 0.015627 0.757517 +vt 0.031250 0.757517 +vt 0.015627 0.757618 +vt 0.031250 0.757618 +vt 0.015627 0.757618 +vt 0.015627 0.760997 +vt 0.031250 0.760997 +vt 0.031250 0.757618 +vt 0.015627 0.766132 +vt 0.031250 0.766132 +vt 0.015625 0.984375 +vt 0.031250 0.984375 +vt 0.015627 0.734375 +vt 0.031250 0.734375 +vt 0.015627 0.752071 +vt 0.031250 0.752071 +vt 0.091792 0.751774 +vt 0.090807 0.752071 +vt 0.089961 0.752543 +vt 0.089311 0.753159 +vt 0.062500 0.735726 +vt 0.137426 0.735726 +vt 0.157857 0.751672 +vt 0.092850 0.751672 +vt 0.137426 0.735726 +vt 0.089961 0.752543 +vt 0.090807 0.752071 +vt 0.091792 0.751774 +vt 0.092850 0.751672 +vt 0.157857 0.751672 +vt 0.162500 0.748294 +vt 0.139283 0.734375 +vt 0.157857 0.734375 +vt 0.162500 0.737753 +vt 0.157857 0.734375 +vt 0.139283 0.734375 +vt 0.162500 0.748294 +vt 0.162500 0.737753 +vt 0.088903 0.753876 +vt 0.088764 0.754645 +vt 0.088903 0.755415 +vt 0.089311 0.756132 +vt 0.089961 0.756747 +vt 0.090807 0.757220 +vt 0.091792 0.757517 +vt 0.092850 0.757618 +vt 0.157857 0.757618 +vt 0.162500 0.760997 +vt 0.162500 0.766132 +vt 0.086238 0.984375 +vt 0.062500 0.984375 +vt 0.406250 0.375000 +vt 0.397097 0.375000 +vt 0.384153 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.354120 +vt 0.377349 0.349406 +vt 0.381804 0.345702 +vt 0.387474 0.343750 +vt 0.393776 0.343750 +vt 0.399446 0.345702 +vt 0.403901 0.349407 +vt 0.406250 0.354120 +vt 0.443972 0.375000 +vt 0.453125 0.375000 +vt 0.453125 0.354120 +vt 0.450777 0.349407 +vt 0.446321 0.345702 +vt 0.440651 0.343750 +vt 0.434349 0.343750 +vt 0.428679 0.345702 +vt 0.424224 0.349406 +vt 0.421875 0.354120 +vt 0.421875 0.375000 +vt 0.431028 0.375000 +vt 0.406250 0.375000 +vt 0.397097 0.375000 +vt 0.384153 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.354120 +vt 0.377349 0.349406 +vt 0.381804 0.345702 +vt 0.387474 0.343750 +vt 0.393776 0.343750 +vt 0.399446 0.345702 +vt 0.403901 0.349407 +vt 0.406250 0.354120 +vt 0.443972 0.375000 +vt 0.453125 0.375000 +vt 0.453125 0.354120 +vt 0.450777 0.349407 +vt 0.446321 0.345702 +vt 0.440651 0.343750 +vt 0.434349 0.343750 +vt 0.428679 0.345702 +vt 0.424224 0.349406 +vt 0.421875 0.354120 +vt 0.421875 0.375000 +vt 0.431028 0.375000 +vt 0.031250 0.281250 +vt 0.031250 0.265625 +vt 0.125000 0.265625 +vt 0.125000 0.281250 +vt 0.015943 0.420689 +vt 0.015625 0.419504 +vt 0.015625 0.299368 +vt 0.015943 0.298183 +vt 0.016811 0.297315 +vt 0.017998 0.296997 +vt 0.019204 0.296997 +vt 0.020390 0.297315 +vt 0.021259 0.298183 +vt 0.021577 0.299368 +vt 0.021577 0.320784 +vt 0.021577 0.398088 +vt 0.021577 0.419504 +vt 0.021259 0.420689 +vt 0.020390 0.421557 +vt 0.019204 0.421874 +vt 0.017998 0.421874 +vt 0.016811 0.421557 +vt 0.031250 0.281250 +vt 0.125000 0.281250 +vt 0.125000 0.265625 +vt 0.031250 0.265625 +vt 0.134658 0.320784 +vt 0.134658 0.398089 +vt 0.140610 0.299369 +vt 0.140610 0.419504 +vt 0.140292 0.420690 +vt 0.139424 0.421557 +vt 0.138237 0.421875 +vt 0.137031 0.421875 +vt 0.135845 0.421557 +vt 0.134976 0.420690 +vt 0.134658 0.419504 +vt 0.134658 0.299369 +vt 0.134976 0.298183 +vt 0.135845 0.297316 +vt 0.137031 0.296998 +vt 0.138237 0.296998 +vt 0.139424 0.297316 +vt 0.140292 0.298183 +vt 0.296875 0.859375 +vt 0.296875 0.984375 +vt 0.421875 0.984375 +vt 0.421875 0.859375 +vt 0.296875 0.859375 +vt 0.421875 0.859375 +vt 0.421875 0.984375 +vt 0.296875 0.984375 +vt 0.437500 0.859375 +vt 0.453125 0.859375 +vt 0.453125 0.984375 +vt 0.437500 0.984375 +vt 0.437500 0.984375 +vt 0.453125 0.984375 +vt 0.453125 0.859375 +vt 0.437500 0.859375 +vt 0.421875 0.828125 +vt 0.421875 0.843750 +vt 0.296875 0.843750 +vt 0.296875 0.828125 +vt 0.296875 0.828125 +vt 0.296875 0.843750 +vt 0.421875 0.843750 +vt 0.421875 0.828125 +vt 0.512500 0.514256 +vt 0.495057 0.514256 +vt 0.495057 0.487500 +vt 0.512500 0.487500 +vt 0.477385 0.520174 +vt 0.494827 0.520183 +vt 0.495053 0.664231 +vt 0.477611 0.664222 +vt 0.512500 0.559357 +vt 0.512500 0.564707 +vt 0.495057 0.564707 +vt 0.495057 0.559357 +vt 0.477614 0.487500 +vt 0.366263 0.519892 +vt 0.369938 0.515742 +vt 0.386221 0.675899 +vt 0.343067 0.687500 +vt 0.316477 0.657017 +vt 0.342916 0.522181 +vt 0.349531 0.523401 +vt 0.358189 0.522788 +vt 0.512500 0.569234 +vt 0.495057 0.569234 +vt 0.495057 0.571877 +vt 0.512500 0.571877 +vt 0.459941 0.487500 +vt 0.477385 0.487500 +vt 0.477385 0.668275 +vt 0.459941 0.668275 +vt 0.512500 0.577327 +vt 0.495057 0.577327 +vt 0.495057 0.582459 +vt 0.512500 0.582459 +vt 0.495057 0.535749 +vt 0.495057 0.516943 +vt 0.512499 0.516954 +vt 0.512499 0.535760 +vt 0.512500 0.542001 +vt 0.512500 0.554529 +vt 0.495057 0.554529 +vt 0.495057 0.542001 +vt 0.498955 0.586077 +vt 0.498955 0.595823 +vt 0.505646 0.595823 +vt 0.505646 0.586077 +vt 0.218750 0.812500 +vt 0.216371 0.824459 +vt 0.209597 0.834597 +vt 0.199459 0.841371 +vt 0.187500 0.843750 +vt 0.175541 0.841371 +vt 0.165403 0.834597 +vt 0.158629 0.824459 +vt 0.156250 0.812500 +vt 0.158629 0.800541 +vt 0.165403 0.790403 +vt 0.175541 0.783629 +vt 0.187500 0.781250 +vt 0.199459 0.783629 +vt 0.209597 0.790403 +vt 0.216371 0.800541 +vt 0.512500 0.514256 +vt 0.512500 0.487500 +vt 0.495057 0.487500 +vt 0.495057 0.514256 +vt 0.477385 0.520174 +vt 0.477611 0.664222 +vt 0.495053 0.664231 +vt 0.494827 0.520183 +vt 0.512500 0.559357 +vt 0.495057 0.559357 +vt 0.495057 0.564707 +vt 0.512500 0.564707 +vt 0.477614 0.487500 +vt 0.459941 0.487500 +vt 0.459941 0.668275 +vt 0.477385 0.668275 +vt 0.477385 0.487500 +vt 0.495057 0.535749 +vt 0.512499 0.535760 +vt 0.512499 0.516954 +vt 0.495057 0.516943 +vt 0.512500 0.542001 +vt 0.495057 0.542001 +vt 0.495057 0.554529 +vt 0.512500 0.554529 +vt 0.218750 0.812500 +vt 0.216371 0.800541 +vt 0.209597 0.790403 +vt 0.199459 0.783629 +vt 0.187500 0.781250 +vt 0.175541 0.783629 +vt 0.165403 0.790403 +vt 0.158629 0.800541 +vt 0.156250 0.812500 +vt 0.158629 0.824459 +vt 0.165403 0.834597 +vt 0.175541 0.841371 +vt 0.187500 0.843750 +vt 0.199459 0.841371 +vt 0.209597 0.834597 +vt 0.216371 0.824459 +vt 0.477385 0.671815 +vt 0.459941 0.671815 +vt 0.512499 0.539359 +vt 0.495057 0.539349 +vt 0.512500 0.573710 +vt 0.495057 0.573710 +vt 0.495057 0.586077 +vt 0.512500 0.586077 +vt 0.512500 0.577327 +vt 0.512500 0.582459 +vt 0.495057 0.582459 +vt 0.495057 0.577327 +vt 0.495057 0.666381 +vt 0.477614 0.666372 +vt 0.498955 0.586077 +vt 0.498955 0.595823 +vt 0.495057 0.595823 +vt 0.495057 0.586077 +vt 0.509545 0.595823 +vt 0.509545 0.586077 +vt 0.495057 0.556662 +vt 0.512500 0.556662 +vt 0.505646 0.586077 +vt 0.505646 0.595823 +vt 0.495057 0.556662 +vt 0.512500 0.556662 +vt 0.512500 0.569235 +vt 0.495057 0.569234 +vt 0.495057 0.539359 +vt 0.512500 0.539359 +vt 0.512499 0.514267 +vt 0.495057 0.514256 +vt 0.495057 0.573710 +vt 0.512500 0.573710 +vt 0.512500 0.571877 +vt 0.495057 0.571877 +vt 0.386279 0.664060 +vt 0.390197 0.517983 +vt 0.416636 0.652819 +vt 0.459941 0.499102 +vt 0.459941 0.683882 +vt 0.443659 0.659258 +vt 0.446104 0.683400 +vt 0.440909 0.678098 +vt 0.454220 0.685805 +vt 0.336367 0.518866 +vt 0.327081 0.507159 +vt 0.322002 0.506133 +vt 0.315998 0.507792 +vt 0.312558 0.510940 +vt 0.342916 0.522181 +vt 0.316477 0.657017 +vt 0.343067 0.687500 +vt 0.386221 0.675899 +vt 0.369938 0.515742 +vt 0.366263 0.519892 +vt 0.358189 0.522788 +vt 0.349531 0.523401 +vt 0.431909 0.652212 +vt 0.423252 0.651599 +vt 0.416788 0.487500 +vt 0.439984 0.655108 +vt 0.312558 0.510940 +vt 0.336367 0.518866 +vt 0.315998 0.507792 +vt 0.322002 0.506133 +vt 0.327081 0.507159 +vt 0.367188 0.496902 +vt 0.372384 0.491600 +vt 0.380499 0.489195 +vt 0.386221 0.491119 +vt 0.390197 0.517983 +vt 0.386279 0.664060 +vt 0.416636 0.652819 +vt 0.389719 0.667208 +vt 0.395723 0.668867 +vt 0.400802 0.667841 +vt 0.410088 0.656134 +vt 0.459941 0.683882 +vt 0.459941 0.499102 +vt 0.443659 0.659258 +vt 0.440909 0.678098 +vt 0.446104 0.683400 +vt 0.454220 0.685805 +vt 0.410088 0.656134 +vt 0.400802 0.667841 +vt 0.395723 0.668867 +vt 0.389719 0.667208 +vt 0.386221 0.491119 +vt 0.372384 0.491600 +vt 0.367188 0.496902 +vt 0.380499 0.489195 +vt 0.423252 0.651599 +vt 0.431909 0.652212 +vt 0.439984 0.655108 +vt 0.416788 0.487500 +vt 0.765606 0.234340 +vt 0.765606 0.296840 +vt 0.734356 0.296840 +vt 0.734356 0.234340 +vt 0.703106 0.234340 +vt 0.703106 0.296840 +vt 0.671856 0.296840 +vt 0.671856 0.234340 +vt 0.640606 0.296840 +vt 0.640606 0.234340 +vt 0.671856 0.234340 +vt 0.703106 0.296840 +vt 0.703106 0.234340 +vt 0.734356 0.296840 +vt 0.965770 0.593750 +vt 0.965770 0.656250 +vt 0.912572 0.656250 +vt 0.912572 0.593750 +vt 0.640606 0.234340 +vt 0.640606 0.171840 +vt 0.693804 0.171840 +vt 0.693804 0.234340 +vt 0.483174 0.284682 +vt 0.484375 0.296875 +vt 0.483174 0.309068 +vt 0.479618 0.320793 +vt 0.473842 0.331598 +vt 0.466069 0.341069 +vt 0.456598 0.348842 +vt 0.445793 0.354617 +vt 0.434068 0.358174 +vt 0.421875 0.359375 +vt 0.421875 0.317708 +vt 0.425939 0.317308 +vt 0.429848 0.316122 +vt 0.433449 0.314197 +vt 0.436606 0.311606 +vt 0.439197 0.308449 +vt 0.441123 0.304847 +vt 0.442308 0.300939 +vt 0.442708 0.296875 +vt 0.442308 0.292811 +vt 0.441123 0.288902 +vt 0.439197 0.285301 +vt 0.436606 0.282144 +vt 0.433449 0.279553 +vt 0.429848 0.277627 +vt 0.425939 0.276442 +vt 0.421875 0.276042 +vt 0.421875 0.234375 +vt 0.434068 0.235576 +vt 0.445793 0.239133 +vt 0.456598 0.244908 +vt 0.466069 0.252681 +vt 0.473842 0.262152 +vt 0.479617 0.272957 +vt 0.483174 0.284682 +vt 0.479617 0.272957 +vt 0.473842 0.262152 +vt 0.466069 0.252681 +vt 0.456598 0.244908 +vt 0.445793 0.239133 +vt 0.434068 0.235576 +vt 0.421875 0.234375 +vt 0.421875 0.272150 +vt 0.426699 0.272625 +vt 0.431337 0.274032 +vt 0.435611 0.276317 +vt 0.439358 0.279392 +vt 0.442433 0.283139 +vt 0.444718 0.287413 +vt 0.446125 0.292051 +vt 0.446600 0.296875 +vt 0.446125 0.301698 +vt 0.444718 0.306337 +vt 0.442433 0.310611 +vt 0.439358 0.314358 +vt 0.435611 0.317433 +vt 0.431337 0.319717 +vt 0.426699 0.321124 +vt 0.421875 0.321599 +vt 0.421875 0.359375 +vt 0.434068 0.358174 +vt 0.445793 0.354617 +vt 0.456598 0.348842 +vt 0.466069 0.341069 +vt 0.473842 0.331598 +vt 0.479618 0.320793 +vt 0.483174 0.309068 +vt 0.484375 0.296875 +vt 0.484375 0.296875 +vt 0.483174 0.284682 +vt 0.479617 0.272957 +vt 0.473842 0.262152 +vt 0.466069 0.252681 +vt 0.456598 0.244908 +vt 0.445793 0.239133 +vt 0.434068 0.235576 +vt 0.421875 0.234375 +vt 0.421875 0.276042 +vt 0.425939 0.276442 +vt 0.429848 0.277627 +vt 0.433449 0.279553 +vt 0.436606 0.282144 +vt 0.439197 0.285301 +vt 0.441123 0.288902 +vt 0.442308 0.292811 +vt 0.442708 0.296875 +vt 0.442308 0.300939 +vt 0.441123 0.304847 +vt 0.439197 0.308449 +vt 0.436606 0.311606 +vt 0.433449 0.314197 +vt 0.429848 0.316122 +vt 0.425939 0.317308 +vt 0.421875 0.317708 +vt 0.421875 0.359375 +vt 0.434068 0.358174 +vt 0.445793 0.354617 +vt 0.456598 0.348842 +vt 0.466069 0.341069 +vt 0.473842 0.331598 +vt 0.479618 0.320793 +vt 0.483174 0.309068 +vt 0.484375 0.296875 +vt 0.483174 0.309068 +vt 0.479618 0.320793 +vt 0.473842 0.331598 +vt 0.466069 0.341069 +vt 0.456598 0.348842 +vt 0.445793 0.354617 +vt 0.434068 0.358174 +vt 0.421875 0.359375 +vt 0.421875 0.321599 +vt 0.426699 0.321124 +vt 0.431337 0.319717 +vt 0.435611 0.317433 +vt 0.439358 0.314358 +vt 0.442433 0.310611 +vt 0.444718 0.306337 +vt 0.446125 0.301698 +vt 0.446600 0.296875 +vt 0.446125 0.292051 +vt 0.444718 0.287413 +vt 0.442433 0.283139 +vt 0.439358 0.279392 +vt 0.435611 0.276317 +vt 0.431337 0.274032 +vt 0.426699 0.272625 +vt 0.421875 0.272150 +vt 0.421875 0.234375 +vt 0.434068 0.235576 +vt 0.445793 0.239133 +vt 0.456598 0.244908 +vt 0.466069 0.252681 +vt 0.473842 0.262152 +vt 0.479617 0.272957 +vt 0.483174 0.284682 +vt 0.417051 0.272625 +vt 0.412413 0.274032 +vt 0.408139 0.276317 +vt 0.404392 0.279392 +vt 0.401317 0.283139 +vt 0.399032 0.287413 +vt 0.397626 0.292051 +vt 0.397150 0.296875 +vt 0.397626 0.301698 +vt 0.399032 0.306337 +vt 0.401317 0.310611 +vt 0.404392 0.314358 +vt 0.408139 0.317433 +vt 0.412413 0.319717 +vt 0.417051 0.321124 +vt 0.409682 0.358174 +vt 0.397957 0.354617 +vt 0.387152 0.348842 +vt 0.377681 0.341069 +vt 0.369908 0.331598 +vt 0.364133 0.320793 +vt 0.360576 0.309068 +vt 0.359375 0.296875 +vt 0.360576 0.284682 +vt 0.364133 0.272957 +vt 0.369908 0.262152 +vt 0.377681 0.252681 +vt 0.387152 0.244908 +vt 0.397957 0.239133 +vt 0.409682 0.235576 +vt 0.417811 0.276442 +vt 0.413902 0.277627 +vt 0.410301 0.279553 +vt 0.407144 0.282144 +vt 0.404553 0.285301 +vt 0.402628 0.288902 +vt 0.401442 0.292811 +vt 0.401042 0.296875 +vt 0.401442 0.300939 +vt 0.402628 0.304848 +vt 0.404553 0.308449 +vt 0.407144 0.311606 +vt 0.410301 0.314197 +vt 0.413902 0.316122 +vt 0.417811 0.317308 +vt 0.409682 0.358174 +vt 0.397957 0.354617 +vt 0.387152 0.348842 +vt 0.377681 0.341069 +vt 0.369908 0.331598 +vt 0.364133 0.320793 +vt 0.360576 0.309068 +vt 0.359375 0.296875 +vt 0.360576 0.284682 +vt 0.364133 0.272957 +vt 0.369908 0.262152 +vt 0.377681 0.252681 +vt 0.387152 0.244908 +vt 0.397957 0.239133 +vt 0.409682 0.235576 +vt 0.417051 0.321124 +vt 0.412413 0.319717 +vt 0.408139 0.317433 +vt 0.404392 0.314358 +vt 0.401317 0.310611 +vt 0.399032 0.306337 +vt 0.397626 0.301698 +vt 0.397150 0.296875 +vt 0.397626 0.292051 +vt 0.399032 0.287413 +vt 0.401317 0.283139 +vt 0.404392 0.279392 +vt 0.408139 0.276317 +vt 0.412413 0.274032 +vt 0.417051 0.272625 +vt 0.409682 0.235576 +vt 0.397957 0.239133 +vt 0.387152 0.244908 +vt 0.377681 0.252681 +vt 0.369908 0.262152 +vt 0.364133 0.272957 +vt 0.360576 0.284682 +vt 0.359375 0.296875 +vt 0.360576 0.309068 +vt 0.364133 0.320793 +vt 0.369908 0.331598 +vt 0.377681 0.341069 +vt 0.387152 0.348842 +vt 0.397957 0.354617 +vt 0.409682 0.358174 +vt 0.417811 0.317308 +vt 0.413902 0.316122 +vt 0.410301 0.314197 +vt 0.407144 0.311606 +vt 0.404553 0.308449 +vt 0.402628 0.304848 +vt 0.401442 0.300939 +vt 0.401042 0.296875 +vt 0.401442 0.292811 +vt 0.402628 0.288902 +vt 0.404553 0.285301 +vt 0.407144 0.282144 +vt 0.410301 0.279553 +vt 0.413902 0.277627 +vt 0.417811 0.276442 +vt 0.409682 0.235576 +vt 0.397957 0.239133 +vt 0.387152 0.244908 +vt 0.377681 0.252681 +vt 0.369908 0.262152 +vt 0.364133 0.272957 +vt 0.360576 0.284682 +vt 0.359375 0.296875 +vt 0.360576 0.309068 +vt 0.364133 0.320793 +vt 0.369908 0.331598 +vt 0.377681 0.341069 +vt 0.387152 0.348842 +vt 0.397957 0.354617 +vt 0.409682 0.358174 +vt 0.640083 0.385053 +vt 0.632672 0.386527 +vt 0.625261 0.385053 +vt 0.618979 0.380856 +vt 0.614781 0.374573 +vt 0.613307 0.367162 +vt 0.614781 0.359751 +vt 0.618979 0.353469 +vt 0.625261 0.349271 +vt 0.632672 0.347797 +vt 0.640083 0.349271 +vt 0.646365 0.353469 +vt 0.650563 0.359751 +vt 0.652037 0.367162 +vt 0.650563 0.374573 +vt 0.646365 0.380856 +vt 0.640083 0.385053 +vt 0.632672 0.386527 +vt 0.625261 0.385053 +vt 0.618979 0.380856 +vt 0.614781 0.374573 +vt 0.613307 0.367162 +vt 0.614781 0.359751 +vt 0.618979 0.353469 +vt 0.625261 0.349271 +vt 0.632672 0.347797 +vt 0.640083 0.349271 +vt 0.646365 0.353469 +vt 0.650563 0.359751 +vt 0.652037 0.367162 +vt 0.650563 0.374573 +vt 0.646365 0.380856 +vt 0.640626 0.703125 +vt 0.640626 0.453125 +vt 0.656251 0.453125 +vt 0.656251 0.703125 +vt 0.671876 0.453125 +vt 0.671876 0.703125 +vt 0.687501 0.453125 +vt 0.687501 0.703125 +vt 0.703126 0.453125 +vt 0.703126 0.703125 +vt 0.718751 0.453125 +vt 0.718751 0.703125 +vt 0.734377 0.453125 +vt 0.734377 0.703125 +vt 0.750002 0.453125 +vt 0.750002 0.703125 +vt 0.765627 0.453125 +vt 0.765627 0.703125 +vt 0.781252 0.453125 +vt 0.781252 0.703125 +vt 0.796877 0.453125 +vt 0.796877 0.703125 +vt 0.812502 0.453125 +vt 0.812502 0.703125 +vt 0.828127 0.453125 +vt 0.828127 0.703125 +vt 0.578125 0.703125 +vt 0.578125 0.453125 +vt 0.593750 0.453125 +vt 0.593750 0.703125 +vt 0.609375 0.453125 +vt 0.609376 0.703125 +vt 0.811311 0.630980 +vt 0.812501 0.625000 +vt 0.811311 0.619021 +vt 0.807924 0.613952 +vt 0.802855 0.610565 +vt 0.796876 0.609375 +vt 0.790896 0.610565 +vt 0.785827 0.613952 +vt 0.782440 0.619021 +vt 0.781251 0.625000 +vt 0.782440 0.630979 +vt 0.785827 0.636048 +vt 0.790896 0.639436 +vt 0.796876 0.640625 +vt 0.802855 0.639436 +vt 0.807924 0.636049 +vt 0.625001 0.453125 +vt 0.625001 0.703125 +vt 0.812501 0.671875 +vt 0.811312 0.677854 +vt 0.807924 0.682923 +vt 0.802855 0.686310 +vt 0.796876 0.687500 +vt 0.790897 0.686310 +vt 0.785827 0.682923 +vt 0.782440 0.677854 +vt 0.781251 0.671875 +vt 0.782440 0.665895 +vt 0.785827 0.660826 +vt 0.790897 0.657439 +vt 0.796876 0.656250 +vt 0.802855 0.657439 +vt 0.807924 0.660827 +vt 0.811312 0.665896 +vt 0.812500 0.562500 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.562500 +vt 0.781250 0.609375 +vt 0.781250 0.562500 +vt 0.765625 0.609375 +vt 0.765625 0.562500 +vt 0.750000 0.609375 +vt 0.750000 0.562500 +vt 0.734375 0.609375 +vt 0.734375 0.562500 +vt 0.718750 0.609375 +vt 0.718750 0.562500 +vt 0.703125 0.609375 +vt 0.703125 0.562500 +vt 0.687500 0.609375 +vt 0.687500 0.562500 +vt 0.671875 0.609375 +vt 0.671875 0.562500 +vt 0.656250 0.609375 +vt 0.656250 0.562500 +vt 0.640625 0.609375 +vt 0.640625 0.562500 +vt 0.625000 0.609375 +vt 0.625000 0.562500 +vt 0.609375 0.609375 +vt 0.609375 0.562500 +vt 0.593750 0.609375 +vt 0.593750 0.562500 +vt 0.578125 0.609375 +vt 0.578125 0.562500 +vt 0.828125 0.562500 +vt 0.828125 0.609375 +vt 0.640626 0.703125 +vt 0.656251 0.703125 +vt 0.656251 0.453125 +vt 0.640626 0.453125 +vt 0.671876 0.703125 +vt 0.671876 0.453125 +vt 0.687501 0.703125 +vt 0.687501 0.453125 +vt 0.703126 0.703125 +vt 0.703126 0.453125 +vt 0.718751 0.703125 +vt 0.718751 0.453125 +vt 0.734377 0.703125 +vt 0.734377 0.453125 +vt 0.750002 0.703125 +vt 0.750002 0.453125 +vt 0.765627 0.703125 +vt 0.765627 0.453125 +vt 0.781252 0.703125 +vt 0.781252 0.453125 +vt 0.796877 0.703125 +vt 0.796877 0.453125 +vt 0.812502 0.703125 +vt 0.812502 0.453125 +vt 0.828127 0.703125 +vt 0.828127 0.453125 +vt 0.578125 0.703125 +vt 0.593750 0.703125 +vt 0.593750 0.453125 +vt 0.578125 0.453125 +vt 0.609376 0.703125 +vt 0.609375 0.453125 +vt 0.625001 0.703125 +vt 0.625001 0.453125 +vt 0.812501 0.671875 +vt 0.811312 0.665896 +vt 0.807924 0.660827 +vt 0.802855 0.657439 +vt 0.796876 0.656250 +vt 0.790897 0.657439 +vt 0.785827 0.660826 +vt 0.782440 0.665895 +vt 0.781251 0.671875 +vt 0.782440 0.677854 +vt 0.785827 0.682923 +vt 0.790897 0.686310 +vt 0.796876 0.687500 +vt 0.802855 0.686310 +vt 0.807924 0.682923 +vt 0.811312 0.677854 +vt 0.375000 0.300884 +vt 0.406250 0.300884 +vt 0.406250 0.308491 +vt 0.375000 0.308491 +vt 0.375000 0.269634 +vt 0.406250 0.269634 +vt 0.406250 0.277241 +vt 0.375000 0.277241 +vt 0.375000 0.314325 +vt 0.406250 0.314325 +vt 0.406250 0.328125 +vt 0.375000 0.328125 +vt 0.375000 0.285259 +vt 0.406250 0.285259 +vt 0.406250 0.292866 +vt 0.375000 0.292866 +vt 0.375000 0.250000 +vt 0.406250 0.250000 +vt 0.406250 0.263800 +vt 0.375000 0.263800 +vt 1.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 1.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 2.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 2.000000 0.125000 +vt 0.000000 0.109375 +vt 2.000000 0.109375 +vt 0.000000 0.093750 +vt 2.000000 0.093750 +vt 0.000000 0.078125 +vt 2.000000 0.078125 +vt 0.000000 0.062500 +vt 2.000000 0.062500 +vt 0.000000 0.046875 +vt 2.000000 0.046875 +vt 0.000000 0.031250 +vt 2.000000 0.031250 +vt 0.000000 0.015625 +vt 2.000000 0.015625 +vt 2.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 2.000000 0.125000 +vt 0.000000 0.109375 +vt 2.000000 0.109375 +vt 0.000000 0.093750 +vt 2.000000 0.093750 +vt 0.000000 0.078125 +vt 2.000000 0.078125 +vt 0.000000 0.062500 +vt 2.000000 0.062500 +vt 0.000000 0.046875 +vt 2.000000 0.046875 +vt 0.000000 0.031250 +vt 2.000000 0.031250 +vt 0.000000 0.015625 +vt 2.000000 0.015625 +vt 0.640626 0.703125 +vt 0.640626 0.453125 +vt 0.656251 0.453125 +vt 0.656251 0.703125 +vt 0.671876 0.453125 +vt 0.671876 0.703125 +vt 0.687501 0.453125 +vt 0.687501 0.703125 +vt 0.703126 0.453125 +vt 0.703126 0.703125 +vt 0.718751 0.453125 +vt 0.718751 0.703125 +vt 0.734377 0.453125 +vt 0.734377 0.703125 +vt 0.750002 0.453125 +vt 0.750002 0.703125 +vt 0.765627 0.453125 +vt 0.765627 0.703125 +vt 0.781252 0.453125 +vt 0.781252 0.703125 +vt 0.796877 0.453125 +vt 0.796877 0.703125 +vt 0.812502 0.453125 +vt 0.812502 0.703125 +vt 0.828127 0.453125 +vt 0.828127 0.703125 +vt 0.578125 0.703125 +vt 0.578125 0.453125 +vt 0.593750 0.453125 +vt 0.593750 0.703125 +vt 0.609375 0.453125 +vt 0.609376 0.703125 +vt 0.811311 0.630980 +vt 0.812501 0.625000 +vt 0.811311 0.619021 +vt 0.807924 0.613952 +vt 0.802855 0.610565 +vt 0.796876 0.609375 +vt 0.790896 0.610565 +vt 0.785827 0.613952 +vt 0.782440 0.619021 +vt 0.781251 0.625000 +vt 0.782440 0.630979 +vt 0.785827 0.636048 +vt 0.790896 0.639436 +vt 0.796876 0.640625 +vt 0.802855 0.639436 +vt 0.807924 0.636049 +vt 0.625001 0.453125 +vt 0.625001 0.703125 +vt 0.812501 0.671875 +vt 0.811312 0.677854 +vt 0.807924 0.682923 +vt 0.802855 0.686310 +vt 0.796876 0.687500 +vt 0.790897 0.686310 +vt 0.785827 0.682923 +vt 0.782440 0.677854 +vt 0.781251 0.671875 +vt 0.782440 0.665895 +vt 0.785827 0.660826 +vt 0.790897 0.657439 +vt 0.796876 0.656250 +vt 0.802855 0.657439 +vt 0.807924 0.660827 +vt 0.811312 0.665896 +vt 0.640625 0.703125 +vt 0.640625 0.453125 +vt 0.656250 0.453125 +vt 0.656250 0.703125 +vt 0.671875 0.453125 +vt 0.671875 0.703125 +vt 0.687500 0.453125 +vt 0.687500 0.703125 +vt 0.703125 0.453125 +vt 0.703125 0.703125 +vt 0.718750 0.453125 +vt 0.718750 0.703125 +vt 0.734375 0.453125 +vt 0.734375 0.703125 +vt 0.750000 0.453125 +vt 0.750000 0.703125 +vt 0.765625 0.453125 +vt 0.765625 0.703125 +vt 0.781250 0.453125 +vt 0.781250 0.703125 +vt 0.796875 0.453125 +vt 0.796875 0.703125 +vt 0.812500 0.453125 +vt 0.812500 0.703125 +vt 0.828125 0.453125 +vt 0.828125 0.703125 +vt 0.578125 0.703125 +vt 0.578125 0.453125 +vt 0.593750 0.453125 +vt 0.593750 0.703125 +vt 0.609375 0.453125 +vt 0.609375 0.703125 +vt 0.625000 0.453125 +vt 0.625000 0.703125 +vt -0.000000 0.109375 +vt 2.000000 0.109375 +vt 2.000000 0.125000 +vt -0.000000 0.125000 +vt 2.000000 0.140625 +vt -0.000000 0.140625 +vt -0.000000 0.015625 +vt 2.000000 0.015625 +vt 2.000000 0.031250 +vt -0.000000 0.031250 +vt 2.000000 0.046875 +vt -0.000000 0.046875 +vt 2.000000 0.062500 +vt -0.000000 0.062500 +vt 2.000000 0.078125 +vt -0.000000 0.078125 +vt 2.000000 0.093750 +vt -0.000000 0.093750 +vt 2.000000 0.109375 +vt -0.000000 0.109375 +vt 2.000000 0.125000 +vt -0.000000 0.125000 +vt 2.000000 0.140625 +vt -0.000000 0.140625 +vt -0.000000 0.015625 +vt 2.000000 0.015625 +vt 2.000000 0.031250 +vt -0.000000 0.031250 +vt 2.000000 0.046875 +vt -0.000000 0.046875 +vt 2.000000 0.062500 +vt -0.000000 0.062500 +vt 2.000000 0.078125 +vt -0.000000 0.078125 +vt 2.000000 0.093750 +vt -0.000000 0.093750 +vt 1.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 1.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 1.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 1.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.109375 +vt 1.000000 0.109375 +vt 0.000000 0.093750 +vt 1.000000 0.093750 +vt 0.000000 0.078125 +vt 1.000000 0.078125 +vt 0.000000 0.062500 +vt 1.000000 0.062500 +vt 0.000000 0.046875 +vt 1.000000 0.046875 +vt 0.000000 0.031250 +vt 1.000000 0.031250 +vt 0.000000 0.015625 +vt 1.000000 0.015625 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.640626 0.703125 +vt 0.656251 0.703125 +vt 0.656251 0.453125 +vt 0.640626 0.453125 +vt 0.671876 0.703125 +vt 0.671876 0.453125 +vt 0.687501 0.703125 +vt 0.687501 0.453125 +vt 0.703126 0.703125 +vt 0.703126 0.453125 +vt 0.718751 0.703125 +vt 0.718751 0.453125 +vt 0.734377 0.703125 +vt 0.734377 0.453125 +vt 0.750002 0.703125 +vt 0.750002 0.453125 +vt 0.765627 0.703125 +vt 0.765627 0.453125 +vt 0.781252 0.703125 +vt 0.781252 0.453125 +vt 0.796877 0.703125 +vt 0.796877 0.453125 +vt 0.812502 0.703125 +vt 0.812502 0.453125 +vt 0.828127 0.703125 +vt 0.828127 0.453125 +vt 0.578125 0.703125 +vt 0.593750 0.703125 +vt 0.593750 0.453125 +vt 0.578125 0.453125 +vt 0.609376 0.703125 +vt 0.609375 0.453125 +vt 0.625001 0.703125 +vt 0.625001 0.453125 +vt 0.812501 0.671875 +vt 0.811312 0.665896 +vt 0.807924 0.660827 +vt 0.802855 0.657439 +vt 0.796876 0.656250 +vt 0.790897 0.657439 +vt 0.785827 0.660826 +vt 0.782440 0.665895 +vt 0.781251 0.671875 +vt 0.782440 0.677854 +vt 0.785827 0.682923 +vt 0.790897 0.686310 +vt 0.796876 0.687500 +vt 0.802855 0.686310 +vt 0.807924 0.682923 +vt 0.811312 0.677854 +vt 0.812500 0.562500 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.562500 +vt 0.781250 0.609375 +vt 0.781250 0.562500 +vt 0.765625 0.609375 +vt 0.765625 0.562500 +vt 0.750000 0.609375 +vt 0.750000 0.562500 +vt 0.734375 0.609375 +vt 0.734375 0.562500 +vt 0.718750 0.609375 +vt 0.718750 0.562500 +vt 0.703125 0.609375 +vt 0.703125 0.562500 +vt 0.687500 0.609375 +vt 0.687500 0.562500 +vt 0.671875 0.609375 +vt 0.671875 0.562500 +vt 0.656250 0.609375 +vt 0.656250 0.562500 +vt 0.640625 0.609375 +vt 0.640625 0.562500 +vt 0.625000 0.609375 +vt 0.625000 0.562500 +vt 0.609375 0.609375 +vt 0.609375 0.562500 +vt 0.593750 0.609375 +vt 0.593750 0.562500 +vt 0.578125 0.609375 +vt 0.578125 0.562500 +vt 0.828125 0.562500 +vt 0.828125 0.609375 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.640625 0.703125 +vt 0.640625 0.453125 +vt 0.656250 0.453125 +vt 0.656250 0.703125 +vt 0.671875 0.453125 +vt 0.671875 0.703125 +vt 0.687500 0.453125 +vt 0.687500 0.703125 +vt 0.703125 0.453125 +vt 0.703125 0.703125 +vt 0.718750 0.453125 +vt 0.718750 0.703125 +vt 0.734375 0.453125 +vt 0.734375 0.703125 +vt 0.750000 0.453125 +vt 0.750000 0.703125 +vt 0.765625 0.453125 +vt 0.765625 0.703125 +vt 0.781250 0.453125 +vt 0.781250 0.703125 +vt 0.796875 0.453125 +vt 0.796875 0.703125 +vt 0.812500 0.453125 +vt 0.812500 0.703125 +vt 0.828125 0.453125 +vt 0.828125 0.703125 +vt 0.578125 0.703125 +vt 0.578125 0.453125 +vt 0.593750 0.453125 +vt 0.593750 0.703125 +vt 0.609375 0.453125 +vt 0.609375 0.703125 +vt 0.625000 0.453125 +vt 0.625000 0.703125 +vt 0.375000 0.300884 +vt 0.406250 0.300884 +vt 0.406250 0.308491 +vt 0.375000 0.308491 +vt 0.375000 0.269634 +vt 0.406250 0.269634 +vt 0.406250 0.277241 +vt 0.375000 0.277241 +vt 0.375000 0.314325 +vt 0.406250 0.314325 +vt 0.406250 0.328125 +vt 0.375000 0.328125 +vt 0.375000 0.285259 +vt 0.406250 0.285259 +vt 0.406250 0.292866 +vt 0.375000 0.292866 +vt 0.375000 0.250000 +vt 0.406250 0.250000 +vt 0.406250 0.263800 +vt 0.375000 0.263800 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.593750 0.593750 +vt 0.593750 0.562500 +vt 0.609375 0.562500 +vt 0.609375 0.593750 +vt 0.625000 0.562500 +vt 0.625000 0.593750 +vt 0.640625 0.562500 +vt 0.640625 0.593750 +vt 0.656250 0.562500 +vt 0.656250 0.593750 +vt 0.671875 0.562500 +vt 0.671875 0.593750 +vt 0.687500 0.562500 +vt 0.687500 0.593750 +vt 0.703125 0.562500 +vt 0.703125 0.593750 +vt 0.718750 0.562500 +vt 0.718750 0.593750 +vt 0.734375 0.562500 +vt 0.734375 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.781250 0.562500 +vt 0.781250 0.593750 +vt 0.796875 0.562500 +vt 0.796875 0.593750 +vt 0.812500 0.562500 +vt 0.812500 0.593750 +vt 0.828125 0.562500 +vt 0.828125 0.593750 +vt 0.578125 0.703125 +vt 0.578125 0.687500 +vt 0.593750 0.687500 +vt 0.593750 0.703125 +vt 0.578125 0.671875 +vt 0.593750 0.671875 +vt 0.328125 0.359375 +vt 0.343750 0.359375 +vt 0.343750 0.421875 +vt 0.328125 0.421875 +vt 0.578125 0.609375 +vt 0.578125 0.593750 +vt 0.593750 0.609375 +vt 0.812500 0.703125 +vt 0.812500 0.687500 +vt 0.828125 0.687500 +vt 0.828125 0.703125 +vt 0.812500 0.671875 +vt 0.828125 0.671875 +vt 0.312500 0.359375 +vt 0.312500 0.421875 +vt 0.812500 0.609375 +vt 0.828125 0.609375 +vt 0.796875 0.703125 +vt 0.796875 0.687500 +vt 0.796875 0.671875 +vt 0.296875 0.359375 +vt 0.296875 0.421875 +vt 0.796875 0.609375 +vt 0.781250 0.703125 +vt 0.781250 0.687500 +vt 0.781250 0.671875 +vt 0.765625 0.609375 +vt 0.781250 0.609375 +vt 0.765625 0.671875 +vt 0.765625 0.703125 +vt 0.765625 0.687500 +vt 0.750000 0.609375 +vt 0.750000 0.671875 +vt 0.750000 0.703125 +vt 0.750000 0.687500 +vt 0.734375 0.609375 +vt 0.734375 0.671875 +vt 0.734375 0.703125 +vt 0.734375 0.687500 +vt 0.718750 0.609375 +vt 0.718750 0.671875 +vt 0.718750 0.703125 +vt 0.718750 0.687500 +vt 0.703125 0.609375 +vt 0.703125 0.671875 +vt 0.703125 0.703125 +vt 0.703125 0.687500 +vt 0.687500 0.609375 +vt 0.687500 0.671875 +vt 0.687500 0.703125 +vt 0.687500 0.687500 +vt 0.671875 0.609375 +vt 0.671875 0.671875 +vt 0.671875 0.703125 +vt 0.671875 0.687500 +vt 0.421875 0.359375 +vt 0.437500 0.359375 +vt 0.437500 0.421875 +vt 0.421875 0.421875 +vt 0.656250 0.703125 +vt 0.656250 0.687500 +vt 0.656250 0.671875 +vt 0.406250 0.359375 +vt 0.406250 0.421875 +vt 0.656250 0.609375 +vt 0.640625 0.703125 +vt 0.640625 0.687500 +vt 0.640625 0.671875 +vt 0.390625 0.359375 +vt 0.390625 0.421875 +vt 0.640625 0.609375 +vt 0.625000 0.703125 +vt 0.625000 0.687500 +vt 0.625000 0.671875 +vt 0.375000 0.359375 +vt 0.375000 0.421875 +vt 0.625000 0.609375 +vt 0.609375 0.703125 +vt 0.609375 0.687500 +vt 0.609375 0.671875 +vt 0.359375 0.421875 +vt 0.359375 0.359375 +vt 0.609375 0.609375 +vt 0.578125 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.593750 0.593750 +vt 0.593750 0.562500 +vt 0.609375 0.562500 +vt 0.609375 0.593750 +vt 0.625000 0.562500 +vt 0.625000 0.593750 +vt 0.640625 0.562500 +vt 0.640625 0.593750 +vt 0.656250 0.562500 +vt 0.656250 0.593750 +vt 0.671875 0.562500 +vt 0.671875 0.593750 +vt 0.687500 0.562500 +vt 0.687500 0.593750 +vt 0.703125 0.562500 +vt 0.703125 0.593750 +vt 0.718750 0.562500 +vt 0.718750 0.593750 +vt 0.734375 0.562500 +vt 0.734375 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.781250 0.562500 +vt 0.781250 0.593750 +vt 0.796875 0.562500 +vt 0.796875 0.593750 +vt 0.812500 0.562500 +vt 0.812500 0.593750 +vt 0.828125 0.562500 +vt 0.828125 0.593750 +vt 0.578125 0.703125 +vt 0.578125 0.687500 +vt 0.593750 0.687500 +vt 0.593750 0.703125 +vt 0.578125 0.671875 +vt 0.593750 0.671875 +vt 0.328125 0.359375 +vt 0.343750 0.359375 +vt 0.343750 0.421875 +vt 0.328125 0.421875 +vt 0.578125 0.609375 +vt 0.578125 0.593750 +vt 0.593750 0.609375 +vt 0.812500 0.703125 +vt 0.812500 0.687500 +vt 0.828125 0.687500 +vt 0.828125 0.703125 +vt 0.812500 0.671875 +vt 0.828125 0.671875 +vt 0.312500 0.359375 +vt 0.312500 0.421875 +vt 0.812500 0.609375 +vt 0.828125 0.609375 +vt 0.796875 0.703125 +vt 0.796875 0.687500 +vt 0.796875 0.671875 +vt 0.296875 0.359375 +vt 0.296875 0.421875 +vt 0.796875 0.609375 +vt 0.781250 0.703125 +vt 0.781250 0.687500 +vt 0.781250 0.671875 +vt 0.765625 0.609375 +vt 0.781250 0.609375 +vt 0.765625 0.671875 +vt 0.765625 0.703125 +vt 0.765625 0.687500 +vt 0.750000 0.609375 +vt 0.750000 0.671875 +vt 0.750000 0.703125 +vt 0.750000 0.687500 +vt 0.734375 0.609375 +vt 0.734375 0.671875 +vt 0.734375 0.703125 +vt 0.734375 0.687500 +vt 0.718750 0.609375 +vt 0.718750 0.671875 +vt 0.718750 0.703125 +vt 0.718750 0.687500 +vt 0.703125 0.609375 +vt 0.703125 0.671875 +vt 0.703125 0.703125 +vt 0.703125 0.687500 +vt 0.687500 0.609375 +vt 0.687500 0.671875 +vt 0.687500 0.703125 +vt 0.687500 0.687500 +vt 0.671875 0.609375 +vt 0.671875 0.671875 +vt 0.671875 0.703125 +vt 0.671875 0.687500 +vt 0.421875 0.359375 +vt 0.437500 0.359375 +vt 0.437500 0.421875 +vt 0.421875 0.421875 +vt 0.656250 0.703125 +vt 0.656250 0.687500 +vt 0.656250 0.671875 +vt 0.406250 0.359375 +vt 0.406250 0.421875 +vt 0.656250 0.609375 +vt 0.640625 0.703125 +vt 0.640625 0.687500 +vt 0.640625 0.671875 +vt 0.390625 0.359375 +vt 0.390625 0.421875 +vt 0.640625 0.609375 +vt 0.625000 0.703125 +vt 0.625000 0.687500 +vt 0.625000 0.671875 +vt 0.375000 0.359375 +vt 0.375000 0.421875 +vt 0.625000 0.609375 +vt 0.609375 0.703125 +vt 0.609375 0.687500 +vt 0.609375 0.671875 +vt 0.359375 0.421875 +vt 0.359375 0.359375 +vt 0.609375 0.609375 +vt 0.578125 0.562500 +vt 2.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 2.000000 0.125000 +vt 0.000000 0.109375 +vt 2.000000 0.109375 +vt 0.000000 0.093750 +vt 2.000000 0.093750 +vt 0.000000 0.078125 +vt 2.000000 0.078125 +vt 0.000000 0.062500 +vt 2.000000 0.062500 +vt 0.000000 0.046875 +vt 2.000000 0.046875 +vt 0.000000 0.031250 +vt 2.000000 0.031250 +vt 0.000000 0.015625 +vt 2.000000 0.015625 +vt 2.000000 0.140625 +vt 0.000000 0.140625 +vt 0.000000 0.125000 +vt 2.000000 0.125000 +vt 0.000000 0.109375 +vt 2.000000 0.109375 +vt 0.000000 0.093750 +vt 2.000000 0.093750 +vt 0.000000 0.078125 +vt 2.000000 0.078125 +vt 0.000000 0.062500 +vt 2.000000 0.062500 +vt 0.000000 0.046875 +vt 2.000000 0.046875 +vt 0.000000 0.031250 +vt 2.000000 0.031250 +vt 0.000000 0.015625 +vt 2.000000 0.015625 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.656250 0.593750 +vt 0.656250 0.625000 +vt 0.625000 0.625000 +vt 0.625000 0.593750 +vt 0.812500 0.593750 +vt 0.812500 0.625000 +vt 0.781250 0.625000 +vt 0.781250 0.593750 +vt 0.750000 0.625000 +vt 0.750000 0.593750 +vt 0.718750 0.625000 +vt 0.718750 0.593750 +vt 0.687500 0.625000 +vt 0.687500 0.593750 +vt 0.375000 0.300884 +vt 0.406250 0.300884 +vt 0.406250 0.308491 +vt 0.375000 0.308491 +vt 0.375000 0.269634 +vt 0.406250 0.269634 +vt 0.406250 0.277241 +vt 0.375000 0.277241 +vt 0.375000 0.314325 +vt 0.406250 0.314325 +vt 0.406250 0.328125 +vt 0.375000 0.328125 +vt 0.375000 0.285259 +vt 0.406250 0.285259 +vt 0.406250 0.292866 +vt 0.375000 0.292866 +vt 0.375000 0.250000 +vt 0.406250 0.250000 +vt 0.406250 0.263800 +vt 0.375000 0.263800 +vt 0.375000 0.300884 +vt 0.406250 0.300884 +vt 0.406250 0.308491 +vt 0.375000 0.308491 +vt 0.375000 0.269634 +vt 0.406250 0.269634 +vt 0.406250 0.277241 +vt 0.375000 0.277241 +vt 0.375000 0.314325 +vt 0.406250 0.314325 +vt 0.406250 0.328125 +vt 0.375000 0.328125 +vt 0.375000 0.285259 +vt 0.406250 0.285259 +vt 0.406250 0.292866 +vt 0.375000 0.292866 +vt 0.375000 0.250000 +vt 0.406250 0.250000 +vt 0.406250 0.263800 +vt 0.375000 0.263800 +vt 0.156250 0.418760 +vt 0.156250 0.390625 +vt 0.171875 0.390625 +vt 0.171875 0.418760 +vt 0.171875 0.390625 +vt 0.156250 0.390625 +vt 0.156250 0.418760 +vt 0.171875 0.418760 +vt 0.028135 0.265625 +vt 0.025021 0.265625 +vt 0.025021 0.281250 +vt 0.028135 0.281250 +vt 0.156250 0.298432 +vt 0.156250 0.299990 +vt 0.171875 0.299990 +vt 0.171875 0.298432 +vt 0.025021 0.265625 +vt 0.025021 0.281250 +vt 0.021854 0.281250 +vt 0.021854 0.265625 +vt 0.021854 0.281250 +vt 0.021854 0.265625 +vt 0.156250 0.298061 +vt 0.156250 0.299248 +vt 0.171875 0.299248 +vt 0.171875 0.298061 +vt 0.137510 0.265625 +vt 0.134396 0.265625 +vt 0.134396 0.281250 +vt 0.137510 0.281250 +vt 0.171875 0.420689 +vt 0.156250 0.420689 +vt 0.156250 0.419502 +vt 0.171875 0.419502 +vt 0.156250 0.420689 +vt 0.171875 0.420688 +vt 0.171875 0.419502 +vt 0.156250 0.419502 +vt 0.028135 0.265625 +vt 0.028135 0.281250 +vt 0.156250 0.299248 +vt 0.171875 0.299248 +vt 0.128115 0.281250 +vt 0.128115 0.265625 +vt 0.131229 0.265625 +vt 0.131229 0.281250 +vt 0.018740 0.265625 +vt 0.018740 0.281250 +vt 0.156250 0.420318 +vt 0.171875 0.420318 +vt 0.128115 0.265625 +vt 0.125000 0.265625 +vt 0.125000 0.281250 +vt 0.128115 0.281250 +vt 0.156250 0.298061 +vt 0.171875 0.298061 +vt 0.131229 0.281250 +vt 0.131229 0.265625 +vt 0.031250 0.265625 +vt 0.031250 0.281250 +vt 0.156250 0.420318 +vt 0.171875 0.420318 +vt 0.018740 0.281250 +vt 0.018740 0.265625 +vt 0.134396 0.281250 +vt 0.134396 0.265625 +vt 0.137510 0.265625 +vt 0.137510 0.281250 +vt 0.171875 0.328125 +vt 0.156250 0.328125 +vt 0.156250 0.298432 +vt 0.156250 0.296875 +vt 0.171875 0.296875 +vt 0.171875 0.298432 +vt 0.156250 0.328125 +vt 0.156250 0.299990 +vt 0.171875 0.299989 +vt 0.171875 0.328125 +vt 0.156250 0.296875 +vt 0.171875 0.296875 +vt 0.015625 0.265625 +vt 0.015625 0.281250 +vt 0.015625 0.281250 +vt 0.015625 0.265625 +vt 0.140625 0.265625 +vt 0.140625 0.281250 +vt 0.156250 0.421875 +vt 0.171875 0.421875 +vt 0.046875 0.906250 +vt 0.046875 0.921875 +vt 0.031250 0.921875 +vt 0.031250 0.906250 +vt 0.046875 0.765625 +vt 0.046875 0.781250 +vt 0.031250 0.781250 +vt 0.031250 0.765625 +vt 0.046875 0.937500 +vt 0.031250 0.937500 +vt 0.046875 0.843750 +vt 0.046875 0.859375 +vt 0.031250 0.859375 +vt 0.031250 0.843750 +vt 0.046875 0.875000 +vt 0.031250 0.875000 +vt 0.046875 0.796875 +vt 0.031250 0.796875 +vt 0.046875 0.953125 +vt 0.031250 0.953125 +vt 0.046875 0.812500 +vt 0.031250 0.812500 +vt 0.046875 0.968750 +vt 0.031250 0.968750 +vt 0.046875 0.890625 +vt 0.031250 0.890625 +vt 0.046875 0.734375 +vt 0.046875 0.750000 +vt 0.031250 0.750000 +vt 0.031250 0.734375 +vt 0.046875 0.828125 +vt 0.031250 0.828125 +vt 0.046875 0.984375 +vt 0.031250 0.984375 +vt 0.015625 0.859375 +vt 0.015625 0.843750 +vt 0.015625 0.750000 +vt 0.015625 0.734375 +vt 0.015625 0.984375 +vt 0.015625 0.968750 +vt 0.015625 0.875000 +vt 0.015625 0.765625 +vt 0.015625 0.890625 +vt 0.015625 0.781250 +vt 0.015625 0.906250 +vt 0.015625 0.796875 +vt 0.015625 0.921875 +vt 0.015625 0.812500 +vt 0.015625 0.937500 +vt 0.015625 0.828125 +vt 0.015625 0.953125 +vt 0.234375 0.906250 +vt 0.250000 0.906250 +vt 0.250000 0.921875 +vt 0.234375 0.921875 +vt 0.234375 0.765625 +vt 0.250000 0.765625 +vt 0.250000 0.781250 +vt 0.234375 0.781250 +vt 0.250000 0.937500 +vt 0.234375 0.937500 +vt 0.234375 0.843750 +vt 0.250000 0.843750 +vt 0.250000 0.859375 +vt 0.234375 0.859375 +vt 0.250000 0.875000 +vt 0.234375 0.875000 +vt 0.250000 0.796875 +vt 0.234375 0.796875 +vt 0.250000 0.953125 +vt 0.234375 0.953125 +vt 0.250000 0.812500 +vt 0.234375 0.812500 +vt 0.250000 0.968750 +vt 0.234375 0.968750 +vt 0.250000 0.890625 +vt 0.234375 0.890625 +vt 0.234375 0.734375 +vt 0.250000 0.734375 +vt 0.250000 0.750000 +vt 0.234375 0.750000 +vt 0.250000 0.828125 +vt 0.234375 0.828125 +vt 0.250000 0.984375 +vt 0.234375 0.984375 +vt 0.265625 0.843750 +vt 0.265625 0.859375 +vt 0.265625 0.734375 +vt 0.265625 0.750000 +vt 0.265625 0.968750 +vt 0.265625 0.984375 +vt 0.265625 0.875000 +vt 0.265625 0.765625 +vt 0.265625 0.890625 +vt 0.265625 0.781250 +vt 0.265625 0.906250 +vt 0.265625 0.796875 +vt 0.265625 0.921875 +vt 0.265625 0.812500 +vt 0.265625 0.937500 +vt 0.265625 0.828125 +vt 0.265625 0.953125 +vt 0.812500 0.562500 +vt 0.812500 0.625000 +vt 0.796875 0.625000 +vt 0.796875 0.562500 +vt 0.781250 0.625000 +vt 0.781250 0.562500 +vt 0.765625 0.625000 +vt 0.765625 0.562500 +vt 0.750000 0.625000 +vt 0.750000 0.562500 +vt 0.734375 0.625000 +vt 0.734375 0.562500 +vt 0.718750 0.625000 +vt 0.718750 0.562500 +vt 0.703125 0.625000 +vt 0.703125 0.562500 +vt 0.687500 0.625000 +vt 0.687500 0.562500 +vt 0.671875 0.625000 +vt 0.671875 0.562500 +vt 0.656250 0.625000 +vt 0.656250 0.562500 +vt 0.640625 0.625000 +vt 0.640625 0.562500 +vt 0.625000 0.625000 +vt 0.625000 0.562500 +vt 0.609375 0.625000 +vt 0.609375 0.562500 +vt 0.593750 0.625000 +vt 0.593750 0.562500 +vt 0.578125 0.625000 +vt 0.578125 0.562500 +vt 0.828125 0.562500 +vt 0.828125 0.625000 +vt 0.656231 0.296840 +vt 0.656231 0.249965 +vt 0.671856 0.249965 +vt 0.671856 0.296840 +vt 0.687481 0.249965 +vt 0.687481 0.296840 +vt 0.703106 0.249965 +vt 0.703106 0.296840 +vt 0.718731 0.249965 +vt 0.718731 0.296840 +vt 0.734356 0.249965 +vt 0.734356 0.296840 +vt 0.749981 0.249965 +vt 0.749981 0.296840 +vt 0.765606 0.249965 +vt 0.640606 0.249965 +vt 0.640606 0.203090 +vt 0.656231 0.203090 +vt 0.656231 0.249965 +vt 0.671856 0.203090 +vt 0.671856 0.249965 +vt 0.687481 0.203090 +vt 0.687481 0.249965 +vt 0.703106 0.203090 +vt 0.703106 0.249965 +vt 0.718731 0.203090 +vt 0.718731 0.249965 +vt 0.734356 0.203090 +vt 0.734356 0.249965 +vt 0.749981 0.203090 +vt 0.749981 0.249965 +vt 0.765606 0.203090 +vt 0.640606 0.296840 +vt 0.640606 0.249965 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.312500 0.234375 +vt 0.406250 0.234375 +vt 0.406250 0.250000 +vt 0.312500 0.250000 +vt 0.406250 0.265625 +vt 0.312500 0.265625 +vt 0.406250 0.281250 +vt 0.312500 0.281250 +vt 0.406250 0.296875 +vt 0.312500 0.296875 +vt 0.406250 0.312500 +vt 0.312500 0.312500 +vt 0.406250 0.328125 +vt 0.312500 0.328125 +vt 0.406250 0.343750 +vt 0.312500 0.343750 +vt 0.406250 0.359375 +vt 0.312500 0.359375 +vt 0.406250 0.375000 +vt 0.312500 0.375000 +vt 0.406250 0.390625 +vt 0.312500 0.390625 +vt 0.406250 0.406250 +vt 0.312500 0.406250 +vt 0.406250 0.421875 +vt 0.312500 0.421875 +vt 0.437500 0.171875 +vt 0.531250 0.171875 +vt 0.531250 0.187500 +vt 0.437500 0.187500 +vt 0.531250 0.203125 +vt 0.437500 0.203125 +vt 0.531250 0.218750 +vt 0.437500 0.218750 +vt 0.531250 0.234375 +vt 0.437500 0.234375 +vt 0.531250 0.250000 +vt 0.437500 0.250000 +vt 0.531250 0.265625 +vt 0.437500 0.265625 +vt 0.531250 0.281250 +vt 0.437500 0.281250 +vt 0.531250 0.296875 +vt 0.437500 0.296875 +vt 0.531250 0.312500 +vt 0.437500 0.312500 +vt 0.531250 0.328125 +vt 0.437500 0.328125 +vt 0.531250 0.343750 +vt 0.437500 0.343750 +vt 0.531250 0.359375 +vt 0.437500 0.359375 +vt 0.531250 0.375000 +vt 0.437500 0.375000 +vt 0.531250 0.390625 +vt 0.437500 0.390625 +vt 0.531250 0.406250 +vt 0.437500 0.406250 +vt 0.531250 0.421875 +vt 0.437500 0.421875 +vt 0.312500 0.171875 +vt 0.406250 0.171875 +vt 0.406250 0.187500 +vt 0.312500 0.187500 +vt 0.406250 0.203125 +vt 0.312500 0.203125 +vt 0.406250 0.218750 +vt 0.312500 0.218750 +vt -1.500000 0.015625 +vt -0.000698 0.015625 +vt -0.000698 0.031250 +vt -1.500000 0.031250 +vt -0.000698 0.046875 +vt -1.500000 0.046875 +vt -0.000698 0.062500 +vt -1.500000 0.062500 +vt -0.000698 0.078125 +vt -1.500000 0.078125 +vt -0.000698 0.093750 +vt -1.500000 0.093750 +vt -0.000698 0.109375 +vt -1.500000 0.109375 +vt -0.000698 0.125000 +vt -1.500000 0.125000 +vt -0.000698 0.140625 +vt -1.500000 0.140625 +vt -1.500000 0.015625 +vt -0.000698 0.015625 +vt -0.000698 0.031250 +vt -1.500000 0.031250 +vt -0.000698 0.046875 +vt -1.500000 0.046875 +vt -0.000698 0.062500 +vt -1.500000 0.062500 +vt -0.000698 0.078125 +vt -1.500000 0.078125 +vt -0.000698 0.093750 +vt -1.500000 0.093750 +vt -0.000698 0.109375 +vt -1.500000 0.109375 +vt -0.000698 0.125000 +vt -1.500000 0.125000 +vt -0.000698 0.140625 +vt -1.500000 0.140625 +vt -1.500000 0.015625 +vt -0.000698 0.015625 +vt -0.000698 0.031250 +vt -1.500000 0.031250 +vt -0.000698 0.046875 +vt -1.500000 0.046875 +vt -0.000698 0.062500 +vt -1.500000 0.062500 +vt -0.000698 0.078125 +vt -1.500000 0.078125 +vt -0.000698 0.093750 +vt -1.500000 0.093750 +vt -0.000698 0.109375 +vt -1.500000 0.109375 +vt -0.000698 0.125000 +vt -1.500000 0.125000 +vt -0.000698 0.140625 +vt -1.500000 0.140625 +vt -1.500000 0.015625 +vt -0.000698 0.015625 +vt -0.000698 0.031250 +vt -1.500000 0.031250 +vt -0.000698 0.046875 +vt -1.500000 0.046875 +vt -0.000698 0.062500 +vt -1.500000 0.062500 +vt -0.000698 0.078125 +vt -1.500000 0.078125 +vt -0.000698 0.093750 +vt -1.500000 0.093750 +vt -0.000698 0.109375 +vt -1.500000 0.109375 +vt -0.000698 0.125000 +vt -1.500000 0.125000 +vt -0.000698 0.140625 +vt -1.500000 0.140625 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.375162 0.505581 +vt 0.393299 0.461795 +vt 0.437085 0.443658 +vt 0.480872 0.461795 +vt 0.499007 0.505581 +vt 0.480872 0.549367 +vt 0.437085 0.567504 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.562500 +vt 0.000000 0.562500 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.687500 +vt 0.000000 0.687500 +vt 1.000000 0.750000 +vt 0.000000 0.750000 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 1.000000 0.125000 +vt 0.000000 0.125000 +vt 1.000000 0.187500 +vt 0.000000 0.187500 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt 1.000000 0.312500 +vt 0.000000 0.312500 +vt 1.000000 0.375000 +vt 0.000000 0.375000 +vt 1.000000 0.437500 +vt 0.000000 0.437500 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 1.000000 0.562500 +vt 0.000000 0.562500 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.687500 +vt 0.000000 0.687500 +vt 1.000000 0.750000 +vt 0.000000 0.750000 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 1.000000 0.125000 +vt 0.000000 0.125000 +vt 1.000000 0.187500 +vt 0.000000 0.187500 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt 1.000000 0.312500 +vt 0.000000 0.312500 +vt 1.000000 0.375000 +vt 0.000000 0.375000 +vt 1.000000 0.437500 +vt 0.000000 0.437500 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.9914 0.1305 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.7934 0.6088 +vn 0.0000 -0.6088 0.7933 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 -0.1305 0.9914 +vn 0.0000 0.1305 0.9914 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.6088 0.7934 +vn 0.0000 0.7934 0.6088 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9914 0.1305 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.6088 0.7934 +vn 0.0000 0.7933 0.6088 +vn 0.0000 -0.6931 -0.7208 +vn -1.0000 0.0000 0.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 -0.0000 0.7071 +vn -0.7933 0.0000 0.6088 +vn 0.7071 0.0000 -0.7071 +vn -0.1305 -0.0000 0.9914 +vn -0.9914 0.0000 0.1305 +vn -0.9239 0.0000 0.3827 +vn -0.9914 0.0000 -0.1305 +vn -0.9239 0.0000 -0.3827 +vn -0.7934 0.0000 -0.6088 +vn -0.6088 0.0000 -0.7934 +vn -0.3827 0.0000 -0.9239 +vn -0.1305 0.0000 -0.9914 +vn -0.7071 0.0000 -0.7071 +vn -0.9692 -0.0000 0.2464 +vn -0.3827 -0.0000 0.9239 +vn -0.6088 -0.0000 0.7934 +vn -0.7071 0.7071 -0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 -0.0000 +vn 0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0071 +vn -0.7071 -0.5000 0.5000 +vn 1.0000 0.0017 -0.0047 +vn 0.7071 -0.5000 -0.5000 +vn -1.0000 0.0017 0.0047 +vn -1.0000 0.0000 -0.0057 +vn 0.0000 0.0017 1.0000 +vn 0.2588 0.0000 -0.9659 +vn 0.9659 0.0000 -0.2588 +vn 0.2588 -0.0000 0.9659 +vn 0.9659 -0.0000 0.2588 +vn -0.7934 0.0000 0.6088 +vn -0.1306 0.0000 -0.9914 +vn 0.0280 -0.0000 -0.9996 +vn 0.8954 0.0000 0.4453 +vn 0.0941 0.0000 0.9956 +vn 0.9997 -0.0000 0.0230 +vn -0.7140 0.0000 0.7001 +vn -0.8886 -0.0000 -0.4587 +vn 0.0112 0.0000 0.9999 +vn 0.9229 0.0000 0.3849 +vn -0.9982 0.0000 -0.0593 +vn -0.0170 0.0000 0.9999 +vn -0.8511 0.0000 0.5250 +vn 0.5592 0.0000 0.8290 +vn 0.5194 0.0000 0.8545 +vn -0.7336 0.0000 0.6796 +vn 0.5931 0.0000 0.8051 +vn -0.3434 0.0000 0.9392 +vn -0.9366 0.0000 0.3505 +vn 0.6657 0.7462 0.0000 +vn -0.6657 0.7462 0.0000 +vn -0.6657 0.6894 0.2855 +vn 0.6657 0.6894 0.2856 +vn -0.6657 0.5276 0.5276 +vn 0.6657 0.5276 0.5276 +vn -0.6657 0.2856 0.6894 +vn 0.6657 0.2855 0.6894 +vn -0.6657 0.0000 0.7462 +vn 0.6657 0.0000 0.7462 +vn -0.6657 -0.2856 0.6894 +vn 0.6657 -0.2856 0.6894 +vn -0.6657 -0.5276 0.5276 +vn 0.6657 -0.5276 0.5276 +vn -0.6657 -0.6894 0.2856 +vn 0.6657 -0.6894 0.2855 +vn -0.6657 -0.7462 0.0000 +vn 0.6657 -0.7462 0.0000 +vn -0.6657 -0.6894 -0.2856 +vn 0.6657 -0.6894 -0.2855 +vn -0.6657 -0.5276 -0.5276 +vn 0.6657 -0.5276 -0.5276 +vn -0.6657 -0.2855 -0.6894 +vn 0.6657 -0.2855 -0.6894 +vn -0.6657 0.0000 -0.7462 +vn 0.6657 0.0000 -0.7462 +vn -0.6657 0.2856 -0.6894 +vn 0.6657 0.2856 -0.6894 +vn -0.6657 0.5276 -0.5276 +vn 0.6657 0.5276 -0.5276 +vn -0.6657 0.6894 -0.2855 +vn 0.6657 0.6894 -0.2855 +vn -0.7462 0.0000 -0.6657 +vn -0.7462 0.0000 0.6657 +vn -0.6894 0.2855 0.6657 +vn -0.6894 0.2856 -0.6657 +vn -0.5276 0.5276 0.6657 +vn -0.5276 0.5276 -0.6657 +vn -0.2855 0.6894 0.6657 +vn -0.2855 0.6894 -0.6657 +vn 0.0000 0.7462 0.6657 +vn 0.0000 0.7462 -0.6657 +vn 0.2855 0.6894 0.6657 +vn 0.2855 0.6894 -0.6657 +vn 0.5276 0.5276 0.6657 +vn 0.5276 0.5276 -0.6657 +vn 0.6894 0.2855 0.6657 +vn 0.6894 0.2855 -0.6657 +vn 0.7462 0.0000 0.6657 +vn 0.7462 0.0000 -0.6657 +vn 0.6894 -0.2856 0.6657 +vn 0.6894 -0.2855 -0.6657 +vn 0.5276 -0.5276 0.6657 +vn 0.5276 -0.5276 -0.6657 +vn 0.2855 -0.6894 0.6657 +vn 0.2855 -0.6894 -0.6657 +vn 0.0000 -0.7462 0.6657 +vn 0.0000 -0.7462 -0.6657 +vn -0.2855 -0.6894 0.6657 +vn -0.2856 -0.6894 -0.6657 +vn -0.5276 -0.5276 0.6657 +vn -0.5276 -0.5276 -0.6657 +vn -0.6894 -0.2856 0.6657 +vn -0.6894 -0.2855 -0.6657 +vn 0.3827 0.9239 0.0000 +vn 0.9239 0.3827 0.0000 +vn 0.9239 -0.3827 0.0000 +vn 0.2856 -0.6894 0.6657 +vn 0.3827 -0.9239 0.0000 +vn -0.3827 -0.9239 0.0000 +vn -0.6894 -0.2855 0.6657 +vn -0.9239 -0.3827 0.0000 +vn -0.6894 0.2856 0.6657 +vn -0.9239 0.3827 0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.6657 -0.4145 -0.6204 +vn 0.6657 -0.4146 -0.6204 +vn 0.6657 -0.6204 -0.4146 +vn -0.6657 -0.6204 -0.4146 +vn -0.6657 0.6204 -0.4146 +vn 0.6657 0.6204 -0.4146 +vn 0.6657 0.4146 -0.6204 +vn -0.6657 0.4146 -0.6204 +vn -0.6657 -0.7318 -0.1456 +vn 0.6657 -0.7319 -0.1456 +vn -0.6657 0.1456 -0.7318 +vn 0.6657 0.1456 -0.7318 +vn 0.6657 -0.1456 -0.7319 +vn -0.6657 -0.1455 -0.7319 +vn 0.6657 0.7318 -0.1456 +vn -0.6657 0.7319 -0.1456 +vn -0.7462 0.6657 0.0000 +vn -0.7462 -0.6657 0.0000 +vn -0.6894 -0.6657 0.2856 +vn -0.6894 0.6657 0.2856 +vn -0.5276 -0.6657 0.5276 +vn -0.5276 0.6657 0.5276 +vn -0.2856 -0.6657 0.6894 +vn -0.2856 0.6657 0.6894 +vn 0.0000 -0.6657 0.7462 +vn 0.0000 0.6657 0.7462 +vn 0.2856 -0.6657 0.6894 +vn 0.2856 0.6657 0.6894 +vn 0.5276 -0.6657 0.5276 +vn 0.5276 0.6657 0.5276 +vn 0.6894 -0.6657 0.2856 +vn 0.6894 0.6657 0.2856 +vn 0.7462 -0.6657 0.0000 +vn 0.7462 0.6657 0.0000 +vn 0.6894 -0.6657 -0.2856 +vn 0.6894 0.6657 -0.2856 +vn 0.5276 -0.6657 -0.5276 +vn 0.5276 0.6657 -0.5276 +vn 0.2856 -0.6657 -0.6894 +vn 0.2856 0.6657 -0.6894 +vn 0.0000 -0.6657 -0.7462 +vn 0.0000 0.6657 -0.7462 +vn -0.2856 -0.6657 -0.6894 +vn -0.2856 0.6657 -0.6894 +vn -0.5276 -0.6657 -0.5276 +vn -0.5276 0.6657 -0.5276 +vn -0.6894 -0.6657 -0.2855 +vn -0.6894 0.6657 -0.2855 +vn -0.6657 -0.6894 0.2855 +vn 0.6657 -0.2855 0.6894 +vn -0.6657 -0.2855 0.6894 +vn -0.6657 0.2855 0.6894 +vn 0.6657 0.6894 0.2855 +vn -0.6657 0.6894 0.2856 +vn 0.6657 0.2855 -0.6894 +vn -0.6657 0.2855 -0.6894 +vn 0.6657 -0.2856 -0.6894 +vn -0.6657 -0.6894 -0.2855 +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.3826 0.0000 -0.9239 +vn -0.6894 -0.6657 0.2855 +vn -0.6894 0.6657 0.2855 +vn -0.2855 -0.6657 0.6894 +vn -0.2855 0.6657 0.6894 +vn 0.2855 -0.6657 0.6894 +vn 0.2855 0.6657 0.6894 +vn 0.6894 -0.6657 0.2855 +vn 0.6894 -0.6657 -0.2855 +vn 0.6894 0.6657 -0.2855 +vn 0.2855 -0.6657 -0.6894 +vn 0.2855 0.6657 -0.6894 +vn -0.2855 -0.6657 -0.6894 +vn -0.2855 0.6657 -0.6894 +vn 0.0000 -0.6100 0.7924 +vn 0.6862 -0.6100 0.3962 +vn 0.8660 0.0000 0.5000 +vn 0.6862 -0.6100 -0.3962 +vn 0.8660 0.0000 -0.5000 +vn 0.0000 -0.6100 -0.7924 +vn -0.6862 -0.6100 -0.3962 +vn -0.8660 0.0000 -0.5000 +vn -0.6862 -0.6100 0.3962 +vn -0.8660 0.0000 0.5000 +vn 0.0000 0.6100 0.7924 +vn -0.6862 0.6100 0.3962 +vn -0.6862 0.6100 -0.3962 +vn 0.0000 0.6100 -0.7924 +vn 0.6862 0.6100 -0.3962 +vn 0.6862 0.6100 0.3962 +vn -0.6100 0.0000 0.7924 +vn -0.6100 -0.6862 0.3962 +vn 0.0000 -0.8660 0.5000 +vn -0.6100 -0.6862 -0.3962 +vn 0.0000 -0.8660 -0.5000 +vn -0.6100 0.0000 -0.7924 +vn -0.6100 0.6862 -0.3962 +vn 0.0000 0.8660 -0.5000 +vn -0.6100 0.6862 0.3962 +vn 0.0000 0.8660 0.5000 +vn 0.6100 0.0000 0.7924 +vn 0.6100 0.6862 0.3962 +vn 0.6100 0.6862 -0.3962 +vn 0.6100 0.0000 -0.7924 +vn 0.6100 -0.6862 -0.3962 +vn 0.6100 -0.6862 0.3962 +vn 0.2856 -0.6894 -0.6657 +vn 0.6657 -0.1455 -0.7319 +vn -0.7902 0.6128 0.0000 +vn -0.7300 0.6128 0.3024 +vn -0.5587 0.6128 0.5587 +vn -0.3024 0.6128 0.7300 +vn 0.0000 0.6128 0.7902 +vn 0.3024 0.6128 0.7300 +vn 0.5587 0.6128 0.5587 +vn 0.7300 0.6128 0.3024 +vn 0.7902 0.6128 0.0000 +vn 0.7300 0.6128 -0.3024 +vn 0.5587 0.6128 -0.5587 +vn 0.3024 0.6128 -0.7300 +vn 0.0000 0.6128 -0.7902 +vn -0.3024 0.6128 -0.7300 +vn -0.5587 0.6128 -0.5587 +vn -0.7300 0.6128 -0.3024 +vn -0.7300 -0.6128 -0.3024 +vn -0.7902 -0.6128 0.0000 +vn -0.6660 -0.6930 -0.2759 +vn -0.7209 -0.6930 0.0000 +vn -0.5098 0.6930 -0.5098 +vn -0.6660 0.6930 -0.2759 +vn -0.5098 -0.6930 -0.5098 +vn -0.7209 0.6930 0.0000 +vn -0.5587 -0.6128 -0.5587 +vn -0.2759 0.6930 -0.6661 +vn -0.2759 -0.6930 -0.6660 +vn -0.3024 -0.6128 -0.7300 +vn 0.0000 0.6930 -0.7209 +vn 0.0000 -0.6930 -0.7209 +vn 0.0000 -0.6128 -0.7902 +vn 0.2759 0.6930 -0.6661 +vn 0.2759 -0.6930 -0.6660 +vn 0.3024 -0.6128 -0.7300 +vn 0.5098 0.6930 -0.5098 +vn 0.5098 -0.6930 -0.5098 +vn 0.5587 -0.6128 -0.5587 +vn 0.6660 0.6930 -0.2759 +vn 0.6660 -0.6930 -0.2759 +vn 0.7300 -0.6128 -0.3024 +vn 0.7209 0.6930 0.0000 +vn 0.7209 -0.6930 0.0000 +vn 0.7902 -0.6128 0.0000 +vn 0.6660 0.6930 0.2759 +vn 0.6661 -0.6930 0.2759 +vn 0.6894 0.6657 0.2855 +vn 0.7300 -0.6128 0.3024 +vn 0.5098 0.6930 0.5098 +vn 0.5098 -0.6930 0.5098 +vn 0.5588 -0.6128 0.5587 +vn 0.2759 0.6930 0.6660 +vn 0.2759 -0.6930 0.6661 +vn 0.3024 -0.6128 0.7300 +vn 0.0000 0.6930 0.7209 +vn 0.0000 -0.6930 0.7209 +vn 0.0000 -0.6128 0.7902 +vn -0.2759 0.6930 0.6660 +vn -0.2759 -0.6930 0.6661 +vn -0.3024 -0.6128 0.7300 +vn -0.5098 0.6930 0.5098 +vn -0.5098 -0.6930 0.5098 +vn -0.5587 -0.6128 0.5587 +vn -0.6660 0.6930 0.2759 +vn -0.6661 -0.6930 0.2759 +vn -0.7300 -0.6128 0.3024 +vn 0.6128 0.7902 0.0000 +vn 0.6128 0.7300 0.3024 +vn 0.6128 0.5587 0.5587 +vn 0.6128 0.3024 0.7300 +vn 0.6128 0.0000 0.7902 +vn 0.6128 -0.3024 0.7300 +vn 0.6128 -0.5587 0.5587 +vn 0.6128 -0.7300 0.3024 +vn 0.6128 -0.7902 0.0000 +vn 0.6128 -0.7300 -0.3024 +vn 0.6128 -0.5587 -0.5587 +vn 0.6128 -0.3024 -0.7300 +vn 0.6128 0.0000 -0.7902 +vn 0.6128 0.3024 -0.7300 +vn 0.6128 0.5587 -0.5587 +vn 0.6128 0.7300 -0.3024 +vn -0.6128 0.7300 -0.3024 +vn -0.6128 0.7902 0.0000 +vn -0.6930 0.6660 -0.2759 +vn -0.6930 0.7209 0.0000 +vn 0.6930 0.5098 -0.5098 +vn 0.6930 0.6660 -0.2759 +vn -0.6930 0.5098 -0.5098 +vn 0.6930 0.7209 0.0000 +vn -0.6128 0.5587 -0.5587 +vn 0.6930 0.2759 -0.6661 +vn -0.6930 0.2759 -0.6660 +vn -0.6128 0.3024 -0.7300 +vn 0.6930 0.0000 -0.7209 +vn -0.6930 0.0000 -0.7209 +vn -0.6128 0.0000 -0.7902 +vn 0.6930 -0.2759 -0.6661 +vn -0.6930 -0.2759 -0.6660 +vn -0.6128 -0.3024 -0.7300 +vn 0.6930 -0.5098 -0.5098 +vn -0.6930 -0.5098 -0.5098 +vn -0.6128 -0.5587 -0.5587 +vn 0.6930 -0.6660 -0.2759 +vn -0.6930 -0.6660 -0.2759 +vn -0.6128 -0.7300 -0.3024 +vn 0.6930 -0.7209 0.0000 +vn -0.6930 -0.7209 0.0000 +vn -0.6128 -0.7902 0.0000 +vn 0.6930 -0.6660 0.2759 +vn -0.6930 -0.6661 0.2759 +vn -0.6128 -0.7300 0.3024 +vn 0.6930 -0.5098 0.5098 +vn -0.6930 -0.5098 0.5098 +vn -0.6128 -0.5588 0.5587 +vn 0.6930 -0.2759 0.6660 +vn -0.6930 -0.2759 0.6661 +vn -0.6128 -0.3024 0.7300 +vn 0.6930 0.0000 0.7209 +vn -0.6930 0.0000 0.7209 +vn -0.6128 0.0000 0.7902 +vn 0.6930 0.2759 0.6660 +vn -0.6930 0.2759 0.6661 +vn -0.6128 0.3024 0.7300 +vn 0.6930 0.5098 0.5098 +vn -0.6930 0.5098 0.5098 +vn -0.6128 0.5587 0.5587 +vn 0.6930 0.6660 0.2759 +vn -0.6930 0.6661 0.2759 +vn -0.6128 0.7300 0.3024 +vn 0.6657 0.2856 0.6894 +vn 0.6657 0.6894 -0.2856 +vn 0.6657 0.1456 -0.7319 +vn 0.0958 0.7280 -0.6789 +vn 0.3015 0.3015 -0.9045 +vn 0.1305 0.9914 0.0000 +vn 0.3015 -0.3015 -0.9045 +vn 0.0958 -0.7280 -0.6789 +vn 0.1305 -0.9914 0.0000 +vn -0.6557 0.3786 -0.6532 +vn -0.7280 0.0958 -0.6789 +vn -0.9914 0.1305 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.3786 -0.6557 -0.6532 +vn -0.0958 -0.7280 -0.6789 +vn -0.1305 -0.9914 0.0000 +vn -0.5000 -0.8660 0.0000 +vn 0.7280 0.0958 -0.6789 +vn 0.9914 0.1305 0.0000 +vn 0.9914 -0.1305 0.0000 +vn 0.7280 -0.0958 -0.6789 +vn -0.9914 -0.1305 0.0000 +vn -0.7280 -0.0958 -0.6789 +vn 0.5000 0.8660 0.0000 +vn 0.3786 0.6557 -0.6532 +vn 0.3786 -0.6557 -0.6532 +vn 0.5000 -0.8660 0.0000 +vn 0.6557 0.3786 -0.6532 +vn 0.8660 0.5000 0.0000 +vn -0.0958 0.7280 -0.6789 +vn -0.1305 0.9914 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.6557 -0.3786 -0.6532 +vn -0.6557 -0.3786 -0.6532 +vn -0.8660 -0.5000 0.0000 +vn -0.3786 0.6557 -0.6532 +vn -0.5000 0.8660 0.0000 +vn -0.3015 -0.3015 -0.9045 +vn -0.3015 0.3015 -0.9045 +vn 0.3507 -0.3999 -0.8468 +vn 0.0000 -0.3999 -0.9165 +vn 0.0000 -0.3663 -0.9305 +vn 0.3561 -0.3663 -0.8596 +vn -0.6481 -0.3999 0.6481 +vn -0.3507 -0.3999 0.8468 +vn -0.3561 -0.3663 0.8596 +vn -0.6579 -0.3663 0.6579 +vn -0.3507 -0.3999 -0.8468 +vn -0.3561 -0.3663 -0.8596 +vn 0.8468 -0.3999 0.3507 +vn 0.9165 -0.3999 0.0000 +vn 0.9305 -0.3663 0.0000 +vn 0.8596 -0.3663 0.3561 +vn 0.8468 -0.3999 -0.3507 +vn 0.8596 -0.3663 -0.3561 +vn 0.0000 -0.3999 0.9165 +vn 0.0000 -0.3663 0.9305 +vn -0.6481 -0.3999 -0.6481 +vn -0.6579 -0.3663 -0.6579 +vn 0.3507 -0.3999 0.8468 +vn 0.3561 -0.3663 0.8596 +vn -0.8468 -0.3999 -0.3507 +vn -0.8596 -0.3663 -0.3561 +vn 0.6481 -0.3999 -0.6481 +vn 0.6579 -0.3663 -0.6579 +vn -0.9165 -0.3999 0.0000 +vn -0.8468 -0.3999 0.3507 +vn -0.8596 -0.3663 0.3561 +vn -0.9305 -0.3663 0.0000 +vn 0.6481 -0.3999 0.6481 +vn 0.6579 -0.3663 0.6579 +vn -0.6894 0.6657 -0.2856 +vn 0.3507 0.3999 -0.8468 +vn 0.3561 0.3663 -0.8596 +vn 0.0000 0.3663 -0.9305 +vn 0.0000 0.3999 -0.9165 +vn -0.6481 0.3999 0.6481 +vn -0.6579 0.3663 0.6579 +vn -0.3561 0.3663 0.8596 +vn -0.3507 0.3999 0.8468 +vn -0.3561 0.3663 -0.8596 +vn -0.3507 0.3999 -0.8468 +vn 0.8468 0.3999 0.3507 +vn 0.8596 0.3663 0.3561 +vn 0.9305 0.3663 0.0000 +vn 0.9165 0.3999 0.0000 +vn 0.8596 0.3663 -0.3561 +vn 0.8468 0.3999 -0.3507 +vn 0.0000 0.3663 0.9305 +vn 0.0000 0.3999 0.9165 +vn -0.6579 0.3663 -0.6579 +vn -0.6481 0.3999 -0.6481 +vn 0.3561 0.3663 0.8596 +vn 0.3507 0.3999 0.8468 +vn -0.8596 0.3663 -0.3561 +vn -0.8468 0.3999 -0.3507 +vn 0.6579 0.3663 -0.6579 +vn 0.6481 0.3999 -0.6481 +vn -0.9165 0.3999 0.0000 +vn -0.9305 0.3663 0.0000 +vn -0.8596 0.3663 0.3561 +vn -0.8468 0.3999 0.3507 +vn 0.6579 0.3663 0.6579 +vn 0.6481 0.3999 0.6481 +vn -0.8320 0.0000 -0.5547 +vn -0.7687 0.3184 -0.5547 +vn -0.5883 0.5883 -0.5547 +vn -0.3184 0.7687 -0.5547 +vn 0.0000 0.8320 -0.5547 +vn 0.3184 0.7687 -0.5547 +vn 0.5883 0.5883 -0.5547 +vn 0.7687 0.3184 -0.5547 +vn 0.8320 0.0000 -0.5547 +vn 0.7687 -0.3184 -0.5547 +vn 0.5883 -0.5883 -0.5547 +vn 0.3184 -0.7687 -0.5547 +vn 0.0000 -0.8320 -0.5547 +vn -0.3184 -0.7687 -0.5547 +vn -0.5883 -0.5883 -0.5547 +vn -0.7687 -0.3184 -0.5547 +vn 0.7139 0.6857 -0.1420 +vn 0.7139 -0.6857 -0.1420 +vn 0.6725 -0.6857 -0.2785 +vn 0.6725 0.6857 -0.2785 +vn -0.2785 0.6857 -0.6725 +vn -0.2785 -0.6857 -0.6725 +vn -0.4044 -0.6857 -0.6052 +vn -0.4044 0.6857 -0.6052 +vn -0.5147 0.6857 0.5147 +vn -0.5147 -0.6857 0.5147 +vn -0.4044 -0.6857 0.6052 +vn -0.4044 0.6857 0.6052 +vn 0.6052 0.6857 0.4044 +vn 0.6052 -0.6857 0.4044 +vn 0.6725 -0.6857 0.2785 +vn 0.6725 0.6857 0.2785 +vn 0.2785 0.6857 -0.6725 +vn 0.2785 -0.6857 -0.6725 +vn 0.1420 -0.6857 -0.7139 +vn 0.1420 0.6857 -0.7139 +vn -0.7279 0.6857 0.0000 +vn -0.7279 -0.6857 0.0000 +vn -0.7139 -0.6857 0.1420 +vn -0.7139 0.6857 0.1420 +vn -0.7139 0.6857 -0.1420 +vn -0.7139 -0.6857 -0.1420 +vn 0.1420 0.6857 0.7139 +vn 0.1420 -0.6857 0.7139 +vn 0.2785 -0.6857 0.6725 +vn 0.2785 0.6857 0.6725 +vn 0.6052 -0.6857 -0.4044 +vn 0.6052 0.6857 -0.4044 +vn -0.5147 -0.6857 -0.5147 +vn -0.5147 0.6857 -0.5147 +vn -0.2785 -0.6857 0.6725 +vn -0.2785 0.6857 0.6725 +vn 0.7139 -0.6857 0.1420 +vn 0.7139 0.6857 0.1420 +vn 0.0000 -0.6857 -0.7279 +vn 0.0000 0.6857 -0.7279 +vn -0.6725 -0.6857 0.2785 +vn -0.6725 0.6857 0.2785 +vn 0.4044 -0.6857 0.6052 +vn 0.4044 0.6857 0.6052 +vn 0.5147 -0.6857 -0.5147 +vn 0.5147 0.6857 -0.5147 +vn -0.6052 -0.6857 -0.4044 +vn -0.6052 0.6857 -0.4044 +vn -0.1420 -0.6857 0.7139 +vn -0.1420 0.6857 0.7139 +vn 0.7279 -0.6857 0.0000 +vn 0.7279 0.6857 0.0000 +vn -0.1420 -0.6857 -0.7139 +vn -0.1420 0.6857 -0.7139 +vn -0.6052 -0.6857 0.4044 +vn -0.6052 0.6857 0.4044 +vn 0.5147 -0.6857 0.5147 +vn 0.5147 0.6857 0.5147 +vn 0.4044 -0.6857 -0.6052 +vn 0.4044 0.6857 -0.6052 +vn -0.6725 -0.6857 -0.2785 +vn -0.6725 0.6857 -0.2785 +vn 0.0000 -0.6857 0.7279 +vn 0.0000 0.6857 0.7279 +vn 0.0000 -0.7299 -0.6836 +vn 0.0000 0.7298 -0.6836 +vn 0.0000 -0.7298 0.6836 +vn 0.0000 0.7298 0.6836 +vn 0.6894 0.2856 0.6657 +vn -0.2856 -0.6894 0.6657 +vn 0.0046 0.0000 -1.0000 +vn 0.0096 0.0000 -1.0000 +vn 0.0152 0.0000 -0.9999 +vn 0.0216 0.0000 -0.9998 +vn 0.0290 -0.0000 -0.9996 +vn 0.0375 0.0000 -0.9993 +vn 0.0472 0.0000 -0.9989 +vn 0.0586 0.0000 -0.9983 +vn 0.0715 0.0000 -0.9974 +vn 0.0857 0.0000 -0.9963 +vn 0.1019 -0.0000 -0.9948 +vn 0.1209 0.0000 -0.9927 +vn 0.1424 0.0000 -0.9898 +vn 0.1668 0.0000 -0.9860 +vn 0.1966 0.0000 -0.9805 +vn 0.2314 0.0000 -0.9729 +vn 0.2712 0.0000 -0.9625 +vn 0.3178 -0.0000 -0.9482 +vn 0.3766 0.0000 -0.9264 +vn 0.4456 0.0000 -0.8953 +vn 0.5242 0.0000 -0.8516 +vn 0.6184 0.0000 -0.7859 +vn 0.7196 0.0000 -0.6944 +vn 0.8171 0.0000 -0.5765 +vn 0.9027 -0.0000 -0.4302 +vn 0.9616 0.0000 -0.2745 +vn 0.9924 0.0000 -0.1232 +vn -0.9808 0.0000 -0.1951 +vn -0.8314 0.0000 -0.5556 +vn -0.5556 0.0000 -0.8314 +vn -0.1951 0.0000 -0.9808 +vn 0.1951 0.0000 -0.9808 +vn 0.5556 0.0000 -0.8314 +vn 0.8314 0.0000 -0.5556 +vn 0.9808 0.0000 -0.1951 +vn 0.9808 0.0000 0.1951 +vn 0.8314 0.0000 0.5556 +vn 0.5556 0.0000 0.8314 +vn 0.1951 0.0000 0.9808 +vn -0.1951 0.0000 0.9808 +vn -0.5556 0.0000 0.8314 +vn -0.8314 0.0000 0.5556 +vn -0.9808 0.0000 0.1951 +vn 0.0013 0.9266 -0.3761 +vn -0.6534 0.6547 -0.3798 +vn -0.5499 0.5492 0.6292 +vn -0.0007 0.7764 0.6302 +vn 0.9287 0.0000 -0.3708 +vn 0.6569 0.6556 -0.3723 +vn 0.5480 0.5488 0.6313 +vn 0.7752 0.0000 0.6317 +vn 0.6569 -0.6556 -0.3723 +vn 0.5480 -0.5488 0.6313 +vn -0.6534 -0.6547 -0.3798 +vn 0.0013 -0.9266 -0.3761 +vn -0.0007 -0.7764 0.6302 +vn -0.5499 -0.5492 0.6292 +vn -0.9244 0.0000 -0.3814 +vn -0.7776 0.0000 0.6288 +vn 0.0032 0.9266 -0.3761 +vn -0.6517 0.6549 -0.3824 +vn 0.9302 0.0000 -0.3671 +vn 0.6586 0.6554 -0.3697 +vn 0.6586 -0.6554 -0.3697 +vn -0.6517 -0.6549 -0.3824 +vn 0.0032 -0.9266 -0.3761 +vn -0.9229 0.0000 -0.3851 +vn 0.0051 0.9266 -0.3760 +vn -0.6498 0.6550 -0.3856 +vn 0.9320 0.0000 -0.3625 +vn 0.6604 0.6554 -0.3665 +vn 0.6604 -0.6554 -0.3665 +vn -0.6498 -0.6550 -0.3856 +vn 0.0051 -0.9266 -0.3760 +vn -0.9210 0.0000 -0.3896 +vn 0.0073 0.9266 -0.3760 +vn -0.6474 0.6549 -0.3898 +vn 0.9343 0.0000 -0.3565 +vn 0.6626 0.6555 -0.3622 +vn 0.6626 -0.6555 -0.3622 +vn -0.6474 -0.6549 -0.3898 +vn 0.0073 -0.9266 -0.3760 +vn -0.9184 0.0000 -0.3956 +vn 0.0100 0.9266 -0.3760 +vn -0.6445 0.6548 -0.3948 +vn 0.9370 0.0000 -0.3493 +vn 0.6653 0.6556 -0.3571 +vn 0.6653 -0.6556 -0.3571 +vn -0.6445 -0.6548 -0.3948 +vn 0.0100 -0.9266 -0.3760 +vn -0.9154 0.0000 -0.4026 +vn 0.0131 0.9266 -0.3759 +vn -0.6412 0.6547 -0.4003 +vn 0.9400 0.0000 -0.3412 +vn 0.6683 0.6557 -0.3513 +vn 0.6683 -0.6557 -0.3513 +vn -0.6412 -0.6547 -0.4003 +vn 0.0131 -0.9266 -0.3759 +vn -0.9119 0.0000 -0.4105 +vn 0.0163 0.9266 -0.3757 +vn -0.6371 0.6542 -0.4075 +vn 0.9437 0.0000 -0.3307 +vn 0.6717 0.6561 -0.3439 +vn 0.6717 -0.6561 -0.3439 +vn -0.6371 -0.6542 -0.4075 +vn 0.0163 -0.9266 -0.3757 +vn -0.9072 0.0000 -0.4206 +vn 0.0208 0.9266 -0.3755 +vn -0.6323 0.6543 -0.4148 +vn 0.9475 0.0000 -0.3197 +vn 0.6757 0.6561 -0.3361 +vn 0.6757 -0.6561 -0.3361 +vn -0.6323 -0.6543 -0.4148 +vn 0.0208 -0.9266 -0.3755 +vn -0.9023 0.0000 -0.4311 +vn 0.0256 0.9266 -0.3752 +vn -0.6273 0.6547 -0.4217 +vn 0.9509 0.0000 -0.3093 +vn 0.6797 0.6557 -0.3287 +vn 0.6797 -0.6557 -0.3287 +vn -0.6273 -0.6547 -0.4217 +vn 0.0257 -0.9266 -0.3752 +vn -0.8975 0.0000 -0.4409 +vn 0.0305 0.9266 -0.3748 +vn -0.6218 0.6546 -0.4299 +vn 0.9549 0.0000 -0.2968 +vn 0.6840 0.6557 -0.3197 +vn 0.6840 -0.6557 -0.3197 +vn -0.6218 -0.6546 -0.4299 +vn 0.0305 -0.9266 -0.3748 +vn -0.8916 0.0000 -0.4527 +vn 0.0360 0.9266 -0.3744 +vn -0.6146 0.6540 -0.4410 +vn 0.9600 0.0000 -0.2798 +vn 0.6889 0.6563 -0.3076 +vn 0.6889 -0.6563 -0.3076 +vn -0.6146 -0.6540 -0.4410 +vn 0.0360 -0.9266 -0.3744 +vn -0.8834 0.0000 -0.4685 +vn 0.0434 0.9266 -0.3736 +vn -0.6059 0.6542 -0.4527 +vn 0.9652 0.0000 -0.2613 +vn 0.6948 0.6562 -0.2943 +vn 0.6948 -0.6562 -0.2943 +vn -0.6059 -0.6542 -0.4527 +vn 0.0434 -0.9266 -0.3736 +vn -0.8743 0.0000 -0.4853 +vn 0.0514 0.9266 -0.3725 +vn -0.5967 0.6545 -0.4642 +vn 0.9701 0.0000 -0.2427 +vn 0.7007 0.6558 -0.2807 +vn 0.7007 -0.6558 -0.2807 +vn -0.5967 -0.6545 -0.4642 +vn 0.0514 -0.9266 -0.3725 +vn -0.8648 0.0000 -0.5022 +vn 0.0586 0.9265 -0.3715 +vn -0.5849 0.6529 -0.4812 +vn 0.9766 0.0000 -0.2151 +vn 0.7067 0.6575 -0.2611 +vn 0.7067 -0.6575 -0.2611 +vn -0.5849 -0.6529 -0.4812 +vn 0.0586 -0.9265 -0.3715 +vn -0.8502 0.0000 -0.5265 +vn 0.0705 0.9265 -0.3695 +vn -0.5689 0.6526 -0.5004 +vn 0.9832 0.0000 -0.1825 +vn 0.7148 0.6577 -0.2375 +vn 0.7148 -0.6577 -0.2375 +vn -0.5689 -0.6526 -0.5004 +vn 0.0705 -0.9265 -0.3695 +vn -0.8322 0.0000 -0.5544 +vn 0.0836 0.9266 -0.3667 +vn -0.5519 0.6533 -0.5182 +vn 0.9885 0.0000 -0.1510 +vn 0.7227 0.6570 -0.2143 +vn 0.7227 -0.6570 -0.2143 +vn -0.5519 -0.6533 -0.5182 +vn 0.0836 -0.9266 -0.3667 +vn -0.8141 0.0000 -0.5808 +vn 0.0974 0.9266 -0.3632 +vn -0.5319 0.6534 -0.5387 +vn 0.9935 0.0000 -0.1137 +vn 0.7303 0.6569 -0.1870 +vn 0.7303 -0.6569 -0.1870 +vn -0.5319 -0.6534 -0.5387 +vn 0.0974 -0.9266 -0.3632 +vn -0.7916 0.0000 -0.6110 +vn 0.1119 0.9265 -0.3592 +vn -0.5034 0.6503 -0.5689 +vn 0.9983 0.0000 -0.0574 +vn 0.7367 0.6602 -0.1464 +vn 0.7367 -0.6602 -0.1464 +vn -0.5034 -0.6503 -0.5689 +vn 0.1119 -0.9265 -0.3592 +vn -0.7557 0.0000 -0.6549 +vn 0.1351 0.9265 -0.3511 +vn -0.4650 0.6500 -0.6009 +vn 0.9999 0.0000 0.0087 +vn 0.7447 0.6602 -0.0975 +vn 0.7447 -0.6602 -0.0975 +vn -0.4650 -0.6500 -0.6009 +vn 0.1351 -0.9265 -0.3511 +vn -0.7109 0.0000 -0.7033 +vn 0.1606 0.9265 -0.3401 +vn -0.4224 0.6512 -0.6304 +vn 0.9971 0.0000 0.0757 +vn 0.7507 0.6589 -0.0467 +vn 0.7507 -0.6589 -0.0467 +vn -0.4224 -0.6512 -0.6304 +vn 0.1606 -0.9265 -0.3401 +vn -0.6618 0.0000 -0.7496 +vn 0.1856 0.9265 -0.3275 +vn -0.3630 0.6473 -0.6702 +vn 0.9853 0.0000 0.1708 +vn 0.7480 0.6633 0.0232 +vn 0.7480 -0.6633 0.0232 +vn -0.3630 -0.6473 -0.6702 +vn 0.1856 -0.9265 -0.3275 +vn -0.5864 0.0000 -0.8100 +vn 0.2219 0.9264 -0.3042 +vn -0.2810 0.6461 -0.7096 +vn 0.9576 0.0000 0.2879 +vn 0.7391 0.6641 0.1122 +vn 0.7391 -0.6641 0.1122 +vn -0.2810 -0.6461 -0.7096 +vn 0.2219 -0.9264 -0.3042 +vn -0.4852 0.0000 -0.8744 +vn 0.2607 0.9265 -0.2714 +vn -0.1883 0.6476 -0.7383 +vn 0.9139 0.0000 0.4058 +vn 0.7205 0.6623 0.2055 +vn 0.7205 -0.6623 0.2055 +vn -0.1883 -0.6476 -0.7383 +vn 0.2607 -0.9265 -0.2714 +vn -0.3710 0.0000 -0.9286 +vn 0.2963 0.9265 -0.2320 +vn -0.0768 0.6463 -0.7592 +vn 0.8438 0.0000 0.5366 +vn 0.6810 0.6641 0.3087 +vn 0.6810 -0.6641 0.3087 +vn -0.0768 -0.6463 -0.7592 +vn 0.2963 -0.9265 -0.2320 +vn -0.2279 0.0000 -0.9737 +vn 0.3296 0.9261 -0.1834 +vn 0.0645 0.6407 -0.7651 +vn 0.7284 0.0000 0.6850 +vn 0.6084 0.6705 0.4245 +vn 0.6084 -0.6705 0.4245 +vn 0.0645 -0.6407 -0.7651 +vn 0.3296 -0.9261 -0.1834 +vn -0.0417 0.0000 -0.9991 +vn 0.3580 0.9263 -0.1172 +vn 0.1901 0.6449 -0.7403 +vn 0.6045 0.0000 0.7966 +vn 0.5313 0.6648 0.5251 +vn 0.5313 -0.6648 0.5251 +vn 0.1901 -0.6449 -0.7403 +vn 0.3580 -0.9263 -0.1172 +vn 0.1222 0.0000 -0.9925 +vn 0.3714 0.9267 -0.0571 +vn 0.2763 0.6537 -0.7045 +vn 0.5083 0.0000 0.8612 +vn 0.4680 0.6558 0.5923 +vn 0.4680 -0.6558 0.5923 +vn 0.2763 -0.6537 -0.7045 +vn 0.3714 -0.9267 -0.0571 +vn 0.2373 0.0000 -0.9714 +vn 0.6290 0.7771 -0.0202 +vn 0.6011 0.5554 -0.5745 +vn 0.6704 0.0000 0.7420 +vn 0.6581 0.5430 0.5216 +vn 0.6581 -0.5430 0.5216 +vn 0.6011 -0.5554 -0.5745 +vn 0.6290 -0.7771 -0.0202 +vn 0.5900 0.0000 -0.8074 +g Cube.009_Cube.019_main +s off +f 2/1/1 3/2/1 61/3/1 60/4/1 +f 3/2/2 4/5/2 62/6/2 61/3/2 +f 4/5/1 57/7/1 114/8/1 62/6/1 +f 57/9/3 5/10/3 63/11/3 114/12/3 +f 5/10/4 6/13/4 64/14/4 63/11/4 +f 6/13/5 7/15/5 65/16/5 64/14/5 +f 7/17/6 8/18/6 66/19/6 65/20/6 +f 8/21/7 9/22/7 67/23/7 66/24/7 +f 38/25/6 39/26/6 96/27/6 95/28/6 +f 10/29/7 11/30/7 69/31/7 68/32/7 +f 11/33/6 12/34/6 70/35/6 69/36/6 +f 12/37/5 13/38/5 71/39/5 70/40/5 +f 13/41/6 14/42/6 72/43/6 71/44/6 +f 14/45/7 15/46/7 73/47/7 72/48/7 +f 28/49/4 29/50/4 87/51/4 86/52/4 +f 16/53/8 17/54/8 75/55/8 74/56/8 +f 17/54/9 18/57/9 76/58/9 75/55/9 +f 18/57/10 19/59/10 77/60/10 76/58/10 +f 19/59/11 20/61/11 78/62/11 77/60/11 +f 20/61/12 21/63/12 79/64/12 78/62/12 +f 21/63/13 22/65/13 80/66/13 79/64/13 +f 22/65/14 23/67/14 81/68/14 80/66/14 +f 23/67/15 24/69/15 82/70/15 81/68/15 +f 24/69/16 25/71/16 83/72/16 82/70/16 +f 25/71/17 26/73/17 84/74/17 83/72/17 +f 26/73/18 27/75/18 85/76/18 84/74/18 +f 27/75/19 28/77/19 86/78/19 85/76/19 +f 29/50/5 30/79/5 88/80/5 87/51/5 +f 40/81/20 41/82/20 98/83/20 97/84/20 +f 31/85/5 32/86/5 116/87/5 89/88/5 +f 32/89/4 33/90/4 90/91/4 116/92/4 +f 33/90/3 34/93/3 91/94/3 90/91/3 +f 34/95/1 35/96/1 92/97/1 91/98/1 +f 35/99/2 36/100/2 93/101/2 92/102/2 +f 36/100/20 37/103/20 94/104/20 93/101/20 +f 37/103/7 38/105/7 95/28/7 94/104/7 +f 30/106/6 31/107/6 89/108/6 88/109/6 +f 39/110/7 40/81/7 97/84/7 96/27/7 +f 41/111/8 42/112/8 99/113/8 98/114/8 +f 42/112/9 43/115/9 100/116/9 99/113/9 +f 43/115/10 44/117/10 101/118/10 100/116/10 +f 44/117/21 45/119/21 102/120/21 101/118/21 +f 45/119/12 46/121/12 103/122/12 102/120/12 +f 46/121/13 47/123/13 104/124/13 103/122/13 +f 47/123/14 48/125/14 105/126/14 104/124/14 +f 48/125/15 49/127/15 106/128/15 105/126/15 +f 49/127/16 50/129/16 107/130/16 106/128/16 +f 50/129/22 51/131/22 108/132/22 107/130/22 +f 51/131/18 52/133/18 109/134/18 108/132/18 +f 52/133/19 53/135/19 110/136/19 109/134/19 +f 15/46/20 16/137/20 74/138/20 73/47/20 +f 54/139/5 55/140/5 112/141/5 111/142/5 +f 58/143/23 56/144/23 113/145/23 115/146/23 +f 55/147/6 10/148/6 68/149/6 112/150/6 +f 9/22/20 58/143/20 115/146/20 67/23/20 +f 56/151/1 1/152/1 59/153/1 113/154/1 +f 1/152/3 2/1/3 60/4/3 59/153/3 +f 53/155/4 54/139/4 111/142/4 110/156/4 +f 35/157/24 34/158/24 33/159/24 9/160/24 8/161/24 7/162/24 6/163/24 36/164/24 +f 70/165/25 80/166/25 60/167/25 61/168/25 104/169/25 69/170/25 +f 5/171/24 57/172/24 4/173/24 3/174/24 38/175/24 37/176/24 36/164/24 6/163/24 +f 12/177/24 11/178/24 47/179/24 3/174/24 2/180/24 22/181/24 +f 93/182/25 94/183/25 95/184/25 61/168/25 62/185/25 114/186/25 63/187/25 64/188/25 +f 98/189/25 99/190/25 100/191/25 101/192/25 102/193/25 103/194/25 104/169/25 61/168/25 95/184/25 96/195/25 97/196/25 +f 25/197/24 24/198/24 23/199/24 22/181/24 2/180/24 31/200/24 30/201/24 29/202/24 28/203/24 27/204/24 26/205/24 +f 108/206/25 109/207/25 110/208/25 111/209/25 112/210/25 68/211/25 69/170/25 104/169/25 105/212/25 106/213/25 107/214/25 +f 88/215/25 89/216/25 60/167/25 80/166/25 81/217/25 82/218/25 83/219/25 84/220/25 85/221/25 86/222/25 87/223/25 +f 55/224/24 54/225/24 53/226/24 52/227/24 51/228/24 50/229/24 49/230/24 48/231/24 47/179/24 11/178/24 10/232/24 +f 90/233/25 91/234/25 92/235/25 93/182/25 64/188/25 65/236/25 66/237/25 67/238/25 +f 116/239/25 90/233/25 67/238/25 115/240/25 113/241/25 59/242/25 60/167/25 89/216/25 +f 56/243/24 58/244/24 9/160/24 33/159/24 32/245/24 31/200/24 2/180/24 1/246/24 +f 18/247/24 17/248/24 16/249/24 15/250/24 14/251/24 13/252/24 12/177/24 22/181/24 21/253/24 20/254/24 19/255/24 +f 38/175/24 3/174/24 47/179/24 46/256/24 45/257/24 44/258/24 43/259/24 42/260/24 41/261/24 40/262/24 39/263/24 +f 78/264/25 79/265/25 80/166/25 70/165/25 71/266/25 72/267/25 73/268/25 74/269/25 75/270/25 76/271/25 77/272/25 +f 119/273/4 120/274/4 124/275/4 123/276/4 +f 117/277/20 118/278/20 122/279/20 121/280/20 +f 121/281/24 122/282/24 120/283/24 119/284/24 +f 126/285/4 130/286/4 127/287/4 125/288/4 +f 123/289/1 126/290/1 125/291/1 117/292/1 121/293/1 119/294/1 +f 118/295/6 131/296/6 132/297/6 124/298/6 120/299/6 122/300/6 +f 123/301/24 124/302/24 132/303/24 129/304/24 130/305/24 126/306/24 +f 117/307/25 125/308/25 127/309/25 128/310/25 131/311/25 118/312/25 +f 128/313/4 129/314/4 132/315/4 131/316/4 +f 129/317/6 128/318/6 127/319/6 130/320/6 +f 133/321/20 134/322/20 136/323/20 135/324/20 +f 135/325/24 136/326/24 140/327/24 139/328/24 +f 139/329/4 140/330/4 138/331/4 137/332/4 +f 137/333/25 138/334/25 134/335/25 133/336/25 +f 135/337/1 139/338/1 137/339/1 133/340/1 +f 140/341/6 136/342/6 134/343/6 138/344/6 +f 141/345/25 142/346/25 144/347/25 143/348/25 +f 143/349/20 144/350/20 148/351/20 147/352/20 +f 147/353/24 148/354/24 146/355/24 145/356/24 +f 145/357/4 146/358/4 142/359/4 141/360/4 +f 143/361/1 147/362/1 145/363/1 141/364/1 +f 148/365/6 144/366/6 142/367/6 146/368/6 +f 159/369/6 155/370/6 153/371/6 157/372/6 +f 152/373/4 160/374/4 158/375/4 151/376/4 +f 149/377/20 154/378/20 156/379/20 150/380/20 +f 150/381/1 152/382/1 151/376/1 149/377/1 +f 150/383/24 156/384/24 160/374/24 152/373/24 +f 153/371/7 155/370/7 156/385/7 154/386/7 +f 155/370/26 159/369/26 160/374/26 156/384/26 +f 159/369/5 157/372/5 158/387/5 160/388/5 +f 157/372/27 153/371/27 154/386/27 158/387/27 +f 151/376/25 158/375/25 154/378/25 149/377/25 +f 166/389/20 162/390/20 161/391/20 165/392/20 +f 161/393/1 163/394/1 167/395/1 165/396/1 +f 167/397/25 168/398/25 166/399/25 165/400/25 +f 166/401/6 168/402/6 164/403/6 162/404/6 +f 164/405/4 168/406/4 167/407/4 163/408/4 +f 171/409/24 172/410/24 176/411/24 175/412/24 +f 175/413/4 176/414/4 174/415/4 173/416/4 +f 171/417/1 175/418/1 173/419/1 169/420/1 +f 176/421/6 172/422/6 170/423/6 174/424/6 +f 179/425/4 180/426/4 178/427/4 177/428/4 +f 177/429/25 178/430/25 171/431/25 172/432/25 +f 170/433/1 179/434/1 177/435/1 172/436/1 +f 180/437/6 169/438/6 171/439/6 178/440/6 +f 187/441/4 188/442/4 186/443/4 185/444/4 +f 185/445/25 186/446/25 182/447/25 181/448/25 +f 183/449/1 187/450/1 185/451/1 181/452/1 +f 188/453/6 184/454/6 182/455/6 186/456/6 +f 182/457/24 181/458/24 192/459/24 191/460/24 +f 191/461/4 192/462/4 190/463/4 189/464/4 +f 182/465/1 191/466/1 189/467/1 184/468/1 +f 192/469/6 181/470/6 183/471/6 190/472/6 +f 193/473/20 194/474/20 196/475/20 195/476/20 +f 195/477/24 196/478/24 200/479/24 199/480/24 +f 199/481/4 200/482/4 198/483/4 197/484/4 +f 197/485/25 198/486/25 194/487/25 193/488/25 +f 195/476/1 199/489/1 197/490/1 193/491/1 +f 200/492/6 196/493/6 194/494/6 198/483/6 +f 211/495/20 223/496/20 210/497/20 209/498/20 222/499/20 208/500/20 221/501/20 207/502/20 220/503/20 206/504/20 205/505/20 219/506/20 212/507/20 225/508/20 224/509/20 +f 218/510/28 219/511/28 238/512/28 237/513/28 +f 224/514/6 225/515/6 240/516/6 239/517/6 +f 212/518/1 201/519/1 226/520/1 241/521/1 +f 202/522/1 213/523/1 233/524/1 227/525/1 +f 214/526/24 203/527/24 242/528/24 234/529/24 +f 203/527/26 215/530/26 243/531/26 242/528/26 +f 215/532/6 204/533/6 244/534/6 243/535/6 +f 201/519/29 202/522/29 227/525/29 226/520/29 +f 204/536/30 216/537/30 235/538/30 244/539/30 +f 205/540/31 206/541/31 229/542/31 228/543/31 +f 219/511/32 205/540/32 228/543/32 238/512/32 +f 209/544/1 210/545/1 231/546/1 230/547/1 +f 206/541/33 220/548/33 245/549/33 229/542/33 +f 220/548/34 207/550/34 246/551/34 245/549/34 +f 207/550/35 221/552/35 247/553/35 246/551/35 +f 221/552/36 208/554/36 248/555/36 247/553/36 +f 208/554/37 222/556/37 249/557/37 248/555/37 +f 222/556/38 209/558/38 230/559/38 249/557/38 +f 210/560/39 223/561/39 250/562/39 231/563/39 +f 223/561/24 211/564/24 232/565/24 250/562/24 +f 211/564/40 224/566/40 239/567/40 232/565/40 +f 213/568/39 214/526/39 234/529/39 233/569/39 +f 216/537/41 217/570/41 236/571/41 235/538/41 +f 217/570/42 218/510/42 237/513/42 236/571/42 +f 235/572/4 236/573/4 237/574/4 238/575/4 241/576/4 226/577/4 243/578/4 244/579/4 +f 201/580/20 212/507/20 219/506/20 218/581/20 217/582/20 216/583/20 204/584/20 215/585/20 +f 242/586/4 243/578/4 226/577/4 227/587/4 233/588/4 234/589/4 +f 213/590/20 202/591/20 201/580/20 215/585/20 203/592/20 214/593/20 +f 228/594/4 229/595/4 245/596/4 246/597/4 247/598/4 248/599/4 249/600/4 230/601/4 231/602/4 250/603/4 232/604/4 239/605/4 240/606/4 241/576/4 238/575/4 +f 286/607/6 284/608/6 314/609/6 312/610/6 310/611/6 308/612/6 306/613/6 304/614/6 302/615/6 300/616/6 298/617/6 296/618/6 294/619/6 292/620/6 290/621/6 288/622/6 +f 283/623/1 285/624/1 287/625/1 289/626/1 291/627/1 293/628/1 295/629/1 297/630/1 299/631/1 301/632/1 303/633/1 305/634/1 307/635/1 309/636/1 311/637/1 313/638/1 +f 350/639/4 349/640/4 353/641/4 354/642/4 +f 353/643/6 352/644/6 351/645/6 354/646/6 +f 348/647/20 347/648/20 351/649/20 352/650/20 +f 347/651/25 350/652/25 354/653/25 351/654/25 +f 349/655/24 348/656/24 352/657/24 353/658/24 +f 358/659/25 356/660/25 362/661/25 360/662/25 377/663/25 378/664/25 373/665/25 374/666/25 369/667/25 370/668/25 365/669/25 366/670/25 +f 355/671/24 357/672/24 363/673/24 364/674/24 367/675/24 368/676/24 371/677/24 372/678/24 375/679/24 376/680/24 359/681/24 361/682/24 +f 379/683/4 381/684/4 383/685/4 385/686/4 387/687/4 389/688/4 391/689/4 393/690/4 395/691/4 397/692/4 399/693/4 401/694/4 403/695/4 405/696/4 407/697/4 409/698/4 +f 382/699/20 380/700/20 410/701/20 408/702/20 406/703/20 404/704/20 402/705/20 400/706/20 398/707/20 396/708/20 394/709/20 392/710/20 390/711/20 388/712/20 386/713/20 384/714/20 +f 411/715/24 413/716/24 415/717/24 417/718/24 419/719/24 421/720/24 423/721/24 425/722/24 427/723/24 429/724/24 431/725/24 433/726/24 435/727/24 437/728/24 439/729/24 441/730/24 +f 414/731/25 412/732/25 442/733/25 440/734/25 438/735/25 436/736/25 434/737/25 432/738/25 430/739/25 428/740/25 426/741/25 424/742/25 422/743/25 420/744/25 418/745/25 416/746/25 +f 511/747/25 505/748/25 514/749/25 515/750/25 +f 499/751/1 498/752/1 497/753/1 496/754/1 495/755/1 492/756/1 513/757/1 515/758/1 514/759/1 504/760/1 502/761/1 501/762/1 500/763/1 +f 491/764/20 494/765/20 493/766/20 492/767/20 495/768/20 485/769/20 477/770/20 +f 504/771/43 503/772/43 490/773/43 476/774/43 478/775/43 502/776/43 +f 509/777/2 494/778/2 491/779/2 486/780/2 487/781/2 +f 475/782/44 486/783/44 491/764/44 477/770/44 +f 479/784/45 480/785/45 500/786/45 501/787/45 +f 500/786/25 480/785/25 481/788/25 499/789/25 +f 487/781/2 488/790/2 507/791/2 508/792/2 +f 506/793/1 507/791/1 488/790/1 489/794/1 +f 485/795/46 495/796/46 496/797/46 484/798/46 +f 503/772/4 504/771/4 514/799/4 505/800/4 +f 494/801/29 509/802/29 510/803/29 512/804/29 493/805/29 +f 482/806/45 483/807/45 497/808/45 498/809/45 +f 512/804/25 513/810/25 492/811/25 493/805/25 +f 505/812/47 511/813/47 508/814/47 +f 502/776/4 478/775/4 479/815/4 501/816/4 +f 499/817/4 481/818/4 482/819/4 498/820/4 +f 511/821/1 510/822/1 509/777/1 487/781/1 508/792/1 +f 497/808/25 483/807/25 484/798/25 496/797/25 +f 506/823/25 505/824/25 508/825/25 507/826/25 +f 510/827/4 511/828/4 515/829/4 513/830/4 512/831/4 +f 484/832/6 483/833/6 482/834/6 481/835/6 480/836/6 479/837/6 478/838/6 476/839/6 475/840/6 477/841/6 485/842/6 +f 503/772/3 505/800/3 506/843/3 489/844/3 490/773/3 +f 521/845/48 524/846/48 518/847/48 516/848/48 +f 530/849/6 529/850/6 528/851/6 527/852/6 526/853/6 525/854/6 520/855/6 518/856/6 524/857/6 531/858/6 +f 536/859/29 546/860/29 547/861/29 537/862/29 +f 528/863/45 529/864/45 541/865/45 542/866/45 +f 543/867/4 527/868/4 528/869/4 542/870/4 +f 531/871/46 534/872/46 540/873/46 530/874/46 +f 533/875/20 536/876/20 537/877/20 535/878/20 534/872/20 531/871/20 524/879/20 521/880/20 522/881/20 +f 546/882/1 536/883/1 533/884/1 538/885/1 +f 525/886/43 532/887/43 519/888/43 520/889/43 +f 545/890/45 539/891/45 532/892/45 525/893/45 526/894/45 +f 538/895/29 533/896/29 522/897/29 523/898/29 539/891/29 545/890/29 +f 547/861/25 548/899/25 535/900/25 537/862/25 +f 541/865/25 529/864/25 530/901/25 540/902/25 +f 523/903/1 517/904/1 519/905/1 532/906/1 539/907/1 +f 546/908/4 538/909/4 544/910/4 548/911/4 547/912/4 +f 521/880/44 516/913/44 517/914/44 523/915/44 522/881/44 +f 545/890/49 526/894/49 527/916/49 543/917/49 544/918/49 538/895/49 +f 543/919/1 542/920/1 541/921/1 540/922/1 534/923/1 535/924/1 548/925/1 544/926/1 +f 583/927/24 584/928/24 588/929/24 587/930/24 +f 585/931/25 586/932/25 582/933/25 581/934/25 +f 583/935/1 587/936/1 585/931/1 581/934/1 +f 588/929/6 584/928/6 582/933/6 586/932/6 +f 589/937/4 591/938/4 593/939/4 595/940/4 597/941/4 599/942/4 601/943/4 603/944/4 605/945/4 607/946/4 609/947/4 611/948/4 613/949/4 615/950/4 617/951/4 619/952/4 +f 592/953/20 590/954/20 620/955/20 618/956/20 616/957/20 614/958/20 612/959/20 610/960/20 608/961/20 606/962/20 604/963/20 602/964/20 600/965/20 598/966/20 596/967/20 594/968/20 +f 630/969/25 624/970/25 621/971/25 628/972/25 +f 627/973/25 629/974/25 631/975/25 632/976/25 +f 622/977/1 625/978/1 629/979/1 627/980/1 +f 631/981/1 630/982/1 628/983/1 632/984/1 +f 622/985/24 623/986/24 626/987/24 625/988/24 +f 626/989/6 623/990/6 621/991/6 624/992/6 +f 621/993/20 623/994/20 632/995/20 628/996/20 +f 622/997/20 627/998/20 632/995/20 623/994/20 +f 625/999/4 626/1000/4 631/1001/4 629/1002/4 +f 624/1003/4 630/1004/4 631/1001/4 626/1000/4 +f 633/1005/4 635/1006/4 637/1007/4 639/1008/4 641/1009/4 643/1010/4 645/1011/4 647/1012/4 649/1013/4 651/1014/4 653/1015/4 655/1016/4 657/1017/4 659/1018/4 661/1019/4 663/1020/4 +f 636/1021/20 634/1022/20 664/1023/20 662/1024/20 660/1025/20 658/1026/20 656/1027/20 654/1028/20 652/1029/20 650/1030/20 648/1031/20 646/1032/20 644/1033/20 642/1034/20 640/1035/20 638/1036/20 +f 665/1037/4 667/1038/4 669/1039/4 671/1040/4 673/1041/4 675/1042/4 677/1043/4 679/1044/4 681/1045/4 683/1046/4 685/1047/4 687/1048/4 689/1049/4 691/1050/4 693/1051/4 695/1052/4 +f 668/1053/20 666/1054/20 696/1055/20 694/1056/20 692/1057/20 690/1058/20 688/1059/20 686/1060/20 684/1061/20 682/1062/20 680/1063/20 678/1064/20 676/1065/20 674/1066/20 672/1067/20 670/1068/20 +f 707/1069/6 703/1070/6 701/1071/6 705/1072/6 +f 700/1073/4 708/1074/4 706/1075/4 699/1076/4 +f 697/1077/20 702/1078/20 704/1079/20 698/1080/20 +f 698/1081/1 700/1082/1 699/1076/1 697/1077/1 +f 698/1083/24 704/1084/24 708/1074/24 700/1073/24 +f 701/1071/7 703/1070/7 704/1085/7 702/1086/7 +f 703/1070/26 707/1069/26 708/1074/26 704/1084/26 +f 707/1069/5 705/1072/5 706/1087/5 708/1088/5 +f 705/1072/27 701/1071/27 702/1086/27 706/1087/27 +f 699/1076/25 706/1075/25 702/1078/25 697/1077/25 +f 719/1089/6 715/1090/6 713/1091/6 717/1092/6 +f 712/1093/4 720/1094/4 718/1095/4 711/1096/4 +f 709/1097/20 714/1098/20 716/1099/20 710/1100/20 +f 710/1101/1 712/1102/1 711/1096/1 709/1097/1 +f 710/1103/24 716/1104/24 720/1094/24 712/1093/24 +f 713/1091/7 715/1090/7 716/1105/7 714/1106/7 +f 715/1090/26 719/1089/26 720/1094/26 716/1104/26 +f 719/1089/5 717/1092/5 718/1107/5 720/1108/5 +f 717/1092/27 713/1091/27 714/1106/27 718/1107/27 +f 711/1096/25 718/1095/25 714/1098/25 709/1097/25 +f 731/1109/6 727/1110/6 725/1111/6 729/1112/6 +f 724/1113/4 732/1114/4 730/1115/4 723/1116/4 +f 721/1117/20 726/1118/20 728/1119/20 722/1120/20 +f 722/1121/1 724/1122/1 723/1116/1 721/1117/1 +f 722/1123/24 728/1124/24 732/1114/24 724/1113/24 +f 725/1111/7 727/1110/7 728/1125/7 726/1126/7 +f 727/1110/26 731/1109/26 732/1114/26 728/1124/26 +f 731/1109/5 729/1112/5 730/1127/5 732/1128/5 +f 729/1112/27 725/1111/27 726/1126/27 730/1127/27 +f 723/1116/25 730/1115/25 726/1118/25 721/1117/25 +f 736/1129/20 734/1130/20 744/1131/20 742/1132/20 740/1133/20 738/1134/20 +f 748/1135/4 746/1136/4 756/1137/4 754/1138/4 752/1139/4 750/1140/4 +f 760/1141/4 758/1142/4 768/1143/4 766/1144/4 764/1145/4 762/1146/4 +f 772/1147/4 770/1148/4 780/1149/4 778/1150/4 776/1151/4 774/1152/4 +f 784/1153/4 782/1154/4 792/1155/4 790/1156/4 788/1157/4 786/1158/4 +f 796/1159/20 794/1160/20 804/1161/20 802/1162/20 800/1163/20 798/1164/20 +f 808/1165/20 806/1166/20 816/1167/20 814/1168/20 812/1169/20 810/1170/20 +f 820/1171/20 818/1172/20 828/1173/20 826/1174/20 824/1175/20 822/1176/20 +f 832/1177/20 830/1178/20 840/1179/20 838/1180/20 836/1181/20 834/1182/20 +f 844/1183/4 842/1184/4 852/1185/4 850/1186/4 848/1187/4 846/1188/4 +f 856/1189/4 854/1190/4 864/1191/4 862/1192/4 860/1193/4 858/1194/4 +f 868/1195/4 866/1196/4 876/1197/4 874/1198/4 872/1199/4 870/1200/4 +f 880/1201/4 878/1202/4 888/1203/4 886/1204/4 884/1205/4 882/1206/4 +f 892/1207/20 890/1208/20 900/1209/20 898/1210/20 896/1211/20 894/1212/20 +f 904/1213/20 902/1214/20 912/1215/20 910/1216/20 908/1217/20 906/1218/20 +f 916/1219/20 914/1220/20 924/1221/20 922/1222/20 920/1223/20 918/1224/20 +f 928/1225/24 926/1226/24 936/1227/24 934/1228/24 932/1229/24 930/1230/24 +f 940/1231/24 938/1232/24 948/1233/24 946/1234/24 944/1235/24 942/1236/24 +f 952/1237/25 950/1238/25 960/1239/25 958/1240/25 956/1241/25 954/1242/25 +f 964/1243/25 962/1244/25 972/1245/25 970/1246/25 968/1247/25 966/1248/25 +f 976/1249/24 974/1250/24 983/1251/24 982/1252/24 980/1253/24 978/1254/24 +f 975/1255/25 977/1256/25 979/1257/25 981/1258/25 984/1259/25 973/1260/25 +f 988/1261/24 986/1262/24 995/1263/24 994/1264/24 992/1265/24 990/1266/24 +f 987/1267/25 989/1268/25 991/1269/25 993/1270/25 996/1271/25 985/1272/25 +f 1000/1273/24 998/1274/24 1007/1275/24 1006/1276/24 1004/1277/24 1002/1278/24 +f 999/1279/25 1001/1280/25 1003/1281/25 1005/1282/25 1008/1283/25 997/1284/25 +f 1012/1285/20 1010/1286/20 1019/1287/20 1018/1288/20 1016/1289/20 1014/1290/20 +f 1011/1291/4 1013/1292/4 1015/1293/4 1017/1294/4 1020/1295/4 1009/1296/4 +f 1024/1297/24 1022/1298/24 1032/1299/24 1030/1300/24 1028/1301/24 1026/1302/24 +f 1036/1303/24 1034/1304/24 1044/1305/24 1042/1306/24 1040/1307/24 1038/1308/24 +f 1048/1309/25 1046/1310/25 1056/1311/25 1054/1312/25 1052/1313/25 1050/1314/25 +f 1060/1315/25 1058/1316/25 1068/1317/25 1066/1318/25 1064/1319/25 1062/1320/25 +f 1072/1321/20 1070/1322/20 1079/1323/20 1078/1324/20 1076/1325/20 1074/1326/20 +f 1071/1327/4 1073/1328/4 1075/1329/4 1077/1330/4 1080/1331/4 1069/1332/4 +f 1103/1333/20 1081/1334/20 1083/1335/20 1107/1336/20 +f 1107/1336/24 1083/1335/24 1086/1337/24 1108/1338/24 +f 1108/1339/4 1086/1340/4 1084/1341/4 1109/1342/4 +f 1109/1342/25 1084/1341/25 1081/1334/25 1103/1333/25 +f 1082/1343/1 1085/1344/1 1111/1345/1 1110/1346/1 +f 1086/1347/6 1083/1348/6 1081/1349/6 1084/1350/6 +f 1111/1351/25 1106/1352/25 1112/1353/25 1110/1354/25 +f 1085/1355/4 1105/1356/4 1106/1352/4 1111/1351/4 +f 1082/1357/24 1104/1358/24 1105/1359/24 1085/1360/24 +f 1110/1354/20 1112/1353/20 1104/1358/20 1082/1357/20 +f 1105/1361/4 1108/1362/4 1109/1363/4 1106/1364/4 +f 1104/1365/24 1107/1366/24 1108/1367/24 1105/1368/24 +f 1112/1369/20 1103/1370/20 1107/1366/20 1104/1365/20 +f 1106/1364/25 1109/1363/25 1103/1371/25 1112/1372/25 +f 1116/1373/20 1114/1374/20 1123/1375/20 1122/1376/20 1120/1377/20 1118/1378/20 +f 1115/1379/4 1117/1380/4 1119/1381/4 1121/1382/4 1124/1383/4 1113/1384/4 +f 1128/1385/20 1126/1386/20 1135/1387/20 1134/1388/20 1132/1389/20 1130/1390/20 +f 1127/1391/4 1129/1392/4 1131/1393/4 1133/1394/4 1136/1395/4 1125/1396/4 +f 1159/1397/20 1137/1398/20 1139/1399/20 1163/1400/20 +f 1163/1400/1 1139/1399/1 1142/1401/1 1164/1402/1 +f 1164/1403/4 1142/1404/4 1140/1405/4 1165/1406/4 +f 1165/1406/6 1140/1405/6 1137/1398/6 1159/1397/6 +f 1138/1407/25 1141/1408/25 1167/1409/25 1166/1410/25 +f 1142/1411/24 1139/1412/24 1137/1413/24 1140/1414/24 +f 1167/1415/6 1162/1416/6 1168/1417/6 1166/1418/6 +f 1141/1419/4 1161/1420/4 1162/1416/4 1167/1415/4 +f 1138/1421/1 1160/1422/1 1161/1423/1 1141/1424/1 +f 1166/1418/20 1168/1417/20 1160/1422/20 1138/1421/20 +f 1161/1425/4 1164/1426/4 1165/1427/4 1162/1428/4 +f 1160/1429/1 1163/1430/1 1164/1431/1 1161/1432/1 +f 1168/1433/20 1159/1434/20 1163/1430/20 1160/1429/20 +f 1162/1428/6 1165/1427/6 1159/1435/6 1168/1436/6 +f 1204/1437/6 1202/1438/6 1232/1439/6 1230/1440/6 1228/1441/6 1226/1442/6 1224/1443/6 1222/1444/6 1220/1445/6 1218/1446/6 1216/1447/6 1214/1448/6 1212/1449/6 1210/1450/6 1208/1451/6 1206/1452/6 +f 1201/1453/1 1203/1454/1 1205/1455/1 1207/1456/1 1209/1457/1 1211/1458/1 1213/1459/1 1215/1460/1 1217/1461/1 1219/1462/1 1221/1463/1 1223/1464/1 1225/1465/1 1227/1466/1 1229/1467/1 1231/1468/1 +f 1255/1469/20 1233/1470/20 1235/1471/20 1259/1472/20 +f 1259/1472/24 1235/1471/24 1238/1473/24 1260/1474/24 +f 1260/1475/4 1238/1476/4 1236/1477/4 1261/1478/4 +f 1261/1478/25 1236/1477/25 1233/1470/25 1255/1469/25 +f 1234/1479/1 1237/1480/1 1263/1481/1 1262/1482/1 +f 1238/1483/6 1235/1484/6 1233/1485/6 1236/1486/6 +f 1263/1487/25 1258/1488/25 1264/1489/25 1262/1490/25 +f 1237/1491/4 1257/1492/4 1258/1488/4 1263/1487/4 +f 1234/1493/24 1256/1494/24 1257/1495/24 1237/1496/24 +f 1262/1490/20 1264/1489/20 1256/1494/20 1234/1493/20 +f 1257/1497/4 1260/1498/4 1261/1499/4 1258/1500/4 +f 1256/1501/24 1259/1502/24 1260/1503/24 1257/1504/24 +f 1264/1505/20 1255/1506/20 1259/1502/20 1256/1501/20 +f 1258/1500/25 1261/1499/25 1255/1507/25 1264/1508/25 +f 1300/1509/25 1298/1510/25 1304/1511/25 1302/1512/25 1319/1513/25 1320/1514/25 1315/1515/25 1316/1516/25 1311/1517/25 1312/1518/25 1307/1519/25 1308/1520/25 +f 1297/1521/24 1299/1522/24 1305/1523/24 1306/1524/24 1309/1525/24 1310/1526/24 1313/1527/24 1314/1528/24 1317/1529/24 1318/1530/24 1301/1531/24 1303/1532/24 +f 1326/1533/50 1329/1534/50 1323/1535/50 1321/1536/50 +f 1335/1537/1 1334/1538/1 1333/1539/1 1332/1540/1 1331/1541/1 1330/1542/1 1325/1543/1 1323/1544/1 1329/1545/1 1336/1546/1 +f 1341/1547/26 1351/1548/26 1352/1549/26 1342/1550/26 +f 1333/1551/43 1334/1552/43 1346/1553/43 1347/1554/43 +f 1348/1555/4 1332/1556/4 1333/1557/4 1347/1558/4 +f 1336/1559/44 1339/1560/44 1345/1561/44 1335/1562/44 +f 1338/1563/20 1341/1564/20 1342/1565/20 1340/1566/20 1339/1560/20 1336/1559/20 1329/1567/20 1326/1568/20 1327/1569/20 +f 1351/1570/6 1341/1571/6 1338/1572/6 1343/1573/6 +f 1330/1574/45 1337/1575/45 1324/1576/45 1325/1577/45 +f 1350/1578/43 1344/1579/43 1337/1580/43 1330/1581/43 1331/1582/43 +f 1343/1583/26 1338/1584/26 1327/1585/26 1328/1586/26 1344/1579/26 1350/1578/26 +f 1352/1549/24 1353/1587/24 1340/1588/24 1342/1550/24 +f 1346/1553/24 1334/1552/24 1335/1589/24 1345/1590/24 +f 1328/1591/6 1322/1592/6 1324/1593/6 1337/1594/6 1344/1595/6 +f 1351/1596/4 1343/1597/4 1349/1598/4 1353/1599/4 1352/1600/4 +f 1326/1568/46 1321/1601/46 1322/1602/46 1328/1603/46 1327/1569/46 +f 1350/1578/51 1331/1582/51 1332/1604/51 1348/1605/51 1349/1606/51 1343/1583/51 +f 1348/1607/6 1347/1608/6 1346/1609/6 1345/1610/6 1339/1611/6 1340/1612/6 1353/1613/6 1349/1614/6 +f 1390/1615/24 1384/1616/24 1393/1617/24 1394/1618/24 +f 1378/1619/6 1377/1620/6 1376/1621/6 1375/1622/6 1374/1623/6 1371/1624/6 1392/1625/6 1394/1626/6 1393/1627/6 1383/1628/6 1381/1629/6 1380/1630/6 1379/1631/6 +f 1370/1632/20 1373/1633/20 1372/1634/20 1371/1635/20 1374/1636/20 1364/1637/20 1356/1638/20 +f 1383/1639/45 1382/1640/45 1369/1641/45 1355/1642/45 1357/1643/45 1381/1644/45 +f 1388/1645/7 1373/1646/7 1370/1647/7 1365/1648/7 1366/1649/7 +f 1354/1650/46 1365/1651/46 1370/1632/46 1356/1638/46 +f 1358/1652/43 1359/1653/43 1379/1654/43 1380/1655/43 +f 1379/1654/24 1359/1653/24 1360/1656/24 1378/1657/24 +f 1366/1649/7 1367/1658/7 1386/1659/7 1387/1660/7 +f 1385/1661/6 1386/1659/6 1367/1658/6 1368/1662/6 +f 1364/1663/44 1374/1664/44 1375/1665/44 1363/1666/44 +f 1382/1640/4 1383/1639/4 1393/1667/4 1384/1668/4 +f 1373/1669/26 1388/1670/26 1389/1671/26 1391/1672/26 1372/1673/26 +f 1361/1674/43 1362/1675/43 1376/1676/43 1377/1677/43 +f 1391/1672/24 1392/1678/24 1371/1679/24 1372/1673/24 +f 1384/1680/52 1390/1681/52 1387/1682/52 +f 1381/1644/4 1357/1643/4 1358/1683/4 1380/1684/4 +f 1378/1685/4 1360/1686/4 1361/1687/4 1377/1688/4 +f 1390/1689/53 1389/1690/53 1388/1645/53 1366/1649/53 1387/1660/53 +f 1376/1676/24 1362/1675/24 1363/1666/24 1375/1665/24 +f 1385/1691/24 1384/1692/24 1387/1693/24 1386/1694/24 +f 1389/1695/4 1390/1696/4 1394/1697/4 1392/1698/4 1391/1699/4 +f 1363/1700/1 1362/1701/1 1361/1702/1 1360/1703/1 1359/1704/1 1358/1705/1 1357/1706/1 1355/1707/1 1354/1708/1 1356/1709/1 1364/1710/1 +f 1382/1640/5 1384/1668/5 1385/1711/5 1368/1712/5 1369/1641/5 +f 1401/1713/20 1395/1714/20 1397/1715/20 1405/1716/20 +f 1405/1716/6 1397/1715/6 1400/1717/6 1406/1718/6 +f 1406/1719/4 1400/1720/4 1398/1721/4 1407/1722/4 +f 1407/1722/1 1398/1721/1 1395/1714/1 1401/1713/1 +f 1409/1723/1 1404/1724/1 1410/1725/1 1408/1726/1 +f 1399/1727/4 1403/1728/4 1404/1724/4 1409/1723/4 +f 1396/1729/6 1402/1730/6 1403/1731/6 1399/1732/6 +f 1408/1726/20 1410/1725/20 1402/1730/20 1396/1729/20 +f 1403/1733/4 1406/1734/4 1407/1735/4 1404/1736/4 +f 1402/1737/6 1405/1738/6 1406/1739/6 1403/1740/6 +f 1410/1741/20 1401/1742/20 1405/1738/20 1402/1737/20 +f 1404/1736/1 1407/1735/1 1401/1743/1 1410/1744/1 +f 1433/1745/1 1411/1746/1 1413/1747/1 1437/1748/1 +f 1437/1748/24 1413/1747/24 1416/1749/24 1438/1750/24 +f 1438/1751/6 1416/1752/6 1414/1753/6 1439/1754/6 +f 1439/1754/25 1414/1753/25 1411/1746/25 1433/1745/25 +f 1412/1755/4 1415/1756/4 1441/1757/4 1440/1758/4 +f 1416/1759/20 1413/1760/20 1411/1761/20 1414/1762/20 +f 1441/1763/25 1436/1764/25 1442/1765/25 1440/1766/25 +f 1415/1767/6 1435/1768/6 1436/1764/6 1441/1763/6 +f 1412/1769/24 1434/1770/24 1435/1771/24 1415/1772/24 +f 1440/1766/1 1442/1765/1 1434/1770/1 1412/1769/1 +f 1435/1773/6 1438/1774/6 1439/1775/6 1436/1776/6 +f 1434/1777/24 1437/1778/24 1438/1779/24 1435/1780/24 +f 1442/1781/1 1433/1782/1 1437/1778/1 1434/1777/1 +f 1436/1776/25 1439/1775/25 1433/1783/25 1442/1784/25 +f 1445/1785/24 1446/1786/24 1450/1787/24 1449/1788/24 +f 1447/1789/25 1448/1790/25 1444/1791/25 1443/1792/25 +f 1445/1793/1 1449/1794/1 1447/1789/1 1443/1792/1 +f 1450/1787/6 1446/1786/6 1444/1791/6 1448/1790/6 +f 1453/1795/4 1454/1796/4 1458/1797/4 1457/1798/4 +f 1455/1799/20 1456/1800/20 1452/1801/20 1451/1802/20 +f 1453/1803/1 1457/1804/1 1455/1799/1 1451/1802/1 +f 1458/1797/6 1454/1796/6 1452/1801/6 1456/1800/6 +f 1461/1805/4 1462/1806/4 1466/1807/4 1465/1808/4 +f 1463/1809/20 1464/1810/20 1460/1811/20 1459/1812/20 +f 1461/1813/1 1465/1814/1 1463/1809/1 1459/1812/1 +f 1466/1807/6 1462/1806/6 1460/1811/6 1464/1810/6 +f 1470/1815/20 1468/1816/20 1498/1817/20 1496/1818/20 1494/1819/20 1492/1820/20 1490/1821/20 1488/1822/20 1486/1823/20 1484/1824/20 1482/1825/20 1480/1826/20 1478/1827/20 1476/1828/20 1474/1829/20 1472/1830/20 +f 1467/1831/4 1469/1832/4 1471/1833/4 1473/1834/4 1475/1835/4 1477/1836/4 1479/1837/4 1481/1838/4 1483/1839/4 1485/1840/4 1487/1841/4 1489/1842/4 1491/1843/4 1493/1844/4 1495/1845/4 1497/1846/4 +f 1571/1847/1 1564/1848/1 1566/1849/1 1580/1850/1 +f 1579/1851/4 1581/1852/4 1582/1853/4 1580/1850/4 1566/1849/4 1565/1854/4 1575/1855/4 1577/1856/4 1578/1857/4 1576/1858/4 +f 1575/1855/6 1565/1854/6 1563/1859/6 1568/1860/6 +f 1566/1849/24 1564/1848/24 1563/1861/24 1565/1862/24 +f 1567/1863/20 1569/1864/20 1570/1865/20 1568/1866/20 1563/1859/20 1564/1867/20 1571/1868/20 1573/1869/20 1574/1870/20 1572/1871/20 +f 1571/1847/54 1580/1850/54 1582/1872/54 1573/1873/54 +f 1573/1873/29 1582/1872/29 1581/1874/29 1574/1875/29 +f 1574/1876/55 1581/1877/55 1579/1878/55 1572/1879/55 +f 1575/1855/56 1568/1860/56 1570/1865/56 1577/1856/56 +f 1577/1856/27 1570/1865/27 1569/1864/27 1578/1857/27 +f 1578/1857/57 1569/1864/57 1567/1880/57 1576/1881/57 +f 1579/1878/25 1576/1881/25 1567/1880/25 1572/1879/25 +f 1583/1882/20 1584/1883/20 1586/1884/20 1585/1885/20 +f 1585/1886/1 1586/1887/1 1590/1888/1 1589/1889/1 +f 1589/1889/4 1590/1888/4 1588/1890/4 1587/1891/4 +f 1585/1892/25 1589/1893/25 1587/1891/25 1583/1882/25 +f 1590/1888/24 1586/1887/24 1584/1894/24 1588/1895/24 +f 1594/1896/24 1592/1897/24 1601/1898/24 1600/1899/24 1598/1900/24 1596/1901/24 +f 1593/1902/25 1595/1903/25 1597/1904/25 1599/1905/25 1602/1906/25 1591/1907/25 +f 1606/1908/24 1604/1909/24 1634/1910/24 1632/1911/24 1630/1912/24 1628/1913/24 1626/1914/24 1624/1915/24 1622/1916/24 1620/1917/24 1618/1918/24 1616/1919/24 1614/1920/24 1612/1921/24 1610/1922/24 1608/1923/24 +f 1603/1924/25 1605/1925/25 1607/1926/25 1609/1927/25 1611/1928/25 1613/1929/25 1615/1930/25 1617/1931/25 1619/1932/25 1621/1933/25 1623/1934/25 1625/1935/25 1627/1936/25 1629/1937/25 1631/1938/25 1633/1939/25 +f 1699/1940/24 1701/1941/24 1703/1942/24 1705/1943/24 1707/1944/24 1709/1945/24 1711/1946/24 1713/1947/24 1715/1948/24 1717/1949/24 1719/1950/24 1721/1951/24 1723/1952/24 1725/1953/24 1727/1954/24 1729/1955/24 +f 1702/1956/25 1700/1957/25 1730/1958/25 1728/1959/25 1726/1960/25 1724/1961/25 1722/1962/25 1720/1963/25 1718/1964/25 1716/1965/25 1714/1966/25 1712/1967/25 1710/1968/25 1708/1969/25 1706/1970/25 1704/1971/25 +f 1734/1972/4 1732/1973/4 1742/1974/4 1740/1975/4 1738/1976/4 1736/1977/4 +f 1746/1978/4 1744/1979/4 1754/1980/4 1752/1981/4 1750/1982/4 1748/1983/4 +f 1758/1984/20 1756/1985/20 1766/1986/20 1764/1987/20 1762/1988/20 1760/1989/20 +f 1770/1990/20 1768/1991/20 1778/1992/20 1776/1993/20 1774/1994/20 1772/1995/20 +f 1782/1996/20 1780/1997/20 1790/1998/20 1788/1999/20 1786/2000/20 1784/2001/20 +f 1794/2002/4 1792/2003/4 1802/2004/4 1800/2005/4 1798/2006/4 1796/2007/4 +f 1813/2008/20 1825/2009/20 1812/2010/20 1811/2011/20 1824/2012/20 1810/2013/20 1823/2014/20 1809/2015/20 1822/2016/20 1808/2017/20 1807/2018/20 1821/2019/20 1814/2020/20 1827/2021/20 1826/2022/20 +f 1820/2023/58 1821/2024/58 1840/2025/58 1839/2026/58 +f 1826/2027/6 1827/2028/6 1842/2029/6 1841/2030/6 +f 1814/2031/1 1803/2032/1 1828/2033/1 1843/2034/1 +f 1804/2035/1 1815/2036/1 1835/2037/1 1829/2038/1 +f 1816/2039/24 1805/2040/24 1844/2041/24 1836/2042/24 +f 1805/2040/26 1817/2043/26 1845/2044/26 1844/2041/26 +f 1817/2045/6 1806/2046/6 1846/2047/6 1845/2048/6 +f 1803/2032/29 1804/2035/29 1829/2038/29 1828/2033/29 +f 1806/2049/30 1818/2050/30 1837/2051/30 1846/2052/30 +f 1807/2053/31 1808/2054/31 1831/2055/31 1830/2056/31 +f 1821/2024/32 1807/2053/32 1830/2056/32 1840/2025/32 +f 1811/2057/1 1812/2058/1 1833/2059/1 1832/2060/1 +f 1808/2054/33 1822/2061/33 1847/2062/33 1831/2055/33 +f 1822/2061/34 1809/2063/34 1848/2064/34 1847/2062/34 +f 1809/2063/35 1823/2065/35 1849/2066/35 1848/2064/35 +f 1823/2065/36 1810/2067/36 1850/2068/36 1849/2066/36 +f 1810/2067/37 1824/2069/37 1851/2070/37 1850/2068/37 +f 1824/2069/59 1811/2071/59 1832/2072/59 1851/2070/59 +f 1812/2073/39 1825/2074/39 1852/2075/39 1833/2076/39 +f 1825/2074/24 1813/2077/24 1834/2078/24 1852/2075/24 +f 1813/2077/40 1826/2079/40 1841/2080/40 1834/2078/40 +f 1815/2081/39 1816/2039/39 1836/2042/39 1835/2082/39 +f 1818/2050/41 1819/2083/41 1838/2084/41 1837/2051/41 +f 1819/2083/42 1820/2023/42 1839/2026/42 1838/2084/42 +f 1837/2085/4 1838/2086/4 1839/2087/4 1840/2088/4 1843/2089/4 1828/2090/4 1845/2091/4 1846/2092/4 +f 1803/2093/20 1814/2020/20 1821/2019/20 1820/2094/20 1819/2095/20 1818/2096/20 1806/2097/20 1817/2098/20 +f 1844/2099/4 1845/2091/4 1828/2090/4 1829/2100/4 1835/2101/4 1836/2102/4 +f 1815/2103/20 1804/2104/20 1803/2093/20 1817/2098/20 1805/2105/20 1816/2106/20 +f 1830/2107/4 1831/2108/4 1847/2109/4 1848/2110/4 1849/2111/4 1850/2112/4 1851/2113/4 1832/2114/4 1833/2115/4 1852/2116/4 1834/2117/4 1841/2118/4 1842/2119/4 1843/2089/4 1840/2088/4 +f 1856/2120/25 1854/2121/25 1860/2122/25 1858/2123/25 1875/2124/25 1876/2125/25 1871/2126/25 1872/2127/25 1867/2128/25 1868/2129/25 1863/2130/25 1864/2131/25 +f 1853/2132/24 1855/2133/24 1861/2134/24 1862/2135/24 1865/2136/24 1866/2137/24 1869/2138/24 1870/2139/24 1873/2140/24 1874/2141/24 1857/2142/24 1859/2143/24 +f 1880/2144/25 1878/2145/25 1884/2146/25 1882/2147/25 1899/2148/25 1900/2149/25 1895/2150/25 1896/2151/25 1891/2152/25 1892/2153/25 1887/2154/25 1888/2155/25 +f 1877/2156/24 1879/2157/24 1885/2158/24 1886/2159/24 1889/2160/24 1890/2161/24 1893/2162/24 1894/2163/24 1897/2164/24 1898/2165/24 1881/2166/24 1883/2167/24 +f 1904/2168/25 1906/2169/25 1908/2170/25 1903/2171/25 +f 1912/2172/1 1910/2173/1 1917/2174/1 1919/2175/1 1920/2176/1 1918/2177/1 1945/2178/1 1947/2179/1 1948/2180/1 1946/2181/1 1905/2182/1 1906/2183/1 1957/2184/1 1959/2185/1 1960/2186/1 1958/2187/1 1909/2188/1 1911/2189/1 +f 1901/2190/24 1902/2191/24 1907/2192/24 1905/2193/24 +f 1905/2182/1 1907/2194/1 1908/2195/1 1906/2183/1 +f 1934/2196/1 1925/2197/1 1927/2198/1 1928/2199/1 1926/2200/1 1961/2201/1 1963/2202/1 1964/2203/1 1962/2204/1 1908/2195/1 1907/2194/1 1941/2205/1 1943/2206/1 1944/2207/1 1942/2208/1 1933/2209/1 1935/2210/1 1936/2211/1 +f 1973/2212/1 1974/2213/1 1975/2214/1 1976/2215/1 +f 1977/2216/6 1980/2217/6 1979/2218/6 1978/2219/6 +f 1975/2220/4 1979/2221/4 1980/2222/4 1976/2223/4 +f 1973/2224/20 1977/2225/20 1978/2226/20 1974/2227/20 +f 1976/2228/25 1980/2229/25 1977/2230/25 1973/2231/25 +f 1974/2232/24 1978/2233/24 1979/2234/24 1975/2235/24 +f 1998/2236/60 2002/2237/60 2001/2238/60 1997/2239/60 +f 2000/2240/61 1999/2241/61 2108/2242/61 2105/2243/61 +f 2127/2244/62 2130/2245/62 2123/2246/62 2126/2247/62 +f 1997/2248/63 2001/2238/63 1999/2241/63 2000/2240/63 +f 2127/2249/20 2128/2250/20 1998/2251/20 1997/2252/20 2000/2253/20 2132/2254/20 2129/2255/20 2130/2256/20 +f 2142/2257/64 2135/2258/64 2134/2259/64 2143/2260/64 +f 2002/2261/65 1998/2262/65 2090/2263/65 2091/2264/65 +f 2098/2265/66 2099/2266/66 2102/2267/66 2103/2268/66 +f 2095/2269/67 2128/2270/67 2125/2271/67 2094/2272/67 +f 2131/2273/68 2112/2274/68 2109/2275/68 2122/2276/68 +f 2120/2277/69 2117/2278/69 2116/2279/69 2113/2280/69 +f 2034/2281/4 2019/2282/4 2020/2283/4 2021/2284/4 2022/2285/4 2023/2286/4 2024/2287/4 2025/2288/4 2026/2289/4 2027/2290/4 2028/2291/4 2029/2292/4 2030/2293/4 2031/2294/4 2032/2295/4 2033/2296/4 +f 2052/2297/60 2051/2298/60 2055/2299/60 2056/2300/60 +f 2054/2301/61 2114/2302/61 2115/2303/61 2053/2304/61 +f 2140/2305/62 2137/2306/62 2136/2307/62 2141/2308/62 +f 2051/2309/63 2054/2301/63 2053/2304/63 2055/2299/63 +f 2056/2310/65 2100/2311/65 2097/2312/65 2052/2313/65 +f 2104/2314/67 2101/2315/67 2138/2316/67 2139/2317/67 +f 2144/2318/68 2133/2319/68 2118/2320/68 2119/2321/68 +f 2088/2322/20 2087/2323/20 2086/2324/20 2085/2325/20 2084/2326/20 2083/2327/20 2082/2328/20 2081/2329/20 2080/2330/20 2079/2331/20 2078/2332/20 2077/2333/20 2076/2334/20 2075/2335/20 2074/2336/20 2073/2337/20 +f 2091/2264/70 2090/2263/70 2089/2338/70 2092/2339/70 +f 2095/2269/71 2094/2272/71 2093/2340/71 2096/2341/71 +f 2099/2266/70 2098/2265/70 2097/2342/70 2100/2343/70 +f 2103/2268/71 2102/2267/71 2101/2344/71 2104/2345/71 +f 2089/2346/66 2096/2347/66 2093/2348/66 2092/2349/66 +f 2105/2243/72 2108/2242/72 2107/2350/72 2106/2351/72 +f 2111/2352/73 2110/2353/73 2109/2354/73 2112/2355/73 +f 2113/2280/72 2116/2279/72 2115/2356/72 2114/2357/72 +f 2119/2321/73 2118/2320/73 2117/2358/73 2120/2359/73 +f 2111/2352/69 2106/2360/69 2107/2361/69 2110/2353/69 +f 2127/2244/74 2126/2247/74 2125/2362/74 2128/2363/74 +f 2129/2364/75 2124/2365/75 2123/2246/75 2130/2245/75 +f 2131/2273/76 2122/2276/76 2121/2366/76 2132/2367/76 +f 2139/2317/74 2138/2316/74 2137/2368/74 2140/2369/74 +f 2141/2308/75 2136/2307/75 2135/2258/75 2142/2257/75 +f 2143/2260/76 2134/2259/76 2133/2370/76 2144/2371/76 +f 2129/2364/64 2132/2372/64 2121/2373/64 2124/2365/64 +f 2108/2374/4 1999/2375/4 2121/2376/4 +f 2002/2377/4 2091/2378/4 2125/2379/4 +f 2093/2380/4 2094/2381/4 2125/2379/4 2091/2378/4 2092/2382/4 +f 2144/2383/4 2119/2384/4 2120/2385/4 2113/2386/4 2114/2387/4 2143/2388/4 +f 2054/2389/4 2051/2390/4 2052/2391/4 2139/2392/4 2140/2393/4 2141/2394/4 2142/2395/4 2143/2388/4 +f 2123/2396/4 2124/2397/4 2121/2376/4 1999/2375/4 2001/2398/4 2002/2377/4 2125/2379/4 2126/2399/4 +f 2000/2253/20 2105/2400/20 2132/2254/20 +f 2131/2401/20 2132/2254/20 2105/2400/20 2106/2402/20 2111/2403/20 2112/2404/20 +f 2095/2405/20 2096/2406/20 2089/2407/20 2090/2408/20 2128/2250/20 +f 2090/2408/20 1998/2251/20 2128/2250/20 +f 2053/2409/20 2115/2410/20 2134/2411/20 +f 2134/2411/20 2115/2410/20 2116/2412/20 2117/2413/20 2118/2414/20 2133/2415/20 +f 2100/2416/20 2056/2417/20 2138/2418/20 +f 2138/2418/20 2101/2419/20 2102/2420/20 2099/2421/20 2100/2416/20 +f 2122/2422/4 2109/2423/4 2110/2424/4 2107/2425/4 2108/2374/4 2121/2376/4 +f 2052/2391/4 2097/2426/4 2139/2392/4 +f 2103/2427/4 2104/2428/4 2139/2392/4 2097/2426/4 2098/2429/4 +f 2114/2387/4 2054/2389/4 2143/2388/4 +f 2135/2430/20 2136/2431/20 2137/2432/20 2138/2418/20 2056/2417/20 2055/2433/20 2053/2409/20 2134/2411/20 +f 2194/2434/4 2196/2435/4 2197/2436/4 2195/2437/4 +f 2196/2438/25 2200/2439/25 2201/2440/25 2197/2441/25 +f 2200/2442/20 2198/2443/20 2199/2444/20 2201/2440/20 +f 2198/2445/24 2194/2446/24 2195/2437/24 2199/2447/24 +f 2196/2448/6 2194/2449/6 2198/2450/6 2200/2451/6 +f 2201/2452/1 2199/2453/1 2195/2454/1 2197/2455/1 +f 2269/2456/4 2267/2457/4 2329/2458/4 2327/2459/4 2325/2460/4 2323/2461/4 2321/2462/4 2319/2463/4 2317/2464/4 2315/2465/4 2489/2466/4 2497/2467/4 2513/2468/4 2469/2469/4 2461/2470/4 2465/2471/4 2409/2472/4 2405/2473/4 2401/2474/4 2521/2475/4 2517/2476/4 2445/2477/4 2501/2478/4 2509/2479/4 2453/2480/4 2440/2481/4 2448/2482/4 2283/2483/4 2281/2484/4 2279/2485/4 2277/2486/4 2275/2487/4 2273/2488/4 2271/2489/4 +f 2330/2490/20 2332/2491/20 2333/2492/20 2334/2493/20 2335/2494/20 2336/2495/20 2337/2496/20 2338/2497/20 2446/2498/20 2438/2499/20 2450/2500/20 2506/2501/20 2498/2502/20 2442/2503/20 2514/2504/20 2518/2505/20 2398/2506/20 2402/2507/20 2406/2508/20 2462/2509/20 2458/2510/20 2466/2511/20 2510/2512/20 2494/2513/20 2486/2514/20 2354/2515/20 2355/2516/20 2356/2517/20 2357/2518/20 2358/2519/20 2359/2520/20 2360/2521/20 2361/2522/20 2331/2523/20 +f 2266/2524/20 2268/2525/20 2270/2526/20 2272/2527/20 2274/2528/20 2276/2529/20 2278/2530/20 2280/2531/20 2282/2532/20 2449/2533/20 2441/2534/20 2452/2535/20 2508/2536/20 2500/2537/20 2444/2538/20 2516/2539/20 2520/2540/20 2399/2541/20 2403/2542/20 2407/2543/20 2463/2544/20 2459/2545/20 2467/2546/20 2512/2547/20 2496/2548/20 2488/2549/20 2314/2550/20 2316/2551/20 2318/2552/20 2320/2553/20 2322/2554/20 2324/2555/20 2326/2556/20 2328/2557/20 +f 2362/2558/4 2393/2559/4 2392/2560/4 2391/2561/4 2390/2562/4 2389/2563/4 2388/2564/4 2387/2565/4 2386/2566/4 2487/2567/4 2495/2568/4 2511/2569/4 2468/2570/4 2460/2571/4 2464/2572/4 2408/2573/4 2404/2574/4 2400/2575/4 2519/2576/4 2515/2577/4 2443/2578/4 2499/2579/4 2507/2580/4 2451/2581/4 2439/2582/4 2447/2583/4 2370/2584/4 2369/2585/4 2368/2586/4 2367/2587/4 2366/2588/4 2365/2589/4 2364/2590/4 2363/2591/4 +f 2370/2584/4 2447/2583/4 2471/2592/4 2483/2593/4 2395/2594/4 2479/2595/4 2475/2596/4 2503/2597/4 2455/2598/4 2431/2599/4 2427/2600/4 2435/2601/4 2491/2602/4 2423/2603/4 2415/2604/4 2411/2605/4 2419/2606/4 2487/2567/4 2386/2566/4 2385/2607/4 2384/2608/4 2383/2609/4 2382/2610/4 2381/2611/4 2380/2612/4 2379/2613/4 2378/2614/4 2377/2615/4 2376/2616/4 2375/2617/4 2374/2618/4 2373/2619/4 2372/2620/4 2371/2621/4 +f 2283/2483/4 2448/2482/4 2472/2622/4 2484/2623/4 2396/2624/4 2480/2625/4 2476/2626/4 2504/2627/4 2456/2628/4 2432/2629/4 2428/2630/4 2436/2631/4 2492/2632/4 2424/2633/4 2416/2634/4 2412/2635/4 2420/2636/4 2489/2466/4 2315/2465/4 2313/2637/4 2311/2638/4 2309/2639/4 2307/2640/4 2305/2641/4 2303/2642/4 2301/2643/4 2299/2644/4 2297/2645/4 2295/2646/4 2293/2647/4 2291/2648/4 2289/2649/4 2287/2650/4 2285/2651/4 +f 2354/2515/20 2486/2514/20 2418/2652/20 2410/2653/20 2414/2654/20 2422/2655/20 2490/2656/20 2434/2657/20 2426/2658/20 2430/2659/20 2454/2660/20 2502/2661/20 2474/2662/20 2478/2663/20 2394/2664/20 2482/2665/20 2470/2666/20 2446/2498/20 2338/2497/20 2339/2667/20 2340/2668/20 2341/2669/20 2342/2670/20 2343/2671/20 2344/2672/20 2345/2673/20 2346/2674/20 2347/2675/20 2348/2676/20 2349/2677/20 2350/2678/20 2351/2679/20 2352/2680/20 2353/2681/20 +f 2314/2550/20 2488/2549/20 2421/2682/20 2413/2683/20 2417/2684/20 2425/2685/20 2493/2686/20 2437/2687/20 2429/2688/20 2433/2689/20 2457/2690/20 2505/2691/20 2477/2692/20 2481/2693/20 2397/2694/20 2485/2695/20 2473/2696/20 2449/2533/20 2282/2532/20 2284/2697/20 2286/2698/20 2288/2699/20 2290/2700/20 2292/2701/20 2294/2702/20 2296/2703/20 2298/2704/20 2300/2705/20 2302/2706/20 2304/2707/20 2306/2708/20 2308/2709/20 2310/2710/20 2312/2711/20 +f 2525/2712/6 2523/2713/6 2548/2714/6 2546/2715/6 2544/2716/6 2542/2717/6 2549/2718/6 2539/2719/6 2537/2720/6 2551/2721/6 2534/2722/6 2552/2723/6 2531/2724/6 2529/2725/6 2550/2726/6 2553/2727/6 +f 2557/2728/6 2555/2729/6 2580/2730/6 2578/2731/6 2576/2732/6 2574/2733/6 2581/2734/6 2571/2735/6 2569/2736/6 2583/2737/6 2566/2738/6 2584/2739/6 2563/2740/6 2561/2741/6 2582/2742/6 2585/2743/6 +s 1 +f 251/2744/77 252/2745/78 254/2746/79 253/2747/80 +f 253/2747/80 254/2746/79 256/2748/81 255/2749/82 +f 255/2749/82 256/2748/81 258/2750/83 257/2751/84 +f 257/2751/84 258/2750/83 260/2752/85 259/2753/86 +f 259/2753/86 260/2752/85 262/2754/87 261/2755/88 +f 261/2755/88 262/2754/87 264/2756/89 263/2757/90 +f 263/2757/90 264/2756/89 266/2758/91 265/2759/92 +f 265/2759/92 266/2758/91 268/2760/93 267/2761/94 +f 267/2761/94 268/2760/93 270/2762/95 269/2763/96 +f 269/2763/96 270/2762/95 272/2764/97 271/2765/98 +f 271/2765/98 272/2764/97 274/2766/99 273/2767/100 +f 273/2767/100 274/2766/99 276/2768/101 275/2769/102 +f 275/2770/102 276/2771/101 278/2772/103 277/2773/104 +f 277/2773/104 278/2772/103 280/2774/105 279/2775/106 +f 254/2776/79 252/2777/78 282/2778/107 280/2779/105 278/2780/103 276/2781/101 274/2782/99 272/2783/97 270/2784/95 268/2785/93 266/2786/91 264/2787/89 262/2788/87 260/2789/85 258/2790/83 256/2791/81 +f 279/2775/106 280/2774/105 282/2792/107 281/2793/108 +f 281/2793/108 282/2792/107 252/2745/78 251/2744/77 +f 251/2794/77 253/2795/80 255/2796/82 257/2797/84 259/2798/86 261/2799/88 263/2800/90 265/2801/92 267/2802/94 269/2803/96 271/2804/98 273/2805/100 275/2806/102 277/2807/104 279/2808/106 281/2809/108 +f 283/2810/109 284/2811/110 286/2812/111 285/2813/112 +f 285/2813/112 286/2812/111 288/2814/113 287/2815/114 +f 287/2815/114 288/2814/113 290/2816/115 289/2817/116 +f 289/2817/116 290/2816/115 292/2818/117 291/2819/118 +f 291/2819/118 292/2818/117 294/2820/119 293/2821/120 +f 293/2821/120 294/2820/119 296/2822/121 295/2823/122 +f 295/2823/122 296/2822/121 298/2824/123 297/2825/124 +f 297/2825/124 298/2824/123 300/2826/125 299/2827/126 +f 299/2827/126 300/2826/125 302/2828/127 301/2829/128 +f 301/2829/128 302/2828/127 304/2830/129 303/2831/130 +f 303/2831/130 304/2830/129 306/2832/131 305/2833/132 +f 305/2833/132 306/2832/131 308/2834/133 307/2835/134 +f 307/2835/134 308/2834/133 310/2836/135 309/2837/136 +f 309/2837/136 310/2836/135 312/2838/137 311/2839/138 +f 311/2839/138 312/2838/137 314/2840/139 313/2841/140 +f 313/2842/140 314/2843/139 284/2811/110 283/2810/109 +f 315/2844/117 317/2845/119 318/2846/141 316/2847/4 +f 317/2845/119 319/2848/121 320/2849/45 318/2846/141 +f 319/2848/121 321/2850/123 322/2851/142 320/2849/45 +f 321/2850/123 323/2852/125 324/2853/25 322/2851/142 +f 323/2852/125 325/2854/127 326/2855/143 324/2853/25 +f 325/2854/127 327/2856/129 328/2857/46 326/2855/143 +f 327/2856/129 329/2858/144 330/2859/145 328/2857/46 +f 329/2858/144 331/2860/133 332/2861/20 330/2859/145 +f 331/2860/133 333/2862/135 334/2863/146 332/2861/20 +f 333/2862/135 335/2864/137 336/2865/44 334/2863/146 +f 335/2864/137 337/2866/147 338/2867/148 336/2865/44 +f 337/2866/147 339/2868/110 340/2869/24 338/2867/148 +f 339/2870/110 341/2871/149 342/2872/150 340/2873/24 +f 341/2871/149 343/2874/113 344/2875/43 342/2872/150 +f 343/2874/113 345/2876/115 346/2877/151 344/2875/43 +f 345/2876/115 315/2844/117 316/2847/4 346/2877/151 +f 315/2878/117 345/2879/115 343/2880/113 341/2881/149 339/2882/110 337/2883/147 335/2884/137 333/2885/135 331/2886/133 329/2887/144 327/2888/129 325/2889/127 323/2890/125 321/2891/123 319/2892/121 317/2893/119 +f 372/2894/152 373/2895/153 378/2896/154 375/2897/155 +f 364/2898/156 365/2899/157 370/2900/158 367/2901/159 +f 376/2902/160 377/2903/161 360/2904/46 359/2905/44 +f 368/2906/162 369/2907/163 374/2908/164 371/2909/165 +f 357/2910/43 358/2911/45 366/2912/166 363/2913/167 +f 365/2899/157 364/2898/156 363/2913/167 366/2912/166 +f 369/2907/163 368/2906/162 367/2901/159 370/2900/158 +f 373/2895/153 372/2894/152 371/2909/165 374/2908/164 +f 377/2903/161 376/2902/160 375/2897/155 378/2896/154 +f 379/2914/168 380/2915/169 382/2916/170 381/2917/171 +f 381/2917/171 382/2916/170 384/2918/172 383/2919/173 +f 383/2919/173 384/2918/172 386/2920/174 385/2921/175 +f 385/2921/175 386/2920/174 388/2922/176 387/2923/177 +f 387/2923/177 388/2922/176 390/2924/178 389/2925/179 +f 389/2925/179 390/2924/178 392/2926/180 391/2927/181 +f 391/2927/181 392/2926/180 394/2928/182 393/2929/183 +f 393/2929/183 394/2928/182 396/2930/184 395/2931/185 +f 395/2932/185 396/2933/184 398/2934/186 397/2935/187 +f 397/2935/187 398/2934/186 400/2936/188 399/2937/189 +f 399/2937/189 400/2936/188 402/2938/190 401/2939/191 +f 401/2939/191 402/2938/190 404/2940/192 403/2941/193 +f 403/2941/193 404/2940/192 406/2942/194 405/2943/195 +f 405/2943/195 406/2942/194 408/2944/196 407/2945/197 +f 407/2945/197 408/2944/196 410/2946/198 409/2947/199 +f 409/2947/199 410/2946/198 380/2948/169 379/2949/168 +f 411/2950/93 412/2951/94 414/2952/92 413/2953/200 +f 413/2953/200 414/2952/92 416/2954/90 415/2955/89 +f 415/2955/89 416/2954/90 418/2956/201 417/2957/202 +f 417/2957/202 418/2956/201 420/2958/86 419/2959/85 +f 419/2959/85 420/2958/86 422/2960/84 421/2961/203 +f 421/2961/203 422/2960/84 424/2962/82 423/2963/81 +f 423/2963/81 424/2962/82 426/2964/204 425/2965/205 +f 425/2965/205 426/2964/204 428/2966/77 427/2967/78 +f 427/2968/78 428/2969/77 430/2970/108 429/2971/107 +f 429/2971/107 430/2970/108 432/2972/106 431/2973/105 +f 431/2973/105 432/2972/106 434/2974/206 433/2975/207 +f 433/2975/207 434/2974/206 436/2976/102 435/2977/101 +f 435/2977/101 436/2976/102 438/2978/208 437/2979/99 +f 437/2979/99 438/2978/208 440/2980/98 439/2981/97 +f 439/2981/97 440/2980/98 442/2982/96 441/2983/209 +f 441/2983/209 442/2982/96 412/2984/94 411/2985/93 +f 443/2986/77 444/2987/78 446/2988/79 445/2989/80 +f 445/2989/80 446/2988/79 448/2990/81 447/2991/82 +f 447/2991/82 448/2990/81 450/2992/203 449/2993/84 +f 449/2993/84 450/2992/203 452/2994/85 451/2995/86 +f 451/2995/86 452/2994/85 454/2996/87 453/2997/88 +f 453/2997/88 454/2996/87 456/2998/89 455/2999/90 +f 455/2999/90 456/2998/89 458/3000/200 457/3001/92 +f 457/3001/92 458/3000/200 460/3002/93 459/3003/94 +f 459/3003/94 460/3002/93 462/3004/95 461/3005/96 +f 461/3005/96 462/3004/95 464/3006/97 463/3007/98 +f 463/3007/98 464/3006/97 466/3008/99 465/3009/100 +f 465/3009/100 466/3008/99 468/3010/101 467/3011/102 +f 467/3012/102 468/3013/101 470/3014/103 469/3015/104 +f 469/3015/104 470/3014/103 472/3016/105 471/3017/106 +f 446/3018/79 444/3019/78 474/3020/107 472/3021/105 470/3022/103 468/3023/101 466/3024/99 464/3025/97 462/3026/95 460/3027/93 458/3028/200 456/3029/89 454/3030/87 452/3031/85 450/3032/203 448/3033/81 +f 471/3017/106 472/3016/105 474/3034/107 473/3035/108 +f 473/3035/108 474/3034/107 444/2987/78 443/2986/77 +f 443/3036/77 445/3037/80 447/3038/82 449/3039/84 451/3040/86 453/3041/88 455/3042/90 457/3043/92 459/3044/94 461/3045/96 463/3046/98 465/3047/100 467/3048/102 469/3049/104 471/3050/106 473/3051/108 +f 549/3052/24 566/3053/24 572/3054/32 550/3055/32 +f 550/3055/32 572/3054/32 580/3056/26 551/3057/26 +f 551/3057/26 580/3056/26 571/3058/41 552/3059/41 +f 552/3059/41 571/3058/41 579/3060/6 553/3061/6 +f 553/3061/6 579/3060/6 570/3062/210 554/3063/210 +f 554/3063/210 570/3062/210 578/3064/27 555/3065/27 +f 555/3065/27 578/3064/27 573/3066/211 556/3067/211 +f 556/3067/211 573/3066/211 577/3068/25 557/3069/25 +f 557/3069/25 577/3068/25 568/3070/212 558/3071/212 +f 558/3071/212 568/3070/212 576/3072/29 559/3073/29 +f 559/3073/29 576/3072/29 567/3074/213 560/3075/214 +f 560/3075/214 567/3074/213 575/3076/1 561/3077/1 +f 561/3078/1 575/3079/1 569/3080/37 562/3081/37 +f 562/3081/37 569/3080/37 574/3082/39 563/3083/39 +f 563/3083/39 574/3082/39 565/3084/34 564/3085/34 +f 564/3085/34 565/3084/34 566/3053/24 549/3052/24 +f 589/3086/168 590/3087/169 592/3088/215 591/3089/216 +f 591/3089/216 592/3088/215 594/3090/172 593/3091/173 +f 593/3092/173 594/3093/172 596/3094/217 595/3095/218 +f 595/3095/218 596/3094/217 598/3096/176 597/3097/177 +f 597/3097/177 598/3096/176 600/3098/219 599/3099/220 +f 599/3099/220 600/3098/219 602/3100/180 601/3101/181 +f 601/3101/181 602/3100/180 604/3102/221 603/3103/183 +f 603/3103/183 604/3102/221 606/3104/184 605/3105/185 +f 605/3105/185 606/3104/184 608/3106/222 607/3107/223 +f 607/3107/223 608/3106/222 610/3108/188 609/3109/189 +f 609/3110/189 610/3111/188 612/3112/224 611/3113/225 +f 611/3113/225 612/3112/224 614/3114/192 613/3115/193 +f 613/3115/193 614/3114/192 616/3116/226 615/3117/227 +f 615/3117/227 616/3116/226 618/3118/196 617/3119/197 +f 617/3119/197 618/3118/196 620/3120/198 619/3121/199 +f 619/3121/199 620/3120/198 590/3087/169 589/3086/168 +f 633/3122/168 634/3123/169 636/3124/215 635/3125/171 +f 635/3125/171 636/3124/215 638/3126/172 637/3127/173 +f 637/3127/173 638/3126/172 640/3128/174 639/3129/175 +f 639/3129/175 640/3128/174 642/3130/176 641/3131/177 +f 641/3131/177 642/3130/176 644/3132/219 643/3133/179 +f 643/3133/179 644/3132/219 646/3134/180 645/3135/181 +f 645/3135/181 646/3134/180 648/3136/182 647/3137/183 +f 647/3137/183 648/3136/182 650/3138/184 649/3139/185 +f 649/3140/185 650/3141/184 652/3142/186 651/3143/223 +f 651/3143/223 652/3142/186 654/3144/188 653/3145/189 +f 653/3145/189 654/3144/188 656/3146/190 655/3147/225 +f 655/3147/225 656/3146/190 658/3148/192 657/3149/193 +f 657/3149/193 658/3148/192 660/3150/194 659/3151/227 +f 659/3151/227 660/3150/194 662/3152/196 661/3153/197 +f 661/3153/197 662/3152/196 664/3154/198 663/3155/199 +f 663/3155/199 664/3154/198 634/3156/169 633/3157/168 +f 665/3158/168 666/3159/169 668/3160/170 667/3161/171 +f 667/3161/171 668/3160/170 670/3162/172 669/3163/173 +f 669/3163/173 670/3162/172 672/3164/174 671/3165/175 +f 671/3165/175 672/3164/174 674/3166/176 673/3167/177 +f 673/3167/177 674/3166/176 676/3168/178 675/3169/179 +f 675/3169/179 676/3168/178 678/3170/180 677/3171/181 +f 677/3171/181 678/3170/180 680/3172/182 679/3173/183 +f 679/3173/183 680/3172/182 682/3174/184 681/3175/185 +f 681/3176/185 682/3177/184 684/3178/186 683/3179/223 +f 683/3179/223 684/3178/186 686/3180/188 685/3181/189 +f 685/3181/189 686/3180/188 688/3182/190 687/3183/225 +f 687/3183/225 688/3182/190 690/3184/192 689/3185/193 +f 689/3185/193 690/3184/192 692/3186/194 691/3187/195 +f 691/3187/195 692/3186/194 694/3188/196 693/3189/197 +f 693/3189/197 694/3188/196 696/3190/198 695/3191/199 +f 695/3191/199 696/3190/198 666/3192/169 665/3193/168 +f 733/3194/6 734/3195/228 736/3196/229 735/3197/230 +f 735/3198/230 736/3199/229 738/3200/231 737/3201/232 +f 737/3201/232 738/3200/231 740/3202/233 739/3203/1 +f 739/3203/1 740/3202/233 742/3204/234 741/3205/235 +f 741/3205/235 742/3204/234 744/3206/236 743/3207/237 +f 743/3207/237 744/3206/236 734/3195/228 733/3194/6 +f 745/3208/6 746/3209/238 748/3210/239 747/3211/237 +f 747/3212/237 748/3213/239 750/3214/240 749/3215/235 +f 749/3215/235 750/3214/240 752/3216/241 751/3217/1 +f 751/3217/1 752/3216/241 754/3218/242 753/3219/232 +f 753/3219/232 754/3218/242 756/3220/243 755/3221/230 +f 755/3221/230 756/3220/243 746/3209/238 745/3208/6 +f 757/3222/6 758/3223/238 760/3224/239 759/3225/237 +f 759/3226/237 760/3227/239 762/3228/240 761/3229/235 +f 761/3229/235 762/3228/240 764/3230/241 763/3231/1 +f 763/3231/1 764/3230/241 766/3232/242 765/3233/232 +f 765/3233/232 766/3232/242 768/3234/243 767/3235/230 +f 767/3235/230 768/3234/243 758/3223/238 757/3222/6 +f 769/3236/6 770/3237/238 772/3238/239 771/3239/237 +f 771/3240/237 772/3241/239 774/3242/240 773/3243/235 +f 773/3243/235 774/3242/240 776/3244/241 775/3245/1 +f 775/3245/1 776/3244/241 778/3246/242 777/3247/232 +f 777/3247/232 778/3246/242 780/3248/243 779/3249/230 +f 779/3249/230 780/3248/243 770/3237/238 769/3236/6 +f 781/3250/6 782/3251/238 784/3252/239 783/3253/237 +f 783/3254/237 784/3255/239 786/3256/240 785/3257/235 +f 785/3257/235 786/3256/240 788/3258/241 787/3259/1 +f 787/3259/1 788/3258/241 790/3260/242 789/3261/232 +f 789/3261/232 790/3260/242 792/3262/243 791/3263/230 +f 791/3263/230 792/3262/243 782/3251/238 781/3250/6 +f 793/3264/6 794/3265/228 796/3266/229 795/3267/230 +f 795/3268/230 796/3269/229 798/3270/231 797/3271/232 +f 797/3271/232 798/3270/231 800/3272/233 799/3273/1 +f 799/3273/1 800/3272/233 802/3274/234 801/3275/235 +f 801/3275/235 802/3274/234 804/3276/236 803/3277/237 +f 803/3277/237 804/3276/236 794/3265/228 793/3264/6 +f 805/3278/6 806/3279/228 808/3280/229 807/3281/230 +f 807/3282/230 808/3283/229 810/3284/231 809/3285/232 +f 809/3285/232 810/3284/231 812/3286/233 811/3287/1 +f 811/3287/1 812/3286/233 814/3288/234 813/3289/235 +f 813/3289/235 814/3288/234 816/3290/236 815/3291/237 +f 815/3291/237 816/3290/236 806/3279/228 805/3278/6 +f 817/3292/6 818/3293/228 820/3294/229 819/3295/230 +f 819/3296/230 820/3297/229 822/3298/231 821/3299/232 +f 821/3299/232 822/3298/231 824/3300/233 823/3301/1 +f 823/3301/1 824/3300/233 826/3302/234 825/3303/235 +f 825/3303/235 826/3302/234 828/3304/236 827/3305/237 +f 827/3305/237 828/3304/236 818/3293/228 817/3292/6 +f 829/3306/6 830/3307/228 832/3308/229 831/3309/230 +f 831/3310/230 832/3311/229 834/3312/231 833/3313/232 +f 833/3313/232 834/3312/231 836/3314/233 835/3315/1 +f 835/3315/1 836/3314/233 838/3316/234 837/3317/235 +f 837/3317/235 838/3316/234 840/3318/236 839/3319/237 +f 839/3319/237 840/3318/236 830/3307/228 829/3306/6 +f 841/3320/6 842/3321/238 844/3322/239 843/3323/237 +f 843/3324/237 844/3325/239 846/3326/240 845/3327/235 +f 845/3327/235 846/3326/240 848/3328/241 847/3329/1 +f 847/3329/1 848/3328/241 850/3330/242 849/3331/232 +f 849/3331/232 850/3330/242 852/3332/243 851/3333/230 +f 851/3333/230 852/3332/243 842/3321/238 841/3320/6 +f 853/3334/6 854/3335/238 856/3336/239 855/3337/237 +f 855/3338/237 856/3339/239 858/3340/240 857/3341/235 +f 857/3341/235 858/3340/240 860/3342/241 859/3343/1 +f 859/3343/1 860/3342/241 862/3344/242 861/3345/232 +f 861/3345/232 862/3344/242 864/3346/243 863/3347/230 +f 863/3347/230 864/3346/243 854/3335/238 853/3334/6 +f 865/3348/6 866/3349/238 868/3350/239 867/3351/237 +f 867/3352/237 868/3353/239 870/3354/240 869/3355/235 +f 869/3355/235 870/3354/240 872/3356/241 871/3357/1 +f 871/3357/1 872/3356/241 874/3358/242 873/3359/232 +f 873/3359/232 874/3358/242 876/3360/243 875/3361/230 +f 875/3361/230 876/3360/243 866/3349/238 865/3348/6 +f 877/3362/6 878/3363/238 880/3364/239 879/3365/237 +f 879/3366/237 880/3367/239 882/3368/240 881/3369/235 +f 881/3369/235 882/3368/240 884/3370/241 883/3371/1 +f 883/3371/1 884/3370/241 886/3372/242 885/3373/232 +f 885/3373/232 886/3372/242 888/3374/243 887/3375/230 +f 887/3375/230 888/3374/243 878/3363/238 877/3362/6 +f 889/3376/6 890/3377/228 892/3378/229 891/3379/230 +f 891/3380/230 892/3381/229 894/3382/231 893/3383/232 +f 893/3383/232 894/3382/231 896/3384/233 895/3385/1 +f 895/3385/1 896/3384/233 898/3386/234 897/3387/235 +f 897/3387/235 898/3386/234 900/3388/236 899/3389/237 +f 899/3389/237 900/3388/236 890/3377/228 889/3376/6 +f 901/3390/6 902/3391/228 904/3392/229 903/3393/230 +f 903/3394/230 904/3395/229 906/3396/231 905/3397/232 +f 905/3397/232 906/3396/231 908/3398/233 907/3399/1 +f 907/3399/1 908/3398/233 910/3400/234 909/3401/235 +f 909/3401/235 910/3400/234 912/3402/236 911/3403/237 +f 911/3403/237 912/3402/236 902/3391/228 901/3390/6 +f 913/3404/6 914/3405/228 916/3406/229 915/3407/230 +f 915/3408/230 916/3409/229 918/3410/231 917/3411/232 +f 917/3411/232 918/3410/231 920/3412/233 919/3413/1 +f 919/3413/1 920/3412/233 922/3414/234 921/3415/235 +f 921/3415/235 922/3414/234 924/3416/236 923/3417/237 +f 923/3417/237 924/3416/236 914/3405/228 913/3404/6 +f 925/3418/6 926/3419/244 928/3420/245 927/3421/246 +f 927/3422/246 928/3423/245 930/3424/247 929/3425/248 +f 929/3425/248 930/3424/247 932/3426/249 931/3427/1 +f 931/3427/1 932/3426/249 934/3428/250 933/3429/251 +f 933/3429/251 934/3428/250 936/3430/252 935/3431/253 +f 935/3431/253 936/3430/252 926/3419/244 925/3418/6 +f 937/3432/6 938/3433/244 940/3434/245 939/3435/246 +f 939/3436/246 940/3437/245 942/3438/247 941/3439/248 +f 941/3439/248 942/3438/247 944/3440/249 943/3441/1 +f 943/3441/1 944/3440/249 946/3442/250 945/3443/251 +f 945/3443/251 946/3442/250 948/3444/252 947/3445/253 +f 947/3445/253 948/3444/252 938/3433/244 937/3432/6 +f 949/3446/6 950/3447/254 952/3448/255 951/3449/253 +f 951/3450/253 952/3451/255 954/3452/256 953/3453/251 +f 953/3453/251 954/3452/256 956/3454/257 955/3455/1 +f 955/3455/1 956/3454/257 958/3456/258 957/3457/248 +f 957/3457/248 958/3456/258 960/3458/259 959/3459/246 +f 959/3459/246 960/3458/259 950/3447/254 949/3446/6 +f 961/3460/6 962/3461/254 964/3462/255 963/3463/253 +f 963/3464/253 964/3465/255 966/3466/256 965/3467/251 +f 965/3467/251 966/3466/256 968/3468/257 967/3469/1 +f 967/3469/1 968/3468/257 970/3470/258 969/3471/248 +f 969/3471/248 970/3470/258 972/3472/259 971/3473/246 +f 971/3473/246 972/3472/259 962/3461/254 961/3460/6 +f 973/3474/254 974/3475/244 976/3476/245 975/3477/259 +f 975/3478/259 976/3479/245 978/3480/247 977/3481/258 +f 977/3481/258 978/3480/247 980/3482/249 979/3483/257 +f 979/3483/257 980/3482/249 982/3484/250 981/3485/256 +f 981/3485/256 982/3484/250 983/3486/252 984/3487/255 +f 984/3487/255 983/3486/252 974/3475/244 973/3474/254 +f 985/3488/254 986/3489/244 988/3490/245 987/3491/259 +f 987/3492/259 988/3493/245 990/3494/247 989/3495/258 +f 989/3495/258 990/3494/247 992/3496/249 991/3497/257 +f 991/3497/257 992/3496/249 994/3498/250 993/3499/256 +f 993/3499/256 994/3498/250 995/3500/252 996/3501/255 +f 996/3501/255 995/3500/252 986/3489/244 985/3488/254 +f 997/3502/254 998/3503/244 1000/3504/245 999/3505/259 +f 999/3506/259 1000/3507/245 1002/3508/247 1001/3509/258 +f 1001/3509/258 1002/3508/247 1004/3510/249 1003/3511/257 +f 1003/3511/257 1004/3510/249 1006/3512/250 1005/3513/256 +f 1005/3513/256 1006/3512/250 1007/3514/252 1008/3515/255 +f 1008/3515/255 1007/3514/252 998/3503/244 997/3502/254 +f 1009/3516/238 1010/3517/228 1012/3518/229 1011/3519/243 +f 1011/3520/243 1012/3521/229 1014/3522/231 1013/3523/242 +f 1013/3523/242 1014/3522/231 1016/3524/233 1015/3525/241 +f 1015/3525/241 1016/3524/233 1018/3526/234 1017/3527/240 +f 1017/3527/240 1018/3526/234 1019/3528/236 1020/3529/239 +f 1020/3529/239 1019/3528/236 1010/3517/228 1009/3516/238 +f 1021/3530/6 1022/3531/244 1024/3532/245 1023/3533/246 +f 1023/3534/246 1024/3535/245 1026/3536/247 1025/3537/248 +f 1025/3537/248 1026/3536/247 1028/3538/249 1027/3539/1 +f 1027/3539/1 1028/3538/249 1030/3540/250 1029/3541/251 +f 1029/3541/251 1030/3540/250 1032/3542/252 1031/3543/253 +f 1031/3543/253 1032/3542/252 1022/3531/244 1021/3530/6 +f 1033/3544/6 1034/3545/244 1036/3546/245 1035/3547/246 +f 1035/3548/246 1036/3549/245 1038/3550/247 1037/3551/248 +f 1037/3551/248 1038/3550/247 1040/3552/249 1039/3553/1 +f 1039/3553/1 1040/3552/249 1042/3554/250 1041/3555/251 +f 1041/3555/251 1042/3554/250 1044/3556/252 1043/3557/253 +f 1043/3557/253 1044/3556/252 1034/3545/244 1033/3544/6 +f 1045/3558/6 1046/3559/254 1048/3560/255 1047/3561/253 +f 1047/3562/253 1048/3563/255 1050/3564/256 1049/3565/251 +f 1049/3565/251 1050/3564/256 1052/3566/257 1051/3567/1 +f 1051/3567/1 1052/3566/257 1054/3568/258 1053/3569/248 +f 1053/3569/248 1054/3568/258 1056/3570/259 1055/3571/246 +f 1055/3571/246 1056/3570/259 1046/3559/254 1045/3558/6 +f 1057/3572/6 1058/3573/254 1060/3574/255 1059/3575/253 +f 1059/3576/253 1060/3577/255 1062/3578/256 1061/3579/251 +f 1061/3579/251 1062/3578/256 1064/3580/257 1063/3581/1 +f 1063/3581/1 1064/3580/257 1066/3582/258 1065/3583/248 +f 1065/3583/248 1066/3582/258 1068/3584/259 1067/3585/246 +f 1067/3585/246 1068/3584/259 1058/3573/254 1057/3572/6 +f 1069/3586/238 1070/3587/228 1072/3588/229 1071/3589/243 +f 1071/3590/243 1072/3591/229 1074/3592/231 1073/3593/242 +f 1073/3593/242 1074/3592/231 1076/3594/233 1075/3595/241 +f 1075/3595/241 1076/3594/233 1078/3596/234 1077/3597/240 +f 1077/3597/240 1078/3596/234 1079/3598/236 1080/3599/239 +f 1080/3599/239 1079/3598/236 1070/3587/228 1069/3586/238 +f 1087/3600/24 1088/3601/24 1090/3602/43 1089/3603/43 +f 1089/3603/43 1090/3602/43 1092/3604/4 1091/3605/4 +f 1091/3605/4 1092/3604/4 1094/3606/45 1093/3607/45 +f 1093/3607/45 1094/3606/45 1096/3608/25 1095/3609/25 +f 1095/3609/25 1096/3608/25 1098/3610/46 1097/3611/46 +f 1097/3611/46 1098/3610/46 1100/3612/20 1099/3613/20 +f 1099/3613/20 1100/3612/20 1102/3614/44 1101/3615/44 +f 1101/3616/44 1102/3617/44 1088/3601/24 1087/3600/24 +f 1113/3618/238 1114/3619/228 1116/3620/229 1115/3621/243 +f 1115/3622/243 1116/3623/229 1118/3624/231 1117/3625/242 +f 1117/3625/242 1118/3624/231 1120/3626/233 1119/3627/241 +f 1119/3627/241 1120/3626/233 1122/3628/234 1121/3629/240 +f 1121/3629/240 1122/3628/234 1123/3630/236 1124/3631/239 +f 1124/3631/239 1123/3630/236 1114/3619/228 1113/3618/238 +f 1125/3632/238 1126/3633/228 1128/3634/229 1127/3635/243 +f 1127/3636/243 1128/3637/229 1130/3638/231 1129/3639/242 +f 1129/3639/242 1130/3638/231 1132/3640/233 1131/3641/241 +f 1131/3641/241 1132/3640/233 1134/3642/234 1133/3643/240 +f 1133/3643/240 1134/3642/234 1135/3644/236 1136/3645/239 +f 1136/3645/239 1135/3644/236 1126/3633/228 1125/3632/238 +f 1143/3646/1 1144/3647/1 1146/3648/3 1145/3649/3 +f 1145/3649/3 1146/3648/3 1148/3650/4 1147/3651/4 +f 1147/3651/4 1148/3650/4 1150/3652/5 1149/3653/5 +f 1149/3653/5 1150/3652/5 1152/3654/6 1151/3655/6 +f 1151/3655/6 1152/3654/6 1154/3656/7 1153/3657/7 +f 1153/3657/7 1154/3656/7 1156/3658/20 1155/3659/20 +f 1155/3659/20 1156/3658/20 1158/3660/2 1157/3661/2 +f 1157/3662/2 1158/3663/2 1144/3647/1 1143/3646/1 +f 1169/3664/117 1171/3665/119 1172/3666/141 1170/3667/4 +f 1171/3665/119 1173/3668/121 1174/3669/45 1172/3666/141 +f 1173/3668/121 1175/3670/123 1176/3671/142 1174/3669/45 +f 1175/3670/123 1177/3672/125 1178/3673/25 1176/3671/142 +f 1177/3672/125 1179/3674/127 1180/3675/143 1178/3673/25 +f 1179/3674/127 1181/3676/129 1182/3677/46 1180/3675/143 +f 1181/3676/129 1183/3678/144 1184/3679/145 1182/3677/46 +f 1183/3678/144 1185/3680/133 1186/3681/20 1184/3679/145 +f 1185/3680/133 1187/3682/135 1188/3683/146 1186/3681/20 +f 1187/3682/135 1189/3684/137 1190/3685/44 1188/3683/146 +f 1189/3684/137 1191/3686/147 1192/3687/148 1190/3685/44 +f 1191/3686/147 1193/3688/110 1194/3689/24 1192/3687/148 +f 1193/3690/110 1195/3691/149 1196/3692/150 1194/3693/24 +f 1195/3691/149 1197/3694/113 1198/3695/43 1196/3692/150 +f 1197/3694/113 1199/3696/115 1200/3697/151 1198/3695/43 +f 1199/3696/115 1169/3664/117 1170/3667/4 1200/3697/151 +f 1169/3698/117 1199/3699/115 1197/3700/113 1195/3701/149 1193/3702/110 1191/3703/147 1189/3704/137 1187/3705/135 1185/3706/133 1183/3707/144 1181/3708/129 1179/3709/127 1177/3710/125 1175/3711/123 1173/3712/121 1171/3713/119 +f 1201/3714/109 1202/3715/110 1204/3716/111 1203/3717/112 +f 1203/3717/112 1204/3716/111 1206/3718/113 1205/3719/114 +f 1205/3719/114 1206/3718/113 1208/3720/115 1207/3721/116 +f 1207/3721/116 1208/3720/115 1210/3722/117 1209/3723/118 +f 1209/3723/118 1210/3722/117 1212/3724/119 1211/3725/120 +f 1211/3725/120 1212/3724/119 1214/3726/121 1213/3727/122 +f 1213/3727/122 1214/3726/121 1216/3728/123 1215/3729/124 +f 1215/3729/124 1216/3728/123 1218/3730/125 1217/3731/126 +f 1217/3731/126 1218/3730/125 1220/3732/127 1219/3733/128 +f 1219/3733/128 1220/3732/127 1222/3734/129 1221/3735/130 +f 1221/3735/130 1222/3734/129 1224/3736/131 1223/3737/260 +f 1223/3737/260 1224/3736/131 1226/3738/133 1225/3739/134 +f 1225/3739/134 1226/3738/133 1228/3740/135 1227/3741/136 +f 1227/3741/136 1228/3740/135 1230/3742/137 1229/3743/138 +f 1229/3743/138 1230/3742/137 1232/3744/139 1231/3745/140 +f 1231/3746/140 1232/3747/139 1202/3715/110 1201/3714/109 +f 1239/3748/24 1240/3749/24 1242/3750/43 1241/3751/43 +f 1241/3751/43 1242/3750/43 1244/3752/4 1243/3753/4 +f 1243/3753/4 1244/3752/4 1246/3754/45 1245/3755/45 +f 1245/3755/45 1246/3754/45 1248/3756/25 1247/3757/25 +f 1247/3757/25 1248/3756/25 1250/3758/46 1249/3759/46 +f 1249/3759/46 1250/3758/46 1252/3760/20 1251/3761/20 +f 1251/3761/20 1252/3760/20 1254/3762/44 1253/3763/44 +f 1253/3764/44 1254/3765/44 1240/3749/24 1239/3748/24 +f 1265/3766/24 1282/3767/24 1288/3768/34 1266/3769/34 +f 1266/3769/34 1288/3768/34 1296/3770/39 1267/3771/39 +f 1267/3771/39 1296/3770/39 1287/3772/37 1268/3773/37 +f 1268/3773/37 1287/3772/37 1295/3774/1 1269/3775/1 +f 1269/3775/1 1295/3774/1 1286/3776/213 1270/3777/213 +f 1270/3777/213 1286/3776/213 1294/3778/29 1271/3779/29 +f 1271/3779/29 1294/3778/29 1289/3780/212 1272/3781/212 +f 1272/3781/212 1289/3780/212 1293/3782/25 1273/3783/25 +f 1273/3783/25 1293/3782/25 1284/3784/211 1274/3785/211 +f 1274/3785/211 1284/3784/211 1292/3786/27 1275/3787/27 +f 1275/3787/27 1292/3786/27 1283/3788/210 1276/3789/210 +f 1276/3789/210 1283/3788/210 1291/3790/6 1277/3791/6 +f 1277/3792/6 1291/3793/6 1285/3794/41 1278/3795/41 +f 1278/3795/41 1285/3794/41 1290/3796/26 1279/3797/26 +f 1279/3797/26 1290/3796/26 1281/3798/32 1280/3799/32 +f 1280/3799/32 1281/3798/32 1282/3767/24 1265/3766/24 +f 1314/3800/152 1315/3801/153 1320/3802/154 1317/3803/155 +f 1306/3804/156 1307/3805/157 1312/3806/158 1309/3807/159 +f 1318/3808/160 1319/3809/161 1302/3810/46 1301/3811/44 +f 1310/3812/162 1311/3813/163 1316/3814/261 1313/3815/165 +f 1299/3816/43 1300/3817/45 1308/3818/166 1305/3819/167 +f 1307/3805/157 1306/3804/156 1305/3819/167 1308/3818/166 +f 1311/3813/163 1310/3812/162 1309/3807/159 1312/3806/158 +f 1315/3801/153 1314/3800/152 1313/3815/165 1316/3814/261 +f 1319/3809/161 1318/3808/160 1317/3803/155 1320/3802/154 +f 1417/3820/24 1418/3821/24 1420/3822/26 1419/3823/26 +f 1419/3823/26 1420/3822/26 1422/3824/6 1421/3825/6 +f 1421/3825/6 1422/3824/6 1424/3826/27 1423/3827/27 +f 1423/3827/27 1424/3826/27 1426/3828/25 1425/3829/25 +f 1425/3829/25 1426/3828/25 1428/3830/29 1427/3831/29 +f 1427/3831/29 1428/3830/29 1430/3832/1 1429/3833/1 +f 1429/3833/1 1430/3832/1 1432/3834/39 1431/3835/39 +f 1431/3836/39 1432/3837/39 1418/3821/24 1417/3820/24 +f 1502/3838/262 1468/3839/169 1470/3840/215 1503/3841/263 +f 1503/3841/263 1470/3840/215 1472/3842/172 1507/3843/264 +f 1507/3843/264 1472/3842/172 1474/3844/217 1511/3845/265 +f 1511/3845/265 1474/3844/217 1476/3846/176 1515/3847/266 +f 1515/3847/266 1476/3846/176 1478/3848/219 1519/3849/267 +f 1519/3849/267 1478/3848/219 1480/3850/180 1523/3851/268 +f 1523/3851/268 1480/3850/180 1482/3852/221 1527/3853/269 +f 1527/3853/269 1482/3852/221 1484/3854/184 1531/3855/270 +f 1531/3855/270 1484/3854/184 1486/3856/186 1535/3857/271 +f 1535/3857/271 1486/3856/186 1488/3858/188 1539/3859/272 +f 1539/3859/272 1488/3858/188 1490/3860/224 1543/3861/273 +f 1543/3861/273 1490/3860/224 1492/3862/192 1547/3863/274 +f 1547/3863/274 1492/3862/192 1494/3864/194 1551/3865/275 +f 1551/3865/275 1494/3864/194 1496/3866/196 1555/3867/276 +f 1555/3867/276 1496/3866/196 1498/3868/198 1559/3869/277 +f 1497/3870/199 1562/3871/278 1499/3872/279 1467/3873/168 +f 1562/3871/278 1561/3874/280 1500/3875/281 1499/3872/279 +f 1556/3876/282 1560/3877/283 1561/3878/280 1557/3879/284 +f 1560/3880/283 1559/3881/277 1502/3838/262 1501/3882/285 +f 1495/3883/197 1558/3884/286 1562/3885/278 1497/3886/199 +f 1558/3884/286 1557/3887/284 1561/3888/280 1562/3885/278 +f 1552/3889/287 1556/3876/282 1557/3879/284 1553/3890/288 +f 1556/3891/282 1555/3867/276 1559/3869/277 1560/3892/283 +f 1493/3893/227 1554/3894/289 1558/3884/286 1495/3883/197 +f 1554/3894/289 1553/3895/288 1557/3887/284 1558/3884/286 +f 1548/3896/290 1552/3889/287 1553/3890/288 1549/3897/291 +f 1552/3898/287 1551/3865/275 1555/3867/276 1556/3891/282 +f 1491/3899/193 1550/3900/292 1554/3894/289 1493/3893/227 +f 1550/3900/292 1549/3901/291 1553/3895/288 1554/3894/289 +f 1544/3902/293 1548/3903/290 1549/3901/291 1545/3904/294 +f 1548/3903/290 1547/3863/274 1551/3865/275 1552/3898/287 +f 1489/3905/225 1546/3906/295 1550/3900/292 1491/3899/193 +f 1546/3906/295 1545/3904/294 1549/3901/291 1550/3900/292 +f 1540/3907/296 1544/3902/293 1545/3904/294 1541/3908/297 +f 1544/3902/293 1543/3861/273 1547/3863/274 1548/3903/290 +f 1487/3909/189 1542/3910/298 1546/3906/295 1489/3905/225 +f 1542/3910/298 1541/3908/297 1545/3904/294 1546/3906/295 +f 1536/3911/299 1540/3907/296 1541/3908/297 1537/3912/300 +f 1540/3907/296 1539/3859/272 1543/3861/273 1544/3902/293 +f 1485/3913/223 1538/3914/301 1542/3910/298 1487/3909/189 +f 1538/3914/301 1537/3912/300 1541/3908/297 1542/3910/298 +f 1532/3915/302 1536/3911/299 1537/3912/300 1533/3916/303 +f 1536/3911/299 1535/3857/271 1539/3859/272 1540/3907/296 +f 1483/3917/185 1534/3918/304 1538/3914/301 1485/3913/223 +f 1534/3918/304 1533/3916/303 1537/3912/300 1538/3914/301 +f 1528/3919/305 1532/3915/302 1533/3916/303 1529/3920/306 +f 1532/3915/302 1531/3855/270 1535/3857/271 1536/3911/299 +f 1481/3921/307 1530/3922/308 1534/3918/304 1483/3917/185 +f 1530/3922/308 1529/3920/306 1533/3916/303 1534/3918/304 +f 1524/3923/309 1528/3919/305 1529/3920/306 1525/3924/310 +f 1528/3919/305 1527/3853/269 1531/3855/270 1532/3915/302 +f 1479/3925/181 1526/3926/311 1530/3922/308 1481/3921/307 +f 1526/3926/311 1525/3924/310 1529/3920/306 1530/3922/308 +f 1520/3927/312 1524/3923/309 1525/3924/310 1521/3928/313 +f 1524/3923/309 1523/3851/268 1527/3853/269 1528/3919/305 +f 1477/3929/220 1522/3930/314 1526/3926/311 1479/3925/181 +f 1522/3930/314 1521/3928/313 1525/3924/310 1526/3926/311 +f 1516/3931/315 1520/3932/312 1521/3933/313 1517/3934/316 +f 1520/3927/312 1519/3849/267 1523/3851/268 1524/3923/309 +f 1475/3935/177 1518/3936/317 1522/3930/314 1477/3929/220 +f 1518/3936/317 1517/3937/316 1521/3928/313 1522/3930/314 +f 1512/3938/318 1516/3931/315 1517/3934/316 1513/3939/319 +f 1516/3940/315 1515/3847/266 1519/3849/267 1520/3927/312 +f 1473/3941/218 1514/3942/320 1518/3936/317 1475/3935/177 +f 1514/3942/320 1513/3943/319 1517/3937/316 1518/3936/317 +f 1508/3944/321 1512/3938/318 1513/3939/319 1509/3945/322 +f 1512/3946/318 1511/3845/265 1515/3847/266 1516/3940/315 +f 1471/3947/173 1510/3948/323 1514/3942/320 1473/3941/218 +f 1510/3948/323 1509/3949/322 1513/3943/319 1514/3942/320 +f 1504/3950/324 1508/3944/321 1509/3945/322 1505/3951/325 +f 1508/3952/321 1507/3843/264 1511/3845/265 1512/3946/318 +f 1469/3953/171 1506/3954/326 1510/3948/323 1471/3947/173 +f 1506/3954/326 1505/3955/325 1509/3949/322 1510/3948/323 +f 1500/3956/281 1501/3957/285 1504/3950/324 1505/3951/325 +f 1504/3958/324 1503/3841/263 1507/3843/264 1508/3952/321 +f 1467/3873/168 1499/3872/279 1506/3954/326 1469/3953/171 +f 1499/3872/279 1500/3875/281 1505/3955/325 1506/3954/326 +f 1559/3881/277 1498/3959/198 1468/3839/169 1502/3838/262 +f 1501/3882/285 1502/3838/262 1503/3841/263 1504/3958/324 +f 1560/3877/283 1501/3957/285 1500/3956/281 1561/3878/280 +f 1591/3960/254 1592/3961/244 1594/3962/245 1593/3963/259 +f 1593/3964/259 1594/3965/245 1596/3966/247 1595/3967/258 +f 1595/3967/258 1596/3966/247 1598/3968/249 1597/3969/257 +f 1597/3969/257 1598/3968/249 1600/3970/250 1599/3971/256 +f 1599/3971/256 1600/3970/250 1601/3972/252 1602/3973/255 +f 1602/3973/255 1601/3972/252 1592/3961/244 1591/3960/254 +f 1638/3974/327 1604/3975/78 1606/3976/79 1639/3977/328 +f 1639/3977/328 1606/3976/79 1608/3978/81 1643/3979/329 +f 1643/3979/329 1608/3978/81 1610/3980/203 1647/3981/330 +f 1647/3981/330 1610/3980/203 1612/3982/85 1651/3983/331 +f 1651/3983/331 1612/3982/85 1614/3984/202 1655/3985/332 +f 1655/3985/332 1614/3984/202 1616/3986/89 1659/3987/333 +f 1659/3987/333 1616/3986/89 1618/3988/200 1663/3989/334 +f 1663/3989/334 1618/3988/200 1620/3990/93 1667/3991/335 +f 1667/3991/335 1620/3990/93 1622/3992/95 1671/3993/336 +f 1671/3993/336 1622/3992/95 1624/3994/97 1675/3995/337 +f 1675/3995/337 1624/3994/97 1626/3996/99 1679/3997/338 +f 1679/3997/338 1626/3996/99 1628/3998/101 1683/3999/339 +f 1683/3999/339 1628/3998/101 1630/4000/103 1687/4001/340 +f 1687/4001/340 1630/4000/103 1632/4002/105 1691/4003/341 +f 1691/4003/341 1632/4002/105 1634/4004/107 1695/4005/342 +f 1633/4006/108 1698/4007/343 1635/4008/344 1603/4009/77 +f 1698/4007/343 1697/4010/345 1636/4011/346 1635/4008/344 +f 1692/4012/347 1696/4013/348 1697/4014/345 1693/4015/349 +f 1696/4016/348 1695/4017/342 1638/3974/327 1637/4018/350 +f 1631/4019/106 1694/4020/351 1698/4021/343 1633/4022/108 +f 1694/4020/351 1693/4023/349 1697/4024/345 1698/4021/343 +f 1688/4025/352 1692/4012/347 1693/4015/349 1689/4026/353 +f 1692/4027/347 1691/4003/341 1695/4005/342 1696/4028/348 +f 1629/4029/104 1690/4030/354 1694/4020/351 1631/4019/106 +f 1690/4030/354 1689/4031/353 1693/4023/349 1694/4020/351 +f 1684/4032/355 1688/4025/352 1689/4026/353 1685/4033/356 +f 1688/4034/352 1687/4001/340 1691/4003/341 1692/4027/347 +f 1627/4035/102 1686/4036/357 1690/4030/354 1629/4029/104 +f 1686/4036/357 1685/4037/356 1689/4031/353 1690/4030/354 +f 1680/4038/358 1684/4039/355 1685/4037/356 1681/4040/359 +f 1684/4039/355 1683/3999/339 1687/4001/340 1688/4034/352 +f 1625/4041/100 1682/4042/360 1686/4036/357 1627/4035/102 +f 1682/4042/360 1681/4040/359 1685/4037/356 1686/4036/357 +f 1676/4043/361 1680/4038/358 1681/4040/359 1677/4044/362 +f 1680/4038/358 1679/3997/338 1683/3999/339 1684/4039/355 +f 1623/4045/98 1678/4046/363 1682/4042/360 1625/4041/100 +f 1678/4046/363 1677/4044/362 1681/4040/359 1682/4042/360 +f 1672/4047/364 1676/4043/361 1677/4044/362 1673/4048/365 +f 1676/4043/361 1675/3995/337 1679/3997/338 1680/4038/358 +f 1621/4049/96 1674/4050/366 1678/4046/363 1623/4045/98 +f 1674/4050/366 1673/4048/365 1677/4044/362 1678/4046/363 +f 1668/4051/367 1672/4047/364 1673/4048/365 1669/4052/368 +f 1672/4047/364 1671/3993/336 1675/3995/337 1676/4043/361 +f 1619/4053/94 1670/4054/369 1674/4050/366 1621/4049/96 +f 1670/4054/369 1669/4052/368 1673/4048/365 1674/4050/366 +f 1664/4055/370 1668/4051/367 1669/4052/368 1665/4056/371 +f 1668/4051/367 1667/3991/335 1671/3993/336 1672/4047/364 +f 1617/4057/92 1666/4058/372 1670/4054/369 1619/4053/94 +f 1666/4058/372 1665/4056/371 1669/4052/368 1670/4054/369 +f 1660/4059/373 1664/4055/370 1665/4056/371 1661/4060/374 +f 1664/4055/370 1663/3989/334 1667/3991/335 1668/4051/367 +f 1615/4061/90 1662/4062/375 1666/4058/372 1617/4057/92 +f 1662/4062/375 1661/4060/374 1665/4056/371 1666/4058/372 +f 1656/4063/376 1660/4059/373 1661/4060/374 1657/4064/377 +f 1660/4059/373 1659/3987/333 1663/3989/334 1664/4055/370 +f 1613/4065/201 1658/4066/378 1662/4062/375 1615/4061/90 +f 1658/4066/378 1657/4064/377 1661/4060/374 1662/4062/375 +f 1652/4067/379 1656/4068/376 1657/4069/377 1653/4070/380 +f 1656/4063/376 1655/3985/332 1659/3987/333 1660/4059/373 +f 1611/4071/86 1654/4072/381 1658/4066/378 1613/4065/201 +f 1654/4072/381 1653/4073/380 1657/4064/377 1658/4066/378 +f 1648/4074/382 1652/4067/379 1653/4070/380 1649/4075/383 +f 1652/4076/379 1651/3983/331 1655/3985/332 1656/4063/376 +f 1609/4077/84 1650/4078/384 1654/4072/381 1611/4071/86 +f 1650/4078/384 1649/4079/383 1653/4073/380 1654/4072/381 +f 1644/4080/385 1648/4074/382 1649/4075/383 1645/4081/386 +f 1648/4082/382 1647/3981/330 1651/3983/331 1652/4076/379 +f 1607/4083/82 1646/4084/387 1650/4078/384 1609/4077/84 +f 1646/4084/387 1645/4085/386 1649/4079/383 1650/4078/384 +f 1640/4086/388 1644/4080/385 1645/4081/386 1641/4087/389 +f 1644/4088/385 1643/3979/329 1647/3981/330 1648/4082/382 +f 1605/4089/80 1642/4090/390 1646/4084/387 1607/4083/82 +f 1642/4090/390 1641/4091/389 1645/4085/386 1646/4084/387 +f 1636/4092/346 1637/4093/350 1640/4086/388 1641/4087/389 +f 1640/4094/388 1639/3977/328 1643/3979/329 1644/4088/385 +f 1603/4009/77 1635/4008/344 1642/4090/390 1605/4089/80 +f 1635/4008/344 1636/4011/346 1641/4091/389 1642/4090/390 +f 1695/4017/342 1634/4095/107 1604/3975/78 1638/3974/327 +f 1637/4018/350 1638/3974/327 1639/3977/328 1640/4094/388 +f 1696/4013/348 1637/4093/350 1636/4092/346 1697/4014/345 +f 1699/4096/93 1700/4097/94 1702/4098/92 1701/4099/91 +f 1701/4099/91 1702/4098/92 1704/4100/90 1703/4101/89 +f 1703/4101/89 1704/4100/90 1706/4102/88 1705/4103/87 +f 1705/4103/87 1706/4102/88 1708/4104/86 1707/4105/85 +f 1707/4105/85 1708/4104/86 1710/4106/391 1709/4107/83 +f 1709/4107/83 1710/4106/391 1712/4108/82 1711/4109/81 +f 1711/4109/81 1712/4108/82 1714/4110/80 1713/4111/205 +f 1713/4111/205 1714/4110/80 1716/4112/77 1715/4113/78 +f 1715/4114/78 1716/4115/77 1718/4116/392 1717/4117/107 +f 1717/4117/107 1718/4116/392 1720/4118/106 1719/4119/105 +f 1719/4119/105 1720/4118/106 1722/4120/206 1721/4121/207 +f 1721/4121/207 1722/4120/206 1724/4122/102 1723/4123/101 +f 1723/4123/101 1724/4122/102 1726/4124/208 1725/4125/99 +f 1725/4125/99 1726/4124/208 1728/4126/98 1727/4127/97 +f 1727/4127/97 1728/4126/98 1730/4128/96 1729/4129/209 +f 1729/4129/209 1730/4128/96 1700/4130/94 1699/4131/93 +f 1731/4132/6 1732/4133/238 1734/4134/239 1733/4135/237 +f 1733/4136/237 1734/4137/239 1736/4138/240 1735/4139/235 +f 1735/4139/235 1736/4138/240 1738/4140/241 1737/4141/1 +f 1737/4141/1 1738/4140/241 1740/4142/242 1739/4143/232 +f 1739/4143/232 1740/4142/242 1742/4144/243 1741/4145/230 +f 1741/4145/230 1742/4144/243 1732/4133/238 1731/4132/6 +f 1743/4146/6 1744/4147/238 1746/4148/239 1745/4149/237 +f 1745/4150/237 1746/4151/239 1748/4152/240 1747/4153/235 +f 1747/4153/235 1748/4152/240 1750/4154/241 1749/4155/1 +f 1749/4155/1 1750/4154/241 1752/4156/242 1751/4157/232 +f 1751/4157/232 1752/4156/242 1754/4158/243 1753/4159/230 +f 1753/4159/230 1754/4158/243 1744/4147/238 1743/4146/6 +f 1755/4160/6 1756/4161/228 1758/4162/229 1757/4163/230 +f 1757/4164/230 1758/4165/229 1760/4166/231 1759/4167/232 +f 1759/4167/232 1760/4166/231 1762/4168/233 1761/4169/1 +f 1761/4169/1 1762/4168/233 1764/4170/234 1763/4171/235 +f 1763/4171/235 1764/4170/234 1766/4172/236 1765/4173/237 +f 1765/4173/237 1766/4172/236 1756/4161/228 1755/4160/6 +f 1767/4174/6 1768/4175/228 1770/4176/229 1769/4177/230 +f 1769/4178/230 1770/4179/229 1772/4180/231 1771/4181/232 +f 1771/4181/232 1772/4180/231 1774/4182/233 1773/4183/1 +f 1773/4183/1 1774/4182/233 1776/4184/234 1775/4185/235 +f 1775/4185/235 1776/4184/234 1778/4186/236 1777/4187/237 +f 1777/4187/237 1778/4186/236 1768/4175/228 1767/4174/6 +f 1779/4188/6 1780/4189/228 1782/4190/229 1781/4191/230 +f 1781/4192/230 1782/4193/229 1784/4194/231 1783/4195/232 +f 1783/4195/232 1784/4194/231 1786/4196/233 1785/4197/1 +f 1785/4197/1 1786/4196/233 1788/4198/234 1787/4199/235 +f 1787/4199/235 1788/4198/234 1790/4200/236 1789/4201/237 +f 1789/4201/237 1790/4200/236 1780/4189/228 1779/4188/6 +f 1791/4202/6 1792/4203/238 1794/4204/239 1793/4205/237 +f 1793/4206/237 1794/4207/239 1796/4208/240 1795/4209/235 +f 1795/4209/235 1796/4208/240 1798/4210/241 1797/4211/1 +f 1797/4211/1 1798/4210/241 1800/4212/242 1799/4213/232 +f 1799/4213/232 1800/4212/242 1802/4214/243 1801/4215/230 +f 1801/4215/230 1802/4214/243 1792/4203/238 1791/4202/6 +f 1870/4216/152 1871/4217/153 1876/4218/154 1873/4219/155 +f 1862/4220/156 1863/4221/157 1868/4222/158 1865/4223/159 +f 1874/4224/160 1875/4225/161 1858/4226/46 1857/4227/44 +f 1866/4228/162 1867/4229/393 1872/4230/261 1869/4231/165 +f 1855/4232/43 1856/4233/45 1864/4234/166 1861/4235/167 +f 1863/4221/157 1862/4220/156 1861/4235/167 1864/4234/166 +f 1867/4229/393 1866/4228/162 1865/4223/159 1868/4222/158 +f 1871/4217/153 1870/4216/152 1869/4231/165 1872/4230/261 +f 1875/4225/161 1874/4224/160 1873/4219/155 1876/4218/154 +f 1894/4236/152 1895/4237/153 1900/4238/154 1897/4239/155 +f 1886/4240/156 1887/4241/157 1892/4242/158 1889/4243/159 +f 1898/4244/160 1899/4245/161 1882/4246/46 1881/4247/44 +f 1890/4248/162 1891/4249/393 1896/4250/261 1893/4251/165 +f 1879/4252/43 1880/4253/45 1888/4254/166 1885/4255/167 +f 1887/4241/157 1886/4240/156 1885/4255/167 1888/4254/166 +f 1891/4249/393 1890/4248/162 1889/4243/159 1892/4242/158 +f 1895/4237/153 1894/4236/152 1893/4251/165 1896/4250/261 +f 1899/4245/161 1898/4244/160 1897/4239/155 1900/4238/154 +f 1957/4256/394 1906/4257/395 1904/4258/45 1970/4259/396 +f 1903/4260/46 1908/4261/397 1962/4262/398 1965/4263/399 +f 1947/4264/400 1945/4265/401 1950/4266/402 1952/4267/403 +f 1943/4268/404 1941/4269/405 1954/4270/406 1956/4271/407 +f 1958/4272/408 1969/4273/409 1914/4274/410 1909/4275/411 +f 1921/4276/412 1950/4266/402 1945/4265/401 1918/4277/413 +f 1919/4278/404 1917/4279/405 1922/4280/406 1924/4281/407 +f 1935/4282/400 1933/4283/401 1938/4284/402 1940/4285/403 +f 1932/4286/414 1927/4287/415 1925/4288/394 1930/4289/396 +f 1912/4290/416 1915/4291/417 1913/4292/399 1910/4293/398 +f 1969/4273/409 1958/4272/408 1960/4294/418 1971/4295/419 +f 1922/4280/406 1917/4279/405 1910/4293/398 1913/4292/399 +f 1930/4289/396 1925/4288/394 1934/4296/420 1937/4297/421 +f 1968/4298/422 1963/4299/423 1961/4300/411 1966/4301/410 +f 1918/4277/413 1920/4302/424 1923/4303/425 1921/4276/412 +f 1959/4304/415 1957/4256/394 1970/4259/396 1972/4305/414 +f 1944/4306/424 1943/4307/404 1956/4308/407 1955/4309/425 +f 1934/4296/420 1936/4310/426 1939/4311/427 1937/4297/421 +f 1953/4312/412 1938/4284/402 1933/4283/401 1942/4313/413 +f 1971/4295/419 1960/4294/418 1959/4314/415 1972/4315/414 +f 1965/4263/399 1962/4262/398 1964/4316/416 1967/4317/417 +f 1909/4275/411 1914/4274/410 1916/4318/422 1911/4319/423 +f 1942/4313/413 1944/4306/424 1955/4309/425 1953/4312/412 +f 1929/4320/409 1926/4321/408 1928/4322/418 1931/4323/419 +f 1902/4324/44 1954/4270/406 1941/4269/405 1907/4325/428 +f 1948/4326/426 1947/4327/400 1952/4328/403 1951/4329/427 +f 1905/4330/429 1946/4331/420 1949/4332/421 1901/4333/43 +f 1926/4321/408 1929/4320/409 1966/4301/410 1961/4300/411 +f 1936/4310/426 1935/4334/400 1940/4335/403 1939/4311/427 +f 1920/4302/424 1919/4336/404 1924/4337/407 1923/4303/425 +f 1911/4319/423 1916/4318/422 1915/4338/417 1912/4339/416 +f 1931/4323/419 1928/4322/418 1927/4340/415 1932/4341/414 +f 1946/4331/420 1948/4326/426 1951/4329/427 1949/4332/421 +f 1967/4317/417 1964/4316/416 1963/4342/423 1968/4343/422 +f 1991/4344/430 1992/4345/431 2014/4346/432 2013/4347/433 +f 1982/4348/434 1983/4349/435 2005/4350/436 2004/4351/437 +f 1992/4345/431 1993/4352/438 2015/4353/439 2014/4346/432 +f 1987/4354/440 1988/4355/441 2010/4356/442 2009/4357/443 +f 1988/4355/441 1989/4358/444 2011/4359/445 2010/4356/442 +f 1983/4349/435 1984/4360/446 2006/4361/447 2005/4350/436 +f 1993/4352/438 1994/4362/448 2016/4363/449 2015/4353/439 +f 1984/4360/446 1985/4364/450 2007/4365/451 2006/4361/447 +f 1994/4362/448 1995/4366/452 2017/4367/453 2016/4363/449 +f 1989/4358/444 1990/4368/454 2012/4369/455 2011/4359/445 +f 1996/4370/456 1981/4371/457 2003/4372/458 2018/4373/459 +f 1990/4368/454 1991/4344/430 2013/4347/433 2012/4369/455 +f 1985/4364/450 1986/4374/460 2008/4375/461 2007/4365/451 +f 1995/4366/452 1996/4376/456 2018/4377/459 2017/4367/453 +f 1986/4374/460 1987/4354/440 2009/4357/443 2008/4375/461 +f 1981/4371/457 1982/4348/434 2004/4351/437 2003/4372/458 +f 2009/4357/443 2010/4356/442 2026/4378/185 2025/4379/307 +f 2018/4373/459 2003/4372/458 2019/4380/216 2034/4381/168 +f 2017/4367/453 2018/4377/459 2034/4382/168 2033/4383/462 +f 2010/4356/442 2011/4359/445 2027/4384/187 2026/4378/185 +f 2003/4372/458 2004/4351/437 2020/4385/173 2019/4380/216 +f 2011/4359/445 2012/4369/455 2028/4386/189 2027/4384/187 +f 2004/4351/437 2005/4350/436 2021/4387/218 2020/4385/173 +f 2012/4369/455 2013/4347/433 2029/4388/225 2028/4386/189 +f 2005/4350/436 2006/4361/447 2022/4389/177 2021/4387/218 +f 2013/4347/433 2014/4346/432 2030/4390/193 2029/4388/225 +f 2006/4361/447 2007/4365/451 2023/4391/220 2022/4389/177 +f 2014/4346/432 2015/4353/439 2031/4392/227 2030/4390/193 +f 2007/4365/451 2008/4375/461 2024/4393/181 2023/4391/220 +f 2015/4353/439 2016/4363/449 2032/4394/197 2031/4392/227 +f 2008/4375/461 2009/4357/443 2025/4379/307 2024/4393/181 +f 2016/4363/449 2017/4367/453 2033/4383/462 2032/4394/197 +f 2045/4395/463 2067/4396/464 2068/4397/465 2046/4398/466 +f 2036/4399/467 2058/4400/468 2059/4401/469 2037/4402/470 +f 2046/4398/466 2068/4397/465 2069/4403/471 2047/4404/472 +f 2041/4405/473 2063/4406/474 2064/4407/475 2042/4408/476 +f 2042/4408/476 2064/4407/475 2065/4409/477 2043/4410/478 +f 2037/4402/470 2059/4401/469 2060/4411/479 2038/4412/480 +f 2047/4404/472 2069/4403/471 2070/4413/481 2048/4414/482 +f 2038/4412/480 2060/4411/479 2061/4415/483 2039/4416/484 +f 2048/4414/482 2070/4413/481 2071/4417/485 2049/4418/486 +f 2043/4410/478 2065/4409/477 2066/4419/487 2044/4420/488 +f 2050/4421/489 2072/4422/490 2057/4423/491 2035/4424/492 +f 2044/4420/488 2066/4419/487 2067/4396/464 2045/4395/463 +f 2039/4416/484 2061/4415/483 2062/4425/493 2040/4426/494 +f 2049/4418/486 2071/4417/485 2072/4427/490 2050/4428/489 +f 2040/4426/494 2062/4425/493 2063/4406/474 2041/4405/473 +f 2035/4424/492 2057/4423/491 2058/4400/468 2036/4399/467 +f 2063/4406/474 2079/4429/221 2080/4430/184 2064/4407/475 +f 2072/4422/490 2088/4431/169 2073/4432/215 2057/4423/491 +f 2071/4417/485 2087/4433/198 2088/4434/169 2072/4427/490 +f 2064/4407/475 2080/4430/184 2081/4435/222 2065/4409/477 +f 2057/4423/491 2073/4432/215 2074/4436/172 2058/4400/468 +f 2065/4409/477 2081/4435/222 2082/4437/188 2066/4419/487 +f 2058/4400/468 2074/4436/172 2075/4438/217 2059/4401/469 +f 2066/4419/487 2082/4437/188 2083/4439/224 2067/4396/464 +f 2059/4401/469 2075/4438/217 2076/4440/176 2060/4411/479 +f 2067/4396/464 2083/4439/224 2084/4441/192 2068/4397/465 +f 2060/4411/479 2076/4440/176 2077/4442/219 2061/4415/483 +f 2068/4397/465 2084/4441/192 2085/4443/226 2069/4403/471 +f 2061/4415/483 2077/4442/219 2078/4444/180 2062/4425/493 +f 2069/4403/471 2085/4443/226 2086/4445/196 2070/4413/481 +f 2062/4425/493 2078/4444/180 2079/4429/221 2063/4406/474 +f 2070/4413/481 2086/4445/196 2087/4433/198 2071/4417/485 +f 1981/4371/457 2035/4424/492 2036/4399/467 1982/4348/434 +f 1982/4348/434 2036/4399/467 2037/4402/470 1983/4349/435 +f 1983/4349/435 2037/4402/470 2038/4412/480 1984/4360/446 +f 1984/4360/446 2038/4412/480 2039/4416/484 1985/4364/450 +f 1985/4364/450 2039/4416/484 2040/4426/494 1986/4374/460 +f 1986/4374/460 2040/4426/494 2041/4405/473 1987/4354/440 +f 1987/4354/440 2041/4405/473 2042/4408/476 1988/4355/441 +f 1988/4355/441 2042/4408/476 2043/4410/478 1989/4358/444 +f 1989/4358/444 2043/4410/478 2044/4420/488 1990/4368/454 +f 1990/4368/454 2044/4420/488 2045/4395/463 1991/4344/430 +f 1991/4344/430 2045/4395/463 2046/4398/466 1992/4345/431 +f 1992/4345/431 2046/4398/466 2047/4404/472 1993/4352/438 +f 1993/4352/438 2047/4404/472 2048/4414/482 1994/4362/448 +f 1994/4362/448 2048/4414/482 2049/4418/486 1995/4366/452 +f 1995/4366/452 2049/4418/486 2050/4428/489 1996/4376/456 +f 1996/4370/456 2050/4421/489 2035/4424/492 1981/4371/457 +f 2145/4446/24 2146/4447/24 2148/4448/150 2147/4449/150 +f 2147/4449/150 2148/4448/150 2150/4450/43 2149/4451/43 +f 2149/4451/43 2150/4450/43 2152/4452/151 2151/4453/151 +f 2151/4453/151 2152/4452/151 2154/4454/4 2153/4455/4 +f 2153/4455/4 2154/4454/4 2156/4456/141 2155/4457/141 +f 2155/4457/141 2156/4456/141 2158/4458/45 2157/4459/45 +f 2157/4459/45 2158/4458/45 2160/4460/142 2159/4461/142 +f 2159/4461/142 2160/4460/142 2162/4462/25 2161/4463/25 +f 2161/4463/25 2162/4462/25 2164/4464/143 2163/4465/143 +f 2163/4465/143 2164/4464/143 2166/4466/46 2165/4467/46 +f 2165/4467/46 2166/4466/46 2168/4468/145 2167/4469/145 +f 2167/4469/145 2168/4468/145 2170/4470/20 2169/4471/20 +f 2169/4471/20 2170/4470/20 2172/4472/146 2171/4473/146 +f 2171/4473/146 2172/4472/146 2174/4474/44 2173/4475/44 +f 2173/4475/44 2174/4474/44 2176/4476/148 2175/4477/148 +f 2175/4478/148 2176/4479/148 2146/4447/24 2145/4446/24 +f 2192/4480/1 2177/4481/495 2178/4482/496 +f 2192/4483/1 2178/4482/496 2179/4484/497 +f 2192/4485/1 2179/4484/497 2180/4486/498 +f 2192/4487/1 2180/4486/498 2181/4488/499 +f 2192/4489/1 2181/4488/499 2182/4490/500 +f 2192/4491/1 2182/4490/500 2183/4492/501 +f 2192/4493/1 2183/4492/501 2184/4494/502 +f 2192/4495/1 2184/4496/502 2185/4497/503 +f 2192/4498/1 2185/4497/503 2186/4499/504 +f 2192/4500/1 2186/4499/504 2187/4501/505 +f 2192/4502/1 2187/4501/505 2188/4503/506 +f 2192/4504/1 2188/4503/506 2189/4505/507 +f 2192/4506/1 2189/4505/507 2190/4507/508 +f 2192/4508/1 2190/4507/508 2191/4509/509 +f 2192/4510/1 2191/4509/509 2193/4511/510 +f 2192/4512/1 2193/4513/510 2177/4481/495 +f 2297/4514/511 2345/4515/512 2344/4516/513 2295/4517/514 +f 2279/4518/515 2336/4519/516 2335/4520/517 2277/4521/518 +f 2323/4522/519 2358/4523/520 2357/4524/521 2321/4525/522 +f 2305/4526/523 2349/4527/524 2348/4528/525 2303/4529/526 +f 2287/4530/527 2340/4531/528 2339/4532/529 2285/4533/530 +f 2267/4534/531 2331/4535/532 2361/4536/533 2329/4537/534 +f 2269/4538/535 2330/4539/536 2331/4535/532 2267/4534/531 +f 2313/4540/537 2353/4541/538 2352/4542/539 2311/4543/540 +f 2295/4517/514 2344/4516/513 2343/4544/541 2293/4545/542 +f 2277/4521/518 2335/4520/517 2334/4546/543 2275/4547/544 +f 2321/4525/522 2357/4524/521 2356/4548/545 2319/4549/546 +f 2303/4529/526 2348/4528/525 2347/4550/547 2301/4551/548 +f 2285/4533/530 2339/4532/529 2338/4552/549 2283/4553/550 +f 2329/4537/534 2361/4536/533 2360/4554/551 2327/4555/552 +f 2311/4543/540 2352/4542/539 2351/4556/553 2309/4557/554 +f 2293/4545/542 2343/4544/541 2342/4558/555 2291/4559/556 +f 2275/4547/544 2334/4546/543 2333/4560/557 2273/4561/558 +f 2319/4549/546 2356/4548/545 2355/4562/559 2317/4563/560 +f 2301/4551/548 2347/4550/547 2346/4564/561 2299/4565/562 +f 2283/4553/550 2338/4552/549 2337/4566/563 2281/4567/564 +f 2327/4555/552 2360/4554/551 2359/4568/565 2325/4569/566 +f 2309/4557/554 2351/4556/553 2350/4570/567 2307/4571/568 +f 2291/4559/556 2342/4558/555 2341/4572/569 2289/4573/570 +f 2273/4561/558 2333/4560/557 2332/4574/571 2271/4575/572 +f 2317/4563/560 2355/4562/559 2354/4576/573 2315/4577/574 +f 2299/4565/562 2346/4564/561 2345/4515/512 2297/4514/511 +f 2281/4567/564 2337/4566/563 2336/4519/516 2279/4518/515 +f 2325/4569/566 2359/4568/565 2358/4523/520 2323/4522/519 +f 2307/4571/568 2350/4570/567 2349/4527/524 2305/4526/523 +f 2289/4573/570 2341/4572/569 2340/4531/528 2287/4530/527 +f 2271/4575/572 2332/4574/571 2330/4539/536 2269/4538/535 +f 2315/4577/574 2354/4576/573 2353/4541/538 2313/4540/537 +f 2278/4578/516 2368/4579/515 2369/4580/564 2280/4581/563 +f 2296/4582/512 2377/4583/511 2378/4584/562 2298/4585/561 +f 2314/4586/573 2386/4587/574 2387/4588/560 2316/4589/559 +f 2270/4590/571 2364/4591/572 2365/4592/558 2272/4593/557 +f 2288/4594/569 2373/4595/570 2374/4596/556 2290/4597/555 +f 2306/4598/567 2382/4599/568 2383/4600/554 2308/4601/553 +f 2324/4602/565 2391/4603/566 2392/4604/552 2326/4605/551 +f 2280/4581/563 2369/4580/564 2370/4606/550 2282/4607/549 +f 2298/4585/561 2378/4584/562 2379/4608/548 2300/4609/547 +f 2316/4589/559 2387/4588/560 2388/4610/546 2318/4611/545 +f 2272/4593/557 2365/4592/558 2366/4612/544 2274/4613/543 +f 2290/4597/555 2374/4596/556 2375/4614/542 2292/4615/541 +f 2308/4601/553 2383/4600/554 2384/4616/540 2310/4617/539 +f 2326/4605/551 2392/4604/552 2393/4618/534 2328/4619/533 +f 2282/4607/549 2370/4606/550 2371/4620/530 2284/4621/529 +f 2300/4609/547 2379/4608/548 2380/4622/526 2302/4623/525 +f 2318/4611/545 2388/4610/546 2389/4624/522 2320/4625/521 +f 2274/4613/543 2366/4612/544 2367/4626/518 2276/4627/517 +f 2292/4615/541 2375/4614/542 2376/4628/514 2294/4629/513 +f 2310/4617/539 2384/4616/540 2385/4630/537 2312/4631/538 +f 2266/4632/532 2362/4633/531 2363/4634/535 2268/4635/536 +f 2328/4619/533 2393/4618/534 2362/4633/531 2266/4632/532 +f 2284/4621/529 2371/4620/530 2372/4636/527 2286/4637/528 +f 2302/4623/525 2380/4622/526 2381/4638/523 2304/4639/524 +f 2320/4625/521 2389/4624/522 2390/4640/519 2322/4641/520 +f 2276/4627/517 2367/4626/518 2368/4579/515 2278/4578/516 +f 2294/4629/513 2376/4628/514 2377/4583/511 2296/4582/512 +f 2312/4631/538 2385/4630/537 2386/4587/574 2314/4586/573 +f 2268/4635/536 2363/4634/535 2364/4591/572 2270/4590/571 +f 2286/4637/528 2372/4636/527 2373/4595/570 2288/4594/569 +f 2304/4639/524 2381/4638/523 2382/4599/568 2306/4598/567 +f 2322/4641/520 2390/4640/519 2391/4603/566 2324/4602/565 +f 2396/4642/522 2397/4643/521 2481/4644/520 2480/4645/519 +f 2480/4645/519 2481/4644/520 2477/4646/565 2476/4647/566 +f 2476/4647/566 2477/4646/565 2505/4648/551 2504/4649/552 +f 2504/4649/552 2505/4648/551 2457/4650/533 2456/4651/534 +f 2456/4651/534 2457/4650/533 2433/4652/532 2432/4653/531 +f 2432/4653/531 2433/4652/532 2429/4654/536 2428/4655/535 +f 2428/4655/535 2429/4654/536 2437/4656/571 2436/4657/572 +f 2436/4657/572 2437/4656/571 2493/4658/557 2492/4659/558 +f 2492/4659/558 2493/4658/557 2425/4660/543 2424/4661/544 +f 2424/4661/544 2425/4660/543 2417/4662/517 2416/4663/518 +f 2416/4663/518 2417/4662/517 2413/4664/516 2412/4665/515 +f 2412/4665/515 2413/4664/516 2421/4666/563 2420/4667/564 +f 2420/4668/564 2421/4669/563 2488/4670/575 2489/4671/576 +f 2489/4671/576 2488/4670/575 2496/4672/529 2497/4673/530 +f 2497/4673/530 2496/4672/529 2512/4674/528 2513/4675/527 +f 2513/4675/527 2512/4674/528 2467/4676/569 2469/4677/570 +f 2469/4677/570 2467/4676/569 2459/4678/555 2461/4679/556 +f 2461/4679/556 2459/4678/555 2463/4680/541 2465/4681/542 +f 2465/4681/542 2463/4680/541 2407/4682/513 2409/4683/514 +f 2409/4683/514 2407/4682/513 2403/4684/512 2405/4685/511 +f 2405/4685/511 2403/4684/512 2399/4686/561 2401/4687/562 +f 2401/4687/562 2399/4686/561 2520/4688/547 2521/4689/548 +f 2521/4689/548 2520/4688/547 2516/4690/525 2517/4691/526 +f 2517/4691/526 2516/4690/525 2444/4692/524 2445/4693/523 +f 2445/4693/523 2444/4692/524 2500/4694/567 2501/4695/568 +f 2501/4695/568 2500/4694/567 2508/4696/553 2509/4697/554 +f 2509/4697/554 2508/4696/553 2452/4698/539 2453/4699/540 +f 2453/4699/540 2452/4698/539 2441/4700/538 2440/4701/537 +f 2440/4702/537 2441/4703/538 2449/4704/577 2448/4705/578 +f 2448/4705/578 2449/4704/577 2473/4706/559 2472/4707/560 +f 2472/4707/560 2473/4706/559 2485/4708/545 2484/4709/546 +f 2484/4709/546 2485/4708/545 2397/4643/521 2396/4642/522 +f 2522/4710/24 2523/4711/110 2525/4712/111 2524/4713/150 +f 2524/4713/150 2525/4712/111 2553/4714/113 2526/4715/43 +f 2526/4715/43 2553/4714/113 2550/4716/115 2527/4717/151 +f 2527/4717/151 2550/4716/115 2529/4718/117 2528/4719/4 +f 2528/4719/4 2529/4718/117 2531/4720/119 2530/4721/141 +f 2530/4721/141 2531/4720/119 2552/4722/121 2532/4723/45 +f 2532/4723/45 2552/4722/121 2534/4724/579 2533/4725/142 +f 2533/4725/142 2534/4724/579 2551/4726/125 2535/4727/25 +f 2535/4728/25 2551/4729/125 2537/4730/127 2536/4731/143 +f 2536/4731/143 2537/4730/127 2539/4732/129 2538/4733/46 +f 2538/4733/46 2539/4732/129 2549/4734/144 2540/4735/145 +f 2540/4735/145 2549/4734/144 2542/4736/133 2541/4737/20 +f 2541/4737/20 2542/4736/133 2544/4738/580 2543/4739/146 +f 2543/4739/146 2544/4738/580 2546/4740/137 2545/4741/44 +f 2545/4741/44 2546/4740/137 2548/4742/147 2547/4743/148 +f 2547/4743/148 2548/4742/147 2523/4744/110 2522/4745/24 +f 2554/4746/24 2555/4747/110 2557/4748/111 2556/4749/150 +f 2556/4749/150 2557/4748/111 2585/4750/113 2558/4751/43 +f 2558/4751/43 2585/4750/113 2582/4752/115 2559/4753/151 +f 2559/4753/151 2582/4752/115 2561/4754/117 2560/4755/4 +f 2560/4755/4 2561/4754/117 2563/4756/119 2562/4757/141 +f 2562/4757/141 2563/4756/119 2584/4758/121 2564/4759/45 +f 2564/4759/45 2584/4758/121 2566/4760/123 2565/4761/142 +f 2565/4761/142 2566/4760/123 2583/4762/125 2567/4763/25 +f 2567/4764/25 2583/4765/125 2569/4766/127 2568/4767/143 +f 2568/4767/143 2569/4766/127 2571/4768/129 2570/4769/46 +f 2570/4769/46 2571/4768/129 2581/4770/144 2572/4771/145 +f 2572/4771/145 2581/4770/144 2574/4772/133 2573/4773/20 +f 2573/4773/20 2574/4772/133 2576/4774/580 2575/4775/146 +f 2575/4775/146 2576/4774/580 2578/4776/137 2577/4777/44 +f 2577/4777/44 2578/4776/137 2580/4778/147 2579/4779/148 +f 2579/4779/148 2580/4778/147 2555/4780/110 2554/4781/24 +g Cube.009_Cube.019_spool +s off +f 2587/4782/581 2586/4783/581 2593/4784/581 2592/4785/581 2591/4786/581 2590/4787/581 2589/4788/581 2588/4789/581 +f 2594/4790/6 2596/4791/6 2597/4792/6 2598/4793/6 2599/4794/6 2600/4795/6 2601/4796/6 2595/4797/6 +f 2603/4798/582 2602/4799/582 2609/4800/582 2608/4801/582 2607/4802/582 2606/4803/582 2605/4804/582 2604/4805/582 +f 2611/4806/583 2610/4807/583 2617/4808/583 2616/4809/583 2615/4810/583 2614/4811/583 2613/4812/583 2612/4813/583 +f 2619/4814/584 2618/4815/584 2625/4816/584 2624/4817/584 2623/4818/584 2622/4819/584 2621/4820/584 2620/4821/584 +f 2627/4822/585 2626/4823/585 2633/4824/585 2632/4825/585 2631/4826/585 2630/4827/585 2629/4828/585 2628/4829/585 +f 2635/4830/586 2634/4831/586 2641/4832/586 2640/4833/586 2639/4834/586 2638/4835/586 2637/4836/586 2636/4837/586 +f 2643/4838/587 2642/4839/587 2649/4840/587 2648/4841/587 2647/4842/587 2646/4843/587 2645/4844/587 2644/4845/587 +f 2651/4846/588 2650/4847/588 2657/4848/588 2656/4849/588 2655/4850/588 2654/4851/588 2653/4852/588 2652/4853/588 +f 2659/4854/589 2658/4855/589 2665/4856/589 2664/4857/589 2663/4858/589 2662/4859/589 2661/4860/589 2660/4861/589 +f 2667/4862/590 2666/4863/590 2673/4864/590 2672/4865/590 2671/4866/590 2670/4867/590 2669/4868/590 2668/4869/590 +f 2675/4870/591 2674/4871/591 2681/4872/591 2680/4873/591 2679/4874/591 2678/4875/591 2677/4876/591 2676/4877/591 +f 2683/4878/592 2682/4879/592 2689/4880/592 2688/4881/592 2687/4882/592 2686/4883/592 2685/4884/592 2684/4885/592 +f 2691/4886/593 2690/4887/593 2697/4888/593 2696/4889/593 2695/4890/593 2694/4891/593 2693/4892/593 2692/4893/593 +f 2699/4894/594 2698/4895/594 2705/4896/594 2704/4897/594 2703/4898/594 2702/4899/594 2701/4900/594 2700/4901/594 +f 2707/4902/595 2706/4903/595 2713/4904/595 2712/4905/595 2711/4906/595 2710/4907/595 2709/4908/595 2708/4909/595 +f 2715/4910/596 2714/4911/596 2721/4912/596 2720/4913/596 2719/4914/596 2718/4915/596 2717/4916/596 2716/4917/596 +f 2723/4918/597 2722/4919/597 2729/4920/597 2728/4921/597 2727/4922/597 2726/4923/597 2725/4924/597 2724/4925/597 +f 2731/4926/598 2730/4927/598 2737/4928/598 2736/4929/598 2735/4930/598 2734/4931/598 2733/4932/598 2732/4933/598 +f 2739/4934/599 2738/4935/599 2745/4936/599 2744/4937/599 2743/4938/599 2742/4939/599 2741/4940/599 2740/4941/599 +f 2747/4942/600 2746/4943/600 2753/4944/600 2752/4945/600 2751/4946/600 2750/4947/600 2749/4948/600 2748/4949/600 +f 2755/4950/601 2754/4951/601 2761/4952/601 2760/4953/601 2759/4954/601 2758/4955/601 2757/4956/601 2756/4957/601 +f 2763/4958/602 2762/4959/602 2769/4960/602 2768/4961/602 2767/4962/602 2766/4963/602 2765/4964/602 2764/4965/602 +f 2771/4966/603 2770/4967/603 2777/4968/603 2776/4969/603 2775/4970/603 2774/4971/603 2773/4972/603 2772/4973/603 +f 2779/4974/604 2778/4975/604 2785/4976/604 2784/4977/604 2783/4978/604 2782/4979/604 2781/4980/604 2780/4981/604 +f 2787/4982/605 2786/4983/605 2793/4984/605 2792/4985/605 2791/4986/605 2790/4987/605 2789/4988/605 2788/4989/605 +f 2795/4990/606 2794/4991/606 2801/4992/606 2800/4993/606 2799/4994/606 2798/4995/606 2797/4996/606 2796/4997/606 +f 2803/4998/607 2802/4999/607 2809/5000/607 2808/5001/607 2807/5002/607 2806/5003/607 2805/5004/607 2804/5005/607 +f 2811/5006/25 2810/5007/25 2817/5008/25 2816/5009/25 2815/5010/25 2814/5011/25 2813/5012/25 2812/5013/25 +s 1 +f 2202/5014/24 2203/5015/24 2205/5016/608 2204/5017/608 +f 2204/5017/608 2205/5016/608 2207/5018/34 2206/5019/34 +f 2206/5019/34 2207/5018/34 2209/5020/609 2208/5021/609 +f 2208/5021/609 2209/5020/609 2211/5022/39 2210/5023/39 +f 2210/5023/39 2211/5022/39 2213/5024/610 2212/5025/610 +f 2212/5025/610 2213/5024/610 2215/5026/37 2214/5027/37 +f 2214/5027/37 2215/5026/37 2217/5028/611 2216/5029/611 +f 2216/5029/611 2217/5028/611 2219/5030/1 2218/5031/1 +f 2218/5032/1 2219/5033/1 2221/5034/612 2220/5035/612 +f 2220/5035/612 2221/5034/612 2223/5036/213 2222/5037/213 +f 2222/5037/213 2223/5036/213 2225/5038/613 2224/5039/613 +f 2224/5039/613 2225/5038/613 2227/5040/29 2226/5041/29 +f 2226/5041/29 2227/5040/29 2229/5042/614 2228/5043/614 +f 2228/5043/614 2229/5042/614 2231/5044/212 2230/5045/212 +f 2230/5045/212 2231/5044/212 2233/5046/615 2232/5047/615 +f 2232/5047/615 2233/5046/615 2235/5048/25 2234/5049/25 +f 2234/5049/25 2235/5048/25 2237/5050/616 2236/5051/616 +f 2236/5051/616 2237/5050/616 2239/5052/211 2238/5053/211 +f 2238/5053/211 2239/5052/211 2241/5054/617 2240/5055/617 +f 2240/5055/617 2241/5054/617 2243/5056/27 2242/5057/27 +f 2242/5057/27 2243/5056/27 2245/5058/618 2244/5059/618 +f 2244/5059/618 2245/5058/618 2247/5060/210 2246/5061/210 +f 2246/5061/210 2247/5060/210 2249/5062/619 2248/5063/619 +f 2248/5063/619 2249/5062/619 2251/5064/6 2250/5065/6 +f 2250/5066/6 2251/5067/6 2253/5068/620 2252/5069/620 +f 2252/5069/620 2253/5068/620 2255/5070/41 2254/5071/41 +f 2254/5071/41 2255/5070/41 2257/5072/621 2256/5073/621 +f 2256/5073/621 2257/5072/621 2259/5074/26 2258/5075/26 +f 2258/5075/26 2259/5074/26 2261/5076/622 2260/5077/622 +f 2260/5077/622 2261/5076/622 2263/5078/32 2262/5079/32 +f 2262/5079/32 2263/5078/32 2265/5080/623 2264/5081/623 +f 2264/5081/623 2265/5080/623 2203/5015/24 2202/5014/24 +f 2588/5082/624 2589/5083/625 2597/5084/626 2596/5085/627 +f 2586/5086/628 2587/5087/629 2594/5088/630 2595/5089/631 +f 2593/5090/632 2586/5086/628 2595/5089/631 2601/5091/633 +f 2591/5092/634 2592/5093/635 2600/5094/636 2599/5095/637 +f 2589/5083/625 2590/5096/638 2598/5097/639 2597/5084/626 +f 2587/5098/629 2588/5082/624 2596/5085/627 2594/5099/630 +f 2592/5093/635 2593/5090/632 2601/5091/633 2600/5094/636 +f 2590/5096/638 2591/5092/634 2599/5095/637 2598/5097/639 +f 2604/5100/640 2605/5101/641 2589/5102/625 2588/5103/624 +f 2602/5104/642 2603/5105/643 2587/5106/629 2586/5107/628 +f 2609/5108/644 2602/5104/642 2586/5107/628 2593/5109/632 +f 2607/5110/645 2608/5111/646 2592/5112/635 2591/5113/634 +f 2605/5101/641 2606/5114/647 2590/5115/638 2589/5102/625 +f 2603/5116/643 2604/5100/640 2588/5103/624 2587/5117/629 +f 2608/5111/646 2609/5108/644 2593/5109/632 2592/5112/635 +f 2606/5114/647 2607/5110/645 2591/5113/634 2590/5115/638 +f 2612/5118/648 2613/5119/649 2605/5120/641 2604/5121/640 +f 2610/5122/650 2611/5123/651 2603/5124/643 2602/5125/642 +f 2617/5126/652 2610/5122/650 2602/5125/642 2609/5127/644 +f 2615/5128/653 2616/5129/654 2608/5130/646 2607/5131/645 +f 2613/5119/649 2614/5132/655 2606/5133/647 2605/5120/641 +f 2611/5134/651 2612/5118/648 2604/5121/640 2603/5135/643 +f 2616/5129/654 2617/5126/652 2609/5127/644 2608/5130/646 +f 2614/5132/655 2615/5128/653 2607/5131/645 2606/5133/647 +f 2620/5136/656 2621/5137/657 2613/5138/649 2612/5139/648 +f 2618/5140/658 2619/5141/659 2611/5142/651 2610/5143/650 +f 2625/5144/660 2618/5140/658 2610/5143/650 2617/5145/652 +f 2623/5146/661 2624/5147/662 2616/5148/654 2615/5149/653 +f 2621/5137/657 2622/5150/663 2614/5151/655 2613/5138/649 +f 2619/5152/659 2620/5136/656 2612/5139/648 2611/5153/651 +f 2624/5147/662 2625/5144/660 2617/5145/652 2616/5148/654 +f 2622/5150/663 2623/5146/661 2615/5149/653 2614/5151/655 +f 2628/5154/664 2629/5155/665 2621/5156/657 2620/5157/656 +f 2626/5158/666 2627/5159/667 2619/5160/659 2618/5161/658 +f 2633/5162/668 2626/5158/666 2618/5161/658 2625/5163/660 +f 2631/5164/669 2632/5165/670 2624/5166/662 2623/5167/661 +f 2629/5155/665 2630/5168/671 2622/5169/663 2621/5156/657 +f 2627/5170/667 2628/5154/664 2620/5157/656 2619/5171/659 +f 2632/5165/670 2633/5162/668 2625/5163/660 2624/5166/662 +f 2630/5168/671 2631/5164/669 2623/5167/661 2622/5169/663 +f 2636/5172/672 2637/5173/673 2629/5174/665 2628/5175/664 +f 2634/5176/674 2635/5177/675 2627/5178/667 2626/5179/666 +f 2641/5180/676 2634/5176/674 2626/5179/666 2633/5181/668 +f 2639/5182/677 2640/5183/678 2632/5184/670 2631/5185/669 +f 2637/5173/673 2638/5186/679 2630/5187/671 2629/5174/665 +f 2635/5188/675 2636/5172/672 2628/5175/664 2627/5189/667 +f 2640/5183/678 2641/5180/676 2633/5181/668 2632/5184/670 +f 2638/5186/679 2639/5182/677 2631/5185/669 2630/5187/671 +f 2644/5190/680 2645/5191/681 2637/5192/673 2636/5193/672 +f 2642/5194/682 2643/5195/683 2635/5196/675 2634/5197/674 +f 2649/5198/684 2642/5194/682 2634/5197/674 2641/5199/676 +f 2647/5200/685 2648/5201/686 2640/5202/678 2639/5203/677 +f 2645/5191/681 2646/5204/687 2638/5205/679 2637/5192/673 +f 2643/5206/683 2644/5190/680 2636/5193/672 2635/5207/675 +f 2648/5201/686 2649/5198/684 2641/5199/676 2640/5202/678 +f 2646/5204/687 2647/5200/685 2639/5203/677 2638/5205/679 +f 2652/5208/688 2653/5209/689 2645/5210/681 2644/5211/680 +f 2650/5212/690 2651/5213/691 2643/5214/683 2642/5215/682 +f 2657/5216/692 2650/5212/690 2642/5215/682 2649/5217/684 +f 2655/5218/693 2656/5219/694 2648/5220/686 2647/5221/685 +f 2653/5209/689 2654/5222/695 2646/5223/687 2645/5210/681 +f 2651/5224/691 2652/5208/688 2644/5211/680 2643/5225/683 +f 2656/5219/694 2657/5216/692 2649/5217/684 2648/5220/686 +f 2654/5222/695 2655/5218/693 2647/5221/685 2646/5223/687 +f 2660/5226/696 2661/5227/697 2653/5228/689 2652/5229/688 +f 2658/5230/698 2659/5231/699 2651/5232/691 2650/5233/690 +f 2665/5234/700 2658/5230/698 2650/5233/690 2657/5235/692 +f 2663/5236/701 2664/5237/702 2656/5238/694 2655/5239/693 +f 2661/5227/697 2662/5240/703 2654/5241/695 2653/5228/689 +f 2659/5242/699 2660/5226/696 2652/5229/688 2651/5243/691 +f 2664/5237/702 2665/5234/700 2657/5235/692 2656/5238/694 +f 2662/5240/703 2663/5236/701 2655/5239/693 2654/5241/695 +f 2668/5244/704 2669/5245/705 2661/5246/697 2660/5247/696 +f 2666/5248/706 2667/5249/707 2659/5250/699 2658/5251/698 +f 2673/5252/708 2666/5248/706 2658/5251/698 2665/5253/700 +f 2671/5254/709 2672/5255/710 2664/5256/702 2663/5257/701 +f 2669/5245/705 2670/5258/711 2662/5259/703 2661/5246/697 +f 2667/5260/707 2668/5244/704 2660/5247/696 2659/5261/699 +f 2672/5255/710 2673/5252/708 2665/5253/700 2664/5256/702 +f 2670/5258/711 2671/5254/709 2663/5257/701 2662/5259/703 +f 2676/5262/712 2677/5263/713 2669/5264/705 2668/5265/704 +f 2674/5266/714 2675/5267/715 2667/5268/707 2666/5269/706 +f 2681/5270/716 2674/5266/714 2666/5269/706 2673/5271/708 +f 2679/5272/717 2680/5273/718 2672/5274/710 2671/5275/709 +f 2677/5263/713 2678/5276/719 2670/5277/711 2669/5264/705 +f 2675/5278/715 2676/5262/712 2668/5265/704 2667/5279/707 +f 2680/5273/718 2681/5270/716 2673/5271/708 2672/5274/710 +f 2678/5276/719 2679/5272/717 2671/5275/709 2670/5277/711 +f 2684/5280/720 2685/5281/721 2677/5282/713 2676/5283/712 +f 2682/5284/722 2683/5285/723 2675/5286/715 2674/5287/714 +f 2689/5288/724 2682/5284/722 2674/5287/714 2681/5289/716 +f 2687/5290/725 2688/5291/726 2680/5292/718 2679/5293/717 +f 2685/5281/721 2686/5294/727 2678/5295/719 2677/5282/713 +f 2683/5296/723 2684/5280/720 2676/5283/712 2675/5297/715 +f 2688/5291/726 2689/5288/724 2681/5289/716 2680/5292/718 +f 2686/5294/727 2687/5290/725 2679/5293/717 2678/5295/719 +f 2692/5298/728 2693/5299/729 2685/5300/721 2684/5301/720 +f 2690/5302/730 2691/5303/731 2683/5304/723 2682/5305/722 +f 2697/5306/732 2690/5302/730 2682/5305/722 2689/5307/724 +f 2695/5308/733 2696/5309/734 2688/5310/726 2687/5311/725 +f 2693/5299/729 2694/5312/735 2686/5313/727 2685/5300/721 +f 2691/5314/731 2692/5298/728 2684/5301/720 2683/5315/723 +f 2696/5309/734 2697/5306/732 2689/5307/724 2688/5310/726 +f 2694/5312/735 2695/5308/733 2687/5311/725 2686/5313/727 +f 2700/5316/736 2701/5317/737 2693/5318/729 2692/5319/728 +f 2698/5320/738 2699/5321/739 2691/5322/731 2690/5323/730 +f 2705/5324/740 2698/5320/738 2690/5323/730 2697/5325/732 +f 2703/5326/741 2704/5327/742 2696/5328/734 2695/5329/733 +f 2701/5317/737 2702/5330/743 2694/5331/735 2693/5318/729 +f 2699/5332/739 2700/5316/736 2692/5319/728 2691/5333/731 +f 2704/5327/742 2705/5324/740 2697/5325/732 2696/5328/734 +f 2702/5330/743 2703/5326/741 2695/5329/733 2694/5331/735 +f 2708/5334/744 2709/5335/745 2701/5336/737 2700/5337/736 +f 2706/5338/746 2707/5339/747 2699/5340/739 2698/5341/738 +f 2713/5342/748 2706/5338/746 2698/5341/738 2705/5343/740 +f 2711/5344/749 2712/5345/750 2704/5346/742 2703/5347/741 +f 2709/5335/745 2710/5348/751 2702/5349/743 2701/5336/737 +f 2707/5350/747 2708/5334/744 2700/5337/736 2699/5351/739 +f 2712/5345/750 2713/5342/748 2705/5343/740 2704/5346/742 +f 2710/5348/751 2711/5344/749 2703/5347/741 2702/5349/743 +f 2716/5352/752 2717/5353/753 2709/5354/745 2708/5355/744 +f 2714/5356/754 2715/5357/755 2707/5358/747 2706/5359/746 +f 2721/5360/756 2714/5356/754 2706/5359/746 2713/5361/748 +f 2719/5362/757 2720/5363/758 2712/5364/750 2711/5365/749 +f 2717/5353/753 2718/5366/759 2710/5367/751 2709/5354/745 +f 2715/5368/755 2716/5352/752 2708/5355/744 2707/5369/747 +f 2720/5363/758 2721/5360/756 2713/5361/748 2712/5364/750 +f 2718/5366/759 2719/5362/757 2711/5365/749 2710/5367/751 +f 2724/5370/760 2725/5371/761 2717/5372/753 2716/5373/752 +f 2722/5374/762 2723/5375/763 2715/5376/755 2714/5377/754 +f 2729/5378/764 2722/5374/762 2714/5377/754 2721/5379/756 +f 2727/5380/765 2728/5381/766 2720/5382/758 2719/5383/757 +f 2725/5371/761 2726/5384/767 2718/5385/759 2717/5372/753 +f 2723/5386/763 2724/5370/760 2716/5373/752 2715/5387/755 +f 2728/5381/766 2729/5378/764 2721/5379/756 2720/5382/758 +f 2726/5384/767 2727/5380/765 2719/5383/757 2718/5385/759 +f 2732/5388/768 2733/5389/769 2725/5390/761 2724/5391/760 +f 2730/5392/770 2731/5393/771 2723/5394/763 2722/5395/762 +f 2737/5396/772 2730/5392/770 2722/5395/762 2729/5397/764 +f 2735/5398/773 2736/5399/774 2728/5400/766 2727/5401/765 +f 2733/5389/769 2734/5402/775 2726/5403/767 2725/5390/761 +f 2731/5404/771 2732/5388/768 2724/5391/760 2723/5405/763 +f 2736/5399/774 2737/5396/772 2729/5397/764 2728/5400/766 +f 2734/5402/775 2735/5398/773 2727/5401/765 2726/5403/767 +f 2740/5406/776 2741/5407/777 2733/5408/769 2732/5409/768 +f 2738/5410/778 2739/5411/779 2731/5412/771 2730/5413/770 +f 2745/5414/780 2738/5410/778 2730/5413/770 2737/5415/772 +f 2743/5416/781 2744/5417/782 2736/5418/774 2735/5419/773 +f 2741/5407/777 2742/5420/783 2734/5421/775 2733/5408/769 +f 2739/5422/779 2740/5406/776 2732/5409/768 2731/5423/771 +f 2744/5417/782 2745/5414/780 2737/5415/772 2736/5418/774 +f 2742/5420/783 2743/5416/781 2735/5419/773 2734/5421/775 +f 2748/5424/784 2749/5425/785 2741/5426/777 2740/5427/776 +f 2746/5428/786 2747/5429/787 2739/5430/779 2738/5431/778 +f 2753/5432/788 2746/5428/786 2738/5431/778 2745/5433/780 +f 2751/5434/789 2752/5435/790 2744/5436/782 2743/5437/781 +f 2749/5425/785 2750/5438/791 2742/5439/783 2741/5426/777 +f 2747/5440/787 2748/5424/784 2740/5427/776 2739/5441/779 +f 2752/5435/790 2753/5432/788 2745/5433/780 2744/5436/782 +f 2750/5438/791 2751/5434/789 2743/5437/781 2742/5439/783 +f 2756/5442/792 2757/5443/793 2749/5444/785 2748/5445/784 +f 2754/5446/794 2755/5447/795 2747/5448/787 2746/5449/786 +f 2761/5450/796 2754/5446/794 2746/5449/786 2753/5451/788 +f 2759/5452/797 2760/5453/798 2752/5454/790 2751/5455/789 +f 2757/5443/793 2758/5456/799 2750/5457/791 2749/5444/785 +f 2755/5458/795 2756/5442/792 2748/5445/784 2747/5459/787 +f 2760/5453/798 2761/5450/796 2753/5451/788 2752/5454/790 +f 2758/5456/799 2759/5452/797 2751/5455/789 2750/5457/791 +f 2764/5460/800 2765/5461/801 2757/5462/793 2756/5463/792 +f 2762/5464/802 2763/5465/803 2755/5466/795 2754/5467/794 +f 2769/5468/804 2762/5464/802 2754/5467/794 2761/5469/796 +f 2767/5470/805 2768/5471/806 2760/5472/798 2759/5473/797 +f 2765/5461/801 2766/5474/807 2758/5475/799 2757/5462/793 +f 2763/5476/803 2764/5460/800 2756/5463/792 2755/5477/795 +f 2768/5471/806 2769/5468/804 2761/5469/796 2760/5472/798 +f 2766/5474/807 2767/5470/805 2759/5473/797 2758/5475/799 +f 2772/5478/808 2773/5479/809 2765/5480/801 2764/5481/800 +f 2770/5482/810 2771/5483/811 2763/5484/803 2762/5485/802 +f 2777/5486/812 2770/5482/810 2762/5485/802 2769/5487/804 +f 2775/5488/813 2776/5489/814 2768/5490/806 2767/5491/805 +f 2773/5479/809 2774/5492/815 2766/5493/807 2765/5480/801 +f 2771/5494/811 2772/5478/808 2764/5481/800 2763/5495/803 +f 2776/5489/814 2777/5486/812 2769/5487/804 2768/5490/806 +f 2774/5492/815 2775/5488/813 2767/5491/805 2766/5493/807 +f 2780/5496/816 2781/5497/817 2773/5498/809 2772/5499/808 +f 2778/5500/818 2779/5501/819 2771/5502/811 2770/5503/810 +f 2785/5504/820 2778/5500/818 2770/5503/810 2777/5505/812 +f 2783/5506/821 2784/5507/822 2776/5508/814 2775/5509/813 +f 2781/5497/817 2782/5510/823 2774/5511/815 2773/5498/809 +f 2779/5512/819 2780/5496/816 2772/5499/808 2771/5513/811 +f 2784/5507/822 2785/5504/820 2777/5505/812 2776/5508/814 +f 2782/5510/823 2783/5506/821 2775/5509/813 2774/5511/815 +f 2788/5514/824 2789/5515/825 2781/5516/817 2780/5517/816 +f 2786/5518/826 2787/5519/827 2779/5520/819 2778/5521/818 +f 2793/5522/828 2786/5518/826 2778/5521/818 2785/5523/820 +f 2791/5524/829 2792/5525/830 2784/5526/822 2783/5527/821 +f 2789/5515/825 2790/5528/831 2782/5529/823 2781/5516/817 +f 2787/5530/827 2788/5514/824 2780/5517/816 2779/5531/819 +f 2792/5525/830 2793/5522/828 2785/5523/820 2784/5526/822 +f 2790/5528/831 2791/5524/829 2783/5527/821 2782/5529/823 +f 2796/5532/832 2797/5533/833 2789/5534/825 2788/5535/824 +f 2794/5536/834 2795/5537/835 2787/5538/827 2786/5539/826 +f 2801/5540/836 2794/5536/834 2786/5539/826 2793/5541/828 +f 2799/5542/837 2800/5543/838 2792/5544/830 2791/5545/829 +f 2797/5533/833 2798/5546/839 2790/5547/831 2789/5534/825 +f 2795/5548/835 2796/5532/832 2788/5535/824 2787/5549/827 +f 2800/5543/838 2801/5540/836 2793/5541/828 2792/5544/830 +f 2798/5546/839 2799/5542/837 2791/5545/829 2790/5547/831 +f 2804/5550/840 2805/5551/841 2797/5552/833 2796/5553/832 +f 2802/5554/842 2803/5555/843 2795/5556/835 2794/5557/834 +f 2809/5558/844 2802/5554/842 2794/5557/834 2801/5559/836 +f 2807/5560/845 2808/5561/846 2800/5562/838 2799/5563/837 +f 2805/5551/841 2806/5564/847 2798/5565/839 2797/5552/833 +f 2803/5566/843 2804/5550/840 2796/5553/832 2795/5567/835 +f 2808/5561/846 2809/5558/844 2801/5559/836 2800/5562/838 +f 2806/5564/847 2807/5560/845 2799/5563/837 2798/5565/839 +f 2812/5568/848 2813/5569/849 2805/5570/841 2804/5571/840 +f 2810/5572/850 2811/5573/851 2803/5574/843 2802/5575/842 +f 2817/5576/852 2810/5572/850 2802/5575/842 2809/5577/844 +f 2815/5578/853 2816/5579/854 2808/5580/846 2807/5581/845 +f 2813/5569/849 2814/5582/855 2806/5583/847 2805/5570/841 +f 2811/5584/851 2812/5568/848 2804/5571/840 2803/5585/843 +f 2816/5579/854 2817/5576/852 2809/5577/844 2808/5580/846 +f 2814/5582/855 2815/5578/853 2807/5581/845 2806/5583/847 diff --git a/mods/home_workshop_modpack/home_workshop_machines/models/home_workshop_machines_3dprinter_corexy.obj b/mods/home_workshop_modpack/home_workshop_machines/models/home_workshop_machines_3dprinter_corexy.obj new file mode 100644 index 00000000..21917493 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_machines/models/home_workshop_machines_3dprinter_corexy.obj @@ -0,0 +1,11056 @@ +# Blender v2.83.5 OBJ File: '3d printers.blend' +# www.blender.org +o Circle.002 +v -0.134658 0.310310 0.223494 +v -0.136520 0.314805 0.223623 +v -0.141016 0.316666 0.223722 +v -0.145513 0.314804 0.223731 +v -0.147376 0.310308 0.223646 +v -0.145514 0.305813 0.223516 +v -0.141018 0.303951 0.223418 +v -0.136521 0.305814 0.223409 +v -0.136931 0.315625 0.203591 +v -0.135068 0.311128 0.203591 +v -0.141428 0.317487 0.203591 +v -0.145925 0.315625 0.203591 +v -0.147787 0.311128 0.203591 +v -0.145925 0.306631 0.203591 +v -0.141428 0.304768 0.203591 +v -0.136931 0.306631 0.203591 +v -0.134248 0.309493 0.243397 +v -0.136108 0.313984 0.243656 +v -0.140602 0.315842 0.243853 +v -0.145099 0.313979 0.243871 +v -0.146964 0.309486 0.243701 +v -0.145104 0.304995 0.243442 +v -0.140610 0.303138 0.243245 +v -0.136113 0.305001 0.243226 +v -0.133578 0.308157 0.263238 +v -0.135433 0.312639 0.263636 +v -0.139925 0.314491 0.263937 +v -0.144421 0.312627 0.263966 +v -0.146288 0.308140 0.263705 +v -0.144433 0.303658 0.263308 +v -0.139942 0.301806 0.263007 +v -0.135445 0.303670 0.262978 +v -0.132688 0.306383 0.283029 +v -0.134537 0.310853 0.283571 +v -0.139024 0.312695 0.283982 +v -0.143519 0.310830 0.284021 +v -0.145391 0.306351 0.283666 +v -0.143542 0.301882 0.283124 +v -0.139055 0.300040 0.282713 +v -0.134560 0.301904 0.282674 +v -0.131746 0.304505 0.302803 +v -0.133587 0.308958 0.303491 +v -0.138067 0.310787 0.304012 +v -0.142562 0.308922 0.304062 +v -0.144439 0.304454 0.303611 +v -0.142598 0.300000 0.302923 +v -0.138118 0.298171 0.302402 +v -0.133623 0.300037 0.302352 +v -0.130232 0.301486 0.322395 +v -0.132060 0.305916 0.323247 +v -0.136532 0.307727 0.323893 +v -0.141026 0.305860 0.323955 +v -0.142911 0.301407 0.323396 +v -0.141082 0.296978 0.322544 +v -0.136611 0.295166 0.321898 +v -0.132116 0.297034 0.321836 +v -0.128719 0.298471 0.341987 +v -0.130533 0.302872 0.343003 +v -0.134993 0.304662 0.343773 +v -0.139487 0.302792 0.343846 +v -0.141381 0.298358 0.343180 +v -0.139566 0.293957 0.342165 +v -0.135106 0.292168 0.341395 +v -0.130613 0.294037 0.341321 +v -0.126709 0.294465 0.361335 +v -0.128504 0.298828 0.362532 +v -0.132950 0.300589 0.363439 +v -0.137442 0.298717 0.363526 +v -0.139349 0.294308 0.362741 +v -0.137553 0.289945 0.361544 +v -0.133108 0.288184 0.360637 +v -0.128616 0.290056 0.360550 +v -0.124406 0.289875 0.380539 +v -0.126178 0.294191 0.381926 +v -0.130606 0.295916 0.382977 +v -0.135096 0.294041 0.383078 +v -0.137018 0.289662 0.382168 +v -0.135247 0.285346 0.380781 +v -0.130819 0.283621 0.379730 +v -0.126328 0.285497 0.379629 +v -0.121932 0.284943 0.399612 +v -0.123676 0.289203 0.401194 +v -0.128082 0.290886 0.402394 +v -0.132571 0.289006 0.402508 +v -0.134511 0.284665 0.401471 +v -0.132767 0.280405 0.399888 +v -0.128361 0.278722 0.398689 +v -0.123873 0.280602 0.398574 +v -0.118619 0.278339 0.418043 +v -0.120325 0.282523 0.419853 +v -0.124702 0.284149 0.421225 +v -0.129188 0.282263 0.421356 +v -0.131153 0.277972 0.420170 +v -0.129448 0.273788 0.418360 +v -0.125070 0.272162 0.416987 +v -0.120584 0.274047 0.416856 +v -0.115309 0.271741 0.436478 +v -0.116971 0.275839 0.438510 +v -0.121316 0.277399 0.440052 +v -0.125799 0.275508 0.440199 +v -0.127792 0.271272 0.438866 +v -0.126130 0.267174 0.436833 +v -0.121785 0.265614 0.435292 +v -0.117302 0.267506 0.435144 +v -0.111233 0.263617 0.454059 +v -0.112839 0.267602 0.456346 +v -0.117141 0.269077 0.458080 +v -0.121619 0.267177 0.458245 +v -0.123650 0.263016 0.456745 +v -0.122044 0.259031 0.454459 +v -0.117742 0.257556 0.452725 +v -0.113264 0.259456 0.452559 +v -0.106853 0.254886 0.471302 +v -0.108392 0.258738 0.473848 +v -0.112643 0.260112 0.475779 +v -0.117117 0.258202 0.475963 +v -0.119191 0.254128 0.474293 +v -0.117652 0.250276 0.471747 +v -0.113401 0.248903 0.469816 +v -0.108928 0.250812 0.469632 +v -0.102140 0.245492 0.488007 +v -0.103600 0.249186 0.490821 +v -0.107791 0.250440 0.492954 +v -0.112259 0.248519 0.493158 +v -0.114386 0.244549 0.491313 +v -0.112926 0.240855 0.488499 +v -0.108735 0.239602 0.486366 +v -0.104267 0.241522 0.486162 +v -0.096456 0.234163 0.503144 +v -0.097811 0.237648 0.506260 +v -0.101923 0.238743 0.508622 +v -0.106383 0.236808 0.508848 +v -0.108579 0.232974 0.506804 +v -0.107224 0.229489 0.503689 +v -0.103112 0.228394 0.501326 +v -0.098652 0.230329 0.501100 +v -0.090778 0.222845 0.518292 +v -0.092019 0.226101 0.521691 +v -0.096043 0.227023 0.524268 +v -0.100495 0.225071 0.524514 +v -0.102766 0.221388 0.522285 +v -0.101526 0.218132 0.518886 +v -0.097501 0.217210 0.516309 +v -0.093049 0.219162 0.516063 +v -0.084067 0.209467 0.530923 +v -0.085156 0.212422 0.534634 +v -0.089066 0.213116 0.537448 +v -0.093507 0.211141 0.537716 +v -0.095877 0.207656 0.535282 +v -0.094788 0.204700 0.531572 +v -0.090877 0.204007 0.528757 +v -0.086437 0.205981 0.528489 +v -0.077101 0.195582 0.542937 +v -0.078019 0.198197 0.546938 +v -0.081800 0.198632 0.549972 +v -0.086229 0.196633 0.550262 +v -0.088710 0.193371 0.547637 +v -0.087792 0.190756 0.543636 +v -0.084011 0.190321 0.540602 +v -0.079583 0.192320 0.540312 +v -0.069763 0.180956 0.553481 +v -0.070486 0.183182 0.557749 +v -0.074119 0.183322 0.560986 +v -0.078533 0.181294 0.561295 +v -0.081143 0.178288 0.558496 +v -0.080420 0.176062 0.554227 +v -0.076788 0.175922 0.550991 +v -0.072374 0.177950 0.550682 +v -0.061704 0.164891 0.561180 +v -0.062193 0.166651 0.565692 +v -0.065649 0.166439 0.569113 +v -0.070047 0.164378 0.569439 +v -0.072810 0.161676 0.566480 +v -0.072320 0.159916 0.561969 +v -0.068864 0.160128 0.558548 +v -0.064467 0.162189 0.558221 +v -0.053650 0.148839 0.568916 +v -0.053896 0.150112 0.573608 +v -0.057166 0.149530 0.577165 +v -0.061546 0.147434 0.577505 +v -0.064469 0.145052 0.574428 +v -0.064224 0.143778 0.569737 +v -0.060953 0.144360 0.566179 +v -0.056574 0.146456 0.565839 +v -0.045024 0.131643 0.571263 +v -0.044994 0.132367 0.576076 +v -0.048055 0.131368 0.579726 +v -0.052415 0.129232 0.580074 +v -0.055519 0.127211 0.576917 +v -0.055549 0.126487 0.572104 +v -0.052488 0.127486 0.568454 +v -0.048128 0.129622 0.568106 +v -0.036324 0.114303 0.572946 +v -0.036010 0.114461 0.577800 +v -0.038857 0.113034 0.581482 +v -0.043196 0.110857 0.581833 +v -0.046486 0.109206 0.578649 +v -0.046800 0.109048 0.573794 +v -0.043954 0.110475 0.570113 +v -0.039615 0.112652 0.569762 +v -0.027710 0.097131 0.571942 +v -0.027116 0.096733 0.576757 +v -0.029751 0.094883 0.580408 +v -0.034070 0.092666 0.580757 +v -0.037543 0.091380 0.577599 +v -0.038136 0.091778 0.572784 +v -0.035502 0.093628 0.569133 +v -0.031183 0.095845 0.568785 +v -0.019206 0.080180 0.567314 +v -0.018343 0.079246 0.572012 +v -0.020774 0.076990 0.575575 +v -0.025073 0.074734 0.575915 +v -0.028723 0.073799 0.572834 +v -0.029585 0.074734 0.568135 +v -0.027155 0.076990 0.564572 +v -0.022855 0.079246 0.564232 +v -0.010696 0.063219 0.562729 +v -0.009574 0.061766 0.567236 +v -0.011807 0.059117 0.570655 +v -0.016088 0.056823 0.570981 +v -0.019908 0.056229 0.568025 +v -0.021031 0.057682 0.563517 +v -0.018798 0.060331 0.560099 +v -0.014517 0.062625 0.559772 +v -0.003002 0.047883 0.553285 +v -0.001664 0.045999 0.557569 +v -0.003734 0.043023 0.560817 +v -0.007998 0.040699 0.561127 +v -0.011961 0.040387 0.558318 +v -0.013299 0.042270 0.554034 +v -0.011229 0.045246 0.550785 +v -0.006964 0.047571 0.550475 +v 0.004673 0.032584 0.543717 +v 0.006214 0.030296 0.547727 +v 0.004298 0.027013 0.550768 +v 0.000048 0.024659 0.551059 +v -0.004047 0.024613 0.548429 +v -0.005588 0.026901 0.544418 +v -0.003672 0.030183 0.541377 +v 0.000578 0.032537 0.541087 +v 0.011656 0.018664 0.532000 +v 0.013366 0.016040 0.535726 +v 0.011578 0.012503 0.538552 +v 0.007340 0.010125 0.538822 +v 0.003134 0.010298 0.536378 +v 0.001425 0.012922 0.532651 +v 0.003213 0.016459 0.529826 +v 0.007451 0.018837 0.529556 +v 0.017980 0.006060 0.518228 +v 0.019827 0.003161 0.521674 +v 0.018144 -0.000584 0.524288 +v 0.013915 -0.002982 0.524537 +v 0.009619 -0.002628 0.522277 +v 0.007772 0.000270 0.518830 +v 0.009456 0.004015 0.516217 +v 0.013684 0.006413 0.515967 +v 0.024242 -0.006422 0.504338 +v 0.026214 -0.009570 0.507483 +v 0.024626 -0.013505 0.509867 +v 0.020407 -0.015921 0.510095 +v 0.016029 -0.015404 0.508033 +v 0.014056 -0.012256 0.504888 +v 0.015645 -0.008321 0.502503 +v 0.019864 -0.005905 0.502275 +v 0.029344 -0.016593 0.488178 +v 0.031409 -0.019925 0.491064 +v 0.029891 -0.023999 0.493252 +v 0.025678 -0.026429 0.493461 +v 0.021240 -0.025791 0.491568 +v 0.019175 -0.022459 0.488683 +v 0.020693 -0.018385 0.486495 +v 0.024906 -0.015955 0.486286 +v 0.034452 -0.026774 0.472026 +v 0.036601 -0.030273 0.474639 +v 0.035146 -0.034474 0.476621 +v 0.030940 -0.036916 0.476810 +v 0.026446 -0.036168 0.475096 +v 0.024297 -0.032669 0.472483 +v 0.025752 -0.028468 0.470502 +v 0.029958 -0.026026 0.470313 +v 0.038901 -0.035643 0.454961 +v 0.041117 -0.039276 0.457322 +v 0.039714 -0.043579 0.459113 +v 0.035512 -0.046031 0.459284 +v 0.030974 -0.045195 0.457735 +v 0.028758 -0.041561 0.455374 +v 0.030162 -0.037259 0.453583 +v 0.034363 -0.034807 0.453412 +v 0.042908 -0.043630 0.437280 +v 0.045180 -0.047374 0.439405 +v 0.043818 -0.051760 0.441016 +v 0.039620 -0.054219 0.441170 +v 0.035046 -0.053311 0.439776 +v 0.032775 -0.049568 0.437651 +v 0.034137 -0.045181 0.436040 +v 0.038334 -0.042722 0.435886 +v 0.046785 -0.051357 0.419466 +v 0.049105 -0.055197 0.421355 +v 0.047779 -0.059656 0.422787 +v 0.043586 -0.062123 0.422923 +v 0.038980 -0.061152 0.421685 +v 0.036660 -0.057312 0.419796 +v 0.037985 -0.052853 0.418365 +v 0.042179 -0.050386 0.418228 +v 0.049846 -0.057459 0.400821 +v 0.052202 -0.061371 0.402505 +v 0.050904 -0.065885 0.403783 +v 0.046713 -0.068356 0.403905 +v 0.042083 -0.067338 0.402800 +v 0.039727 -0.063426 0.401115 +v 0.041025 -0.058912 0.399838 +v 0.045216 -0.056440 0.399716 +v 0.052909 -0.063565 0.382178 +v 0.055297 -0.067541 0.383655 +v 0.054024 -0.072103 0.384775 +v 0.049835 -0.074579 0.384882 +v 0.045184 -0.073519 0.383913 +v 0.042796 -0.069543 0.382436 +v 0.044070 -0.064981 0.381316 +v 0.048259 -0.062505 0.381209 +v 0.055368 -0.068465 0.363091 +v 0.057780 -0.072490 0.364384 +v 0.056526 -0.077090 0.365364 +v 0.052338 -0.079570 0.365457 +v 0.047672 -0.078477 0.364610 +v 0.045259 -0.074452 0.363317 +v 0.046514 -0.069853 0.362337 +v 0.050701 -0.067373 0.362243 +v 0.057546 -0.072808 0.343800 +v 0.059979 -0.076873 0.344917 +v 0.058739 -0.081502 0.345764 +v 0.054554 -0.083985 0.345845 +v 0.049874 -0.082866 0.345112 +v 0.047441 -0.078801 0.343995 +v 0.048681 -0.074171 0.343148 +v 0.052866 -0.071689 0.343067 +v 0.059538 -0.076778 0.324422 +v 0.061987 -0.080876 0.325370 +v 0.060760 -0.085531 0.326089 +v 0.056576 -0.088016 0.326157 +v 0.051885 -0.086875 0.325536 +v 0.049436 -0.082777 0.324588 +v 0.050663 -0.078122 0.323870 +v 0.054847 -0.075637 0.323801 +v 0.060886 -0.079464 0.304750 +v 0.063347 -0.083586 0.305550 +v 0.062129 -0.088260 0.306157 +v 0.057946 -0.090746 0.306215 +v 0.053247 -0.089590 0.305690 +v 0.050786 -0.085468 0.304890 +v 0.052003 -0.080795 0.304283 +v 0.056187 -0.078308 0.304225 +v 0.062235 -0.082153 0.285078 +v 0.064706 -0.086295 0.285730 +v 0.063496 -0.090984 0.286224 +v 0.059313 -0.093472 0.286272 +v 0.054608 -0.092303 0.285844 +v 0.052136 -0.088160 0.285192 +v 0.053347 -0.083472 0.284697 +v 0.057529 -0.080984 0.284650 +v 0.063164 -0.084006 0.265293 +v 0.065643 -0.088163 0.265810 +v 0.064438 -0.092862 0.266202 +v 0.060256 -0.095352 0.266239 +v 0.055546 -0.094173 0.265900 +v 0.053067 -0.090016 0.265384 +v 0.054272 -0.085316 0.264992 +v 0.058454 -0.082827 0.264954 +v 0.063968 -0.085608 0.245475 +v 0.066452 -0.089776 0.245860 +v 0.065252 -0.094484 0.246152 +v 0.061070 -0.096974 0.246180 +v 0.056356 -0.095788 0.245927 +v 0.053872 -0.091620 0.245542 +v 0.055072 -0.086912 0.245250 +v 0.059254 -0.084422 0.245222 +v 0.064645 -0.086957 0.225628 +v 0.067133 -0.091132 0.225885 +v 0.065935 -0.095846 0.226079 +v 0.061753 -0.098337 0.226098 +v 0.057037 -0.097145 0.225930 +v 0.054549 -0.092970 0.225673 +v 0.055747 -0.088256 0.225478 +v 0.059928 -0.085765 0.225460 +v 0.065038 -0.087741 0.205718 +v 0.067528 -0.091921 0.205855 +v 0.066332 -0.096638 0.205959 +v 0.062151 -0.099129 0.205969 +v 0.057433 -0.097934 0.205879 +v 0.054943 -0.093755 0.205742 +v 0.056139 -0.089038 0.205638 +v 0.060320 -0.086547 0.205628 +v 0.065432 -0.088527 0.185807 +v 0.067923 -0.092708 0.185825 +v 0.066728 -0.097426 0.185838 +v 0.062546 -0.099917 0.185839 +v 0.057828 -0.098722 0.185828 +v 0.055337 -0.094541 0.185810 +v 0.056532 -0.089823 0.185797 +v 0.060714 -0.087331 0.185796 +v 0.065844 -0.089347 0.164984 +v 0.068335 -0.093528 0.164984 +v 0.067139 -0.098247 0.164984 +v 0.062958 -0.100738 0.164984 +v 0.058240 -0.099542 0.164984 +v 0.055749 -0.095361 0.164984 +v 0.056944 -0.090643 0.164984 +v 0.061125 -0.088152 0.164984 +v 0.066258 -0.090173 0.144004 +v 0.068749 -0.094354 0.144004 +v 0.067554 -0.099073 0.144004 +v 0.063372 -0.101564 0.144004 +v 0.058654 -0.100368 0.144004 +v 0.056163 -0.096187 0.144004 +v 0.057358 -0.091469 0.144004 +v 0.061540 -0.088978 0.144004 +v 0.066672 -0.090999 0.123025 +v 0.069163 -0.095180 0.123025 +v 0.067968 -0.099899 0.123025 +v 0.063787 -0.102390 0.123025 +v 0.059068 -0.101195 0.123025 +v 0.056577 -0.097013 0.123025 +v 0.057773 -0.092295 0.123025 +v 0.061954 -0.089804 0.123025 +v -0.265625 -0.421875 -0.453125 +v 0.390625 -0.421875 -0.453125 +v 0.390625 -0.468750 -0.406250 +v 0.390625 -0.421875 -0.406250 +v -0.265625 -0.421875 -0.406250 +v -0.265625 -0.468750 -0.406250 +v 0.390625 -0.468750 -0.453125 +v -0.265625 -0.468750 -0.453125 +v 0.296875 -0.468750 -0.406250 +v 0.250000 -0.468750 -0.359375 +v 0.250000 0.281250 -0.359375 +v 0.250000 -0.468750 -0.406250 +v 0.250000 0.281250 -0.406250 +v 0.296875 -0.468750 -0.359375 +v 0.296875 0.281250 -0.359375 +v 0.296875 0.281250 -0.406250 +v -0.265625 -0.375000 -0.453125 +v -0.265625 -0.304688 -0.406250 +v -0.265625 -0.304688 -0.453125 +v -0.265625 -0.375000 -0.406250 +v -0.250000 -0.304688 -0.406250 +v -0.238281 -0.359375 -0.406250 +v -0.250000 -0.359375 -0.453125 +v -0.250000 -0.304688 -0.453125 +v -0.238281 -0.320312 -0.453125 +v -0.250000 -0.375000 -0.453125 +v -0.250000 -0.375000 -0.406250 +v -0.250000 -0.320312 -0.453125 +v -0.250000 -0.320312 -0.406250 +v -0.250000 -0.359375 -0.406250 +v -0.238281 -0.320312 -0.406250 +v -0.238281 -0.359375 -0.453125 +v -0.265625 -0.128906 0.214844 +v -0.265625 -0.058594 0.238281 +v -0.265625 -0.058594 0.214844 +v -0.265625 -0.128906 0.238281 +v -0.250000 -0.058594 0.238281 +v -0.210938 -0.113281 0.238281 +v -0.250000 -0.113281 0.214844 +v -0.250000 -0.058594 0.214844 +v -0.210938 -0.074219 0.214844 +v -0.250000 -0.128906 0.214844 +v -0.250000 -0.128906 0.238281 +v -0.250000 -0.074219 0.214844 +v -0.250000 -0.074219 0.238281 +v -0.250000 -0.113281 0.238281 +v -0.210938 -0.074219 0.238281 +v -0.210938 -0.113281 0.214844 +v -0.242187 -0.442491 0.137012 +v -0.242187 -0.441113 0.135634 +v 0.367188 -0.441113 0.135634 +v 0.367188 -0.442491 0.137012 +v -0.242187 -0.440347 0.133787 +v -0.242187 -0.440347 0.131838 +v 0.367188 -0.440347 0.131838 +v 0.367188 -0.440347 0.133787 +v -0.242187 -0.441113 0.129991 +v -0.242187 -0.442491 0.128613 +v 0.367188 -0.442491 0.128613 +v 0.367188 -0.441113 0.129991 +v -0.242187 -0.444338 0.127847 +v -0.242187 -0.446287 0.127847 +v 0.367188 -0.446287 0.127847 +v 0.367188 -0.444338 0.127847 +v -0.242187 -0.448134 0.128613 +v -0.242187 -0.449512 0.129991 +v 0.367188 -0.449512 0.129991 +v 0.367188 -0.448134 0.128613 +v -0.242187 -0.450278 0.131838 +v -0.242187 -0.450278 0.133787 +v 0.367188 -0.450278 0.133787 +v 0.367188 -0.450278 0.131838 +v -0.242187 -0.449512 0.135634 +v -0.242187 -0.448134 0.137012 +v 0.367188 -0.448134 0.137012 +v 0.367188 -0.449512 0.135634 +v -0.242187 -0.446287 0.137778 +v -0.242187 -0.444338 0.137778 +v 0.367188 -0.444338 0.137778 +v 0.367188 -0.446287 0.137778 +v 0.007344 -0.366288 0.187969 +v 0.007344 -0.366288 0.077656 +v 0.047344 -0.366288 0.187969 +v 0.047344 -0.366288 0.077656 +v 0.047344 -0.415800 0.077656 +v 0.007344 -0.415800 0.077656 +v 0.047344 -0.415800 0.187969 +v 0.007344 -0.415800 0.187969 +v 0.047344 -0.465312 0.105234 +v 0.007344 -0.465312 0.105234 +v 0.007344 -0.415800 0.160391 +v 0.007344 -0.465312 0.160391 +v 0.007344 -0.415800 0.105234 +v 0.047344 -0.465312 0.160391 +v 0.047344 -0.415800 0.160391 +v 0.047344 -0.415800 0.105234 +v -0.312500 -0.281250 -0.359375 +v 0.390625 -0.328125 -0.359375 +v -0.312500 -0.328125 -0.312500 +v 0.390625 -0.328125 -0.312500 +v -0.312500 -0.328125 -0.359375 +v 0.390625 -0.281250 -0.359375 +v 0.390625 -0.281250 -0.312500 +v -0.312500 -0.281250 -0.312500 +v -0.195313 -0.375000 -0.312500 +v -0.195313 0.187500 -0.312500 +v 0.367188 0.187500 -0.312500 +v 0.367188 -0.375000 -0.312500 +v -0.195313 0.187500 -0.307500 +v 0.367188 0.187500 -0.307500 +v 0.367188 -0.375000 -0.307500 +v -0.195313 -0.375000 -0.307500 +v 0.363281 0.183594 -0.307500 +v 0.363281 -0.371094 -0.307500 +v -0.191406 -0.371094 -0.307500 +v -0.191406 0.183594 -0.302500 +v 0.363281 0.183594 -0.302500 +v -0.191406 0.183594 -0.307500 +v 0.363281 -0.371094 -0.302500 +v -0.191406 -0.371094 -0.302500 +v -0.265625 -0.433594 0.109375 +v -0.265625 -0.457031 0.109375 +v -0.265625 -0.433594 0.156250 +v -0.242188 -0.457031 0.156250 +v -0.242188 -0.457031 0.109375 +v -0.265625 -0.457031 0.156250 +v -0.242188 -0.433594 0.156250 +v -0.242188 -0.433594 0.109375 +v -0.289063 -0.328125 -0.359375 +v -0.289063 -0.375000 -0.359375 +v -0.171875 -0.328125 -0.359375 +v -0.171875 -0.375000 -0.312500 +v -0.171875 -0.328125 -0.312500 +v -0.171875 -0.375000 -0.359375 +v -0.218750 -0.375000 -0.312500 +v -0.218750 -0.328125 -0.312500 +v -0.218750 -0.375000 -0.265625 +v -0.218750 -0.304688 -0.265625 +v -0.289063 -0.304688 -0.312500 +v -0.289063 -0.375000 -0.265625 +v -0.289063 -0.328125 -0.312500 +v -0.289063 -0.304688 -0.265625 +v -0.218750 -0.304688 -0.312500 +v -0.195313 -0.375000 -0.312500 +v -0.195313 -0.328125 -0.312500 +v -0.271484 -0.287109 -0.359375 +v -0.306641 -0.322266 -0.359375 +v -0.265625 -0.328125 -0.406250 +v -0.271484 -0.322266 -0.359375 +v -0.312500 -0.281250 -0.406250 +v -0.265625 -0.281250 -0.406250 +v -0.306641 -0.287109 -0.359375 +v -0.312500 -0.328125 -0.406250 +v -0.289063 0.140625 -0.359375 +v -0.289063 0.187500 -0.359375 +v -0.171875 0.140625 -0.359375 +v -0.171875 0.187500 -0.312500 +v -0.171875 0.140625 -0.312500 +v -0.171875 0.187500 -0.359375 +v -0.218750 0.187500 -0.312500 +v -0.218750 0.140625 -0.312500 +v -0.218750 0.187500 -0.265625 +v -0.218750 0.117187 -0.265625 +v -0.289063 0.117187 -0.312500 +v -0.289063 0.187500 -0.265625 +v -0.289063 0.140625 -0.312500 +v -0.289063 0.117187 -0.265625 +v -0.218750 0.117187 -0.312500 +v -0.195313 0.187500 -0.312500 +v -0.195313 0.140625 -0.312500 +v 0.390625 -0.421875 0.250000 +v 0.390625 0.234375 0.250000 +v 0.437500 0.234375 0.203125 +v 0.437500 0.234375 0.250000 +v 0.437500 -0.421875 0.250000 +v 0.437500 -0.421875 0.203125 +v 0.390625 0.234375 0.203125 +v 0.390625 -0.421875 0.203125 +v -0.247614 -0.335565 0.203125 +v -0.249627 -0.333552 0.203125 +v -0.249627 -0.333552 -0.406250 +v -0.247614 -0.335565 -0.406250 +v -0.252483 -0.332369 0.203125 +v -0.255329 -0.332369 0.203125 +v -0.255329 -0.332369 -0.406250 +v -0.252483 -0.332369 -0.406250 +v -0.258185 -0.333552 0.203125 +v -0.260198 -0.335565 0.203125 +v -0.260198 -0.335565 -0.406250 +v -0.258185 -0.333552 -0.406250 +v -0.261381 -0.338420 0.203125 +v -0.261381 -0.341267 0.203125 +v -0.261381 -0.341267 -0.406250 +v -0.261381 -0.338420 -0.406250 +v -0.260198 -0.344123 0.203125 +v -0.258185 -0.346135 0.203125 +v -0.258185 -0.346135 -0.406250 +v -0.260198 -0.344123 -0.406250 +v -0.255329 -0.347318 0.203125 +v -0.252483 -0.347318 0.203125 +v -0.252483 -0.347318 -0.406250 +v -0.255329 -0.347318 -0.406250 +v -0.249627 -0.346135 0.203125 +v -0.247614 -0.344123 0.203125 +v -0.247614 -0.344123 -0.406250 +v -0.249627 -0.346135 -0.406250 +v -0.246432 -0.341267 0.203125 +v -0.246432 -0.338420 0.203125 +v -0.246432 -0.338420 -0.406250 +v -0.246432 -0.341267 -0.406250 +v -0.312500 -0.421875 -0.453125 +v -0.265625 -0.468750 -0.453125 +v -0.265625 -0.468750 0.250000 +v -0.265625 -0.421875 -0.453125 +v -0.312500 -0.421875 0.250000 +v -0.312500 -0.468750 0.250000 +v -0.265625 -0.421875 0.250000 +v -0.312500 -0.468750 -0.453125 +v -0.312500 -0.421875 -0.453125 +v -0.265625 -0.468750 -0.453125 +v -0.265625 -0.421875 -0.453125 +v -0.312500 -0.421875 -0.500000 +v -0.312500 -0.468750 -0.500000 +v -0.265625 -0.421875 -0.500000 +v -0.265625 -0.468750 -0.500000 +v -0.312500 -0.468750 -0.453125 +v -0.247614 0.156623 0.203125 +v -0.249627 0.158636 0.203125 +v -0.249627 0.158636 -0.406250 +v -0.247614 0.156623 -0.406250 +v -0.252483 0.159818 0.203125 +v -0.255329 0.159818 0.203125 +v -0.255329 0.159818 -0.406250 +v -0.252483 0.159818 -0.406250 +v -0.258185 0.158636 0.203125 +v -0.260198 0.156623 0.203125 +v -0.260198 0.156623 -0.406250 +v -0.258185 0.158636 -0.406250 +v -0.261381 0.153767 0.203125 +v -0.261381 0.150921 0.203125 +v -0.261381 0.150921 -0.406250 +v -0.261381 0.153767 -0.406250 +v -0.260198 0.148065 0.203125 +v -0.258185 0.146052 0.203125 +v -0.258185 0.146052 -0.406250 +v -0.260198 0.148065 -0.406250 +v -0.255329 0.144869 0.203125 +v -0.252483 0.144869 0.203125 +v -0.252483 0.144869 -0.406250 +v -0.255329 0.144869 -0.406250 +v -0.249627 0.146052 0.203125 +v -0.247614 0.148065 0.203125 +v -0.247614 0.148065 -0.406250 +v -0.249627 0.146052 -0.406250 +v -0.246432 0.150921 0.203125 +v -0.246432 0.153767 0.203125 +v -0.246432 0.153767 -0.406250 +v -0.246432 0.150921 -0.406250 +v -0.265625 0.117188 -0.453125 +v -0.265625 0.187500 -0.406250 +v -0.265625 0.187500 -0.453125 +v -0.265625 0.117187 -0.406250 +v -0.250000 0.187500 -0.406250 +v -0.238281 0.132812 -0.406250 +v -0.250000 0.132813 -0.453125 +v -0.250000 0.187500 -0.453125 +v -0.238281 0.171875 -0.453125 +v -0.250000 0.117188 -0.453125 +v -0.250000 0.117187 -0.406250 +v -0.250000 0.171875 -0.453125 +v -0.250000 0.171875 -0.406250 +v -0.250000 0.132812 -0.406250 +v -0.238281 0.171875 -0.406250 +v -0.238281 0.132813 -0.453125 +v -0.265625 0.117188 0.203125 +v -0.265625 0.187500 0.250000 +v -0.265625 0.187500 0.203125 +v -0.265625 0.117187 0.250000 +v -0.250000 0.187500 0.250000 +v -0.238281 0.132812 0.250000 +v -0.250000 0.132812 0.203125 +v -0.250000 0.187500 0.203125 +v -0.238281 0.171875 0.203125 +v -0.250000 0.117188 0.203125 +v -0.250000 0.117187 0.250000 +v -0.250000 0.171875 0.203125 +v -0.250000 0.171875 0.250000 +v -0.250000 0.132812 0.250000 +v -0.238281 0.171875 0.250000 +v -0.238281 0.132812 0.203125 +v -0.271484 0.134766 -0.359375 +v -0.306641 0.099609 -0.359375 +v -0.265625 0.093750 -0.406250 +v -0.271484 0.099609 -0.359375 +v -0.312500 0.140625 -0.406250 +v -0.265625 0.140625 -0.406250 +v -0.306641 0.134766 -0.359375 +v -0.312500 0.093750 -0.406250 +v -0.139447 0.311514 0.193565 +v -0.140068 0.310016 0.193513 +v -0.141567 0.309396 0.193512 +v -0.143065 0.310015 0.193561 +v -0.143686 0.311513 0.193633 +v -0.143064 0.313011 0.193685 +v -0.141565 0.313632 0.193687 +v -0.140067 0.313012 0.193637 +v -0.139929 0.309629 0.203591 +v -0.139308 0.311128 0.203591 +v -0.141428 0.309008 0.203591 +v -0.142927 0.309629 0.203591 +v -0.143548 0.311128 0.203591 +v -0.142927 0.312627 0.203591 +v -0.141428 0.313248 0.203591 +v -0.139929 0.312627 0.203591 +v -0.139690 0.312154 0.183560 +v -0.140313 0.310660 0.183455 +v -0.141812 0.310039 0.183453 +v -0.143309 0.310655 0.183555 +v -0.143927 0.312148 0.183702 +v -0.143305 0.313643 0.183806 +v -0.141806 0.314263 0.183808 +v -0.140309 0.313647 0.183706 +v -0.140102 0.313198 0.173585 +v -0.140727 0.311709 0.173427 +v -0.142225 0.311088 0.173427 +v -0.143720 0.311698 0.173587 +v -0.144335 0.313183 0.173812 +v -0.143710 0.314672 0.173970 +v -0.142211 0.315293 0.173969 +v -0.140717 0.314682 0.173810 +v -0.140786 0.314796 0.163698 +v -0.141415 0.313316 0.163485 +v -0.142913 0.312694 0.163493 +v -0.144403 0.313294 0.163718 +v -0.145013 0.314765 0.164027 +v -0.144385 0.316246 0.164240 +v -0.142886 0.316868 0.164232 +v -0.141396 0.316268 0.164008 +v -0.141624 0.316682 0.153870 +v -0.142258 0.315212 0.153602 +v -0.143755 0.314588 0.153620 +v -0.145239 0.315174 0.153913 +v -0.145841 0.316628 0.154310 +v -0.145207 0.318097 0.154577 +v -0.143710 0.318722 0.154559 +v -0.142226 0.318135 0.154266 +v -0.142851 0.319221 0.144212 +v -0.143491 0.317766 0.143890 +v -0.144986 0.317137 0.143925 +v -0.146460 0.317703 0.144297 +v -0.147050 0.319132 0.144789 +v -0.146410 0.320588 0.145111 +v -0.144915 0.321217 0.145075 +v -0.143440 0.320651 0.144703 +v -0.144395 0.322201 0.134730 +v -0.145044 0.320762 0.134355 +v -0.146535 0.320126 0.134414 +v -0.147995 0.320665 0.134872 +v -0.148569 0.322063 0.135462 +v -0.147920 0.323502 0.135838 +v -0.146429 0.324138 0.135779 +v -0.144969 0.323600 0.135320 +v -0.146211 0.325557 0.125399 +v -0.146871 0.324138 0.124972 +v -0.148356 0.323491 0.125059 +v -0.149797 0.323994 0.125609 +v -0.150349 0.325354 0.126301 +v -0.149689 0.326774 0.126728 +v -0.148204 0.327421 0.126641 +v -0.146763 0.326917 0.126090 +v -0.148711 0.329676 0.116520 +v -0.149384 0.328279 0.116044 +v -0.150858 0.327613 0.116172 +v -0.152270 0.328069 0.116829 +v -0.152792 0.329379 0.117630 +v -0.152120 0.330777 0.118106 +v -0.150646 0.331443 0.117978 +v -0.149234 0.330987 0.117321 +v -0.151579 0.334124 0.107923 +v -0.152267 0.332750 0.107403 +v -0.153725 0.332059 0.107577 +v -0.155098 0.332456 0.108344 +v -0.155583 0.333709 0.109255 +v -0.154895 0.335083 0.109775 +v -0.153437 0.335774 0.109601 +v -0.152064 0.335377 0.108834 +v -0.155136 0.339160 0.099870 +v -0.155842 0.337810 0.099311 +v -0.157274 0.337084 0.099542 +v -0.158594 0.337406 0.100428 +v -0.159029 0.338589 0.101450 +v -0.158324 0.339939 0.102010 +v -0.156891 0.340665 0.101778 +v -0.155571 0.340342 0.100892 +v -0.159518 0.344689 0.092597 +v -0.160241 0.343362 0.092007 +v -0.161634 0.342586 0.092304 +v -0.162882 0.342816 0.093315 +v -0.163254 0.343917 0.094447 +v -0.162531 0.345245 0.095037 +v -0.161138 0.346021 0.094740 +v -0.159890 0.345791 0.093729 +v -0.164366 0.350471 0.085786 +v -0.165106 0.349165 0.085171 +v -0.166449 0.348331 0.085535 +v -0.167607 0.348456 0.086665 +v -0.167902 0.349468 0.087898 +v -0.167161 0.350774 0.088513 +v -0.165819 0.351609 0.088149 +v -0.164660 0.351483 0.087019 +v -0.170319 0.356632 0.080246 +v -0.171073 0.355341 0.079618 +v -0.172344 0.354430 0.080052 +v -0.173386 0.354434 0.081296 +v -0.173590 0.355349 0.082619 +v -0.172835 0.356641 0.083248 +v -0.171565 0.357551 0.082814 +v -0.170522 0.357548 0.081570 +v -0.176823 0.362828 0.075487 +v -0.177587 0.361547 0.074850 +v -0.178770 0.360553 0.075347 +v -0.179678 0.360430 0.076685 +v -0.179780 0.361249 0.078082 +v -0.179015 0.362531 0.078719 +v -0.177832 0.363524 0.078223 +v -0.176924 0.363647 0.076884 +v -0.183953 0.369060 0.071620 +v -0.184723 0.367783 0.070981 +v -0.185802 0.366702 0.071528 +v -0.186558 0.366450 0.072941 +v -0.186548 0.367175 0.074393 +v -0.185779 0.368452 0.075032 +v -0.184700 0.369533 0.074485 +v -0.183944 0.369785 0.073072 +v -0.192010 0.374936 0.069513 +v -0.192773 0.373654 0.068876 +v -0.193736 0.372486 0.069458 +v -0.194335 0.372115 0.070920 +v -0.194220 0.372760 0.072404 +v -0.193457 0.374042 0.073042 +v -0.192494 0.375211 0.072459 +v -0.191895 0.375581 0.070998 +v -0.200374 0.380585 0.068111 +v -0.201125 0.379296 0.067474 +v -0.201967 0.378046 0.068076 +v -0.202406 0.377568 0.069563 +v -0.202185 0.378142 0.071064 +v -0.201434 0.379432 0.071701 +v -0.200592 0.380682 0.071099 +v -0.200153 0.381160 0.069612 +v -0.209184 0.385716 0.067943 +v -0.209916 0.384415 0.067307 +v -0.210637 0.383095 0.067913 +v -0.210925 0.382528 0.069406 +v -0.210612 0.383047 0.070910 +v -0.209880 0.384347 0.071546 +v -0.209158 0.385668 0.070940 +v -0.208870 0.386235 0.069448 +v -0.218190 0.390342 0.068627 +v -0.218899 0.389029 0.067990 +v -0.219507 0.387649 0.068588 +v -0.219657 0.387010 0.070072 +v -0.219261 0.387486 0.071572 +v -0.218551 0.388798 0.072209 +v -0.217944 0.390179 0.071611 +v -0.217794 0.390818 0.070127 +v -0.227315 0.394652 0.069840 +v -0.228000 0.393328 0.069199 +v -0.228498 0.391897 0.069781 +v -0.228517 0.391198 0.071245 +v -0.228046 0.391640 0.072734 +v -0.227362 0.392964 0.073375 +v -0.226864 0.394394 0.072793 +v -0.226845 0.395093 0.071329 +v -0.236554 0.398154 0.072111 +v -0.237212 0.396820 0.071464 +v -0.237616 0.395352 0.072025 +v -0.237528 0.394610 0.073465 +v -0.237000 0.395029 0.074941 +v -0.236342 0.396363 0.075588 +v -0.235939 0.397831 0.075027 +v -0.236026 0.398573 0.073587 +v -0.245791 0.401361 0.074700 +v -0.246423 0.400017 0.074046 +v -0.246737 0.398519 0.074582 +v -0.246551 0.397743 0.075994 +v -0.245972 0.398144 0.077456 +v -0.245339 0.399487 0.078110 +v -0.245025 0.400986 0.077574 +v -0.245211 0.401762 0.076162 +v -0.255024 0.404114 0.077777 +v -0.255630 0.402763 0.077113 +v -0.255865 0.401241 0.077623 +v -0.255592 0.400439 0.079006 +v -0.254970 0.400827 0.080454 +v -0.254364 0.402178 0.081117 +v -0.254128 0.403701 0.080608 +v -0.254402 0.404503 0.079224 +v -0.264207 0.406372 0.081308 +v -0.264788 0.405015 0.080636 +v -0.264954 0.403475 0.081119 +v -0.264606 0.402654 0.082474 +v -0.263950 0.403034 0.083909 +v -0.263368 0.404391 0.084581 +v -0.263203 0.405931 0.084098 +v -0.263550 0.406752 0.082742 +v -0.273363 0.408401 0.085041 +v -0.273920 0.407039 0.084358 +v -0.274020 0.405485 0.084814 +v -0.273604 0.404650 0.086142 +v -0.272916 0.405023 0.087563 +v -0.272359 0.406385 0.088245 +v -0.272259 0.407939 0.087789 +v -0.272674 0.408774 0.086462 +v -0.282449 0.409993 0.089130 +v -0.282984 0.408627 0.088437 +v -0.283027 0.407063 0.088868 +v -0.282553 0.406218 0.090169 +v -0.281839 0.406586 0.091578 +v -0.281304 0.407952 0.092271 +v -0.281261 0.409516 0.091841 +v -0.281735 0.410362 0.090540 +v -0.291453 0.411213 0.093476 +v -0.291966 0.409844 0.092774 +v -0.291958 0.408273 0.093179 +v -0.291433 0.407421 0.094456 +v -0.290698 0.407786 0.095855 +v -0.290185 0.409155 0.096558 +v -0.290193 0.410726 0.096153 +v -0.290718 0.411579 0.094876 +v -0.300388 0.412126 0.098034 +v -0.300882 0.410755 0.097322 +v -0.300828 0.409179 0.097704 +v -0.300258 0.408322 0.098958 +v -0.299505 0.408685 0.100349 +v -0.299011 0.410057 0.101061 +v -0.299065 0.411632 0.100679 +v -0.299636 0.412490 0.099425 +v -0.309233 0.412703 0.102789 +v -0.309708 0.411331 0.102067 +v -0.309613 0.409752 0.102427 +v -0.309003 0.408891 0.103660 +v -0.308235 0.409253 0.105043 +v -0.307760 0.410626 0.105765 +v -0.307855 0.412205 0.105405 +v -0.308465 0.413065 0.104172 +v -0.318048 0.413171 0.107608 +v -0.318505 0.411798 0.106875 +v -0.318371 0.410217 0.107214 +v -0.317723 0.409354 0.108426 +v -0.316941 0.409716 0.109801 +v -0.316483 0.411089 0.110534 +v -0.316618 0.412670 0.110195 +v -0.317266 0.413532 0.108983 +v -0.326814 0.413459 0.112532 +v -0.327254 0.412085 0.111790 +v -0.327083 0.410503 0.112108 +v -0.326400 0.409640 0.113300 +v -0.325605 0.410001 0.114668 +v -0.325165 0.411375 0.115410 +v -0.325336 0.412957 0.115091 +v -0.326019 0.413820 0.113899 +v -0.154687 0.281094 0.199376 +v -0.154687 0.281094 0.254376 +v -0.154687 0.336094 0.199376 +v -0.154687 0.336094 0.254376 +v -0.129688 0.281094 0.199376 +v -0.129688 0.281094 0.254376 +v -0.129688 0.336094 0.199376 +v -0.129688 0.336094 0.254376 +v -0.154688 0.281094 0.199376 +v -0.209687 0.281094 0.254376 +v -0.154688 0.281094 0.254376 +v -0.154687 0.336094 0.199376 +v -0.209687 0.336094 0.254375 +v -0.154687 0.336094 0.254375 +v -0.160938 0.281094 0.199376 +v -0.203438 0.281094 0.254376 +v -0.203437 0.336094 0.254375 +v -0.203437 0.336094 0.199376 +v -0.160938 0.281094 0.254376 +v -0.160937 0.336094 0.254375 +v -0.160937 0.336094 0.199376 +v -0.209687 0.281094 0.199376 +v -0.209687 0.336094 0.199376 +v -0.203438 0.281094 0.199376 +v -0.442000 0.362268 0.216003 +v -0.442000 0.445025 0.216002 +v -0.439963 0.362268 0.195323 +v -0.439963 0.445025 0.195323 +v -0.433931 0.362268 0.175438 +v -0.433931 0.445025 0.175438 +v -0.424136 0.362268 0.157112 +v -0.424136 0.445025 0.157112 +v -0.410954 0.362268 0.141049 +v -0.410954 0.445025 0.141049 +v -0.394891 0.362268 0.127867 +v -0.394891 0.445025 0.127867 +v -0.376565 0.362268 0.118071 +v -0.376565 0.445025 0.118071 +v -0.356680 0.362268 0.112039 +v -0.356680 0.445025 0.112039 +v -0.336000 0.362268 0.110003 +v -0.336000 0.445025 0.110002 +v -0.315321 0.362268 0.112039 +v -0.315321 0.445025 0.112039 +v -0.295436 0.362268 0.118071 +v -0.295436 0.445025 0.118071 +v -0.277110 0.362268 0.127867 +v -0.277110 0.445025 0.127867 +v -0.261047 0.362268 0.141049 +v -0.261047 0.445025 0.141049 +v -0.247864 0.362268 0.157112 +v -0.247864 0.445025 0.157112 +v -0.238069 0.362268 0.175438 +v -0.238069 0.445025 0.175438 +v -0.232037 0.362268 0.195323 +v -0.232037 0.445025 0.195323 +v -0.230000 0.362268 0.216003 +v -0.230000 0.445025 0.216002 +v -0.232037 0.362269 0.236682 +v -0.232037 0.445025 0.236682 +v -0.238069 0.362269 0.256567 +v -0.238069 0.445025 0.256567 +v -0.247864 0.362269 0.274893 +v -0.247864 0.445026 0.274893 +v -0.261047 0.362269 0.290956 +v -0.261047 0.445026 0.290956 +v -0.277110 0.362269 0.304139 +v -0.277110 0.445026 0.304138 +v -0.295436 0.362269 0.313934 +v -0.295436 0.445026 0.313934 +v -0.315321 0.362269 0.319966 +v -0.315321 0.445026 0.319966 +v -0.336000 0.362269 0.322003 +v -0.336000 0.445026 0.322003 +v -0.356680 0.362269 0.319966 +v -0.356680 0.445026 0.319966 +v -0.376565 0.362269 0.313934 +v -0.376565 0.445026 0.313934 +v -0.394891 0.362269 0.304138 +v -0.394891 0.445026 0.304138 +v -0.410954 0.362269 0.290956 +v -0.410954 0.445026 0.290956 +v -0.424136 0.362269 0.274893 +v -0.424136 0.445025 0.274893 +v -0.433932 0.362269 0.256567 +v -0.433932 0.445025 0.256567 +v -0.439964 0.362268 0.236682 +v -0.439964 0.445025 0.236682 +v -0.459667 0.356147 0.216003 +v -0.459667 0.451147 0.216002 +v -0.457291 0.356147 0.191877 +v -0.457291 0.451146 0.191876 +v -0.450253 0.356147 0.168677 +v -0.450253 0.451146 0.168677 +v -0.438825 0.356147 0.147297 +v -0.438825 0.451146 0.147297 +v -0.423446 0.356147 0.128557 +v -0.423446 0.451146 0.128557 +v -0.404706 0.356147 0.113178 +v -0.404706 0.451146 0.113177 +v -0.383325 0.356147 0.101750 +v -0.383325 0.451146 0.101749 +v -0.360126 0.356147 0.094712 +v -0.360126 0.451146 0.094712 +v -0.336000 0.356147 0.092336 +v -0.336000 0.451146 0.092336 +v -0.311874 0.356147 0.094712 +v -0.311874 0.451146 0.094712 +v -0.288675 0.356147 0.101749 +v -0.288675 0.451146 0.101749 +v -0.267295 0.356147 0.113178 +v -0.267295 0.451146 0.113177 +v -0.248555 0.356147 0.128557 +v -0.248555 0.451146 0.128557 +v -0.233175 0.356147 0.147297 +v -0.233175 0.451146 0.147297 +v -0.221747 0.356147 0.168677 +v -0.221747 0.451146 0.168677 +v -0.214710 0.356147 0.191877 +v -0.214710 0.451146 0.191876 +v -0.212333 0.356147 0.216003 +v -0.212333 0.451147 0.216002 +v -0.214710 0.356147 0.240129 +v -0.214710 0.451147 0.240129 +v -0.221747 0.356147 0.263328 +v -0.221747 0.451147 0.263328 +v -0.233175 0.356147 0.284708 +v -0.233175 0.451147 0.284708 +v -0.248555 0.356147 0.303448 +v -0.248555 0.451147 0.303448 +v -0.267295 0.356147 0.318828 +v -0.267295 0.451147 0.318828 +v -0.288675 0.356147 0.330256 +v -0.288675 0.451147 0.330256 +v -0.311874 0.356147 0.337293 +v -0.311874 0.451147 0.337293 +v -0.336000 0.356147 0.339669 +v -0.336000 0.451147 0.339669 +v -0.360126 0.356147 0.337293 +v -0.360126 0.451147 0.337293 +v -0.383326 0.356147 0.330256 +v -0.383326 0.451147 0.330256 +v -0.404706 0.356147 0.318828 +v -0.404706 0.451147 0.318827 +v -0.423446 0.356147 0.303448 +v -0.423446 0.451147 0.303448 +v -0.438825 0.356147 0.284708 +v -0.438825 0.451147 0.284708 +v -0.450253 0.356147 0.263328 +v -0.450253 0.451147 0.263327 +v -0.457291 0.356147 0.240129 +v -0.457291 0.451147 0.240128 +v -0.457291 0.444896 0.191876 +v -0.459667 0.444897 0.216002 +v -0.450253 0.444896 0.168677 +v -0.438825 0.444896 0.147297 +v -0.423446 0.444896 0.128557 +v -0.404706 0.444896 0.113177 +v -0.383325 0.444896 0.101749 +v -0.360126 0.444896 0.094712 +v -0.336000 0.444896 0.092336 +v -0.311874 0.444896 0.094712 +v -0.288675 0.444896 0.101749 +v -0.267295 0.444896 0.113177 +v -0.248555 0.444896 0.128557 +v -0.233175 0.444896 0.147297 +v -0.221747 0.444896 0.168677 +v -0.214710 0.444897 0.191876 +v -0.212333 0.444897 0.216002 +v -0.214710 0.444897 0.240129 +v -0.221747 0.444897 0.263328 +v -0.233175 0.444897 0.284708 +v -0.248555 0.444897 0.303448 +v -0.267295 0.444897 0.318828 +v -0.288675 0.444897 0.330256 +v -0.311874 0.444897 0.337293 +v -0.336000 0.444897 0.339669 +v -0.360126 0.444897 0.337293 +v -0.383326 0.444897 0.330256 +v -0.404706 0.444897 0.318828 +v -0.423446 0.444897 0.303448 +v -0.438825 0.444897 0.284708 +v -0.450253 0.444897 0.263327 +v -0.457291 0.444897 0.240128 +v -0.459667 0.362397 0.216003 +v -0.457291 0.362397 0.191876 +v -0.450253 0.362397 0.168677 +v -0.438825 0.362397 0.147297 +v -0.423446 0.362397 0.128557 +v -0.404706 0.362397 0.113178 +v -0.383325 0.362397 0.101749 +v -0.360126 0.362396 0.094712 +v -0.336000 0.362396 0.092336 +v -0.311874 0.362396 0.094712 +v -0.288675 0.362397 0.101749 +v -0.267295 0.362397 0.113178 +v -0.248555 0.362397 0.128557 +v -0.233175 0.362397 0.147297 +v -0.221747 0.362397 0.168677 +v -0.214710 0.362397 0.191877 +v -0.212333 0.362397 0.216003 +v -0.214710 0.362397 0.240129 +v -0.221747 0.362397 0.263328 +v -0.233175 0.362397 0.284708 +v -0.248555 0.362397 0.303448 +v -0.267295 0.362397 0.318828 +v -0.288675 0.362397 0.330256 +v -0.311874 0.362397 0.337293 +v -0.336000 0.362397 0.339669 +v -0.360126 0.362397 0.337293 +v -0.383326 0.362397 0.330256 +v -0.404706 0.362397 0.318828 +v -0.423446 0.362397 0.303448 +v -0.438825 0.362397 0.284708 +v -0.450253 0.362397 0.263328 +v -0.457291 0.362397 0.240129 +v -0.308821 0.444896 0.175325 +v -0.308821 0.362397 0.175326 +v -0.313098 0.451147 0.181727 +v -0.313098 0.356147 0.181728 +v -0.384922 0.444897 0.216002 +v -0.377222 0.356147 0.216003 +v -0.384922 0.362397 0.216003 +v -0.377222 0.451147 0.216002 +v -0.383982 0.444897 0.225546 +v -0.376430 0.356147 0.224045 +v -0.383982 0.362397 0.225547 +v -0.376430 0.451147 0.224044 +v -0.381198 0.444897 0.234724 +v -0.374085 0.356147 0.231778 +v -0.381198 0.362397 0.234724 +v -0.374085 0.451147 0.231777 +v -0.317279 0.444897 0.261200 +v -0.317279 0.362397 0.261200 +v -0.320225 0.451147 0.254087 +v -0.320225 0.356147 0.254087 +v -0.308821 0.444897 0.256679 +v -0.308821 0.362397 0.256680 +v -0.313098 0.451147 0.250277 +v -0.313098 0.356147 0.250278 +v -0.326456 0.444897 0.263984 +v -0.326456 0.362397 0.263984 +v -0.327958 0.451147 0.256433 +v -0.327958 0.356147 0.256433 +v -0.301407 0.444897 0.250595 +v -0.301407 0.362397 0.250596 +v -0.306852 0.451147 0.245151 +v -0.306852 0.356147 0.245151 +v -0.288018 0.444897 0.225547 +v -0.288018 0.362397 0.225547 +v -0.295570 0.451147 0.224044 +v -0.295570 0.356147 0.224045 +v -0.287078 0.444897 0.216002 +v -0.287078 0.362397 0.216003 +v -0.294778 0.451147 0.216002 +v -0.294778 0.356147 0.216003 +v -0.290802 0.444897 0.234724 +v -0.290802 0.362397 0.234724 +v -0.297916 0.451147 0.231777 +v -0.297916 0.356147 0.231778 +v -0.345544 0.444896 0.168021 +v -0.345544 0.362397 0.168021 +v -0.344042 0.451146 0.175572 +v -0.344042 0.356147 0.175572 +v -0.376677 0.444896 0.188823 +v -0.376677 0.362397 0.188823 +v -0.370275 0.356147 0.193101 +v -0.370275 0.451147 0.193100 +v -0.336000 0.444896 0.167081 +v -0.336000 0.362397 0.167081 +v -0.336000 0.451146 0.174780 +v -0.336000 0.356147 0.174780 +v -0.354722 0.444896 0.170805 +v -0.354722 0.362397 0.170805 +v -0.351775 0.356147 0.177918 +v -0.351775 0.451146 0.177918 +v -0.288018 0.444897 0.206458 +v -0.288018 0.362397 0.206458 +v -0.295570 0.451147 0.207960 +v -0.295570 0.356147 0.207961 +v -0.370593 0.444897 0.250595 +v -0.365149 0.356147 0.245151 +v -0.370593 0.362397 0.250596 +v -0.365149 0.451147 0.245151 +v -0.376677 0.444897 0.243182 +v -0.370275 0.356147 0.238904 +v -0.376677 0.362397 0.243182 +v -0.370275 0.451147 0.238904 +v -0.363180 0.444897 0.256679 +v -0.358902 0.356147 0.250278 +v -0.363180 0.362397 0.256680 +v -0.358902 0.451147 0.250277 +v -0.326456 0.444896 0.168021 +v -0.326456 0.362397 0.168021 +v -0.327958 0.451146 0.175572 +v -0.327958 0.356147 0.175572 +v -0.295323 0.444896 0.188823 +v -0.295323 0.362397 0.188823 +v -0.301725 0.451147 0.193100 +v -0.301725 0.356147 0.193101 +v -0.301407 0.444896 0.181409 +v -0.301407 0.362397 0.181410 +v -0.306852 0.451147 0.186854 +v -0.306852 0.356147 0.186854 +v -0.317279 0.444896 0.170805 +v -0.317279 0.362397 0.170805 +v -0.320225 0.451146 0.177918 +v -0.320225 0.356147 0.177918 +v -0.336000 0.444897 0.264924 +v -0.336000 0.362397 0.264924 +v -0.336000 0.356147 0.257225 +v -0.336000 0.451147 0.257225 +v -0.295323 0.444897 0.243182 +v -0.295323 0.362397 0.243182 +v -0.301725 0.451147 0.238904 +v -0.301725 0.356147 0.238905 +v -0.345544 0.444897 0.263984 +v -0.345544 0.362397 0.263984 +v -0.344042 0.356147 0.256433 +v -0.344042 0.451147 0.256433 +v -0.370593 0.444896 0.181409 +v -0.370593 0.362397 0.181410 +v -0.365149 0.356147 0.186854 +v -0.365149 0.451147 0.186854 +v -0.290802 0.444897 0.197281 +v -0.290802 0.362397 0.197281 +v -0.297916 0.451147 0.200227 +v -0.297916 0.356147 0.200228 +v -0.363180 0.444896 0.175325 +v -0.363180 0.362397 0.175326 +v -0.358902 0.356147 0.181728 +v -0.358902 0.451146 0.181727 +v -0.354722 0.444897 0.261200 +v -0.354722 0.362397 0.261200 +v -0.351775 0.356147 0.254087 +v -0.351775 0.451147 0.254087 +v -0.381198 0.444897 0.197281 +v -0.381198 0.362397 0.197281 +v -0.374085 0.356147 0.200228 +v -0.374085 0.451147 0.200227 +v -0.383982 0.444897 0.206458 +v -0.383982 0.362397 0.206458 +v -0.376430 0.356147 0.207961 +v -0.376430 0.451147 0.207960 +v -0.312500 0.140625 -0.359375 +v 0.390625 0.093750 -0.359375 +v -0.312500 0.093750 -0.312500 +v 0.390625 0.093750 -0.312500 +v -0.312500 0.093750 -0.359375 +v 0.390625 0.140625 -0.359375 +v 0.390625 0.140625 -0.312500 +v -0.312500 0.140625 -0.312500 +v 0.390625 -0.421875 -0.406250 +v 0.390625 0.234375 -0.406250 +v 0.437500 0.234375 -0.453125 +v 0.437500 0.234375 -0.406250 +v 0.437500 -0.421875 -0.406250 +v 0.437500 -0.421875 -0.453125 +v 0.390625 0.234375 -0.453125 +v 0.390625 -0.421875 -0.453125 +v -0.312500 -0.421875 0.250000 +v -0.312500 0.234375 0.250000 +v -0.265625 0.234375 0.203125 +v -0.265625 0.234375 0.250000 +v -0.265625 -0.421875 0.250000 +v -0.265625 -0.421875 0.203125 +v -0.312500 0.234375 0.203125 +v -0.312500 -0.421875 0.203125 +v -0.312500 -0.421875 -0.406250 +v -0.312500 0.234375 -0.406250 +v -0.265625 0.234375 -0.453125 +v -0.265625 0.234375 -0.406250 +v -0.265625 -0.421875 -0.406250 +v -0.265625 -0.421875 -0.453125 +v -0.312500 0.234375 -0.453125 +v -0.312500 -0.421875 -0.453125 +v 0.390625 -0.421875 -0.453125 +v 0.437500 -0.468750 -0.453125 +v 0.437500 -0.468750 0.250000 +v 0.437500 -0.421875 -0.453125 +v 0.390625 -0.421875 0.250000 +v 0.390625 -0.468750 0.250000 +v 0.437500 -0.421875 0.250000 +v 0.390625 -0.468750 -0.453125 +v 0.390625 -0.421875 -0.453125 +v 0.437500 -0.468750 -0.453125 +v 0.437500 -0.421875 -0.453125 +v 0.390625 -0.421875 -0.500000 +v 0.390625 -0.468750 -0.500000 +v 0.437500 -0.421875 -0.500000 +v 0.437500 -0.468750 -0.500000 +v 0.390625 -0.468750 -0.453125 +v -0.312500 0.281250 -0.453125 +v -0.265625 0.234375 -0.453125 +v -0.265625 0.234375 0.250000 +v -0.265625 0.281250 -0.453125 +v -0.312500 0.281250 0.250000 +v -0.312500 0.234375 0.250000 +v -0.265625 0.281250 0.250000 +v -0.312500 0.234375 -0.453125 +v -0.312500 0.281250 -0.453125 +v -0.265625 0.234375 -0.453125 +v -0.265625 0.281250 -0.453125 +v -0.312500 0.281250 -0.500000 +v -0.312500 0.234375 -0.500000 +v -0.265625 0.281250 -0.500000 +v -0.265625 0.234375 -0.500000 +v -0.312500 0.234375 -0.453125 +v 0.390625 0.281250 -0.453125 +v 0.437500 0.234375 -0.453125 +v 0.437500 0.234375 0.250000 +v 0.437500 0.281250 -0.453125 +v 0.390625 0.281250 0.250000 +v 0.390625 0.234375 0.250000 +v 0.437500 0.281250 0.250000 +v 0.390625 0.234375 -0.453125 +v 0.390625 0.281250 -0.453125 +v 0.437500 0.234375 -0.453125 +v 0.437500 0.281250 -0.453125 +v 0.390625 0.281250 -0.500000 +v 0.390625 0.234375 -0.500000 +v 0.437500 0.281250 -0.500000 +v 0.437500 0.234375 -0.500000 +v 0.390625 0.234375 -0.453125 +v -0.265625 -0.421875 0.203125 +v 0.390625 -0.421875 0.203125 +v 0.390625 -0.468750 0.250000 +v 0.390625 -0.421875 0.250000 +v -0.265625 -0.421875 0.250000 +v -0.265625 -0.468750 0.250000 +v 0.390625 -0.468750 0.203125 +v -0.265625 -0.468750 0.203125 +v -0.265625 0.281250 -0.453125 +v 0.390625 0.281250 -0.453125 +v 0.390625 0.234375 -0.406250 +v 0.390625 0.281250 -0.406250 +v -0.265625 0.281250 -0.406250 +v -0.265625 0.234375 -0.406250 +v 0.390625 0.234375 -0.453125 +v -0.265625 0.234375 -0.453125 +v -0.265625 0.281250 0.203125 +v 0.390625 0.281250 0.203125 +v 0.390625 0.234375 0.250000 +v 0.390625 0.281250 0.250000 +v -0.265625 0.281250 0.250000 +v -0.265625 0.234375 0.250000 +v 0.390625 0.234375 0.203125 +v -0.265625 0.234375 0.203125 +v -0.191250 -0.121250 -0.406253 +v -0.246250 -0.121250 -0.461253 +v -0.246250 -0.121250 -0.406253 +v -0.191250 -0.066250 -0.406252 +v -0.246250 -0.066250 -0.461252 +v -0.246250 -0.066250 -0.406252 +v -0.221875 -0.093750 -0.406253 +v -0.221875 -0.093750 -0.381253 +v -0.220960 -0.091540 -0.406253 +v -0.220960 -0.091540 -0.381253 +v -0.218750 -0.090625 -0.406253 +v -0.218750 -0.090625 -0.381253 +v -0.216540 -0.091540 -0.406253 +v -0.216540 -0.091540 -0.381253 +v -0.215625 -0.093750 -0.406253 +v -0.215625 -0.093750 -0.381253 +v -0.216540 -0.095960 -0.406253 +v -0.216540 -0.095960 -0.381253 +v -0.218750 -0.096875 -0.406253 +v -0.218750 -0.096875 -0.381253 +v -0.220960 -0.095960 -0.406253 +v -0.220960 -0.095960 -0.381253 +v -0.191250 -0.121250 -0.412503 +v -0.246250 -0.121250 -0.455003 +v -0.246250 -0.066250 -0.455002 +v -0.191250 -0.066250 -0.455002 +v -0.246250 -0.121250 -0.412503 +v -0.246250 -0.066250 -0.412502 +v -0.191250 -0.066250 -0.412502 +v -0.191250 -0.121250 -0.461253 +v -0.191250 -0.066250 -0.461252 +v -0.191250 -0.121250 -0.455003 +v -0.223750 -0.093750 -0.382812 +v -0.223750 -0.093750 0.226469 +v -0.223369 -0.091837 -0.382812 +v -0.223369 -0.091837 0.226469 +v -0.222286 -0.090214 -0.382812 +v -0.222286 -0.090214 0.226469 +v -0.220663 -0.089131 -0.382812 +v -0.220663 -0.089131 0.226469 +v -0.218750 -0.088750 -0.382812 +v -0.216837 -0.089131 -0.382812 +v -0.216837 -0.089131 0.226469 +v -0.215214 -0.090214 -0.382812 +v -0.215214 -0.090214 0.226469 +v -0.214131 -0.091837 -0.382812 +v -0.214131 -0.091837 0.226469 +v -0.213750 -0.093750 -0.382812 +v -0.213750 -0.093750 0.226469 +v -0.214131 -0.095663 -0.382812 +v -0.215214 -0.097286 -0.382812 +v -0.215214 -0.097286 0.226469 +v -0.216837 -0.098369 -0.382812 +v -0.216837 -0.098369 0.226469 +v -0.218750 -0.098750 -0.382812 +v -0.220663 -0.098369 -0.382812 +v -0.222286 -0.097286 -0.382812 +v -0.223369 -0.095663 -0.382812 +v -0.214131 -0.095663 0.226469 +v -0.220663 -0.098369 0.226469 +v -0.222286 -0.097286 0.226469 +v -0.218750 -0.098750 0.226469 +v -0.218750 -0.088750 0.226469 +v -0.223369 -0.095663 0.226469 +v -0.228750 -0.093750 -0.390625 +v -0.228750 -0.093750 -0.365625 +v -0.227989 -0.089923 -0.390625 +v -0.227989 -0.089923 -0.365625 +v -0.225821 -0.086679 -0.390625 +v -0.225821 -0.086679 -0.365625 +v -0.222577 -0.084511 -0.390625 +v -0.222577 -0.084511 -0.365625 +v -0.218750 -0.083750 -0.390625 +v -0.218750 -0.083750 -0.365625 +v -0.214923 -0.084511 -0.390625 +v -0.214923 -0.084511 -0.365625 +v -0.211679 -0.086679 -0.390625 +v -0.211679 -0.086679 -0.365625 +v -0.209511 -0.089923 -0.390625 +v -0.209511 -0.089923 -0.365625 +v -0.208750 -0.093750 -0.390625 +v -0.208750 -0.093750 -0.365625 +v -0.209511 -0.097577 -0.390625 +v -0.209511 -0.097577 -0.365625 +v -0.211679 -0.100821 -0.390625 +v -0.211679 -0.100821 -0.365625 +v -0.214923 -0.102989 -0.390625 +v -0.214923 -0.102989 -0.365625 +v -0.218750 -0.103750 -0.390625 +v -0.218750 -0.103750 -0.365625 +v -0.222577 -0.102989 -0.390625 +v -0.222577 -0.102989 -0.365625 +v -0.225821 -0.100821 -0.390625 +v -0.225821 -0.100821 -0.365625 +v -0.227989 -0.097577 -0.390625 +v -0.227989 -0.097577 -0.365625 +v -0.242187 0.260635 0.137012 +v -0.242187 0.262012 0.135634 +v 0.367188 0.262013 0.135634 +v 0.367188 0.260635 0.137012 +v -0.242187 0.262778 0.133787 +v -0.242187 0.262778 0.131838 +v 0.367188 0.262778 0.131838 +v 0.367188 0.262778 0.133787 +v -0.242187 0.262012 0.129991 +v -0.242187 0.260635 0.128613 +v 0.367188 0.260635 0.128613 +v 0.367188 0.262012 0.129991 +v -0.242187 0.258787 0.127847 +v -0.242187 0.256838 0.127847 +v 0.367188 0.256838 0.127847 +v 0.367188 0.258787 0.127847 +v -0.242187 0.254991 0.128613 +v -0.242187 0.253613 0.129991 +v 0.367188 0.253613 0.129991 +v 0.367188 0.254991 0.128613 +v -0.242187 0.252847 0.131838 +v -0.242187 0.252847 0.133787 +v 0.367188 0.252847 0.133787 +v 0.367188 0.252847 0.131838 +v -0.242187 0.253613 0.135634 +v -0.242187 0.254991 0.137012 +v 0.367188 0.254991 0.137012 +v 0.367188 0.253613 0.135634 +v -0.242187 0.256838 0.137778 +v -0.242187 0.258787 0.137778 +v 0.367188 0.258787 0.137778 +v 0.367188 0.256838 0.137778 +v -0.265625 0.269531 0.109375 +v -0.265625 0.246094 0.109375 +v -0.265625 0.269531 0.156250 +v -0.242188 0.246094 0.156250 +v -0.242188 0.246094 0.109375 +v -0.265625 0.246094 0.156250 +v -0.242188 0.269531 0.156250 +v -0.242188 0.269531 0.109375 +v 0.390625 0.246094 0.109375 +v 0.390625 0.269531 0.109375 +v 0.390625 0.246094 0.156250 +v 0.367188 0.269531 0.156250 +v 0.367188 0.269531 0.109375 +v 0.390625 0.269531 0.156250 +v 0.367188 0.246094 0.156250 +v 0.367188 0.246094 0.109375 +v 0.390625 -0.457031 0.109375 +v 0.390625 -0.433594 0.109375 +v 0.390625 -0.457031 0.156250 +v 0.367188 -0.433594 0.156250 +v 0.367188 -0.433594 0.109375 +v 0.390625 -0.433594 0.156250 +v 0.367188 -0.457031 0.156250 +v 0.367188 -0.457031 0.109375 +v 0.019344 -0.398750 0.167969 +v 0.019344 0.211250 0.167969 +v 0.019953 -0.398750 0.164907 +v 0.019953 0.211250 0.164907 +v 0.021687 -0.398750 0.162312 +v 0.021687 0.211250 0.162312 +v 0.024282 -0.398750 0.160578 +v 0.024282 0.211250 0.160578 +v 0.027344 -0.398750 0.159969 +v 0.027344 0.211250 0.159969 +v 0.030405 -0.398750 0.160578 +v 0.030405 0.211250 0.160578 +v 0.033001 -0.398750 0.162312 +v 0.033001 0.211250 0.162312 +v 0.034735 -0.398750 0.164907 +v 0.034735 0.211250 0.164907 +v 0.035344 -0.398750 0.167969 +v 0.035344 0.211250 0.167969 +v 0.034735 -0.398750 0.171030 +v 0.034735 0.211250 0.171030 +v 0.033001 -0.398750 0.173626 +v 0.033001 0.211250 0.173626 +v 0.030405 -0.398750 0.175360 +v 0.030405 0.211250 0.175360 +v 0.027344 -0.398750 0.175969 +v 0.027344 0.211250 0.175969 +v 0.024282 -0.398750 0.175360 +v 0.024282 0.211250 0.175360 +v 0.021687 -0.398750 0.173626 +v 0.021687 0.211250 0.173626 +v 0.019953 -0.398750 0.171030 +v 0.019953 0.211250 0.171030 +v 0.019344 -0.246250 0.167969 +v 0.019344 -0.093750 0.167969 +v 0.019344 0.058750 0.167969 +v 0.019953 0.058750 0.164907 +v 0.019953 -0.093750 0.164907 +v 0.019953 -0.246250 0.164907 +v 0.021687 0.058750 0.162312 +v 0.021687 -0.093750 0.162312 +v 0.021687 -0.246250 0.162312 +v 0.024282 0.058750 0.160578 +v 0.024282 -0.093750 0.160578 +v 0.024282 -0.246250 0.160578 +v 0.027344 0.058750 0.159969 +v 0.027344 -0.093750 0.159969 +v 0.027344 -0.246250 0.159969 +v 0.030405 0.058750 0.160578 +v 0.030405 -0.093750 0.160578 +v 0.030405 -0.246250 0.160578 +v 0.033001 0.058750 0.162312 +v 0.033001 -0.093750 0.162312 +v 0.033001 -0.246250 0.162312 +v 0.034735 0.058750 0.164907 +v 0.034735 -0.093750 0.164907 +v 0.034735 -0.246250 0.164907 +v 0.035344 0.058750 0.167969 +v 0.035344 -0.093750 0.167969 +v 0.035344 -0.246250 0.167969 +v 0.034735 0.058750 0.171030 +v 0.034735 -0.093750 0.171030 +v 0.034735 -0.246250 0.171030 +v 0.033001 0.058750 0.173626 +v 0.033001 -0.093750 0.173626 +v 0.033001 -0.246250 0.173626 +v 0.030405 0.058750 0.175360 +v 0.030405 -0.093750 0.175360 +v 0.030405 -0.246250 0.175360 +v 0.027344 0.058750 0.175969 +v 0.027344 -0.093750 0.175969 +v 0.027344 -0.246250 0.175969 +v 0.024282 0.058750 0.175360 +v 0.024282 -0.093750 0.175360 +v 0.024282 -0.246250 0.175360 +v 0.021687 0.058750 0.173626 +v 0.021687 -0.093750 0.173626 +v 0.021687 -0.246250 0.173626 +v 0.019953 0.058750 0.171030 +v 0.019953 -0.093750 0.171030 +v 0.019953 -0.246250 0.171030 +v 0.019344 -0.398750 0.097656 +v 0.019344 0.211250 0.097656 +v 0.019953 -0.398750 0.094595 +v 0.019953 0.211250 0.094595 +v 0.021687 -0.398750 0.091999 +v 0.021687 0.211250 0.091999 +v 0.024282 -0.398750 0.090265 +v 0.024282 0.211250 0.090265 +v 0.027344 -0.398750 0.089656 +v 0.027344 0.211250 0.089656 +v 0.030405 -0.398750 0.090265 +v 0.030405 0.211250 0.090265 +v 0.033001 -0.398750 0.091999 +v 0.033001 0.211250 0.091999 +v 0.034735 -0.398750 0.094595 +v 0.034735 0.211250 0.094595 +v 0.035344 -0.398750 0.097656 +v 0.035344 0.211250 0.097656 +v 0.034735 -0.398750 0.100718 +v 0.034735 0.211250 0.100718 +v 0.033001 -0.398750 0.103313 +v 0.033001 0.211250 0.103313 +v 0.030405 -0.398750 0.105047 +v 0.030405 0.211250 0.105047 +v 0.027344 -0.398750 0.105656 +v 0.027344 0.211250 0.105656 +v 0.024282 -0.398750 0.105047 +v 0.024282 0.211250 0.105047 +v 0.021687 -0.398750 0.103313 +v 0.021687 0.211250 0.103313 +v 0.019953 -0.398750 0.100718 +v 0.019953 0.211250 0.100718 +v 0.019344 -0.246250 0.097656 +v 0.019344 -0.093750 0.097656 +v 0.019344 0.058750 0.097656 +v 0.019953 0.058750 0.094595 +v 0.019953 -0.093750 0.094595 +v 0.019953 -0.246250 0.094595 +v 0.021687 0.058750 0.091999 +v 0.021687 -0.093750 0.091999 +v 0.021687 -0.246250 0.091999 +v 0.024282 0.058750 0.090265 +v 0.024282 -0.093750 0.090265 +v 0.024282 -0.246250 0.090265 +v 0.027344 0.058750 0.089656 +v 0.027344 -0.093750 0.089656 +v 0.027344 -0.246250 0.089656 +v 0.030405 0.058750 0.090265 +v 0.030405 -0.093750 0.090265 +v 0.030405 -0.246250 0.090265 +v 0.033001 0.058750 0.091999 +v 0.033001 -0.093750 0.091999 +v 0.033001 -0.246250 0.091999 +v 0.034735 0.058750 0.094595 +v 0.034735 -0.093750 0.094595 +v 0.034735 -0.246250 0.094595 +v 0.035344 0.058750 0.097656 +v 0.035344 -0.093750 0.097656 +v 0.035344 -0.246250 0.097656 +v 0.034735 0.058750 0.100718 +v 0.034735 -0.093750 0.100718 +v 0.034735 -0.246250 0.100718 +v 0.033001 0.058750 0.103313 +v 0.033001 -0.093750 0.103313 +v 0.033001 -0.246250 0.103313 +v 0.030405 0.058750 0.105047 +v 0.030405 -0.093750 0.105047 +v 0.030405 -0.246250 0.105047 +v 0.027344 0.058750 0.105656 +v 0.027344 -0.093750 0.105656 +v 0.027344 -0.246250 0.105656 +v 0.024282 0.058750 0.105047 +v 0.024282 -0.093750 0.105047 +v 0.024282 -0.246250 0.105047 +v 0.021687 0.058750 0.103313 +v 0.021687 -0.093750 0.103313 +v 0.021687 -0.246250 0.103313 +v 0.019953 0.058750 0.100718 +v 0.019953 -0.093750 0.100718 +v 0.019953 -0.246250 0.100718 +v 0.397621 -0.411286 0.128568 +v 0.342621 -0.411286 0.073568 +v 0.342621 -0.411286 0.128568 +v 0.397621 -0.356287 0.128568 +v 0.342621 -0.356287 0.073568 +v 0.342621 -0.356287 0.128568 +v 0.366996 -0.383787 0.128568 +v 0.366996 -0.383787 0.153568 +v 0.367912 -0.381577 0.128568 +v 0.367912 -0.381577 0.153568 +v 0.370121 -0.380662 0.128568 +v 0.370121 -0.380662 0.153568 +v 0.372331 -0.381577 0.128568 +v 0.372331 -0.381577 0.153568 +v 0.373246 -0.383787 0.128568 +v 0.373246 -0.383787 0.153568 +v 0.372331 -0.385996 0.128568 +v 0.372331 -0.385996 0.153568 +v 0.370121 -0.386912 0.128568 +v 0.370121 -0.386912 0.153568 +v 0.367911 -0.385996 0.128568 +v 0.367911 -0.385996 0.153568 +v 0.397621 -0.411286 0.122318 +v 0.342621 -0.411286 0.079818 +v 0.342621 -0.356287 0.079818 +v 0.397621 -0.356287 0.079818 +v 0.342621 -0.411286 0.122318 +v 0.342621 -0.356287 0.122318 +v 0.397621 -0.356287 0.122318 +v 0.397621 -0.411286 0.073568 +v 0.397621 -0.356287 0.073568 +v 0.397621 -0.411286 0.079818 +v 0.028594 -0.371807 0.144647 +v 0.028594 -0.374307 0.144647 +v 0.028594 -0.371807 0.152144 +v 0.028594 -0.374307 0.152144 +v 0.370121 -0.371812 0.144644 +v 0.370121 -0.374312 0.144644 +v 0.370121 -0.371812 0.152144 +v 0.370121 -0.374312 0.152144 +v -0.264786 -0.393291 0.144647 +v -0.264786 -0.395791 0.144647 +v -0.264786 -0.393291 0.152144 +v -0.264786 -0.395791 0.152144 +v 0.370121 -0.393296 0.144644 +v 0.370121 -0.395796 0.144644 +v 0.370121 -0.393296 0.152144 +v 0.370121 -0.395796 0.152144 +v 0.026089 -0.371807 0.144690 +v 0.028589 -0.371807 0.144690 +v 0.026089 -0.371807 0.152187 +v 0.028589 -0.371807 0.152187 +v 0.026094 -0.132812 0.144688 +v 0.028594 -0.132812 0.144688 +v 0.026094 -0.132812 0.152188 +v 0.028594 -0.132812 0.152188 +v 0.026099 0.218754 0.152144 +v 0.026099 0.216254 0.152144 +v 0.026099 0.218754 0.144647 +v 0.026099 0.216254 0.144647 +v -0.264781 0.218749 0.152147 +v -0.264781 0.216249 0.152147 +v -0.264781 0.218749 0.144647 +v -0.264781 0.216249 0.144647 +v -0.267286 -0.393291 0.144647 +v -0.264786 -0.393291 0.144647 +v -0.267286 -0.393291 0.152144 +v -0.264786 -0.393291 0.152144 +v -0.267281 0.216249 0.144644 +v -0.264781 0.216249 0.144644 +v -0.267281 0.216249 0.152144 +v -0.264781 0.216249 0.152144 +v 0.028599 0.216254 0.144690 +v 0.026099 0.216254 0.144690 +v 0.028599 0.216254 0.152187 +v 0.026099 0.216254 0.152187 +v 0.028594 -0.054688 0.144688 +v 0.026094 -0.054688 0.144688 +v 0.028594 -0.054688 0.152188 +v 0.026094 -0.054688 0.152188 +v 0.047344 0.178788 0.187969 +v 0.047344 0.178788 0.077656 +v 0.007344 0.178788 0.187969 +v 0.007344 0.178788 0.077656 +v 0.007344 0.228300 0.077656 +v 0.047344 0.228300 0.077656 +v 0.007344 0.228300 0.187969 +v 0.047344 0.228300 0.187969 +v 0.007344 0.277812 0.105234 +v 0.047344 0.277812 0.105234 +v 0.047344 0.228300 0.160391 +v 0.047344 0.277812 0.160391 +v 0.047344 0.228300 0.105234 +v 0.007344 0.277812 0.160391 +v 0.007344 0.228300 0.160391 +v 0.007344 0.228300 0.105234 +v -0.249159 0.200627 0.098490 +v -0.249159 0.200627 0.166507 +v -0.282908 0.200627 0.098490 +v -0.282908 0.200627 0.166507 +v -0.249159 0.234376 0.098490 +v -0.249159 0.234376 0.166507 +v -0.282908 0.234376 0.098490 +v -0.282908 0.234376 0.166507 +v -0.282091 -0.388127 0.098490 +v -0.282091 -0.388127 0.166507 +v -0.248342 -0.388127 0.098490 +v -0.248342 -0.388127 0.166507 +v -0.282091 -0.421876 0.098490 +v -0.282091 -0.421876 0.166507 +v -0.248342 -0.421876 0.098490 +v -0.248342 -0.421876 0.166507 +v 0.335554 0.174113 0.108148 +v 0.434936 0.273494 0.043962 +v 0.434936 0.273494 0.108148 +v 0.335554 0.174113 0.097450 +v 0.434936 0.223804 0.108148 +v 0.380245 0.273494 0.108148 +v 0.380245 0.273494 0.043962 +v 0.410090 0.174113 0.108148 +v 0.397668 0.174113 0.097450 +v 0.335554 0.236226 0.043962 +v 0.335554 0.236226 0.108148 +v 0.380245 0.236226 0.108148 +v 0.380245 0.236226 0.043962 +v 0.434936 0.223804 0.043962 +v 0.397668 0.223804 0.043962 +v 0.410090 0.223804 0.043962 +v 0.397667 0.223804 0.097450 +v 0.397668 0.174113 0.043962 +v 0.410090 0.174113 0.043962 +v 0.410090 0.223804 0.108148 +v 0.335554 0.223804 0.097450 +v 0.335554 0.223804 0.043962 +v 0.028594 0.184307 0.120978 +v 0.028594 0.186807 0.120978 +v 0.028594 0.184307 0.113481 +v 0.028594 0.186807 0.113481 +v 0.370121 0.184312 0.120981 +v 0.370121 0.186812 0.120981 +v 0.370121 0.184312 0.113481 +v 0.370121 0.186812 0.113481 +v -0.264786 0.205791 0.120978 +v -0.264786 0.208291 0.120978 +v -0.264786 0.205791 0.113481 +v -0.264786 0.208291 0.113481 +v 0.370121 0.205796 0.120981 +v 0.370121 0.208296 0.120981 +v 0.370121 0.205796 0.113481 +v 0.370121 0.208296 0.113481 +v 0.026089 0.184307 0.120935 +v 0.028589 0.184307 0.120935 +v 0.026089 0.184307 0.113438 +v 0.028589 0.184307 0.113438 +v 0.026094 -0.054688 0.120937 +v 0.028594 -0.054688 0.120937 +v 0.026094 -0.054688 0.113438 +v 0.028594 -0.054688 0.113438 +v 0.026099 -0.406254 0.113481 +v 0.026099 -0.403754 0.113481 +v 0.026099 -0.406254 0.120978 +v 0.026099 -0.403754 0.120978 +v -0.264781 -0.406249 0.113478 +v -0.264781 -0.403749 0.113478 +v -0.264781 -0.406249 0.120978 +v -0.264781 -0.403749 0.120978 +v -0.267286 0.205791 0.120978 +v -0.264786 0.205791 0.120978 +v -0.267286 0.205791 0.113481 +v -0.264786 0.205791 0.113481 +v -0.267281 -0.403749 0.120981 +v -0.264781 -0.403749 0.120981 +v -0.267281 -0.403749 0.113481 +v -0.264781 -0.403749 0.113481 +v 0.028599 -0.403754 0.120935 +v 0.026099 -0.403754 0.120935 +v 0.028599 -0.403754 0.113438 +v 0.026099 -0.403754 0.113438 +v 0.028594 -0.132813 0.120937 +v 0.026094 -0.132813 0.120937 +v 0.028594 -0.132813 0.113438 +v 0.026094 -0.132813 0.113438 +v 0.335554 -0.361643 0.139398 +v 0.434936 -0.461024 0.075212 +v 0.434936 -0.461024 0.139398 +v 0.335554 -0.361643 0.128700 +v 0.434936 -0.411333 0.139398 +v 0.380245 -0.461024 0.139398 +v 0.380245 -0.461024 0.075212 +v 0.410090 -0.361643 0.139398 +v 0.397668 -0.361643 0.128700 +v 0.335554 -0.423756 0.075212 +v 0.335554 -0.423756 0.139398 +v 0.380245 -0.423756 0.139398 +v 0.380245 -0.423756 0.075212 +v 0.434936 -0.411333 0.075212 +v 0.397668 -0.411333 0.075212 +v 0.410090 -0.411333 0.075212 +v 0.397668 -0.411333 0.128700 +v 0.397668 -0.361643 0.075212 +v 0.410090 -0.361643 0.075212 +v 0.410090 -0.411333 0.139398 +v 0.335554 -0.411333 0.128700 +v 0.335554 -0.411333 0.075212 +v 0.397621 0.168792 0.097318 +v 0.342621 0.168792 0.042318 +v 0.342621 0.168792 0.097318 +v 0.397621 0.223792 0.097318 +v 0.342621 0.223792 0.042318 +v 0.342622 0.223792 0.097318 +v 0.366996 0.196292 0.097318 +v 0.366996 0.196292 0.122318 +v 0.367912 0.198501 0.097318 +v 0.367912 0.198501 0.122318 +v 0.370121 0.199417 0.097318 +v 0.370121 0.199417 0.122318 +v 0.372331 0.198501 0.097318 +v 0.372331 0.198501 0.122318 +v 0.373246 0.196292 0.097318 +v 0.373246 0.196292 0.122318 +v 0.372331 0.194082 0.097318 +v 0.372331 0.194082 0.122318 +v 0.370121 0.193167 0.097318 +v 0.370121 0.193167 0.122318 +v 0.367911 0.194082 0.097318 +v 0.367912 0.194082 0.122318 +v 0.397621 0.168792 0.091068 +v 0.342621 0.168792 0.048568 +v 0.342621 0.223792 0.048568 +v 0.397621 0.223792 0.048568 +v 0.342621 0.168792 0.091068 +v 0.342622 0.223792 0.091068 +v 0.397621 0.223792 0.091068 +v 0.397621 0.168792 0.042318 +v 0.397621 0.223792 0.042318 +v 0.397621 0.168792 0.048568 +v 0.389152 -0.224728 -0.410615 +v 0.024146 -0.224728 -0.410615 +v 0.389152 -0.421868 -0.410615 +v 0.024146 -0.421868 -0.410615 +v 0.389151 -0.224728 -0.486289 +v 0.024145 -0.224728 -0.486289 +v 0.389151 -0.421868 -0.486289 +v 0.024145 -0.421868 -0.486289 +v -0.190463 0.263161 -0.405834 +v -0.190463 0.263161 -0.314726 +v -0.265006 0.263161 -0.405834 +v -0.265006 0.263161 -0.314726 +v -0.190463 0.280753 -0.405833 +v -0.190463 0.280753 -0.314726 +v -0.265006 0.280753 -0.405833 +v -0.265006 0.280753 -0.314726 +v -0.265006 0.245570 -0.314726 +v -0.265006 0.245570 -0.405834 +v -0.190463 0.245570 -0.314726 +v -0.190463 0.245570 -0.405834 +v -0.115921 0.263161 -0.405834 +v -0.115921 0.263161 -0.314726 +v -0.190463 0.263161 -0.405834 +v -0.190463 0.263161 -0.314726 +v -0.115921 0.280753 -0.405833 +v -0.115921 0.280753 -0.314726 +v -0.190463 0.280753 -0.405833 +v -0.190463 0.280753 -0.314726 +v -0.190463 0.245570 -0.314726 +v -0.190463 0.245570 -0.405833 +v -0.115921 0.245570 -0.314726 +v -0.115921 0.245570 -0.405834 +v -0.359375 0.156250 0.250000 +v -0.359375 0.484375 0.250000 +v -0.359375 0.484375 0.203125 +v -0.312500 0.156250 0.250000 +v -0.312500 0.484375 0.250000 +v -0.312500 0.484375 0.203125 +v -0.359375 0.156250 0.203125 +v -0.312500 0.156250 0.203125 +v 0.007344 -0.046875 0.187969 +v 0.007344 -0.046875 0.077656 +v 0.007344 -0.140625 0.187969 +v 0.047344 -0.046875 0.187969 +v 0.047344 -0.140625 0.187969 +v 0.007344 -0.140625 0.077656 +v 0.047344 -0.046875 0.077656 +v 0.047344 -0.140625 0.077656 +v 0.046067 -0.104156 0.166809 +v 0.046067 -0.104156 0.078313 +v 0.051235 -0.109324 0.166809 +v 0.051235 -0.109324 0.078313 +v 0.057987 -0.112121 0.166809 +v 0.057987 -0.112121 0.078313 +v 0.065295 -0.112121 0.166809 +v 0.065295 -0.112121 0.078313 +v 0.072047 -0.109324 0.166809 +v 0.072047 -0.109324 0.078313 +v 0.077214 -0.104156 0.166809 +v 0.077214 -0.104156 0.078313 +v 0.080011 -0.097404 0.166809 +v 0.080011 -0.097404 0.078313 +v 0.080011 -0.090096 0.166809 +v 0.080011 -0.090096 0.078313 +v 0.077214 -0.083344 0.166809 +v 0.077214 -0.083344 0.078313 +v 0.072047 -0.078176 0.166809 +v 0.072047 -0.078176 0.078313 +v 0.065295 -0.075380 0.166809 +v 0.065295 -0.075380 0.078313 +v 0.057987 -0.075380 0.166809 +v 0.057987 -0.075380 0.078313 +v 0.051235 -0.078176 0.166809 +v 0.051235 -0.078176 0.078313 +v 0.046067 -0.083344 0.166809 +v 0.046067 -0.083344 0.078313 +v 0.043270 -0.090096 0.166809 +v 0.043270 -0.097404 0.166809 +v 0.078151 -0.110261 0.059380 +v 0.045130 -0.110261 0.059380 +v 0.045130 -0.077239 0.059380 +v 0.078151 -0.077239 0.059380 +v 0.052891 -0.093750 0.059461 +v 0.053557 -0.090401 0.059461 +v 0.055454 -0.087563 0.059461 +v 0.058292 -0.085666 0.059461 +v 0.061641 -0.085000 0.059461 +v 0.064989 -0.085666 0.059461 +v 0.067828 -0.087563 0.059461 +v 0.069725 -0.090401 0.059461 +v 0.070391 -0.093750 0.059461 +v 0.069725 -0.097098 0.059461 +v 0.067828 -0.099937 0.059461 +v 0.064989 -0.101834 0.059461 +v 0.061641 -0.102500 0.059461 +v 0.058292 -0.101834 0.059461 +v 0.055454 -0.099937 0.059461 +v 0.061641 -0.093750 0.051961 +v 0.053557 -0.097098 0.059461 +v 0.045130 -0.110261 0.078313 +v 0.078151 -0.077239 0.078313 +v 0.078151 -0.110261 0.078313 +v 0.045130 -0.077239 0.078313 +v 0.046875 -0.133542 0.135070 +v 0.046875 -0.053958 0.158508 +v 0.046875 -0.053958 0.135070 +v 0.046875 -0.133542 0.158508 +v 0.062500 -0.053958 0.158508 +v 0.086409 -0.121730 0.158508 +v 0.062500 -0.121730 0.135070 +v 0.062500 -0.053958 0.135070 +v 0.086409 -0.065770 0.135070 +v 0.062500 -0.133542 0.135070 +v 0.062500 -0.133542 0.158508 +v 0.062500 -0.065770 0.135070 +v 0.062500 -0.065771 0.158508 +v 0.062500 -0.121730 0.158508 +v 0.086409 -0.065771 0.158508 +v 0.086409 -0.121730 0.135070 +v -0.265625 -0.375000 0.203125 +v -0.265625 -0.304688 0.250000 +v -0.265625 -0.304688 0.203125 +v -0.265625 -0.375000 0.250000 +v -0.250000 -0.304688 0.250000 +v -0.238281 -0.359375 0.250000 +v -0.250000 -0.359375 0.203125 +v -0.250000 -0.304688 0.203125 +v -0.238281 -0.320312 0.203125 +v -0.250000 -0.375000 0.203125 +v -0.250000 -0.375000 0.250000 +v -0.250000 -0.320312 0.203125 +v -0.250000 -0.320312 0.250000 +v -0.250000 -0.359375 0.250000 +v -0.238281 -0.320312 0.250000 +v -0.238281 -0.359375 0.203125 +v 0.370121 -0.371897 0.140730 +v 0.370121 -0.371897 0.159480 +v 0.374678 -0.372803 0.140730 +v 0.374678 -0.372803 0.159480 +v 0.378541 -0.375384 0.140730 +v 0.378541 -0.375384 0.159480 +v 0.381122 -0.379247 0.140730 +v 0.381122 -0.379247 0.159480 +v 0.382029 -0.383804 0.140730 +v 0.382029 -0.383804 0.159480 +v 0.381122 -0.388361 0.140730 +v 0.381122 -0.388361 0.159480 +v 0.378541 -0.392224 0.140730 +v 0.378541 -0.392224 0.159480 +v 0.374678 -0.394805 0.140730 +v 0.374678 -0.394805 0.159480 +v 0.370121 -0.395711 0.140730 +v 0.370121 -0.395711 0.159480 +v 0.365565 -0.394805 0.140730 +v 0.365565 -0.394805 0.159480 +v 0.361702 -0.392224 0.140730 +v 0.361702 -0.392224 0.159480 +v 0.359121 -0.388361 0.140730 +v 0.359121 -0.388361 0.159480 +v 0.358214 -0.383804 0.140730 +v 0.358214 -0.383804 0.159480 +v 0.359121 -0.379247 0.140730 +v 0.359121 -0.379247 0.159480 +v 0.361702 -0.375384 0.140730 +v 0.361702 -0.375384 0.159480 +v 0.365565 -0.372803 0.140730 +v 0.365565 -0.372803 0.159480 +v 0.370121 -0.371897 0.143409 +v 0.370121 -0.373672 0.143686 +v 0.370121 -0.373672 0.153846 +v 0.370121 -0.371897 0.154123 +v 0.374678 -0.372803 0.154123 +v 0.373999 -0.374443 0.153846 +v 0.373999 -0.374443 0.143686 +v 0.374678 -0.372803 0.143409 +v 0.378541 -0.375384 0.154123 +v 0.377286 -0.376639 0.153846 +v 0.377286 -0.376639 0.143686 +v 0.378541 -0.375384 0.143409 +v 0.381122 -0.379247 0.154123 +v 0.379482 -0.379927 0.153846 +v 0.379482 -0.379927 0.143686 +v 0.381122 -0.379247 0.143409 +v 0.382029 -0.383804 0.154123 +v 0.380254 -0.383804 0.153846 +v 0.380254 -0.383804 0.143686 +v 0.382029 -0.383804 0.143409 +v 0.381122 -0.388361 0.154123 +v 0.379482 -0.387681 0.153846 +v 0.379482 -0.387681 0.143686 +v 0.381122 -0.388361 0.143409 +v 0.378541 -0.392224 0.154123 +v 0.377286 -0.390969 0.153846 +v 0.377286 -0.390969 0.143686 +v 0.378541 -0.392224 0.143409 +v 0.374678 -0.394805 0.154123 +v 0.373999 -0.393165 0.153846 +v 0.373999 -0.393165 0.143686 +v 0.374678 -0.394805 0.143409 +v 0.370121 -0.395711 0.154123 +v 0.370121 -0.393936 0.153846 +v 0.370121 -0.393936 0.143686 +v 0.370121 -0.395711 0.143409 +v 0.365565 -0.394805 0.154123 +v 0.366244 -0.393165 0.153846 +v 0.366244 -0.393165 0.143686 +v 0.365565 -0.394805 0.143409 +v 0.361702 -0.392224 0.154123 +v 0.362957 -0.390969 0.153846 +v 0.362957 -0.390969 0.143686 +v 0.361702 -0.392224 0.143409 +v 0.359121 -0.388361 0.154123 +v 0.360760 -0.387681 0.153846 +v 0.360760 -0.387681 0.143686 +v 0.359121 -0.388361 0.143409 +v 0.358214 -0.383804 0.154123 +v 0.359989 -0.383804 0.153846 +v 0.359989 -0.383804 0.143686 +v 0.358214 -0.383804 0.143409 +v 0.359121 -0.379247 0.154123 +v 0.360760 -0.379926 0.153846 +v 0.360760 -0.379926 0.143686 +v 0.359121 -0.379247 0.143409 +v 0.361702 -0.375384 0.154123 +v 0.362957 -0.376639 0.153846 +v 0.362957 -0.376639 0.143686 +v 0.361702 -0.375384 0.143409 +v 0.365565 -0.372803 0.154123 +v 0.366244 -0.374443 0.153846 +v 0.366244 -0.374443 0.143686 +v 0.365565 -0.372803 0.143409 +v 0.370121 0.208181 0.109480 +v 0.370121 0.208181 0.128230 +v 0.374678 0.207275 0.109480 +v 0.374678 0.207275 0.128230 +v 0.378541 0.204694 0.109480 +v 0.378541 0.204694 0.128230 +v 0.381122 0.200831 0.109480 +v 0.381122 0.200831 0.128230 +v 0.382029 0.196274 0.109480 +v 0.382029 0.196274 0.128230 +v 0.381122 0.191717 0.109480 +v 0.381122 0.191717 0.128230 +v 0.378541 0.187854 0.109480 +v 0.378541 0.187854 0.128230 +v 0.374678 0.185273 0.109480 +v 0.374678 0.185273 0.128230 +v 0.370121 0.184367 0.109480 +v 0.370121 0.184367 0.128230 +v 0.365565 0.185273 0.109480 +v 0.365565 0.185273 0.128230 +v 0.361702 0.187855 0.109480 +v 0.361702 0.187855 0.128230 +v 0.359120 0.191718 0.109480 +v 0.359121 0.191718 0.128230 +v 0.358214 0.196274 0.109480 +v 0.358214 0.196274 0.128230 +v 0.359120 0.200831 0.109480 +v 0.359121 0.200831 0.128230 +v 0.361702 0.204694 0.109480 +v 0.361702 0.204694 0.128230 +v 0.365565 0.207275 0.109480 +v 0.365565 0.207275 0.128230 +v 0.370121 0.208181 0.112159 +v 0.370121 0.206406 0.112436 +v 0.370121 0.206406 0.122596 +v 0.370121 0.208181 0.122873 +v 0.374678 0.207275 0.122873 +v 0.373999 0.205635 0.122596 +v 0.373999 0.205635 0.112436 +v 0.374678 0.207275 0.112159 +v 0.378541 0.204694 0.122873 +v 0.377286 0.203439 0.122596 +v 0.377286 0.203439 0.112436 +v 0.378541 0.204694 0.112159 +v 0.381122 0.200831 0.122873 +v 0.379482 0.200152 0.122596 +v 0.379482 0.200152 0.112436 +v 0.381122 0.200831 0.112159 +v 0.382029 0.196274 0.122873 +v 0.380254 0.196274 0.122596 +v 0.380254 0.196274 0.112436 +v 0.382029 0.196274 0.112159 +v 0.381122 0.191717 0.122873 +v 0.379482 0.192397 0.122596 +v 0.379482 0.192397 0.112436 +v 0.381122 0.191717 0.112159 +v 0.378541 0.187854 0.122873 +v 0.377286 0.189110 0.122596 +v 0.377286 0.189110 0.112436 +v 0.378541 0.187854 0.112159 +v 0.374678 0.185273 0.122873 +v 0.373999 0.186913 0.122596 +v 0.373999 0.186913 0.112436 +v 0.374678 0.185273 0.112159 +v 0.370121 0.184367 0.122873 +v 0.370121 0.186142 0.122596 +v 0.370121 0.186142 0.112436 +v 0.370121 0.184367 0.112159 +v 0.365565 0.185273 0.122873 +v 0.366244 0.186913 0.122596 +v 0.366244 0.186913 0.112436 +v 0.365565 0.185273 0.112159 +v 0.361702 0.187855 0.122873 +v 0.362957 0.189110 0.122596 +v 0.362957 0.189110 0.112436 +v 0.361702 0.187855 0.112159 +v 0.359121 0.191718 0.122873 +v 0.360760 0.192397 0.122596 +v 0.360760 0.192397 0.112436 +v 0.359121 0.191718 0.112159 +v 0.358214 0.196274 0.122873 +v 0.359989 0.196274 0.122596 +v 0.359989 0.196274 0.112436 +v 0.358214 0.196274 0.112159 +v 0.359121 0.200831 0.122873 +v 0.360760 0.200152 0.122596 +v 0.360760 0.200152 0.112436 +v 0.359121 0.200831 0.112159 +v 0.361702 0.204694 0.122873 +v 0.362957 0.203439 0.122596 +v 0.362957 0.203439 0.112436 +v 0.361702 0.204694 0.112159 +v 0.365565 0.207275 0.122873 +v 0.366244 0.205635 0.122596 +v 0.366244 0.205635 0.112436 +v 0.365565 0.207275 0.112159 +v -0.179687 -0.281250 -0.359375 +v -0.179687 0.093750 -0.359375 +v -0.179687 -0.281250 -0.312500 +v -0.179687 0.093750 -0.312500 +v -0.132812 -0.281250 -0.312500 +v -0.132812 0.093750 -0.312500 +v -0.132812 0.093750 -0.359375 +v -0.132812 -0.281250 -0.359375 +v -0.179687 -0.058594 -0.347656 +v -0.179687 -0.128906 -0.324219 +v -0.179687 -0.128906 -0.347656 +v -0.179687 -0.058594 -0.324219 +v -0.195312 -0.128906 -0.324219 +v -0.234375 -0.074219 -0.324219 +v -0.195312 -0.074219 -0.347656 +v -0.195312 -0.128906 -0.347656 +v -0.234375 -0.113281 -0.347656 +v -0.195312 -0.058594 -0.347656 +v -0.195312 -0.058594 -0.324219 +v -0.195312 -0.113281 -0.347656 +v -0.195312 -0.113281 -0.324219 +v -0.195312 -0.074219 -0.324219 +v -0.234375 -0.113281 -0.324219 +v -0.234375 -0.074219 -0.347656 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.969049 0.945303 +vt 0.971210 0.940086 +vt 0.976427 0.937925 +vt 0.981644 0.940086 +vt 0.983805 0.945303 +vt 0.981644 0.950520 +vt 0.976427 0.952681 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.971210 0.950520 +vt 0.976427 0.952681 +vt 0.981644 0.950520 +vt 0.983805 0.945303 +vt 0.981644 0.940086 +vt 0.976427 0.937925 +vt 0.971210 0.940086 +vt 0.969049 0.945303 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.500000 0.406250 +vt 0.515625 0.406250 +vt 0.515625 0.421875 +vt 0.500000 0.421875 +vt 0.375000 0.265625 +vt 0.359375 0.265625 +vt 0.359375 0.250000 +vt 0.375000 0.250000 +vt 0.921875 0.484375 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.484375 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.484375 +vt 0.921875 0.484375 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.484375 +vt 0.921875 0.484375 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.484375 +vt 0.921875 0.484375 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.359375 0.328125 +vt 0.359375 0.316406 +vt 0.328125 0.316406 +vt 0.328125 0.328125 +vt 0.359375 0.292969 +vt 0.359375 0.281250 +vt 0.328125 0.281250 +vt 0.328125 0.292969 +vt 0.390625 0.328125 +vt 0.421875 0.328125 +vt 0.421875 0.281250 +vt 0.390625 0.281250 +vt 0.359375 0.316406 +vt 0.375000 0.316406 +vt 0.375000 0.328125 +vt 0.375000 0.281250 +vt 0.375000 0.292969 +vt 0.359375 0.292969 +vt 0.312500 0.359375 +vt 0.312500 0.328125 +vt 0.296875 0.328125 +vt 0.296875 0.359375 +vt 0.312500 0.250000 +vt 0.312500 0.281250 +vt 0.328125 0.281250 +vt 0.328125 0.250000 +vt 0.312500 0.328125 +vt 0.312500 0.359375 +vt 0.328125 0.359375 +vt 0.328125 0.328125 +vt 0.312500 0.250000 +vt 0.296875 0.250000 +vt 0.296875 0.281250 +vt 0.312500 0.281250 +vt 0.328125 0.316406 +vt 0.328125 0.292969 +vt 0.312500 0.292969 +vt 0.312500 0.316406 +vt 0.359375 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.265625 +vt 0.359375 0.265625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.359375 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.359375 0.250000 +vt 0.046875 0.203125 +vt 0.234375 0.203125 +vt 0.234375 0.390625 +vt 0.046875 0.390625 +vt 0.328125 0.953125 +vt 0.312500 0.953125 +vt 0.312500 0.765625 +vt 0.328125 0.765625 +vt 0.515625 0.953125 +vt 0.515625 0.968750 +vt 0.328125 0.968750 +vt 0.515625 0.765625 +vt 0.531250 0.765625 +vt 0.531250 0.953125 +vt 0.328125 0.750000 +vt 0.515625 0.750000 +vt 0.812500 0.984375 +vt 0.593750 0.984375 +vt 0.593750 0.968750 +vt 0.812500 0.968750 +vt 0.578125 0.968750 +vt 0.578125 0.750000 +vt 0.593750 0.750000 +vt 0.812500 0.750000 +vt 0.593750 0.734375 +vt 0.812500 0.734375 +vt 0.828125 0.968750 +vt 0.828125 0.750000 +vt 0.500000 0.390625 +vt 0.500000 0.406250 +vt 0.484375 0.406250 +vt 0.484375 0.390625 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.484375 0.375000 +vt 0.468750 0.406250 +vt 0.484375 0.421875 +vt 0.468750 0.421875 +vt 0.484375 0.406250 +vt 0.468750 0.390625 +vt 0.453125 0.406250 +vt 0.453125 0.390625 +vt 0.468750 0.406250 +vt 0.453125 0.171875 +vt 0.406250 0.171875 +vt 0.406250 0.187500 +vt 0.453125 0.187500 +vt 0.375000 0.234375 +vt 0.406250 0.234375 +vt 0.406250 0.218750 +vt 0.390625 0.218750 +vt 0.390625 0.203125 +vt 0.375000 0.203125 +vt 0.328125 0.203125 +vt 0.312500 0.203125 +vt 0.312500 0.218750 +vt 0.328125 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.234375 +vt 0.328125 0.234375 +vt 0.328125 0.218750 +vt 0.312500 0.218750 +vt 0.296875 0.218750 +vt 0.296875 0.234375 +vt 0.343750 0.218750 +vt 0.343750 0.234375 +vt 0.421875 0.203125 +vt 0.421875 0.234375 +vt 0.453125 0.234375 +vt 0.453125 0.203125 +vt 0.468750 0.234375 +vt 0.468750 0.218750 +vt 0.453125 0.218750 +vt 0.453125 0.234375 +vt 0.375000 0.187500 +vt 0.375000 0.171875 +vt 0.390625 0.171875 +vt 0.390625 0.187500 +vt 0.343750 0.187500 +vt 0.343750 0.171875 +vt 0.359375 0.171875 +vt 0.359375 0.187500 +vt 0.312500 0.171875 +vt 0.328125 0.171875 +vt 0.328125 0.187500 +vt 0.312500 0.187500 +vt 0.328125 0.187500 +vt 0.328125 0.171875 +vt 0.453125 0.171875 +vt 0.453125 0.187500 +vt 0.406250 0.187500 +vt 0.406250 0.171875 +vt 0.375000 0.234375 +vt 0.375000 0.203125 +vt 0.390625 0.203125 +vt 0.390625 0.218750 +vt 0.406250 0.218750 +vt 0.406250 0.234375 +vt 0.328125 0.203125 +vt 0.328125 0.218750 +vt 0.312500 0.218750 +vt 0.312500 0.203125 +vt 0.421875 0.218750 +vt 0.421875 0.234375 +vt 0.328125 0.234375 +vt 0.296875 0.234375 +vt 0.296875 0.218750 +vt 0.312500 0.218750 +vt 0.328125 0.218750 +vt 0.343750 0.234375 +vt 0.343750 0.218750 +vt 0.421875 0.203125 +vt 0.453125 0.203125 +vt 0.453125 0.234375 +vt 0.421875 0.234375 +vt 0.468750 0.234375 +vt 0.453125 0.234375 +vt 0.453125 0.218750 +vt 0.468750 0.218750 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.359375 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.359375 0.250000 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.484375 0.375000 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.453125 0.390625 +vt 0.453125 0.375000 +vt 0.468750 0.406250 +vt 0.453125 0.406250 +vt 0.468750 0.421875 +vt 0.453125 0.421875 +vt 0.453125 0.359375 +vt 0.468750 0.359375 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.375000 0.187500 +vt 0.375000 0.171875 +vt 0.390625 0.171875 +vt 0.390625 0.187500 +vt 0.343750 0.187500 +vt 0.343750 0.171875 +vt 0.359375 0.171875 +vt 0.359375 0.187500 +vt 0.312500 0.171875 +vt 0.328125 0.171875 +vt 0.328125 0.187500 +vt 0.312500 0.187500 +vt 0.328125 0.187500 +vt 0.328125 0.171875 +vt 0.437500 0.312500 +vt 0.448300 0.312500 +vt 0.448300 0.288739 +vt 0.437500 0.288739 +vt 0.495227 0.239883 +vt 0.518988 0.239883 +vt 0.518988 0.229083 +vt 0.495227 0.229083 +vt 0.518988 0.288739 +vt 0.518988 0.312500 +vt 0.495227 0.312500 +vt 0.495227 0.288739 +vt 0.495227 0.229083 +vt 0.518988 0.229083 +vt 0.518988 0.239883 +vt 0.495227 0.239883 +vt 0.448300 0.312500 +vt 0.437500 0.312500 +vt 0.437500 0.288739 +vt 0.448300 0.288739 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.203125 0.875000 +vt 0.203125 0.890625 +vt 0.140625 0.890625 +vt 0.140625 0.875000 +vt 0.265625 0.875000 +vt 0.265625 0.890625 +vt 0.078125 0.875000 +vt 0.078125 0.890625 +vt 0.015625 0.890625 +vt 0.015625 0.875000 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.483174 0.284682 +vt 0.484375 0.296875 +vt 0.483174 0.309068 +vt 0.479618 0.320793 +vt 0.473842 0.331598 +vt 0.466069 0.341069 +vt 0.456598 0.348842 +vt 0.445793 0.354617 +vt 0.434068 0.358174 +vt 0.421875 0.359375 +vt 0.421875 0.317708 +vt 0.425939 0.317308 +vt 0.429848 0.316122 +vt 0.433449 0.314197 +vt 0.436606 0.311606 +vt 0.439197 0.308449 +vt 0.441123 0.304847 +vt 0.442308 0.300939 +vt 0.442708 0.296875 +vt 0.442308 0.292811 +vt 0.441123 0.288902 +vt 0.439197 0.285301 +vt 0.436606 0.282144 +vt 0.433449 0.279553 +vt 0.429848 0.277627 +vt 0.425939 0.276442 +vt 0.421875 0.276042 +vt 0.421875 0.234375 +vt 0.434068 0.235576 +vt 0.445793 0.239133 +vt 0.456598 0.244908 +vt 0.466069 0.252681 +vt 0.473842 0.262152 +vt 0.479617 0.272957 +vt 0.483174 0.284682 +vt 0.479617 0.272957 +vt 0.473842 0.262152 +vt 0.466069 0.252681 +vt 0.456598 0.244908 +vt 0.445793 0.239133 +vt 0.434068 0.235576 +vt 0.421875 0.234375 +vt 0.421875 0.272150 +vt 0.426699 0.272625 +vt 0.431337 0.274032 +vt 0.435611 0.276317 +vt 0.439358 0.279392 +vt 0.442433 0.283139 +vt 0.444718 0.287413 +vt 0.446125 0.292051 +vt 0.446600 0.296875 +vt 0.446125 0.301698 +vt 0.444718 0.306337 +vt 0.442433 0.310611 +vt 0.439358 0.314358 +vt 0.435611 0.317433 +vt 0.431337 0.319717 +vt 0.426699 0.321124 +vt 0.421875 0.321599 +vt 0.421875 0.359375 +vt 0.434068 0.358174 +vt 0.445793 0.354617 +vt 0.456598 0.348842 +vt 0.466069 0.341069 +vt 0.473842 0.331598 +vt 0.479618 0.320793 +vt 0.483174 0.309068 +vt 0.484375 0.296875 +vt 0.484375 0.296875 +vt 0.483174 0.284682 +vt 0.479617 0.272957 +vt 0.473842 0.262152 +vt 0.466069 0.252681 +vt 0.456598 0.244908 +vt 0.445793 0.239133 +vt 0.434068 0.235576 +vt 0.421875 0.234375 +vt 0.421875 0.276042 +vt 0.425939 0.276442 +vt 0.429848 0.277627 +vt 0.433449 0.279553 +vt 0.436606 0.282144 +vt 0.439197 0.285301 +vt 0.441123 0.288902 +vt 0.442308 0.292811 +vt 0.442708 0.296875 +vt 0.442308 0.300939 +vt 0.441123 0.304847 +vt 0.439197 0.308449 +vt 0.436606 0.311606 +vt 0.433449 0.314197 +vt 0.429848 0.316122 +vt 0.425939 0.317308 +vt 0.421875 0.317708 +vt 0.421875 0.359375 +vt 0.434068 0.358174 +vt 0.445793 0.354617 +vt 0.456598 0.348842 +vt 0.466069 0.341069 +vt 0.473842 0.331598 +vt 0.479618 0.320793 +vt 0.483174 0.309068 +vt 0.484375 0.296875 +vt 0.483174 0.309068 +vt 0.479618 0.320793 +vt 0.473842 0.331598 +vt 0.466069 0.341069 +vt 0.456598 0.348842 +vt 0.445793 0.354617 +vt 0.434068 0.358174 +vt 0.421875 0.359375 +vt 0.421875 0.321599 +vt 0.426699 0.321124 +vt 0.431337 0.319717 +vt 0.435611 0.317433 +vt 0.439358 0.314358 +vt 0.442433 0.310611 +vt 0.444718 0.306337 +vt 0.446125 0.301698 +vt 0.446600 0.296875 +vt 0.446125 0.292051 +vt 0.444718 0.287413 +vt 0.442433 0.283139 +vt 0.439358 0.279392 +vt 0.435611 0.276317 +vt 0.431337 0.274032 +vt 0.426699 0.272625 +vt 0.421875 0.272150 +vt 0.421875 0.234375 +vt 0.434068 0.235576 +vt 0.445793 0.239133 +vt 0.456598 0.244908 +vt 0.466069 0.252681 +vt 0.473842 0.262152 +vt 0.479617 0.272957 +vt 0.483174 0.284682 +vt 0.417051 0.272625 +vt 0.412413 0.274032 +vt 0.408139 0.276317 +vt 0.404392 0.279392 +vt 0.401317 0.283139 +vt 0.399032 0.287413 +vt 0.397626 0.292051 +vt 0.397150 0.296875 +vt 0.397626 0.301698 +vt 0.399032 0.306337 +vt 0.401317 0.310611 +vt 0.404392 0.314358 +vt 0.408139 0.317433 +vt 0.412413 0.319717 +vt 0.417051 0.321124 +vt 0.409682 0.358174 +vt 0.397957 0.354617 +vt 0.387152 0.348842 +vt 0.377681 0.341069 +vt 0.369908 0.331598 +vt 0.364133 0.320793 +vt 0.360576 0.309068 +vt 0.359375 0.296875 +vt 0.360576 0.284682 +vt 0.364133 0.272957 +vt 0.369908 0.262152 +vt 0.377681 0.252681 +vt 0.387152 0.244908 +vt 0.397957 0.239133 +vt 0.409682 0.235576 +vt 0.417811 0.276442 +vt 0.413902 0.277627 +vt 0.410301 0.279553 +vt 0.407144 0.282144 +vt 0.404553 0.285301 +vt 0.402628 0.288902 +vt 0.401442 0.292811 +vt 0.401042 0.296875 +vt 0.401442 0.300939 +vt 0.402628 0.304848 +vt 0.404553 0.308449 +vt 0.407144 0.311606 +vt 0.410301 0.314197 +vt 0.413902 0.316122 +vt 0.417811 0.317308 +vt 0.409682 0.358174 +vt 0.397957 0.354617 +vt 0.387152 0.348842 +vt 0.377681 0.341069 +vt 0.369908 0.331598 +vt 0.364133 0.320793 +vt 0.360576 0.309068 +vt 0.359375 0.296875 +vt 0.360576 0.284682 +vt 0.364133 0.272957 +vt 0.369908 0.262152 +vt 0.377681 0.252681 +vt 0.387152 0.244908 +vt 0.397957 0.239133 +vt 0.409682 0.235576 +vt 0.417051 0.321124 +vt 0.412413 0.319717 +vt 0.408139 0.317433 +vt 0.404392 0.314358 +vt 0.401317 0.310611 +vt 0.399032 0.306337 +vt 0.397626 0.301698 +vt 0.397150 0.296875 +vt 0.397626 0.292051 +vt 0.399032 0.287413 +vt 0.401317 0.283139 +vt 0.404392 0.279392 +vt 0.408139 0.276317 +vt 0.412413 0.274032 +vt 0.417051 0.272625 +vt 0.409682 0.235576 +vt 0.397957 0.239133 +vt 0.387152 0.244908 +vt 0.377681 0.252681 +vt 0.369908 0.262152 +vt 0.364133 0.272957 +vt 0.360576 0.284682 +vt 0.359375 0.296875 +vt 0.360576 0.309068 +vt 0.364133 0.320793 +vt 0.369908 0.331598 +vt 0.377681 0.341069 +vt 0.387152 0.348842 +vt 0.397957 0.354617 +vt 0.409682 0.358174 +vt 0.417811 0.317308 +vt 0.413902 0.316122 +vt 0.410301 0.314197 +vt 0.407144 0.311606 +vt 0.404553 0.308449 +vt 0.402628 0.304848 +vt 0.401442 0.300939 +vt 0.401042 0.296875 +vt 0.401442 0.292811 +vt 0.402628 0.288902 +vt 0.404553 0.285301 +vt 0.407144 0.282144 +vt 0.410301 0.279553 +vt 0.413902 0.277627 +vt 0.417811 0.276442 +vt 0.409682 0.235576 +vt 0.397957 0.239133 +vt 0.387152 0.244908 +vt 0.377681 0.252681 +vt 0.369908 0.262152 +vt 0.364133 0.272957 +vt 0.360576 0.284682 +vt 0.359375 0.296875 +vt 0.360576 0.309068 +vt 0.364133 0.320793 +vt 0.369908 0.331598 +vt 0.377681 0.341069 +vt 0.387152 0.348842 +vt 0.397957 0.354617 +vt 0.409682 0.358174 +vt 0.359375 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.265625 +vt 0.359375 0.265625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.359375 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.359375 0.250000 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.546875 +vt 0.921875 0.546875 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.359375 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.359375 0.250000 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.484375 0.375000 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.453125 0.390625 +vt 0.453125 0.375000 +vt 0.468750 0.406250 +vt 0.453125 0.406250 +vt 0.468750 0.421875 +vt 0.453125 0.421875 +vt 0.453125 0.359375 +vt 0.468750 0.359375 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.359375 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.359375 0.250000 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.484375 0.375000 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.453125 0.390625 +vt 0.453125 0.375000 +vt 0.468750 0.406250 +vt 0.453125 0.406250 +vt 0.468750 0.421875 +vt 0.453125 0.421875 +vt 0.453125 0.359375 +vt 0.468750 0.359375 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.359375 0.265625 +vt 0.343750 0.265625 +vt 0.343750 0.250000 +vt 0.359375 0.250000 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.984375 +vt 0.875000 0.984375 +vt 0.875000 0.515625 +vt 0.484375 0.375000 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.453125 0.390625 +vt 0.453125 0.375000 +vt 0.468750 0.406250 +vt 0.453125 0.406250 +vt 0.468750 0.421875 +vt 0.453125 0.421875 +vt 0.453125 0.359375 +vt 0.468750 0.359375 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.921875 0.953125 +vt 0.875000 0.953125 +vt 0.875000 0.515625 +vt 0.921875 0.515625 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.640083 0.385053 +vt 0.632672 0.386527 +vt 0.625261 0.385053 +vt 0.618979 0.380856 +vt 0.614781 0.374573 +vt 0.613307 0.367162 +vt 0.614781 0.359751 +vt 0.618979 0.353469 +vt 0.625261 0.349271 +vt 0.632672 0.347797 +vt 0.640083 0.349271 +vt 0.646365 0.353469 +vt 0.650563 0.359751 +vt 0.652037 0.367162 +vt 0.650563 0.374573 +vt 0.646365 0.380856 +vt 0.755979 0.545686 +vt 0.750000 0.546875 +vt 0.744021 0.545686 +vt 0.738952 0.542298 +vt 0.735564 0.537229 +vt 0.734375 0.531250 +vt 0.735564 0.525271 +vt 0.738952 0.520201 +vt 0.744021 0.516814 +vt 0.750000 0.515625 +vt 0.755979 0.516814 +vt 0.761049 0.520201 +vt 0.764436 0.525270 +vt 0.765625 0.531250 +vt 0.764436 0.537229 +vt 0.761049 0.542298 +vt 0.750000 0.546875 +vt 0.755979 0.545686 +vt 0.761049 0.542298 +vt 0.764436 0.537229 +vt 0.765625 0.531250 +vt 0.764436 0.525270 +vt 0.761049 0.520201 +vt 0.755979 0.516814 +vt 0.750000 0.515625 +vt 0.744021 0.516814 +vt 0.738952 0.520201 +vt 0.735564 0.525271 +vt 0.734375 0.531250 +vt 0.735564 0.537229 +vt 0.738952 0.542298 +vt 0.744021 0.545686 +vt 0.500000 0.390625 +vt 0.500000 0.406250 +vt 0.484375 0.406250 +vt 0.484375 0.390625 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.484375 0.375000 +vt 0.468750 0.406250 +vt 0.484375 0.421875 +vt 0.468750 0.421875 +vt 0.484375 0.406250 +vt 0.468750 0.390625 +vt 0.453125 0.406250 +vt 0.453125 0.390625 +vt 0.468750 0.406250 +vt 0.500000 0.390625 +vt 0.500000 0.406250 +vt 0.484375 0.406250 +vt 0.484375 0.390625 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.484375 0.375000 +vt 0.468750 0.406250 +vt 0.484375 0.421875 +vt 0.468750 0.421875 +vt 0.484375 0.406250 +vt 0.468750 0.390625 +vt 0.453125 0.406250 +vt 0.453125 0.390625 +vt 0.468750 0.406250 +vt 0.500000 0.390625 +vt 0.500000 0.406250 +vt 0.484375 0.406250 +vt 0.484375 0.390625 +vt 0.484375 0.390625 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.484375 0.375000 +vt 0.468750 0.406250 +vt 0.484375 0.421875 +vt 0.468750 0.421875 +vt 0.484375 0.406250 +vt 0.468750 0.390625 +vt 0.453125 0.406250 +vt 0.453125 0.390625 +vt 0.468750 0.406250 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.265625 0.468750 +vt 0.015625 0.468750 +vt 0.265625 0.484375 +vt 0.015625 0.484375 +vt 0.265625 0.500000 +vt 0.015625 0.500000 +vt 0.265625 0.515625 +vt 0.015625 0.515625 +vt 0.265625 0.531250 +vt 0.015625 0.531250 +vt 0.265625 0.546875 +vt 0.015625 0.546875 +vt 0.265625 0.562500 +vt 0.015625 0.562500 +vt 0.265625 0.578125 +vt 0.015625 0.578125 +vt 0.265625 0.593750 +vt 0.015625 0.593750 +vt 0.265625 0.609375 +vt 0.015625 0.609375 +vt 0.265625 0.625000 +vt 0.015625 0.625000 +vt 0.265625 0.640625 +vt 0.015625 0.640625 +vt 0.265625 0.656250 +vt 0.015625 0.656250 +vt 0.265625 0.671875 +vt 0.015625 0.671875 +vt 0.265625 0.687500 +vt 0.015625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.265625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.265625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.265625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.671875 +vt 0.265625 0.671875 +vt 0.015625 0.671875 +vt 0.265625 0.671875 +vt 0.015625 0.671875 +vt 0.265625 0.671875 +vt 0.015625 0.656250 +vt 0.265625 0.656250 +vt 0.015625 0.656250 +vt 0.265625 0.656250 +vt 0.015625 0.656250 +vt 0.265625 0.656250 +vt 0.015625 0.640625 +vt 0.265625 0.640625 +vt 0.015625 0.640625 +vt 0.265625 0.640625 +vt 0.015625 0.640625 +vt 0.265625 0.640625 +vt 0.015625 0.625000 +vt 0.265625 0.625000 +vt 0.015625 0.625000 +vt 0.265625 0.625000 +vt 0.015625 0.625000 +vt 0.265625 0.625000 +vt 0.015625 0.609375 +vt 0.265625 0.609375 +vt 0.015625 0.609375 +vt 0.265625 0.609375 +vt 0.015625 0.609375 +vt 0.265625 0.609375 +vt 0.015625 0.593750 +vt 0.265625 0.593750 +vt 0.015625 0.593750 +vt 0.265625 0.593750 +vt 0.015625 0.593750 +vt 0.265625 0.593750 +vt 0.015625 0.578125 +vt 0.265625 0.578125 +vt 0.015625 0.578125 +vt 0.265625 0.578125 +vt 0.015625 0.578125 +vt 0.265625 0.578125 +vt 0.015625 0.562500 +vt 0.265625 0.562500 +vt 0.015625 0.562500 +vt 0.265625 0.562500 +vt 0.015625 0.562500 +vt 0.265625 0.562500 +vt 0.015625 0.546875 +vt 0.265625 0.546875 +vt 0.015625 0.546875 +vt 0.265625 0.546875 +vt 0.015625 0.546875 +vt 0.265625 0.546875 +vt 0.015625 0.531250 +vt 0.265625 0.531250 +vt 0.015625 0.531250 +vt 0.265625 0.531250 +vt 0.015625 0.531250 +vt 0.265625 0.531250 +vt 0.015625 0.515625 +vt 0.265625 0.515625 +vt 0.015625 0.515625 +vt 0.265625 0.515625 +vt 0.015625 0.515625 +vt 0.265625 0.515625 +vt 0.015625 0.500000 +vt 0.265625 0.500000 +vt 0.015625 0.500000 +vt 0.265625 0.500000 +vt 0.015625 0.500000 +vt 0.265625 0.500000 +vt 0.015625 0.484375 +vt 0.265625 0.484375 +vt 0.015625 0.484375 +vt 0.265625 0.484375 +vt 0.015625 0.484375 +vt 0.265625 0.484375 +vt 0.015625 0.468750 +vt 0.265625 0.468750 +vt 0.015625 0.468750 +vt 0.265625 0.468750 +vt 0.015625 0.468750 +vt 0.265625 0.468750 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.265625 0.468750 +vt 0.015625 0.468750 +vt 0.265625 0.484375 +vt 0.015625 0.484375 +vt 0.265625 0.500000 +vt 0.015625 0.500000 +vt 0.265625 0.515625 +vt 0.015625 0.515625 +vt 0.265625 0.531250 +vt 0.015625 0.531250 +vt 0.265625 0.546875 +vt 0.015625 0.546875 +vt 0.265625 0.562500 +vt 0.015625 0.562500 +vt 0.265625 0.578125 +vt 0.015625 0.578125 +vt 0.265625 0.593750 +vt 0.015625 0.593750 +vt 0.265625 0.609375 +vt 0.015625 0.609375 +vt 0.265625 0.625000 +vt 0.015625 0.625000 +vt 0.265625 0.640625 +vt 0.015625 0.640625 +vt 0.265625 0.656250 +vt 0.015625 0.656250 +vt 0.265625 0.671875 +vt 0.015625 0.671875 +vt 0.265625 0.687500 +vt 0.015625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.265625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.265625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.687500 +vt 0.265625 0.687500 +vt 0.265625 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.671875 +vt 0.265625 0.671875 +vt 0.015625 0.671875 +vt 0.265625 0.671875 +vt 0.015625 0.671875 +vt 0.265625 0.671875 +vt 0.015625 0.656250 +vt 0.265625 0.656250 +vt 0.015625 0.656250 +vt 0.265625 0.656250 +vt 0.015625 0.656250 +vt 0.265625 0.656250 +vt 0.015625 0.640625 +vt 0.265625 0.640625 +vt 0.015625 0.640625 +vt 0.265625 0.640625 +vt 0.015625 0.640625 +vt 0.265625 0.640625 +vt 0.015625 0.625000 +vt 0.265625 0.625000 +vt 0.015625 0.625000 +vt 0.265625 0.625000 +vt 0.015625 0.625000 +vt 0.265625 0.625000 +vt 0.015625 0.609375 +vt 0.265625 0.609375 +vt 0.015625 0.609375 +vt 0.265625 0.609375 +vt 0.015625 0.609375 +vt 0.265625 0.609375 +vt 0.015625 0.593750 +vt 0.265625 0.593750 +vt 0.015625 0.593750 +vt 0.265625 0.593750 +vt 0.015625 0.593750 +vt 0.265625 0.593750 +vt 0.015625 0.578125 +vt 0.265625 0.578125 +vt 0.015625 0.578125 +vt 0.265625 0.578125 +vt 0.015625 0.578125 +vt 0.265625 0.578125 +vt 0.015625 0.562500 +vt 0.265625 0.562500 +vt 0.015625 0.562500 +vt 0.265625 0.562500 +vt 0.015625 0.562500 +vt 0.265625 0.562500 +vt 0.015625 0.546875 +vt 0.265625 0.546875 +vt 0.015625 0.546875 +vt 0.265625 0.546875 +vt 0.015625 0.546875 +vt 0.265625 0.546875 +vt 0.015625 0.531250 +vt 0.265625 0.531250 +vt 0.015625 0.531250 +vt 0.265625 0.531250 +vt 0.015625 0.531250 +vt 0.265625 0.531250 +vt 0.015625 0.515625 +vt 0.265625 0.515625 +vt 0.015625 0.515625 +vt 0.265625 0.515625 +vt 0.015625 0.515625 +vt 0.265625 0.515625 +vt 0.015625 0.500000 +vt 0.265625 0.500000 +vt 0.015625 0.500000 +vt 0.265625 0.500000 +vt 0.015625 0.500000 +vt 0.265625 0.500000 +vt 0.015625 0.484375 +vt 0.265625 0.484375 +vt 0.015625 0.484375 +vt 0.265625 0.484375 +vt 0.015625 0.484375 +vt 0.265625 0.484375 +vt 0.015625 0.468750 +vt 0.265625 0.468750 +vt 0.015625 0.468750 +vt 0.265625 0.468750 +vt 0.015625 0.468750 +vt 0.265625 0.468750 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.015625 0.453125 +vt 0.265625 0.453125 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.359375 0.328125 +vt 0.359375 0.316406 +vt 0.328125 0.316406 +vt 0.328125 0.328125 +vt 0.359375 0.292969 +vt 0.359375 0.281250 +vt 0.328125 0.281250 +vt 0.328125 0.292969 +vt 0.390625 0.328125 +vt 0.421875 0.328125 +vt 0.421875 0.281250 +vt 0.390625 0.281250 +vt 0.359375 0.316406 +vt 0.375000 0.316406 +vt 0.375000 0.328125 +vt 0.375000 0.281250 +vt 0.375000 0.292969 +vt 0.359375 0.292969 +vt 0.312500 0.359375 +vt 0.312500 0.328125 +vt 0.296875 0.328125 +vt 0.296875 0.359375 +vt 0.312500 0.250000 +vt 0.312500 0.281250 +vt 0.328125 0.281250 +vt 0.328125 0.250000 +vt 0.312500 0.328125 +vt 0.312500 0.359375 +vt 0.328125 0.359375 +vt 0.328125 0.328125 +vt 0.312500 0.250000 +vt 0.296875 0.250000 +vt 0.296875 0.281250 +vt 0.312500 0.281250 +vt 0.328125 0.316406 +vt 0.328125 0.292969 +vt 0.312500 0.292969 +vt 0.312500 0.316406 +vt 0.484375 0.312500 +vt 0.484375 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.312500 +vt 0.390625 0.375000 +vt 0.390625 0.312500 +vt 0.343750 0.375000 +vt 0.343750 0.312500 +vt 0.296875 0.375000 +vt 0.296875 0.312500 +vt 0.390625 0.265625 +vt 0.343750 0.265625 +vt 0.390625 0.421875 +vt 0.343750 0.421875 +vt 0.484375 0.312500 +vt 0.484375 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.312500 +vt 0.390625 0.375000 +vt 0.390625 0.312500 +vt 0.343750 0.375000 +vt 0.343750 0.312500 +vt 0.296875 0.375000 +vt 0.296875 0.312500 +vt 0.390625 0.265625 +vt 0.343750 0.265625 +vt 0.390625 0.421875 +vt 0.343750 0.421875 +vt 0.414062 0.375000 +vt 0.390625 0.375000 +vt 0.390625 0.328125 +vt 0.414062 0.328125 +vt 0.373047 0.265625 +vt 0.373047 0.289062 +vt 0.343750 0.289062 +vt 0.343750 0.265625 +vt 0.437500 0.375000 +vt 0.414062 0.375000 +vt 0.414062 0.328125 +vt 0.437500 0.328125 +vt 0.343750 0.375000 +vt 0.326172 0.375000 +vt 0.326172 0.328125 +vt 0.343750 0.328125 +vt 0.449219 0.328125 +vt 0.449219 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.328125 +vt 0.367188 0.312500 +vt 0.367188 0.294922 +vt 0.343750 0.294922 +vt 0.343750 0.289062 +vt 0.373047 0.289062 +vt 0.373047 0.265625 +vt 0.378906 0.265625 +vt 0.378906 0.289062 +vt 0.390625 0.289062 +vt 0.390625 0.312500 +vt 0.484375 0.375000 +vt 0.449219 0.375000 +vt 0.449219 0.328125 +vt 0.455078 0.328125 +vt 0.455078 0.367188 +vt 0.484375 0.367188 +vt 0.367188 0.375000 +vt 0.390625 0.398438 +vt 0.378906 0.398437 +vt 0.378906 0.421875 +vt 0.343750 0.421875 +vt 0.343750 0.392578 +vt 0.367188 0.392578 +vt 0.367188 0.328125 +vt 0.326172 0.328125 +vt 0.326172 0.375000 +vt 0.296875 0.375000 +vt 0.296875 0.367188 +vt 0.320312 0.367188 +vt 0.320312 0.328125 +vt 0.455078 0.367188 +vt 0.455078 0.328125 +vt 0.484375 0.328125 +vt 0.484375 0.367188 +vt 0.367188 0.375000 +vt 0.343750 0.375000 +vt 0.343750 0.328125 +vt 0.367188 0.328125 +vt 0.320312 0.367188 +vt 0.296875 0.367188 +vt 0.296875 0.328125 +vt 0.320312 0.328125 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.546875 0.296875 +vt 0.546875 0.312500 +vt 0.296875 0.312500 +vt 0.296875 0.296875 +vt 0.296875 0.343750 +vt 0.296875 0.328125 +vt 0.546875 0.328125 +vt 0.546875 0.343750 +vt 0.546875 0.359375 +vt 0.296875 0.359375 +vt 0.414062 0.375000 +vt 0.390625 0.375000 +vt 0.390625 0.328125 +vt 0.414062 0.328125 +vt 0.373047 0.265625 +vt 0.373047 0.289062 +vt 0.343750 0.289062 +vt 0.343750 0.265625 +vt 0.437500 0.375000 +vt 0.414062 0.375000 +vt 0.414062 0.328125 +vt 0.437500 0.328125 +vt 0.343750 0.375000 +vt 0.326172 0.375000 +vt 0.326172 0.328125 +vt 0.343750 0.328125 +vt 0.449219 0.328125 +vt 0.449219 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.328125 +vt 0.367188 0.312500 +vt 0.367188 0.294922 +vt 0.343750 0.294922 +vt 0.343750 0.289062 +vt 0.373047 0.289062 +vt 0.373047 0.265625 +vt 0.378906 0.265625 +vt 0.378906 0.289062 +vt 0.390625 0.289062 +vt 0.390625 0.312500 +vt 0.484375 0.375000 +vt 0.449219 0.375000 +vt 0.449219 0.328125 +vt 0.455078 0.328125 +vt 0.455078 0.367188 +vt 0.484375 0.367188 +vt 0.367188 0.375000 +vt 0.390625 0.398438 +vt 0.378906 0.398437 +vt 0.378906 0.421875 +vt 0.343750 0.421875 +vt 0.343750 0.392578 +vt 0.367188 0.392578 +vt 0.367188 0.328125 +vt 0.326172 0.328125 +vt 0.326172 0.375000 +vt 0.296875 0.375000 +vt 0.296875 0.367188 +vt 0.320312 0.367188 +vt 0.320312 0.328125 +vt 0.455078 0.367188 +vt 0.455078 0.328125 +vt 0.484375 0.328125 +vt 0.484375 0.367188 +vt 0.367188 0.375000 +vt 0.343750 0.375000 +vt 0.343750 0.328125 +vt 0.367188 0.328125 +vt 0.320312 0.367188 +vt 0.296875 0.367188 +vt 0.296875 0.328125 +vt 0.320312 0.328125 +vt 0.140625 0.953125 +vt 0.140625 0.968750 +vt 0.078125 0.968750 +vt 0.078125 0.953125 +vt 0.015625 0.968750 +vt 0.015625 0.953125 +vt 0.265625 0.953125 +vt 0.265625 0.968750 +vt 0.203125 0.968750 +vt 0.203125 0.953125 +vt 0.593750 0.406250 +vt 0.671875 0.406250 +vt 0.671875 0.328125 +vt 0.593750 0.328125 +vt 0.828125 0.406250 +vt 0.750000 0.406250 +vt 0.750000 0.328125 +vt 0.828125 0.328125 +vt 0.203125 0.921875 +vt 0.203125 0.937500 +vt 0.140625 0.937500 +vt 0.140625 0.921875 +vt 0.265625 0.921875 +vt 0.265625 0.937500 +vt 0.078125 0.921875 +vt 0.078125 0.937500 +vt 0.015625 0.937500 +vt 0.015625 0.921875 +vt 0.171875 0.546875 +vt 0.171875 0.625000 +vt 0.093750 0.625000 +vt 0.093750 0.546875 +vt 0.093750 0.625000 +vt 0.093750 0.703125 +vt 0.015625 0.703125 +vt 0.015625 0.625000 +vt 0.171875 0.625000 +vt 0.171875 0.703125 +vt 0.015625 0.625000 +vt 0.015625 0.546875 +vt 0.578126 0.453125 +vt 0.578126 0.703124 +vt 0.828125 0.703124 +vt 0.828125 0.453125 +vt 0.671875 0.453125 +vt 0.671875 0.703124 +vt 0.734375 0.703125 +vt 0.734375 0.453126 +vt 0.828124 0.453126 +vt 0.828124 0.703125 +vt 0.578125 0.703125 +vt 0.578125 0.453126 +vt 0.734375 0.453126 +vt 0.734375 0.703125 +vt 0.671875 0.703124 +vt 0.671875 0.453125 +vt 0.578125 0.453125 +vt 0.578125 0.578125 +vt 0.828125 0.578125 +vt 0.578125 0.578125 +vt 0.828125 0.578125 +vt 0.828125 0.703125 +vt 0.475637 0.181108 +vt 0.475637 0.240509 +vt 0.486437 0.240509 +vt 0.486437 0.181108 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.486437 0.181108 +vt 0.486437 0.240509 +vt 0.475637 0.240509 +vt 0.475637 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.486437 0.181108 +vt 0.486437 0.240509 +vt 0.475637 0.240509 +vt 0.475637 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.475637 0.181108 +vt 0.475637 0.240509 +vt 0.486437 0.240509 +vt 0.486437 0.181108 +vt 0.486101 0.181108 +vt 0.486101 0.240509 +vt 0.437500 0.240509 +vt 0.437500 0.181108 +vt 0.475637 0.312500 +vt 0.486437 0.312500 +vt 0.486437 0.263899 +vt 0.475637 0.263899 +vt 0.486437 0.312500 +vt 0.475637 0.312500 +vt 0.475637 0.263899 +vt 0.486437 0.263899 +vt 0.500000 0.406250 +vt 0.515625 0.406250 +vt 0.515625 0.421875 +vt 0.500000 0.421875 +vt 0.375000 0.265625 +vt 0.359375 0.265625 +vt 0.359375 0.250000 +vt 0.375000 0.250000 +vt 0.875000 0.703125 +vt 0.875000 0.484375 +vt 0.921875 0.484375 +vt 0.921875 0.703125 +vt 0.875000 0.703125 +vt 0.875000 0.484375 +vt 0.921875 0.484375 +vt 0.921875 0.703125 +vt 0.921875 0.484375 +vt 0.921875 0.703125 +vt 0.875000 0.703125 +vt 0.875000 0.484375 +vt 0.875000 0.703125 +vt 0.875000 0.484375 +vt 0.921875 0.484375 +vt 0.921875 0.703125 +vt 0.484375 0.250000 +vt 0.484375 0.390625 +vt 0.421875 0.390625 +vt 0.421875 0.250000 +vt 0.390625 0.250000 +vt 0.390625 0.390625 +vt 0.296875 0.390625 +vt 0.296875 0.250000 +vt 0.328125 0.250000 +vt 0.328125 0.390625 +vt 0.328125 0.218750 +vt 0.390625 0.218750 +vt 0.328125 0.421875 +vt 0.390625 0.421875 +vt 0.375000 0.171875 +vt 0.375000 0.296875 +vt 0.359375 0.296875 +vt 0.359375 0.171875 +vt 0.441572 0.402053 +vt 0.428566 0.382588 +vt 0.423998 0.359627 +vt 0.428566 0.336666 +vt 0.441572 0.317200 +vt 0.461037 0.304194 +vt 0.483998 0.299627 +vt 0.506959 0.304194 +vt 0.526425 0.317200 +vt 0.539431 0.336666 +vt 0.543998 0.359627 +vt 0.539431 0.382588 +vt 0.526425 0.402053 +vt 0.506959 0.415060 +vt 0.483998 0.419627 +vt 0.461037 0.415060 +vt 0.312500 0.171875 +vt 0.312500 0.296875 +vt 0.296875 0.296875 +vt 0.296875 0.171875 +vt 0.390625 0.171875 +vt 0.390625 0.296875 +vt 0.484375 0.171875 +vt 0.484375 0.296875 +vt 0.468750 0.296875 +vt 0.468750 0.171875 +vt 0.328125 0.171875 +vt 0.328125 0.296875 +vt 0.406250 0.171875 +vt 0.406250 0.296875 +vt 0.500000 0.171875 +vt 0.500000 0.296875 +vt 0.343750 0.171875 +vt 0.343750 0.296875 +vt 0.421875 0.171875 +vt 0.421875 0.296875 +vt 0.437500 0.171875 +vt 0.437500 0.296875 +vt 0.453125 0.296875 +vt 0.453125 0.171875 +vt 0.734375 0.171875 +vt 0.671875 0.171875 +vt 0.671875 0.203125 +vt 0.734375 0.203125 +vt 0.671875 0.265625 +vt 0.734375 0.265625 +vt 0.671875 0.296875 +vt 0.734375 0.296875 +vt 0.640625 0.203125 +vt 0.640625 0.265625 +vt 0.765625 0.265625 +vt 0.765625 0.203125 +vt 0.734375 0.203125 +vt 0.671875 0.203125 +vt 0.671875 0.265625 +vt 0.734375 0.265625 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.693479 0.655060 +vt 0.687500 0.656250 +vt 0.681521 0.655061 +vt 0.676452 0.651673 +vt 0.673064 0.646604 +vt 0.671875 0.640625 +vt 0.673064 0.634646 +vt 0.676452 0.629576 +vt 0.681521 0.626189 +vt 0.687500 0.625000 +vt 0.693479 0.626189 +vt 0.698549 0.629576 +vt 0.701936 0.634645 +vt 0.703125 0.640625 +vt 0.701936 0.646604 +vt 0.698549 0.651673 +vt 0.734375 0.656250 +vt 0.740354 0.655060 +vt 0.745424 0.651673 +vt 0.748811 0.646604 +vt 0.750000 0.640625 +vt 0.748811 0.634645 +vt 0.745424 0.629576 +vt 0.740354 0.626189 +vt 0.734375 0.625000 +vt 0.728396 0.626189 +vt 0.723327 0.629576 +vt 0.719939 0.634646 +vt 0.718750 0.640625 +vt 0.719939 0.646604 +vt 0.723327 0.651673 +vt 0.728396 0.655061 +vt 0.693479 0.655060 +vt 0.687500 0.656250 +vt 0.681521 0.655061 +vt 0.676452 0.651673 +vt 0.673064 0.646604 +vt 0.671875 0.640625 +vt 0.673064 0.634646 +vt 0.676452 0.629576 +vt 0.681521 0.626189 +vt 0.687500 0.625000 +vt 0.693479 0.626189 +vt 0.698549 0.629576 +vt 0.701936 0.634645 +vt 0.703125 0.640625 +vt 0.701936 0.646604 +vt 0.698549 0.651673 +vt 0.734375 0.656250 +vt 0.740354 0.655060 +vt 0.745424 0.651673 +vt 0.748811 0.646604 +vt 0.750000 0.640625 +vt 0.748811 0.634645 +vt 0.745424 0.629576 +vt 0.740354 0.626189 +vt 0.734375 0.625000 +vt 0.728396 0.626189 +vt 0.723327 0.629576 +vt 0.719939 0.634646 +vt 0.718750 0.640625 +vt 0.719939 0.646604 +vt 0.723327 0.651673 +vt 0.728396 0.655061 +vt 0.875000 0.859375 +vt 0.875000 0.609375 +vt 0.921875 0.609375 +vt 0.921875 0.859375 +vt 0.875000 0.859375 +vt 0.875000 0.609375 +vt 0.921875 0.609375 +vt 0.921875 0.859375 +vt 0.875000 0.859375 +vt 0.875000 0.609375 +vt 0.921875 0.609375 +vt 0.921875 0.859375 +vt 0.921875 0.859375 +vt 0.875000 0.859375 +vt 0.875000 0.609375 +vt 0.921875 0.609375 +vt 0.390625 0.421875 +vt 0.390625 0.414931 +vt 0.397569 0.414931 +vt 0.397569 0.397569 +vt 0.414931 0.397569 +vt 0.414931 0.414931 +vt 0.421875 0.414931 +vt 0.421875 0.421875 +vt 0.378472 0.375000 +vt 0.378472 0.382812 +vt 0.375000 0.382812 +vt 0.375000 0.375000 +vt 0.434028 0.375000 +vt 0.437500 0.375000 +vt 0.437500 0.382812 +vt 0.434028 0.382812 +vt 0.397569 0.382812 +vt 0.390625 0.382812 +vt 0.390625 0.375000 +vt 0.397569 0.375000 +vt 0.387153 0.375000 +vt 0.387153 0.382812 +vt 0.378472 0.382812 +vt 0.378472 0.375000 +vt 0.425347 0.375000 +vt 0.434028 0.375000 +vt 0.434028 0.382812 +vt 0.425347 0.382812 +vt 0.421875 0.382812 +vt 0.414931 0.382812 +vt 0.414931 0.375000 +vt 0.421875 0.375000 +vt 0.414931 0.382812 +vt 0.397569 0.382812 +vt 0.397569 0.375000 +vt 0.414931 0.375000 +vt 0.421875 0.343750 +vt 0.421875 0.350694 +vt 0.414931 0.350694 +vt 0.414931 0.368056 +vt 0.397569 0.368056 +vt 0.397569 0.350694 +vt 0.390625 0.350694 +vt 0.390625 0.343750 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.968750 0.968750 +vt 0.984375 0.968750 +vt 0.984375 0.921875 +vt 0.968750 0.921875 +vt 0.699115 0.453125 +vt 0.699115 0.703125 +vt 0.691510 0.703125 +vt 0.691510 0.453125 +vt 0.683490 0.453125 +vt 0.683490 0.703125 +vt 0.675885 0.703125 +vt 0.675885 0.453125 +vt 0.652240 0.453125 +vt 0.652240 0.703125 +vt 0.644635 0.703125 +vt 0.644635 0.453125 +vt 0.667865 0.453125 +vt 0.667865 0.703125 +vt 0.660260 0.703125 +vt 0.660260 0.453125 +vt 0.605365 0.453125 +vt 0.605365 0.703125 +vt 0.597760 0.703125 +vt 0.597760 0.453125 +vt 0.620990 0.453125 +vt 0.620990 0.703125 +vt 0.613385 0.703125 +vt 0.613385 0.453125 +vt 0.589740 0.453125 +vt 0.589740 0.703125 +vt 0.582135 0.703125 +vt 0.582135 0.453125 +vt 0.636615 0.703125 +vt 0.636615 0.453125 +vt 0.629010 0.453125 +vt 0.629010 0.703125 +vt 0.703125 0.453125 +vt 0.703125 0.703125 +vt 0.699225 0.453125 +vt 0.699225 0.703125 +vt 0.691400 0.703125 +vt 0.691400 0.453125 +vt 0.683600 0.453125 +vt 0.683600 0.703125 +vt 0.675775 0.703125 +vt 0.675775 0.453125 +vt 0.652350 0.453125 +vt 0.652350 0.703125 +vt 0.644525 0.703125 +vt 0.644525 0.453125 +vt 0.667975 0.453125 +vt 0.667975 0.703125 +vt 0.660150 0.703125 +vt 0.660150 0.453125 +vt 0.605475 0.453125 +vt 0.605475 0.703125 +vt 0.597650 0.703125 +vt 0.597650 0.453125 +vt 0.621100 0.453125 +vt 0.621100 0.703125 +vt 0.613275 0.703125 +vt 0.613275 0.453125 +vt 0.589850 0.453125 +vt 0.589850 0.703125 +vt 0.582025 0.703125 +vt 0.582025 0.453125 +vt 0.636725 0.703125 +vt 0.636725 0.453125 +vt 0.628900 0.453125 +vt 0.628900 0.703125 +vt 0.703125 0.453125 +vt 0.703125 0.703125 +vt 0.699225 0.453125 +vt 0.699225 0.703125 +vt 0.691400 0.703125 +vt 0.691400 0.453125 +vt 0.683600 0.453125 +vt 0.683600 0.703125 +vt 0.675775 0.703125 +vt 0.675775 0.453125 +vt 0.652350 0.453125 +vt 0.652350 0.703125 +vt 0.644525 0.703125 +vt 0.644525 0.453125 +vt 0.667975 0.453125 +vt 0.667975 0.703125 +vt 0.660150 0.703125 +vt 0.660150 0.453125 +vt 0.605475 0.453125 +vt 0.605475 0.703125 +vt 0.597650 0.703125 +vt 0.597650 0.453125 +vt 0.621100 0.453125 +vt 0.621100 0.703125 +vt 0.613275 0.703125 +vt 0.613275 0.453125 +vt 0.589850 0.453125 +vt 0.589850 0.703125 +vt 0.582025 0.703125 +vt 0.582025 0.453125 +vt 0.636725 0.703125 +vt 0.636725 0.453125 +vt 0.628900 0.453125 +vt 0.628900 0.703125 +vt 0.703125 0.453125 +vt 0.703125 0.703125 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.421875 0.218750 +vt 0.312500 0.234375 +vt 0.406250 0.234375 +vt 0.406250 0.250000 +vt 0.312500 0.250000 +vt 0.406250 0.265625 +vt 0.312500 0.265625 +vt 0.406250 0.281250 +vt 0.312500 0.281250 +vt 0.406250 0.296875 +vt 0.312500 0.296875 +vt 0.406250 0.312500 +vt 0.312500 0.312500 +vt 0.406250 0.328125 +vt 0.312500 0.328125 +vt 0.406250 0.343750 +vt 0.312500 0.343750 +vt 0.406250 0.359375 +vt 0.312500 0.359375 +vt 0.406250 0.375000 +vt 0.312500 0.375000 +vt 0.406250 0.390625 +vt 0.312500 0.390625 +vt 0.406250 0.406250 +vt 0.312500 0.406250 +vt 0.406250 0.421875 +vt 0.312500 0.421875 +vt 0.437500 0.171875 +vt 0.531250 0.171875 +vt 0.531250 0.187500 +vt 0.437500 0.187500 +vt 0.531250 0.203125 +vt 0.437500 0.203125 +vt 0.531250 0.218750 +vt 0.437500 0.218750 +vt 0.531250 0.234375 +vt 0.437500 0.234375 +vt 0.531250 0.250000 +vt 0.437500 0.250000 +vt 0.531250 0.265625 +vt 0.437500 0.265625 +vt 0.531250 0.281250 +vt 0.437500 0.281250 +vt 0.531250 0.296875 +vt 0.437500 0.296875 +vt 0.531250 0.312500 +vt 0.437500 0.312500 +vt 0.531250 0.328125 +vt 0.437500 0.328125 +vt 0.531250 0.343750 +vt 0.437500 0.343750 +vt 0.531250 0.359375 +vt 0.437500 0.359375 +vt 0.531250 0.375000 +vt 0.437500 0.375000 +vt 0.531250 0.390625 +vt 0.437500 0.390625 +vt 0.531250 0.406250 +vt 0.437500 0.406250 +vt 0.531250 0.421875 +vt 0.437500 0.421875 +vt 0.312500 0.171875 +vt 0.406250 0.171875 +vt 0.406250 0.187500 +vt 0.312500 0.187500 +vt 0.406250 0.203125 +vt 0.312500 0.203125 +vt 0.406250 0.218750 +vt 0.312500 0.218750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt -1.500000 0.015625 +vt 0.937125 0.015625 +vt 0.937126 0.031250 +vt -1.500000 0.031250 +vt 0.937126 0.046875 +vt -1.500000 0.046875 +vt 0.937126 0.062500 +vt -1.500000 0.062500 +vt 0.937126 0.078125 +vt -1.500000 0.078125 +vt 0.937126 0.093750 +vt -1.500000 0.093750 +vt 0.937126 0.109375 +vt -1.500000 0.109375 +vt 0.937126 0.125000 +vt -1.500000 0.125000 +vt 0.937126 0.140625 +vt -1.500000 0.140625 +vt -1.500000 0.015625 +vt 0.937126 0.015625 +vt 0.937126 0.031250 +vt -1.500000 0.031250 +vt 0.937125 0.046875 +vt -1.500000 0.046875 +vt 0.937125 0.062500 +vt -1.500000 0.062500 +vt 0.937125 0.078125 +vt -1.500000 0.078125 +vt 0.937125 0.093750 +vt -1.500000 0.093750 +vt 0.937125 0.109375 +vt -1.500000 0.109375 +vt 0.937126 0.125000 +vt -1.500000 0.125000 +vt 0.937125 0.140625 +vt -1.500000 0.140625 +vt 0.812500 0.562500 +vt 0.812500 0.609375 +vt 0.796875 0.609375 +vt 0.796875 0.562500 +vt 0.781250 0.609375 +vt 0.781250 0.562500 +vt 0.765625 0.609375 +vt 0.765625 0.562500 +vt 0.750000 0.609375 +vt 0.750000 0.562500 +vt 0.734375 0.609375 +vt 0.734375 0.562500 +vt 0.718750 0.609375 +vt 0.718750 0.562500 +vt 0.703125 0.609375 +vt 0.703125 0.562500 +vt 0.687500 0.609375 +vt 0.687500 0.562500 +vt 0.671875 0.609375 +vt 0.671875 0.562500 +vt 0.656250 0.609375 +vt 0.656250 0.562500 +vt 0.640625 0.609375 +vt 0.640625 0.562500 +vt 0.625000 0.609375 +vt 0.625000 0.562500 +vt 0.609375 0.609375 +vt 0.609375 0.562500 +vt 0.593750 0.609375 +vt 0.593750 0.562500 +vt 0.578125 0.609375 +vt 0.578125 0.562500 +vt 0.828125 0.562500 +vt 0.828125 0.609375 +vt 0.699115 0.453125 +vt 0.699115 0.703125 +vt 0.691510 0.703125 +vt 0.691510 0.453125 +vt 0.683490 0.453125 +vt 0.683490 0.703125 +vt 0.675885 0.703125 +vt 0.675885 0.453125 +vt 0.652240 0.453125 +vt 0.652240 0.703125 +vt 0.644635 0.703125 +vt 0.644635 0.453125 +vt 0.667865 0.453125 +vt 0.667865 0.703125 +vt 0.660260 0.703125 +vt 0.660260 0.453125 +vt 0.605365 0.453125 +vt 0.605365 0.703125 +vt 0.597760 0.703125 +vt 0.597760 0.453125 +vt 0.620990 0.453125 +vt 0.620990 0.703125 +vt 0.613385 0.703125 +vt 0.613385 0.453125 +vt 0.589740 0.453125 +vt 0.589740 0.703125 +vt 0.582135 0.703125 +vt 0.582135 0.453125 +vt 0.636615 0.703125 +vt 0.636615 0.453125 +vt 0.629010 0.453125 +vt 0.629010 0.703125 +vt 0.703125 0.453125 +vt 0.703125 0.703125 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.734375 0.593750 +vt 0.734375 0.562500 +vt 0.718750 0.593750 +vt 0.718750 0.562500 +vt 0.703125 0.593750 +vt 0.703125 0.562500 +vt 0.687500 0.593750 +vt 0.687500 0.562500 +vt 0.671875 0.593750 +vt 0.671875 0.562500 +vt 0.656250 0.593750 +vt 0.656250 0.562500 +vt 0.640625 0.593750 +vt 0.640625 0.562500 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.656231 0.296840 +vt 0.656231 0.249965 +vt 0.671856 0.249965 +vt 0.671856 0.296840 +vt 0.687481 0.249965 +vt 0.687481 0.296840 +vt 0.703106 0.249965 +vt 0.703106 0.296840 +vt 0.718731 0.249965 +vt 0.718731 0.296840 +vt 0.734356 0.249965 +vt 0.734356 0.296840 +vt 0.749981 0.249965 +vt 0.749981 0.296840 +vt 0.765606 0.249965 +vt 0.640606 0.249965 +vt 0.640606 0.203090 +vt 0.656231 0.203090 +vt 0.656231 0.249965 +vt 0.671856 0.203090 +vt 0.671856 0.249965 +vt 0.687481 0.203090 +vt 0.687481 0.249965 +vt 0.703106 0.203090 +vt 0.703106 0.249965 +vt 0.718731 0.203090 +vt 0.718731 0.249965 +vt 0.734356 0.203090 +vt 0.734356 0.249965 +vt 0.749981 0.203090 +vt 0.749981 0.249965 +vt 0.765606 0.203090 +vt 0.640606 0.296840 +vt 0.640606 0.249965 +vt 0.593750 0.593750 +vt 0.593750 0.562500 +vt 0.609375 0.562500 +vt 0.609375 0.593750 +vt 0.625000 0.562500 +vt 0.625000 0.593750 +vt 0.640625 0.562500 +vt 0.640625 0.593750 +vt 0.656250 0.562500 +vt 0.656250 0.593750 +vt 0.671875 0.562500 +vt 0.671875 0.593750 +vt 0.687500 0.562500 +vt 0.687500 0.593750 +vt 0.703125 0.562500 +vt 0.703125 0.593750 +vt 0.718750 0.562500 +vt 0.718750 0.593750 +vt 0.734375 0.562500 +vt 0.734375 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.781250 0.562500 +vt 0.781250 0.593750 +vt 0.796875 0.562500 +vt 0.796875 0.593750 +vt 0.812500 0.562500 +vt 0.812500 0.593750 +vt 0.828125 0.562500 +vt 0.828125 0.593750 +vt 0.578125 0.703125 +vt 0.578125 0.687500 +vt 0.593750 0.687500 +vt 0.593750 0.703125 +vt 0.578125 0.671875 +vt 0.593750 0.671875 +vt 0.812500 0.609375 +vt 0.828125 0.609375 +vt 0.828125 0.671875 +vt 0.812500 0.671875 +vt 0.578125 0.609375 +vt 0.578125 0.593750 +vt 0.593750 0.609375 +vt 0.812500 0.703125 +vt 0.812500 0.687500 +vt 0.828125 0.687500 +vt 0.828125 0.703125 +vt 0.796875 0.609375 +vt 0.796875 0.671875 +vt 0.796875 0.703125 +vt 0.796875 0.687500 +vt 0.781250 0.609375 +vt 0.781250 0.671875 +vt 0.781250 0.703125 +vt 0.781250 0.687500 +vt 0.765625 0.609375 +vt 0.765625 0.671875 +vt 0.765625 0.703125 +vt 0.765625 0.687500 +vt 0.750000 0.609375 +vt 0.750000 0.671875 +vt 0.750000 0.703125 +vt 0.750000 0.687500 +vt 0.734375 0.609375 +vt 0.734375 0.671875 +vt 0.734375 0.703125 +vt 0.734375 0.687500 +vt 0.437500 0.359375 +vt 0.453125 0.359375 +vt 0.453125 0.421875 +vt 0.437500 0.421875 +vt 0.718750 0.703125 +vt 0.718750 0.687500 +vt 0.718750 0.671875 +vt 0.421875 0.359375 +vt 0.421875 0.421875 +vt 0.718750 0.609375 +vt 0.703125 0.703125 +vt 0.703125 0.687500 +vt 0.703125 0.671875 +vt 0.406250 0.359375 +vt 0.406250 0.421875 +vt 0.703125 0.609375 +vt 0.687500 0.703125 +vt 0.687500 0.687500 +vt 0.687500 0.671875 +vt 0.390625 0.359375 +vt 0.390625 0.421875 +vt 0.687500 0.609375 +vt 0.671875 0.703125 +vt 0.671875 0.687500 +vt 0.671875 0.671875 +vt 0.375000 0.359375 +vt 0.375000 0.421875 +vt 0.671875 0.609375 +vt 0.656250 0.703125 +vt 0.656250 0.687500 +vt 0.656250 0.671875 +vt 0.359375 0.359375 +vt 0.359375 0.421875 +vt 0.656250 0.609375 +vt 0.640625 0.703125 +vt 0.640625 0.687500 +vt 0.640625 0.671875 +vt 0.343750 0.359375 +vt 0.343750 0.421875 +vt 0.640625 0.609375 +vt 0.625000 0.703125 +vt 0.625000 0.687500 +vt 0.625000 0.671875 +vt 0.328125 0.359375 +vt 0.328125 0.421875 +vt 0.625000 0.609375 +vt 0.609375 0.703125 +vt 0.609375 0.687500 +vt 0.609375 0.671875 +vt 0.312500 0.421875 +vt 0.312500 0.359375 +vt 0.609375 0.609375 +vt 0.578125 0.562500 +vt 0.296875 0.359375 +vt 0.296875 0.421875 +vt 0.593750 0.593750 +vt 0.593750 0.562500 +vt 0.609375 0.562500 +vt 0.609375 0.593750 +vt 0.625000 0.562500 +vt 0.625000 0.593750 +vt 0.640625 0.562500 +vt 0.640625 0.593750 +vt 0.656250 0.562500 +vt 0.656250 0.593750 +vt 0.671875 0.562500 +vt 0.671875 0.593750 +vt 0.687500 0.562500 +vt 0.687500 0.593750 +vt 0.703125 0.562500 +vt 0.703125 0.593750 +vt 0.718750 0.562500 +vt 0.718750 0.593750 +vt 0.734375 0.562500 +vt 0.734375 0.593750 +vt 0.750000 0.562500 +vt 0.750000 0.593750 +vt 0.765625 0.562500 +vt 0.765625 0.593750 +vt 0.781250 0.562500 +vt 0.781250 0.593750 +vt 0.796875 0.562500 +vt 0.796875 0.593750 +vt 0.812500 0.562500 +vt 0.812500 0.593750 +vt 0.828125 0.562500 +vt 0.828125 0.593750 +vt 0.578125 0.703125 +vt 0.578125 0.687500 +vt 0.593750 0.687500 +vt 0.593750 0.703125 +vt 0.578125 0.671875 +vt 0.593750 0.671875 +vt 0.812500 0.609375 +vt 0.828125 0.609375 +vt 0.828125 0.671875 +vt 0.812500 0.671875 +vt 0.578125 0.609375 +vt 0.578125 0.593750 +vt 0.593750 0.609375 +vt 0.812500 0.703125 +vt 0.812500 0.687500 +vt 0.828125 0.687500 +vt 0.828125 0.703125 +vt 0.796875 0.609375 +vt 0.796875 0.671875 +vt 0.796875 0.703125 +vt 0.796875 0.687500 +vt 0.781250 0.609375 +vt 0.781250 0.671875 +vt 0.781250 0.703125 +vt 0.781250 0.687500 +vt 0.765625 0.609375 +vt 0.765625 0.671875 +vt 0.765625 0.703125 +vt 0.765625 0.687500 +vt 0.750000 0.609375 +vt 0.750000 0.671875 +vt 0.750000 0.703125 +vt 0.750000 0.687500 +vt 0.734375 0.609375 +vt 0.734375 0.671875 +vt 0.734375 0.703125 +vt 0.734375 0.687500 +vt 0.437500 0.359375 +vt 0.453125 0.359375 +vt 0.453125 0.421875 +vt 0.437500 0.421875 +vt 0.718750 0.703125 +vt 0.718750 0.687500 +vt 0.718750 0.671875 +vt 0.421875 0.359375 +vt 0.421875 0.421875 +vt 0.718750 0.609375 +vt 0.703125 0.703125 +vt 0.703125 0.687500 +vt 0.703125 0.671875 +vt 0.406250 0.359375 +vt 0.406250 0.421875 +vt 0.703125 0.609375 +vt 0.687500 0.703125 +vt 0.687500 0.687500 +vt 0.687500 0.671875 +vt 0.390625 0.359375 +vt 0.390625 0.421875 +vt 0.687500 0.609375 +vt 0.671875 0.703125 +vt 0.671875 0.687500 +vt 0.671875 0.671875 +vt 0.375000 0.359375 +vt 0.375000 0.421875 +vt 0.671875 0.609375 +vt 0.656250 0.703125 +vt 0.656250 0.687500 +vt 0.656250 0.671875 +vt 0.359375 0.359375 +vt 0.359375 0.421875 +vt 0.656250 0.609375 +vt 0.640625 0.703125 +vt 0.640625 0.687500 +vt 0.640625 0.671875 +vt 0.343750 0.359375 +vt 0.343750 0.421875 +vt 0.640625 0.609375 +vt 0.625000 0.703125 +vt 0.625000 0.687500 +vt 0.625000 0.671875 +vt 0.328125 0.359375 +vt 0.328125 0.421875 +vt 0.625000 0.609375 +vt 0.609375 0.703125 +vt 0.609375 0.687500 +vt 0.609375 0.671875 +vt 0.312500 0.421875 +vt 0.312500 0.359375 +vt 0.609375 0.609375 +vt 0.578125 0.562500 +vt 0.296875 0.359375 +vt 0.296875 0.421875 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.375162 0.505581 +vt 0.393299 0.461795 +vt 0.437085 0.443658 +vt 0.480872 0.461795 +vt 0.499007 0.505581 +vt 0.480872 0.549367 +vt 0.437085 0.567504 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.393299 0.549367 +vt 0.437085 0.567504 +vt 0.480872 0.549367 +vt 0.499007 0.505581 +vt 0.480872 0.461795 +vt 0.437085 0.443658 +vt 0.393299 0.461795 +vt 0.375162 0.505581 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.437500 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.000000 +vt 0.437500 0.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 1.000000 +vt 0.562500 0.000000 +vt 0.375000 1.000000 +vt 0.375000 0.000000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.562500 +vt 0.000000 0.562500 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.687500 +vt 0.000000 0.687500 +vt 1.000000 0.750000 +vt 0.000000 0.750000 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 1.000000 0.125000 +vt 0.000000 0.125000 +vt 1.000000 0.187500 +vt 0.000000 0.187500 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt 1.000000 0.312500 +vt 0.000000 0.312500 +vt 1.000000 0.375000 +vt 0.000000 0.375000 +vt 1.000000 0.437500 +vt 0.000000 0.437500 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 1.000000 0.562500 +vt 0.000000 0.562500 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.687500 +vt 0.000000 0.687500 +vt 1.000000 0.750000 +vt 0.000000 0.750000 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 0.937500 +vt 0.000000 0.937500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.062500 +vt 0.000000 0.062500 +vt 1.000000 0.125000 +vt 0.000000 0.125000 +vt 1.000000 0.187500 +vt 0.000000 0.187500 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt 1.000000 0.312500 +vt 0.000000 0.312500 +vt 1.000000 0.375000 +vt 0.000000 0.375000 +vt 1.000000 0.437500 +vt 0.000000 0.437500 +vn -0.0120 0.0239 -0.9996 +vn -0.0000 0.0000 1.0000 +vn -0.0240 0.0478 -0.9986 +vn -0.0367 0.0731 -0.9966 +vn -0.0500 0.0997 -0.9938 +vn -0.0635 0.1266 -0.9899 +vn -0.0787 0.1569 -0.9845 +vn -0.0938 0.1870 -0.9779 +vn -0.1105 0.2203 -0.9691 +vn -0.1281 0.2553 -0.9583 +vn -0.1461 0.2913 -0.9454 +vn -0.1672 0.3332 -0.9279 +vn -0.1878 0.3743 -0.9081 +vn -0.2112 0.4210 -0.8821 +vn -0.2352 0.4688 -0.8514 +vn -0.2599 0.5180 -0.8149 +vn -0.2878 0.5737 -0.7669 +vn -0.3139 0.6257 -0.7141 +vn -0.3428 0.6833 -0.6447 +vn -0.3696 0.7367 -0.5663 +vn -0.3942 0.7858 -0.4765 +vn -0.4167 0.8306 -0.3694 +vn -0.4333 0.8638 -0.2571 +vn -0.4446 0.8862 -0.1304 +vn -0.4484 0.8938 -0.0001 +vn -0.4447 0.8864 0.1282 +vn -0.4340 0.8650 0.2517 +vn -0.4164 0.8300 0.3712 +vn -0.3957 0.7887 0.4704 +vn -0.3704 0.7383 0.5636 +vn -0.3442 0.6861 0.6410 +vn -0.3184 0.6346 0.7043 +vn -0.2905 0.5790 0.7618 +vn -0.2665 0.5313 0.8042 +vn -0.2413 0.4811 0.8428 +vn -0.2181 0.4348 0.8737 +vn -0.1963 0.3913 0.8991 +vn -0.1744 0.3477 0.9212 +vn -0.1556 0.3102 0.9379 +vn -0.1365 0.2720 0.9526 +vn -0.1194 0.2380 0.9639 +vn -0.1032 0.2057 0.9731 +vn -0.0875 0.1745 0.9808 +vn -0.0739 0.1473 0.9863 +vn -0.0602 0.1201 0.9909 +vn -0.0477 0.0951 0.9943 +vn -0.0355 0.0709 0.9969 +vn -0.0237 0.0473 0.9986 +vn -0.0127 0.0253 0.9996 +vn -0.0016 0.0032 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -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.9923 0.0000 0.1240 +vn -0.9923 0.0000 0.1240 +vn 0.0000 0.9923 0.1240 +vn 0.0000 -0.9923 0.1240 +vn -0.9808 -0.0000 -0.1951 +vn -0.8315 -0.0000 -0.5556 +vn -0.5556 -0.0000 -0.8315 +vn -0.1951 -0.0000 -0.9808 +vn 0.1951 -0.0000 -0.9808 +vn 0.5556 -0.0000 -0.8315 +vn 0.8315 -0.0000 -0.5556 +vn 0.9808 -0.0000 -0.1951 +vn 0.9808 0.0000 0.1951 +vn 0.8315 0.0000 0.5556 +vn 0.5556 0.0000 0.8315 +vn 0.1951 0.0000 0.9808 +vn -0.1951 0.0000 0.9808 +vn -0.5556 0.0000 0.8315 +vn -0.8315 0.0000 0.5556 +vn -0.9808 0.0000 0.1951 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 -0.0000 +vn 0.9239 -0.3827 0.0000 +vn -0.3827 0.9239 0.0000 +vn -0.3827 -0.9239 -0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.9239 0.3827 0.0000 +vn 0.3827 -0.9239 -0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.0048 -0.9114 -0.4114 +vn 0.6462 -0.6414 -0.4135 +vn 0.5563 -0.5600 0.6139 +vn 0.0038 -0.7886 0.6149 +vn -0.9337 0.0087 -0.3580 +vn -0.6584 -0.6446 -0.3885 +vn -0.5464 -0.5579 0.6247 +vn -0.7701 -0.0078 0.6378 +vn -0.6634 0.6677 -0.3377 +vn -0.5414 0.5374 0.6466 +vn 0.6521 0.6653 -0.3633 +vn -0.0042 0.9404 -0.3399 +vn 0.0040 0.7636 0.6456 +vn 0.5518 0.5400 0.6355 +vn 0.9191 0.0092 -0.3938 +vn 0.7826 -0.0076 0.6224 +vn -0.0082 -0.9048 -0.4257 +vn 0.6429 -0.6347 -0.4288 +vn -0.9365 0.0143 -0.3504 +vn -0.6616 -0.6383 -0.3934 +vn -0.6660 0.6728 -0.3220 +vn 0.6492 0.6710 -0.3580 +vn -0.0068 0.9456 -0.3251 +vn 0.9160 0.0157 -0.4009 +vn -0.0139 -0.8943 -0.4473 +vn 0.6377 -0.6238 -0.4518 +vn -0.9406 0.0236 -0.3385 +vn -0.6671 -0.6280 -0.4006 +vn -0.6696 0.6805 -0.2975 +vn 0.6442 0.6803 -0.3494 +vn -0.0111 0.9532 -0.3021 +vn 0.9110 0.0264 -0.4114 +vn -0.0205 -0.8874 -0.4604 +vn 0.6359 -0.6154 -0.4657 +vn -0.9431 0.0349 -0.3305 +vn -0.6748 -0.6174 -0.4043 +vn -0.6701 0.6864 -0.2824 +vn 0.6369 0.6902 -0.3434 +vn -0.0165 0.9575 -0.2877 +vn 0.9080 0.0389 -0.4172 +vn -0.0244 -0.8716 -0.4895 +vn 0.6258 -0.6013 -0.4967 +vn -0.9485 0.0373 -0.3145 +vn -0.6756 -0.6098 -0.4144 +vn -0.6766 0.6931 -0.2485 +vn 0.6375 0.6952 -0.3320 +vn -0.0168 0.9666 -0.2558 +vn 0.9008 0.0450 -0.4317 +vn -0.0349 -0.8583 -0.5119 +vn 0.6210 -0.5859 -0.5206 +vn -0.9526 0.0537 -0.2994 +vn -0.6871 -0.5928 -0.4201 +vn -0.6777 0.7015 -0.2205 +vn 0.6270 0.7100 -0.3205 +vn -0.0242 0.9731 -0.2292 +vn 0.8950 0.0643 -0.4412 +vn -0.0401 -0.8433 -0.5358 +vn 0.6122 -0.5718 -0.5461 +vn -0.9568 0.0569 -0.2851 +vn -0.6896 -0.5843 -0.4278 +vn -0.6819 0.7060 -0.1912 +vn 0.6263 0.7153 -0.3101 +vn -0.0247 0.9791 -0.2016 +vn 0.8887 0.0724 -0.4528 +vn -0.0511 -0.8220 -0.5671 +vn 0.6014 -0.5499 -0.5795 +vn -0.9621 0.0683 -0.2639 +vn -0.6984 -0.5671 -0.4366 +vn -0.6850 0.7128 -0.1502 +vn 0.6199 0.7275 -0.2941 +vn -0.0287 0.9862 -0.1628 +vn 0.8797 0.0908 -0.4667 +vn -0.0611 -0.8074 -0.5868 +vn 0.5952 -0.5336 -0.6008 +vn -0.9653 0.0802 -0.2484 +vn -0.7080 -0.5521 -0.4404 +vn -0.6854 0.7177 -0.1232 +vn 0.6121 0.7388 -0.2819 +vn -0.0334 0.9900 -0.1370 +vn 0.8738 0.1079 -0.4741 +vn -0.0710 -0.7742 -0.6290 +vn 0.5748 -0.5029 -0.6455 +vn -0.9719 0.0790 -0.2217 +vn -0.7100 -0.5376 -0.4549 +vn -0.6917 0.7191 -0.0662 +vn 0.6152 0.7433 -0.2628 +vn -0.0290 0.9961 -0.0834 +vn 0.8603 0.1210 -0.4952 +vn -0.0893 -0.7483 -0.6572 +vn 0.5641 -0.4737 -0.6763 +vn -0.9759 0.0988 -0.1944 +vn -0.7274 -0.5113 -0.4576 +vn -0.6894 0.7240 -0.0219 +vn 0.6015 0.7618 -0.2404 +vn -0.0364 0.9985 -0.0409 +vn 0.8504 0.1518 -0.5037 +vn -0.1005 -0.7164 -0.6904 +vn 0.5452 -0.4433 -0.7114 +vn -0.9805 0.0972 -0.1707 +vn -0.7310 -0.4965 -0.4681 +vn -0.6922 0.7212 0.0272 +vn 0.6037 0.7653 -0.2231 +vn -0.0313 0.9995 0.0052 +vn 0.8380 0.1664 -0.5196 +vn -0.1223 -0.6766 -0.7261 +vn 0.5254 -0.4013 -0.7502 +vn -0.9847 0.1099 -0.1350 +vn -0.7471 -0.4673 -0.4727 +vn -0.6894 0.7190 0.0885 +vn 0.5948 0.7800 -0.1943 +vn -0.0326 0.9974 0.0637 +vn 0.8233 0.1996 -0.5313 +vn -0.1397 -0.6465 -0.7500 +vn 0.5109 -0.3689 -0.7764 +vn -0.9869 0.1191 -0.1082 +vn -0.7600 -0.4451 -0.4735 +vn -0.6859 0.7157 0.1315 +vn 0.5878 0.7904 -0.1721 +vn -0.0332 0.9939 0.1050 +vn 0.8126 0.2255 -0.5373 +vn -0.1634 -0.5830 -0.7958 +vn 0.4741 -0.3076 -0.8250 +vn -0.9915 0.1107 -0.0675 +vn -0.7681 -0.4160 -0.4868 +vn -0.6836 0.6972 0.2157 +vn 0.5932 0.7924 -0.1419 +vn -0.0183 0.9827 0.1841 +vn 0.7890 0.2557 -0.5587 +vn -0.1943 -0.5383 -0.8200 +vn 0.4548 -0.2565 -0.8528 +vn -0.9913 0.1296 -0.0215 +vn -0.7937 -0.3788 -0.4759 +vn -0.6712 0.6880 0.2759 +vn 0.5772 0.8103 -0.1010 +vn -0.0222 0.9697 0.2431 +vn 0.7748 0.3019 -0.5553 +vn -0.2200 -0.4672 -0.8563 +vn 0.4131 -0.1880 -0.8910 +vn -0.9936 0.1115 0.0153 +vn -0.8002 -0.3496 -0.4873 +vn -0.6647 0.6565 0.3566 +vn 0.5878 0.8055 -0.0740 +vn 0.0010 0.9479 0.3185 +vn 0.7490 0.3323 -0.5733 +vn -0.2630 -0.3906 -0.8821 +vn 0.3751 -0.1057 -0.9209 +vn -0.9901 0.1161 0.0787 +vn -0.8281 -0.3021 -0.4723 +vn -0.6428 0.6228 0.4461 +vn 0.5788 0.8152 -0.0184 +vn 0.0114 0.9141 0.4053 +vn 0.7248 0.3906 -0.5674 +vn -0.2943 -0.3334 -0.8957 +vn 0.3463 -0.0443 -0.9371 +vn -0.9862 0.1130 0.1208 +vn -0.8459 -0.2703 -0.4597 +vn -0.6266 0.5940 0.5045 +vn 0.5762 0.8171 0.0189 +vn 0.0229 0.8865 0.4621 +vn 0.7075 0.4303 -0.5606 +vn -0.3395 -0.2294 -0.9122 +vn 0.2886 0.0604 -0.9555 +vn -0.9807 0.0862 0.1757 +vn -0.8638 -0.2231 -0.4517 +vn -0.5997 0.5277 0.6015 +vn 0.5869 0.8071 0.0641 +vn 0.0596 0.8304 0.5539 +vn 0.6726 0.4849 -0.5590 +vn -0.3840 -0.1663 -0.9082 +vn 0.2608 0.1346 -0.9559 +vn -0.9661 0.0880 0.2427 +vn -0.8935 -0.1852 -0.4092 +vn -0.5674 0.4881 0.6631 +vn 0.5753 0.8076 0.1295 +vn 0.0663 0.7841 0.6171 +vn 0.6592 0.5393 -0.5240 +vn -0.4315 -0.0381 -0.9013 +vn 0.1862 0.2588 -0.9478 +vn -0.9596 0.0335 0.2794 +vn -0.9042 -0.1356 -0.4051 +vn -0.5335 0.3864 0.7523 +vn 0.6032 0.7820 0.1568 +vn 0.1296 0.7032 0.6990 +vn 0.6138 0.5931 -0.5210 +vn -0.4937 0.0710 -0.8667 +vn 0.1315 0.3786 -0.9162 +vn -0.9315 -0.0008 0.3635 +vn -0.9354 -0.0872 -0.3427 +vn -0.4730 0.2847 0.8337 +vn 0.6083 0.7569 0.2390 +vn 0.1686 0.6005 0.7816 +vn 0.5878 0.6623 -0.4645 +vn -0.5329 0.1467 -0.8334 +vn 0.0917 0.4597 -0.8833 +vn -0.9150 -0.0342 0.4021 +vn -0.9502 -0.0589 -0.3060 +vn -0.4368 0.2115 0.8743 +vn 0.6196 0.7343 0.2772 +vn 0.2035 0.5320 0.8219 +vn 0.5687 0.7021 -0.4284 +vn -0.5845 0.2634 -0.7674 +vn 0.0270 0.5784 -0.8153 +vn -0.8912 -0.0968 0.4431 +vn -0.9662 -0.0152 -0.2574 +vn -0.3770 0.0798 0.9227 +vn 0.6448 0.6950 0.3181 +vn 0.2711 0.4141 0.8689 +vn 0.5334 0.7574 -0.3765 +vn -0.6246 0.3164 -0.7140 +vn 0.0034 0.6453 -0.7639 +vn -0.8567 -0.1331 0.4983 +vn -0.9817 -0.0068 -0.1900 +vn -0.3284 0.0095 0.9445 +vn 0.6522 0.6568 0.3785 +vn 0.2932 0.3348 0.8955 +vn 0.5335 0.7866 -0.3108 +vn -0.6584 0.4106 -0.6308 +vn -0.0517 0.7355 -0.6755 +vn -0.8429 -0.1950 0.5014 +vn -0.9876 0.0276 -0.1544 +vn -0.2811 -0.1133 0.9529 +vn 0.6819 0.6224 0.3841 +vn 0.3634 0.2325 0.9021 +vn 0.4997 0.8244 -0.2657 +vn -0.6958 0.4676 -0.5452 +vn -0.0796 0.8039 -0.5893 +vn -0.8007 -0.2556 0.5417 +vn -0.9964 0.0297 -0.0793 +vn -0.2190 -0.2170 0.9513 +vn 0.7020 0.5656 0.4328 +vn 0.4047 0.1238 0.9060 +vn 0.4987 0.8463 -0.1872 +vn -0.7145 0.5067 -0.4824 +vn -0.1011 0.8456 -0.5241 +vn -0.7837 -0.2944 0.5469 +vn -0.9984 0.0358 -0.0427 +vn -0.1869 -0.2855 0.9399 +vn 0.7185 0.5362 0.4429 +vn 0.4392 0.0608 0.8963 +vn 0.4910 0.8591 -0.1446 +vn -0.7358 0.5580 -0.3836 +vn -0.1305 0.8977 -0.4209 +vn -0.7585 -0.3536 0.5474 +vn -0.9989 0.0442 0.0112 +vn -0.1371 -0.3920 0.9097 +vn 0.7439 0.4920 0.4523 +vn 0.4930 -0.0368 0.8692 +vn 0.4786 0.8743 -0.0807 +vn -0.7519 0.5734 -0.3252 +vn -0.1367 0.9223 -0.3616 +vn -0.7291 -0.3931 0.5601 +vn -0.9980 0.0286 0.0562 +vn -0.1035 -0.4438 0.8901 +vn 0.7579 0.4502 0.4720 +vn 0.5120 -0.0948 0.8537 +vn 0.4888 0.8718 -0.0318 +vn -0.7584 0.6049 -0.2426 +vn -0.1569 0.9489 -0.2738 +vn -0.7203 -0.4325 0.5423 +vn -0.9952 0.0385 0.0893 +vn -0.0736 -0.5209 0.8504 +vn 0.7774 0.4270 0.4617 +vn 0.5558 -0.1589 0.8159 +vn 0.4746 0.8801 0.0119 +vn -0.7695 0.6145 -0.1739 +vn -0.1607 0.9658 -0.2031 +vn -0.6903 -0.4770 0.5439 +vn -0.9908 0.0188 0.1338 +vn -0.0386 -0.5780 0.8151 +vn 0.7947 0.3816 0.4719 +vn 0.5786 -0.2210 0.7851 +vn 0.4857 0.8719 0.0625 +vn -0.7724 0.6222 -0.1279 +vn -0.1656 0.9740 -0.1548 +vn -0.6806 -0.4997 0.5357 +vn -0.9877 0.0146 0.1557 +vn -0.0220 -0.6142 0.7888 +vn 0.8051 0.3633 0.4688 +vn 0.5972 -0.2541 0.7607 +vn 0.4856 0.8695 0.0900 +vn -0.7752 0.6283 -0.0649 +vn -0.1696 0.9815 -0.0887 +vn -0.6641 -0.5329 0.5244 +vn -0.9823 0.0044 0.1870 +vn 0.0022 -0.6626 0.7489 +vn 0.8198 0.3344 0.4649 +vn 0.6207 -0.3008 0.7240 +vn 0.4887 0.8629 0.1286 +vn -0.7790 0.6264 -0.0290 +vn -0.1675 0.9845 -0.0516 +vn -0.6476 -0.5558 0.5212 +vn -0.9780 -0.0116 0.2082 +vn 0.0183 -0.6870 0.7264 +vn 0.8288 0.3089 0.4665 +vn 0.6297 -0.3290 0.7037 +vn 0.4985 0.8532 0.1535 +vn -0.7758 0.6304 0.0262 +vn -0.1717 0.9851 0.0069 +vn -0.6423 -0.5778 0.5036 +vn -0.9731 -0.0132 0.2298 +vn 0.0336 -0.7263 0.6865 +vn 0.8401 0.2947 0.4552 +vn 0.6521 -0.3618 0.6662 +vn 0.4949 0.8495 0.1826 +vn -0.7777 0.6249 0.0678 +vn -0.1679 0.9845 0.0501 +vn -0.6240 -0.6038 0.4959 +vn -0.9671 -0.0326 0.2522 +vn 0.0511 -0.7531 0.6559 +vn 0.8507 0.2660 0.4533 +vn 0.6622 -0.3927 0.6382 +vn 0.5064 0.8364 0.2097 +vn -0.7747 0.6238 0.1039 +vn -0.1683 0.9817 0.0885 +vn -0.6197 -0.6181 0.4835 +vn -0.9631 -0.0367 0.2665 +vn 0.0604 -0.7762 0.6275 +vn 0.8580 0.2557 0.4454 +vn 0.6751 -0.4125 0.6116 +vn 0.5063 0.8314 0.2289 +vn -0.7721 0.6181 0.1477 +vn -0.1657 0.9769 0.1346 +vn -0.6085 -0.6395 0.4698 +vn -0.9570 -0.0494 0.2859 +vn 0.0742 -0.8029 0.5914 +vn 0.8678 0.2355 0.4375 +vn 0.6879 -0.4390 0.5779 +vn 0.5121 0.8205 0.2540 +vn -0.7713 0.6124 0.1733 +vn -0.1624 0.9734 0.1614 +vn -0.5993 -0.6537 0.4621 +vn -0.9527 -0.0610 0.2976 +vn 0.0830 -0.8173 0.5702 +vn 0.8739 0.2202 0.4333 +vn 0.6937 -0.4550 0.5582 +vn 0.5187 0.8115 0.2689 +vn -0.7644 0.6076 0.2156 +vn -0.1616 0.9650 0.2063 +vn -0.5971 -0.6675 0.4448 +vn -0.9474 -0.0646 0.3135 +vn 0.0915 -0.8415 0.5325 +vn 0.8817 0.2116 0.4216 +vn 0.7083 -0.4743 0.5227 +vn 0.5174 0.8048 0.2908 +vn -0.7630 0.5983 0.2446 +vn -0.1561 0.9589 0.2368 +vn -0.5851 -0.6846 0.4347 +vn -0.9418 -0.0809 0.3263 +vn 0.1017 -0.8564 0.5061 +vn 0.8890 0.1921 0.4157 +vn 0.7137 -0.4923 0.4982 +vn 0.5271 0.7922 0.3074 +vn -0.7589 0.5935 0.2679 +vn -0.1542 0.9528 0.2615 +vn -0.5827 -0.6928 0.4248 +vn -0.9383 -0.0854 0.3352 +vn 0.1064 -0.8683 0.4844 +vn 0.8933 0.1859 0.4091 +vn 0.7206 -0.5024 0.4778 +vn 0.5282 0.7866 0.3196 +vn -0.7562 0.5851 0.2930 +vn -0.1496 0.9458 0.2881 +vn -0.5748 -0.7055 0.4146 +vn -0.9334 -0.0973 0.3453 +vn 0.1136 -0.8805 0.4602 +vn 0.8991 0.1722 0.4024 +vn 0.7258 -0.5158 0.4552 +vn 0.5348 0.7765 0.3332 +vn -0.7551 0.5792 0.3071 +vn -0.1462 0.9417 0.3029 +vn -0.5688 -0.7136 0.4088 +vn -0.9304 -0.1062 0.3509 +vn 0.1182 -0.8868 0.4468 +vn 0.9026 0.1625 0.3987 +vn 0.7279 -0.5237 0.4426 +vn 0.5403 0.7694 0.3408 +vn -0.7513 0.5727 0.3279 +vn -0.1431 0.9348 0.3249 +vn -0.5653 -0.7218 0.3993 +vn -0.9266 -0.1129 0.3586 +vn 0.1225 -0.8963 0.4261 +vn 0.9067 0.1550 0.3921 +vn 0.7329 -0.5327 0.4232 +vn 0.5432 0.7624 0.3515 +vn -0.7508 0.5655 0.3412 +vn -0.1386 0.9304 0.3391 +vn -0.5574 -0.7311 0.3933 +vn -0.9231 -0.1244 0.3638 +vn 0.1278 -0.9019 0.4125 +vn 0.9104 0.1429 0.3881 +vn 0.7339 -0.5411 0.4104 +vn 0.5506 0.7538 0.3586 +vn -0.7524 0.5617 0.3440 +vn -0.1357 0.9298 0.3420 +vn -0.5511 -0.7366 0.3919 +vn -0.9215 -0.1330 0.3649 +vn 0.1309 -0.9029 0.4094 +vn 0.9121 0.1342 0.3872 +vn 0.7325 -0.5453 0.4075 +vn 0.5569 0.7484 0.3601 +vn -0.7526 0.5611 0.3444 +vn -0.1353 0.9297 0.3424 +vn -0.5501 -0.7375 0.3917 +vn -0.9212 -0.1342 0.3650 +vn 0.1314 -0.9031 0.4089 +vn 0.9124 0.1329 0.3871 +vn 0.7323 -0.5460 0.4070 +vn 0.5578 0.7477 0.3603 +vn -0.7526 0.5612 0.3444 +vn -0.6296 0.4742 0.6154 +vn -0.1162 0.7803 0.6145 +vn -0.4665 -0.6131 0.6375 +vn -0.7737 -0.1046 0.6249 +vn 0.1074 -0.7559 0.6459 +vn 0.7630 0.1191 0.6353 +vn 0.6148 -0.4539 0.6449 +vn 0.4618 0.6316 0.6227 +vn 0.0000 -0.5556 -0.8314 +vn 0.0000 -0.1951 -0.9808 +vn 0.0000 0.1951 -0.9808 +vn 0.0000 0.5556 -0.8314 +vn 0.0000 0.9808 0.1951 +vn 0.0000 0.8314 0.5556 +vn 0.0000 0.8314 -0.5556 +vn 0.0000 0.9808 -0.1951 +vn 0.0000 -0.8314 0.5556 +vn 0.0000 -0.9808 0.1951 +vn 0.0000 -0.1951 0.9808 +vn 0.0000 -0.5556 0.8314 +vn 0.0000 -0.9808 -0.1951 +vn 0.0000 -0.8314 -0.5556 +vn 0.0000 0.5556 0.8314 +vn 0.0000 0.1951 0.9808 +vn -0.8314 -0.5556 0.0000 +vn -0.9808 -0.1951 0.0000 +vn -0.9808 0.1951 0.0000 +vn -0.8314 0.5556 0.0000 +vn 0.1951 0.9808 0.0000 +vn 0.5556 0.8314 0.0000 +vn -0.5556 0.8314 0.0000 +vn -0.1951 0.9808 0.0000 +vn 0.5556 -0.8314 0.0000 +vn 0.1951 -0.9808 0.0000 +vn 0.9808 -0.1951 0.0000 +vn 0.8314 -0.5556 0.0000 +vn -0.1951 -0.9808 0.0000 +vn -0.5556 -0.8314 0.0000 +vn 0.8314 0.5556 0.0000 +vn 0.9808 0.1951 0.0000 +vn 0.7139 0.6857 -0.1420 +vn 0.7139 -0.6857 -0.1420 +vn 0.6725 -0.6857 -0.2785 +vn 0.6725 0.6857 -0.2785 +vn -0.2785 0.6857 -0.6725 +vn -0.2785 -0.6857 -0.6725 +vn -0.4044 -0.6857 -0.6052 +vn -0.4044 0.6857 -0.6052 +vn -0.5147 0.6857 0.5147 +vn -0.5147 -0.6857 0.5147 +vn -0.4044 -0.6857 0.6052 +vn -0.4044 0.6857 0.6052 +vn 0.6052 0.6857 0.4044 +vn 0.6052 -0.6857 0.4044 +vn 0.6725 -0.6857 0.2785 +vn 0.6725 0.6857 0.2785 +vn 0.2785 0.6857 -0.6725 +vn 0.2785 -0.6857 -0.6725 +vn 0.1420 -0.6857 -0.7139 +vn 0.1420 0.6857 -0.7139 +vn -0.7279 0.6857 0.0000 +vn -0.7279 -0.6857 0.0000 +vn -0.7139 -0.6857 0.1420 +vn -0.7139 0.6857 0.1420 +vn -0.7139 0.6857 -0.1420 +vn -0.7139 -0.6857 -0.1420 +vn 0.1420 0.6857 0.7139 +vn 0.1420 -0.6857 0.7139 +vn 0.2785 -0.6857 0.6725 +vn 0.2785 0.6857 0.6725 +vn 0.6052 -0.6857 -0.4044 +vn 0.6052 0.6857 -0.4044 +vn -0.5147 -0.6857 -0.5147 +vn -0.5147 0.6857 -0.5147 +vn -0.2785 -0.6857 0.6725 +vn -0.2785 0.6857 0.6725 +vn 0.7139 -0.6857 0.1420 +vn 0.7139 0.6857 0.1420 +vn 0.0000 -0.6857 -0.7279 +vn 0.0000 0.6857 -0.7279 +vn -0.6725 -0.6857 0.2785 +vn -0.6725 0.6857 0.2785 +vn 0.4044 -0.6857 0.6052 +vn 0.4044 0.6857 0.6052 +vn 0.5147 -0.6857 -0.5147 +vn 0.5147 0.6857 -0.5147 +vn -0.6052 -0.6857 -0.4044 +vn -0.6052 0.6857 -0.4044 +vn -0.1420 -0.6857 0.7139 +vn -0.1420 0.6857 0.7139 +vn 0.7279 -0.6857 0.0000 +vn 0.7279 0.6857 0.0000 +vn -0.1420 -0.6857 -0.7139 +vn -0.1420 0.6857 -0.7139 +vn -0.6052 -0.6857 0.4044 +vn -0.6052 0.6857 0.4044 +vn 0.5147 -0.6857 0.5147 +vn 0.5147 0.6857 0.5147 +vn 0.4044 -0.6857 -0.6052 +vn 0.4044 0.6857 -0.6052 +vn -0.6725 -0.6857 -0.2785 +vn -0.6725 0.6857 -0.2785 +vn 0.0000 -0.6857 0.7279 +vn 0.0000 0.6857 0.7279 +vn 0.0000 -0.7299 -0.6836 +vn 0.0000 0.7298 -0.6836 +vn 0.0000 -0.7298 0.6836 +vn 0.0000 0.7299 0.6836 +vn -0.7462 0.0000 0.6657 +vn -0.6894 0.2855 0.6657 +vn -0.9239 0.3827 0.0000 +vn -0.5276 0.5276 0.6657 +vn -0.2855 0.6894 0.6657 +vn 0.0000 0.7462 0.6657 +vn 0.2855 0.6894 0.6657 +vn 0.5276 0.5276 0.6657 +vn 0.6894 0.2855 0.6657 +vn 0.7462 0.0000 0.6657 +vn 0.6894 -0.2855 0.6657 +vn 0.5276 -0.5276 0.6657 +vn 0.2855 -0.6894 0.6657 +vn 0.0000 -0.7462 0.6657 +vn -0.2855 -0.6894 0.6657 +vn -0.5276 -0.5276 0.6657 +vn -0.6894 -0.2855 0.6657 +vn -0.9239 -0.3827 0.0000 +vn -0.7462 0.0000 -0.6657 +vn -0.6894 0.2856 -0.6657 +vn -0.5276 0.5276 -0.6657 +vn -0.2855 0.6894 -0.6657 +vn 0.0000 0.7462 -0.6657 +vn 0.2855 0.6894 -0.6657 +vn 0.5276 0.5276 -0.6657 +vn 0.6894 0.2856 -0.6657 +vn 0.7462 0.0000 -0.6657 +vn 0.6894 -0.2856 0.6657 +vn 0.6894 -0.2855 -0.6657 +vn 0.5276 -0.5276 -0.6657 +vn 0.2856 -0.6894 0.6657 +vn 0.2855 -0.6894 -0.6657 +vn 0.0000 -0.7462 -0.6657 +vn -0.2855 -0.6894 -0.6657 +vn -0.5276 -0.5276 -0.6657 +vn -0.6894 -0.2855 -0.6657 +vn -0.6508 0.0000 -0.7592 +vn -0.6012 0.2490 -0.7592 +vn -0.4602 0.4602 -0.7592 +vn -0.2490 0.6012 -0.7592 +vn 0.0000 0.6508 -0.7592 +vn 0.2490 0.6012 -0.7592 +vn 0.4602 0.4602 -0.7592 +vn 0.6012 0.2490 -0.7592 +vn 0.6508 0.0000 -0.7592 +vn 0.6012 -0.2490 -0.7592 +vn 0.4602 -0.4602 -0.7592 +vn 0.2490 -0.6012 -0.7592 +vn 0.0000 -0.6508 -0.7592 +vn -0.2490 -0.6012 -0.7592 +vn -0.4602 -0.4602 -0.7592 +vn -0.6012 -0.2490 -0.7592 +vn 0.0000 0.7902 -0.6128 +vn 0.2856 0.6894 0.6657 +vn 0.3024 0.7300 -0.6128 +vn 0.5587 0.5587 -0.6128 +vn 0.7300 0.3024 -0.6128 +vn 0.7902 0.0000 -0.6128 +vn 0.7300 -0.3024 -0.6128 +vn 0.5587 -0.5587 -0.6128 +vn 0.3024 -0.7300 -0.6128 +vn 0.0000 -0.7902 -0.6128 +vn -0.2856 -0.6894 0.6657 +vn -0.3024 -0.7300 -0.6128 +vn -0.5587 -0.5587 -0.6128 +vn -0.7300 -0.3024 -0.6128 +vn -0.7902 0.0000 -0.6128 +vn -0.7300 0.3024 -0.6128 +vn -0.5587 0.5588 -0.6128 +vn -0.3024 0.7300 -0.6128 +vn -0.3024 0.7300 0.6128 +vn 0.0000 0.7902 0.6128 +vn -0.2759 0.6660 0.6930 +vn 0.0000 0.7209 0.6930 +vn -0.5098 0.5098 -0.6930 +vn -0.2759 0.6661 -0.6930 +vn -0.5098 0.5098 0.6930 +vn 0.0000 0.7209 -0.6930 +vn -0.5587 0.5587 0.6128 +vn -0.6661 0.2759 -0.6930 +vn -0.6660 0.2759 0.6930 +vn -0.7300 0.3024 0.6128 +vn -0.7209 0.0000 -0.6930 +vn -0.7209 0.0000 0.6930 +vn -0.7902 0.0000 0.6128 +vn -0.6661 -0.2759 -0.6930 +vn -0.6660 -0.2759 0.6930 +vn -0.6894 -0.2856 -0.6657 +vn -0.7300 -0.3024 0.6128 +vn -0.5098 -0.5098 -0.6930 +vn -0.5098 -0.5098 0.6930 +vn -0.5587 -0.5587 0.6128 +vn -0.2759 -0.6660 -0.6930 +vn -0.2759 -0.6660 0.6930 +vn -0.2856 -0.6894 -0.6657 +vn -0.3024 -0.7300 0.6128 +vn 0.0000 -0.7209 -0.6930 +vn 0.0000 -0.7209 0.6930 +vn 0.0000 -0.7902 0.6128 +vn 0.2759 -0.6660 -0.6930 +vn 0.2759 -0.6661 0.6930 +vn 0.3024 -0.7300 0.6128 +vn 0.5098 -0.5098 -0.6930 +vn 0.5098 -0.5098 0.6930 +vn 0.5587 -0.5588 0.6128 +vn 0.6660 -0.2759 -0.6930 +vn 0.6661 -0.2759 0.6930 +vn 0.7300 -0.3024 0.6128 +vn 0.7209 0.0000 -0.6930 +vn 0.7209 0.0000 0.6930 +vn 0.7902 0.0000 0.6128 +vn 0.6660 0.2759 -0.6930 +vn 0.6661 0.2759 0.6930 +vn 0.6894 0.2855 -0.6657 +vn 0.7300 0.3024 0.6128 +vn 0.5098 0.5098 -0.6930 +vn 0.5098 0.5098 0.6930 +vn 0.5587 0.5587 0.6128 +vn 0.2759 0.6660 -0.6930 +vn 0.2759 0.6660 0.6930 +vn 0.2856 0.6894 -0.6657 +vn 0.3024 0.7300 0.6128 +vn -0.5587 0.5587 -0.6128 +vn 0.7301 0.3024 0.6128 +vn 0.5587 0.5588 0.6128 +vn 0.2759 0.6661 0.6930 +vn 0.0160 -0.0413 0.9990 +vn 0.0335 -0.0837 0.9959 +vn 0.0534 -0.1278 0.9904 +vn 0.0776 -0.1742 0.9816 +vn 0.1040 -0.2215 0.9696 +vn 0.1366 -0.2710 0.9528 +vn 0.1739 -0.3214 0.9308 +vn 0.2150 -0.3719 0.9030 +vn 0.2664 -0.4230 0.8661 +vn 0.3219 -0.4721 0.8207 +vn 0.3859 -0.5180 0.7634 +vn 0.4582 -0.5573 0.6925 +vn 0.5311 -0.5883 0.6098 +vn 0.6092 -0.6053 0.5124 +vn 0.6815 -0.6086 0.4064 +vn 0.7468 -0.5969 0.2932 +vn 0.8016 -0.5687 0.1846 +vn 0.8441 -0.5304 0.0788 +vn 0.8745 -0.4847 -0.0152 +vn 0.8946 -0.4362 -0.0976 +vn 0.9065 -0.3855 -0.1722 +vn 0.9124 -0.3386 -0.2300 +vn 0.9138 -0.2927 -0.2817 +vn 0.9122 -0.2498 -0.3250 +vn 0.9087 -0.2107 -0.3604 +vn 0.9035 -0.1733 -0.3921 +vn 0.8977 -0.1396 -0.4179 +vn 0.8916 -0.1089 -0.4396 +vn 0.8853 -0.0808 -0.4579 +vn 0.8790 -0.0552 -0.4735 +vn 0.8723 -0.0304 -0.4880 +vn 0.8655 -0.0070 -0.5009 +vn 0.0052 0.9063 0.4226 +vn 0.6581 0.6399 0.3966 +vn 0.5479 0.5577 -0.6235 +vn -0.0025 0.7879 -0.6158 +vn -0.9192 -0.0131 0.3935 +vn -0.6455 0.6370 0.4213 +vn -0.5546 0.5591 -0.6163 +vn -0.7806 0.0072 -0.6249 +vn -0.6525 -0.6694 0.3550 +vn -0.5502 -0.5402 -0.6367 +vn 0.6639 -0.6712 0.3297 +vn 0.0044 -0.9445 0.3283 +vn -0.0027 -0.7644 -0.6447 +vn 0.5432 -0.5384 -0.6441 +vn 0.9336 -0.0123 0.3582 +vn 0.7722 0.0074 -0.6353 +vn 0.0120 0.8909 0.4539 +vn 0.6648 0.6250 0.4091 +vn -0.9134 -0.0283 0.4060 +vn -0.6396 0.6213 0.4527 +vn -0.6467 -0.6823 0.3408 +vn 0.6681 -0.6823 0.2966 +vn 0.0094 -0.9554 0.2953 +vn 0.9386 -0.0256 0.3439 +vn 0.0204 0.8680 0.4961 +vn 0.6713 0.6077 0.4243 +vn -0.9041 -0.0455 0.4248 +vn -0.6287 0.5987 0.4963 +vn -0.6418 -0.6959 0.3223 +vn 0.6750 -0.6947 0.2485 +vn 0.0136 -0.9684 0.2487 +vn 0.9460 -0.0381 0.3218 +vn 0.0332 0.8465 0.5313 +vn 0.6838 0.5864 0.4341 +vn -0.8949 -0.0689 0.4408 +vn -0.6191 0.5757 0.5341 +vn -0.6309 -0.7132 0.3055 +vn 0.6789 -0.7051 0.2046 +vn 0.0216 -0.9780 0.2073 +vn 0.9527 -0.0557 0.2988 +vn 0.0449 0.8190 0.5720 +vn 0.6917 0.5692 0.4445 +vn -0.8820 -0.0880 0.4630 +vn -0.6033 0.5478 0.5795 +vn -0.6257 -0.7247 0.2887 +vn 0.6856 -0.7123 0.1504 +vn 0.0245 -0.9871 0.1583 +vn 0.9608 -0.0639 0.2698 +vn 0.0639 0.7865 0.6142 +vn 0.7067 0.5456 0.4504 +vn -0.8650 -0.1170 0.4879 +vn -0.5837 0.5128 0.6295 +vn -0.6136 -0.7420 0.2699 +vn 0.6908 -0.7179 0.0864 +vn 0.0314 -0.9942 0.1025 +vn 0.9698 -0.0768 0.2315 +vn 0.0848 0.7589 0.6456 +vn 0.7232 0.5239 0.4501 +vn -0.8493 -0.1453 0.5075 +vn -0.5652 0.4821 0.6694 +vn -0.5998 -0.7588 0.2537 +vn 0.6939 -0.7193 0.0332 +vn 0.0400 -0.9976 0.0569 +vn 0.9766 -0.0881 0.1963 +vn 0.1070 0.7167 0.6891 +vn 0.7354 0.5064 0.4501 +vn -0.8216 -0.1765 0.5420 +vn -0.5326 0.4345 0.7263 +vn -0.5905 -0.7707 0.2394 +vn 0.6977 -0.7148 -0.0469 +vn 0.0388 -0.9992 -0.0066 +vn 0.9858 -0.0855 0.1444 +vn 0.1427 0.6755 0.7234 +vn 0.7595 0.4816 0.4371 +vn -0.7906 -0.2204 0.5713 +vn -0.4962 0.3850 0.7782 +vn -0.5679 -0.7930 0.2204 +vn 0.6980 -0.7046 -0.1276 +vn 0.0489 -0.9963 -0.0704 +vn 0.9924 -0.0898 0.0839 +vn 0.1761 0.6334 0.7535 +vn 0.7769 0.4668 0.4224 +vn -0.7537 -0.2611 0.6031 +vn -0.4534 0.3322 0.8271 +vn -0.5496 -0.8091 0.2079 +vn 0.6952 -0.6879 -0.2085 +vn 0.0501 -0.9902 -0.1303 +vn 0.9965 -0.0800 0.0226 +vn 0.2218 0.5794 0.7843 +vn 0.7975 0.4548 0.3965 +vn -0.6970 -0.3176 0.6429 +vn -0.3905 0.2598 0.8832 +vn -0.5222 -0.8301 0.1957 +vn 0.6843 -0.6574 -0.3154 +vn 0.0480 -0.9776 -0.2049 +vn 0.9964 -0.0570 -0.0623 +vn 0.2756 0.5387 0.7961 +vn 0.8225 0.4425 0.3572 +vn -0.6440 -0.3740 0.6673 +vn -0.3288 0.2006 0.9228 +vn -0.4870 -0.8558 0.1745 +vn 0.6722 -0.6218 -0.4019 +vn 0.0581 -0.9610 -0.2703 +vn 0.9893 -0.0381 -0.1405 +vn 0.3266 0.4874 0.8098 +vn 0.8338 0.4491 0.3209 +vn -0.5651 -0.4371 0.6997 +vn -0.2458 0.1209 0.9617 +vn -0.4513 -0.8765 0.1676 +vn 0.6433 -0.5733 -0.5074 +vn 0.0454 -0.9406 -0.3364 +vn 0.9731 0.0106 -0.2302 +vn 0.3950 0.4463 0.8029 +vn 0.8504 0.4570 0.2606 +vn -0.4776 -0.5081 0.7167 +vn -0.1509 0.0470 0.9874 +vn -0.3995 -0.9056 0.1422 +vn 0.6079 -0.5095 -0.6089 +vn 0.0480 -0.9108 -0.4100 +vn 0.9425 0.0614 -0.3284 +vn 0.4510 0.4204 0.7873 +vn 0.8567 0.4718 0.2085 +vn -0.3998 -0.5647 0.7219 +vn -0.0673 -0.0089 0.9977 +vn -0.3548 -0.9275 0.1177 +vn 0.5730 -0.4533 -0.6828 +vn 0.0474 -0.8835 -0.4660 +vn 0.9090 0.1098 -0.4021 +vn 0.5108 0.3833 0.7695 +vn 0.8447 0.5112 0.1585 +vn -0.2753 -0.6352 0.7215 +vn 0.0521 -0.0899 0.9946 +vn -0.2909 -0.9513 0.1019 +vn 0.5020 -0.3755 -0.7790 +vn 0.0254 -0.8523 -0.5225 +vn 0.8473 0.1987 -0.4926 +vn 0.5723 0.3725 0.7305 +vn 0.8308 0.5487 0.0930 +vn -0.1676 -0.6920 0.7022 +vn 0.1607 -0.1402 0.9770 +vn -0.2276 -0.9718 0.0615 +vn 0.4393 -0.2945 -0.8487 +vn 0.0209 -0.8119 -0.5835 +vn 0.7774 0.2735 -0.5664 +vn 0.6131 0.3662 0.6999 +vn 0.8068 0.5882 0.0543 +vn -0.0697 -0.7328 0.6768 +vn 0.2521 -0.1792 0.9510 +vn -0.1723 -0.9845 0.0327 +vn 0.3762 -0.2329 -0.8968 +vn 0.0085 -0.7837 -0.6210 +vn 0.7109 0.3419 -0.6146 +vn 0.6515 0.3702 0.6621 +vn 0.7742 0.6328 0.0132 +vn 0.0305 -0.7671 0.6408 +vn 0.3442 -0.2078 0.9156 +vn -0.1134 -0.9935 -0.0055 +vn 0.3078 -0.1668 -0.9367 +vn -0.0018 -0.7507 -0.6606 +vn 0.6325 0.4121 -0.6558 +vn 0.6767 0.3838 0.6283 +vn 0.7455 0.6662 -0.0193 +vn 0.1007 -0.7869 0.6088 +vn 0.4097 -0.2174 0.8859 +vn -0.0723 -0.9965 -0.0424 +vn 0.2603 -0.1173 -0.9583 +vn -0.0074 -0.7212 -0.6927 +vn 0.5732 0.4591 -0.6787 +vn 0.6961 0.3898 0.6029 +vn 0.7063 0.7071 -0.0334 +vn 0.1876 -0.8023 0.5667 +vn 0.4812 -0.2335 0.8449 +vn -0.0193 -0.9972 -0.0721 +vn 0.1943 -0.0722 -0.9783 +vn -0.0195 -0.7010 -0.7129 +vn 0.4981 0.5177 -0.6955 +vn 0.7111 0.4094 0.5716 +vn 0.6672 0.7429 -0.0548 +vn 0.2565 -0.8104 0.5267 +vn 0.5402 -0.2329 0.8086 +vn 0.0225 -0.9936 -0.1107 +vn 0.1421 -0.0264 -0.9895 +vn -0.0264 -0.6724 -0.7397 +vn 0.4308 0.5633 -0.7050 +vn 0.7180 0.4231 0.5525 +vn 0.6379 0.7675 -0.0636 +vn 0.3051 -0.8126 0.4965 +vn 0.5796 -0.2305 0.7816 +vn 0.0526 -0.9892 -0.1371 +vn 0.1048 0.0017 -0.9945 +vn -0.0316 -0.6547 -0.7552 +vn 0.3833 0.5937 -0.7075 +vn 0.7233 0.4373 0.5343 +vn 0.6027 0.7950 -0.0682 +vn 0.3595 -0.8116 0.4604 +vn 0.6216 -0.2271 0.7497 +vn 0.0876 -0.9823 -0.1653 +vn 0.0609 0.0303 -0.9977 +vn -0.0372 -0.6373 -0.7697 +vn 0.3272 0.6274 -0.7066 +vn 0.7251 0.4545 0.5173 +vn 0.5739 0.8155 -0.0749 +vn 0.3980 -0.8087 0.4330 +vn 0.6518 -0.2180 0.7263 +vn 0.1113 -0.9752 -0.1915 +vn 0.0305 0.0552 -0.9980 +vn -0.0414 -0.6186 -0.7846 +vn 0.2857 0.6504 -0.7038 +vn 0.7256 0.4659 0.5064 +vn 0.5473 0.8336 -0.0743 +vn 0.4343 -0.8039 0.4062 +vn 0.6782 -0.2120 0.7036 +vn 0.1353 -0.9678 -0.2122 +vn 0.0003 0.0729 -0.9973 +vn -0.0449 -0.6064 -0.7938 +vn 0.2462 0.6713 -0.6990 +vn 0.7245 0.4793 0.4953 +vn 0.5166 0.8531 -0.0721 +vn 0.4728 -0.7967 0.3764 +vn 0.7054 -0.2036 0.6789 +vn 0.1617 -0.9583 -0.2356 +vn -0.0320 0.0917 -0.9952 +vn -0.0479 -0.5927 -0.8040 +vn 0.2023 0.6931 -0.6919 +vn 0.7222 0.4915 0.4866 +vn 0.4903 0.8688 -0.0693 +vn 0.5040 -0.7889 0.3515 +vn 0.7268 -0.1946 0.6587 +vn 0.1833 -0.9492 -0.2557 +vn -0.0584 0.1072 -0.9925 +vn -0.0501 -0.5805 -0.8127 +vn 0.1659 0.7101 -0.6843 +vn 0.7192 0.5020 0.4802 +vn 0.4654 0.8827 -0.0645 +vn 0.5325 -0.7804 0.3277 +vn 0.7456 -0.1863 0.6398 +vn 0.2039 -0.9398 -0.2741 +vn -0.0828 0.1198 -0.9893 +vn -0.0514 -0.5701 -0.8199 +vn 0.1317 0.7249 -0.6761 +vn 0.7153 0.5142 0.4732 +vn 0.4464 0.8925 -0.0641 +vn 0.5515 -0.7737 0.3117 +vn 0.7582 -0.1758 0.6278 +vn 0.2159 -0.9323 -0.2901 +vn -0.0984 0.1325 -0.9863 +vn -0.0534 -0.5582 -0.8280 +vn 0.1088 0.7346 -0.6697 +vn 0.7122 0.5227 0.4686 +vn 0.4324 0.8995 -0.0630 +vn 0.5656 -0.7683 0.2997 +vn 0.7674 -0.1681 0.6188 +vn 0.2249 -0.9265 -0.3017 +vn -0.1102 0.1412 -0.9838 +vn -0.0551 -0.5498 -0.8335 +vn 0.0918 0.7415 -0.6646 +vn 0.8670 0.4407 0.2323 +vn 0.6224 0.7546 -0.2076 +vn 0.7606 -0.6438 0.0837 +vn 0.9249 -0.1386 0.3540 +vn 0.4705 -0.7760 -0.4201 +vn 0.1702 0.1210 -0.9779 +vn 0.2260 -0.4580 -0.8597 +vn 0.3344 0.6221 -0.7079 +vn -0.9239 0.0000 -0.3827 +vn -0.8314 0.0000 -0.5556 +vn -0.7071 0.0000 -0.7071 +vn -0.5556 0.0000 -0.8314 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.5556 0.0000 -0.8314 +vn 0.7071 0.0000 -0.7071 +vn 0.8314 0.0000 -0.5556 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.8314 0.0000 0.5556 +vn 0.7071 0.0000 0.7071 +vn 0.5556 0.0000 0.8314 +vn 0.3827 0.0000 0.9239 +vn -0.3827 0.0000 0.9239 +vn -0.5556 0.0000 0.8314 +vn -0.7071 0.0000 0.7071 +vn -0.8314 0.0000 0.5556 +vn -0.9239 0.0000 0.3827 +g Circle.002_Circle.002_main +s off +f 2/1/1 1/2/1 8/3/1 7/4/1 6/5/1 5/6/1 4/7/1 3/8/1 +f 9/9/2 11/10/2 12/11/2 13/12/2 14/13/2 15/14/2 16/15/2 10/16/2 +f 18/17/3 17/18/3 24/19/3 23/20/3 22/21/3 21/22/3 20/23/3 19/24/3 +f 26/25/4 25/26/4 32/27/4 31/28/4 30/29/4 29/30/4 28/31/4 27/32/4 +f 34/33/5 33/34/5 40/35/5 39/36/5 38/37/5 37/38/5 36/39/5 35/40/5 +f 42/41/6 41/42/6 48/43/6 47/44/6 46/45/6 45/46/6 44/47/6 43/48/6 +f 50/49/7 49/50/7 56/51/7 55/52/7 54/53/7 53/54/7 52/55/7 51/56/7 +f 58/57/8 57/58/8 64/59/8 63/60/8 62/61/8 61/62/8 60/63/8 59/64/8 +f 66/65/9 65/66/9 72/67/9 71/68/9 70/69/9 69/70/9 68/71/9 67/72/9 +f 74/73/10 73/74/10 80/75/10 79/76/10 78/77/10 77/78/10 76/79/10 75/80/10 +f 82/81/11 81/82/11 88/83/11 87/84/11 86/85/11 85/86/11 84/87/11 83/88/11 +f 90/89/12 89/90/12 96/91/12 95/92/12 94/93/12 93/94/12 92/95/12 91/96/12 +f 98/97/13 97/98/13 104/99/13 103/100/13 102/101/13 101/102/13 100/103/13 99/104/13 +f 106/105/14 105/106/14 112/107/14 111/108/14 110/109/14 109/110/14 108/111/14 107/112/14 +f 114/113/15 113/114/15 120/115/15 119/116/15 118/117/15 117/118/15 116/119/15 115/120/15 +f 122/121/16 121/122/16 128/123/16 127/124/16 126/125/16 125/126/16 124/127/16 123/128/16 +f 130/129/17 129/130/17 136/131/17 135/132/17 134/133/17 133/134/17 132/135/17 131/136/17 +f 138/137/18 137/138/18 144/139/18 143/140/18 142/141/18 141/142/18 140/143/18 139/144/18 +f 146/145/19 145/146/19 152/147/19 151/148/19 150/149/19 149/150/19 148/151/19 147/152/19 +f 154/153/20 153/154/20 160/155/20 159/156/20 158/157/20 157/158/20 156/159/20 155/160/20 +f 162/161/21 161/162/21 168/163/21 167/164/21 166/165/21 165/166/21 164/167/21 163/168/21 +f 170/169/22 169/170/22 176/171/22 175/172/22 174/173/22 173/174/22 172/175/22 171/176/22 +f 178/177/23 177/178/23 184/179/23 183/180/23 182/181/23 181/182/23 180/183/23 179/184/23 +f 186/185/24 185/186/24 192/187/24 191/188/24 190/189/24 189/190/24 188/191/24 187/192/24 +f 194/193/25 193/194/25 200/195/25 199/196/25 198/197/25 197/198/25 196/199/25 195/200/25 +f 202/201/26 201/202/26 208/203/26 207/204/26 206/205/26 205/206/26 204/207/26 203/208/26 +f 210/209/27 209/210/27 216/211/27 215/212/27 214/213/27 213/214/27 212/215/27 211/216/27 +f 218/217/28 217/218/28 224/219/28 223/220/28 222/221/28 221/222/28 220/223/28 219/224/28 +f 226/225/29 225/226/29 232/227/29 231/228/29 230/229/29 229/230/29 228/231/29 227/232/29 +f 234/233/30 233/234/30 240/235/30 239/236/30 238/237/30 237/238/30 236/239/30 235/240/30 +f 242/241/31 241/242/31 248/243/31 247/244/31 246/245/31 245/246/31 244/247/31 243/248/31 +f 250/249/32 249/250/32 256/251/32 255/252/32 254/253/32 253/254/32 252/255/32 251/256/32 +f 258/257/33 257/258/33 264/259/33 263/260/33 262/261/33 261/262/33 260/263/33 259/264/33 +f 266/265/34 265/266/34 272/267/34 271/268/34 270/269/34 269/270/34 268/271/34 267/272/34 +f 274/273/35 273/274/35 280/275/35 279/276/35 278/277/35 277/278/35 276/279/35 275/280/35 +f 282/281/36 281/282/36 288/283/36 287/284/36 286/285/36 285/286/36 284/287/36 283/288/36 +f 290/289/37 289/290/37 296/291/37 295/292/37 294/293/37 293/294/37 292/295/37 291/296/37 +f 298/297/38 297/298/38 304/299/38 303/300/38 302/301/38 301/302/38 300/303/38 299/304/38 +f 306/305/39 305/306/39 312/307/39 311/308/39 310/309/39 309/310/39 308/311/39 307/312/39 +f 314/313/40 313/314/40 320/315/40 319/316/40 318/317/40 317/318/40 316/319/40 315/320/40 +f 322/321/41 321/322/41 328/323/41 327/324/41 326/325/41 325/326/41 324/327/41 323/328/41 +f 330/329/42 329/330/42 336/331/42 335/332/42 334/333/42 333/334/42 332/335/42 331/336/42 +f 338/337/43 337/338/43 344/339/43 343/340/43 342/341/43 341/342/43 340/343/43 339/344/43 +f 346/345/44 345/346/44 352/347/44 351/348/44 350/349/44 349/350/44 348/351/44 347/352/44 +f 354/353/45 353/354/45 360/355/45 359/356/45 358/357/45 357/358/45 356/359/45 355/360/45 +f 362/361/46 361/362/46 368/363/46 367/364/46 366/365/46 365/366/46 364/367/46 363/368/46 +f 370/369/47 369/370/47 376/371/47 375/372/47 374/373/47 373/374/47 372/375/47 371/376/47 +f 378/377/48 377/378/48 384/379/48 383/380/48 382/381/48 381/382/48 380/383/48 379/384/48 +f 386/385/49 385/386/49 392/387/49 391/388/49 390/389/49 389/390/49 388/391/49 387/392/49 +f 394/393/50 393/394/50 400/395/50 399/396/50 398/397/50 397/398/50 396/399/50 395/400/50 +f 402/401/2 401/402/2 408/403/2 407/404/2 406/405/2 405/406/2 404/407/2 403/408/2 +f 410/409/2 409/410/2 416/411/2 415/412/2 414/413/2 413/414/2 412/415/2 411/416/2 +f 418/417/2 417/418/2 424/419/2 423/420/2 422/421/2 421/422/2 420/423/2 419/424/2 +f 427/425/51 430/426/51 432/427/51 431/428/51 +f 428/429/2 429/430/2 430/431/2 427/432/2 +f 425/433/52 429/434/52 428/435/52 426/436/52 +f 432/437/53 425/438/53 426/439/53 431/440/53 +f 437/441/52 435/442/52 439/443/52 440/444/52 +f 434/445/51 436/446/51 433/447/51 438/448/51 +f 439/449/54 438/450/54 433/451/54 440/452/54 +f 434/453/2 438/454/2 439/455/2 435/456/2 +f 433/457/53 436/458/53 437/459/53 440/460/53 +f 436/461/55 434/462/55 435/463/55 437/464/55 +f 444/465/2 451/466/2 454/467/2 446/468/2 455/469/2 453/470/2 445/471/2 442/472/2 +f 450/473/51 451/474/51 444/475/51 441/476/51 +f 448/477/52 443/478/52 442/479/52 445/480/52 +f 454/481/54 451/482/54 450/483/54 447/484/54 +f 456/485/51 446/486/51 454/487/51 447/488/51 +f 449/489/52 452/490/52 453/491/52 455/492/52 +f 445/493/54 453/494/54 452/495/54 448/496/54 +f 455/497/54 446/498/54 456/499/54 449/500/54 +f 443/501/53 448/502/53 452/503/53 449/504/53 456/505/53 447/506/53 450/507/53 441/508/53 +f 460/509/2 467/510/2 470/511/2 462/512/2 471/513/2 469/514/2 461/515/2 458/516/2 +f 466/517/51 467/518/51 460/519/51 457/520/51 +f 464/521/52 459/522/52 458/523/52 461/524/52 +f 470/525/54 467/526/54 466/527/54 463/528/54 +f 472/529/51 462/530/51 470/531/51 463/532/51 +f 465/533/52 468/534/52 469/535/52 471/536/52 +f 461/537/54 469/538/54 468/539/54 464/540/54 +f 471/541/54 462/542/54 472/543/54 465/544/54 +f 459/545/53 464/546/53 468/547/53 465/548/53 472/549/53 463/550/53 466/551/53 457/552/53 +f 512/553/51 515/554/51 519/555/51 511/556/51 +f 517/557/51 510/558/51 509/559/51 520/560/51 +f 505/561/52 507/562/52 508/563/52 506/564/52 +f 516/565/55 515/566/55 512/567/55 505/561/55 506/564/55 510/568/55 517/569/55 514/570/55 +f 512/571/2 511/572/2 507/573/2 505/574/2 +f 517/575/53 520/576/53 513/577/53 514/578/53 +f 519/579/2 515/580/2 516/581/2 518/582/2 +f 510/583/53 506/584/53 508/585/53 509/586/53 +f 518/587/54 513/588/54 520/589/54 509/586/54 508/585/54 507/573/54 511/572/54 519/590/54 +f 516/565/51 514/570/51 513/588/51 518/587/51 +f 523/591/55 528/592/55 521/593/55 525/594/55 +f 527/595/52 526/596/52 521/597/52 528/598/52 +f 524/599/2 527/600/2 528/601/2 523/602/2 +f 521/603/53 526/604/53 522/605/53 525/606/53 +f 522/607/51 524/608/51 523/609/51 525/610/51 +f 527/611/54 524/612/54 522/613/54 526/614/54 +f 529/615/53 530/616/53 531/617/53 532/618/53 +f 536/619/51 529/620/51 532/621/51 535/622/51 +f 533/623/55 530/624/55 529/625/55 536/619/55 +f 534/626/52 531/627/52 530/628/52 533/623/52 +f 534/626/54 535/622/54 532/629/54 531/630/54 +f 534/626/2 533/623/2 536/619/2 535/622/2 +f 542/631/55 539/632/55 544/633/55 540/634/55 +f 539/635/51 538/636/51 543/637/51 544/633/51 +f 540/634/2 544/633/2 543/637/2 541/638/2 +f 541/638/54 543/637/54 538/639/54 537/640/54 +f 542/641/52 540/634/52 541/638/52 537/642/52 +f 552/643/52 545/644/52 547/645/52 551/646/52 +f 549/647/53 546/648/53 545/649/53 552/650/53 +f 551/651/2 547/645/2 550/652/2 548/653/2 +f 549/647/54 552/654/54 551/651/54 548/655/54 +f 546/656/51 549/657/51 548/655/51 550/658/51 +f 558/659/53 554/660/53 553/661/53 555/662/53 +f 564/663/55 566/664/55 563/665/55 565/666/55 553/667/55 554/668/55 +f 558/669/54 555/670/54 557/671/54 556/672/54 +f 567/673/52 563/665/52 566/664/52 562/674/52 +f 561/675/54 559/676/54 560/677/54 567/678/54 562/679/54 +f 554/668/51 558/669/51 556/672/51 559/680/51 561/681/51 564/663/51 +f 564/682/2 561/683/2 562/684/2 566/685/2 +f 559/686/2 568/687/2 569/688/2 560/689/2 +f 575/690/56 570/691/56 573/692/56 572/693/56 +f 577/694/57 571/695/57 576/696/57 574/697/57 +f 574/697/58 576/696/58 570/691/58 575/690/58 +f 576/698/2 571/699/2 573/700/2 570/701/2 +f 572/702/59 573/703/59 571/695/59 577/694/59 +f 583/704/53 580/705/53 578/706/53 579/707/53 +f 589/708/55 579/709/55 578/710/55 590/711/55 588/712/55 591/713/55 +f 583/714/54 581/715/54 582/716/54 580/717/54 +f 592/718/51 587/719/51 591/713/51 588/712/51 +f 586/720/54 587/721/54 592/722/54 585/723/54 584/724/54 +f 579/709/52 589/708/52 586/725/52 584/726/52 581/715/52 583/714/52 +f 589/727/2 591/728/2 587/729/2 586/730/2 +f 584/731/2 585/732/2 594/733/2 593/734/2 +f 598/735/54 599/736/54 600/737/54 597/738/54 +f 601/739/55 602/740/55 595/741/55 596/742/55 +f 600/743/53 602/744/53 601/745/53 597/746/53 +f 595/747/2 599/748/2 598/749/2 596/750/2 +f 637/751/51 640/752/51 642/753/51 636/754/51 +f 639/755/2 640/756/2 637/757/2 641/758/2 +f 638/759/54 641/760/54 637/761/54 636/762/54 +f 639/763/52 641/764/52 638/765/52 635/766/52 +f 642/767/55 640/768/55 639/769/55 635/770/55 +f 647/771/53 646/772/53 648/773/53 649/774/53 +f 648/773/54 645/775/54 644/776/54 649/774/54 +f 646/777/52 643/778/52 645/775/52 648/773/52 +f 647/779/55 650/780/55 643/778/55 646/777/55 +f 649/774/51 644/776/51 650/781/51 647/782/51 +f 686/783/2 693/784/2 696/785/2 688/786/2 697/787/2 695/788/2 687/789/2 684/790/2 +f 692/791/51 693/792/51 686/793/51 683/794/51 +f 690/795/52 685/796/52 684/797/52 687/798/52 +f 696/799/54 693/800/54 692/801/54 689/802/54 +f 698/803/51 688/804/51 696/805/51 689/806/51 +f 691/807/52 694/808/52 695/809/52 697/810/52 +f 687/811/54 695/812/54 694/813/54 690/814/54 +f 697/815/54 688/816/54 698/817/54 691/818/54 +f 685/819/53 690/820/53 694/821/53 691/822/53 698/823/53 689/824/53 692/825/53 683/826/53 +f 702/827/2 709/828/2 712/829/2 704/830/2 713/831/2 711/832/2 703/833/2 700/834/2 +f 708/835/51 709/836/51 702/837/51 699/838/51 +f 706/839/52 701/840/52 700/841/52 703/842/52 +f 712/843/54 709/844/54 708/845/54 705/846/54 +f 714/847/51 704/848/51 712/849/51 705/850/51 +f 707/851/52 710/852/52 711/853/52 713/854/52 +f 703/855/54 711/856/54 710/857/54 706/858/54 +f 713/859/54 704/860/54 714/861/54 707/862/54 +f 701/863/53 706/864/53 710/865/53 707/866/53 714/867/53 705/868/53 708/869/53 699/870/53 +f 720/871/56 715/872/56 718/873/56 717/874/56 +f 722/875/57 716/876/57 721/877/57 719/878/57 +f 719/878/58 721/877/58 715/872/58 720/871/58 +f 721/879/2 716/880/2 718/881/2 715/882/2 +f 717/883/59 718/884/59 716/876/59 722/875/59 +f 992/885/51 988/886/51 987/887/51 991/888/51 +f 987/889/53 989/890/53 993/891/53 991/892/53 +f 993/893/54 994/894/54 992/895/54 991/896/54 +f 992/897/2 994/898/2 990/899/2 988/900/2 +f 990/901/52 994/902/52 993/903/52 989/904/52 +f 1001/905/51 995/906/51 997/907/51 1005/908/51 +f 1005/908/2 997/907/2 1000/909/2 1006/910/2 +f 1006/911/52 1000/912/52 998/913/52 1007/914/52 +f 1007/914/53 998/913/53 995/906/53 1001/905/53 +f 1009/915/53 1004/916/53 1010/917/53 1008/918/53 +f 999/919/52 1003/920/52 1004/916/52 1009/915/52 +f 996/921/2 1002/922/2 1003/923/2 999/924/2 +f 1008/918/51 1010/917/51 1002/922/51 996/921/51 +f 1003/925/52 1006/926/52 1007/927/52 1004/928/52 +f 1002/929/2 1005/930/2 1006/931/2 1003/932/2 +f 1010/933/51 1001/934/51 1005/930/51 1002/929/51 +f 1004/928/53 1007/927/53 1001/935/53 1010/936/53 +f 1078/937/52 1076/938/52 1138/939/52 1136/940/52 1134/941/52 1132/942/52 1130/943/52 1128/944/52 1126/945/52 1124/946/52 1298/947/52 1306/948/52 1322/949/52 1278/950/52 1270/951/52 1274/952/52 1218/953/52 1214/954/52 1210/955/52 1330/956/52 1326/957/52 1254/958/52 1310/959/52 1318/960/52 1262/961/52 1249/962/52 1257/963/52 1092/964/52 1090/965/52 1088/966/52 1086/967/52 1084/968/52 1082/969/52 1080/970/52 +f 1139/971/51 1141/972/51 1142/973/51 1143/974/51 1144/975/51 1145/976/51 1146/977/51 1147/978/51 1255/979/51 1247/980/51 1259/981/51 1315/982/51 1307/983/51 1251/984/51 1323/985/51 1327/986/51 1207/987/51 1211/988/51 1215/989/51 1271/990/51 1267/991/51 1275/992/51 1319/993/51 1303/994/51 1295/995/51 1163/996/51 1164/997/51 1165/998/51 1166/999/51 1167/1000/51 1168/1001/51 1169/1002/51 1170/1003/51 1140/1004/51 +f 1075/1005/51 1077/1006/51 1079/1007/51 1081/1008/51 1083/1009/51 1085/1010/51 1087/1011/51 1089/1012/51 1091/1013/51 1258/1014/51 1250/1015/51 1261/1016/51 1317/1017/51 1309/1018/51 1253/1019/51 1325/1020/51 1329/1021/51 1208/1022/51 1212/1023/51 1216/1024/51 1272/1025/51 1268/1026/51 1276/1027/51 1321/1028/51 1305/1029/51 1297/1030/51 1123/1031/51 1125/1032/51 1127/1033/51 1129/1034/51 1131/1035/51 1133/1036/51 1135/1037/51 1137/1038/51 +f 1171/1039/52 1202/1040/52 1201/1041/52 1200/1042/52 1199/1043/52 1198/1044/52 1197/1045/52 1196/1046/52 1195/1047/52 1296/1048/52 1304/1049/52 1320/1050/52 1277/1051/52 1269/1052/52 1273/1053/52 1217/1054/52 1213/1055/52 1209/1056/52 1328/1057/52 1324/1058/52 1252/1059/52 1308/1060/52 1316/1061/52 1260/1062/52 1248/1063/52 1256/1064/52 1179/1065/52 1178/1066/52 1177/1067/52 1176/1068/52 1175/1069/52 1174/1070/52 1173/1071/52 1172/1072/52 +f 1179/1065/52 1256/1064/52 1280/1073/52 1292/1074/52 1204/1075/52 1288/1076/52 1284/1077/52 1312/1078/52 1264/1079/52 1240/1080/52 1236/1081/52 1244/1082/52 1300/1083/52 1232/1084/52 1224/1085/52 1220/1086/52 1228/1087/52 1296/1048/52 1195/1047/52 1194/1088/52 1193/1089/52 1192/1090/52 1191/1091/52 1190/1092/52 1189/1093/52 1188/1094/52 1187/1095/52 1186/1096/52 1185/1097/52 1184/1098/52 1183/1099/52 1182/1100/52 1181/1101/52 1180/1102/52 +f 1092/964/52 1257/963/52 1281/1103/52 1293/1104/52 1205/1105/52 1289/1106/52 1285/1107/52 1313/1108/52 1265/1109/52 1241/1110/52 1237/1111/52 1245/1112/52 1301/1113/52 1233/1114/52 1225/1115/52 1221/1116/52 1229/1117/52 1298/947/52 1124/946/52 1122/1118/52 1120/1119/52 1118/1120/52 1116/1121/52 1114/1122/52 1112/1123/52 1110/1124/52 1108/1125/52 1106/1126/52 1104/1127/52 1102/1128/52 1100/1129/52 1098/1130/52 1096/1131/52 1094/1132/52 +f 1163/996/51 1295/995/51 1227/1133/51 1219/1134/51 1223/1135/51 1231/1136/51 1299/1137/51 1243/1138/51 1235/1139/51 1239/1140/51 1263/1141/51 1311/1142/51 1283/1143/51 1287/1144/51 1203/1145/51 1291/1146/51 1279/1147/51 1255/979/51 1147/978/51 1148/1148/51 1149/1149/51 1150/1150/51 1151/1151/51 1152/1152/51 1153/1153/51 1154/1154/51 1155/1155/51 1156/1156/51 1157/1157/51 1158/1158/51 1159/1159/51 1160/1160/51 1161/1161/51 1162/1162/51 +f 1123/1031/51 1297/1030/51 1230/1163/51 1222/1164/51 1226/1165/51 1234/1166/51 1302/1167/51 1246/1168/51 1238/1169/51 1242/1170/51 1266/1171/51 1314/1172/51 1286/1173/51 1290/1174/51 1206/1175/51 1294/1176/51 1282/1177/51 1258/1014/51 1091/1013/51 1093/1178/51 1095/1179/51 1097/1180/51 1099/1181/51 1101/1182/51 1103/1183/51 1105/1184/51 1107/1185/51 1109/1186/51 1111/1187/51 1113/1188/51 1115/1189/51 1117/1190/51 1119/1191/51 1121/1192/51 +f 1333/1193/55 1338/1194/55 1331/1195/55 1335/1196/55 +f 1337/1197/52 1336/1198/52 1331/1199/52 1338/1200/52 +f 1334/1201/2 1337/1202/2 1338/1203/2 1333/1204/2 +f 1331/1205/53 1336/1206/53 1332/1207/53 1335/1208/53 +f 1332/1209/51 1334/1210/51 1333/1211/51 1335/1212/51 +f 1337/1213/54 1334/1214/54 1332/1215/54 1336/1216/54 +f 1342/1217/54 1343/1218/54 1344/1219/54 1341/1220/54 +f 1345/1221/55 1346/1222/55 1339/1223/55 1340/1224/55 +f 1344/1225/53 1346/1226/53 1345/1227/53 1341/1228/53 +f 1339/1229/2 1343/1230/2 1342/1231/2 1340/1232/2 +f 1350/1233/54 1351/1234/54 1352/1235/54 1349/1236/54 +f 1353/1237/55 1354/1238/55 1347/1239/55 1348/1240/55 +f 1352/1241/53 1354/1242/53 1353/1243/53 1349/1244/53 +f 1347/1245/2 1351/1246/2 1350/1247/2 1348/1248/2 +f 1358/1249/54 1359/1250/54 1360/1251/54 1357/1252/54 +f 1361/1253/55 1362/1254/55 1355/1255/55 1356/1256/55 +f 1360/1257/53 1362/1258/53 1361/1259/53 1357/1260/53 +f 1355/1261/2 1359/1262/2 1358/1263/2 1356/1264/2 +f 1365/1265/51 1368/1266/51 1370/1267/51 1364/1268/51 +f 1367/1269/2 1368/1270/2 1365/1271/2 1369/1272/2 +f 1366/1273/54 1369/1274/54 1365/1275/54 1364/1276/54 +f 1367/1277/52 1369/1278/52 1366/1279/52 1363/1280/52 +f 1370/1281/55 1368/1282/55 1367/1283/55 1363/1284/55 +f 1375/1285/53 1374/1286/53 1376/1287/53 1377/1288/53 +f 1376/1287/54 1373/1289/54 1372/1290/54 1377/1288/54 +f 1374/1291/52 1371/1292/52 1373/1289/52 1376/1287/52 +f 1375/1293/55 1378/1294/55 1371/1292/55 1374/1291/55 +f 1377/1288/51 1372/1290/51 1378/1295/51 1375/1296/51 +f 1381/1297/51 1384/1298/51 1386/1299/51 1380/1300/51 +f 1383/1301/2 1384/1302/2 1381/1303/2 1385/1304/2 +f 1382/1305/54 1385/1306/54 1381/1307/54 1380/1308/54 +f 1383/1309/52 1385/1310/52 1382/1311/52 1379/1312/52 +f 1386/1313/55 1384/1314/55 1383/1315/55 1379/1316/55 +f 1391/1317/53 1390/1318/53 1392/1319/53 1393/1320/53 +f 1392/1319/54 1389/1321/54 1388/1322/54 1393/1320/54 +f 1390/1323/52 1387/1324/52 1389/1321/52 1392/1319/52 +f 1391/1325/55 1394/1326/55 1387/1324/55 1390/1323/55 +f 1393/1320/51 1388/1322/51 1394/1327/51 1391/1328/51 +f 1397/1329/51 1400/1330/51 1402/1331/51 1396/1332/51 +f 1399/1333/2 1400/1334/2 1397/1335/2 1401/1336/2 +f 1398/1337/54 1401/1338/54 1397/1339/54 1396/1340/54 +f 1399/1341/52 1401/1342/52 1398/1343/52 1395/1344/52 +f 1402/1345/55 1400/1346/55 1399/1347/55 1395/1348/55 +f 1407/1349/53 1406/1350/53 1408/1351/53 1409/1352/53 +f 1408/1351/54 1405/1353/54 1404/1354/54 1409/1352/54 +f 1406/1355/52 1403/1356/52 1405/1353/52 1408/1351/52 +f 1407/1357/55 1410/1358/55 1403/1356/55 1406/1355/55 +f 1409/1352/51 1404/1354/51 1410/1359/51 1407/1360/51 +f 1413/1361/51 1416/1362/51 1418/1363/51 1417/1364/51 +f 1414/1365/2 1415/1366/2 1416/1367/2 1413/1368/2 +f 1411/1369/52 1415/1370/52 1414/1371/52 1412/1372/52 +f 1418/1373/53 1411/1374/53 1412/1375/53 1417/1376/53 +f 1421/1377/51 1424/1378/51 1426/1379/51 1425/1380/51 +f 1422/1381/2 1423/1382/2 1424/1383/2 1421/1384/2 +f 1419/1385/52 1423/1386/52 1422/1387/52 1420/1388/52 +f 1426/1389/53 1419/1390/53 1420/1391/53 1425/1392/53 +f 1429/1393/51 1432/1394/51 1434/1395/51 1433/1396/51 +f 1430/1397/2 1431/1398/2 1432/1399/2 1429/1400/2 +f 1427/1401/52 1431/1402/52 1430/1403/52 1428/1404/52 +f 1434/1405/53 1427/1406/53 1428/1407/53 1433/1408/53 +f 1457/1409/51 1435/1410/51 1437/1411/51 1461/1412/51 +f 1461/1412/55 1437/1411/55 1440/1413/55 1462/1414/55 +f 1462/1415/52 1440/1416/52 1438/1417/52 1463/1418/52 +f 1463/1418/54 1438/1417/54 1435/1410/54 1457/1409/54 +f 1436/1419/53 1439/1420/53 1465/1421/53 1464/1422/53 +f 1440/1423/2 1437/1424/2 1435/1425/2 1438/1426/2 +f 1465/1427/54 1460/1428/54 1466/1429/54 1464/1430/54 +f 1439/1431/52 1459/1432/52 1460/1428/52 1465/1427/52 +f 1436/1433/55 1458/1434/55 1459/1435/55 1439/1436/55 +f 1464/1430/51 1466/1429/51 1458/1434/51 1436/1433/51 +f 1459/1437/52 1462/1438/52 1463/1439/52 1460/1440/52 +f 1458/1441/55 1461/1442/55 1462/1443/55 1459/1444/55 +f 1466/1445/51 1457/1446/51 1461/1442/51 1458/1441/51 +f 1460/1440/54 1463/1439/54 1457/1447/54 1466/1448/54 +f 1470/1449/2 1468/1450/2 1498/1451/2 1495/1452/2 1494/1453/2 1496/1454/2 1488/1455/2 1486/1456/2 1493/1457/2 1483/1458/2 1481/1459/2 1479/1460/2 1477/1461/2 1497/1462/2 1474/1463/2 1472/1464/2 +f 1502/1465/2 1500/1466/2 1530/1467/2 1528/1468/2 1526/1469/2 1524/1470/2 1522/1471/2 1520/1472/2 1518/1473/2 1516/1474/2 1514/1475/2 1512/1476/2 1510/1477/2 1508/1478/2 1506/1479/2 1504/1480/2 +f 1499/1481/53 1501/1482/53 1503/1483/53 1505/1484/53 1507/1485/53 1509/1486/53 1511/1487/53 1513/1488/53 1515/1489/53 1517/1490/53 1519/1491/53 1521/1492/53 1523/1493/53 1525/1494/53 1527/1495/53 1529/1496/53 +f 1570/1497/52 1563/1498/52 1565/1499/52 1569/1500/52 +f 1567/1501/53 1564/1502/53 1563/1503/53 1570/1504/53 +f 1569/1505/2 1565/1499/2 1568/1506/2 1566/1507/2 +f 1567/1501/54 1570/1508/54 1569/1505/54 1566/1509/54 +f 1564/1510/51 1567/1511/51 1566/1509/51 1568/1512/51 +f 1578/1513/51 1571/1514/51 1573/1515/51 1577/1516/51 +f 1575/1517/53 1572/1518/53 1571/1519/53 1578/1520/53 +f 1577/1521/2 1573/1515/2 1576/1522/2 1574/1523/2 +f 1575/1517/55 1578/1524/55 1577/1521/55 1574/1525/55 +f 1572/1526/52 1575/1527/52 1574/1525/52 1576/1528/52 +f 1586/1529/51 1579/1530/51 1581/1531/51 1585/1532/51 +f 1583/1533/53 1580/1534/53 1579/1535/53 1586/1536/53 +f 1585/1537/2 1581/1531/2 1584/1538/2 1582/1539/2 +f 1583/1533/55 1586/1540/55 1585/1537/55 1582/1541/55 +f 1580/1542/52 1583/1543/52 1582/1541/52 1584/1544/52 +f 1621/1545/60 1588/1546/60 1590/1547/60 1622/1548/60 +f 1622/1548/61 1590/1547/61 1592/1549/61 1625/1550/61 +f 1625/1550/62 1592/1549/62 1594/1551/62 1628/1552/62 +f 1628/1552/63 1594/1551/63 1596/1553/63 1631/1554/63 +f 1631/1554/64 1596/1553/64 1598/1555/64 1634/1556/64 +f 1634/1556/65 1598/1555/65 1600/1557/65 1637/1558/65 +f 1637/1558/66 1600/1557/66 1602/1559/66 1640/1560/66 +f 1640/1560/67 1602/1559/67 1604/1561/67 1643/1562/67 +f 1643/1562/68 1604/1561/68 1606/1563/68 1646/1564/68 +f 1646/1564/69 1606/1563/69 1608/1565/69 1649/1566/69 +f 1649/1566/70 1608/1565/70 1610/1567/70 1652/1568/70 +f 1652/1568/71 1610/1567/71 1612/1569/71 1655/1570/71 +f 1655/1570/72 1612/1569/72 1614/1571/72 1658/1572/72 +f 1658/1572/73 1614/1571/73 1616/1573/73 1661/1574/73 +f 1661/1574/74 1616/1573/74 1618/1575/74 1664/1576/74 +f 1664/1576/75 1618/1575/75 1588/1577/75 1621/1578/75 +f 1617/1579/75 1666/1580/75 1619/1581/75 1587/1582/75 +f 1666/1583/75 1665/1584/75 1620/1585/75 1619/1586/75 +f 1665/1587/75 1664/1588/75 1621/1589/75 1620/1590/75 +f 1615/1591/74 1663/1592/74 1666/1580/74 1617/1579/74 +f 1663/1593/74 1662/1594/74 1665/1584/74 1666/1583/74 +f 1662/1595/74 1661/1596/74 1664/1588/74 1665/1587/74 +f 1613/1597/73 1660/1598/73 1663/1592/73 1615/1591/73 +f 1660/1599/73 1659/1600/73 1662/1594/73 1663/1593/73 +f 1659/1601/73 1658/1602/73 1661/1596/73 1662/1595/73 +f 1611/1603/72 1657/1604/72 1660/1598/72 1613/1597/72 +f 1657/1605/72 1656/1606/72 1659/1600/72 1660/1599/72 +f 1656/1607/72 1655/1608/72 1658/1602/72 1659/1601/72 +f 1609/1609/71 1654/1610/71 1657/1604/71 1611/1603/71 +f 1654/1611/71 1653/1612/71 1656/1606/71 1657/1605/71 +f 1653/1613/71 1652/1614/71 1655/1608/71 1656/1607/71 +f 1607/1615/70 1651/1616/70 1654/1610/70 1609/1609/70 +f 1651/1617/70 1650/1618/70 1653/1612/70 1654/1611/70 +f 1650/1619/70 1649/1620/70 1652/1614/70 1653/1613/70 +f 1605/1621/69 1648/1622/69 1651/1616/69 1607/1615/69 +f 1648/1623/69 1647/1624/69 1650/1618/69 1651/1617/69 +f 1647/1625/69 1646/1626/69 1649/1620/69 1650/1619/69 +f 1603/1627/68 1645/1628/68 1648/1622/68 1605/1621/68 +f 1645/1629/68 1644/1630/68 1647/1624/68 1648/1623/68 +f 1644/1631/68 1643/1632/68 1646/1626/68 1647/1625/68 +f 1601/1633/67 1642/1634/67 1645/1628/67 1603/1627/67 +f 1642/1635/67 1641/1636/67 1644/1630/67 1645/1629/67 +f 1641/1637/67 1640/1638/67 1643/1632/67 1644/1631/67 +f 1599/1639/66 1639/1640/66 1642/1634/66 1601/1633/66 +f 1639/1641/66 1638/1642/66 1641/1636/66 1642/1635/66 +f 1638/1643/66 1637/1644/66 1640/1638/66 1641/1637/66 +f 1597/1645/65 1636/1646/65 1639/1640/65 1599/1639/65 +f 1636/1647/65 1635/1648/65 1638/1642/65 1639/1641/65 +f 1635/1649/65 1634/1650/65 1637/1644/65 1638/1643/65 +f 1595/1651/64 1633/1652/64 1636/1646/64 1597/1645/64 +f 1633/1653/64 1632/1654/64 1635/1648/64 1636/1647/64 +f 1632/1655/64 1631/1656/64 1634/1650/64 1635/1649/64 +f 1593/1657/63 1630/1658/63 1633/1652/63 1595/1651/63 +f 1630/1659/63 1629/1660/63 1632/1654/63 1633/1653/63 +f 1629/1661/63 1628/1662/63 1631/1656/63 1632/1655/63 +f 1591/1663/62 1627/1664/62 1630/1658/62 1593/1657/62 +f 1627/1665/62 1626/1666/62 1629/1660/62 1630/1659/62 +f 1626/1667/62 1625/1668/62 1628/1662/62 1629/1661/62 +f 1589/1669/61 1624/1670/61 1627/1664/61 1591/1663/61 +f 1624/1671/61 1623/1672/61 1626/1666/61 1627/1665/61 +f 1623/1673/61 1622/1674/61 1625/1668/61 1626/1667/61 +f 1587/1675/60 1619/1676/60 1624/1670/60 1589/1669/60 +f 1619/1677/60 1620/1678/60 1623/1672/60 1624/1671/60 +f 1620/1679/60 1621/1680/60 1622/1674/60 1623/1673/60 +f 1701/1681/60 1668/1682/60 1670/1683/60 1702/1684/60 +f 1702/1684/61 1670/1683/61 1672/1685/61 1705/1686/61 +f 1705/1686/62 1672/1685/62 1674/1687/62 1708/1688/62 +f 1708/1688/63 1674/1687/63 1676/1689/63 1711/1690/63 +f 1711/1690/64 1676/1689/64 1678/1691/64 1714/1692/64 +f 1714/1692/65 1678/1691/65 1680/1693/65 1717/1694/65 +f 1717/1694/66 1680/1693/66 1682/1695/66 1720/1696/66 +f 1720/1696/67 1682/1695/67 1684/1697/67 1723/1698/67 +f 1723/1698/68 1684/1697/68 1686/1699/68 1726/1700/68 +f 1726/1700/69 1686/1699/69 1688/1701/69 1729/1702/69 +f 1729/1702/70 1688/1701/70 1690/1703/70 1732/1704/70 +f 1732/1704/71 1690/1703/71 1692/1705/71 1735/1706/71 +f 1735/1706/72 1692/1705/72 1694/1707/72 1738/1708/72 +f 1738/1708/73 1694/1707/73 1696/1709/73 1741/1710/73 +f 1741/1710/74 1696/1709/74 1698/1711/74 1744/1712/74 +f 1744/1712/75 1698/1711/75 1668/1713/75 1701/1714/75 +f 1697/1715/75 1746/1716/75 1699/1717/75 1667/1718/75 +f 1746/1719/75 1745/1720/75 1700/1721/75 1699/1722/75 +f 1745/1723/75 1744/1724/75 1701/1725/75 1700/1726/75 +f 1695/1727/74 1743/1728/74 1746/1716/74 1697/1715/74 +f 1743/1729/74 1742/1730/74 1745/1720/74 1746/1719/74 +f 1742/1731/74 1741/1732/74 1744/1724/74 1745/1723/74 +f 1693/1733/73 1740/1734/73 1743/1728/73 1695/1727/73 +f 1740/1735/73 1739/1736/73 1742/1730/73 1743/1729/73 +f 1739/1737/73 1738/1738/73 1741/1732/73 1742/1731/73 +f 1691/1739/72 1737/1740/72 1740/1734/72 1693/1733/72 +f 1737/1741/72 1736/1742/72 1739/1736/72 1740/1735/72 +f 1736/1743/72 1735/1744/72 1738/1738/72 1739/1737/72 +f 1689/1745/71 1734/1746/71 1737/1740/71 1691/1739/71 +f 1734/1747/71 1733/1748/71 1736/1742/71 1737/1741/71 +f 1733/1749/71 1732/1750/71 1735/1744/71 1736/1743/71 +f 1687/1751/70 1731/1752/70 1734/1746/70 1689/1745/70 +f 1731/1753/70 1730/1754/70 1733/1748/70 1734/1747/70 +f 1730/1755/70 1729/1756/70 1732/1750/70 1733/1749/70 +f 1685/1757/69 1728/1758/69 1731/1752/69 1687/1751/69 +f 1728/1759/69 1727/1760/69 1730/1754/69 1731/1753/69 +f 1727/1761/69 1726/1762/69 1729/1756/69 1730/1755/69 +f 1683/1763/68 1725/1764/68 1728/1758/68 1685/1757/68 +f 1725/1765/68 1724/1766/68 1727/1760/68 1728/1759/68 +f 1724/1767/68 1723/1768/68 1726/1762/68 1727/1761/68 +f 1681/1769/67 1722/1770/67 1725/1764/67 1683/1763/67 +f 1722/1771/67 1721/1772/67 1724/1766/67 1725/1765/67 +f 1721/1773/67 1720/1774/67 1723/1768/67 1724/1767/67 +f 1679/1775/66 1719/1776/66 1722/1770/66 1681/1769/66 +f 1719/1777/66 1718/1778/66 1721/1772/66 1722/1771/66 +f 1718/1779/66 1717/1780/66 1720/1774/66 1721/1773/66 +f 1677/1781/65 1716/1782/65 1719/1776/65 1679/1775/65 +f 1716/1783/65 1715/1784/65 1718/1778/65 1719/1777/65 +f 1715/1785/65 1714/1786/65 1717/1780/65 1718/1779/65 +f 1675/1787/64 1713/1788/64 1716/1782/64 1677/1781/64 +f 1713/1789/64 1712/1790/64 1715/1784/64 1716/1783/64 +f 1712/1791/64 1711/1792/64 1714/1786/64 1715/1785/64 +f 1673/1793/63 1710/1794/63 1713/1788/63 1675/1787/63 +f 1710/1795/63 1709/1796/63 1712/1790/63 1713/1789/63 +f 1709/1797/63 1708/1798/63 1711/1792/63 1712/1791/63 +f 1671/1799/62 1707/1800/62 1710/1794/62 1673/1793/62 +f 1707/1801/62 1706/1802/62 1709/1796/62 1710/1795/62 +f 1706/1803/62 1705/1804/62 1708/1798/62 1709/1797/62 +f 1669/1805/61 1704/1806/61 1707/1800/61 1671/1799/61 +f 1704/1807/61 1703/1808/61 1706/1802/61 1707/1801/61 +f 1703/1809/61 1702/1810/61 1705/1804/61 1706/1803/61 +f 1667/1811/60 1699/1812/60 1704/1806/60 1669/1805/60 +f 1699/1813/60 1700/1814/60 1703/1808/60 1704/1807/60 +f 1700/1815/60 1701/1816/60 1702/1810/60 1703/1809/60 +f 1769/1817/51 1747/1818/51 1749/1819/51 1773/1820/51 +f 1773/1820/55 1749/1819/55 1752/1821/55 1774/1822/55 +f 1774/1823/52 1752/1824/52 1750/1825/52 1775/1826/52 +f 1775/1826/54 1750/1825/54 1747/1818/54 1769/1817/54 +f 1748/1827/53 1751/1828/53 1777/1829/53 1776/1830/53 +f 1752/1831/2 1749/1832/2 1747/1833/2 1750/1834/2 +f 1777/1835/54 1772/1836/54 1778/1837/54 1776/1838/54 +f 1751/1839/52 1771/1840/52 1772/1836/52 1777/1835/52 +f 1748/1841/55 1770/1842/55 1771/1843/55 1751/1844/55 +f 1776/1838/51 1778/1837/51 1770/1842/51 1748/1841/51 +f 1771/1845/52 1774/1846/52 1775/1847/52 1772/1848/52 +f 1770/1849/55 1773/1850/55 1774/1851/55 1771/1852/55 +f 1778/1853/51 1769/1854/51 1773/1850/51 1770/1849/51 +f 1772/1848/54 1775/1847/54 1769/1855/54 1778/1856/54 +f 1781/1857/2 1782/1858/2 1786/1859/2 1785/1860/2 +f 1783/1861/53 1784/1862/53 1780/1863/53 1779/1864/53 +f 1781/1865/52 1785/1866/52 1783/1861/52 1779/1864/52 +f 1786/1859/51 1782/1858/51 1780/1863/51 1784/1862/51 +f 1789/1867/2 1790/1868/2 1794/1869/2 1793/1870/2 +f 1791/1871/53 1792/1872/53 1788/1873/53 1787/1874/53 +f 1789/1875/52 1793/1876/52 1791/1871/52 1787/1874/52 +f 1794/1869/51 1790/1868/51 1788/1873/51 1792/1872/51 +f 1797/1877/2 1798/1878/2 1802/1879/2 1801/1880/2 +f 1799/1881/53 1800/1882/53 1796/1883/53 1795/1884/53 +f 1797/1885/55 1801/1886/55 1799/1881/55 1795/1884/55 +f 1802/1879/54 1798/1878/54 1796/1883/54 1800/1882/54 +f 1805/1887/53 1806/1888/53 1810/1889/53 1809/1890/53 +f 1807/1891/2 1808/1892/2 1804/1893/2 1803/1894/2 +f 1805/1895/52 1809/1896/52 1807/1891/52 1803/1894/52 +f 1810/1889/51 1806/1888/51 1804/1893/51 1808/1892/51 +f 1813/1897/2 1814/1898/2 1818/1899/2 1817/1900/2 +f 1815/1901/53 1816/1902/53 1812/1903/53 1811/1904/53 +f 1813/1905/55 1817/1906/55 1815/1901/55 1811/1904/55 +f 1818/1899/54 1814/1898/54 1812/1903/54 1816/1902/54 +f 1821/1907/2 1822/1908/2 1826/1909/2 1825/1910/2 +f 1823/1911/53 1824/1912/53 1820/1913/53 1819/1914/53 +f 1821/1915/54 1825/1916/54 1823/1911/54 1819/1914/54 +f 1826/1909/55 1822/1908/55 1820/1913/55 1824/1912/55 +f 1834/1917/52 1837/1918/52 1841/1919/52 1833/1920/52 +f 1839/1921/52 1832/1922/52 1831/1923/52 1842/1924/52 +f 1827/1925/51 1829/1926/51 1830/1927/51 1828/1928/51 +f 1838/1929/54 1837/1930/54 1834/1931/54 1827/1925/54 1828/1928/54 1832/1932/54 1839/1933/54 1836/1934/54 +f 1834/1935/2 1833/1936/2 1829/1937/2 1827/1938/2 +f 1839/1939/53 1842/1940/53 1835/1941/53 1836/1942/53 +f 1841/1943/2 1837/1944/2 1838/1945/2 1840/1946/2 +f 1832/1947/53 1828/1948/53 1830/1949/53 1831/1950/53 +f 1840/1951/55 1835/1952/55 1842/1953/55 1831/1950/55 1830/1949/55 1829/1937/55 1833/1936/55 1841/1954/55 +f 1838/1929/52 1836/1934/52 1835/1952/52 1840/1951/52 +f 1843/1955/51 1844/1956/51 1846/1957/51 1845/1958/51 +f 1845/1958/55 1846/1957/55 1850/1959/55 1849/1960/55 +f 1849/1960/52 1850/1959/52 1848/1961/52 1847/1962/52 +f 1847/1962/54 1848/1961/54 1844/1963/54 1843/1964/54 +f 1845/1965/53 1849/1960/53 1847/1962/53 1843/1966/53 +f 1850/1959/2 1846/1967/2 1844/1968/2 1848/1961/2 +f 1851/1969/52 1852/1970/52 1854/1971/52 1853/1972/52 +f 1853/1972/54 1854/1971/54 1858/1973/54 1857/1974/54 +f 1857/1974/51 1858/1973/51 1856/1975/51 1855/1976/51 +f 1855/1976/55 1856/1975/55 1852/1977/55 1851/1978/55 +f 1853/1979/53 1857/1974/53 1855/1976/53 1851/1980/53 +f 1858/1973/2 1854/1981/2 1852/1982/2 1856/1975/2 +f 1863/1983/55 1861/1984/55 1860/1985/55 1872/1986/55 +f 1867/1987/2 1875/1988/2 1879/1989/2 1862/1990/2 +f 1866/1991/55 1878/1992/55 1874/1993/55 1877/1994/55 +f 1864/1995/54 1870/1996/54 1871/1997/54 1865/1998/54 +f 1874/1999/52 1878/2000/52 1863/2001/52 1872/2002/52 +f 1865/2003/2 1871/2004/2 1868/2005/2 1880/2006/2 1873/2007/2 1876/2008/2 1877/2009/2 1874/2010/2 1872/2011/2 1860/2012/2 +f 1859/2013/52 1866/2014/52 1877/2015/52 1876/2016/52 1867/2017/52 1862/2018/52 +f 1864/2019/53 1861/1984/53 1863/2020/53 1878/2021/53 1866/2022/53 1859/2023/53 1869/2024/53 1870/2025/53 +f 1864/2019/51 1865/2026/51 1860/1985/51 1861/1984/51 +f 1868/2027/54 1869/2028/54 1859/2029/54 1862/2030/54 1879/2031/54 1880/2032/54 +f 1875/2033/52 1873/2034/52 1880/2035/52 1879/2036/52 +f 1870/2037/51 1869/2038/51 1868/2039/51 1871/2040/51 +f 1875/2041/54 1867/2042/54 1876/2043/54 1873/2044/54 +f 1883/2045/53 1884/2046/53 1888/2047/53 1887/2048/53 +f 1885/2049/2 1886/2050/2 1882/2051/2 1881/2052/2 +f 1883/2053/51 1887/2054/51 1885/2049/51 1881/2052/51 +f 1888/2047/52 1884/2046/52 1882/2051/52 1886/2050/52 +f 1891/2055/53 1892/2056/53 1896/2057/53 1895/2058/53 +f 1893/2059/2 1894/2060/2 1890/2061/2 1889/2062/2 +f 1891/2063/51 1895/2064/51 1893/2059/51 1889/2062/51 +f 1896/2057/52 1892/2056/52 1890/2061/52 1894/2060/52 +f 1899/2065/53 1900/2066/53 1904/2067/53 1903/2068/53 +f 1901/2069/2 1902/2070/2 1898/2071/2 1897/2072/2 +f 1899/2073/55 1903/2074/55 1901/2069/55 1897/2072/55 +f 1904/2067/54 1900/2066/54 1898/2071/54 1902/2070/54 +f 1907/2075/2 1908/2076/2 1912/2077/2 1911/2078/2 +f 1909/2079/53 1910/2080/53 1906/2081/53 1905/2082/53 +f 1907/2083/51 1911/2084/51 1909/2079/51 1905/2082/51 +f 1912/2077/52 1908/2076/52 1906/2081/52 1910/2080/52 +f 1915/2085/53 1916/2086/53 1920/2087/53 1919/2088/53 +f 1917/2089/2 1918/2090/2 1914/2091/2 1913/2092/2 +f 1915/2093/55 1919/2094/55 1917/2089/55 1913/2092/55 +f 1920/2087/54 1916/2086/54 1914/2091/54 1918/2090/54 +f 1923/2095/53 1924/2096/53 1928/2097/53 1927/2098/53 +f 1925/2099/2 1926/2100/2 1922/2101/2 1921/2102/2 +f 1923/2103/54 1927/2104/54 1925/2099/54 1921/2102/54 +f 1928/2097/55 1924/2096/55 1922/2101/55 1926/2100/55 +f 1933/2105/54 1931/2106/54 1930/2107/54 1942/2108/54 +f 1937/2109/53 1945/2110/53 1949/2111/53 1932/2112/53 +f 1936/2113/54 1948/2114/54 1944/2115/54 1947/2116/54 +f 1934/2117/55 1940/2118/55 1941/2119/55 1935/2120/55 +f 1944/2121/52 1948/2122/52 1933/2123/52 1942/2124/52 +f 1935/2125/53 1941/2126/53 1938/2127/53 1950/2128/53 1943/2129/53 1946/2130/53 1947/2131/53 1944/2132/53 1942/2133/53 1930/2134/53 +f 1929/2135/52 1936/2136/52 1947/2137/52 1946/2138/52 1937/2139/52 1932/2140/52 +f 1934/2141/2 1931/2106/2 1933/2142/2 1948/2143/2 1936/2144/2 1929/2145/2 1939/2146/2 1940/2147/2 +f 1934/2141/51 1935/2148/51 1930/2107/51 1931/2106/51 +f 1938/2149/55 1939/2150/55 1929/2151/55 1932/2152/55 1949/2153/55 1950/2154/55 +f 1945/2155/52 1943/2156/52 1950/2157/52 1949/2158/52 +f 1940/2159/51 1939/2160/51 1938/2161/51 1941/2162/51 +f 1945/2163/55 1937/2164/55 1946/2165/55 1943/2166/55 +f 1973/2167/51 1951/2168/51 1953/2169/51 1977/2170/51 +f 1977/2170/55 1953/2169/55 1956/2171/55 1978/2172/55 +f 1978/2173/52 1956/2174/52 1954/2175/52 1979/2176/52 +f 1979/2176/54 1954/2175/54 1951/2168/54 1973/2167/54 +f 1952/2177/53 1955/2178/53 1981/2179/53 1980/2180/53 +f 1956/2181/2 1953/2182/2 1951/2183/2 1954/2184/2 +f 1981/2185/54 1976/2186/54 1982/2187/54 1980/2188/54 +f 1955/2189/52 1975/2190/52 1976/2186/52 1981/2185/52 +f 1952/2191/55 1974/2192/55 1975/2193/55 1955/2194/55 +f 1980/2188/51 1982/2187/51 1974/2192/51 1952/2191/51 +f 1975/2195/52 1978/2196/52 1979/2197/52 1976/2198/52 +f 1974/2199/55 1977/2200/55 1978/2201/55 1975/2202/55 +f 1982/2203/51 1973/2204/51 1977/2200/51 1974/2199/51 +f 1976/2198/54 1979/2197/54 1973/2205/54 1982/2206/54 +f 1983/2207/2 1984/2208/2 1986/2209/2 1985/2210/2 +f 1985/2211/51 1986/2212/51 1990/2213/51 1989/2214/51 +f 1989/2215/53 1990/2216/53 1988/2217/53 1987/2218/53 +f 1987/2219/52 1988/2220/52 1984/2221/52 1983/2222/52 +f 1985/2210/54 1989/2223/54 1987/2224/54 1983/2225/54 +f 1990/2226/55 1986/2227/55 1984/2228/55 1988/2217/55 +f 1993/2229/55 1994/2230/55 1998/2231/55 1997/2232/55 +f 1997/2233/52 1998/2234/52 1996/2235/52 1995/2236/52 +f 1993/2237/53 1997/2238/53 1995/2239/53 1991/2240/53 +f 1998/2241/2 1994/2242/2 1992/2243/2 1996/2244/2 +f 2001/2245/52 2002/2246/52 2000/2247/52 1999/2248/52 +f 1999/2249/54 2000/2250/54 1993/2251/54 1994/2252/54 +f 1992/2253/53 2001/2254/53 1999/2255/53 1994/2256/53 +f 2002/2257/2 1991/2258/2 1993/2259/2 2000/2260/2 +f 2009/2261/52 2010/2262/52 2008/2263/52 2007/2264/52 +f 2007/2265/54 2008/2266/54 2004/2267/54 2003/2268/54 +f 2005/2269/53 2009/2270/53 2007/2271/53 2003/2272/53 +f 2010/2273/2 2006/2274/2 2004/2275/2 2008/2276/2 +f 2004/2277/55 2003/2278/55 2014/2279/55 2013/2280/55 +f 2013/2281/52 2014/2282/52 2012/2283/52 2011/2284/52 +f 2004/2285/53 2013/2286/53 2011/2287/53 2006/2288/53 +f 2014/2289/2 2003/2290/2 2005/2291/2 2012/2292/2 +f 2017/2293/52 2016/2294/52 2019/2295/52 2020/2296/52 +f 2015/2297/51 2021/2298/51 2022/2299/51 2018/2300/51 +f 2015/2301/55 2016/2302/55 2017/2303/55 2021/2304/55 +f 2021/2305/53 2017/2306/53 2020/2307/53 2022/2308/53 +f 2019/2309/54 2018/2310/54 2022/2311/54 2020/2312/54 +f 2018/2313/2 2019/2314/2 2016/2315/2 2015/2316/2 +f 2028/2317/55 2025/2318/55 2023/2319/55 2024/2320/55 +f 2029/2321/52 2024/2320/52 2023/2319/52 2026/2322/52 +f 2025/2323/51 2028/2324/51 2030/2325/51 2027/2326/51 +f 2028/2327/2 2030/2325/2 2029/2321/2 2024/2328/2 +f 2030/2325/55 2027/2326/55 2026/2322/55 2029/2321/55 +f 2025/2329/2 2027/2326/2 2026/2322/2 2023/2330/2 +f 2042/2331/76 2041/2332/76 2039/2333/76 2040/2334/76 +f 2049/2335/2 2051/2336/2 2053/2337/2 2055/2338/2 2057/2339/2 2059/2340/2 2060/2341/2 2031/2342/2 2033/2343/2 2035/2344/2 2037/2345/2 2039/2346/2 2041/2347/2 2043/2348/2 2045/2349/2 2047/2350/2 +f 2034/2351/77 2033/2352/77 2031/2353/77 2032/2354/77 +f 2044/2355/78 2043/2356/78 2041/2332/78 2042/2331/78 +f 2056/2357/79 2055/2358/79 2053/2359/79 2054/2360/79 +f 2036/2361/80 2035/2362/80 2033/2352/80 2034/2351/80 +f 2046/2363/54 2045/2364/54 2043/2356/54 2044/2355/54 +f 2058/2365/81 2057/2366/81 2055/2358/81 2056/2357/81 +f 2038/2367/51 2037/2368/51 2035/2362/51 2036/2361/51 +f 2048/2369/82 2047/2370/82 2045/2364/82 2046/2363/82 +f 2040/2334/83 2039/2333/83 2037/2368/83 2038/2367/83 +f 2050/2371/84 2049/2372/84 2047/2370/84 2048/2369/84 +f 2054/2360/52 2053/2359/52 2051/2373/52 2052/2374/52 +f 2052/2374/85 2051/2373/85 2049/2372/85 2050/2371/85 +f 2082/2375/55 2085/2376/55 2063/2377/55 2062/2378/55 +f 2062/2378/53 2063/2377/53 2064/2379/53 2061/2380/53 +f 2083/2381/54 2084/2382/54 2061/2380/54 2064/2379/54 +f 2063/2377/52 2085/2383/52 2083/2384/52 2064/2379/52 +f 2061/2380/51 2084/2385/51 2082/2386/51 2062/2378/51 +f 2082/2387/53 2085/2388/53 2083/2389/53 2084/2390/53 +f 2089/2391/2 2096/2392/2 2099/2393/2 2091/2394/2 2100/2395/2 2098/2396/2 2090/2397/2 2087/2398/2 +f 2095/2399/51 2096/2400/51 2089/2401/51 2086/2402/51 +f 2093/2403/52 2088/2404/52 2087/2405/52 2090/2406/52 +f 2099/2407/54 2096/2408/54 2095/2409/54 2092/2410/54 +f 2101/2411/51 2091/2412/51 2099/2413/51 2092/2414/51 +f 2094/2415/52 2097/2416/52 2098/2417/52 2100/2418/52 +f 2090/2419/54 2098/2420/54 2097/2421/54 2093/2422/54 +f 2100/2423/54 2091/2424/54 2101/2425/54 2094/2426/54 +f 2088/2427/53 2093/2428/53 2097/2429/53 2094/2430/53 2101/2431/53 2092/2432/53 2095/2433/53 2086/2434/53 +f 2105/2435/2 2112/2436/2 2115/2437/2 2107/2438/2 2116/2439/2 2114/2440/2 2106/2441/2 2103/2442/2 +f 2111/2443/51 2112/2444/51 2105/2445/51 2102/2446/51 +f 2109/2447/52 2104/2448/52 2103/2449/52 2106/2450/52 +f 2115/2451/54 2112/2452/54 2111/2453/54 2108/2454/54 +f 2117/2455/51 2107/2456/51 2115/2457/51 2108/2458/51 +f 2110/2459/52 2113/2460/52 2114/2461/52 2116/2462/52 +f 2106/2463/54 2114/2464/54 2113/2465/54 2109/2466/54 +f 2116/2467/54 2107/2468/54 2117/2469/54 2110/2470/54 +f 2104/2471/53 2109/2472/53 2113/2473/53 2110/2474/53 2117/2475/53 2108/2476/53 2111/2477/53 2102/2478/53 +f 2121/2479/2 2119/2480/2 2149/2481/2 2147/2482/2 2145/2483/2 2143/2484/2 2141/2485/2 2139/2486/2 2137/2487/2 2135/2488/2 2133/2489/2 2131/2490/2 2129/2491/2 2127/2492/2 2125/2493/2 2123/2494/2 +f 2118/2495/53 2120/2496/53 2122/2497/53 2124/2498/53 2126/2499/53 2128/2500/53 2130/2501/53 2132/2502/53 2134/2503/53 2136/2504/53 2138/2505/53 2140/2506/53 2142/2507/53 2144/2508/53 2146/2509/53 2148/2510/53 +f 2217/2511/2 2215/2512/2 2245/2513/2 2243/2514/2 2241/2515/2 2239/2516/2 2237/2517/2 2235/2518/2 2233/2519/2 2231/2520/2 2229/2521/2 2227/2522/2 2225/2523/2 2223/2524/2 2221/2525/2 2219/2526/2 +f 2214/2527/53 2216/2528/53 2218/2529/53 2220/2530/53 2222/2531/53 2224/2532/53 2226/2533/53 2228/2534/53 2230/2535/53 2232/2536/53 2234/2537/53 2236/2538/53 2238/2539/53 2240/2540/53 2242/2541/53 2244/2542/53 +f 2312/2543/55 2313/2544/55 2311/2545/55 2310/2546/55 +f 2310/2547/53 2311/2548/53 2316/2549/53 2317/2550/53 +f 2314/2551/2 2315/2552/2 2313/2553/2 2312/2554/2 +f 2314/2555/54 2317/2556/54 2316/2557/54 2315/2558/54 +f 2321/2559/2 2328/2560/2 2331/2561/2 2323/2562/2 2332/2563/2 2330/2564/2 2322/2565/2 2319/2566/2 +f 2327/2567/52 2328/2568/52 2321/2569/52 2318/2570/52 +f 2325/2571/51 2320/2572/51 2319/2573/51 2322/2574/51 +f 2331/2575/55 2328/2576/55 2327/2577/55 2324/2578/55 +f 2333/2579/52 2323/2580/52 2331/2581/52 2324/2582/52 +f 2326/2583/51 2329/2584/51 2330/2585/51 2332/2586/51 +f 2322/2587/55 2330/2588/55 2329/2589/55 2325/2590/55 +f 2332/2591/55 2323/2592/55 2333/2593/55 2326/2594/55 +f 2320/2595/53 2325/2596/53 2329/2597/53 2326/2598/53 2333/2599/53 2324/2600/53 2327/2601/53 2318/2602/53 +s 1 +f 3/2603/86 4/2604/87 12/2605/88 11/2606/89 +f 1/2607/90 2/2608/91 9/2609/92 10/2610/93 +f 8/2611/94 1/2612/90 10/2613/93 16/2614/95 +f 6/2615/96 7/2616/97 15/2617/98 14/2618/99 +f 4/2619/87 5/2620/100 13/2621/101 12/2622/88 +f 2/2623/91 3/2624/86 11/2625/89 9/2626/92 +f 7/2627/97 8/2628/94 16/2629/95 15/2630/98 +f 5/2631/100 6/2632/96 14/2633/99 13/2634/101 +f 19/2635/102 20/2636/103 4/2637/87 3/2638/86 +f 17/2639/104 18/2640/105 2/2641/91 1/2642/90 +f 24/2643/106 17/2644/104 1/2645/90 8/2646/94 +f 22/2647/107 23/2648/108 7/2649/97 6/2650/96 +f 20/2651/103 21/2652/109 5/2653/100 4/2654/87 +f 18/2655/105 19/2656/102 3/2657/86 2/2658/91 +f 23/2659/108 24/2660/106 8/2661/94 7/2662/97 +f 21/2663/109 22/2664/107 6/2665/96 5/2666/100 +f 27/2667/110 28/2668/111 20/2669/103 19/2670/102 +f 25/2671/112 26/2672/113 18/2673/105 17/2674/104 +f 32/2675/114 25/2676/112 17/2677/104 24/2678/106 +f 30/2679/115 31/2680/116 23/2681/108 22/2682/107 +f 28/2683/111 29/2684/117 21/2685/109 20/2686/103 +f 26/2687/113 27/2688/110 19/2689/102 18/2690/105 +f 31/2691/116 32/2692/114 24/2693/106 23/2694/108 +f 29/2695/117 30/2696/115 22/2697/107 21/2698/109 +f 35/2699/118 36/2700/119 28/2701/111 27/2702/110 +f 33/2703/120 34/2704/121 26/2705/113 25/2706/112 +f 40/2707/122 33/2708/120 25/2709/112 32/2710/114 +f 38/2711/123 39/2712/124 31/2713/116 30/2714/115 +f 36/2715/119 37/2716/125 29/2717/117 28/2718/111 +f 34/2719/121 35/2720/118 27/2721/110 26/2722/113 +f 39/2723/124 40/2724/122 32/2725/114 31/2726/116 +f 37/2727/125 38/2728/123 30/2729/115 29/2730/117 +f 43/2731/126 44/2732/127 36/2733/119 35/2734/118 +f 41/2735/128 42/2736/129 34/2737/121 33/2738/120 +f 48/2739/130 41/2740/128 33/2741/120 40/2742/122 +f 46/2743/131 47/2744/132 39/2745/124 38/2746/123 +f 44/2747/127 45/2748/133 37/2749/125 36/2750/119 +f 42/2751/129 43/2752/126 35/2753/118 34/2754/121 +f 47/2755/132 48/2756/130 40/2757/122 39/2758/124 +f 45/2759/133 46/2760/131 38/2761/123 37/2762/125 +f 51/2763/134 52/2764/135 44/2765/127 43/2766/126 +f 49/2767/136 50/2768/137 42/2769/129 41/2770/128 +f 56/2771/138 49/2772/136 41/2773/128 48/2774/130 +f 54/2775/139 55/2776/140 47/2777/132 46/2778/131 +f 52/2779/135 53/2780/141 45/2781/133 44/2782/127 +f 50/2783/137 51/2784/134 43/2785/126 42/2786/129 +f 55/2787/140 56/2788/138 48/2789/130 47/2790/132 +f 53/2791/141 54/2792/139 46/2793/131 45/2794/133 +f 59/2795/142 60/2796/143 52/2797/135 51/2798/134 +f 57/2799/144 58/2800/145 50/2801/137 49/2802/136 +f 64/2803/146 57/2804/144 49/2805/136 56/2806/138 +f 62/2807/147 63/2808/148 55/2809/140 54/2810/139 +f 60/2811/143 61/2812/149 53/2813/141 52/2814/135 +f 58/2815/145 59/2816/142 51/2817/134 50/2818/137 +f 63/2819/148 64/2820/146 56/2821/138 55/2822/140 +f 61/2823/149 62/2824/147 54/2825/139 53/2826/141 +f 67/2827/150 68/2828/151 60/2829/143 59/2830/142 +f 65/2831/152 66/2832/153 58/2833/145 57/2834/144 +f 72/2835/154 65/2836/152 57/2837/144 64/2838/146 +f 70/2839/155 71/2840/156 63/2841/148 62/2842/147 +f 68/2843/151 69/2844/157 61/2845/149 60/2846/143 +f 66/2847/153 67/2848/150 59/2849/142 58/2850/145 +f 71/2851/156 72/2852/154 64/2853/146 63/2854/148 +f 69/2855/157 70/2856/155 62/2857/147 61/2858/149 +f 75/2859/158 76/2860/159 68/2861/151 67/2862/150 +f 73/2863/160 74/2864/161 66/2865/153 65/2866/152 +f 80/2867/162 73/2868/160 65/2869/152 72/2870/154 +f 78/2871/163 79/2872/164 71/2873/156 70/2874/155 +f 76/2875/159 77/2876/165 69/2877/157 68/2878/151 +f 74/2879/161 75/2880/158 67/2881/150 66/2882/153 +f 79/2883/164 80/2884/162 72/2885/154 71/2886/156 +f 77/2887/165 78/2888/163 70/2889/155 69/2890/157 +f 83/2891/166 84/2892/167 76/2893/159 75/2894/158 +f 81/2895/168 82/2896/169 74/2897/161 73/2898/160 +f 88/2899/170 81/2900/168 73/2901/160 80/2902/162 +f 86/2903/171 87/2904/172 79/2905/164 78/2906/163 +f 84/2907/167 85/2908/173 77/2909/165 76/2910/159 +f 82/2911/169 83/2912/166 75/2913/158 74/2914/161 +f 87/2915/172 88/2916/170 80/2917/162 79/2918/164 +f 85/2919/173 86/2920/171 78/2921/163 77/2922/165 +f 91/2923/174 92/2924/175 84/2925/167 83/2926/166 +f 89/2927/176 90/2928/177 82/2929/169 81/2930/168 +f 96/2931/178 89/2932/176 81/2933/168 88/2934/170 +f 94/2935/179 95/2936/180 87/2937/172 86/2938/171 +f 92/2939/175 93/2940/181 85/2941/173 84/2942/167 +f 90/2943/177 91/2944/174 83/2945/166 82/2946/169 +f 95/2947/180 96/2948/178 88/2949/170 87/2950/172 +f 93/2951/181 94/2952/179 86/2953/171 85/2954/173 +f 99/2955/182 100/2956/183 92/2957/175 91/2958/174 +f 97/2959/184 98/2960/185 90/2961/177 89/2962/176 +f 104/2963/186 97/2964/184 89/2965/176 96/2966/178 +f 102/2967/187 103/2968/188 95/2969/180 94/2970/179 +f 100/2971/183 101/2972/189 93/2973/181 92/2974/175 +f 98/2975/185 99/2976/182 91/2977/174 90/2978/177 +f 103/2979/188 104/2980/186 96/2981/178 95/2982/180 +f 101/2983/189 102/2984/187 94/2985/179 93/2986/181 +f 107/2987/190 108/2988/191 100/2989/183 99/2990/182 +f 105/2991/192 106/2992/193 98/2993/185 97/2994/184 +f 112/2995/194 105/2996/192 97/2997/184 104/2998/186 +f 110/2999/195 111/3000/196 103/3001/188 102/3002/187 +f 108/3003/191 109/3004/197 101/3005/189 100/3006/183 +f 106/3007/193 107/3008/190 99/3009/182 98/3010/185 +f 111/3011/196 112/3012/194 104/3013/186 103/3014/188 +f 109/3015/197 110/3016/195 102/3017/187 101/3018/189 +f 115/3019/198 116/3020/199 108/3021/191 107/3022/190 +f 113/3023/200 114/3024/201 106/3025/193 105/3026/192 +f 120/3027/202 113/3028/200 105/3029/192 112/3030/194 +f 118/3031/203 119/3032/204 111/3033/196 110/3034/195 +f 116/3035/199 117/3036/205 109/3037/197 108/3038/191 +f 114/3039/201 115/3040/198 107/3041/190 106/3042/193 +f 119/3043/204 120/3044/202 112/3045/194 111/3046/196 +f 117/3047/205 118/3048/203 110/3049/195 109/3050/197 +f 123/3051/206 124/3052/207 116/3053/199 115/3054/198 +f 121/3055/208 122/3056/209 114/3057/201 113/3058/200 +f 128/3059/210 121/3060/208 113/3061/200 120/3062/202 +f 126/3063/211 127/3064/212 119/3065/204 118/3066/203 +f 124/3067/207 125/3068/213 117/3069/205 116/3070/199 +f 122/3071/209 123/3072/206 115/3073/198 114/3074/201 +f 127/3075/212 128/3076/210 120/3077/202 119/3078/204 +f 125/3079/213 126/3080/211 118/3081/203 117/3082/205 +f 131/3083/214 132/3084/215 124/3085/207 123/3086/206 +f 129/3087/216 130/3088/217 122/3089/209 121/3090/208 +f 136/3091/218 129/3092/216 121/3093/208 128/3094/210 +f 134/3095/219 135/3096/220 127/3097/212 126/3098/211 +f 132/3099/215 133/3100/221 125/3101/213 124/3102/207 +f 130/3103/217 131/3104/214 123/3105/206 122/3106/209 +f 135/3107/220 136/3108/218 128/3109/210 127/3110/212 +f 133/3111/221 134/3112/219 126/3113/211 125/3114/213 +f 139/3115/222 140/3116/223 132/3117/215 131/3118/214 +f 137/3119/224 138/3120/225 130/3121/217 129/3122/216 +f 144/3123/226 137/3124/224 129/3125/216 136/3126/218 +f 142/3127/227 143/3128/228 135/3129/220 134/3130/219 +f 140/3131/223 141/3132/229 133/3133/221 132/3134/215 +f 138/3135/225 139/3136/222 131/3137/214 130/3138/217 +f 143/3139/228 144/3140/226 136/3141/218 135/3142/220 +f 141/3143/229 142/3144/227 134/3145/219 133/3146/221 +f 147/3147/230 148/3148/231 140/3149/223 139/3150/222 +f 145/3151/232 146/3152/233 138/3153/225 137/3154/224 +f 152/3155/234 145/3156/232 137/3157/224 144/3158/226 +f 150/3159/235 151/3160/236 143/3161/228 142/3162/227 +f 148/3163/231 149/3164/237 141/3165/229 140/3166/223 +f 146/3167/233 147/3168/230 139/3169/222 138/3170/225 +f 151/3171/236 152/3172/234 144/3173/226 143/3174/228 +f 149/3175/237 150/3176/235 142/3177/227 141/3178/229 +f 155/3179/238 156/3180/239 148/3181/231 147/3182/230 +f 153/3183/240 154/3184/241 146/3185/233 145/3186/232 +f 160/3187/242 153/3188/240 145/3189/232 152/3190/234 +f 158/3191/243 159/3192/244 151/3193/236 150/3194/235 +f 156/3195/239 157/3196/245 149/3197/237 148/3198/231 +f 154/3199/241 155/3200/238 147/3201/230 146/3202/233 +f 159/3203/244 160/3204/242 152/3205/234 151/3206/236 +f 157/3207/245 158/3208/243 150/3209/235 149/3210/237 +f 163/3211/246 164/3212/247 156/3213/239 155/3214/238 +f 161/3215/248 162/3216/249 154/3217/241 153/3218/240 +f 168/3219/250 161/3220/248 153/3221/240 160/3222/242 +f 166/3223/251 167/3224/252 159/3225/244 158/3226/243 +f 164/3227/247 165/3228/253 157/3229/245 156/3230/239 +f 162/3231/249 163/3232/246 155/3233/238 154/3234/241 +f 167/3235/252 168/3236/250 160/3237/242 159/3238/244 +f 165/3239/253 166/3240/251 158/3241/243 157/3242/245 +f 171/3243/254 172/3244/255 164/3245/247 163/3246/246 +f 169/3247/256 170/3248/257 162/3249/249 161/3250/248 +f 176/3251/258 169/3252/256 161/3253/248 168/3254/250 +f 174/3255/259 175/3256/260 167/3257/252 166/3258/251 +f 172/3259/255 173/3260/261 165/3261/253 164/3262/247 +f 170/3263/257 171/3264/254 163/3265/246 162/3266/249 +f 175/3267/260 176/3268/258 168/3269/250 167/3270/252 +f 173/3271/261 174/3272/259 166/3273/251 165/3274/253 +f 179/3275/262 180/3276/263 172/3277/255 171/3278/254 +f 177/3279/264 178/3280/265 170/3281/257 169/3282/256 +f 184/3283/266 177/3284/264 169/3285/256 176/3286/258 +f 182/3287/267 183/3288/268 175/3289/260 174/3290/259 +f 180/3291/263 181/3292/269 173/3293/261 172/3294/255 +f 178/3295/265 179/3296/262 171/3297/254 170/3298/257 +f 183/3299/268 184/3300/266 176/3301/258 175/3302/260 +f 181/3303/269 182/3304/267 174/3305/259 173/3306/261 +f 187/3307/270 188/3308/271 180/3309/263 179/3310/262 +f 185/3311/272 186/3312/273 178/3313/265 177/3314/264 +f 192/3315/274 185/3316/272 177/3317/264 184/3318/266 +f 190/3319/275 191/3320/276 183/3321/268 182/3322/267 +f 188/3323/271 189/3324/277 181/3325/269 180/3326/263 +f 186/3327/273 187/3328/270 179/3329/262 178/3330/265 +f 191/3331/276 192/3332/274 184/3333/266 183/3334/268 +f 189/3335/277 190/3336/275 182/3337/267 181/3338/269 +f 195/3339/278 196/3340/279 188/3341/271 187/3342/270 +f 193/3343/280 194/3344/281 186/3345/273 185/3346/272 +f 200/3347/282 193/3348/280 185/3349/272 192/3350/274 +f 198/3351/283 199/3352/284 191/3353/276 190/3354/275 +f 196/3355/279 197/3356/285 189/3357/277 188/3358/271 +f 194/3359/281 195/3360/278 187/3361/270 186/3362/273 +f 199/3363/284 200/3364/282 192/3365/274 191/3366/276 +f 197/3367/285 198/3368/283 190/3369/275 189/3370/277 +f 203/3371/286 204/3372/287 196/3373/279 195/3374/278 +f 201/3375/288 202/3376/289 194/3377/281 193/3378/280 +f 208/3379/290 201/3380/288 193/3381/280 200/3382/282 +f 206/3383/291 207/3384/292 199/3385/284 198/3386/283 +f 204/3387/287 205/3388/293 197/3389/285 196/3390/279 +f 202/3391/289 203/3392/286 195/3393/278 194/3394/281 +f 207/3395/292 208/3396/290 200/3397/282 199/3398/284 +f 205/3399/293 206/3400/291 198/3401/283 197/3402/285 +f 211/3403/294 212/3404/295 204/3405/287 203/3406/286 +f 209/3407/296 210/3408/297 202/3409/289 201/3410/288 +f 216/3411/298 209/3412/296 201/3413/288 208/3414/290 +f 214/3415/299 215/3416/300 207/3417/292 206/3418/291 +f 212/3419/295 213/3420/301 205/3421/293 204/3422/287 +f 210/3423/297 211/3424/294 203/3425/286 202/3426/289 +f 215/3427/300 216/3428/298 208/3429/290 207/3430/292 +f 213/3431/301 214/3432/299 206/3433/291 205/3434/293 +f 219/3435/302 220/3436/303 212/3437/295 211/3438/294 +f 217/3439/304 218/3440/305 210/3441/297 209/3442/296 +f 224/3443/306 217/3444/304 209/3445/296 216/3446/298 +f 222/3447/307 223/3448/308 215/3449/300 214/3450/299 +f 220/3451/303 221/3452/309 213/3453/301 212/3454/295 +f 218/3455/305 219/3456/302 211/3457/294 210/3458/297 +f 223/3459/308 224/3460/306 216/3461/298 215/3462/300 +f 221/3463/309 222/3464/307 214/3465/299 213/3466/301 +f 227/3467/310 228/3468/311 220/3469/303 219/3470/302 +f 225/3471/312 226/3472/313 218/3473/305 217/3474/304 +f 232/3475/314 225/3476/312 217/3477/304 224/3478/306 +f 230/3479/315 231/3480/316 223/3481/308 222/3482/307 +f 228/3483/311 229/3484/317 221/3485/309 220/3486/303 +f 226/3487/313 227/3488/310 219/3489/302 218/3490/305 +f 231/3491/316 232/3492/314 224/3493/306 223/3494/308 +f 229/3495/317 230/3496/315 222/3497/307 221/3498/309 +f 235/3499/318 236/3500/319 228/3501/311 227/3502/310 +f 233/3503/320 234/3504/321 226/3505/313 225/3506/312 +f 240/3507/322 233/3508/320 225/3509/312 232/3510/314 +f 238/3511/323 239/3512/324 231/3513/316 230/3514/315 +f 236/3515/319 237/3516/325 229/3517/317 228/3518/311 +f 234/3519/321 235/3520/318 227/3521/310 226/3522/313 +f 239/3523/324 240/3524/322 232/3525/314 231/3526/316 +f 237/3527/325 238/3528/323 230/3529/315 229/3530/317 +f 243/3531/326 244/3532/327 236/3533/319 235/3534/318 +f 241/3535/328 242/3536/329 234/3537/321 233/3538/320 +f 248/3539/330 241/3540/328 233/3541/320 240/3542/322 +f 246/3543/331 247/3544/332 239/3545/324 238/3546/323 +f 244/3547/327 245/3548/333 237/3549/325 236/3550/319 +f 242/3551/329 243/3552/326 235/3553/318 234/3554/321 +f 247/3555/332 248/3556/330 240/3557/322 239/3558/324 +f 245/3559/333 246/3560/331 238/3561/323 237/3562/325 +f 251/3563/334 252/3564/335 244/3565/327 243/3566/326 +f 249/3567/336 250/3568/337 242/3569/329 241/3570/328 +f 256/3571/338 249/3572/336 241/3573/328 248/3574/330 +f 254/3575/339 255/3576/340 247/3577/332 246/3578/331 +f 252/3579/335 253/3580/341 245/3581/333 244/3582/327 +f 250/3583/337 251/3584/334 243/3585/326 242/3586/329 +f 255/3587/340 256/3588/338 248/3589/330 247/3590/332 +f 253/3591/341 254/3592/339 246/3593/331 245/3594/333 +f 259/3595/342 260/3596/343 252/3597/335 251/3598/334 +f 257/3599/344 258/3600/345 250/3601/337 249/3602/336 +f 264/3603/346 257/3604/344 249/3605/336 256/3606/338 +f 262/3607/347 263/3608/348 255/3609/340 254/3610/339 +f 260/3611/343 261/3612/349 253/3613/341 252/3614/335 +f 258/3615/345 259/3616/342 251/3617/334 250/3618/337 +f 263/3619/348 264/3620/346 256/3621/338 255/3622/340 +f 261/3623/349 262/3624/347 254/3625/339 253/3626/341 +f 267/3627/350 268/3628/351 260/3629/343 259/3630/342 +f 265/3631/352 266/3632/353 258/3633/345 257/3634/344 +f 272/3635/354 265/3636/352 257/3637/344 264/3638/346 +f 270/3639/355 271/3640/356 263/3641/348 262/3642/347 +f 268/3643/351 269/3644/357 261/3645/349 260/3646/343 +f 266/3647/353 267/3648/350 259/3649/342 258/3650/345 +f 271/3651/356 272/3652/354 264/3653/346 263/3654/348 +f 269/3655/357 270/3656/355 262/3657/347 261/3658/349 +f 275/3659/358 276/3660/359 268/3661/351 267/3662/350 +f 273/3663/360 274/3664/361 266/3665/353 265/3666/352 +f 280/3667/362 273/3668/360 265/3669/352 272/3670/354 +f 278/3671/363 279/3672/364 271/3673/356 270/3674/355 +f 276/3675/359 277/3676/365 269/3677/357 268/3678/351 +f 274/3679/361 275/3680/358 267/3681/350 266/3682/353 +f 279/3683/364 280/3684/362 272/3685/354 271/3686/356 +f 277/3687/365 278/3688/363 270/3689/355 269/3690/357 +f 283/3691/366 284/3692/367 276/3693/359 275/3694/358 +f 281/3695/368 282/3696/369 274/3697/361 273/3698/360 +f 288/3699/370 281/3700/368 273/3701/360 280/3702/362 +f 286/3703/371 287/3704/372 279/3705/364 278/3706/363 +f 284/3707/367 285/3708/373 277/3709/365 276/3710/359 +f 282/3711/369 283/3712/366 275/3713/358 274/3714/361 +f 287/3715/372 288/3716/370 280/3717/362 279/3718/364 +f 285/3719/373 286/3720/371 278/3721/363 277/3722/365 +f 291/3723/374 292/3724/375 284/3725/367 283/3726/366 +f 289/3727/376 290/3728/377 282/3729/369 281/3730/368 +f 296/3731/378 289/3732/376 281/3733/368 288/3734/370 +f 294/3735/379 295/3736/380 287/3737/372 286/3738/371 +f 292/3739/375 293/3740/381 285/3741/373 284/3742/367 +f 290/3743/377 291/3744/374 283/3745/366 282/3746/369 +f 295/3747/380 296/3748/378 288/3749/370 287/3750/372 +f 293/3751/381 294/3752/379 286/3753/371 285/3754/373 +f 299/3755/382 300/3756/383 292/3757/375 291/3758/374 +f 297/3759/384 298/3760/385 290/3761/377 289/3762/376 +f 304/3763/386 297/3764/384 289/3765/376 296/3766/378 +f 302/3767/387 303/3768/388 295/3769/380 294/3770/379 +f 300/3771/383 301/3772/389 293/3773/381 292/3774/375 +f 298/3775/385 299/3776/382 291/3777/374 290/3778/377 +f 303/3779/388 304/3780/386 296/3781/378 295/3782/380 +f 301/3783/389 302/3784/387 294/3785/379 293/3786/381 +f 307/3787/390 308/3788/391 300/3789/383 299/3790/382 +f 305/3791/392 306/3792/393 298/3793/385 297/3794/384 +f 312/3795/394 305/3796/392 297/3797/384 304/3798/386 +f 310/3799/395 311/3800/396 303/3801/388 302/3802/387 +f 308/3803/391 309/3804/397 301/3805/389 300/3806/383 +f 306/3807/393 307/3808/390 299/3809/382 298/3810/385 +f 311/3811/396 312/3812/394 304/3813/386 303/3814/388 +f 309/3815/397 310/3816/395 302/3817/387 301/3818/389 +f 315/3819/398 316/3820/399 308/3821/391 307/3822/390 +f 313/3823/400 314/3824/401 306/3825/393 305/3826/392 +f 320/3827/402 313/3828/400 305/3829/392 312/3830/394 +f 318/3831/403 319/3832/404 311/3833/396 310/3834/395 +f 316/3835/399 317/3836/405 309/3837/397 308/3838/391 +f 314/3839/401 315/3840/398 307/3841/390 306/3842/393 +f 319/3843/404 320/3844/402 312/3845/394 311/3846/396 +f 317/3847/405 318/3848/403 310/3849/395 309/3850/397 +f 323/3851/406 324/3852/407 316/3853/399 315/3854/398 +f 321/3855/408 322/3856/409 314/3857/401 313/3858/400 +f 328/3859/410 321/3860/408 313/3861/400 320/3862/402 +f 326/3863/411 327/3864/412 319/3865/404 318/3866/403 +f 324/3867/407 325/3868/413 317/3869/405 316/3870/399 +f 322/3871/409 323/3872/406 315/3873/398 314/3874/401 +f 327/3875/412 328/3876/410 320/3877/402 319/3878/404 +f 325/3879/413 326/3880/411 318/3881/403 317/3882/405 +f 331/3883/414 332/3884/415 324/3885/407 323/3886/406 +f 329/3887/416 330/3888/417 322/3889/409 321/3890/408 +f 336/3891/418 329/3892/416 321/3893/408 328/3894/410 +f 334/3895/419 335/3896/420 327/3897/412 326/3898/411 +f 332/3899/415 333/3900/421 325/3901/413 324/3902/407 +f 330/3903/417 331/3904/414 323/3905/406 322/3906/409 +f 335/3907/420 336/3908/418 328/3909/410 327/3910/412 +f 333/3911/421 334/3912/419 326/3913/411 325/3914/413 +f 339/3915/422 340/3916/423 332/3917/415 331/3918/414 +f 337/3919/424 338/3920/425 330/3921/417 329/3922/416 +f 344/3923/426 337/3924/424 329/3925/416 336/3926/418 +f 342/3927/427 343/3928/428 335/3929/420 334/3930/419 +f 340/3931/423 341/3932/429 333/3933/421 332/3934/415 +f 338/3935/425 339/3936/422 331/3937/414 330/3938/417 +f 343/3939/428 344/3940/426 336/3941/418 335/3942/420 +f 341/3943/429 342/3944/427 334/3945/419 333/3946/421 +f 347/3947/430 348/3948/431 340/3949/423 339/3950/422 +f 345/3951/432 346/3952/433 338/3953/425 337/3954/424 +f 352/3955/434 345/3956/432 337/3957/424 344/3958/426 +f 350/3959/435 351/3960/436 343/3961/428 342/3962/427 +f 348/3963/431 349/3964/437 341/3965/429 340/3966/423 +f 346/3967/433 347/3968/430 339/3969/422 338/3970/425 +f 351/3971/436 352/3972/434 344/3973/426 343/3974/428 +f 349/3975/437 350/3976/435 342/3977/427 341/3978/429 +f 355/3979/438 356/3980/439 348/3981/431 347/3982/430 +f 353/3983/440 354/3984/441 346/3985/433 345/3986/432 +f 360/3987/442 353/3988/440 345/3989/432 352/3990/434 +f 358/3991/443 359/3992/444 351/3993/436 350/3994/435 +f 356/3995/439 357/3996/445 349/3997/437 348/3998/431 +f 354/3999/441 355/4000/438 347/4001/430 346/4002/433 +f 359/4003/444 360/4004/442 352/4005/434 351/4006/436 +f 357/4007/445 358/4008/443 350/4009/435 349/4010/437 +f 363/4011/446 364/4012/447 356/4013/439 355/4014/438 +f 361/4015/448 362/4016/449 354/4017/441 353/4018/440 +f 368/4019/450 361/4020/448 353/4021/440 360/4022/442 +f 366/4023/451 367/4024/452 359/4025/444 358/4026/443 +f 364/4027/447 365/4028/453 357/4029/445 356/4030/439 +f 362/4031/449 363/4032/446 355/4033/438 354/4034/441 +f 367/4035/452 368/4036/450 360/4037/442 359/4038/444 +f 365/4039/453 366/4040/451 358/4041/443 357/4042/445 +f 371/4043/454 372/4044/455 364/4045/447 363/4046/446 +f 369/4047/456 370/4048/457 362/4049/449 361/4050/448 +f 376/4051/458 369/4052/456 361/4053/448 368/4054/450 +f 374/4055/459 375/4056/460 367/4057/452 366/4058/451 +f 372/4059/455 373/4060/461 365/4061/453 364/4062/447 +f 370/4063/457 371/4064/454 363/4065/446 362/4066/449 +f 375/4067/460 376/4068/458 368/4069/450 367/4070/452 +f 373/4071/461 374/4072/459 366/4073/451 365/4074/453 +f 379/4075/462 380/4076/463 372/4077/455 371/4078/454 +f 377/4079/464 378/4080/465 370/4081/457 369/4082/456 +f 384/4083/466 377/4084/464 369/4085/456 376/4086/458 +f 382/4087/467 383/4088/468 375/4089/460 374/4090/459 +f 380/4091/463 381/4092/469 373/4093/461 372/4094/455 +f 378/4095/465 379/4096/462 371/4097/454 370/4098/457 +f 383/4099/468 384/4100/466 376/4101/458 375/4102/460 +f 381/4103/469 382/4104/467 374/4105/459 373/4106/461 +f 387/4107/470 388/4108/471 380/4109/463 379/4110/462 +f 385/4111/472 386/4112/473 378/4113/465 377/4114/464 +f 392/4115/474 385/4116/472 377/4117/464 384/4118/466 +f 390/4119/475 391/4120/476 383/4121/468 382/4122/467 +f 388/4123/471 389/4124/477 381/4125/469 380/4126/463 +f 386/4127/473 387/4128/470 379/4129/462 378/4130/465 +f 391/4131/476 392/4132/474 384/4133/466 383/4134/468 +f 389/4135/477 390/4136/475 382/4137/467 381/4138/469 +f 395/4139/478 396/4140/479 388/4141/471 387/4142/470 +f 393/4143/480 394/4144/481 386/4145/473 385/4146/472 +f 400/4147/482 393/4148/480 385/4149/472 392/4150/474 +f 398/4151/483 399/4152/484 391/4153/476 390/4154/475 +f 396/4155/479 397/4156/485 389/4157/477 388/4158/471 +f 394/4159/481 395/4160/478 387/4161/470 386/4162/473 +f 399/4163/484 400/4164/482 392/4165/474 391/4166/476 +f 397/4167/485 398/4168/483 390/4169/475 389/4170/477 +f 403/4171/486 404/4172/487 396/4173/479 395/4174/478 +f 401/4175/488 402/4176/489 394/4177/481 393/4178/480 +f 408/4179/490 401/4180/488 393/4181/480 400/4182/482 +f 406/4183/491 407/4184/492 399/4185/484 398/4186/483 +f 404/4187/487 405/4188/493 397/4189/485 396/4190/479 +f 402/4191/489 403/4192/486 395/4193/478 394/4194/481 +f 407/4195/492 408/4196/490 400/4197/482 399/4198/484 +f 405/4199/493 406/4200/491 398/4201/483 397/4202/485 +f 411/4203/494 412/4204/487 404/4205/487 403/4206/486 +f 409/4207/488 410/4208/489 402/4209/489 401/4210/488 +f 416/4211/490 409/4212/488 401/4213/488 408/4214/490 +f 414/4215/491 415/4216/492 407/4217/492 406/4218/491 +f 412/4219/487 413/4220/493 405/4221/493 404/4222/487 +f 410/4223/489 411/4224/494 403/4225/486 402/4226/489 +f 415/4227/492 416/4228/490 408/4229/490 407/4230/492 +f 413/4231/493 414/4232/491 406/4233/491 405/4234/493 +f 419/4235/495 420/4236/496 412/4237/487 411/4238/494 +f 417/4239/497 418/4240/498 410/4241/489 409/4242/488 +f 424/4243/499 417/4244/497 409/4245/488 416/4246/490 +f 422/4247/500 423/4248/501 415/4249/492 414/4250/491 +f 420/4251/496 421/4252/502 413/4253/493 412/4254/487 +f 418/4255/498 419/4256/495 411/4257/494 410/4258/489 +f 423/4259/501 424/4260/499 416/4261/490 415/4262/492 +f 421/4263/502 422/4264/500 414/4265/491 413/4266/493 +f 492/4267/503 489/4268/503 486/4269/504 487/4270/504 +f 488/4271/505 485/4272/505 482/4273/506 483/4274/506 +f 480/4275/507 477/4276/507 474/4277/508 475/4278/508 +f 484/4279/509 481/4280/509 478/4281/510 479/4282/510 +f 500/4283/511 497/4284/511 494/4285/512 495/4286/512 +f 504/4287/513 501/4288/513 498/4289/514 499/4290/514 +f 496/4291/515 493/4292/515 490/4293/516 491/4294/516 +f 481/4280/509 484/4279/509 483/4274/506 482/4273/506 +f 477/4276/507 480/4275/507 479/4282/510 478/4281/510 +f 473/4295/517 476/4296/517 475/4278/508 474/4277/508 +f 487/4270/504 486/4269/504 485/4272/505 488/4271/505 +f 501/4288/513 504/4287/513 503/4297/518 502/4298/518 +f 497/4284/511 500/4283/511 499/4290/514 498/4289/514 +f 489/4268/503 492/4267/503 491/4299/516 490/4300/516 +f 493/4292/515 496/4291/515 495/4286/512 494/4285/512 +f 476/4296/517 473/4295/517 502/4298/518 503/4297/518 +f 622/4301/519 619/4302/519 616/4303/520 617/4304/520 +f 618/4305/521 615/4306/521 612/4307/522 613/4308/522 +f 610/4309/523 607/4310/523 604/4311/524 605/4312/524 +f 614/4313/525 611/4314/525 608/4315/526 609/4316/526 +f 630/4317/527 627/4318/527 624/4319/528 625/4320/528 +f 634/4321/529 631/4322/529 628/4323/530 629/4324/530 +f 626/4325/531 623/4326/531 620/4327/532 621/4328/532 +f 611/4314/525 614/4313/525 613/4308/522 612/4307/522 +f 607/4310/523 610/4309/523 609/4316/526 608/4315/526 +f 603/4329/533 606/4330/533 605/4312/524 604/4311/524 +f 617/4304/520 616/4303/520 615/4306/521 618/4305/521 +f 631/4322/529 634/4321/529 633/4331/534 632/4332/534 +f 627/4318/527 630/4317/527 629/4324/530 628/4323/530 +f 619/4302/519 622/4301/519 621/4333/532 620/4334/532 +f 623/4326/531 626/4325/531 625/4320/528 624/4319/528 +f 606/4330/533 603/4329/533 632/4332/534 633/4331/534 +f 670/4335/519 667/4336/519 664/4337/520 665/4338/520 +f 666/4339/521 663/4340/521 660/4341/522 661/4342/522 +f 658/4343/523 655/4344/523 652/4345/524 653/4346/524 +f 662/4347/525 659/4348/525 656/4349/526 657/4350/526 +f 678/4351/527 675/4352/527 672/4353/528 673/4354/528 +f 682/4355/529 679/4356/529 676/4357/530 677/4358/530 +f 674/4359/531 671/4360/531 668/4361/532 669/4362/532 +f 659/4348/525 662/4347/525 661/4342/522 660/4341/522 +f 655/4344/523 658/4343/523 657/4350/526 656/4349/526 +f 651/4363/533 654/4364/533 653/4346/524 652/4345/524 +f 665/4338/520 664/4337/520 663/4340/521 666/4339/521 +f 679/4356/529 682/4355/529 681/4365/534 680/4366/534 +f 675/4352/527 678/4351/527 677/4358/530 676/4357/530 +f 667/4336/519 670/4335/519 669/4367/532 668/4368/532 +f 671/4360/531 674/4359/531 673/4354/528 672/4353/528 +f 654/4364/533 651/4363/533 680/4366/534 681/4365/534 +f 1106/4369/535 1154/4370/536 1153/4371/537 1104/4372/538 +f 1088/4373/539 1145/4374/540 1144/4375/541 1086/4376/542 +f 1132/4377/543 1167/4378/544 1166/4379/545 1130/4380/546 +f 1114/4381/547 1158/4382/548 1157/4383/549 1112/4384/550 +f 1096/4385/551 1149/4386/552 1148/4387/553 1094/4388/554 +f 1076/4389/555 1140/4390/556 1170/4391/557 1138/4392/558 +f 1078/4393/559 1139/4394/560 1140/4390/556 1076/4389/555 +f 1122/4395/561 1162/4396/562 1161/4397/563 1120/4398/564 +f 1104/4372/538 1153/4371/537 1152/4399/565 1102/4400/566 +f 1086/4376/542 1144/4375/541 1143/4401/567 1084/4402/568 +f 1130/4380/546 1166/4379/545 1165/4403/569 1128/4404/570 +f 1112/4384/550 1157/4383/549 1156/4405/571 1110/4406/572 +f 1094/4388/554 1148/4387/553 1147/4407/573 1092/4408/574 +f 1138/4392/558 1170/4391/557 1169/4409/575 1136/4410/576 +f 1120/4398/564 1161/4397/563 1160/4411/577 1118/4412/578 +f 1102/4400/566 1152/4399/565 1151/4413/579 1100/4414/580 +f 1084/4402/568 1143/4401/567 1142/4415/581 1082/4416/582 +f 1128/4404/570 1165/4403/569 1164/4417/583 1126/4418/584 +f 1110/4406/572 1156/4405/571 1155/4419/585 1108/4420/586 +f 1092/4408/574 1147/4407/573 1146/4421/587 1090/4422/588 +f 1136/4410/576 1169/4409/575 1168/4423/589 1134/4424/590 +f 1118/4412/578 1160/4411/577 1159/4425/591 1116/4426/592 +f 1100/4414/580 1151/4413/579 1150/4427/593 1098/4428/594 +f 1082/4416/582 1142/4415/581 1141/4429/595 1080/4430/596 +f 1126/4418/584 1164/4417/583 1163/4431/597 1124/4432/598 +f 1108/4420/586 1155/4419/585 1154/4370/536 1106/4369/535 +f 1090/4422/588 1146/4421/587 1145/4374/540 1088/4373/539 +f 1134/4424/590 1168/4423/589 1167/4378/544 1132/4377/543 +f 1116/4426/592 1159/4425/591 1158/4382/548 1114/4381/547 +f 1098/4428/594 1150/4427/593 1149/4386/552 1096/4385/551 +f 1080/4430/596 1141/4429/595 1139/4394/560 1078/4393/559 +f 1124/4432/598 1163/4431/597 1162/4396/562 1122/4395/561 +f 1087/4433/540 1177/4434/539 1178/4435/588 1089/4436/587 +f 1105/4437/536 1186/4438/535 1187/4439/586 1107/4440/585 +f 1123/4441/597 1195/4442/598 1196/4443/584 1125/4444/583 +f 1079/4445/595 1173/4446/596 1174/4447/582 1081/4448/581 +f 1097/4449/593 1182/4450/594 1183/4451/580 1099/4452/579 +f 1115/4453/591 1191/4454/592 1192/4455/578 1117/4456/577 +f 1133/4457/589 1200/4458/590 1201/4459/576 1135/4460/575 +f 1089/4436/587 1178/4435/588 1179/4461/574 1091/4462/573 +f 1107/4440/585 1187/4439/586 1188/4463/572 1109/4464/571 +f 1125/4444/583 1196/4443/584 1197/4465/570 1127/4466/569 +f 1081/4448/581 1174/4447/582 1175/4467/568 1083/4468/567 +f 1099/4452/579 1183/4451/580 1184/4469/566 1101/4470/565 +f 1117/4456/577 1192/4455/578 1193/4471/564 1119/4472/563 +f 1135/4460/575 1201/4459/576 1202/4473/558 1137/4474/557 +f 1091/4462/573 1179/4461/574 1180/4475/554 1093/4476/553 +f 1109/4464/571 1188/4463/572 1189/4477/550 1111/4478/549 +f 1127/4466/569 1197/4465/570 1198/4479/546 1129/4480/545 +f 1083/4468/567 1175/4467/568 1176/4481/542 1085/4482/541 +f 1101/4470/565 1184/4469/566 1185/4483/538 1103/4484/537 +f 1119/4472/563 1193/4471/564 1194/4485/561 1121/4486/562 +f 1075/4487/556 1171/4488/555 1172/4489/559 1077/4490/560 +f 1137/4474/557 1202/4473/558 1171/4488/555 1075/4487/556 +f 1093/4476/553 1180/4475/554 1181/4491/551 1095/4492/552 +f 1111/4478/549 1189/4477/550 1190/4493/547 1113/4494/548 +f 1129/4480/545 1198/4479/546 1199/4495/543 1131/4496/544 +f 1085/4482/541 1176/4481/542 1177/4434/539 1087/4433/540 +f 1103/4484/537 1185/4483/538 1186/4438/535 1105/4437/536 +f 1121/4486/562 1194/4485/561 1195/4442/598 1123/4441/597 +f 1077/4490/560 1172/4489/559 1173/4446/596 1079/4445/595 +f 1095/4492/552 1181/4491/551 1182/4450/594 1097/4449/593 +f 1113/4494/548 1190/4493/547 1191/4454/592 1115/4453/591 +f 1131/4496/544 1199/4495/543 1200/4458/590 1133/4457/589 +f 1205/4497/546 1206/4498/545 1290/4499/544 1289/4500/543 +f 1289/4500/543 1290/4499/544 1286/4501/589 1285/4502/590 +f 1285/4502/590 1286/4501/589 1314/4503/575 1313/4504/576 +f 1313/4504/576 1314/4503/575 1266/4505/557 1265/4506/558 +f 1265/4506/558 1266/4505/557 1242/4507/556 1241/4508/555 +f 1241/4508/555 1242/4507/556 1238/4509/560 1237/4510/559 +f 1237/4510/559 1238/4509/560 1246/4511/595 1245/4512/596 +f 1245/4512/596 1246/4511/595 1302/4513/581 1301/4514/582 +f 1301/4514/582 1302/4513/581 1234/4515/567 1233/4516/568 +f 1233/4516/568 1234/4515/567 1226/4517/541 1225/4518/542 +f 1225/4518/542 1226/4517/541 1222/4519/540 1221/4520/539 +f 1221/4520/539 1222/4519/540 1230/4521/587 1229/4522/588 +f 1229/4523/588 1230/4524/587 1297/4525/599 1298/4526/600 +f 1298/4526/600 1297/4525/599 1305/4527/553 1306/4528/554 +f 1306/4528/554 1305/4527/553 1321/4529/552 1322/4530/551 +f 1322/4530/551 1321/4529/552 1276/4531/593 1278/4532/594 +f 1278/4532/594 1276/4531/593 1268/4533/579 1270/4534/580 +f 1270/4534/580 1268/4533/579 1272/4535/565 1274/4536/566 +f 1274/4536/566 1272/4535/565 1216/4537/537 1218/4538/538 +f 1218/4538/538 1216/4537/537 1212/4539/536 1214/4540/535 +f 1214/4540/535 1212/4539/536 1208/4541/585 1210/4542/586 +f 1210/4542/586 1208/4541/585 1329/4543/571 1330/4544/572 +f 1330/4544/572 1329/4543/571 1325/4545/549 1326/4546/550 +f 1326/4546/550 1325/4545/549 1253/4547/548 1254/4548/547 +f 1254/4548/547 1253/4547/548 1309/4549/591 1310/4550/592 +f 1310/4550/592 1309/4549/591 1317/4551/577 1318/4552/578 +f 1318/4552/578 1317/4551/577 1261/4553/563 1262/4554/564 +f 1262/4554/564 1261/4553/563 1250/4555/562 1249/4556/561 +f 1249/4557/561 1250/4558/562 1258/4559/601 1257/4560/602 +f 1257/4560/602 1258/4559/601 1282/4561/583 1281/4562/584 +f 1281/4562/584 1282/4561/583 1294/4563/569 1293/4564/570 +f 1293/4564/570 1294/4563/569 1206/4498/545 1205/4497/546 +f 1441/4565/55 1442/4566/55 1444/4567/81 1443/4568/81 +f 1443/4568/81 1444/4567/81 1446/4569/52 1445/4570/52 +f 1445/4570/52 1446/4569/52 1448/4571/84 1447/4572/84 +f 1447/4572/84 1448/4571/84 1450/4573/54 1449/4574/54 +f 1449/4574/54 1450/4573/54 1452/4575/76 1451/4576/76 +f 1451/4576/76 1452/4575/76 1454/4577/51 1453/4578/51 +f 1453/4578/51 1454/4577/51 1456/4579/77 1455/4580/77 +f 1455/4581/77 1456/4582/77 1442/4566/55 1441/4565/55 +f 1467/4583/55 1468/4584/603 1470/4585/604 1469/4586/605 +f 1469/4586/605 1470/4585/604 1472/4587/606 1471/4588/81 +f 1471/4588/81 1472/4587/606 1474/4589/607 1473/4590/79 +f 1473/4590/79 1474/4589/607 1497/4591/608 1475/4592/52 +f 1475/4592/52 1497/4591/608 1477/4593/609 1476/4594/85 +f 1476/4594/85 1477/4593/609 1479/4595/610 1478/4596/84 +f 1478/4596/84 1479/4595/610 1481/4597/611 1480/4598/82 +f 1480/4598/82 1481/4597/611 1483/4599/612 1482/4600/54 +f 1482/4601/54 1483/4602/612 1493/4603/613 1484/4604/78 +f 1484/4604/78 1493/4603/613 1486/4605/614 1485/4606/76 +f 1485/4606/76 1486/4605/614 1488/4607/615 1487/4608/83 +f 1487/4608/83 1488/4607/615 1496/4609/616 1489/4610/51 +f 1489/4610/51 1496/4609/616 1494/4611/617 1490/4612/80 +f 1490/4612/80 1494/4611/617 1495/4613/618 1491/4614/77 +f 1491/4614/77 1495/4613/618 1498/4615/619 1492/4616/620 +f 1492/4616/620 1498/4615/619 1468/4617/603 1467/4618/55 +f 1499/4619/621 1500/4620/603 1502/4621/604 1501/4622/622 +f 1501/4622/622 1502/4621/604 1504/4623/606 1503/4624/623 +f 1503/4624/623 1504/4623/606 1506/4625/607 1505/4626/624 +f 1505/4626/624 1506/4625/607 1508/4627/608 1507/4628/625 +f 1507/4628/625 1508/4627/608 1510/4629/609 1509/4630/626 +f 1509/4630/626 1510/4629/609 1512/4631/610 1511/4632/627 +f 1511/4632/627 1512/4631/610 1514/4633/611 1513/4634/628 +f 1513/4634/628 1514/4633/611 1516/4635/612 1515/4636/629 +f 1515/4636/629 1516/4635/612 1518/4637/630 1517/4638/631 +f 1517/4638/631 1518/4637/630 1520/4639/614 1519/4640/632 +f 1519/4640/632 1520/4639/614 1522/4641/633 1521/4642/634 +f 1521/4642/634 1522/4641/633 1524/4643/616 1523/4644/635 +f 1523/4644/635 1524/4643/616 1526/4645/617 1525/4646/636 +f 1525/4646/636 1526/4645/617 1528/4647/618 1527/4648/637 +f 1527/4648/637 1528/4647/618 1530/4649/619 1529/4650/638 +f 1529/4651/638 1530/4652/619 1500/4620/603 1499/4619/621 +f 1550/4653/503 1547/4654/503 1544/4655/504 1545/4656/504 +f 1546/4657/505 1543/4658/505 1540/4659/506 1541/4660/506 +f 1538/4661/507 1535/4662/507 1532/4663/508 1533/4664/508 +f 1542/4665/509 1539/4666/509 1536/4667/510 1537/4668/510 +f 1558/4669/511 1555/4670/511 1552/4671/512 1553/4672/512 +f 1562/4673/513 1559/4674/513 1556/4675/514 1557/4676/514 +f 1554/4677/515 1551/4678/515 1548/4679/516 1549/4680/516 +f 1539/4666/509 1542/4665/509 1541/4660/506 1540/4659/506 +f 1535/4662/507 1538/4661/507 1537/4668/510 1536/4667/510 +f 1531/4681/517 1534/4682/517 1533/4664/508 1532/4663/508 +f 1545/4656/504 1544/4655/504 1543/4658/505 1546/4657/505 +f 1559/4674/513 1562/4673/513 1561/4683/518 1560/4684/518 +f 1555/4670/511 1558/4669/511 1557/4676/514 1556/4675/514 +f 1547/4654/503 1550/4653/503 1549/4685/516 1548/4686/516 +f 1551/4678/515 1554/4677/515 1553/4672/512 1552/4671/512 +f 1534/4682/517 1531/4681/517 1560/4684/518 1561/4683/518 +f 1753/4687/55 1754/4688/55 1756/4689/81 1755/4690/81 +f 1755/4690/81 1756/4689/81 1758/4691/52 1757/4692/52 +f 1757/4692/52 1758/4691/52 1760/4693/84 1759/4694/84 +f 1759/4694/84 1760/4693/84 1762/4695/54 1761/4696/54 +f 1761/4696/54 1762/4695/54 1764/4697/76 1763/4698/76 +f 1763/4698/76 1764/4697/76 1766/4699/51 1765/4700/51 +f 1765/4700/51 1766/4699/51 1768/4701/77 1767/4702/77 +f 1767/4703/77 1768/4704/77 1754/4688/55 1753/4687/55 +f 1957/4705/55 1958/4706/55 1960/4707/81 1959/4708/81 +f 1959/4708/81 1960/4707/81 1962/4709/52 1961/4710/52 +f 1961/4710/52 1962/4709/52 1964/4711/84 1963/4712/84 +f 1963/4712/84 1964/4711/84 1966/4713/54 1965/4714/54 +f 1965/4714/54 1966/4713/54 1968/4715/76 1967/4716/76 +f 1967/4716/76 1968/4715/76 1970/4717/51 1969/4718/51 +f 1969/4718/51 1970/4717/51 1972/4719/77 1971/4720/77 +f 1971/4721/77 1972/4722/77 1958/4706/55 1957/4705/55 +f 2080/4723/53 2065/4724/639 2066/4725/640 +f 2080/4726/53 2066/4725/640 2067/4727/641 +f 2080/4728/53 2067/4727/641 2068/4729/642 +f 2080/4730/53 2068/4729/642 2069/4731/643 +f 2080/4732/53 2069/4731/643 2070/4733/644 +f 2080/4734/53 2070/4733/644 2071/4735/645 +f 2080/4736/53 2071/4735/645 2072/4737/646 +f 2080/4738/53 2072/4739/646 2073/4740/647 +f 2080/4741/53 2073/4740/647 2074/4742/648 +f 2080/4743/53 2074/4742/648 2075/4744/649 +f 2080/4745/53 2075/4744/649 2076/4746/650 +f 2080/4747/53 2076/4746/650 2077/4748/651 +f 2080/4749/53 2077/4748/651 2078/4750/652 +f 2080/4751/53 2078/4750/652 2079/4752/653 +f 2080/4753/53 2079/4752/653 2081/4754/654 +f 2080/4755/53 2081/4756/654 2065/4724/639 +f 2153/4757/655 2119/4758/608 2121/4759/656 2154/4760/657 +f 2154/4760/657 2121/4759/656 2123/4761/610 2158/4762/658 +f 2158/4762/658 2123/4761/610 2125/4763/611 2162/4764/659 +f 2162/4764/659 2125/4763/611 2127/4765/612 2166/4766/660 +f 2166/4766/660 2127/4765/612 2129/4767/613 2170/4768/661 +f 2170/4768/661 2129/4767/613 2131/4769/614 2174/4770/662 +f 2174/4770/662 2131/4769/614 2133/4771/615 2178/4772/663 +f 2178/4772/663 2133/4771/615 2135/4773/616 2182/4774/664 +f 2182/4774/664 2135/4773/616 2137/4775/665 2186/4776/666 +f 2186/4776/666 2137/4775/665 2139/4777/618 2190/4778/667 +f 2190/4778/667 2139/4777/618 2141/4779/619 2194/4780/668 +f 2194/4780/668 2141/4779/619 2143/4781/603 2198/4782/669 +f 2198/4782/669 2143/4781/603 2145/4783/604 2202/4784/670 +f 2202/4784/670 2145/4783/604 2147/4785/606 2206/4786/671 +f 2206/4786/671 2147/4785/606 2149/4787/607 2210/4788/672 +f 2148/4789/624 2213/4790/673 2150/4791/674 2118/4792/625 +f 2213/4790/673 2212/4793/675 2151/4794/676 2150/4791/674 +f 2207/4795/677 2211/4796/678 2212/4797/675 2208/4798/679 +f 2211/4799/678 2210/4800/672 2153/4757/655 2152/4801/680 +f 2146/4802/623 2209/4803/681 2213/4804/673 2148/4805/624 +f 2209/4803/681 2208/4798/679 2212/4797/675 2213/4804/673 +f 2203/4806/682 2207/4795/677 2208/4798/679 2204/4807/683 +f 2207/4795/677 2206/4786/671 2210/4788/672 2211/4796/678 +f 2144/4808/622 2205/4809/684 2209/4803/681 2146/4802/623 +f 2205/4809/684 2204/4807/683 2208/4798/679 2209/4803/681 +f 2199/4810/685 2203/4806/682 2204/4807/683 2200/4811/686 +f 2203/4806/682 2202/4784/670 2206/4786/671 2207/4795/677 +f 2142/4812/621 2201/4813/687 2205/4809/684 2144/4808/622 +f 2201/4813/687 2200/4811/686 2204/4807/683 2205/4809/684 +f 2195/4814/688 2199/4810/685 2200/4811/686 2196/4815/689 +f 2199/4810/685 2198/4782/669 2202/4784/670 2203/4806/682 +f 2140/4816/690 2197/4817/691 2201/4813/687 2142/4812/621 +f 2197/4817/691 2196/4815/689 2200/4811/686 2201/4813/687 +f 2191/4818/692 2195/4814/688 2196/4815/689 2192/4819/693 +f 2195/4814/688 2194/4780/668 2198/4782/669 2199/4810/685 +f 2138/4820/637 2193/4821/694 2197/4817/691 2140/4816/690 +f 2193/4821/694 2192/4819/693 2196/4815/689 2197/4817/691 +f 2187/4822/695 2191/4818/692 2192/4819/693 2188/4823/696 +f 2191/4818/692 2190/4778/667 2194/4780/668 2195/4814/688 +f 2136/4824/697 2189/4825/698 2193/4821/694 2138/4820/637 +f 2189/4825/698 2188/4823/696 2192/4819/693 2193/4821/694 +f 2183/4826/699 2187/4827/695 2188/4828/696 2184/4829/700 +f 2187/4822/695 2186/4776/666 2190/4778/667 2191/4818/692 +f 2134/4830/635 2185/4831/701 2189/4825/698 2136/4824/697 +f 2185/4831/701 2184/4832/700 2188/4823/696 2189/4825/698 +f 2179/4833/702 2183/4826/699 2184/4829/700 2180/4834/703 +f 2183/4835/699 2182/4774/664 2186/4776/666 2187/4822/695 +f 2132/4836/634 2181/4837/704 2185/4831/701 2134/4830/635 +f 2181/4837/704 2180/4838/703 2184/4832/700 2185/4831/701 +f 2175/4839/705 2179/4833/702 2180/4834/703 2176/4840/706 +f 2179/4841/702 2178/4772/663 2182/4774/664 2183/4835/699 +f 2130/4842/632 2177/4843/707 2181/4837/704 2132/4836/634 +f 2177/4843/707 2176/4844/706 2180/4838/703 2181/4837/704 +f 2171/4845/708 2175/4839/705 2176/4840/706 2172/4846/709 +f 2175/4847/705 2174/4770/662 2178/4772/663 2179/4841/702 +f 2128/4848/631 2173/4849/710 2177/4843/707 2130/4842/632 +f 2173/4849/710 2172/4850/709 2176/4844/706 2177/4843/707 +f 2167/4851/711 2171/4845/708 2172/4846/709 2168/4852/712 +f 2171/4853/708 2170/4768/661 2174/4770/662 2175/4847/705 +f 2126/4854/629 2169/4855/713 2173/4849/710 2128/4848/631 +f 2169/4855/713 2168/4856/712 2172/4850/709 2173/4849/710 +f 2163/4857/714 2167/4851/711 2168/4852/712 2164/4858/715 +f 2167/4859/711 2166/4766/660 2170/4768/661 2171/4853/708 +f 2124/4860/716 2165/4861/717 2169/4855/713 2126/4854/629 +f 2165/4861/717 2164/4862/715 2168/4856/712 2169/4855/713 +f 2159/4863/718 2163/4857/714 2164/4858/715 2160/4864/719 +f 2163/4865/714 2162/4764/659 2166/4766/660 2167/4859/711 +f 2122/4866/627 2161/4867/720 2165/4861/717 2124/4860/716 +f 2161/4867/720 2160/4868/719 2164/4862/715 2165/4861/717 +f 2155/4869/721 2159/4863/718 2160/4864/719 2156/4870/722 +f 2159/4871/718 2158/4762/658 2162/4764/659 2163/4865/714 +f 2120/4872/723 2157/4873/724 2161/4867/720 2122/4866/627 +f 2157/4873/724 2156/4874/722 2160/4868/719 2161/4867/720 +f 2151/4875/676 2152/4876/680 2155/4869/721 2156/4870/722 +f 2155/4877/721 2154/4760/657 2158/4762/658 2159/4871/718 +f 2118/4792/625 2150/4791/674 2157/4873/724 2120/4872/723 +f 2150/4791/674 2151/4794/676 2156/4874/722 2157/4873/724 +f 2210/4800/672 2149/4878/607 2119/4758/608 2153/4757/655 +f 2152/4801/680 2153/4757/655 2154/4760/657 2155/4877/721 +f 2211/4879/678 2152/4876/680 2151/4875/676 2212/4880/675 +f 2249/4881/655 2215/4882/608 2217/4883/609 2250/4884/657 +f 2250/4884/657 2217/4883/609 2219/4885/610 2254/4886/658 +f 2254/4886/658 2219/4885/610 2221/4887/611 2258/4888/659 +f 2258/4888/659 2221/4887/611 2223/4889/612 2262/4890/660 +f 2262/4890/660 2223/4889/612 2225/4891/613 2266/4892/661 +f 2266/4892/661 2225/4891/613 2227/4893/614 2270/4894/662 +f 2270/4894/662 2227/4893/614 2229/4895/615 2274/4896/663 +f 2274/4896/663 2229/4895/615 2231/4897/616 2278/4898/664 +f 2278/4898/664 2231/4897/616 2233/4899/665 2282/4900/666 +f 2282/4900/666 2233/4899/665 2235/4901/618 2286/4902/667 +f 2286/4902/667 2235/4901/618 2237/4903/619 2290/4904/668 +f 2290/4904/668 2237/4903/619 2239/4905/603 2294/4906/669 +f 2294/4906/669 2239/4905/603 2241/4907/604 2298/4908/670 +f 2298/4908/670 2241/4907/604 2243/4909/606 2302/4910/725 +f 2302/4910/725 2243/4909/606 2245/4911/607 2306/4912/672 +f 2244/4913/624 2309/4914/673 2246/4915/674 2214/4916/625 +f 2309/4914/673 2308/4917/675 2247/4918/676 2246/4915/674 +f 2303/4919/677 2307/4920/678 2308/4921/675 2304/4922/679 +f 2307/4923/678 2306/4924/672 2249/4881/655 2248/4925/680 +f 2242/4926/623 2305/4927/681 2309/4928/673 2244/4929/624 +f 2305/4927/681 2304/4922/679 2308/4921/675 2309/4928/673 +f 2299/4930/682 2303/4919/677 2304/4922/679 2300/4931/683 +f 2303/4919/677 2302/4910/725 2306/4912/672 2307/4920/678 +f 2240/4932/622 2301/4933/684 2305/4927/681 2242/4926/623 +f 2301/4933/684 2300/4931/683 2304/4922/679 2305/4927/681 +f 2295/4934/685 2299/4930/682 2300/4931/683 2296/4935/686 +f 2299/4930/682 2298/4908/670 2302/4910/725 2303/4919/677 +f 2238/4936/621 2297/4937/687 2301/4933/684 2240/4932/622 +f 2297/4937/687 2296/4935/686 2300/4931/683 2301/4933/684 +f 2291/4938/688 2295/4934/685 2296/4935/686 2292/4939/689 +f 2295/4934/685 2294/4906/669 2298/4908/670 2299/4930/682 +f 2236/4940/638 2293/4941/691 2297/4937/687 2238/4936/621 +f 2293/4941/691 2292/4939/689 2296/4935/686 2297/4937/687 +f 2287/4942/692 2291/4938/688 2292/4939/689 2288/4943/693 +f 2291/4938/688 2290/4904/668 2294/4906/669 2295/4934/685 +f 2234/4944/637 2289/4945/694 2293/4941/691 2236/4940/638 +f 2289/4945/694 2288/4943/693 2292/4939/689 2293/4941/691 +f 2283/4946/695 2287/4942/692 2288/4943/693 2284/4947/696 +f 2287/4942/692 2286/4902/667 2290/4904/668 2291/4938/688 +f 2232/4948/636 2285/4949/698 2289/4945/694 2234/4944/637 +f 2285/4949/698 2284/4947/696 2288/4943/693 2289/4945/694 +f 2279/4950/699 2283/4951/695 2284/4952/696 2280/4953/700 +f 2283/4946/695 2282/4900/666 2286/4902/667 2287/4942/692 +f 2230/4954/635 2281/4955/701 2285/4949/698 2232/4948/636 +f 2281/4955/701 2280/4956/700 2284/4947/696 2285/4949/698 +f 2275/4957/702 2279/4950/699 2280/4953/700 2276/4958/703 +f 2279/4959/699 2278/4898/664 2282/4900/666 2283/4946/695 +f 2228/4960/634 2277/4961/704 2281/4955/701 2230/4954/635 +f 2277/4961/704 2276/4962/703 2280/4956/700 2281/4955/701 +f 2271/4963/705 2275/4957/702 2276/4958/703 2272/4964/706 +f 2275/4965/702 2274/4896/663 2278/4898/664 2279/4959/699 +f 2226/4966/632 2273/4967/707 2277/4961/704 2228/4960/634 +f 2273/4967/707 2272/4968/706 2276/4962/703 2277/4961/704 +f 2267/4969/708 2271/4963/705 2272/4964/706 2268/4970/709 +f 2271/4971/705 2270/4894/662 2274/4896/663 2275/4965/702 +f 2224/4972/631 2269/4973/710 2273/4967/707 2226/4966/632 +f 2269/4973/710 2268/4974/709 2272/4968/706 2273/4967/707 +f 2263/4975/711 2267/4969/708 2268/4970/709 2264/4976/712 +f 2267/4977/708 2266/4892/661 2270/4894/662 2271/4971/705 +f 2222/4978/629 2265/4979/713 2269/4973/710 2224/4972/631 +f 2265/4979/713 2264/4980/712 2268/4974/709 2269/4973/710 +f 2259/4981/714 2263/4975/711 2264/4976/712 2260/4982/715 +f 2263/4983/711 2262/4890/660 2266/4892/661 2267/4977/708 +f 2220/4984/716 2261/4985/726 2265/4979/713 2222/4978/629 +f 2261/4985/726 2260/4986/715 2264/4980/712 2265/4979/713 +f 2255/4987/718 2259/4981/714 2260/4982/715 2256/4988/719 +f 2259/4989/714 2258/4888/659 2262/4890/660 2263/4983/711 +f 2218/4990/627 2257/4991/727 2261/4985/726 2220/4984/716 +f 2257/4991/727 2256/4992/719 2260/4986/715 2261/4985/726 +f 2251/4993/721 2255/4987/718 2256/4988/719 2252/4994/728 +f 2255/4995/718 2254/4886/658 2258/4888/659 2259/4989/714 +f 2216/4996/626 2253/4997/724 2257/4991/727 2218/4990/627 +f 2253/4997/724 2252/4998/728 2256/4992/719 2257/4991/727 +f 2247/4999/676 2248/5000/680 2251/4993/721 2252/4994/728 +f 2251/5001/721 2250/4884/657 2254/4886/658 2255/4995/718 +f 2214/4916/625 2246/4915/674 2253/4997/724 2216/4996/626 +f 2246/4915/674 2247/4918/676 2252/4998/728 2253/4997/724 +f 2306/4924/672 2245/5002/607 2215/4882/608 2249/4881/655 +f 2248/4925/680 2249/4881/655 2250/4884/657 2251/5001/721 +f 2307/5003/678 2248/5000/680 2247/4999/676 2308/5004/675 +g Circle.002_Circle.002_spool +s off +f 724/5005/729 723/5006/729 730/5007/729 729/5008/729 728/5009/729 727/5010/729 726/5011/729 725/5012/729 +f 731/5013/53 733/5014/53 734/5015/53 735/5016/53 736/5017/53 737/5018/53 738/5019/53 732/5020/53 +f 740/5021/730 739/5022/730 746/5023/730 745/5024/730 744/5025/730 743/5026/730 742/5027/730 741/5028/730 +f 748/5029/731 747/5030/731 754/5031/731 753/5032/731 752/5033/731 751/5034/731 750/5035/731 749/5036/731 +f 756/5037/732 755/5038/732 762/5039/732 761/5040/732 760/5041/732 759/5042/732 758/5043/732 757/5044/732 +f 764/5045/733 763/5046/733 770/5047/733 769/5048/733 768/5049/733 767/5050/733 766/5051/733 765/5052/733 +f 772/5053/734 771/5054/734 778/5055/734 777/5056/734 776/5057/734 775/5058/734 774/5059/734 773/5060/734 +f 780/5061/735 779/5062/735 786/5063/735 785/5064/735 784/5065/735 783/5066/735 782/5067/735 781/5068/735 +f 788/5069/736 787/5070/736 794/5071/736 793/5072/736 792/5073/736 791/5074/736 790/5075/736 789/5076/736 +f 796/5077/737 795/5078/737 802/5079/737 801/5080/737 800/5081/737 799/5082/737 798/5083/737 797/5084/737 +f 804/5085/738 803/5086/738 810/5087/738 809/5088/738 808/5089/738 807/5090/738 806/5091/738 805/5092/738 +f 812/5093/739 811/5094/739 818/5095/739 817/5096/739 816/5097/739 815/5098/739 814/5099/739 813/5100/739 +f 820/5101/740 819/5102/740 826/5103/740 825/5104/740 824/5105/740 823/5106/740 822/5107/740 821/5108/740 +f 828/5109/741 827/5110/741 834/5111/741 833/5112/741 832/5113/741 831/5114/741 830/5115/741 829/5116/741 +f 836/5117/742 835/5118/742 842/5119/742 841/5120/742 840/5121/742 839/5122/742 838/5123/742 837/5124/742 +f 844/5125/743 843/5126/743 850/5127/743 849/5128/743 848/5129/743 847/5130/743 846/5131/743 845/5132/743 +f 852/5133/744 851/5134/744 858/5135/744 857/5136/744 856/5137/744 855/5138/744 854/5139/744 853/5140/744 +f 860/5141/745 859/5142/745 866/5143/745 865/5144/745 864/5145/745 863/5146/745 862/5147/745 861/5148/745 +f 868/5149/746 867/5150/746 874/5151/746 873/5152/746 872/5153/746 871/5154/746 870/5155/746 869/5156/746 +f 876/5157/747 875/5158/747 882/5159/747 881/5160/747 880/5161/747 879/5162/747 878/5163/747 877/5164/747 +f 884/5165/748 883/5166/748 890/5167/748 889/5168/748 888/5169/748 887/5170/748 886/5171/748 885/5172/748 +f 892/5173/749 891/5174/749 898/5175/749 897/5176/749 896/5177/749 895/5178/749 894/5179/749 893/5180/749 +f 900/5181/750 899/5182/750 906/5183/750 905/5184/750 904/5185/750 903/5186/750 902/5187/750 901/5188/750 +f 908/5189/751 907/5190/751 914/5191/751 913/5192/751 912/5193/751 911/5194/751 910/5195/751 909/5196/751 +f 916/5197/752 915/5198/752 922/5199/752 921/5200/752 920/5201/752 919/5202/752 918/5203/752 917/5204/752 +f 924/5205/753 923/5206/753 930/5207/753 929/5208/753 928/5209/753 927/5210/753 926/5211/753 925/5212/753 +f 932/5213/754 931/5214/754 938/5215/754 937/5216/754 936/5217/754 935/5218/754 934/5219/754 933/5220/754 +f 940/5221/755 939/5222/755 946/5223/755 945/5224/755 944/5225/755 943/5226/755 942/5227/755 941/5228/755 +f 948/5229/756 947/5230/756 954/5231/756 953/5232/756 952/5233/756 951/5234/756 950/5235/756 949/5236/756 +f 956/5237/757 955/5238/757 962/5239/757 961/5240/757 960/5241/757 959/5242/757 958/5243/757 957/5244/757 +f 964/5245/758 963/5246/758 970/5247/758 969/5248/758 968/5249/758 967/5250/758 966/5251/758 965/5252/758 +f 972/5253/759 971/5254/759 978/5255/759 977/5256/759 976/5257/759 975/5258/759 974/5259/759 973/5260/759 +f 980/5261/760 979/5262/760 986/5263/760 985/5264/760 984/5265/760 983/5266/760 982/5267/760 981/5268/760 +s 1 +f 725/5269/761 726/5270/762 734/5271/763 733/5272/764 +f 723/5273/765 724/5274/766 731/5275/767 732/5276/768 +f 730/5277/769 723/5273/765 732/5276/768 738/5278/770 +f 728/5279/771 729/5280/772 737/5281/773 736/5282/774 +f 726/5270/762 727/5283/775 735/5284/776 734/5271/763 +f 724/5285/766 725/5269/761 733/5272/764 731/5286/767 +f 729/5280/772 730/5277/769 738/5278/770 737/5281/773 +f 727/5283/775 728/5279/771 736/5282/774 735/5284/776 +f 741/5287/777 742/5288/778 726/5289/762 725/5290/761 +f 739/5291/779 740/5292/780 724/5293/766 723/5294/765 +f 746/5295/781 739/5291/779 723/5294/765 730/5296/769 +f 744/5297/782 745/5298/783 729/5299/772 728/5300/771 +f 742/5288/778 743/5301/784 727/5302/775 726/5289/762 +f 740/5303/780 741/5287/777 725/5290/761 724/5304/766 +f 745/5298/783 746/5295/781 730/5296/769 729/5299/772 +f 743/5301/784 744/5297/782 728/5300/771 727/5302/775 +f 749/5305/785 750/5306/786 742/5307/778 741/5308/777 +f 747/5309/787 748/5310/788 740/5311/780 739/5312/779 +f 754/5313/789 747/5309/787 739/5312/779 746/5314/781 +f 752/5315/790 753/5316/791 745/5317/783 744/5318/782 +f 750/5306/786 751/5319/792 743/5320/784 742/5307/778 +f 748/5321/788 749/5305/785 741/5308/777 740/5322/780 +f 753/5316/791 754/5313/789 746/5314/781 745/5317/783 +f 751/5319/792 752/5315/790 744/5318/782 743/5320/784 +f 757/5323/793 758/5324/794 750/5325/786 749/5326/785 +f 755/5327/795 756/5328/796 748/5329/788 747/5330/787 +f 762/5331/797 755/5327/795 747/5330/787 754/5332/789 +f 760/5333/798 761/5334/799 753/5335/791 752/5336/790 +f 758/5324/794 759/5337/800 751/5338/792 750/5325/786 +f 756/5339/796 757/5323/793 749/5326/785 748/5340/788 +f 761/5334/799 762/5331/797 754/5332/789 753/5335/791 +f 759/5337/800 760/5333/798 752/5336/790 751/5338/792 +f 765/5341/801 766/5342/802 758/5343/794 757/5344/793 +f 763/5345/803 764/5346/804 756/5347/796 755/5348/795 +f 770/5349/805 763/5345/803 755/5348/795 762/5350/797 +f 768/5351/806 769/5352/807 761/5353/799 760/5354/798 +f 766/5342/802 767/5355/808 759/5356/800 758/5343/794 +f 764/5357/804 765/5341/801 757/5344/793 756/5358/796 +f 769/5352/807 770/5349/805 762/5350/797 761/5353/799 +f 767/5355/808 768/5351/806 760/5354/798 759/5356/800 +f 773/5359/809 774/5360/810 766/5361/802 765/5362/801 +f 771/5363/811 772/5364/812 764/5365/804 763/5366/803 +f 778/5367/813 771/5363/811 763/5366/803 770/5368/805 +f 776/5369/814 777/5370/815 769/5371/807 768/5372/806 +f 774/5360/810 775/5373/816 767/5374/808 766/5361/802 +f 772/5375/812 773/5359/809 765/5362/801 764/5376/804 +f 777/5370/815 778/5367/813 770/5368/805 769/5371/807 +f 775/5373/816 776/5369/814 768/5372/806 767/5374/808 +f 781/5377/817 782/5378/818 774/5379/810 773/5380/809 +f 779/5381/819 780/5382/820 772/5383/812 771/5384/811 +f 786/5385/821 779/5381/819 771/5384/811 778/5386/813 +f 784/5387/822 785/5388/823 777/5389/815 776/5390/814 +f 782/5378/818 783/5391/824 775/5392/816 774/5379/810 +f 780/5393/820 781/5377/817 773/5380/809 772/5394/812 +f 785/5388/823 786/5385/821 778/5386/813 777/5389/815 +f 783/5391/824 784/5387/822 776/5390/814 775/5392/816 +f 789/5395/825 790/5396/826 782/5397/818 781/5398/817 +f 787/5399/827 788/5400/828 780/5401/820 779/5402/819 +f 794/5403/829 787/5399/827 779/5402/819 786/5404/821 +f 792/5405/830 793/5406/831 785/5407/823 784/5408/822 +f 790/5396/826 791/5409/832 783/5410/824 782/5397/818 +f 788/5411/828 789/5395/825 781/5398/817 780/5412/820 +f 793/5406/831 794/5403/829 786/5404/821 785/5407/823 +f 791/5409/832 792/5405/830 784/5408/822 783/5410/824 +f 797/5413/833 798/5414/834 790/5415/826 789/5416/825 +f 795/5417/835 796/5418/836 788/5419/828 787/5420/827 +f 802/5421/837 795/5417/835 787/5420/827 794/5422/829 +f 800/5423/838 801/5424/839 793/5425/831 792/5426/830 +f 798/5414/834 799/5427/840 791/5428/832 790/5415/826 +f 796/5429/836 797/5413/833 789/5416/825 788/5430/828 +f 801/5424/839 802/5421/837 794/5422/829 793/5425/831 +f 799/5427/840 800/5423/838 792/5426/830 791/5428/832 +f 805/5431/841 806/5432/842 798/5433/834 797/5434/833 +f 803/5435/843 804/5436/844 796/5437/836 795/5438/835 +f 810/5439/845 803/5435/843 795/5438/835 802/5440/837 +f 808/5441/846 809/5442/847 801/5443/839 800/5444/838 +f 806/5432/842 807/5445/848 799/5446/840 798/5433/834 +f 804/5447/844 805/5431/841 797/5434/833 796/5448/836 +f 809/5442/847 810/5439/845 802/5440/837 801/5443/839 +f 807/5445/848 808/5441/846 800/5444/838 799/5446/840 +f 813/5449/849 814/5450/850 806/5451/842 805/5452/841 +f 811/5453/851 812/5454/852 804/5455/844 803/5456/843 +f 818/5457/853 811/5453/851 803/5456/843 810/5458/845 +f 816/5459/854 817/5460/855 809/5461/847 808/5462/846 +f 814/5450/850 815/5463/856 807/5464/848 806/5451/842 +f 812/5465/852 813/5449/849 805/5452/841 804/5466/844 +f 817/5460/855 818/5457/853 810/5458/845 809/5461/847 +f 815/5463/856 816/5459/854 808/5462/846 807/5464/848 +f 821/5467/857 822/5468/858 814/5469/850 813/5470/849 +f 819/5471/859 820/5472/860 812/5473/852 811/5474/851 +f 826/5475/861 819/5471/859 811/5474/851 818/5476/853 +f 824/5477/862 825/5478/863 817/5479/855 816/5480/854 +f 822/5468/858 823/5481/864 815/5482/856 814/5469/850 +f 820/5483/860 821/5467/857 813/5470/849 812/5484/852 +f 825/5478/863 826/5475/861 818/5476/853 817/5479/855 +f 823/5481/864 824/5477/862 816/5480/854 815/5482/856 +f 829/5485/865 830/5486/866 822/5487/858 821/5488/857 +f 827/5489/867 828/5490/868 820/5491/860 819/5492/859 +f 834/5493/869 827/5489/867 819/5492/859 826/5494/861 +f 832/5495/870 833/5496/871 825/5497/863 824/5498/862 +f 830/5486/866 831/5499/872 823/5500/864 822/5487/858 +f 828/5501/868 829/5485/865 821/5488/857 820/5502/860 +f 833/5496/871 834/5493/869 826/5494/861 825/5497/863 +f 831/5499/872 832/5495/870 824/5498/862 823/5500/864 +f 837/5503/873 838/5504/874 830/5505/866 829/5506/865 +f 835/5507/875 836/5508/876 828/5509/868 827/5510/867 +f 842/5511/877 835/5507/875 827/5510/867 834/5512/869 +f 840/5513/878 841/5514/879 833/5515/871 832/5516/870 +f 838/5504/874 839/5517/880 831/5518/872 830/5505/866 +f 836/5519/876 837/5503/873 829/5506/865 828/5520/868 +f 841/5514/879 842/5511/877 834/5512/869 833/5515/871 +f 839/5517/880 840/5513/878 832/5516/870 831/5518/872 +f 845/5521/881 846/5522/882 838/5523/874 837/5524/873 +f 843/5525/883 844/5526/884 836/5527/876 835/5528/875 +f 850/5529/885 843/5525/883 835/5528/875 842/5530/877 +f 848/5531/886 849/5532/887 841/5533/879 840/5534/878 +f 846/5522/882 847/5535/888 839/5536/880 838/5523/874 +f 844/5537/884 845/5521/881 837/5524/873 836/5538/876 +f 849/5532/887 850/5529/885 842/5530/877 841/5533/879 +f 847/5535/888 848/5531/886 840/5534/878 839/5536/880 +f 853/5539/889 854/5540/890 846/5541/882 845/5542/881 +f 851/5543/891 852/5544/892 844/5545/884 843/5546/883 +f 858/5547/893 851/5543/891 843/5546/883 850/5548/885 +f 856/5549/894 857/5550/895 849/5551/887 848/5552/886 +f 854/5540/890 855/5553/896 847/5554/888 846/5541/882 +f 852/5555/892 853/5539/889 845/5542/881 844/5556/884 +f 857/5550/895 858/5547/893 850/5548/885 849/5551/887 +f 855/5553/896 856/5549/894 848/5552/886 847/5554/888 +f 861/5557/897 862/5558/898 854/5559/890 853/5560/889 +f 859/5561/899 860/5562/900 852/5563/892 851/5564/891 +f 866/5565/901 859/5561/899 851/5564/891 858/5566/893 +f 864/5567/902 865/5568/903 857/5569/895 856/5570/894 +f 862/5558/898 863/5571/904 855/5572/896 854/5559/890 +f 860/5573/900 861/5557/897 853/5560/889 852/5574/892 +f 865/5568/903 866/5565/901 858/5566/893 857/5569/895 +f 863/5571/904 864/5567/902 856/5570/894 855/5572/896 +f 869/5575/905 870/5576/906 862/5577/898 861/5578/897 +f 867/5579/907 868/5580/908 860/5581/900 859/5582/899 +f 874/5583/909 867/5579/907 859/5582/899 866/5584/901 +f 872/5585/910 873/5586/911 865/5587/903 864/5588/902 +f 870/5576/906 871/5589/912 863/5590/904 862/5577/898 +f 868/5591/908 869/5575/905 861/5578/897 860/5592/900 +f 873/5586/911 874/5583/909 866/5584/901 865/5587/903 +f 871/5589/912 872/5585/910 864/5588/902 863/5590/904 +f 877/5593/913 878/5594/914 870/5595/906 869/5596/905 +f 875/5597/915 876/5598/916 868/5599/908 867/5600/907 +f 882/5601/917 875/5597/915 867/5600/907 874/5602/909 +f 880/5603/918 881/5604/919 873/5605/911 872/5606/910 +f 878/5594/914 879/5607/920 871/5608/912 870/5595/906 +f 876/5609/916 877/5593/913 869/5596/905 868/5610/908 +f 881/5604/919 882/5601/917 874/5602/909 873/5605/911 +f 879/5607/920 880/5603/918 872/5606/910 871/5608/912 +f 885/5611/921 886/5612/922 878/5613/914 877/5614/913 +f 883/5615/923 884/5616/924 876/5617/916 875/5618/915 +f 890/5619/925 883/5615/923 875/5618/915 882/5620/917 +f 888/5621/926 889/5622/927 881/5623/919 880/5624/918 +f 886/5612/922 887/5625/928 879/5626/920 878/5613/914 +f 884/5627/924 885/5611/921 877/5614/913 876/5628/916 +f 889/5622/927 890/5619/925 882/5620/917 881/5623/919 +f 887/5625/928 888/5621/926 880/5624/918 879/5626/920 +f 893/5629/929 894/5630/930 886/5631/922 885/5632/921 +f 891/5633/931 892/5634/932 884/5635/924 883/5636/923 +f 898/5637/933 891/5633/931 883/5636/923 890/5638/925 +f 896/5639/934 897/5640/935 889/5641/927 888/5642/926 +f 894/5630/930 895/5643/936 887/5644/928 886/5631/922 +f 892/5645/932 893/5629/929 885/5632/921 884/5646/924 +f 897/5640/935 898/5637/933 890/5638/925 889/5641/927 +f 895/5643/936 896/5639/934 888/5642/926 887/5644/928 +f 901/5647/937 902/5648/938 894/5649/930 893/5650/929 +f 899/5651/939 900/5652/940 892/5653/932 891/5654/931 +f 906/5655/941 899/5651/939 891/5654/931 898/5656/933 +f 904/5657/942 905/5658/943 897/5659/935 896/5660/934 +f 902/5648/938 903/5661/944 895/5662/936 894/5649/930 +f 900/5663/940 901/5647/937 893/5650/929 892/5664/932 +f 905/5658/943 906/5655/941 898/5656/933 897/5659/935 +f 903/5661/944 904/5657/942 896/5660/934 895/5662/936 +f 909/5665/945 910/5666/946 902/5667/938 901/5668/937 +f 907/5669/947 908/5670/948 900/5671/940 899/5672/939 +f 914/5673/949 907/5669/947 899/5672/939 906/5674/941 +f 912/5675/950 913/5676/951 905/5677/943 904/5678/942 +f 910/5666/946 911/5679/952 903/5680/944 902/5667/938 +f 908/5681/948 909/5665/945 901/5668/937 900/5682/940 +f 913/5676/951 914/5673/949 906/5674/941 905/5677/943 +f 911/5679/952 912/5675/950 904/5678/942 903/5680/944 +f 917/5683/953 918/5684/954 910/5685/946 909/5686/945 +f 915/5687/955 916/5688/956 908/5689/948 907/5690/947 +f 922/5691/957 915/5687/955 907/5690/947 914/5692/949 +f 920/5693/958 921/5694/959 913/5695/951 912/5696/950 +f 918/5684/954 919/5697/960 911/5698/952 910/5685/946 +f 916/5699/956 917/5683/953 909/5686/945 908/5700/948 +f 921/5694/959 922/5691/957 914/5692/949 913/5695/951 +f 919/5697/960 920/5693/958 912/5696/950 911/5698/952 +f 925/5701/961 926/5702/962 918/5703/954 917/5704/953 +f 923/5705/963 924/5706/964 916/5707/956 915/5708/955 +f 930/5709/965 923/5705/963 915/5708/955 922/5710/957 +f 928/5711/966 929/5712/967 921/5713/959 920/5714/958 +f 926/5702/962 927/5715/968 919/5716/960 918/5703/954 +f 924/5717/964 925/5701/961 917/5704/953 916/5718/956 +f 929/5712/967 930/5709/965 922/5710/957 921/5713/959 +f 927/5715/968 928/5711/966 920/5714/958 919/5716/960 +f 933/5719/969 934/5720/970 926/5721/962 925/5722/961 +f 931/5723/971 932/5724/972 924/5725/964 923/5726/963 +f 938/5727/973 931/5723/971 923/5726/963 930/5728/965 +f 936/5729/974 937/5730/975 929/5731/967 928/5732/966 +f 934/5720/970 935/5733/976 927/5734/968 926/5721/962 +f 932/5735/972 933/5719/969 925/5722/961 924/5736/964 +f 937/5730/975 938/5727/973 930/5728/965 929/5731/967 +f 935/5733/976 936/5729/974 928/5732/966 927/5734/968 +f 941/5737/977 942/5738/978 934/5739/970 933/5740/969 +f 939/5741/979 940/5742/980 932/5743/972 931/5744/971 +f 946/5745/981 939/5741/979 931/5744/971 938/5746/973 +f 944/5747/982 945/5748/983 937/5749/975 936/5750/974 +f 942/5738/978 943/5751/984 935/5752/976 934/5739/970 +f 940/5753/980 941/5737/977 933/5740/969 932/5754/972 +f 945/5748/983 946/5745/981 938/5746/973 937/5749/975 +f 943/5751/984 944/5747/982 936/5750/974 935/5752/976 +f 949/5755/985 950/5756/986 942/5757/978 941/5758/977 +f 947/5759/987 948/5760/988 940/5761/980 939/5762/979 +f 954/5763/989 947/5759/987 939/5762/979 946/5764/981 +f 952/5765/990 953/5766/991 945/5767/983 944/5768/982 +f 950/5756/986 951/5769/992 943/5770/984 942/5757/978 +f 948/5771/988 949/5755/985 941/5758/977 940/5772/980 +f 953/5766/991 954/5763/989 946/5764/981 945/5767/983 +f 951/5769/992 952/5765/990 944/5768/982 943/5770/984 +f 957/5773/993 958/5774/994 950/5775/986 949/5776/985 +f 955/5777/995 956/5778/996 948/5779/988 947/5780/987 +f 962/5781/997 955/5777/995 947/5780/987 954/5782/989 +f 960/5783/998 961/5784/999 953/5785/991 952/5786/990 +f 958/5774/994 959/5787/1000 951/5788/992 950/5775/986 +f 956/5789/996 957/5773/993 949/5776/985 948/5790/988 +f 961/5784/999 962/5781/997 954/5782/989 953/5785/991 +f 959/5787/1000 960/5783/998 952/5786/990 951/5788/992 +f 965/5791/1001 966/5792/1002 958/5793/994 957/5794/993 +f 963/5795/1003 964/5796/1004 956/5797/996 955/5798/995 +f 970/5799/1005 963/5795/1003 955/5798/995 962/5800/997 +f 968/5801/1006 969/5802/1007 961/5803/999 960/5804/998 +f 966/5792/1002 967/5805/1008 959/5806/1000 958/5793/994 +f 964/5807/1004 965/5791/1001 957/5794/993 956/5808/996 +f 969/5802/1007 970/5799/1005 962/5800/997 961/5803/999 +f 967/5805/1008 968/5801/1006 960/5804/998 959/5806/1000 +f 973/5809/1009 974/5810/1010 966/5811/1002 965/5812/1001 +f 971/5813/1011 972/5814/1012 964/5815/1004 963/5816/1003 +f 978/5817/1013 971/5813/1011 963/5816/1003 970/5818/1005 +f 976/5819/1014 977/5820/1015 969/5821/1007 968/5822/1006 +f 974/5810/1010 975/5823/1016 967/5824/1008 966/5811/1002 +f 972/5825/1012 973/5809/1009 965/5812/1001 964/5826/1004 +f 977/5820/1015 978/5817/1013 970/5818/1005 969/5821/1007 +f 975/5823/1016 976/5819/1014 968/5822/1006 967/5824/1008 +f 981/5827/1017 982/5828/1018 974/5829/1010 973/5830/1009 +f 979/5831/1019 980/5832/1020 972/5833/1012 971/5834/1011 +f 986/5835/1021 979/5831/1019 971/5834/1011 978/5836/1013 +f 984/5837/1022 985/5838/1023 977/5839/1015 976/5840/1014 +f 982/5828/1018 983/5841/1024 975/5842/1016 974/5829/1010 +f 980/5843/1020 981/5827/1017 973/5830/1009 972/5844/1012 +f 985/5838/1023 986/5835/1021 978/5836/1013 977/5839/1015 +f 983/5841/1024 984/5837/1022 976/5840/1014 975/5842/1016 +f 1011/5845/55 1012/5846/55 1014/5847/60 1013/5848/60 +f 1013/5848/60 1014/5847/60 1016/5849/1025 1015/5850/1025 +f 1015/5850/1025 1016/5849/1025 1018/5851/1026 1017/5852/1026 +f 1017/5852/1026 1018/5851/1026 1020/5853/1027 1019/5854/1027 +f 1019/5854/1027 1020/5853/1027 1022/5855/1028 1021/5856/1028 +f 1021/5856/1028 1022/5855/1028 1024/5857/1029 1023/5858/1029 +f 1023/5858/1029 1024/5857/1029 1026/5859/63 1025/5860/63 +f 1025/5860/63 1026/5859/63 1028/5861/53 1027/5862/53 +f 1027/5863/53 1028/5864/53 1030/5865/64 1029/5866/64 +f 1029/5866/64 1030/5865/64 1032/5867/1030 1031/5868/1030 +f 1031/5868/1030 1032/5867/1030 1034/5869/1031 1033/5870/1031 +f 1033/5870/1031 1034/5869/1031 1036/5871/1032 1035/5872/1032 +f 1035/5872/1032 1036/5871/1032 1038/5873/1033 1037/5874/1033 +f 1037/5874/1033 1038/5873/1033 1040/5875/1034 1039/5876/1034 +f 1039/5876/1034 1040/5875/1034 1042/5877/67 1041/5878/67 +f 1041/5878/67 1042/5877/67 1044/5879/54 1043/5880/54 +f 1043/5880/54 1044/5879/54 1046/5881/68 1045/5882/68 +f 1045/5882/68 1046/5881/68 1048/5883/1035 1047/5884/1035 +f 1047/5884/1035 1048/5883/1035 1050/5885/1036 1049/5886/1036 +f 1049/5886/1036 1050/5885/1036 1052/5887/1037 1051/5888/1037 +f 1051/5888/1037 1052/5887/1037 1054/5889/1038 1053/5890/1038 +f 1053/5890/1038 1054/5889/1038 1056/5891/1039 1055/5892/1039 +f 1055/5892/1039 1056/5891/1039 1058/5893/71 1057/5894/71 +f 1057/5894/71 1058/5893/71 1060/5895/2 1059/5896/2 +f 1059/5897/2 1060/5898/2 1062/5899/72 1061/5900/72 +f 1061/5900/72 1062/5899/72 1064/5901/1040 1063/5902/1040 +f 1063/5902/1040 1064/5901/1040 1066/5903/1041 1065/5904/1041 +f 1065/5904/1041 1066/5903/1041 1068/5905/1042 1067/5906/1042 +f 1067/5906/1042 1068/5905/1042 1070/5907/1043 1069/5908/1043 +f 1069/5908/1043 1070/5907/1043 1072/5909/1044 1071/5910/1044 +f 1071/5910/1044 1072/5909/1044 1074/5911/75 1073/5912/75 +f 1073/5912/75 1074/5911/75 1012/5846/55 1011/5845/55 diff --git a/mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter.png b/mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter.png new file mode 100644 index 00000000..0075a72d Binary files /dev/null and b/mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter.png differ diff --git a/mods/homedecor_modpack/computer/textures/computer_3dprinter_bedflinger_inv.png b/mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter_bedflinger_inv.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_3dprinter_bedflinger_inv.png rename to mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter_bedflinger_inv.png diff --git a/mods/homedecor_modpack/computer/textures/computer_3dprinter_filament.png b/mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter_filament.png similarity index 100% rename from mods/homedecor_modpack/computer/textures/computer_3dprinter_filament.png rename to mods/home_workshop_modpack/home_workshop_machines/textures/home_workshop_machines_3dprinter_filament.png diff --git a/mods/home_workshop_modpack/home_workshop_misc/crafts.lua b/mods/home_workshop_modpack/home_workshop_misc/crafts.lua new file mode 100644 index 00000000..8e6523b0 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/crafts.lua @@ -0,0 +1,26 @@ +minetest.register_craft({ + output = "home_workshop_misc:tool_cabinet", + recipe = { + { "basic_materials:motor", "default:axe_steel", "default:pick_steel" }, + { "default:steel_ingot", "home_workshop_misc:drawer_small", "default:steel_ingot" }, + { "default:steel_ingot", "home_workshop_misc:drawer_small", "default:steel_ingot" } + }, +}) + +minetest.register_craft({ + output = "home_workshop_misc:beer_tap", + recipe = { + { "group:stick", "default:steel_ingot", "group:stick" }, + { "basic_materials:steel_bar", "default:steel_ingot", "basic_materials:steel_bar" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + }, +}) + +minetest.register_craft({ + output = "homedecor:soda_machine", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "dye:red", "default:steel_ingot"}, + {"default:steel_ingot", "default:copperblock", "default:steel_ingot"}, + }, +}) diff --git a/mods/home_workshop_modpack/home_workshop_misc/init.lua b/mods/home_workshop_modpack/home_workshop_misc/init.lua new file mode 100644 index 00000000..ed99009f --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/init.lua @@ -0,0 +1,155 @@ +-- Miscellanous tools and mechanical contrivances + +local S = minetest.get_translator("home_workshop_misc") + +minetest.register_node("home_workshop_misc:tool_cabinet", { + description = S("Metal tool cabinet and work table"), + drawtype="mesh", + mesh = "home_workshop_misc_tool_cabinet.obj", + tiles = { + { name = "home_workshop_common_generic_metal.png", color = 0xffd00000 }, + "home_workshop_misc_tool_cabinet_drawers.png", + { name = "home_workshop_common_generic_metal.png", color = 0xff006000 }, + { name = "home_workshop_common_generic_metal.png", color = 0xffa0a0a0 }, + "home_workshop_common_generic_metal_bright.png", + "home_workshop_misc_tool_cabinet_misc.png", + }, + paramtype = "light", + paramtype2="facedir", + inventory_image = "home_workshop_misc_tool_cabinet_inv.png", + on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple or nil, + groups = { snappy=3 }, + expand = { top="placeholder" }, + inventory = { + size=24, + } +}) + +minetest.register_node("home_workshop_misc:beer_tap", { + description = S("Beer tap"), + drawtype = "mesh", + mesh = "home_workshop_misc_beer_taps.obj", + tiles = { + "home_workshop_common_generic_metal_bright.png", + { name = "home_workshop_common_generic_metal.png", color = 0xff303030 } + }, + inventory_image = "home_workshop_misc_beertap_inv.png", + paramtype = "light", + paramtype2 = "facedir", + groups = { snappy=3 }, + walkable = false, + selection_box = { + type = "fixed", + fixed = { -0.25, -0.5, -0.4375, 0.25, 0.235, 0 } + }, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local inv = clicker:get_inventory() + + local wieldname = itemstack:get_name() + if wieldname == "vessels:drinking_glass" then + if inv:room_for_item("main", "home_workshop_misc:beer_mug 1") then + itemstack:take_item() + clicker:set_wielded_item(itemstack) + inv:add_item("main", "home_workshop_misc:beer_mug 1") + minetest.chat_send_player(clicker:get_player_name(), + S("Ahh, a frosty cold beer - look in your inventory for it!")) + else + minetest.chat_send_player(clicker:get_player_name(), + S("No room in your inventory to add a beer mug!")) + end + end + end +}) + +local beer_cbox = { + type = "fixed", + fixed = { -5/32, -8/16, -9/32 , 7/32, -2/16, 1/32 } +} + +minetest.register_node("home_workshop_misc:beer_mug", { + description = S("Beer mug"), + drawtype = "mesh", + mesh = "home_workshop_misc_beer_mug.obj", + tiles = { "home_workshop_misc_beer_mug.png" }, + inventory_image = "home_workshop_misc_beer_mug_inv.png", + paramtype = "light", + paramtype2 = "facedir", + groups = { snappy=3, oddly_breakable_by_hand=3 }, + walkable = false, + sounds = default.node_sound_glass_defaults(), + selection_box = beer_cbox, + on_use = function(itemstack, user, pointed_thing) + if not creative.is_enabled_for(user:get_player_name()) then + minetest.do_item_eat(2, "vessels:drinking_glass 1", itemstack, user, pointed_thing) + return itemstack + end + end +}) + +local svm_cbox = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5} +} + +minetest.register_node("home_workshop_misc:soda_machine", { + description = S("Soda vending machine"), + drawtype = "mesh", + mesh = "home_workshop_misc_soda_machine.obj", + tiles = {"home_workshop_misc_soda_machine.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3}, + selection_box = svm_cbox, + collision_box = svm_cbox, + expand = { top="placeholder" }, + sounds = default.node_sound_wood_defaults(), + on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple or nil, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local playername = clicker:get_player_name() + local wielditem = clicker:get_wielded_item() + local wieldname = wielditem:get_name() + local fdir_to_fwd = { {0, -1}, {-1, 0}, {0, 1}, {1, 0} } + local fdir = node.param2 + local pos_drop = { x=pos.x+fdir_to_fwd[fdir+1][1], y=pos.y, z=pos.z+fdir_to_fwd[fdir+1][2] } + if wieldname == "currency:minegeld_cent_25" then + minetest.spawn_item(pos_drop, "home_workshop_misc:soda_can") + minetest.sound_play("insert_coin", { + pos=pos, max_hear_distance = 5 + }) + if not creative.is_enabled_for(playername) then + wielditem:take_item() + clicker:set_wielded_item(wielditem) + return wielditem + end + else + minetest.chat_send_player(playername, S("Please insert a 25 Mg cent coin in the machine.")) + end + end +}) + +minetest.register_craftitem("home_workshop_misc:soda_can", { + description = S("Soda Can"), + inventory_image = "home_workshop_misc_soda_can.png", + on_use = minetest.item_eat(2), +}) + +if minetest.get_modpath("homedecor_common") then + minetest.register_alias("home_workshop_misc:drawer_small", "homedecor:drawer_small") +else + minetest.register_craftitem("home_workshop_misc:drawer_small", { + description = S("Small Wooden Drawer"), + inventory_image = "home_workshop_machines_drawer_small.png", + }) +end + +local MODPATH = minetest.get_modpath("home_workshop_misc") +dofile(MODPATH.."/crafts.lua") + +minetest.register_alias("homedecor:tool_cabinet", "home_workshop_misc:tool_cabinet") +minetest.register_alias("homedecor:tool_cabinet_bottom", "home_workshop_misc:tool_cabinet") +minetest.register_alias("homedecor:tool_cabinet_top", "air") + +minetest.register_alias("homedecor:soda_machine", "home_workshop_misc:soda_machine") +minetest.register_alias("homedecor:beer_tap", "home_workshop_misc:beer_tap") +minetest.register_alias("homedecor:beer_mug", "home_workshop_misc:beer_mug") +minetest.register_alias("homedecor:coin", "currency:minegeld_cent_25") diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.de.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.de.tr new file mode 100644 index 00000000..2ef8ad31 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.de.tr @@ -0,0 +1,12 @@ +# textdomain: home_workshop_misc + +### init.lua ### + +Metal tool cabinet and work table=Metallwerkzeugschrank und Arbeitstisch +Ahh, a frosty cold beer - look in your inventory for it!=Ahh ein kühles Bier – sehen Sie in Ihrem Inventar nach! +Beer mug=Bierkrug +Beer tap=Bierzapfhahn +Soda Can=Limodose +Soda vending machine=Limoautomat +No room in your inventory to add a beer mug!=Kein Platz im Inventar für einen Bierkrug! +Please insert a 25 Mg cent coin in the machine.=Bitte Münze in Automaten einwerfen. diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.es.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.es.tr new file mode 100644 index 00000000..ed1f8782 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.es.tr @@ -0,0 +1,11 @@ +# textdomain: home_workshop_misc + +### init.lua ### +Metal tool cabinet and work table=Mesa de trabajo y gabinete en hierro +Ahh, a frosty cold beer - look in your inventory for it!=¡Ah, una cerveza fría! La encontrarás en tu inventario. +Beer mug=Jarra de cerveza +Beer tap=Grifo de cerveza +Soda Can=Lata de refresco +Soda vending machine=Máquina expendedora de refrescos +No room in your inventory to add a beer mug!=¡No hay lugar para tomar una jarra de cerveza! +Please insert a 25 Mg cent coin in the machine.=Por favor introduzca una moneda en la máquina. diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.fr.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.fr.tr new file mode 100644 index 00000000..33267cd6 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.fr.tr @@ -0,0 +1,11 @@ +# textdomain: home_workshop_misc + +### init.lua ### +Metal tool cabinet and work table=Établi pour le travail du métal +Ahh, a frosty cold beer - look in your inventory for it!=Ahh, une bière bien fraîche - regardez dans votre inventaire ! +Beer mug=Pinte de bière +Beer tap=Pompe à bière +No room in your inventory to add a beer mug!=Pas de place dans votre inventaire pour ajouter une pinte de bière ! +Please insert a 25 Mg cent coin in the machine.=Veuillez insérer une pièce dans la machine. +Soda Can=Canette de soda +Soda vending machine=Distributeur de boissons diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.ms.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.ms.tr new file mode 100644 index 00000000..492c3335 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.ms.tr @@ -0,0 +1,11 @@ +# textdomain: home_workshop_misc + +### init.lua ### +Metal tool cabinet and work table=Kabinet Alatan Logam dan Meja Kerja +Ahh, a frosty cold beer - look in your inventory for it!=Ahh, bir sejuk dingin - cari dalam inventori anda! +Beer mug=Kole Bir +Beer tap=Paip Bir +No room in your inventory to add a beer mug!=Tiada ruang dalam inventori anda untuk menambah kole bir! +Please insert a 25 Mg cent coin in the machine.=Sila masukkan duit syiling ke dalam mesin. +Soda Can=Tin Soda +Soda vending machine=Mesin Soda Layan Diri diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.pt.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.pt.tr new file mode 100644 index 00000000..34fd8c03 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.pt.tr @@ -0,0 +1,11 @@ +# textdomain: home_workshop_misc + +### init.lua ### +Metal tool cabinet and work table=Gabinete de ferramentas metálicas e mesa de trabalho +Ahh, a frosty cold beer - look in your inventory for it!=Ahh, uma cerveja bem gelada - procure por ela em seu inventário! +Beer mug=Caneca de cerveja +Beer tap=Torneira de cerveja +No room in your inventory to add a beer mug!=Sem espaço no inventário para colocar uma caneca de cerveja +Please insert a 25 Mg cent coin in the machine.=Por favor insira uma moeda na máquina. +Soda Can=Lata de Refrigerante +Soda vending machine=Máquina de refrigerante diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.pt_BR.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.pt_BR.tr new file mode 100644 index 00000000..34fd8c03 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.pt_BR.tr @@ -0,0 +1,11 @@ +# textdomain: home_workshop_misc + +### init.lua ### +Metal tool cabinet and work table=Gabinete de ferramentas metálicas e mesa de trabalho +Ahh, a frosty cold beer - look in your inventory for it!=Ahh, uma cerveja bem gelada - procure por ela em seu inventário! +Beer mug=Caneca de cerveja +Beer tap=Torneira de cerveja +No room in your inventory to add a beer mug!=Sem espaço no inventário para colocar uma caneca de cerveja +Please insert a 25 Mg cent coin in the machine.=Por favor insira uma moeda na máquina. +Soda Can=Lata de Refrigerante +Soda vending machine=Máquina de refrigerante diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.ru.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.ru.tr new file mode 100644 index 00000000..afa8ee0e --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.ru.tr @@ -0,0 +1,11 @@ +# textdomain: home_workshop_misc + +### init.lua ### +Metal tool cabinet and work table=Шкаф с металлическим инструментом и рабочий стол +Ahh, a frosty cold beer - look in your inventory for it!=О, холодное пиво! Ищи его в инвентаре! +Beer mug=Пивная кружка +Beer tap=Пивной кран +No room in your inventory to add a beer mug!=В инвентаре нет места для пивной кружки! +Please insert a 25 Mg cent coin in the machine.=Вставьте монету в автомат. +Soda Can=Банка газировки +Soda vending machine=Автомат с газировкой diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.zh_CN.tr b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.zh_CN.tr new file mode 100644 index 00000000..bcae4100 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/home_workshop_misc_misc.zh_CN.tr @@ -0,0 +1,12 @@ +# textdomain: home_workshop_misc + +### init.lua ### + +Metal tool cabinet and work table=金属工具柜及工作台 +Ahh, a frosty cold beer - look in your inventory for it!=啊,一杯冰凉的啤酒-看看你的库存吧! +Beer mug=啤酒杯 +Beer tap=啤酒龙头 +No room in your inventory to add a beer mug!=你的库存里没有地方放啤酒杯! +Please insert a 25 Mg cent coin in the machine.=请在机器里放一枚硬币。 +Soda Can=易拉罐 +Soda vending machine=汽水自动售货机 diff --git a/mods/home_workshop_modpack/home_workshop_misc/locale/template.txt b/mods/home_workshop_modpack/home_workshop_misc/locale/template.txt new file mode 100644 index 00000000..b6911dca --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/locale/template.txt @@ -0,0 +1,12 @@ +# textdomain: home_workshop_misc + +### init.lua ### + +Metal tool cabinet and work table= +Ahh, a frosty cold beer - look in your inventory for it!= +Beer mug= +Beer tap= +No room in your inventory to add a beer mug!= +Please insert a 25 Mg cent coin in the machine.= +Soda Can= +Soda vending machine= diff --git a/mods/home_workshop_modpack/home_workshop_misc/mod.conf b/mods/home_workshop_modpack/home_workshop_misc/mod.conf new file mode 100644 index 00000000..9620e006 --- /dev/null +++ b/mods/home_workshop_modpack/home_workshop_misc/mod.conf @@ -0,0 +1,3 @@ +name = home_workshop_misc +depends = default, home_workshop_common +optional_depends = currency, screwdriver, homedecor_common diff --git a/mods/homedecor_modpack/homedecor_gastronomy/models/homedecor_beer_mug.obj b/mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_beer_mug.obj similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/models/homedecor_beer_mug.obj rename to mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_beer_mug.obj diff --git a/mods/homedecor_modpack/homedecor_gastronomy/models/homedecor_beer_taps.obj b/mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_beer_taps.obj similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/models/homedecor_beer_taps.obj rename to mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_beer_taps.obj diff --git a/mods/homedecor_modpack/homedecor_gastronomy/models/homedecor_soda_machine.obj b/mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_soda_machine.obj similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/models/homedecor_soda_machine.obj rename to mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_soda_machine.obj diff --git a/mods/homedecor_modpack/homedecor_misc/models/homedecor_tool_cabinet.obj b/mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_tool_cabinet.obj similarity index 100% rename from mods/homedecor_modpack/homedecor_misc/models/homedecor_tool_cabinet.obj rename to mods/home_workshop_modpack/home_workshop_misc/models/home_workshop_misc_tool_cabinet.obj diff --git a/mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_beer_mug.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_beer_mug.png similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_beer_mug.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_beer_mug.png diff --git a/mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_beer_mug_inv.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_beer_mug_inv.png similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_beer_mug_inv.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_beer_mug_inv.png diff --git a/mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_beertap_inv.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_beertap_inv.png similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_beertap_inv.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_beertap_inv.png diff --git a/mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_soda_can.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_soda_can.png similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_soda_can.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_soda_can.png diff --git a/mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_soda_machine.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_soda_machine.png similarity index 100% rename from mods/homedecor_modpack/homedecor_gastronomy/textures/homedecor_soda_machine.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_soda_machine.png diff --git a/mods/homedecor_modpack/homedecor_misc/textures/homedecor_tool_cabinet_drawers.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_tool_cabinet_drawers.png similarity index 100% rename from mods/homedecor_modpack/homedecor_misc/textures/homedecor_tool_cabinet_drawers.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_tool_cabinet_drawers.png diff --git a/mods/homedecor_modpack/homedecor_misc/textures/homedecor_tool_cabinet_inv.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_tool_cabinet_inv.png similarity index 100% rename from mods/homedecor_modpack/homedecor_misc/textures/homedecor_tool_cabinet_inv.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_tool_cabinet_inv.png diff --git a/mods/homedecor_modpack/homedecor_misc/textures/homedecor_tool_cabinet_misc.png b/mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_tool_cabinet_misc.png similarity index 100% rename from mods/homedecor_modpack/homedecor_misc/textures/homedecor_tool_cabinet_misc.png rename to mods/home_workshop_modpack/home_workshop_misc/textures/home_workshop_misc_tool_cabinet_misc.png diff --git a/mods/advtrains/modpack.txt b/mods/home_workshop_modpack/modpack.txt similarity index 100% rename from mods/advtrains/modpack.txt rename to mods/home_workshop_modpack/modpack.txt diff --git a/mods/homedecor_modpack/computer/computers.lua b/mods/homedecor_modpack/computer/computers.lua deleted file mode 100644 index 754735a4..00000000 --- a/mods/homedecor_modpack/computer/computers.lua +++ /dev/null @@ -1,339 +0,0 @@ -local S = minetest.get_translator("computer") - --- Amiga 500 lookalike -computer.register("computer:shefriendSOO", { - description = S("SheFriendSOO"), - tiles_off = { front=true }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 0, 0, 17, 32, 32, 12 }, -- Monitor Screen - { 3, 3, 29, 26, 26, 3 }, -- Monitor Tube - { 0, 0, 0, 32, 4, 17 } -- Keyboard - }) -}) - --- Some generic laptop -minetest.register_node("computer:vanio", { - drawtype = "mesh", - mesh = "computer_laptop.obj", - description = S("Pony Vanio"), - inventory_image = "computer_laptop_inv.png", - tiles = {"computer_laptop.png"}, - paramtype = "light", - paramtype2 = "facedir", - light_source = 4, - groups = {snappy=3}, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.35, -0.5, -0.35, 0.35, 0.05, 0.35}, - }, - on_rightclick = function(pos, node, clicker, itemstack) - node.name = "computer:vanio_off" - minetest.set_node(pos, node) - return itemstack - end -}) - -minetest.register_node("computer:vanio_off", { - drawtype = "mesh", - mesh = "computer_laptop_closed.obj", - tiles = {"computer_laptop.png"}, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3, not_in_creative_inventory=1}, - walkable = false, - selection_box = { - type = "fixed", - fixed = {-0.35, -0.5, -0.35, 0.35, -0.4, 0.25}, - }, - drop = "computer:vanio", - on_rightclick = function(pos, node, clicker, itemstack) - node.name = "computer:vanio" - minetest.set_node(pos, node) - return itemstack - end -}) - --- Sony PlayStation lookalike -computer.register("computer:slaystation", { - description = S("Pony SlayStation"), - inventory_image = "computer_ps1_inv.png", - tiles_off = { top=true }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 0, 0, 11, 32, 6, 21 }, -- Console - { 1, 0, 1, 4, 2, 9 }, -- Controller 1 L Grip - { 10, 0, 1, 4, 2, 9 }, -- Controller 1 R Grip - { 5, 0, 4, 5, 2, 5 }, -- Controller 1 Center - { 18, 0, 1, 4, 2, 9 }, -- Controller 2 L Grip - { 27, 0, 1, 4, 2, 9 }, -- Controller 2 R Grip - { 22, 0, 4, 5, 2, 5 } -- Controller 2 Center - }) -}) - --- Sony PlayStation 2 lookalike -computer.register("computer:slaystation2", { - description = S("Pony SlayStation 2"), - inventory_image = "computer_ps2_inv.png", - tiles_off = { front=true }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 2, 2, 11, 28, 3, 19 }, -- Console (Upper part) - { 2, 0, 11, 26, 2, 19 }, -- Console (Lower part) - { 1, 0, 1, 4, 2, 9 }, -- Controller 1 L Grip - { 10, 0, 1, 4, 2, 9 }, -- Controller 1 R Grip - { 5, 0, 1, 5, 2, 8 }, -- Controller 1 Center - { 18, 0, 1, 4, 2, 9 }, -- Controller 2 L Grip - { 27, 0, 1, 4, 2, 9 }, -- Controller 2 R Grip - { 22, 0, 1, 5, 2, 8 } -- Controller 2 Center - }) -}) - --- Sinclair ZX Spectrum lookalike -computer.register("computer:specter", { - description = S("SX Specter"), - inventory_image = "computer_specter_inv.png", - tiles_off = { }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 3, 0, 0, 26, 4, 17 }, -- Keyboard - { 18, 0, 18, 12, 6, 14 } -- Tape Player - }) -}) - --- Nintendo Wii lookalike -computer.register("computer:wee", { - description = S("Nientiendo Wee"), - inventory_image = "computer_wii_inv.png", - tiles_off = { front=true }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 11, 0, 3, 10, 6, 26 }, -- Base - { 12, 6, 4, 8, 22, 24 } -- Top - }) -}) - --- Apple iPad lookalike -minetest.register_node("computer:piepad", { - description = S("Snapple Piepad"), - drawtype = "signlike", - tiles = {"computer_piepad_inv.png"}, - inventory_image = "computer_piepad_inv.png", - wield_image = "computer_piepad_inv.png", - paramtype = "light", - paramtype2 = "wallmounted", - light_source = 8, - walkable = false, - groups = {oddly_breakable_by_hand=2}, - selection_box = {type = "wallmounted"}, - sounds = default.node_sound_wood_defaults() -}) - --- Commodore 64 lookalike -computer.register("computer:admiral64", { - description = S("Admiral64"), - inventory_image = "computer_ad64_inv.png", - tiles_off = { }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 0, 0, 0, 32, 4, 18 } -- Keyboard - }) -}) - --- Commodore 128 lookalike -computer.register("computer:admiral128", { - description = S("Admiral128"), - inventory_image = "computer_ad128_inv.png", - tiles_off = { }, - node_box = computer.pixelnodebox(32, { - -- X Y Z W H L - { 0, 0, 0, 32, 4, 27 } -- Keyboard - }) -}) - --- XBox lookalike -computer.register("computer:hueg_box", { - description = S("HUEG Box"), - tiles_off = { }, - node_box = computer.pixelnodebox(16, { - -- X Y Z W H L - { 0, 0, 7, 16, 6, 9 }, -- Console - { 2, 0, 1, 11, 3, 6 }, -- Controller - { 2, 0, 0, 2, 3, 1 }, - { 11, 0, 0, 2, 3, 1 }, - }) -}) - --- Generic Flat Screen LCD (16x9) with keyboard -local mo_sbox = { - type = "fixed", - fixed = { -0.5, -0.5, -0.43, 0.5, 0.2, 0.25 } -} - -minetest.register_node("computer:monitor", { - description = S("Monitor and keyboard"), - inventory_image = "computer_monitor_inv.png", - drawtype = "mesh", - mesh = "computer_monitor.obj", - tiles = {"computer_black.png", "monitor_plastic.png", "computer_black.png", "monitor_plastic.png"}, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = {snappy=3}, - selection_box = mo_sbox, - on_rightclick = function(pos, node, clicker, itemstack) - node.name = "computer:monitor_on" - minetest.set_node(pos, node) - return itemstack - end -}) - -minetest.register_node("computer:monitor_on", { - drawtype = "mesh", - mesh = "computer_monitor.obj", - tiles = {"monitor_display.png^[transformFX", "monitor_plastic.png", "computer_black.png", "monitor_plastic.png"}, - paramtype = "light", - paramtype2 = "facedir", - light_source = 9, - walkable = false, - groups = {snappy=3, not_in_creative_inventory=1}, - selection_box = mo_sbox, - drop = "computer:monitor", - on_rightclick = function(pos, node, clicker, itemstack) - node.name = "computer:monitor" - minetest.set_node(pos, node) - return itemstack - end -}) - -minetest.register_alias("computer:monitor_bios", "computer:monitor") -minetest.register_alias("computer:monitor_loading", "computer:monitor") -minetest.register_alias("computer:monitor_login", "computer:monitor") -minetest.register_alias("computer:monitor_desktop", "computer:monitor") - ---WIFI Router (linksys look-a-like) -minetest.register_node("computer:router", { - description = S("WIFI Router"), - inventory_image = "computer_router_inv.png", - tiles = { - "computer_router_t.png", - "computer_router_bt.png", - "computer_router_l.png", - "computer_router_r.png", - "computer_router_b.png", - { - name = "computer_router_f_animated.png", - animation = {type="vertical_frames", aspect_w=32, aspect_h=32, length=1.0} - }, - }, --"computer_router_f.png"}, - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - groups = {snappy=3}, - sound = default.node_sound_wood_defaults(), - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.25, -0.5, -0.0625, 0.25, -0.375, 0.3125}, - {-0.1875, -0.4375, 0.3125, -0.125, -0.1875, 0.375}, - {0.125, -0.4375, 0.3125, 0.1875, -0.1875, 0.375}, - {-0.0625, -0.4375, 0.3125, 0.0625, -0.25, 0.375} - } - } -}) - -local pct_cbox = { - type = "fixed", - fixed = { -0.1875, -0.5, -0.36, 0.1875, 0.34, 0.46 } -} - ---Modern PC Tower -minetest.register_node("computer:tower", { - description = S("Computer Tower"), - inventory_image = "computer_tower_inv.png", - drawtype = "mesh", - mesh = "computer_tower.obj", - tiles = {"computer_tower.png"}, - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3}, - sound = default.node_sound_wood_defaults(), - selection_box = pct_cbox, - collision_box = pct_cbox -}) - -minetest.register_alias("computer:tower_on", "computer:tower") - ---Rack Server -minetest.register_node("computer:server", { - drawtype = "nodebox", - description = S("Rack Server"), - tiles = { - 'computer_server_t.png', - 'computer_server_bt.png', - 'computer_server_l.png', - 'computer_server_r.png', - 'computer_server_bt.png', - 'computer_server_f_off.png' - }, - inventory_image = "computer_server_inv.png", - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} - }, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} - }, - sounds = default.node_sound_wood_defaults(), - on_rightclick = function(pos, node, clicker, itemstack) - node.name = "computer:server_on" - minetest.set_node(pos, node) - return itemstack - end, - on_place = function(itemstack, placer, pointed_thing) - local pos = pointed_thing.above - if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "air" then - minetest.chat_send_player( placer:get_player_name(), - S("Not enough vertical space to place a server!" )) - return itemstack - end - return minetest.item_place(itemstack, placer, pointed_thing) - end -}) - -minetest.register_node("computer:server_on", { - drawtype = "nodebox", - tiles = { - 'computer_server_t.png', - 'computer_server_bt.png', - 'computer_server_l.png', - 'computer_server_r.png', - 'computer_server_bt.png', - 'computer_server_f_on.png', - }, - inventory_image = "computer_server_inv.png", - paramtype = "light", - paramtype2 = "facedir", - groups = {snappy=3,not_in_creative_inventory=1}, - selection_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} - }, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, -0.25, 0.5, 1.125, 0.4375} - }, - sounds = default.node_sound_wood_defaults(), - drop = 'computer:server', - on_rightclick = function(pos, node, clicker, itemstack) - node.name = "computer:server" - minetest.set_node(pos, node) - return itemstack - end -}) diff --git a/mods/homedecor_modpack/computer/mod.conf b/mods/homedecor_modpack/computer/mod.conf deleted file mode 100644 index 83fb7529..00000000 --- a/mods/homedecor_modpack/computer/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = computer -depends = default, basic_materials, unifieddyes -optional_depends = screwdriver diff --git a/mods/homedecor_modpack/computer/models/computer_3dprinter_bedflinger.obj b/mods/homedecor_modpack/computer/models/computer_3dprinter_bedflinger.obj deleted file mode 100644 index 8b846c75..00000000 --- a/mods/homedecor_modpack/computer/models/computer_3dprinter_bedflinger.obj +++ /dev/null @@ -1,9831 +0,0 @@ -v -0.005 0 -0.33 -v -0.005 0 -0.316 -v -0.004 0.002 -0.33 -v -0.004 0.002 -0.316 -v -0.003 0.003 -0.33 -v -0.003 0.003 -0.316 -v -0.002 0.004 -0.33 -v -0.002 0.004 -0.316 -v 0 0.005 -0.33 -v 0 0.005 -0.316 -v 0.002 0.004 -0.33 -v 0.002 0.004 -0.316 -v 0.003 0.003 -0.33 -v 0.003 0.003 -0.316 -v 0.004 0.002 -0.33 -v 0.004 0.002 -0.316 -v 0.005 0 -0.33 -v 0.005 0 -0.316 -v 0.004 -0.002 -0.33 -v 0.004 -0.002 -0.316 -v 0.003 -0.003 -0.33 -v 0.003 -0.003 -0.316 -v 0.002 -0.004 -0.33 -v 0.002 -0.004 -0.316 -v 0 -0.005 -0.33 -v 0 -0.005 -0.316 -v -0.002 -0.004 -0.33 -v -0.002 -0.004 -0.316 -v -0.003 -0.003 -0.33 -v -0.003 -0.003 -0.316 -v -0.004 -0.002 -0.33 -v -0.004 -0.002 -0.316 -v -0.001 0 -0.35 -v -0.005 0 -0.342 -v -0.001 0 -0.35 -v -0.005 0.002 -0.342 -v 0 0 -0.35 -v -0.004 0.004 -0.342 -v 0 0.001 -0.35 -v -0.002 0.005 -0.342 -v 0 0.001 -0.35 -v 0 0.005 -0.342 -v 0 0.001 -0.35 -v 0.002 0.005 -0.342 -v 0 0 -0.35 -v 0.004 0.004 -0.342 -v 0.001 0 -0.35 -v 0.005 0.002 -0.342 -v 0.001 0 -0.35 -v 0.005 0 -0.342 -v 0.001 0 -0.35 -v 0.005 -0.002 -0.342 -v 0 0 -0.35 -v 0.004 -0.004 -0.342 -v 0 -0.001 -0.35 -v 0.002 -0.005 -0.342 -v 0 -0.001 -0.35 -v 0 -0.005 -0.342 -v 0 -0.001 -0.35 -v -0.002 -0.005 -0.342 -v 0 0 -0.35 -v -0.004 -0.004 -0.342 -v -0.001 0 -0.35 -v -0.005 -0.002 -0.342 -v -0.01 0.01 -0.33 -v -0.01 0.01 -0.342 -v 0.01 0.01 -0.33 -v 0.01 0.01 -0.342 -v -0.01 -0.01 -0.33 -v -0.01 -0.01 -0.342 -v 0.01 -0.01 -0.33 -v 0.01 -0.01 -0.342 -v -0.061 0.186 -0.326 -v -0.061 0.186 -0.253 -v -0.111 0.236 -0.326 -v -0.111 0.236 -0.253 -v -0.111 0.186 -0.326 -v -0.111 0.186 -0.253 -v -0.086 0.236 -0.326 -v -0.086 0.236 -0.253 -v -0.061 0.299 -0.326 -v -0.086 0.299 -0.326 -v -0.061 0.299 -0.308 -v -0.061 0.244 -0.308 -v -0.086 0.244 -0.308 -v -0.086 0.299 -0.308 -v -0.061 0.244 -0.253 -v -0.086 0.244 -0.253 -v -0.061 -0.194 -0.326 -v -0.061 -0.194 -0.253 -v -0.061 -0.244 -0.326 -v -0.061 -0.244 -0.253 -v -0.111 -0.194 -0.326 -v -0.111 -0.194 -0.253 -v -0.111 -0.244 -0.326 -v -0.111 -0.244 -0.253 -v -0.079 0.211 -0.261 -v -0.078 0.211 -0.259 -v -0.077 0.211 -0.258 -v -0.076 0.211 -0.257 -v -0.074 0.211 -0.256 -v -0.072 0.211 -0.257 -v -0.07 0.211 -0.258 -v -0.069 0.211 -0.259 -v -0.069 0.211 -0.261 -v -0.069 0.211 -0.263 -v -0.07 0.211 -0.265 -v -0.072 0.211 -0.266 -v -0.074 0.211 -0.266 -v -0.076 0.211 -0.266 -v -0.077 0.211 -0.265 -v -0.078 0.211 -0.263 -v -0.078 -0.214 -0.263 -v -0.079 -0.214 -0.261 -v -0.072 -0.214 -0.266 -v -0.069 -0.214 -0.263 -v -0.076 -0.214 -0.266 -v -0.072 -0.214 -0.257 -v -0.076 -0.214 -0.257 -v -0.078 -0.214 -0.259 -v -0.069 -0.214 -0.259 -v -0.077 -0.214 -0.265 -v -0.074 -0.214 -0.266 -v -0.07 -0.214 -0.265 -v -0.069 -0.214 -0.261 -v -0.07 -0.214 -0.258 -v -0.074 -0.214 -0.256 -v -0.077 -0.214 -0.258 -v -0.061 -0.037 -0.326 -v -0.061 -0.037 -0.253 -v -0.086 -0.037 -0.326 -v -0.086 -0.037 -0.253 -v -0.061 0.038 -0.326 -v -0.061 0.038 -0.253 -v -0.086 0.038 -0.326 -v -0.086 0.038 -0.253 -v -0.006 -0.027 -0.316 -v -0.006 -0.027 -0.261 -v -0.006 0.028 -0.316 -v -0.006 0.028 -0.261 -v 0.019 -0.027 -0.316 -v 0.019 -0.027 -0.261 -v 0.019 0.028 -0.316 -v 0.019 0.028 -0.261 -v -0.006 -0.027 -0.316 -v -0.061 -0.027 -0.261 -v -0.006 -0.027 -0.261 -v -0.006 0.028 -0.316 -v -0.061 0.028 -0.261 -v -0.006 0.028 -0.261 -v -0.012 -0.027 -0.316 -v -0.055 -0.027 -0.261 -v -0.055 0.028 -0.261 -v -0.055 0.028 -0.316 -v -0.012 -0.027 -0.261 -v -0.012 0.028 -0.261 -v -0.012 0.028 -0.316 -v -0.061 -0.027 -0.316 -v -0.061 0.028 -0.316 -v -0.055 -0.027 -0.316 -v -0.073 -0.195 -0.283 -v -0.073 -0.195 -0.281 -v -0.08 -0.195 -0.283 -v -0.08 -0.195 -0.281 -v -0.072 0.271 -0.283 -v -0.072 0.271 -0.281 -v -0.08 0.271 -0.283 -v -0.08 0.271 -0.281 -v -0.079 -0.214 -0.317 -v -0.078 -0.214 -0.319 -v -0.077 -0.214 -0.321 -v -0.076 -0.214 -0.322 -v -0.074 -0.214 -0.322 -v -0.072 -0.214 -0.322 -v -0.07 -0.214 -0.321 -v -0.069 -0.214 -0.319 -v -0.069 -0.214 -0.317 -v -0.069 -0.214 -0.316 -v -0.07 -0.214 -0.314 -v -0.072 -0.214 -0.313 -v -0.074 -0.214 -0.312 -v -0.076 -0.214 -0.313 -v -0.077 -0.214 -0.314 -v -0.078 -0.214 -0.316 -v -0.078 0.211 -0.316 -v -0.079 0.211 -0.317 -v -0.072 0.211 -0.313 -v -0.069 0.211 -0.316 -v -0.076 0.211 -0.313 -v -0.072 0.211 -0.322 -v -0.076 0.211 -0.322 -v -0.078 0.211 -0.319 -v -0.069 0.211 -0.319 -v -0.077 0.211 -0.314 -v -0.074 0.211 -0.312 -v -0.07 0.211 -0.314 -v -0.069 0.211 -0.317 -v -0.07 0.211 -0.321 -v -0.074 0.211 -0.322 -v -0.077 0.211 -0.321 -v -0.073 -0.195 -0.301 -v -0.073 -0.195 -0.298 -v -0.08 -0.195 -0.301 -v -0.08 -0.195 -0.298 -v -0.072 0.271 -0.301 -v -0.072 0.271 -0.298 -v -0.08 0.271 -0.301 -v -0.08 0.271 -0.298 -v -0.153 0.173 -0.394 -v -0.153 0.173 -0.303 -v -0.228 0.173 -0.394 -v -0.228 0.173 -0.303 -v -0.153 0.191 -0.394 -v -0.153 0.191 -0.303 -v -0.228 0.191 -0.394 -v -0.228 0.191 -0.303 -v -0.149 -0.224 -0.437 -v -0.149 -0.224 -0.194 -v -0.28 -0.224 -0.437 -v -0.28 -0.224 -0.194 -v -0.149 -0.174 -0.437 -v -0.149 -0.174 -0.194 -v -0.28 -0.174 -0.437 -v -0.28 -0.174 -0.194 -v -0.143 -0.2 -0.5 -v -0.143 -0.197 -0.497 -v -0.143 0.197 -0.497 -v -0.143 0.2 -0.5 -v -0.143 0.231 -0.494 -v -0.143 0.231 -0.044 -v -0.143 0.225 -0.037 -v -0.143 -0.225 -0.038 -v -0.143 -0.231 -0.044 -v -0.143 0.038 -0.45 -v -0.143 0.006 -0.481 -v -0.143 -0.006 -0.481 -v -0.143 -0.037 -0.45 -v -0.143 -0.094 -0.45 -v -0.143 -0.1 -0.456 -v -0.143 -0.1 -0.475 -v -0.143 -0.1 -0.477 -v -0.143 -0.101 -0.478 -v -0.143 -0.102 -0.479 -v -0.143 -0.103 -0.48 -v -0.143 -0.105 -0.481 -v -0.143 -0.106 -0.481 -v -0.143 -0.108 -0.481 -v -0.143 -0.109 -0.48 -v -0.143 -0.111 -0.479 -v -0.143 -0.112 -0.478 -v -0.143 -0.112 -0.477 -v -0.143 -0.112 -0.475 -v -0.143 -0.112 -0.456 -v -0.143 -0.119 -0.45 -v -0.143 -0.156 -0.45 -v -0.143 -0.162 -0.444 -v -0.143 -0.162 -0.094 -v -0.143 -0.156 -0.088 -v -0.143 0.156 -0.087 -v -0.143 0.162 -0.094 -v -0.143 0.162 -0.444 -v -0.143 0.156 -0.45 -v -0.143 0.119 -0.45 -v -0.143 0.113 -0.456 -v -0.143 0.113 -0.475 -v -0.143 0.112 -0.477 -v -0.143 0.112 -0.478 -v -0.143 0.111 -0.479 -v -0.143 0.109 -0.48 -v -0.143 0.108 -0.481 -v -0.143 0.106 -0.481 -v -0.143 0.105 -0.481 -v -0.143 0.103 -0.48 -v -0.143 0.102 -0.479 -v -0.143 0.101 -0.478 -v -0.143 0.1 -0.477 -v -0.143 0.1 -0.475 -v -0.143 0.1 -0.456 -v -0.143 0.094 -0.45 -v -0.143 -0.225 -0.5 -v -0.143 0.225 -0.5 -v -0.143 -0.231 -0.494 -v -0.135 -0.2 -0.5 -v -0.135 -0.197 -0.497 -v -0.135 0.197 -0.497 -v -0.135 0.2 -0.5 -v -0.135 0.231 -0.494 -v -0.135 0.231 -0.044 -v -0.135 0.225 -0.037 -v -0.135 -0.225 -0.038 -v -0.135 -0.231 -0.044 -v -0.135 0.038 -0.45 -v -0.135 0.006 -0.481 -v -0.135 -0.006 -0.481 -v -0.135 -0.037 -0.45 -v -0.135 -0.094 -0.45 -v -0.135 -0.1 -0.456 -v -0.135 -0.1 -0.475 -v -0.135 -0.1 -0.477 -v -0.135 -0.101 -0.478 -v -0.135 -0.102 -0.479 -v -0.135 -0.103 -0.48 -v -0.135 -0.105 -0.481 -v -0.135 -0.106 -0.481 -v -0.135 -0.108 -0.481 -v -0.135 -0.109 -0.48 -v -0.135 -0.111 -0.479 -v -0.135 -0.112 -0.478 -v -0.135 -0.112 -0.477 -v -0.135 -0.112 -0.475 -v -0.135 -0.112 -0.456 -v -0.135 -0.119 -0.45 -v -0.135 -0.156 -0.45 -v -0.135 -0.162 -0.094 -v -0.135 -0.156 -0.088 -v -0.135 0.156 -0.087 -v -0.135 0.162 -0.094 -v -0.135 0.162 -0.444 -v -0.135 0.156 -0.45 -v -0.135 0.119 -0.45 -v -0.135 0.113 -0.456 -v -0.135 0.113 -0.475 -v -0.135 0.112 -0.477 -v -0.135 0.112 -0.478 -v -0.135 0.111 -0.479 -v -0.135 0.109 -0.48 -v -0.135 0.108 -0.481 -v -0.135 0.106 -0.481 -v -0.135 0.105 -0.481 -v -0.135 0.103 -0.48 -v -0.135 0.102 -0.479 -v -0.135 0.101 -0.478 -v -0.135 0.1 -0.477 -v -0.135 0.1 -0.475 -v -0.135 0.1 -0.456 -v -0.135 0.094 -0.45 -v -0.135 -0.225 -0.5 -v -0.135 0.225 -0.5 -v -0.135 -0.231 -0.494 -v -0.135 -0.162 -0.444 -v -0.244 0.166 -0.497 -v -0.246 0.166 -0.5 -v -0.277 0.166 -0.474 -v -0.184 0.166 -0.468 -v -0.178 0.166 -0.464 -v -0.178 0.166 -0.462 -v -0.179 0.166 -0.46 -v -0.181 0.166 -0.458 -v -0.184 0.166 -0.457 -v -0.271 0.166 -0.457 -v -0.277 0.166 -0.441 -v -0.143 0.166 -0.497 -v -0.271 0.166 -0.5 -v -0.277 0.166 -0.494 -v -0.271 0.166 -0.468 -v -0.182 0.166 -0.468 -v -0.181 0.166 -0.467 -v -0.18 0.166 -0.466 -v -0.179 0.166 -0.465 -v -0.178 0.166 -0.461 -v -0.18 0.166 -0.459 -v -0.182 0.166 -0.457 -v -0.277 0.166 -0.451 -v -0.175 0.166 -0.038 -v -0.143 0.166 -0.038 -v -0.244 0.173 -0.497 -v -0.246 0.173 -0.5 -v -0.178 0.173 -0.464 -v -0.178 0.173 -0.462 -v -0.184 0.173 -0.457 -v -0.271 0.173 -0.457 -v -0.277 0.173 -0.441 -v -0.271 0.173 -0.5 -v -0.277 0.173 -0.494 -v -0.182 0.173 -0.468 -v -0.181 0.173 -0.467 -v -0.18 0.173 -0.466 -v -0.179 0.173 -0.465 -v -0.175 0.173 -0.038 -v -0.143 0.173 -0.038 -v -0.143 0.173 -0.497 -v -0.277 0.173 -0.474 -v -0.271 0.173 -0.468 -v -0.184 0.173 -0.468 -v -0.178 0.173 -0.461 -v -0.179 0.173 -0.46 -v -0.18 0.173 -0.459 -v -0.181 0.173 -0.458 -v -0.182 0.173 -0.457 -v -0.277 0.173 -0.451 -v -0.244 -0.174 -0.497 -v -0.246 -0.174 -0.5 -v -0.277 -0.174 -0.474 -v -0.184 -0.174 -0.468 -v -0.178 -0.174 -0.464 -v -0.178 -0.174 -0.462 -v -0.179 -0.174 -0.46 -v -0.181 -0.174 -0.458 -v -0.184 -0.174 -0.457 -v -0.271 -0.174 -0.457 -v -0.277 -0.174 -0.441 -v -0.143 -0.174 -0.497 -v -0.271 -0.174 -0.5 -v -0.277 -0.174 -0.494 -v -0.271 -0.174 -0.468 -v -0.182 -0.174 -0.468 -v -0.181 -0.174 -0.467 -v -0.18 -0.174 -0.466 -v -0.179 -0.174 -0.465 -v -0.178 -0.174 -0.461 -v -0.18 -0.174 -0.459 -v -0.182 -0.174 -0.457 -v -0.277 -0.174 -0.451 -v -0.175 -0.174 -0.038 -v -0.143 -0.174 -0.038 -v -0.244 -0.166 -0.497 -v -0.246 -0.166 -0.5 -v -0.178 -0.166 -0.464 -v -0.178 -0.166 -0.462 -v -0.184 -0.166 -0.457 -v -0.271 -0.166 -0.457 -v -0.277 -0.166 -0.441 -v -0.271 -0.166 -0.5 -v -0.277 -0.166 -0.494 -v -0.182 -0.166 -0.468 -v -0.181 -0.166 -0.467 -v -0.18 -0.166 -0.466 -v -0.179 -0.166 -0.465 -v -0.175 -0.166 -0.038 -v -0.143 -0.166 -0.038 -v -0.143 -0.166 -0.497 -v -0.277 -0.166 -0.474 -v -0.271 -0.166 -0.468 -v -0.184 -0.166 -0.468 -v -0.178 -0.166 -0.461 -v -0.179 -0.166 -0.46 -v -0.18 -0.166 -0.459 -v -0.181 -0.166 -0.458 -v -0.182 -0.166 -0.457 -v -0.277 -0.166 -0.451 -v -0.099 0.227 -0.035 -v -0.099 0.227 -0.438 -v -0.097 0.227 -0.035 -v -0.097 0.227 -0.438 -v -0.095 0.226 -0.035 -v -0.095 0.226 -0.438 -v -0.094 0.224 -0.035 -v -0.094 0.224 -0.438 -v -0.094 0.222 -0.035 -v -0.094 0.222 -0.438 -v -0.094 0.221 -0.035 -v -0.094 0.221 -0.438 -v -0.095 0.219 -0.035 -v -0.095 0.219 -0.438 -v -0.097 0.218 -0.035 -v -0.097 0.218 -0.438 -v -0.099 0.217 -0.035 -v -0.099 0.217 -0.438 -v -0.101 0.218 -0.035 -v -0.101 0.218 -0.438 -v -0.102 0.219 -0.035 -v -0.102 0.219 -0.438 -v -0.103 0.221 -0.035 -v -0.103 0.221 -0.438 -v -0.104 0.222 -0.035 -v -0.104 0.222 -0.438 -v -0.103 0.224 -0.035 -v -0.103 0.224 -0.438 -v -0.102 0.226 -0.035 -v -0.102 0.226 -0.438 -v -0.101 0.227 -0.035 -v -0.101 0.227 -0.438 -v -0.135 -0.238 -0.431 -v -0.135 -0.187 -0.431 -v -0.132 -0.242 -0.431 -v -0.128 -0.179 -0.431 -v -0.12 -0.179 -0.431 -v -0.113 -0.187 -0.431 -v -0.113 -0.223 -0.431 -v -0.077 -0.223 -0.431 -v -0.073 -0.227 -0.431 -v -0.073 -0.235 -0.431 -v -0.079 -0.242 -0.431 -v -0.135 -0.238 -0.456 -v -0.135 -0.235 -0.459 -v -0.135 -0.215 -0.479 -v -0.135 -0.205 -0.479 -v -0.135 -0.187 -0.46 -v -0.132 -0.242 -0.453 -v -0.098 -0.242 -0.438 -v -0.098 -0.242 -0.438 -v -0.112 -0.242 -0.453 -v -0.079 -0.242 -0.438 -v -0.073 -0.235 -0.438 -v -0.073 -0.227 -0.438 -v -0.077 -0.223 -0.438 -v -0.113 -0.223 -0.438 -v -0.113 -0.187 -0.438 -v -0.12 -0.179 -0.438 -v -0.128 -0.179 -0.438 -v -0.134 -0.185 -0.459 -v -0.134 -0.185 -0.438 -v -0.125 -0.185 -0.459 -v -0.125 -0.205 -0.479 -v -0.125 -0.215 -0.479 -v -0.125 -0.235 -0.459 -v -0.119 -0.235 -0.459 -v -0.119 -0.235 -0.459 -v -0.125 -0.235 -0.459 -v -0.098 -0.235 -0.438 -v -0.098 -0.235 -0.438 -v -0.125 -0.185 -0.438 -v -0.125 -0.235 -0.438 -v -0.135 -0.234 -0.043 -v -0.135 -0.234 -0.058 -v -0.135 -0.229 -0.038 -v -0.135 -0.187 -0.058 -v -0.135 -0.187 -0.038 -v -0.128 -0.242 -0.039 -v -0.128 -0.242 -0.055 -v -0.13 -0.239 -0.058 -v -0.127 -0.242 -0.038 -v -0.134 -0.185 -0.038 -v -0.125 -0.194 -0.038 -v -0.125 -0.223 -0.038 -v -0.092 -0.223 -0.038 -v -0.088 -0.227 -0.038 -v -0.088 -0.235 -0.038 -v -0.094 -0.242 -0.038 -v -0.134 -0.185 -0.058 -v -0.125 -0.242 -0.053 -v -0.094 -0.242 -0.044 -v -0.098 -0.242 -0.044 -v -0.106 -0.242 -0.053 -v -0.098 -0.242 -0.044 -v -0.125 -0.235 -0.053 -v -0.13 -0.189 -0.058 -v -0.088 -0.235 -0.044 -v -0.088 -0.227 -0.044 -v -0.092 -0.223 -0.044 -v -0.125 -0.223 -0.044 -v -0.125 -0.235 -0.044 -v -0.126 -0.194 -0.053 -v -0.106 -0.235 -0.053 -v -0.098 -0.235 -0.044 -v -0.098 -0.235 -0.044 -v -0.099 -0.225 -0.035 -v -0.099 -0.225 -0.437 -v -0.097 -0.225 -0.035 -v -0.097 -0.225 -0.437 -v -0.095 -0.227 -0.035 -v -0.095 -0.227 -0.437 -v -0.094 -0.228 -0.035 -v -0.094 -0.228 -0.437 -v -0.094 -0.23 -0.035 -v -0.094 -0.23 -0.437 -v -0.094 -0.232 -0.035 -v -0.094 -0.232 -0.437 -v -0.095 -0.234 -0.035 -v -0.095 -0.234 -0.437 -v -0.097 -0.235 -0.035 -v -0.097 -0.235 -0.437 -v -0.099 -0.235 -0.035 -v -0.099 -0.235 -0.437 -v -0.101 -0.235 -0.035 -v -0.101 -0.235 -0.437 -v -0.102 -0.234 -0.035 -v -0.102 -0.234 -0.437 -v -0.103 -0.232 -0.035 -v -0.103 -0.232 -0.437 -v -0.104 -0.23 -0.035 -v -0.104 -0.23 -0.437 -v -0.103 -0.228 -0.035 -v -0.103 -0.228 -0.437 -v -0.102 -0.227 -0.035 -v -0.102 -0.227 -0.437 -v -0.101 -0.225 -0.035 -v -0.101 -0.225 -0.437 -v -0.135 0.226 -0.043 -v -0.135 0.226 -0.058 -v -0.135 0.221 -0.038 -v -0.135 0.179 -0.058 -v -0.135 0.179 -0.038 -v -0.128 0.234 -0.039 -v -0.128 0.234 -0.055 -v -0.13 0.231 -0.058 -v -0.127 0.234 -0.038 -v -0.134 0.178 -0.038 -v -0.125 0.186 -0.038 -v -0.125 0.215 -0.038 -v -0.092 0.215 -0.038 -v -0.088 0.219 -0.038 -v -0.088 0.228 -0.038 -v -0.094 0.234 -0.038 -v -0.134 0.178 -0.058 -v -0.125 0.234 -0.053 -v -0.094 0.234 -0.044 -v -0.098 0.234 -0.044 -v -0.106 0.234 -0.053 -v -0.098 0.234 -0.044 -v -0.125 0.228 -0.053 -v -0.13 0.181 -0.058 -v -0.088 0.228 -0.044 -v -0.088 0.219 -0.044 -v -0.092 0.215 -0.044 -v -0.125 0.215 -0.044 -v -0.125 0.228 -0.044 -v -0.126 0.186 -0.053 -v -0.106 0.228 -0.053 -v -0.098 0.228 -0.044 -v -0.098 0.228 -0.044 -v -0.135 0.23 -0.431 -v -0.135 0.179 -0.431 -v -0.132 0.234 -0.431 -v -0.128 0.171 -0.431 -v -0.12 0.171 -0.431 -v -0.113 0.179 -0.431 -v -0.113 0.215 -0.431 -v -0.077 0.215 -0.431 -v -0.073 0.219 -0.431 -v -0.073 0.228 -0.431 -v -0.079 0.234 -0.431 -v -0.135 0.23 -0.456 -v -0.135 0.228 -0.459 -v -0.135 0.208 -0.479 -v -0.135 0.198 -0.479 -v -0.135 0.179 -0.46 -v -0.132 0.234 -0.453 -v -0.098 0.234 -0.438 -v -0.098 0.234 -0.438 -v -0.112 0.234 -0.453 -v -0.079 0.234 -0.438 -v -0.073 0.228 -0.438 -v -0.073 0.219 -0.438 -v -0.077 0.215 -0.438 -v -0.113 0.215 -0.438 -v -0.113 0.179 -0.438 -v -0.12 0.171 -0.438 -v -0.128 0.171 -0.438 -v -0.134 0.178 -0.459 -v -0.134 0.178 -0.438 -v -0.125 0.178 -0.459 -v -0.125 0.198 -0.479 -v -0.125 0.208 -0.479 -v -0.125 0.228 -0.459 -v -0.119 0.228 -0.459 -v -0.119 0.228 -0.459 -v -0.125 0.228 -0.459 -v -0.098 0.228 -0.438 -v -0.098 0.228 -0.438 -v -0.125 0.178 -0.438 -v -0.125 0.228 -0.438 -v -0.35 -0.05 0.107 -v -0.35 0.045 0.107 -v -0.348 -0.05 0.083 -v -0.348 0.045 0.083 -v -0.341 -0.05 0.059 -v -0.341 0.045 0.059 -v -0.329 -0.05 0.038 -v -0.329 0.045 0.038 -v -0.314 -0.05 0.019 -v -0.314 0.045 0.019 -v -0.295 -0.05 0.004 -v -0.295 0.045 0.004 -v -0.274 -0.05 -0.008 -v -0.274 0.045 -0.008 -v -0.251 -0.05 -0.015 -v -0.251 0.045 -0.015 -v -0.227 -0.05 -0.017 -v -0.227 0.045 -0.017 -v -0.202 -0.05 -0.015 -v -0.202 0.045 -0.015 -v -0.179 -0.05 -0.008 -v -0.179 0.045 -0.008 -v -0.158 -0.05 0.004 -v -0.158 0.045 0.004 -v -0.139 -0.05 0.019 -v -0.139 0.045 0.019 -v -0.124 -0.05 0.038 -v -0.124 0.045 0.038 -v -0.112 -0.05 0.059 -v -0.112 0.045 0.059 -v -0.105 -0.05 0.083 -v -0.105 0.045 0.083 -v -0.103 -0.05 0.107 -v -0.103 0.045 0.107 -v -0.105 -0.05 0.131 -v -0.105 0.045 0.131 -v -0.112 -0.05 0.154 -v -0.112 0.045 0.154 -v -0.124 -0.05 0.175 -v -0.124 0.045 0.175 -v -0.139 -0.05 0.194 -v -0.139 0.045 0.194 -v -0.158 -0.05 0.209 -v -0.158 0.045 0.209 -v -0.179 -0.05 0.221 -v -0.179 0.045 0.221 -v -0.202 -0.05 0.228 -v -0.202 0.045 0.228 -v -0.227 -0.05 0.23 -v -0.227 0.045 0.23 -v -0.251 -0.05 0.228 -v -0.251 0.045 0.228 -v -0.274 -0.05 0.221 -v -0.274 0.045 0.221 -v -0.295 -0.05 0.209 -v -0.295 0.045 0.209 -v -0.314 -0.05 0.194 -v -0.314 0.045 0.194 -v -0.329 -0.05 0.175 -v -0.329 0.045 0.175 -v -0.341 -0.05 0.154 -v -0.341 0.045 0.154 -v -0.348 -0.05 0.131 -v -0.348 0.045 0.131 -v -0.348 0.039 0.083 -v -0.35 0.039 0.107 -v -0.341 0.039 0.059 -v -0.329 0.039 0.038 -v -0.314 0.039 0.019 -v -0.295 0.039 0.004 -v -0.274 0.039 -0.008 -v -0.251 0.039 -0.015 -v -0.227 0.039 -0.017 -v -0.202 0.039 -0.015 -v -0.179 0.039 -0.008 -v -0.158 0.039 0.004 -v -0.139 0.039 0.019 -v -0.124 0.039 0.038 -v -0.112 0.039 0.059 -v -0.105 0.039 0.083 -v -0.103 0.039 0.107 -v -0.105 0.039 0.131 -v -0.112 0.039 0.154 -v -0.124 0.039 0.175 -v -0.139 0.039 0.194 -v -0.158 0.039 0.209 -v -0.179 0.039 0.221 -v -0.202 0.039 0.228 -v -0.227 0.039 0.23 -v -0.251 0.039 0.228 -v -0.274 0.039 0.221 -v -0.295 0.039 0.209 -v -0.314 0.039 0.194 -v -0.329 0.039 0.175 -v -0.341 0.039 0.154 -v -0.348 0.039 0.131 -v -0.35 -0.044 0.107 -v -0.348 -0.044 0.083 -v -0.341 -0.044 0.059 -v -0.329 -0.044 0.038 -v -0.314 -0.044 0.019 -v -0.295 -0.044 0.004 -v -0.274 -0.044 -0.008 -v -0.251 -0.044 -0.015 -v -0.227 -0.044 -0.017 -v -0.202 -0.044 -0.015 -v -0.179 -0.044 -0.008 -v -0.158 -0.044 0.004 -v -0.139 -0.044 0.019 -v -0.124 -0.044 0.038 -v -0.112 -0.044 0.059 -v -0.105 -0.044 0.083 -v -0.103 -0.044 0.107 -v -0.105 -0.044 0.131 -v -0.112 -0.044 0.154 -v -0.124 -0.044 0.175 -v -0.139 -0.044 0.194 -v -0.158 -0.044 0.209 -v -0.179 -0.044 0.221 -v -0.202 -0.044 0.228 -v -0.227 -0.044 0.23 -v -0.251 -0.044 0.228 -v -0.274 -0.044 0.221 -v -0.295 -0.044 0.209 -v -0.314 -0.044 0.194 -v -0.329 -0.044 0.175 -v -0.341 -0.044 0.154 -v -0.348 -0.044 0.131 -v -0.199 0.039 0.066 -v -0.199 -0.044 0.066 -v -0.204 0.045 0.072 -v -0.204 -0.05 0.072 -v -0.276 0.039 0.107 -v -0.268 -0.05 0.107 -v -0.276 -0.044 0.107 -v -0.268 0.045 0.107 -v -0.275 0.039 0.116 -v -0.267 -0.05 0.115 -v -0.275 -0.044 0.116 -v -0.267 0.045 0.115 -v -0.272 0.039 0.125 -v -0.265 -0.05 0.122 -v -0.272 -0.044 0.125 -v -0.265 0.045 0.122 -v -0.208 0.039 0.152 -v -0.208 -0.044 0.152 -v -0.211 0.045 0.145 -v -0.211 -0.05 0.145 -v -0.199 0.039 0.147 -v -0.199 -0.044 0.147 -v -0.204 0.045 0.141 -v -0.204 -0.05 0.141 -v -0.217 0.039 0.155 -v -0.217 -0.044 0.155 -v -0.219 0.045 0.147 -v -0.219 -0.05 0.147 -v -0.192 0.039 0.141 -v -0.192 -0.044 0.141 -v -0.197 0.045 0.136 -v -0.197 -0.05 0.136 -v -0.179 0.039 0.116 -v -0.179 -0.044 0.116 -v -0.186 0.045 0.115 -v -0.186 -0.05 0.115 -v -0.178 0.039 0.107 -v -0.178 -0.044 0.107 -v -0.185 0.045 0.107 -v -0.185 -0.05 0.107 -v -0.181 0.039 0.125 -v -0.181 -0.044 0.125 -v -0.189 0.045 0.122 -v -0.189 -0.05 0.122 -v -0.236 0.039 0.059 -v -0.236 -0.044 0.059 -v -0.235 0.045 0.066 -v -0.235 -0.05 0.066 -v -0.267 0.039 0.079 -v -0.267 -0.044 0.079 -v -0.261 -0.05 0.084 -v -0.261 0.045 0.084 -v -0.227 0.039 0.058 -v -0.227 -0.044 0.058 -v -0.227 0.045 0.065 -v -0.227 -0.05 0.065 -v -0.245 0.039 0.061 -v -0.245 -0.044 0.061 -v -0.242 -0.05 0.069 -v -0.242 0.045 0.069 -v -0.179 0.039 0.097 -v -0.179 -0.044 0.097 -v -0.186 0.045 0.099 -v -0.186 -0.05 0.099 -v -0.261 0.039 0.141 -v -0.256 -0.05 0.136 -v -0.261 -0.044 0.141 -v -0.256 0.045 0.136 -v -0.267 0.039 0.134 -v -0.261 -0.05 0.13 -v -0.267 -0.044 0.134 -v -0.261 0.045 0.13 -v -0.254 0.039 0.147 -v -0.25 -0.05 0.141 -v -0.254 -0.044 0.147 -v -0.25 0.045 0.141 -v -0.217 0.039 0.059 -v -0.217 -0.044 0.059 -v -0.219 0.045 0.066 -v -0.219 -0.05 0.066 -v -0.186 0.039 0.079 -v -0.186 -0.044 0.079 -v -0.192 0.045 0.084 -v -0.192 -0.05 0.084 -v -0.192 0.039 0.072 -v -0.192 -0.044 0.072 -v -0.197 0.045 0.077 -v -0.197 -0.05 0.077 -v -0.208 0.039 0.061 -v -0.208 -0.044 0.061 -v -0.211 0.045 0.069 -v -0.211 -0.05 0.069 -v -0.227 0.039 0.156 -v -0.227 -0.044 0.156 -v -0.227 -0.05 0.148 -v -0.227 0.045 0.148 -v -0.186 0.039 0.134 -v -0.186 -0.044 0.134 -v -0.192 0.045 0.13 -v -0.192 -0.05 0.13 -v -0.236 0.039 0.155 -v -0.236 -0.044 0.155 -v -0.235 -0.05 0.147 -v -0.235 0.045 0.147 -v -0.261 0.039 0.072 -v -0.261 -0.044 0.072 -v -0.256 -0.05 0.077 -v -0.256 0.045 0.077 -v -0.181 0.039 0.088 -v -0.181 -0.044 0.088 -v -0.189 0.045 0.091 -v -0.189 -0.05 0.091 -v -0.254 0.039 0.066 -v -0.254 -0.044 0.066 -v -0.25 -0.05 0.072 -v -0.25 0.045 0.072 -v -0.245 0.039 0.152 -v -0.245 -0.044 0.152 -v -0.242 -0.05 0.145 -v -0.242 0.045 0.145 -v -0.272 0.039 0.088 -v -0.272 -0.044 0.088 -v -0.265 -0.05 0.091 -v -0.265 0.045 0.091 -v -0.275 0.039 0.097 -v -0.275 -0.044 0.097 -v -0.267 -0.05 0.099 -v -0.267 0.045 0.099 -v -0.238 0.081 0.136 -v -0.235 0.081 0.14 -v -0.231 0.081 0.143 -v -0.227 0.081 0.144 -v -0.222 0.081 0.143 -v -0.218 0.081 0.14 -v -0.215 0.081 0.136 -v -0.214 0.081 0.131 -v -0.215 0.081 0.126 -v -0.218 0.081 0.122 -v -0.222 0.081 0.12 -v -0.227 0.081 0.119 -v -0.231 0.081 0.12 -v -0.235 0.081 0.122 -v -0.238 0.081 0.126 -v -0.239 0.081 0.131 -v -0.119 0.058 -0.064 -v -0.153 0.058 -0.065 -v -0.12 0.071 -0.021 -v -0.12 0.058 -0.021 -v -0.119 0.071 -0.064 -v -0.153 0.071 -0.065 -v -0.242 0.085 0.138 -v -0.239 0.085 0.143 -v -0.233 0.085 0.147 -v -0.227 0.085 0.148 -v -0.22 0.085 0.147 -v -0.215 0.085 0.143 -v -0.211 0.085 0.138 -v -0.21 0.085 0.131 -v -0.211 0.085 0.125 -v -0.215 0.085 0.119 -v -0.22 0.085 0.116 -v -0.227 0.085 0.114 -v -0.233 0.085 0.116 -v -0.239 0.085 0.119 -v -0.242 0.085 0.125 -v -0.243 0.085 0.131 -v -0.242 0.097 0.138 -v -0.239 0.097 0.143 -v -0.233 0.097 0.147 -v -0.227 0.097 0.148 -v -0.22 0.097 0.147 -v -0.215 0.097 0.143 -v -0.211 0.097 0.138 -v -0.21 0.097 0.131 -v -0.211 0.097 0.125 -v -0.215 0.097 0.119 -v -0.22 0.097 0.116 -v -0.227 0.097 0.114 -v -0.233 0.097 0.116 -v -0.239 0.097 0.119 -v -0.242 0.097 0.125 -v -0.243 0.097 0.131 -v -0.238 -0.086 0.136 -v -0.235 -0.086 0.14 -v -0.231 -0.086 0.143 -v -0.227 -0.086 0.144 -v -0.222 -0.086 0.143 -v -0.218 -0.086 0.14 -v -0.215 -0.086 0.136 -v -0.214 -0.086 0.131 -v -0.215 -0.086 0.126 -v -0.218 -0.086 0.122 -v -0.222 -0.086 0.12 -v -0.227 -0.086 0.119 -v -0.231 -0.086 0.12 -v -0.235 -0.086 0.122 -v -0.238 -0.086 0.126 -v -0.239 -0.086 0.131 -v -0.119 -0.063 -0.064 -v -0.153 -0.063 -0.065 -v -0.12 -0.076 -0.021 -v -0.12 -0.063 -0.021 -v -0.119 -0.076 -0.064 -v -0.153 -0.076 -0.065 -v -0.242 -0.09 0.138 -v -0.239 -0.09 0.143 -v -0.233 -0.09 0.147 -v -0.227 -0.09 0.148 -v -0.22 -0.09 0.147 -v -0.215 -0.09 0.143 -v -0.211 -0.09 0.138 -v -0.21 -0.09 0.131 -v -0.211 -0.09 0.125 -v -0.215 -0.09 0.119 -v -0.22 -0.09 0.116 -v -0.227 -0.09 0.114 -v -0.233 -0.09 0.116 -v -0.239 -0.09 0.119 -v -0.242 -0.09 0.125 -v -0.243 -0.09 0.131 -v -0.242 -0.102 0.138 -v -0.239 -0.102 0.143 -v -0.233 -0.102 0.147 -v -0.227 -0.102 0.148 -v -0.22 -0.102 0.147 -v -0.215 -0.102 0.143 -v -0.211 -0.102 0.138 -v -0.21 -0.102 0.131 -v -0.211 -0.102 0.125 -v -0.215 -0.102 0.119 -v -0.22 -0.102 0.116 -v -0.227 -0.102 0.114 -v -0.233 -0.102 0.116 -v -0.239 -0.102 0.119 -v -0.242 -0.102 0.125 -v -0.243 -0.102 0.131 -v -0.259 0.058 0.149 -v -0.262 0.058 0.145 -v -0.262 0.071 0.145 -v -0.259 0.071 0.149 -v -0.253 0.071 0.149 -v -0.246 0.071 0.145 -v -0.246 0.058 0.145 -v -0.253 0.058 0.149 -v -0.262 -0.063 0.145 -v -0.259 -0.063 0.149 -v -0.259 -0.076 0.149 -v -0.262 -0.076 0.145 -v -0.246 -0.076 0.145 -v -0.253 -0.076 0.149 -v -0.253 -0.063 0.149 -v -0.246 -0.063 0.145 -v -0.203 0.058 0.147 -v -0.207 0.058 0.149 -v -0.207 0.071 0.149 -v -0.203 0.071 0.147 -v -0.215 0.071 0.146 -v -0.212 0.071 0.149 -v -0.212 0.058 0.149 -v -0.215 0.058 0.146 -v -0.207 -0.063 0.149 -v -0.203 -0.063 0.147 -v -0.203 -0.076 0.147 -v -0.207 -0.076 0.149 -v -0.212 -0.076 0.149 -v -0.215 -0.076 0.146 -v -0.215 -0.063 0.146 -v -0.212 -0.063 0.149 -v -0.216 0.071 0.124 -v -0.214 0.071 0.13 -v -0.225 0.071 0.118 -v -0.219 0.071 0.121 -v -0.237 0.071 0.123 -v -0.232 0.071 0.119 -v -0.232 0.058 0.119 -v -0.237 0.058 0.123 -v -0.219 0.058 0.121 -v -0.225 0.058 0.118 -v -0.214 0.058 0.13 -v -0.216 0.058 0.124 -v -0.214 -0.076 0.13 -v -0.216 -0.076 0.124 -v -0.219 -0.076 0.121 -v -0.225 -0.076 0.118 -v -0.232 -0.076 0.119 -v -0.237 -0.076 0.123 -v -0.237 -0.063 0.123 -v -0.232 -0.063 0.119 -v -0.225 -0.063 0.118 -v -0.219 -0.063 0.121 -v -0.216 -0.063 0.124 -v -0.214 -0.063 0.13 -v 0.253 0.126 -0.487 -v 0.253 -0.136 -0.487 -v 0.253 0.126 -0.486 -v 0.253 -0.136 -0.486 -v 0.254 0.126 -0.484 -v 0.254 -0.136 -0.484 -v 0.256 0.126 -0.483 -v 0.256 -0.136 -0.483 -v 0.258 0.126 -0.482 -v 0.258 -0.136 -0.482 -v 0.26 0.126 -0.483 -v 0.26 -0.136 -0.483 -v 0.261 0.126 -0.484 -v 0.261 -0.136 -0.484 -v 0.262 0.126 -0.486 -v 0.262 -0.136 -0.486 -v 0.263 0.126 -0.487 -v 0.263 -0.136 -0.487 -v 0.262 0.126 -0.489 -v 0.262 -0.136 -0.489 -v 0.261 0.126 -0.491 -v 0.261 -0.136 -0.491 -v 0.26 0.126 -0.492 -v 0.26 -0.136 -0.492 -v 0.258 0.126 -0.492 -v 0.258 -0.136 -0.492 -v 0.256 0.126 -0.492 -v 0.256 -0.136 -0.492 -v 0.254 0.126 -0.491 -v 0.254 -0.136 -0.491 -v 0.253 0.126 -0.489 -v 0.253 -0.136 -0.489 -v 0.258 0.011 -0.452 -v 0.258 0.017 -0.452 -v 0.249 0.011 -0.457 -v 0.249 0.017 -0.457 -v 0.249 0.011 -0.467 -v 0.249 0.017 -0.467 -v 0.258 0.011 -0.472 -v 0.258 0.017 -0.472 -v 0.266 0.011 -0.467 -v 0.266 0.017 -0.467 -v 0.266 0.011 -0.457 -v 0.266 0.017 -0.457 -v 0.258 -0.011 -0.452 -v 0.258 -0.017 -0.452 -v 0.266 -0.011 -0.457 -v 0.266 -0.017 -0.457 -v 0.266 -0.011 -0.467 -v 0.266 -0.017 -0.467 -v 0.258 -0.011 -0.472 -v 0.258 -0.017 -0.472 -v 0.249 -0.011 -0.467 -v 0.249 -0.017 -0.467 -v 0.249 -0.011 -0.457 -v 0.249 -0.017 -0.457 -v -0.232 0.012 -0.452 -v -0.232 0.006 -0.452 -v -0.224 0.012 -0.457 -v -0.224 0.006 -0.457 -v -0.224 0.012 -0.467 -v -0.224 0.006 -0.467 -v -0.232 0.012 -0.472 -v -0.232 0.006 -0.472 -v -0.241 0.012 -0.467 -v -0.241 0.006 -0.467 -v -0.241 0.012 -0.457 -v -0.241 0.006 -0.457 -v -0.232 0.012 -0.477 -v -0.232 0.006 -0.477 -v -0.224 0.012 -0.482 -v -0.224 0.006 -0.482 -v -0.224 0.012 -0.492 -v -0.224 0.006 -0.492 -v -0.232 0.012 -0.497 -v -0.232 0.006 -0.497 -v -0.241 0.012 -0.492 -v -0.241 0.006 -0.492 -v -0.241 0.012 -0.482 -v -0.241 0.006 -0.482 -v -0.232 0.025 -0.477 -v -0.232 0.031 -0.477 -v -0.241 0.025 -0.482 -v -0.241 0.031 -0.482 -v -0.241 0.025 -0.492 -v -0.241 0.031 -0.492 -v -0.232 0.025 -0.497 -v -0.232 0.031 -0.497 -v -0.224 0.025 -0.492 -v -0.224 0.031 -0.492 -v -0.224 0.025 -0.482 -v -0.224 0.031 -0.482 -v -0.232 0.025 -0.452 -v -0.232 0.031 -0.452 -v -0.241 0.025 -0.457 -v -0.241 0.031 -0.457 -v -0.241 0.025 -0.467 -v -0.241 0.031 -0.467 -v -0.232 0.025 -0.472 -v -0.232 0.031 -0.472 -v -0.224 0.025 -0.467 -v -0.224 0.031 -0.467 -v -0.224 0.025 -0.457 -v -0.224 0.031 -0.457 -v 0.272 -0.117 -0.5 -v 0.244 -0.117 -0.5 -v 0.272 -0.095 -0.5 -v 0.244 -0.095 -0.5 -v 0.269 -0.114 -0.441 -v 0.272 -0.117 -0.444 -v 0.247 -0.114 -0.441 -v 0.244 -0.117 -0.444 -v 0.269 -0.098 -0.441 -v 0.272 -0.095 -0.444 -v 0.247 -0.098 -0.441 -v 0.244 -0.095 -0.444 -v 0.269 0.111 -0.444 -v -0.243 0.111 -0.444 -v 0.269 0.111 -0.442 -v -0.243 0.111 -0.442 -v 0.269 0.11 -0.44 -v -0.243 0.11 -0.44 -v 0.269 0.108 -0.439 -v -0.243 0.108 -0.439 -v 0.269 0.106 -0.439 -v -0.243 0.106 -0.439 -v 0.269 0.104 -0.439 -v -0.243 0.104 -0.439 -v 0.269 0.103 -0.44 -v -0.243 0.103 -0.44 -v 0.269 0.102 -0.442 -v -0.243 0.102 -0.442 -v 0.269 0.101 -0.444 -v -0.243 0.101 -0.444 -v 0.269 0.102 -0.446 -v -0.243 0.102 -0.446 -v 0.269 0.103 -0.447 -v -0.243 0.103 -0.447 -v 0.269 0.104 -0.448 -v -0.243 0.104 -0.448 -v 0.269 0.106 -0.449 -v -0.243 0.106 -0.449 -v 0.269 0.108 -0.448 -v -0.243 0.108 -0.448 -v 0.269 0.11 -0.447 -v -0.243 0.11 -0.447 -v 0.269 0.111 -0.446 -v -0.243 0.111 -0.446 -v 0.133 -0.133 -0.42 -v -0.132 -0.133 -0.42 -v -0.132 0.133 -0.42 -v 0.133 0.133 -0.42 -v 0.133 -0.133 -0.416 -v -0.132 -0.133 -0.416 -v -0.132 0.133 -0.416 -v 0.133 0.133 -0.416 -v -0.082 -0.12 -0.42 -v -0.082 0.12 -0.42 -v 0.082 0.12 -0.42 -v 0.082 -0.12 -0.42 -v -0.082 -0.12 -0.432 -v 0.082 -0.12 -0.432 -v -0.082 0.12 -0.432 -v 0.082 0.12 -0.432 -v 0.133 -0.128 -0.432 -v 0.128 -0.133 -0.432 -v 0.132 -0.13 -0.432 -v 0.13 -0.132 -0.432 -v 0.128 -0.133 -0.42 -v 0.133 -0.128 -0.42 -v 0.13 -0.132 -0.42 -v 0.132 -0.13 -0.42 -v -0.128 -0.133 -0.432 -v -0.133 -0.128 -0.432 -v -0.13 -0.132 -0.432 -v -0.132 -0.13 -0.432 -v -0.133 -0.128 -0.42 -v -0.128 -0.133 -0.42 -v -0.132 -0.13 -0.42 -v -0.13 -0.132 -0.42 -v 0.128 0.133 -0.432 -v 0.133 0.128 -0.432 -v 0.13 0.132 -0.432 -v 0.132 0.13 -0.432 -v 0.133 0.128 -0.42 -v 0.128 0.133 -0.42 -v 0.132 0.13 -0.42 -v 0.13 0.132 -0.42 -v -0.133 0.128 -0.432 -v -0.128 0.133 -0.432 -v -0.132 0.13 -0.432 -v -0.13 0.132 -0.432 -v -0.128 0.133 -0.42 -v -0.133 0.128 -0.42 -v -0.13 0.132 -0.42 -v -0.132 0.13 -0.42 -v -0.128 0.12 -0.432 -v -0.133 0.125 -0.432 -v -0.13 0.121 -0.432 -v -0.132 0.122 -0.432 -v -0.133 -0.125 -0.432 -v -0.128 -0.12 -0.432 -v -0.132 -0.123 -0.432 -v -0.13 -0.121 -0.432 -v -0.128 -0.12 -0.42 -v -0.133 -0.125 -0.42 -v -0.13 -0.121 -0.42 -v -0.132 -0.123 -0.42 -v -0.133 0.125 -0.42 -v -0.128 0.12 -0.42 -v -0.132 0.122 -0.42 -v -0.13 0.121 -0.42 -v 0.128 -0.12 -0.432 -v 0.133 -0.125 -0.432 -v 0.13 -0.121 -0.432 -v 0.132 -0.123 -0.432 -v 0.133 0.125 -0.432 -v 0.128 0.12 -0.432 -v 0.132 0.122 -0.432 -v 0.13 0.121 -0.432 -v 0.128 0.12 -0.42 -v 0.133 0.125 -0.42 -v 0.13 0.121 -0.42 -v 0.132 0.122 -0.42 -v 0.133 -0.125 -0.42 -v 0.128 -0.12 -0.42 -v 0.132 -0.123 -0.42 -v 0.13 -0.121 -0.42 -v 0.125 -0.125 -0.416 -v -0.125 -0.125 -0.416 -v -0.125 0.125 -0.416 -v 0.125 0.125 -0.416 -v 0.125 -0.125 -0.412 -v -0.125 -0.125 -0.412 -v -0.125 0.125 -0.412 -v 0.125 0.125 -0.412 -v -0.075 0.11 -0.433 -v -0.044 0.11 -0.433 -v -0.075 0.115 -0.433 -v -0.044 0.115 -0.433 -v -0.075 0.097 -0.433 -v -0.044 0.097 -0.433 -v -0.075 0.102 -0.433 -v -0.044 0.102 -0.433 -v -0.075 0.115 -0.447 -v -0.075 0.114 -0.451 -v -0.044 0.114 -0.451 -v -0.044 0.115 -0.447 -v -0.075 0.111 -0.453 -v -0.075 0.108 -0.455 -v -0.044 0.108 -0.455 -v -0.044 0.111 -0.453 -v -0.075 0.104 -0.455 -v -0.075 0.101 -0.453 -v -0.044 0.101 -0.453 -v -0.044 0.104 -0.455 -v -0.075 0.098 -0.451 -v -0.075 0.097 -0.447 -v -0.044 0.097 -0.447 -v -0.044 0.098 -0.451 -v -0.075 -0.102 -0.433 -v -0.044 -0.102 -0.433 -v -0.075 -0.097 -0.433 -v -0.044 -0.097 -0.433 -v -0.075 -0.115 -0.433 -v -0.044 -0.115 -0.433 -v -0.075 -0.11 -0.433 -v -0.044 -0.11 -0.433 -v -0.075 -0.097 -0.447 -v -0.075 -0.098 -0.451 -v -0.044 -0.098 -0.451 -v -0.044 -0.097 -0.447 -v -0.075 -0.101 -0.453 -v -0.075 -0.104 -0.455 -v -0.044 -0.104 -0.455 -v -0.044 -0.101 -0.453 -v -0.075 -0.108 -0.455 -v -0.075 -0.111 -0.453 -v -0.044 -0.111 -0.453 -v -0.044 -0.108 -0.455 -v -0.075 -0.114 -0.451 -v -0.075 -0.115 -0.447 -v -0.044 -0.115 -0.447 -v -0.044 -0.114 -0.451 -v 0.044 -0.102 -0.433 -v 0.075 -0.102 -0.433 -v 0.044 -0.097 -0.433 -v 0.075 -0.097 -0.433 -v 0.044 -0.115 -0.433 -v 0.075 -0.115 -0.433 -v 0.044 -0.11 -0.433 -v 0.075 -0.11 -0.433 -v 0.044 -0.097 -0.447 -v 0.044 -0.098 -0.451 -v 0.075 -0.098 -0.451 -v 0.075 -0.097 -0.447 -v 0.044 -0.101 -0.453 -v 0.044 -0.104 -0.455 -v 0.075 -0.104 -0.455 -v 0.075 -0.101 -0.453 -v 0.044 -0.108 -0.455 -v 0.044 -0.111 -0.453 -v 0.075 -0.111 -0.453 -v 0.075 -0.108 -0.455 -v 0.044 -0.114 -0.451 -v 0.044 -0.115 -0.447 -v 0.075 -0.115 -0.447 -v 0.075 -0.114 -0.451 -v 0.044 0.11 -0.433 -v 0.075 0.11 -0.433 -v 0.044 0.115 -0.433 -v 0.075 0.115 -0.433 -v 0.044 0.097 -0.433 -v 0.075 0.097 -0.433 -v 0.044 0.102 -0.433 -v 0.075 0.102 -0.433 -v 0.044 0.115 -0.447 -v 0.044 0.114 -0.451 -v 0.075 0.114 -0.451 -v 0.075 0.115 -0.447 -v 0.044 0.111 -0.453 -v 0.044 0.108 -0.455 -v 0.075 0.108 -0.455 -v 0.075 0.111 -0.453 -v 0.044 0.104 -0.455 -v 0.044 0.101 -0.453 -v 0.075 0.101 -0.453 -v 0.075 0.104 -0.455 -v 0.044 0.098 -0.451 -v 0.044 0.097 -0.447 -v 0.075 0.097 -0.447 -v 0.075 0.098 -0.451 -v 0.015 -0.011 -0.432 -v -0.015 -0.011 -0.432 -v 0.015 -0.011 -0.46 -v -0.015 -0.011 -0.46 -v 0.015 0.011 -0.432 -v -0.015 0.011 -0.432 -v 0.015 0.011 -0.46 -v -0.015 0.011 -0.46 -v 0.269 -0.101 -0.444 -v -0.243 -0.101 -0.444 -v 0.269 -0.102 -0.442 -v -0.243 -0.102 -0.442 -v 0.269 -0.103 -0.44 -v -0.243 -0.103 -0.44 -v 0.269 -0.104 -0.439 -v -0.243 -0.104 -0.439 -v 0.269 -0.106 -0.439 -v -0.243 -0.106 -0.439 -v 0.269 -0.108 -0.439 -v -0.243 -0.108 -0.439 -v 0.269 -0.11 -0.44 -v -0.243 -0.11 -0.44 -v 0.269 -0.111 -0.442 -v -0.243 -0.111 -0.442 -v 0.269 -0.111 -0.444 -v -0.243 -0.111 -0.444 -v 0.269 -0.111 -0.446 -v -0.243 -0.111 -0.446 -v 0.269 -0.11 -0.447 -v -0.243 -0.11 -0.447 -v 0.269 -0.108 -0.448 -v -0.243 -0.108 -0.448 -v 0.269 -0.106 -0.449 -v -0.243 -0.106 -0.449 -v 0.269 -0.104 -0.448 -v -0.243 -0.104 -0.448 -v 0.269 -0.103 -0.447 -v -0.243 -0.103 -0.447 -v 0.269 -0.102 -0.446 -v -0.243 -0.102 -0.446 -v -0.237 0.201 -0.462 -v -0.237 -0.211 -0.462 -v -0.237 0.201 -0.461 -v -0.237 -0.211 -0.461 -v -0.236 0.201 -0.459 -v -0.236 -0.211 -0.459 -v -0.234 0.201 -0.458 -v -0.234 -0.211 -0.458 -v -0.232 0.201 -0.457 -v -0.232 -0.211 -0.457 -v -0.23 0.201 -0.458 -v -0.23 -0.211 -0.458 -v -0.229 0.201 -0.459 -v -0.229 -0.211 -0.459 -v -0.228 0.201 -0.461 -v -0.228 -0.211 -0.461 -v -0.227 0.201 -0.462 -v -0.227 -0.211 -0.462 -v -0.228 0.201 -0.464 -v -0.228 -0.211 -0.464 -v -0.229 0.201 -0.466 -v -0.229 -0.211 -0.466 -v -0.23 0.201 -0.467 -v -0.23 -0.211 -0.467 -v -0.232 0.201 -0.467 -v -0.232 -0.211 -0.467 -v -0.234 0.201 -0.467 -v -0.234 -0.211 -0.467 -v -0.236 0.201 -0.466 -v -0.236 -0.211 -0.466 -v -0.237 0.201 -0.464 -v -0.237 -0.211 -0.464 -v -0.167 0.012 -0.435 -v -0.247 0.012 -0.502 -v -0.247 0.012 -0.435 -v -0.167 0.025 -0.435 -v -0.247 0.025 -0.502 -v -0.247 0.025 -0.435 -v -0.207 0.012 -0.502 -v -0.167 0.012 -0.45 -v -0.207 0.025 -0.502 -v -0.167 0.025 -0.45 -v -0.207 0.025 -0.45 -v -0.207 0.012 -0.45 -v -0.167 0.025 -0.49 -v -0.222 0.08 -0.49 -v -0.222 0.025 -0.49 -v -0.167 0.025 -0.435 -v -0.222 0.08 -0.435 -v -0.222 0.025 -0.435 -v -0.198 0.025 -0.462 -v -0.198 0 -0.462 -v -0.197 0.025 -0.46 -v -0.197 0 -0.46 -v -0.195 0.025 -0.459 -v -0.195 0 -0.459 -v -0.192 0.025 -0.46 -v -0.192 0 -0.46 -v -0.192 0.025 -0.462 -v -0.192 0 -0.462 -v -0.192 0.025 -0.465 -v -0.192 0 -0.465 -v -0.195 0.025 -0.466 -v -0.195 0 -0.466 -v -0.197 0.025 -0.465 -v -0.197 0 -0.465 -v -0.167 0.031 -0.49 -v -0.222 0.074 -0.49 -v -0.222 0.074 -0.435 -v -0.167 0.074 -0.435 -v -0.222 0.031 -0.49 -v -0.222 0.031 -0.435 -v -0.167 0.031 -0.435 -v -0.167 0.08 -0.49 -v -0.167 0.08 -0.435 -v -0.167 0.074 -0.49 -v -0.195 -0.004 -0.455 -v -0.195 -0.004 -0.453 -v -0.195 0.004 -0.455 -v -0.195 0.004 -0.453 -v 0.224 -0.004 -0.455 -v 0.224 -0.004 -0.453 -v 0.224 0.004 -0.455 -v 0.224 0.004 -0.453 -v -0.195 -0.004 -0.472 -v -0.195 -0.004 -0.47 -v -0.195 0.004 -0.472 -v -0.195 0.004 -0.47 -v 0.224 -0.004 -0.472 -v 0.224 -0.004 -0.47 -v 0.224 0.004 -0.472 -v 0.224 0.004 -0.47 -v -0.207 0.008 -0.462 -v -0.207 -0.011 -0.462 -v -0.206 0.008 -0.458 -v -0.206 -0.011 -0.458 -v -0.203 0.008 -0.454 -v -0.203 -0.011 -0.454 -v -0.199 0.008 -0.451 -v -0.199 -0.011 -0.451 -v -0.195 0.008 -0.451 -v -0.195 -0.011 -0.451 -v -0.19 0.008 -0.451 -v -0.19 -0.011 -0.451 -v -0.186 0.008 -0.454 -v -0.186 -0.011 -0.454 -v -0.184 0.008 -0.458 -v -0.184 -0.011 -0.458 -v -0.183 0.008 -0.462 -v -0.183 -0.011 -0.462 -v -0.184 0.008 -0.467 -v -0.184 -0.011 -0.467 -v -0.186 0.008 -0.471 -v -0.186 -0.011 -0.471 -v -0.19 0.008 -0.473 -v -0.19 -0.011 -0.473 -v -0.195 0.008 -0.474 -v -0.195 -0.011 -0.474 -v -0.199 0.008 -0.473 -v -0.199 -0.011 -0.473 -v -0.203 0.008 -0.471 -v -0.203 -0.011 -0.471 -v -0.206 0.008 -0.467 -v -0.206 -0.011 -0.467 -v -0.207 0.005 -0.462 -v -0.205 0.005 -0.462 -v -0.205 -0.005 -0.462 -v -0.207 -0.005 -0.462 -v -0.206 -0.005 -0.458 -v -0.204 -0.005 -0.459 -v -0.204 0.005 -0.459 -v -0.206 0.005 -0.458 -v -0.203 -0.005 -0.454 -v -0.202 -0.005 -0.455 -v -0.202 0.005 -0.455 -v -0.203 0.005 -0.454 -v -0.199 -0.005 -0.451 -v -0.199 -0.005 -0.453 -v -0.199 0.005 -0.453 -v -0.199 0.005 -0.451 -v -0.195 -0.005 -0.451 -v -0.195 -0.005 -0.452 -v -0.195 0.005 -0.452 -v -0.195 0.005 -0.451 -v -0.19 -0.005 -0.451 -v -0.191 -0.005 -0.453 -v -0.191 0.005 -0.453 -v -0.19 0.005 -0.451 -v -0.186 -0.005 -0.454 -v -0.188 -0.005 -0.455 -v -0.188 0.005 -0.455 -v -0.186 0.005 -0.454 -v -0.184 -0.005 -0.458 -v -0.185 -0.005 -0.459 -v -0.185 0.005 -0.459 -v -0.184 0.005 -0.458 -v -0.183 -0.005 -0.462 -v -0.185 -0.005 -0.462 -v -0.185 0.005 -0.462 -v -0.183 0.005 -0.462 -v -0.184 -0.005 -0.467 -v -0.185 -0.005 -0.466 -v -0.185 0.005 -0.466 -v -0.184 0.005 -0.467 -v -0.186 -0.005 -0.471 -v -0.188 -0.005 -0.47 -v -0.188 0.005 -0.47 -v -0.186 0.005 -0.471 -v -0.19 -0.005 -0.473 -v -0.191 -0.005 -0.472 -v -0.191 0.005 -0.472 -v -0.19 0.005 -0.473 -v -0.195 -0.005 -0.474 -v -0.195 -0.005 -0.473 -v -0.195 0.005 -0.473 -v -0.195 0.005 -0.474 -v -0.199 -0.005 -0.473 -v -0.199 -0.005 -0.472 -v -0.199 0.005 -0.472 -v -0.199 0.005 -0.473 -v -0.203 -0.005 -0.471 -v -0.202 -0.005 -0.47 -v -0.202 0.005 -0.47 -v -0.203 0.005 -0.471 -v -0.206 -0.005 -0.467 -v -0.204 -0.005 -0.466 -v -0.204 0.005 -0.466 -v -0.206 0.005 -0.467 -v 0.253 0.126 -0.462 -v 0.253 -0.136 -0.462 -v 0.253 0.126 -0.461 -v 0.253 -0.136 -0.461 -v 0.254 0.126 -0.459 -v 0.254 -0.136 -0.459 -v 0.256 0.126 -0.458 -v 0.256 -0.136 -0.458 -v 0.258 0.126 -0.457 -v 0.258 -0.136 -0.457 -v 0.26 0.126 -0.458 -v 0.26 -0.136 -0.458 -v 0.261 0.126 -0.459 -v 0.261 -0.136 -0.459 -v 0.262 0.126 -0.461 -v 0.262 -0.136 -0.461 -v 0.263 0.126 -0.462 -v 0.263 -0.136 -0.462 -v 0.262 0.126 -0.464 -v 0.262 -0.136 -0.464 -v 0.261 0.126 -0.466 -v 0.261 -0.136 -0.466 -v 0.26 0.126 -0.467 -v 0.26 -0.136 -0.467 -v 0.258 0.126 -0.467 -v 0.258 -0.136 -0.467 -v 0.256 0.126 -0.467 -v 0.256 -0.136 -0.467 -v 0.254 0.126 -0.466 -v 0.254 -0.136 -0.466 -v 0.253 0.126 -0.464 -v 0.253 -0.136 -0.464 -v -0.237 0.126 -0.487 -v -0.237 -0.136 -0.487 -v -0.237 0.126 -0.486 -v -0.237 -0.136 -0.486 -v -0.236 0.126 -0.484 -v -0.236 -0.136 -0.484 -v -0.234 0.126 -0.483 -v -0.234 -0.136 -0.483 -v -0.232 0.126 -0.482 -v -0.232 -0.136 -0.482 -v -0.23 0.126 -0.483 -v -0.23 -0.136 -0.483 -v -0.229 0.126 -0.484 -v -0.229 -0.136 -0.484 -v -0.228 0.126 -0.486 -v -0.228 -0.136 -0.486 -v -0.227 0.126 -0.487 -v -0.227 -0.136 -0.487 -v -0.228 0.126 -0.489 -v -0.228 -0.136 -0.489 -v -0.229 0.126 -0.491 -v -0.229 -0.136 -0.491 -v -0.23 0.126 -0.492 -v -0.23 -0.136 -0.492 -v -0.232 0.126 -0.492 -v -0.232 -0.136 -0.492 -v -0.234 0.126 -0.492 -v -0.234 -0.136 -0.492 -v -0.236 0.126 -0.491 -v -0.236 -0.136 -0.491 -v -0.237 0.126 -0.489 -v -0.237 -0.136 -0.489 -v 0.272 0.095 -0.5 -v 0.244 0.095 -0.5 -v 0.272 0.117 -0.5 -v 0.244 0.117 -0.5 -v 0.269 0.098 -0.441 -v 0.272 0.095 -0.444 -v 0.247 0.098 -0.441 -v 0.244 0.095 -0.444 -v 0.269 0.114 -0.441 -v 0.272 0.117 -0.444 -v 0.247 0.114 -0.441 -v 0.244 0.117 -0.444 -v -0.218 0.095 -0.5 -v -0.246 0.095 -0.5 -v -0.218 0.117 -0.5 -v -0.246 0.117 -0.5 -v -0.221 0.098 -0.441 -v -0.218 0.095 -0.444 -v -0.243 0.098 -0.441 -v -0.246 0.095 -0.444 -v -0.221 0.114 -0.441 -v -0.218 0.117 -0.444 -v -0.243 0.114 -0.441 -v -0.246 0.117 -0.444 -v -0.218 -0.117 -0.5 -v -0.246 -0.117 -0.5 -v -0.218 -0.095 -0.5 -v -0.246 -0.095 -0.5 -v -0.221 -0.114 -0.441 -v -0.218 -0.117 -0.444 -v -0.243 -0.114 -0.441 -v -0.246 -0.117 -0.444 -v -0.221 -0.098 -0.441 -v -0.218 -0.095 -0.444 -v -0.243 -0.098 -0.441 -v -0.246 -0.095 -0.444 -v 0.258 -0.117 -0.452 -v 0.258 -0.124 -0.452 -v 0.266 -0.117 -0.457 -v 0.266 -0.124 -0.457 -v 0.266 -0.117 -0.467 -v 0.266 -0.124 -0.467 -v 0.258 -0.117 -0.472 -v 0.258 -0.124 -0.472 -v 0.249 -0.117 -0.467 -v 0.249 -0.124 -0.467 -v 0.249 -0.117 -0.457 -v 0.249 -0.124 -0.457 -v 0.258 -0.095 -0.452 -v 0.258 -0.089 -0.452 -v 0.249 -0.095 -0.457 -v 0.249 -0.089 -0.457 -v 0.249 -0.095 -0.467 -v 0.249 -0.089 -0.467 -v 0.258 -0.095 -0.472 -v 0.258 -0.089 -0.472 -v 0.266 -0.095 -0.467 -v 0.266 -0.089 -0.467 -v 0.266 -0.095 -0.457 -v 0.266 -0.089 -0.457 -v 0.258 -0.095 -0.477 -v 0.258 -0.089 -0.477 -v 0.249 -0.095 -0.482 -v 0.249 -0.089 -0.482 -v 0.249 -0.095 -0.492 -v 0.249 -0.089 -0.492 -v 0.258 -0.095 -0.497 -v 0.258 -0.089 -0.497 -v 0.266 -0.095 -0.492 -v 0.266 -0.089 -0.492 -v 0.266 -0.095 -0.482 -v 0.266 -0.089 -0.482 -v 0.258 0.117 -0.477 -v 0.258 0.124 -0.477 -v 0.249 0.117 -0.482 -v 0.249 0.124 -0.482 -v 0.249 0.117 -0.492 -v 0.249 0.124 -0.492 -v 0.258 0.117 -0.497 -v 0.258 0.124 -0.497 -v 0.266 0.117 -0.492 -v 0.266 0.124 -0.492 -v 0.266 0.117 -0.482 -v 0.266 0.124 -0.482 -v 0.258 0.117 -0.452 -v 0.258 0.124 -0.452 -v 0.249 0.117 -0.457 -v 0.249 0.124 -0.457 -v 0.249 0.117 -0.467 -v 0.249 0.124 -0.467 -v 0.258 0.117 -0.472 -v 0.258 0.124 -0.472 -v 0.266 0.117 -0.467 -v 0.266 0.124 -0.467 -v 0.266 0.117 -0.457 -v 0.266 0.124 -0.457 -v 0.258 0.095 -0.452 -v 0.258 0.089 -0.452 -v 0.266 0.095 -0.457 -v 0.266 0.089 -0.457 -v 0.266 0.095 -0.467 -v 0.266 0.089 -0.467 -v 0.258 0.095 -0.472 -v 0.258 0.089 -0.472 -v 0.249 0.095 -0.467 -v 0.249 0.089 -0.467 -v 0.249 0.095 -0.457 -v 0.249 0.089 -0.457 -v 0.258 0.095 -0.477 -v 0.258 0.089 -0.477 -v 0.266 0.095 -0.482 -v 0.266 0.089 -0.482 -v 0.266 0.095 -0.492 -v 0.266 0.089 -0.492 -v 0.258 0.095 -0.497 -v 0.258 0.089 -0.497 -v 0.249 0.095 -0.492 -v 0.249 0.089 -0.492 -v 0.249 0.095 -0.482 -v 0.249 0.089 -0.482 -v -0.232 0.095 -0.477 -v -0.232 0.089 -0.477 -v -0.224 0.095 -0.482 -v -0.224 0.089 -0.482 -v -0.224 0.095 -0.492 -v -0.224 0.089 -0.492 -v -0.232 0.095 -0.497 -v -0.232 0.089 -0.497 -v -0.241 0.095 -0.492 -v -0.241 0.089 -0.492 -v -0.241 0.095 -0.482 -v -0.241 0.089 -0.482 -v -0.232 0.095 -0.452 -v -0.232 0.089 -0.452 -v -0.224 0.095 -0.457 -v -0.224 0.089 -0.457 -v -0.224 0.095 -0.467 -v -0.224 0.089 -0.467 -v -0.232 0.095 -0.472 -v -0.232 0.089 -0.472 -v -0.241 0.095 -0.467 -v -0.241 0.089 -0.467 -v -0.241 0.095 -0.457 -v -0.241 0.089 -0.457 -v -0.232 0.117 -0.452 -v -0.232 0.124 -0.452 -v -0.241 0.117 -0.457 -v -0.241 0.124 -0.457 -v -0.241 0.117 -0.467 -v -0.241 0.124 -0.467 -v -0.232 0.117 -0.472 -v -0.232 0.124 -0.472 -v -0.224 0.117 -0.467 -v -0.224 0.124 -0.467 -v -0.224 0.117 -0.457 -v -0.224 0.124 -0.457 -v -0.232 0.117 -0.477 -v -0.232 0.124 -0.477 -v -0.241 0.117 -0.482 -v -0.241 0.124 -0.482 -v -0.241 0.117 -0.492 -v -0.241 0.124 -0.492 -v -0.232 0.117 -0.497 -v -0.232 0.124 -0.497 -v -0.224 0.117 -0.492 -v -0.224 0.124 -0.492 -v -0.224 0.117 -0.482 -v -0.224 0.124 -0.482 -v -0.232 -0.095 -0.477 -v -0.232 -0.089 -0.477 -v -0.241 -0.095 -0.482 -v -0.241 -0.089 -0.482 -v -0.241 -0.095 -0.492 -v -0.241 -0.089 -0.492 -v -0.232 -0.095 -0.497 -v -0.232 -0.089 -0.497 -v -0.224 -0.095 -0.492 -v -0.224 -0.089 -0.492 -v -0.224 -0.095 -0.482 -v -0.224 -0.089 -0.482 -v -0.232 -0.095 -0.452 -v -0.232 -0.089 -0.452 -v -0.241 -0.095 -0.457 -v -0.241 -0.089 -0.457 -v -0.241 -0.095 -0.467 -v -0.241 -0.089 -0.467 -v -0.232 -0.095 -0.472 -v -0.232 -0.089 -0.472 -v -0.224 -0.095 -0.467 -v -0.224 -0.089 -0.467 -v -0.224 -0.095 -0.457 -v -0.224 -0.089 -0.457 -v -0.232 -0.117 -0.452 -v -0.232 -0.124 -0.452 -v -0.224 -0.117 -0.457 -v -0.224 -0.124 -0.457 -v -0.224 -0.117 -0.467 -v -0.224 -0.124 -0.467 -v -0.232 -0.117 -0.472 -v -0.232 -0.124 -0.472 -v -0.241 -0.117 -0.467 -v -0.241 -0.124 -0.467 -v -0.241 -0.117 -0.457 -v -0.241 -0.124 -0.457 -v 0.258 -0.117 -0.477 -v 0.258 -0.124 -0.477 -v 0.266 -0.117 -0.482 -v 0.266 -0.124 -0.482 -v 0.266 -0.117 -0.492 -v 0.266 -0.124 -0.492 -v 0.258 -0.117 -0.497 -v 0.258 -0.124 -0.497 -v 0.249 -0.117 -0.492 -v 0.249 -0.124 -0.492 -v 0.249 -0.117 -0.482 -v 0.249 -0.124 -0.482 -v -0.232 -0.117 -0.477 -v -0.232 -0.124 -0.477 -v -0.224 -0.117 -0.482 -v -0.224 -0.124 -0.482 -v -0.224 -0.117 -0.492 -v -0.224 -0.124 -0.492 -v -0.232 -0.117 -0.497 -v -0.232 -0.124 -0.497 -v -0.241 -0.117 -0.492 -v -0.241 -0.124 -0.492 -v -0.241 -0.117 -0.482 -v -0.241 -0.124 -0.482 -v -0.246 -0.106 -0.465 -v -0.252 -0.106 -0.465 -v -0.246 -0.115 -0.47 -v -0.252 -0.115 -0.47 -v -0.246 -0.115 -0.48 -v -0.252 -0.115 -0.48 -v -0.246 -0.106 -0.485 -v -0.252 -0.106 -0.485 -v -0.246 -0.098 -0.48 -v -0.252 -0.098 -0.48 -v -0.246 -0.098 -0.47 -v -0.252 -0.098 -0.47 -v -0.246 0.106 -0.465 -v -0.252 0.106 -0.465 -v -0.246 0.098 -0.47 -v -0.252 0.098 -0.47 -v -0.246 0.098 -0.48 -v -0.252 0.098 -0.48 -v -0.246 0.106 -0.485 -v -0.252 0.106 -0.485 -v -0.246 0.115 -0.48 -v -0.252 0.115 -0.48 -v -0.246 0.115 -0.47 -v -0.252 0.115 -0.47 -v -0.218 0.106 -0.465 -v -0.212 0.106 -0.465 -v -0.218 0.115 -0.47 -v -0.212 0.115 -0.47 -v -0.218 0.115 -0.48 -v -0.212 0.115 -0.48 -v -0.218 0.106 -0.485 -v -0.212 0.106 -0.485 -v -0.218 0.098 -0.48 -v -0.212 0.098 -0.48 -v -0.218 0.098 -0.47 -v -0.212 0.098 -0.47 -v -0.218 -0.106 -0.465 -v -0.212 -0.106 -0.465 -v -0.218 -0.098 -0.47 -v -0.212 -0.098 -0.47 -v -0.218 -0.098 -0.48 -v -0.212 -0.098 -0.48 -v -0.218 -0.106 -0.485 -v -0.212 -0.106 -0.485 -v -0.218 -0.115 -0.48 -v -0.212 -0.115 -0.48 -v -0.218 -0.115 -0.47 -v -0.212 -0.115 -0.47 -v -0.129 0.106 -0.465 -v -0.135 0.106 -0.465 -v -0.129 0.098 -0.47 -v -0.135 0.098 -0.47 -v -0.129 0.098 -0.48 -v -0.135 0.098 -0.48 -v -0.129 0.106 -0.485 -v -0.135 0.106 -0.485 -v -0.129 0.115 -0.48 -v -0.135 0.115 -0.48 -v -0.135 0.115 -0.47 -v -0.129 0.115 -0.47 -v -0.143 0.106 -0.465 -v -0.149 0.106 -0.465 -v -0.143 0.098 -0.47 -v -0.149 0.098 -0.47 -v -0.143 0.098 -0.48 -v -0.149 0.098 -0.48 -v -0.143 0.106 -0.485 -v -0.149 0.106 -0.485 -v -0.143 0.115 -0.48 -v -0.149 0.115 -0.48 -v -0.149 0.115 -0.47 -v -0.143 0.115 -0.47 -v -0.143 -0.106 -0.465 -v -0.149 -0.106 -0.465 -v -0.143 -0.115 -0.47 -v -0.149 -0.115 -0.47 -v -0.143 -0.115 -0.48 -v -0.149 -0.115 -0.48 -v -0.143 -0.106 -0.485 -v -0.149 -0.106 -0.485 -v -0.143 -0.098 -0.48 -v -0.149 -0.098 -0.48 -v -0.149 -0.098 -0.47 -v -0.143 -0.098 -0.47 -v -0.232 -0.174 -0.452 -v -0.232 -0.18 -0.452 -v -0.224 -0.174 -0.457 -v -0.224 -0.18 -0.457 -v -0.224 -0.174 -0.467 -v -0.224 -0.18 -0.467 -v -0.232 -0.174 -0.472 -v -0.232 -0.18 -0.472 -v -0.241 -0.174 -0.467 -v -0.241 -0.18 -0.467 -v -0.241 -0.18 -0.457 -v -0.241 -0.174 -0.457 -v 0.244 -0.106 -0.465 -v 0.238 -0.106 -0.465 -v 0.244 -0.115 -0.47 -v 0.238 -0.115 -0.47 -v 0.244 -0.115 -0.48 -v 0.238 -0.115 -0.48 -v 0.244 -0.106 -0.485 -v 0.238 -0.106 -0.485 -v 0.244 -0.098 -0.48 -v 0.238 -0.098 -0.48 -v 0.244 -0.098 -0.47 -v 0.238 -0.098 -0.47 -v 0.244 0.106 -0.465 -v 0.238 0.106 -0.465 -v 0.244 0.098 -0.47 -v 0.238 0.098 -0.47 -v 0.244 0.098 -0.48 -v 0.238 0.098 -0.48 -v 0.244 0.106 -0.485 -v 0.238 0.106 -0.485 -v 0.244 0.115 -0.48 -v 0.238 0.115 -0.48 -v 0.244 0.115 -0.47 -v 0.238 0.115 -0.47 -v 0.272 0.106 -0.465 -v 0.278 0.106 -0.465 -v 0.272 0.115 -0.47 -v 0.278 0.115 -0.47 -v 0.272 0.115 -0.48 -v 0.278 0.115 -0.48 -v 0.272 0.106 -0.485 -v 0.278 0.106 -0.485 -v 0.272 0.098 -0.48 -v 0.278 0.098 -0.48 -v 0.272 0.098 -0.47 -v 0.278 0.098 -0.47 -v 0.272 -0.106 -0.465 -v 0.278 -0.106 -0.465 -v 0.272 -0.098 -0.47 -v 0.278 -0.098 -0.47 -v 0.272 -0.098 -0.48 -v 0.278 -0.098 -0.48 -v 0.272 -0.106 -0.485 -v 0.278 -0.106 -0.485 -v 0.272 -0.115 -0.48 -v 0.278 -0.115 -0.48 -v 0.272 -0.115 -0.47 -v 0.278 -0.115 -0.47 -v -0.232 -0.16 -0.452 -v -0.232 -0.166 -0.452 -v -0.224 -0.16 -0.457 -v -0.224 -0.166 -0.457 -v -0.224 -0.16 -0.467 -v -0.224 -0.166 -0.467 -v -0.232 -0.16 -0.472 -v -0.232 -0.166 -0.472 -v -0.241 -0.16 -0.467 -v -0.241 -0.166 -0.467 -v -0.241 -0.166 -0.457 -v -0.241 -0.16 -0.457 -v -0.232 0.18 -0.452 -v -0.232 0.173 -0.452 -v -0.224 0.18 -0.457 -v -0.224 0.173 -0.457 -v -0.224 0.18 -0.467 -v -0.224 0.173 -0.467 -v -0.232 0.18 -0.472 -v -0.232 0.173 -0.472 -v -0.241 0.18 -0.467 -v -0.241 0.173 -0.467 -v -0.241 0.173 -0.457 -v -0.241 0.18 -0.457 -v -0.232 0.166 -0.452 -v -0.232 0.16 -0.452 -v -0.224 0.166 -0.457 -v -0.224 0.16 -0.457 -v -0.224 0.166 -0.467 -v -0.224 0.16 -0.467 -v -0.232 0.166 -0.472 -v -0.232 0.16 -0.472 -v -0.241 0.166 -0.467 -v -0.241 0.16 -0.467 -v -0.241 0.16 -0.457 -v -0.241 0.166 -0.457 -v 0.212 -0.011 -0.449 -v 0.212 -0.011 -0.476 -v 0.212 0.011 -0.449 -v 0.212 0.011 -0.476 -v 0.27 -0.011 -0.46 -v 0.259 -0.011 -0.449 -v 0.269 -0.011 -0.454 -v 0.265 -0.011 -0.45 -v 0.259 -0.011 -0.476 -v 0.27 -0.011 -0.465 -v 0.265 -0.011 -0.475 -v 0.269 -0.011 -0.471 -v 0.259 0.011 -0.449 -v 0.27 0.011 -0.46 -v 0.265 0.011 -0.45 -v 0.269 0.011 -0.454 -v 0.27 0.011 -0.465 -v 0.259 0.011 -0.476 -v 0.269 0.011 -0.471 -v 0.265 0.011 -0.475 -v -0.129 -0.106 -0.465 -v -0.135 -0.106 -0.465 -v -0.129 -0.115 -0.47 -v -0.135 -0.115 -0.47 -v -0.129 -0.115 -0.48 -v -0.135 -0.115 -0.48 -v -0.129 -0.106 -0.485 -v -0.135 -0.106 -0.485 -v -0.129 -0.098 -0.48 -v -0.135 -0.098 -0.48 -v -0.135 -0.098 -0.47 -v -0.129 -0.098 -0.47 -v -0.281 -0.111 -0.475 -v 0.282 -0.111 -0.475 -v -0.281 -0.111 -0.473 -v 0.282 -0.111 -0.473 -v -0.281 -0.11 -0.471 -v 0.282 -0.11 -0.471 -v -0.281 -0.108 -0.47 -v 0.282 -0.108 -0.47 -v -0.281 -0.106 -0.47 -v 0.282 -0.106 -0.47 -v -0.281 -0.104 -0.47 -v 0.282 -0.104 -0.47 -v -0.281 -0.103 -0.471 -v 0.282 -0.103 -0.471 -v -0.281 -0.102 -0.473 -v 0.282 -0.102 -0.473 -v -0.281 -0.101 -0.475 -v 0.282 -0.101 -0.475 -v -0.281 -0.102 -0.477 -v 0.282 -0.102 -0.477 -v -0.281 -0.103 -0.479 -v 0.282 -0.103 -0.479 -v -0.281 -0.104 -0.48 -v 0.282 -0.104 -0.48 -v -0.281 -0.106 -0.48 -v 0.282 -0.106 -0.48 -v -0.281 -0.108 -0.48 -v 0.282 -0.108 -0.48 -v -0.281 -0.11 -0.479 -v 0.282 -0.11 -0.479 -v -0.281 -0.111 -0.477 -v 0.282 -0.111 -0.477 -v -0.281 0.101 -0.475 -v 0.282 0.101 -0.475 -v -0.281 0.102 -0.473 -v 0.282 0.102 -0.473 -v -0.281 0.103 -0.471 -v 0.282 0.103 -0.471 -v -0.281 0.104 -0.47 -v 0.282 0.104 -0.47 -v -0.281 0.106 -0.47 -v 0.282 0.106 -0.47 -v -0.281 0.108 -0.47 -v 0.282 0.108 -0.47 -v -0.281 0.11 -0.471 -v 0.282 0.11 -0.471 -v -0.281 0.111 -0.473 -v 0.282 0.111 -0.473 -v -0.281 0.111 -0.475 -v 0.282 0.111 -0.475 -v -0.281 0.111 -0.477 -v 0.282 0.111 -0.477 -v -0.281 0.11 -0.479 -v 0.282 0.11 -0.479 -v -0.281 0.108 -0.48 -v 0.282 0.108 -0.48 -v -0.281 0.106 -0.48 -v 0.282 0.106 -0.48 -v -0.281 0.104 -0.48 -v 0.282 0.104 -0.48 -v -0.281 0.103 -0.479 -v 0.282 0.103 -0.479 -v -0.281 0.102 -0.477 -v 0.282 0.102 -0.477 -v -0.071 -0.236 -0.437 -v -0.126 -0.236 -0.492 -v -0.126 -0.236 -0.437 -v -0.071 -0.181 -0.437 -v -0.126 -0.181 -0.492 -v -0.126 -0.181 -0.437 -v -0.102 -0.209 -0.437 -v -0.102 -0.209 -0.412 -v -0.101 -0.207 -0.437 -v -0.101 -0.207 -0.412 -v -0.099 -0.206 -0.437 -v -0.099 -0.206 -0.412 -v -0.097 -0.207 -0.437 -v -0.097 -0.207 -0.412 -v -0.096 -0.209 -0.437 -v -0.096 -0.209 -0.412 -v -0.097 -0.211 -0.437 -v -0.097 -0.211 -0.412 -v -0.099 -0.212 -0.437 -v -0.099 -0.212 -0.412 -v -0.101 -0.211 -0.437 -v -0.101 -0.211 -0.412 -v -0.071 -0.236 -0.444 -v -0.126 -0.236 -0.486 -v -0.126 -0.181 -0.486 -v -0.071 -0.181 -0.486 -v -0.126 -0.236 -0.444 -v -0.126 -0.181 -0.444 -v -0.071 -0.181 -0.444 -v -0.071 -0.236 -0.492 -v -0.071 -0.181 -0.492 -v -0.071 -0.236 -0.486 -v -0.101 -0.204 -0.031 -v -0.101 -0.204 -0.406 -v -0.102 -0.205 -0.031 -v -0.102 -0.205 -0.406 -v -0.103 -0.207 -0.031 -v -0.103 -0.207 -0.406 -v -0.104 -0.209 -0.031 -v -0.104 -0.209 -0.406 -v -0.103 -0.211 -0.031 -v -0.103 -0.211 -0.406 -v -0.102 -0.212 -0.031 -v -0.102 -0.212 -0.406 -v -0.101 -0.213 -0.031 -v -0.101 -0.213 -0.406 -v -0.099 -0.214 -0.031 -v -0.099 -0.214 -0.406 -v -0.097 -0.213 -0.031 -v -0.097 -0.213 -0.406 -v -0.095 -0.212 -0.031 -v -0.095 -0.212 -0.406 -v -0.094 -0.211 -0.031 -v -0.094 -0.211 -0.406 -v -0.094 -0.209 -0.031 -v -0.094 -0.209 -0.406 -v -0.094 -0.207 -0.031 -v -0.094 -0.207 -0.406 -v -0.095 -0.205 -0.031 -v -0.095 -0.205 -0.406 -v -0.097 -0.204 -0.031 -v -0.097 -0.204 -0.406 -v -0.099 -0.204 -0.031 -v -0.099 -0.204 -0.406 -v -0.109 -0.209 -0.419 -v -0.109 -0.209 -0.394 -v -0.108 -0.205 -0.419 -v -0.108 -0.205 -0.394 -v -0.106 -0.202 -0.419 -v -0.106 -0.202 -0.394 -v -0.103 -0.2 -0.419 -v -0.103 -0.2 -0.394 -v -0.099 -0.199 -0.419 -v -0.099 -0.199 -0.394 -v -0.095 -0.2 -0.419 -v -0.095 -0.2 -0.394 -v -0.092 -0.202 -0.419 -v -0.092 -0.202 -0.394 -v -0.09 -0.205 -0.419 -v -0.09 -0.205 -0.394 -v -0.089 -0.209 -0.419 -v -0.089 -0.209 -0.394 -v -0.09 -0.213 -0.419 -v -0.09 -0.213 -0.394 -v -0.092 -0.216 -0.419 -v -0.092 -0.216 -0.394 -v -0.095 -0.218 -0.419 -v -0.095 -0.218 -0.394 -v -0.099 -0.219 -0.419 -v -0.099 -0.219 -0.394 -v -0.103 -0.218 -0.419 -v -0.103 -0.218 -0.394 -v -0.106 -0.216 -0.419 -v -0.106 -0.216 -0.394 -v -0.108 -0.213 -0.419 -v -0.108 -0.213 -0.394 -v -0.061 0.244 -0.263 -v -0.006 0.244 -0.318 -v -0.061 0.244 -0.318 -v -0.061 0.299 -0.263 -v -0.006 0.299 -0.318 -v -0.061 0.299 -0.318 -v -0.061 0.271 -0.294 -v -0.086 0.271 -0.294 -v -0.061 0.273 -0.293 -v -0.086 0.273 -0.293 -v -0.061 0.274 -0.291 -v -0.086 0.274 -0.291 -v -0.061 0.273 -0.288 -v -0.086 0.273 -0.288 -v -0.061 0.271 -0.287 -v -0.086 0.271 -0.287 -v -0.061 0.269 -0.288 -v -0.086 0.269 -0.288 -v -0.061 0.268 -0.291 -v -0.086 0.268 -0.291 -v -0.061 0.269 -0.293 -v -0.086 0.269 -0.293 -v -0.055 0.244 -0.263 -v -0.012 0.244 -0.318 -v -0.012 0.299 -0.318 -v -0.012 0.299 -0.263 -v -0.055 0.244 -0.318 -v -0.055 0.299 -0.318 -v -0.055 0.299 -0.263 -v -0.006 0.244 -0.263 -v -0.006 0.299 -0.263 -v -0.012 0.244 -0.263 -v -0.068 0.283 -0.291 -v -0.087 0.283 -0.291 -v -0.068 0.282 -0.286 -v -0.087 0.282 -0.286 -v -0.068 0.28 -0.282 -v -0.087 0.28 -0.282 -v -0.068 0.276 -0.28 -v -0.087 0.276 -0.28 -v -0.068 0.271 -0.279 -v -0.087 0.271 -0.279 -v -0.068 0.267 -0.28 -v -0.087 0.267 -0.28 -v -0.068 0.263 -0.282 -v -0.087 0.263 -0.282 -v -0.068 0.26 -0.286 -v -0.087 0.26 -0.286 -v -0.068 0.259 -0.291 -v -0.087 0.259 -0.291 -v -0.068 0.26 -0.295 -v -0.087 0.26 -0.295 -v -0.068 0.263 -0.299 -v -0.087 0.263 -0.299 -v -0.068 0.267 -0.302 -v -0.087 0.267 -0.302 -v -0.068 0.271 -0.303 -v -0.087 0.271 -0.303 -v -0.068 0.276 -0.302 -v -0.087 0.276 -0.302 -v -0.068 0.28 -0.299 -v -0.087 0.28 -0.299 -v -0.068 0.282 -0.295 -v -0.087 0.282 -0.295 -v -0.071 0.283 -0.291 -v -0.071 0.281 -0.291 -v -0.082 0.281 -0.291 -v -0.082 0.283 -0.291 -v -0.082 0.282 -0.286 -v -0.082 0.281 -0.287 -v -0.071 0.281 -0.287 -v -0.071 0.282 -0.286 -v -0.082 0.28 -0.282 -v -0.082 0.278 -0.283 -v -0.071 0.278 -0.283 -v -0.071 0.28 -0.282 -v -0.082 0.276 -0.28 -v -0.082 0.275 -0.281 -v -0.071 0.275 -0.281 -v -0.071 0.276 -0.28 -v -0.082 0.271 -0.279 -v -0.082 0.271 -0.28 -v -0.071 0.271 -0.28 -v -0.071 0.271 -0.279 -v -0.082 0.267 -0.28 -v -0.082 0.267 -0.281 -v -0.071 0.267 -0.281 -v -0.071 0.267 -0.28 -v -0.082 0.263 -0.282 -v -0.082 0.264 -0.283 -v -0.071 0.264 -0.283 -v -0.071 0.263 -0.282 -v -0.082 0.26 -0.286 -v -0.082 0.262 -0.287 -v -0.071 0.262 -0.287 -v -0.071 0.26 -0.286 -v -0.082 0.259 -0.291 -v -0.082 0.261 -0.291 -v -0.071 0.261 -0.291 -v -0.071 0.259 -0.291 -v -0.082 0.26 -0.295 -v -0.082 0.262 -0.294 -v -0.071 0.262 -0.294 -v -0.071 0.26 -0.295 -v -0.082 0.263 -0.299 -v -0.082 0.264 -0.298 -v -0.071 0.264 -0.298 -v -0.071 0.263 -0.299 -v -0.082 0.267 -0.302 -v -0.082 0.267 -0.3 -v -0.071 0.267 -0.3 -v -0.071 0.267 -0.302 -v -0.082 0.271 -0.303 -v -0.082 0.271 -0.301 -v -0.071 0.271 -0.301 -v -0.071 0.271 -0.303 -v -0.082 0.276 -0.302 -v -0.082 0.275 -0.3 -v -0.071 0.275 -0.3 -v -0.071 0.276 -0.302 -v -0.082 0.28 -0.299 -v -0.082 0.278 -0.298 -v -0.071 0.278 -0.298 -v -0.071 0.28 -0.299 -v -0.082 0.282 -0.295 -v -0.082 0.281 -0.294 -v -0.071 0.281 -0.294 -v -0.071 0.282 -0.295 -v -0.071 0.174 -0.437 -v -0.126 0.174 -0.492 -v -0.126 0.174 -0.437 -v -0.071 0.229 -0.437 -v -0.126 0.229 -0.492 -v -0.126 0.229 -0.437 -v -0.102 0.201 -0.437 -v -0.102 0.201 -0.412 -v -0.101 0.203 -0.437 -v -0.101 0.203 -0.412 -v -0.099 0.204 -0.437 -v -0.099 0.204 -0.412 -v -0.097 0.203 -0.437 -v -0.097 0.203 -0.412 -v -0.096 0.201 -0.437 -v -0.096 0.201 -0.412 -v -0.097 0.199 -0.437 -v -0.097 0.199 -0.412 -v -0.099 0.198 -0.437 -v -0.099 0.198 -0.412 -v -0.101 0.199 -0.437 -v -0.101 0.199 -0.412 -v -0.071 0.174 -0.444 -v -0.126 0.174 -0.486 -v -0.126 0.229 -0.486 -v -0.071 0.229 -0.486 -v -0.126 0.174 -0.444 -v -0.126 0.229 -0.444 -v -0.071 0.229 -0.444 -v -0.071 0.174 -0.492 -v -0.071 0.229 -0.492 -v -0.071 0.174 -0.486 -v -0.101 0.206 -0.031 -v -0.101 0.206 -0.406 -v -0.102 0.205 -0.031 -v -0.102 0.205 -0.406 -v -0.103 0.203 -0.031 -v -0.103 0.203 -0.406 -v -0.104 0.201 -0.031 -v -0.104 0.201 -0.406 -v -0.103 0.199 -0.031 -v -0.103 0.199 -0.406 -v -0.102 0.198 -0.031 -v -0.102 0.198 -0.406 -v -0.101 0.197 -0.031 -v -0.101 0.197 -0.406 -v -0.099 0.196 -0.031 -v -0.099 0.196 -0.406 -v -0.097 0.197 -0.031 -v -0.097 0.197 -0.406 -v -0.095 0.198 -0.031 -v -0.095 0.198 -0.406 -v -0.094 0.199 -0.031 -v -0.094 0.199 -0.406 -v -0.094 0.201 -0.031 -v -0.094 0.201 -0.406 -v -0.094 0.203 -0.031 -v -0.094 0.203 -0.406 -v -0.095 0.205 -0.031 -v -0.095 0.205 -0.406 -v -0.097 0.206 -0.031 -v -0.097 0.206 -0.406 -v -0.099 0.206 -0.031 -v -0.099 0.206 -0.406 -v -0.109 0.201 -0.419 -v -0.109 0.201 -0.394 -v -0.108 0.205 -0.419 -v -0.108 0.205 -0.394 -v -0.106 0.208 -0.419 -v -0.106 0.208 -0.394 -v -0.103 0.21 -0.419 -v -0.103 0.21 -0.394 -v -0.099 0.211 -0.419 -v -0.099 0.211 -0.394 -v -0.095 0.21 -0.419 -v -0.095 0.21 -0.394 -v -0.092 0.208 -0.419 -v -0.092 0.208 -0.394 -v -0.09 0.205 -0.419 -v -0.09 0.205 -0.394 -v -0.089 0.201 -0.419 -v -0.089 0.201 -0.394 -v -0.09 0.197 -0.419 -v -0.09 0.197 -0.394 -v -0.092 0.194 -0.419 -v -0.092 0.194 -0.394 -v -0.095 0.192 -0.419 -v -0.095 0.192 -0.394 -v -0.099 0.191 -0.419 -v -0.099 0.191 -0.394 -v -0.103 0.192 -0.419 -v -0.103 0.192 -0.394 -v -0.106 0.194 -0.419 -v -0.106 0.194 -0.394 -v -0.108 0.197 -0.419 -v -0.108 0.197 -0.394 -vt 0.984 0.656 -vt 0.984 0.719 -vt 0.953 0.719 -vt 0.953 0.656 -vt 0.922 0.656 -vt 0.922 0.719 -vt 0.891 0.719 -vt 0.891 0.656 -vt 0.859 0.719 -vt 0.859 0.656 -vt 0.891 0.656 -vt 0.922 0.719 -vt 0.922 0.656 -vt 0.953 0.719 -vt 0.966 0.594 -vt 0.966 0.656 -vt 0.913 0.656 -vt 0.913 0.594 -vt 0.859 0.656 -vt 0.859 0.594 -vt 0.913 0.594 -vt 0.913 0.656 -vt 0.479 0.253 -vt 0.479 0.313 -vt 0.458 0.313 -vt 0.458 0.253 -vt 0.338 0.337 -vt 0.338 0.375 -vt 0.313 0.375 -vt 0.313 0.337 -vt 0.313 0.275 -vt 0.313 0.313 -vt 0.338 0.313 -vt 0.338 0.275 -vt 0.458 0.253 -vt 0.458 0.268 -vt 0.438 0.268 -vt 0.438 0.253 -vt 0.338 0.237 -vt 0.371 0.237 -vt 0.371 0.224 -vt 0.313 0.224 -vt 0.313 0.25 -vt 0.338 0.25 -vt 0.375 0.347 -vt 0.408 0.347 -vt 0.408 0.361 -vt 0.403 0.361 -vt 0.403 0.375 -vt 0.375 0.375 -vt 0.338 0.275 -vt 0.338 0.313 -vt 0.342 0.313 -vt 0.342 0.284 -vt 0.371 0.284 -vt 0.371 0.275 -vt 0.313 0.275 -vt 0.371 0.275 -vt 0.371 0.284 -vt 0.342 0.284 -vt 0.342 0.313 -vt 0.313 0.313 -vt 0.438 0.268 -vt 0.458 0.268 -vt 0.458 0.313 -vt 0.438 0.313 -vt 0.408 0.361 -vt 0.408 0.347 -vt 0.439 0.347 -vt 0.439 0.361 -vt 0.452 0.337 -vt 0.452 0.375 -vt 0.426 0.375 -vt 0.426 0.337 -vt 0.375 0.337 -vt 0.375 0.375 -vt 0.401 0.375 -vt 0.401 0.337 -vt 0.426 0.337 -vt 0.426 0.375 -vt 0.452 0.375 -vt 0.452 0.337 -vt 0.401 0.337 -vt 0.401 0.375 -vt 0.375 0.375 -vt 0.375 0.337 -vt 0.426 0.314 -vt 0.426 0.34 -vt 0.452 0.34 -vt 0.452 0.314 -vt 0.426 0.34 -vt 0.426 0.314 -vt 0.452 0.314 -vt 0.452 0.34 -vt 0.438 0.343 -vt 0.438 0.375 -vt 0.448 0.375 -vt 0.448 0.343 -vt 0.464 0.343 -vt 0.464 0.375 -vt 0.497 0.375 -vt 0.497 0.343 -vt 0.448 0.343 -vt 0.448 0.375 -vt 0.438 0.375 -vt 0.438 0.343 -vt 0.497 0.343 -vt 0.497 0.375 -vt 0.464 0.375 -vt 0.464 0.343 -vt 0.464 0.342 -vt 0.497 0.342 -vt 0.497 0.331 -vt 0.464 0.331 -vt 0.497 0.342 -vt 0.464 0.342 -vt 0.464 0.331 -vt 0.497 0.331 -vt 0.438 0.313 -vt 0.448 0.313 -vt 0.448 0.289 -vt 0.438 0.289 -vt 0.495 0.24 -vt 0.519 0.24 -vt 0.519 0.229 -vt 0.495 0.229 -vt 0.519 0.289 -vt 0.519 0.313 -vt 0.495 0.313 -vt 0.495 0.289 -vt 0.495 0.229 -vt 0.519 0.229 -vt 0.519 0.24 -vt 0.495 0.24 -vt 0.448 0.313 -vt 0.438 0.313 -vt 0.438 0.289 -vt 0.448 0.289 -vt 0.141 0.953 -vt 0.141 0.969 -vt 0.078 0.969 -vt 0.078 0.953 -vt 0.016 0.969 -vt 0.016 0.953 -vt 0.266 0.953 -vt 0.266 0.969 -vt 0.203 0.969 -vt 0.203 0.953 -vt 0.203 0.875 -vt 0.203 0.891 -vt 0.141 0.891 -vt 0.141 0.875 -vt 0.266 0.875 -vt 0.266 0.891 -vt 0.078 0.875 -vt 0.078 0.891 -vt 0.016 0.891 -vt 0.016 0.875 -vt 0.172 0.547 -vt 0.172 0.625 -vt 0.094 0.625 -vt 0.094 0.547 -vt 0.094 0.625 -vt 0.094 0.703 -vt 0.016 0.703 -vt 0.016 0.625 -vt 0.172 0.625 -vt 0.172 0.703 -vt 0.016 0.625 -vt 0.016 0.547 -vt 0.547 0.297 -vt 0.547 0.313 -vt 0.297 0.313 -vt 0.297 0.297 -vt 0.297 0.344 -vt 0.297 0.328 -vt 0.547 0.328 -vt 0.547 0.344 -vt 0.547 0.359 -vt 0.297 0.359 -vt 0.547 0.297 -vt 0.547 0.313 -vt 0.297 0.313 -vt 0.297 0.297 -vt 0.297 0.344 -vt 0.297 0.328 -vt 0.547 0.328 -vt 0.547 0.344 -vt 0.547 0.359 -vt 0.297 0.359 -vt 0.476 0.181 -vt 0.476 0.241 -vt 0.486 0.241 -vt 0.486 0.181 -vt 0.486 0.181 -vt 0.486 0.241 -vt 0.438 0.241 -vt 0.438 0.181 -vt 0.486 0.181 -vt 0.486 0.241 -vt 0.476 0.241 -vt 0.476 0.181 -vt 0.476 0.313 -vt 0.486 0.313 -vt 0.486 0.264 -vt 0.476 0.264 -vt 0.486 0.313 -vt 0.476 0.313 -vt 0.476 0.264 -vt 0.486 0.264 -vt 0.578 0.453 -vt 0.578 0.703 -vt 0.828 0.703 -vt 0.828 0.453 -vt 0.672 0.453 -vt 0.672 0.703 -vt 0.734 0.703 -vt 0.734 0.453 -vt 0.828 0.453 -vt 0.828 0.703 -vt 0.578 0.703 -vt 0.578 0.453 -vt 0.734 0.453 -vt 0.734 0.703 -vt 0.672 0.703 -vt 0.672 0.453 -vt 0.578 0.453 -vt 0.578 0.578 -vt 0.828 0.578 -vt 0.578 0.578 -vt 0.828 0.578 -vt 0.828 0.703 -vt 0.031 0.422 -vt 0.25 0.422 -vt 0.25 0.406 -vt 0.031 0.406 -vt 0.252 0.422 -vt 0.252 0.406 -vt 0.266 0.422 -vt 0.266 0.406 -vt 0.031 0.172 -vt 0.031 0.175 -vt 0.016 0.175 -vt 0.016 0.172 -vt 0.031 0.418 -vt 0.016 0.418 -vt 0.031 0.422 -vt 0.016 0.422 -vt 0.266 0.422 -vt 0.016 0.422 -vt 0.016 0.406 -vt 0.266 0.406 -vt 0.031 0.422 -vt 0.031 0.418 -vt 0.016 0.418 -vt 0.016 0.422 -vt 0.266 0.199 -vt 0.266 0.199 -vt 0.016 0.199 -vt 0.016 0.199 -vt 0.031 0.199 -vt 0.031 0.182 -vt 0.016 0.182 -vt 0.016 0.199 -vt 0.144 0.422 -vt 0.137 0.422 -vt 0.137 0.406 -vt 0.144 0.406 -vt 0.031 0.182 -vt 0.031 0.199 -vt 0.016 0.199 -vt 0.016 0.182 -vt 0.12 0.422 -vt 0.089 0.422 -vt 0.089 0.406 -vt 0.12 0.406 -vt 0.031 0.199 -vt 0.031 0.196 -vt 0.016 0.196 -vt 0.016 0.199 -vt 0.031 0.185 -vt 0.031 0.196 -vt 0.016 0.196 -vt 0.016 0.185 -vt 0.085 0.422 -vt 0.085 0.422 -vt 0.085 0.406 -vt 0.085 0.406 -vt 0.085 0.422 -vt 0.085 0.406 -vt 0.084 0.422 -vt 0.084 0.406 -vt 0.083 0.422 -vt 0.083 0.406 -vt 0.082 0.422 -vt 0.082 0.406 -vt 0.082 0.422 -vt 0.082 0.406 -vt 0.081 0.422 -vt 0.081 0.406 -vt 0.08 0.422 -vt 0.08 0.406 -vt 0.079 0.422 -vt 0.079 0.406 -vt 0.079 0.422 -vt 0.079 0.406 -vt 0.078 0.422 -vt 0.078 0.406 -vt 0.078 0.422 -vt 0.078 0.406 -vt 0.031 0.199 -vt 0.016 0.199 -vt 0.031 0.196 -vt 0.031 0.185 -vt 0.016 0.185 -vt 0.016 0.196 -vt 0.156 0.203 -vt 0.156 0.203 -vt 0.141 0.203 -vt 0.141 0.203 -vt 0.031 0.202 -vt 0.031 0.391 -vt 0.016 0.391 -vt 0.016 0.202 -vt 0.031 0.395 -vt 0.016 0.395 -vt 0.054 0.422 -vt 0.227 0.422 -vt 0.227 0.406 -vt 0.054 0.406 -vt 0.031 0.395 -vt 0.031 0.391 -vt 0.016 0.391 -vt 0.016 0.395 -vt 0.031 0.202 -vt 0.016 0.202 -vt 0.031 0.199 -vt 0.075 0.422 -vt 0.054 0.422 -vt 0.054 0.406 -vt 0.075 0.406 -vt 0.031 0.199 -vt 0.203 0.422 -vt 0.203 0.422 -vt 0.203 0.406 -vt 0.203 0.406 -vt 0.203 0.422 -vt 0.203 0.406 -vt 0.202 0.422 -vt 0.202 0.406 -vt 0.201 0.422 -vt 0.201 0.406 -vt 0.201 0.422 -vt 0.201 0.406 -vt 0.2 0.422 -vt 0.2 0.406 -vt 0.199 0.422 -vt 0.199 0.406 -vt 0.198 0.422 -vt 0.198 0.406 -vt 0.197 0.422 -vt 0.197 0.406 -vt 0.197 0.422 -vt 0.197 0.406 -vt 0.196 0.422 -vt 0.196 0.406 -vt 0.196 0.422 -vt 0.196 0.406 -vt 0.031 0.185 -vt 0.016 0.185 -vt 0.031 0.196 -vt 0.031 0.199 -vt 0.016 0.199 -vt 0.016 0.196 -vt 0.031 0.175 -vt 0.031 0.172 -vt 0.016 0.172 -vt 0.016 0.175 -vt 0.193 0.422 -vt 0.161 0.422 -vt 0.161 0.406 -vt 0.193 0.406 -vt 0.016 0.422 -vt 0.03 0.422 -vt 0.03 0.406 -vt 0.016 0.406 -vt 0.031 0.185 -vt 0.016 0.185 -vt 0.225 0.395 -vt 0.056 0.395 -vt 0.053 0.391 -vt 0.016 0.418 -vt 0.019 0.422 -vt 0.262 0.422 -vt 0.266 0.418 -vt 0.228 0.391 -vt 0.137 0.182 -vt 0.083 0.182 -vt 0.034 0.173 -vt 0.247 0.173 -vt 0.198 0.182 -vt 0.144 0.182 -vt 0.266 0.175 -vt 0.262 0.172 -vt 0.249 0.172 -vt 0.247 0.173 -vt 0.225 0.199 -vt 0.228 0.202 -vt 0.137 0.182 -vt 0.144 0.182 -vt 0.198 0.182 -vt 0.034 0.173 -vt 0.083 0.182 -vt 0.228 0.391 -vt 0.228 0.202 -vt 0.225 0.199 -vt 0.249 0.172 -vt 0.262 0.172 -vt 0.266 0.175 -vt 0.266 0.418 -vt 0.201 0.185 -vt 0.201 0.185 -vt 0.201 0.184 -vt 0.2 0.183 -vt 0.2 0.182 -vt 0.199 0.182 -vt 0.205 0.199 -vt 0.201 0.196 -vt 0.081 0.183 -vt 0.082 0.182 -vt 0.082 0.182 -vt 0.056 0.199 -vt 0.076 0.199 -vt 0.08 0.196 -vt 0.08 0.185 -vt 0.08 0.185 -vt 0.08 0.184 -vt 0.195 0.184 -vt 0.195 0.185 -vt 0.195 0.185 -vt 0.195 0.196 -vt 0.191 0.199 -vt 0.161 0.199 -vt 0.197 0.182 -vt 0.196 0.182 -vt 0.196 0.183 -vt 0.076 0.199 -vt 0.056 0.199 -vt 0.082 0.182 -vt 0.082 0.182 -vt 0.081 0.183 -vt 0.08 0.184 -vt 0.08 0.185 -vt 0.08 0.185 -vt 0.08 0.196 -vt 0.191 0.199 -vt 0.195 0.196 -vt 0.195 0.185 -vt 0.195 0.185 -vt 0.195 0.184 -vt 0.196 0.183 -vt 0.196 0.182 -vt 0.197 0.182 -vt 0.161 0.199 -vt 0.053 0.391 -vt 0.056 0.395 -vt 0.225 0.395 -vt 0.262 0.422 -vt 0.019 0.422 -vt 0.016 0.418 -vt 0.053 0.202 -vt 0.016 0.175 -vt 0.019 0.172 -vt 0.033 0.172 -vt 0.019 0.172 -vt 0.016 0.175 -vt 0.053 0.202 -vt 0.033 0.172 -vt 0.086 0.184 -vt 0.086 0.185 -vt 0.087 0.185 -vt 0.087 0.196 -vt 0.09 0.199 -vt 0.12 0.199 -vt 0.084 0.182 -vt 0.085 0.182 -vt 0.086 0.183 -vt 0.199 0.182 -vt 0.2 0.182 -vt 0.2 0.183 -vt 0.201 0.184 -vt 0.201 0.185 -vt 0.201 0.185 -vt 0.201 0.196 -vt 0.205 0.199 -vt 0.085 0.182 -vt 0.084 0.182 -vt 0.12 0.199 -vt 0.09 0.199 -vt 0.087 0.196 -vt 0.087 0.185 -vt 0.086 0.185 -vt 0.086 0.184 -vt 0.086 0.183 -vt 0.163 0.766 -vt 0.163 0.761 -vt 0.158 0.758 -vt 0.093 0.758 -vt 0.092 0.758 -vt 0.091 0.757 -vt 0.09 0.757 -vt 0.089 0.756 -vt 0.089 0.755 -vt 0.089 0.755 -vt 0.089 0.754 -vt 0.089 0.753 -vt 0.063 0.736 -vt 0.063 0.984 -vt 0.086 0.984 -vt 0.016 0.753 -vt 0.016 0.753 -vt 0.031 0.753 -vt 0.031 0.753 -vt 0.15 0.938 -vt 0.125 0.938 -vt 0.125 0.922 -vt 0.15 0.922 -vt 0.125 0.937 -vt 0.204 0.937 -vt 0.204 0.922 -vt 0.125 0.922 -vt 0.206 0.937 -vt 0.225 0.937 -vt 0.225 0.922 -vt 0.206 0.922 -vt 0.016 0.738 -vt 0.016 0.748 -vt 0.031 0.748 -vt 0.031 0.738 -vt 0.016 0.752 -vt 0.031 0.752 -vt 0.225 0.937 -vt 0.157 0.937 -vt 0.157 0.922 -vt 0.225 0.922 -vt 0.016 0.752 -vt 0.016 0.752 -vt 0.031 0.752 -vt 0.031 0.752 -vt 0.016 0.754 -vt 0.016 0.755 -vt 0.031 0.755 -vt 0.031 0.754 -vt 0.157 0.937 -vt 0.225 0.937 -vt 0.225 0.922 -vt 0.157 0.922 -vt 0.016 0.755 -vt 0.031 0.755 -vt 0.016 0.756 -vt 0.031 0.756 -vt 0.016 0.757 -vt 0.031 0.757 -vt 0.016 0.757 -vt 0.031 0.757 -vt 0.016 0.758 -vt 0.031 0.758 -vt 0.016 0.758 -vt 0.031 0.758 -vt 0.016 0.758 -vt 0.016 0.761 -vt 0.031 0.761 -vt 0.031 0.758 -vt 0.016 0.766 -vt 0.031 0.766 -vt 0.016 0.984 -vt 0.031 0.984 -vt 0.016 0.734 -vt 0.031 0.734 -vt 0.016 0.752 -vt 0.031 0.752 -vt 0.092 0.752 -vt 0.091 0.752 -vt 0.09 0.753 -vt 0.089 0.753 -vt 0.063 0.736 -vt 0.137 0.736 -vt 0.158 0.752 -vt 0.093 0.752 -vt 0.137 0.736 -vt 0.09 0.753 -vt 0.091 0.752 -vt 0.092 0.752 -vt 0.093 0.752 -vt 0.158 0.752 -vt 0.163 0.748 -vt 0.139 0.734 -vt 0.158 0.734 -vt 0.163 0.738 -vt 0.158 0.734 -vt 0.139 0.734 -vt 0.163 0.748 -vt 0.163 0.738 -vt 0.089 0.754 -vt 0.089 0.755 -vt 0.089 0.755 -vt 0.089 0.756 -vt 0.09 0.757 -vt 0.091 0.757 -vt 0.092 0.758 -vt 0.093 0.758 -vt 0.158 0.758 -vt 0.163 0.761 -vt 0.163 0.766 -vt 0.086 0.984 -vt 0.063 0.984 -vt 0.163 0.766 -vt 0.163 0.761 -vt 0.158 0.758 -vt 0.093 0.758 -vt 0.092 0.758 -vt 0.091 0.757 -vt 0.09 0.757 -vt 0.089 0.756 -vt 0.089 0.755 -vt 0.089 0.755 -vt 0.089 0.754 -vt 0.089 0.753 -vt 0.063 0.736 -vt 0.063 0.984 -vt 0.086 0.984 -vt 0.016 0.753 -vt 0.016 0.753 -vt 0.031 0.753 -vt 0.031 0.753 -vt 0.15 0.938 -vt 0.125 0.938 -vt 0.125 0.922 -vt 0.15 0.922 -vt 0.125 0.937 -vt 0.204 0.937 -vt 0.204 0.922 -vt 0.125 0.922 -vt 0.206 0.937 -vt 0.225 0.937 -vt 0.225 0.922 -vt 0.206 0.922 -vt 0.016 0.738 -vt 0.016 0.748 -vt 0.031 0.748 -vt 0.031 0.738 -vt 0.016 0.752 -vt 0.031 0.752 -vt 0.225 0.937 -vt 0.157 0.937 -vt 0.157 0.922 -vt 0.225 0.922 -vt 0.016 0.752 -vt 0.016 0.752 -vt 0.031 0.752 -vt 0.031 0.752 -vt 0.016 0.754 -vt 0.016 0.755 -vt 0.031 0.755 -vt 0.031 0.754 -vt 0.157 0.937 -vt 0.225 0.937 -vt 0.225 0.922 -vt 0.157 0.922 -vt 0.016 0.755 -vt 0.031 0.755 -vt 0.016 0.756 -vt 0.031 0.756 -vt 0.016 0.757 -vt 0.031 0.757 -vt 0.016 0.757 -vt 0.031 0.757 -vt 0.016 0.758 -vt 0.031 0.758 -vt 0.016 0.758 -vt 0.031 0.758 -vt 0.016 0.758 -vt 0.016 0.761 -vt 0.031 0.761 -vt 0.031 0.758 -vt 0.016 0.766 -vt 0.031 0.766 -vt 0.016 0.984 -vt 0.031 0.984 -vt 0.016 0.734 -vt 0.031 0.734 -vt 0.016 0.752 -vt 0.031 0.752 -vt 0.092 0.752 -vt 0.091 0.752 -vt 0.09 0.753 -vt 0.089 0.753 -vt 0.063 0.736 -vt 0.137 0.736 -vt 0.158 0.752 -vt 0.093 0.752 -vt 0.137 0.736 -vt 0.09 0.753 -vt 0.091 0.752 -vt 0.092 0.752 -vt 0.093 0.752 -vt 0.158 0.752 -vt 0.163 0.748 -vt 0.139 0.734 -vt 0.158 0.734 -vt 0.163 0.738 -vt 0.158 0.734 -vt 0.139 0.734 -vt 0.163 0.748 -vt 0.163 0.738 -vt 0.089 0.754 -vt 0.089 0.755 -vt 0.089 0.755 -vt 0.089 0.756 -vt 0.09 0.757 -vt 0.091 0.757 -vt 0.092 0.758 -vt 0.093 0.758 -vt 0.158 0.758 -vt 0.163 0.761 -vt 0.163 0.766 -vt 0.086 0.984 -vt 0.063 0.984 -vt 0.495 0.339 -vt 0.495 0.362 -vt 0.486 0.362 -vt 0.486 0.339 -vt 0.474 0.332 -vt 0.486 0.344 -vt 0.486 0.346 -vt 0.483 0.349 -vt 0.479 0.349 -vt 0.473 0.343 -vt 0.475 0.341 -vt 0.466 0.332 -vt 0.482 0.315 -vt 0.479 0.313 -vt 0.483 0.313 -vt 0.486 0.315 -vt 0.486 0.32 -vt 0.487 0.337 -vt 0.487 0.328 -vt 0.494 0.321 -vt 0.494 0.321 -vt 0.494 0.313 -vt 0.497 0.313 -vt 0.497 0.337 -vt 0.465 0.361 -vt 0.465 0.351 -vt 0.465 0.35 -vt 0.465 0.364 -vt 0.462 0.364 -vt 0.462 0.361 -vt 0.483 0.363 -vt 0.486 0.366 -vt 0.477 0.366 -vt 0.475 0.364 -vt 0.475 0.363 -vt 0.497 0.339 -vt 0.486 0.339 -vt 0.498 0.339 -vt 0.498 0.342 -vt 0.495 0.342 -vt 0.495 0.339 -vt 0.498 0.359 -vt 0.495 0.359 -vt 0.475 0.354 -vt 0.48 0.354 -vt 0.48 0.363 -vt 0.48 0.349 -vt 0.475 0.349 -vt 0.461 0.364 -vt 0.464 0.364 -vt 0.464 0.367 -vt 0.461 0.367 -vt 0.461 0.361 -vt 0.461 0.351 -vt 0.461 0.371 -vt 0.458 0.374 -vt 0.458 0.374 -vt 0.458 0.364 -vt 0.461 0.364 -vt 0.461 0.373 -vt 0.461 0.371 -vt 0.464 0.371 -vt 0.464 0.373 -vt 0.458 0.364 -vt 0.461 0.364 -vt 0.465 0.365 -vt 0.465 0.342 -vt 0.465 0.342 -vt 0.458 0.364 -vt 0.458 0.361 -vt 0.5 0.329 -vt 0.497 0.329 -vt 0.497 0.313 -vt 0.5 0.313 -vt 0.48 0.363 -vt 0.483 0.363 -vt 0.466 0.359 -vt 0.475 0.349 -vt 0.475 0.373 -vt 0.466 0.363 -vt 0.486 0.365 -vt 0.486 0.362 -vt 0.495 0.362 -vt 0.495 0.375 -vt 0.495 0.375 -vt 0.466 0.315 -vt 0.466 0.32 -vt 0.464 0.321 -vt 0.448 0.321 -vt 0.448 0.338 -vt 0.444 0.342 -vt 0.441 0.342 -vt 0.438 0.338 -vt 0.438 0.314 -vt 0.439 0.313 -vt 0.463 0.313 -vt 0.461 0.342 -vt 0.465 0.342 -vt 0.413 0.285 -vt 0.412 0.285 -vt 0.412 0.277 -vt 0.415 0.28 -vt 0.394 0.25 -vt 0.399 0.254 -vt 0.399 0.257 -vt 0.385 0.272 -vt 0.398 0.284 -vt 0.399 0.292 -vt 0.398 0.292 -vt 0.377 0.275 -vt 0.375 0.265 -vt 0.389 0.25 -vt 0.379 0.292 -vt 0.383 0.292 -vt 0.383 0.297 -vt 0.379 0.297 -vt 0.375 0.3 -vt 0.375 0.297 -vt 0.379 0.297 -vt 0.379 0.3 -vt 0.432 0.3 -vt 0.428 0.3 -vt 0.428 0.279 -vt 0.432 0.279 -vt 0.438 0.254 -vt 0.433 0.254 -vt 0.433 0.25 -vt 0.438 0.25 -vt 0.428 0.273 -vt 0.428 0.261 -vt 0.433 0.256 -vt 0.433 0.256 -vt 0.438 0.274 -vt 0.436 0.275 -vt 0.426 0.275 -vt 0.409 0.297 -vt 0.405 0.297 -vt 0.405 0.285 -vt 0.409 0.285 -vt 0.412 0.25 -vt 0.425 0.25 -vt 0.425 0.251 -vt 0.412 0.251 -vt 0.409 0.279 -vt 0.412 0.282 -vt 0.412 0.285 -vt 0.399 0.285 -vt 0.399 0.279 -vt 0.409 0.254 -vt 0.409 0.25 -vt 0.41 0.25 -vt 0.412 0.252 -vt 0.383 0.297 -vt 0.379 0.297 -vt 0.375 0.292 -vt 0.379 0.292 -vt 0.425 0.279 -vt 0.428 0.282 -vt 0.428 0.312 -vt 0.427 0.313 -vt 0.425 0.31 -vt 0.405 0.29 -vt 0.405 0.302 -vt 0.399 0.302 -vt 0.399 0.285 -vt 0.399 0.285 -vt 0.434 0.279 -vt 0.425 0.279 -vt 0.425 0.276 -vt 0.399 0.262 -vt 0.403 0.262 -vt 0.403 0.254 -vt 0.424 0.285 -vt 0.424 0.306 -vt 0.421 0.308 -vt 0.416 0.308 -vt 0.412 0.304 -vt 0.412 0.302 -vt 0.416 0.302 -vt 0.416 0.285 -vt 0.413 0.347 -vt 0.412 0.347 -vt 0.412 0.34 -vt 0.415 0.343 -vt 0.394 0.313 -vt 0.399 0.316 -vt 0.399 0.319 -vt 0.385 0.335 -vt 0.398 0.347 -vt 0.399 0.354 -vt 0.398 0.354 -vt 0.377 0.337 -vt 0.375 0.328 -vt 0.389 0.313 -vt 0.379 0.354 -vt 0.383 0.354 -vt 0.383 0.359 -vt 0.379 0.359 -vt 0.375 0.362 -vt 0.375 0.36 -vt 0.379 0.36 -vt 0.379 0.362 -vt 0.432 0.363 -vt 0.428 0.363 -vt 0.428 0.342 -vt 0.432 0.342 -vt 0.438 0.316 -vt 0.433 0.316 -vt 0.433 0.313 -vt 0.438 0.313 -vt 0.428 0.336 -vt 0.428 0.324 -vt 0.433 0.319 -vt 0.433 0.319 -vt 0.438 0.336 -vt 0.436 0.337 -vt 0.426 0.337 -vt 0.409 0.359 -vt 0.405 0.359 -vt 0.405 0.347 -vt 0.409 0.347 -vt 0.412 0.313 -vt 0.425 0.313 -vt 0.425 0.313 -vt 0.412 0.313 -vt 0.409 0.342 -vt 0.412 0.345 -vt 0.412 0.347 -vt 0.399 0.347 -vt 0.399 0.342 -vt 0.409 0.316 -vt 0.409 0.313 -vt 0.41 0.313 -vt 0.412 0.314 -vt 0.383 0.36 -vt 0.379 0.36 -vt 0.375 0.354 -vt 0.379 0.354 -vt 0.425 0.342 -vt 0.428 0.345 -vt 0.428 0.374 -vt 0.427 0.375 -vt 0.425 0.373 -vt 0.405 0.352 -vt 0.405 0.364 -vt 0.399 0.364 -vt 0.399 0.347 -vt 0.399 0.347 -vt 0.434 0.342 -vt 0.425 0.342 -vt 0.425 0.339 -vt 0.399 0.324 -vt 0.403 0.324 -vt 0.403 0.316 -vt 0.424 0.347 -vt 0.424 0.368 -vt 0.421 0.37 -vt 0.416 0.37 -vt 0.412 0.367 -vt 0.412 0.364 -vt 0.416 0.364 -vt 0.416 0.347 -vt 0.37 0.339 -vt 0.37 0.362 -vt 0.361 0.362 -vt 0.361 0.339 -vt 0.349 0.332 -vt 0.361 0.344 -vt 0.361 0.346 -vt 0.358 0.349 -vt 0.354 0.349 -vt 0.348 0.343 -vt 0.35 0.341 -vt 0.341 0.332 -vt 0.357 0.315 -vt 0.354 0.313 -vt 0.358 0.313 -vt 0.361 0.315 -vt 0.361 0.32 -vt 0.362 0.337 -vt 0.362 0.328 -vt 0.369 0.321 -vt 0.369 0.321 -vt 0.369 0.313 -vt 0.372 0.313 -vt 0.372 0.337 -vt 0.34 0.361 -vt 0.34 0.351 -vt 0.34 0.35 -vt 0.34 0.364 -vt 0.337 0.364 -vt 0.337 0.361 -vt 0.358 0.363 -vt 0.361 0.366 -vt 0.352 0.366 -vt 0.35 0.364 -vt 0.35 0.363 -vt 0.372 0.339 -vt 0.361 0.339 -vt 0.373 0.339 -vt 0.373 0.342 -vt 0.37 0.342 -vt 0.37 0.339 -vt 0.373 0.359 -vt 0.37 0.359 -vt 0.35 0.354 -vt 0.355 0.354 -vt 0.355 0.363 -vt 0.355 0.349 -vt 0.35 0.349 -vt 0.336 0.364 -vt 0.339 0.364 -vt 0.339 0.367 -vt 0.336 0.367 -vt 0.336 0.361 -vt 0.336 0.351 -vt 0.336 0.371 -vt 0.333 0.374 -vt 0.333 0.374 -vt 0.333 0.364 -vt 0.336 0.364 -vt 0.336 0.373 -vt 0.336 0.371 -vt 0.339 0.371 -vt 0.339 0.373 -vt 0.333 0.364 -vt 0.336 0.364 -vt 0.34 0.365 -vt 0.34 0.342 -vt 0.34 0.342 -vt 0.333 0.364 -vt 0.333 0.361 -vt 0.375 0.329 -vt 0.372 0.329 -vt 0.372 0.313 -vt 0.375 0.313 -vt 0.355 0.363 -vt 0.358 0.363 -vt 0.341 0.359 -vt 0.35 0.349 -vt 0.35 0.373 -vt 0.341 0.363 -vt 0.361 0.365 -vt 0.361 0.362 -vt 0.37 0.362 -vt 0.37 0.375 -vt 0.37 0.375 -vt 0.341 0.315 -vt 0.341 0.32 -vt 0.339 0.321 -vt 0.323 0.321 -vt 0.323 0.338 -vt 0.319 0.342 -vt 0.316 0.342 -vt 0.313 0.338 -vt 0.313 0.314 -vt 0.314 0.313 -vt 0.338 0.313 -vt 0.336 0.342 -vt 0.34 0.342 -vt 0.483 0.285 -vt 0.484 0.297 -vt 0.483 0.309 -vt 0.48 0.321 -vt 0.474 0.332 -vt 0.466 0.341 -vt 0.457 0.349 -vt 0.446 0.355 -vt 0.434 0.358 -vt 0.422 0.359 -vt 0.422 0.318 -vt 0.426 0.317 -vt 0.43 0.316 -vt 0.433 0.314 -vt 0.437 0.312 -vt 0.439 0.308 -vt 0.441 0.305 -vt 0.442 0.301 -vt 0.443 0.297 -vt 0.442 0.293 -vt 0.441 0.289 -vt 0.439 0.285 -vt 0.437 0.282 -vt 0.433 0.28 -vt 0.43 0.278 -vt 0.426 0.276 -vt 0.422 0.276 -vt 0.422 0.234 -vt 0.434 0.236 -vt 0.446 0.239 -vt 0.457 0.245 -vt 0.466 0.253 -vt 0.474 0.262 -vt 0.48 0.273 -vt 0.483 0.285 -vt 0.48 0.273 -vt 0.474 0.262 -vt 0.466 0.253 -vt 0.457 0.245 -vt 0.446 0.239 -vt 0.434 0.236 -vt 0.422 0.234 -vt 0.422 0.272 -vt 0.427 0.273 -vt 0.431 0.274 -vt 0.436 0.276 -vt 0.439 0.279 -vt 0.442 0.283 -vt 0.445 0.287 -vt 0.446 0.292 -vt 0.447 0.297 -vt 0.446 0.302 -vt 0.445 0.306 -vt 0.442 0.311 -vt 0.439 0.314 -vt 0.436 0.317 -vt 0.431 0.32 -vt 0.427 0.321 -vt 0.422 0.322 -vt 0.422 0.359 -vt 0.434 0.358 -vt 0.446 0.355 -vt 0.457 0.349 -vt 0.466 0.341 -vt 0.474 0.332 -vt 0.48 0.321 -vt 0.483 0.309 -vt 0.484 0.297 -vt 0.484 0.297 -vt 0.483 0.285 -vt 0.48 0.273 -vt 0.474 0.262 -vt 0.466 0.253 -vt 0.457 0.245 -vt 0.446 0.239 -vt 0.434 0.236 -vt 0.422 0.234 -vt 0.422 0.276 -vt 0.426 0.276 -vt 0.43 0.278 -vt 0.433 0.28 -vt 0.437 0.282 -vt 0.439 0.285 -vt 0.441 0.289 -vt 0.442 0.293 -vt 0.443 0.297 -vt 0.442 0.301 -vt 0.441 0.305 -vt 0.439 0.308 -vt 0.437 0.312 -vt 0.433 0.314 -vt 0.43 0.316 -vt 0.426 0.317 -vt 0.422 0.318 -vt 0.422 0.359 -vt 0.434 0.358 -vt 0.446 0.355 -vt 0.457 0.349 -vt 0.466 0.341 -vt 0.474 0.332 -vt 0.48 0.321 -vt 0.483 0.309 -vt 0.484 0.297 -vt 0.483 0.309 -vt 0.48 0.321 -vt 0.474 0.332 -vt 0.466 0.341 -vt 0.457 0.349 -vt 0.446 0.355 -vt 0.434 0.358 -vt 0.422 0.359 -vt 0.422 0.322 -vt 0.427 0.321 -vt 0.431 0.32 -vt 0.436 0.317 -vt 0.439 0.314 -vt 0.442 0.311 -vt 0.445 0.306 -vt 0.446 0.302 -vt 0.447 0.297 -vt 0.446 0.292 -vt 0.445 0.287 -vt 0.442 0.283 -vt 0.439 0.279 -vt 0.436 0.276 -vt 0.431 0.274 -vt 0.427 0.273 -vt 0.422 0.272 -vt 0.422 0.234 -vt 0.434 0.236 -vt 0.446 0.239 -vt 0.457 0.245 -vt 0.466 0.253 -vt 0.474 0.262 -vt 0.48 0.273 -vt 0.483 0.285 -vt 0.417 0.273 -vt 0.412 0.274 -vt 0.408 0.276 -vt 0.404 0.279 -vt 0.401 0.283 -vt 0.399 0.287 -vt 0.398 0.292 -vt 0.397 0.297 -vt 0.398 0.302 -vt 0.399 0.306 -vt 0.401 0.311 -vt 0.404 0.314 -vt 0.408 0.317 -vt 0.412 0.32 -vt 0.417 0.321 -vt 0.41 0.358 -vt 0.398 0.355 -vt 0.387 0.349 -vt 0.378 0.341 -vt 0.37 0.332 -vt 0.364 0.321 -vt 0.361 0.309 -vt 0.359 0.297 -vt 0.361 0.285 -vt 0.364 0.273 -vt 0.37 0.262 -vt 0.378 0.253 -vt 0.387 0.245 -vt 0.398 0.239 -vt 0.41 0.236 -vt 0.418 0.276 -vt 0.414 0.278 -vt 0.41 0.28 -vt 0.407 0.282 -vt 0.405 0.285 -vt 0.403 0.289 -vt 0.401 0.293 -vt 0.401 0.297 -vt 0.401 0.301 -vt 0.403 0.305 -vt 0.405 0.308 -vt 0.407 0.312 -vt 0.41 0.314 -vt 0.414 0.316 -vt 0.418 0.317 -vt 0.41 0.358 -vt 0.398 0.355 -vt 0.387 0.349 -vt 0.378 0.341 -vt 0.37 0.332 -vt 0.364 0.321 -vt 0.361 0.309 -vt 0.359 0.297 -vt 0.361 0.285 -vt 0.364 0.273 -vt 0.37 0.262 -vt 0.378 0.253 -vt 0.387 0.245 -vt 0.398 0.239 -vt 0.41 0.236 -vt 0.417 0.321 -vt 0.412 0.32 -vt 0.408 0.317 -vt 0.404 0.314 -vt 0.401 0.311 -vt 0.399 0.306 -vt 0.398 0.302 -vt 0.397 0.297 -vt 0.398 0.292 -vt 0.399 0.287 -vt 0.401 0.283 -vt 0.404 0.279 -vt 0.408 0.276 -vt 0.412 0.274 -vt 0.417 0.273 -vt 0.41 0.236 -vt 0.398 0.239 -vt 0.387 0.245 -vt 0.378 0.253 -vt 0.37 0.262 -vt 0.364 0.273 -vt 0.361 0.285 -vt 0.359 0.297 -vt 0.361 0.309 -vt 0.364 0.321 -vt 0.37 0.332 -vt 0.378 0.341 -vt 0.387 0.349 -vt 0.398 0.355 -vt 0.41 0.358 -vt 0.418 0.317 -vt 0.414 0.316 -vt 0.41 0.314 -vt 0.407 0.312 -vt 0.405 0.308 -vt 0.403 0.305 -vt 0.401 0.301 -vt 0.401 0.297 -vt 0.401 0.293 -vt 0.403 0.289 -vt 0.405 0.285 -vt 0.407 0.282 -vt 0.41 0.28 -vt 0.414 0.278 -vt 0.418 0.276 -vt 0.41 0.236 -vt 0.398 0.239 -vt 0.387 0.245 -vt 0.378 0.253 -vt 0.37 0.262 -vt 0.364 0.273 -vt 0.361 0.285 -vt 0.359 0.297 -vt 0.361 0.309 -vt 0.364 0.321 -vt 0.37 0.332 -vt 0.378 0.341 -vt 0.387 0.349 -vt 0.398 0.355 -vt 0.41 0.358 -vt 0.513 0.514 -vt 0.495 0.514 -vt 0.495 0.488 -vt 0.513 0.488 -vt 0.477 0.52 -vt 0.495 0.52 -vt 0.495 0.664 -vt 0.478 0.664 -vt 0.513 0.559 -vt 0.513 0.565 -vt 0.495 0.565 -vt 0.495 0.559 -vt 0.478 0.488 -vt 0.366 0.52 -vt 0.37 0.516 -vt 0.386 0.676 -vt 0.343 0.688 -vt 0.316 0.657 -vt 0.343 0.522 -vt 0.35 0.523 -vt 0.358 0.523 -vt 0.513 0.569 -vt 0.495 0.569 -vt 0.495 0.572 -vt 0.513 0.572 -vt 0.46 0.488 -vt 0.477 0.488 -vt 0.477 0.668 -vt 0.46 0.668 -vt 0.513 0.577 -vt 0.495 0.577 -vt 0.495 0.582 -vt 0.513 0.582 -vt 0.495 0.536 -vt 0.495 0.517 -vt 0.512 0.517 -vt 0.512 0.536 -vt 0.513 0.542 -vt 0.513 0.555 -vt 0.495 0.555 -vt 0.495 0.542 -vt 0.499 0.586 -vt 0.499 0.596 -vt 0.506 0.596 -vt 0.506 0.586 -vt 0.219 0.813 -vt 0.216 0.824 -vt 0.21 0.835 -vt 0.199 0.841 -vt 0.188 0.844 -vt 0.176 0.841 -vt 0.165 0.835 -vt 0.159 0.824 -vt 0.156 0.813 -vt 0.159 0.801 -vt 0.165 0.79 -vt 0.176 0.784 -vt 0.188 0.781 -vt 0.199 0.784 -vt 0.21 0.79 -vt 0.216 0.801 -vt 0.513 0.514 -vt 0.513 0.488 -vt 0.495 0.488 -vt 0.495 0.514 -vt 0.477 0.52 -vt 0.478 0.664 -vt 0.495 0.664 -vt 0.495 0.52 -vt 0.513 0.559 -vt 0.495 0.559 -vt 0.495 0.565 -vt 0.513 0.565 -vt 0.478 0.488 -vt 0.46 0.488 -vt 0.46 0.668 -vt 0.477 0.668 -vt 0.477 0.488 -vt 0.495 0.536 -vt 0.512 0.536 -vt 0.512 0.517 -vt 0.495 0.517 -vt 0.513 0.542 -vt 0.495 0.542 -vt 0.495 0.555 -vt 0.513 0.555 -vt 0.219 0.813 -vt 0.216 0.801 -vt 0.21 0.79 -vt 0.199 0.784 -vt 0.188 0.781 -vt 0.176 0.784 -vt 0.165 0.79 -vt 0.159 0.801 -vt 0.156 0.813 -vt 0.159 0.824 -vt 0.165 0.835 -vt 0.176 0.841 -vt 0.188 0.844 -vt 0.199 0.841 -vt 0.21 0.835 -vt 0.216 0.824 -vt 0.477 0.672 -vt 0.46 0.672 -vt 0.512 0.539 -vt 0.495 0.539 -vt 0.513 0.574 -vt 0.495 0.574 -vt 0.495 0.586 -vt 0.513 0.586 -vt 0.513 0.577 -vt 0.513 0.582 -vt 0.495 0.582 -vt 0.495 0.577 -vt 0.495 0.666 -vt 0.478 0.666 -vt 0.499 0.586 -vt 0.499 0.596 -vt 0.495 0.596 -vt 0.495 0.586 -vt 0.51 0.596 -vt 0.51 0.586 -vt 0.495 0.557 -vt 0.513 0.557 -vt 0.506 0.586 -vt 0.506 0.596 -vt 0.495 0.557 -vt 0.513 0.557 -vt 0.513 0.569 -vt 0.495 0.569 -vt 0.495 0.539 -vt 0.513 0.539 -vt 0.512 0.514 -vt 0.495 0.514 -vt 0.495 0.574 -vt 0.513 0.574 -vt 0.513 0.572 -vt 0.495 0.572 -vt 0.386 0.664 -vt 0.39 0.518 -vt 0.417 0.653 -vt 0.46 0.499 -vt 0.46 0.684 -vt 0.444 0.659 -vt 0.446 0.683 -vt 0.441 0.678 -vt 0.454 0.686 -vt 0.336 0.519 -vt 0.327 0.507 -vt 0.322 0.506 -vt 0.316 0.508 -vt 0.313 0.511 -vt 0.343 0.522 -vt 0.316 0.657 -vt 0.343 0.688 -vt 0.386 0.676 -vt 0.37 0.516 -vt 0.366 0.52 -vt 0.358 0.523 -vt 0.35 0.523 -vt 0.432 0.652 -vt 0.423 0.652 -vt 0.417 0.488 -vt 0.44 0.655 -vt 0.313 0.511 -vt 0.336 0.519 -vt 0.316 0.508 -vt 0.322 0.506 -vt 0.327 0.507 -vt 0.367 0.497 -vt 0.372 0.492 -vt 0.38 0.489 -vt 0.386 0.491 -vt 0.39 0.518 -vt 0.386 0.664 -vt 0.417 0.653 -vt 0.39 0.667 -vt 0.396 0.669 -vt 0.401 0.668 -vt 0.41 0.656 -vt 0.46 0.684 -vt 0.46 0.499 -vt 0.444 0.659 -vt 0.441 0.678 -vt 0.446 0.683 -vt 0.454 0.686 -vt 0.41 0.656 -vt 0.401 0.668 -vt 0.396 0.669 -vt 0.39 0.667 -vt 0.386 0.491 -vt 0.372 0.492 -vt 0.367 0.497 -vt 0.38 0.489 -vt 0.423 0.652 -vt 0.432 0.652 -vt 0.44 0.655 -vt 0.417 0.488 -vt 0.25 0.781 -vt 0.248 0.793 -vt 0.241 0.803 -vt 0.231 0.81 -vt 0.219 0.813 -vt 0.207 0.81 -vt 0.197 0.803 -vt 0.19 0.793 -vt 0.188 0.781 -vt 0.19 0.769 -vt 0.197 0.759 -vt 0.207 0.752 -vt 0.219 0.75 -vt 0.231 0.752 -vt 0.241 0.759 -vt 0.248 0.769 -vt 0.248 0.793 -vt 0.25 0.781 -vt 0.248 0.769 -vt 0.241 0.759 -vt 0.231 0.752 -vt 0.219 0.75 -vt 0.207 0.752 -vt 0.197 0.759 -vt 0.19 0.769 -vt 0.188 0.781 -vt 0.19 0.793 -vt 0.197 0.803 -vt 0.207 0.81 -vt 0.219 0.813 -vt 0.231 0.81 -vt 0.241 0.803 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.395 0.394 -vt 0.418 0.394 -vt 0.418 0.418 -vt 0.395 0.418 -vt 0.391 0.328 -vt 0.391 0.387 -vt 0.359 0.387 -vt 0.359 0.328 -vt 0.328 0.328 -vt 0.328 0.387 -vt 0.297 0.387 -vt 0.297 0.328 -vt 0.328 0.297 -vt 0.359 0.297 -vt 0.422 0.328 -vt 0.422 0.387 -vt 0.422 0.391 -vt 0.422 0.422 -vt 0.391 0.422 -vt 0.391 0.391 -vt 0.297 0.859 -vt 0.297 0.984 -vt 0.422 0.984 -vt 0.422 0.859 -vt 0.297 0.859 -vt 0.422 0.859 -vt 0.422 0.984 -vt 0.297 0.984 -vt 0.438 0.859 -vt 0.453 0.859 -vt 0.453 0.984 -vt 0.438 0.984 -vt 0.438 0.984 -vt 0.453 0.984 -vt 0.453 0.859 -vt 0.438 0.859 -vt 0.422 0.828 -vt 0.422 0.844 -vt 0.297 0.844 -vt 0.297 0.828 -vt 0.297 0.828 -vt 0.297 0.844 -vt 0.422 0.844 -vt 0.422 0.828 -vt 0.031 0.281 -vt 0.031 0.266 -vt 0.125 0.266 -vt 0.125 0.281 -vt 0.016 0.421 -vt 0.016 0.42 -vt 0.016 0.299 -vt 0.016 0.298 -vt 0.017 0.297 -vt 0.018 0.297 -vt 0.019 0.297 -vt 0.02 0.297 -vt 0.021 0.298 -vt 0.022 0.299 -vt 0.022 0.321 -vt 0.022 0.398 -vt 0.022 0.42 -vt 0.021 0.421 -vt 0.02 0.422 -vt 0.019 0.422 -vt 0.018 0.422 -vt 0.017 0.422 -vt 0.031 0.281 -vt 0.125 0.281 -vt 0.125 0.266 -vt 0.031 0.266 -vt 0.135 0.321 -vt 0.135 0.398 -vt 0.141 0.299 -vt 0.141 0.42 -vt 0.14 0.421 -vt 0.139 0.422 -vt 0.138 0.422 -vt 0.137 0.422 -vt 0.136 0.422 -vt 0.135 0.421 -vt 0.135 0.42 -vt 0.135 0.299 -vt 0.135 0.298 -vt 0.136 0.297 -vt 0.137 0.297 -vt 0.138 0.297 -vt 0.139 0.297 -vt 0.14 0.298 -vt 0.719 0.984 -vt 0.719 0.859 -vt 0.734 0.859 -vt 0.734 0.984 -vt 0.703 0.984 -vt 0.578 0.984 -vt 0.578 0.859 -vt 0.703 0.859 -vt 0.719 0.859 -vt 0.719 0.984 -vt 0.734 0.984 -vt 0.734 0.859 -vt 0.578 0.828 -vt 0.703 0.828 -vt 0.703 0.844 -vt 0.578 0.844 -vt 0.703 0.828 -vt 0.578 0.828 -vt 0.578 0.844 -vt 0.703 0.844 -vt 0.406 0.375 -vt 0.397 0.375 -vt 0.384 0.375 -vt 0.375 0.375 -vt 0.375 0.354 -vt 0.377 0.349 -vt 0.382 0.346 -vt 0.387 0.344 -vt 0.394 0.344 -vt 0.399 0.346 -vt 0.404 0.349 -vt 0.406 0.354 -vt 0.444 0.375 -vt 0.453 0.375 -vt 0.453 0.354 -vt 0.451 0.349 -vt 0.446 0.346 -vt 0.441 0.344 -vt 0.434 0.344 -vt 0.429 0.346 -vt 0.424 0.349 -vt 0.422 0.354 -vt 0.422 0.375 -vt 0.431 0.375 -vt 0.406 0.375 -vt 0.397 0.375 -vt 0.384 0.375 -vt 0.375 0.375 -vt 0.375 0.354 -vt 0.377 0.349 -vt 0.382 0.346 -vt 0.387 0.344 -vt 0.394 0.344 -vt 0.399 0.346 -vt 0.404 0.349 -vt 0.406 0.354 -vt 0.444 0.375 -vt 0.453 0.375 -vt 0.453 0.354 -vt 0.451 0.349 -vt 0.446 0.346 -vt 0.441 0.344 -vt 0.434 0.344 -vt 0.429 0.346 -vt 0.424 0.349 -vt 0.422 0.354 -vt 0.422 0.375 -vt 0.431 0.375 -vt 0.406 0.375 -vt 0.397 0.375 -vt 0.384 0.375 -vt 0.375 0.375 -vt 0.375 0.354 -vt 0.377 0.349 -vt 0.382 0.346 -vt 0.387 0.344 -vt 0.394 0.344 -vt 0.399 0.346 -vt 0.404 0.349 -vt 0.406 0.354 -vt 0.444 0.375 -vt 0.453 0.375 -vt 0.453 0.354 -vt 0.451 0.349 -vt 0.446 0.346 -vt 0.441 0.344 -vt 0.434 0.344 -vt 0.429 0.346 -vt 0.424 0.349 -vt 0.422 0.354 -vt 0.422 0.375 -vt 0.431 0.375 -vt 0.406 0.375 -vt 0.397 0.375 -vt 0.384 0.375 -vt 0.375 0.375 -vt 0.375 0.354 -vt 0.377 0.349 -vt 0.382 0.346 -vt 0.387 0.344 -vt 0.394 0.344 -vt 0.399 0.346 -vt 0.404 0.349 -vt 0.406 0.354 -vt 0.444 0.375 -vt 0.453 0.375 -vt 0.453 0.354 -vt 0.451 0.349 -vt 0.446 0.346 -vt 0.441 0.344 -vt 0.434 0.344 -vt 0.429 0.346 -vt 0.424 0.349 -vt 0.422 0.354 -vt 0.422 0.375 -vt 0.431 0.375 -vt 0.344 0.219 -vt 0.344 0.281 -vt 0.313 0.281 -vt 0.313 0.219 -vt 0.438 0.219 -vt 0.438 0.281 -vt 0.406 0.281 -vt 0.406 0.219 -vt 0.375 0.281 -vt 0.375 0.219 -vt 0.344 0.188 -vt 0.375 0.188 -vt 0.438 0.313 -vt 0.406 0.313 -vt 0.25 0.781 -vt 0.248 0.793 -vt 0.241 0.803 -vt 0.231 0.81 -vt 0.219 0.813 -vt 0.207 0.81 -vt 0.197 0.803 -vt 0.19 0.793 -vt 0.188 0.781 -vt 0.19 0.769 -vt 0.197 0.759 -vt 0.207 0.752 -vt 0.219 0.75 -vt 0.231 0.752 -vt 0.241 0.759 -vt 0.248 0.769 -vt 0.248 0.793 -vt 0.25 0.781 -vt 0.248 0.769 -vt 0.241 0.759 -vt 0.231 0.752 -vt 0.219 0.75 -vt 0.207 0.752 -vt 0.197 0.759 -vt 0.19 0.769 -vt 0.188 0.781 -vt 0.19 0.793 -vt 0.197 0.803 -vt 0.207 0.81 -vt 0.219 0.813 -vt 0.231 0.81 -vt 0.241 0.803 -vt 0.521 0.348 -vt 0.521 0.32 -vt 0.547 0.32 -vt 0.547 0.348 -vt 0.348 0.394 -vt 0.322 0.394 -vt 0.322 0.32 -vt 0.348 0.32 -vt 0.373 0.32 -vt 0.399 0.32 -vt 0.399 0.394 -vt 0.373 0.394 -vt 0.348 0.394 -vt 0.348 0.32 -vt 0.373 0.32 -vt 0.373 0.394 -vt 0.322 0.32 -vt 0.322 0.422 -vt 0.297 0.422 -vt 0.297 0.32 -vt 0.547 0.32 -vt 0.521 0.32 -vt 0.521 0.172 -vt 0.547 0.172 -vt 0.409 0.32 -vt 0.409 0.172 -vt 0.44 0.246 -vt 0.44 0.32 -vt 0.521 0.172 -vt 0.521 0.246 -vt 0.409 0.32 -vt 0.297 0.32 -vt 0.327 0.246 -vt 0.409 0.246 -vt 0.297 0.172 -vt 0.327 0.172 -vt 0.141 0.953 -vt 0.141 0.969 -vt 0.078 0.969 -vt 0.078 0.953 -vt 0.016 0.969 -vt 0.016 0.953 -vt 0.266 0.953 -vt 0.266 0.969 -vt 0.203 0.969 -vt 0.203 0.953 -vt 0.859 0.984 -vt 0.938 0.984 -vt 0.938 0.906 -vt 0.859 0.906 -vt 0.938 0.859 -vt 0.859 0.859 -vt 0.859 0.781 -vt 0.938 0.781 -vt 0.203 0.922 -vt 0.203 0.938 -vt 0.141 0.938 -vt 0.141 0.922 -vt 0.266 0.922 -vt 0.266 0.938 -vt 0.078 0.922 -vt 0.078 0.938 -vt 0.016 0.938 -vt 0.016 0.922 -vt 0.172 0.547 -vt 0.172 0.625 -vt 0.094 0.625 -vt 0.094 0.547 -vt 0.094 0.625 -vt 0.094 0.703 -vt 0.016 0.703 -vt 0.016 0.625 -vt 0.172 0.625 -vt 0.172 0.703 -vt 0.016 0.625 -vt 0.016 0.547 -vt 0.547 0.344 -vt 0.547 0.359 -vt 0.297 0.359 -vt 0.297 0.344 -vt 0.297 0.391 -vt 0.297 0.375 -vt 0.547 0.375 -vt 0.547 0.391 -vt 0.547 0.406 -vt 0.297 0.406 -vt 0.547 0.344 -vt 0.547 0.359 -vt 0.297 0.359 -vt 0.297 0.344 -vt 0.297 0.391 -vt 0.297 0.375 -vt 0.547 0.375 -vt 0.547 0.391 -vt 0.547 0.406 -vt 0.297 0.406 -vt 0.693 0.655 -vt 0.688 0.656 -vt 0.682 0.655 -vt 0.676 0.652 -vt 0.673 0.647 -vt 0.672 0.641 -vt 0.673 0.635 -vt 0.676 0.63 -vt 0.682 0.626 -vt 0.688 0.625 -vt 0.693 0.626 -vt 0.699 0.63 -vt 0.702 0.635 -vt 0.703 0.641 -vt 0.702 0.647 -vt 0.699 0.652 -vt 0.734 0.656 -vt 0.74 0.655 -vt 0.745 0.652 -vt 0.749 0.647 -vt 0.75 0.641 -vt 0.749 0.635 -vt 0.745 0.63 -vt 0.74 0.626 -vt 0.734 0.625 -vt 0.728 0.626 -vt 0.723 0.63 -vt 0.72 0.635 -vt 0.719 0.641 -vt 0.72 0.647 -vt 0.723 0.652 -vt 0.728 0.655 -vt 0.25 0.781 -vt 0.248 0.793 -vt 0.241 0.803 -vt 0.231 0.81 -vt 0.219 0.813 -vt 0.207 0.81 -vt 0.197 0.803 -vt 0.19 0.793 -vt 0.188 0.781 -vt 0.19 0.769 -vt 0.197 0.759 -vt 0.207 0.752 -vt 0.219 0.75 -vt 0.231 0.752 -vt 0.241 0.759 -vt 0.248 0.769 -vt 0.248 0.793 -vt 0.25 0.781 -vt 0.248 0.769 -vt 0.241 0.759 -vt 0.231 0.752 -vt 0.219 0.75 -vt 0.207 0.752 -vt 0.197 0.759 -vt 0.19 0.769 -vt 0.188 0.781 -vt 0.19 0.793 -vt 0.197 0.803 -vt 0.207 0.81 -vt 0.219 0.813 -vt 0.231 0.81 -vt 0.241 0.803 -vt 0.25 0.781 -vt 0.248 0.793 -vt 0.241 0.803 -vt 0.231 0.81 -vt 0.219 0.813 -vt 0.207 0.81 -vt 0.197 0.803 -vt 0.19 0.793 -vt 0.188 0.781 -vt 0.19 0.769 -vt 0.197 0.759 -vt 0.207 0.752 -vt 0.219 0.75 -vt 0.231 0.752 -vt 0.241 0.759 -vt 0.248 0.769 -vt 0.248 0.793 -vt 0.25 0.781 -vt 0.248 0.769 -vt 0.241 0.759 -vt 0.231 0.752 -vt 0.219 0.75 -vt 0.207 0.752 -vt 0.197 0.759 -vt 0.19 0.769 -vt 0.188 0.781 -vt 0.19 0.793 -vt 0.197 0.803 -vt 0.207 0.81 -vt 0.219 0.813 -vt 0.231 0.81 -vt 0.241 0.803 -vt 0.395 0.394 -vt 0.418 0.394 -vt 0.418 0.418 -vt 0.395 0.418 -vt 0.391 0.328 -vt 0.391 0.387 -vt 0.359 0.387 -vt 0.359 0.328 -vt 0.328 0.328 -vt 0.328 0.387 -vt 0.297 0.387 -vt 0.297 0.328 -vt 0.328 0.297 -vt 0.359 0.297 -vt 0.422 0.328 -vt 0.422 0.387 -vt 0.422 0.391 -vt 0.422 0.422 -vt 0.391 0.422 -vt 0.391 0.391 -vt 0.395 0.394 -vt 0.418 0.394 -vt 0.418 0.418 -vt 0.395 0.418 -vt 0.391 0.328 -vt 0.391 0.387 -vt 0.359 0.387 -vt 0.359 0.328 -vt 0.328 0.328 -vt 0.328 0.387 -vt 0.297 0.387 -vt 0.297 0.328 -vt 0.328 0.297 -vt 0.359 0.297 -vt 0.422 0.328 -vt 0.422 0.387 -vt 0.422 0.391 -vt 0.422 0.422 -vt 0.391 0.422 -vt 0.391 0.391 -vt 0.395 0.394 -vt 0.418 0.394 -vt 0.418 0.418 -vt 0.395 0.418 -vt 0.391 0.328 -vt 0.391 0.387 -vt 0.359 0.387 -vt 0.359 0.328 -vt 0.328 0.328 -vt 0.328 0.387 -vt 0.297 0.387 -vt 0.297 0.328 -vt 0.328 0.297 -vt 0.359 0.297 -vt 0.422 0.328 -vt 0.422 0.387 -vt 0.422 0.391 -vt 0.422 0.422 -vt 0.391 0.422 -vt 0.391 0.391 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.5 0.301 -vt 0.5 0.344 -vt 0.469 0.344 -vt 0.469 0.301 -vt 0.456 0.291 -vt 0.462 0.292 -vt 0.467 0.296 -vt 0.438 0.344 -vt 0.438 0.301 -vt 0.438 0.296 -vt 0.44 0.286 -vt 0.45 0.291 -vt 0.406 0.344 -vt 0.406 0.301 -vt 0.5 0.375 -vt 0.469 0.375 -vt 0.393 0.291 -vt 0.404 0.286 -vt 0.406 0.296 -vt 0.406 0.301 -vt 0.375 0.344 -vt 0.375 0.301 -vt 0.377 0.296 -vt 0.381 0.292 -vt 0.388 0.291 -vt 0.469 0.296 -vt 0.5 0.296 -vt 0.469 0.291 -vt 0.5 0.291 -vt 0.406 0.258 -vt 0.438 0.258 -vt 0.438 0.267 -vt 0.406 0.267 -vt 0.406 0.274 -vt 0.438 0.274 -vt 0.806 0.557 -vt 0.785 0.569 -vt 0.765 0.557 -vt 0.765 0.533 -vt 0.785 0.521 -vt 0.806 0.533 -vt 0.806 0.557 -vt 0.806 0.533 -vt 0.785 0.521 -vt 0.765 0.533 -vt 0.765 0.557 -vt 0.785 0.569 -vt 0.25 0.781 -vt 0.248 0.793 -vt 0.241 0.803 -vt 0.231 0.81 -vt 0.219 0.813 -vt 0.207 0.81 -vt 0.197 0.803 -vt 0.19 0.793 -vt 0.188 0.781 -vt 0.19 0.769 -vt 0.197 0.759 -vt 0.207 0.752 -vt 0.219 0.75 -vt 0.231 0.752 -vt 0.241 0.759 -vt 0.248 0.769 -vt 0.248 0.793 -vt 0.25 0.781 -vt 0.248 0.769 -vt 0.241 0.759 -vt 0.231 0.752 -vt 0.219 0.75 -vt 0.207 0.752 -vt 0.197 0.759 -vt 0.19 0.769 -vt 0.188 0.781 -vt 0.19 0.793 -vt 0.197 0.803 -vt 0.207 0.81 -vt 0.219 0.813 -vt 0.231 0.81 -vt 0.241 0.803 -vt 0.25 0.781 -vt 0.248 0.793 -vt 0.241 0.803 -vt 0.231 0.81 -vt 0.219 0.813 -vt 0.207 0.81 -vt 0.197 0.803 -vt 0.19 0.793 -vt 0.188 0.781 -vt 0.19 0.769 -vt 0.197 0.759 -vt 0.207 0.752 -vt 0.219 0.75 -vt 0.231 0.752 -vt 0.241 0.759 -vt 0.248 0.769 -vt 0.248 0.793 -vt 0.25 0.781 -vt 0.248 0.769 -vt 0.241 0.759 -vt 0.231 0.752 -vt 0.219 0.75 -vt 0.207 0.752 -vt 0.197 0.759 -vt 0.19 0.769 -vt 0.188 0.781 -vt 0.19 0.793 -vt 0.197 0.803 -vt 0.207 0.81 -vt 0.219 0.813 -vt 0.231 0.81 -vt 0.241 0.803 -vt 0.141 0.953 -vt 0.141 0.969 -vt 0.078 0.969 -vt 0.078 0.953 -vt 0.016 0.969 -vt 0.016 0.953 -vt 0.266 0.953 -vt 0.266 0.969 -vt 0.203 0.969 -vt 0.203 0.953 -vt 0.859 0.984 -vt 0.938 0.984 -vt 0.938 0.906 -vt 0.859 0.906 -vt 0.938 0.859 -vt 0.859 0.859 -vt 0.859 0.781 -vt 0.938 0.781 -vt 0.203 0.922 -vt 0.203 0.938 -vt 0.141 0.938 -vt 0.141 0.922 -vt 0.266 0.922 -vt 0.266 0.938 -vt 0.078 0.922 -vt 0.078 0.938 -vt 0.016 0.938 -vt 0.016 0.922 -vt 0.172 0.547 -vt 0.172 0.625 -vt 0.094 0.625 -vt 0.094 0.547 -vt 0.094 0.625 -vt 0.094 0.703 -vt 0.016 0.703 -vt 0.016 0.625 -vt 0.172 0.625 -vt 0.172 0.703 -vt 0.016 0.625 -vt 0.016 0.547 -vt 0.123 0.918 -vt 0.125 0.906 -vt 0.123 0.894 -vt 0.116 0.884 -vt 0.106 0.877 -vt 0.094 0.875 -vt 0.082 0.877 -vt 0.072 0.884 -vt 0.065 0.894 -vt 0.063 0.906 -vt 0.065 0.918 -vt 0.072 0.928 -vt 0.082 0.935 -vt 0.094 0.938 -vt 0.106 0.935 -vt 0.116 0.928 -vt 0.756 0.546 -vt 0.75 0.547 -vt 0.744 0.546 -vt 0.739 0.542 -vt 0.736 0.537 -vt 0.734 0.531 -vt 0.736 0.525 -vt 0.739 0.52 -vt 0.744 0.517 -vt 0.75 0.516 -vt 0.756 0.517 -vt 0.761 0.52 -vt 0.764 0.525 -vt 0.766 0.531 -vt 0.764 0.537 -vt 0.761 0.542 -vt 0.75 0.547 -vt 0.756 0.546 -vt 0.761 0.542 -vt 0.764 0.537 -vt 0.766 0.531 -vt 0.764 0.525 -vt 0.761 0.52 -vt 0.756 0.517 -vt 0.75 0.516 -vt 0.744 0.517 -vt 0.739 0.52 -vt 0.736 0.525 -vt 0.734 0.531 -vt 0.736 0.537 -vt 0.739 0.542 -vt 0.744 0.546 -vt 0.141 0.953 -vt 0.141 0.969 -vt 0.078 0.969 -vt 0.078 0.953 -vt 0.016 0.969 -vt 0.016 0.953 -vt 0.266 0.953 -vt 0.266 0.969 -vt 0.203 0.969 -vt 0.203 0.953 -vt 0.859 0.984 -vt 0.938 0.984 -vt 0.938 0.906 -vt 0.859 0.906 -vt 0.938 0.859 -vt 0.859 0.859 -vt 0.859 0.781 -vt 0.938 0.781 -vt 0.203 0.922 -vt 0.203 0.938 -vt 0.141 0.938 -vt 0.141 0.922 -vt 0.266 0.922 -vt 0.266 0.938 -vt 0.078 0.922 -vt 0.078 0.938 -vt 0.016 0.938 -vt 0.016 0.922 -vt 0.172 0.547 -vt 0.172 0.625 -vt 0.094 0.625 -vt 0.094 0.547 -vt 0.094 0.625 -vt 0.094 0.703 -vt 0.016 0.703 -vt 0.016 0.625 -vt 0.172 0.625 -vt 0.172 0.703 -vt 0.016 0.625 -vt 0.016 0.547 -vt 0.693 0.655 -vt 0.688 0.656 -vt 0.682 0.655 -vt 0.676 0.652 -vt 0.673 0.647 -vt 0.672 0.641 -vt 0.673 0.635 -vt 0.676 0.63 -vt 0.682 0.626 -vt 0.688 0.625 -vt 0.693 0.626 -vt 0.699 0.63 -vt 0.702 0.635 -vt 0.703 0.641 -vt 0.702 0.647 -vt 0.699 0.652 -vt 0.734 0.656 -vt 0.74 0.655 -vt 0.745 0.652 -vt 0.749 0.647 -vt 0.75 0.641 -vt 0.749 0.635 -vt 0.745 0.63 -vt 0.74 0.626 -vt 0.734 0.625 -vt 0.728 0.626 -vt 0.723 0.63 -vt 0.72 0.635 -vt 0.719 0.641 -vt 0.72 0.647 -vt 0.723 0.652 -vt 0.728 0.655 -vt 0.141 0.953 -vt 0.141 0.969 -vt 0.078 0.969 -vt 0.078 0.953 -vt 0.016 0.969 -vt 0.016 0.953 -vt 0.266 0.953 -vt 0.266 0.969 -vt 0.203 0.969 -vt 0.203 0.953 -vt 0.859 0.984 -vt 0.938 0.984 -vt 0.938 0.906 -vt 0.859 0.906 -vt 0.938 0.859 -vt 0.859 0.859 -vt 0.859 0.781 -vt 0.938 0.781 -vt 0.203 0.922 -vt 0.203 0.938 -vt 0.141 0.938 -vt 0.141 0.922 -vt 0.266 0.922 -vt 0.266 0.938 -vt 0.078 0.922 -vt 0.078 0.938 -vt 0.016 0.938 -vt 0.016 0.922 -vt 0.172 0.547 -vt 0.172 0.625 -vt 0.094 0.625 -vt 0.094 0.547 -vt 0.094 0.625 -vt 0.094 0.703 -vt 0.016 0.703 -vt 0.016 0.625 -vt 0.172 0.625 -vt 0.172 0.703 -vt 0.016 0.625 -vt 0.016 0.547 -vt 0.123 0.918 -vt 0.125 0.906 -vt 0.123 0.894 -vt 0.116 0.884 -vt 0.106 0.877 -vt 0.094 0.875 -vt 0.082 0.877 -vt 0.072 0.884 -vt 0.065 0.894 -vt 0.063 0.906 -vt 0.065 0.918 -vt 0.072 0.928 -vt 0.082 0.935 -vt 0.094 0.938 -vt 0.106 0.935 -vt 0.116 0.928 -vt 0.756 0.546 -vt 0.75 0.547 -vt 0.744 0.546 -vt 0.739 0.542 -vt 0.736 0.537 -vt 0.734 0.531 -vt 0.736 0.525 -vt 0.739 0.52 -vt 0.744 0.517 -vt 0.75 0.516 -vt 0.756 0.517 -vt 0.761 0.52 -vt 0.764 0.525 -vt 0.766 0.531 -vt 0.764 0.537 -vt 0.761 0.542 -vt 0.75 0.547 -vt 0.756 0.546 -vt 0.761 0.542 -vt 0.764 0.537 -vt 0.766 0.531 -vt 0.764 0.525 -vt 0.761 0.52 -vt 0.756 0.517 -vt 0.75 0.516 -vt 0.744 0.517 -vt 0.739 0.52 -vt 0.736 0.525 -vt 0.734 0.531 -vt 0.736 0.537 -vt 0.739 0.542 -vt 0.744 0.546 -vt 0.813 0.563 -vt 0.813 0.625 -vt 0.797 0.625 -vt 0.797 0.563 -vt 0.781 0.625 -vt 0.781 0.563 -vt 0.766 0.625 -vt 0.766 0.563 -vt 0.75 0.625 -vt 0.75 0.563 -vt 0.734 0.625 -vt 0.734 0.563 -vt 0.719 0.625 -vt 0.719 0.563 -vt 0.703 0.625 -vt 0.703 0.563 -vt 0.688 0.625 -vt 0.688 0.563 -vt 0.672 0.625 -vt 0.672 0.563 -vt 0.656 0.625 -vt 0.656 0.563 -vt 0.641 0.625 -vt 0.641 0.563 -vt 0.625 0.625 -vt 0.625 0.563 -vt 0.609 0.625 -vt 0.609 0.563 -vt 0.594 0.625 -vt 0.594 0.563 -vt 0.578 0.625 -vt 0.578 0.563 -vt 0.828 0.563 -vt 0.828 0.625 -vt 0.875 0.719 -vt 0.875 0.672 -vt 0.891 0.672 -vt 0.891 0.719 -vt 0.906 0.672 -vt 0.906 0.719 -vt 0.922 0.672 -vt 0.922 0.719 -vt 0.938 0.672 -vt 0.938 0.719 -vt 0.953 0.672 -vt 0.953 0.719 -vt 0.969 0.672 -vt 0.969 0.719 -vt 0.984 0.672 -vt 0.984 0.719 -vt 0.859 0.672 -vt 0.859 0.625 -vt 0.875 0.625 -vt 0.875 0.672 -vt 0.891 0.625 -vt 0.891 0.672 -vt 0.906 0.625 -vt 0.906 0.672 -vt 0.922 0.625 -vt 0.922 0.672 -vt 0.938 0.625 -vt 0.938 0.672 -vt 0.953 0.625 -vt 0.953 0.672 -vt 0.969 0.625 -vt 0.969 0.672 -vt 0.984 0.625 -vt 0.984 0.672 -vt 0.859 0.719 -vt 0.859 0.672 -vt 0.891 0.628 -vt 0.898 0.626 -vt 0.904 0.622 -vt 0.907 0.616 -vt 0.909 0.609 -vt 0.907 0.603 -vt 0.904 0.597 -vt 0.898 0.593 -vt 0.891 0.591 -vt 0.884 0.593 -vt 0.878 0.597 -vt 0.874 0.603 -vt 0.873 0.609 -vt 0.874 0.616 -vt 0.878 0.622 -vt 0.884 0.626 -vt 0.641 0.703 -vt 0.641 0.453 -vt 0.656 0.453 -vt 0.656 0.703 -vt 0.672 0.453 -vt 0.672 0.703 -vt 0.688 0.453 -vt 0.688 0.703 -vt 0.703 0.453 -vt 0.703 0.703 -vt 0.719 0.453 -vt 0.719 0.703 -vt 0.734 0.453 -vt 0.734 0.703 -vt 0.75 0.453 -vt 0.75 0.703 -vt 0.766 0.453 -vt 0.766 0.703 -vt 0.781 0.453 -vt 0.781 0.703 -vt 0.797 0.453 -vt 0.797 0.703 -vt 0.813 0.453 -vt 0.813 0.703 -vt 0.828 0.453 -vt 0.828 0.703 -vt 0.578 0.703 -vt 0.578 0.453 -vt 0.594 0.453 -vt 0.594 0.703 -vt 0.609 0.453 -vt 0.609 0.703 -vt 0.625 0.453 -vt 0.625 0.703 -vt 0.641 0.703 -vt 0.641 0.453 -vt 0.656 0.453 -vt 0.656 0.703 -vt 0.672 0.453 -vt 0.672 0.703 -vt 0.688 0.453 -vt 0.688 0.703 -vt 0.703 0.453 -vt 0.703 0.703 -vt 0.719 0.453 -vt 0.719 0.703 -vt 0.734 0.453 -vt 0.734 0.703 -vt 0.75 0.453 -vt 0.75 0.703 -vt 0.766 0.453 -vt 0.766 0.703 -vt 0.781 0.453 -vt 0.781 0.703 -vt 0.797 0.453 -vt 0.797 0.703 -vt 0.813 0.453 -vt 0.813 0.703 -vt 0.828 0.453 -vt 0.828 0.703 -vt 0.578 0.703 -vt 0.578 0.453 -vt 0.594 0.453 -vt 0.594 0.703 -vt 0.609 0.453 -vt 0.609 0.703 -vt 0.625 0.453 -vt 0.625 0.703 -vt 0.641 0.703 -vt 0.656 0.703 -vt 0.656 0.453 -vt 0.641 0.453 -vt 0.672 0.703 -vt 0.672 0.453 -vt 0.688 0.703 -vt 0.688 0.453 -vt 0.703 0.703 -vt 0.703 0.453 -vt 0.719 0.703 -vt 0.719 0.453 -vt 0.734 0.703 -vt 0.734 0.453 -vt 0.75 0.703 -vt 0.75 0.453 -vt 0.766 0.703 -vt 0.766 0.453 -vt 0.781 0.703 -vt 0.781 0.453 -vt 0.797 0.703 -vt 0.797 0.453 -vt 0.813 0.703 -vt 0.813 0.453 -vt 0.828 0.703 -vt 0.828 0.453 -vt 0.578 0.703 -vt 0.594 0.703 -vt 0.594 0.453 -vt 0.578 0.453 -vt 0.609 0.703 -vt 0.609 0.453 -vt 0.625 0.703 -vt 0.625 0.453 -vt 0.813 0.672 -vt 0.811 0.666 -vt 0.808 0.661 -vt 0.803 0.657 -vt 0.797 0.656 -vt 0.791 0.657 -vt 0.786 0.661 -vt 0.782 0.666 -vt 0.781 0.672 -vt 0.782 0.678 -vt 0.786 0.683 -vt 0.791 0.686 -vt 0.797 0.688 -vt 0.803 0.686 -vt 0.808 0.683 -vt 0.811 0.678 -vt 0.641 0.703 -vt 0.656 0.703 -vt 0.656 0.453 -vt 0.641 0.453 -vt 0.672 0.703 -vt 0.672 0.453 -vt 0.688 0.703 -vt 0.688 0.453 -vt 0.703 0.703 -vt 0.703 0.453 -vt 0.719 0.703 -vt 0.719 0.453 -vt 0.734 0.703 -vt 0.734 0.453 -vt 0.75 0.703 -vt 0.75 0.453 -vt 0.766 0.703 -vt 0.766 0.453 -vt 0.781 0.703 -vt 0.781 0.453 -vt 0.797 0.703 -vt 0.797 0.453 -vt 0.813 0.703 -vt 0.813 0.453 -vt 0.828 0.703 -vt 0.828 0.453 -vt 0.578 0.703 -vt 0.594 0.703 -vt 0.594 0.453 -vt 0.578 0.453 -vt 0.609 0.703 -vt 0.609 0.453 -vt 0.625 0.703 -vt 0.625 0.453 -vt 0.813 0.672 -vt 0.811 0.666 -vt 0.808 0.661 -vt 0.803 0.657 -vt 0.797 0.656 -vt 0.791 0.657 -vt 0.786 0.661 -vt 0.782 0.666 -vt 0.781 0.672 -vt 0.782 0.678 -vt 0.786 0.683 -vt 0.791 0.686 -vt 0.797 0.688 -vt 0.803 0.686 -vt 0.808 0.683 -vt 0.811 0.678 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.422 0.219 -vt 0.313 0.234 -vt 0.406 0.234 -vt 0.406 0.25 -vt 0.313 0.25 -vt 0.406 0.266 -vt 0.313 0.266 -vt 0.406 0.281 -vt 0.313 0.281 -vt 0.406 0.297 -vt 0.313 0.297 -vt 0.406 0.313 -vt 0.313 0.313 -vt 0.406 0.328 -vt 0.313 0.328 -vt 0.406 0.344 -vt 0.313 0.344 -vt 0.406 0.359 -vt 0.313 0.359 -vt 0.406 0.375 -vt 0.313 0.375 -vt 0.406 0.391 -vt 0.313 0.391 -vt 0.406 0.406 -vt 0.313 0.406 -vt 0.406 0.422 -vt 0.313 0.422 -vt 0.438 0.172 -vt 0.531 0.172 -vt 0.531 0.188 -vt 0.438 0.188 -vt 0.531 0.203 -vt 0.438 0.203 -vt 0.531 0.219 -vt 0.438 0.219 -vt 0.531 0.234 -vt 0.438 0.234 -vt 0.531 0.25 -vt 0.438 0.25 -vt 0.531 0.266 -vt 0.438 0.266 -vt 0.531 0.281 -vt 0.438 0.281 -vt 0.531 0.297 -vt 0.438 0.297 -vt 0.531 0.313 -vt 0.438 0.313 -vt 0.531 0.328 -vt 0.438 0.328 -vt 0.531 0.344 -vt 0.438 0.344 -vt 0.531 0.359 -vt 0.438 0.359 -vt 0.531 0.375 -vt 0.438 0.375 -vt 0.531 0.391 -vt 0.438 0.391 -vt 0.531 0.406 -vt 0.438 0.406 -vt 0.531 0.422 -vt 0.438 0.422 -vt 0.313 0.172 -vt 0.406 0.172 -vt 0.406 0.188 -vt 0.313 0.188 -vt 0.406 0.203 -vt 0.313 0.203 -vt 0.406 0.219 -vt 0.313 0.219 -vt 0.047 0.906 -vt 0.047 0.922 -vt 0.031 0.922 -vt 0.031 0.906 -vt 0.047 0.766 -vt 0.047 0.781 -vt 0.031 0.781 -vt 0.031 0.766 -vt 0.047 0.938 -vt 0.031 0.938 -vt 0.047 0.844 -vt 0.047 0.859 -vt 0.031 0.859 -vt 0.031 0.844 -vt 0.047 0.875 -vt 0.031 0.875 -vt 0.047 0.797 -vt 0.031 0.797 -vt 0.047 0.953 -vt 0.031 0.953 -vt 0.047 0.813 -vt 0.031 0.813 -vt 0.047 0.969 -vt 0.031 0.969 -vt 0.047 0.891 -vt 0.031 0.891 -vt 0.047 0.734 -vt 0.047 0.75 -vt 0.031 0.75 -vt 0.031 0.734 -vt 0.047 0.828 -vt 0.031 0.828 -vt 0.047 0.984 -vt 0.031 0.984 -vt 0.016 0.859 -vt 0.016 0.844 -vt 0.016 0.75 -vt 0.016 0.734 -vt 0.016 0.984 -vt 0.016 0.969 -vt 0.016 0.875 -vt 0.016 0.766 -vt 0.016 0.891 -vt 0.016 0.781 -vt 0.016 0.906 -vt 0.016 0.797 -vt 0.016 0.922 -vt 0.016 0.813 -vt 0.016 0.938 -vt 0.016 0.828 -vt 0.016 0.953 -vt 0.234 0.906 -vt 0.25 0.906 -vt 0.25 0.922 -vt 0.234 0.922 -vt 0.234 0.766 -vt 0.25 0.766 -vt 0.25 0.781 -vt 0.234 0.781 -vt 0.25 0.938 -vt 0.234 0.938 -vt 0.234 0.844 -vt 0.25 0.844 -vt 0.25 0.859 -vt 0.234 0.859 -vt 0.25 0.875 -vt 0.234 0.875 -vt 0.25 0.797 -vt 0.234 0.797 -vt 0.25 0.953 -vt 0.234 0.953 -vt 0.25 0.813 -vt 0.234 0.813 -vt 0.25 0.969 -vt 0.234 0.969 -vt 0.25 0.891 -vt 0.234 0.891 -vt 0.234 0.734 -vt 0.25 0.734 -vt 0.25 0.75 -vt 0.234 0.75 -vt 0.25 0.828 -vt 0.234 0.828 -vt 0.25 0.984 -vt 0.234 0.984 -vt 0.266 0.844 -vt 0.266 0.859 -vt 0.266 0.734 -vt 0.266 0.75 -vt 0.266 0.969 -vt 0.266 0.984 -vt 0.266 0.875 -vt 0.266 0.766 -vt 0.266 0.891 -vt 0.266 0.781 -vt 0.266 0.906 -vt 0.266 0.797 -vt 0.266 0.922 -vt 0.266 0.813 -vt 0.266 0.938 -vt 0.266 0.828 -vt 0.266 0.953 -vt 1 0.141 -vt 0 0.141 -vt 0 0.125 -vt 1 0.125 -vt 0 0.109 -vt 1 0.109 -vt 0 0.094 -vt 1 0.094 -vt 0 0.078 -vt 1 0.078 -vt 0 0.063 -vt 1 0.063 -vt 0 0.047 -vt 1 0.047 -vt 0 0.031 -vt 1 0.031 -vt 0 0.016 -vt 1 0.016 -vt 1 0.141 -vt 0 0.141 -vt 0 0.125 -vt 1 0.125 -vt 0 0.109 -vt 1 0.109 -vt 0 0.094 -vt 1 0.094 -vt 0 0.078 -vt 1 0.078 -vt 0 0.063 -vt 1 0.063 -vt 0 0.047 -vt 1 0.047 -vt 0 0.031 -vt 1 0.031 -vt 0 0.016 -vt 1 0.016 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.641 0.703 -vt 0.641 0.453 -vt 0.656 0.453 -vt 0.656 0.703 -vt 0.672 0.453 -vt 0.672 0.703 -vt 0.688 0.453 -vt 0.688 0.703 -vt 0.703 0.453 -vt 0.703 0.703 -vt 0.719 0.453 -vt 0.719 0.703 -vt 0.734 0.453 -vt 0.734 0.703 -vt 0.75 0.453 -vt 0.75 0.703 -vt 0.766 0.453 -vt 0.766 0.703 -vt 0.781 0.453 -vt 0.781 0.703 -vt 0.797 0.453 -vt 0.797 0.703 -vt 0.813 0.453 -vt 0.813 0.703 -vt 0.828 0.453 -vt 0.828 0.703 -vt 0.578 0.703 -vt 0.578 0.453 -vt 0.594 0.453 -vt 0.594 0.703 -vt 0.609 0.453 -vt 0.609 0.703 -vt 0.811 0.631 -vt 0.813 0.625 -vt 0.811 0.619 -vt 0.808 0.614 -vt 0.803 0.611 -vt 0.797 0.609 -vt 0.791 0.611 -vt 0.786 0.614 -vt 0.782 0.619 -vt 0.781 0.625 -vt 0.782 0.631 -vt 0.786 0.636 -vt 0.791 0.639 -vt 0.797 0.641 -vt 0.803 0.639 -vt 0.808 0.636 -vt 0.625 0.453 -vt 0.625 0.703 -vt 0.813 0.672 -vt 0.811 0.678 -vt 0.808 0.683 -vt 0.803 0.686 -vt 0.797 0.688 -vt 0.791 0.686 -vt 0.786 0.683 -vt 0.782 0.678 -vt 0.781 0.672 -vt 0.782 0.666 -vt 0.786 0.661 -vt 0.791 0.657 -vt 0.797 0.656 -vt 0.803 0.657 -vt 0.808 0.661 -vt 0.811 0.666 -vt 0.156 0.419 -vt 0.156 0.391 -vt 0.172 0.391 -vt 0.172 0.419 -vt 0.172 0.391 -vt 0.156 0.391 -vt 0.156 0.419 -vt 0.172 0.419 -vt 0.028 0.266 -vt 0.025 0.266 -vt 0.025 0.281 -vt 0.028 0.281 -vt 0.156 0.298 -vt 0.156 0.3 -vt 0.172 0.3 -vt 0.172 0.298 -vt 0.025 0.266 -vt 0.025 0.281 -vt 0.022 0.281 -vt 0.022 0.266 -vt 0.022 0.281 -vt 0.022 0.266 -vt 0.156 0.298 -vt 0.156 0.299 -vt 0.172 0.299 -vt 0.172 0.298 -vt 0.138 0.266 -vt 0.134 0.266 -vt 0.134 0.281 -vt 0.138 0.281 -vt 0.172 0.421 -vt 0.156 0.421 -vt 0.156 0.42 -vt 0.172 0.42 -vt 0.156 0.421 -vt 0.172 0.421 -vt 0.172 0.42 -vt 0.156 0.42 -vt 0.028 0.266 -vt 0.028 0.281 -vt 0.156 0.299 -vt 0.172 0.299 -vt 0.128 0.281 -vt 0.128 0.266 -vt 0.131 0.266 -vt 0.131 0.281 -vt 0.019 0.266 -vt 0.019 0.281 -vt 0.156 0.42 -vt 0.172 0.42 -vt 0.128 0.266 -vt 0.125 0.266 -vt 0.125 0.281 -vt 0.128 0.281 -vt 0.156 0.298 -vt 0.172 0.298 -vt 0.131 0.281 -vt 0.131 0.266 -vt 0.031 0.266 -vt 0.031 0.281 -vt 0.156 0.42 -vt 0.172 0.42 -vt 0.019 0.281 -vt 0.019 0.266 -vt 0.134 0.281 -vt 0.134 0.266 -vt 0.138 0.266 -vt 0.138 0.281 -vt 0.172 0.328 -vt 0.156 0.328 -vt 0.156 0.298 -vt 0.156 0.297 -vt 0.172 0.297 -vt 0.172 0.298 -vt 0.156 0.328 -vt 0.156 0.3 -vt 0.172 0.3 -vt 0.172 0.328 -vt 0.156 0.297 -vt 0.172 0.297 -vt 0.016 0.266 -vt 0.016 0.281 -vt 0.016 0.281 -vt 0.016 0.266 -vt 0.141 0.266 -vt 0.141 0.281 -vt 0.156 0.422 -vt 0.172 0.422 -vt 0.375 0.301 -vt 0.406 0.301 -vt 0.406 0.308 -vt 0.375 0.308 -vt 0.375 0.27 -vt 0.406 0.27 -vt 0.406 0.277 -vt 0.375 0.277 -vt 0.375 0.314 -vt 0.406 0.314 -vt 0.406 0.328 -vt 0.375 0.328 -vt 0.375 0.285 -vt 0.406 0.285 -vt 0.406 0.293 -vt 0.375 0.293 -vt 0.375 0.25 -vt 0.406 0.25 -vt 0.406 0.264 -vt 0.375 0.264 -vt 0.375 0.301 -vt 0.406 0.301 -vt 0.406 0.308 -vt 0.375 0.308 -vt 0.375 0.27 -vt 0.406 0.27 -vt 0.406 0.277 -vt 0.375 0.277 -vt 0.375 0.314 -vt 0.406 0.314 -vt 0.406 0.328 -vt 0.375 0.328 -vt 0.375 0.285 -vt 0.406 0.285 -vt 0.406 0.293 -vt 0.375 0.293 -vt 0.375 0.25 -vt 0.406 0.25 -vt 0.406 0.264 -vt 0.375 0.264 -vt 0.375 0.301 -vt 0.406 0.301 -vt 0.406 0.308 -vt 0.375 0.308 -vt 0.375 0.27 -vt 0.406 0.27 -vt 0.406 0.277 -vt 0.375 0.277 -vt 0.375 0.314 -vt 0.406 0.314 -vt 0.406 0.328 -vt 0.375 0.328 -vt 0.375 0.285 -vt 0.406 0.285 -vt 0.406 0.293 -vt 0.375 0.293 -vt 0.375 0.25 -vt 0.406 0.25 -vt 0.406 0.264 -vt 0.375 0.264 -vt 0.375 0.301 -vt 0.406 0.301 -vt 0.406 0.308 -vt 0.375 0.308 -vt 0.375 0.27 -vt 0.406 0.27 -vt 0.406 0.277 -vt 0.375 0.277 -vt 0.375 0.314 -vt 0.406 0.314 -vt 0.406 0.328 -vt 0.375 0.328 -vt 0.375 0.285 -vt 0.406 0.285 -vt 0.406 0.293 -vt 0.375 0.293 -vt 0.375 0.25 -vt 0.406 0.25 -vt 0.406 0.264 -vt 0.375 0.264 -vt 0.641 0.703 -vt 0.641 0.453 -vt 0.656 0.453 -vt 0.656 0.703 -vt 0.672 0.453 -vt 0.672 0.703 -vt 0.688 0.453 -vt 0.688 0.703 -vt 0.703 0.453 -vt 0.703 0.703 -vt 0.719 0.453 -vt 0.719 0.703 -vt 0.734 0.453 -vt 0.734 0.703 -vt 0.75 0.453 -vt 0.75 0.703 -vt 0.766 0.453 -vt 0.766 0.703 -vt 0.781 0.453 -vt 0.781 0.703 -vt 0.797 0.453 -vt 0.797 0.703 -vt 0.813 0.453 -vt 0.813 0.703 -vt 0.828 0.453 -vt 0.828 0.703 -vt 0.578 0.703 -vt 0.578 0.453 -vt 0.594 0.453 -vt 0.594 0.703 -vt 0.609 0.453 -vt 0.609 0.703 -vt 0.811 0.631 -vt 0.813 0.625 -vt 0.811 0.619 -vt 0.808 0.614 -vt 0.803 0.611 -vt 0.797 0.609 -vt 0.791 0.611 -vt 0.786 0.614 -vt 0.782 0.619 -vt 0.781 0.625 -vt 0.782 0.631 -vt 0.786 0.636 -vt 0.791 0.639 -vt 0.797 0.641 -vt 0.803 0.639 -vt 0.808 0.636 -vt 0.625 0.453 -vt 0.625 0.703 -vt 0.813 0.672 -vt 0.811 0.678 -vt 0.808 0.683 -vt 0.803 0.686 -vt 0.797 0.688 -vt 0.791 0.686 -vt 0.786 0.683 -vt 0.782 0.678 -vt 0.781 0.672 -vt 0.782 0.666 -vt 0.786 0.661 -vt 0.791 0.657 -vt 0.797 0.656 -vt 0.803 0.657 -vt 0.808 0.661 -vt 0.811 0.666 -vt 0 0.109 -vt 2 0.109 -vt 2 0.125 -vt 0 0.125 -vt 2 0.141 -vt 0 0.141 -vt 0 0.016 -vt 2 0.016 -vt 2 0.031 -vt 0 0.031 -vt 2 0.047 -vt 0 0.047 -vt 2 0.063 -vt 0 0.063 -vt 2 0.078 -vt 0 0.078 -vt 2 0.094 -vt 0 0.094 -vt 2 0.109 -vt 0 0.109 -vt 2 0.125 -vt 0 0.125 -vt 2 0.141 -vt 0 0.141 -vt 0 0.016 -vt 2 0.016 -vt 2 0.031 -vt 0 0.031 -vt 2 0.047 -vt 0 0.047 -vt 2 0.063 -vt 0 0.063 -vt 2 0.078 -vt 0 0.078 -vt 2 0.094 -vt 0 0.094 -vt 0.75 0.563 -vt 0.75 0.594 -vt 0.734 0.594 -vt 0.734 0.563 -vt 0.719 0.594 -vt 0.719 0.563 -vt 0.703 0.594 -vt 0.703 0.563 -vt 0.688 0.594 -vt 0.688 0.563 -vt 0.672 0.594 -vt 0.672 0.563 -vt 0.656 0.594 -vt 0.656 0.563 -vt 0.641 0.594 -vt 0.641 0.563 -vt 0.766 0.563 -vt 0.766 0.594 -vt 0.594 0.594 -vt 0.594 0.563 -vt 0.609 0.563 -vt 0.609 0.594 -vt 0.625 0.563 -vt 0.625 0.594 -vt 0.641 0.563 -vt 0.641 0.594 -vt 0.656 0.563 -vt 0.656 0.594 -vt 0.672 0.563 -vt 0.672 0.594 -vt 0.688 0.563 -vt 0.688 0.594 -vt 0.703 0.563 -vt 0.703 0.594 -vt 0.719 0.563 -vt 0.719 0.594 -vt 0.734 0.563 -vt 0.734 0.594 -vt 0.75 0.563 -vt 0.75 0.594 -vt 0.766 0.563 -vt 0.766 0.594 -vt 0.781 0.563 -vt 0.781 0.594 -vt 0.797 0.563 -vt 0.797 0.594 -vt 0.813 0.563 -vt 0.813 0.594 -vt 0.828 0.563 -vt 0.828 0.594 -vt 0.578 0.703 -vt 0.578 0.688 -vt 0.594 0.688 -vt 0.594 0.703 -vt 0.578 0.672 -vt 0.594 0.672 -vt 0.813 0.609 -vt 0.828 0.609 -vt 0.828 0.672 -vt 0.813 0.672 -vt 0.578 0.609 -vt 0.578 0.594 -vt 0.594 0.609 -vt 0.813 0.703 -vt 0.813 0.688 -vt 0.828 0.688 -vt 0.828 0.703 -vt 0.797 0.609 -vt 0.797 0.672 -vt 0.797 0.703 -vt 0.797 0.688 -vt 0.781 0.609 -vt 0.781 0.672 -vt 0.781 0.703 -vt 0.781 0.688 -vt 0.766 0.609 -vt 0.766 0.672 -vt 0.766 0.703 -vt 0.766 0.688 -vt 0.75 0.609 -vt 0.75 0.672 -vt 0.75 0.703 -vt 0.75 0.688 -vt 0.734 0.609 -vt 0.734 0.672 -vt 0.734 0.703 -vt 0.734 0.688 -vt 0.719 0.609 -vt 0.719 0.672 -vt 0.719 0.703 -vt 0.719 0.688 -vt 0.703 0.609 -vt 0.703 0.672 -vt 0.703 0.703 -vt 0.703 0.688 -vt 0.688 0.609 -vt 0.688 0.672 -vt 0.688 0.703 -vt 0.688 0.688 -vt 0.672 0.609 -vt 0.672 0.672 -vt 0.672 0.703 -vt 0.672 0.688 -vt 0.656 0.609 -vt 0.656 0.672 -vt 0.656 0.703 -vt 0.656 0.688 -vt 0.641 0.609 -vt 0.641 0.672 -vt 0.641 0.703 -vt 0.641 0.688 -vt 0.625 0.609 -vt 0.625 0.672 -vt 0.625 0.703 -vt 0.625 0.688 -vt 0.609 0.609 -vt 0.609 0.672 -vt 0.609 0.703 -vt 0.609 0.688 -vt 0.578 0.563 -vt 1 0.141 -vt 0 0.141 -vt 0 0.125 -vt 1 0.125 -vt 0 0.109 -vt 1 0.109 -vt 0 0.094 -vt 1 0.094 -vt 0 0.078 -vt 1 0.078 -vt 0 0.063 -vt 1 0.063 -vt 0 0.047 -vt 1 0.047 -vt 0 0.031 -vt 1 0.031 -vt 0 0.016 -vt 1 0.016 -vt 1 0.141 -vt 0 0.141 -vt 0 0.125 -vt 1 0.125 -vt 0 0.109 -vt 1 0.109 -vt 0 0.094 -vt 1 0.094 -vt 0 0.078 -vt 1 0.078 -vt 0 0.063 -vt 1 0.063 -vt 0 0.047 -vt 1 0.047 -vt 0 0.031 -vt 1 0.031 -vt 0 0.016 -vt 1 0.016 -vt 1 0.141 -vt 0 0.141 -vt 0 0.125 -vt 1 0.125 -vt 0 0.109 -vt 1 0.109 -vt 0 0.094 -vt 1 0.094 -vt 0 0.078 -vt 1 0.078 -vt 0 0.063 -vt 1 0.063 -vt 0 0.047 -vt 1 0.047 -vt 0 0.031 -vt 1 0.031 -vt 0 0.016 -vt 1 0.016 -vt 1 0.141 -vt 0 0.141 -vt 0 0.125 -vt 1 0.125 -vt 0 0.109 -vt 1 0.109 -vt 0 0.094 -vt 1 0.094 -vt 0 0.078 -vt 1 0.078 -vt 0 0.063 -vt 1 0.063 -vt 0 0.047 -vt 1 0.047 -vt 0 0.031 -vt 1 0.031 -vt 0 0.016 -vt 1 0.016 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 0.656 0.594 -vt 0.656 0.625 -vt 0.625 0.625 -vt 0.625 0.594 -vt 0.813 0.594 -vt 0.813 0.625 -vt 0.781 0.625 -vt 0.781 0.594 -vt 0.75 0.625 -vt 0.75 0.594 -vt 0.719 0.625 -vt 0.719 0.594 -vt 0.688 0.625 -vt 0.688 0.594 -vt 2 0.141 -vt 0 0.141 -vt 0 0.125 -vt 2 0.125 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0 0.063 -vt 2 0.063 -vt 0 0.047 -vt 2 0.047 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 2 0.141 -vt 0 0.141 -vt 0 0.125 -vt 2 0.125 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0 0.063 -vt 2 0.063 -vt 0 0.047 -vt 2 0.047 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 2 0.141 -vt 0 0.141 -vt 0 0.125 -vt 2 0.125 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0 0.063 -vt 2 0.063 -vt 0 0.047 -vt 2 0.047 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 2 0.141 -vt 0 0.141 -vt 0 0.125 -vt 2 0.125 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0 0.063 -vt 2 0.063 -vt 0 0.047 -vt 2 0.047 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 0.75 0.563 -vt 0.75 0.594 -vt 0.734 0.594 -vt 0.734 0.563 -vt 0.719 0.594 -vt 0.719 0.563 -vt 0.703 0.594 -vt 0.703 0.563 -vt 0.688 0.594 -vt 0.688 0.563 -vt 0.672 0.594 -vt 0.672 0.563 -vt 0.656 0.594 -vt 0.656 0.563 -vt 0.641 0.594 -vt 0.641 0.563 -vt 0.766 0.563 -vt 0.766 0.594 -vt 0 0.047 -vt 2 0.047 -vt 2 0.063 -vt 0 0.063 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 0 0.125 -vt 2 0.125 -vt 2 0.141 -vt 0 0.141 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0 0.063 -vt 2 0.063 -vt 0 0.047 -vt 2 0.047 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 0 0.125 -vt 2 0.125 -vt 2 0.141 -vt 0 0.141 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0.813 0.563 -vt 0.813 0.609 -vt 0.797 0.609 -vt 0.797 0.563 -vt 0.781 0.609 -vt 0.781 0.563 -vt 0.766 0.609 -vt 0.766 0.563 -vt 0.75 0.609 -vt 0.75 0.563 -vt 0.734 0.609 -vt 0.734 0.563 -vt 0.719 0.609 -vt 0.719 0.563 -vt 0.703 0.609 -vt 0.703 0.563 -vt 0.688 0.609 -vt 0.688 0.563 -vt 0.672 0.609 -vt 0.672 0.563 -vt 0.656 0.609 -vt 0.656 0.563 -vt 0.641 0.609 -vt 0.641 0.563 -vt 0.625 0.609 -vt 0.625 0.563 -vt 0.609 0.609 -vt 0.609 0.563 -vt 0.594 0.609 -vt 0.594 0.563 -vt 0.578 0.609 -vt 0.578 0.563 -vt 0.828 0.563 -vt 0.828 0.609 -vt 0.75 0.563 -vt 0.75 0.594 -vt 0.734 0.594 -vt 0.734 0.563 -vt 0.719 0.594 -vt 0.719 0.563 -vt 0.703 0.594 -vt 0.703 0.563 -vt 0.688 0.594 -vt 0.688 0.563 -vt 0.672 0.594 -vt 0.672 0.563 -vt 0.656 0.594 -vt 0.656 0.563 -vt 0.641 0.594 -vt 0.641 0.563 -vt 0.766 0.563 -vt 0.766 0.594 -vt 0.594 0.594 -vt 0.594 0.563 -vt 0.609 0.563 -vt 0.609 0.594 -vt 0.625 0.563 -vt 0.625 0.594 -vt 0.641 0.563 -vt 0.641 0.594 -vt 0.656 0.563 -vt 0.656 0.594 -vt 0.672 0.563 -vt 0.672 0.594 -vt 0.688 0.563 -vt 0.688 0.594 -vt 0.703 0.563 -vt 0.703 0.594 -vt 0.719 0.563 -vt 0.719 0.594 -vt 0.734 0.563 -vt 0.734 0.594 -vt 0.75 0.563 -vt 0.75 0.594 -vt 0.766 0.563 -vt 0.766 0.594 -vt 0.781 0.563 -vt 0.781 0.594 -vt 0.797 0.563 -vt 0.797 0.594 -vt 0.813 0.563 -vt 0.813 0.594 -vt 0.828 0.563 -vt 0.828 0.594 -vt 0.578 0.703 -vt 0.578 0.688 -vt 0.594 0.688 -vt 0.594 0.703 -vt 0.578 0.672 -vt 0.594 0.672 -vt 0.813 0.609 -vt 0.828 0.609 -vt 0.828 0.672 -vt 0.813 0.672 -vt 0.578 0.609 -vt 0.578 0.594 -vt 0.594 0.609 -vt 0.813 0.703 -vt 0.813 0.688 -vt 0.828 0.688 -vt 0.828 0.703 -vt 0.797 0.609 -vt 0.797 0.672 -vt 0.797 0.703 -vt 0.797 0.688 -vt 0.781 0.609 -vt 0.781 0.672 -vt 0.781 0.703 -vt 0.781 0.688 -vt 0.766 0.609 -vt 0.766 0.672 -vt 0.766 0.703 -vt 0.766 0.688 -vt 0.75 0.609 -vt 0.75 0.672 -vt 0.75 0.703 -vt 0.75 0.688 -vt 0.734 0.609 -vt 0.734 0.672 -vt 0.734 0.703 -vt 0.734 0.688 -vt 0.719 0.609 -vt 0.719 0.672 -vt 0.719 0.703 -vt 0.719 0.688 -vt 0.703 0.609 -vt 0.703 0.672 -vt 0.703 0.703 -vt 0.703 0.688 -vt 0.688 0.609 -vt 0.688 0.672 -vt 0.688 0.703 -vt 0.688 0.688 -vt 0.672 0.609 -vt 0.672 0.672 -vt 0.672 0.703 -vt 0.672 0.688 -vt 0.656 0.609 -vt 0.656 0.672 -vt 0.656 0.703 -vt 0.656 0.688 -vt 0.641 0.609 -vt 0.641 0.672 -vt 0.641 0.703 -vt 0.641 0.688 -vt 0.625 0.609 -vt 0.625 0.672 -vt 0.625 0.703 -vt 0.625 0.688 -vt 0.609 0.609 -vt 0.609 0.672 -vt 0.609 0.703 -vt 0.609 0.688 -vt 0.578 0.563 -vt 0.75 0.563 -vt 0.75 0.594 -vt 0.734 0.594 -vt 0.734 0.563 -vt 0.719 0.594 -vt 0.719 0.563 -vt 0.703 0.594 -vt 0.703 0.563 -vt 0.688 0.594 -vt 0.688 0.563 -vt 0.672 0.594 -vt 0.672 0.563 -vt 0.656 0.594 -vt 0.656 0.563 -vt 0.641 0.594 -vt 0.641 0.563 -vt 0.766 0.563 -vt 0.766 0.594 -vt 0 0.047 -vt 2 0.047 -vt 2 0.063 -vt 0 0.063 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 0 0.125 -vt 2 0.125 -vt 2 0.141 -vt 0 0.141 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0 0.063 -vt 2 0.063 -vt 0 0.047 -vt 2 0.047 -vt 0 0.031 -vt 2 0.031 -vt 0 0.016 -vt 2 0.016 -vt 0 0.125 -vt 2 0.125 -vt 2 0.141 -vt 0 0.141 -vt 0 0.109 -vt 2 0.109 -vt 0 0.094 -vt 2 0.094 -vt 0 0.078 -vt 2 0.078 -vt 0.813 0.563 -vt 0.813 0.609 -vt 0.797 0.609 -vt 0.797 0.563 -vt 0.781 0.609 -vt 0.781 0.563 -vt 0.766 0.609 -vt 0.766 0.563 -vt 0.75 0.609 -vt 0.75 0.563 -vt 0.734 0.609 -vt 0.734 0.563 -vt 0.719 0.609 -vt 0.719 0.563 -vt 0.703 0.609 -vt 0.703 0.563 -vt 0.688 0.609 -vt 0.688 0.563 -vt 0.672 0.609 -vt 0.672 0.563 -vt 0.656 0.609 -vt 0.656 0.563 -vt 0.641 0.609 -vt 0.641 0.563 -vt 0.625 0.609 -vt 0.625 0.563 -vt 0.609 0.609 -vt 0.609 0.563 -vt 0.594 0.609 -vt 0.594 0.563 -vt 0.578 0.609 -vt 0.578 0.563 -vt 0.828 0.563 -vt 0.828 0.609 -vn 0 1 0 -vn 1 0 0 -vn 0 -1 0 -vn -1 0 0 -vn 0 0 1 -vn 0 0 -1 -vn 0 -0.707 -0.707 -vn 0 0.707 -0.707 -vn 0 0.707 0.707 -vn 0 -0.707 0.707 -vn 0 -0.991 0.131 -vn 0 -0.924 0.383 -vn 0 -0.793 0.609 -vn 0 -0.609 0.793 -vn 0 -0.383 0.924 -vn 0 -0.13 0.991 -vn 0 0.131 0.991 -vn 0 0.383 0.924 -vn 0 0.609 0.793 -vn 0 0.793 0.609 -vn 0 0.924 0.383 -vn 0 0.991 0.131 -vn 0 -0.609 0.793 -vn 0 0.609 0.793 -vn 0 0.793 0.609 -vn 0 -0.693 -0.721 -vn -0.793 0 0.609 -vn -0.707 0 0.707 -vn 0.707 0 -0.707 -vn -0.13 0 0.991 -vn -0.991 0 0.131 -vn -0.924 0 0.383 -vn -0.991 0 -0.13 -vn -0.924 0 -0.383 -vn -0.793 0 -0.609 -vn -0.609 0 -0.793 -vn -0.383 0 -0.924 -vn -0.13 0 -0.991 -vn -0.707 0 -0.707 -vn -0.969 0 0.246 -vn -0.383 0 0.924 -vn -0.609 0 0.793 -vn -0.793 0 0.609 -vn -0.707 0.707 0 -vn -0.707 -0.707 0 -vn 0.707 0.707 0 -vn 0.707 -0.707 0 -vn 1 0 0.005 -vn -0.707 -0.5 0.5 -vn 1 0.002 -0.005 -vn 0.707 -0.5 -0.5 -vn -1 0.002 0.005 -vn -1 0 -0.006 -vn 0 -0.001 1 -vn 0.028 0 -1 -vn 0.895 0 0.445 -vn 0.094 0 0.996 -vn 1 0 0.023 -vn -0.714 0 0.7 -vn -0.889 0 -0.459 -vn 0.011 0 1 -vn 0.923 0 0.385 -vn -0.998 0 -0.059 -vn -0.017 0 1 -vn -0.851 0 0.525 -vn 0.559 0 0.829 -vn 0.519 0 0.855 -vn -0.734 0 0.68 -vn 0.593 0 0.805 -vn -0.343 0 0.939 -vn -0.937 0 0.351 -vn 0.707 0 0.707 -vn 0.259 0 -0.966 -vn 0.966 0 -0.259 -vn 0.259 0 0.966 -vn 0.966 0 0.259 -vn -0.924 0.383 0 -vn -0.383 0.924 0 -vn 0.383 0.924 0 -vn 0.924 0.383 0 -vn 0.924 -0.383 0 -vn 0.383 -0.924 0 -vn -0.383 -0.924 0 -vn -0.924 -0.383 0 -vn -0.542 0 -0.84 -vn -0.864 0 -0.504 -vn -0.798 0.331 -0.504 -vn -0.501 0.207 -0.84 -vn -0.611 0.611 -0.504 -vn -0.383 0.383 -0.84 -vn -0.33 0.798 -0.504 -vn -0.207 0.501 -0.84 -vn 0 0.864 -0.504 -vn 0 0.542 -0.84 -vn 0.331 0.798 -0.504 -vn 0.207 0.501 -0.84 -vn 0.611 0.611 -0.504 -vn 0.383 0.383 -0.84 -vn 0.798 0.331 -0.504 -vn 0.501 0.207 -0.84 -vn 0.864 0 -0.504 -vn 0.542 0 -0.84 -vn 0.798 -0.33 -0.504 -vn 0.501 -0.207 -0.84 -vn 0.611 -0.611 -0.504 -vn 0.383 -0.383 -0.84 -vn 0.331 -0.798 -0.504 -vn 0.207 -0.501 -0.84 -vn 0 -0.864 -0.504 -vn 0 -0.542 -0.84 -vn -0.33 -0.798 -0.504 -vn -0.207 -0.501 -0.84 -vn -0.611 -0.611 -0.504 -vn -0.383 -0.383 -0.84 -vn -0.798 -0.33 -0.504 -vn -0.501 -0.207 -0.84 -vn 0.383 0 0.924 -vn 0.924 0 0.383 -vn 0.924 0 -0.383 -vn 0.383 0 -0.924 -vn 0 0.746 0.666 -vn 0.286 0.689 0.666 -vn 0.528 0.528 0.666 -vn 0.689 0.286 0.666 -vn 0.746 0 0.666 -vn 0.689 -0.286 0.666 -vn 0.528 -0.528 0.666 -vn 0.286 -0.689 0.666 -vn 0 -0.746 0.666 -vn -0.285 -0.689 0.666 -vn -0.528 -0.528 0.666 -vn -0.689 -0.285 0.666 -vn -0.746 0 0.666 -vn -0.689 0.286 0.666 -vn -0.528 0.528 0.666 -vn -0.285 0.689 0.666 -vn 0.714 0.686 -0.142 -vn 0.714 -0.686 -0.142 -vn 0.673 -0.686 -0.278 -vn 0.673 0.686 -0.278 -vn -0.278 0.686 -0.672 -vn -0.278 -0.686 -0.672 -vn -0.404 -0.686 -0.605 -vn -0.404 0.686 -0.605 -vn -0.515 0.686 0.515 -vn -0.515 -0.686 0.515 -vn -0.404 -0.686 0.605 -vn -0.404 0.686 0.605 -vn 0.605 0.686 0.404 -vn 0.605 -0.686 0.404 -vn 0.673 -0.686 0.279 -vn 0.673 0.686 0.279 -vn 0.279 0.686 -0.672 -vn 0.279 -0.686 -0.672 -vn 0.142 -0.686 -0.714 -vn 0.142 0.686 -0.714 -vn -0.728 0.686 0 -vn -0.728 -0.686 0 -vn -0.714 -0.686 0.142 -vn -0.714 0.686 0.142 -vn -0.714 0.686 -0.142 -vn -0.714 -0.686 -0.142 -vn 0.142 0.686 0.714 -vn 0.142 -0.686 0.714 -vn 0.279 -0.686 0.673 -vn 0.279 0.686 0.673 -vn 0.605 -0.686 -0.404 -vn 0.605 0.686 -0.404 -vn -0.515 -0.686 -0.515 -vn -0.515 0.686 -0.515 -vn -0.278 -0.686 0.673 -vn -0.278 0.686 0.673 -vn 0.714 -0.686 0.142 -vn 0.714 0.686 0.142 -vn 0 -0.686 -0.728 -vn 0 0.686 -0.728 -vn -0.672 -0.686 0.279 -vn -0.672 0.686 0.279 -vn 0.404 -0.686 0.605 -vn 0.404 0.686 0.605 -vn 0.515 -0.686 -0.515 -vn 0.515 0.686 -0.515 -vn -0.605 -0.686 -0.404 -vn -0.605 0.686 -0.404 -vn -0.142 -0.686 0.714 -vn -0.142 0.686 0.714 -vn 0.728 -0.686 0 -vn 0.728 0.686 0 -vn -0.142 -0.686 -0.714 -vn -0.142 0.686 -0.714 -vn -0.605 -0.686 0.404 -vn -0.605 0.686 0.404 -vn 0.515 -0.686 0.515 -vn 0.515 0.686 0.515 -vn 0.404 -0.686 -0.605 -vn 0.404 0.686 -0.605 -vn -0.672 -0.686 -0.278 -vn -0.672 0.686 -0.278 -vn 0 -0.686 0.728 -vn 0 0.686 0.728 -vn 0 -0.73 -0.684 -vn 0 0.73 -0.684 -vn 0 -0.73 0.684 -vn 0 0.73 0.684 -vn 0.351 -0.4 -0.847 -vn 0 -0.4 -0.916 -vn 0 -0.366 -0.93 -vn 0.356 -0.366 -0.86 -vn -0.648 -0.4 0.648 -vn -0.351 -0.4 0.847 -vn -0.356 -0.366 0.86 -vn -0.658 -0.366 0.658 -vn -0.351 -0.4 -0.847 -vn -0.356 -0.366 -0.86 -vn 0.847 -0.4 0.351 -vn 0.917 -0.4 0 -vn 0.931 -0.366 0 -vn 0.86 -0.366 0.356 -vn 0.847 -0.4 -0.351 -vn 0.86 -0.366 -0.356 -vn 0 -0.4 0.917 -vn 0 -0.366 0.931 -vn -0.648 -0.4 -0.648 -vn -0.658 -0.366 -0.658 -vn 0.351 -0.4 0.847 -vn 0.356 -0.366 0.86 -vn -0.847 -0.4 -0.351 -vn -0.86 -0.366 -0.356 -vn 0.648 -0.4 -0.648 -vn 0.658 -0.366 -0.658 -vn -0.916 -0.4 0 -vn -0.847 -0.4 0.351 -vn -0.86 -0.366 0.356 -vn -0.93 -0.366 0 -vn 0.648 -0.4 0.648 -vn 0.658 -0.366 0.658 -vn 0.746 0.666 0 -vn 0.689 0.666 0.286 -vn -0.689 0.666 0.286 -vn -0.746 0.666 0 -vn -0.689 0.666 -0.285 -vn 0.689 0.666 -0.285 -vn -0.528 0.666 0.528 -vn 0.528 0.666 -0.528 -vn -0.285 0.666 0.689 -vn 0.286 0.666 -0.689 -vn 0 0.666 0.746 -vn 0 0.666 -0.746 -vn 0.286 0.666 0.689 -vn -0.285 0.666 -0.689 -vn 0.528 0.666 0.528 -vn -0.528 0.666 -0.528 -vn 0.351 0.4 -0.847 -vn 0.356 0.366 -0.86 -vn 0 0.366 -0.93 -vn 0 0.4 -0.916 -vn -0.648 0.4 0.648 -vn -0.658 0.366 0.658 -vn -0.356 0.366 0.86 -vn -0.351 0.4 0.847 -vn -0.356 0.366 -0.86 -vn -0.351 0.4 -0.847 -vn 0.847 0.4 0.351 -vn 0.86 0.366 0.356 -vn 0.931 0.366 0 -vn 0.917 0.4 0 -vn 0.86 0.366 -0.356 -vn 0.847 0.4 -0.351 -vn 0 0.366 0.931 -vn 0 0.4 0.917 -vn -0.658 0.366 -0.658 -vn -0.648 0.4 -0.648 -vn 0.356 0.366 0.86 -vn 0.351 0.4 0.847 -vn -0.86 0.366 -0.356 -vn -0.847 0.4 -0.351 -vn 0.658 0.366 -0.658 -vn 0.648 0.4 -0.648 -vn -0.916 0.4 0 -vn -0.93 0.366 0 -vn -0.86 0.366 0.356 -vn -0.847 0.4 0.351 -vn 0.658 0.366 0.658 -vn 0.648 0.4 0.648 -vn 0.689 -0.666 0.286 -vn 0.746 -0.666 0 -vn -0.746 -0.666 0 -vn -0.689 -0.666 0.286 -vn -0.689 -0.666 -0.285 -vn 0.689 -0.666 -0.285 -vn -0.528 -0.666 0.528 -vn 0.528 -0.666 -0.528 -vn -0.285 -0.666 0.689 -vn 0.286 -0.666 -0.689 -vn 0 -0.666 0.746 -vn 0 -0.666 -0.746 -vn 0.286 -0.666 0.689 -vn -0.285 -0.666 -0.689 -vn 0.528 -0.666 0.528 -vn -0.528 -0.666 -0.528 -vn -0.689 -0.666 0.286 -vn -0.286 -0.666 0.689 -vn -0.286 0.666 0.689 -vn 0.286 0.666 0.689 -vn 0.689 0.666 0.286 -vn 0 0.61 0.792 -vn -0.686 0.61 0.396 -vn -0.866 0 0.5 -vn -0.686 0.61 -0.396 -vn -0.866 0 -0.5 -vn 0 0.61 -0.792 -vn 0.686 0.61 -0.396 -vn 0.866 0 -0.5 -vn 0.686 0.61 0.396 -vn 0.866 0 0.5 -vn 0 -0.61 0.792 -vn 0.686 -0.61 0.396 -vn 0.686 -0.61 -0.396 -vn 0 -0.61 -0.792 -vn -0.686 -0.61 -0.396 -vn -0.686 -0.61 0.396 -vn 0.666 0.746 0 -vn -0.666 0.746 0 -vn -0.666 0.689 0.286 -vn 0.666 0.689 0.286 -vn -0.666 0.528 0.528 -vn 0.666 0.528 0.528 -vn -0.666 0.286 0.689 -vn 0.666 0.286 0.689 -vn -0.666 0 0.746 -vn 0.666 0 0.746 -vn -0.666 -0.286 0.689 -vn 0.666 -0.286 0.689 -vn -0.666 -0.528 0.528 -vn 0.666 -0.528 0.528 -vn -0.666 -0.689 0.286 -vn 0.666 -0.689 0.286 -vn -0.666 -0.746 0 -vn 0.666 -0.746 0 -vn -0.666 -0.689 -0.286 -vn 0.666 -0.689 -0.285 -vn -0.666 -0.528 -0.528 -vn 0.666 -0.528 -0.528 -vn -0.666 -0.285 -0.689 -vn 0.666 -0.285 -0.689 -vn -0.666 0 -0.746 -vn 0.666 0 -0.746 -vn -0.666 0.286 -0.689 -vn 0.666 0.286 -0.689 -vn -0.666 0.528 -0.528 -vn 0.666 0.528 -0.528 -vn -0.666 0.689 -0.285 -vn 0.666 0.689 -0.285 -vn 0.096 0.728 -0.679 -vn 0.302 0.302 -0.904 -vn 0.131 0.991 0 -vn 0.302 -0.301 -0.904 -vn 0.096 -0.728 -0.679 -vn 0.131 -0.991 0 -vn -0.656 0.379 -0.653 -vn -0.728 0.096 -0.679 -vn -0.991 0.131 0 -vn -0.866 0.5 0 -vn -0.379 -0.656 -0.653 -vn -0.096 -0.728 -0.679 -vn -0.13 -0.991 0 -vn -0.5 -0.866 0 -vn 0.728 0.096 -0.679 -vn 0.991 0.131 0 -vn 0.991 -0.13 0 -vn 0.728 -0.096 -0.679 -vn -0.991 -0.13 0 -vn -0.728 -0.096 -0.679 -vn 0.5 0.866 0 -vn 0.379 0.656 -0.653 -vn 0.379 -0.656 -0.653 -vn 0.5 -0.866 0 -vn 0.656 0.379 -0.653 -vn 0.866 0.5 0 -vn -0.096 0.728 -0.679 -vn -0.13 0.991 0 -vn 0.866 -0.5 0 -vn 0.656 -0.379 -0.653 -vn -0.656 -0.379 -0.653 -vn -0.866 -0.5 0 -vn -0.379 0.656 -0.653 -vn -0.5 0.866 0 -vn -0.301 -0.301 -0.904 -vn -0.301 0.302 -0.904 -vn -0.666 -0.414 -0.62 -vn 0.666 -0.415 -0.62 -vn 0.666 -0.62 -0.415 -vn -0.666 -0.62 -0.415 -vn -0.666 0.62 -0.415 -vn 0.666 0.62 -0.415 -vn 0.666 0.415 -0.62 -vn -0.666 0.415 -0.62 -vn -0.666 -0.732 -0.146 -vn 0.666 -0.732 -0.146 -vn -0.666 0.146 -0.732 -vn 0.666 0.146 -0.732 -vn 0.666 -0.145 -0.732 -vn -0.666 -0.145 -0.732 -vn 0.666 0.732 -0.146 -vn -0.666 0.732 -0.146 -vn 0.666 -0.146 -0.732 -vn -0.666 -0.689 0.286 -vn -0.689 0.666 0.286 -vn 0.286 -0.666 0.689 -vn 0.689 -0.666 -0.286 -vn 0.689 0.666 -0.286 -vn -0.286 -0.666 -0.689 -vn -0.286 0.666 -0.689 -vn -0.689 -0.666 -0.286 -vn -0.79 0.613 0 -vn -0.73 0.613 0.302 -vn -0.559 0.613 0.559 -vn -0.302 0.613 0.73 -vn 0 0.613 0.79 -vn 0.302 0.613 0.73 -vn 0.559 0.613 0.559 -vn 0.73 0.613 0.302 -vn 0.79 0.613 0 -vn 0.73 0.613 -0.302 -vn 0.559 0.613 -0.559 -vn 0.302 0.613 -0.73 -vn 0 0.613 -0.79 -vn -0.302 0.613 -0.73 -vn -0.559 0.613 -0.559 -vn -0.73 0.613 -0.302 -vn -0.73 -0.613 -0.302 -vn -0.79 -0.613 0 -vn -0.666 -0.693 -0.276 -vn -0.721 -0.693 0 -vn -0.51 0.693 -0.51 -vn -0.666 0.693 -0.276 -vn -0.51 -0.693 -0.51 -vn -0.721 0.693 0 -vn -0.559 -0.613 -0.559 -vn -0.276 0.693 -0.666 -vn -0.276 -0.693 -0.666 -vn -0.302 -0.613 -0.73 -vn 0 0.693 -0.721 -vn 0 -0.693 -0.721 -vn 0 -0.613 -0.79 -vn 0.276 0.693 -0.666 -vn 0.276 -0.693 -0.666 -vn 0.302 -0.613 -0.73 -vn 0.51 0.693 -0.51 -vn 0.51 -0.693 -0.51 -vn 0.559 -0.613 -0.559 -vn 0.666 0.693 -0.276 -vn 0.666 -0.693 -0.276 -vn 0.73 -0.613 -0.302 -vn 0.721 0.693 0 -vn 0.721 -0.693 0 -vn 0.79 -0.613 0 -vn 0.666 0.693 0.276 -vn 0.666 -0.693 0.276 -vn 0.73 -0.613 0.302 -vn 0.51 0.693 0.51 -vn 0.51 -0.693 0.51 -vn 0.559 -0.613 0.559 -vn 0.276 0.693 0.666 -vn 0.276 -0.693 0.666 -vn 0.302 -0.613 0.73 -vn 0 0.693 0.721 -vn 0 -0.693 0.721 -vn 0 -0.613 0.79 -vn -0.276 0.693 0.666 -vn -0.276 -0.693 0.666 -vn -0.302 -0.613 0.73 -vn -0.51 0.693 0.51 -vn -0.51 -0.693 0.51 -vn -0.559 -0.613 0.559 -vn -0.666 0.693 0.276 -vn -0.666 -0.693 0.276 -vn -0.73 -0.613 0.302 -vn 0.689 -0.666 0.286 -vn -0.689 0.666 -0.286 -vn -0.61 0 0.792 -vn -0.61 -0.686 0.396 -vn 0 -0.866 0.5 -vn -0.61 -0.686 -0.396 -vn 0 -0.866 -0.5 -vn -0.61 0 -0.792 -vn -0.61 0.686 -0.396 -vn 0 0.866 -0.5 -vn -0.61 0.686 0.396 -vn 0 0.866 0.5 -vn 0.61 0 0.792 -vn 0.61 0.686 0.396 -vn 0.61 0.686 -0.396 -vn 0.61 0 -0.792 -vn 0.61 -0.686 -0.396 -vn 0.61 -0.686 0.396 -vn 0.666 0.286 0.689 -vn -0.666 0.689 0.286 -vn 0.666 0.689 -0.286 -vn -0.666 0.689 -0.286 -vn 0.666 0.286 -0.689 -vn -0.666 0.286 -0.689 -vn 0.666 -0.286 -0.689 -vn -0.666 -0.689 -0.285 -vn 0.666 -0.285 0.689 -vn -0.666 -0.285 0.689 -vn -0.666 0.286 0.689 -vn 0.666 0.689 0.286 -vn -0.286 -0.689 0.666 -vn 0.689 -0.285 0.666 -vn -0.746 0 -0.666 -vn -0.689 0.286 0.666 -vn -0.689 0.286 -0.666 -vn -0.528 0.528 -0.666 -vn -0.285 0.689 -0.666 -vn 0 0.746 -0.666 -vn 0.286 0.689 -0.666 -vn 0.528 0.528 -0.666 -vn 0.689 0.286 -0.666 -vn 0.746 0 -0.666 -vn 0.689 -0.285 -0.666 -vn 0.528 -0.528 -0.666 -vn 0.286 -0.689 0.666 -vn 0.286 -0.689 -0.666 -vn 0 -0.746 -0.666 -vn -0.286 -0.689 -0.666 -vn -0.528 -0.528 -0.666 -vn -0.689 -0.286 0.666 -vn -0.689 -0.285 -0.666 -vn 0.613 0.79 0 -vn 0.613 0.73 0.302 -vn 0.613 0.559 0.559 -vn 0.613 0.302 0.73 -vn 0.613 0 0.79 -vn 0.613 -0.302 0.73 -vn 0.613 -0.559 0.559 -vn 0.613 -0.73 0.302 -vn 0.613 -0.79 0 -vn 0.613 -0.73 -0.302 -vn 0.613 -0.559 -0.559 -vn 0.613 -0.302 -0.73 -vn 0.613 0 -0.79 -vn 0.613 0.302 -0.73 -vn 0.613 0.559 -0.559 -vn 0.613 0.73 -0.302 -vn -0.613 0.73 -0.302 -vn -0.613 0.79 0 -vn -0.693 0.666 -0.276 -vn -0.693 0.721 0 -vn 0.693 0.51 -0.51 -vn 0.693 0.666 -0.276 -vn -0.693 0.51 -0.51 -vn 0.693 0.721 0 -vn -0.613 0.559 -0.559 -vn 0.693 0.276 -0.666 -vn -0.693 0.276 -0.666 -vn -0.613 0.302 -0.73 -vn 0.693 0 -0.721 -vn -0.693 0 -0.721 -vn -0.613 0 -0.79 -vn 0.693 -0.276 -0.666 -vn -0.693 -0.276 -0.666 -vn -0.613 -0.302 -0.73 -vn 0.693 -0.51 -0.51 -vn -0.693 -0.51 -0.51 -vn -0.613 -0.559 -0.559 -vn 0.693 -0.666 -0.276 -vn -0.693 -0.666 -0.276 -vn -0.613 -0.73 -0.302 -vn 0.693 -0.721 0 -vn -0.693 -0.721 0 -vn -0.613 -0.79 0 -vn 0.693 -0.666 0.276 -vn -0.693 -0.666 0.276 -vn -0.613 -0.73 0.302 -vn 0.693 -0.51 0.51 -vn -0.693 -0.51 0.51 -vn -0.613 -0.559 0.559 -vn 0.693 -0.276 0.666 -vn -0.693 -0.276 0.666 -vn -0.613 -0.302 0.73 -vn 0.693 0 0.721 -vn -0.693 0 0.721 -vn -0.613 0 0.79 -vn 0.693 0.276 0.666 -vn -0.693 0.276 0.666 -vn -0.613 0.302 0.73 -vn 0.693 0.51 0.51 -vn -0.693 0.51 0.51 -vn -0.613 0.559 0.559 -vn 0.693 0.666 0.276 -vn -0.693 0.666 0.276 -vn -0.613 0.73 0.302 -g 1 -s off -f 65/1/1 67/2/1 68/3/1 66/4/1 -f 67/5/2 71/6/2 72/7/2 68/8/2 -f 71/9/3 69/10/3 70/11/3 72/7/3 -f 69/12/4 65/13/4 66/4/4 70/14/4 -f 67/15/5 65/16/5 69/17/5 71/18/5 -f 72/19/6 70/20/6 66/21/6 68/22/6 -f 75/23/1 76/24/1 80/25/1 79/26/1 -f 73/27/3 74/28/3 78/29/3 77/30/3 -f 77/31/4 78/32/4 76/33/4 75/34/4 -f 82/35/1 86/36/1 83/37/1 81/38/1 -f 79/39/6 82/40/6 81/41/6 73/42/6 77/43/6 75/44/6 -f 74/45/5 87/46/5 88/47/5 80/48/5 76/49/5 78/50/5 -f 79/51/4 80/52/4 88/53/4 85/54/4 86/55/4 82/56/4 -f 73/57/2 81/58/2 83/59/2 84/60/2 87/61/2 74/62/2 -f 84/63/1 85/64/1 88/65/1 87/66/1 -f 85/67/5 84/68/5 83/69/5 86/70/5 -f 89/71/2 90/72/2 92/73/2 91/74/2 -f 91/75/3 92/76/3 96/77/3 95/78/3 -f 95/79/4 96/80/4 94/81/4 93/82/4 -f 93/83/1 94/84/1 90/85/1 89/86/1 -f 91/87/6 95/88/6 93/89/6 89/90/6 -f 96/91/5 92/92/5 90/93/5 94/94/5 -f 129/95/3 130/96/3 132/97/3 131/98/3 -f 131/99/4 132/100/4 136/101/4 135/102/4 -f 135/103/1 136/104/1 134/105/1 133/106/1 -f 133/107/2 134/108/2 130/109/2 129/110/2 -f 131/111/6 135/112/6 133/113/6 129/114/6 -f 136/115/5 132/116/5 130/117/5 134/118/5 -f 142/119/3 138/120/3 137/121/3 141/122/3 -f 137/123/6 139/124/6 143/125/6 141/126/6 -f 143/127/2 144/128/2 142/129/2 141/130/2 -f 142/131/5 144/132/5 140/133/5 138/134/5 -f 140/135/1 144/136/1 143/137/1 139/138/1 -f 151/139/3 145/140/3 147/141/3 155/142/3 -f 155/142/5 147/141/5 150/143/5 156/144/5 -f 156/145/1 150/146/1 148/147/1 157/148/1 -f 157/148/6 148/147/6 145/140/6 151/139/6 -f 159/149/6 154/150/6 160/151/6 158/152/6 -f 149/153/1 153/154/1 154/150/1 159/149/1 -f 146/155/5 152/156/5 153/157/5 149/158/5 -f 158/152/3 160/151/3 152/156/3 146/155/3 -f 153/159/1 156/160/1 157/161/1 154/162/1 -f 152/163/5 155/164/5 156/165/5 153/166/5 -f 160/167/3 151/168/3 155/164/3 152/163/3 -f 154/162/6 157/161/6 151/169/6 160/170/6 -f 163/171/4 164/172/4 168/173/4 167/174/4 -f 165/175/2 166/176/2 162/177/2 161/178/2 -f 163/179/6 167/180/6 165/175/6 161/178/6 -f 168/173/5 164/172/5 162/177/5 166/176/5 -f 203/181/4 204/182/4 208/183/4 207/184/4 -f 205/185/2 206/186/2 202/187/2 201/188/2 -f 203/189/6 207/190/6 205/185/6 201/188/6 -f 208/183/5 204/182/5 202/187/5 206/186/5 -f 211/191/4 212/192/4 216/193/4 215/194/4 -f 215/195/1 216/196/1 214/197/1 213/198/1 -f 213/199/2 214/200/2 210/201/2 209/202/2 -f 211/203/6 215/204/6 213/205/6 209/206/6 -f 216/207/5 212/208/5 210/209/5 214/210/5 -f 217/211/3 218/212/3 220/213/3 219/214/3 -f 219/215/4 220/216/4 224/217/4 223/218/4 -f 223/219/1 224/220/1 222/221/1 221/222/1 -f 221/223/2 222/224/2 218/225/2 217/226/2 -f 219/214/6 223/227/6 221/228/6 217/229/6 -f 224/230/5 220/231/5 218/232/5 222/221/5 -f 226/233/6 227/234/6 285/235/6 284/236/6 -f 227/234/7 228/237/7 286/238/7 285/235/7 -f 228/237/6 281/239/6 338/240/6 286/238/6 -f 281/241/8 229/242/8 287/243/8 338/244/8 -f 229/242/1 230/245/1 288/246/1 287/243/1 -f 230/245/9 231/247/9 289/248/9 288/246/9 -f 231/249/5 232/250/5 290/251/5 289/252/5 -f 232/253/10 233/254/10 291/255/10 290/256/10 -f 262/257/5 263/258/5 320/259/5 319/260/5 -f 234/261/10 235/262/10 293/263/10 292/264/10 -f 235/265/5 236/266/5 294/267/5 293/268/5 -f 236/269/9 237/270/9 295/271/9 294/272/9 -f 237/273/5 238/274/5 296/275/5 295/276/5 -f 238/277/10 239/278/10 297/279/10 296/280/10 -f 252/281/1 253/282/1 311/283/1 310/284/1 -f 240/285/11 241/286/11 299/287/11 298/288/11 -f 241/286/12 242/289/12 300/290/12 299/287/12 -f 242/289/13 243/291/13 301/292/13 300/290/13 -f 243/291/14 244/293/14 302/294/14 301/292/14 -f 244/293/15 245/295/15 303/296/15 302/294/15 -f 245/295/16 246/297/16 304/298/16 303/296/16 -f 246/297/17 247/299/17 305/300/17 304/298/17 -f 247/299/18 248/301/18 306/302/18 305/300/18 -f 248/301/19 249/303/19 307/304/19 306/302/19 -f 249/303/20 250/305/20 308/306/20 307/304/20 -f 250/305/21 251/307/21 309/308/21 308/306/21 -f 251/307/22 252/309/22 310/310/22 309/308/22 -f 253/282/9 254/311/9 312/312/9 311/283/9 -f 264/313/3 265/314/3 322/315/3 321/316/3 -f 255/317/9 256/318/9 340/319/9 313/320/9 -f 256/321/1 257/322/1 314/323/1 340/324/1 -f 257/322/8 258/325/8 315/326/8 314/323/8 -f 258/327/6 259/328/6 316/329/6 315/330/6 -f 259/331/7 260/332/7 317/333/7 316/334/7 -f 260/332/3 261/335/3 318/336/3 317/333/3 -f 261/335/10 262/337/10 319/260/10 318/336/10 -f 254/338/5 255/339/5 313/340/5 312/341/5 -f 263/342/10 264/313/10 321/316/10 320/259/10 -f 265/343/11 266/344/11 323/345/11 322/346/11 -f 266/344/12 267/347/12 324/348/12 323/345/12 -f 267/347/13 268/349/13 325/350/13 324/348/13 -f 268/349/23 269/351/23 326/352/23 325/350/23 -f 269/351/15 270/353/15 327/354/15 326/352/15 -f 270/353/16 271/355/16 328/356/16 327/354/16 -f 271/355/17 272/357/17 329/358/17 328/356/17 -f 272/357/18 273/359/18 330/360/18 329/358/18 -f 273/359/24 274/361/24 331/362/24 330/360/24 -f 274/361/25 275/363/25 332/364/25 331/362/25 -f 275/363/21 276/365/21 333/366/21 332/364/21 -f 276/365/22 277/367/22 334/368/22 333/366/22 -f 239/278/3 240/369/3 298/370/3 297/279/3 -f 278/371/9 279/372/9 336/373/9 335/374/9 -f 282/375/26 280/376/26 337/377/26 339/378/26 -f 279/379/5 234/380/5 292/381/5 336/382/5 -f 233/254/3 282/375/3 339/378/3 291/255/3 -f 280/383/6 225/384/6 283/385/6 337/386/6 -f 225/384/8 226/233/8 284/236/8 283/385/8 -f 277/387/1 278/371/1 335/374/1 334/388/1 -f 259/389/4 258/390/4 257/391/4 233/392/4 232/393/4 231/394/4 230/395/4 260/396/4 -f 294/397/2 304/398/2 284/399/2 285/400/2 328/401/2 293/402/2 -f 229/403/4 281/404/4 228/405/4 227/406/4 262/407/4 261/408/4 260/396/4 230/395/4 -f 236/409/4 235/410/4 271/411/4 227/406/4 226/412/4 246/413/4 -f 317/414/2 318/415/2 319/416/2 285/400/2 286/417/2 338/418/2 287/419/2 288/420/2 -f 322/421/2 323/422/2 324/423/2 325/424/2 326/425/2 327/426/2 328/401/2 285/400/2 319/416/2 320/427/2 321/428/2 -f 249/429/4 248/430/4 247/431/4 246/413/4 226/412/4 255/432/4 254/433/4 253/434/4 252/435/4 251/436/4 250/437/4 -f 332/438/2 333/439/2 334/440/2 335/441/2 336/442/2 292/443/2 293/402/2 328/401/2 329/444/2 330/445/2 331/446/2 -f 312/447/2 313/448/2 284/399/2 304/398/2 305/449/2 306/450/2 307/451/2 308/452/2 309/453/2 310/454/2 311/455/2 -f 279/456/4 278/457/4 277/458/4 276/459/4 275/460/4 274/461/4 273/462/4 272/463/4 271/411/4 235/410/4 234/464/4 -f 314/465/2 315/466/2 316/467/2 317/414/2 288/420/2 289/468/2 290/469/2 291/470/2 -f 340/471/2 314/465/2 291/470/2 339/472/2 337/473/2 283/474/2 284/399/2 313/448/2 -f 280/475/4 282/476/4 233/392/4 257/391/4 256/477/4 255/432/4 226/412/4 225/478/4 -f 242/479/4 241/480/4 240/481/4 239/482/4 238/483/4 237/484/4 236/409/4 246/413/4 245/485/4 244/486/4 243/487/4 -f 262/407/4 227/406/4 271/411/4 270/488/4 269/489/4 268/490/4 267/491/4 266/492/4 265/493/4 264/494/4 263/495/4 -f 302/496/2 303/497/2 304/398/2 294/397/2 295/498/2 296/499/2 297/500/2 298/501/2 299/502/2 300/503/2 301/504/2 -f 351/505/3 363/506/3 350/507/3 349/508/3 362/509/3 348/510/3 361/511/3 347/512/3 360/513/3 346/514/3 345/515/3 359/516/3 352/517/3 365/518/3 364/519/3 -f 358/520/27 359/521/27 378/522/27 377/523/27 -f 364/524/5 365/525/5 380/526/5 379/527/5 -f 352/528/6 341/529/6 366/530/6 381/531/6 -f 342/532/6 353/533/6 373/534/6 367/535/6 -f 354/536/4 343/537/4 382/538/4 374/539/4 -f 343/537/28 355/540/28 383/541/28 382/538/28 -f 355/542/5 344/543/5 384/544/5 383/545/5 -f 341/529/29 342/532/29 367/535/29 366/530/29 -f 344/546/30 356/547/30 375/548/30 384/549/30 -f 345/550/31 346/551/31 369/552/31 368/553/31 -f 359/521/32 345/550/32 368/553/32 378/522/32 -f 349/554/6 350/555/6 371/556/6 370/557/6 -f 346/551/33 360/558/33 385/559/33 369/552/33 -f 360/558/34 347/560/34 386/561/34 385/559/34 -f 347/560/35 361/562/35 387/563/35 386/561/35 -f 361/562/36 348/564/36 388/565/36 387/563/36 -f 348/564/37 362/566/37 389/567/37 388/565/37 -f 362/566/38 349/568/38 370/569/38 389/567/38 -f 350/570/39 363/571/39 390/572/39 371/573/39 -f 363/571/4 351/574/4 372/575/4 390/572/4 -f 351/574/40 364/576/40 379/577/40 372/575/40 -f 353/578/39 354/536/39 374/539/39 373/579/39 -f 356/547/41 357/580/41 376/581/41 375/548/41 -f 357/580/42 358/520/42 377/523/42 376/581/42 -f 375/582/1 376/583/1 377/584/1 378/585/1 381/586/1 366/587/1 383/588/1 384/589/1 -f 341/590/3 352/517/3 359/516/3 358/591/3 357/592/3 356/593/3 344/594/3 355/595/3 -f 382/596/1 383/588/1 366/587/1 367/597/1 373/598/1 374/599/1 -f 353/600/3 342/601/3 341/590/3 355/595/3 343/602/3 354/603/3 -f 368/604/1 369/605/1 385/606/1 386/607/1 387/608/1 388/609/1 389/610/1 370/611/1 371/612/1 390/613/1 372/614/1 379/615/1 380/616/1 381/586/1 378/585/1 -f 401/617/3 413/618/3 400/619/3 399/620/3 412/621/3 398/622/3 411/623/3 397/624/3 410/625/3 396/626/3 395/627/3 409/628/3 402/629/3 415/630/3 414/631/3 -f 408/632/43 409/633/43 428/634/43 427/635/43 -f 414/636/5 415/637/5 430/638/5 429/639/5 -f 402/640/6 391/641/6 416/642/6 431/643/6 -f 392/644/6 403/645/6 423/646/6 417/647/6 -f 404/648/4 393/649/4 432/650/4 424/651/4 -f 393/649/28 405/652/28 433/653/28 432/650/28 -f 405/654/5 394/655/5 434/656/5 433/657/5 -f 391/641/29 392/644/29 417/647/29 416/642/29 -f 394/658/30 406/659/30 425/660/30 434/661/30 -f 395/662/31 396/663/31 419/664/31 418/665/31 -f 409/633/32 395/662/32 418/665/32 428/634/32 -f 399/666/6 400/667/6 421/668/6 420/669/6 -f 396/663/33 410/670/33 435/671/33 419/664/33 -f 410/670/34 397/672/34 436/673/34 435/671/34 -f 397/672/35 411/674/35 437/675/35 436/673/35 -f 411/674/36 398/676/36 438/677/36 437/675/36 -f 398/676/37 412/678/37 439/679/37 438/677/37 -f 412/678/38 399/680/38 420/681/38 439/679/38 -f 400/682/39 413/683/39 440/684/39 421/685/39 -f 413/683/4 401/686/4 422/687/4 440/684/4 -f 401/686/40 414/688/40 429/689/40 422/687/40 -f 403/690/39 404/648/39 424/651/39 423/691/39 -f 406/659/41 407/692/41 426/693/41 425/660/41 -f 407/692/42 408/632/42 427/635/42 426/693/42 -f 425/694/1 426/695/1 427/696/1 428/697/1 431/698/1 416/699/1 433/700/1 434/701/1 -f 391/702/3 402/629/3 409/628/3 408/703/3 407/704/3 406/705/3 394/706/3 405/707/3 -f 432/708/1 433/700/1 416/699/1 417/709/1 423/710/1 424/711/1 -f 403/712/3 392/713/3 391/702/3 405/707/3 393/714/3 404/715/3 -f 418/716/1 419/717/1 435/718/1 436/719/1 437/720/1 438/721/1 439/722/1 420/723/1 421/724/1 440/725/1 422/726/1 429/727/1 430/728/1 431/698/1 428/697/1 -f 509/729/2 503/730/2 512/731/2 513/732/2 -f 497/733/6 496/734/6 495/735/6 494/736/6 493/737/6 490/738/6 511/739/6 513/740/6 512/741/6 502/742/6 500/743/6 499/744/6 498/745/6 -f 489/746/3 492/747/3 491/748/3 490/749/3 493/750/3 483/751/3 475/752/3 -f 502/753/44 501/754/44 488/755/44 474/756/44 476/757/44 500/758/44 -f 507/759/7 492/760/7 489/761/7 484/762/7 485/763/7 -f 473/764/45 484/765/45 489/746/45 475/752/45 -f 477/766/46 478/767/46 498/768/46 499/769/46 -f 498/768/2 478/767/2 479/770/2 497/771/2 -f 485/763/7 486/772/7 505/773/7 506/774/7 -f 504/775/6 505/773/6 486/772/6 487/776/6 -f 483/777/47 493/778/47 494/779/47 482/780/47 -f 501/754/1 502/753/1 512/781/1 503/782/1 -f 492/783/29 507/784/29 508/785/29 510/786/29 491/787/29 -f 480/788/46 481/789/46 495/790/46 496/791/46 -f 510/786/2 511/792/2 490/793/2 491/787/2 -f 503/794/48 509/795/48 506/796/48 -f 500/758/1 476/757/1 477/797/1 499/798/1 -f 497/799/1 479/800/1 480/801/1 496/802/1 -f 509/803/6 508/804/6 507/759/6 485/763/6 506/774/6 -f 495/790/2 481/789/2 482/780/2 494/779/2 -f 504/805/2 503/806/2 506/807/2 505/808/2 -f 508/809/1 509/810/1 513/811/1 511/812/1 510/813/1 -f 482/814/5 481/815/5 480/816/5 479/817/5 478/818/5 477/819/5 476/820/5 474/821/5 473/822/5 475/823/5 483/824/5 -f 501/754/8 503/782/8 504/825/8 487/826/8 488/755/8 -f 519/827/49 522/828/49 516/829/49 514/830/49 -f 528/831/5 527/832/5 526/833/5 525/834/5 524/835/5 523/836/5 518/837/5 516/838/5 522/839/5 529/840/5 -f 534/841/29 544/842/29 545/843/29 535/844/29 -f 526/845/46 527/846/46 539/847/46 540/848/46 -f 541/849/1 525/850/1 526/851/1 540/852/1 -f 529/853/47 532/854/47 538/855/47 528/856/47 -f 531/857/3 534/858/3 535/859/3 533/860/3 532/854/3 529/853/3 522/861/3 519/862/3 520/863/3 -f 544/864/6 534/865/6 531/866/6 536/867/6 -f 523/868/44 530/869/44 517/870/44 518/871/44 -f 543/872/46 537/873/46 530/874/46 523/875/46 524/876/46 -f 536/877/29 531/878/29 520/879/29 521/880/29 537/873/29 543/872/29 -f 545/843/2 546/881/2 533/882/2 535/844/2 -f 539/847/2 527/846/2 528/883/2 538/884/2 -f 521/885/6 515/886/6 517/887/6 530/888/6 537/889/6 -f 544/890/1 536/891/1 542/892/1 546/893/1 545/894/1 -f 519/862/45 514/895/45 515/896/45 521/897/45 520/863/45 -f 543/872/50 524/876/50 525/898/50 541/899/50 542/900/50 536/877/50 -f 541/901/6 540/902/6 539/903/6 538/904/6 532/905/6 533/906/6 546/907/6 542/908/6 -f 584/909/51 587/910/51 581/911/51 579/912/51 -f 593/913/6 592/914/6 591/915/6 590/916/6 589/917/6 588/918/6 583/919/6 581/920/6 587/921/6 594/922/6 -f 599/923/28 609/924/28 610/925/28 600/926/28 -f 591/927/44 592/928/44 604/929/44 605/930/44 -f 606/931/1 590/932/1 591/933/1 605/934/1 -f 594/935/45 597/936/45 603/937/45 593/938/45 -f 596/939/3 599/940/3 600/941/3 598/942/3 597/936/3 594/935/3 587/943/3 584/944/3 585/945/3 -f 609/946/5 599/947/5 596/948/5 601/949/5 -f 588/950/46 595/951/46 582/952/46 583/953/46 -f 608/954/44 602/955/44 595/956/44 588/957/44 589/958/44 -f 601/959/28 596/960/28 585/961/28 586/962/28 602/955/28 608/954/28 -f 610/925/4 611/963/4 598/964/4 600/926/4 -f 604/929/4 592/928/4 593/965/4 603/966/4 -f 586/967/5 580/968/5 582/969/5 595/970/5 602/971/5 -f 609/972/1 601/973/1 607/974/1 611/975/1 610/976/1 -f 584/944/47 579/977/47 580/978/47 586/979/47 585/945/47 -f 608/954/52 589/958/52 590/980/52 606/981/52 607/982/52 601/959/52 -f 606/983/5 605/984/5 604/985/5 603/986/5 597/987/5 598/988/5 611/989/5 607/990/5 -f 648/991/4 642/992/4 651/993/4 652/994/4 -f 636/995/5 635/996/5 634/997/5 633/998/5 632/999/5 629/1000/5 650/1001/5 652/1002/5 651/1003/5 641/1004/5 639/1005/5 638/1006/5 637/1007/5 -f 628/1008/3 631/1009/3 630/1010/3 629/1011/3 632/1012/3 622/1013/3 614/1014/3 -f 641/1015/46 640/1016/46 627/1017/46 613/1018/46 615/1019/46 639/1020/46 -f 646/1021/10 631/1022/10 628/1023/10 623/1024/10 624/1025/10 -f 612/1026/47 623/1027/47 628/1008/47 614/1014/47 -f 616/1028/44 617/1029/44 637/1030/44 638/1031/44 -f 637/1030/4 617/1029/4 618/1032/4 636/1033/4 -f 624/1025/10 625/1034/10 644/1035/10 645/1036/10 -f 643/1037/5 644/1035/5 625/1034/5 626/1038/5 -f 622/1039/45 632/1040/45 633/1041/45 621/1042/45 -f 640/1016/1 641/1015/1 651/1043/1 642/1044/1 -f 631/1045/28 646/1046/28 647/1047/28 649/1048/28 630/1049/28 -f 619/1050/44 620/1051/44 634/1052/44 635/1053/44 -f 649/1048/4 650/1054/4 629/1055/4 630/1049/4 -f 642/1056/53 648/1057/53 645/1058/53 -f 639/1020/1 615/1019/1 616/1059/1 638/1060/1 -f 636/1061/1 618/1062/1 619/1063/1 635/1064/1 -f 648/1065/54 647/1066/54 646/1021/54 624/1025/54 645/1036/54 -f 634/1052/4 620/1051/4 621/1042/4 633/1041/4 -f 643/1067/4 642/1068/4 645/1069/4 644/1070/4 -f 647/1071/1 648/1072/1 652/1073/1 650/1074/1 649/1075/1 -f 621/1076/6 620/1077/6 619/1078/6 618/1079/6 617/1080/6 616/1081/6 615/1082/6 613/1083/6 612/1084/6 614/1085/6 622/1086/6 -f 640/1016/9 642/1044/9 643/1087/9 626/1088/9 627/1017/9 -f 656/1089/1 654/1090/1 716/1091/1 714/1092/1 712/1093/1 710/1094/1 708/1095/1 706/1096/1 704/1097/1 702/1098/1 876/1099/1 884/1100/1 900/1101/1 856/1102/1 848/1103/1 852/1104/1 796/1105/1 792/1106/1 788/1107/1 908/1108/1 904/1109/1 832/1110/1 888/1111/1 896/1112/1 840/1113/1 827/1114/1 835/1115/1 670/1116/1 668/1117/1 666/1118/1 664/1119/1 662/1120/1 660/1121/1 658/1122/1 -f 717/1123/3 719/1124/3 720/1125/3 721/1126/3 722/1127/3 723/1128/3 724/1129/3 725/1130/3 833/1131/3 825/1132/3 837/1133/3 893/1134/3 885/1135/3 829/1136/3 901/1137/3 905/1138/3 785/1139/3 789/1140/3 793/1141/3 849/1142/3 845/1143/3 853/1144/3 897/1145/3 881/1146/3 873/1147/3 741/1148/3 742/1149/3 743/1150/3 744/1151/3 745/1152/3 746/1153/3 747/1154/3 748/1155/3 718/1156/3 -f 653/1157/3 655/1158/3 657/1159/3 659/1160/3 661/1161/3 663/1162/3 665/1163/3 667/1164/3 669/1165/3 836/1166/3 828/1167/3 839/1168/3 895/1169/3 887/1170/3 831/1171/3 903/1172/3 907/1173/3 786/1174/3 790/1175/3 794/1176/3 850/1177/3 846/1178/3 854/1179/3 899/1180/3 883/1181/3 875/1182/3 701/1183/3 703/1184/3 705/1185/3 707/1186/3 709/1187/3 711/1188/3 713/1189/3 715/1190/3 -f 749/1191/1 780/1192/1 779/1193/1 778/1194/1 777/1195/1 776/1196/1 775/1197/1 774/1198/1 773/1199/1 874/1200/1 882/1201/1 898/1202/1 855/1203/1 847/1204/1 851/1205/1 795/1206/1 791/1207/1 787/1208/1 906/1209/1 902/1210/1 830/1211/1 886/1212/1 894/1213/1 838/1214/1 826/1215/1 834/1216/1 757/1217/1 756/1218/1 755/1219/1 754/1220/1 753/1221/1 752/1222/1 751/1223/1 750/1224/1 -f 757/1217/1 834/1216/1 858/1225/1 870/1226/1 782/1227/1 866/1228/1 862/1229/1 890/1230/1 842/1231/1 818/1232/1 814/1233/1 822/1234/1 878/1235/1 810/1236/1 802/1237/1 798/1238/1 806/1239/1 874/1200/1 773/1199/1 772/1240/1 771/1241/1 770/1242/1 769/1243/1 768/1244/1 767/1245/1 766/1246/1 765/1247/1 764/1248/1 763/1249/1 762/1250/1 761/1251/1 760/1252/1 759/1253/1 758/1254/1 -f 670/1116/1 835/1115/1 859/1255/1 871/1256/1 783/1257/1 867/1258/1 863/1259/1 891/1260/1 843/1261/1 819/1262/1 815/1263/1 823/1264/1 879/1265/1 811/1266/1 803/1267/1 799/1268/1 807/1269/1 876/1099/1 702/1098/1 700/1270/1 698/1271/1 696/1272/1 694/1273/1 692/1274/1 690/1275/1 688/1276/1 686/1277/1 684/1278/1 682/1279/1 680/1280/1 678/1281/1 676/1282/1 674/1283/1 672/1284/1 -f 741/1148/3 873/1147/3 805/1285/3 797/1286/3 801/1287/3 809/1288/3 877/1289/3 821/1290/3 813/1291/3 817/1292/3 841/1293/3 889/1294/3 861/1295/3 865/1296/3 781/1297/3 869/1298/3 857/1299/3 833/1131/3 725/1130/3 726/1300/3 727/1301/3 728/1302/3 729/1303/3 730/1304/3 731/1305/3 732/1306/3 733/1307/3 734/1308/3 735/1309/3 736/1310/3 737/1311/3 738/1312/3 739/1313/3 740/1314/3 -f 701/1183/3 875/1182/3 808/1315/3 800/1316/3 804/1317/3 812/1318/3 880/1319/3 824/1320/3 816/1321/3 820/1322/3 844/1323/3 892/1324/3 864/1325/3 868/1326/3 784/1327/3 872/1328/3 860/1329/3 836/1166/3 669/1165/3 671/1330/3 673/1331/3 675/1332/3 677/1333/3 679/1334/3 681/1335/3 683/1336/3 685/1337/3 687/1338/3 689/1339/3 691/1340/3 693/1341/3 695/1342/3 697/1343/3 699/1344/3 -f 926/1345/55 930/1346/55 929/1347/55 925/1348/55 -f 928/1349/56 927/1350/56 1036/1351/56 1033/1352/56 -f 1055/1353/57 1058/1354/57 1051/1355/57 1054/1356/57 -f 925/1357/58 929/1347/58 927/1350/58 928/1349/58 -f 1055/1358/3 1056/1359/3 926/1360/3 925/1361/3 928/1362/3 1060/1363/3 1057/1364/3 1058/1365/3 -f 1070/1366/59 1063/1367/59 1062/1368/59 1071/1369/59 -f 930/1370/60 926/1371/60 1018/1372/60 1019/1373/60 -f 1026/1374/61 1027/1375/61 1030/1376/61 1031/1377/61 -f 1023/1378/62 1056/1379/62 1053/1380/62 1022/1381/62 -f 1059/1382/63 1040/1383/63 1037/1384/63 1050/1385/63 -f 1048/1386/64 1045/1387/64 1044/1388/64 1041/1389/64 -f 962/1390/1 947/1391/1 948/1392/1 949/1393/1 950/1394/1 951/1395/1 952/1396/1 953/1397/1 954/1398/1 955/1399/1 956/1400/1 957/1401/1 958/1402/1 959/1403/1 960/1404/1 961/1405/1 -f 980/1406/55 979/1407/55 983/1408/55 984/1409/55 -f 982/1410/56 1042/1411/56 1043/1412/56 981/1413/56 -f 1068/1414/57 1065/1415/57 1064/1416/57 1069/1417/57 -f 979/1418/58 982/1410/58 981/1413/58 983/1408/58 -f 984/1419/60 1028/1420/60 1025/1421/60 980/1422/60 -f 1032/1423/62 1029/1424/62 1066/1425/62 1067/1426/62 -f 1072/1427/63 1061/1428/63 1046/1429/63 1047/1430/63 -f 1016/1431/3 1015/1432/3 1014/1433/3 1013/1434/3 1012/1435/3 1011/1436/3 1010/1437/3 1009/1438/3 1008/1439/3 1007/1440/3 1006/1441/3 1005/1442/3 1004/1443/3 1003/1444/3 1002/1445/3 1001/1446/3 -f 1019/1373/65 1018/1372/65 1017/1447/65 1020/1448/65 -f 1023/1378/66 1022/1381/66 1021/1449/66 1024/1450/66 -f 1027/1375/65 1026/1374/65 1025/1451/65 1028/1452/65 -f 1031/1377/66 1030/1376/66 1029/1453/66 1032/1454/66 -f 1017/1455/61 1024/1456/61 1021/1457/61 1020/1458/61 -f 1033/1352/67 1036/1351/67 1035/1459/67 1034/1460/67 -f 1039/1461/68 1038/1462/68 1037/1463/68 1040/1464/68 -f 1041/1389/67 1044/1388/67 1043/1465/67 1042/1466/67 -f 1047/1430/68 1046/1429/68 1045/1467/68 1048/1468/68 -f 1039/1461/64 1034/1469/64 1035/1470/64 1038/1462/64 -f 1055/1353/69 1054/1356/69 1053/1471/69 1056/1472/69 -f 1057/1473/70 1052/1474/70 1051/1355/70 1058/1354/70 -f 1059/1382/71 1050/1385/71 1049/1475/71 1060/1476/71 -f 1067/1426/69 1066/1425/69 1065/1477/69 1068/1478/69 -f 1069/1417/70 1064/1416/70 1063/1367/70 1070/1366/70 -f 1071/1369/71 1062/1368/71 1061/1479/71 1072/1480/71 -f 1057/1473/59 1060/1481/59 1049/1482/59 1052/1474/59 -f 1036/1483/1 927/1484/1 1049/1485/1 -f 930/1486/1 1019/1487/1 1053/1488/1 -f 1021/1489/1 1022/1490/1 1053/1488/1 1019/1487/1 1020/1491/1 -f 1072/1492/1 1047/1493/1 1048/1494/1 1041/1495/1 1042/1496/1 1071/1497/1 -f 982/1498/1 979/1499/1 980/1500/1 1067/1501/1 1068/1502/1 1069/1503/1 1070/1504/1 1071/1497/1 -f 1051/1505/1 1052/1506/1 1049/1485/1 927/1484/1 929/1507/1 930/1486/1 1053/1488/1 1054/1508/1 -f 928/1362/3 1033/1509/3 1060/1363/3 -f 1059/1510/3 1060/1363/3 1033/1509/3 1034/1511/3 1039/1512/3 1040/1513/3 -f 1023/1514/3 1024/1515/3 1017/1516/3 1018/1517/3 1056/1359/3 -f 1018/1517/3 926/1360/3 1056/1359/3 -f 981/1518/3 1043/1519/3 1062/1520/3 -f 1062/1520/3 1043/1519/3 1044/1521/3 1045/1522/3 1046/1523/3 1061/1524/3 -f 1028/1525/3 984/1526/3 1066/1527/3 -f 1066/1527/3 1029/1528/3 1030/1529/3 1027/1530/3 1028/1525/3 -f 1050/1531/1 1037/1532/1 1038/1533/1 1035/1534/1 1036/1483/1 1049/1485/1 -f 980/1500/1 1025/1535/1 1067/1501/1 -f 1031/1536/1 1032/1537/1 1067/1501/1 1025/1535/1 1026/1538/1 -f 1042/1496/1 982/1498/1 1071/1497/1 -f 1063/1539/3 1064/1540/3 1065/1541/3 1066/1527/3 984/1526/3 983/1542/3 981/1518/3 1062/1520/3 -f 1073/1543/1 1075/1544/1 1077/1545/1 1079/1546/1 1081/1547/1 1083/1548/1 1085/1549/1 1087/1550/1 1089/1551/1 1091/1552/1 1093/1553/1 1095/1554/1 1097/1555/1 1099/1556/1 1101/1557/1 1103/1558/1 -f 1076/1559/3 1074/1560/3 1104/1561/3 1102/1562/3 1100/1563/3 1098/1564/3 1096/1565/3 1094/1566/3 1092/1567/3 1090/1568/3 1088/1569/3 1086/1570/3 1084/1571/3 1082/1572/3 1080/1573/3 1078/1574/3 -f 1108/1575/1 1106/1576/1 1116/1577/1 1114/1578/1 1112/1579/1 1110/1580/1 -f 1120/1581/3 1118/1582/3 1128/1583/3 1126/1584/3 1124/1585/3 1122/1586/3 -f 1132/1587/3 1130/1588/3 1140/1589/3 1138/1590/3 1136/1591/3 1134/1592/3 -f 1144/1593/3 1142/1594/3 1152/1595/3 1150/1596/3 1148/1597/3 1146/1598/3 -f 1156/1599/1 1154/1600/1 1164/1601/1 1162/1602/1 1160/1603/1 1158/1604/1 -f 1168/1605/1 1166/1606/1 1176/1607/1 1174/1608/1 1172/1609/1 1170/1610/1 -f 1187/1611/5 1183/1612/5 1181/1613/5 1185/1614/5 -f 1180/1615/1 1188/1616/1 1186/1617/1 1179/1618/1 -f 1177/1619/3 1182/1620/3 1184/1621/3 1178/1622/3 -f 1178/1623/6 1180/1624/6 1179/1618/6 1177/1619/6 -f 1178/1625/4 1184/1626/4 1188/1616/4 1180/1615/4 -f 1181/1613/10 1183/1612/10 1184/1627/10 1182/1628/10 -f 1183/1612/28 1187/1611/28 1188/1616/28 1184/1626/28 -f 1187/1611/9 1185/1614/9 1186/1629/9 1188/1630/9 -f 1185/1614/72 1181/1613/72 1182/1628/72 1186/1629/72 -f 1179/1618/2 1186/1617/2 1182/1620/2 1177/1619/2 -f 1221/1631/6 1222/1632/6 1223/1633/6 1224/1634/6 -f 1225/1635/5 1228/1636/5 1227/1637/5 1226/1638/5 -f 1223/1639/1 1227/1640/1 1228/1641/1 1224/1642/1 -f 1221/1643/3 1225/1644/3 1226/1645/3 1222/1646/3 -f 1224/1647/2 1228/1648/2 1225/1649/2 1221/1650/2 -f 1222/1651/4 1226/1652/4 1227/1653/4 1223/1654/4 -f 1232/1655/2 1234/1656/2 1236/1657/2 1231/1658/2 -f 1240/1659/6 1238/1660/6 1245/1661/6 1247/1662/6 1248/1663/6 1246/1664/6 1273/1665/6 1275/1666/6 1276/1667/6 1274/1668/6 1233/1669/6 1234/1670/6 1285/1671/6 1287/1672/6 1288/1673/6 1286/1674/6 1237/1675/6 1239/1676/6 -f 1229/1677/4 1230/1678/4 1235/1679/4 1233/1680/4 -f 1233/1669/6 1235/1681/6 1236/1682/6 1234/1670/6 -f 1262/1683/6 1253/1684/6 1255/1685/6 1256/1686/6 1254/1687/6 1289/1688/6 1291/1689/6 1292/1690/6 1290/1691/6 1236/1682/6 1235/1681/6 1269/1692/6 1271/1693/6 1272/1694/6 1270/1695/6 1261/1696/6 1263/1697/6 1264/1698/6 -f 1304/1699/1 1303/1700/1 1307/1701/1 1308/1702/1 -f 1307/1703/5 1306/1704/5 1305/1705/5 1308/1706/5 -f 1302/1707/3 1301/1708/3 1305/1709/3 1306/1710/3 -f 1301/1711/2 1304/1712/2 1308/1713/2 1305/1714/2 -f 1303/1715/4 1302/1716/4 1306/1717/4 1307/1718/4 -f 1312/1719/2 1310/1720/2 1316/1721/2 1314/1722/2 1331/1723/2 1332/1724/2 1327/1725/2 1328/1726/2 1323/1727/2 1324/1728/2 1319/1729/2 1320/1730/2 -f 1309/1731/4 1311/1732/4 1317/1733/4 1318/1734/4 1321/1735/4 1322/1736/4 1325/1737/4 1326/1738/4 1329/1739/4 1330/1740/4 1313/1741/4 1315/1742/4 -f 1336/1743/2 1334/1744/2 1340/1745/2 1338/1746/2 1355/1747/2 1356/1748/2 1351/1749/2 1352/1750/2 1347/1751/2 1348/1752/2 1343/1753/2 1344/1754/2 -f 1333/1755/4 1335/1756/4 1341/1757/4 1342/1758/4 1345/1759/4 1346/1760/4 1349/1761/4 1350/1762/4 1353/1763/4 1354/1764/4 1337/1765/4 1339/1766/4 -f 1360/1767/2 1358/1768/2 1364/1769/2 1362/1770/2 1379/1771/2 1380/1772/2 1375/1773/2 1376/1774/2 1371/1775/2 1372/1776/2 1367/1777/2 1368/1778/2 -f 1357/1779/4 1359/1780/4 1365/1781/4 1366/1782/4 1369/1783/4 1370/1784/4 1373/1785/4 1374/1786/4 1377/1787/4 1378/1788/4 1361/1789/4 1363/1790/4 -f 1384/1791/2 1382/1792/2 1388/1793/2 1386/1794/2 1403/1795/2 1404/1796/2 1399/1797/2 1400/1798/2 1395/1799/2 1396/1800/2 1391/1801/2 1392/1802/2 -f 1381/1803/4 1383/1804/4 1389/1805/4 1390/1806/4 1393/1807/4 1394/1808/4 1397/1809/4 1398/1810/4 1401/1811/4 1402/1812/4 1385/1813/4 1387/1814/4 -f 1405/1815/3 1406/1816/3 1408/1817/3 1407/1818/3 -f 1407/1819/6 1408/1820/6 1412/1821/6 1411/1822/6 -f 1411/1822/1 1412/1821/1 1410/1823/1 1409/1824/1 -f 1407/1825/2 1411/1826/2 1409/1824/2 1405/1815/2 -f 1412/1821/4 1408/1820/4 1406/1827/4 1410/1828/4 -f 1445/1829/1 1447/1830/1 1449/1831/1 1451/1832/1 1453/1833/1 1455/1834/1 1457/1835/1 1459/1836/1 1461/1837/1 1463/1838/1 1465/1839/1 1467/1840/1 1469/1841/1 1471/1842/1 1473/1843/1 1475/1844/1 -f 1448/1845/3 1446/1846/3 1476/1847/3 1474/1848/3 1472/1849/3 1470/1850/3 1468/1851/3 1466/1852/3 1464/1853/3 1462/1854/3 1460/1855/3 1458/1856/3 1456/1857/3 1454/1858/3 1452/1859/3 1450/1860/3 -f 1486/1861/2 1480/1862/2 1477/1863/2 1484/1864/2 -f 1483/1865/2 1485/1866/2 1487/1867/2 1488/1868/2 -f 1478/1869/6 1481/1870/6 1485/1871/6 1483/1872/6 -f 1487/1873/6 1486/1874/6 1484/1875/6 1488/1876/6 -f 1478/1877/4 1479/1878/4 1482/1879/4 1481/1880/4 -f 1482/1881/5 1479/1882/5 1477/1883/5 1480/1884/5 -f 1477/1885/3 1479/1886/3 1488/1887/3 1484/1888/3 -f 1478/1889/3 1483/1890/3 1488/1887/3 1479/1886/3 -f 1481/1891/1 1482/1892/1 1487/1893/1 1485/1894/1 -f 1480/1895/1 1486/1896/1 1487/1893/1 1482/1892/1 -f 1511/1897/6 1489/1898/6 1491/1899/6 1515/1900/6 -f 1515/1900/4 1491/1899/4 1494/1901/4 1516/1902/4 -f 1516/1903/5 1494/1904/5 1492/1905/5 1517/1906/5 -f 1517/1906/2 1492/1905/2 1489/1898/2 1511/1897/2 -f 1490/1907/1 1493/1908/1 1519/1909/1 1518/1910/1 -f 1494/1911/3 1491/1912/3 1489/1913/3 1492/1914/3 -f 1519/1915/2 1514/1916/2 1520/1917/2 1518/1918/2 -f 1493/1919/5 1513/1920/5 1514/1916/5 1519/1915/5 -f 1490/1921/4 1512/1922/4 1513/1923/4 1493/1924/4 -f 1518/1918/6 1520/1917/6 1512/1922/6 1490/1921/6 -f 1513/1925/5 1516/1926/5 1517/1927/5 1514/1928/5 -f 1512/1929/4 1515/1930/4 1516/1931/4 1513/1932/4 -f 1520/1933/6 1511/1934/6 1515/1930/6 1512/1929/6 -f 1514/1928/2 1517/1927/2 1511/1935/2 1520/1936/2 -f 1523/1937/1 1524/1938/1 1528/1939/1 1527/1940/1 -f 1525/1941/3 1526/1942/3 1522/1943/3 1521/1944/3 -f 1523/1945/6 1527/1946/6 1525/1941/6 1521/1944/6 -f 1528/1939/5 1524/1938/5 1522/1943/5 1526/1942/5 -f 1531/1947/1 1532/1948/1 1536/1949/1 1535/1950/1 -f 1533/1951/3 1534/1952/3 1530/1953/3 1529/1954/3 -f 1531/1955/6 1535/1956/6 1533/1951/6 1529/1954/6 -f 1536/1949/5 1532/1948/5 1530/1953/5 1534/1952/5 -f 1540/1957/3 1538/1958/3 1568/1959/3 1566/1960/3 1564/1961/3 1562/1962/3 1560/1963/3 1558/1964/3 1556/1965/3 1554/1966/3 1552/1967/3 1550/1968/3 1548/1969/3 1546/1970/3 1544/1971/3 1542/1972/3 -f 1537/1973/1 1539/1974/1 1541/1975/1 1543/1976/1 1545/1977/1 1547/1978/1 1549/1979/1 1551/1980/1 1553/1981/1 1555/1982/1 1557/1983/1 1559/1984/1 1561/1985/1 1563/1986/1 1565/1987/1 1567/1988/1 -f 1633/1989/1 1635/1990/1 1637/1991/1 1639/1992/1 1641/1993/1 1643/1994/1 1645/1995/1 1647/1996/1 1649/1997/1 1651/1998/1 1653/1999/1 1655/2000/1 1657/2001/1 1659/2002/1 1661/2003/1 1663/2004/1 -f 1636/2005/3 1634/2006/3 1664/2007/3 1662/2008/3 1660/2009/3 1658/2010/3 1656/2011/3 1654/2012/3 1652/2013/3 1650/2014/3 1648/2015/3 1646/2016/3 1644/2017/3 1642/2018/3 1640/2019/3 1638/2020/3 -f 1665/2021/1 1667/2022/1 1669/2023/1 1671/2024/1 1673/2025/1 1675/2026/1 1677/2027/1 1679/2028/1 1681/2029/1 1683/2030/1 1685/2031/1 1687/2032/1 1689/2033/1 1691/2034/1 1693/2035/1 1695/2036/1 -f 1668/2037/3 1666/2038/3 1696/2039/3 1694/2040/3 1692/2041/3 1690/2042/3 1688/2043/3 1686/2044/3 1684/2045/3 1682/2046/3 1680/2047/3 1678/2048/3 1676/2049/3 1674/2050/3 1672/2051/3 1670/2052/3 -f 1707/2053/5 1703/2054/5 1701/2055/5 1705/2056/5 -f 1700/2057/1 1708/2058/1 1706/2059/1 1699/2060/1 -f 1697/2061/3 1702/2062/3 1704/2063/3 1698/2064/3 -f 1698/2065/6 1700/2066/6 1699/2060/6 1697/2061/6 -f 1698/2067/4 1704/2068/4 1708/2058/4 1700/2057/4 -f 1701/2055/10 1703/2054/10 1704/2069/10 1702/2070/10 -f 1703/2054/28 1707/2053/28 1708/2058/28 1704/2068/28 -f 1707/2053/9 1705/2056/9 1706/2071/9 1708/2072/9 -f 1705/2056/72 1701/2055/72 1702/2070/72 1706/2071/72 -f 1699/2060/2 1706/2059/2 1702/2062/2 1697/2061/2 -f 1719/2073/5 1715/2074/5 1713/2075/5 1717/2076/5 -f 1712/2077/1 1720/2078/1 1718/2079/1 1711/2080/1 -f 1709/2081/3 1714/2082/3 1716/2083/3 1710/2084/3 -f 1710/2085/6 1712/2086/6 1711/2080/6 1709/2081/6 -f 1710/2087/4 1716/2088/4 1720/2078/4 1712/2077/4 -f 1713/2075/10 1715/2074/10 1716/2089/10 1714/2090/10 -f 1715/2074/28 1719/2073/28 1720/2078/28 1716/2088/28 -f 1719/2073/9 1717/2076/9 1718/2091/9 1720/2092/9 -f 1717/2076/72 1713/2075/72 1714/2090/72 1718/2091/72 -f 1711/2080/2 1718/2079/2 1714/2082/2 1709/2081/2 -f 1731/2093/5 1727/2094/5 1725/2095/5 1729/2096/5 -f 1724/2097/1 1732/2098/1 1730/2099/1 1723/2100/1 -f 1721/2101/3 1726/2102/3 1728/2103/3 1722/2104/3 -f 1722/2105/6 1724/2106/6 1723/2100/6 1721/2101/6 -f 1722/2107/4 1728/2108/4 1732/2098/4 1724/2097/4 -f 1725/2095/10 1727/2094/10 1728/2109/10 1726/2110/10 -f 1727/2094/28 1731/2093/28 1732/2098/28 1728/2108/28 -f 1731/2093/9 1729/2096/9 1730/2111/9 1732/2112/9 -f 1729/2096/72 1725/2095/72 1726/2110/72 1730/2111/72 -f 1723/2100/2 1730/2099/2 1726/2102/2 1721/2101/2 -f 1736/2113/3 1734/2114/3 1744/2115/3 1742/2116/3 1740/2117/3 1738/2118/3 -f 1748/2119/1 1746/2120/1 1756/2121/1 1754/2122/1 1752/2123/1 1750/2124/1 -f 1760/2125/1 1758/2126/1 1768/2127/1 1766/2128/1 1764/2129/1 1762/2130/1 -f 1772/2131/1 1770/2132/1 1780/2133/1 1778/2134/1 1776/2135/1 1774/2136/1 -f 1784/2137/1 1782/2138/1 1792/2139/1 1790/2140/1 1788/2141/1 1786/2142/1 -f 1796/2143/3 1794/2144/3 1804/2145/3 1802/2146/3 1800/2147/3 1798/2148/3 -f 1808/2149/3 1806/2150/3 1816/2151/3 1814/2152/3 1812/2153/3 1810/2154/3 -f 1820/2155/3 1818/2156/3 1828/2157/3 1826/2158/3 1824/2159/3 1822/2160/3 -f 1832/2161/3 1830/2162/3 1840/2163/3 1838/2164/3 1836/2165/3 1834/2166/3 -f 1844/2167/1 1842/2168/1 1852/2169/1 1850/2170/1 1848/2171/1 1846/2172/1 -f 1856/2173/1 1854/2174/1 1864/2175/1 1862/2176/1 1860/2177/1 1858/2178/1 -f 1868/2179/1 1866/2180/1 1876/2181/1 1874/2182/1 1872/2183/1 1870/2184/1 -f 1880/2185/1 1878/2186/1 1888/2187/1 1886/2188/1 1884/2189/1 1882/2190/1 -f 1892/2191/3 1890/2192/3 1900/2193/3 1898/2194/3 1896/2195/3 1894/2196/3 -f 1904/2197/3 1902/2198/3 1912/2199/3 1910/2200/3 1908/2201/3 1906/2202/3 -f 1916/2203/3 1914/2204/3 1924/2205/3 1922/2206/3 1920/2207/3 1918/2208/3 -f 1928/2209/4 1926/2210/4 1936/2211/4 1934/2212/4 1932/2213/4 1930/2214/4 -f 1940/2215/4 1938/2216/4 1948/2217/4 1946/2218/4 1944/2219/4 1942/2220/4 -f 1952/2221/2 1950/2222/2 1960/2223/2 1958/2224/2 1956/2225/2 1954/2226/2 -f 1964/2227/2 1962/2228/2 1972/2229/2 1970/2230/2 1968/2231/2 1966/2232/2 -f 1976/2233/4 1974/2234/4 1983/2235/4 1982/2236/4 1980/2237/4 1978/2238/4 -f 1975/2239/2 1977/2240/2 1979/2241/2 1981/2242/2 1984/2243/2 1973/2244/2 -f 1988/2245/4 1986/2246/4 1995/2247/4 1994/2248/4 1992/2249/4 1990/2250/4 -f 1987/2251/2 1989/2252/2 1991/2253/2 1993/2254/2 1996/2255/2 1985/2256/2 -f 2000/2257/4 1998/2258/4 2007/2259/4 2006/2260/4 2004/2261/4 2002/2262/4 -f 1999/2263/2 2001/2264/2 2003/2265/2 2005/2266/2 2008/2267/2 1997/2268/2 -f 2012/2269/3 2010/2270/3 2019/2271/3 2018/2272/3 2016/2273/3 2014/2274/3 -f 2011/2275/1 2013/2276/1 2015/2277/1 2017/2278/1 2020/2279/1 2009/2280/1 -f 2024/2281/4 2022/2282/4 2032/2283/4 2030/2284/4 2028/2285/4 2026/2286/4 -f 2036/2287/4 2034/2288/4 2044/2289/4 2042/2290/4 2040/2291/4 2038/2292/4 -f 2048/2293/2 2046/2294/2 2056/2295/2 2054/2296/2 2052/2297/2 2050/2298/2 -f 2060/2299/2 2058/2300/2 2068/2301/2 2066/2302/2 2064/2303/2 2062/2304/2 -f 2072/2305/3 2070/2306/3 2079/2307/3 2078/2308/3 2076/2309/3 2074/2310/3 -f 2071/2311/1 2073/2312/1 2075/2313/1 2077/2314/1 2080/2315/1 2069/2316/1 -f 2084/2317/3 2082/2318/3 2091/2319/3 2090/2320/3 2088/2321/3 2086/2322/3 -f 2083/2323/1 2085/2324/1 2087/2325/1 2089/2326/1 2092/2327/1 2081/2328/1 -f 2096/2329/3 2094/2330/3 2103/2331/3 2102/2332/3 2100/2333/3 2098/2334/3 -f 2095/2335/1 2097/2336/1 2099/2337/1 2101/2338/1 2104/2339/1 2093/2340/1 -f 2113/2341/6 2106/2342/6 2108/2343/6 2122/2344/6 -f 2121/2345/1 2123/2346/1 2124/2347/1 2122/2344/1 2108/2343/1 2107/2348/1 2117/2349/1 2119/2350/1 2120/2351/1 2118/2352/1 -f 2117/2349/5 2107/2348/5 2105/2353/5 2110/2354/5 -f 2108/2343/4 2106/2342/4 2105/2355/4 2107/2356/4 -f 2109/2357/3 2111/2358/3 2112/2359/3 2110/2360/3 2105/2353/3 2106/2361/3 2113/2362/3 2115/2363/3 2116/2364/3 2114/2365/3 -f 2113/2341/73 2122/2344/73 2124/2366/73 2115/2367/73 -f 2115/2367/29 2124/2366/29 2123/2368/29 2116/2369/29 -f 2116/2370/74 2123/2371/74 2121/2372/74 2114/2373/74 -f 2117/2349/75 2110/2354/75 2112/2359/75 2119/2350/75 -f 2119/2350/72 2112/2359/72 2111/2358/72 2120/2351/72 -f 2120/2351/76 2111/2358/76 2109/2374/76 2118/2375/76 -f 2121/2372/2 2118/2375/2 2109/2374/2 2114/2373/2 -f 2128/2376/4 2126/2377/4 2135/2378/4 2134/2379/4 2132/2380/4 2130/2381/4 -f 2127/2382/2 2129/2383/2 2131/2384/2 2133/2385/2 2136/2386/2 2125/2387/2 -f 2137/2388/4 2139/2389/4 2141/2390/4 2143/2391/4 2145/2392/4 2147/2393/4 2149/2394/4 2151/2395/4 2153/2396/4 2155/2397/4 2157/2398/4 2159/2399/4 2161/2400/4 2163/2401/4 2165/2402/4 2167/2403/4 -f 2140/2404/2 2138/2405/2 2168/2406/2 2166/2407/2 2164/2408/2 2162/2409/2 2160/2410/2 2158/2411/2 2156/2412/2 2154/2413/2 2152/2414/2 2150/2415/2 2148/2416/2 2146/2417/2 2144/2418/2 2142/2419/2 -f 2169/2420/4 2171/2421/4 2173/2422/4 2175/2423/4 2177/2424/4 2179/2425/4 2181/2426/4 2183/2427/4 2185/2428/4 2187/2429/4 2189/2430/4 2191/2431/4 2193/2432/4 2195/2433/4 2197/2434/4 2199/2435/4 -f 2172/2436/2 2170/2437/2 2200/2438/2 2198/2439/2 2196/2440/2 2194/2441/2 2192/2442/2 2190/2443/2 2188/2444/2 2186/2445/2 2184/2446/2 2182/2447/2 2180/2448/2 2178/2449/2 2176/2450/2 2174/2451/2 -f 2223/2452/3 2201/2453/3 2203/2454/3 2227/2455/3 -f 2227/2455/4 2203/2454/4 2206/2456/4 2228/2457/4 -f 2228/2458/1 2206/2459/1 2204/2460/1 2229/2461/1 -f 2229/2461/2 2204/2460/2 2201/2453/2 2223/2452/2 -f 2202/2462/6 2205/2463/6 2231/2464/6 2230/2465/6 -f 2206/2466/5 2203/2467/5 2201/2468/5 2204/2469/5 -f 2231/2470/2 2226/2471/2 2232/2472/2 2230/2473/2 -f 2205/2474/1 2225/2475/1 2226/2471/1 2231/2470/1 -f 2202/2476/4 2224/2477/4 2225/2478/4 2205/2479/4 -f 2230/2473/3 2232/2472/3 2224/2477/3 2202/2476/3 -f 2225/2480/1 2228/2481/1 2229/2482/1 2226/2483/1 -f 2224/2484/4 2227/2485/4 2228/2486/4 2225/2487/4 -f 2232/2488/3 2223/2489/3 2227/2485/3 2224/2484/3 -f 2226/2483/2 2229/2482/2 2223/2490/2 2232/2491/2 -f 2261/2492/5 2263/2493/5 2233/2494/5 2235/2495/5 2237/2496/5 2239/2497/5 2241/2498/5 2243/2499/5 2245/2500/5 2247/2501/5 2249/2502/5 2251/2503/5 2253/2504/5 2255/2505/5 2257/2506/5 2259/2507/5 -f 2268/2508/5 2266/2509/5 2296/2510/5 2294/2511/5 2292/2512/5 2290/2513/5 2288/2514/5 2286/2515/5 2284/2516/5 2282/2517/5 2280/2518/5 2278/2519/5 2276/2520/5 2274/2521/5 2272/2522/5 2270/2523/5 -f 2265/2524/6 2267/2525/6 2269/2526/6 2271/2527/6 2273/2528/6 2275/2529/6 2277/2530/6 2279/2531/6 2281/2532/6 2283/2533/6 2285/2534/6 2287/2535/6 2289/2536/6 2291/2537/6 2293/2538/6 2295/2539/6 -f 2319/2540/3 2297/2541/3 2299/2542/3 2323/2543/3 -f 2323/2543/6 2299/2542/6 2302/2544/6 2324/2545/6 -f 2324/2546/1 2302/2547/1 2300/2548/1 2325/2549/1 -f 2325/2549/5 2300/2548/5 2297/2541/5 2319/2540/5 -f 2298/2550/2 2301/2551/2 2327/2552/2 2326/2553/2 -f 2302/2554/4 2299/2555/4 2297/2556/4 2300/2557/4 -f 2327/2558/5 2322/2559/5 2328/2560/5 2326/2561/5 -f 2301/2562/1 2321/2563/1 2322/2559/1 2327/2558/1 -f 2298/2564/6 2320/2565/6 2321/2566/6 2301/2567/6 -f 2326/2561/3 2328/2560/3 2320/2565/3 2298/2564/3 -f 2321/2568/1 2324/2569/1 2325/2570/1 2322/2571/1 -f 2320/2572/6 2323/2573/6 2324/2574/6 2321/2575/6 -f 2328/2576/3 2319/2577/3 2323/2573/3 2320/2572/3 -f 2322/2571/5 2325/2570/5 2319/2578/5 2328/2579/5 -f 2332/2580/4 2330/2581/4 2360/2582/4 2358/2583/4 2356/2584/4 2354/2585/4 2352/2586/4 2350/2587/4 2348/2588/4 2346/2589/4 2344/2590/4 2342/2591/4 2340/2592/4 2338/2593/4 2336/2594/4 2334/2595/4 -f 2329/2596/2 2331/2597/2 2333/2598/2 2335/2599/2 2337/2600/2 2339/2601/2 2341/2602/2 2343/2603/2 2345/2604/2 2347/2605/2 2349/2606/2 2351/2607/2 2353/2608/2 2355/2609/2 2357/2610/2 2359/2611/2 -f 2447/2612/3 2425/2613/3 2427/2614/3 2451/2615/3 -f 2451/2615/4 2427/2614/4 2430/2616/4 2452/2617/4 -f 2452/2618/1 2430/2619/1 2428/2620/1 2453/2621/1 -f 2453/2621/2 2428/2620/2 2425/2613/2 2447/2612/2 -f 2426/2622/6 2429/2623/6 2455/2624/6 2454/2625/6 -f 2430/2626/5 2427/2627/5 2425/2628/5 2428/2629/5 -f 2455/2630/2 2450/2631/2 2456/2632/2 2454/2633/2 -f 2429/2634/1 2449/2635/1 2450/2631/1 2455/2630/1 -f 2426/2636/4 2448/2637/4 2449/2638/4 2429/2639/4 -f 2454/2633/3 2456/2632/3 2448/2637/3 2426/2636/3 -f 2449/2640/1 2452/2641/1 2453/2642/1 2450/2643/1 -f 2448/2644/4 2451/2645/4 2452/2646/4 2449/2647/4 -f 2456/2648/3 2447/2649/3 2451/2645/3 2448/2644/3 -f 2450/2643/2 2453/2642/2 2447/2650/2 2456/2651/2 -f 2485/2652/5 2487/2653/5 2457/2654/5 2459/2655/5 2461/2656/5 2463/2657/5 2465/2658/5 2467/2659/5 2469/2660/5 2471/2661/5 2473/2662/5 2475/2663/5 2477/2664/5 2479/2665/5 2481/2666/5 2483/2667/5 -f 2492/2668/5 2490/2669/5 2520/2670/5 2518/2671/5 2516/2672/5 2514/2673/5 2512/2674/5 2510/2675/5 2508/2676/5 2506/2677/5 2504/2678/5 2502/2679/5 2500/2680/5 2498/2681/5 2496/2682/5 2494/2683/5 -f 2489/2684/6 2491/2685/6 2493/2686/6 2495/2687/6 2497/2688/6 2499/2689/6 2501/2690/6 2503/2691/6 2505/2692/6 2507/2693/6 2509/2694/6 2511/2695/6 2513/2696/6 2515/2697/6 2517/2698/6 2519/2699/6 -s 1 -f 1/2700/4 2/2701/4 4/2702/77 3/2703/77 -f 3/2703/77 4/2702/77 6/2704/44 5/2705/44 -f 5/2705/44 6/2704/44 8/2706/78 7/2707/78 -f 7/2707/78 8/2706/78 10/2708/1 9/2709/1 -f 9/2709/1 10/2708/1 12/2710/79 11/2711/79 -f 11/2711/79 12/2710/79 14/2712/46 13/2713/46 -f 13/2713/46 14/2712/46 16/2714/80 15/2715/80 -f 15/2715/80 16/2714/80 18/2716/2 17/2717/2 -f 17/2717/2 18/2716/2 20/2718/81 19/2719/81 -f 19/2719/81 20/2718/81 22/2720/47 21/2721/47 -f 21/2721/47 22/2720/47 24/2722/82 23/2723/82 -f 23/2723/82 24/2722/82 26/2724/3 25/2725/3 -f 25/2725/3 26/2724/3 28/2726/83 27/2727/83 -f 27/2727/83 28/2726/83 30/2728/45 29/2729/45 -f 29/2729/45 30/2728/45 32/2730/84 31/2731/84 -f 31/2732/84 32/2733/84 2/2701/4 1/2700/4 -f 33/2734/85 34/2735/86 36/2736/87 35/2737/88 -f 35/2737/88 36/2736/87 38/2738/89 37/2739/90 -f 37/2739/90 38/2738/89 40/2740/91 39/2741/92 -f 39/2741/92 40/2740/91 42/2742/93 41/2743/94 -f 41/2743/94 42/2742/93 44/2744/95 43/2745/96 -f 43/2745/96 44/2744/95 46/2746/97 45/2747/98 -f 45/2747/98 46/2746/97 48/2748/99 47/2749/100 -f 47/2750/100 48/2751/99 50/2752/101 49/2753/102 -f 49/2753/102 50/2752/101 52/2754/103 51/2755/104 -f 51/2755/104 52/2754/103 54/2756/105 53/2757/106 -f 53/2757/106 54/2756/105 56/2758/107 55/2759/108 -f 55/2759/108 56/2758/107 58/2760/109 57/2761/110 -f 57/2761/110 58/2760/109 60/2762/111 59/2763/112 -f 59/2763/112 60/2762/111 62/2764/113 61/2765/114 -f 61/2765/114 62/2764/113 64/2766/115 63/2767/116 -f 63/2768/116 64/2769/115 34/2735/86 33/2734/85 -f 33/2770/85 35/2771/88 37/2772/90 39/2773/92 41/2774/94 43/2775/96 45/2776/98 47/2777/100 49/2778/102 51/2779/104 53/2780/106 55/2781/108 57/2782/110 59/2783/112 61/2784/114 63/2785/116 -f 97/2786/4 114/2787/4 120/2788/32 98/2789/32 -f 98/2789/32 120/2788/32 128/2790/28 99/2791/28 -f 99/2791/28 128/2790/28 119/2792/41 100/2793/41 -f 100/2793/41 119/2792/41 127/2794/5 101/2795/5 -f 101/2795/5 127/2794/5 118/2796/117 102/2797/117 -f 102/2797/117 118/2796/117 126/2798/72 103/2799/72 -f 103/2799/72 126/2798/72 121/2800/118 104/2801/118 -f 104/2801/118 121/2800/118 125/2802/2 105/2803/2 -f 105/2803/2 125/2802/2 116/2804/119 106/2805/119 -f 106/2805/119 116/2804/119 124/2806/29 107/2807/29 -f 107/2807/29 124/2806/29 115/2808/120 108/2809/120 -f 108/2809/120 115/2808/120 123/2810/6 109/2811/6 -f 109/2812/6 123/2813/6 117/2814/37 110/2815/37 -f 110/2815/37 117/2814/37 122/2816/39 111/2817/39 -f 111/2817/39 122/2816/39 113/2818/34 112/2819/34 -f 112/2819/34 113/2818/34 114/2787/4 97/2786/4 -f 169/2820/4 186/2821/4 192/2822/34 170/2823/34 -f 170/2823/34 192/2822/34 200/2824/39 171/2825/39 -f 171/2825/39 200/2824/39 191/2826/37 172/2827/37 -f 172/2827/37 191/2826/37 199/2828/6 173/2829/6 -f 173/2829/6 199/2828/6 190/2830/120 174/2831/120 -f 174/2831/120 190/2830/120 198/2832/29 175/2833/29 -f 175/2833/29 198/2832/29 193/2834/119 176/2835/119 -f 176/2835/119 193/2834/119 197/2836/2 177/2837/2 -f 177/2837/2 197/2836/2 188/2838/118 178/2839/118 -f 178/2839/118 188/2838/118 196/2840/72 179/2841/72 -f 179/2841/72 196/2840/72 187/2842/117 180/2843/117 -f 180/2843/117 187/2842/117 195/2844/5 181/2845/5 -f 181/2846/5 195/2847/5 189/2848/41 182/2849/41 -f 182/2849/41 189/2848/41 194/2850/28 183/2851/28 -f 183/2851/28 194/2850/28 185/2852/32 184/2853/32 -f 184/2853/32 185/2852/32 186/2821/4 169/2820/4 -f 441/2854/121 443/2855/122 444/2856/79 442/2857/1 -f 443/2855/122 445/2858/123 446/2859/46 444/2856/79 -f 445/2858/123 447/2860/124 448/2861/80 446/2859/46 -f 447/2860/124 449/2862/125 450/2863/2 448/2861/80 -f 449/2862/125 451/2864/126 452/2865/81 450/2863/2 -f 451/2864/126 453/2866/127 454/2867/47 452/2865/81 -f 453/2866/127 455/2868/128 456/2869/82 454/2867/47 -f 455/2868/128 457/2870/129 458/2871/3 456/2869/82 -f 457/2870/129 459/2872/130 460/2873/83 458/2871/3 -f 459/2872/130 461/2874/131 462/2875/45 460/2873/83 -f 461/2874/131 463/2876/132 464/2877/84 462/2875/45 -f 463/2876/132 465/2878/133 466/2879/4 464/2877/84 -f 465/2880/133 467/2881/134 468/2882/77 466/2883/4 -f 467/2881/134 469/2884/135 470/2885/44 468/2882/77 -f 469/2884/135 471/2886/136 472/2887/78 470/2885/44 -f 471/2886/136 441/2854/121 442/2857/1 472/2887/78 -f 441/2888/121 471/2889/136 469/2890/135 467/2891/134 465/2892/133 463/2893/132 461/2894/131 459/2895/130 457/2896/129 455/2897/128 453/2898/127 451/2899/126 449/2900/125 447/2901/124 445/2902/123 443/2903/122 -f 547/2904/121 549/2905/122 550/2906/79 548/2907/1 -f 549/2905/122 551/2908/123 552/2909/46 550/2906/79 -f 551/2908/123 553/2910/124 554/2911/80 552/2909/46 -f 553/2910/124 555/2912/125 556/2913/2 554/2911/80 -f 555/2912/125 557/2914/126 558/2915/81 556/2913/2 -f 557/2914/126 559/2916/127 560/2917/47 558/2915/81 -f 559/2916/127 561/2918/128 562/2919/82 560/2917/47 -f 561/2918/128 563/2920/129 564/2921/3 562/2919/82 -f 563/2920/129 565/2922/130 566/2923/83 564/2921/3 -f 565/2922/130 567/2924/131 568/2925/45 566/2923/83 -f 567/2924/131 569/2926/132 570/2927/84 568/2925/45 -f 569/2926/132 571/2928/133 572/2929/4 570/2927/84 -f 571/2930/133 573/2931/134 574/2932/77 572/2933/4 -f 573/2931/134 575/2934/135 576/2935/44 574/2932/77 -f 575/2934/135 577/2936/136 578/2937/78 576/2935/44 -f 577/2936/136 547/2904/121 548/2907/1 578/2937/78 -f 547/2938/121 577/2939/136 575/2940/135 573/2941/134 571/2942/133 569/2943/132 567/2944/131 565/2945/130 563/2946/129 561/2947/128 559/2948/127 557/2949/126 555/2950/125 553/2951/124 551/2952/123 549/2953/122 -f 684/2954/137 732/2955/138 731/2956/139 682/2957/140 -f 666/2958/141 723/2959/142 722/2960/143 664/2961/144 -f 710/2962/145 745/2963/146 744/2964/147 708/2965/148 -f 692/2966/149 736/2967/150 735/2968/151 690/2969/152 -f 674/2970/153 727/2971/154 726/2972/155 672/2973/156 -f 654/2974/157 718/2975/158 748/2976/159 716/2977/160 -f 656/2978/161 717/2979/162 718/2975/158 654/2974/157 -f 700/2980/163 740/2981/164 739/2982/165 698/2983/166 -f 682/2957/140 731/2956/139 730/2984/167 680/2985/168 -f 664/2961/144 722/2960/143 721/2986/169 662/2987/170 -f 708/2965/148 744/2964/147 743/2988/171 706/2989/172 -f 690/2969/152 735/2968/151 734/2990/173 688/2991/174 -f 672/2973/156 726/2972/155 725/2992/175 670/2993/176 -f 716/2977/160 748/2976/159 747/2994/177 714/2995/178 -f 698/2983/166 739/2982/165 738/2996/179 696/2997/180 -f 680/2985/168 730/2984/167 729/2998/181 678/2999/182 -f 662/2987/170 721/2986/169 720/3000/183 660/3001/184 -f 706/2989/172 743/2988/171 742/3002/185 704/3003/186 -f 688/2991/174 734/2990/173 733/3004/187 686/3005/188 -f 670/2993/176 725/2992/175 724/3006/189 668/3007/190 -f 714/2995/178 747/2994/177 746/3008/191 712/3009/192 -f 696/2997/180 738/2996/179 737/3010/193 694/3011/194 -f 678/2999/182 729/2998/181 728/3012/195 676/3013/196 -f 660/3001/184 720/3000/183 719/3014/197 658/3015/198 -f 704/3003/186 742/3002/185 741/3016/199 702/3017/200 -f 686/3005/188 733/3004/187 732/2955/138 684/2954/137 -f 668/3007/190 724/3006/189 723/2959/142 666/2958/141 -f 712/3009/192 746/3008/191 745/2963/146 710/2962/145 -f 694/3011/194 737/3010/193 736/2967/150 692/2966/149 -f 676/3013/196 728/3012/195 727/2971/154 674/2970/153 -f 658/3015/198 719/3014/197 717/2979/162 656/2978/161 -f 702/3017/200 741/3016/199 740/2981/164 700/2980/163 -f 665/3018/142 755/3019/141 756/3020/190 667/3021/189 -f 683/3022/138 764/3023/137 765/3024/188 685/3025/187 -f 701/3026/199 773/3027/200 774/3028/186 703/3029/185 -f 657/3030/197 751/3031/198 752/3032/184 659/3033/183 -f 675/3034/195 760/3035/196 761/3036/182 677/3037/181 -f 693/3038/193 769/3039/194 770/3040/180 695/3041/179 -f 711/3042/191 778/3043/192 779/3044/178 713/3045/177 -f 667/3021/189 756/3020/190 757/3046/176 669/3047/175 -f 685/3025/187 765/3024/188 766/3048/174 687/3049/173 -f 703/3029/185 774/3028/186 775/3050/172 705/3051/171 -f 659/3033/183 752/3032/184 753/3052/170 661/3053/169 -f 677/3037/181 761/3036/182 762/3054/168 679/3055/167 -f 695/3041/179 770/3040/180 771/3056/166 697/3057/165 -f 713/3045/177 779/3044/178 780/3058/160 715/3059/159 -f 669/3047/175 757/3046/176 758/3060/156 671/3061/155 -f 687/3049/173 766/3048/174 767/3062/152 689/3063/151 -f 705/3051/171 775/3050/172 776/3064/148 707/3065/147 -f 661/3053/169 753/3052/170 754/3066/144 663/3067/143 -f 679/3055/167 762/3054/168 763/3068/140 681/3069/139 -f 697/3057/165 771/3056/166 772/3070/163 699/3071/164 -f 653/3072/158 749/3073/157 750/3074/161 655/3075/162 -f 715/3059/159 780/3058/160 749/3073/157 653/3072/158 -f 671/3061/155 758/3060/156 759/3076/153 673/3077/154 -f 689/3063/151 767/3062/152 768/3078/149 691/3079/150 -f 707/3065/147 776/3064/148 777/3080/145 709/3081/146 -f 663/3067/143 754/3066/144 755/3019/141 665/3018/142 -f 681/3069/139 763/3068/140 764/3023/137 683/3022/138 -f 699/3071/164 772/3070/163 773/3027/200 701/3026/199 -f 655/3075/162 750/3074/161 751/3031/198 657/3030/197 -f 673/3077/154 759/3076/153 760/3035/196 675/3034/195 -f 691/3079/150 768/3078/149 769/3039/194 693/3038/193 -f 709/3081/146 777/3080/145 778/3043/192 711/3042/191 -f 783/3082/148 784/3083/147 868/3084/146 867/3085/145 -f 867/3085/145 868/3084/146 864/3086/191 863/3087/192 -f 863/3087/192 864/3086/191 892/3088/177 891/3089/178 -f 891/3089/178 892/3088/177 844/3090/159 843/3091/160 -f 843/3091/160 844/3090/159 820/3092/158 819/3093/157 -f 819/3093/157 820/3092/158 816/3094/162 815/3095/161 -f 815/3095/161 816/3094/162 824/3096/197 823/3097/198 -f 823/3097/198 824/3096/197 880/3098/183 879/3099/184 -f 879/3099/184 880/3098/183 812/3100/169 811/3101/170 -f 811/3101/170 812/3100/169 804/3102/143 803/3103/144 -f 803/3103/144 804/3102/143 800/3104/142 799/3105/141 -f 799/3105/141 800/3104/142 808/3106/189 807/3107/190 -f 807/3108/190 808/3109/189 875/3110/201 876/3111/202 -f 876/3111/202 875/3110/201 883/3112/155 884/3113/156 -f 884/3113/156 883/3112/155 899/3114/154 900/3115/153 -f 900/3115/153 899/3114/154 854/3116/195 856/3117/196 -f 856/3117/196 854/3116/195 846/3118/181 848/3119/182 -f 848/3119/182 846/3118/181 850/3120/167 852/3121/168 -f 852/3121/168 850/3120/167 794/3122/139 796/3123/140 -f 796/3123/140 794/3122/139 790/3124/138 792/3125/137 -f 792/3125/137 790/3124/138 786/3126/187 788/3127/188 -f 788/3127/188 786/3126/187 907/3128/173 908/3129/174 -f 908/3129/174 907/3128/173 903/3130/151 904/3131/152 -f 904/3131/152 903/3130/151 831/3132/150 832/3133/149 -f 832/3133/149 831/3132/150 887/3134/193 888/3135/194 -f 888/3135/194 887/3134/193 895/3136/179 896/3137/180 -f 896/3137/180 895/3136/179 839/3138/165 840/3139/166 -f 840/3139/166 839/3138/165 828/3140/164 827/3141/163 -f 827/3142/163 828/3143/164 836/3144/203 835/3145/204 -f 835/3145/204 836/3144/203 860/3146/185 859/3147/186 -f 859/3147/186 860/3146/185 872/3148/171 871/3149/172 -f 871/3149/172 872/3148/171 784/3083/147 783/3082/148 -f 919/3150/205 920/3151/206 942/3152/207 941/3153/208 -f 910/3154/209 911/3155/210 933/3156/211 932/3157/212 -f 920/3151/206 921/3158/213 943/3159/214 942/3152/207 -f 915/3160/215 916/3161/216 938/3162/217 937/3163/218 -f 916/3161/216 917/3164/219 939/3165/220 938/3162/217 -f 911/3155/210 912/3166/221 934/3167/222 933/3156/211 -f 921/3158/213 922/3168/223 944/3169/224 943/3159/214 -f 912/3166/221 913/3170/225 935/3171/226 934/3167/222 -f 922/3168/223 923/3172/227 945/3173/228 944/3169/224 -f 917/3164/219 918/3174/229 940/3175/230 939/3165/220 -f 924/3176/231 909/3177/232 931/3178/233 946/3179/234 -f 918/3174/229 919/3150/205 941/3153/208 940/3175/230 -f 913/3170/225 914/3180/235 936/3181/236 935/3171/226 -f 923/3172/227 924/3182/231 946/3183/234 945/3173/228 -f 914/3180/235 915/3160/215 937/3163/218 936/3181/236 -f 909/3177/232 910/3154/209 932/3157/212 931/3178/233 -f 937/3163/218 938/3162/217 954/3184/237 953/3185/238 -f 946/3179/234 931/3178/233 947/3186/239 962/3187/240 -f 945/3173/228 946/3183/234 962/3188/240 961/3189/241 -f 938/3162/217 939/3165/220 955/3190/242 954/3184/237 -f 931/3178/233 932/3157/212 948/3191/243 947/3186/239 -f 939/3165/220 940/3175/230 956/3192/244 955/3190/242 -f 932/3157/212 933/3156/211 949/3193/245 948/3191/243 -f 940/3175/230 941/3153/208 957/3194/246 956/3192/244 -f 933/3156/211 934/3167/222 950/3195/247 949/3193/245 -f 941/3153/208 942/3152/207 958/3196/248 957/3194/246 -f 934/3167/222 935/3171/226 951/3197/249 950/3195/247 -f 942/3152/207 943/3159/214 959/3198/250 958/3196/248 -f 935/3171/226 936/3181/236 952/3199/251 951/3197/249 -f 943/3159/214 944/3169/224 960/3200/252 959/3198/250 -f 936/3181/236 937/3163/218 953/3185/238 952/3199/251 -f 944/3169/224 945/3173/228 961/3189/241 960/3200/252 -f 973/3201/253 995/3202/254 996/3203/255 974/3204/256 -f 964/3205/257 986/3206/258 987/3207/259 965/3208/260 -f 974/3204/256 996/3203/255 997/3209/261 975/3210/262 -f 969/3211/263 991/3212/264 992/3213/265 970/3214/266 -f 970/3214/266 992/3213/265 993/3215/267 971/3216/268 -f 965/3208/260 987/3207/259 988/3217/269 966/3218/270 -f 975/3210/262 997/3209/261 998/3219/271 976/3220/272 -f 966/3218/270 988/3217/269 989/3221/273 967/3222/274 -f 976/3220/272 998/3219/271 999/3223/275 977/3224/276 -f 971/3216/268 993/3215/267 994/3225/277 972/3226/278 -f 978/3227/279 1000/3228/280 985/3229/281 963/3230/282 -f 972/3226/278 994/3225/277 995/3202/254 973/3201/253 -f 967/3222/274 989/3221/273 990/3231/283 968/3232/284 -f 977/3224/276 999/3223/275 1000/3233/280 978/3234/279 -f 968/3232/284 990/3231/283 991/3212/264 969/3211/263 -f 963/3230/282 985/3229/281 986/3206/258 964/3205/257 -f 991/3212/264 1007/3235/285 1008/3236/286 992/3213/265 -f 1000/3228/280 1016/3237/287 1001/3238/288 985/3229/281 -f 999/3223/275 1015/3239/289 1016/3240/287 1000/3233/280 -f 992/3213/265 1008/3236/286 1009/3241/290 993/3215/267 -f 985/3229/281 1001/3238/288 1002/3242/291 986/3206/258 -f 993/3215/267 1009/3241/290 1010/3243/292 994/3225/277 -f 986/3206/258 1002/3242/291 1003/3244/293 987/3207/259 -f 994/3225/277 1010/3243/292 1011/3245/294 995/3202/254 -f 987/3207/259 1003/3244/293 1004/3246/295 988/3217/269 -f 995/3202/254 1011/3245/294 1012/3247/296 996/3203/255 -f 988/3217/269 1004/3246/295 1005/3248/297 989/3221/273 -f 996/3203/255 1012/3247/296 1013/3249/298 997/3209/261 -f 989/3221/273 1005/3248/297 1006/3250/299 990/3231/283 -f 997/3209/261 1013/3249/298 1014/3251/300 998/3219/271 -f 990/3231/283 1006/3250/299 1007/3235/285 991/3212/264 -f 998/3219/271 1014/3251/300 1015/3239/289 999/3223/275 -f 909/3177/232 963/3230/282 964/3205/257 910/3154/209 -f 910/3154/209 964/3205/257 965/3208/260 911/3155/210 -f 911/3155/210 965/3208/260 966/3218/270 912/3166/221 -f 912/3166/221 966/3218/270 967/3222/274 913/3170/225 -f 913/3170/225 967/3222/274 968/3232/284 914/3180/235 -f 914/3180/235 968/3232/284 969/3211/263 915/3160/215 -f 915/3160/215 969/3211/263 970/3214/266 916/3161/216 -f 916/3161/216 970/3214/266 971/3216/268 917/3164/219 -f 917/3164/219 971/3216/268 972/3226/278 918/3174/229 -f 918/3174/229 972/3226/278 973/3201/253 919/3150/205 -f 919/3150/205 973/3201/253 974/3204/256 920/3151/206 -f 920/3151/206 974/3204/256 975/3210/262 921/3158/213 -f 921/3158/213 975/3210/262 976/3220/272 922/3168/223 -f 922/3168/223 976/3220/272 977/3224/276 923/3172/227 -f 923/3172/227 977/3224/276 978/3234/279 924/3182/231 -f 924/3176/231 978/3227/279 963/3230/282 909/3177/232 -f 1073/3252/240 1074/3253/287 1076/3254/301 1075/3255/239 -f 1075/3255/239 1076/3254/301 1078/3256/291 1077/3257/243 -f 1077/3257/243 1078/3256/291 1080/3258/302 1079/3259/303 -f 1079/3259/303 1080/3258/302 1082/3260/295 1081/3261/247 -f 1081/3261/247 1082/3260/295 1084/3262/297 1083/3263/304 -f 1083/3263/304 1084/3262/297 1086/3264/299 1085/3265/251 -f 1085/3265/251 1086/3264/299 1088/3266/285 1087/3267/305 -f 1087/3267/305 1088/3266/285 1090/3268/286 1089/3269/237 -f 1089/3270/237 1090/3271/286 1092/3272/290 1091/3273/242 -f 1091/3273/242 1092/3272/290 1094/3274/292 1093/3275/244 -f 1093/3275/244 1094/3274/292 1096/3276/294 1095/3277/246 -f 1095/3277/246 1096/3276/294 1098/3278/296 1097/3279/248 -f 1097/3279/248 1098/3278/296 1100/3280/298 1099/3281/250 -f 1099/3281/250 1100/3280/298 1102/3282/300 1101/3283/252 -f 1101/3283/252 1102/3282/300 1104/3284/289 1103/3285/241 -f 1103/3285/241 1104/3284/289 1074/3286/287 1073/3287/240 -f 1105/3288/5 1106/3289/306 1108/3290/307 1107/3291/308 -f 1107/3292/308 1108/3293/307 1110/3294/309 1109/3295/310 -f 1109/3295/310 1110/3294/309 1112/3296/311 1111/3297/6 -f 1111/3297/6 1112/3296/311 1114/3298/312 1113/3299/313 -f 1113/3299/313 1114/3298/312 1116/3300/314 1115/3301/315 -f 1115/3301/315 1116/3300/314 1106/3289/306 1105/3288/5 -f 1117/3302/5 1118/3303/316 1120/3304/317 1119/3305/315 -f 1119/3306/315 1120/3307/317 1122/3308/318 1121/3309/313 -f 1121/3309/313 1122/3308/318 1124/3310/319 1123/3311/6 -f 1123/3311/6 1124/3310/319 1126/3312/320 1125/3313/310 -f 1125/3313/310 1126/3312/320 1128/3314/321 1127/3315/308 -f 1127/3315/308 1128/3314/321 1118/3303/316 1117/3302/5 -f 1129/3316/5 1130/3317/316 1132/3318/317 1131/3319/315 -f 1131/3320/315 1132/3321/317 1134/3322/318 1133/3323/313 -f 1133/3323/313 1134/3322/318 1136/3324/319 1135/3325/6 -f 1135/3325/6 1136/3324/319 1138/3326/320 1137/3327/310 -f 1137/3327/310 1138/3326/320 1140/3328/321 1139/3329/308 -f 1139/3329/308 1140/3328/321 1130/3317/316 1129/3316/5 -f 1141/3330/5 1142/3331/316 1144/3332/317 1143/3333/315 -f 1143/3334/315 1144/3335/317 1146/3336/318 1145/3337/313 -f 1145/3337/313 1146/3336/318 1148/3338/319 1147/3339/6 -f 1147/3339/6 1148/3338/319 1150/3340/320 1149/3341/310 -f 1149/3341/310 1150/3340/320 1152/3342/321 1151/3343/308 -f 1151/3343/308 1152/3342/321 1142/3331/316 1141/3330/5 -f 1153/3344/5 1154/3345/306 1156/3346/307 1155/3347/308 -f 1155/3348/308 1156/3349/307 1158/3350/309 1157/3351/310 -f 1157/3351/310 1158/3350/309 1160/3352/311 1159/3353/6 -f 1159/3353/6 1160/3352/311 1162/3354/312 1161/3355/313 -f 1161/3355/313 1162/3354/312 1164/3356/314 1163/3357/315 -f 1163/3357/315 1164/3356/314 1154/3345/306 1153/3344/5 -f 1165/3358/5 1166/3359/306 1168/3360/307 1167/3361/308 -f 1167/3362/308 1168/3363/307 1170/3364/309 1169/3365/310 -f 1169/3365/310 1170/3364/309 1172/3366/311 1171/3367/6 -f 1171/3367/6 1172/3366/311 1174/3368/312 1173/3369/313 -f 1173/3369/313 1174/3368/312 1176/3370/314 1175/3371/315 -f 1175/3371/315 1176/3370/314 1166/3359/306 1165/3358/5 -f 1189/3372/322 1190/3373/323 1192/3374/324 1191/3375/325 -f 1191/3375/325 1192/3374/324 1194/3376/326 1193/3377/327 -f 1193/3377/327 1194/3376/326 1196/3378/328 1195/3379/329 -f 1195/3379/329 1196/3378/328 1198/3380/330 1197/3381/331 -f 1197/3381/331 1198/3380/330 1200/3382/332 1199/3383/333 -f 1199/3383/333 1200/3382/332 1202/3384/334 1201/3385/335 -f 1201/3385/335 1202/3384/334 1204/3386/336 1203/3387/337 -f 1203/3387/337 1204/3386/336 1206/3388/338 1205/3389/339 -f 1205/3389/339 1206/3388/338 1208/3390/340 1207/3391/341 -f 1207/3391/341 1208/3390/340 1210/3392/342 1209/3393/343 -f 1209/3393/343 1210/3392/342 1212/3394/344 1211/3395/345 -f 1211/3395/345 1212/3394/344 1214/3396/346 1213/3397/347 -f 1213/3398/347 1214/3399/346 1216/3400/348 1215/3401/349 -f 1215/3401/349 1216/3400/348 1218/3402/350 1217/3403/351 -f 1192/3404/324 1190/3405/323 1220/3406/352 1218/3407/350 1216/3408/348 1214/3409/346 1212/3410/344 1210/3411/342 1208/3412/340 1206/3413/338 1204/3414/336 1202/3415/334 1200/3416/332 1198/3417/330 1196/3418/328 1194/3419/326 -f 1217/3403/351 1218/3402/350 1220/3420/352 1219/3421/353 -f 1219/3421/353 1220/3420/352 1190/3373/323 1189/3372/322 -f 1189/3422/322 1191/3423/325 1193/3424/327 1195/3425/329 1197/3426/331 1199/3427/333 1201/3428/335 1203/3429/337 1205/3430/339 1207/3431/341 1209/3432/343 1211/3433/345 1213/3434/347 1215/3435/349 1217/3436/351 1219/3437/353 -f 1285/3438/354 1234/3439/355 1232/3440/46 1298/3441/356 -f 1231/3442/47 1236/3443/357 1290/3444/358 1293/3445/359 -f 1275/3446/360 1273/3447/361 1278/3448/362 1280/3449/363 -f 1271/3450/364 1269/3451/365 1282/3452/366 1284/3453/367 -f 1286/3454/368 1297/3455/369 1242/3456/370 1237/3457/371 -f 1249/3458/372 1278/3448/362 1273/3447/361 1246/3459/373 -f 1247/3460/364 1245/3461/365 1250/3462/366 1252/3463/367 -f 1263/3464/360 1261/3465/361 1266/3466/362 1268/3467/363 -f 1260/3468/374 1255/3469/375 1253/3470/354 1258/3471/356 -f 1240/3472/376 1243/3473/377 1241/3474/359 1238/3475/358 -f 1297/3455/369 1286/3454/368 1288/3476/378 1299/3477/379 -f 1250/3462/366 1245/3461/365 1238/3475/358 1241/3474/359 -f 1258/3471/356 1253/3470/354 1262/3478/380 1265/3479/381 -f 1296/3480/382 1291/3481/383 1289/3482/371 1294/3483/370 -f 1246/3459/373 1248/3484/384 1251/3485/385 1249/3458/372 -f 1287/3486/375 1285/3438/354 1298/3441/356 1300/3487/374 -f 1272/3488/384 1271/3489/364 1284/3490/367 1283/3491/385 -f 1262/3478/380 1264/3492/386 1267/3493/387 1265/3479/381 -f 1281/3494/372 1266/3466/362 1261/3465/361 1270/3495/373 -f 1299/3477/379 1288/3476/378 1287/3496/375 1300/3497/374 -f 1293/3445/359 1290/3444/358 1292/3498/376 1295/3499/377 -f 1237/3457/371 1242/3456/370 1244/3500/382 1239/3501/383 -f 1270/3495/373 1272/3488/384 1283/3491/385 1281/3494/372 -f 1257/3502/369 1254/3503/368 1256/3504/378 1259/3505/379 -f 1230/3506/45 1282/3452/366 1269/3451/365 1235/3507/388 -f 1276/3508/386 1275/3509/360 1280/3510/363 1279/3511/387 -f 1233/3512/389 1274/3513/380 1277/3514/381 1229/3515/44 -f 1254/3503/368 1257/3502/369 1294/3483/370 1289/3482/371 -f 1264/3492/386 1263/3516/360 1268/3517/363 1267/3493/387 -f 1248/3484/384 1247/3518/364 1252/3519/367 1251/3485/385 -f 1239/3501/383 1244/3500/382 1243/3520/377 1240/3521/376 -f 1259/3505/379 1256/3504/378 1255/3522/375 1260/3523/374 -f 1274/3513/380 1276/3508/386 1279/3511/387 1277/3514/381 -f 1295/3499/377 1292/3498/376 1291/3524/383 1296/3525/382 -f 1326/3526/390 1327/3527/391 1332/3528/392 1329/3529/393 -f 1318/3530/394 1319/3531/395 1324/3532/396 1321/3533/397 -f 1330/3534/398 1331/3535/399 1314/3536/47 1313/3537/45 -f 1322/3538/400 1323/3539/401 1328/3540/402 1325/3541/403 -f 1311/3542/44 1312/3543/46 1320/3544/404 1317/3545/405 -f 1319/3531/395 1318/3530/394 1317/3545/405 1320/3544/404 -f 1323/3539/401 1322/3538/400 1321/3533/397 1324/3532/396 -f 1327/3527/391 1326/3526/390 1325/3541/403 1328/3540/402 -f 1331/3535/399 1330/3534/398 1329/3529/393 1332/3528/392 -f 1350/3546/390 1351/3547/391 1356/3548/392 1353/3549/393 -f 1342/3550/394 1343/3551/395 1348/3552/396 1345/3553/397 -f 1354/3554/398 1355/3555/399 1338/3556/47 1337/3557/45 -f 1346/3558/400 1347/3559/401 1352/3560/406 1349/3561/403 -f 1335/3562/44 1336/3563/46 1344/3564/404 1341/3565/405 -f 1343/3551/395 1342/3550/394 1341/3565/405 1344/3564/404 -f 1347/3559/401 1346/3558/400 1345/3553/397 1348/3552/396 -f 1351/3547/391 1350/3546/390 1349/3561/403 1352/3560/406 -f 1355/3555/399 1354/3554/398 1353/3549/393 1356/3548/392 -f 1374/3566/390 1375/3567/391 1380/3568/392 1377/3569/393 -f 1366/3570/394 1367/3571/395 1372/3572/396 1369/3573/397 -f 1378/3574/398 1379/3575/399 1362/3576/47 1361/3577/45 -f 1370/3578/400 1371/3579/401 1376/3580/402 1373/3581/403 -f 1359/3582/44 1360/3583/46 1368/3584/404 1365/3585/405 -f 1367/3571/395 1366/3570/394 1365/3585/405 1368/3584/404 -f 1371/3579/401 1370/3578/400 1369/3573/397 1372/3572/396 -f 1375/3567/391 1374/3566/390 1373/3581/403 1376/3580/402 -f 1379/3575/399 1378/3574/398 1377/3569/393 1380/3568/392 -f 1398/3586/390 1399/3587/391 1404/3588/392 1401/3589/393 -f 1390/3590/394 1391/3591/395 1396/3592/396 1393/3593/397 -f 1402/3594/398 1403/3595/399 1386/3596/47 1385/3597/45 -f 1394/3598/400 1395/3599/401 1400/3600/402 1397/3601/403 -f 1383/3602/44 1384/3603/46 1392/3604/404 1389/3605/405 -f 1391/3591/395 1390/3590/394 1389/3605/405 1392/3604/404 -f 1395/3599/401 1394/3598/400 1393/3593/397 1396/3592/396 -f 1399/3587/391 1398/3586/390 1397/3601/403 1400/3600/402 -f 1403/3595/399 1402/3594/398 1401/3589/393 1404/3588/392 -f 1413/3606/322 1414/3607/323 1416/3608/324 1415/3609/325 -f 1415/3609/325 1416/3608/324 1418/3610/326 1417/3611/327 -f 1417/3611/327 1418/3610/326 1420/3612/328 1419/3613/329 -f 1419/3613/329 1420/3612/328 1422/3614/330 1421/3615/331 -f 1421/3615/331 1422/3614/330 1424/3616/332 1423/3617/333 -f 1423/3617/333 1424/3616/332 1426/3618/334 1425/3619/335 -f 1425/3619/335 1426/3618/334 1428/3620/407 1427/3621/337 -f 1427/3621/337 1428/3620/407 1430/3622/338 1429/3623/339 -f 1429/3623/339 1430/3622/338 1432/3624/340 1431/3625/341 -f 1431/3625/341 1432/3624/340 1434/3626/342 1433/3627/343 -f 1433/3627/343 1434/3626/342 1436/3628/344 1435/3629/345 -f 1435/3629/345 1436/3628/344 1438/3630/346 1437/3631/347 -f 1437/3632/347 1438/3633/346 1440/3634/348 1439/3635/349 -f 1439/3635/349 1440/3634/348 1442/3636/350 1441/3637/351 -f 1416/3638/324 1414/3639/323 1444/3640/352 1442/3641/350 1440/3642/348 1438/3643/346 1436/3644/344 1434/3645/342 1432/3646/340 1430/3647/338 1428/3648/407 1426/3649/334 1424/3650/332 1422/3651/330 1420/3652/328 1418/3653/326 -f 1441/3637/351 1442/3636/350 1444/3654/352 1443/3655/353 -f 1443/3655/353 1444/3654/352 1414/3607/323 1413/3606/322 -f 1413/3656/322 1415/3657/325 1417/3658/327 1419/3659/329 1421/3660/331 1423/3661/333 1425/3662/335 1427/3663/337 1429/3664/339 1431/3665/341 1433/3666/343 1435/3667/345 1437/3668/347 1439/3669/349 1441/3670/351 1443/3671/353 -f 1445/3672/240 1446/3673/287 1448/3674/301 1447/3675/408 -f 1447/3675/408 1448/3674/301 1450/3676/291 1449/3677/243 -f 1449/3678/243 1450/3679/291 1452/3680/302 1451/3681/303 -f 1451/3681/303 1452/3680/302 1454/3682/295 1453/3683/247 -f 1453/3683/247 1454/3682/295 1456/3684/409 1455/3685/304 -f 1455/3685/304 1456/3684/409 1458/3686/299 1457/3687/251 -f 1457/3687/251 1458/3686/299 1460/3688/285 1459/3689/305 -f 1459/3689/305 1460/3688/285 1462/3690/286 1461/3691/237 -f 1461/3691/237 1462/3690/286 1464/3692/410 1463/3693/411 -f 1463/3693/411 1464/3692/410 1466/3694/292 1465/3695/244 -f 1465/3696/244 1466/3697/292 1468/3698/294 1467/3699/246 -f 1467/3699/246 1468/3698/294 1470/3700/296 1469/3701/248 -f 1469/3701/248 1470/3700/296 1472/3702/412 1471/3703/413 -f 1471/3703/413 1472/3702/412 1474/3704/300 1473/3705/252 -f 1473/3705/252 1474/3704/300 1476/3706/414 1475/3707/241 -f 1475/3707/241 1476/3706/414 1446/3673/287 1445/3672/240 -f 1495/3708/4 1496/3709/4 1498/3710/28 1497/3711/28 -f 1497/3711/28 1498/3710/28 1500/3712/5 1499/3713/5 -f 1499/3713/5 1500/3712/5 1502/3714/72 1501/3715/72 -f 1501/3715/72 1502/3714/72 1504/3716/2 1503/3717/2 -f 1503/3717/2 1504/3716/2 1506/3718/29 1505/3719/29 -f 1505/3719/29 1506/3718/29 1508/3720/6 1507/3721/6 -f 1507/3721/6 1508/3720/6 1510/3722/39 1509/3723/39 -f 1509/3724/39 1510/3725/39 1496/3709/4 1495/3708/4 -f 1572/3726/415 1538/3727/287 1540/3728/288 1573/3729/416 -f 1573/3729/416 1540/3728/288 1542/3730/291 1577/3731/417 -f 1577/3731/417 1542/3730/291 1544/3732/293 1581/3733/418 -f 1581/3733/418 1544/3732/293 1546/3734/295 1585/3735/419 -f 1585/3735/419 1546/3734/295 1548/3736/409 1589/3737/420 -f 1589/3737/420 1548/3736/409 1550/3738/299 1593/3739/421 -f 1593/3739/421 1550/3738/299 1552/3740/285 1597/3741/422 -f 1597/3741/422 1552/3740/285 1554/3742/286 1601/3743/423 -f 1601/3743/423 1554/3742/286 1556/3744/290 1605/3745/424 -f 1605/3745/424 1556/3744/290 1558/3746/292 1609/3747/425 -f 1609/3747/425 1558/3746/292 1560/3748/294 1613/3749/426 -f 1613/3749/426 1560/3748/294 1562/3750/296 1617/3751/427 -f 1617/3751/427 1562/3750/296 1564/3752/298 1621/3753/428 -f 1621/3753/428 1564/3752/298 1566/3754/300 1625/3755/429 -f 1625/3755/429 1566/3754/300 1568/3756/289 1629/3757/430 -f 1567/3758/241 1632/3759/431 1569/3760/432 1537/3761/240 -f 1632/3759/431 1631/3762/433 1570/3763/434 1569/3760/432 -f 1626/3764/435 1630/3765/436 1631/3766/433 1627/3767/437 -f 1630/3768/436 1629/3769/430 1572/3726/415 1571/3770/438 -f 1565/3771/252 1628/3772/439 1632/3773/431 1567/3774/241 -f 1628/3772/439 1627/3767/437 1631/3766/433 1632/3773/431 -f 1622/3775/440 1626/3764/435 1627/3767/437 1623/3776/441 -f 1626/3764/435 1625/3755/429 1629/3757/430 1630/3765/436 -f 1563/3777/413 1624/3778/442 1628/3772/439 1565/3771/252 -f 1624/3778/442 1623/3776/441 1627/3767/437 1628/3772/439 -f 1618/3779/443 1622/3775/440 1623/3776/441 1619/3780/444 -f 1622/3775/440 1621/3753/428 1625/3755/429 1626/3764/435 -f 1561/3781/248 1620/3782/445 1624/3778/442 1563/3777/413 -f 1620/3782/445 1619/3780/444 1623/3776/441 1624/3778/442 -f 1614/3783/446 1618/3779/443 1619/3780/444 1615/3784/447 -f 1618/3779/443 1617/3751/427 1621/3753/428 1622/3775/440 -f 1559/3785/246 1616/3786/448 1620/3782/445 1561/3781/248 -f 1616/3786/448 1615/3784/447 1619/3780/444 1620/3782/445 -f 1610/3787/449 1614/3783/446 1615/3784/447 1611/3788/450 -f 1614/3783/446 1613/3749/426 1617/3751/427 1618/3779/443 -f 1557/3789/244 1612/3790/451 1616/3786/448 1559/3785/246 -f 1612/3790/451 1611/3788/450 1615/3784/447 1616/3786/448 -f 1606/3791/452 1610/3787/449 1611/3788/450 1607/3792/453 -f 1610/3787/449 1609/3747/425 1613/3749/426 1614/3783/446 -f 1555/3793/242 1608/3794/454 1612/3790/451 1557/3789/244 -f 1608/3794/454 1607/3792/453 1611/3788/450 1612/3790/451 -f 1602/3795/455 1606/3791/452 1607/3792/453 1603/3796/456 -f 1606/3791/452 1605/3745/424 1609/3747/425 1610/3787/449 -f 1553/3797/237 1604/3798/457 1608/3794/454 1555/3793/242 -f 1604/3798/457 1603/3796/456 1607/3792/453 1608/3794/454 -f 1598/3799/458 1602/3795/455 1603/3796/456 1599/3800/459 -f 1602/3795/455 1601/3743/423 1605/3745/424 1606/3791/452 -f 1551/3801/238 1600/3802/460 1604/3798/457 1553/3797/237 -f 1600/3802/460 1599/3800/459 1603/3796/456 1604/3798/457 -f 1594/3803/461 1598/3799/458 1599/3800/459 1595/3804/462 -f 1598/3799/458 1597/3741/422 1601/3743/423 1602/3795/455 -f 1549/3805/251 1596/3806/463 1600/3802/460 1551/3801/238 -f 1596/3806/463 1595/3804/462 1599/3800/459 1600/3802/460 -f 1590/3807/464 1594/3803/461 1595/3804/462 1591/3808/465 -f 1594/3803/461 1593/3739/421 1597/3741/422 1598/3799/458 -f 1547/3809/249 1592/3810/466 1596/3806/463 1549/3805/251 -f 1592/3810/466 1591/3808/465 1595/3804/462 1596/3806/463 -f 1586/3811/467 1590/3807/464 1591/3808/465 1587/3812/468 -f 1590/3807/464 1589/3737/420 1593/3739/421 1594/3803/461 -f 1545/3813/247 1588/3814/469 1592/3810/466 1547/3809/249 -f 1588/3814/469 1587/3812/468 1591/3808/465 1592/3810/466 -f 1582/3815/470 1586/3811/467 1587/3812/468 1583/3816/471 -f 1586/3811/467 1585/3735/419 1589/3737/420 1590/3807/464 -f 1543/3817/245 1584/3818/472 1588/3814/469 1545/3813/247 -f 1584/3818/472 1583/3816/471 1587/3812/468 1588/3814/469 -f 1578/3819/473 1582/3815/470 1583/3816/471 1579/3820/474 -f 1582/3815/470 1581/3733/418 1585/3735/419 1586/3811/467 -f 1541/3821/243 1580/3822/475 1584/3818/472 1543/3817/245 -f 1580/3822/475 1579/3820/474 1583/3816/471 1584/3818/472 -f 1574/3823/476 1578/3819/473 1579/3820/474 1575/3824/477 -f 1578/3819/473 1577/3731/417 1581/3733/418 1582/3815/470 -f 1539/3825/408 1576/3826/478 1580/3822/475 1541/3821/243 -f 1576/3826/478 1575/3824/477 1579/3820/474 1580/3822/475 -f 1570/3763/434 1571/3770/438 1574/3823/476 1575/3824/477 -f 1574/3823/476 1573/3729/416 1577/3731/417 1578/3819/473 -f 1537/3761/240 1569/3760/432 1576/3826/478 1539/3825/408 -f 1569/3760/432 1570/3763/434 1575/3824/477 1576/3826/478 -f 1629/3769/430 1568/3827/289 1538/3727/287 1572/3726/415 -f 1571/3770/438 1572/3726/415 1573/3729/416 1574/3823/476 -f 1630/3768/436 1571/3770/438 1570/3763/434 1631/3762/433 -f 1633/3828/240 1634/3829/287 1636/3830/288 1635/3831/408 -f 1635/3831/408 1636/3830/288 1638/3832/291 1637/3833/243 -f 1637/3833/243 1638/3832/291 1640/3834/302 1639/3835/303 -f 1639/3835/303 1640/3834/302 1642/3836/295 1641/3837/247 -f 1641/3837/247 1642/3836/295 1644/3838/409 1643/3839/304 -f 1643/3839/304 1644/3838/409 1646/3840/299 1645/3841/251 -f 1645/3841/251 1646/3840/299 1648/3842/479 1647/3843/305 -f 1647/3843/305 1648/3842/479 1650/3844/286 1649/3845/237 -f 1649/3846/237 1650/3847/286 1652/3848/410 1651/3849/242 -f 1651/3849/242 1652/3848/410 1654/3850/292 1653/3851/244 -f 1653/3851/244 1654/3850/292 1656/3852/294 1655/3853/246 -f 1655/3853/246 1656/3852/294 1658/3854/296 1657/3855/248 -f 1657/3855/248 1658/3854/296 1660/3856/412 1659/3857/250 -f 1659/3857/250 1660/3856/412 1662/3858/300 1661/3859/252 -f 1661/3859/252 1662/3858/300 1664/3860/414 1663/3861/480 -f 1663/3861/480 1664/3860/414 1634/3862/287 1633/3863/240 -f 1665/3864/240 1666/3865/287 1668/3866/301 1667/3867/239 -f 1667/3867/239 1668/3866/301 1670/3868/291 1669/3869/243 -f 1669/3869/243 1670/3868/291 1672/3870/302 1671/3871/303 -f 1671/3871/303 1672/3870/302 1674/3872/295 1673/3873/247 -f 1673/3873/247 1674/3872/295 1676/3874/409 1675/3875/304 -f 1675/3875/304 1676/3874/409 1678/3876/299 1677/3877/251 -f 1677/3877/251 1678/3876/299 1680/3878/479 1679/3879/305 -f 1679/3879/305 1680/3878/479 1682/3880/286 1681/3881/237 -f 1681/3882/237 1682/3883/286 1684/3884/410 1683/3885/411 -f 1683/3885/411 1684/3884/410 1686/3886/292 1685/3887/244 -f 1685/3887/244 1686/3886/292 1688/3888/294 1687/3889/246 -f 1687/3889/246 1688/3888/294 1690/3890/296 1689/3891/248 -f 1689/3891/248 1690/3890/296 1692/3892/412 1691/3893/413 -f 1691/3893/413 1692/3892/412 1694/3894/300 1693/3895/252 -f 1693/3895/252 1694/3894/300 1696/3896/289 1695/3897/241 -f 1695/3897/241 1696/3896/289 1666/3898/287 1665/3899/240 -f 1733/3900/5 1734/3901/316 1736/3902/317 1735/3903/315 -f 1735/3904/315 1736/3905/317 1738/3906/318 1737/3907/313 -f 1737/3907/313 1738/3906/318 1740/3908/319 1739/3909/6 -f 1739/3909/6 1740/3908/319 1742/3910/320 1741/3911/310 -f 1741/3911/310 1742/3910/320 1744/3912/321 1743/3913/308 -f 1743/3913/308 1744/3912/321 1734/3901/316 1733/3900/5 -f 1745/3914/5 1746/3915/306 1748/3916/307 1747/3917/308 -f 1747/3918/308 1748/3919/307 1750/3920/309 1749/3921/310 -f 1749/3921/310 1750/3920/309 1752/3922/311 1751/3923/6 -f 1751/3923/6 1752/3922/311 1754/3924/312 1753/3925/313 -f 1753/3925/313 1754/3924/312 1756/3926/314 1755/3927/315 -f 1755/3927/315 1756/3926/314 1746/3915/306 1745/3914/5 -f 1757/3928/5 1758/3929/306 1760/3930/307 1759/3931/308 -f 1759/3932/308 1760/3933/307 1762/3934/309 1761/3935/310 -f 1761/3935/310 1762/3934/309 1764/3936/311 1763/3937/6 -f 1763/3937/6 1764/3936/311 1766/3938/312 1765/3939/313 -f 1765/3939/313 1766/3938/312 1768/3940/314 1767/3941/315 -f 1767/3941/315 1768/3940/314 1758/3929/306 1757/3928/5 -f 1769/3942/5 1770/3943/306 1772/3944/307 1771/3945/308 -f 1771/3946/308 1772/3947/307 1774/3948/309 1773/3949/310 -f 1773/3949/310 1774/3948/309 1776/3950/311 1775/3951/6 -f 1775/3951/6 1776/3950/311 1778/3952/312 1777/3953/313 -f 1777/3953/313 1778/3952/312 1780/3954/314 1779/3955/315 -f 1779/3955/315 1780/3954/314 1770/3943/306 1769/3942/5 -f 1781/3956/5 1782/3957/306 1784/3958/307 1783/3959/308 -f 1783/3960/308 1784/3961/307 1786/3962/309 1785/3963/310 -f 1785/3963/310 1786/3962/309 1788/3964/311 1787/3965/6 -f 1787/3965/6 1788/3964/311 1790/3966/312 1789/3967/313 -f 1789/3967/313 1790/3966/312 1792/3968/314 1791/3969/315 -f 1791/3969/315 1792/3968/314 1782/3957/306 1781/3956/5 -f 1793/3970/5 1794/3971/316 1796/3972/317 1795/3973/315 -f 1795/3974/315 1796/3975/317 1798/3976/318 1797/3977/313 -f 1797/3977/313 1798/3976/318 1800/3978/319 1799/3979/6 -f 1799/3979/6 1800/3978/319 1802/3980/320 1801/3981/310 -f 1801/3981/310 1802/3980/320 1804/3982/321 1803/3983/308 -f 1803/3983/308 1804/3982/321 1794/3971/316 1793/3970/5 -f 1805/3984/5 1806/3985/316 1808/3986/317 1807/3987/315 -f 1807/3988/315 1808/3989/317 1810/3990/318 1809/3991/313 -f 1809/3991/313 1810/3990/318 1812/3992/319 1811/3993/6 -f 1811/3993/6 1812/3992/319 1814/3994/320 1813/3995/310 -f 1813/3995/310 1814/3994/320 1816/3996/321 1815/3997/308 -f 1815/3997/308 1816/3996/321 1806/3985/316 1805/3984/5 -f 1817/3998/5 1818/3999/316 1820/4000/317 1819/4001/315 -f 1819/4002/315 1820/4003/317 1822/4004/318 1821/4005/313 -f 1821/4005/313 1822/4004/318 1824/4006/319 1823/4007/6 -f 1823/4007/6 1824/4006/319 1826/4008/320 1825/4009/310 -f 1825/4009/310 1826/4008/320 1828/4010/321 1827/4011/308 -f 1827/4011/308 1828/4010/321 1818/3999/316 1817/3998/5 -f 1829/4012/5 1830/4013/316 1832/4014/317 1831/4015/315 -f 1831/4016/315 1832/4017/317 1834/4018/318 1833/4019/313 -f 1833/4019/313 1834/4018/318 1836/4020/319 1835/4021/6 -f 1835/4021/6 1836/4020/319 1838/4022/320 1837/4023/310 -f 1837/4023/310 1838/4022/320 1840/4024/321 1839/4025/308 -f 1839/4025/308 1840/4024/321 1830/4013/316 1829/4012/5 -f 1841/4026/5 1842/4027/306 1844/4028/307 1843/4029/308 -f 1843/4030/308 1844/4031/307 1846/4032/309 1845/4033/310 -f 1845/4033/310 1846/4032/309 1848/4034/311 1847/4035/6 -f 1847/4035/6 1848/4034/311 1850/4036/312 1849/4037/313 -f 1849/4037/313 1850/4036/312 1852/4038/314 1851/4039/315 -f 1851/4039/315 1852/4038/314 1842/4027/306 1841/4026/5 -f 1853/4040/5 1854/4041/306 1856/4042/307 1855/4043/308 -f 1855/4044/308 1856/4045/307 1858/4046/309 1857/4047/310 -f 1857/4047/310 1858/4046/309 1860/4048/311 1859/4049/6 -f 1859/4049/6 1860/4048/311 1862/4050/312 1861/4051/313 -f 1861/4051/313 1862/4050/312 1864/4052/314 1863/4053/315 -f 1863/4053/315 1864/4052/314 1854/4041/306 1853/4040/5 -f 1865/4054/5 1866/4055/306 1868/4056/307 1867/4057/308 -f 1867/4058/308 1868/4059/307 1870/4060/309 1869/4061/310 -f 1869/4061/310 1870/4060/309 1872/4062/311 1871/4063/6 -f 1871/4063/6 1872/4062/311 1874/4064/312 1873/4065/313 -f 1873/4065/313 1874/4064/312 1876/4066/314 1875/4067/315 -f 1875/4067/315 1876/4066/314 1866/4055/306 1865/4054/5 -f 1877/4068/5 1878/4069/306 1880/4070/307 1879/4071/308 -f 1879/4072/308 1880/4073/307 1882/4074/309 1881/4075/310 -f 1881/4075/310 1882/4074/309 1884/4076/311 1883/4077/6 -f 1883/4077/6 1884/4076/311 1886/4078/312 1885/4079/313 -f 1885/4079/313 1886/4078/312 1888/4080/314 1887/4081/315 -f 1887/4081/315 1888/4080/314 1878/4069/306 1877/4068/5 -f 1889/4082/5 1890/4083/316 1892/4084/317 1891/4085/315 -f 1891/4086/315 1892/4087/317 1894/4088/318 1893/4089/313 -f 1893/4089/313 1894/4088/318 1896/4090/319 1895/4091/6 -f 1895/4091/6 1896/4090/319 1898/4092/320 1897/4093/310 -f 1897/4093/310 1898/4092/320 1900/4094/321 1899/4095/308 -f 1899/4095/308 1900/4094/321 1890/4083/316 1889/4082/5 -f 1901/4096/5 1902/4097/316 1904/4098/317 1903/4099/315 -f 1903/4100/315 1904/4101/317 1906/4102/318 1905/4103/313 -f 1905/4103/313 1906/4102/318 1908/4104/319 1907/4105/6 -f 1907/4105/6 1908/4104/319 1910/4106/320 1909/4107/310 -f 1909/4107/310 1910/4106/320 1912/4108/321 1911/4109/308 -f 1911/4109/308 1912/4108/321 1902/4097/316 1901/4096/5 -f 1913/4110/5 1914/4111/316 1916/4112/317 1915/4113/315 -f 1915/4114/315 1916/4115/317 1918/4116/318 1917/4117/313 -f 1917/4117/313 1918/4116/318 1920/4118/319 1919/4119/6 -f 1919/4119/6 1920/4118/319 1922/4120/320 1921/4121/310 -f 1921/4121/310 1922/4120/320 1924/4122/321 1923/4123/308 -f 1923/4123/308 1924/4122/321 1914/4111/316 1913/4110/5 -f 1925/4124/5 1926/4125/481 1928/4126/482 1927/4127/483 -f 1927/4128/483 1928/4129/482 1930/4130/484 1929/4131/485 -f 1929/4131/485 1930/4130/484 1932/4132/486 1931/4133/6 -f 1931/4133/6 1932/4132/486 1934/4134/487 1933/4135/488 -f 1933/4135/488 1934/4134/487 1936/4136/489 1935/4137/490 -f 1935/4137/490 1936/4136/489 1926/4125/481 1925/4124/5 -f 1937/4138/5 1938/4139/481 1940/4140/482 1939/4141/483 -f 1939/4142/483 1940/4143/482 1942/4144/484 1941/4145/485 -f 1941/4145/485 1942/4144/484 1944/4146/486 1943/4147/6 -f 1943/4147/6 1944/4146/486 1946/4148/487 1945/4149/488 -f 1945/4149/488 1946/4148/487 1948/4150/489 1947/4151/490 -f 1947/4151/490 1948/4150/489 1938/4139/481 1937/4138/5 -f 1949/4152/5 1950/4153/491 1952/4154/492 1951/4155/490 -f 1951/4156/490 1952/4157/492 1954/4158/493 1953/4159/488 -f 1953/4159/488 1954/4158/493 1956/4160/494 1955/4161/6 -f 1955/4161/6 1956/4160/494 1958/4162/495 1957/4163/485 -f 1957/4163/485 1958/4162/495 1960/4164/496 1959/4165/483 -f 1959/4165/483 1960/4164/496 1950/4153/491 1949/4152/5 -f 1961/4166/5 1962/4167/491 1964/4168/492 1963/4169/490 -f 1963/4170/490 1964/4171/492 1966/4172/493 1965/4173/488 -f 1965/4173/488 1966/4172/493 1968/4174/494 1967/4175/6 -f 1967/4175/6 1968/4174/494 1970/4176/495 1969/4177/485 -f 1969/4177/485 1970/4176/495 1972/4178/496 1971/4179/483 -f 1971/4179/483 1972/4178/496 1962/4167/491 1961/4166/5 -f 1973/4180/491 1974/4181/481 1976/4182/482 1975/4183/496 -f 1975/4184/496 1976/4185/482 1978/4186/484 1977/4187/495 -f 1977/4187/495 1978/4186/484 1980/4188/486 1979/4189/494 -f 1979/4189/494 1980/4188/486 1982/4190/487 1981/4191/493 -f 1981/4191/493 1982/4190/487 1983/4192/489 1984/4193/492 -f 1984/4193/492 1983/4192/489 1974/4181/481 1973/4180/491 -f 1985/4194/491 1986/4195/481 1988/4196/482 1987/4197/496 -f 1987/4198/496 1988/4199/482 1990/4200/484 1989/4201/495 -f 1989/4201/495 1990/4200/484 1992/4202/486 1991/4203/494 -f 1991/4203/494 1992/4202/486 1994/4204/487 1993/4205/493 -f 1993/4205/493 1994/4204/487 1995/4206/489 1996/4207/492 -f 1996/4207/492 1995/4206/489 1986/4195/481 1985/4194/491 -f 1997/4208/491 1998/4209/481 2000/4210/482 1999/4211/496 -f 1999/4212/496 2000/4213/482 2002/4214/484 2001/4215/495 -f 2001/4215/495 2002/4214/484 2004/4216/486 2003/4217/494 -f 2003/4217/494 2004/4216/486 2006/4218/487 2005/4219/493 -f 2005/4219/493 2006/4218/487 2007/4220/489 2008/4221/492 -f 2008/4221/492 2007/4220/489 1998/4209/481 1997/4208/491 -f 2009/4222/306 2010/4223/316 2012/4224/317 2011/4225/314 -f 2011/4226/314 2012/4227/317 2014/4228/318 2013/4229/312 -f 2013/4229/312 2014/4228/318 2016/4230/319 2015/4231/311 -f 2015/4231/311 2016/4230/319 2018/4232/320 2017/4233/309 -f 2017/4233/309 2018/4232/320 2019/4234/321 2020/4235/307 -f 2020/4235/307 2019/4234/321 2010/4223/316 2009/4222/306 -f 2021/4236/5 2022/4237/481 2024/4238/482 2023/4239/483 -f 2023/4240/483 2024/4241/482 2026/4242/484 2025/4243/485 -f 2025/4243/485 2026/4242/484 2028/4244/486 2027/4245/6 -f 2027/4245/6 2028/4244/486 2030/4246/487 2029/4247/488 -f 2029/4247/488 2030/4246/487 2032/4248/489 2031/4249/490 -f 2031/4249/490 2032/4248/489 2022/4237/481 2021/4236/5 -f 2033/4250/5 2034/4251/481 2036/4252/482 2035/4253/483 -f 2035/4254/483 2036/4255/482 2038/4256/484 2037/4257/485 -f 2037/4257/485 2038/4256/484 2040/4258/486 2039/4259/6 -f 2039/4259/6 2040/4258/486 2042/4260/487 2041/4261/488 -f 2041/4261/488 2042/4260/487 2044/4262/489 2043/4263/490 -f 2043/4263/490 2044/4262/489 2034/4251/481 2033/4250/5 -f 2045/4264/5 2046/4265/491 2048/4266/492 2047/4267/490 -f 2047/4268/490 2048/4269/492 2050/4270/493 2049/4271/488 -f 2049/4271/488 2050/4270/493 2052/4272/494 2051/4273/6 -f 2051/4273/6 2052/4272/494 2054/4274/495 2053/4275/485 -f 2053/4275/485 2054/4274/495 2056/4276/496 2055/4277/483 -f 2055/4277/483 2056/4276/496 2046/4265/491 2045/4264/5 -f 2057/4278/5 2058/4279/491 2060/4280/492 2059/4281/490 -f 2059/4282/490 2060/4283/492 2062/4284/493 2061/4285/488 -f 2061/4285/488 2062/4284/493 2064/4286/494 2063/4287/6 -f 2063/4287/6 2064/4286/494 2066/4288/495 2065/4289/485 -f 2065/4289/485 2066/4288/495 2068/4290/496 2067/4291/483 -f 2067/4291/483 2068/4290/496 2058/4279/491 2057/4278/5 -f 2069/4292/306 2070/4293/316 2072/4294/317 2071/4295/314 -f 2071/4296/314 2072/4297/317 2074/4298/318 2073/4299/312 -f 2073/4299/312 2074/4298/318 2076/4300/319 2075/4301/311 -f 2075/4301/311 2076/4300/319 2078/4302/320 2077/4303/309 -f 2077/4303/309 2078/4302/320 2079/4304/321 2080/4305/307 -f 2080/4305/307 2079/4304/321 2070/4293/316 2069/4292/306 -f 2081/4306/306 2082/4307/316 2084/4308/317 2083/4309/314 -f 2083/4310/314 2084/4311/317 2086/4312/318 2085/4313/312 -f 2085/4313/312 2086/4312/318 2088/4314/319 2087/4315/311 -f 2087/4315/311 2088/4314/319 2090/4316/320 2089/4317/309 -f 2089/4317/309 2090/4316/320 2091/4318/321 2092/4319/307 -f 2092/4319/307 2091/4318/321 2082/4307/316 2081/4306/306 -f 2093/4320/306 2094/4321/316 2096/4322/317 2095/4323/314 -f 2095/4324/314 2096/4325/317 2098/4326/318 2097/4327/312 -f 2097/4327/312 2098/4326/318 2100/4328/319 2099/4329/311 -f 2099/4329/311 2100/4328/319 2102/4330/320 2101/4331/309 -f 2101/4331/309 2102/4330/320 2103/4332/321 2104/4333/307 -f 2104/4333/307 2103/4332/321 2094/4321/316 2093/4320/306 -f 2125/4334/491 2126/4335/481 2128/4336/482 2127/4337/496 -f 2127/4338/496 2128/4339/482 2130/4340/484 2129/4341/495 -f 2129/4341/495 2130/4340/484 2132/4342/486 2131/4343/494 -f 2131/4343/494 2132/4342/486 2134/4344/487 2133/4345/493 -f 2133/4345/493 2134/4344/487 2135/4346/489 2136/4347/492 -f 2136/4347/492 2135/4346/489 2126/4335/481 2125/4334/491 -f 2137/4348/338 2138/4349/339 2140/4350/337 2139/4351/336 -f 2139/4351/336 2140/4350/337 2142/4352/335 2141/4353/334 -f 2141/4353/334 2142/4352/335 2144/4354/333 2143/4355/332 -f 2143/4355/332 2144/4354/333 2146/4356/331 2145/4357/330 -f 2145/4357/330 2146/4356/331 2148/4358/497 2147/4359/328 -f 2147/4359/328 2148/4358/497 2150/4360/327 2149/4361/326 -f 2149/4361/326 2150/4360/327 2152/4362/325 2151/4363/498 -f 2151/4363/498 2152/4362/325 2154/4364/322 2153/4365/323 -f 2153/4366/323 2154/4367/322 2156/4368/499 2155/4369/500 -f 2155/4369/500 2156/4368/499 2158/4370/351 2157/4371/350 -f 2157/4371/350 2158/4370/351 2160/4372/501 2159/4373/502 -f 2159/4373/502 2160/4372/501 2162/4374/347 2161/4375/346 -f 2161/4375/346 2162/4374/347 2164/4376/503 2163/4377/344 -f 2163/4377/344 2164/4376/503 2166/4378/343 2165/4379/342 -f 2165/4379/342 2166/4378/343 2168/4380/341 2167/4381/504 -f 2167/4381/504 2168/4380/341 2138/4382/339 2137/4383/338 -f 2169/4384/338 2170/4385/339 2172/4386/337 2171/4387/407 -f 2171/4387/407 2172/4386/337 2174/4388/335 2173/4389/334 -f 2173/4389/334 2174/4388/335 2176/4390/505 2175/4391/506 -f 2175/4391/506 2176/4390/505 2178/4392/331 2177/4393/330 -f 2177/4393/330 2178/4392/331 2180/4394/329 2179/4395/507 -f 2179/4395/507 2180/4394/329 2182/4396/327 2181/4397/326 -f 2181/4397/326 2182/4396/327 2184/4398/508 2183/4399/324 -f 2183/4399/324 2184/4398/508 2186/4400/322 2185/4401/323 -f 2185/4402/323 2186/4403/322 2188/4404/353 2187/4405/352 -f 2187/4405/352 2188/4404/353 2190/4406/351 2189/4407/350 -f 2189/4407/350 2190/4406/351 2192/4408/501 2191/4409/502 -f 2191/4409/502 2192/4408/501 2194/4410/347 2193/4411/346 -f 2193/4411/346 2194/4410/347 2196/4412/345 2195/4413/344 -f 2195/4413/344 2196/4412/345 2198/4414/343 2197/4415/342 -f 2197/4415/342 2198/4414/343 2200/4416/341 2199/4417/504 -f 2199/4417/504 2200/4416/341 2170/4418/339 2169/4419/338 -f 2207/4420/4 2208/4421/4 2210/4422/44 2209/4423/44 -f 2209/4423/44 2210/4422/44 2212/4424/1 2211/4425/1 -f 2211/4425/1 2212/4424/1 2214/4426/46 2213/4427/46 -f 2213/4427/46 2214/4426/46 2216/4428/2 2215/4429/2 -f 2215/4429/2 2216/4428/2 2218/4430/47 2217/4431/47 -f 2217/4431/47 2218/4430/47 2220/4432/3 2219/4433/3 -f 2219/4433/3 2220/4432/3 2222/4434/45 2221/4435/45 -f 2221/4436/45 2222/4437/45 2208/4421/4 2207/4420/4 -f 2238/4438/77 2237/4439/134 2235/4440/135 2236/4441/44 -f 2240/4442/4 2239/4443/133 2237/4439/134 2238/4438/77 -f 2242/4444/84 2241/4445/132 2239/4443/133 2240/4442/4 -f 2244/4446/45 2243/4447/131 2241/4448/132 2242/4449/84 -f 2246/4450/83 2245/4451/509 2243/4447/131 2244/4446/45 -f 2248/4452/3 2247/4453/129 2245/4451/509 2246/4450/83 -f 2250/4454/82 2249/4455/128 2247/4453/129 2248/4452/3 -f 2252/4456/47 2251/4457/127 2249/4455/128 2250/4454/82 -f 2254/4458/81 2253/4459/510 2251/4457/127 2252/4456/47 -f 2256/4460/2 2255/4461/125 2253/4459/510 2254/4458/81 -f 2258/4462/80 2257/4463/124 2255/4461/125 2256/4460/2 -f 2260/4464/46 2259/4465/123 2257/4466/124 2258/4467/80 -f 2262/4468/79 2261/4469/122 2259/4465/123 2260/4464/46 -f 2264/4470/1 2263/4471/121 2261/4469/122 2262/4468/79 -f 2234/4472/78 2233/4473/136 2263/4471/121 2264/4470/1 -f 2236/4441/44 2235/4440/135 2233/4473/136 2234/4472/78 -f 2265/4474/511 2266/4475/133 2268/4476/512 2267/4477/513 -f 2267/4477/513 2268/4476/512 2270/4478/135 2269/4479/514 -f 2269/4479/514 2270/4478/135 2272/4480/136 2271/4481/515 -f 2271/4481/515 2272/4480/136 2274/4482/121 2273/4483/516 -f 2273/4483/516 2274/4482/121 2276/4484/122 2275/4485/517 -f 2275/4485/517 2276/4484/122 2278/4486/123 2277/4487/518 -f 2277/4487/518 2278/4486/123 2280/4488/124 2279/4489/519 -f 2279/4489/519 2280/4488/124 2282/4490/125 2281/4491/520 -f 2281/4491/520 2282/4490/125 2284/4492/126 2283/4493/521 -f 2283/4493/521 2284/4492/126 2286/4494/127 2285/4495/522 -f 2285/4495/522 2286/4494/127 2288/4496/523 2287/4497/524 -f 2287/4497/524 2288/4496/523 2290/4498/129 2289/4499/525 -f 2289/4499/525 2290/4498/129 2292/4500/130 2291/4501/526 -f 2291/4501/526 2292/4500/130 2294/4502/131 2293/4503/527 -f 2293/4503/527 2294/4502/131 2296/4504/528 2295/4505/529 -f 2295/4506/529 2296/4507/528 2266/4475/133 2265/4474/511 -f 2303/4508/6 2304/4509/6 2306/4510/8 2305/4511/8 -f 2305/4511/8 2306/4510/8 2308/4512/1 2307/4513/1 -f 2307/4513/1 2308/4512/1 2310/4514/9 2309/4515/9 -f 2309/4515/9 2310/4514/9 2312/4516/5 2311/4517/5 -f 2311/4517/5 2312/4516/5 2314/4518/10 2313/4519/10 -f 2313/4519/10 2314/4518/10 2316/4520/3 2315/4521/3 -f 2315/4521/3 2316/4520/3 2318/4522/7 2317/4523/7 -f 2317/4524/7 2318/4525/7 2304/4509/6 2303/4508/6 -f 2364/4526/530 2330/4527/323 2332/4528/324 2365/4529/531 -f 2365/4529/531 2332/4528/324 2334/4530/326 2369/4531/532 -f 2369/4531/532 2334/4530/326 2336/4532/507 2373/4533/533 -f 2373/4533/533 2336/4532/507 2338/4534/330 2377/4535/534 -f 2377/4535/534 2338/4534/330 2340/4536/506 2381/4537/535 -f 2381/4537/535 2340/4536/506 2342/4538/334 2385/4539/536 -f 2385/4539/536 2342/4538/334 2344/4540/407 2389/4541/537 -f 2389/4541/537 2344/4540/407 2346/4542/338 2393/4543/538 -f 2393/4543/538 2346/4542/338 2348/4544/504 2397/4545/539 -f 2397/4545/539 2348/4544/504 2350/4546/342 2401/4547/540 -f 2401/4547/540 2350/4546/342 2352/4548/344 2405/4549/541 -f 2405/4549/541 2352/4548/344 2354/4550/346 2409/4551/542 -f 2409/4551/542 2354/4550/346 2356/4552/502 2413/4553/543 -f 2413/4553/543 2356/4552/502 2358/4554/350 2417/4555/544 -f 2417/4555/544 2358/4554/350 2360/4556/352 2421/4557/545 -f 2359/4558/353 2424/4559/546 2361/4560/547 2329/4561/322 -f 2424/4559/546 2423/4562/548 2362/4563/549 2361/4560/547 -f 2418/4564/550 2422/4565/551 2423/4566/548 2419/4567/552 -f 2422/4568/551 2421/4569/545 2364/4526/530 2363/4570/553 -f 2357/4571/351 2420/4572/554 2424/4573/546 2359/4574/353 -f 2420/4572/554 2419/4567/552 2423/4566/548 2424/4573/546 -f 2414/4575/555 2418/4564/550 2419/4567/552 2415/4576/556 -f 2418/4564/550 2417/4555/544 2421/4557/545 2422/4565/551 -f 2355/4577/501 2416/4578/557 2420/4572/554 2357/4571/351 -f 2416/4578/557 2415/4576/556 2419/4567/552 2420/4572/554 -f 2410/4579/558 2414/4575/555 2415/4576/556 2411/4580/559 -f 2414/4575/555 2413/4553/543 2417/4555/544 2418/4564/550 -f 2353/4581/347 2412/4582/560 2416/4578/557 2355/4577/501 -f 2412/4582/560 2411/4580/559 2415/4576/556 2416/4578/557 -f 2406/4583/561 2410/4579/558 2411/4580/559 2407/4584/562 -f 2410/4579/558 2409/4551/542 2413/4553/543 2414/4575/555 -f 2351/4585/345 2408/4586/563 2412/4582/560 2353/4581/347 -f 2408/4586/563 2407/4584/562 2411/4580/559 2412/4582/560 -f 2402/4587/564 2406/4583/561 2407/4584/562 2403/4588/565 -f 2406/4583/561 2405/4549/541 2409/4551/542 2410/4579/558 -f 2349/4589/343 2404/4590/566 2408/4586/563 2351/4585/345 -f 2404/4590/566 2403/4588/565 2407/4584/562 2408/4586/563 -f 2398/4591/567 2402/4587/564 2403/4588/565 2399/4592/568 -f 2402/4587/564 2401/4547/540 2405/4549/541 2406/4583/561 -f 2347/4593/341 2400/4594/569 2404/4590/566 2349/4589/343 -f 2400/4594/569 2399/4592/568 2403/4588/565 2404/4590/566 -f 2394/4595/570 2398/4591/567 2399/4592/568 2395/4596/571 -f 2398/4591/567 2397/4545/539 2401/4547/540 2402/4587/564 -f 2345/4597/339 2396/4598/572 2400/4594/569 2347/4593/341 -f 2396/4598/572 2395/4596/571 2399/4592/568 2400/4594/569 -f 2390/4599/573 2394/4595/570 2395/4596/571 2391/4600/574 -f 2394/4595/570 2393/4543/538 2397/4545/539 2398/4591/567 -f 2343/4601/337 2392/4602/575 2396/4598/572 2345/4597/339 -f 2392/4602/575 2391/4600/574 2395/4596/571 2396/4598/572 -f 2386/4603/576 2390/4599/573 2391/4600/574 2387/4604/577 -f 2390/4599/573 2389/4541/537 2393/4543/538 2394/4595/570 -f 2341/4605/335 2388/4606/578 2392/4602/575 2343/4601/337 -f 2388/4606/578 2387/4604/577 2391/4600/574 2392/4602/575 -f 2382/4607/579 2386/4603/576 2387/4604/577 2383/4608/580 -f 2386/4603/576 2385/4539/536 2389/4541/537 2390/4599/573 -f 2339/4609/505 2384/4610/581 2388/4606/578 2341/4605/335 -f 2384/4610/581 2383/4608/580 2387/4604/577 2388/4606/578 -f 2378/4611/582 2382/4607/579 2383/4608/580 2379/4612/583 -f 2382/4607/579 2381/4537/535 2385/4539/536 2386/4603/576 -f 2337/4613/331 2380/4614/584 2384/4610/581 2339/4609/505 -f 2380/4614/584 2379/4612/583 2383/4608/580 2384/4610/581 -f 2374/4615/585 2378/4611/582 2379/4612/583 2375/4616/586 -f 2378/4611/582 2377/4535/534 2381/4537/535 2382/4607/579 -f 2335/4617/329 2376/4618/587 2380/4614/584 2337/4613/331 -f 2376/4618/587 2375/4616/586 2379/4612/583 2380/4614/584 -f 2370/4619/588 2374/4615/585 2375/4616/586 2371/4620/589 -f 2374/4615/585 2373/4533/533 2377/4535/534 2378/4611/582 -f 2333/4621/327 2372/4622/590 2376/4618/587 2335/4617/329 -f 2372/4622/590 2371/4620/589 2375/4616/586 2376/4618/587 -f 2366/4623/591 2370/4619/588 2371/4620/589 2367/4624/592 -f 2370/4619/588 2369/4531/532 2373/4533/533 2374/4615/585 -f 2331/4625/325 2368/4626/593 2372/4622/590 2333/4621/327 -f 2368/4626/593 2367/4624/592 2371/4620/589 2372/4622/590 -f 2362/4563/549 2363/4570/553 2366/4623/591 2367/4624/592 -f 2366/4623/591 2365/4529/531 2369/4531/532 2370/4619/588 -f 2329/4561/322 2361/4560/547 2368/4626/593 2331/4625/325 -f 2361/4560/547 2362/4563/549 2367/4624/592 2368/4626/593 -f 2421/4569/545 2360/4627/352 2330/4527/323 2364/4526/530 -f 2363/4570/553 2364/4526/530 2365/4529/531 2366/4623/591 -f 2422/4568/551 2363/4570/553 2362/4563/549 2423/4562/548 -f 2431/4628/4 2432/4629/4 2434/4630/44 2433/4631/44 -f 2433/4631/44 2434/4630/44 2436/4632/1 2435/4633/1 -f 2435/4633/1 2436/4632/1 2438/4634/46 2437/4635/46 -f 2437/4635/46 2438/4634/46 2440/4636/2 2439/4637/2 -f 2439/4637/2 2440/4636/2 2442/4638/47 2441/4639/47 -f 2441/4639/47 2442/4638/47 2444/4640/3 2443/4641/3 -f 2443/4641/3 2444/4640/3 2446/4642/45 2445/4643/45 -f 2445/4644/45 2446/4645/45 2432/4629/4 2431/4628/4 -f 2462/4646/77 2461/4647/134 2459/4648/135 2460/4649/44 -f 2464/4650/4 2463/4651/133 2461/4647/134 2462/4646/77 -f 2466/4652/84 2465/4653/132 2463/4651/133 2464/4650/4 -f 2468/4654/45 2467/4655/131 2465/4656/132 2466/4657/84 -f 2470/4658/83 2469/4659/509 2467/4655/131 2468/4654/45 -f 2472/4660/3 2471/4661/129 2469/4659/509 2470/4658/83 -f 2474/4662/82 2473/4663/128 2471/4661/129 2472/4660/3 -f 2476/4664/47 2475/4665/127 2473/4663/128 2474/4662/82 -f 2478/4666/81 2477/4667/510 2475/4665/127 2476/4664/47 -f 2480/4668/2 2479/4669/125 2477/4667/510 2478/4666/81 -f 2482/4670/80 2481/4671/124 2479/4669/125 2480/4668/2 -f 2484/4672/46 2483/4673/123 2481/4674/124 2482/4675/80 -f 2486/4676/79 2485/4677/122 2483/4673/123 2484/4672/46 -f 2488/4678/1 2487/4679/121 2485/4677/122 2486/4676/79 -f 2458/4680/78 2457/4681/136 2487/4679/121 2488/4678/1 -f 2460/4649/44 2459/4648/135 2457/4681/136 2458/4680/78 -f 2489/4682/511 2490/4683/133 2492/4684/512 2491/4685/513 -f 2491/4685/513 2492/4684/512 2494/4686/135 2493/4687/514 -f 2493/4687/514 2494/4686/135 2496/4688/136 2495/4689/515 -f 2495/4689/515 2496/4688/136 2498/4690/121 2497/4691/516 -f 2497/4691/516 2498/4690/121 2500/4692/122 2499/4693/517 -f 2499/4693/517 2500/4692/122 2502/4694/123 2501/4695/518 -f 2501/4695/518 2502/4694/123 2504/4696/124 2503/4697/519 -f 2503/4697/519 2504/4696/124 2506/4698/125 2505/4699/520 -f 2505/4699/520 2506/4698/125 2508/4700/126 2507/4701/521 -f 2507/4701/521 2508/4700/126 2510/4702/127 2509/4703/522 -f 2509/4703/522 2510/4702/127 2512/4704/523 2511/4705/524 -f 2511/4705/524 2512/4704/523 2514/4706/129 2513/4707/525 -f 2513/4707/525 2514/4706/129 2516/4708/130 2515/4709/526 -f 2515/4709/526 2516/4708/130 2518/4710/131 2517/4711/527 -f 2517/4711/527 2518/4710/131 2520/4712/528 2519/4713/529 -f 2519/4714/529 2520/4715/528 2490/4683/133 2489/4682/511 -v -0.333 -0.044 0.107 -v -0.333 0.039 0.107 -v -0.331 -0.044 0.086 -v -0.331 0.039 0.086 -v -0.325 -0.044 0.066 -v -0.325 0.039 0.066 -v -0.315 -0.044 0.048 -v -0.315 0.039 0.048 -v -0.302 -0.044 0.032 -v -0.302 0.039 0.032 -v -0.286 -0.044 0.018 -v -0.286 0.039 0.018 -v -0.267 -0.044 0.009 -v -0.267 0.039 0.009 -v -0.247 -0.044 0.003 -v -0.247 0.039 0.003 -v -0.227 -0.044 0.001 -v -0.227 0.039 0.001 -v -0.206 -0.044 0.003 -v -0.206 0.039 0.003 -v -0.186 -0.044 0.009 -v -0.186 0.039 0.009 -v -0.168 -0.044 0.018 -v -0.168 0.039 0.018 -v -0.152 -0.044 0.032 -v -0.152 0.039 0.032 -v -0.138 -0.044 0.048 -v -0.138 0.039 0.048 -v -0.129 -0.044 0.066 -v -0.129 0.039 0.066 -v -0.123 -0.044 0.086 -v -0.123 0.039 0.086 -v -0.121 -0.044 0.107 -v -0.121 0.039 0.107 -v -0.123 -0.044 0.127 -v -0.123 0.039 0.127 -v -0.129 -0.044 0.147 -v -0.129 0.039 0.147 -v -0.138 -0.044 0.166 -v -0.138 0.039 0.166 -v -0.152 -0.044 0.182 -v -0.152 0.039 0.182 -v -0.168 -0.044 0.195 -v -0.168 0.039 0.195 -v -0.186 -0.044 0.205 -v -0.186 0.039 0.205 -v -0.206 -0.044 0.211 -v -0.206 0.039 0.211 -v -0.227 -0.044 0.213 -v -0.227 0.039 0.213 -v -0.247 -0.044 0.211 -v -0.247 0.039 0.211 -v -0.267 -0.044 0.205 -v -0.267 0.039 0.205 -v -0.286 -0.044 0.195 -v -0.286 0.039 0.195 -v -0.302 -0.044 0.182 -v -0.302 0.039 0.182 -v -0.315 -0.044 0.166 -v -0.315 0.039 0.166 -v -0.325 -0.044 0.147 -v -0.325 0.039 0.147 -v -0.331 -0.044 0.127 -v -0.331 0.039 0.127 -v -0.025 0.002 -0.12 -v -0.026 0.001 -0.121 -v -0.04 0.001 -0.079 -v -0.134 0.001 0.147 -v -0.039 0.002 -0.079 -v -0.132 0.002 0.147 -v -0.037 0.002 -0.078 -v -0.13 0.002 0.147 -v -0.035 0.001 -0.077 -v -0.129 0.001 0.147 -v -0.035 -0.001 -0.077 -v -0.129 -0.001 0.147 -v -0.037 -0.002 -0.078 -v -0.13 -0.002 0.147 -v -0.039 -0.002 -0.079 -v -0.132 -0.002 0.147 -v -0.04 -0.001 -0.079 -v -0.134 -0.001 0.147 -v -0.023 0.002 -0.119 -v -0.022 0.001 -0.119 -v -0.022 -0.001 -0.119 -v -0.023 -0.002 -0.119 -v -0.025 -0.002 -0.12 -v -0.026 -0.001 -0.121 -v -0.012 -0.001 -0.172 -v -0.012 0.001 -0.172 -v -0.011 -0.002 -0.171 -v -0.009 -0.002 -0.17 -v -0.008 -0.001 -0.17 -v -0.008 0.001 -0.17 -v -0.009 0.002 -0.17 -v -0.011 0.002 -0.171 -v -0.004 -0.001 -0.219 -v -0.004 0.001 -0.219 -v -0.002 -0.002 -0.218 -v 0 -0.002 -0.218 -v 0.001 -0.001 -0.218 -v 0.001 0.001 -0.218 -v 0 0.002 -0.218 -v -0.002 0.002 -0.218 -v -0.002 -0.001 -0.263 -v -0.002 0.001 -0.263 -v 0 -0.003 -0.263 -v 0.002 -0.003 -0.263 -v 0.004 -0.001 -0.263 -v 0.004 0.001 -0.263 -v 0.002 0.003 -0.263 -v 0 0.003 -0.263 -vt 0 0.5 -vt 1 0.5 -vt 1 0.563 -vt 0 0.563 -vt 1 0.625 -vt 0 0.625 -vt 1 0.688 -vt 0 0.688 -vt 1 0.75 -vt 0 0.75 -vt 1 0.813 -vt 0 0.813 -vt 1 0.875 -vt 0 0.875 -vt 1 0.938 -vt 0 0.938 -vt 1 1 -vt 0 1 -vt 0 0 -vt 1 0 -vt 1 0.063 -vt 0 0.063 -vt 1 0.125 -vt 0 0.125 -vt 1 0.188 -vt 0 0.188 -vt 1 0.25 -vt 0 0.25 -vt 1 0.313 -vt 0 0.313 -vt 1 0.375 -vt 0 0.375 -vt 1 0.438 -vt 0 0.438 -vt 1 0.5 -vt 0 0.5 -vt 1 0.563 -vt 0 0.563 -vt 1 0.625 -vt 0 0.625 -vt 1 0.688 -vt 0 0.688 -vt 1 0.75 -vt 0 0.75 -vt 1 0.813 -vt 0 0.813 -vt 1 0.875 -vt 0 0.875 -vt 1 0.938 -vt 0 0.938 -vt 1 1 -vt 0 1 -vt 0 0 -vt 1 0 -vt 1 0.063 -vt 0 0.063 -vt 1 0.125 -vt 0 0.125 -vt 1 0.188 -vt 0 0.188 -vt 1 0.25 -vt 0 0.25 -vt 1 0.313 -vt 0 0.313 -vt 1 0.375 -vt 0 0.375 -vt 1 0.438 -vt 0 0.438 -vt 0.5 0.188 -vt 0.563 0.125 -vt 0.563 0.188 -vt 0.5 0.25 -vt 0.563 0.188 -vt 0.563 0.25 -vt 0.563 0.25 -vt 0.5 0.688 -vt 0.5 0.25 -vt 0.5 0.188 -vt 0.563 0.125 -vt 0.5 0.25 -vt 0.563 0.188 -vt 0.563 0.25 -vt 0.5 0.25 -vt 0.563 0.25 -vt 0.563 0.25 -vt 0.5 0.688 -vt 0.5 0.25 -vt 0.5 0.188 -vt 0.563 0.125 -vt 0.563 0.188 -vt 0.5 0.188 -vt 0.563 0.188 -vt 0.563 0.688 -vt 0.5 0.125 -vt 0.563 0.125 -vt 0.563 0.25 -vt 0.563 0.688 -vt 0.5 0.125 -vt 0.563 0.063 -vt 0.563 0.125 -vt 0.563 0.125 -vt 0.5 0.188 -vt 0.5 0.125 -vt 0.5 0.188 -vt 0.563 0.688 -vt 0.5 0.188 -vt 0.563 0.188 -vt 0.563 0.688 -vt 0.5 0.25 -vt 0.5 0.125 -vt 0.563 0.125 -vt 0.563 0.188 -vt 0.5 0.125 -vt 0.563 0.125 -vt 0.5 0.063 -vt 0.563 0.063 -vt 0.5 0.063 -vt 0.563 0.063 -vt 0.5 0.063 -vt 0.563 0.063 -vt 0.5 0.125 -vt 0.563 0.063 -vt 0.5 0.125 -vt 0.563 0.063 -vt 0.5 0.063 -vt 0.563 0 -vt 0.5 0 -vt 0.563 0 -vt 0.5 0 -vt 0.563 0 -vt 0.5 0 -vt 0.563 0 -vt 0.5 0.063 -vt 0.563 0 -vt 0.5 0.063 -vt 0.563 0 -vt 0.563 0.688 -vt 0.563 0.688 -vt 0.5 0.125 -vt 0.5 0.688 -vt 0.5 0.688 -vt 0.5 0.063 -vt 0.5 0 -vt 0.563 0 -vt 0.563 0.188 -vt 0.563 0.25 -vt 0.5 0.25 -vt 0.563 0.688 -vt 0.5 0.688 -vt 0.563 0.063 -vt 0.5 0.688 -vt 0.5 0.688 -vt 0.5 0.063 -vt 0.5 0 -vt 0.563 0.063 -vt 0.563 0 -vt 0.5 0.25 -vt 0.5 0.188 -vt 0.563 0.25 -vt 0.563 0.688 -vt 0.5 0.688 -vt 0.5 0 -vt 0.5 0 -vt 0.5 0 -vn -1 0 0 -vn -0.981 0 -0.195 -vn -0.924 0 -0.383 -vn -0.831 0 -0.556 -vn -0.707 0 -0.707 -vn -0.556 0 -0.831 -vn -0.383 0 -0.924 -vn -0.195 0 -0.981 -vn 0 0 -1 -vn 0.195 0 -0.981 -vn 0.383 0 -0.924 -vn 0.556 0 -0.831 -vn 0.707 0 -0.707 -vn 0.831 0 -0.556 -vn 0.924 0 -0.383 -vn 0.981 0 -0.195 -vn 1 0 0 -vn 0.981 0 0.195 -vn 0.924 0 0.383 -vn 0.831 0 0.556 -vn 0.707 0 0.707 -vn 0.556 0 0.831 -vn 0.383 0 0.924 -vn 0.195 0 0.981 -vn 0 0 1 -vn -0.195 0 0.981 -vn -0.383 0 0.924 -vn -0.556 0 0.831 -vn -0.707 0 0.707 -vn -0.831 0 0.556 -vn -0.924 0 0.383 -vn -0.981 0 0.195 -vn -0.869 -0.417 -0.264 -vn -0.336 -0.938 -0.078 -vn -0.33 -0.939 -0.101 -vn 0.329 -0.936 0.123 -vn 0.872 -0.412 0.265 -vn 0.852 -0.417 0.318 -vn -0.849 0.424 -0.316 -vn -0.456 0.87 -0.187 -vn -0.316 0.941 -0.118 -vn 0.34 -0.935 0.103 -vn 0.89 -0.407 0.205 -vn 0.872 0.412 0.265 -vn 0.852 0.417 0.318 -vn -0.849 -0.424 -0.316 -vn -0.316 -0.941 -0.118 -vn 0.329 0.936 0.123 -vn 0.845 0.402 0.352 -vn -0.869 0.417 -0.264 -vn -0.887 -0.415 -0.202 -vn 0.34 0.935 0.103 -vn 0.89 0.407 0.205 -vn 0.354 0.932 0.08 -vn 0.845 -0.402 0.352 -vn 0.909 0.401 0.112 -vn 0.354 -0.932 0.08 -vn -0.456 -0.87 -0.187 -vn -0.33 0.939 -0.101 -vn -0.874 -0.328 -0.359 -vn -0.336 0.938 -0.078 -vn -0.887 0.415 -0.202 -vn -0.905 0.412 -0.1 -vn -0.905 -0.412 -0.1 -vn -0.344 0.938 -0.034 -vn 0.368 0.929 0.048 -vn 0.909 -0.401 0.112 -vn -0.344 -0.938 -0.034 -vn 0.928 0.367 0.058 -vn -0.926 0.375 -0.041 -vn -0.926 -0.375 -0.041 -vn -0.382 0.924 -0.007 -vn 0.405 0.914 0.036 -vn 0.368 -0.928 0.048 -vn 0.928 -0.367 0.058 -vn -0.382 -0.924 -0.007 -vn -0.874 0.328 -0.359 -vn 0.28 0.953 0.116 -vn 0.28 -0.953 0.116 -vn 0.405 -0.914 0.036 -g 2 -s 1 -f 2521/4716/594 2522/4717/594 2524/4718/595 2523/4719/595 -f 2523/4719/595 2524/4718/595 2526/4720/596 2525/4721/596 -f 2525/4721/596 2526/4720/596 2528/4722/597 2527/4723/597 -f 2527/4723/597 2528/4722/597 2530/4724/598 2529/4725/598 -f 2529/4725/598 2530/4724/598 2532/4726/599 2531/4727/599 -f 2531/4727/599 2532/4726/599 2534/4728/600 2533/4729/600 -f 2533/4729/600 2534/4728/600 2536/4730/601 2535/4731/601 -f 2535/4731/601 2536/4730/601 2538/4732/602 2537/4733/602 -f 2537/4734/602 2538/4735/602 2540/4736/603 2539/4737/603 -f 2539/4737/603 2540/4736/603 2542/4738/604 2541/4739/604 -f 2541/4739/604 2542/4738/604 2544/4740/605 2543/4741/605 -f 2543/4741/605 2544/4740/605 2546/4742/606 2545/4743/606 -f 2545/4743/606 2546/4742/606 2548/4744/607 2547/4745/607 -f 2547/4745/607 2548/4744/607 2550/4746/608 2549/4747/608 -f 2549/4747/608 2550/4746/608 2552/4748/609 2551/4749/609 -f 2551/4749/609 2552/4748/609 2554/4750/610 2553/4751/610 -f 2553/4751/610 2554/4750/610 2556/4752/611 2555/4753/611 -f 2555/4753/611 2556/4752/611 2558/4754/612 2557/4755/612 -f 2557/4755/612 2558/4754/612 2560/4756/613 2559/4757/613 -f 2559/4757/613 2560/4756/613 2562/4758/614 2561/4759/614 -f 2561/4759/614 2562/4758/614 2564/4760/615 2563/4761/615 -f 2563/4761/615 2564/4760/615 2566/4762/616 2565/4763/616 -f 2565/4763/616 2566/4762/616 2568/4764/617 2567/4765/617 -f 2567/4765/617 2568/4764/617 2570/4766/618 2569/4767/618 -f 2569/4768/618 2570/4769/618 2572/4770/619 2571/4771/619 -f 2571/4771/619 2572/4770/619 2574/4772/620 2573/4773/620 -f 2573/4773/620 2574/4772/620 2576/4774/621 2575/4775/621 -f 2575/4775/621 2576/4774/621 2578/4776/622 2577/4777/622 -f 2577/4777/622 2578/4776/622 2580/4778/623 2579/4779/623 -f 2579/4779/623 2580/4778/623 2582/4780/624 2581/4781/624 -f 2581/4781/624 2582/4780/624 2584/4782/625 2583/4783/625 -f 2583/4783/625 2584/4782/625 2522/4717/594 2521/4716/594 -f 2608/4784/626 2611/4785/627 2607/4786/628 -f 2597/4787/629 2605/4788/630 2595/4789/631 -f 2587/4790/632 2590/4791/633 2589/4792/634 -f 2606/4793/635 2613/4794/636 2605/4788/630 -f 2595/4795/631 2604/4796/637 2593/4797/638 -f 2601/4798/639 2607/4786/628 2599/4799/640 -f 2591/4800/641 2594/4801/642 2593/4802/638 -f 2586/4803/643 2609/4804/644 2608/4805/626 -f 2591/4800/641 2604/4806/637 2603/4807/645 -f 2594/4808/642 2595/4795/631 2593/4797/638 -f 2603/4807/645 2614/4809/646 2615/4810/647 -f 2601/4811/639 2586/4803/643 2608/4805/626 -f 2596/4812/648 2597/4787/629 2595/4789/631 -f 2613/4813/636 2622/4814/649 2614/4815/646 -f 2612/4816/650 2607/4817/628 2611/4818/627 -f 2605/4819/630 2614/4815/646 2604/4796/637 -f 2600/4820/651 2601/4798/639 2599/4799/640 -f 2587/4790/632 2585/4821/652 2586/4822/643 -f 2602/4823/653 2587/4824/632 2601/4811/639 -f 2615/4825/647 2616/4826/654 2585/4827/652 -f 2586/4822/643 2616/4828/654 2610/4829/655 -f 2609/4804/644 2618/4830/656 2617/4831/657 -f 2610/4829/655 2624/4832/658 2618/4833/656 -f 2615/4810/647 2622/4834/649 2623/4835/659 -f 2612/4836/650 2621/4837/660 2613/4794/636 -f 2609/4838/644 2619/4839/661 2611/4785/627 -f 2621/4840/660 2630/4841/662 2622/4814/649 -f 2617/4831/657 2626/4842/663 2625/4843/664 -f 2618/4833/656 2632/4844/665 2626/4845/663 -f 2623/4835/659 2630/4846/662 2631/4847/666 -f 2620/4848/667 2629/4849/668 2621/4837/660 -f 2617/4850/657 2627/4851/669 2619/4839/661 -f 2608/4784/626 2609/4838/644 2611/4785/627 -f 2597/4787/629 2606/4793/635 2605/4788/630 -f 2587/4790/632 2588/4852/670 2590/4791/633 -f 2606/4793/635 2612/4836/650 2613/4794/636 -f 2595/4795/631 2605/4819/630 2604/4796/637 -f 2601/4798/639 2608/4784/626 2607/4786/628 -f 2591/4800/641 2592/4853/671 2594/4801/642 -f 2586/4803/643 2610/4854/655 2609/4804/644 -f 2591/4800/641 2593/4802/638 2604/4806/637 -f 2594/4808/642 2596/4855/648 2595/4795/631 -f 2603/4807/645 2604/4806/637 2614/4809/646 -f 2601/4811/639 2587/4824/632 2586/4803/643 -f 2596/4812/648 2598/4856/672 2597/4787/629 -f 2613/4813/636 2621/4840/660 2622/4814/649 -f 2619/4857/661 2627/4858/669 2628/4859/673 -f 2612/4816/650 2606/4860/635 2607/4817/628 -f 2606/4860/635 2597/4861/629 2599/4862/640 -f 2607/4817/628 2606/4860/635 2599/4862/640 -f 2597/4861/629 2598/4863/672 2599/4862/640 -f 2598/4863/672 2600/4864/651 2599/4862/640 -f 2619/4857/661 2628/4859/673 2620/4865/667 -f 2611/4818/627 2619/4857/661 2620/4865/667 -f 2611/4818/627 2620/4865/667 2612/4816/650 -f 2605/4819/630 2613/4813/636 2614/4815/646 -f 2600/4820/651 2602/4866/653 2601/4798/639 -f 2587/4790/632 2589/4792/634 2585/4821/652 -f 2602/4823/653 2588/4867/670 2587/4824/632 -f 2623/4868/659 2631/4869/666 2624/4870/658 -f 2631/4869/666 2632/4871/665 2624/4870/658 -f 2591/4872/641 2603/4873/645 2589/4874/634 -f 2603/4873/645 2615/4825/647 2585/4827/652 -f 2590/4875/633 2592/4876/671 2589/4874/634 -f 2592/4876/671 2591/4872/641 2589/4874/634 -f 2615/4825/647 2623/4868/659 2616/4826/654 -f 2623/4868/659 2624/4870/658 2616/4826/654 -f 2585/4827/652 2589/4874/634 2603/4873/645 -f 2586/4822/643 2585/4821/652 2616/4828/654 -f 2609/4804/644 2610/4854/655 2618/4830/656 -f 2610/4829/655 2616/4828/654 2624/4832/658 -f 2615/4810/647 2614/4809/646 2622/4834/649 -f 2612/4836/650 2620/4848/667 2621/4837/660 -f 2609/4838/644 2617/4850/657 2619/4839/661 -f 2621/4840/660 2629/4877/668 2630/4841/662 -f 2617/4831/657 2618/4830/656 2626/4842/663 -f 2618/4833/656 2624/4832/658 2632/4844/665 -f 2623/4835/659 2622/4834/649 2630/4846/662 -f 2620/4848/667 2628/4878/673 2629/4849/668 -f 2617/4850/657 2625/4879/664 2627/4851/669 diff --git a/mods/homedecor_modpack/computer/printers.lua b/mods/homedecor_modpack/computer/printers.lua deleted file mode 100644 index efeac68f..00000000 --- a/mods/homedecor_modpack/computer/printers.lua +++ /dev/null @@ -1,61 +0,0 @@ --- Printers of some kind or another - -local S = minetest.get_translator("computer") - -minetest.register_node("computer:printer", { - description = S("Printer-Scanner Combo"), - inventory_image = "computer_printer_inv.png", - tiles = {"computer_printer_t.png","computer_printer_bt.png","computer_printer_l.png", - "computer_printer_r.png","computer_printer_b.png","computer_printer_f.png"}, - paramtype = "light", - paramtype2 = "facedir", - walkable = true, - groups = {snappy=3}, - sound = default.node_sound_wood_defaults(), - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.4375, -0.3125, -0.125, 0.4375, -0.0625, 0.375}, - {-0.4375, -0.5, -0.125, 0.4375, -0.4375, 0.375}, - {-0.4375, -0.5, -0.125, -0.25, -0.0625, 0.375}, - {0.25, -0.5, -0.125, 0.4375, -0.0625, 0.375}, - {-0.4375, -0.5, -0.0625, 0.4375, -0.0625, 0.375}, - {-0.375, -0.4375, 0.25, 0.375, -0.0625, 0.4375}, - {-0.25, -0.25, 0.4375, 0.25, 0.0625, 0.5}, - {-0.25, -0.481132, -0.3125, 0.25, -0.4375, 0} - }, - }, -}) - --- "bedflinger" style 3D Printer (Prusa i3 or equivalent) - -local cbox = { - type = "fixed", - fixed = {-0.25, -0.25, -0.5, 0.3, 0.3, 0.25 } -} - -minetest.register_node("computer:3dprinter_bedflinger", { - description = S('3D Printer ("bedflinger")'), - inventory_image = "computer_3dprinter_bedflinger_inv.png", - tiles = { - { name = "computer_3dprinter_bedflinger.png", color = 0xffffffff }, - "computer_3dprinter_filament.png" - }, - paramtype = "light", - walkable = true, - groups = {snappy=3, ud_param2_colorable = 1}, - sound = default.node_sound_wood_defaults(), - drawtype = "mesh", - mesh = "computer_3dprinter_bedflinger.obj", - paramtype2 = "colorwallmounted", - palette = "unifieddyes_palette_colorwallmounted.png", - selection_box = cbox, - collision_box = cbox, - after_place_node = function(pos, placer, itemstack, pointed_thing) - unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) - end, - on_dig = unifieddyes.on_dig, - on_rotate = unifieddyes.fix_after_screwdriver_nsew, -}) - diff --git a/mods/homedecor_modpack/computer/textures/computer_3dprinter_bedflinger.png b/mods/homedecor_modpack/computer/textures/computer_3dprinter_bedflinger.png deleted file mode 100644 index 6559d24e..00000000 Binary files a/mods/homedecor_modpack/computer/textures/computer_3dprinter_bedflinger.png and /dev/null differ diff --git a/mods/homedecor_modpack/computer/textures/homedecor_plastic_base.png b/mods/homedecor_modpack/computer/textures/homedecor_plastic_base.png deleted file mode 100644 index 510af8ee..00000000 Binary files a/mods/homedecor_modpack/computer/textures/homedecor_plastic_base.png and /dev/null differ diff --git a/mods/homedecor_modpack/computer/textures/homedecor_plastic_base_inv.png b/mods/homedecor_modpack/computer/textures/homedecor_plastic_base_inv.png deleted file mode 100644 index 414c902e..00000000 Binary files a/mods/homedecor_modpack/computer/textures/homedecor_plastic_base_inv.png and /dev/null differ diff --git a/mods/homedecor_modpack/computer/textures/homedecor_plastic_sheeting.png b/mods/homedecor_modpack/computer/textures/homedecor_plastic_sheeting.png deleted file mode 100644 index 232d27bd..00000000 Binary files a/mods/homedecor_modpack/computer/textures/homedecor_plastic_sheeting.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_bathroom/init.lua b/mods/homedecor_modpack/homedecor_bathroom/init.lua index 4acbc2fa..20e18ae2 100644 --- a/mods/homedecor_modpack/homedecor_bathroom/init.lua +++ b/mods/homedecor_modpack/homedecor_bathroom/init.lua @@ -239,9 +239,7 @@ local function taps_on_rightclick(pos, node, clicker, itemstack, pointed_thing) local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z}) if below and below.name == "homedecor:shower_tray" or - below.name == "homedecor:sink" or - below.name == "homedecor:kitchen_cabinet_with_sink" or - below.name == "homedecor:kitchen_cabinet_with_sink_locked" then + string.find(below.name, "homedecor:.*sink") then local particledef = { outlet = { x = 0, y = -0.44, z = 0.28 }, velocity_x = { min = -0.1, max = 0.1 }, diff --git a/mods/homedecor_modpack/homedecor_common/furnaces.lua b/mods/homedecor_modpack/homedecor_common/furnaces.lua index e68764ce..86e54015 100644 --- a/mods/homedecor_modpack/homedecor_common/furnaces.lua +++ b/mods/homedecor_modpack/homedecor_common/furnaces.lua @@ -26,11 +26,12 @@ local function make_formspec(furnacedef, percent) local h = math.ceil(furnacedef.output_slots / furnacedef.output_width) return "size["..math.max(8, 6 + w)..",9]".. - "image[2,2;1,1;"..fire.."]".. - "list[current_name;fuel;2,3;1,1;]".. - "list[current_name;src;2,1;1,1;]".. - "list[current_name;dst;5,1;"..w..","..h..";]".. - "list[current_player;main;0,5;8,4;]".. + "image[2.75,1.5;1,1;"..fire.."]".. + "list[current_name;fuel;2.75,2.5;1,1;]".. + "list[current_name;src;2.75,0.5;1,1;]".. + "list[current_name;dst;4.75,0.96;"..w..","..h..";]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. "listring[current_name;dst]".. "listring[current_player;main]".. "listring[current_name;src]".. diff --git a/mods/homedecor_modpack/homedecor_common/nodeboxes.lua b/mods/homedecor_modpack/homedecor_common/nodeboxes.lua index 0fafe1ab..6960072b 100644 --- a/mods/homedecor_modpack/homedecor_common/nodeboxes.lua +++ b/mods/homedecor_modpack/homedecor_common/nodeboxes.lua @@ -9,16 +9,17 @@ homedecor.box = { -- bottom slab (starting from -y) with height optionally shifted upwards slab_y = function(height, shift) return { -0.5, -0.5+(shift or 0), -0.5, 0.5, -0.5+height+(shift or 0), 0.5 } end, -- slab starting from -z (+z with negative depth) - slab_z = function(depth) + slab_z = function(depth, shift) -- for consistency with the other functions here, we have to assume that a "z" slab starts from -z and extends by depth, -- but since conventionally a lot of nodes place slabs against +z for player convenience, we define -- a "negative" depth as a depth extending from the other side, i.e. +z + local s = shift or 0 if depth > 0 then -- slab starting from -z - return { -0.5, -0.5, -0.5, 0.5, 0.5, -0.5+depth } + return { -0.5, -0.5, -0.5+s, 0.5, 0.5, -0.5+depth+s } else -- slab starting from +z (z1=0.5-(-depth)) - return { -0.5, -0.5, 0.5+depth, 0.5, 0.5, 0.5 } + return { -0.5, -0.5, 0.5+depth+s, 0.5, 0.5, 0.5+s } end end, bar_y = function(radius) return {-radius, -0.5, -radius, radius, 0.5, radius} end, diff --git a/mods/homedecor_modpack/homedecor_furniture/init.lua b/mods/homedecor_modpack/homedecor_furniture/init.lua index 5c317ddb..bcb9dea4 100644 --- a/mods/homedecor_modpack/homedecor_furniture/init.lua +++ b/mods/homedecor_modpack/homedecor_furniture/init.lua @@ -1,38 +1,5 @@ local S = minetest.get_translator("homedecor_furniture") -local table_colors = { - { "", S("Table"), homedecor.plain_wood }, - { "_mahogany", S("Mahogany Table"), homedecor.mahogany_wood }, - { "_white", S("White Table"), homedecor.white_wood } -} - -for _, t in ipairs(table_colors) do - local suffix, desc, texture = unpack(t) - - homedecor.register("table"..suffix, { - description = desc, - tiles = { texture }, - node_box = { - type = "fixed", - fixed = { - { -0.4, -0.5, -0.4, -0.3, 0.4, -0.3 }, - { 0.3, -0.5, -0.4, 0.4, 0.4, -0.3 }, - { -0.4, -0.5, 0.3, -0.3, 0.4, 0.4 }, - { 0.3, -0.5, 0.3, 0.4, 0.4, 0.4 }, - { -0.5, 0.4, -0.5, 0.5, 0.5, 0.5 }, - { -0.4, -0.2, -0.3, -0.3, -0.1, 0.3 }, - { 0.3, -0.2, -0.4, 0.4, -0.1, 0.3 }, - { -0.3, -0.2, -0.4, 0.4, -0.1, -0.3 }, - { -0.3, -0.2, 0.3, 0.3, -0.1, 0.4 }, - }, - }, - groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, - sounds = default.node_sound_wood_defaults(), - }) -end - - - local ob_cbox = { type = "fixed", fixed = { -0.5, -0.5, 0, 0.5, 0.5, 0.5 } @@ -69,224 +36,3 @@ homedecor.register("wall_shelf", { } } }) - --- Crafts - - -minetest.register_craft({ - output = "homedecor:table", - recipe = { - { "group:wood","group:wood", "group:wood" }, - { "group:stick", "", "group:stick" }, - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "homedecor:table_mahogany", - recipe = { - "homedecor:table", - "dye:brown", - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "homedecor:table_mahogany", - recipe = { - "homedecor:table", - "unifieddyes:dark_orange", - }, -}) - -minetest.register_craft({ - type = "shapeless", - output = "homedecor:table_white", - recipe = { - "homedecor:table", - "dye:white", - }, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "homedecor:table", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "homedecor:table_mahogany", - burntime = 30, -}) - -minetest.register_craft({ - type = "fuel", - recipe = "homedecor:table_white", - burntime = 30, -}) - -minetest.register_craft({ - output = "homedecor:standing_lamp_off", - recipe = { - {"homedecor:table_lamp_off"}, - {"group:stick"}, - {"group:stick"}, - }, -}) - -unifieddyes.register_color_craft({ - output = "homedecor:standing_lamp_off", - palette = "extended", - type = "shapeless", - neutral_node = "homedecor:standing_lamp_off", - recipe = { - "NEUTRAL_NODE", - "MAIN_DYE" - } -}) - -minetest.register_craft({ - type = "fuel", - recipe = "homedecor:table_lamp_off", - burntime = 10, -}) - -minetest.register_craft({ - output = "homedecor:table_lamp_off", - recipe = { - { "wool:white", "default:torch", "wool:white"}, - { "", "group:stick", ""}, - { "", "stairs:slab_wood", "" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:table_lamp_off", - recipe = { - { "cottages:wool", "default:torch", "cottages:wool"}, - { "", "group:stick", ""}, - { "", "stairs:slab_wood", "" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:table_lamp_off", - recipe = { - { "wool:white", "default:torch", "wool:white"}, - { "", "group:stick", ""}, - { "", "moreblocks:slab_wood", "" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:table_lamp_off", - recipe = { - { "cottages:wool", "default:torch", "cottages:wool"}, - { "", "group:stick", ""}, - { "", "moreblocks:slab_wood", "" }, - }, -}) - -unifieddyes.register_color_craft({ - output = "homedecor:table_lamp_off", - palette = "extended", - type = "shapeless", - neutral_node = "homedecor:table_lamp_off", - recipe = { - "NEUTRAL_NODE", - "MAIN_DYE" - } -}) - -minetest.register_craft({ - output = "homedecor:toilet", - recipe = { - { "","","bucket:bucket_water"}, - { "group:marble","group:marble", "group:marble" }, - { "", "bucket:bucket_empty", "" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:sink", - recipe = { - { "group:marble","bucket:bucket_empty", "group:marble" }, - { "", "group:marble", "" } - }, -}) - -minetest.register_craft({ - output = "homedecor:taps", - recipe = { - { "default:steel_ingot","bucket:bucket_water", "default:steel_ingot" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:taps_brass", - recipe = { - { "technic:brass_ingot","bucket:bucket_water", "technic:brass_ingot" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:shower_tray", - recipe = { - { "group:marble","bucket:bucket_empty", "group:marble" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:shower_head", - recipe = { - {"default:steel_ingot", "bucket:bucket_water"}, - }, -}) - -minetest.register_craft({ - output = "homedecor:bathtub_clawfoot_brass_taps", - recipe = { - { "homedecor:taps_brass", "", "" }, - { "group:marble", "", "group:marble" }, - {"default:steel_ingot", "group:marble", "default:steel_ingot"}, - }, -}) - -minetest.register_craft({ - output = "homedecor:bathtub_clawfoot_chrome_taps", - recipe = { - { "homedecor:taps", "", "" }, - { "group:marble", "", "group:marble" }, - {"default:steel_ingot", "group:marble", "default:steel_ingot"}, - }, -}) - -minetest.register_craft({ - output = "homedecor:bars 6", - recipe = { - { "default:steel_ingot","default:steel_ingot","default:steel_ingot" }, - { "homedecor:pole_wrought_iron","homedecor:pole_wrought_iron","homedecor:pole_wrought_iron" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:L_binding_bars 3", - recipe = { - { "homedecor:bars","" }, - { "homedecor:bars","homedecor:bars" }, - }, -}) - -minetest.register_craft({ - output = "homedecor:torch_wall 10", - recipe = { - { "default:coal_lump" }, - { "default:steel_ingot" }, - }, -}) - --- Aliases for 3dforniture mod. - -minetest.register_alias("3dforniture:table", "homedecor:table") -minetest.register_alias('table', 'homedecor:table') diff --git a/mods/homedecor_modpack/homedecor_furniture_medieval/init.lua b/mods/homedecor_modpack/homedecor_furniture_medieval/init.lua index efb331f0..7db474ac 100644 --- a/mods/homedecor_modpack/homedecor_furniture_medieval/init.lua +++ b/mods/homedecor_modpack/homedecor_furniture_medieval/init.lua @@ -57,6 +57,24 @@ homedecor.register("chains", { sounds = default.node_sound_stone_defaults(), }) +-- Crafts + +minetest.register_craft({ + output = "homedecor:bars 6", + recipe = { + { "default:steel_ingot","default:steel_ingot","default:steel_ingot" }, + { "homedecor:pole_wrought_iron","homedecor:pole_wrought_iron","homedecor:pole_wrought_iron" }, + }, +}) + +minetest.register_craft({ + output = "homedecor:L_binding_bars 3", + recipe = { + { "homedecor:bars","" }, + { "homedecor:bars","homedecor:bars" }, + }, +}) + minetest.register_alias("3dforniture:bars", "homedecor:bars") minetest.register_alias("3dforniture:L_binding_bars", "homedecor:L_binding_bars") minetest.register_alias("3dforniture:chains", "homedecor:chains") diff --git a/mods/homedecor_modpack/homedecor_gastronomy/init.lua b/mods/homedecor_modpack/homedecor_gastronomy/init.lua index 9d92a169..4cc18b66 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/init.lua +++ b/mods/homedecor_modpack/homedecor_gastronomy/init.lua @@ -103,111 +103,6 @@ homedecor.register("wine_rack", { sounds = default.node_sound_defaults(), }) -homedecor.register("beer_tap", { - description = S("Beer tap"), - mesh = "homedecor_beer_taps.obj", - tiles = { - "homedecor_generic_metal_bright.png", - { name = "homedecor_generic_metal.png", color = homedecor.color_black } - }, - inventory_image = "homedecor_beertap_inv.png", - groups = { snappy=3 }, - walkable = false, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.4375, 0.25, 0.235, 0 } - }, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local inv = clicker:get_inventory() - - local wieldname = itemstack:get_name() - if wieldname == "vessels:drinking_glass" then - if inv:room_for_item("main", "homedecor:beer_mug 1") then - itemstack:take_item() - clicker:set_wielded_item(itemstack) - inv:add_item("main", "homedecor:beer_mug 1") - minetest.chat_send_player(clicker:get_player_name(), - S("Ahh, a frosty cold beer - look in your inventory for it!")) - else - minetest.chat_send_player(clicker:get_player_name(), - S("No room in your inventory to add a beer mug!")) - end - end - end -}) - -minetest.register_craft({ - output = "homedecor:beer_tap", - recipe = { - { "group:stick","default:steel_ingot","group:stick" }, - { "homedecor:kitchen_faucet","default:steel_ingot","homedecor:kitchen_faucet" }, - { "default:steel_ingot","default:steel_ingot","default:steel_ingot" } - }, -}) - -local beer_cbox = { - type = "fixed", - fixed = { -5/32, -8/16, -9/32 , 7/32, -2/16, 1/32 } -} - -homedecor.register("beer_mug", { - description = S("Beer mug"), - drawtype = "mesh", - mesh = "homedecor_beer_mug.obj", - tiles = { "homedecor_beer_mug.png" }, - inventory_image = "homedecor_beer_mug_inv.png", - groups = { snappy=3, oddly_breakable_by_hand=3 }, - walkable = false, - sounds = default.node_sound_glass_defaults(), - selection_box = beer_cbox, - on_use = function(itemstack, user, pointed_thing) - if not creative.is_enabled_for(user:get_player_name()) then - minetest.do_item_eat(2, "vessels:drinking_glass 1", itemstack, user, pointed_thing) - return itemstack - end - end -}) - -local svm_cbox = { - type = "fixed", - fixed = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5} -} - -homedecor.register("soda_machine", { - description = S("Soda vending machine"), - mesh = "homedecor_soda_machine.obj", - tiles = {"homedecor_soda_machine.png"}, - groups = {snappy=3}, - selection_box = svm_cbox, - collision_box = svm_cbox, - expand = { top="placeholder" }, - sounds = default.node_sound_wood_defaults(), - on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple or nil, - on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) - local playername = clicker:get_player_name() - local wielditem = clicker:get_wielded_item() - local wieldname = wielditem:get_name() - local fdir_to_fwd = { {0, -1}, {-1, 0}, {0, 1}, {1, 0} } - local fdir = node.param2 - local pos_drop = { x=pos.x+fdir_to_fwd[fdir+1][1], y=pos.y, z=pos.z+fdir_to_fwd[fdir+1][2] } - if wieldname == "currency:minegeld_cent_25" then - minetest.spawn_item(pos_drop, "homedecor:soda_can") - minetest.sound_play("insert_coin", { - pos=pos, max_hear_distance = 5 - }) - if not creative.is_enabled_for(playername) then - wielditem:take_item() - clicker:set_wielded_item(wielditem) - return wielditem - end - else - minetest.chat_send_player(playername, S("Please insert a coin in the machine.")) - end - end -}) - -minetest.register_alias("homedecor:coin", "currency:minegeld_cent_25") - -- coffee! -- coffee! -- coffee! @@ -326,12 +221,6 @@ minetest.register_abm({ -- crafting -minetest.register_craftitem(":homedecor:soda_can", { - description = S("Soda Can"), - inventory_image = "homedecor_soda_can.png", - on_use = minetest.item_eat(2), -}) - minetest.register_craft( { output = "homedecor:bottle_green", recipe = { @@ -363,14 +252,6 @@ minetest.register_craft({ }, }) -minetest.register_craft({ - output = "homedecor:beer_tap", - recipe = { - { "group:stick","default:steel_ingot","group:stick" }, - { "homedecor:kitchen_faucet","default:steel_ingot","homedecor:kitchen_faucet" }, - { "default:steel_ingot","default:steel_ingot","default:steel_ingot" } - }, -}) minetest.register_craft({ type = "shapeless", @@ -414,11 +295,3 @@ minetest.register_craft({ }, }) -minetest.register_craft({ - output = "homedecor:soda_machine", - recipe = { - {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"default:steel_ingot", "dye:red", "default:steel_ingot"}, - {"default:steel_ingot", "default:copperblock", "default:steel_ingot"}, - }, -}) diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.de.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.de.tr index 5f898e24..2a00d01f 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.de.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.de.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=Ahh ein kühles Bier – sehen Sie in Ihrem Inventar nach! -Beer mug=Bierkrug -Beer tap=Bierzapfhahn Brown bottle=Braune Flasche Coffee Maker=Kaffeemaschine Cutlery set=Besteckset @@ -13,9 +9,5 @@ Four brown bottles=Vier braune Flaschen Four green bottles=Vier grüne Flaschen Four misc brown/green bottles=Vier gemischte braune/grüne Flaschen Green bottle=Grüne Flasche -No room in your inventory to add a beer mug!=Kein Platz im Inventar für einen Bierkrug! -Please insert a coin in the machine.=Bitte Münze in Automaten einwerfen. -Soda Can=Limodose -Soda vending machine=Limoautomat Toaster=Toaster Wine rack=Weinregal diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.es.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.es.tr index 13145440..1624badd 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.es.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.es.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=¡Ah, una cerveza fría! La encontrarás en tu inventario. -Beer mug=Jarra de cerveza -Beer tap=Grifo de cerveza Brown bottle=Botella marrón Coffee Maker=Cafetera Cutlery set=Cubertería @@ -13,9 +9,5 @@ Four brown bottles=Cuatro botellas marrones Four green bottles=Cuatro botellas verdes Four misc brown/green bottles=Cuatro botellas verdes/marrones Green bottle=Botella verde -No room in your inventory to add a beer mug!=¡No hay lugar para tomar una jarra de cerveza! -Please insert a coin in the machine.=Por favor introduzca una moneda en la máquina. -Soda Can=Lata de refresco -Soda vending machine=Máquina expendedora de refrescos Toaster=Tostador Wine rack=Estantería de vino diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.fr.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.fr.tr index 4d721142..af7a8146 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.fr.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.fr.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=Ahh, une bière bien fraîche - regardez dans votre inventaire ! -Beer mug=Pinte de bière -Beer tap=Pompe à bière Brown bottle=Bouteille marron Coffee Maker=Cafetière Cutlery set=Couverts @@ -13,9 +9,5 @@ Four brown bottles=Quatre bouteilles marrons Four green bottles=Quatre bouteilles vertes Four misc brown/green bottles=Quatre bouteilles marrons et vertes Green bottle=Bouteille verte -No room in your inventory to add a beer mug!=Pas de place dans votre inventaire pour ajouter une pinte de bière ! -Please insert a coin in the machine.=Veuillez insérer une pièce dans la machine. -Soda Can=Canette de soda -Soda vending machine=Distributeur de boissons Toaster=Grille-pain Wine rack=Casier à bouteilles diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.it.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.it.tr index 57c1c9eb..76cc2f2c 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.it.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.it.tr @@ -13,9 +13,5 @@ Four brown bottles= Four green bottles= Four misc brown/green bottles= Green bottle= -No room in your inventory to add a beer mug!= -Please insert a coin in the machine.= -Soda Can= -Soda vending machine= Toaster= Wine rack= diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ms.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ms.tr index ac687728..c9995578 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ms.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ms.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=Ahh, bir sejuk dingin - cari dalam inventori anda! -Beer mug=Kole Bir -Beer tap=Paip Bir Brown bottle=Botol Perang Coffee Maker=Alat Pembuat Kopi Cutlery set=Set Kutleri @@ -13,9 +9,5 @@ Four brown bottles=Empat Botol Perang Four green bottles=Empat Botol Hijau Four misc brown/green bottles=Empat Botol Pelbagai Warna Green bottle=Botol Hijau -No room in your inventory to add a beer mug!=Tiada ruang dalam inventori anda untuk menambah kole bir! -Please insert a coin in the machine.=Sila masukkan duit syiling ke dalam mesin. -Soda Can=Tin Soda -Soda vending machine=Mesin Soda Layan Diri Toaster=Pembakar Roti Wine rack=Rak Wain diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt.tr index 4a7541a5..4329dfd1 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=Ahh, uma cerveja bem gelada - procure por ela em seu inventário! -Beer mug=Caneca de cerveja -Beer tap=Torneira de cerveja Brown bottle=Garrafa marrom Coffee Maker=Cafeteira Cutlery set=Conjunto de Talheres @@ -13,9 +9,5 @@ Four brown bottles=Quatro garrafas marrons Four green bottles=Quatro garrafas verdes Four misc brown/green bottles=Quatro garrafas mescladas verde/marrom Green bottle=Garrafa verde -No room in your inventory to add a beer mug!=Sem espaço no inventário para colocar uma caneca de cerveja -Please insert a coin in the machine.=Por favor insira uma moeda na máquina. -Soda Can=Lata de Refrigerante -Soda vending machine=Máquina de refrigerante Toaster=Torradeira Wine rack=Prateleira de Vinho diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt_BR.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt_BR.tr index 4a7541a5..4329dfd1 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt_BR.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.pt_BR.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=Ahh, uma cerveja bem gelada - procure por ela em seu inventário! -Beer mug=Caneca de cerveja -Beer tap=Torneira de cerveja Brown bottle=Garrafa marrom Coffee Maker=Cafeteira Cutlery set=Conjunto de Talheres @@ -13,9 +9,5 @@ Four brown bottles=Quatro garrafas marrons Four green bottles=Quatro garrafas verdes Four misc brown/green bottles=Quatro garrafas mescladas verde/marrom Green bottle=Garrafa verde -No room in your inventory to add a beer mug!=Sem espaço no inventário para colocar uma caneca de cerveja -Please insert a coin in the machine.=Por favor insira uma moeda na máquina. -Soda Can=Lata de Refrigerante -Soda vending machine=Máquina de refrigerante Toaster=Torradeira Wine rack=Prateleira de Vinho diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ru.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ru.tr index 05739f42..e7d34abb 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ru.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.ru.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=О, холодное пиво! Ищи его в инвентаре! -Beer mug=Пивная кружка -Beer tap=Пивной кран Brown bottle=Коричневая бутылка Coffee Maker=Кофеварка Cutlery set=Набор столовых приборов @@ -13,9 +9,5 @@ Four brown bottles=Четыре коричневых бутылки Four green bottles=Четыре зелёных бутылки Four misc brown/green bottles=Четыре разные коричневые/зелёные Green bottle=Зелёная бутылка -No room in your inventory to add a beer mug!=В инвентаре нет места для пивной кружки! -Please insert a coin in the machine.=Вставьте монету в автомат. -Soda Can=Банка газировки -Soda vending machine=Автомат с газировкой Toaster=Тостер Wine rack=Винный шкаф diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.zh_CN.tr b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.zh_CN.tr index 81d50889..7f0fe40c 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.zh_CN.tr +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/homedecor_gastronomy.zh_CN.tr @@ -1,11 +1,7 @@ # textdomain: homedecor_gastronomy - ### init.lua ### -Ahh, a frosty cold beer - look in your inventory for it!=啊,一杯冰凉的啤酒-看看你的库存吧! -Beer mug=啤酒杯 -Beer tap=啤酒龙头 Brown bottle=棕色瓶子 Coffee Maker=咖啡机 Cutlery set=餐具套装 @@ -13,9 +9,5 @@ Four brown bottles=四个棕色瓶子 Four green bottles=四个绿色瓶子 Four misc brown/green bottles=四个其他棕色/绿色瓶子 Green bottle=绿瓶 -No room in your inventory to add a beer mug!=你的库存里没有地方放啤酒杯! -Please insert a coin in the machine.=请在机器里放一枚硬币。 -Soda Can=易拉罐 -Soda vending machine=汽水自动售货机 Toaster=烤面包机 Wine rack=酒架 diff --git a/mods/homedecor_modpack/homedecor_gastronomy/locale/template.txt b/mods/homedecor_modpack/homedecor_gastronomy/locale/template.txt index 57c1c9eb..76cc2f2c 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/locale/template.txt +++ b/mods/homedecor_modpack/homedecor_gastronomy/locale/template.txt @@ -13,9 +13,5 @@ Four brown bottles= Four green bottles= Four misc brown/green bottles= Green bottle= -No room in your inventory to add a beer mug!= -Please insert a coin in the machine.= -Soda Can= -Soda vending machine= Toaster= Wine rack= diff --git a/mods/homedecor_modpack/homedecor_gastronomy/mod.conf b/mods/homedecor_modpack/homedecor_gastronomy/mod.conf index d6eb82ba..b81ba2a7 100644 --- a/mods/homedecor_modpack/homedecor_gastronomy/mod.conf +++ b/mods/homedecor_modpack/homedecor_gastronomy/mod.conf @@ -1,4 +1,4 @@ name = homedecor_gastronomy description = Homedecor mod: gastronomy depends = homedecor_common, default, basic_materials, dye, creative -optional_depends = currency, bucket, screwdriver +optional_depends = bucket, screwdriver diff --git a/mods/homedecor_modpack/homedecor_kitchen/init.lua b/mods/homedecor_modpack/homedecor_kitchen/init.lua index 7197b8a6..9c321351 100644 --- a/mods/homedecor_modpack/homedecor_kitchen/init.lua +++ b/mods/homedecor_modpack/homedecor_kitchen/init.lua @@ -137,43 +137,159 @@ homedecor.register("dishwasher_"..m, { end local cabinet_sides = "(default_wood.png^[transformR90)^homedecor_kitchen_cabinet_bevel.png" -local cabinet_bottom = "(default_wood.png^[colorize:#000000:100)" - .."^(homedecor_kitchen_cabinet_bevel.png^[colorize:#46321580)" +local cabinet_sides_colored = "(homedecor_generic_wood_plain.png^[transformR90)^homedecor_kitchen_cabinet_bevel.png" + +local ic_cabinet_sides = string.gsub(cabinet_sides, "%^", "&") +local ic_cabinet_sides_colored = string.gsub(cabinet_sides_colored, "%^", "&") + +local cabinet_bottom = "(default_wood.png^[colorize:#000000:100)^homedecor_kitchen_cabinet_bevel.png" +local cabinet_bottom_colored = "homedecor_generic_wood_plain.png^homedecor_kitchen_cabinet_bevel.png" local function N_(x) return x end local counter_materials = { "", N_("granite"), N_("marble"), N_("steel") } +homedecor.kitchen_convert_nodes = {} + for _, mat in ipairs(counter_materials) do local desc = S("Kitchen Cabinet") + local desc2 = S("Kitchen Cabinet with drawers") local material = "" if mat ~= "" then desc = S("Kitchen Cabinet (@1 top)", S(mat)) + desc2 = S("Kitchen Cabinet with drawers (@1 top)", S(mat)) material = "_"..mat end - homedecor.register("kitchen_cabinet"..material, { + homedecor.register("kitchen_cabinet_colorable"..material, { description = desc, - tiles = { 'homedecor_kitchen_cabinet_top'..material..'.png', - cabinet_bottom, - cabinet_sides, - cabinet_sides, - cabinet_sides, - 'homedecor_kitchen_cabinet_front.png'}, - groups = { snappy = 3 }, + tiles = { + 'homedecor_kitchen_cabinet_top'..material..'.png', + cabinet_bottom, + cabinet_sides, + cabinet_sides, + cabinet_sides, + 'homedecor_kitchen_cabinet_front.png^homedecor_kitchen_cabinet_bevel.png' + }, + inventory_image = "[inventorycube" + .."{homedecor_kitchen_cabinet_top"..material..".png" + .."{homedecor_kitchen_cabinet_front.png" + .."{"..ic_cabinet_sides, + mesh = "homedecor_kitchen_cabinet.obj", + paramtype2 = "wallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + airbrush_replacement_node = "homedecor:kitchen_cabinet_colored"..material, + place_param2 = 0, + groups = { snappy = 3, ud_param2_colorable = 1}, sounds = default.node_sound_wood_defaults(), infotext=S("Kitchen Cabinet"), inventory = { size=24, lockable=true, }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end }) + + homedecor.register("kitchen_cabinet_colored"..material, { + description = desc, + tiles = { + {name = 'homedecor_kitchen_cabinet_top'..material..'.png', color = 0xFFFFFFFF}, + {name = cabinet_bottom, color = 0xFFFFFFFF }, + cabinet_sides_colored, + cabinet_sides_colored, + cabinet_sides_colored, + 'homedecor_kitchen_cabinet_colored_front.png^homedecor_kitchen_cabinet_bevel.png' + }, + inventory_image = "[inventorycube" + .."{homedecor_kitchen_cabinet_top"..material..".png" + .."{homedecor_kitchen_cabinet_front.png" + .."{"..ic_cabinet_sides_colored, + mesh = "homedecor_kitchen_cabinet.obj", + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + groups = { snappy = 3, ud_param2_colorable = 1, not_in_creative_inventory = 1 }, + sounds = default.node_sound_wood_defaults(), + infotext=S("Kitchen Cabinet"), + inventory = { + size=24, + lockable=true, + }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end + }) + + homedecor.register("kitchen_cabinet_colorable_with_drawers"..material, { + description = desc2, + tiles = { + 'homedecor_kitchen_cabinet_top'..material..'.png', + cabinet_bottom, + cabinet_sides, + cabinet_sides, + cabinet_sides, + 'homedecor_kitchen_cabinet_front_with_drawers.png^homedecor_kitchen_cabinet_bevel.png' + }, + inventory_image = "[inventorycube" + .."{homedecor_kitchen_cabinet_top"..material..".png" + .."{homedecor_kitchen_cabinet_front_with_drawers.png" + .."{"..ic_cabinet_sides, + mesh = "homedecor_kitchen_cabinet.obj", + paramtype2 = "wallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + airbrush_replacement_node = "homedecor:kitchen_cabinet_colored_with_drawers"..material, + groups = { snappy = 3, ud_param2_colorable = 1}, + sounds = default.node_sound_wood_defaults(), + infotext=S("Kitchen Cabinet with drawers"), + inventory = { + size=24, + lockable=true, + }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end + }) + + homedecor.register("kitchen_cabinet_colored_with_drawers"..material, { + description = desc2, + tiles = { + {name = 'homedecor_kitchen_cabinet_top'..material..'.png', color = 0xFFFFFFFF}, + {name = cabinet_bottom, color = 0xFFFFFFFF }, + cabinet_sides_colored, + cabinet_sides_colored, + cabinet_sides_colored, + 'homedecor_kitchen_cabinet_colored_front_with_drawers.png^homedecor_kitchen_cabinet_bevel.png' + }, + inventory_image = "[inventorycube" + .."{homedecor_kitchen_cabinet_top"..material..".png" + .."{homedecor_kitchen_cabinet_colored_front_with_drawers.png" + .."{"..ic_cabinet_sides_colored, + mesh = "homedecor_kitchen_cabinet.obj", + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + groups = { snappy = 3, ud_param2_colorable = 1, not_in_creative_inventory = 1 }, + sounds = default.node_sound_wood_defaults(), + infotext=S("Kitchen Cabinet with drawers"), + inventory = { + size=24, + lockable=true, + }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end + }) + + homedecor.kitchen_convert_nodes[#homedecor.kitchen_convert_nodes + 1] = "homedecor:kitchen_cabinet"..material + homedecor.kitchen_convert_nodes[#homedecor.kitchen_convert_nodes + 1] = "homedecor:kitchen_cabinet"..material.."_locked" + end -local kitchen_cabinet_half_box = homedecor.nodebox.slab_y(0.5, 0.5) -homedecor.register("kitchen_cabinet_half", { +local kitchen_cabinet_half_box = homedecor.nodebox.slab_z(0.5, 0.5) + +homedecor.register("kitchen_cabinet_colorable_half", { description = S('Half-height Kitchen Cabinet (on ceiling)'), tiles = { cabinet_sides, @@ -181,29 +297,77 @@ homedecor.register("kitchen_cabinet_half", { cabinet_sides, cabinet_sides, cabinet_sides, - 'homedecor_kitchen_cabinet_front_half.png' + 'homedecor_kitchen_cabinet_front_half.png^homedecor_kitchen_cabinet_half_bevel.png' }, + mesh = "homedecor_kitchen_cabinet_half.obj", + paramtype2 = "wallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + airbrush_replacement_node = "homedecor:kitchen_cabinet_colored_half", + place_param2 = 0, selection_box = kitchen_cabinet_half_box, node_box = kitchen_cabinet_half_box, - groups = { snappy = 3 }, + groups = { snappy = 3, ud_param2_colorable = 1 }, sounds = default.node_sound_wood_defaults(), infotext=S("Kitchen Cabinet"), inventory = { size=12, lockable=true, }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end }) -homedecor.register("kitchen_cabinet_with_sink", { +homedecor.kitchen_convert_nodes[#homedecor.kitchen_convert_nodes + 1] = "homedecor:kitchen_cabinet_half" +homedecor.kitchen_convert_nodes[#homedecor.kitchen_convert_nodes + 1] = "homedecor:kitchen_cabinet_half_locked" + +homedecor.register("kitchen_cabinet_colored_half", { + description = S('Half-height Kitchen Cabinet (on ceiling)'), + tiles = { + { name = cabinet_sides, color = 0xFFFFFFFF }, + cabinet_bottom_colored, + cabinet_sides_colored, + cabinet_sides_colored, + cabinet_sides_colored, + 'homedecor_kitchen_cabinet_colored_front_half.png^homedecor_kitchen_cabinet_half_bevel.png' + }, + mesh = "homedecor_kitchen_cabinet_half.obj", + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + selection_box = kitchen_cabinet_half_box, + node_box = kitchen_cabinet_half_box, + groups = { snappy = 3, ud_param2_colorable = 1, not_in_creative_inventory = 1 }, + sounds = default.node_sound_wood_defaults(), + infotext=S("Kitchen Cabinet"), + inventory = { + size=12, + lockable=true, + }, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end +}) + +homedecor.register("kitchen_cabinet_colorable_with_sink", { description = S("Kitchen Cabinet with sink"), mesh = "homedecor_kitchen_sink.obj", tiles = { "homedecor_kitchen_sink_top.png", - "homedecor_kitchen_cabinet_front.png", + cabinet_bottom, cabinet_sides, - cabinet_bottom + cabinet_sides, + cabinet_sides, + "homedecor_kitchen_cabinet_front.png^homedecor_kitchen_cabinet_bevel.png" }, - groups = { snappy = 3 }, + inventory_image = "[inventorycube" + .."{homedecor_kitchen_sink_top.png" + .."{homedecor_kitchen_cabinet_front.png" + .."{"..ic_cabinet_sides, + paramtype2 = "wallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + airbrush_replacement_node = "homedecor:kitchen_cabinet_colored_with_sink", + place_param2 = 0, + groups = { snappy = 3, ud_param2_colorable = 1 }, sounds = default.node_sound_wood_defaults(), infotext=S("Under-sink cabinet"), inventory = { @@ -222,6 +386,54 @@ homedecor.register("kitchen_cabinet_with_sink", { }, on_destruct = function(pos) homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z}) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + end +}) + +homedecor.kitchen_convert_nodes[#homedecor.kitchen_convert_nodes + 1] = "homedecor:kitchen_cabinet_with_sink" +homedecor.kitchen_convert_nodes[#homedecor.kitchen_convert_nodes + 1] = "homedecor:kitchen_cabinet_with_sink_locked" + +homedecor.register("kitchen_cabinet_colored_with_sink", { + description = S("Kitchen Cabinet with sink"), + mesh = "homedecor_kitchen_sink.obj", + tiles = { + { name = "homedecor_kitchen_sink_top.png", color = 0xFFFFFFFF }, + { name = cabinet_bottom, color = 0xFFFFFFFF}, + cabinet_sides_colored, + cabinet_sides_colored, + cabinet_sides_colored, + "homedecor_kitchen_cabinet_colored_front.png^homedecor_kitchen_cabinet_bevel.png", + }, + inventory_image = "[inventorycube" + .."{homedecor_kitchen_sink_top.png" + .."{homedecor_kitchen_cabinet_front.png" + .."{"..ic_cabinet_sides_colored, + paramtype2 = "colorwallmounted", + palette = "unifieddyes_palette_colorwallmounted.png", + groups = { snappy = 3, ud_param2_colorable = 1, not_in_creative_inventory = 1 }, + sounds = default.node_sound_wood_defaults(), + infotext=S("Under-sink cabinet"), + inventory = { + size=16, + lockable=true, + }, + node_box = { + type = "fixed", + fixed = { + { -8/16, -8/16, -8/16, 8/16, 6/16, 8/16 }, + { -8/16, 6/16, -8/16, -6/16, 8/16, 8/16 }, + { 6/16, 6/16, -8/16, 8/16, 8/16, 8/16 }, + { -8/16, 6/16, -8/16, 8/16, 8/16, -6/16 }, + { -8/16, 6/16, 6/16, 8/16, 8/16, 8/16 }, + } + }, + on_destruct = function(pos) + homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z}) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) end }) @@ -257,10 +469,7 @@ homedecor.register("kitchen_faucet", { on_rotate = minetest.get_modpath("screwdriver") and screwdriver.disallow or nil, on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z}) - if below and - below.name == "homedecor:sink" or - below.name == "homedecor:kitchen_cabinet_with_sink" or - below.name == "homedecor:kitchen_cabinet_with_sink_locked" then + if below and string.find(below.name, "homedecor:.*sink") then local particledef = { outlet = { x = 0, y = -0.19, z = 0.13 }, velocity_x = { min = -0.05, max = 0.05 }, @@ -361,7 +570,7 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet", + output = "homedecor:kitchen_cabinet_colorable", recipe = { {"group:wood", "group:stick", "group:wood", }, {"group:wood", "group:stick", "group:wood", }, @@ -370,53 +579,53 @@ minetest.register_craft({ }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet_steel", + output = "homedecor:kitchen_cabinet_colorable_steel", recipe = { {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, - {"", "homedecor:kitchen_cabinet", ""}, + {"", "homedecor:kitchen_cabinet_colorable", ""}, } }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet_steel", + output = "homedecor:kitchen_cabinet_colorable_steel", recipe = { {"moreblocks:slab_steelblock_1"}, - { "homedecor:kitchen_cabinet" }, + { "homedecor:kitchen_cabinet_colorable" }, } }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet_marble", + output = "homedecor:kitchen_cabinet_colorable_marble", recipe = { {"building_blocks:slab_marble"}, - {"homedecor:kitchen_cabinet"}, + {"homedecor:kitchen_cabinet_colorable"}, } }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet_marble", + output = "homedecor:kitchen_cabinet_colorable_marble", recipe = { {"technic:slab_marble_1"}, - {"homedecor:kitchen_cabinet"}, + {"homedecor:kitchen_cabinet_colorable"}, } }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet_granite", + output = "homedecor:kitchen_cabinet_colorable_granite", recipe = { {"technic:slab_granite_1"}, - {"homedecor:kitchen_cabinet"}, + {"homedecor:kitchen_cabinet_colorable"}, } }) minetest.register_craft({ type = "shapeless", - output = "homedecor:kitchen_cabinet_half 2", - recipe = { "homedecor:kitchen_cabinet" } + output = "homedecor:kitchen_cabinet_colorable_half 2", + recipe = { "homedecor:kitchen_cabinet_colorable" } }) minetest.register_craft({ - output = "homedecor:kitchen_cabinet_with_sink", + output = "homedecor:kitchen_cabinet_colorable_with_sink", recipe = { {"group:wood", "default:steel_ingot", "group:wood", }, {"group:wood", "default:steel_ingot", "group:wood", }, @@ -555,3 +764,29 @@ minetest.register_craft({ { "homedecor:toilet_paper", "homedecor:toilet_paper" } }, }) + +minetest.register_lbm({ + name = ":homedecor:convert_kitchen_cabinets", + label = "Convert homedecor kitchen cabinets to use [color]wallmounted", + run_at_every_load = true, + nodenames = homedecor.kitchen_convert_nodes, + action = function(pos, node) + local name = node.name + local newname = string.gsub(name, "_cabinet", "_cabinet_colorable") + + local old_fdir = math.floor(node.param2 % 32) + local new_fdir = 3 + + if old_fdir == 0 then + new_fdir = 3 + elseif old_fdir == 1 then + new_fdir = 4 + elseif old_fdir == 2 then + new_fdir = 2 + elseif old_fdir == 3 then + new_fdir = 5 + end + + minetest.swap_node(pos, { name = newname, param2 = new_fdir }) + end +}) diff --git a/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_cabinet.obj b/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_cabinet.obj new file mode 100644 index 00000000..86f0be0b --- /dev/null +++ b/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_cabinet.obj @@ -0,0 +1,50 @@ +# Blender v2.83.5 OBJ File: 'kitchen_cabinet.blend' +# www.blender.org +o Cube_Cube.001 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +g Cube_Cube.001_top +s off +f 8/1/1 4/2/1 2/3/1 6/4/1 +g Cube_Cube.001_bottom +f 7/5/2 5/6/2 1/7/2 3/8/2 +g Cube_Cube.001_right +f 5/9/3 7/5/3 8/1/3 6/10/3 +g Cube_Cube.001_left +f 4/2/4 3/8/4 1/11/4 2/12/4 +g Cube_Cube.001_back +f 7/13/5 3/14/5 4/15/5 8/16/5 +g Cube_Cube.001_front +f 6/17/6 2/18/6 1/19/6 5/20/6 diff --git a/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_cabinet_half.obj b/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_cabinet_half.obj new file mode 100644 index 00000000..39c0b0e4 --- /dev/null +++ b/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_cabinet_half.obj @@ -0,0 +1,52 @@ +# Blender v2.83.5 OBJ File: 'kitchen_cabinet_half.blend' +# www.blender.org +o Cube_Cube.001 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.000000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 -0.000000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.000000 +v -0.500000 0.500000 0.500000 +v 0.500000 -0.500000 0.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 -0.0000 0.0000 +g Cube_Cube.001_top +s off +f 1/1/1 5/2/1 7/3/1 3/4/1 +g Cube_Cube.001_bottom +f 2/5/2 6/6/2 4/7/2 8/8/2 +g Cube_Cube.001_right +f 7/3/3 5/9/3 4/10/3 6/11/3 +g Cube_Cube.001_left +f 1/12/4 3/4/4 2/13/4 8/14/4 +g Cube_Cube.001_back +f 3/15/5 7/16/5 6/17/5 2/18/5 +g Cube_Cube.001_front +f 5/19/6 1/20/6 8/21/6 4/22/6 diff --git a/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_sink.obj b/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_sink.obj index 832fae10..bb80812d 100644 --- a/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_sink.obj +++ b/mods/homedecor_modpack/homedecor_kitchen/models/homedecor_kitchen_sink.obj @@ -1,101 +1,166 @@ -v -0.5 -0.5 -0.5 -v 0.5 -0.5 -0.5 -v 0.5 -0.5 0.5 -v -0.5 -0.5 0.5 -v -0.5 0.5 0.5 -v -0.5 0.5 -0.5 -v 0.5 0.5 -0.5 -v 0.5 0.5 0.5 -v -0.387 0.5 0.388 -v -0.387 0.5 -0.387 -v 0.388 0.5 -0.387 -v 0.388 0.5 0.388 -v -0.387 0.4 0.388 -v -0.387 0.4 -0.387 -v 0.388 0.4 -0.387 -v 0.388 0.4 0.388 -v 0.063 0.4 -0.062 -v 0.063 0.4 0.063 -v -0.062 0.4 -0.062 -v -0.062 0.4 0.063 -v 0.063 0.313 0.063 -v 0.063 0.313 -0.062 -v -0.062 0.313 0.063 -v -0.062 0.313 -0.062 -vt 0.469 0.906 -vt 0.469 0.531 -vt 0.531 0.469 -vt 0.531 0.969 -vt 0.031 0.969 -vt 0.094 0.906 -vt 0.031 0.469 -vt 0.094 0.531 -vt 0.813 0.5 -vt 0.813 0.938 -vt 0.781 0.938 -vt 0.781 0.5 -vt 0.688 0.5 -vt 0.719 0.5 -vt 0.719 0.938 -vt 0.688 0.938 -vt 0.906 0.5 -vt 0.906 0.938 -vt 0.875 0.938 -vt 0.875 0.5 -vt 0.594 0.5 -vt 0.625 0.5 -vt 0.625 0.938 -vt 0.594 0.938 -vt 0.313 0.75 -vt 0.313 0.688 -vt 0.25 0.688 -vt 0.25 0.75 -vt 0.219 0.375 -vt 0.219 0.313 -vt 0.25 0.313 -vt 0.25 0.375 -vt 0.25 0.406 -vt 0.313 0.375 -vt 0.313 0.406 -vt 0.313 0.313 -vt 0.344 0.313 -vt 0.344 0.375 -vt 0.25 0.281 -vt 0.313 0.281 -vt 0 0 -vt 1 0 -vt 1 1 -vt 0 1 -vn 0 1 0 -vn -1 0 0 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn 0 -1 0 -g 1 +# Blender v2.83.5 OBJ File: 'kitchen_sink.blend' +# www.blender.org +o Cube_Cube.001 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +v 0.000000 -0.500000 0.500000 +v 0.000000 0.500000 0.500000 +v 0.000000 0.062500 0.437500 +v -0.062500 0.062500 0.375000 +v 0.062500 0.062500 0.375000 +v 0.062500 -0.062500 0.437500 +v 0.000000 -0.062500 0.437500 +v 0.062500 -0.062500 0.375000 +v -0.062500 -0.062500 0.437500 +v -0.062500 0.062500 0.437500 +v -0.062500 -0.062500 0.375000 +v 0.000000 0.375000 0.437500 +v 0.062500 0.062500 0.437500 +v 0.000000 -0.375000 0.437500 +v -0.375000 -0.375000 0.437500 +v -0.375000 0.375000 0.500000 +v -0.375000 0.375000 0.437500 +v 0.375000 0.375000 0.437500 +v 0.000000 0.375000 0.500000 +v 0.375000 0.375000 0.500000 +v 0.000000 -0.375000 0.500000 +v 0.375000 -0.375000 0.500000 +v 0.375000 -0.375000 0.437500 +v -0.375000 -0.375000 0.500000 +vt 0.437500 0.375000 +vt 0.562500 0.437500 +vt 0.437500 0.437500 +vt 0.125000 0.875000 +vt 0.875000 0.875000 +vt 1.000000 1.000000 +vt 0.625000 0.500000 +vt 0.625000 0.562500 +vt 0.562500 0.562500 +vt 0.875000 0.062500 +vt 0.125000 0.125000 +vt 0.125000 0.062500 +vt 0.875000 0.875000 +vt 0.437500 0.562500 +vt 0.562500 0.562500 +vt 0.875000 0.125000 +vt 0.125000 0.125000 +vt 0.000000 0.000000 +vt 0.375000 0.500000 +vt 0.375000 0.437500 +vt 0.437500 0.625000 +vt 0.437500 0.562500 +vt 0.875000 0.500000 +vt 0.875000 0.125000 +vt 0.937500 0.500000 +vt 0.125000 0.500000 +vt 0.125000 0.875000 +vt 0.062500 0.875000 +vt 0.562500 0.437500 +vt 0.437500 0.437500 +vt 0.125000 0.937500 +vt 0.875000 0.937500 +vt 0.937500 0.125000 +vt 0.937500 0.875000 +vt 0.062500 0.500000 +vt 0.062500 0.125000 +vt 0.562500 0.375000 +vt 0.625000 0.437500 +vt 0.375000 0.562500 +vt 0.562500 0.625000 +vt 0.562500 0.500000 +vt 0.437500 0.500000 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.875000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.500000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.500000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +g Cube_Cube.001_top s off -f 9/1/1 10/2/1 6/3/1 5/4/1 -f 5/4/1 8/5/1 12/6/1 9/1/1 -f 7/7/1 6/3/1 10/2/1 11/8/1 -f 8/5/1 7/7/1 11/8/1 12/6/1 -f 15/9/2 16/10/2 12/11/2 11/12/2 -f 16/13/3 13/14/3 9/15/3 12/16/3 -f 13/17/4 14/18/4 10/19/4 9/20/4 -f 14/21/5 15/22/5 11/23/5 10/24/5 -f 13/2/1 16/1/1 18/25/1 20/26/1 -f 19/27/1 14/8/1 13/2/1 20/26/1 -f 17/28/1 15/6/1 14/8/1 19/27/1 -f 16/1/1 15/6/1 17/28/1 18/25/1 -f 17/29/2 22/30/2 21/31/2 18/32/2 -f 18/33/3 21/32/3 23/34/3 20/35/3 -f 20/34/4 23/36/4 24/37/4 19/38/4 -f 19/31/5 24/39/5 22/40/5 17/36/5 -f 24/27/1 23/26/1 21/25/1 22/28/1 -g 2 -f 2/41/3 1/42/3 6/43/3 7/44/3 -g 3 -f 1/41/2 4/42/2 5/43/2 6/44/2 -f 2/42/4 7/43/4 8/44/4 3/41/4 -f 4/41/5 3/42/5 8/43/5 5/44/5 -g 4 -f 1/43/6 2/44/6 3/41/6 4/42/6 +f 14/1/1 13/2/1 16/3/1 +f 32/4/2 24/5/2 8/6/2 +f 11/7/3 18/8/3 12/9/3 +f 28/10/1 31/11/1 30/12/1 +f 25/13/2 17/14/2 18/15/2 +f 28/16/2 30/17/2 2/18/2 +f 15/19/4 14/20/4 16/3/4 +f 12/9/5 17/21/5 19/22/5 +f 20/23/3 26/24/3 27/25/3 +f 22/26/4 23/27/4 32/28/4 +f 26/24/2 21/29/2 14/30/2 +f 32/31/5 25/13/5 24/32/5 +f 12/9/2 19/22/2 16/3/2 13/2/2 +f 28/10/1 26/24/1 31/11/1 +f 26/24/3 28/33/3 27/25/3 +f 27/25/3 24/34/3 20/23/3 +f 24/34/3 25/13/3 20/23/3 +f 32/28/4 29/35/4 22/26/4 +f 29/35/4 30/36/4 22/26/4 +f 30/36/4 31/11/4 22/26/4 +f 32/31/5 23/27/5 25/13/5 +f 14/1/1 21/37/1 13/2/1 +f 12/9/3 13/2/3 11/7/3 +f 13/2/3 21/38/3 11/7/3 +f 16/3/4 19/22/4 15/19/4 +f 19/22/4 17/39/4 15/19/4 +f 12/9/5 18/40/5 17/21/5 +f 11/41/2 20/23/2 18/15/2 +f 20/23/2 25/13/2 18/15/2 +f 25/13/2 23/27/2 17/14/2 +f 23/27/2 22/26/2 17/14/2 +f 22/26/2 15/42/2 17/14/2 +f 14/30/2 15/42/2 22/26/2 +f 22/26/2 31/11/2 14/30/2 +f 31/11/2 26/24/2 14/30/2 +f 26/24/2 20/23/2 21/29/2 +f 20/23/2 11/41/2 21/29/2 +f 4/43/2 9/44/2 32/4/2 +f 9/44/2 29/45/2 32/4/2 +f 27/46/2 10/47/2 24/5/2 +f 10/47/2 8/6/2 24/5/2 +f 4/43/2 32/4/2 8/6/2 +f 6/48/2 10/47/2 28/16/2 +f 10/47/2 27/46/2 28/16/2 +f 29/45/2 9/44/2 30/17/2 +f 9/44/2 2/18/2 30/17/2 +f 6/48/2 28/16/2 2/18/2 +g Cube_Cube.001_bottom +f 5/49/6 1/50/6 3/51/6 7/52/6 +g Cube_Cube.001_right +f 8/6/4 10/53/4 6/54/4 5/55/4 7/52/4 +g Cube_Cube.001_left +f 9/56/3 4/43/3 3/51/3 1/57/3 2/58/3 +g Cube_Cube.001_back +f 7/59/1 3/60/1 4/61/1 8/62/1 +g Cube_Cube.001_front +f 1/63/5 5/64/5 6/65/5 2/66/5 diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_bevel.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_bevel.png index 137eb3ee..ad6dac3f 100644 Binary files a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_bevel.png and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_bevel.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front.png new file mode 100644 index 00000000..382026f3 Binary files /dev/null and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front_half.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front_half.png new file mode 100644 index 00000000..0c180fa5 Binary files /dev/null and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front_half.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front_with_drawers.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front_with_drawers.png new file mode 100644 index 00000000..c367510a Binary files /dev/null and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_colored_front_with_drawers.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front.png index 406739f8..8f66ff64 100644 Binary files a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front.png and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_half.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_half.png index 2e6a60ca..d5d8e31b 100644 Binary files a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_half.png and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_half.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_with_drawers.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_with_drawers.png new file mode 100644 index 00000000..510243b2 Binary files /dev/null and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_front_with_drawers.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_half_bevel.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_half_bevel.png new file mode 100644 index 00000000..1c12493c Binary files /dev/null and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_cabinet_half_bevel.png differ diff --git a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_sink_top.png b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_sink_top.png index fc70835c..ccb117ea 100644 Binary files a/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_sink_top.png and b/mods/homedecor_modpack/homedecor_kitchen/textures/homedecor_kitchen_sink_top.png differ diff --git a/mods/homedecor_modpack/homedecor_lighting/init.lua b/mods/homedecor_modpack/homedecor_lighting/init.lua index ab473868..6d7ba80f 100644 --- a/mods/homedecor_modpack/homedecor_lighting/init.lua +++ b/mods/homedecor_modpack/homedecor_lighting/init.lua @@ -1789,6 +1789,14 @@ unifieddyes.register_color_craft({ } }) + +minetest.register_craft({ + output = "homedecor:torch_wall 10", + recipe = { + { "default:coal_lump" }, + { "default:steel_ingot" }, + }, +}) -- aliases minetest.register_alias("chains:chain_top", "homedecor:chain_steel_top") diff --git a/mods/homedecor_modpack/homedecor_misc/init.lua b/mods/homedecor_modpack/homedecor_misc/init.lua index 2427af79..dd9911a0 100644 --- a/mods/homedecor_modpack/homedecor_misc/init.lua +++ b/mods/homedecor_modpack/homedecor_misc/init.lua @@ -373,30 +373,6 @@ homedecor.register("skateboard", { on_place = minetest.rotate_node }) -homedecor.register("tool_cabinet", { - description = S("Metal tool cabinet and work table"), - mesh = "homedecor_tool_cabinet.obj", - tiles = { - { name = "homedecor_generic_metal.png", color = 0xffd00000 }, - "homedecor_tool_cabinet_drawers.png", - { name = "homedecor_generic_metal.png", color = 0xff006000 }, - { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, - "homedecor_generic_metal_bright.png", - "homedecor_tool_cabinet_misc.png", - }, - inventory_image = "homedecor_tool_cabinet_inv.png", - on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple or nil, - groups = { snappy=3 }, - selection_box = homedecor.nodebox.slab_y(2), - expand = { top="placeholder" }, - inventory = { - size=24, - } -}) - -minetest.register_alias("homedecor:tool_cabinet_bottom", "homedecor:tool_cabinet") -minetest.register_alias("homedecor:tool_cabinet_top", "air") - homedecor_misc.banister_materials = { { "wood", @@ -938,15 +914,6 @@ minetest.register_craft({ }, }) -minetest.register_craft({ - output = "homedecor:tool_cabinet", - recipe = { - { "basic_materials:motor", "default:axe_steel", "default:pick_steel" }, - { "default:steel_ingot", "homedecor:drawer_small", "default:steel_ingot" }, - { "default:steel_ingot", "homedecor:drawer_small", "default:steel_ingot" } - }, -}) - minetest.register_craft({ output = "homedecor:spiral_staircase", recipe = { diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.de.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.de.tr index c3135dee..16258ebb 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.de.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.de.tr @@ -20,7 +20,6 @@ Japanese tatami=Japanische Tatami Japanese wall=Japanische Wand Japanese wall (bottom)=Japanische Wand (unten) Japanese wall (top)=Japanische Wand (oben) -Metal tool cabinet and work table=Metallwerkzeugschrank und Arbeitstisch Piano=Klavier Pool Table=Billardtisch Potted flower (@1)=Eingetopfte Blume (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.es.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.es.tr index 0b0c1f14..7323ea1b 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.es.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.es.tr @@ -20,7 +20,6 @@ Japanese tatami=Tatami Japanese wall=Pared japonesa Japanese wall (bottom)=Pared japonesa (parte más baja) Japanese wall (top)=Pared japonesa (parte más alta) -Metal tool cabinet and work table=Mesa de trabajo y gabinete en hierro Piano=Piano Pool Table=Mesa de pool Potted flower (@1)=Flor en maceta (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.fr.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.fr.tr index 6b11a7b8..10ef972f 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.fr.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.fr.tr @@ -20,7 +20,6 @@ Japanese tatami=Tatami Japanese wall=Mur japonais Japanese wall (bottom)=Mur japonais (bas) Japanese wall (top)=Mur japonais (haut) -Metal tool cabinet and work table=Établi pour le travail du métal Piano=Piano Pool Table=Billard Potted flower (@1)=Fleur en pot (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.it.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.it.tr index 2c494a43..3cb27ad2 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.it.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.it.tr @@ -20,7 +20,6 @@ Japanese tatami= Japanese wall= Japanese wall (bottom)= Japanese wall (top)= -Metal tool cabinet and work table= Piano= Pool Table=Tavolo Potted flower (@1)= diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ms.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ms.tr index 2f94a677..89330cd7 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ms.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ms.tr @@ -20,7 +20,6 @@ Japanese tatami=Tatami Jepun Japanese wall=Dinding Jepun Japanese wall (bottom)=Dinding Jepun (Bawah) Japanese wall (top)=Dinding Jepun (Atas) -Metal tool cabinet and work table=Kabinet Alatan Logam dan Meja Kerja Piano=Piano Pool Table=Meja Pool Potted flower (@1)=Pasu Berbunga (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt.tr index 66abfdae..f8dc9f01 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt.tr @@ -20,7 +20,6 @@ Japanese tatami=Tatami Japonês Japanese wall=Divisória japonesa Japanese wall (bottom)=Divisória japonesa (inferior) Japanese wall (top)=Divisória japonesa (superior) -Metal tool cabinet and work table=Gabinete de ferramentas metálicas e mesa de trabalho Piano=Piano Pool Table=Mesa de Sinuca Potted flower (@1)=Vaso de Flor (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt_BR.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt_BR.tr index 66abfdae..f8dc9f01 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt_BR.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.pt_BR.tr @@ -20,7 +20,6 @@ Japanese tatami=Tatami Japonês Japanese wall=Divisória japonesa Japanese wall (bottom)=Divisória japonesa (inferior) Japanese wall (top)=Divisória japonesa (superior) -Metal tool cabinet and work table=Gabinete de ferramentas metálicas e mesa de trabalho Piano=Piano Pool Table=Mesa de Sinuca Potted flower (@1)=Vaso de Flor (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ru.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ru.tr index a970d4a8..cc4ecbc2 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ru.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.ru.tr @@ -20,7 +20,6 @@ Japanese tatami=Японский татами Japanese wall=Японская стена Japanese wall (bottom)=Японская стена (низ) Japanese wall (top)=Японская стена (верх) -Metal tool cabinet and work table=Шкаф с металлическим инструментом и рабочий стол Piano=Пианино Pool Table=Бильярдный стол Potted flower (@1)=Цветок в горшке (@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.zh_CN.tr b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.zh_CN.tr index 41c44fd0..d50f1af8 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.zh_CN.tr +++ b/mods/homedecor_modpack/homedecor_misc/locale/homedecor_misc.zh_CN.tr @@ -20,7 +20,6 @@ Japanese tatami=日本榻榻米 Japanese wall=日本墙 Japanese wall (bottom)=日本墙(下) Japanese wall (top)=日本墙(上) -Metal tool cabinet and work table=金属工具柜及工作台 Piano=钢琴 Pool Table=台球桌 Potted flower (@1)=盆花(@1) diff --git a/mods/homedecor_modpack/homedecor_misc/locale/template.txt b/mods/homedecor_modpack/homedecor_misc/locale/template.txt index d538ec9c..0adf1828 100644 --- a/mods/homedecor_modpack/homedecor_misc/locale/template.txt +++ b/mods/homedecor_modpack/homedecor_misc/locale/template.txt @@ -20,7 +20,6 @@ Japanese tatami= Japanese wall= Japanese wall (bottom)= Japanese wall (top)= -Metal tool cabinet and work table= Piano= Pool Table= Potted flower (@1)= diff --git a/mods/homedecor_modpack/homedecor_tables/misc.lua b/mods/homedecor_modpack/homedecor_tables/misc.lua index 51fb3993..de062240 100644 --- a/mods/homedecor_modpack/homedecor_tables/misc.lua +++ b/mods/homedecor_modpack/homedecor_tables/misc.lua @@ -2,25 +2,58 @@ local S = minetest.get_translator("homedecor_tables") -local materials = { +-- Various kinds of table legs + +local table_shapes = {"large_square", "small_square", "small_round"} + +local tabletop_materials = { { "glass", - S("Small square glass table"), - S("Small round glass table"), - S("Large glass table piece"), + S("Small square glass tabletop"), + S("Small round glass tabletop"), + S("Large glass tabletop piece"), }, { "wood", - S("Small square wooden table"), - S("Small round wooden table"), - S("Large wooden table piece"), + S("Small square wooden tabletop"), + S("Small round wooden tabletop"), + S("Large wooden tabletop piece"), } } +leg_materials = { + { "brass", S("brass") }, + { "wrought_iron", S("wrought iron") }, + { "wood", S("wood") } +} + +for _, t in ipairs(leg_materials) do + local name, desc = unpack(t) + homedecor.register("table_legs_"..name, { + description = S("Table Legs (@1)", desc), + drawtype = "plantlike", + tiles = {"homedecor_table_legs_"..name..".png"}, + inventory_image = "homedecor_table_legs_"..name..".png", + wield_image = "homedecor_table_legs_"..name..".png", + walkable = false, + groups = {snappy=3}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = { -0.37, -0.5, -0.37, 0.37, 0.5, 0.37 } + }, + }) +end + +minetest.register_alias("homedecor:utility_table_legs", "homedecor:table_legs_wood") +minetest.register_alias("homedecor:utility_table_top", "homedecor:wood_table_small_square") + +-- table tops and combined tables + local tables_cbox = { type = "fixed", fixed = { -0.5, -0.5, -0.5, 0.5, -0.4375, 0.5 }, } -for i, mat in ipairs(materials) do +for i, mat in ipairs(tabletop_materials) do local m, small_s, small_r, large = unpack(mat) local s @@ -30,179 +63,102 @@ for i, mat in ipairs(materials) do s = default.node_sound_wood_defaults() end --- small square tables + for _, shape in ipairs(table_shapes) do - homedecor.register(m.."_table_small_square", { - description = small_s, - mesh = "homedecor_table_small_square.obj", - tiles = { 'homedecor_'..m..'_table_small_square.png' }, - wield_image = 'homedecor_'..m..'_table_small_square_inv.png', - inventory_image = 'homedecor_'..m..'_table_small_square_inv.png', - groups = { snappy = 3 }, - sounds = s, - selection_box = tables_cbox, - collision_box = tables_cbox, - on_place = minetest.rotate_node - }) + homedecor.register(m.."_table_"..shape, { + description = shape.." "..m.." tabletop", + mesh = "homedecor_table_"..shape..".obj", + tiles = { + 'homedecor_'..m..'_table_'..shape..'.png', + 'homedecor_'..m..'_table_edges.png', + 'homedecor_blanktile.png', + 'homedecor_blanktile.png', + 'homedecor_blanktile.png', + }, + wield_image = 'homedecor_'..m..'_table_'..shape..'_inv.png', + groups = { snappy = 3 }, + sounds = s, + selection_box = tables_cbox, + collision_box = tables_cbox, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + if minetest.is_protected(pointed_thing.under, player_name) then return end + local node = minetest.get_node(pointed_thing.under) + if string.find(node.name, "homedecor:table_legs") then + local newname = string.format("homedecor:%s_table_%s_with_%s_legs", + m, shape, string.sub(node.name, 22)) + minetest.set_node(pointed_thing.under, {name = newname}) + if not creative.is_enabled_for(player_name) then + itemstack:take_item() + return itemstack + end + else + return minetest.rotate_node(itemstack, placer, pointed_thing) + end + end + }) --- small round tables + for _, l in ipairs(leg_materials) do + local leg_mat, desc = unpack(l) - homedecor.register(m..'_table_small_round', { - description = small_r, - mesh = "homedecor_table_small_round.obj", - tiles = { "homedecor_"..m.."_table_small_round.png" }, - wield_image = 'homedecor_'..m..'_table_small_round_inv.png', - inventory_image = 'homedecor_'..m..'_table_small_round_inv.png', - groups = { snappy = 3 }, - sounds = s, - selection_box = tables_cbox, - collision_box = tables_cbox, - on_place = minetest.rotate_node - }) - --- Large square table pieces - - homedecor.register(m..'_table_large', { - description = large, - tiles = { - 'homedecor_'..m..'_table_large_tb.png', - 'homedecor_'..m..'_table_large_tb.png', - 'homedecor_'..m..'_table_large_edges.png', - 'homedecor_'..m..'_table_large_edges.png', - 'homedecor_'..m..'_table_large_edges.png', - 'homedecor_'..m..'_table_large_edges.png' - }, - wield_image = 'homedecor_'..m..'_table_large_inv.png', - inventory_image = 'homedecor_'..m..'_table_large_inv.png', - groups = { snappy = 3 }, - sounds = s, - node_box = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, -0.4375, 0.5 }, - }, - selection_box = tables_cbox, - on_place = minetest.rotate_node - }) + homedecor.register(string.format("%s_table_%s_with_%s_legs", m, shape, leg_mat), { + description = string.format("%s %s table with %s legs", shape, m, leg_mat), + mesh = "homedecor_table_"..shape..".obj", + tiles = { + 'homedecor_blanktile.png', + 'homedecor_blanktile.png', + 'homedecor_'..m..'_table_'..shape..'.png', + 'homedecor_'..m..'_table_edges.png', + "homedecor_table_legs_"..leg_mat..".png", + }, + groups = { snappy = 3 }, + sounds = s, + }) + end + end minetest.register_alias('homedecor:'..m..'_table_large_b', 'homedecor:'..m..'_table_large') minetest.register_alias('homedecor:'..m..'_table_small_square_b', 'homedecor:'..m..'_table_small_square') minetest.register_alias('homedecor:'..m..'_table_small_round_b', 'homedecor:'..m..'_table_small_round') + minetest.register_alias('homedecor:'..m..'_table_large', 'homedecor:'..m..'_table_large_square') end --- conversion routines for old non-6dfacedir tables +-- old-style tables that used to be from 3dforniture. -local tlist_s = {} -local tlist_t = {} -local dirs2 = { 9, 18, 7, 12 } - -for i in ipairs(materials) do - local m = materials[i][1] - table.insert(tlist_s, "homedecor:"..m.."_table_large_s") - table.insert(tlist_s, "homedecor:"..m.."_table_small_square_s") - table.insert(tlist_s, "homedecor:"..m.."_table_small_round_s") - - table.insert(tlist_t, "homedecor:"..m.."_table_large_t") - table.insert(tlist_t, "homedecor:"..m.."_table_small_square_t") - table.insert(tlist_t, "homedecor:"..m.."_table_small_round_t") -end - -minetest.register_abm({ - nodenames = tlist_s, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local newnode = string.sub(node.name, 1, -3) -- strip the "_s" from the name - local fdir = node.param2 or 0 - minetest.set_node(pos, {name = newnode, param2 = dirs2[fdir+1]}) - end -}) - -minetest.register_abm({ - nodenames = tlist_t, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local newnode = string.sub(node.name, 1, -3) -- strip the "_t" from the name - minetest.set_node(pos, { name = newnode, param2 = 20 }) - end -}) - --- other tables - -homedecor.register("utility_table_top", { - description = S("Utility Table"), - tiles = { - 'homedecor_utility_table_tb.png', - 'homedecor_utility_table_tb.png', - 'homedecor_utility_table_edges.png', - 'homedecor_utility_table_edges.png', - 'homedecor_utility_table_edges.png', - 'homedecor_utility_table_edges.png' - }, - wield_image = 'homedecor_utility_table_tb.png', - inventory_image = 'homedecor_utility_table_tb.png', - groups = { snappy = 3 }, - sounds = default.node_sound_wood_defaults(), - paramtype2 = "wallmounted", - node_box = { - type = "wallmounted", - wall_bottom = { -0.5, -0.5, -0.5, 0.5, -0.4375, 0.5 }, - wall_top = { -0.5, 0.4375, -0.5, 0.5, 0.5, 0.5 }, - wall_side = { -0.5, -0.5, -0.5, -0.4375, 0.5, 0.5 }, - }, - selection_box = { - type = "wallmounted", - wall_bottom = { -0.5, -0.5, -0.5, 0.5, -0.4375, 0.5 }, - wall_top = { -0.5, 0.4375, -0.5, 0.5, 0.5, 0.5 }, - wall_side = { -0.5, -0.5, -0.5, -0.4375, 0.5, 0.5 }, - }, -}) - --- Various kinds of table legs - --- local above -materials = { - { "brass", S("brass") }, - { "wrought_iron", S("wrought iron") }, +local table_colors = { + { "", S("Table"), homedecor.plain_wood }, + { "_mahogany", S("Mahogany Table"), homedecor.mahogany_wood }, + { "_white", S("White Table"), homedecor.white_wood } } -for _, t in ipairs(materials) do -local name, desc = unpack(t) -homedecor.register("table_legs_"..name, { - description = S("Table Legs (@1)", desc), - drawtype = "plantlike", - tiles = {"homedecor_table_legs_"..name..".png"}, - inventory_image = "homedecor_table_legs_"..name..".png", - wield_image = "homedecor_table_legs_"..name..".png", - walkable = false, - groups = {snappy=3}, - sounds = default.node_sound_wood_defaults(), - selection_box = { - type = "fixed", - fixed = { -0.37, -0.5, -0.37, 0.37, 0.5, 0.37 } - }, -}) +for _, t in ipairs(table_colors) do + local suffix, desc, texture = unpack(t) + + homedecor.register("table"..suffix, { + description = desc, + tiles = { texture }, + node_box = { + type = "fixed", + fixed = { + { -0.4, -0.5, -0.4, -0.3, 0.4, -0.3 }, + { 0.3, -0.5, -0.4, 0.4, 0.4, -0.3 }, + { -0.4, -0.5, 0.3, -0.3, 0.4, 0.4 }, + { 0.3, -0.5, 0.3, 0.4, 0.4, 0.4 }, + { -0.5, 0.4, -0.5, 0.5, 0.5, 0.5 }, + { -0.4, -0.2, -0.3, -0.3, -0.1, 0.3 }, + { 0.3, -0.2, -0.4, 0.4, -0.1, 0.3 }, + { -0.3, -0.2, -0.4, 0.4, -0.1, -0.3 }, + { -0.3, -0.2, 0.3, 0.3, -0.1, 0.4 }, + }, + }, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + }) end -homedecor.register("utility_table_legs", { - description = S("Legs for Utility Table"), - drawtype = "plantlike", - tiles = { 'homedecor_utility_table_legs.png' }, - inventory_image = 'homedecor_utility_table_legs_inv.png', - wield_image = 'homedecor_utility_table_legs.png', - walkable = false, - groups = { snappy = 3 }, - sounds = default.node_sound_wood_defaults(), - selection_box = { - type = "fixed", - fixed = { -0.37, -0.5, -0.37, 0.37, 0.5, 0.37 } - }, -}) - -- crafting - minetest.register_craft( { output = "homedecor:glass_table_small_round_b 15", recipe = { @@ -226,8 +182,6 @@ minetest.register_craft( { } }) --- - minetest.register_craft( { output = "homedecor:wood_table_small_round_b 15", recipe = { @@ -305,7 +259,73 @@ minetest.register_craft({ burntime = 30, }) +for _, shape in ipairs (table_shapes) do + for _, leg in ipairs(leg_materials) do + for _, mat in ipairs(tabletop_materials) do + minetest.register_craft({ + output = "homedecor:"..mat[1].."_table_"..shape.."_with_"..leg[1].."_legs", + type = "shapeless", + recipe = { + "homedecor:"..mat[1].."_table_"..shape, + "homedecor:table_legs_"..leg[1] + }, + }) + end + end +end +minetest.register_craft({ + output = "homedecor:table", + recipe = { + { "group:wood","group:wood", "group:wood" }, + { "group:stick", "", "group:stick" }, + }, +}) + +minetest.register_craft({ + type = "shapeless", + output = "homedecor:table_mahogany", + recipe = { + "homedecor:table", + "dye:brown", + }, +}) + +minetest.register_craft({ + type = "shapeless", + output = "homedecor:table_mahogany", + recipe = { + "homedecor:table", + "unifieddyes:dark_orange", + }, +}) + +minetest.register_craft({ + type = "shapeless", + output = "homedecor:table_white", + recipe = { + "homedecor:table", + "dye:white", + }, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "homedecor:table", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "homedecor:table_mahogany", + burntime = 30, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "homedecor:table_white", + burntime = 30, +}) -- recycling @@ -368,3 +388,8 @@ minetest.register_craft({ "homedecor:wood_table_large" } }) + +-- Aliases for the above 3dforniture-like tables + +minetest.register_alias("3dforniture:table", "homedecor:table") +minetest.register_alias('table', 'homedecor:table') diff --git a/mods/homedecor_modpack/homedecor_tables/mod.conf b/mods/homedecor_modpack/homedecor_tables/mod.conf index a652f4c6..32011ac5 100644 --- a/mods/homedecor_modpack/homedecor_tables/mod.conf +++ b/mods/homedecor_modpack/homedecor_tables/mod.conf @@ -1,3 +1,4 @@ name = homedecor_tables description = Homedecor mod: tables depends = homedecor_common, default, basic_materials +optional_depends = creative diff --git a/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_large_square.obj b/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_large_square.obj new file mode 100644 index 00000000..e570fdd7 --- /dev/null +++ b/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_large_square.obj @@ -0,0 +1,107 @@ +# Blender v2.83.5 OBJ File: 'homedecor table with legs.blend' +# www.blender.org +o Cube_Cube.001 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.437500 -0.500000 +v -0.353553 -0.500000 0.353554 +v -0.353553 0.437515 0.353554 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.437515 -0.353553 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.437500 -0.500000 +v 0.500000 -0.437500 0.500000 +v -0.500000 -0.437500 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.437500 0.500000 +v 0.500000 0.437500 -0.500000 +v 0.500000 0.437500 0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 0.437500 0.500000 +v -0.500000 0.500000 0.500000 +v 0.353553 -0.500000 0.353554 +v 0.353553 0.437515 0.353554 +v -0.353553 -0.500000 -0.353553 +v -0.353553 0.437515 -0.353553 +vt -0.000000 -0.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.500000 +vt -0.000000 0.500000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 1.000000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt -0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 -0.000000 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 1.000000 +vt -0.000000 0.937500 +vt -0.000000 1.000000 +vt -0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +g Cube_Cube.001_top-bottom +s off +f 14/1/1 2/2/1 10/3/1 1/4/1 +f 11/5/2 13/6/2 15/7/2 12/8/2 +g Cube_Cube.001_edges +f 11/5/3 12/9/3 10/10/3 2/11/3 +f 13/6/4 14/12/4 1/13/4 15/14/4 +f 12/15/5 15/16/5 1/17/5 10/18/5 +f 13/19/6 11/20/6 2/21/6 14/22/6 +g Cube_Cube.001_top-bot_with_legs +f 20/23/2 3/24/2 4/25/2 18/26/2 +f 16/27/1 17/28/1 19/29/1 5/30/1 +g Cube_Cube.001_edges_with_legs +f 20/31/5 19/32/5 17/33/5 3/34/5 +f 4/25/3 3/35/3 17/36/3 16/37/3 +f 19/38/4 20/39/4 18/26/4 5/40/4 +f 4/41/6 16/42/6 5/43/6 18/44/6 +g Cube_Cube.001_legs +f 21/45/7 23/46/7 24/47/7 22/48/7 +f 6/49/8 8/50/8 9/51/8 7/52/8 diff --git a/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_round.obj b/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_round.obj index 41bd5e8a..8e7ddeb5 100644 --- a/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_round.obj +++ b/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_round.obj @@ -1,300 +1,1456 @@ -v 0.049 -0.499 -0.498 -v 0.049 -0.453 -0.498 -v 0.145 -0.499 -0.478 -v 0.145 -0.453 -0.478 -v 0.236 -0.499 -0.441 -v 0.236 -0.453 -0.441 -v 0.317 -0.499 -0.387 -v 0.317 -0.453 -0.387 -v 0.387 -0.499 -0.317 -v 0.387 -0.453 -0.317 -v 0.441 -0.499 -0.236 -v 0.441 -0.453 -0.236 -v 0.478 -0.499 -0.145 -v 0.478 -0.453 -0.145 -v 0.498 -0.499 -0.049 -v 0.498 -0.453 -0.049 -v 0.498 -0.499 0.049 -v 0.498 -0.453 0.049 -v 0.478 -0.499 0.145 -v 0.478 -0.453 0.145 -v 0.441 -0.499 0.236 -v 0.441 -0.453 0.236 -v 0.387 -0.499 0.317 -v 0.387 -0.453 0.317 -v 0.317 -0.499 0.387 -v 0.317 -0.453 0.387 -v 0.236 -0.499 0.441 -v 0.236 -0.453 0.441 -v 0.145 -0.499 0.478 -v 0.145 -0.453 0.478 -v 0.049 -0.499 0.498 -v 0.049 -0.453 0.498 -v -0.049 -0.499 0.498 -v -0.049 -0.453 0.498 -v -0.145 -0.499 0.478 -v -0.145 -0.453 0.478 -v -0.236 -0.499 0.441 -v -0.236 -0.453 0.441 -v -0.317 -0.499 0.387 -v -0.317 -0.453 0.387 -v -0.387 -0.499 0.317 -v -0.387 -0.453 0.317 -v -0.441 -0.499 0.236 -v -0.441 -0.453 0.236 -v -0.478 -0.499 0.145 -v -0.478 -0.453 0.145 -v -0.498 -0.499 0.049 -v -0.498 -0.453 0.049 -v -0.498 -0.499 -0.049 -v -0.498 -0.453 -0.049 -v -0.478 -0.499 -0.145 -v -0.478 -0.453 -0.145 -v -0.441 -0.499 -0.236 -v -0.441 -0.453 -0.236 -v -0.387 -0.499 -0.317 -v -0.387 -0.453 -0.317 -v -0.317 -0.499 -0.387 -v -0.317 -0.453 -0.387 -v -0.236 -0.499 -0.441 -v -0.236 -0.453 -0.441 -v -0.145 -0.499 -0.478 -v -0.145 -0.453 -0.478 -v -0.049 -0.499 -0.498 -v -0.049 -0.453 -0.498 -v 0.046 -0.437 -0.469 -v 0.137 -0.437 -0.451 -v 0.222 -0.437 -0.416 -v 0.299 -0.437 -0.364 -v 0.364 -0.437 -0.299 -v 0.416 -0.437 -0.222 -v 0.451 -0.437 -0.137 -v 0.469 -0.437 -0.046 -v 0.469 -0.437 0.046 -v 0.451 -0.437 0.137 -v 0.416 -0.437 0.222 -v 0.364 -0.437 0.299 -v 0.299 -0.437 0.364 -v 0.222 -0.437 0.416 -v 0.137 -0.437 0.451 -v 0.046 -0.437 0.469 -v -0.046 -0.437 0.469 -v -0.137 -0.437 0.451 -v -0.222 -0.437 0.416 -v -0.299 -0.437 0.364 -v -0.364 -0.437 0.299 -v -0.416 -0.437 0.222 -v -0.451 -0.437 0.137 -v -0.469 -0.437 0.046 -v -0.469 -0.437 -0.046 -v -0.451 -0.437 -0.137 -v -0.416 -0.437 -0.222 -v -0.364 -0.437 -0.299 -v -0.299 -0.437 -0.364 -v -0.222 -0.437 -0.416 -v -0.137 -0.437 -0.451 -v -0.046 -0.437 -0.469 -vt 0.277 0.123 -vt 0.277 0.096 -vt 0.333 0.096 -vt 0.333 0.123 -vt 0.389 0.096 -vt 0.389 0.123 -vt 0.444 0.096 -vt 0.444 0.123 -vt 0.5 0.096 -vt 0.5 0.123 -vt 0.556 0.096 -vt 0.556 0.123 -vt 0.611 0.096 -vt 0.611 0.123 -vt 0.667 0.096 -vt 0.667 0.123 -vt 0.723 0.096 -vt 0.723 0.123 -vt 0.277 0.404 -vt 0.277 0.377 -vt 0.333 0.377 -vt 0.333 0.404 -vt 0.389 0.377 -vt 0.389 0.404 -vt 0.444 0.377 -vt 0.444 0.404 -vt 0.5 0.377 -vt 0.5 0.404 -vt 0.556 0.377 -vt 0.556 0.404 -vt 0.611 0.377 -vt 0.611 0.404 -vt 0.667 0.377 -vt 0.667 0.404 -vt 0.723 0.377 -vt 0.723 0.404 -vt 0.277 0.311 -vt 0.277 0.283 -vt 0.333 0.283 -vt 0.333 0.311 -vt 0.389 0.283 -vt 0.389 0.311 -vt 0.444 0.283 -vt 0.444 0.311 -vt 0.5 0.283 -vt 0.5 0.311 -vt 0.556 0.283 -vt 0.556 0.311 -vt 0.611 0.283 -vt 0.611 0.311 -vt 0.667 0.283 -vt 0.667 0.311 -vt 0.723 0.283 -vt 0.723 0.311 -vt 0.277 0.217 -vt 0.277 0.189 -vt 0.333 0.189 -vt 0.333 0.217 -vt 0.389 0.189 -vt 0.389 0.217 -vt 0.444 0.189 -vt 0.444 0.217 -vt 0.5 0.189 -vt 0.5 0.217 -vt 0.556 0.189 -vt 0.556 0.217 -vt 0.611 0.189 -vt 0.611 0.217 -vt 0.667 0.217 -vt 0.667 0.189 -vt 0.723 0.189 -vt 0.723 0.217 -vt 0.728 0.526 -vt 0.685 0.535 -vt 0.644 0.552 -vt 0.607 0.576 -vt 0.576 0.607 -vt 0.552 0.644 -vt 0.535 0.685 -vt 0.526 0.728 -vt 0.526 0.772 -vt 0.535 0.815 -vt 0.552 0.856 -vt 0.576 0.893 -vt 0.607 0.924 -vt 0.644 0.948 -vt 0.685 0.965 -vt 0.728 0.974 -vt 0.772 0.974 -vt 0.815 0.965 -vt 0.856 0.948 -vt 0.893 0.924 -vt 0.924 0.893 -vt 0.948 0.856 -vt 0.965 0.815 -vt 0.974 0.772 -vt 0.974 0.728 -vt 0.965 0.685 -vt 0.948 0.644 -vt 0.924 0.607 -vt 0.893 0.576 -vt 0.856 0.552 -vt 0.815 0.535 -vt 0.772 0.526 -vt 0.192 0.558 -vt 0.23 0.551 -vt 0.27 0.551 -vt 0.308 0.558 -vt 0.344 0.573 -vt 0.377 0.595 -vt 0.405 0.623 -vt 0.427 0.656 -vt 0.442 0.692 -vt 0.449 0.73 -vt 0.449 0.77 -vt 0.442 0.808 -vt 0.427 0.844 -vt 0.405 0.877 -vt 0.377 0.905 -vt 0.344 0.927 -vt 0.308 0.942 -vt 0.27 0.949 -vt 0.23 0.949 -vt 0.192 0.942 -vt 0.156 0.927 -vt 0.123 0.905 -vt 0.095 0.877 -vt 0.073 0.844 -vt 0.058 0.808 -vt 0.051 0.77 -vt 0.051 0.73 -vt 0.058 0.692 -vt 0.073 0.656 -vt 0.095 0.623 -vt 0.123 0.595 -vt 0.156 0.573 -g 1 +# Blender v2.83.5 OBJ File: 'homedecor round table with legs.blend' +# www.blender.org +o Cube_Cube.001 +v 0.277785 -0.500000 -0.415735 +v -0.500000 -0.468750 0.000000 +v 0.277785 0.468750 0.415735 +v -0.500000 -0.500000 0.000000 +v 0.317196 0.468750 0.386505 +v 0.497592 -0.500000 -0.049009 +v 0.297348 0.500000 0.362320 +v 0.490393 -0.500000 -0.097545 +v 0.235698 -0.500000 -0.440961 +v 0.353553 0.468750 0.353554 +v 0.478470 -0.500000 -0.145142 +v -0.235699 0.468750 0.440960 +v 0.490393 -0.500000 0.097545 +v 0.478470 -0.500000 0.145142 +v 0.440961 -0.500000 0.235699 +v -0.277786 0.468750 0.415735 +v 0.461940 -0.500000 0.191342 +v -0.317197 0.468750 0.386505 +v 0.497592 -0.500000 0.049009 +v -0.297348 0.500000 0.362319 +v 0.461940 -0.500000 -0.191342 +v 0.145142 -0.500000 -0.478470 +v 0.317197 0.468750 -0.386505 +v -0.277786 -0.500000 -0.415734 +v 0.353553 0.468750 -0.353553 +v 0.191342 -0.500000 -0.461940 +v 0.331430 0.500000 -0.331430 +v 0.500000 -0.500000 0.000000 +v -0.490393 0.468750 0.097545 +v -0.497592 -0.500000 0.049009 +v -0.459706 0.500000 0.091441 +v 0.415735 -0.500000 0.277785 +v 0.386505 -0.500000 0.317197 +v -0.461940 0.468750 0.191342 +v -0.415735 -0.500000 -0.277784 +v -0.440961 -0.500000 -0.235698 +v -0.440961 0.468750 0.235698 +v -0.490393 -0.500000 -0.097545 +v -0.386506 -0.500000 -0.317196 +v 0.145142 0.468750 0.478470 +v -0.353554 -0.500000 -0.353553 +v 0.191341 0.468750 0.461940 +v -0.317198 -0.500000 -0.386505 +v 0.179368 0.500000 0.433034 +v -0.191343 -0.500000 -0.461939 +v 0.220949 0.500000 0.413367 +v -0.235700 -0.500000 -0.440960 +v 0.235698 0.468750 0.440961 +v -0.461940 -0.500000 -0.191341 +v -0.478470 -0.500000 -0.145142 +v 0.097545 0.468750 0.490393 +v -0.497592 -0.500000 -0.049008 +v -0.191342 0.468750 0.461940 +v -0.097547 -0.500000 -0.490392 +v -0.179369 0.500000 0.433034 +v -0.145144 -0.500000 -0.478470 +v -0.049010 -0.500000 -0.497592 +v -0.097546 0.468750 0.490393 +v 0.000000 -0.500000 -0.500000 +v -0.478470 0.468750 0.145142 +v -0.386506 -0.500000 0.317196 +v -0.415735 -0.500000 0.277785 +v -0.145143 0.468750 0.478470 +v 0.049008 -0.500000 0.497592 +v -0.000000 -0.500000 0.500000 +v 0.362320 0.500000 -0.297348 +v -0.353554 -0.500000 0.353553 +v 0.386505 0.468750 -0.317197 +v -0.049009 -0.500000 0.497592 +v 0.389720 0.500000 -0.260403 +v 0.049009 -0.500000 -0.497592 +v 0.415735 0.468750 -0.277785 +v 0.097545 -0.500000 -0.490393 +v 0.440961 -0.500000 -0.235698 +v 0.440961 0.468750 -0.235698 +v 0.415735 -0.500000 -0.277785 +v 0.097545 0.468750 -0.490393 +v 0.386505 -0.500000 -0.317197 +v 0.091441 0.500000 -0.459706 +v -0.145143 -0.500000 0.478470 +v -0.478470 -0.500000 0.145142 +v 0.049009 0.468750 -0.497592 +v -0.097546 -0.500000 0.490393 +v -0.049009 0.468750 0.497592 +v -0.191342 -0.500000 0.461940 +v -0.045942 0.500000 0.466455 +v 0.097545 -0.500000 0.490393 +v 0.235698 -0.500000 0.440961 +v -0.353554 0.468750 0.353553 +v 0.191341 -0.500000 0.461940 +v -0.000000 0.468750 0.500000 +v 0.145142 -0.500000 0.478470 +v -0.440961 -0.500000 0.235698 +v -0.461940 -0.500000 0.191342 +v 0.049008 0.468750 0.497592 +v -0.490393 -0.500000 0.097545 +v -0.415735 0.468750 0.277785 +v 0.353553 -0.500000 -0.353553 +v -0.389720 0.500000 0.260402 +v 0.317197 -0.500000 -0.386505 +v -0.317197 -0.500000 0.386505 +v -0.386506 0.468750 0.317196 +v -0.277786 -0.500000 0.415735 +v 0.000000 0.468750 -0.500000 +v -0.235699 -0.500000 0.440960 +v 0.353553 -0.500000 0.353554 +v -0.045943 0.500000 -0.466455 +v 0.317196 -0.500000 0.386505 +v -0.049010 0.468750 -0.497592 +v 0.277785 -0.500000 0.415735 +v -0.136061 0.500000 -0.448529 +v 0.277785 0.437500 0.415735 +v -0.145144 0.468750 -0.478470 +v -0.500000 0.437500 0.000000 +v -0.097547 0.468750 -0.490392 +v -0.091443 0.500000 -0.459706 +v 0.490393 0.437500 -0.097545 +v -0.497592 0.468750 -0.049008 +v 0.478470 0.437500 -0.145142 +v -0.478470 0.468750 -0.145142 +v -0.461940 0.468750 -0.191341 +v 0.440961 0.437500 0.235699 +v -0.433034 0.500000 -0.179368 +v 0.461940 0.437500 0.191342 +v 0.497592 0.437500 0.049009 +v -0.235700 0.468750 -0.440960 +v -0.191343 0.468750 -0.461939 +v 0.145142 0.437500 -0.478470 +v -0.179370 0.500000 -0.433033 +v -0.297349 0.500000 -0.362319 +v 0.191342 0.437500 -0.461940 +v -0.317198 0.468750 -0.386505 +v 0.500000 0.437500 0.000000 +v -0.353554 0.468750 -0.353553 +v -0.331430 0.500000 -0.331429 +v 0.415735 0.437500 0.277785 +v -0.386506 0.468750 -0.317196 +v -0.415735 0.437500 -0.277784 +v -0.490393 0.468750 -0.097545 +v -0.440961 0.468750 -0.235698 +v -0.415735 0.468750 -0.277784 +v -0.389720 0.500000 -0.260402 +v 0.386505 0.468750 0.317197 +v 0.362319 0.500000 0.297348 +v -0.461940 0.437500 -0.191341 +v 0.415735 0.468750 0.277785 +v -0.478470 0.437500 -0.145142 +v 0.389720 0.500000 0.260403 +v -0.497592 0.437500 -0.049008 +v -0.466455 0.500000 0.045942 +v -0.497592 0.468750 0.049009 +v 0.500000 0.468750 0.000000 +v -0.049010 0.437500 -0.497592 +v 0.468712 0.500000 0.000000 +v 0.000000 0.437500 -0.500000 +v 0.179368 0.500000 -0.433034 +v -0.386506 0.437500 0.317196 +v 0.191342 0.468750 -0.461940 +v -0.415735 0.437500 0.277785 +v -0.277786 0.468750 -0.415734 +v -0.260403 0.500000 -0.389720 +v -0.000000 0.437500 0.500000 +v 0.136060 0.500000 -0.448530 +v 0.145142 0.468750 -0.478470 +v -0.049009 0.437500 0.497592 +v 0.461940 0.468750 -0.191342 +v 0.049009 0.437500 -0.497592 +v 0.097545 0.437500 -0.490393 +v 0.497592 0.468750 0.049009 +v 0.415735 0.437500 -0.277785 +v 0.433034 0.500000 0.179369 +v 0.386505 0.437500 -0.317197 +v 0.461940 0.468750 0.191342 +v 0.440961 0.468750 0.235699 +v 0.478470 0.468750 0.145142 +v -0.191342 0.437500 0.461940 +v 0.459706 0.500000 0.091441 +v 0.490393 0.468750 0.097545 +v 0.448530 0.500000 -0.136060 +v 0.478470 0.468750 -0.145142 +v -0.440961 0.437500 0.235698 +v 0.235698 0.468750 -0.440961 +v 0.490393 0.468750 -0.097545 +v 0.317197 0.437500 -0.386505 +v 0.497592 0.468750 -0.049009 +v -0.317197 0.437500 0.386505 +v 0.466455 0.500000 -0.045942 +v -0.500000 0.468750 0.000000 +v -0.235699 0.437500 0.440960 +v 0.277785 0.468750 -0.415735 +v 0.260403 0.500000 -0.389720 +v 0.260403 -0.437500 -0.389720 +v 0.277785 -0.468750 -0.415735 +v -0.468712 -0.437500 0.000000 +v 0.466455 -0.437500 -0.045942 +v 0.497592 -0.468750 -0.049009 +v 0.490393 -0.468750 -0.097545 +v 0.459706 -0.437500 -0.091441 +v 0.235698 -0.468750 -0.440961 +v 0.220950 -0.437500 -0.413367 +v 0.478470 -0.468750 -0.145142 +v 0.448530 -0.437500 -0.136060 +v 0.490393 -0.468750 0.097545 +v 0.459706 -0.437500 0.091441 +v 0.448530 -0.437500 0.136060 +v 0.478470 -0.468750 0.145142 +v 0.413367 -0.437500 0.220949 +v 0.440961 -0.468750 0.235699 +v 0.461940 -0.468750 0.191342 +v 0.433034 -0.437500 0.179369 +v 0.497592 -0.468750 0.049009 +v 0.466455 -0.437500 0.045942 +v 0.433034 -0.437500 -0.179368 +v 0.461940 -0.468750 -0.191342 +v 0.145142 -0.468750 -0.478470 +v 0.136060 -0.437500 -0.448530 +v -0.260403 -0.437500 -0.389720 +v -0.277786 -0.468750 -0.415734 +v 0.191342 -0.468750 -0.461940 +v 0.179368 -0.437500 -0.433034 +v 0.468712 -0.437500 0.000000 +v 0.500000 -0.468750 0.000000 +v -0.497592 -0.468750 0.049009 +v -0.466455 -0.437500 0.045942 +v 0.389720 -0.437500 0.260403 +v 0.415735 -0.468750 0.277785 +v 0.362319 -0.437500 0.297348 +v 0.386505 -0.468750 0.317197 +v -0.389720 -0.437500 -0.260402 +v -0.415735 -0.468750 -0.277784 +v -0.440961 -0.468750 -0.235698 +v -0.413368 -0.437500 -0.220949 +v -0.459706 -0.437500 -0.091441 +v -0.490393 -0.468750 -0.097545 +v -0.362320 -0.437500 -0.297347 +v -0.386506 -0.468750 -0.317196 +v -0.331430 -0.437500 -0.331429 +v -0.353554 -0.468750 -0.353553 +v -0.317198 -0.468750 -0.386505 +v -0.297349 -0.437500 -0.362319 +v -0.179370 -0.437500 -0.433033 +v -0.191343 -0.468750 -0.461939 +v -0.235700 -0.468750 -0.440960 +v -0.220951 -0.437500 -0.413367 +v -0.433034 -0.437500 -0.179368 +v -0.461940 -0.468750 -0.191341 +v -0.478470 -0.468750 -0.145142 +v -0.448530 -0.437500 -0.136059 +v -0.497592 -0.468750 -0.049008 +v -0.466455 -0.437500 -0.045942 +v -0.091443 -0.437500 -0.459706 +v -0.097547 -0.468750 -0.490392 +v -0.145144 -0.468750 -0.478470 +v -0.136061 -0.437500 -0.448529 +v -0.049010 -0.468750 -0.497592 +v -0.045943 -0.437500 -0.466455 +v -0.000000 -0.437500 -0.468712 +v 0.000000 -0.468750 -0.500000 +v -0.386506 -0.468750 0.317196 +v -0.362320 -0.437500 0.297348 +v -0.389720 -0.437500 0.260402 +v -0.415735 -0.468750 0.277785 +v 0.049008 -0.468750 0.497592 +v 0.045942 -0.437500 0.466455 +v -0.000000 -0.437500 0.468712 +v -0.000000 -0.468750 0.500000 +v -0.353554 -0.468750 0.353553 +v -0.331430 -0.437500 0.331429 +v -0.045942 -0.437500 0.466455 +v -0.049009 -0.468750 0.497592 +v 0.049009 -0.468750 -0.497592 +v 0.045942 -0.437500 -0.466455 +v 0.091441 -0.437500 -0.459706 +v 0.097545 -0.468750 -0.490393 +v 0.440961 -0.468750 -0.235698 +v 0.413367 -0.437500 -0.220950 +v 0.415735 -0.468750 -0.277785 +v 0.389720 -0.437500 -0.260403 +v 0.386505 -0.468750 -0.317197 +v 0.362320 -0.437500 -0.297348 +v -0.136061 -0.437500 0.448530 +v -0.145143 -0.468750 0.478470 +v -0.448530 -0.437500 0.136060 +v -0.478470 -0.468750 0.145142 +v -0.097546 -0.468750 0.490393 +v -0.091442 -0.437500 0.459706 +v -0.179369 -0.437500 0.433034 +v -0.191342 -0.468750 0.461940 +v 0.097545 -0.468750 0.490393 +v 0.091441 -0.437500 0.459706 +v 0.235698 -0.468750 0.440961 +v 0.220949 -0.437500 0.413367 +v 0.179368 -0.437500 0.433034 +v 0.191341 -0.468750 0.461940 +v 0.145142 -0.468750 0.478470 +v 0.136060 -0.437500 0.448530 +v -0.440961 -0.468750 0.235698 +v -0.413368 -0.437500 0.220949 +v -0.461940 -0.468750 0.191342 +v -0.433034 -0.437500 0.179369 +v -0.459706 -0.437500 0.091441 +v -0.490393 -0.468750 0.097545 +v 0.331430 -0.437500 -0.331430 +v 0.353553 -0.468750 -0.353553 +v 0.317197 -0.468750 -0.386505 +v 0.297348 -0.437500 -0.362319 +v -0.297348 -0.437500 0.362319 +v -0.317197 -0.468750 0.386505 +v -0.277786 -0.468750 0.415735 +v -0.260403 -0.437500 0.389720 +v -0.220950 -0.437500 0.413367 +v -0.235699 -0.468750 0.440960 +v 0.353553 -0.468750 0.353554 +v 0.331430 -0.437500 0.331430 +v 0.297348 -0.437500 0.362320 +v 0.317196 -0.468750 0.386505 +v 0.277785 -0.468750 0.415735 +v 0.260403 -0.437500 0.389720 +v 0.317196 0.437500 0.386505 +v -0.468712 0.500000 0.000000 +v 0.353553 0.437500 0.353554 +v -0.277786 0.437500 0.415735 +v 0.459706 0.500000 -0.091441 +v 0.220950 0.500000 -0.413367 +v 0.353553 0.437500 -0.353553 +v 0.448530 0.500000 0.136060 +v -0.490393 0.437500 0.097545 +v 0.413367 0.500000 0.220949 +v -0.461940 0.437500 0.191342 +v 0.145142 0.437500 0.478470 +v 0.466455 0.500000 0.045942 +v 0.433034 0.500000 -0.179368 +v 0.191341 0.437500 0.461940 +v 0.235698 0.437500 0.440961 +v 0.097545 0.437500 0.490393 +v -0.097546 0.437500 0.490393 +v -0.478470 0.437500 0.145142 +v -0.145143 0.437500 0.478470 +v 0.440961 0.437500 -0.235698 +v -0.413368 0.500000 -0.220949 +v -0.459706 0.500000 -0.091441 +v -0.362320 0.500000 -0.297347 +v -0.353554 0.437500 0.353553 +v 0.049008 0.437500 0.497592 +v -0.220951 0.500000 -0.413367 +v -0.448530 0.500000 -0.136059 +v -0.466455 0.500000 -0.045942 +v -0.145144 0.437500 -0.478470 +v -0.097547 0.437500 -0.490392 +v -0.000000 0.500000 -0.468712 +v -0.362320 0.500000 0.297348 +v -0.235700 0.437500 -0.440960 +v 0.045942 0.500000 0.466455 +v -0.000000 0.500000 0.468712 +v -0.191343 0.437500 -0.461939 +v -0.317198 0.437500 -0.386505 +v -0.331430 0.500000 0.331429 +v -0.353554 0.437500 -0.353553 +v -0.386506 0.437500 -0.317196 +v 0.045942 0.500000 -0.466455 +v -0.490393 0.437500 -0.097545 +v -0.440961 0.437500 -0.235698 +v 0.413367 0.500000 -0.220950 +v 0.386505 0.437500 0.317197 +v -0.136061 0.500000 0.448530 +v -0.448530 0.500000 0.136060 +v -0.497592 0.437500 0.049009 +v -0.091442 0.500000 0.459706 +v -0.277786 0.437500 -0.415734 +v 0.091441 0.500000 0.459706 +v 0.461940 0.437500 -0.191342 +v 0.136060 0.500000 0.448530 +v -0.413368 0.500000 0.220949 +v -0.433034 0.500000 0.179369 +v 0.478470 0.437500 0.145142 +v 0.490393 0.437500 0.097545 +v 0.297348 0.500000 -0.362319 +v 0.235698 0.437500 -0.440961 +v -0.260403 0.500000 0.389720 +v -0.220950 0.500000 0.413367 +v 0.497592 0.437500 -0.049009 +v 0.331430 0.500000 0.331430 +v 0.277785 0.437500 -0.415735 +v 0.260403 0.500000 0.389720 +v -0.353553 -0.500000 0.353554 +v -0.353553 0.437515 0.353554 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.437515 -0.353553 +v 0.353553 -0.500000 0.353554 +v 0.353553 0.437515 0.353554 +v -0.353553 -0.500000 -0.353553 +v -0.353553 0.437515 -0.353553 +vt 0.500000 0.000000 +vt 0.549008 0.001204 +vt 0.597545 0.004804 +vt 0.645142 0.010765 +vt 0.691342 0.019030 +vt 0.735698 0.029520 +vt 0.777785 0.042133 +vt 0.817197 0.056747 +vt 0.853553 0.073223 +vt 0.886505 0.091402 +vt 0.915735 0.111107 +vt 0.940961 0.132151 +vt 0.961940 0.154329 +vt 0.978470 0.177429 +vt 0.990393 0.201227 +vt 0.997592 0.225496 +vt 1.000000 0.250000 +vt 0.997592 0.274504 +vt 0.990393 0.298773 +vt 0.978470 0.322571 +vt 0.961940 0.345671 +vt 0.940960 0.367849 +vt 0.915735 0.388893 +vt 0.886505 0.408598 +vt 0.853553 0.426777 +vt 0.817196 0.443253 +vt 0.777785 0.457868 +vt 0.735698 0.470480 +vt 0.691341 0.480970 +vt 0.645142 0.489235 +vt 0.597545 0.495196 +vt 0.549008 0.498796 +vt 0.500000 0.500000 +vt 0.450991 0.498796 +vt 0.402454 0.495196 +vt 0.354857 0.489235 +vt 0.308658 0.480970 +vt 0.264301 0.470480 +vt 0.222215 0.457867 +vt 0.182803 0.443252 +vt 0.146446 0.426776 +vt 0.113495 0.408598 +vt 0.084265 0.388892 +vt 0.059039 0.367849 +vt 0.038060 0.345671 +vt 0.021530 0.322571 +vt 0.009607 0.298773 +vt 0.002408 0.274504 +vt 0.000000 0.250000 +vt 0.002408 0.225496 +vt 0.009607 0.201228 +vt 0.021530 0.177429 +vt 0.038060 0.154329 +vt 0.059039 0.132151 +vt 0.084265 0.111108 +vt 0.113494 0.091402 +vt 0.146446 0.073224 +vt 0.182803 0.056748 +vt 0.222214 0.042133 +vt 0.264300 0.029520 +vt 0.308657 0.019030 +vt 0.354856 0.010765 +vt 0.402453 0.004804 +vt 0.450990 0.001204 +vt 0.454057 0.983227 +vt 0.408557 0.979853 +vt 0.363939 0.974265 +vt 0.320630 0.966516 +vt 0.279049 0.956683 +vt 0.239597 0.944860 +vt 0.202651 0.931159 +vt 0.168569 0.915714 +vt 0.137680 0.898673 +vt 0.110280 0.880201 +vt 0.086632 0.860474 +vt 0.066966 0.839684 +vt 0.051470 0.818030 +vt 0.040294 0.795721 +vt 0.033545 0.772970 +vt 0.031287 0.750000 +vt 0.033545 0.727029 +vt 0.040294 0.704280 +vt 0.051470 0.681970 +vt 0.066967 0.660316 +vt 0.086633 0.639526 +vt 0.110280 0.619799 +vt 0.137680 0.601326 +vt 0.168570 0.584285 +vt 0.202652 0.568840 +vt 0.239597 0.555140 +vt 0.279050 0.543316 +vt 0.320631 0.533483 +vt 0.363939 0.525735 +vt 0.408558 0.520147 +vt 0.454058 0.516772 +vt 0.500000 0.515644 +vt 0.545941 0.516772 +vt 0.591441 0.520147 +vt 0.636059 0.525735 +vt 0.679368 0.533483 +vt 0.720949 0.543316 +vt 0.760403 0.555140 +vt 0.797348 0.568840 +vt 0.831429 0.584285 +vt 0.862319 0.601326 +vt 0.889720 0.619799 +vt 0.913368 0.639525 +vt 0.933034 0.660315 +vt 0.948529 0.681970 +vt 0.959706 0.704280 +vt 0.966455 0.727029 +vt 0.968712 0.750000 +vt 0.966455 0.772971 +vt 0.959706 0.795721 +vt 0.948530 0.818030 +vt 0.933034 0.839684 +vt 0.913367 0.860475 +vt 0.889720 0.880201 +vt 0.862320 0.898674 +vt 0.831430 0.915715 +vt 0.797348 0.931160 +vt 0.760403 0.944860 +vt 0.720950 0.956684 +vt 0.679368 0.966517 +vt 0.636060 0.974265 +vt 0.591441 0.979853 +vt 0.545942 0.983228 +vt 0.500000 0.984356 +vt 0.156250 0.937500 +vt 0.187500 0.937500 +vt 0.187500 0.968750 +vt 0.156250 0.968750 +vt 0.718750 0.937500 +vt 0.750000 0.937500 +vt 0.750000 0.968750 +vt 0.718750 0.968750 +vt 0.031250 0.968750 +vt -0.000000 0.968750 +vt -0.000000 0.937500 +vt 0.031250 0.937500 +vt 0.250000 0.937500 +vt 0.281250 0.937500 +vt 0.281250 0.968750 +vt 0.250000 0.968750 +vt 0.125000 0.937500 +vt 0.125000 0.968750 +vt 0.312500 0.937500 +vt 0.312500 0.968750 +vt 0.031250 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 0.031250 0.937500 +vt 0.656250 0.937500 +vt 0.687500 0.937500 +vt 0.687500 0.968750 +vt 0.656250 0.968750 +vt 0.781250 0.937500 +vt 0.812500 0.937500 +vt 0.812500 0.968750 +vt 0.781250 0.968750 +vt 0.406250 0.937500 +vt 0.437500 0.937500 +vt 0.437500 0.968750 +vt 0.406250 0.968750 +vt 0.593750 0.937500 +vt 0.625000 0.937500 +vt 0.625000 0.968750 +vt 0.593750 0.968750 +vt 0.625000 0.937500 +vt 0.625000 0.968750 +vt 0.218750 0.937500 +vt 0.250000 0.937500 +vt 0.250000 0.968750 +vt 0.218750 0.968750 +vt 0.218750 0.937500 +vt 0.218750 0.968750 +vt 0.875000 0.937500 +vt 0.906250 0.937500 +vt 0.906250 0.968750 +vt 0.875000 0.968750 +vt 0.125000 0.937500 +vt 0.156250 0.937500 +vt 0.156250 0.968750 +vt 0.125000 0.968750 +vt 0.062500 0.937500 +vt 0.093750 0.937500 +vt 0.093750 0.968750 +vt 0.062500 0.968750 +vt 0.375000 0.937500 +vt 0.406250 0.937500 +vt 0.406250 0.968750 +vt 0.375000 0.968750 +vt 0.937500 0.937500 +vt 0.968750 0.937500 +vt 0.968750 0.968750 +vt 0.937500 0.968750 +vt 0.343750 0.937500 +vt 0.343750 0.968750 +vt 0.843750 0.937500 +vt 0.843750 0.968750 +vt 0.656250 0.937500 +vt 0.687500 0.937500 +vt 0.687500 0.968750 +vt 0.656250 0.968750 +vt 0.281250 0.937500 +vt 0.312500 0.937500 +vt 0.312500 0.968750 +vt 0.281250 0.968750 +vt 0.500000 0.937500 +vt 0.531250 0.937500 +vt 0.531250 0.968750 +vt 0.500000 0.968750 +vt 0.906250 0.937500 +vt 0.906250 0.968750 +vt 0.718750 0.937500 +vt 0.750000 0.937500 +vt 0.750000 0.968750 +vt 0.718750 0.968750 +vt 0.937500 0.937500 +vt 0.937500 0.968750 +vt 0.843750 0.937500 +vt 0.875000 0.937500 +vt 0.875000 0.968750 +vt 0.843750 0.968750 +vt 0.562500 0.937500 +vt 0.593750 0.937500 +vt 0.593750 0.968750 +vt 0.562500 0.968750 +vt 0.187500 0.937500 +vt 0.187500 0.968750 +vt 0.062500 0.937500 +vt 0.093750 0.937500 +vt 0.093750 0.968750 +vt 0.062500 0.968750 +vt 0.343750 0.937500 +vt 0.343750 0.968750 +vt 0.968750 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 0.968750 0.968750 +vt 0.375000 0.937500 +vt 0.375000 0.968750 +vt 0.781250 0.937500 +vt 0.812500 0.937500 +vt 0.812500 0.968750 +vt 0.781250 0.968750 +vt 0.437500 0.937500 +vt 0.437500 0.968750 +vt 0.562500 0.937500 +vt 0.562500 0.968750 +vt 0.531250 0.937500 +vt 0.531250 0.968750 +vt 0.468750 0.937500 +vt 0.468750 0.968750 +vt 0.468750 0.937500 +vt 0.468750 0.968750 +vt 0.500000 0.937500 +vt 0.500000 0.968750 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 0.343750 1.000000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.031250 1.000000 +vt 0.093750 1.000000 +vt 0.375000 1.000000 +vt 0.937500 1.000000 +vt 0.906250 1.000000 +vt 0.875000 1.000000 +vt 0.843750 1.000000 +vt 0.968750 1.000000 +vt 1.000000 1.000000 +vt 0.156250 1.000000 +vt 0.125000 1.000000 +vt 0.718750 1.000000 +vt 0.687500 1.000000 +vt 0.406250 1.000000 +vt 0.031250 1.000000 +vt -0.000000 1.000000 +vt 0.812500 1.000000 +vt 0.000000 1.000000 +vt 0.781250 1.000000 +vt 0.843750 1.000000 +vt 0.812500 1.000000 +vt 0.781250 1.000000 +vt 0.750000 1.000000 +vt 0.656250 1.000000 +vt 0.625000 1.000000 +vt 0.968750 1.000000 +vt 0.937500 1.000000 +vt 0.906250 1.000000 +vt 0.875000 1.000000 +vt 1.000000 1.000000 +vt 0.593750 1.000000 +vt 0.562500 1.000000 +vt 0.531250 1.000000 +vt 0.500000 1.000000 +vt 0.218750 1.000000 +vt 0.187500 1.000000 +vt 0.531250 1.000000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 0.468750 1.000000 +vt 0.468750 1.000000 +vt 0.437500 1.000000 +vt 0.187500 1.000000 +vt 0.218750 1.000000 +vt 0.437500 1.000000 +vt 0.406250 1.000000 +vt 0.125000 1.000000 +vt 0.093750 1.000000 +vt 0.375000 1.000000 +vt 0.562500 1.000000 +vt 0.656250 1.000000 +vt 0.625000 1.000000 +vt 0.593750 1.000000 +vt 0.156250 1.000000 +vt 0.062500 1.000000 +vt 0.281250 1.000000 +vt 0.250000 1.000000 +vt 0.312500 1.000000 +vt 0.281250 1.000000 +vt 0.343750 1.000000 +vt 0.750000 1.000000 +vt 0.718750 1.000000 +vt 0.687500 1.000000 +vt 0.454057 0.983227 +vt 0.408557 0.979853 +vt 0.363939 0.974265 +vt 0.320630 0.966516 +vt 0.279049 0.956683 +vt 0.239597 0.944860 +vt 0.202651 0.931159 +vt 0.168569 0.915714 +vt 0.137680 0.898673 +vt 0.110280 0.880201 +vt 0.086632 0.860474 +vt 0.066966 0.839684 +vt 0.051470 0.818030 +vt 0.040294 0.795721 +vt 0.033545 0.772970 +vt 0.031287 0.750000 +vt 0.033545 0.727029 +vt 0.040294 0.704280 +vt 0.051470 0.681970 +vt 0.066967 0.660316 +vt 0.086633 0.639526 +vt 0.110280 0.619799 +vt 0.137680 0.601326 +vt 0.168570 0.584285 +vt 0.202652 0.568840 +vt 0.239597 0.555140 +vt 0.279050 0.543316 +vt 0.320631 0.533483 +vt 0.363939 0.525735 +vt 0.408558 0.520147 +vt 0.454058 0.516772 +vt 0.500000 0.515644 +vt 0.545941 0.516772 +vt 0.591441 0.520147 +vt 0.636059 0.525735 +vt 0.679368 0.533483 +vt 0.720949 0.543316 +vt 0.760403 0.555140 +vt 0.797348 0.568840 +vt 0.831429 0.584285 +vt 0.862319 0.601326 +vt 0.889720 0.619799 +vt 0.913368 0.639525 +vt 0.933034 0.660315 +vt 0.948529 0.681970 +vt 0.959706 0.704280 +vt 0.966455 0.727029 +vt 0.968712 0.750000 +vt 0.966455 0.772971 +vt 0.959706 0.795721 +vt 0.948530 0.818030 +vt 0.933034 0.839684 +vt 0.913367 0.860475 +vt 0.889720 0.880201 +vt 0.862320 0.898674 +vt 0.831430 0.915715 +vt 0.797348 0.931160 +vt 0.760403 0.944860 +vt 0.720950 0.956684 +vt 0.679368 0.966517 +vt 0.636060 0.974265 +vt 0.591441 0.979853 +vt 0.545942 0.983228 +vt 0.500000 0.984356 +vt 0.500000 0.000000 +vt 0.549008 0.001204 +vt 0.597545 0.004804 +vt 0.645142 0.010765 +vt 0.691342 0.019030 +vt 0.735698 0.029520 +vt 0.777785 0.042133 +vt 0.817197 0.056747 +vt 0.853553 0.073223 +vt 0.886505 0.091402 +vt 0.915735 0.111107 +vt 0.940961 0.132151 +vt 0.961940 0.154329 +vt 0.978470 0.177429 +vt 0.990393 0.201227 +vt 0.997592 0.225496 +vt 1.000000 0.250000 +vt 0.997592 0.274504 +vt 0.990393 0.298773 +vt 0.978470 0.322571 +vt 0.961940 0.345671 +vt 0.940960 0.367849 +vt 0.915735 0.388893 +vt 0.886505 0.408598 +vt 0.853553 0.426777 +vt 0.817196 0.443253 +vt 0.777785 0.457868 +vt 0.735698 0.470480 +vt 0.691341 0.480970 +vt 0.645142 0.489235 +vt 0.597545 0.495196 +vt 0.549008 0.498796 +vt 0.500000 0.500000 +vt 0.450991 0.498796 +vt 0.402454 0.495196 +vt 0.354857 0.489235 +vt 0.308658 0.480970 +vt 0.264301 0.470480 +vt 0.222215 0.457867 +vt 0.182803 0.443252 +vt 0.146446 0.426776 +vt 0.113495 0.408598 +vt 0.084265 0.388892 +vt 0.059039 0.367849 +vt 0.038060 0.345671 +vt 0.021530 0.322571 +vt 0.009607 0.298773 +vt 0.002408 0.274504 +vt 0.000000 0.250000 +vt 0.002408 0.225496 +vt 0.009607 0.201228 +vt 0.021530 0.177429 +vt 0.038060 0.154329 +vt 0.059039 0.132151 +vt 0.084265 0.111108 +vt 0.113494 0.091402 +vt 0.146446 0.073224 +vt 0.182803 0.056748 +vt 0.222214 0.042133 +vt 0.264300 0.029520 +vt 0.308657 0.019030 +vt 0.354856 0.010765 +vt 0.402453 0.004804 +vt 0.450990 0.001204 +vt 0.687500 0.968750 +vt 0.718750 0.968750 +vt 0.718750 1.000000 +vt 0.687500 1.000000 +vt 0.750000 0.968750 +vt 0.781250 0.968750 +vt 0.781250 1.000000 +vt 0.750000 1.000000 +vt 0.656250 0.968750 +vt 0.656250 1.000000 +vt 0.312500 0.968750 +vt 0.343750 0.968750 +vt 0.343750 1.000000 +vt 0.312500 1.000000 +vt 0.250000 0.968750 +vt 0.281250 0.968750 +vt 0.281250 1.000000 +vt 0.250000 1.000000 +vt 0.375000 0.968750 +vt 0.375000 1.000000 +vt 0.281250 0.968750 +vt 0.312500 0.968750 +vt 0.312500 1.000000 +vt 0.281250 1.000000 +vt 0.218750 0.968750 +vt 0.250000 0.968750 +vt 0.250000 1.000000 +vt 0.218750 1.000000 +vt 0.406250 0.968750 +vt 0.437500 0.968750 +vt 0.437500 1.000000 +vt 0.406250 1.000000 +vt 0.031250 0.968750 +vt 0.062500 0.968750 +vt 0.062500 1.000000 +vt 0.031250 1.000000 +vt 0.156250 0.968750 +vt 0.187500 0.968750 +vt 0.187500 1.000000 +vt 0.156250 1.000000 +vt 0.093750 0.968750 +vt 0.093750 1.000000 +vt 0.125000 0.968750 +vt 0.125000 1.000000 +vt 0.593750 0.968750 +vt 0.625000 0.968750 +vt 0.625000 1.000000 +vt 0.593750 1.000000 +vt 0.562500 0.968750 +vt 0.562500 1.000000 +vt 0.531250 0.968750 +vt 0.531250 1.000000 +vt 0.406250 0.968750 +vt 0.406250 1.000000 +vt 0.437500 0.968750 +vt 0.468750 0.968750 +vt 0.468750 1.000000 +vt 0.437500 1.000000 +vt 0.187500 0.968750 +vt 0.187500 1.000000 +vt 0.468750 0.968750 +vt 0.500000 0.968750 +vt 0.500000 1.000000 +vt 0.468750 1.000000 +vt 0.156250 0.968750 +vt 0.156250 1.000000 +vt 0.500000 0.968750 +vt 0.500000 1.000000 +vt 0.218750 0.968750 +vt 0.218750 1.000000 +vt 0.875000 0.968750 +vt 0.906250 0.968750 +vt 0.906250 1.000000 +vt 0.875000 1.000000 +vt 0.531250 0.968750 +vt 0.562500 0.968750 +vt 0.562500 1.000000 +vt 0.531250 1.000000 +vt 0.593750 0.968750 +vt 0.625000 0.968750 +vt 0.625000 1.000000 +vt 0.593750 1.000000 +vt 0.656250 0.968750 +vt 0.687500 0.968750 +vt 0.687500 1.000000 +vt 0.656250 1.000000 +vt 0.906250 0.968750 +vt 0.937500 0.968750 +vt 0.937500 1.000000 +vt 0.906250 1.000000 +vt 0.843750 0.968750 +vt 0.875000 0.968750 +vt 0.875000 1.000000 +vt 0.843750 1.000000 +vt 0.968750 0.968750 +vt 1.000000 0.968750 +vt 1.000000 1.000000 +vt 0.968750 1.000000 +vt 0.718750 0.968750 +vt 0.750000 0.968750 +vt 0.750000 1.000000 +vt 0.718750 1.000000 +vt 0.781250 0.968750 +vt 0.781250 1.000000 +vt 0.812500 0.968750 +vt 0.812500 1.000000 +vt 0.812500 0.968750 +vt 0.812500 1.000000 +vt 0.000000 0.968750 +vt 0.031250 0.968750 +vt 0.031250 1.000000 +vt 0.000000 1.000000 +vt 0.843750 0.968750 +vt 0.843750 1.000000 +vt -0.000000 1.000000 +vt -0.000000 0.968750 +vt 0.375000 0.968750 +vt 0.375000 1.000000 +vt 0.093750 0.968750 +vt 0.125000 0.968750 +vt 0.125000 1.000000 +vt 0.093750 1.000000 +vt 0.968750 0.968750 +vt 1.000000 0.968750 +vt 1.000000 1.000000 +vt 0.968750 1.000000 +vt 0.937500 0.968750 +vt 0.937500 1.000000 +vt 0.343750 0.968750 +vt 0.343750 1.000000 +vt 0.062500 0.968750 +vt 0.062500 1.000000 +vt 0.625000 0.937500 +vt 0.656250 0.937500 +vt 0.562500 0.937500 +vt 0.593750 0.937500 +vt 0.968750 0.937500 +vt 1.000000 0.937500 +vt 0.500000 0.937500 +vt 0.531250 0.937500 +vt 0.468750 0.937500 +vt 0.812500 0.937500 +vt 0.843750 0.937500 +vt 0.468750 0.937500 +vt 0.500000 0.937500 +vt 0.437500 0.937500 +vt 0.937500 0.937500 +vt 0.968750 0.937500 +vt 0.312500 0.937500 +vt 0.343750 0.937500 +vt 0.687500 0.937500 +vt 0.718750 0.937500 +vt 0.437500 0.937500 +vt 0.562500 0.937500 +vt 0.750000 0.937500 +vt 0.781250 0.937500 +vt 0.593750 0.937500 +vt 0.625000 0.937500 +vt 0.531250 0.937500 +vt 0.343750 0.937500 +vt 0.375000 0.937500 +vt 0.406250 0.937500 +vt 0.687500 0.937500 +vt 0.718750 0.937500 +vt 0.093750 0.937500 +vt 0.125000 0.937500 +vt 0.875000 0.937500 +vt 0.906250 0.937500 +vt 0.406250 0.937500 +vt 0.187500 0.937500 +vt 0.218750 0.937500 +vt 0.093750 0.937500 +vt 0.125000 0.937500 +vt 1.000000 0.937500 +vt 0.312500 0.937500 +vt 0.031250 0.937500 +vt 0.062500 0.937500 +vt 0.156250 0.937500 +vt 0.906250 0.937500 +vt 0.250000 0.937500 +vt 0.281250 0.937500 +vt 0.843750 0.937500 +vt 0.875000 0.937500 +vt 0.937500 0.937500 +vt 0.218750 0.937500 +vt 0.250000 0.937500 +vt 0.812500 0.937500 +vt 0.375000 0.937500 +vt 0.031250 0.937500 +vt 0.062500 0.937500 +vt 0.187500 0.937500 +vt 0.656250 0.937500 +vt 0.750000 0.937500 +vt 0.781250 0.937500 +vt 0.000000 0.937500 +vt 0.281250 0.937500 +vt 0.156250 0.937500 +vt -0.000000 0.937500 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.8577 0.0000 0.5141 +vn 0.6716 0.0000 0.7410 +vn -0.9988 0.0000 0.0491 +vn -0.6716 -0.0000 0.7410 +vn -0.9040 0.0000 0.4276 +vn -0.5957 0.0000 0.8032 +vn 0.9988 0.0000 -0.0491 +vn 0.5141 0.0000 0.8577 +vn 0.8032 0.0000 0.5957 +vn 0.7410 0.0000 0.6716 +vn 0.2430 0.0000 -0.9700 +vn -0.3369 -0.0000 -0.9415 +vn 0.4276 0.0000 0.9040 +vn 0.7410 0.0000 -0.6716 +vn -0.8032 0.0000 0.5957 +vn 0.9415 0.0000 0.3369 +vn 0.9040 0.0000 -0.4276 +vn 0.9700 0.0000 -0.2430 +vn -0.3369 0.0000 0.9415 +vn 0.9892 0.0000 -0.1467 +vn -0.9892 0.0000 -0.1467 +vn -0.4276 0.0000 0.9040 +vn 0.8577 -0.0000 0.5141 +vn -0.5141 0.0000 -0.8577 +vn 0.5957 0.0000 -0.8032 +vn -0.0491 0.0000 -0.9988 +vn -0.7410 -0.0000 0.6716 +vn -0.9700 0.0000 -0.2430 +vn 0.9040 -0.0000 0.4276 +vn -0.6716 0.0000 -0.7409 +vn 0.6716 -0.0000 -0.7410 +vn 0.9700 -0.0000 0.2430 +vn -0.9040 0.0000 -0.4276 +vn 0.2430 0.0000 0.9700 +vn 0.8577 0.0000 -0.5141 +vn -0.9700 0.0000 0.2430 +vn -0.9892 0.0000 0.1467 +vn 0.5141 0.0000 -0.8577 +vn 0.9988 0.0000 0.0491 +vn 0.9415 0.0000 -0.3369 +vn 0.8032 0.0000 -0.5957 +vn 0.3369 0.0000 -0.9415 +vn -0.9415 0.0000 -0.3369 +vn -0.9415 0.0000 0.3369 +vn -0.8032 0.0000 -0.5957 +vn 0.5957 0.0000 0.8032 +vn -0.2430 0.0000 0.9700 +vn 0.4276 0.0000 -0.9040 +vn -0.1467 0.0000 -0.9892 +vn 0.3369 0.0000 0.9415 +vn -0.7410 0.0000 -0.6716 +vn 0.1467 0.0000 0.9892 +vn 0.1467 0.0000 -0.9892 +vn -0.5957 0.0000 -0.8032 +vn -0.5141 0.0000 0.8577 +vn 0.9892 0.0000 0.1467 +vn -0.1467 0.0000 0.9892 +vn 0.0491 0.0000 -0.9988 +vn -0.8577 0.0000 -0.5141 +vn -0.0491 0.0000 0.9988 +vn 0.0491 -0.0000 0.9988 +vn -0.9988 0.0000 -0.0491 +vn -0.2430 -0.0000 -0.9700 +vn -0.4276 0.0000 -0.9040 +vn 0.3635 0.7071 -0.6065 +vn 0.6995 0.7071 -0.1038 +vn 0.6859 0.7071 -0.1718 +vn 0.3023 0.7071 -0.6392 +vn 0.6859 0.7071 0.1718 +vn 0.6392 0.7071 0.3023 +vn 0.6995 0.7071 0.1038 +vn 0.7063 0.7071 0.0347 +vn 0.6392 0.7071 -0.3023 +vn -0.4212 0.7071 -0.5680 +vn 0.6658 0.7071 -0.2382 +vn 0.2382 0.7071 -0.6658 +vn -0.7063 0.7071 0.0347 +vn 0.6065 0.7071 0.3635 +vn 0.7063 0.7071 -0.0347 +vn 0.5680 0.7071 0.4212 +vn -0.6065 0.7071 -0.3635 +vn -0.5680 0.7071 -0.4212 +vn -0.5239 0.7071 -0.4749 +vn -0.4749 0.7071 -0.5239 +vn -0.3023 0.7071 -0.6392 +vn -0.6995 0.7071 -0.1038 +vn -0.6658 0.7071 -0.2382 +vn -0.7063 0.7071 -0.0347 +vn -0.6392 0.7071 -0.3023 +vn -0.6859 0.7071 -0.1718 +vn -0.1718 0.7071 -0.6859 +vn -0.3635 0.7071 -0.6065 +vn -0.2382 0.7071 -0.6658 +vn -0.0347 0.7071 -0.7063 +vn -0.1038 0.7071 -0.6995 +vn 0.6658 0.7071 0.2382 +vn -0.5680 0.7071 0.4212 +vn 0.0347 0.7071 0.7063 +vn -0.5239 0.7071 0.4749 +vn -0.0347 0.7071 0.7063 +vn 0.1038 0.7071 -0.6995 +vn 0.6065 0.7071 -0.3635 +vn 0.0347 0.7071 -0.7063 +vn 0.5680 0.7071 -0.4212 +vn -0.1718 0.7071 0.6859 +vn -0.6658 0.7071 0.2382 +vn -0.1038 0.7071 0.6995 +vn -0.2382 0.7071 0.6658 +vn 0.1038 0.7071 0.6995 +vn 0.3023 0.7071 0.6392 +vn 0.1718 0.7071 0.6859 +vn 0.2382 0.7071 0.6658 +vn -0.6392 0.7071 0.3023 +vn -0.6859 0.7071 0.1718 +vn -0.6065 0.7071 0.3635 +vn -0.6995 0.7071 0.1038 +vn 0.4749 0.7071 -0.5239 +vn 0.1718 0.7071 -0.6859 +vn 0.5239 0.7071 -0.4749 +vn 0.4212 0.7071 -0.5680 +vn -0.4212 0.7071 0.5680 +vn -0.3023 0.7071 0.6392 +vn -0.4749 0.7071 0.5239 +vn -0.3635 0.7071 0.6065 +vn 0.4749 0.7071 0.5239 +vn 0.3635 0.7071 0.6065 +vn 0.5239 0.7071 0.4749 +vn 0.4212 0.7071 0.5680 +vn -0.6716 0.0000 -0.7410 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +g Cube_Cube.001_top-bottom s off -f 1/1 2/2 4/3 3/4 -f 3/4 4/3 6/5 5/6 -f 5/6 6/5 8/7 7/8 -f 7/8 8/7 10/9 9/10 -f 9/10 10/9 12/11 11/12 -f 11/12 12/11 14/13 13/14 -f 13/14 14/13 16/15 15/16 -f 15/16 16/15 18/17 17/18 -f 17/19 18/20 20/21 19/22 -f 19/22 20/21 22/23 21/24 -f 21/24 22/23 24/25 23/26 -f 23/26 24/25 26/27 25/28 -f 25/28 26/27 28/29 27/30 -f 27/30 28/29 30/31 29/32 -f 29/32 30/31 32/33 31/34 -f 31/34 32/33 34/35 33/36 -f 33/37 34/38 36/39 35/40 -f 35/40 36/39 38/41 37/42 -f 37/42 38/41 40/43 39/44 -f 39/44 40/43 42/45 41/46 -f 41/46 42/45 44/47 43/48 -f 43/48 44/47 46/49 45/50 -f 45/50 46/49 48/51 47/52 -f 47/52 48/51 50/53 49/54 -f 49/55 50/56 52/57 51/58 -f 51/58 52/57 54/59 53/60 -f 53/60 54/59 56/61 55/62 -f 55/62 56/61 58/63 57/64 -f 57/64 58/63 60/65 59/66 -f 59/66 60/65 62/67 61/68 -f 54/59 52/57 90/57 91/59 -f 63/69 64/70 2/71 1/72 -f 61/68 62/67 64/70 63/69 -f 1/73 3/74 5/75 7/76 9/77 11/78 13/79 15/80 17/81 19/82 21/83 23/84 25/85 27/86 29/87 31/88 33/89 35/90 37/91 39/92 41/93 43/94 45/95 47/96 49/97 51/98 53/99 55/100 57/101 59/102 61/103 63/104 -f 66/105 65/106 96/107 95/108 94/109 93/110 92/111 91/112 90/113 89/114 88/115 87/116 86/117 85/118 84/119 83/120 82/121 81/122 80/123 79/124 78/125 77/126 76/127 75/128 74/129 73/130 72/131 71/132 70/133 69/134 68/135 67/136 -f 10/9 8/7 68/7 69/9 -f 32/33 30/31 79/31 80/33 -f 60/65 58/63 93/63 94/65 -f 38/41 36/39 82/39 83/41 -f 16/15 14/13 71/13 72/15 -f 2/71 64/70 96/70 65/71 -f 44/47 42/45 85/45 86/47 -f 22/23 20/21 74/21 75/23 -f 50/53 48/51 88/51 89/53 -f 6/5 4/3 66/3 67/5 -f 28/29 26/27 77/27 78/29 -f 56/61 54/59 91/59 92/61 -f 12/11 10/9 69/9 70/11 -f 34/35 32/33 80/33 81/35 -f 62/67 60/65 94/65 95/67 -f 40/43 38/41 83/41 84/43 -f 4/3 2/2 65/2 66/3 -f 18/17 16/15 72/15 73/17 -f 46/49 44/47 86/47 87/49 -f 24/25 22/23 75/23 76/25 -f 52/57 50/56 89/56 90/57 -f 8/7 6/5 67/5 68/7 -f 30/31 28/29 78/29 79/31 -f 58/63 56/61 92/61 93/63 -f 36/39 34/38 81/38 82/39 -f 14/13 12/11 70/11 71/13 -f 64/70 62/67 95/67 96/70 -f 42/45 40/43 84/43 85/45 -f 20/21 18/20 73/20 74/21 -f 48/51 46/49 87/49 88/51 -f 26/27 24/25 76/25 77/27 +f 59/1/1 71/2/1 73/3/1 22/4/1 26/5/1 9/6/1 1/7/1 100/8/1 98/9/1 78/10/1 76/11/1 74/12/1 21/13/1 11/14/1 8/15/1 6/16/1 28/17/1 19/18/1 13/19/1 14/20/1 17/21/1 15/22/1 32/23/1 33/24/1 106/25/1 108/26/1 110/27/1 88/28/1 90/29/1 92/30/1 87/31/1 64/32/1 65/33/1 69/34/1 83/35/1 80/36/1 85/37/1 105/38/1 103/39/1 101/40/1 67/41/1 61/42/1 62/43/1 93/44/1 94/45/1 81/46/1 96/47/1 30/48/1 4/49/1 52/50/1 38/51/1 50/52/1 49/53/1 36/54/1 35/55/1 39/56/1 41/57/1 43/58/1 24/59/1 47/60/1 45/61/1 56/62/1 54/63/1 57/64/1 +f 256/65/2 251/66/2 254/67/2 241/68/2 244/69/2 217/70/2 240/71/2 237/72/2 235/73/2 229/74/2 232/75/2 245/76/2 248/77/2 233/78/2 250/79/2 194/80/2 224/81/2 301/82/2 283/83/2 300/84/2 298/85/2 261/86/2 260/87/2 268/88/2 307/89/2 310/90/2 311/91/2 287/92/2 281/93/2 286/94/2 269/95/2 265/96/2 264/97/2 290/98/2 296/99/2 293/100/2 292/101/2 318/102/2 315/103/2 314/104/2 227/105/2 225/106/2 207/107/2 210/108/2 205/109/2 204/110/2 212/111/2 221/112/2 195/113/2 198/114/2 202/115/2 213/116/2 276/117/2 278/118/2 280/119/2 303/120/2 306/121/2 192/122/2 200/123/2 220/124/2 216/125/2 273/126/2 272/127/2 257/128/2 +g Cube_Cube.001_edges +f 93/129/3 62/130/3 262/131/3 297/132/3 +f 108/133/4 106/134/4 313/135/4 316/136/4 +f 223/137/5 2/138/5 4/139/5 30/140/5 +f 67/141/6 101/142/6 308/143/6 267/144/6 +f 94/145/7 93/129/7 297/132/7 299/146/7 +f 101/142/8 103/147/8 309/148/8 308/143/8 +f 196/149/9 222/150/9 28/151/9 6/152/9 +f 88/153/10 110/154/10 317/155/10 291/156/10 +f 33/157/11 32/158/11 226/159/11 228/160/11 +f 106/134/12 33/157/12 228/160/12 313/135/12 +f 22/161/13 73/162/13 274/163/13 215/164/13 +f 56/165/14 45/166/14 242/167/14 253/168/14 +f 90/169/15 88/153/15 291/156/15 294/170/15 +f 78/171/16 98/172/16 304/173/16 279/174/16 +f 62/130/17 61/175/17 259/176/17 262/131/17 +f 17/177/18 14/178/18 206/179/18 209/180/18 +f 21/181/19 74/182/19 275/183/19 214/184/19 +f 8/185/20 11/186/20 201/187/20 197/188/20 +f 85/189/21 80/190/21 282/191/21 288/192/21 +f 6/152/22 8/185/22 197/188/22 196/149/22 +f 38/193/23 52/194/23 249/195/23 234/196/23 +f 105/197/24 85/189/24 288/192/24 312/198/24 +f 32/158/25 15/199/25 208/200/25 226/159/25 +f 47/201/26 24/202/26 218/203/26 243/204/26 +f 100/205/27 1/206/27 193/207/27 305/208/27 +f 59/209/28 57/210/28 255/211/28 258/212/28 +f 61/175/29 67/141/29 267/144/29 259/176/29 +f 50/213/30 38/193/30 234/196/30 247/214/30 +f 15/199/31 17/177/31 209/180/31 208/200/31 +f 43/215/32 41/216/32 238/217/32 239/218/32 +f 98/172/33 100/205/33 305/208/33 304/173/33 +f 14/178/34 13/219/34 203/220/34 206/179/34 +f 36/221/35 49/222/35 246/223/35 231/224/35 +f 87/225/36 92/226/36 295/227/36 289/228/36 +f 74/182/37 76/229/37 277/230/37 275/183/37 +f 96/231/38 81/232/38 284/233/38 302/234/38 +f 30/140/39 96/231/39 302/234/39 223/137/39 +f 1/206/40 9/235/40 199/236/40 193/207/40 +f 19/237/41 28/238/41 222/239/41 211/240/41 +f 11/186/42 21/181/42 214/184/42 201/187/42 +f 76/229/43 78/171/43 279/174/43 277/230/43 +f 26/241/44 22/161/44 215/164/44 219/242/44 +f 49/222/45 50/213/45 247/214/45 246/223/45 +f 81/232/46 94/145/46 299/146/46 284/233/46 +f 39/243/47 35/244/47 230/245/47 236/246/47 +f 110/154/48 108/133/48 316/136/48 317/155/48 +f 80/190/49 83/247/49 285/248/49 282/191/49 +f 9/235/50 26/241/50 219/242/50 199/236/50 +f 57/210/51 54/249/51 252/250/51 255/211/51 +f 92/226/52 90/169/52 294/170/52 295/227/52 +f 41/216/53 39/243/53 236/246/53 238/217/53 +f 64/251/54 87/225/54 289/228/54 263/252/54 +f 73/162/55 71/253/55 271/254/55 274/163/55 +f 24/202/56 43/215/56 239/218/56 218/203/56 +f 103/147/57 105/197/57 312/198/57 309/148/57 +f 13/219/58 19/237/58 211/240/58 203/220/58 +f 83/247/59 69/255/59 270/256/59 285/248/59 +f 71/253/60 59/209/60 258/212/60 271/254/60 +f 35/244/61 36/221/61 231/224/61 230/245/61 +f 69/255/62 65/257/62 266/258/62 270/256/62 +f 263/252/63 266/258/63 65/257/63 64/251/63 +f 52/194/64 4/259/64 2/260/64 249/195/64 +f 54/249/65 56/165/65 253/168/65 252/250/65 +f 45/166/66 47/201/66 243/204/66 242/167/66 +f 193/207/67 199/236/67 200/261/67 192/262/67 +f 196/149/68 197/188/68 198/263/68 195/264/68 +f 197/188/69 201/187/69 202/265/69 198/263/69 +f 199/236/70 219/242/70 220/266/70 200/261/70 +f 206/179/71 203/220/71 204/267/71 205/268/71 +f 208/200/72 209/180/72 210/269/72 207/270/72 +f 203/220/73 211/240/73 212/271/73 204/267/73 +f 211/240/74 222/239/74 221/272/74 212/271/74 +f 214/184/75 275/183/75 276/273/75 213/274/75 +f 218/203/76 239/218/76 240/275/76 217/276/76 +f 201/187/77 214/184/77 213/274/77 202/265/77 +f 219/242/78 215/164/78 216/277/78 220/266/78 +f 224/278/79 194/279/79 2/138/79 223/137/79 +f 226/159/80 208/200/80 207/270/80 225/280/80 +f 222/150/81 196/149/81 195/264/81 221/281/81 +f 228/160/82 226/159/82 225/280/82 227/282/82 +f 230/245/83 231/224/83 232/283/83 229/284/83 +f 236/246/84 230/245/84 229/284/84 235/285/84 +f 238/217/85 236/246/85 235/285/85 237/286/85 +f 239/218/86 238/217/86 237/286/86 240/275/86 +f 242/167/87 243/204/87 244/287/87 241/288/87 +f 234/196/88 249/195/88 250/289/88 233/290/88 +f 246/223/89 247/214/89 248/291/89 245/292/89 +f 249/195/90 2/260/90 194/293/90 250/289/90 +f 231/224/91 246/223/91 245/292/91 232/283/91 +f 247/214/92 234/196/92 233/290/92 248/291/92 +f 252/250/93 253/168/93 254/294/93 251/295/93 +f 243/204/94 218/203/94 217/276/94 244/287/94 +f 253/168/95 242/167/95 241/288/95 254/294/95 +f 258/212/96 255/211/96 256/296/96 257/297/96 +f 255/211/97 252/250/97 251/295/97 256/296/97 +f 209/180/98 206/179/98 205/268/98 210/269/98 +f 262/131/99 259/176/99 260/298/99 261/299/99 +f 264/300/100 265/301/100 266/258/100 263/252/100 +f 259/176/101 267/144/101 268/302/101 260/298/101 +f 270/256/102 266/258/102 265/301/102 269/303/102 +f 274/163/103 271/254/103 272/304/103 273/305/103 +f 275/183/104 277/230/104 278/306/104 276/273/104 +f 271/254/105 258/212/105 257/297/105 272/304/105 +f 277/230/106 279/174/106 280/307/106 278/306/106 +f 282/191/107 285/248/107 286/308/107 281/309/107 +f 284/233/108 299/146/108 300/310/108 283/311/108 +f 285/248/109 270/256/109 269/303/109 286/308/109 +f 288/192/110 282/191/110 281/309/110 287/312/110 +f 263/252/111 289/228/111 290/313/111 264/300/111 +f 294/170/112 291/156/112 292/314/112 293/315/112 +f 289/228/113 295/227/113 296/316/113 290/313/113 +f 295/227/114 294/170/114 293/315/114 296/316/114 +f 299/146/115 297/132/115 298/317/115 300/310/115 +f 302/234/116 284/233/116 283/311/116 301/318/116 +f 297/132/117 262/131/117 261/299/117 298/317/117 +f 223/137/118 302/234/118 301/318/118 224/278/118 +f 304/173/119 305/208/119 306/319/119 303/320/119 +f 215/164/120 274/163/120 273/305/120 216/277/120 +f 279/174/121 304/173/121 303/320/121 280/307/121 +f 305/208/122 193/207/122 192/262/122 306/319/122 +f 308/143/123 309/148/123 310/321/123 307/322/123 +f 312/198/124 288/192/124 287/312/124 311/323/124 +f 267/144/125 308/143/125 307/322/125 268/302/125 +f 309/148/126 312/198/126 311/323/126 310/321/126 +f 316/136/127 313/135/127 314/324/127 315/325/127 +f 291/156/128 317/155/128 318/326/128 292/314/128 +f 313/135/129 228/160/129 227/282/129 314/324/129 +f 317/155/130 316/136/130 315/325/130 318/326/130 +g Cube_Cube.001_top-bot_with_legs +f 107/327/2 116/328/2 111/329/2 129/330/2 345/331/2 161/332/2 130/333/2 135/334/2 342/335/2 142/336/2 340/337/2 123/338/2 346/339/2 341/340/2 347/341/2 320/342/2 150/343/2 31/344/2 366/345/2 374/346/2 373/347/2 99/348/2 351/349/2 357/350/2 20/351/2 379/352/2 380/353/2 55/354/2 365/355/2 368/356/2 86/357/2 354/358/2 353/359/2 370/360/2 372/361/2 44/362/2 46/363/2 384/364/2 7/365/2 382/366/2 144/367/2 148/368/2 328/369/2 171/370/2 326/371/2 177/372/2 331/373/2 154/374/2 187/375/2 323/376/2 179/377/2 332/378/2 363/379/2 70/380/2 66/381/2 27/382/2 377/383/2 191/384/2 324/385/2 156/386/2 163/387/2 79/388/2 360/389/2 350/390/2 +f 155/391/1 167/392/1 168/393/1 128/394/1 131/395/1 378/396/1 383/397/1 184/398/1 325/399/1 172/400/1 170/401/1 339/402/1 371/403/1 119/404/1 117/405/1 381/406/1 133/407/1 125/408/1 376/409/1 375/410/1 124/411/1 122/412/1 136/413/1 364/414/1 321/415/1 319/416/1 112/417/1 334/418/1 333/419/1 330/420/1 335/421/1 344/422/1 162/423/1 165/424/1 336/425/1 338/426/1 176/427/1 189/428/1 322/429/1 186/430/1 343/431/1 157/432/1 159/433/1 181/434/1 329/435/1 337/436/1 327/437/1 367/438/1 114/439/1 149/440/1 361/441/1 147/442/1 145/443/1 362/444/1 138/445/1 359/446/1 358/447/1 356/448/1 369/449/1 352/450/1 355/451/1 348/452/1 349/453/1 153/454/1 +g Cube_Cube.001_edges_with_legs +f 3/455/130 5/456/130 7/457/130 384/458/130 +f 10/459/129 143/460/129 144/461/129 382/462/129 +f 48/463/128 3/455/128 384/458/128 46/464/128 +f 5/456/127 10/459/127 382/462/127 7/457/127 +f 16/465/126 12/466/126 380/467/126 379/468/126 +f 89/469/125 18/470/125 20/471/125 357/472/125 +f 12/466/124 53/473/124 55/474/124 380/467/124 +f 18/470/123 16/465/123 379/468/123 20/471/123 +f 23/475/122 190/476/122 191/477/122 377/478/122 +f 68/479/121 25/480/121 27/481/121 66/482/121 +f 164/483/120 77/484/120 79/485/120 163/486/120 +f 25/480/119 23/475/119 377/478/119 27/481/119 +f 151/487/118 29/488/118 31/489/118 150/490/118 +f 37/491/117 97/492/117 99/493/117 373/494/117 +f 29/488/116 60/495/116 366/496/116 31/489/116 +f 34/497/115 37/491/115 373/494/115 374/498/115 +f 40/499/114 42/500/114 44/501/114 372/502/114 +f 51/503/113 40/499/113 372/502/113 370/504/113 +f 42/500/112 48/463/112 46/464/112 44/501/112 +f 95/505/111 51/503/111 370/504/111 353/506/111 +f 53/473/110 63/507/110 365/508/110 55/474/110 +f 58/509/109 84/510/109 86/511/109 368/512/109 +f 60/495/108 34/497/108 374/498/108 366/496/108 +f 63/507/107 58/509/107 368/512/107 365/508/107 +f 72/513/106 68/479/106 66/482/106 70/514/106 +f 82/515/105 104/516/105 350/517/105 360/518/105 +f 75/519/104 72/513/104 70/514/104 363/520/104 +f 77/484/103 82/515/103 360/518/103 79/485/103 +f 84/510/102 91/521/102 354/522/102 86/511/102 +f 102/523/101 89/469/101 357/472/101 351/524/101 +f 353/506/100 354/522/100 91/521/100 95/505/100 +f 97/492/99 102/523/99 351/524/99 99/493/99 +f 173/525/98 175/526/98 326/527/98 171/528/98 +f 109/529/97 115/530/97 116/531/97 107/532/97 +f 104/516/96 109/529/96 107/532/96 350/517/96 +f 113/533/95 127/534/95 129/535/95 111/536/95 +f 126/537/94 160/538/94 161/539/94 345/540/94 +f 115/530/93 113/533/93 111/536/93 116/531/93 +f 120/541/92 139/542/92 341/543/92 346/544/92 +f 140/545/91 121/546/91 123/547/91 340/548/91 +f 118/549/90 188/550/90 320/551/90 347/552/90 +f 121/546/89 120/541/89 346/544/89 123/547/89 +f 139/542/88 118/549/88 347/552/88 341/543/88 +f 127/534/87 126/537/87 345/540/87 129/535/87 +f 132/553/86 134/554/86 135/555/86 130/556/86 +f 134/554/85 137/557/85 342/558/85 135/555/85 +f 137/557/84 141/559/84 142/560/84 342/558/84 +f 141/559/83 140/545/83 340/548/83 142/560/83 +f 143/460/82 146/561/82 148/562/82 144/461/82 +f 152/563/81 185/564/81 187/565/81 154/566/81 +f 146/561/80 174/567/80 328/568/80 148/562/80 +f 150/490/79 320/569/79 188/570/79 151/487/79 +f 158/571/78 164/483/78 163/486/78 156/572/78 +f 180/573/77 166/574/77 332/575/77 179/576/77 +f 160/538/76 132/553/76 130/556/76 161/539/76 +f 166/574/75 75/519/75 363/520/75 332/575/75 +f 169/577/74 152/578/74 154/579/74 331/580/74 +f 178/581/73 169/577/73 331/580/73 177/582/73 +f 174/567/72 173/525/72 171/528/72 328/568/72 +f 175/526/71 178/581/71 177/582/71 326/527/71 +f 182/583/70 158/571/70 156/572/70 324/584/70 +f 183/585/69 180/573/69 179/576/69 323/586/69 +f 185/564/68 183/585/68 323/586/68 187/565/68 +f 190/476/67 182/583/67 324/584/67 191/477/67 +f 355/587/66 352/588/66 126/537/66 127/534/66 +f 349/589/65 348/590/65 113/533/65 115/530/65 +f 149/591/64 114/592/64 188/550/64 118/549/64 +f 95/505/63 91/521/63 162/593/63 344/594/63 +f 165/595/62 162/593/62 91/521/62 84/510/62 +f 138/596/61 362/597/61 140/545/61 141/559/61 +f 167/598/60 155/599/60 104/516/60 82/515/60 +f 336/600/59 165/595/59 84/510/59 58/509/59 +f 376/601/58 125/602/58 169/577/58 178/581/58 +f 322/603/57 189/604/57 12/466/57 16/465/57 +f 369/605/56 356/606/56 132/553/56 160/538/56 +f 168/607/55 167/598/55 82/515/55 77/484/55 +f 344/594/54 335/608/54 51/503/54 95/505/54 +f 358/609/53 359/610/53 137/557/53 134/554/53 +f 330/611/52 333/612/52 42/500/52 40/499/52 +f 153/613/51 349/589/51 115/530/51 109/529/51 +f 378/614/50 131/615/50 158/571/50 182/583/50 +f 338/616/49 336/600/49 58/509/49 63/507/49 +f 112/617/48 319/618/48 5/456/48 3/455/48 +f 359/610/47 138/596/47 141/559/47 137/557/47 +f 337/619/46 329/620/46 34/497/46 60/495/46 +f 145/621/45 147/622/45 120/541/45 121/546/45 +f 131/615/44 128/623/44 164/483/44 158/571/44 +f 170/624/43 172/625/43 68/479/43 72/513/43 +f 119/626/42 371/627/42 166/574/42 180/573/42 +f 125/602/41 133/628/41 152/578/41 169/577/41 +f 383/629/40 378/614/40 182/583/40 190/476/40 +f 367/630/39 327/631/39 29/488/39 151/487/39 +f 327/631/38 337/619/38 60/495/38 29/488/38 +f 339/632/37 170/624/37 72/513/37 75/519/37 +f 335/608/36 330/611/36 40/499/36 51/503/36 +f 362/597/35 145/621/35 121/546/35 140/545/35 +f 375/633/34 376/601/34 178/581/34 175/526/34 +f 325/634/33 184/635/33 23/475/33 25/480/33 +f 356/606/131 358/609/131 134/554/131 132/553/131 +f 122/636/31 124/637/31 173/525/31 174/567/31 +f 147/622/30 361/638/30 139/542/30 120/541/30 +f 157/639/29 343/640/29 89/469/29 102/523/29 +f 155/599/28 153/613/28 109/529/28 104/516/28 +f 184/635/27 383/629/27 190/476/27 23/475/27 +f 352/588/26 369/605/26 160/538/26 126/537/26 +f 136/641/25 122/636/25 174/567/25 146/561/25 +f 189/604/24 176/642/24 53/473/24 12/466/24 +f 361/638/23 149/591/23 118/549/23 139/542/23 +f 381/643/22 117/644/22 183/585/22 185/564/22 +f 176/642/21 338/616/21 63/507/21 53/473/21 +f 117/644/20 119/626/20 180/573/20 183/585/20 +f 371/627/19 339/632/19 75/519/19 166/574/19 +f 124/637/18 375/633/18 175/526/18 173/525/18 +f 159/645/17 157/639/17 102/523/17 97/492/17 +f 172/625/16 325/634/16 25/480/16 68/479/16 +f 333/612/15 334/646/15 48/463/15 42/500/15 +f 348/590/14 355/587/14 127/534/14 113/533/14 +f 128/623/13 168/607/13 77/484/13 164/483/13 +f 321/647/12 364/648/12 143/460/12 10/459/12 +f 364/648/11 136/641/11 146/561/11 143/460/11 +f 334/646/10 112/617/10 3/455/10 48/463/10 +f 185/564/9 152/563/9 133/649/9 381/643/9 +f 186/650/8 322/603/8 16/465/8 18/470/8 +f 329/620/7 181/651/7 37/491/7 34/497/7 +f 343/640/6 186/650/6 18/470/6 89/469/6 +f 151/487/5 188/570/5 114/652/5 367/630/5 +f 319/618/4 321/647/4 10/459/4 5/456/4 +f 181/651/3 159/645/3 97/492/3 37/491/3 +g Cube_Cube.001_legs +f 389/653/132 391/654/132 392/655/132 390/656/132 +f 385/657/133 387/658/133 388/659/133 386/660/133 diff --git a/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_square.obj b/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_square.obj index 5bb07ee3..bec5c536 100644 --- a/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_square.obj +++ b/mods/homedecor_modpack/homedecor_tables/models/homedecor_table_small_square.obj @@ -1,43 +1,139 @@ -v 0.499 -0.499 -0.499 -v 0.499 -0.499 0.499 -v -0.499 -0.499 0.499 -v -0.499 -0.499 -0.499 -v 0.499 -0.469 -0.499 -v 0.499 -0.469 0.499 -v -0.499 -0.469 0.499 -v -0.499 -0.469 -0.499 -v 0.469 -0.437 -0.469 -v 0.469 -0.437 0.469 -v -0.469 -0.437 0.469 -v -0.469 -0.437 -0.469 -vt 0.5 0.029 -vt 0.971 0.029 -vt 0.971 0.5 -vt 0.5 0.5 -vt 0.015 0.985 -vt 0.015 0.515 -vt 0.029 0.529 -vt 0.029 0.971 -vt 0.985 0.5 -vt 0.985 0.029 -vt 0.5 0.515 -vt 0.971 0.515 -vt 0.485 0.029 -vt 0.485 0.5 -vt 0.971 0.015 -vt 0.5 0.015 -vt 0.471 0.971 -vt 0.471 0.529 -vt 0.485 0.515 -vt 0.485 0.985 +# Blender v2.83.5 OBJ File: 'homedecor small square table with legs.blend' +# www.blender.org +o Cube_Cube.001 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 0.437500 -0.500000 +v -0.353553 -0.500000 0.353554 +v -0.353553 0.437515 0.353554 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.437515 -0.353553 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 0.437500 -0.500000 +v 0.500000 0.437500 0.500000 +v -0.500000 0.437500 0.500000 +v 0.353553 -0.500000 0.353554 +v 0.353553 0.437515 0.353554 +v -0.353553 -0.500000 -0.353553 +v -0.353553 0.437515 -0.353553 +v 0.468750 0.500000 0.468750 +v 0.500000 0.468750 0.500000 +v 0.500000 0.468750 -0.500000 +v 0.468750 0.500000 -0.468750 +v 0.500000 -0.468750 -0.500000 +v 0.468750 -0.437500 -0.468750 +v 0.500000 -0.468750 0.500000 +v 0.468750 -0.437500 0.468750 +v -0.500000 -0.468750 -0.500000 +v -0.468750 -0.437500 -0.468750 +v -0.468750 -0.437500 0.468750 +v -0.500000 -0.468750 0.500000 +v -0.468750 0.500000 -0.468750 +v -0.500000 0.468750 -0.500000 +v -0.468750 0.500000 0.468750 +v -0.500000 0.468750 0.500000 +vt -0.000000 -0.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.500000 +vt -0.000000 0.500000 +vt 0.968750 0.984375 +vt 0.031250 0.984375 +vt 0.031250 0.515625 +vt 0.968750 0.515625 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 1.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 1.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 -0.000000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 -0.000000 +vt 0.031250 0.515625 +vt 0.968750 0.515625 +vt 0.968750 0.984375 +vt 0.031250 0.984375 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 1.000000 0.937500 +vt 1.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.968750 +vt 0.000000 0.968750 +vt 0.000000 0.937500 +vt 1.000000 0.937500 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt -0.000000 0.000000 +vt 1.000000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.7071 0.7071 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +g Cube_Cube.001_top-bottom s off -f 1/1 2/2 3/3 4/4 -f 8/5 7/6 11/7 12/8 -f 1/9 5/3 6/2 2/10 -f 2/11 6/4 7/3 3/12 -f 3/13 7/1 8/4 4/14 -f 5/15 1/2 4/1 8/16 -f 9/17 12/8 11/7 10/18 -f 7/6 6/19 10/18 11/7 -f 5/20 8/5 12/8 9/17 -f 6/19 5/20 9/17 10/18 +f 9/1/1 2/2/1 8/3/1 1/4/1 +f 22/5/2 26/6/2 27/7/2 24/8/2 +f 24/8/3 27/7/3 28/9/3 23/10/3 +f 22/5/4 24/8/4 23/10/4 21/11/4 +f 26/6/5 22/5/5 21/11/5 25/12/5 +f 27/7/6 26/6/6 25/12/6 28/9/6 +g Cube_Cube.001_edges +f 23/13/7 28/14/7 1/15/7 8/16/7 +f 25/17/8 21/18/8 2/19/8 9/20/8 +f 25/21/9 9/22/9 1/23/9 28/24/9 +f 21/25/10 23/26/10 8/27/10 2/28/10 +g Cube_Cube.001_top-bot_with_legs +f 10/29/1 11/30/1 12/31/1 3/32/1 +f 31/33/2 17/34/2 20/35/2 29/36/2 +f 31/33/6 29/36/6 30/37/6 32/38/6 +f 20/35/4 17/34/4 18/39/4 19/40/4 +f 17/34/3 31/33/3 32/38/3 18/39/3 +f 29/36/5 20/35/5 19/40/5 30/37/5 +g Cube_Cube.001_edges_with_legs +f 32/41/7 12/42/7 11/43/7 18/44/7 +f 19/45/8 10/46/8 3/47/8 30/48/8 +f 12/49/9 32/50/9 30/51/9 3/52/9 +f 19/53/10 18/54/10 11/55/10 10/56/10 +g Cube_Cube.001_legs +f 13/57/11 15/58/11 16/59/11 14/60/11 +f 4/61/12 6/62/12 7/63/12 5/64/12 diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_face_clean.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_face_clean.png deleted file mode 100644 index d955612a..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_face_clean.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_edges.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_edges.png similarity index 100% rename from mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_edges.png rename to mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_edges.png diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_inv.png deleted file mode 100644 index c8bc8575..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_inv.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_square.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_square.png new file mode 100644 index 00000000..3f58b48f Binary files /dev/null and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_square.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_square_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_square_inv.png new file mode 100644 index 00000000..24ea176c Binary files /dev/null and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_square_inv.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_tb.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_tb.png deleted file mode 100644 index ca9a14ef..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_large_tb.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round.png index 1932f0fe..1329b1b5 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round_inv.png index 0d868375..d6af4772 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round_inv.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_round_inv.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square.png index 66baf21b..e89ea540 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square_inv.png index f768314d..aa4079c4 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square_inv.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_glass_table_small_square_inv.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_brass.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_brass.png index f0e8bf95..ab80ee76 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_brass.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_brass.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wood.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wood.png new file mode 100644 index 00000000..c8c658eb Binary files /dev/null and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wood.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wrought_iron.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wrought_iron.png index 8d7eec55..94e8bc1a 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wrought_iron.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_table_legs_wrought_iron.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_edges.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_edges.png deleted file mode 100644 index c2b3d96e..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_edges.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_legs.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_legs.png deleted file mode 100644 index 121f2f23..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_legs.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_legs_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_legs_inv.png deleted file mode 100644 index 799477a4..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_legs_inv.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_tb.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_tb.png deleted file mode 100644 index b3ba2be5..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_utility_table_tb.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_edges.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_edges.png new file mode 100644 index 00000000..3e3f98e7 Binary files /dev/null and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_edges.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_edges.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_edges.png deleted file mode 100644 index c2b3d96e..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_edges.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_inv.png deleted file mode 100644 index 2c4b3e8e..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_inv.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_square.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_square.png new file mode 100644 index 00000000..3c64e3cc Binary files /dev/null and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_square.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_square_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_square_inv.png new file mode 100644 index 00000000..88bb8292 Binary files /dev/null and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_square_inv.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_tb.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_tb.png deleted file mode 100644 index 559b895e..00000000 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_large_tb.png and /dev/null differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round.png index 874227c3..1cfeb9b1 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round_inv.png index b1d1a909..44ad6593 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round_inv.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_round_inv.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square.png index 0a0d0722..c5af8fc7 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square.png differ diff --git a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square_inv.png b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square_inv.png index a36081d3..9b84a0f0 100644 Binary files a/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square_inv.png and b/mods/homedecor_modpack/homedecor_tables/textures/homedecor_wood_table_small_square_inv.png differ diff --git a/mods/lib_mount/README.md b/mods/lib_mount/README.md index 73e98600..047bbd75 100644 --- a/mods/lib_mount/README.md +++ b/mods/lib_mount/README.md @@ -1,9 +1,9 @@ -# Library Mount [![Build status](https://github.com/Panquesito7/lib_mount/workflows/build/badge.svg)](https://github.com/Panquesito7/lib_mount/actions) [![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) [![ContentDB](https://content.minetest.net/packages/Panquesito7/lib_mount/shields/downloads/)](https://content.minetest.net/packages/Panquesito7/lib_mount/) +# Library Mount [![Build status](https://github.com/minetest-mods/lib_mount/workflows/build/badge.svg)](https://github.com/minetest-mods/lib_mount/actions) [![License](https://img.shields.io/badge/license-LGPLv2.1%2B-blue.svg)](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) [![ContentDB](https://content.minetest.net/packages/Panquesito7/lib_mount/shields/downloads/)](https://content.minetest.net/packages/Panquesito7/lib_mount/) Made by [blert2112](https://github.com/blert2112).\ Handed over to [Panquesito7](https://github.com/Panquesito7). -Current version: 1.2 +Current version: 1.3 ## Dependencies @@ -29,11 +29,11 @@ See [`LICENSE.md`](LICENSE.md) for information. ## Installation -- Unzip the archive, rename the folder to `lib_mount` and place it in ../minetest/mods/ +- Unzip the archive, rename the folder to `lib_mount` and place it in `../minetest/mods/`. -- GNU/Linux: If you use a system-wide installation place it in ~/.minetest/mods/. +- GNU/Linux: If you use a system-wide installation, place it in `~/.minetest/mods/`. -- If you only want this to be used in a single world, place the folder in worldmods/ in your world directory. +- If you only want this to be used in a single world, place the folder in `worldmods/` in your world directory. For further information or help, see:\ . diff --git a/mods/lib_mount/init.lua b/mods/lib_mount/init.lua index 8f27efc7..8a6f80bf 100644 --- a/mods/lib_mount/init.lua +++ b/mods/lib_mount/init.lua @@ -278,13 +278,13 @@ function lib_mount.drive(entity, dtime, is_mob, moving_anim, stand_anim, jump_he velo.y = velo.y + (jump_height * 3) + 1 acce_y = acce_y + (acce_y * 3) + 1 end - if can_go_down and can_go_up and can_fly and can_fly == true then + if can_go_up and can_fly and can_fly == true then velo.y = velo.y + 1 acce_y = acce_y + 1 end end if ctrl.sneak then - if can_go_down and can_go_up and can_fly and can_fly == true then + if can_go_down and can_fly and can_fly == true then velo.y = velo.y - 1 acce_y = acce_y - 1 end @@ -317,6 +317,24 @@ function lib_mount.drive(entity, dtime, is_mob, moving_anim, stand_anim, jump_he return end + -- Stop! (upwards and downwards; applies only if `can_fly` is enabled) + if can_fly == true then + local s2 = get_sign(velo.y) + local s3 = get_sign(acce_y) + velo.y = velo.y - 0.02 * s2 + acce_y = acce_y - 0.02 * s3 + if s2 ~= get_sign(velo.y) then + entity.object:set_velocity({x=0, y=0, z=0}) + velo.y = 0 + return + end + if s3 ~= get_sign(acce_y) then + entity.object:set_velocity({x=0, y=0, z=0}) + acce_y = 0 -- luacheck: ignore + return + end + end + -- enforce speed limit forward and reverse local max_spd = entity.max_speed_reverse if get_sign(entity.v) >= 0 then @@ -326,6 +344,25 @@ function lib_mount.drive(entity, dtime, is_mob, moving_anim, stand_anim, jump_he entity.v = entity.v - get_sign(entity.v) end + -- Enforce speed limit when going upwards or downwards (applies only if `can_fly` is enabled) + if can_fly == true then + local max_spd_flying = entity.max_speed_downwards + if get_sign(velo.y) >= 0 or get_sign(acce_y) >= 0 then + max_spd_flying = entity.max_speed_upwards + end + + if math.abs(velo.y) > max_spd_flying then + velo.y = velo.y - get_sign(velo.y) + end + if velo.y > max_spd_flying then -- This check is to prevent exceeding the maximum speed; but the above check also prevents that. + velo.y = velo.y - get_sign(velo.y) + end + + if math.abs(acce_y) > max_spd_flying then + acce_y = acce_y - get_sign(acce_y) + end + end + -- Set position, velocity and acceleration local p = entity.object:get_pos() local new_velo = {x=0, y=0, z=0} @@ -337,6 +374,7 @@ function lib_mount.drive(entity, dtime, is_mob, moving_anim, stand_anim, jump_he if ni == "air" then if can_fly == true then new_acce.y = 0 + acce_y = acce_y - get_sign(acce_y) -- When going down, this will prevent from exceeding the maximum speed. end elseif ni == "liquid" then if entity.terrain_type == 2 or entity.terrain_type == 3 then diff --git a/mods/minislots/minislots_engine/depends.txt b/mods/minislots/minislots_engine/depends.txt deleted file mode 100644 index 739f218d..00000000 --- a/mods/minislots/minislots_engine/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -currency diff --git a/mods/minislots/minislots_engine/mod.conf b/mods/minislots/minislots_engine/mod.conf new file mode 100644 index 00000000..20f2acd2 --- /dev/null +++ b/mods/minislots/minislots_engine/mod.conf @@ -0,0 +1,5 @@ +name = minislots_engine +author = +depends = default, currency +optional_depends = +description = diff --git a/mods/minislots/minislots_golden7s/depends.txt b/mods/minislots/minislots_golden7s/depends.txt deleted file mode 100644 index 3628f79c..00000000 --- a/mods/minislots/minislots_golden7s/depends.txt +++ /dev/null @@ -1 +0,0 @@ -minislots_engine diff --git a/mods/minislots/minislots_golden7s/mod.conf b/mods/minislots/minislots_golden7s/mod.conf new file mode 100644 index 00000000..8486cffc --- /dev/null +++ b/mods/minislots/minislots_golden7s/mod.conf @@ -0,0 +1,5 @@ +name = minislots_golden7s +author = +depends = minislots_engine +optional_depends = +description = diff --git a/mods/minislots/minislots_golden7s_deluxe/depends.txt b/mods/minislots/minislots_golden7s_deluxe/depends.txt deleted file mode 100644 index 3628f79c..00000000 --- a/mods/minislots/minislots_golden7s_deluxe/depends.txt +++ /dev/null @@ -1 +0,0 @@ -minislots_engine diff --git a/mods/minislots/minislots_golden7s_deluxe/mod.conf b/mods/minislots/minislots_golden7s_deluxe/mod.conf new file mode 100644 index 00000000..1f141a91 --- /dev/null +++ b/mods/minislots/minislots_golden7s_deluxe/mod.conf @@ -0,0 +1,5 @@ +name = minislots_golden7s_deluxe +author = +depends = minislots_engine +optional_depends = +description = diff --git a/mods/minislots/minislots_work_files/mod.conf b/mods/minislots/minislots_work_files/mod.conf new file mode 100644 index 00000000..bbb872eb --- /dev/null +++ b/mods/minislots/minislots_work_files/mod.conf @@ -0,0 +1 @@ +name = minislots_work_files \ No newline at end of file diff --git a/mods/mob_horse/init.lua b/mods/mob_horse/init.lua index 422e9321..1a3e9d9f 100644 --- a/mods/mob_horse/init.lua +++ b/mods/mob_horse/init.lua @@ -15,7 +15,8 @@ local shoes = { ["mobs:horseshoe_steel"] = {7, 4, 2, "mobs_horseshoe_steelo.png"}, ["mobs:horseshoe_bronze"] = {7, 4, 4, "mobs_horseshoe_bronzeo.png"}, ["mobs:horseshoe_mese"] = {9, 5, 8, "mobs_horseshoe_meseo.png"}, - ["mobs:horseshoe_diamond"] = {10, 6, 6, "mobs_horseshoe_diamondo.png"} + ["mobs:horseshoe_diamond"] = {10, 6, 6, "mobs_horseshoe_diamondo.png"}, + ["mobs:horseshoe_crystal"] = {11, 6, 9, "mobs_horseshoe_crystalo.png"} } -- rideable horse @@ -29,7 +30,12 @@ mobs:register_mob("mob_horse:horse", { speed_normal = 15, speed_run = 30, stand_start = 25, - stand_end = 75, + stand_end = 50, -- 75 + stand2_start = 25, + stand2_end = 25, + stand3_start = 55, + stand3_end = 75, + stand3_loop = false, walk_start = 75, walk_end = 100, run_start = 75, @@ -71,6 +77,7 @@ mobs:register_mob("mob_horse:horse", { self.terrain_type = 3 self.driver_attach_at = {x = 0, y = y_off, z = -2} self.driver_eye_offset = {x = 0, y = 3, z = 0} + self.driver_scale = {x = 0.8, y = 0.8} -- shrink driver to fit model end -- if driver present allow control of horse @@ -86,22 +93,20 @@ mobs:register_mob("mob_horse:horse", { on_die = function(self, pos) - -- drop saddle when horse is killed while riding - -- also detach from horse properly + -- detach player from horse properly if self.driver then - - minetest.add_item(pos, "mobs:saddle") - mobs.detach(self.driver, {x = 1, y = 0, z = 1}) + end - self.saddle = nil + -- drop saddle if found + if self.saddle then + minetest.add_item(pos, "mobs:saddle") end -- drop any horseshoes added if self.shoed then minetest.add_item(pos, self.shoed) end - end, do_punch = function(self, hitter) @@ -143,29 +148,27 @@ mobs:register_mob("mob_horse:horse", { mobs.detach(clicker, {x = 1, y = 0, z = 1}) - -- add saddle back to inventory - if inv:room_for_item("main", "mobs:saddle") then - inv:add_item("main", "mobs:saddle") - else - minetest.add_item(clicker:get_pos(), "mobs:saddle") - end + return + end - self.saddle = nil - - -- attach player to horse - elseif (not self.driver and not self.child - and clicker:get_wielded_item():get_name() == "mobs:saddle") - or self.saddle then - - self.object:set_properties({stepheight = 1.1}) - mobs.attach(self, clicker) - - -- take saddle from inventory - if not self.saddle then - inv:remove_item("main", "mobs:saddle") - end + -- attach saddle to horse + if not self.driver + and not self.child + and clicker:get_wielded_item():get_name() == "mobs:saddle" + and not self.saddle then self.saddle = true + self.order = "stand" + self.object:set_properties({stepheight = 1.1}) + + -- take saddle from inventory + inv:remove_item("main", "mobs:saddle") + + self.texture_mods = self.texture_mods .. "^mobs_saddle_overlay.png" + + self.object:set_texture_mod(self.texture_mods) + + return end -- apply horseshoes @@ -190,6 +193,12 @@ mobs:register_mob("mob_horse:horse", { -- apply horseshoe overlay to current horse texture if overlay then self.texture_mods = "^" .. overlay + + if self.saddle then + self.texture_mods = self.texture_mods + .. "^mobs_saddle_overlay.png" + end + self.object:set_texture_mod(self.texture_mods) end @@ -209,8 +218,13 @@ mobs:register_mob("mob_horse:horse", { end -- used to capture horse with magic lasso - mobs:capture_mob(self, clicker, 0, 0, 80, false, nil) - end, + if mobs:capture_mob(self, clicker, nil, nil, 100, false, nil) then return end + + -- ride horse if saddled + if self.saddle and self.owner == player_name then + mobs.attach(self, clicker) + end + end }) mobs:spawn({ @@ -287,6 +301,25 @@ minetest.register_craft({ } }) +-- crystal horseshoes +if minetest.get_modpath("ethereal") then + +minetest.register_craftitem(":mobs:horseshoe_crystal", { + description = S("Crystal HorseShoes (use on horse to apply)"), + inventory_image = "mobs_horseshoe_crystal.png", +}) + +minetest.register_craft({ + output = "mobs:horseshoe_crystal", + recipe = { + {"", "ethereal:crystal_block", ""}, + {"ethereal:crystal_ingot", "", "ethereal:crystal_ingot"}, + {"ethereal:crystal_ingot", "", "ethereal:crystal_ingot"}, + } +}) + +end + -- lucky blocks if minetest.get_modpath("lucky_block") then @@ -295,6 +328,7 @@ lucky_block:add_blocks({ {"dro", {"mobs:horseshoe_bronze"}}, {"dro", {"mobs:horseshoe_mese"}}, {"dro", {"mobs:horseshoe_diamond"}}, + {"dro", {"mobs:horseshoe_crystal"}} }) end diff --git a/mods/mob_horse/license.txt b/mods/mob_horse/license.txt new file mode 100644 index 00000000..69296f05 --- /dev/null +++ b/mods/mob_horse/license.txt @@ -0,0 +1,3 @@ +Code: MIT +Textures: CC-BY-SA 3.0 by Mjollna +Model: MIT by KrupnovPavel diff --git a/mods/mob_horse/readme.md b/mods/mob_horse/readme.md index 50568234..9f7bb6dc 100644 --- a/mods/mob_horse/readme.md +++ b/mods/mob_horse/readme.md @@ -7,12 +7,16 @@ There are three different horse textures (white, brown, black) which will spawn ### Taming Horses can be tamed with 10x wheat, apple, barley, oats of corn which then allows the player to pick up the horse using a lasso and ride by right-clicking with a saddle. +--- +### Saddle +Right clicking a horse with a saddle equips it and the horse will be ordered to stand still until you wish to ride. + --- ### Horseshoes -Horseshoes can be crafted using steel, bronze, mese and diamond (4x ingots - 2 down either side with 1x block top middle) and placed on a horse by right clicking with the item. These can make horses run faster or jump higher while riding depending on tier. +Horseshoes can be crafted using steel, bronze, mese, diamond and crystal (4x ingots - 2 down either side with 1x block top middle) and placed on a horse by right clicking with the item. These can make horses run faster or jump higher while riding depending on tier. --- ### Dead Horse When riding a horse monsters will generally attack the horse first to get to player riding it, when horse dies the player is dismounted and it will drop any shoes or saddles in use as well as some horse meat. -#### Lucky Blocks: 4 +#### Lucky Blocks: 5 diff --git a/mods/mob_horse/textures/mobs_horseshoe_crystal.png b/mods/mob_horse/textures/mobs_horseshoe_crystal.png new file mode 100644 index 00000000..025eff53 Binary files /dev/null and b/mods/mob_horse/textures/mobs_horseshoe_crystal.png differ diff --git a/mods/mob_horse/textures/mobs_horseshoe_crystalo.png b/mods/mob_horse/textures/mobs_horseshoe_crystalo.png new file mode 100644 index 00000000..fab50cfd Binary files /dev/null and b/mods/mob_horse/textures/mobs_horseshoe_crystalo.png differ diff --git a/mods/mob_horse/textures/mobs_saddle_overlay.png b/mods/mob_horse/textures/mobs_saddle_overlay.png new file mode 100644 index 00000000..ef100478 Binary files /dev/null and b/mods/mob_horse/textures/mobs_saddle_overlay.png differ diff --git a/mods/mobs_animal/bunny.lua b/mods/mobs_animal/bunny.lua index fd972acb..aaff5600 100644 --- a/mods/mobs_animal/bunny.lua +++ b/mods/mobs_animal/bunny.lua @@ -172,9 +172,9 @@ minetest.register_craft({ minetest.register_craft({ output = "mobs:leather", - type = "shapeless", +-- type = "shapeless", recipe = { - "mobs:rabbit_hide", "mobs:rabbit_hide", - "mobs:rabbit_hide", "mobs:rabbit_hide" + {"mobs:rabbit_hide", "mobs:rabbit_hide"}, + {"mobs:rabbit_hide", "mobs:rabbit_hide"} } }) diff --git a/mods/mobs_animal/chicken.lua b/mods/mobs_animal/chicken.lua index 2c3b4484..e5d82c42 100644 --- a/mods/mobs_animal/chicken.lua +++ b/mods/mobs_animal/chicken.lua @@ -138,7 +138,7 @@ mobs:register_arrow("mobs_animal:egg_entity", { end, hit_mob = function(self, player) - player:punch(minetest.get_player_by_name(self.playername) or self.object, 1.0, { + player:punch(self.object, 1.0, { full_punch_interval = 1.0, damage_groups = {fleshy = 1}, }, nil) @@ -213,6 +213,7 @@ local mobs_shoot_egg = function (item, player, pointed_thing) ent.velocity = egg_VELOCITY -- needed for api internal timing ent.switch = 1 -- needed so that egg doesn't despawn straight away + ent._is_arrow = true -- tell advanced mob protection this is an arrow obj:setvelocity({ x = dir.x * egg_VELOCITY, diff --git a/mods/mobs_animal/cow.lua b/mods/mobs_animal/cow.lua index 0fac747d..bcb75f68 100644 --- a/mods/mobs_animal/cow.lua +++ b/mods/mobs_animal/cow.lua @@ -174,26 +174,26 @@ minetest.register_craftitem(":mobs:glass_milk", { }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "mobs:glass_milk 4", recipe = { - "vessels:drinking_glass", "vessels:drinking_glass", - "vessels:drinking_glass", "vessels:drinking_glass", - "mobs:bucket_milk" + {"vessels:drinking_glass", "vessels:drinking_glass"}, + {"vessels:drinking_glass", "vessels:drinking_glass"}, + {"mobs:bucket_milk", ""} }, replacements = { {"mobs:bucket_milk", "bucket:bucket_empty"} } }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "mobs:bucket_milk", recipe = { - "group:food_milk_glass", "group:food_milk_glass", - "group:food_milk_glass", "group:food_milk_glass", - "bucket:bucket_empty" + {"group:food_milk_glass", "group:food_milk_glass"}, + {"group:food_milk_glass", "group:food_milk_glass"}, + {"bucket:bucket_empty", ""} }, replacements = { - {"group:food_milk_glass", "vessels:drinking_glass 4"}, + {"group:food_milk_glass", "vessels:drinking_glass 4"} } }) @@ -203,7 +203,7 @@ minetest.register_craftitem(":mobs:butter", { description = S("Butter"), inventory_image = "mobs_butter.png", on_use = minetest.item_eat(1), - groups = {food_butter = 1, flammable = 2}, + groups = {food_butter = 1, flammable = 2} }) if minetest.get_modpath("farming") and farming and farming.mod then diff --git a/mods/mobs_animal/kitten.lua b/mods/mobs_animal/kitten.lua index 1f5233a9..2b4c876c 100644 --- a/mods/mobs_animal/kitten.lua +++ b/mods/mobs_animal/kitten.lua @@ -53,7 +53,7 @@ stepheight = 1.1, stoodup_end = 0, }, follow = { - "mobs_animal:rat", "ethereal:fish_raw", "mobs_fish:clownfish", + "mobs_animal:rat", "group:food_fish_raw", "mobs_fish:tropical", "xocean:fish_edible" }, view_range = 8, @@ -156,7 +156,8 @@ minetest.register_craftitem(":mobs:hairball", { local newpos = {x = pos.x + dir.x, y = pos.y + dir.y + 1.5, z = pos.z + dir.z} local item = hairball_items[math.random(1, #hairball_items)] - if item ~= "" then + if item ~= "" + and minetest.registered_items[item] then minetest.add_item(newpos, {name = item}) end diff --git a/mods/mobs_animal/locale/README.md b/mods/mobs_animal/locale/README.md new file mode 100644 index 00000000..4887b9e0 --- /dev/null +++ b/mods/mobs_animal/locale/README.md @@ -0,0 +1,10 @@ +# Convert '.po' file to '.txt' file. + +### COMMAND SAMPLE +'''' +$ lua po2tr.lua "Your Name (Your Site) " "pt_BR.po" +rm "pt_BR.tr" "mobs_animal.pt_BR.tr" +$ cat mobs_animal.pt_BR.tr | less +'''' + +Source Code: https://gitlab.com/4w/xtend/-/blob/master/xtend_default/tools/convert_po_file_to_tr_file/convert_po_file_to_tr_file.lua diff --git a/mods/mobs_animal/locale/mobs_animal.pt.tr b/mods/mobs_animal/locale/mobs_animal.pt.tr new file mode 100644 index 00000000..60d9f5c1 --- /dev/null +++ b/mods/mobs_animal/locale/mobs_animal.pt.tr @@ -0,0 +1,46 @@ +# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) +Bee=Abelha +Honey=Mel +Beehive=Colméia +Honey Block=Bloco de Mel +Bunny=Coelho +Raw Rabbit=Carne de Coelho (Cru) +Cooked Rabbit=Coelho (Assado) +Rabbit Hide=Pele de Coelho +Chicken=Galinha +Chicken Egg=Ovo de Galinha +Fried Egg=Ovo Frito +Raw Chicken=Carne de Galinha (Crua) +Cooked Chicken=Galinha Assada +Feather=Pluma +Cow already milked!=Vaca já ordenhada! +Cow=Vaca +Bucket of Milk=Balde de leite +Cheese=Queijo +Cheese Block=Bloco de Queijo +[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente +Kitten=Gato +Penguin=Pinguim +Rat=Rato +Cooked Rat=Rato (Assado) +Black=Preto +Blue=Azul +Brown=Marrom +Cyan=Ciano +Dark Green=Verde Escuro +Dark Grey=Cinza Escuro +Green=Verde +Grey=Cinza +Magenta=Rosa Magenta +Orange=Laranja +Pink=Rosa +Red=Vermelho +Violet=Violeta +White=Branco +Yellow=Amarelo +@1 Sheep=Ovelha @1 +Raw Mutton=Carneiro (Cru) +Cooked Mutton=Carneiro (Assado) +Warthog=Javali +Raw Porkchop=Costeleta de Javali (Crua) +Cooked Porkchop=Costeleta de Javali Assada diff --git a/mods/mobs_animal/locale/mobs_animal.pt_BR.tr b/mods/mobs_animal/locale/mobs_animal.pt_BR.tr new file mode 100644 index 00000000..60d9f5c1 --- /dev/null +++ b/mods/mobs_animal/locale/mobs_animal.pt_BR.tr @@ -0,0 +1,46 @@ +# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) +Bee=Abelha +Honey=Mel +Beehive=Colméia +Honey Block=Bloco de Mel +Bunny=Coelho +Raw Rabbit=Carne de Coelho (Cru) +Cooked Rabbit=Coelho (Assado) +Rabbit Hide=Pele de Coelho +Chicken=Galinha +Chicken Egg=Ovo de Galinha +Fried Egg=Ovo Frito +Raw Chicken=Carne de Galinha (Crua) +Cooked Chicken=Galinha Assada +Feather=Pluma +Cow already milked!=Vaca já ordenhada! +Cow=Vaca +Bucket of Milk=Balde de leite +Cheese=Queijo +Cheese Block=Bloco de Queijo +[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente +Kitten=Gato +Penguin=Pinguim +Rat=Rato +Cooked Rat=Rato (Assado) +Black=Preto +Blue=Azul +Brown=Marrom +Cyan=Ciano +Dark Green=Verde Escuro +Dark Grey=Cinza Escuro +Green=Verde +Grey=Cinza +Magenta=Rosa Magenta +Orange=Laranja +Pink=Rosa +Red=Vermelho +Violet=Violeta +White=Branco +Yellow=Amarelo +@1 Sheep=Ovelha @1 +Raw Mutton=Carneiro (Cru) +Cooked Mutton=Carneiro (Assado) +Warthog=Javali +Raw Porkchop=Costeleta de Javali (Crua) +Cooked Porkchop=Costeleta de Javali Assada diff --git a/mods/mobs_animal/locale/po2tr.lua b/mods/mobs_animal/locale/po2tr.lua new file mode 100644 index 00000000..b48ea071 --- /dev/null +++ b/mods/mobs_animal/locale/po2tr.lua @@ -0,0 +1,116 @@ +#!/usr/bin/env luajit + +-- Convert regular Gettext PO files to Minetest-specific TR files. If there is +-- already a TR file with the same name of the PO file except the file suffix +-- bneing .tr (or .TR) instead of .po (or .PO) then THIS FILE WILL BE +-- OVERWRITTEN WITHOUT INFORMATION OR A WAY TO RECOVER THE PREVIOUS FILE! +-- +-- +-- ▄██▄ +-- ▀███ +-- █ +-- ▄▄▄▄▄ █ +-- ▀▄ ▀▄ █ BACKUP +-- ▄▀▀▀▄ █▄▄▄▄█▄▄ ▄▀▀▀▄ █ +-- █ ▄ █ █ ▄ █ █ +-- ▀▄ ▄▀ ▀▄ ▄▀ █ +-- █▀▀▀ ▀▀▀ █ █ +-- █ █ █ ALL +-- ▄▀▄▄▀▄ █ ▄█▀█▀█▀█▀█▀█▄ █ █ +-- █▒▒▒▒█ █ █████████████▄ █ █ +-- █▒▒▒▒█ █ ██████████████▄ █ █ +-- █▒▒▒▒█ █ ██████████████▄ █ █ +-- █▒▒▒▒█ █ ██████████████ █ █ +-- █▒▒▒▒█ █ ██████████████▀ █ █ THE +-- █▒▒▒▒█ ██ ██████████████ █ █ +-- ▀████▀ ██▀█ █████████████▀ █▄█ +-- ██ ██ ▀█ █▄█▄█▄█▄█▄█▀ ▄█▀ +-- ██ ██ ▀█ ▄▀▓█ +-- ██ ██ ▀█▀▄▄▄▄▄▄▄▄▄▀▀▓▓▓█ +-- ████ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ +-- ███ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ THINGS +-- ██ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ +-- ██ █▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ +-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ +-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ +-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌ !!! +-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌ +-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌ +-- ██ ▐█▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█▌ +-- +-- +-- The syntax of TR files according to the introducing forum post is: +-- +-- # textdomain: namespace +-- original 1 = translation 1 +-- original 2 = translation 2 +-- original 3 = tralslation 3 +-- original N = translation N +-- +-- Where namespace should be the name of the mod. Following strings have to be +-- escaped using @. +-- +-- String | Escape +-- -------+-------- +-- `@` |`@@` +-- `=` |`@=` +-- `\n` |`@\n` +-- +-- See https://forum.minetest.net/viewtopic.php?t=18349 for details. + + +-- Preparation +if arg[1] == nil or arg[2] == nil then + print('Provide the namesspace as first parameter') + print('Provide the path to the source PO file as second parameter') + print('Example: '..arg[0]..' mymod path/to/my/source.po') + return +end +local SEP = package.path:match('(%p)%?%.') or '/' -- wonky but hey ... :) + + +-- Assign parameters to local variables +local namespace = arg[1] +local po_file = arg[2] +local tr_file = arg[2]:gsub('po$', 'tr'):gsub('PO$', 'TR') + + +-- Get the translations through crude plaintext file parsing +local file_contents = {} +local translations = {} + +local po_file_handle = io.open(po_file, 'rb') +if po_file_handle == nil then print('No base file found') return end + +for line in po_file_handle:lines() do + if line:match('^msgid') or line:match('^msgstr') then + table.insert(file_contents, line) + end +end + +local escape_string = function (s) + s = s:gsub('@([^%d])', '@@%1') -- All @ not followed by a number become @@ + s = s:gsub('([^@]@)$', '%1@') -- An @ at the end of the string become @@ + s = s:gsub('=', '@=') -- All = become @= + return s +end + +for number,line_content in pairs(file_contents) do + if line_content:match('^msgid') then + local o = line_content:gsub('^msgid "(.+)"$', '%1') + local t = file_contents[number + 1]:gsub('^msgstr "(.+)"$', '%1') + if o ~= 'msgid = ""' and t ~= 'msgstr ""' then + table.insert(translations, escape_string(o)..'='..escape_string(t)) + end + end +end +print(number) +po_file_handle:close() + + +-- Write translation to file +local tr_file_handle = io.open(tr_file, 'w+') +if tr_file_handle == nil then print('Could not open target file') return end +tr_file_handle:write('# textdomain: '..namespace, "\n") +for _,line in pairs(translations) do tr_file_handle:write(line, "\n") end +tr_file_handle:close() diff --git a/mods/mobs_animal/locale/pt.po b/mods/mobs_animal/locale/pt.po new file mode 100644 index 00000000..20f09d68 --- /dev/null +++ b/mods/mobs_animal/locale/pt.po @@ -0,0 +1,199 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-31 11:28+0200\n" +"PO-Revision-Date: 2021-06-20 18:51-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: Lunovox Heavenfinder \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: bee.lua +msgid "Bee" +msgstr "Abelha" + +#: bee.lua +msgid "Honey" +msgstr "Mel" + +#: bee.lua +msgid "Beehive" +msgstr "Colméia" + +#: bee.lua +msgid "Honey Block" +msgstr "Bloco de Mel" + +#: bunny.lua +msgid "Bunny" +msgstr "Coelho" + +#: bunny.lua +msgid "Raw Rabbit" +msgstr "Carne de Coelho (Cru)" + +#: bunny.lua +msgid "Cooked Rabbit" +msgstr "Coelho (Assado)" + +#: bunny.lua +msgid "Rabbit Hide" +msgstr "Pele de Coelho" + +#: chicken.lua +msgid "Chicken" +msgstr "Galinha" + +#: chicken.lua +msgid "Chicken Egg" +msgstr "Ovo de Galinha" + +#: chicken.lua +msgid "Fried Egg" +msgstr "Ovo Frito" + +#: chicken.lua +msgid "Raw Chicken" +msgstr "Carne de Galinha (Crua)" + +#: chicken.lua +msgid "Cooked Chicken" +msgstr "Galinha Assada" + +#: chicken.lua +msgid "Feather" +msgstr "Pluma" + +#: cow.lua +msgid "Cow already milked!" +msgstr "Vaca já ordenhada!" + +#: cow.lua +msgid "Cow" +msgstr "Vaca" + +#: cow.lua +msgid "Bucket of Milk" +msgstr "Balde de leite" + +#: cow.lua +msgid "Cheese" +msgstr "Queijo" + +#: cow.lua +msgid "Cheese Block" +msgstr "Bloco de Queijo" + +#: init.lua +msgid "[MOD] Mobs Redo 'Animals' loaded" +msgstr "[MOBS_ANIMAL] Mod carregado completamente" + +#: kitten.lua +msgid "Kitten" +msgstr "Gato" + +#: penguin.lua +msgid "Penguin" +msgstr "Pinguim" + +#: rat.lua +msgid "Rat" +msgstr "Rato" + +#: rat.lua +msgid "Cooked Rat" +msgstr "Rato (Assado)" + +#: sheep.lua +msgid "Black" +msgstr "Preto" + +#: sheep.lua +msgid "Blue" +msgstr "Azul" + +#: sheep.lua +msgid "Brown" +msgstr "Marrom" + +#: sheep.lua +msgid "Cyan" +msgstr "Ciano" + +#: sheep.lua +msgid "Dark Green" +msgstr "Verde Escuro" + +#: sheep.lua +msgid "Dark Grey" +msgstr "Cinza Escuro" + +#: sheep.lua +msgid "Green" +msgstr "Verde" + +#: sheep.lua +msgid "Grey" +msgstr "Cinza" + +#: sheep.lua +msgid "Magenta" +msgstr "Rosa Magenta" + +#: sheep.lua +msgid "Orange" +msgstr "Laranja" + +#: sheep.lua +msgid "Pink" +msgstr "Rosa" + +#: sheep.lua +msgid "Red" +msgstr "Vermelho" + +#: sheep.lua +msgid "Violet" +msgstr "Violeta" + +#: sheep.lua +msgid "White" +msgstr "Branco" + +#: sheep.lua +msgid "Yellow" +msgstr "Amarelo" + +#: sheep.lua +msgid "@1 Sheep" +msgstr "Ovelha @1 " + +#: sheep.lua +msgid "Raw Mutton" +msgstr "Carneiro (Cru)" + +#: sheep.lua +msgid "Cooked Mutton" +msgstr "Carneiro (Assado)" + +#: warthog.lua +msgid "Warthog" +msgstr "Javali" + +#: warthog.lua +msgid "Raw Porkchop" +msgstr "Costeleta de Javali (Crua)" + +#: warthog.lua +msgid "Cooked Porkchop" +msgstr "Costeleta de Javali Assada" diff --git a/mods/mobs_animal/locale/pt.txt b/mods/mobs_animal/locale/pt.txt new file mode 100644 index 00000000..60d9f5c1 --- /dev/null +++ b/mods/mobs_animal/locale/pt.txt @@ -0,0 +1,46 @@ +# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) +Bee=Abelha +Honey=Mel +Beehive=Colméia +Honey Block=Bloco de Mel +Bunny=Coelho +Raw Rabbit=Carne de Coelho (Cru) +Cooked Rabbit=Coelho (Assado) +Rabbit Hide=Pele de Coelho +Chicken=Galinha +Chicken Egg=Ovo de Galinha +Fried Egg=Ovo Frito +Raw Chicken=Carne de Galinha (Crua) +Cooked Chicken=Galinha Assada +Feather=Pluma +Cow already milked!=Vaca já ordenhada! +Cow=Vaca +Bucket of Milk=Balde de leite +Cheese=Queijo +Cheese Block=Bloco de Queijo +[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente +Kitten=Gato +Penguin=Pinguim +Rat=Rato +Cooked Rat=Rato (Assado) +Black=Preto +Blue=Azul +Brown=Marrom +Cyan=Ciano +Dark Green=Verde Escuro +Dark Grey=Cinza Escuro +Green=Verde +Grey=Cinza +Magenta=Rosa Magenta +Orange=Laranja +Pink=Rosa +Red=Vermelho +Violet=Violeta +White=Branco +Yellow=Amarelo +@1 Sheep=Ovelha @1 +Raw Mutton=Carneiro (Cru) +Cooked Mutton=Carneiro (Assado) +Warthog=Javali +Raw Porkchop=Costeleta de Javali (Crua) +Cooked Porkchop=Costeleta de Javali Assada diff --git a/mods/mobs_animal/locale/pt_BR.po b/mods/mobs_animal/locale/pt_BR.po new file mode 100644 index 00000000..20f09d68 --- /dev/null +++ b/mods/mobs_animal/locale/pt_BR.po @@ -0,0 +1,199 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-07-31 11:28+0200\n" +"PO-Revision-Date: 2021-06-20 18:51-0300\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: Lunovox Heavenfinder \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: pt_BR\n" + +#: bee.lua +msgid "Bee" +msgstr "Abelha" + +#: bee.lua +msgid "Honey" +msgstr "Mel" + +#: bee.lua +msgid "Beehive" +msgstr "Colméia" + +#: bee.lua +msgid "Honey Block" +msgstr "Bloco de Mel" + +#: bunny.lua +msgid "Bunny" +msgstr "Coelho" + +#: bunny.lua +msgid "Raw Rabbit" +msgstr "Carne de Coelho (Cru)" + +#: bunny.lua +msgid "Cooked Rabbit" +msgstr "Coelho (Assado)" + +#: bunny.lua +msgid "Rabbit Hide" +msgstr "Pele de Coelho" + +#: chicken.lua +msgid "Chicken" +msgstr "Galinha" + +#: chicken.lua +msgid "Chicken Egg" +msgstr "Ovo de Galinha" + +#: chicken.lua +msgid "Fried Egg" +msgstr "Ovo Frito" + +#: chicken.lua +msgid "Raw Chicken" +msgstr "Carne de Galinha (Crua)" + +#: chicken.lua +msgid "Cooked Chicken" +msgstr "Galinha Assada" + +#: chicken.lua +msgid "Feather" +msgstr "Pluma" + +#: cow.lua +msgid "Cow already milked!" +msgstr "Vaca já ordenhada!" + +#: cow.lua +msgid "Cow" +msgstr "Vaca" + +#: cow.lua +msgid "Bucket of Milk" +msgstr "Balde de leite" + +#: cow.lua +msgid "Cheese" +msgstr "Queijo" + +#: cow.lua +msgid "Cheese Block" +msgstr "Bloco de Queijo" + +#: init.lua +msgid "[MOD] Mobs Redo 'Animals' loaded" +msgstr "[MOBS_ANIMAL] Mod carregado completamente" + +#: kitten.lua +msgid "Kitten" +msgstr "Gato" + +#: penguin.lua +msgid "Penguin" +msgstr "Pinguim" + +#: rat.lua +msgid "Rat" +msgstr "Rato" + +#: rat.lua +msgid "Cooked Rat" +msgstr "Rato (Assado)" + +#: sheep.lua +msgid "Black" +msgstr "Preto" + +#: sheep.lua +msgid "Blue" +msgstr "Azul" + +#: sheep.lua +msgid "Brown" +msgstr "Marrom" + +#: sheep.lua +msgid "Cyan" +msgstr "Ciano" + +#: sheep.lua +msgid "Dark Green" +msgstr "Verde Escuro" + +#: sheep.lua +msgid "Dark Grey" +msgstr "Cinza Escuro" + +#: sheep.lua +msgid "Green" +msgstr "Verde" + +#: sheep.lua +msgid "Grey" +msgstr "Cinza" + +#: sheep.lua +msgid "Magenta" +msgstr "Rosa Magenta" + +#: sheep.lua +msgid "Orange" +msgstr "Laranja" + +#: sheep.lua +msgid "Pink" +msgstr "Rosa" + +#: sheep.lua +msgid "Red" +msgstr "Vermelho" + +#: sheep.lua +msgid "Violet" +msgstr "Violeta" + +#: sheep.lua +msgid "White" +msgstr "Branco" + +#: sheep.lua +msgid "Yellow" +msgstr "Amarelo" + +#: sheep.lua +msgid "@1 Sheep" +msgstr "Ovelha @1 " + +#: sheep.lua +msgid "Raw Mutton" +msgstr "Carneiro (Cru)" + +#: sheep.lua +msgid "Cooked Mutton" +msgstr "Carneiro (Assado)" + +#: warthog.lua +msgid "Warthog" +msgstr "Javali" + +#: warthog.lua +msgid "Raw Porkchop" +msgstr "Costeleta de Javali (Crua)" + +#: warthog.lua +msgid "Cooked Porkchop" +msgstr "Costeleta de Javali Assada" diff --git a/mods/mobs_animal/locale/pt_BR.txt b/mods/mobs_animal/locale/pt_BR.txt new file mode 100644 index 00000000..60d9f5c1 --- /dev/null +++ b/mods/mobs_animal/locale/pt_BR.txt @@ -0,0 +1,46 @@ +# textdomain: Lunovox Heavenfinder (https://libreplanet.org/wiki/User:Lunovox) +Bee=Abelha +Honey=Mel +Beehive=Colméia +Honey Block=Bloco de Mel +Bunny=Coelho +Raw Rabbit=Carne de Coelho (Cru) +Cooked Rabbit=Coelho (Assado) +Rabbit Hide=Pele de Coelho +Chicken=Galinha +Chicken Egg=Ovo de Galinha +Fried Egg=Ovo Frito +Raw Chicken=Carne de Galinha (Crua) +Cooked Chicken=Galinha Assada +Feather=Pluma +Cow already milked!=Vaca já ordenhada! +Cow=Vaca +Bucket of Milk=Balde de leite +Cheese=Queijo +Cheese Block=Bloco de Queijo +[MOD] Mobs Redo 'Animals' loaded=[MOBS_ANIMAL] Mod carregado completamente +Kitten=Gato +Penguin=Pinguim +Rat=Rato +Cooked Rat=Rato (Assado) +Black=Preto +Blue=Azul +Brown=Marrom +Cyan=Ciano +Dark Green=Verde Escuro +Dark Grey=Cinza Escuro +Green=Verde +Grey=Cinza +Magenta=Rosa Magenta +Orange=Laranja +Pink=Rosa +Red=Vermelho +Violet=Violeta +White=Branco +Yellow=Amarelo +@1 Sheep=Ovelha @1 +Raw Mutton=Carneiro (Cru) +Cooked Mutton=Carneiro (Assado) +Warthog=Javali +Raw Porkchop=Costeleta de Javali (Crua) +Cooked Porkchop=Costeleta de Javali Assada diff --git a/mods/mobs_animal/lucky_block.lua b/mods/mobs_animal/lucky_block.lua index e88b20d4..e2b028c2 100644 --- a/mods/mobs_animal/lucky_block.lua +++ b/mods/mobs_animal/lucky_block.lua @@ -12,7 +12,7 @@ if minetest.get_modpath("lucky_block") then {"spw", "mobs:chicken", 5}, {"dro", {"mobs:egg"}, 5}, {"spw", "mobs:cow", 5}, - {"dro", {"mobs:bucket_milk"}, 8}, + {"dro", {"mobs:bucket_milk", "bucket:bucket_water"}, 8}, {"spw", "mobs:kitten", 2}, {"exp"}, {"dro", {"mobs:hairball"}, 3}, diff --git a/mods/mobs_animal/penguin.lua b/mods/mobs_animal/penguin.lua index 5b26312e..f4b04ee0 100644 --- a/mods/mobs_animal/penguin.lua +++ b/mods/mobs_animal/penguin.lua @@ -46,7 +46,7 @@ stepheight = 0.6, fly_in = {"default:water_source", "default:water_flowing"}, floats = 0, follow = { - "ethereal:fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical", + "group:food_fish_raw", "mobs_fish:clownfish", "mobs_fish:tropical", "mobs_fish:clownfish_set", "mobs_fish:tropical_set", "xocean:fish_edible" }, view_range = 5, diff --git a/mods/mobs_animal/rat.lua b/mods/mobs_animal/rat.lua index 930a9855..ee73d47c 100644 --- a/mods/mobs_animal/rat.lua +++ b/mods/mobs_animal/rat.lua @@ -92,12 +92,12 @@ minetest.register_craftitem(":mobs:rat_cooked", { description = S("Cooked Rat"), inventory_image = "mobs_cooked_rat.png", on_use = minetest.item_eat(3), - groups = {food_rat = 1, flammable = 2}, + groups = {food_rat = 1, flammable = 2} }) minetest.register_craft({ type = "cooking", output = "mobs:rat_cooked", recipe = "mobs_animal:rat", - cooktime = 5, + cooktime = 5 }) diff --git a/mods/mobs_monster/dirt_monster.lua b/mods/mobs_monster/dirt_monster.lua index 518116a3..3631fb26 100644 --- a/mods/mobs_monster/dirt_monster.lua +++ b/mods/mobs_monster/dirt_monster.lua @@ -1,6 +1,16 @@ local S = mobs.intllib +local dirt_types = { + + { nodes = {"ethereal:dry_dirt"}, + skins = {"mobs_dirt_monster3.png"}, + drops = { + {name = "ethereal:dry_dirt", chance = 1, min = 0, max = 2} + } + } +} + -- Dirt Monster by PilzAdam @@ -19,6 +29,7 @@ mobs:register_mob("mobs_monster:dirt_monster", { mesh = "mobs_stone_monster.b3d", textures = { {"mobs_dirt_monster.png"}, + {"mobs_dirt_monster2.png"}, }, blood_texture = "default_dirt.png", makes_footstep_sound = true, @@ -48,19 +59,39 @@ mobs:register_mob("mobs_monster:dirt_monster", { punch_start = 40, punch_end = 63, }, + + -- check surrounding nodes and spawn a specific monster + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #dirt_types do + + tmp = dirt_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end }) -local spawn_on = "default:dirt_with_grass" - -if minetest.get_modpath("ethereal") then - spawn_on = "ethereal:gray_dirt" -end - if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:dirt_monster", - nodes = {spawn_on}, + nodes = {"default:dirt_with_grass", "ethereal:gray_dirt", "ethereal:dry_dirt"}, min_light = 0, max_light = 7, chance = 6000, diff --git a/mods/mobs_monster/dungeon_master.lua b/mods/mobs_monster/dungeon_master.lua index bcc04f85..4b681841 100644 --- a/mods/mobs_monster/dungeon_master.lua +++ b/mods/mobs_monster/dungeon_master.lua @@ -16,8 +16,8 @@ mobs:register_mob("mobs_monster:dungeon_master", { shoot_interval = 2.2, arrow = "mobs_monster:fireball", shoot_offset = 1, - hp_min = 22, - hp_max = 45, + hp_min = 42, + hp_max = 75, armor = 60, collisionbox = {-0.7, -1, -0.7, 0.7, 1.6, 0.7}, visual = "mesh", diff --git a/mods/mobs_monster/fire_spirit.lua b/mods/mobs_monster/fire_spirit.lua new file mode 100644 index 00000000..6e9bea92 --- /dev/null +++ b/mods/mobs_monster/fire_spirit.lua @@ -0,0 +1,98 @@ + +local S = mobs.intllib + +local mob_drops = { + {name = "fireflies:firefly", chance = 1, min = 1, max = 1} +} + +if minetest.get_modpath("ethereal") then + + table.insert(mob_drops, + {name = "ethereal:fire_dust", chance = 1, min = 1, max = 1}) +end + +-- Fire Spirit + +mobs:register_mob("mobs_monster:fire_spirit", { + type = "monster", + passive = false, + attack_type = "dogfight", + pathfinding = true, + reach = 2, + damage = 4, + hp_min = 25, + hp_max = 45, + armor = 100, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + visual_scale = {x = 0.5, y = 0.5, z = 0.5}, + visual = "sprite", + textures = { + {"mobs_fire_spirit.png"} + }, + glow = 14, + blood_texture = "fire_basic_flame.png", + immune_to = { + {"bucket:bucket_water", 1}, + {"bucket:bucket_river_water", 1}, + {"all"} + }, + makes_footstep_sound = false, + sounds = { + random = "fire_fire", + damage = "fire_extinguish_flame", + death = "fire_extinguish_flame" + }, + view_range = 14, + walk_velocity = 2, + run_velocity = 3, + jump = true, + jump_height = 6, + drops = mob_drops, + water_damage = 1, + lava_damage = 0, + fire_damage = 0, + light_damage = 0, + fall_damage = false, + fear_height = 8, + animation = {}, + + on_die = function(self, pos) + + mobs:effect(pos, 20, "tnt_smoke.png", 3, 5, 2, 0.5, nil, false) + + self.object:remove() + end, + + do_custom = function(self, dtime) + + self.flame_timer = (self.flame_timer or 0) + dtime + + if self.flame_timer < 0.25 then + return + end + + self.flame_timer = 0 + + local pos = self.object:get_pos() + + -- pos, amount, texture, min_size, max_size, radius, gravity, glow, fall + mobs:effect(pos, 5, "fire_basic_flame.png", 1, 2, 0.1, 0.2, 14, nil) + end +}) + + +if not mobs.custom_spawn_monster then +mobs:spawn({ + name = "mobs_monster:fire_spirit", + nodes = {"default:obsidian", "caverealms:hot_cobble"}, + neighbors = {"group:fire"}, + min_light = 12, + max_light = 15, + chance = 1500, + active_object_count = 1, + max_height = -150 +}) +end + + +mobs:register_egg("mobs_monster:fire_spirit", S("Fire Spirit"), "fire_basic_flame.png", 1) diff --git a/mods/mobs_monster/init.lua b/mods/mobs_monster/init.lua index 02142fdb..ef215630 100644 --- a/mods/mobs_monster/init.lua +++ b/mods/mobs_monster/init.lua @@ -28,6 +28,8 @@ dofile(path .. "tree_monster.lua") dofile(path .. "lava_flan.lua") -- Zeg9 dofile(path .. "mese_monster.lua") dofile(path .. "spider.lua") -- AspireMint +dofile(path .. "land_guard.lua") +dofile(path .. "fire_spirit.lua") -- Load custom spawning diff --git a/mods/mobs_monster/land_guard.lua b/mods/mobs_monster/land_guard.lua new file mode 100644 index 00000000..6545b33e --- /dev/null +++ b/mods/mobs_monster/land_guard.lua @@ -0,0 +1,127 @@ + +local S = mobs.intllib + + +local guard_types = { + + { nodes = { + "default:snow", "default:snowblock", "default:ice", + "default:dirt_with_snow" + }, + skins = {"mobs_land_guard6.png", "mobs_land_guard7.png", "mobs_land_guard8.png"}, + drops = { + {name = "default:ice", chance = 1, min = 1, max = 4}, + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:diamond", chance = 4, min = 0, max = 2}, + }, + }, + + { nodes = { + "ethereal:dry_dirt", "default:sand", "default:desert_sand", + "default:dry_dirt_with_dry_grass", "default:dry_dirt" + }, + skins = {"mobs_land_guard4.png", "mobs_land_guard5.png"}, + drops = { + {name = "default:sandstone", chance = 1, min = 1, max = 4}, + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:mese_crystal", chance = 4, min = 0, max = 2}, + }, + } +} + +-- Land Guard + +mobs:register_mob("mobs_monster:land_guard", { + type = "monster", + passive = false, + attack_type = "dogfight", + group_attack = true, + reach = 3, + damage = 15, + hp_min = 30, + hp_max = 65, + armor = 50, + collisionbox = {-0.5, -1.01, -0.5, 0.5, 1.6, 0.5}, + visual_size = {x = 1, y = 1}, + visual = "mesh", + mesh = "mobs_dungeon_master.b3d", + textures = { + {"mobs_land_guard.png"}, + {"mobs_land_guard2.png"}, + {"mobs_land_guard3.png"} + }, + makes_footstep_sound = true, + sounds = { + random = "mobs_dungeonmaster", + }, + walk_velocity = 1.5, + run_velocity = 3.4, + jump = true, + jump_height = 2.0, + floats = 0, + view_range = 15, + drops = { + {name = "mobs:leather", chance = 2, min = 0, max = 2}, + {name = "default:mese_crystal", chance = 3, min = 0, max = 2}, + {name = "default:diamond", chance = 4, min = 0, max = 1}, + }, + water_damage = 0, + lava_damage = 6, + light_damage = 0, + fear_height = 8, + animation = { + stand_start = 0, + stand_end = 19, + walk_start = 20, + walk_end = 35, + punch_start = 36, + punch_end = 48, + speed_normal = 15, + speed_run = 20, + }, + + -- check surrounding nodes and spawn a specific guard + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #guard_types do + + tmp = guard_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = { tmp.skins[math.random(#tmp.skins)] } + self.object:set_properties({textures = self.base_texture}) + self.docile_by_day = tmp.docile + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end, +}) + + +if not mobs.custom_spawn_monster then +mobs:spawn({ + name = "mobs_monster:land_guard", + nodes = { + "default:snow", "default:ice", "default:stone", + "default:dry_dirt_with_dry_grass", "ethereal:dry_dirt" + }, + max_light = 7, + chance = 25000, + min_height = 0, + active_object_count = 1, +}) +end + + +mobs:register_egg("mobs_monster:land_guard", S("Land Guard"), "default_ice.png", 1) diff --git a/mods/mobs_monster/lava_flan.lua b/mods/mobs_monster/lava_flan.lua index cbf1cf93..1e957e36 100644 --- a/mods/mobs_monster/lava_flan.lua +++ b/mods/mobs_monster/lava_flan.lua @@ -36,7 +36,8 @@ mobs:register_mob("mobs_monster:lava_flan", { {name = "mobs:lava_orb", chance = 15, min = 1, max = 1}, }, water_damage = 8, - lava_damage = 0, + lava_damage = -1, + fire_damage = 0, light_damage = 0, immune_to = { {"mobs:pick_lava", -2}, -- lava pick heals 2 health @@ -52,7 +53,7 @@ mobs:register_mob("mobs_monster:lava_flan", { run_start = 20, run_end = 28, punch_start = 20, - punch_end = 28, + punch_end = 28 }, on_die = function(self, pos) @@ -173,9 +174,13 @@ minetest.register_tool(":mobs:pick_lava", { inventory_image = "mobs_pick_lava.png", tool_capabilities = { full_punch_interval = 0.4, - max_drop_level=3, - groupcaps={ - cracky = {times={[1]=1.80, [2]=0.80, [3]=0.40}, uses=40, maxlevel=3}, + max_drop_level = 3, + groupcaps = { + cracky = { + times = {[1] = 1.80, [2] = 0.80, [3] = 0.40}, + uses = 40, + maxlevel = 3 + } }, damage_groups = {fleshy = 6, fire = 1}, }, @@ -188,7 +193,7 @@ minetest.register_craft({ recipe = { {"mobs:lava_orb", "mobs:lava_orb", "mobs:lava_orb"}, {"", "default:obsidian_shard", ""}, - {"", "default:obsidian_shard", ""}, + {"", "default:obsidian_shard", ""} } }) @@ -240,6 +245,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", { }, water_damage = 0, lava_damage = 8, + fire_damage = 0, light_damage = 0, animation = { speed_normal = 15, @@ -251,7 +257,7 @@ mobs:register_mob("mobs_monster:obsidian_flan", { run_start = 20, run_end = 28, punch_start = 20, - punch_end = 28, + punch_end = 28 } }) @@ -294,9 +300,11 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", { local radius = 1 local def = minetest.registered_nodes[node] + if def then - node = { name = node } + node = {name = node} end + if def and def.tiles and def.tiles[1] then texture = def.tiles[1] end @@ -323,7 +331,7 @@ mobs:register_arrow("mobs_monster:obsidian_arrow", { texture = texture, -- ^ only as fallback for clients without support for `node` parameter node = node, - collisiondetection = true, + collisiondetection = true }) minetest.set_node(pos, {name = "air"}) diff --git a/mods/mobs_monster/oerkki.lua b/mods/mobs_monster/oerkki.lua index 6e42c423..f706b43c 100644 --- a/mods/mobs_monster/oerkki.lua +++ b/mods/mobs_monster/oerkki.lua @@ -20,6 +20,7 @@ mobs:register_mob("mobs_monster:oerkki", { textures = { {"mobs_oerkki.png"}, {"mobs_oerkki2.png"}, + {"mobs_oerkki3.png"}, }, makes_footstep_sound = false, sounds = { diff --git a/mods/mobs_monster/readme.md b/mods/mobs_monster/readme.md index 800079c3..424777fb 100644 --- a/mods/mobs_monster/readme.md +++ b/mods/mobs_monster/readme.md @@ -27,7 +27,7 @@ Sand Monster Spiders -- Snowy spiders are found on higher cold areas, Tarantula's in higher jungle, Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. +- Snowy spiders are found on higher cold areas, spitting Tarantula's in higher jungle, small Cave spider below -20 and Mese spider near areas containing the ore and Crystal spiders only in Ethereal's crystal biomes. Some are docile during the daytime and will drop string when killed. Stone Monster @@ -35,6 +35,14 @@ Stone Monster Tree Monster -- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three. +- Found atop tree's at night time they drop down and look for food in the form of players and animals. Can drop saplings and sometimes an apple or three depending on type. Also note that green tree creepers exist and sometimes go boom. + +Land Guard + +- These huge monsters roam the land in cold, hot and temperate areas and don't like players wandering around their domain. + +Fire Spirit + +- Fire Spirits will not tolerate players roaming around their domain and will fiercely attack until their dying puff of smoke. Will drop it's spirit and some fire dust when using ethereal. Lucky Blocks: 11 diff --git a/mods/mobs_monster/sand_monster.lua b/mods/mobs_monster/sand_monster.lua index a46f5093..67595be3 100644 --- a/mods/mobs_monster/sand_monster.lua +++ b/mods/mobs_monster/sand_monster.lua @@ -39,6 +39,7 @@ mobs:register_mob("mobs_monster:sand_monster", { attack_type = "dogfight", pathfinding = true, --specific_attack = {"player", "mobs_npc:npc"}, + --ignore_invisibility = true, reach = 2, damage = 1, hp_min = 4, @@ -49,6 +50,7 @@ mobs:register_mob("mobs_monster:sand_monster", { mesh = "mobs_sand_monster.b3d", textures = { {"mobs_sand_monster.png"}, + {"mobs_sand_monster2.png"}, }, blood_texture = "default_desert_sand.png", makes_footstep_sound = true, diff --git a/mods/mobs_monster/spider.lua b/mods/mobs_monster/spider.lua index 9cb4ae12..4a74b3b1 100644 --- a/mods/mobs_monster/spider.lua +++ b/mods/mobs_monster/spider.lua @@ -11,6 +11,47 @@ local get_velocity = function(self) return (v.x * v.x + v.z * v.z) ^ 0.5 end + +local spider_types = { + + { nodes = {"default:snow", "default:snowblock", "default:dirt_with_snow"}, + skins = {"mobs_spider_snowy.png"}, + docile = true, + drops = nil + }, + + { nodes = {"default:dirt_with_rainforest_litter", "default:jungletree"}, + skins = {"mobs_spider_orange.png"}, + docile = true, + drops = nil, + shoot = true + }, + + { nodes = {"default:stone", "default:gravel"}, + skins = {"mobs_spider_grey.png"}, + docile = nil, + drops = nil, + small = true + }, + + { nodes = {"default:mese", "default:stone_with_mese"}, + skins = {"mobs_spider_mese.png"}, + docile = nil, + drops = { + {name = "farming:string", chance = 1, min = 0, max = 2}, + {name = "default:mese_crystal_fragment", chance = 2, min = 1, max = 4}} + }, + + { nodes = {"ethereal:crystal_dirt", "ethereal:crystal_spike"}, + skins = {"mobs_spider_crystal.png"}, + docile = true, + drops = { + {name = "farming:string", chance = 1, min = 0, max = 2}, + {name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}} + } +} + + -- Spider by AspireMint (CC-BY-SA 3.0 license) mobs:register_mob("mobs_monster:spider", { @@ -53,7 +94,7 @@ mobs:register_mob("mobs_monster:spider", { light_damage = 0, animation = { speed_normal = 15, - speed_run = 20,--15, + speed_run = 20, stand_start = 0, stand_end = 0, walk_start = 1, @@ -63,42 +104,46 @@ mobs:register_mob("mobs_monster:spider", { punch_start = 25, punch_end = 45, }, - -- what kind of spider are we spawning? + + -- check surrounding nodes and spawn a specific spider on_spawn = function(self) local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp - -- snowy spider - if minetest.find_node_near(pos, 1, - {"default:snow", "default:snowblock", "default:dirt_with_snow"}) then - self.base_texture = {"mobs_spider_snowy.png"} - self.object:set_properties({textures = self.base_texture}) - self.docile_by_day = true - -- tarantula - elseif minetest.find_node_near(pos, 1, - {"default:dirt_with_rainforest_litter", "default:jungletree"}) then - self.base_texture = {"mobs_spider_orange.png"} - self.object:set_properties({textures = self.base_texture}) - self.docile_by_day = true - -- grey spider - elseif minetest.find_node_near(pos, 1, - {"default:stone", "default:gravel"}) then - self.base_texture = {"mobs_spider_grey.png"} - self.object:set_properties({textures = self.base_texture}) - -- mese spider - elseif minetest.find_node_near(pos, 1, - {"default:mese", "default:stone_with_mese"}) then - self.base_texture = {"mobs_spider_mese.png"} - self.object:set_properties({textures = self.base_texture}) - elseif minetest.find_node_near(pos, 1, - {"ethereal:crystal_dirt", "ethereal:crystal_spike"}) then - self.base_texture = {"mobs_spider_crystal.png"} - self.object:set_properties({textures = self.base_texture}) - self.docile_by_day = true - self.drops = { - {name = "farming:string", chance = 1, min = 0, max = 2}, - {name = "ethereal:crystal_spike", chance = 15, min = 1, max = 2}, - } + for n = 1, #spider_types do + + tmp = spider_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + self.docile_by_day = tmp.docile + + if tmp.drops then + self.drops = tmp.drops + end + + if tmp.shoot then + self.attack_type = "dogshoot" + self.arrow = "mobs_monster:cobweb" + self.dogshoot_switch = 1 + self.dogshoot_count_max = 60 + self.dogshoot_count2_max = 20 + self.shoot_interval = 2 + self.shoot_offset = 2 + end + + if tmp.small then + self.object:set_properties({ + collisionbox = {-0.2, -0.2, -0.2, 0.2, 0, 0.2}, + visual_size = {x = 0.25, y = 0.25} + }) + end + + return true + end end return true -- run only once, false/nil runs every activation @@ -233,7 +278,7 @@ minetest.register_node(":mobs:cobweb", { walkable = false, groups = {snappy = 1, disable_jump = 1}, drop = "farming:string", - sounds = default.node_sound_leaves_defaults(), + sounds = default.node_sound_leaves_defaults() }) minetest.register_craft({ @@ -244,3 +289,48 @@ minetest.register_craft({ {"farming:string", "", "farming:string"}, } }) + + +local web_place = function(pos) + + local pos2 = minetest.find_node_near(pos, 1, {"air", "group:leaves"}, true) + + if pos2 then + minetest.swap_node(pos2, {name = "mobs:cobweb"}) + end +end + +mobs:register_arrow("mobs_monster:cobweb", { + visual = "sprite", + visual_size = {x = 1, y = 1}, + textures = {"mobs_cobweb.png"}, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + velocity = 15, + tail = 1, + tail_texture = "mobs_cobweb.png", + tail_size = 5, + glow = 2, + expire = 0.1, + + hit_player = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 2.0, + damage_groups = {fleshy = 3}, + }, nil) + + web_place(self.object:get_pos()) + end, + + hit_node = function(self, pos, node) + web_place(pos) + end, + + hit_mob = function(self, player) + + player:punch(self.object, 1.0, { + full_punch_interval = 2.0, + damage_groups = {fleshy = 3}, + }, nil) + end +}) diff --git a/mods/mobs_monster/stone_monster.lua b/mods/mobs_monster/stone_monster.lua index 34197d77..eb8d650a 100644 --- a/mods/mobs_monster/stone_monster.lua +++ b/mods/mobs_monster/stone_monster.lua @@ -1,6 +1,18 @@ local S = mobs.intllib +local stone_types = { + + { nodes = {"default:desert_stone"}, + skins = {"mobs_stone_monster3.png"}, + drops = { + {name = "default:desert_cobble", chance = 1, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:gold_lump", chance = 5, min = 0, max = 2} + } + } +} + -- Stone Monster by PilzAdam @@ -34,7 +46,7 @@ mobs:register_mob("mobs_monster:stone_monster", { drops = { {name = "default:cobble", chance = 1, min = 0, max = 2}, {name = "default:coal_lump", chance = 3, min = 0, max = 2}, - {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2} }, water_damage = 0, lava_damage = 1, @@ -59,6 +71,32 @@ mobs:register_mob("mobs_monster:stone_monster", { {"default:pick_mese", 6}, {"default:pick_diamond", 7}, }, + + -- check surrounding nodes and spawn a specific spider + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #stone_types do + + tmp = stone_types[n] + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + + if tmp.drops then + self.drops = tmp.drops + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end }) diff --git a/mods/mobs_monster/textures/mobs_dirt_monster2.png b/mods/mobs_monster/textures/mobs_dirt_monster2.png new file mode 100644 index 00000000..964698c9 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_dirt_monster2.png differ diff --git a/mods/mobs_monster/textures/mobs_dirt_monster3.png b/mods/mobs_monster/textures/mobs_dirt_monster3.png new file mode 100644 index 00000000..f11faee4 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_dirt_monster3.png differ diff --git a/mods/mobs_monster/textures/mobs_fire_spirit.png b/mods/mobs_monster/textures/mobs_fire_spirit.png new file mode 100644 index 00000000..4a31242b Binary files /dev/null and b/mods/mobs_monster/textures/mobs_fire_spirit.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard.png b/mods/mobs_monster/textures/mobs_land_guard.png new file mode 100644 index 00000000..53100abe Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard2.png b/mods/mobs_monster/textures/mobs_land_guard2.png new file mode 100644 index 00000000..cfa0630a Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard2.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard3.png b/mods/mobs_monster/textures/mobs_land_guard3.png new file mode 100644 index 00000000..69e86916 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard3.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard4.png b/mods/mobs_monster/textures/mobs_land_guard4.png new file mode 100644 index 00000000..295282fb Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard4.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard5.png b/mods/mobs_monster/textures/mobs_land_guard5.png new file mode 100644 index 00000000..3e0332d8 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard5.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard6.png b/mods/mobs_monster/textures/mobs_land_guard6.png new file mode 100644 index 00000000..4ccd83e4 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard6.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard7.png b/mods/mobs_monster/textures/mobs_land_guard7.png new file mode 100644 index 00000000..6a9d0fd8 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard7.png differ diff --git a/mods/mobs_monster/textures/mobs_land_guard8.png b/mods/mobs_monster/textures/mobs_land_guard8.png new file mode 100644 index 00000000..73c8322b Binary files /dev/null and b/mods/mobs_monster/textures/mobs_land_guard8.png differ diff --git a/mods/mobs_monster/textures/mobs_oerkki3.png b/mods/mobs_monster/textures/mobs_oerkki3.png new file mode 100644 index 00000000..8c24d5cd Binary files /dev/null and b/mods/mobs_monster/textures/mobs_oerkki3.png differ diff --git a/mods/mobs_monster/textures/mobs_sand_monster2.png b/mods/mobs_monster/textures/mobs_sand_monster2.png new file mode 100644 index 00000000..5773943d Binary files /dev/null and b/mods/mobs_monster/textures/mobs_sand_monster2.png differ diff --git a/mods/mobs_monster/textures/mobs_stone_monster2.png b/mods/mobs_monster/textures/mobs_stone_monster2.png index 70bfc6ec..9c76b833 100644 Binary files a/mods/mobs_monster/textures/mobs_stone_monster2.png and b/mods/mobs_monster/textures/mobs_stone_monster2.png differ diff --git a/mods/mobs_monster/textures/mobs_stone_monster3.png b/mods/mobs_monster/textures/mobs_stone_monster3.png new file mode 100644 index 00000000..70bfc6ec Binary files /dev/null and b/mods/mobs_monster/textures/mobs_stone_monster3.png differ diff --git a/mods/mobs_monster/textures/mobs_tree_monster3.png b/mods/mobs_monster/textures/mobs_tree_monster3.png new file mode 100644 index 00000000..9e18fb2e Binary files /dev/null and b/mods/mobs_monster/textures/mobs_tree_monster3.png differ diff --git a/mods/mobs_monster/textures/mobs_tree_monster4.png b/mods/mobs_monster/textures/mobs_tree_monster4.png new file mode 100644 index 00000000..6299e32d Binary files /dev/null and b/mods/mobs_monster/textures/mobs_tree_monster4.png differ diff --git a/mods/mobs_monster/textures/mobs_tree_monster5.png b/mods/mobs_monster/textures/mobs_tree_monster5.png new file mode 100644 index 00000000..67cd508a Binary files /dev/null and b/mods/mobs_monster/textures/mobs_tree_monster5.png differ diff --git a/mods/mobs_monster/textures/mobs_tree_monster6.png b/mods/mobs_monster/textures/mobs_tree_monster6.png new file mode 100755 index 00000000..6e884a61 Binary files /dev/null and b/mods/mobs_monster/textures/mobs_tree_monster6.png differ diff --git a/mods/mobs_monster/textures/zmobs_mese_monster.png b/mods/mobs_monster/textures/zmobs_mese_monster.png index 55f662a7..3d3812dd 100644 Binary files a/mods/mobs_monster/textures/zmobs_mese_monster.png and b/mods/mobs_monster/textures/zmobs_mese_monster.png differ diff --git a/mods/mobs_monster/textures/zmobs_mese_monster_old.png b/mods/mobs_monster/textures/zmobs_mese_monster_old.png new file mode 100644 index 00000000..55f662a7 Binary files /dev/null and b/mods/mobs_monster/textures/zmobs_mese_monster_old.png differ diff --git a/mods/mobs_monster/tree_monster.lua b/mods/mobs_monster/tree_monster.lua index c1abbeaf..4276f025 100644 --- a/mods/mobs_monster/tree_monster.lua +++ b/mods/mobs_monster/tree_monster.lua @@ -1,6 +1,49 @@ local S = mobs.intllib +local tree_types = { + + { nodes = {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}, + skins = {"mobs_tree_monster5.png"}, + drops = { + {name = "default:stick", chance = 1, min = 1, max = 3}, + {name = "ethereal:sakura_leaves", chance = 1, min = 1, max = 2}, + {name = "ethereal:sakura_trunk", chance = 2, min = 1, max = 2}, + {name = "ethereal:sakura_tree_sapling", chance = 2, min = 0, max = 2}, + } + }, + + { nodes = {"ethereal:frost_leaves"}, + skins = {"mobs_tree_monster3.png"}, + drops = { + {name = "default:stick", chance = 1, min = 1, max = 3}, + {name = "ethereal:frost_leaves", chance = 1, min = 1, max = 2}, + {name = "ethereal:frost_tree", chance = 2, min = 1, max = 2}, + {name = "ethereal:crystal_spike", chance = 4, min = 0, max = 2}, + } + }, + + { nodes = {"ethereal:yellowleaves"}, + skins = {"mobs_tree_monster4.png"}, + drops = { + {name = "default:stick", chance = 1, min = 1, max = 3}, + {name = "ethereal:yellowleaves", chance = 1, min = 1, max = 2}, + {name = "ethereal:yellow_tree_sapling", chance = 2, min = 0, max = 2}, + {name = "ethereal:golden_apple", chance = 3, min = 0, max = 2}, + } + }, + + { nodes = {"default:acacia_bush_leaves"}, + skins = {"mobs_tree_monster6.png"}, + drops = { + {name = "tnt:gunpowder", chance = 1, min = 0, max = 2}, + {name = "default:iron_lump", chance = 5, min = 0, max = 2}, + {name = "default:coal_lump", chance = 3, min = 0, max = 3} + }, + explode = true + }, +} + -- Tree Monster (or Tree Gollum) by PilzAdam @@ -12,8 +55,8 @@ mobs:register_mob("mobs_monster:tree_monster", { --specific_attack = {"player", "mobs_animal:chicken"}, reach = 2, damage = 2, - hp_min = 7, - hp_max = 33, + hp_min = 20, + hp_max = 40, armor = 100, collisionbox = {-0.4, -1, -0.4, 0.4, 0.8, 0.4}, visual = "mesh", @@ -64,13 +107,60 @@ mobs:register_mob("mobs_monster:tree_monster", { punch_start = 48, punch_end = 62, }, + + -- check surrounding nodes and spawn a specific tree monster + on_spawn = function(self) + + local pos = self.object:get_pos() ; pos.y = pos.y - 1 + local tmp + + for n = 1, #tree_types do + + tmp = tree_types[n] + + if tmp.explode and math.random(2) == 1 then return true end + + if minetest.find_node_near(pos, 1, tmp.nodes) then + + self.base_texture = tmp.skins + self.object:set_properties({textures = tmp.skins}) + + if tmp.drops then + self.drops = tmp.drops + end + + if tmp.explode then + self.attack_type = "explode" + self.explosion_radius = 3 + self.explosion_timer = 3 + self.damage = 21 + self.reach = 3 + self.fear_height = 4 + self.water_damage = 2 + self.lava_damage = 15 + self.light_damage = 0 + self.makes_footstep_sound = false + self.runaway_from = {"mobs_animal:kitten"} + self.sounds = { + attack = "tnt_ignite", + explode = "tnt_explode", + fuse = "tnt_ignite" + } + end + + return true + end + end + + return true -- run only once, false/nil runs every activation + end }) if not mobs.custom_spawn_monster then mobs:spawn({ name = "mobs_monster:tree_monster", - nodes = {"default:leaves", "default:jungleleaves"}, + nodes = {"group:leaves"}, --{"default:leaves", "default:jungleleaves"}, max_light = 7, chance = 7000, min_height = 0, diff --git a/mods/mobs_npc/igor.lua b/mods/mobs_npc/igor.lua index 7bf2a6ed..053bb151 100644 --- a/mods/mobs_npc/igor.lua +++ b/mods/mobs_npc/igor.lua @@ -4,8 +4,12 @@ local S = mobs.intllib -- Igor by TenPlus1 mobs.igor_drops = { - "vessels:glass_bottle", "mobs:meat_raw", "default:sword_steel", - "farming:bread", "bucket:bucket_water" + "vessels:glass_bottle", "mobs:meat_raw", {"default:sword_steel", 2}, + "farming:bread", {"bucket:bucket_water", 2}, "flowers:mushroom_red", + "default:jungletree", {"fire:flint_and_steel", 3}, "mobs:leather", + "default:acacia_sapling", {"fireflies:bug_net", 3}, "default:clay_lump", + "default:ice", "default:coral_brown", "default:iron_lump", + "default:obsidian_shard", "default:mossycobble", {"default:obsidian", 2} } mobs:register_mob("mobs_npc:igor", { @@ -31,7 +35,7 @@ mobs:register_mob("mobs_npc:igor", { {"mobs_igor5.png"}, {"mobs_igor6.png"}, {"mobs_igor7.png"}, - {"mobs_igor8.png"}, + {"mobs_igor8.png"} }, makes_footstep_sound = true, sounds = {}, @@ -42,7 +46,7 @@ mobs:register_mob("mobs_npc:igor", { jump = true, drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 2}, - {name = "default:gold_lump", chance = 3, min = 1, max = 1}, + {name = "default:gold_lump", chance = 3, min = 1, max = 1} }, water_damage = 1, lava_damage = 3, @@ -51,7 +55,6 @@ mobs:register_mob("mobs_npc:igor", { view_range = 15, owner = "", order = "follow", - -- model animation animation = { speed_normal = 30, speed_run = 30, @@ -62,8 +65,9 @@ mobs:register_mob("mobs_npc:igor", { run_start = 168, run_end = 187, punch_start = 200, - punch_end = 219, + punch_end = 219 }, + -- right clicking with raw meat will give Igor more health on_rightclick = function(self, clicker) @@ -84,40 +88,60 @@ mobs:register_mob("mobs_npc:igor", { end local pos = self.object:get_pos() - - pos.y = pos.y + 0.5 - local drops = self.igor_drops or mobs.igor_drops + local drop = drops[math.random(#drops)] + local chance = 1 - minetest.add_item(pos, { - name = drops[math.random(1, #drops)] - }) + if type(drop) == "table" then + chance = drop[2] + drop = drop[1] + end - minetest.chat_send_player(name, S("NPC dropped you an item for gold!")) + if not minetest.registered_items[drop] + or math.random(chance) > 1 then + drop = "default:coal_lump" + end + + local obj = minetest.add_item(pos, {name = drop}) + local dir = clicker:get_look_dir() + + obj:set_velocity({x = -dir.x, y = 1.5, z = -dir.z}) + + --minetest.chat_send_player(name, S("NPC dropped you an item for gold!")) return end - -- if owner switch between follow and stand + -- by right-clicking owner can switch npc between follow, wander and stand if self.owner and self.owner == name then if self.order == "follow" then - self.attack = nil + self.order = "wander" + + minetest.chat_send_player(name, S("NPC will wander.")) + + elseif self.order == "wander" then + self.order = "stand" self.state = "stand" + self.attack = nil + self:set_animation("stand") self:set_velocity(0) minetest.chat_send_player(name, S("NPC stands still.")) - else + + elseif self.order == "stand" then + self.order = "follow" + minetest.chat_send_player(name, S("NPC will follow you.")) end end - end, + end }) --- register spawn egg + mobs:register_egg("mobs_npc:igor", S("Igor"), "mobs_meat_raw.png", 1) -- compatibility diff --git a/mods/mobs_npc/lucky_block.lua b/mods/mobs_npc/lucky_block.lua index 98735619..93db875e 100644 --- a/mods/mobs_npc/lucky_block.lua +++ b/mods/mobs_npc/lucky_block.lua @@ -5,7 +5,6 @@ if minetest.get_modpath("lucky_block") then {"spw", "mobs:npc", 1, true, true}, {"spw", "mobs:igor", 1, true, true, 5, "Igor"}, {"spw", "mobs:trader", 1, false, false}, - {"lig", "fire:permanent_flame"}, + {"lig", "fire:permanent_flame"} }) - end diff --git a/mods/mobs_npc/npc.lua b/mods/mobs_npc/npc.lua index c2c8d011..891d5e75 100644 --- a/mods/mobs_npc/npc.lua +++ b/mods/mobs_npc/npc.lua @@ -4,8 +4,12 @@ local S = mobs.intllib -- Npc by TenPlus1 mobs.npc_drops = { - "default:pick_steel", "mobs:meat", "default:sword_steel", - "default:shovel_steel", "farming:bread", "bucket:bucket_water" + {"default:pick_steel", 2}, "mobs:meat", {"default:sword_steel", 2}, + {"default:shovel_steel", 2}, "farming:bread", "bucket:bucket_water", + "default:sapling", "default:tree", "mobs:leather", "default:coral_orange", + {"default:mese_crystal_fragment", 3}, "default:clay", {"default:sign_wall", 2}, + "default:ladder", "default:copper_lump", "default:blueberries", + "default:aspen_sapling", "default:permafrost_with_moss" } mobs:register_mob("mobs_npc:npc", { @@ -27,9 +31,11 @@ mobs:register_mob("mobs_npc:npc", { textures = { {"mobs_npc.png"}, {"mobs_npc2.png"}, -- female by nuttmeg20 + {"mobs_npc3.png"}, -- male by swagman181818 + {"mobs_npc4.png"} -- female by Sapphire16 }, child_texture = { - {"mobs_npc_baby.png"}, -- derpy baby by AmirDerAssassine + {"mobs_npc_baby.png"} -- derpy baby by AmirDerAssassine }, makes_footstep_sound = true, sounds = {}, @@ -39,7 +45,7 @@ mobs:register_mob("mobs_npc:npc", { drops = { {name = "default:wood", chance = 1, min = 1, max = 3}, {name = "default:apple", chance = 2, min = 1, max = 2}, - {name = "default:axe_stone", chance = 5, min = 1, max = 1}, + {name = "default:axe_stone", chance = 5, min = 1, max = 1} }, water_damage = 0, lava_damage = 2, @@ -59,7 +65,7 @@ mobs:register_mob("mobs_npc:npc", { run_start = 168, run_end = 187, punch_start = 200, - punch_end = 219, + punch_end = 219 }, on_rightclick = function(self, clicker) @@ -85,39 +91,58 @@ mobs:register_mob("mobs_npc:npc", { end local pos = self.object:get_pos() - - pos.y = pos.y + 0.5 - local drops = self.npc_drops or mobs.npc_drops + local drop = drops[math.random(#drops)] + local chance = 1 - minetest.add_item(pos, { - name = drops[math.random(1, #drops)] - }) + if type(drop) == "table" then + chance = drop[2] + drop = drop[1] + end - minetest.chat_send_player(name, S("NPC dropped you an item for gold!")) + if not minetest.registered_items[drop] + or math.random(chance) > 1 then + drop = "default:clay_lump" + end + + local obj = minetest.add_item(pos, {name = drop}) + local dir = clicker:get_look_dir() + + obj:set_velocity({x = -dir.x, y = 1.5, z = -dir.z}) + + --minetest.chat_send_player(name, S("NPC dropped you an item for gold!")) return end - -- by right-clicking owner can switch npc between follow and stand + -- by right-clicking owner can switch npc between follow, wander and stand if self.owner and self.owner == name then if self.order == "follow" then - self.attack = nil + self.order = "wander" + + minetest.chat_send_player(name, S("NPC will wander.")) + + elseif self.order == "wander" then + self.order = "stand" self.state = "stand" + self.attack = nil + self:set_animation("stand") self:set_velocity(0) minetest.chat_send_player(name, S("NPC stands still.")) - else + + elseif self.order == "stand" then + self.order = "follow" minetest.chat_send_player(name, S("NPC will follow you.")) end end - end, + end }) if not mobs.custom_spawn_npc then @@ -129,7 +154,7 @@ mobs:spawn({ chance = 10000, active_object_count = 1, min_height = 0, - day_toggle = true, + day_toggle = true }) end diff --git a/mods/mobs_npc/textures/mobs_npc3.png b/mods/mobs_npc/textures/mobs_npc3.png new file mode 100644 index 00000000..cfe6c02e Binary files /dev/null and b/mods/mobs_npc/textures/mobs_npc3.png differ diff --git a/mods/mobs_npc/textures/mobs_npc4.png b/mods/mobs_npc/textures/mobs_npc4.png new file mode 100644 index 00000000..e0e89a5c Binary files /dev/null and b/mods/mobs_npc/textures/mobs_npc4.png differ diff --git a/mods/mobs_redo/api.lua b/mods/mobs_redo/api.lua index c1ea9693..eb697ea1 100644 --- a/mods/mobs_redo/api.lua +++ b/mods/mobs_redo/api.lua @@ -8,12 +8,12 @@ local use_cmi = minetest.global_exists("cmi") mobs = { mod = "redo", - version = "20210206", + version = "20210722", intllib = S, invis = minetest.global_exists("invisibility") and invisibility or {} } --- localize math functions +-- localize common functions local pi = math.pi local square = math.sqrt local sin = math.sin @@ -28,8 +28,7 @@ local rad = math.rad local atann = math.atan local atan = function(x) if not x or x ~= x then - --error("atan bassed NaN") - return 0 + return 0 -- NaN else return atann(x) end @@ -57,6 +56,7 @@ local disable_blood = settings:get_bool("mobs_disable_blood") local mobs_drop_items = settings:get_bool("mobs_drop_items") ~= false local mobs_griefing = settings:get_bool("mobs_griefing") ~= false local spawn_protected = settings:get_bool("mobs_spawn_protected") ~= false +local spawn_monster_protected = settings:get_bool("mobs_spawn_monster_protected") ~= false local remove_far = settings:get_bool("remove_far_mobs") ~= false local mob_area_spawn = settings:get_bool("mob_area_spawn") local difficulty = tonumber(settings:get("mob_difficulty")) or 1.0 @@ -66,9 +66,9 @@ local mob_nospawn_range = tonumber(settings:get("mob_nospawn_range") or 12) local active_limit = tonumber(settings:get("mob_active_limit") or 0) local mob_chance_multiplier = tonumber(settings:get("mob_chance_multiplier") or 1) local peaceful_player_enabled = settings:get_bool("enable_peaceful_player") +local mob_smooth_rotate = settings:get_bool("mob_smooth_rotate") ~= false local active_mobs = 0 - -- Peaceful mode message so players will know there are no monsters if peaceful_only then minetest.register_on_joinplayer(function(player) @@ -83,7 +83,7 @@ local aoc_range = tonumber(settings:get("active_block_range")) * 16 -- pathfinding settings local enable_pathfinding = true local stuck_timeout = 3 -- how long before stuck mod starts searching -local stuck_path_timeout = 10 -- how long will mob follow path before giving up +local stuck_path_timeout = 5 -- how long will mob follow path before giving up -- default nodes local node_fire = "fire:basic_flame" @@ -112,7 +112,8 @@ local mob_class = { light_damage_min = 14, light_damage_max = 15, water_damage = 0, - lava_damage = 0, + lava_damage = 4, + fire_damage = 4, air_damage = 0, suffocation = 2, fall_damage = 1, @@ -164,6 +165,7 @@ local mob_class = { local mob_class_meta = {__index = mob_class} + -- play sound function mob_class:mob_sound(sound) @@ -222,10 +224,7 @@ function mob_class:collision() for _,object in ipairs(minetest.get_objects_inside_radius(pos, width)) do - if object:is_player() - or (object:get_luaentity() - and object:get_luaentity()._cmi_is_mob == true - and object ~= self.object) then + if object:is_player() then local pos2 = object:get_pos() local vec = {x = pos.x - pos2.x, z = pos.z - pos2.z} @@ -251,9 +250,17 @@ local check_for = function(look_for, look_inside) for _, str in pairs(look_inside) do if str == look_for then - return true end + + if str:find("group:") then + + local group = str:split(":")[2] + + if minetest.get_item_group(look_for, group) ~= 0 then + return true + end + end end end @@ -267,7 +274,9 @@ function mob_class:set_velocity(v) -- halt mob if it has been ordered to stay if self.order == "stand" then - self.object:set_velocity({x = 0, y = 0, z = 0}) + local vel = self.object:get_velocity() or {y = 0} + + self.object:set_velocity({x = 0, y = vel.y, z = 0}) return end @@ -329,10 +338,12 @@ function mob_class:set_yaw(yaw, delay) yaw = 0 end - delay = delay or 0 + delay = mob_smooth_rotate and (delay or 0) or 0 if delay == 0 then + self.object:set_yaw(yaw) + return yaw end @@ -394,7 +405,6 @@ function mob_class:set_animation(anim, force) 0, self.animation[anim .. "_loop"] ~= false) end --- above function exported for mount.lua function mobs:set_animation(entity, anim) entity.set_animation(entity, anim) end @@ -581,7 +591,7 @@ function mob_class:attempt_flight_correction(override) local escape_direction = vdirection(pos, escape_target) self.object:set_velocity( - vmultiply(escape_direction, 1)) --self.run_velocity)) + vmultiply(escape_direction, 1)) return true end @@ -633,7 +643,7 @@ function mobs:yaw_to_pos(self, target, rot) end --- if stay near set then check periodically for nodes and turn towards them +-- if stay near set then periodically check for nodes and turn towards them function mob_class:do_stay_near() if not self.stay_near then return false end @@ -730,9 +740,15 @@ function mob_class:update_tag() col = "#FF0000" end + -- build infotext + self.infotext = "Health: " .. self.health .. " / " .. self.hp_max + .. "\n" .. "Owner: " .. self.owner + + -- set changes self.object:set_properties({ nametag = self.nametag, - nametag_color = col + nametag_color = col, + infotext = self.infotext }) end @@ -780,10 +796,7 @@ function mob_class:item_drop() end -- only drop rare items (drops.min = 0) if killed by player - if death_by_player then - obj = minetest.add_item(pos, ItemStack(item .. " " .. num)) - - elseif self.drops[n].min ~= 0 then + if death_by_player or self.drops[n].min ~= 0 then obj = minetest.add_item(pos, ItemStack(item .. " " .. num)) end @@ -858,18 +871,17 @@ function mob_class:check_for_death(cmi_cause) end -- backup nametag so we can show health stats - if not self.nametag2 then - self.nametag2 = self.nametag or "" - end +-- if not self.nametag2 then +-- self.nametag2 = self.nametag or "" +-- end - if show_health - and (cmi_cause and cmi_cause.type == "punch") then - - self.htimer = 2 - self.nametag = "♥ " .. self.health .. " / " .. self.hp_max +-- if show_health +-- and (cmi_cause and cmi_cause.type == "punch") then +-- self.htimer = 2 +-- self.nametag = "♥ " .. self.health .. " / " .. self.hp_max self:update_tag() - end +-- end return false end @@ -974,7 +986,12 @@ local is_node_dangerous = function(self, nodename) end if self.lava_damage > 0 - and minetest.get_item_group(nodename, "igniter") ~= 0 then + and minetest.get_item_group(nodename, "lava") ~= 0 then + return true + end + + if self.fire_damage > 0 + and minetest.get_item_group(nodename, "fire") ~= 0 then return true end @@ -1034,13 +1051,13 @@ function mob_class:do_env_damage() end -- reset nametag after showing health stats - if self.htimer < 1 and self.nametag2 then +-- if self.htimer < 1 and self.nametag2 then - self.nametag = self.nametag2 - self.nametag2 = nil +-- self.nametag = self.nametag2 +-- self.nametag2 = nil self:update_tag() - end +-- end local pos = self.object:get_pos() ; if not pos then return end @@ -1055,46 +1072,57 @@ function mob_class:do_env_damage() end -- particle appears at random mob height - pos.y = pos.y + random(self.collisionbox[2], self.collisionbox[5]) + local py = { + x = pos.x, + y = pos.y + random(self.collisionbox[2], self.collisionbox[5]), + z = pos.z + } local nodef = minetest.registered_nodes[self.standing_in] -- water - if self.water_damage and nodef.groups.water then + if self.water_damage ~= 0 and nodef.groups.water then - if self.water_damage ~= 0 then + self.health = self.health - self.water_damage - self.health = self.health - self.water_damage + effect(py, 5, "bubble.png", nil, nil, 1, nil) - effect(pos, 5, "bubble.png", nil, nil, 1, nil) - - if self:check_for_death({type = "environment", - pos = pos, node = self.standing_in}) then - return true - end + if self:check_for_death({type = "environment", + pos = pos, node = self.standing_in}) then + return true end - -- ignition source (fire or lava) - elseif self.lava_damage and nodef.groups.igniter then + -- lava damage + elseif self.lava_damage ~= 0 and nodef.groups.lava then - if self.lava_damage ~= 0 then + self.health = self.health - self.lava_damage - self.health = self.health - self.lava_damage + effect(py, 15, "fire_basic_flame.png", 1, 5, 1, 0.2, 15, true) - effect(pos, 15, "fire_basic_flame.png", 1, 5, 1, 0.2, 15, true) - - if self:check_for_death({type = "environment", pos = pos, - node = self.standing_in, hot = true}) then - return true - end + if self:check_for_death({type = "environment", pos = pos, + node = self.standing_in, hot = true}) then + return true end - -- damage_per_second node check - elseif nodef.damage_per_second ~= 0 then + -- fire damage + elseif self.fire_damage ~= 0 and nodef.groups.fire then + + self.health = self.health - self.fire_damage + + effect(py, 15, "fire_basic_flame.png", 1, 5, 1, 0.2, 15, true) + + if self:check_for_death({type = "environment", pos = pos, + node = self.standing_in, hot = true}) then + return true + end + + -- damage_per_second node check (not fire and lava) + elseif nodef.damage_per_second ~= 0 + and nodef.groups.lava == nil and nodef.groups.fire == nil then self.health = self.health - nodef.damage_per_second - effect(pos, 5, "tnt_smoke.png") + effect(py, 5, "tnt_smoke.png") if self:check_for_death({type = "environment", pos = pos, node = self.standing_in}) then @@ -1107,7 +1135,7 @@ function mob_class:do_env_damage() self.health = self.health - self.air_damage - effect(pos, 3, "bubble.png", 1, 1, 1, 0.2) + effect(py, 3, "bubble.png", 1, 1, 1, 0.2) if self:check_for_death({type = "environment", pos = pos, node = self.standing_in}) then @@ -1125,7 +1153,7 @@ function mob_class:do_env_damage() self.health = self.health - self.light_damage - effect(pos, 5, "tnt_smoke.png") + effect(py, 5, "tnt_smoke.png") if self:check_for_death({type = "light"}) then return true @@ -1210,58 +1238,58 @@ function mob_class:do_jump() local blocked = minetest.registered_nodes[nodt.name].walkable ---print("standing on:", self.standing_on, pos.y - 0.25) ---print("in front:", nod.name, pos.y + 0.5) ---print("in front above:", nodt.name, pos.y + 1.5) + -- are we facing a fence or wall + if nod.name:find("fence") or nod.name:find("gate") or nod.name:find("wall") then + self.facing_fence = true + end +--[[ +print("on: " .. self.standing_on + .. ", front: " .. nod.name + .. ", front above: " .. nodt.name + .. ", blocked: " .. (blocked and "yes" or "no") + .. ", fence: " .. (self.facing_fence and "yes" or "no") +) +]] + -- jump if standing on solid node (not snow) and not blocked + if (self.walk_chance == 0 or minetest.registered_items[nod.name].walkable) + and not blocked and not self.facing_fence and nod.name ~= node_snow then - -- jump if standing on solid node (not snow) and not blocked above - if (self.walk_chance == 0 - or minetest.registered_items[nod.name].walkable) - and not blocked - and nod.name ~= node_snow then + local v = self.object:get_velocity() - if not nod.name:find("fence") - and not nod.name:find("gate") - and not nod.name:find("wall") then + v.y = self.jump_height - local v = self.object:get_velocity() + self:set_animation("jump") -- only when defined - v.y = self.jump_height + self.object:set_velocity(v) - self:set_animation("jump") -- only when defined + -- when in air move forward + minetest.after(0.3, function(self, v) - self.object:set_velocity(v) + if self.object:get_luaentity() then - -- when in air move forward - minetest.after(0.3, function(self, v) - - if self.object:get_luaentity() then - - self.object:set_acceleration({ - x = v.x * 2, - y = 0, - z = v.z * 2 - }) - end - end, self, v) - - if self:get_velocity() > 0 then - self:mob_sound(self.sounds.jump) + self.object:set_acceleration({ + x = v.x * 2, + y = 0, + z = v.z * 2 + }) end + end, self, v) - return true - else - self.facing_fence = true + if self:get_velocity() > 0 then + self:mob_sound(self.sounds.jump) end + + self.jump_count = 0 + + return true end - -- if blocked against a block/wall for 5 counts then turn - if not self.following - and (self.facing_fence or blocked) then + -- if blocked for 3 counts then turn + if not self.following and (self.facing_fence or blocked) then self.jump_count = (self.jump_count or 0) + 1 - if self.jump_count > 4 then + if self.jump_count > 2 then local yaw = self.object:get_yaw() or 0 local turn = random(0, 2) + 1.35 @@ -1304,10 +1332,19 @@ local entity_physics = function(pos, radius) end +-- can mob see player +local is_invisible = function(self, player_name) + + if mobs.invis[player_name] and not self.ignore_invisibility then + return true + end +end + + -- should mob follow what I'm holding ? function mob_class:follow_holding(clicker) - if mobs.invis[clicker:get_player_name()] then + if is_invisible(self, clicker:get_player_name()) then return false end @@ -1323,7 +1360,7 @@ end -- Thanks Wuzzy for the following editable settings local HORNY_TIME = 30 -local HORNY_AGAIN_TIME = 300 +local HORNY_AGAIN_TIME = 60 * 5 -- 5 minutes local CHILD_GROW_TIME = 60 * 20 -- 20 minutes -- find two animals of same type and breed if nearby and horny @@ -1351,16 +1388,15 @@ function mob_class:breed() if self.on_grown then self.on_grown(self) else - -- jump when fully grown so as not to fall into ground --- self.object:set_velocity({ --- x = 0, --- y = self.jump_height, --- z = 0 --- }) local pos = self.object:get_pos() ; if not pos then return end local ent = self.object:get_luaentity() + pos.y = pos.y + (ent.collisionbox[2] * -1) - 0.4 + self.object:set_pos(pos) + + -- jump slightly when fully grown so as not to fall into ground + self.object:set_velocity({x = 0, y = 0.5, z = 0 }) end end @@ -1583,7 +1619,43 @@ end local los_switcher = false local height_switcher = false +local can_dig_drop = function(pos) + if minetest.is_protected(pos, "") then + return false + end + + local node = node_ok(pos, "air").name + local ndef = minetest.registered_nodes[node] + + if node ~= "ignore" + and ndef + and ndef.drawtype ~= "airlike" + and not ndef.groups.level + and not ndef.groups.unbreakable + and not ndef.groups.liquid then + + local drops = minetest.get_node_drops(node) + + for _, item in ipairs(drops) do + + minetest.add_item({ + x = pos.x - 0.5 + random(), + y = pos.y - 0.5 + random(), + z = pos.z - 0.5 + random() + }, item) + end + + minetest.remove_node(pos) + + return true + end + + return false +end + + +local pathfinder_mod = minetest.get_modpath("pathfinder") -- path finding and smart mob routine by rnd, -- line_of_sight and other edits by Elkien3 function mob_class:smart_mobs(s, p, dist, dtime) @@ -1712,13 +1784,18 @@ function mob_class:smart_mobs(s, p, dist, dtime) jumpheight = 1 end - self.path.way = minetest.find_path(s, p1, 16, jumpheight, - dropheight, "Dijkstra") - + if pathfinder_mod then + self.path.way = pathfinder.find_path(s, p1, self, dtime) + else + self.path.way = minetest.find_path(s, p1, 16, jumpheight, + dropheight, "Dijkstra") + end --[[ -- show path using particles if self.path.way and #self.path.way > 0 then + print("-- path length:" .. tonumber(#self.path.way)) + for _,pos in pairs(self.path.way) do minetest.add_particle({ pos = pos, @@ -1748,8 +1825,8 @@ function mob_class:smart_mobs(s, p, dist, dtime) -- lets make way by digging/building if not accessible if self.pathfinding == 2 and mobs_griefing then - -- is player higher than mob? - if s.y < p1.y then + -- is player more than 1 block higher than mob? + if p1.y > (s.y + 1) then -- build upwards if not minetest.is_protected(s, "") then @@ -1757,8 +1834,7 @@ function mob_class:smart_mobs(s, p, dist, dtime) local ndef1 = minetest.registered_nodes[self.standing_in] if ndef1 and (ndef1.buildable_to or ndef1.groups.liquid) then - - minetest.set_node(s, {name = mobs.fallback_node}) + minetest.set_node(s, {name = mobs.fallback_node}) end end @@ -1768,27 +1844,19 @@ function mob_class:smart_mobs(s, p, dist, dtime) s.y = s.y + sheight -- remove one block above to make room to jump - if not minetest.is_protected(s, "") then - - local node1 = node_ok(s, "air").name - local ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.set_node(s, {name = "air"}) - minetest.add_item(s, ItemStack(node1)) - - end - end + can_dig_drop(s) s.y = s.y - sheight self.object:set_pos({x = s.x, y = s.y + 2, z = s.z}) + -- is player more than 1 block lower than mob + elseif p1.y < (s.y - 1) then + + -- dig down + s.y = s.y - self.collisionbox[4] - 0.2 + + can_dig_drop(s) + else -- dig 2 blocks to make door toward player direction local yaw1 = self.object:get_yaw() + pi / 2 @@ -1798,37 +1866,12 @@ function mob_class:smart_mobs(s, p, dist, dtime) z = s.z + sin(yaw1) } - if not minetest.is_protected(p1, "") then + -- dig bottom node first incase of door + can_dig_drop(p1) - local node1 = node_ok(p1, "air").name - local ndef1 = minetest.registered_nodes[node1] + p1.y = p1.y + 1 - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - - p1.y = p1.y + 1 - node1 = node_ok(p1, "air").name - ndef1 = minetest.registered_nodes[node1] - - if node1 ~= "air" - and node1 ~= "ignore" - and ndef1 - and not ndef1.groups.level - and not ndef1.groups.unbreakable - and not ndef1.groups.liquid then - - minetest.add_item(p1, ItemStack(node1)) - minetest.set_node(p1, {name = "air"}) - end - end + can_dig_drop(p1) end end @@ -1898,7 +1941,7 @@ function mob_class:general_attack() if not damage_enabled or self.attack_players == false or (self.owner and self.type ~= "monster") - or mobs.invis[objs[n]:get_player_name()] + or is_invisible(self, objs[n]:get_player_name()) or (self.specific_attack and not check_for("player", self.specific_attack)) then objs[n] = nil @@ -1977,7 +2020,7 @@ function mob_class:do_runaway_from() pname = objs[n]:get_player_name() - if mobs.invis[pname] + if is_invisible(self, pname) or self.owner == pname then name = "" @@ -2042,7 +2085,7 @@ function mob_class:follow_flop() for n = 1, #players do if get_distance(players[n]:get_pos(), s) < self.view_range - and not mobs.invis[ players[n]:get_player_name() ] then + and not is_invisible(self, players[n]:get_player_name()) then self.following = players[n] @@ -2340,7 +2383,7 @@ function mob_class:do_states(dtime) or not self.attack:get_pos() or self.attack:get_hp() <= 0 or (self.attack:is_player() - and mobs.invis[ self.attack:get_player_name() ]) then + and is_invisible(self, self.attack:get_player_name())) then --print(" ** stop attacking **", dist, self.view_range) @@ -2560,7 +2603,10 @@ function mob_class:do_states(dtime) self:smart_mobs(s, p, dist, dtime) end - if self.at_cliff then + -- distance padding to stop spinning mob + local pad = abs(p.x - s.x) + abs(p.z - s.z) + + if self.at_cliff or pad < 0.2 then self:set_velocity(0) self:set_animation("stand") @@ -2578,7 +2624,6 @@ function mob_class:do_states(dtime) self:set_animation("walk") end end - else -- rnd: if inside reach range self.path.stuck = false @@ -2614,9 +2659,11 @@ function mob_class:do_states(dtime) self.attack = attached end + local dgroup = self.damage_group or "fleshy" + self.attack:punch(self.object, 1.0, { full_punch_interval = 1.0, - damage_groups = {fleshy = self.damage} + damage_groups = {[dgroup] = self.damage} }, nil) end end @@ -2688,34 +2735,17 @@ function mob_class:falling(pos) -- sanity check if not v then return end - local fall_speed = -10 -- gravity - - -- don't exceed mob fall speed - if v.y < self.fall_speed then - fall_speed = self.fall_speed - end + local fall_speed = self.fall_speed -- in water then use liquid viscosity for float/sink speed - if (self.standing_in - and minetest.registered_nodes[self.standing_in].groups.liquid) - or (self.standing_on - and minetest.registered_nodes[self.standing_in].groups.liquid) then + if self.floats == 1 and self.standing_in + and minetest.registered_nodes[self.standing_in].groups.liquid then local visc = min( - minetest.registered_nodes[self.standing_in].liquid_viscosity, 7) + minetest.registered_nodes[self.standing_in].liquid_viscosity, 7) + 1 - if self.floats == 1 then - - -- floating up - if visc > 0 then - fall_speed = max(1, v.y) / (visc + 1) - end - else - -- sinking down - if visc > 0 then - fall_speed = -(max(1, v.y) / (visc + 1)) - end - end + self.object:set_velocity({x = v.x, y = 0.6, z = v.z}) + fall_speed = -1.2 / visc else -- fall damage onto solid ground @@ -2740,11 +2770,7 @@ function mob_class:falling(pos) end -- fall at set speed - self.object:set_acceleration({ - x = 0, - y = fall_speed, - z = 0 - }) + self.object:set_acceleration({x = 0, y = fall_speed, z = 0}) end @@ -2767,20 +2793,43 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- error checking when mod profiling is enabled if not tool_capabilities then - minetest.log("warning", - "[mobs] Mod profiling enabled, damage not enabled") + + minetest.log("warning", "[mobs] Mod profiling enabled, damage not enabled") + return true end - -- is mob protected? - if self.protected and hitter:is_player() - and minetest.is_protected(self.object:get_pos(), - hitter:get_player_name()) then + -- is mob protected + if self.protected then - minetest.chat_send_player(hitter:get_player_name(), - S("Mob has been protected!")) + -- did player hit mob and if so is it in protected area + if hitter:is_player() then - return true + local player_name = hitter:get_player_name() + + if player_name ~= self.owner + and minetest.is_protected(self.object:get_pos(), player_name) then + + minetest.chat_send_player(hitter:get_player_name(), + S("Mob has been protected!")) + + return true + end + + -- if protection is on level 2 then dont let arrows harm mobs + elseif self.protected == 2 then + + local ent = hitter and hitter:get_luaentity() + + if ent and ent._is_arrow then + + return true -- arrow entity + + elseif not ent then + + return true -- non entity + end + end end local weapon = hitter:get_wielded_item() @@ -2812,7 +2861,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) end damage = damage + (tool_capabilities.damage_groups[group] or 0) - * tmp * ((armor[group] or 0) / 100.0) + * tmp * ((armor[group] or 0) / 100.0) end end @@ -2822,6 +2871,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) if self.immune_to[n][1] == weapon_def.name then damage = self.immune_to[n][2] or 0 + break -- if "all" then no tools deal damage unless it's specified in list @@ -2834,13 +2884,14 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- healing if damage <= -1 then + self.health = self.health - floor(damage) + return true end if use_cmi - and cmi.notify_punch( - self.object, hitter, tflp, tool_capabilities, dir, damage) then + and cmi.notify_punch(self.object, hitter, tflp, tool_capabilities, dir, damage) then return true end @@ -2859,10 +2910,8 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) end end - if tr then - if weapon_def.original_description then - toolranks.new_afteruse(weapon, hitter, nil, {wear = wear}) - end + if tr and weapon_def.original_description then + toolranks.new_afteruse(weapon, hitter, nil, {wear = wear}) else weapon:add_wear(wear) end @@ -2872,21 +2921,11 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- only play hit sound and show blood effects if damage is 1 or over if damage >= 1 then - -- weapon sounds - if weapon_def.sounds then + -- select tool use sound if found, or fallback to default + local snd = weapon_def.sound and weapon_def.sound.use + or "default_punch" - local s = random(0, #weapon_def.sounds) - - minetest.sound_play(weapon_def.sounds[s], { - object = self.object, - max_hear_distance = 8 - }, true) - else - minetest.sound_play("default_punch", { - object = self.object, - max_hear_distance = 5 - }, true) - end + minetest.sound_play(snd, {object = self.object, max_hear_distance = 8}, true) -- blood_particles if not disable_blood and self.blood_amount > 0 then @@ -2895,8 +2934,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) local blood = self.blood_texture local amount = self.blood_amount - pos.y = pos.y + (-self.collisionbox[2] - + self.collisionbox[5]) * .5 + pos.y = pos.y + (-self.collisionbox[2] + self.collisionbox[5]) * .5 -- lots of damage = more blood :) if damage > 10 then @@ -2909,7 +2947,6 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) end effect(pos, amount, blood, 1, 2, 1.75, nil, nil, true) - end -- do damage @@ -2919,29 +2956,13 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) local hot = tool_capabilities and tool_capabilities.damage_groups and tool_capabilities.damage_groups.fire - if self:check_for_death({type = "punch", - puncher = hitter, hot = hot}) then + if self:check_for_death({type = "punch", puncher = hitter, hot = hot}) then return true end - - --[[ add healthy afterglow when hit (causes lag with large textures) - minetest.after(0.1, function() - - if not self.object:get_luaentity() then return end - - self.object:set_texture_mod("^[colorize:#c9900070") - - minetest.after(0.3, function() - if not self.object:get_luaentity() then return end - self.object:set_texture_mod(self.texture_mods) - end) - end) ]] - end -- END if damage -- knock back effect (only on full punch) - if self.knock_back - and tflp >= punch_interval then + if self.knock_back and tflp >= punch_interval then local v = self.object:get_velocity() @@ -2963,11 +2984,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- use tool knockback value or default kb = tool_capabilities.damage_groups["knockback"] or kb - self.object:set_velocity({ - x = dir.x * kb, - y = up, - z = dir.z * kb - }) + self.object:set_velocity({x = dir.x * kb, y = up, z = dir.z * kb}) self.pause_timer = 0.25 end @@ -2992,7 +3009,7 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) and self.child == false and self.attack_players == true and hitter:get_player_name() ~= self.owner - and not mobs.invis[ name ] + and not is_invisible(self, name) and self.object ~= hitter then -- attack whoever punched mob @@ -3149,8 +3166,7 @@ function mob_class:mob_activate(staticdata, def, dtime) def.textures = {def.textures} end - self.base_texture = def.textures and - def.textures[random(#def.textures)] + self.base_texture = def.textures and def.textures[random(#def.textures)] self.base_mesh = def.mesh self.base_size = self.visual_size self.base_colbox = self.collisionbox @@ -3215,10 +3231,8 @@ function mob_class:mob_activate(staticdata, def, dtime) local armor if type(self.armor) == "table" then armor = table_copy(self.armor) --- armor.immortal = 1 else --- armor = {immortal = 1, fleshy = self.armor} - armor = {fleshy = self.armor} + armor = {fleshy = self.armor} -- immortal = 1 end self.object:set_armor_groups(armor) @@ -3316,23 +3330,7 @@ end -- main mob function function mob_class:on_step(dtime, moveresult) - --[[ moveresult contains this for physical mobs - { - touching_ground = boolean, - collides = boolean, - standing_on_object = boolean, - collisions = { - { - type = string, -- "node" or "object", - axis = string, -- "x", "y" or "z" - node_pos = vector, -- if type is "node" - object = ObjectRef, -- if type is "object" - old_velocity = vector, - new_velocity = vector, - }} - }]] - -if self.state == "die" then return end ---------------- + if self.state == "die" then return end if use_cmi then cmi.notify_step(self.object, dtime) @@ -3521,6 +3519,13 @@ function mobs:register_mob(name, def) mobs.spawning_mobs[name] = {} + local collisionbox = def.collisionbox or {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25} + + -- quick fix to stop mobs glitching through nodes if too small + if -collisionbox[2] + collisionbox[5] < 1.01 then + collisionbox[5] = collisionbox[2] + 0.99 + end + minetest.register_entity(name, setmetatable({ stepheight = def.stepheight, @@ -3542,8 +3547,8 @@ minetest.register_entity(name, setmetatable({ lifetimer = def.lifetimer, hp_min = max(1, (def.hp_min or 5) * difficulty), hp_max = max(1, (def.hp_max or 10) * difficulty), - collisionbox = def.collisionbox, - selectionbox = def.selectionbox or def.collisionbox, + collisionbox = collisionbox, --def.collisionbox, + selectionbox = def.selectionbox or collisionbox, --def.collisionbox, visual = def.visual, visual_size = def.visual_size, mesh = def.mesh, @@ -3552,11 +3557,14 @@ minetest.register_entity(name, setmetatable({ walk_velocity = def.walk_velocity, run_velocity = def.run_velocity, damage = max(0, (def.damage or 0) * difficulty), + damage_group = def.damage_group, + damage_texture_modifier = def.damage_texture_modifier, light_damage = def.light_damage, light_damage_min = def.light_damage_min, light_damage_max = def.light_damage_max, water_damage = def.water_damage, lava_damage = def.lava_damage, + fire_damage = def.fire_damage, air_damage = def.air_damage, suffocation = def.suffocation, fall_damage = def.fall_damage, @@ -3615,6 +3623,7 @@ minetest.register_entity(name, setmetatable({ pushable = def.pushable, stay_near = def.stay_near, randomly_turn = def.randomly_turn ~= false, + ignore_invisibility = def.ignore_invisibility, on_spawn = def.on_spawn, @@ -3847,11 +3856,13 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter local numbers = settings:get(name) if numbers then + numbers = numbers:split(",") chance = tonumber(numbers[1]) or chance aoc = tonumber(numbers[2]) or aoc if chance == 0 then + minetest.log("warning", string.format("[mobs] %s has spawning disabled", name)) return @@ -3955,8 +3966,10 @@ function mobs:spawn_specific(name, nodes, neighbors, min_light, max_light, inter return end - -- mobs cannot spawn in protected areas when enabled - if not spawn_protected + -- check if mob can spawn inside protected areas + if (spawn_protected == false + or (spawn_monster_protected == false + and minetest.registered_entities[name].type == "monster")) and minetest.is_protected(pos, "") then --print("--- inside protected area", name) return @@ -4083,7 +4096,10 @@ function mobs:register_arrow(name, def) minetest.register_entity(name, { - physical = false, + physical = def.physical or false, + collide_with_objects = def.collide_with_objects or false, + static_save = false, + visual = def.visual, visual_size = def.visual_size, textures = def.textures, @@ -4242,7 +4258,7 @@ function mobs:boom(self, pos, radius) radius = radius, damage_radius = radius, sound = self.sounds and self.sounds.explode, - explode_center = true, + explode_center = true }) else mobs:safe_boom(self, pos, radius) @@ -4459,8 +4475,9 @@ function mobs:capture_mob(self, clicker, chance_hand, chance_net, return false end - -- cannot pick up if not owner - if self.owner ~= name and force_take == false then + -- cannot pick up if not owner (unless player has protection_bypass priv) + if not minetest.check_player_privs(name, "protection_bypass") + and self.owner ~= name and force_take == false then minetest.chat_send_player(name, S("@1 is owner!", self.owner)) @@ -4561,19 +4578,22 @@ function mobs:protect(self, clicker) local name = clicker:get_player_name() local tool = clicker:get_wielded_item() + local tool_name = tool:get_name() - if tool:get_name() ~= "mobs:protector" then + if tool_name ~= "mobs:protector" + and tool_name ~= "mobs:protector2" then return false end - if self.tamed == false then + if not self.tamed then minetest.chat_send_player(name, S("Not tamed!")) - return true -- false + return true end - if self.protected == true then + if (self.protected and tool_name == "mobs:protector") + or (self.protected == 2 and tool_name == "mobs:protector2") then minetest.chat_send_player(name, S("Already protected!")) - return true -- false + return true end if not mobs.is_creative(clicker:get_player_name()) then @@ -4581,9 +4601,15 @@ function mobs:protect(self, clicker) clicker:set_wielded_item(tool) end - self.protected = true + -- set protection level + if tool_name == "mobs:protector" then + self.protected = true + else + self.protected = 2 ; self.fire_damage = 0 + end local pos = self.object:get_pos() + pos.y = pos.y + self.collisionbox[2] + 0.5 effect(self.object:get_pos(), 25, "mobs_protect_particle.png", @@ -4622,14 +4648,14 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) self.health = self.hp_max - if self.htimer < 1 then +-- if self.htimer < 1 then - minetest.chat_send_player(clicker:get_player_name(), - S("@1 at full health (@2)", - self.name:split(":")[2], tostring(self.health))) +-- minetest.chat_send_player(clicker:get_player_name(), +-- S("@1 at full health (@2)", +-- self.name:split(":")[2], tostring(self.health))) - self.htimer = 5 - end +-- self.htimer = 5 +-- end end self.object:set_hp(self.health) @@ -4643,7 +4669,7 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame) -- deduct 10% of the time to adulthood self.hornytimer = self.hornytimer + ( (CHILD_GROW_TIME - self.hornytimer) * 0.1) -print ("====", self.hornytimer) +--print ("====", self.hornytimer) return true end @@ -4681,12 +4707,12 @@ print ("====", self.hornytimer) end local item = clicker:get_wielded_item() + local name = clicker:get_player_name() -- if mob has been tamed you can name it with a nametag if item:get_name() == "mobs:nametag" - and clicker:get_player_name() == self.owner then - - local name = clicker:get_player_name() + and (name == self.owner + or minetest.check_player_privs(name, "protection_bypass")) then -- store mob and nametag stack in external variables mob_obj[name] = self @@ -4771,14 +4797,13 @@ function mobs:alias_mob(old_name, new_name) -- entity minetest.register_entity(":" .. old_name, { - physical = false, + physical = false, static_save = false, on_activate = function(self, staticdata) if minetest.registered_entities[new_name] then - minetest.add_entity(self.object:get_pos(), - new_name, staticdata) + minetest.add_entity(self.object:get_pos(), new_name, staticdata) end remove_mob(self) diff --git a/mods/mobs_redo/api.txt b/mods/mobs_redo/api.txt index 70018915..5a4f7cb5 100644 --- a/mods/mobs_redo/api.txt +++ b/mods/mobs_redo/api.txt @@ -56,6 +56,8 @@ functions needed for the mob to work properly which contains the following: 'view_range' how many nodes in distance the mob can see a player. 'damage' how many health points the mob does to a player or another mob when melee attacking. + 'damage_group' group in which damage is dealt, dedaults to "fleshy". + 'damage_texture_modifier' applies texture modifier on hit e.g "^[brighten" 'knock_back' when true has mobs falling backwards when hit, the greater the damage the more they move back. 'fear_height' is how high a cliff or edge has to be before the mob stops @@ -66,7 +68,10 @@ functions needed for the mob to work properly which contains the following: water. 'air_damage' holds damage per second inflicted to mob when standing in air. 'lava_damage' holds the damage per second inflicted to mobs when standing - in lava or fire or an ignition source. + in lava. + 'fire_damage' holds the damage per second inflicted to mobs when standing + in fire. + 'light_damage' holds the damage per second inflicted to mobs when light level is between the min and max values below 'light_damage_min' minimum light value when mob is affected (default: 14) @@ -76,7 +81,7 @@ functions needed for the mob to work properly which contains the following: 'floats' when set to 1 mob will float in water, 0 has them sink. 'follow' mobs follow player when holding any of the items which appear on this table, the same items can be fed to a mob to tame or - breed e.g. {"farming:wheat", "default:apple"} + breed e.g. {"farming:wheat", "default:apple", "group:fish"} 'reach' is how far the mob can attack player when standing nearby, default is 3 nodes. @@ -131,6 +136,8 @@ functions needed for the mob to work properly which contains the following: e.g. {"player", "mobs_animal:chicken"}. 'runaway_from' contains a table with mob names to run away from, add "player" to list to runaway from player also. + 'ignore_invisibility' When true mob will still be able to see and attack + player even if invisible (invisibility mod only). 'blood_amount' contains the number of blood droplets to appear when mob is hit. 'blood_texture' has the texture name to use for droplets e.g. @@ -460,6 +467,8 @@ This function registers a arrow for mobs with the attack type shoot. 'visual' same is in minetest.register_entity() 'visual_size' same is in minetest.register_entity() 'textures' same is in minetest.register_entity() + 'physical' same is in minetest.register_entity() [default: false] + 'collide_with_objects' same as above 'velocity' the velocity of the arrow 'drop' if set to true any arrows hitting a node will drop as item 'hit_player' a function that is called when the arrow hits a player; @@ -690,6 +699,8 @@ External Settings for "minetest.conf" is false) 'mobs_spawn_protected' if set to false then mobs will not spawn in protected areas (default is true) + 'mobs_spawn_monster_protected' if set to false then monsters will not spawn in + protected areas (default is true) 'remove_far_mobs' if true then untamed mobs that are outside players visual range will be removed (default is true) 'mobname' can change specific mob chance rate (0 to disable) and @@ -713,6 +724,7 @@ External Settings for "minetest.conf" 'mob_area_spawn' When true will check surrounding area the size of the mob for obstructions before spawning, otherwise it defaults to checking the height of the mob only. + 'mob_smooth_rotate' Enables smooth rotation when mobs turn by default. Players can override the spawn chance for each mob registered by adding a line to their minetest.conf file with a new value, the lower the value the more each diff --git a/mods/mobs_redo/crafts.lua b/mods/mobs_redo/crafts.lua index c1371918..a28af9bf 100644 --- a/mods/mobs_redo/crafts.lua +++ b/mods/mobs_redo/crafts.lua @@ -10,9 +10,8 @@ minetest.register_craftitem("mobs:nametag", { if minetest.get_modpath("dye") and minetest.get_modpath("farming") then minetest.register_craft({ - type = "shapeless", output = "mobs:nametag", - recipe = {"default:paper", "dye:black", "farming:string"} + recipe = {{"default:paper", "dye:black", "farming:string"}} }) end @@ -115,6 +114,22 @@ minetest.register_craft({ } }) +-- level 2 protection rune +minetest.register_craftitem("mobs:protector2", { + description = S("Mob Protection Rune (Level 2)"), + inventory_image = "mobs_protector2.png", + groups = {flammable = 2} +}) + +minetest.register_craft({ + output = "mobs:protector2", + recipe = { + {"mobs:protector", "default:mese_crystal", "mobs:protector"}, + {"default:mese_crystal", "default:diamondblock", "default:mese_crystal"}, + {"mobs:protector", "default:mese_crystal", "mobs:protector"} + } +}) + -- saddle minetest.register_craftitem("mobs:saddle", { description = S("Saddle"), @@ -133,7 +148,7 @@ minetest.register_craft({ -- make sure we can register fences -if default.register_fence then +if minetest.get_modpath("default") and default.register_fence then -- mob fence (looks like normal fence but collision is 2 high) default.register_fence("mobs:fence_wood", { @@ -149,6 +164,7 @@ default.register_fence("mobs:fence_wood", { } } }) +end -- mob fence top (has enlarged collisionbox to stop mobs getting over) minetest.register_node("mobs:fence_top", { @@ -181,8 +197,6 @@ minetest.register_craft({ } }) -end - -- items that can be used as fuel minetest.register_craft({ @@ -283,12 +297,18 @@ minetest.register_tool(":mobs:mob_reset_stick", { tex_obj = obj + -- get base texture + local bt = tex_obj:get_luaentity().base_texture[1] + + if type(bt) ~= "string" then + bt = "" + end + local name = user:get_player_name() - local tex = "" minetest.show_formspec(name, "mobs_texture", "size[8,4]" .. "field[0.5,1;7.5,0;name;" - .. minetest.formspec_escape(S("Enter texture:")) .. ";" .. tex .. "]" + .. minetest.formspec_escape(S("Enter texture:")) .. ";" .. bt .. "]" .. "button_exit[2.5,3.5;3,1;mob_texture_change;" .. minetest.formspec_escape(S("Change")) .. "]") end @@ -339,17 +359,17 @@ minetest.register_node("mobs:meatblock", { tiles = {"mobs_meat_top.png", "mobs_meat_bottom.png", "mobs_meat_side.png"}, paramtype2 = "facedir", groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2}, - sounds = default.node_sound_leaves_defaults(), + sounds = default and default.node_sound_leaves_defaults(), on_place = minetest.rotate_node, - on_use = minetest.item_eat(20), + on_use = minetest.item_eat(20) }) minetest.register_craft({ output = "mobs:meatblock", - type = "shapeless", +-- type = "shapeless", recipe = { - "group:food_meat", "group:food_meat", "group:food_meat", - "group:food_meat", "group:food_meat", "group:food_meat", - "group:food_meat", "group:food_meat", "group:food_meat" + {"group:food_meat", "group:food_meat", "group:food_meat"}, + {"group:food_meat", "group:food_meat", "group:food_meat"}, + {"group:food_meat", "group:food_meat", "group:food_meat"} } }) diff --git a/mods/mobs_redo/depends.txt b/mods/mobs_redo/depends.txt index 2f208027..0c580bd4 100644 --- a/mods/mobs_redo/depends.txt +++ b/mods/mobs_redo/depends.txt @@ -1,4 +1,4 @@ -default +default? tnt? dye? farming? @@ -7,3 +7,4 @@ intllib? lucky_block? cmi? toolranks? +pathfinder? diff --git a/mods/mobs_redo/mod.conf b/mods/mobs_redo/mod.conf index 31a27edf..1760bd4f 100644 --- a/mods/mobs_redo/mod.conf +++ b/mods/mobs_redo/mod.conf @@ -1,4 +1,4 @@ name = mobs -depends = default -optional_depends = tnt, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks +depends = +optional_depends = default, tnt, dye, farming, invisibility, intllib, lucky_block, cmi, toolranks, pathfinder description = Adds a mob api for mods to add animals or monsters etc. diff --git a/mods/mobs_redo/mount.lua b/mods/mobs_redo/mount.lua index 550bf3e9..eec1ab9f 100644 --- a/mods/mobs_redo/mount.lua +++ b/mods/mobs_redo/mount.lua @@ -22,6 +22,7 @@ end local function node_is(pos) + local node = node_ok(pos) if node.name == "air" then @@ -69,6 +70,7 @@ end local function force_detach(player) + local attached_to = player:get_attach() if not attached_to then @@ -97,7 +99,9 @@ minetest.register_on_leaveplayer(function(player) end) minetest.register_on_shutdown(function() + local players = minetest.get_connected_players() + for i = 1, #players do force_detach(players[i]) end @@ -112,6 +116,7 @@ end) -- Just for correct detaching local function find_free_pos(pos) + local check = { {x = 1, y = 0, z = 0}, {x = 1, y = 1, z = 0}, @@ -124,10 +129,14 @@ local function find_free_pos(pos) } for _, c in pairs(check) do + local npos = {x = pos.x + c.x, y = pos.y + c.y, z = pos.z + c.z} local node = minetest.get_node_or_nil(npos) + if node and node.name then + local def = minetest.registered_nodes[node.name] + if def and not def.walkable and def.liquidtype == "none" then return npos @@ -141,6 +150,7 @@ end ------------------------------------------------------------------------------- function mobs.attach(entity, player) + entity.player_rotation = entity.player_rotation or {x = 0, y = 0, z = 0} entity.driver_attach_at = entity.driver_attach_at or {x = 0, y = 0, z = 0} entity.driver_eye_offset = entity.driver_eye_offset or {x = 0, y = 0, z = 0} @@ -154,6 +164,7 @@ function mobs.attach(entity, player) local attach_at = entity.driver_attach_at local eye_offset = entity.driver_eye_offset + entity.driver = player force_detach(player) @@ -170,6 +181,7 @@ function mobs.attach(entity, player) }) minetest.after(0.2, function() + if player and player:is_player() then player_api.set_animation(player, "sit", 30) end @@ -183,9 +195,13 @@ function mobs.detach(player) force_detach(player) minetest.after(0.1, function() + if player and player:is_player() then + local pos = find_free_pos(player:get_pos()) + pos.y = pos.y + 0.5 + player:set_pos(pos) end end) @@ -193,8 +209,8 @@ end function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) - local yaw = entity.object:get_yaw() or 0 + local yaw = entity.object:get_yaw() or 0 local rot_view = 0 if entity.player_rotation.y == 90 then @@ -208,14 +224,17 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) -- process controls if entity.driver then + local ctrl = entity.driver:get_player_control() -- move forwards if ctrl.up then + entity.v = entity.v + entity.accel / 10 -- move backwards elseif ctrl.down then + if entity.max_speed_reverse == 0 and entity.v == 0 then return end @@ -225,7 +244,9 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) -- mob rotation local horz + if entity.alt_turn == true then + horz = yaw if ctrl.left then @@ -243,21 +264,29 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) if can_fly then -- fly up if ctrl.jump then + velo.y = velo.y + 1 + if velo.y > entity.accel then velo.y = entity.accel end elseif velo.y > 0 then + velo.y = velo.y - 0.1 + if velo.y < 0 then velo.y = 0 end end -- fly down if ctrl.sneak then + velo.y = velo.y - 1 + if velo.y < -entity.accel then velo.y = -entity.accel end elseif velo.y < 0 then + velo.y = velo.y + 0.1 + if velo.y > 0 then velo.y = 0 end end else @@ -274,6 +303,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) -- if not moving then set animation and return if entity.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then + if stand_anim then mobs:set_animation(entity, stand_anim) end @@ -292,8 +322,10 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) entity.v = entity.v - 0.02 * s if s ~= get_sign(entity.v) then + entity.object:set_velocity({x = 0, y = 0, z = 0}) entity.v = 0 + return end @@ -310,6 +342,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) -- Set position, velocity and acceleration local p = entity.object:get_pos() + if not p then return end local new_acce = {x = 0, y = -9.81, z = 0} @@ -320,18 +353,23 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) local v = entity.v if ni == "air" then + if can_fly == true then new_acce.y = 0 end + elseif ni == "liquid" or ni == "lava" then + if ni == "lava" and entity.lava_damage ~= 0 then + entity.lava_counter = (entity.lava_counter or 0) + dtime if entity.lava_counter > 1 then + minetest.sound_play("default_punch", { object = entity.object, max_hear_distance = 5 - }) + }, true) entity.object:punch(entity.object, 1.0, { full_punch_interval = 1.0, @@ -343,11 +381,14 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end local terrain_type = entity.terrain_type + if terrain_type == 2 or terrain_type == 3 then + new_acce.y = 0 p.y = p.y + 1 if node_is(p) == "liquid" then + if velo.y >= 5 then velo.y = 5 elseif velo.y < 0 then @@ -357,7 +398,9 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end else if abs(velo.y) < 1 then + local pos = entity.object:get_pos() + if not pos then return end pos.y = floor(pos.y) + 0.5 @@ -371,6 +414,7 @@ function mobs.drive(entity, moving_anim, stand_anim, can_fly, dtime) end local new_velo = get_velocity(v, yaw - rot_view, velo.y) + new_acce.y = new_acce.y + acce_y entity.object:set_velocity(new_velo) @@ -382,11 +426,14 @@ end -- directional flying routine by D00Med (edited by TenPlus1) function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim) + local ctrl = entity.driver:get_player_control() local velo = entity.object:get_velocity() local dir = entity.driver:get_look_dir() local yaw = entity.driver:get_look_horizontal() + 1.57 -- offset fix between old and new commands +if not ctrl or not velo then return end + if ctrl.up then entity.object:set_velocity({ x = dir.x * speed, @@ -395,6 +442,7 @@ function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim) }) elseif ctrl.down then + entity.object:set_velocity({ x = -dir.x * speed, y = dir.y * speed + 2, @@ -409,6 +457,7 @@ function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim) -- firing arrows if ctrl.LMB and ctrl.sneak and shoots then + local pos = entity.object:get_pos() local obj = minetest.add_entity({ x = pos.x + 0 + dir.x * 2.5, @@ -416,11 +465,15 @@ function mobs.fly(entity, _, speed, shoots, arrow, moving_anim, stand_anim) z = pos.z + 0 + dir.z * 2.5}, arrow) local ent = obj:get_luaentity() + if ent then + ent.switch = 1 -- for mob specific arrows ent.owner_id = tostring(entity.object) -- so arrows dont hurt entity you are riding local vec = {x = dir.x * 6, y = dir.y * 6, z = dir.z * 6} + yaw = entity.driver:get_look_horizontal() + obj:set_yaw(yaw + pi / 2) obj:set_velocity(vec) else diff --git a/mods/mobs_redo/readme.MD b/mods/mobs_redo/readme.MD index d6469849..a2bfba7e 100644 --- a/mods/mobs_redo/readme.MD +++ b/mods/mobs_redo/readme.MD @@ -23,7 +23,7 @@ Lucky Blocks: 9 Changelog: -- 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence) +- 1.55 - Add 'peaceful_player' privelage and setting so mobs don't attack specific players (thanks sfence), add support for MarkBu's pathfinder mod, remove need for default mod - 1.54 - Simplified animal breeding function, added editable settings (thanks Wuzzy), Child mobs now take 20 mins to grow up, reverted to simple mob spawning with setting to use area checks, on_flop added, air_damage added. - 1.53 - Added 'on_map_load' settings to mobs:spawn so that mobs will only spawn when new areas of map are loaded. - 1.52 - Added 'mob_active_limit' in settings to set number of mobs in game, diff --git a/mods/mobs_redo/settingtypes.txt b/mods/mobs_redo/settingtypes.txt index 9a9100c9..dae580da 100644 --- a/mods/mobs_redo/settingtypes.txt +++ b/mods/mobs_redo/settingtypes.txt @@ -13,6 +13,9 @@ mobs_griefing (Griefing Mobs) bool true # If false then Mobs no longer spawn inside player protected areas mobs_spawn_protected (Spawn Mobs in protected areas) bool true +# If false then Monsters no longer spawn inside player protected areas +mobs_spawn_monster_protected (Spawn Monsters in protected areas) bool true + # If true Mobs will be removed once a map chunk is out of view remove_far_mobs (Remove far Mobs) bool true @@ -39,3 +42,6 @@ mob_area_spawn (Mob Area Spawn) bool false # Enable peaceful player attack prevention enable_peaceful_player (Mobs do not attack peaceful player without reason) bool false + +# Enable mobs smooth rotation +mob_smooth_rotate (Smooth rotation for mobs) bool true diff --git a/mods/mobs_redo/textures/mobs_protector2.png b/mods/mobs_redo/textures/mobs_protector2.png new file mode 100644 index 00000000..8c5a17e6 Binary files /dev/null and b/mods/mobs_redo/textures/mobs_protector2.png differ diff --git a/mods/mobs_sky/mobs_birds/License.txt b/mods/mobs_sky/mobs_birds/License.txt index 3286a757..4bbb4d01 100644 --- a/mods/mobs_sky/mobs_birds/License.txt +++ b/mods/mobs_sky/mobs_birds/License.txt @@ -1,5 +1,7 @@ Licenses +Code: MIT + Model and textures: CC-BY-SA 3.0, Author sapier - URL: http://creativecommons.org/licenses/by-sa/3.0/de/legalcode \ No newline at end of file + URL: http://creativecommons.org/licenses/by-sa/3.0/de/legalcode diff --git a/mods/mobs_sky/mobs_birds/init.lua b/mods/mobs_sky/mobs_birds/init.lua index 706b4074..c36fa075 100644 --- a/mods/mobs_sky/mobs_birds/init.lua +++ b/mods/mobs_sky/mobs_birds/init.lua @@ -1,52 +1,20 @@ -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_birds] mobs redo API not found!") - return -end - -- local variables -local l_skins_gull = { - {"animal_gull_mesh.png"}, - {"gull_black.png"}, - {"gull_gray.png"}, - {"gull_grayblue.png"} -} -local l_skins_bird = { - {"bird_blueish.png"}, - {"bird_brown.png"}, - {"bird_gray.png"}, - {"bird_grayblue.png"}, - {"bird_red.png"}, - {"bird_redish.png"} -} -local l_anims = { - speed_normal = 24, speed_run = 24, - stand_start = 1, stand_end = 95, - walk_start = 1, walk_end = 95, - run_start = 1, run_end = 95 -} -local l_model = "animal_gull.b3d" -local l_egg_texture = "default_cloud.png" -local l_capture_chance_h = 5 -local l_capture_chance_n = 60 -local l_spawn_in = {"air"} -local l_spawn_near_gull = {"default:water_source", "default:water_flowing"} -local l_spawn_near_bird = { - "default:leaves", "default:pine_needles", - "default:jungleleaves", "default:cactus" -} local l_spawn_chance_gull = 24000 local l_spawn_chance_bird = 36000 -- load settings dofile(minetest.get_modpath("mobs_birds").."/SETTINGS.txt") + if not ENABLE_LARGE_BIRDS then l_spawn_chance_bird = l_spawn_chance_bird - 18000 end + if not ENABLE_SMALL_BIRDS then l_spawn_chance_bird = l_spawn_chance_bird - 18000 end + -- gulls if ENABLE_GULLS then @@ -58,8 +26,13 @@ if ENABLE_GULLS then armor = 100, collisionbox = {-1, -0.3, -1, 1, 0.3, 1}, visual = "mesh", - mesh = l_model, - textures = l_skins_gull, + mesh = "animal_gull.b3d", + textures = { + {"animal_gull_mesh.png"}, + {"gull_black.png"}, + {"gull_gray.png"}, + {"gull_grayblue.png"} + }, rotate = 270, walk_velocity = 4, run_velocity = 6, @@ -71,24 +44,29 @@ if ENABLE_GULLS then lava_damage = 10, light_damage = 0, view_range = 14, - animation = l_anims, + animation = { + speed_normal = 24, speed_run = 24, + stand_start = 1, stand_end = 95, + walk_start = 1, walk_end = 95, + run_start = 1, run_end = 95 + }, on_rightclick = function(self, clicker) - mobs:capture_mob(self, clicker, l_capture_chance_h, l_capture_chance_n, 0, true, nil) + mobs:capture_mob(self, clicker, 5, 60, 0, true, nil) end }) mobs:spawn({ name = "mobs_birds:gull", - nodes = l_spawn_in, - neighbors = l_spawn_near_gull, + nodes = {"air"}, + neighbors = {"default:water_source", "default:water_flowing"}, max_light = 5, interval = 30, chance = l_spawn_chance_gull, min_height = 0, - max_height = 200, + max_height = 200 }) - mobs:register_egg("mobs_birds:gull", "Gull", l_egg_texture, 1) + mobs:register_egg("mobs_birds:gull", "Gull", "default_cloud.png", 1) end -- large birds @@ -102,8 +80,15 @@ if ENABLE_LARGE_BIRDS then armor = 100, collisionbox = {-0.5, -0.3, -0.5, 0.5, 0.3, 0.5}, visual = "mesh", - mesh = l_model, - textures = l_skins_bird, + mesh = "animal_gull.b3d", + textures = { + {"bird_blueish.png"}, + {"bird_brown.png"}, + {"bird_gray.png"}, + {"bird_grayblue.png"}, + {"bird_red.png"}, + {"bird_redish.png"} + }, visual_size = {x = .5, y = .5}, rotate = 270, walk_velocity = 4, @@ -116,24 +101,32 @@ if ENABLE_LARGE_BIRDS then lava_damage = 10, light_damage = 0, view_range = 12, - animation = l_anims, + animation = { + speed_normal = 24, speed_run = 24, + stand_start = 1, stand_end = 95, + walk_start = 1, walk_end = 95, + run_start = 1, run_end = 95 + }, on_rightclick = function(self, clicker) - mobs:capture_mob(self, clicker, l_capture_chance_h, l_capture_chance_n, 0, true, nil) + mobs:capture_mob(self, clicker, 5, 60, 0, true, nil) end }) mobs:spawn({ name = "mobs_birds:bird_lg", - nodes = l_spawn_in, - neighbors = l_spawn_near_bird, + nodes = {"air"}, + neighbors = { + "default:leaves", "default:pine_needles", + "default:jungleleaves", "default:cactus" + }, max_light = 5, interval = 30, chance = l_spawn_chance_bird, min_height = 0, - max_height = 200, + max_height = 200 }) - mobs:register_egg("mobs_birds:bird_lg", "Large bird", l_egg_texture, 1) + mobs:register_egg("mobs_birds:bird_lg", "Large bird", "default_cloud.png", 1) end -- small birds @@ -147,8 +140,15 @@ if ENABLE_SMALL_BIRDS then armor = 100, collisionbox = {-0.25, -0.3, -0.25, 0.25, 0.3, 0.25}, visual = "mesh", - mesh = l_model, - textures = l_skins_bird, + mesh = "animal_gull.b3d", + textures = { + {"bird_blueish.png"}, + {"bird_brown.png"}, + {"bird_gray.png"}, + {"bird_grayblue.png"}, + {"bird_red.png"}, + {"bird_redish.png"} + }, visual_size = {x = .25, y = .25}, rotate = 270, walk_velocity = 4, @@ -161,22 +161,30 @@ if ENABLE_SMALL_BIRDS then lava_damage = 10, light_damage = 0, view_range = 10, - animation = l_anims, + animation = { + speed_normal = 24, speed_run = 24, + stand_start = 1, stand_end = 95, + walk_start = 1, walk_end = 95, + run_start = 1, run_end = 95 + }, on_rightclick = function(self, clicker) - mobs:capture_mob(self, clicker, l_capture_chance_h, l_capture_chance_n, 0, true, nil) + mobs:capture_mob(self, clicker, 5, 60, 0, true, nil) end }) mobs:spawn({ name = "mobs_birds:bird_sm", - nodes = l_spawn_in, - neighbors = l_spawn_near_bird, + nodes = {"air"}, + neighbors = { + "default:leaves", "default:pine_needles", + "default:jungleleaves", "default:cactus" + }, max_light = 5, interval = 30, chance = l_spawn_chance_bird, min_height = 0, - max_height = 200, + max_height = 200 }) - mobs:register_egg("mobs_birds:bird_sm", "Small bird", l_egg_texture, 1) + mobs:register_egg("mobs_birds:bird_sm", "Small bird", "default_cloud.png", 1) end diff --git a/mods/mobs_sky/mobs_butterfly/License.txt b/mods/mobs_sky/mobs_butterfly/License.txt index 11d92897..f14a0d4c 100644 --- a/mods/mobs_sky/mobs_butterfly/License.txt +++ b/mods/mobs_sky/mobs_butterfly/License.txt @@ -1,6 +1,6 @@ Licenses -Model/Textures: unknown -Author: AspireMint +Code: MIT +Model/Textures: CC-BY-SA 3.0, Author AspireMint texture modification by: blert2112 diff --git a/mods/mobs_sky/mobs_butterfly/init.lua b/mods/mobs_sky/mobs_butterfly/init.lua index 004b830c..8b7458da 100644 --- a/mods/mobs_sky/mobs_butterfly/init.lua +++ b/mods/mobs_sky/mobs_butterfly/init.lua @@ -1,9 +1,4 @@ -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_butterfly] mobs redo API not found!") - return -end - -- local variables local l_skins = { {"bf1.png^bf2.png^bf3.png^bf4.png^bf5.png"}, @@ -13,6 +8,7 @@ local l_skins = { {"(bf1.png^[colorize:pink)^(bf2.png^[colorize:white)^(bf3.png^[colorize:blue)^(bf4.png^[colorize:orange)^(bf5.png^[colorize:gray)"}, {"(bf1.png^[colorize:darkgreen)^(bf2.png^[colorize:brown)^(bf3.png^[colorize:black)^(bf4.png^[colorize:darkgray)^(bf5.png^[colorize:red)"} } + local l_spawnnear = {"group:flower"} local l_spawnchance = 20000 @@ -39,15 +35,18 @@ mobs:register_mob("mobs_butterfly:butterfly", { animation = { speed_normal = 15, speed_run = 30, stand_start = 0, stand_end = 90, - walk_start = 0, walk_end = 90, + walk_start = 0, walk_end = 90 }, after_activate = function(self, staticdata, def, dtime) + if minetest.get_modpath("butterflies") then + local pos = self.object:get_pos() local butter = {"white", "red", "violet"} - local replace = "butterflies:butterfly_" - .. butter[math.random(1, #butter)] - minetest.set_node(pos, {name = replace}) + local replace = "butterflies:butterfly_" .. butter[math.random(1, #butter)] + + minetest.set_node(pos, {name = replace}) + self.object:remove() end end diff --git a/mods/mobs_sky/mobs_butterfly/textures/original/mobf_butterfly.png b/mods/mobs_sky/mobs_butterfly/textures/original/mobf_butterfly.png deleted file mode 100644 index c191f270..00000000 Binary files a/mods/mobs_sky/mobs_butterfly/textures/original/mobf_butterfly.png and /dev/null differ diff --git a/mods/mobs_water/mobs_crocs/License.txt b/mods/mobs_water/mobs_crocs/License.txt index eb859b6b..6025dea5 100644 --- a/mods/mobs_water/mobs_crocs/License.txt +++ b/mods/mobs_water/mobs_crocs/License.txt @@ -1,4 +1,5 @@ Licenses +Code: MIT Model/Textures: GPL v3 Author: Team NPX diff --git a/mods/mobs_water/mobs_crocs/init.lua b/mods/mobs_water/mobs_crocs/init.lua index 61fb5c96..14a993a9 100644 --- a/mods/mobs_water/mobs_crocs/init.lua +++ b/mods/mobs_water/mobs_crocs/init.lua @@ -1,26 +1,5 @@ -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_crocs] mobs redo API not found!") - return -end - -- local variables -local l_skins = { - {"croco.png"}, - {"croco2.png"} -} - -local l_anims = { - speed_normal = 24, speed_run = 24, - stand_start = 0, stand_end = 80, - walk_start = 81, walk_end = 170, - run_start = 81, run_end = 170, - punch_start = 205, punch_end = 220 -} - -local l_model = "crocodile.x" -local l_sounds = {random = "croco"} -local l_egg_texture = "default_grass.png" local l_spawn_chance = 60000 -- load settings @@ -31,9 +10,11 @@ local ENABLE_SWIMMERS = minetest.settings:get_bool("mobs_crocs.enable_swimmers", if not ENABLE_WALKERS then l_spawn_chance = l_spawn_chance - 20000 end + if not ENABLE_FLOATERS then l_spawn_chance = l_spawn_chance - 20000 end + if not ENABLE_SWIMMERS then l_spawn_chance = l_spawn_chance - 20000 end @@ -52,10 +33,13 @@ if ENABLE_WALKERS then collisionbox = {-0.85, -0.30, -0.85, 0.85, 1.5, 0.85}, drawtype = "front", visual = "mesh", - mesh = l_model, - textures = l_skins, + mesh = "crocodile.x", + textures = { + {"croco.png"}, + {"croco2.png"} + }, visual_size = {x = 4, y = 4}, - sounds = l_sounds, + sounds = {random = "croco"}, fly = false, floats = 0, stepheight = 1, @@ -63,7 +47,13 @@ if ENABLE_WALKERS then water_damage = 0, lava_damage = 10, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, speed_run = 24, + stand_start = 0, stand_end = 80, + walk_start = 81, walk_end = 170, + run_start = 81, run_end = 170, + punch_start = 205, punch_end = 220 + }, drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, {name = "mobs:leather", chance = 1, min = 0, max = 2}, @@ -86,7 +76,7 @@ if ENABLE_WALKERS then max_height = 10, }) - mobs:register_egg("mobs_crocs:crocodile", "Crocodile", l_egg_texture, 1) + mobs:register_egg("mobs_crocs:crocodile", "Crocodile", "default_grass.png", 1) end -- float @@ -103,17 +93,26 @@ if ENABLE_FLOATERS then collisionbox = {-0.638, -0.23, -0.638, 0.638, 1.13, 0.638}, drawtype = "front", visual = "mesh", - mesh = l_model, - textures = l_skins, + mesh = "crocodile.x", + textures = { + {"croco.png"}, + {"croco2.png"} + }, visual_size = {x = 3, y = 3}, - sounds = l_sounds, + sounds = {random = "croco"}, fly = false, stepheight = 1, view_range = 10, water_damage = 0, lava_damage = 10, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, speed_run = 24, + stand_start = 0, stand_end = 80, + walk_start = 81, walk_end = 170, + run_start = 81, run_end = 170, + punch_start = 205, punch_end = 220 + }, drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, {name = "mobs:leather", chance = 1, min = 0, max = 2}, @@ -135,7 +134,7 @@ if ENABLE_FLOATERS then }) mobs:register_egg("mobs_crocs:crocodile_float", "Crocodile (floater)", - l_egg_texture, 1) + "default_grass.png", 1) end -- swim @@ -152,10 +151,13 @@ if ENABLE_SWIMMERS then collisionbox = {-0.425, -0.15, -0.425, 0.425, 0.75, 0.425}, drawtype = "front", visual = "mesh", - mesh = l_model, - textures = l_skins, + mesh = "crocodile.x", + textures = { + {"croco.png"}, + {"croco2.png"} + }, visual_size = {x = 2, y = 2}, - sounds = l_sounds, + sounds = {random = "croco"}, fly = true, fly_in = "default:water_source", fall_speed = -1, @@ -164,7 +166,13 @@ if ENABLE_SWIMMERS then water_damage = 0, lava_damage = 10, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, speed_run = 24, + stand_start = 0, stand_end = 80, + walk_start = 81, walk_end = 170, + run_start = 81, run_end = 170, + punch_start = 205, punch_end = 220 + }, drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, {name = "mobs:leather", chance = 1, min = 0, max = 2}, @@ -182,5 +190,5 @@ if ENABLE_SWIMMERS then }) mobs:register_egg("mobs_crocs:crocodile_swim", "Crocodile (swimmer)", - l_egg_texture, 1) + "default_grass.png", 1) end diff --git a/mods/mobs_water/mobs_fish/License.txt b/mods/mobs_water/mobs_fish/License.txt index 76852f6b..e1b8defb 100644 --- a/mods/mobs_water/mobs_fish/License.txt +++ b/mods/mobs_water/mobs_fish/License.txt @@ -1,5 +1,6 @@ Licenses +Code: MIT Model/Textures: CC-BY-SA 3.0 Author: Sapier diff --git a/mods/mobs_water/mobs_fish/init.lua b/mods/mobs_water/mobs_fish/init.lua index ede688ca..11643e97 100644 --- a/mods/mobs_water/mobs_fish/init.lua +++ b/mods/mobs_water/mobs_fish/init.lua @@ -1,33 +1,9 @@ -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_fish] mobs redo API not found!") - return -end - -local SPRITE_VERSION = false -- set to true to use upright sprites instead of meshes +local SPRITE_VERSION = false -- set to true to use upright sprites instead of meshes -- local variables -local l_spawn_in = { - "default:water_source", "default:water_flowing", - "default:river_water_source", "default:river_water_flowing" -} -local l_spawn_near = { - "default:sand","default:dirt","group:seaplants","group:seacoral" -} local l_spawn_chance = 10000 -local l_cc_hand = 25 -local l_cc_net = 80 local l_water_level = minetest.settings:get("water_level") - 1 -local l_anims = { - speed_normal = 24, - speed_run = 24, - stand_start = 1, - stand_end = 80, - walk_start = 81, - walk_end = 155, - run_start = 81, - run_end = 155 -} local l_visual = "mesh" local l_visual_size = {x = .75, y = .75} local l_clown_mesh = "animal_clownfish.b3d" @@ -71,14 +47,25 @@ mobs:register_mob("mobs_fish:clownfish", { fall_speed = 0, view_range = 8, water_damage = 0, - air_damage = 1, + air_damage = 0, lava_damage = 5, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 80, + walk_start = 81, + walk_end = 155, + run_start = 81, + run_end = 155 + }, + on_rightclick = function(self, clicker) - mobs:capture_mob(self, clicker, l_cc_hand, l_cc_net, 0, true, + mobs:capture_mob(self, clicker, 25, 80, 0, true, "mobs_fish:clownfish") end, + on_flop = function(self) -- print("=== am on land, help!", self.state) @@ -97,8 +84,13 @@ mobs:register_mob("mobs_fish:clownfish", { mobs:spawn({ name = "mobs_fish:clownfish", - nodes = l_spawn_in, - neighbors = l_spawn_near, + nodes = { + "default:water_source", "default:water_flowing", + "default:river_water_source", "default:river_water_flowing" + }, + neighbors = { + "default:sand","default:dirt","group:seaplants","group:seacoral" + }, min_light = 5, interval = 30, chance = l_spawn_chance, @@ -131,12 +123,23 @@ mobs:register_mob("mobs_fish:tropical", { water_damage = 0, lava_damage = 5, light_damage = 0, - air_damage = 1, - animation = l_anims, + air_damage = 0, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 80, + walk_start = 81, + walk_end = 155, + run_start = 81, + run_end = 155 + }, + on_rightclick = function(self, clicker) - mobs:capture_mob(self, clicker, l_cc_hand, l_cc_net, 0, true, + mobs:capture_mob(self, clicker, 25, 80, 0, true, "mobs_fish:tropical") end, + on_flop = function(self) -- print("=== am on land, help!", self.state) @@ -155,8 +158,13 @@ mobs:register_mob("mobs_fish:tropical", { mobs:spawn({ name = "mobs_fish:tropical", - nodes = l_spawn_in, - neighbors = l_spawn_near, + nodes = { + "default:water_source", "default:water_flowing", + "default:river_water_source", "default:river_water_flowing" + }, + neighbors = { + "default:sand","default:dirt","group:seaplants","group:seacoral" + }, min_light = 5, interval = 30, chance = l_spawn_chance, diff --git a/mods/mobs_water/mobs_jellyfish/License.txt b/mods/mobs_water/mobs_jellyfish/License.txt index f10d72fd..680a3c74 100644 --- a/mods/mobs_water/mobs_jellyfish/License.txt +++ b/mods/mobs_water/mobs_jellyfish/License.txt @@ -1,5 +1,6 @@ Licenses +Code: MIT Model/Textures: WTFPL Author: blert2112 @@ -18,4 +19,3 @@ Author: blert2112 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. - \ No newline at end of file diff --git a/mods/mobs_water/mobs_jellyfish/init.lua b/mods/mobs_water/mobs_jellyfish/init.lua index c7f6c132..f1e56170 100644 --- a/mods/mobs_water/mobs_jellyfish/init.lua +++ b/mods/mobs_water/mobs_jellyfish/init.lua @@ -1,18 +1,14 @@ -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_jellyfish] mobs redo API not found!") - return -end - mobs:register_mob("mobs_jellyfish:jellyfish", { type = "animal", attack_type = "dogfight", + passive = false, damage = 5, reach = 1, hp_min = 5, hp_max = 10, armor = 100, - collisionbox = {-0.25, -0.25, -0.25, 0.25, 0.25, 0.25}, + collisionbox = {-0.1, -0.25, -0.1, 0.1, 0.25, 0.1}, visual = "mesh", mesh = "jellyfish.b3d", textures = { @@ -28,6 +24,7 @@ mobs:register_mob("mobs_jellyfish:jellyfish", { water_damage = 0, lava_damage = 5, light_damage = 0, + on_rightclick = function(self, clicker) mobs:capture_mob(self, clicker, 80, 100, 0, true, "mobs_jellyfish:jellyfish") @@ -37,7 +34,7 @@ mobs:register_mob("mobs_jellyfish:jellyfish", { mobs:spawn({ name = "mobs_jellyfish:jellyfish", nodes = {"default:water_source"}, - neighbors = {"default:water_flowing","default:water_source"}, + neighbors = {"default:water_flowing", "default:water_source"}, min_light = 5, interval = 30, chance = 10000, diff --git a/mods/mobs_water/mobs_sharks/License.txt b/mods/mobs_water/mobs_sharks/License.txt index 0ce650a5..40cbb014 100644 --- a/mods/mobs_water/mobs_sharks/License.txt +++ b/mods/mobs_water/mobs_sharks/License.txt @@ -1,5 +1,6 @@ Licenses +Code: MIT Model/Textures: CC-BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0/de/legalcode Author: Sapier diff --git a/mods/mobs_water/mobs_sharks/init.lua b/mods/mobs_water/mobs_sharks/init.lua index 00219561..1f73efcd 100644 --- a/mods/mobs_water/mobs_sharks/init.lua +++ b/mods/mobs_water/mobs_sharks/init.lua @@ -1,64 +1,41 @@ - -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_sharks] mobs redo API not found!") - return -end - -- local variables -local l_colors = { - "#604000:175", --brown - "#ffffff:150", --white - "#404040:150", --dark_grey - "#a0a0a0:150" --grey -} local l_skins = { { - "(shark_first.png^[colorize:" .. l_colors[3] - .. ")^(shark_second.png^[colorize:" .. l_colors[4] + "(shark_first.png^[colorize:#404040:150" -- dark grey + .. ")^(shark_second.png^[colorize:#a0a0a0:150" -- grey .. ")^shark_third.png" }, { - "(shark_first.png^[colorize:" .. l_colors[1] - .. ")^(shark_second.png^[colorize:" .. l_colors[2] + "(shark_first.png^[colorize:#604000:175" -- brown + .. ")^(shark_second.png^[colorize:#ffffff:150" -- white ..")^shark_third.png" }, { - "(shark_first.png^[colorize:" .. l_colors[4] - .. ")^(shark_second.png^[colorize:" .. l_colors[2] + "(shark_first.png^[colorize:#a0a0a0:150" -- grey + .. ")^(shark_second.png^[colorize:#ffffff:150" -- white .. ")^shark_third.png" } } -local l_anims = { - speed_normal = 24, - speed_run = 24, - stand_start = 1, - stand_end = 80, - walk_start = 80, - walk_end = 160, - run_start = 80, - run_end = 160 -} -local l_model = "mob_shark.b3d" -local l_egg_texture = "mob_shark_shark_item.png" -local l_spawn_in = {"default:water_flowing","default:water_source"} -local l_spawn_near = { - "default:water_flowing", "default:water_source", - "seawrecks:woodship", "seawrecks:uboot" -} + + local l_spawn_chance = 60000 -- load settings -dofile(minetest.get_modpath("mobs_sharks").."/SETTINGS.txt") +dofile(minetest.get_modpath("mobs_sharks") .. "/SETTINGS.txt") + if not ENABLE_SHARK_LARGE then l_spawn_chance = l_spawn_chance - 20000 end + if not ENABLE_SHARK_MEDIUM then l_spawn_chance = l_spawn_chance - 20000 end + if not ENABLE_SHARK_SMALL then l_spawn_chance = l_spawn_chance - 20000 end + -- large if ENABLE_SHARK_LARGE then @@ -72,7 +49,7 @@ if ENABLE_SHARK_LARGE then armor = 150, collisionbox = {-0.75, -0.5, -0.75, 0.75, 0.5, 0.75}, visual = "mesh", - mesh = l_model, + mesh = "mob_shark.b3d", textures = l_skins, makes_footstep_sound = false, walk_velocity = 4, @@ -85,7 +62,16 @@ if ENABLE_SHARK_LARGE then water_damage = 0, lava_damage = 10, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 80, + walk_start = 80, + walk_end = 160, + run_start = 80, + run_end = 160 + }, jump = false, stepheight = 0, drops = { @@ -95,14 +81,18 @@ if ENABLE_SHARK_LARGE then mobs:spawn({ name = "mobs_sharks:shark_lg", - nodes = l_spawn_in, - neighbors = l_spawn_near, + nodes = {"default:water_flowing","default:water_source"}, + neighbors = { + "default:water_flowing", "default:water_source", + "seawrecks:woodship", "seawrecks:uboot" + }, interval = 30, chance = l_spawn_chance, max_height = 0, }) - mobs:register_egg("mobs_sharks:shark_lg", "Shark (large)", l_egg_texture, 0) + mobs:register_egg("mobs_sharks:shark_lg", "Shark (large)", + "mob_shark_shark_item.png", 0) end -- medium @@ -119,7 +109,7 @@ if ENABLE_SHARK_MEDIUM then collisionbox = {-0.57, -0.38, -0.57, 0.57, 0.38, 0.57}, visual = "mesh", visual_size = {x = 0.75, y = 0.75}, - mesh = l_model, + mesh = "mob_shark.b3d", textures = l_skins, makes_footstep_sound = false, walk_velocity = 2, @@ -132,7 +122,16 @@ if ENABLE_SHARK_MEDIUM then water_damage = 0, lava_damage = 10, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 80, + walk_start = 80, + walk_end = 160, + run_start = 80, + run_end = 160 + }, jump = false, stepheight = 0, drops = { @@ -142,14 +141,18 @@ if ENABLE_SHARK_MEDIUM then mobs:spawn({ name = "mobs_sharks:shark_md", - nodes = l_spawn_in, - neighbors = l_spawn_near, + nodes = {"default:water_flowing","default:water_source"}, + neighbors = { + "default:water_flowing", "default:water_source", + "seawrecks:woodship", "seawrecks:uboot" + }, interval = 30, chance = l_spawn_chance, max_height = 0, }) - mobs:register_egg("mobs_sharks:shark_md", "Shark (medium)", l_egg_texture, 0) + mobs:register_egg("mobs_sharks:shark_md", "Shark (medium)", + "mob_shark_shark_item.png", 0) end -- small @@ -166,7 +169,7 @@ if ENABLE_SHARK_SMALL then collisionbox = {-0.38, -0.25, -0.38, 0.38, 0.25, 0.38}, visual = "mesh", visual_size = {x = 0.5, y = 0.5}, - mesh = l_model, + mesh = "mob_shark.b3d", textures = l_skins, makes_footstep_sound = false, walk_velocity = 2, @@ -179,7 +182,16 @@ if ENABLE_SHARK_SMALL then water_damage = 0, lava_damage = 10, light_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 80, + walk_start = 80, + walk_end = 160, + run_start = 80, + run_end = 160 + }, jump = false, stepheight = 0, drops = { @@ -189,12 +201,16 @@ if ENABLE_SHARK_SMALL then mobs:spawn({ name = "mobs_sharks:shark_sm", - nodes = l_spawn_in, - neighbors = l_spawn_near, + nodes = {"default:water_flowing","default:water_source"}, + neighbors = { + "default:water_flowing", "default:water_source", + "seawrecks:woodship", "seawrecks:uboot" + }, interval = 30, chance = l_spawn_chance, max_height = 0, }) - mobs:register_egg("mobs_sharks:shark_sm", "Shark (small)", l_egg_texture, 0) + mobs:register_egg("mobs_sharks:shark_sm", "Shark (small)", + "mob_shark_shark_item.png", 0) end diff --git a/mods/mobs_water/mobs_turtles/License.txt b/mods/mobs_water/mobs_turtles/License.txt index 2b26bffd..066c04dc 100644 --- a/mods/mobs_water/mobs_turtles/License.txt +++ b/mods/mobs_water/mobs_turtles/License.txt @@ -1,4 +1,5 @@ Licenses +Code: MIT Model/textures: unknown Author: AspireMint diff --git a/mods/mobs_water/mobs_turtles/init.lua b/mods/mobs_water/mobs_turtles/init.lua index b8443b21..57409396 100644 --- a/mods/mobs_water/mobs_turtles/init.lua +++ b/mods/mobs_water/mobs_turtles/init.lua @@ -1,40 +1,14 @@ -if minetest.get_modpath("mobs") and not mobs.mod and mobs.mod ~= "redo" then - minetest.log("error", "[mobs_turtles] mobs redo API not found!") - return -end - -local l_colors = { - "#604000:175", --brown - "#604000:100", --brown2 - "#ffffff:150", --white - "#404040:150", --dark_grey - "#a0a0a0:150", --grey - "#808000:150", --olive - "#ff0000:150" --red -} local l_skins = { {"turtle1.png^turtle2.png^turtle3.png^turtle4.png" .. "^turtle5.png^turtle6.png^turtle7.png"}, - {"turtle1.png^(turtle2.png^[colorize:" .. l_colors[5] - .. ")^(turtle3.png^[colorize:" .. l_colors[4] - .. ")^(turtle4.png^[colorize:" .. l_colors[1] - .. ")^(turtle5.png^[colorize:" .. l_colors[2] - .. ")^(turtle6.png^[colorize:" .. l_colors[6] .. ")^turtle7.png"} + {"turtle1.png^(turtle2.png^[colorize:#a0a0a0:150" -- grey + .. ")^(turtle3.png^[colorize:#404040:150" -- dark grey + .. ")^(turtle4.png^[colorize:#604000:175" -- brown + .. ")^(turtle5.png^[colorize:#604000:100" -- brown 2 + .. ")^(turtle6.png^[colorize:#808000:150" .. ")^turtle7.png"} -- olive } -local l_anims = { - speed_normal = 24, - speed_run = 24, - stand_start = 1, - stand_end = 50, - walk_start = 60, - walk_end = 90, - run_start = 60, - run_end = 90, - hide_start = 95, - hide_end = 100 -} -local l_model = "mobf_turtle.x" + local l_spawn_chance = 30000 -- land turtle @@ -46,7 +20,7 @@ mobs:register_mob("mobs_turtles:turtle", { armor = 200, collisionbox = {-0.4, 0.0, -0.4, 0.4, 0.35, 0.4}, visual = "mesh", - mesh = l_model, + mesh = "mobf_turtle.x", textures = l_skins, makes_footstep_sound = false, view_range = 8, @@ -60,21 +34,47 @@ mobs:register_mob("mobs_turtles:turtle", { lava_damage = 5, light_damage = 0, fall_damage = 1, - animation = l_anims, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 50, + walk_start = 60, + walk_end = 90, + run_start = 60, + run_end = 90, + hide_start = 95, + hide_end = 100 + }, drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, }, follow = "farming:carrot", + on_rightclick = function(self, clicker) - self.state = "" + + self.state = "hide" -- was "" + mobs:set_velocity(self, 0) + self.object:set_animation( {x = self.animation.hide_start, y = self.animation.hide_end}, self.animation.speed_normal, 0) + minetest.after(5, function() - self.state = "stand" + if self and self.object then + self.state = "stand" + end end) + mobs:capture_mob(self, clicker, 0, 80, 100, true, nil) + end, + + do_custom = function(self, dtime) + + if self.state == "hide" then + mobs:set_velocity(self, 0) + end end }) @@ -108,7 +108,7 @@ mobs:register_mob("mobs_turtles:seaturtle", { collisionbox = {-0.8, 0.0, -0.8, 0.8, 0.7, 0.8}, visual = "mesh", visual_size = {x = 2, y = 2}, - mesh = l_model, + mesh = "mobf_turtle.x", textures = l_skins, makes_footstep_sound = false, view_range = 10, @@ -125,7 +125,18 @@ mobs:register_mob("mobs_turtles:seaturtle", { lava_damage = 5, light_damage = 0, fall_damage = 0, - animation = l_anims, + animation = { + speed_normal = 24, + speed_run = 24, + stand_start = 1, + stand_end = 50, + walk_start = 60, + walk_end = 90, + run_start = 60, + run_end = 90, + hide_start = 95, + hide_end = 100 + }, drops = { {name = "mobs:meat_raw", chance = 1, min = 1, max = 3}, }, @@ -139,7 +150,7 @@ mobs:spawn({ nodes = {"default:water_flowing","default:water_source"}, neighbors = { "default:water_flowing", "default:water_source", "group:seaplants", - "seawrecks:woodship", "seawrecks:uboot" + "seawrecks:woodship", "seawrecks:uboot" }, min_light = 5, interval = 30, diff --git a/mods/more_chests/.luacheckrc b/mods/more_chests/.luacheckrc new file mode 100644 index 00000000..5ee1cab2 --- /dev/null +++ b/mods/more_chests/.luacheckrc @@ -0,0 +1,25 @@ +std = "lua51+minetest" +unused_args = false +allow_defined_top = true +max_line_length = 999 + +stds.minetest = { + read_globals = { + "minetest", + "VoxelManip", + "VoxelArea", + "PseudoRandom", + "ItemStack", + "default", + table = { + fields = { + "copy", + }, + }, + } +} + +read_globals = { + "pipeworks", +} + diff --git a/mods/more_chests/README.md b/mods/more_chests/README.md index d5dc1f18..9bc7c6ca 100644 --- a/mods/more_chests/README.md +++ b/mods/more_chests/README.md @@ -1,47 +1,80 @@ -more_chests -=========== +# more_chests +Originally a fork of 0gb.us's chests_0gb_us (https://forum.minetest.net/viewtopic.php?f=11&t=4366). +Megaf's more_chests fixes several bugs, uses new textures and adds compatibility with [VanessaE's Pipeworks] (https://github.com/VanessaE/pipeworks) mod. +nxet's rework introduces a new backend which allows for easier extension of the available models, including two new models showcasing the feature. -More Chests -This mod is a fork of 0gb.us's chests_0gb_us https://forum.minetest.net/viewtopic.php?f=11&t=4366 +### Available models +> NOTE: descriptions of the original models come from 0gb.us initial effort -Megaf's more_chests fixes several bugs, uses new textures and adds compatibility with [VanessaE's Pipeworks] (https://github.com/VanessaE/pipeworks) mod. +#### Cobble Chest +This locked chest looks like cobblestone, and has no info text. Great for hiding things in. However, unlike real cobblestone, this chest is breakable by hand. If you suspect there is one hiding, hold the left mouse button and run your hand along the walls. When cracks appear, you've found the chest. +1 | 2 | 3 +---|---|--- +default:wood | default:cobble | default:wood +default:cobble | default:steel_ingot | default:cobble +default:wood | default:cobble | default:wood -The following text was writen by 0gb.us -``` -Cobble Chest: -{'default:wood','default:cobble','default:wood'}, -{'default:cobble','default:steel_ingot','default:cobble'}, -{'default:wood','default:cobble','default:wood'} - -This locked chest looks like cobblestone, and has no info text. Great for hiding things in. However, unlike real cobblestone, this chest is breakable by hand. If you suspect there is one hiding, Hold the left mouse button, ant run your hand along the walls. When cracks appear, you've found the chest. - -Drop Box: -{'default:wood','','default:wood'}, -{'default:wood','default:steel_ingot','default:wood'}, -{'default:wood','default:wood','default:wood'} +#### Drop Box Anyone can put things in, but only the chest's placer can remove items. +1 | 2 | 3 +---|---|--- +default:wood | _empty_ | default:wood +default:wood | default:steel_ingot | default:wood +default:wood | default:wood | default:wood -Secret Chest: -{'default:wood','default:cobble','default:wood'}, -{'default:wood','default:steel_ingot','default:wood'}, -{'default:wood','default:wood','default:wood'} -As long as you remember to click “close” before you leave the chest, no one can see what the chest contains. Only the chest's owner can click “open” and “close” on the chest's formspec, revealing and hiding the chest's contents. +#### Secret Chest +As long as you remember to click "close" before you leave the chest, no one can see what the chest contains. Only the chest's owner can click "open" and "close" on the chest's formspec, revealing and hiding the chest's contents. +1 | 2 | 3 +---|---|--- +default:wood | default:cobble | default:wood +default:wood | default:steel_ingot | default:wood +default:wood | default:wood | default:wood -Shared Chest: -{'default:wood','default:leaves','default:wood'}, -{'default:wood','default:steel_ingot','default:wood'}, -{'default:wood','default:wood','default:wood'} +#### Shared Chest Exactly what it sounds like. The chest's placer can add people to the chest's shared list using the chest's formspec. Warning: anyone you add may empty the chest. When the chest is empty, it can be mined by anyone, just like a regular locked chest. +1 | 2 | 3 +---|---|--- +default:wood | default:leaves | default:wood +default:wood | default:steel_ingot | default:wood +default:wood | default:wood | default:wood -Wifi Chest - -{'default:wood','default:mese','default:wood'}, -{'default:wood','default:steel_ingot','default:wood'}, -{'default:wood','default:wood','default:wood'} +#### Wifi Chest A wacky chest that doesn't store it's items in the usual way, but instead, stores them remotely. For that reason, all wifi chests appear to have the same inventory. Due to not actually having an inventory, wifi chests can also be mined, even when they appear to have stuff in them. Lastly, as everyone gets their own wifi account, the items you see in the wifi chest are not the same items anyone else sees. This chest's properties make it nice for keeping secrets, as well as essentially almost doubling your inventory space, if you choose to carry one with you. -``` +1 | 2 | 3 +---|---|--- +default:wood | default:mese | default:wood +default:wood | default:steel_ingot | default:wood +default:wood | default:wood | default:wood + + +#### Fridge +A new model which comes in two forms, 1- and 2-block tall, which indeed have different sizes inventories. No fancy functionality here, I just wanted to know at a glance which one is the chest I'm storing food into. + +###### Fridge Recipe +1 | 2 | 3 +---|---|--- +_empty_ | default:steel_ingot | _empty_ +default:steel_ingot | default:ice | default:steel_ingot +_empty_ | default:steel_ingot | _empty_ + +###### Big Fridge Recipe +1 | 2 | 3 +---|---|--- +default:steel_ingot | default:steel_ingot | default:steel_ingot +default:steel_ingot | default:ice | default:steel_ingot +default:steel_ingot | default:steel_ingot | default:steel_ingot + + +#### Toolbox +This model has no particular functionality to offer other than giving your tools' chest a new look. As a bonus you can also craft the chest with different types of wood, which will give you different results. For the fanciest garage workshop you ever built on Minetest. +1 | 2 | 3 +---|---|--- +default:wood | default:wood | default:wood +default:wood | default:pickaxe | default:wood +default:wood | default:wood | default:wood +> Note: crafting also accepts Aspen, Acacia, Junglewood, Pine and Steel instead of wood diff --git a/mods/more_chests/cobble.lua b/mods/more_chests/cobble.lua deleted file mode 100644 index 6bb2c4c1..00000000 --- a/mods/more_chests/cobble.lua +++ /dev/null @@ -1,115 +0,0 @@ --- Load support for translation. -local S = minetest.get_translator("more_chests") - -local function has_locked_chest_privilege(meta, player) - if player:get_player_name() ~= meta:get_string("owner") then - return false - end - return true -end - -minetest.register_node("more_chests:cobble", { - description = S("Cobble Chest"), - tiles = {"default_cobble.png", "default_cobble.png", "default_cobble.png", - "default_cobble.png", "default_cobble.png", "cobblechest_front.png"}, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice = 1, tubedevice_receiver = 1}, --- First attempt to add a way to connect to pipeworks. - tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("main", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - }, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. - "list[current_name;main;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]" .. - "list[current_player;main;0,6.08;8,3;8]" .. - "listring[current_name;main]".. - "listring[current_player;main]" .. - default.get_hotbar_bg(0,4.85)) - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a locked chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in locked chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to locked chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from locked chest at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_craft({ - output = 'more_chests:cobble', - recipe = { - {'default:wood','default:cobble','default:wood'}, - {'default:cobble','default:steel_ingot','default:cobble'}, - {'default:wood','default:cobble','default:wood'} - } -}) diff --git a/mods/more_chests/dropbox.lua b/mods/more_chests/dropbox.lua deleted file mode 100644 index a8f16de4..00000000 --- a/mods/more_chests/dropbox.lua +++ /dev/null @@ -1,113 +0,0 @@ --- Load support for translation. -local S = minetest.get_translator("more_chests") -local DS = minetest.get_translator("default") - -local function has_locked_chest_privilege(meta, player) - if player:get_player_name() ~= meta:get_string("owner") then - return false - end - return true -end - -minetest.register_node("more_chests:dropbox", { - description = S("Dropbox"), - tiles = {"dropbox_top.png", "dropbox_top.png", "dropbox_side.png", - "dropbox_side.png", "dropbox_side.png", "dropbox_front.png"}, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice = 1, tubedevice_receiver = 1}, --- Pipeworks - tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("main", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - }, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", S("@1 (owned by @2)", - S("Dropbox"), - meta:get_string("owner"))) - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. - "list[current_name;main;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]" .. - "list[current_player;main;0,6.08;8,3;8]" .. - "listring[current_name;main]" .. - "listring[current_player;main]" .. - default.get_hotbar_bg(0,4.85)) - meta:set_string("infotext", DS("Chest")) - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a dropbox belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if has_locked_chest_privilege(meta, player) then - return stack:get_count() - end - local target = meta:get_inventory():get_list(listname)[index] - local target_name = target:get_name() - local stack_count = stack:get_count() - if target_name == stack:get_name() - and target:get_count() < stack_count then - return stack_count - end - if target_name ~= "" then - return 0 - end - return stack_count - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in dropbox at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to dropbox at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from dropbox at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_craft({ - output = 'more_chests:dropbox', - recipe = { - {'default:wood','','default:wood'}, - {'default:wood','default:steel_ingot','default:wood'}, - {'default:wood','default:wood','default:wood'} - } -}) diff --git a/mods/more_chests/init.lua b/mods/more_chests/init.lua index 5b161ecb..b1e85a08 100644 --- a/mods/more_chests/init.lua +++ b/mods/more_chests/init.lua @@ -1,7 +1,11 @@ -dofile(minetest.get_modpath("more_chests").."/cobble.lua") -dofile(minetest.get_modpath("more_chests").."/dropbox.lua") -dofile(minetest.get_modpath("more_chests").."/secret.lua") -dofile(minetest.get_modpath("more_chests").."/shared.lua") -dofile(minetest.get_modpath("more_chests").."/wifi.lua") -dofile(minetest.get_modpath("more_chests").."/aliases.lua") +dofile(minetest.get_modpath("more_chests").."/models/cobble.lua") +dofile(minetest.get_modpath("more_chests").."/models/dropbox.lua") +dofile(minetest.get_modpath("more_chests").."/models/fridge.lua") +dofile(minetest.get_modpath("more_chests").."/models/secret.lua") +dofile(minetest.get_modpath("more_chests").."/models/shared.lua") +dofile(minetest.get_modpath("more_chests").."/models/toolbox.lua") +dofile(minetest.get_modpath("more_chests").."/models/wifi.lua") +dofile(minetest.get_modpath("more_chests").."/utils/aliases.lua") + +print ("[MOD] more_chests loaded") diff --git a/mods/more_chests/locale/more_chests.fr.tr b/mods/more_chests/locale/more_chests.fr.tr index 1fe8fa1a..002f8d95 100644 --- a/mods/more_chests/locale/more_chests.fr.tr +++ b/mods/more_chests/locale/more_chests.fr.tr @@ -1,11 +1,17 @@ # textdomain: more_chests Cobble Chest=Coffre en pierre taillée Dropbox=Boîte de dépôt +Fridge=Réfrigérateur +Big Fridge=Grand réfrigérateur Secret Chest=Coffre secret Shared Chest=Coffre partagé Wifi Chest=Coffre wifi - - +Wooden Toolbox=Boîte à outils en bois +Aspen Wood Toolbox=Boîte à outils en bois de tremble +Acacia Wood Toolbox=Boîte à outils en bois d’acacia +Junglewood Toolbox=Boîte à outils en bois de la jungle +Pine Wood Toolbox=Boîte à outils en bois de pin +Steel Toolbox=Boîte à outils en acier @1 (owned by @2)=@1 (appartient à @2) Shared with (separate names with spaces)=Partagé avec (séparez les noms avec des espaces) submit=valider diff --git a/mods/more_chests/locale/more_chests.it.tr b/mods/more_chests/locale/more_chests.it.tr new file mode 100644 index 00000000..740616e5 --- /dev/null +++ b/mods/more_chests/locale/more_chests.it.tr @@ -0,0 +1,17 @@ +# textdomain: more_chests +Cobble Chest=Baule in ciottoli +Dropbox=Baule Donazioni +Fridge=Frigorifero +Big Fridge=Frigorifero Grande +Secret Chest=Baule Segreto +Shared Chest=Baule Condiviso +Wifi Chest=Baule WiFi +Wooden Toolbox=Scatola degli attrezzi in legno +Aspen Wood Toolbox=Scatola degli attrezzi in legno di pioppo +Acacia Wood Toolbox=Scatola degli attrezzi in legno di acacia +Junglewood Toolbox=Scatola degli attrezzi in legno di jungla +Pine Wood Toolbox=Scatola degli attrezzi in legno di pino +Steel Toolbox=Scatola degli attrezzi in acciaio +@1 (owned by @2)=@1 (di proprietà di @2) +Shared with (separate names with spaces)=Condiviso con (separa i nomi con degli spazi) +submit=invia diff --git a/mods/more_chests/locale/template.txt b/mods/more_chests/locale/template.txt index d95f7b1a..5784d43a 100644 --- a/mods/more_chests/locale/template.txt +++ b/mods/more_chests/locale/template.txt @@ -1,6 +1,17 @@ # textdomain: more_chests -Secret Chest= -Wifi Chest= Cobble Chest= -Shared Chest= Dropbox= +Fridge= +Big Fridge= +Secret Chest= +Shared Chest= +Wifi Chest= +Wooden Toolbox= +Aspen Wood Toolbox= +Acacia Wood Toolbox= +Junglewood Toolbox= +Pine Wood Toolbox= +Steel Toolbox= +@1 (owned by @2)= +Shared with (separate names with spaces)= +submit= diff --git a/mods/more_chests/models/cobble.lua b/mods/more_chests/models/cobble.lua new file mode 100644 index 00000000..8c271839 --- /dev/null +++ b/mods/more_chests/models/cobble.lua @@ -0,0 +1,25 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local S = minetest.get_translator("more_chests") + +local cobble = gen_def({ + description = S("Cobble Chest"), + type = "chest", + size = "small", + tiles = { + top = "default_cobble.png", + side = "default_cobble.png", + front = "cobblechest_front.png" + }, + pipeworks_enabled = true +}) + + +minetest.register_node("more_chests:cobble", cobble) +minetest.register_craft({ + output = "more_chests:cobble", + recipe = { + {"group:wood", "default:cobble", "group:wood"}, + {"default:cobble", "default:steel_ingot", "default:cobble"}, + {"group:wood", "default:cobble", "group:wood"} + } +}) diff --git a/mods/more_chests/models/dropbox.lua b/mods/more_chests/models/dropbox.lua new file mode 100644 index 00000000..3165ac50 --- /dev/null +++ b/mods/more_chests/models/dropbox.lua @@ -0,0 +1,47 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local actions = dofile(minetest.get_modpath("more_chests") .. "/utils/actions.lua") +local S = minetest.get_translator("more_chests") + +local dropbox = gen_def({ + description = S("Dropbox"), + type = "dropbox", + size = "small", + tiles = { + top = "dropbox_top.png", + side = "dropbox_side.png", + front = "dropbox_front.png" + }, + pipeworks_enabled = true, + allow_metadata_inventory_move = false, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if actions.has_locked_chest_privilege(meta, player) then + return stack:get_count() + end + local target = meta:get_inventory():get_list(listname)[index] + local target_name = target:get_name() + local stack_count = stack:get_count() + if target_name == stack:get_name() + and target:get_count() < stack_count then + return stack_count + end + if target_name ~= "" then + return 0 + end + return stack_count + end, + allow_metadata_inventory_take = actions.get_allow_metadata_inventory_take({ + "dropbox", check_privs = actions.has_locked_chest_privilege + }), +}) + + +minetest.register_node("more_chests:dropbox", dropbox) +minetest.register_craft({ + output = "more_chests:dropbox", + recipe = { + {"group:wood", "", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} + } +}) diff --git a/mods/more_chests/models/fridge.lua b/mods/more_chests/models/fridge.lua new file mode 100644 index 00000000..0848e591 --- /dev/null +++ b/mods/more_chests/models/fridge.lua @@ -0,0 +1,49 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local S = minetest.get_translator("more_chests") + +-- TODO model open + +-- normal fridge +local fridge = gen_def({ + description = S("Fridge"), + type = "fridge", + size = "small", + tiles = { + side = "fridge_side.png", + front = "fridge_front.png", + }, +}) + +minetest.register_node("more_chests:fridge", fridge) +minetest.register_craft({ + output = "more_chests:fridge", + recipe = { + {"", "default:steel_ingot", ""}, + {"default:steel_ingot", "default:ice", "default:steel_ingot"}, + {"", "default:steel_ingot", ""} + } +}) + +-- big fridge +local big_fridge = gen_def({ + description = S("Big Fridge"), + type = "fridge", + size = "big", + node_box = { + {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5}, + }, + tiles = { + side = "fridge_side.png", + front = "fridge_front.png", + }, +}) + +minetest.register_node("more_chests:big_fridge", big_fridge) +minetest.register_craft({ + output = "more_chests:big_fridge", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"default:steel_ingot", "default:ice", "default:steel_ingot"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} + } +}) diff --git a/mods/more_chests/models/secret.lua b/mods/more_chests/models/secret.lua new file mode 100644 index 00000000..5a32eda6 --- /dev/null +++ b/mods/more_chests/models/secret.lua @@ -0,0 +1,53 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local actions = dofile(minetest.get_modpath("more_chests") .. "/utils/actions.lua") +local S = minetest.get_translator("more_chests") + +local open = "size[8,10]".. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6.08;8,3;8]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + "button[3,9;2,1;open;close]" .. + default.get_hotbar_bg(0,4.85) + +local closed = "size[2,1]" .. + "button[0,0;2,1;open;open]" + +local secret = gen_def({ + description = S("Secret Chest"), + type = "secret chest", + size = "small", + tiles = { + top = "secret_top.png", + side = "secret_side.png", + front = "secret_front.png" + }, + formspec = open, + pipeworks_enabled = true, +}) + +secret.on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if actions.has_locked_chest_privilege(meta, sender) then + if fields.open == "open" then + meta:set_string("formspec", open) + else + meta:set_string("formspec", closed) + end + end +end + + +minetest.register_node("more_chests:secret", secret) +minetest.register_craft({ + output = "more_chests:secret", + recipe = { + {"group:wood", "default:cobble", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} + } +}) diff --git a/mods/more_chests/models/shared.lua b/mods/more_chests/models/shared.lua new file mode 100644 index 00000000..03825bfc --- /dev/null +++ b/mods/more_chests/models/shared.lua @@ -0,0 +1,71 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local actions = dofile(minetest.get_modpath("more_chests") .. "/utils/actions.lua") +local S = minetest.get_translator("more_chests") + +local function get_formspec(string) + return "size[8,10]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[current_name;main;0,0.3;8,4;]" .. + "list[current_player;main;0,4.85;8,1;]" .. + "list[current_player;main;0,6;8,3;8]" .. + "field[.25,9.5;8,1;shared;" .. + S("Shared with (separate names with spaces)") .. + ":;" .. string .. "]" .. + "button[6,9.2;2,1;submit;" .. + S("submit") .. "]" .. + "listring[current_name;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,4.85) +end + +local function check_privs(meta, player) + local name = player:get_player_name() + local shared = " " .. meta:get_string("shared") .. " " + if name == meta:get_string("owner") then + return true + elseif shared:find(" " .. name .. " ") then + return true + else + return false + end +end + +local shared = gen_def({ + description = S("Shared Chest"), + type = "shared chest", + size = "small", + tiles = { + top = "shared_top.png", + side = "shared_side.png", + front = "shared_front.png" + }, + formspec = get_formspec(""), + pipeworks_enabled = true, + sounds = default.node_sound_wood_defaults(), + allow_metadata_inventory_move = actions.get_allow_metadata_inventory_move{"shared chest", check_privs=check_privs}, + allow_metadata_inventory_put = actions.get_allow_metadata_inventory_put{"shared chest", check_privs=check_privs}, + allow_metadata_inventory_take = actions.get_allow_metadata_inventory_take{"shared chest", check_privs=check_privs}, +}) + +shared.on_receive_fields = function(pos, formspec, fields, sender) + local meta = minetest.get_meta(pos); + if fields.shared then + if meta:get_string("owner") == sender:get_player_name() then + meta:set_string("shared", fields.shared) + meta:set_string("formspec", get_formspec(fields.shared)) + end + end +end + + +minetest.register_node("more_chests:shared", shared) +minetest.register_craft({ + output = "more_chests:shared", + recipe = { + {"group:wood", "default:leaves", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} + } +}) diff --git a/mods/more_chests/models/toolbox.lua b/mods/more_chests/models/toolbox.lua new file mode 100644 index 00000000..0e287eb9 --- /dev/null +++ b/mods/more_chests/models/toolbox.lua @@ -0,0 +1,33 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local S = minetest.get_translator("more_chests") + +local function register_toolbox(description, material, side_tile, craft_item) + local def = gen_def({ + description = description, + type = "toolbox", + size = "big", + -- node_box = {-0.5, -0.5, -0.5, 1.5, 0.5, 0.5}, -- makes it two blocks wide + tiles = { + side = side_tile, + front = "toolbox_" .. material .. "_front.png", + top = "toolbox_" .. material .. "_top.png", + }, + }) + minetest.register_node("more_chests:toolbox_" .. material, def) + minetest.register_craft({ + output = "more_chests:toolbox_" .. material, + recipe = { + {craft_item, craft_item, craft_item}, + {craft_item, "group:pickaxe", craft_item}, + {craft_item, craft_item, craft_item} + } + }) +end + + +register_toolbox(S("Wooden Toolbox"), "wood", "default_wood.png", "default:wood") +register_toolbox(S("Aspen Wood Toolbox"), "aspen", "default_aspen_wood.png", "default:aspen_wood") +register_toolbox(S("Acacia Wood Toolbox"), "acacia", "default_acacia_wood.png", "default:acacia_wood") +register_toolbox(S("Junglewood Toolbox"), "jungle", "default_junglewood.png", "default:junglewood") +register_toolbox(S("Pine Wood Toolbox"), "pine", "default_pine_wood.png", "default:pine_wood") +register_toolbox(S("Steel Toolbox"), "steel", "default_steel_block.png", "default:steel_ingot") diff --git a/mods/more_chests/models/wifi.lua b/mods/more_chests/models/wifi.lua new file mode 100644 index 00000000..506bac94 --- /dev/null +++ b/mods/more_chests/models/wifi.lua @@ -0,0 +1,89 @@ +local gen_def = dofile(minetest.get_modpath("more_chests") .. "/utils/base.lua") +local S = minetest.get_translator("more_chests") +local pipeworks_enabled = minetest.global_exists("pipeworks") + +local wifi = gen_def({ + description = S("Wifi Chest"), + type = "wifi chest", + size = "small", + tiles = { + top = "wifi_top.png", + side = "wifi_side.png", + front = {name="wifi_front_animated.png", animation={type="vertical_frames", + aspect_w=16, aspect_h=16, length=2.0}} + }, + inventory_name = "more_chests:wifi", + pipeworks_enabled = pipeworks_enabled, -- this adds groups +}) + +-- wifi chests can always be removed because content is detached +wifi.can_dig = function(pos, player) return true end + +-- pipeworks support (we need to override what is created by gen_def because too generic) +wifi.tube = pipeworks_enabled and { + insert_object = function(pos, node, stack, direction, owner) + local wifi_chest_owner + if not owner then + local wifi_chest = minetest.get_meta(pos) + if not wifi_chest then + return stack + end + wifi_chest_owner = wifi_chest:get_string("owner") + if not wifi_chest_owner then + return stack + end + end + local player = minetest.get_player_by_name(owner or wifi_chest_owner) + if not player then + return stack + end + local inv = player:get_inventory() + return inv:add_item("more_chests:wifi", stack) + end, + can_insert = function(pos, node, stack, direction, owner) + local wifi_chest_owner + if not owner then + local wifi_chest = minetest.get_meta(pos) + if not wifi_chest then + return stack + end + wifi_chest_owner = wifi_chest:get_string("owner") + if not wifi_chest_owner then + return false + end + end + local player = minetest.get_player_by_name(owner or wifi_chest_owner) + if not player then + return false + end + local inv = player:get_inventory() + return inv:room_for_item("more_chests:wifi", stack) + end, + input_inventory = "more_chests:wifi", + return_input_invref = function(pos, node, direction, player_name) + if not player_name then + return false + end + local player = minetest.get_player_by_name(player_name) + if not player then + return false + end + return player:get_inventory() + end, + connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} +} or nil + +minetest.register_node("more_chests:wifi", wifi) +minetest.register_craft({ + output = "more_chests:wifi", + recipe = { + {"group:wood", "default:mese", "group:wood"}, + {"group:wood", "default:steel_ingot", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} + }, +}) + +minetest.register_on_joinplayer(function(player) + local inv = player:get_inventory() + inv:set_size("more_chests:wifi", 8*4) +end) diff --git a/mods/more_chests/secret.lua b/mods/more_chests/secret.lua deleted file mode 100644 index 71fe7423..00000000 --- a/mods/more_chests/secret.lua +++ /dev/null @@ -1,132 +0,0 @@ --- Load support for translation. -local S = minetest.get_translator("more_chests") - -local function has_locked_chest_privilege(meta, player) - if player:get_player_name() ~= meta:get_string("owner") then - return false - end - return true -end - -local open = "size[8,10]".. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. - "list[current_name;main;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]" .. - "list[current_player;main;0,6.08;8,3;8]" .. - "listring[current_name;main]" .. - "listring[current_player;main]" .. - "button[3,9;2,1;open;close]" .. - default.get_hotbar_bg(0,4.85) -local closed = "size[2,1]".. - "button[0,0;2,1;open;open]" - -minetest.register_node("more_chests:secret", { - description = S("Secret Chest"), - tiles = {"secret_top.png", "secret_top.png", "secret_side.png", - "secret_side.png", "secret_side.png", "secret_front.png"}, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice = 1, tubedevice_receiver = 1}, --- Pipeworks - tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("main", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - }, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", S("@1 (owned by @2)", - S("Secret Chest"), - meta:get_string("owner"))) - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", open) - meta:set_string("infotext", S("Secret Chest")) - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a secret chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a secret chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a secret chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in secret chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to secret chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from secret chest at "..minetest.pos_to_string(pos)) - end, - on_receive_fields = function(pos, formname, fields, sender) - local meta = minetest.get_meta(pos) - if has_locked_chest_privilege(meta, sender) then - if fields.open == "open" then - meta:set_string("formspec", open) - else - meta:set_string("formspec", closed) - end - end - end, -}) - -minetest.register_craft({ - output = 'more_chests:secret', - recipe = { - {'default:wood','default:cobble','default:wood'}, - {'default:wood','default:steel_ingot','default:wood'}, - {'default:wood','default:wood','default:wood'} - } -}) diff --git a/mods/more_chests/shared.lua b/mods/more_chests/shared.lua deleted file mode 100644 index e100a934..00000000 --- a/mods/more_chests/shared.lua +++ /dev/null @@ -1,138 +0,0 @@ --- Load support for translation. -local S = minetest.get_translator("more_chests") - -local function has_locked_chest_privilege(meta, player) - local name = player:get_player_name() - local shared = " "..meta:get_string("shared").." " - if name == meta:get_string("owner") then - return true - elseif shared:find(" "..name.." ") then - - return true - else - return false - end -end - -local function get_formspec(string) - return "size[8,10]".. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. - "list[current_name;main;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]" .. - "list[current_player;main;0,6;8,3;8]" .. - "field[.25,9.5;8,1;shared;"..S("Shared with (separate names with spaces)")..":;"..string.."]".. - "button[6,9.2;2,1;submit;"..S("submit").."]" .. - "listring[current_name;main]" .. - "listring[current_player;main]" .. - default.get_hotbar_bg(0,4.85) -end - -minetest.register_node("more_chests:shared", { - description = S("Shared Chest"), - tiles = {"shared_top.png", "shared_top.png", "shared_side.png", - "shared_side.png", "shared_side.png", "shared_front.png"}, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice = 1, tubedevice_receiver = 1}, --- Pipeworks - tube = { - insert_object = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:add_item("main", stack) - end, - can_insert = function(pos, node, stack, direction) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - return inv:room_for_item("main", stack) - end, - input_inventory = "main", - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - }, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - after_place_node = function(pos, placer) - local meta = minetest.get_meta(pos) - meta:set_string("owner", placer:get_player_name() or "") - meta:set_string("infotext", S("@1 (owned by @2)", - S("Shared Chest"), - meta:get_string("owner"))) - end, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", get_formspec("")) - meta:set_string("infotext", S("Shared Chest")) - meta:set_string("owner", "") - local inv = meta:get_inventory() - inv:set_size("main", 8*4) - end, - can_dig = function(pos,player) - local meta = minetest.get_meta(pos); - local inv = meta:get_inventory() - return inv:is_empty("main") - end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a shared chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return count - end, - allow_metadata_inventory_put = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a shared chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - allow_metadata_inventory_take = function(pos, listname, index, stack, player) - local meta = minetest.get_meta(pos) - if not has_locked_chest_privilege(meta, player) then - minetest.log("action", player:get_player_name().. - " tried to access a shared chest belonging to ".. - meta:get_string("owner").." at ".. - minetest.pos_to_string(pos)) - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in shared chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to shared chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from shared chest at "..minetest.pos_to_string(pos)) - end, - on_receive_fields = function(pos, formspec, fields, sender) - local meta = minetest.get_meta(pos); - if fields.shared then - if meta:get_string("owner") == sender:get_player_name() then - meta:set_string("shared", fields.shared); - meta:set_string("formspec", get_formspec(fields.shared)) - end - end - end, -}) - -minetest.register_craft({ - output = 'more_chests:shared', - recipe = { - {'default:wood','default:leaves','default:wood'}, - {'default:wood','default:steel_ingot','default:wood'}, - {'default:wood','default:wood','default:wood'} - } -}) diff --git a/mods/more_chests/textures/fridge_front.png b/mods/more_chests/textures/fridge_front.png new file mode 100644 index 00000000..3818b7af Binary files /dev/null and b/mods/more_chests/textures/fridge_front.png differ diff --git a/mods/more_chests/textures/fridge_side.png b/mods/more_chests/textures/fridge_side.png new file mode 100644 index 00000000..789939d4 Binary files /dev/null and b/mods/more_chests/textures/fridge_side.png differ diff --git a/mods/more_chests/textures/toolbox_acacia_front.png b/mods/more_chests/textures/toolbox_acacia_front.png new file mode 100644 index 00000000..2ef7c159 Binary files /dev/null and b/mods/more_chests/textures/toolbox_acacia_front.png differ diff --git a/mods/more_chests/textures/toolbox_acacia_top.png b/mods/more_chests/textures/toolbox_acacia_top.png new file mode 100644 index 00000000..7de120c0 Binary files /dev/null and b/mods/more_chests/textures/toolbox_acacia_top.png differ diff --git a/mods/more_chests/textures/toolbox_aspen_front.png b/mods/more_chests/textures/toolbox_aspen_front.png new file mode 100644 index 00000000..14ef94e7 Binary files /dev/null and b/mods/more_chests/textures/toolbox_aspen_front.png differ diff --git a/mods/more_chests/textures/toolbox_aspen_top.png b/mods/more_chests/textures/toolbox_aspen_top.png new file mode 100644 index 00000000..0b618d49 Binary files /dev/null and b/mods/more_chests/textures/toolbox_aspen_top.png differ diff --git a/mods/more_chests/textures/toolbox_front.xcf b/mods/more_chests/textures/toolbox_front.xcf new file mode 100644 index 00000000..380ecab2 Binary files /dev/null and b/mods/more_chests/textures/toolbox_front.xcf differ diff --git a/mods/more_chests/textures/toolbox_jungle_front.png b/mods/more_chests/textures/toolbox_jungle_front.png new file mode 100644 index 00000000..4d88605c Binary files /dev/null and b/mods/more_chests/textures/toolbox_jungle_front.png differ diff --git a/mods/more_chests/textures/toolbox_jungle_top.png b/mods/more_chests/textures/toolbox_jungle_top.png new file mode 100644 index 00000000..20239cb4 Binary files /dev/null and b/mods/more_chests/textures/toolbox_jungle_top.png differ diff --git a/mods/more_chests/textures/toolbox_pine_front.png b/mods/more_chests/textures/toolbox_pine_front.png new file mode 100644 index 00000000..f3b78906 Binary files /dev/null and b/mods/more_chests/textures/toolbox_pine_front.png differ diff --git a/mods/more_chests/textures/toolbox_pine_top.png b/mods/more_chests/textures/toolbox_pine_top.png new file mode 100644 index 00000000..15a750cf Binary files /dev/null and b/mods/more_chests/textures/toolbox_pine_top.png differ diff --git a/mods/more_chests/textures/toolbox_steel_front.png b/mods/more_chests/textures/toolbox_steel_front.png new file mode 100644 index 00000000..0399b0d6 Binary files /dev/null and b/mods/more_chests/textures/toolbox_steel_front.png differ diff --git a/mods/more_chests/textures/toolbox_steel_top.png b/mods/more_chests/textures/toolbox_steel_top.png new file mode 100644 index 00000000..21f3e624 Binary files /dev/null and b/mods/more_chests/textures/toolbox_steel_top.png differ diff --git a/mods/more_chests/textures/toolbox_top.xcf b/mods/more_chests/textures/toolbox_top.xcf new file mode 100644 index 00000000..cb6c4860 Binary files /dev/null and b/mods/more_chests/textures/toolbox_top.xcf differ diff --git a/mods/more_chests/textures/toolbox_wood_front.png b/mods/more_chests/textures/toolbox_wood_front.png new file mode 100644 index 00000000..49716d15 Binary files /dev/null and b/mods/more_chests/textures/toolbox_wood_front.png differ diff --git a/mods/more_chests/textures/toolbox_wood_top.png b/mods/more_chests/textures/toolbox_wood_top.png new file mode 100644 index 00000000..7e058fcf Binary files /dev/null and b/mods/more_chests/textures/toolbox_wood_top.png differ diff --git a/mods/more_chests/utils/actions.lua b/mods/more_chests/utils/actions.lua new file mode 100644 index 00000000..c7bfb74e --- /dev/null +++ b/mods/more_chests/utils/actions.lua @@ -0,0 +1,90 @@ +local function get_inventory_auth_string(player, meta, pos, label) + return player:get_player_name() .. " tried to access a locked " .. label .. " belonging to " .. meta:get_string("owner") .. " at " .. minetest.pos_to_string(pos) +end + + +function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + + +function get_allow_metadata_inventory_move(t) + setmetatable(t, {__index={check_privs=has_locked_chest_privilege}}) + local label, check_privs = t[1], t.check_privs + return function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not check_privs(meta, player) then + minetest.log("action", get_inventory_auth_string(player, meta, pos, label)) + return 0 + end + return count + end +end + +function get_allow_metadata_inventory_put(t) + setmetatable(t, {__index={check_privs=has_locked_chest_privilege}}) + local label, check_privs = t[1], t.check_privs + return function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not check_privs(meta, player) then + minetest.log("action", get_inventory_auth_string(player, meta, pos, label)) + return 0 + end + return stack:get_count() + end +end + +function get_allow_metadata_inventory_take(t) + setmetatable(t, {__index={check_privs=has_locked_chest_privilege}}) + local label, check_privs = t[1], t.check_privs + return function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not check_privs(meta, player) then + minetest.log("action", get_inventory_auth_string(player, meta, pos, label)) + return 0 + end + return stack:get_count() + end +end + + + +local function get_inventory_action_string(player, pos, action, label) + return player:get_player_name() .. " moves stuff " .. action .. " locked " .. label .. " at " .. minetest.pos_to_string(pos) +end + + +function get_on_metadata_inventory_move(label) + return function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", get_inventory_action_string(player, pos, "in", label) + ) + end +end + +function get_on_metadata_inventory_put(label) + return function(pos, listname, index, stack, player) + minetest.log("action", get_inventory_action_string(player, pos, "to", label)) + end +end + +function get_on_metadata_inventory_take(label) + return function(pos, listname, index, stack, player) + minetest.log("action", get_inventory_action_string(player, pos, "from", label)) + end +end + + + +actions = { + has_locked_chest_privilege = has_locked_chest_privilege, + get_allow_metadata_inventory_move = get_allow_metadata_inventory_move, + get_allow_metadata_inventory_put = get_allow_metadata_inventory_put, + get_allow_metadata_inventory_take = get_allow_metadata_inventory_take, + get_on_metadata_inventory_move = get_on_metadata_inventory_move, + get_on_metadata_inventory_put = get_on_metadata_inventory_put, + get_on_metadata_inventory_take = get_on_metadata_inventory_take, +} +return actions diff --git a/mods/more_chests/aliases.lua b/mods/more_chests/utils/aliases.lua similarity index 100% rename from mods/more_chests/aliases.lua rename to mods/more_chests/utils/aliases.lua diff --git a/mods/more_chests/utils/base.lua b/mods/more_chests/utils/base.lua new file mode 100644 index 00000000..d6858aa1 --- /dev/null +++ b/mods/more_chests/utils/base.lua @@ -0,0 +1,98 @@ +-- NOTE: `require` is not allowed with mod security on +-- `dofile` with a return on the module is used instead +generate_formspec_string = dofile(minetest.get_modpath("more_chests").."/utils/formspec.lua") +local actions = dofile(minetest.get_modpath("more_chests").."/utils/actions.lua") +local S = minetest.get_translator("more_chests") + +local function parse_action(value, default_getter) + if value == false then -- model disabled this attribute + return nil + elseif value == nil then -- model wants the default attribute + return default_getter() + else -- model provided its own attribute + return value + end +end + +function generate_chest_def(def) + -- TODO assert def.size in ("big", "small") + local out = { + description = def.description, + tiles = { + def.tiles.top or def.tiles.side, + def.tiles.top or def.tiles.side, + def.tiles.side, + def.tiles.side, + def.tiles.side, + def.tiles.front + }, + paramtype2 = "facedir", + legacy_facedir_simple = true, + groups = { + snappy=2, + choppy=2, + oddly_breakable_by_hand=2 + }, + sounds = def.sounds or default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", S("@1 (owned by @2)", def.description, meta:get_string("owner"))) + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local formspec_str = def.formspec or generate_formspec_string(def.size, def.inventory_name or nil) + meta:set_string("formspec", formspec_str) + meta:set_string("infotext", def.description) + meta:set_string("owner", "") + if def.inventory_name == nil or def.inventory_name == "main" then + local inv = meta:get_inventory() + local chest_size = def.size == "big" and 14*5 or 8*4 + inv:set_size("main", chest_size) + end + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + } + -- register log actions, NOTE passing an anonymous function to avoid getting the default if not necessary + out.allow_metadata_inventory_move = parse_action(def.allow_metadata_inventory_move, function() actions.get_allow_metadata_inventory_move{def.type} end) + out.allow_metadata_inventory_put = parse_action(def.allow_metadata_inventory_put, function() actions.get_allow_metadata_inventory_put{def.type} end) + out.allow_metadata_inventory_take = parse_action(def.allow_metadata_inventory_take, function() actions.get_allow_metadata_inventory_take{def.type} end) + out.on_metadata_inventory_move = parse_action(def.on_metadata_inventory_move, function() actions.get_on_metadata_inventory_move(def.type) end) + out.on_metadata_inventory_put = parse_action(def.on_metadata_inventory_put, function() actions.get_on_metadata_inventory_put(def.type) end) + out.on_metadata_inventory_take = parse_action(def.on_metadata_inventory_take, function() actions.get_on_metadata_inventory_take(def.type) end) + -- if model is not a simple block handle node_box attribute + if def.node_box then + out.drawtype = "nodebox" + out.node_box = { + type = "fixed", + fixed = def.node_box, + } + end + -- add pipeworks compatibility, TODO needs proper testing + if def.pipeworks_enabled == true then + out.groups.tubedevice = 1 + out.groups.tubedevice_receiver = 1 + out.tube = { + insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:add_item("main", stack) + end, + can_insert = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item("main", stack) + end, + input_inventory = "main", + connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} + } + end + return out +end + + +return generate_chest_def diff --git a/mods/more_chests/utils/formspec.lua b/mods/more_chests/utils/formspec.lua new file mode 100644 index 00000000..1452e618 --- /dev/null +++ b/mods/more_chests/utils/formspec.lua @@ -0,0 +1,46 @@ +function generate(size, inventory_name) + local cfg + + -- chest inventory name + local inv_name = inventory_name + if inv_name == nil then + inv_name = "main" + end + + if size == "small" then + cfg = { + window_width = 8, + window_height = 9, + chest_width = 8, + chest_height = 4, + } + elseif size == "big" then + cfg = { + window_width = 14, + window_height = 10, + chest_width = 14, + chest_height = 5, + } + end + -- calc padding to vertically align center the chest and the player's inventory + local player_inv_y_orig = cfg.chest_height + 0.85 + local player_inv_x_orig = (cfg.window_width - 8) / 2 -- 8=player_inv_width + return "size[" .. + cfg.window_width .. "," .. cfg.window_height .. "]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list["..((inv_name == "main") and "current_name" or "current_player")..";"..inv_name..";0,0.3;" .. + cfg.chest_width .. "," .. cfg.chest_height .. ";]" .. + "list[current_player;main;" .. + player_inv_x_orig .. "," .. player_inv_y_orig .. + ";8,1;]" .. + "list[current_player;main;" .. + player_inv_x_orig .. "," .. (player_inv_y_orig + 1.15) .. + ";8,3;8]" .. + "listring["..(inv_name == "main" and "current_name" or "current_player")..";"..inv_name.."]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(player_inv_x_orig, player_inv_y_orig) +end + +return generate diff --git a/mods/more_chests/wifi.lua b/mods/more_chests/wifi.lua deleted file mode 100644 index 84534a97..00000000 --- a/mods/more_chests/wifi.lua +++ /dev/null @@ -1,97 +0,0 @@ --- Load support for translation. -local S = minetest.get_translator("more_chests") - -local pipeworks_enabled = minetest.global_exists("pipeworks") - -minetest.register_node("more_chests:wifi", { - description = S("Wifi Chest"), - tiles = {"wifi_top.png", "wifi_top.png", "wifi_side.png", - "wifi_side.png", "wifi_side.png", - {name="wifi_front_animated.png", animation={type="vertical_frames", - aspect_w=16, aspect_h=16, length=2.0}}}, - paramtype2 = "facedir", - groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, tubedevice = 1, tubedevice_receiver = 1}, - -- Pipeworks - tube = pipeworks_enabled and { - insert_object = function(pos, node, stack, direction, owner) - if not owner then - return stack - end - local player = minetest.get_player_by_name(owner) - if not player then - return stack - end - local inv = player:get_inventory() - return inv:add_item("more_chests:wifi", stack) - end, - can_insert = function(pos, node, stack, direction, owner) - if not owner then - return false - end - local player = minetest.get_player_by_name(owner) - if not player then - return false - end - local inv = player:get_inventory() - return inv:room_for_item("more_chests:wifi", stack) - end, - input_inventory = "more_chests:wifi", - return_input_invref = function(pos, node, direction, player_name) - if not player_name then - return false - end - local player = minetest.get_player_by_name(player_name) - if not player then - return false - end - return player:get_inventory() - end, - connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} - } or nil, - after_place_node = pipeworks_enabled and pipeworks.after_place or nil, - after_dig_node = pipeworks_enabled and pipeworks.after_dig or nil, - legacy_facedir_simple = true, - sounds = default.node_sound_wood_defaults(), - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[8,9]".. - default.gui_bg .. - default.gui_bg_img .. - default.gui_slots .. - "list[current_player;more_chests:wifi;0,0.3;8,4;]".. - "list[current_player;main;0,4.85;8,1;]" .. - "list[current_player;main;0,6.08;8,3;8]" .. - "listring[current_player;more_chests:wifi]" .. - "listring[current_player;main]" .. - default.get_hotbar_bg(0,4.85)) - - meta:set_string("infotext", S("Wifi Chest")) - end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) - minetest.log("action", player:get_player_name().. - " moves stuff in wifi chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_put = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " moves stuff to wifi chest at "..minetest.pos_to_string(pos)) - end, - on_metadata_inventory_take = function(pos, listname, index, stack, player) - minetest.log("action", player:get_player_name().. - " takes stuff from wifi chest at "..minetest.pos_to_string(pos)) - end, -}) - -minetest.register_craft({ - output = 'more_chests:wifi', - recipe = { - {'default:wood','default:mese','default:wood'}, - {'default:wood','default:steel_ingot','default:wood'}, - {'default:wood','default:wood','default:wood'} - } -}) - -minetest.register_on_joinplayer(function(player) - local inv = player:get_inventory() - inv:set_size("more_chests:wifi", 8*4) -end) diff --git a/mods/moreblocks/CHANGELOG.md b/mods/moreblocks/CHANGELOG.md index e050101b..a441fdbd 100644 --- a/mods/moreblocks/CHANGELOG.md +++ b/mods/moreblocks/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [2.2.0] - 2021-06-28 + ### Changed - Refactored recipe override mechanism to avoid re-coding recipes @@ -16,6 +18,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed +- [Shapeless crafting recipes are now handled in redefinitions.](https://github.com/minetest-mods/moreblocks/pull/171) +- [Aliases are now resolved in Stairs+ circular saw cost calculation.](https://github.com/minetest-mods/moreblocks/pull/175) - [Fixed strange placement behavior for non-default Stairs+ nodes.](https://github.com/minetest-mods/moreblocks/pull/168) - [Fixed stairs placement over oddly-shaped nodes.](https://github.com/minetest-mods/moreblocks/pull/166) @@ -129,7 +133,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Initial versioned release. -[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v2.1.0...HEAD +[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v2.2.0...HEAD +[2.2.0]: https://github.com/minetest-mods/moreblocks/compare/v2.1.0...v2.2.0 [2.1.0]: https://github.com/minetest-mods/moreblocks/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/minetest-mods/moreblocks/compare/v1.3.0...v2.0.0 [1.3.0]: https://github.com/minetest-mods/moreblocks/compare/v1.2.0...v1.3.0 diff --git a/mods/moreblocks/nodes.lua b/mods/moreblocks/nodes.lua index 79abcb57..fbe66dcc 100644 --- a/mods/moreblocks/nodes.lua +++ b/mods/moreblocks/nodes.lua @@ -194,7 +194,7 @@ local nodes = { description = S("Iron Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#DEDEDE", "default_glass_detail.png^[colorize:#DEDEDE"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -205,7 +205,7 @@ local nodes = { description = S("Coal Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#828282", "default_glass_detail.png^[colorize:#828282"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -216,7 +216,7 @@ local nodes = { description = S("Clean Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png", "moreblocks_clean_glass_detail.png"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -316,7 +316,7 @@ local nodes = { description = S("Trap Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^moreblocks_trap_box_glass.png", "default_glass_detail.png"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -329,7 +329,7 @@ local nodes = { description = S("Trap Obsidian Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_obsidian_glass.png^moreblocks_trap_box_glass.png", "default_obsidian_glass_detail.png"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -353,7 +353,7 @@ local nodes = { description = S("Trap Clean Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -412,7 +412,7 @@ local nodes = { description = S("Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#E9CD61", "default_glass_detail.png^[colorize:#E9CD61"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -424,7 +424,7 @@ local nodes = { description = S("Clean Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -436,7 +436,7 @@ local nodes = { description = S("Trap Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#E9CD61"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -450,7 +450,7 @@ local nodes = { description = S("Trap Clean Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -464,7 +464,7 @@ local nodes = { description = S("Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#FFFF78", "default_glass_detail.png^[colorize:#FFFF78"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -476,7 +476,7 @@ local nodes = { description = S("Clean Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -488,7 +488,7 @@ local nodes = { description = S("Trap Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#FFFF78"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, @@ -502,7 +502,7 @@ local nodes = { description = S("Trap Clean Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, - use_texture_alpha = true, + use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, diff --git a/mods/moreblocks/redefinitions.lua b/mods/moreblocks/redefinitions.lua index e9c5ff7e..4d59c3c2 100644 --- a/mods/moreblocks/redefinitions.lua +++ b/mods/moreblocks/redefinitions.lua @@ -17,9 +17,10 @@ local reconstruct_internal_craft = function(recipe) { "", "", "" }, { "", "", "" }, } + local width = recipe.width for idx, item in pairs(recipe.items) do - local row = math.ceil(idx / recipe.width) - local col = idx - (row-1)*recipe.width + local row = math.ceil(idx / width) + local col = idx - (row-1)*width recp[row][col] = item end return recp @@ -27,7 +28,11 @@ end -- Change the amount produced by recipe by apply func to the old amount local change_recipe_amount = function(product, recipe, func) - local recp = reconstruct_internal_craft(recipe) + -- if width == 0, this is a shapeless recipe, for which the + -- internal and Lua API recipe table is the same. + -- Otherwise we need to reconstruct the table for the shaped recipe. + local shapeless = (recipe.width == 0) + local recp = shapeless and recipe.items or reconstruct_internal_craft(recipe) local oldamount = tonumber(recipe.output:match(" [0-9]+$") or "1") @@ -35,6 +40,10 @@ local change_recipe_amount = function(product, recipe, func) -- remove old crafting recipe local redo = { recipe = recp } + -- preserve shapelessness + if shapeless then + redo.type = "shapeless" + end minetest.clear_craft(redo) -- new output diff --git a/mods/moreores/CHANGELOG.md b/mods/moreores/CHANGELOG.md index ee88f2df..d57c03a0 100644 --- a/mods/moreores/CHANGELOG.md +++ b/mods/moreores/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [2.1.0] - 2021-06-28 + ### Added - More Ores tools now have [`toolranks`](https://github.com/lisacvuk/minetest-toolranks) support. @@ -61,6 +63,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Initial versioned release. -[Unreleased]: https://github.com/minetest-mods/moreores/compare/v2.0.0...HEAD +[Unreleased]: https://github.com/minetest-mods/moreores/compare/v2.1.0...HEAD +[2.1.0]: https://github.com/minetest-mods/moreores/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/minetest-mods/moreores/compare/v1.1.0...v2.0.0 [1.1.0]: https://github.com/minetest-mods/moreores/compare/v1.0.0...v1.1.0 diff --git a/mods/moretrees/saplings.lua b/mods/moretrees/saplings.lua index 72392754..9a94aa2f 100644 --- a/mods/moretrees/saplings.lua +++ b/mods/moretrees/saplings.lua @@ -64,7 +64,7 @@ for i in ipairs(moretrees.treelist) do grow_function = "moretrees.grow_"..treename end - biome_lib:dbg(dump(moretrees[tree_biome].surface)) + biome_lib.dbg(dump(moretrees[tree_biome].surface), 4) biome_lib:grow_plants({ grow_delay = moretrees.sapling_interval, diff --git a/mods/mywoodslopes/ethereal.lua b/mods/mywoodslopes/ethereal.lua index eb8cd9c5..28fac918 100644 --- a/mods/mywoodslopes/ethereal.lua +++ b/mods/mywoodslopes/ethereal.lua @@ -31,12 +31,12 @@ local ocorner_cbox = { } } local moretrees_slopes = { --Material , Description , Item, Image - {"willow" , "Willow Wood" , "ethereal:willow_wood", "willow"}, - {"redwood", "RedWood Wood", "ethereal:redwood_wood", "redwood"}, - {"frost", "Frost Wood", "ethereal:frost_wood", "frost"}, - {"yellow", "Healing Tree Wood", "ethereal:yellow_wood", "yellow"}, + {"willow" , "Willow Wood" , "ethereal:willow_wood", "ethereal_willow"}, + {"redwood", "RedWood Wood", "ethereal:redwood_wood", "ethereal_redwood"}, + {"frost", "Frost Wood", "ethereal:frost_wood", "ethereal_frost"}, + {"yellow", "Healing Tree Wood", "ethereal:yellow_wood", "ethereal_yellow"}, {"palm", "Palm Wood", "ethereal:palm_wood", "moretrees_palm"}, - {"banana", "Banana Wood", "ethereal:banana_wood", "banana"}, + {"banana", "Banana Wood", "ethereal:banana_wood", "ethereal_banana"}, {"birch", "Birch Wood", "ethereal:birch_wood", "moretrees_birch"}, } diff --git a/mods/pie/depends.txt b/mods/pie/depends.txt index c347c947..db708947 100644 --- a/mods/pie/depends.txt +++ b/mods/pie/depends.txt @@ -2,4 +2,5 @@ default hunger? hbhunger? stamina? -lucky_block? \ No newline at end of file +lucky_block? +screwdriver? diff --git a/mods/pie/init.lua b/mods/pie/init.lua index 53661898..2fd99ee9 100644 --- a/mods/pie/init.lua +++ b/mods/pie/init.lua @@ -4,8 +4,10 @@ local hmod = minetest.global_exists("hunger") local hbmod = minetest.global_exists("hbhunger") local stmod = minetest.global_exists("stamina") +local screwdriver_exists = minetest.global_exists("screwdriver") + -- eat pie slice function -local replace_pie = function(node, puncher, pos) +local function replace_pie(node, puncher, pos) -- is this my pie? if minetest.is_protected(pos, puncher:get_player_name()) then @@ -41,7 +43,11 @@ local replace_pie = function(node, puncher, pos) node.name = pie .. "_" .. (num + 1) end - minetest.swap_node(pos, {name = node.name}) + minetest.swap_node(pos, node) + + if num == 3 then + minetest.check_for_falling(pos) + end -- Blockmen's hud_hunger mod if hmod then @@ -91,12 +97,14 @@ end -- register pie bits -local register_pie = function(pie, desc) +local function register_pie(pie, desc) -- full pie minetest.register_node("pie:" .. pie .. "_0", { description = desc, paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", sunlight_propagates = false, tiles = { pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png", @@ -107,18 +115,22 @@ local register_pie = function(pie, desc) drawtype = "nodebox", node_box = { type = "fixed", - fixed = {{-0.45, -0.5, -0.45, 0.45, 0, 0.45}}, + fixed = {-0.45, -0.5, -0.45, 0.45, 0, 0.45} }, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_punch = function(pos, node, puncher, pointed_thing) replace_pie(node, puncher, pos) - end, + end }) -- 3/4 pie minetest.register_node("pie:" .. pie .. "_1", { - description = "3/4" .. desc, + description = "3/4 " .. desc, paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", sunlight_propagates = true, tiles = { pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png", @@ -129,18 +141,22 @@ local register_pie = function(pie, desc) drawtype = "nodebox", node_box = { type = "fixed", - fixed = {{-0.45, -0.5, -0.25, 0.45, 0, 0.45}}, + fixed = {-0.45, -0.5, -0.25, 0.45, 0, 0.45} }, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_punch = function(pos, node, puncher, pointed_thing) replace_pie(node, puncher, pos) - end, + end }) -- 1/2 pie minetest.register_node("pie:" .. pie .. "_2", { description = "Half " .. desc, paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", sunlight_propagates = true, tiles = { pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png", @@ -151,18 +167,22 @@ local register_pie = function(pie, desc) drawtype = "nodebox", node_box = { type = "fixed", - fixed = {{-0.45, -0.5, 0.0, 0.45, 0, 0.45}}, + fixed = {-0.45, -0.5, 0.0, 0.45, 0, 0.45} }, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_punch = function(pos, node, puncher, pointed_thing) replace_pie(node, puncher, pos) - end, + end }) -- 1/4 pie minetest.register_node("pie:" .. pie .. "_3", { description = "Piece of " .. desc, paramtype = "light", + paramtype2 = "facedir", + use_texture_alpha = "clip", sunlight_propagates = true, tiles = { pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png", @@ -173,14 +193,15 @@ local register_pie = function(pie, desc) drawtype = "nodebox", node_box = { type = "fixed", - fixed = {{-0.45, -0.5, 0.25, 0.45, 0, 0.45}}, + fixed = {-0.45, -0.5, 0.25, 0.45, 0, 0.45} }, + on_rotate = screwdriver_exists and screwdriver.rotate_simple, + on_punch = function(pos, node, puncher, pointed_thing) replace_pie(node, puncher, pos) - end, + end }) - end @@ -192,9 +213,9 @@ minetest.register_craft({ recipe = { {"group:food_sugar", "group:food_milk", "group:food_sugar"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) @@ -206,9 +227,9 @@ minetest.register_craft({ recipe = { {"group:food_cocoa", "group:food_milk", "group:food_cocoa"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) @@ -220,9 +241,9 @@ minetest.register_craft({ recipe = { {"group:food_strawberry", "group:food_milk", "group:food_strawberry"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) @@ -234,9 +255,9 @@ minetest.register_craft({ recipe = { {"group:food_coffee", "group:food_milk", "group:food_coffee"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) @@ -248,9 +269,9 @@ minetest.register_craft({ recipe = { {"group:food_cocoa", "group:food_milk", "dye:red"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_flour", "group:food_cheese", "group:food_flour"}, + {"group:food_flour", "group:food_cheese", "group:food_flour"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) @@ -261,8 +282,8 @@ minetest.register_craft({ output = "pie:meat_0", recipe = { {"group:food_meat_raw", "group:food_egg", "group:food_meat_raw"}, - {"group:food_wheat", "group:food_wheat", "group:food_wheat"}, - }, + {"group:food_wheat", "group:food_wheat", "group:food_wheat"} + } }) @@ -274,37 +295,37 @@ minetest.register_craft({ recipe = { {"group:food_banana", "group:food_milk", "group:food_banana"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) -- bread pudding -register_pie("brpd","Bread Pudding") +register_pie("brpd", "Bread Pudding") minetest.register_craft({ output = "pie:brpd_0", recipe = { {"group:food_bread", "group:food_milk", "group:food_bread"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) -- orange pie -register_pie("orange","Orange Pie") +register_pie("orange", "Orange Pie") minetest.register_craft({ output = "pie:orange_0", recipe = { {"group:food_orange", "group:food_milk", "group:food_orange"}, {"group:food_sugar", "group:food_egg", "group:food_sugar"}, - {"group:food_wheat", "group:food_flour", "group:food_wheat"}, + {"group:food_wheat", "group:food_flour", "group:food_wheat"} }, - replacements = {{ "mobs:bucket_milk", "bucket:bucket_empty"}} + replacements = {{"mobs:bucket_milk", "bucket:bucket_empty"}} }) @@ -322,7 +343,7 @@ lucky_block:add_blocks({ {"tro", "pie:orange_0", "default_place_node_hard", true}, {"nod", "pie:brpd_0", 0}, {"nod", "pie:meat_0", 0}, - {"lig"}, + {"lig"} }) end @@ -340,4 +361,4 @@ minetest.register_alias("pie:sugar", "farming:sugar") minetest.register_alias("pie:knife", "default:sword_steel") -print ("[MOD] Pie loaded") +print("[MOD] Pie loaded") diff --git a/mods/pie/mod.conf b/mods/pie/mod.conf index 716dd5ea..d1efb598 100644 --- a/mods/pie/mod.conf +++ b/mods/pie/mod.conf @@ -1,4 +1,4 @@ name = pie depends = default -optional_depends = hunger, hbhunger, stamina, lucky_block +optional_depends = hunger, hbhunger, stamina, lucky_block, screwdriver description = Add a selection of tasty Pie/Cakes to eat. diff --git a/mods/plantlife_modpack/bushes/init.lua b/mods/plantlife_modpack/bushes/init.lua index 4be5a61e..a610667c 100644 --- a/mods/plantlife_modpack/bushes/init.lua +++ b/mods/plantlife_modpack/bushes/init.lua @@ -26,7 +26,7 @@ node_box = { {-0.0612,-0.500000,-0.500000,0.0612,0.500000,-0.375000}, --NodeBox 1 } }, - groups = {snappy=3,flammable=2}, + groups = {snappy=3,flammable=2,attached_node=1}, sounds = default.node_sound_leaves_defaults(), drop = 'default:stick' }) @@ -61,7 +61,8 @@ for i in pairs(BushBranchCenter) do -- tree=1, -- MM: disabled because some recipes use group:tree for trunks snappy=3, flammable=2, - leaves=1 + leaves=1, + attached_node=1 }, sounds = default.node_sound_leaves_defaults(), drop = 'default:stick 4' @@ -104,7 +105,8 @@ for i in pairs(BushBranchSide) do -- tree=1, -- MM: disabled because some recipes use group:tree for trunks snappy=3, flammable=2, - leaves=1 + leaves=1, + attached_node=1 }, sounds = default.node_sound_leaves_defaults(), drop = 'default:stick 3' @@ -197,7 +199,7 @@ abstract_bushes.grow_bush_node = function(pos,dir, leaf_type) end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "stoneage:grass_with_silex", @@ -242,7 +244,7 @@ abstract_bushes.grow_youngtree_node2 = function(pos, height) end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "stoneage:grass_with_silex", diff --git a/mods/plantlife_modpack/bushes_classic/init.lua b/mods/plantlife_modpack/bushes_classic/init.lua index 353bdc76..a470a8f3 100644 --- a/mods/plantlife_modpack/bushes_classic/init.lua +++ b/mods/plantlife_modpack/bushes_classic/init.lua @@ -30,7 +30,7 @@ local modpath = minetest.get_modpath('bushes_classic') dofile(modpath..'/cooking.lua') dofile(modpath..'/nodes.lua') -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = 3600, spawn_plants = bushes_classic.spawn_list, avoid_radius = 10, diff --git a/mods/plantlife_modpack/cavestuff/init.lua b/mods/plantlife_modpack/cavestuff/init.lua index e3dba367..3f46ea93 100644 --- a/mods/plantlife_modpack/cavestuff/init.lua +++ b/mods/plantlife_modpack/cavestuff/init.lua @@ -7,6 +7,8 @@ local mname = "cavestuff" -- support for i18n local S = minetest.get_translator("cavestuff") +cavestuff = {} + dofile(minetest.get_modpath("cavestuff").."/nodes.lua") dofile(minetest.get_modpath("cavestuff").."/mapgen.lua") diff --git a/mods/plantlife_modpack/cavestuff/mapgen.lua b/mods/plantlife_modpack/cavestuff/mapgen.lua index 3be9f317..92989bc1 100644 --- a/mods/plantlife_modpack/cavestuff/mapgen.lua +++ b/mods/plantlife_modpack/cavestuff/mapgen.lua @@ -1,52 +1,39 @@ --Map Generation Stuff -minetest.register_on_generated(function(minp, maxp, seed) - if maxp.y >= 2 and minp.y <= 0 then - -- Generate pebbles - local perlin1 = minetest.get_perlin(329, 3, 0.6, 100) - -- Assume X and Z lengths are equal - local divlen = 16 - local divs = (maxp.x-minp.x)/divlen+1; - for divx=0,divs-1 do - for divz=0,divs-1 do - local x0 = minp.x + math.floor((divx+0)*divlen) - local z0 = minp.z + math.floor((divz+0)*divlen) - local x1 = minp.x + math.floor((divx+1)*divlen) - local z1 = minp.z + math.floor((divz+1)*divlen) - -- Determine pebble amount from perlin noise - local pebble_amount = math.floor(perlin1:get2d({x=x0, y=z0}) ^ 2 * 2) - -- Find random positions for pebbles based on this random - local pr = PseudoRandom(seed+1) - for i=0,pebble_amount do - local x = pr:next(x0, x1) - local z = pr:next(z0, z1) - -- Find ground level (0...15) - local ground_y = nil - for y=30,0,-1 do - if minetest.get_node({x=x,y=y,z=z}).name ~= "air" then - ground_y = y - break - end - end +biome_lib.register_on_generate( + { + surface = { + "default:dirt_with_grass", + "default:gravel", + "default:stone", + "default:permafrost_with_stones" + }, + max_count = 50, + rarity = 0, + plantlife_limit = -1, + check_air = true, + random_facedir = {0, 3} + }, + { + "cavestuff:pebble_1", + "cavestuff:pebble_2" + } +) - if ground_y then - local p = {x=x,y=ground_y+1,z=z} - local nn = minetest.get_node(p).name - -- Check if the node can be replaced - if minetest.registered_nodes[nn] and - minetest.registered_nodes[nn].buildable_to then - nn = minetest.get_node({x=x,y=ground_y,z=z}).name - -- If desert sand, add dry shrub - if nn == "default:dirt_with_grass" then - minetest.swap_node(p,{name="cavestuff:pebble_"..pr:next(1,2), param2=math.random(0,3)}) - elseif nn == "default:desert_sand" then - minetest.swap_node(p,{name="cavestuff:desert_pebble_"..pr:next(1,2), param2=math.random(0,3)}) - end - end - end - - end - end - end - end -end) +biome_lib.register_on_generate( + { + surface = { + "default:desert_sand", + "default:desert_stone" + }, + max_count = 50, + rarity = 0, + plantlife_limit = -1, + check_air = true, + random_facedir = {0, 3} + }, + { + "cavestuff:desert_pebble_1", + "cavestuff:desert_pebble_2" + } +) diff --git a/mods/plantlife_modpack/cavestuff/mod.conf b/mods/plantlife_modpack/cavestuff/mod.conf index b021c9e0..55cdcaba 100644 --- a/mods/plantlife_modpack/cavestuff/mod.conf +++ b/mods/plantlife_modpack/cavestuff/mod.conf @@ -1,2 +1,2 @@ name = cavestuff -depends = default +depends = default,biome_lib diff --git a/mods/plantlife_modpack/cavestuff/nodes.lua b/mods/plantlife_modpack/cavestuff/nodes.lua index e6ae02ca..7dcf6b75 100644 --- a/mods/plantlife_modpack/cavestuff/nodes.lua +++ b/mods/plantlife_modpack/cavestuff/nodes.lua @@ -12,65 +12,65 @@ minetest.register_node("cavestuff:pebble_1",{ description = S("Pebble"), drawtype = "mesh", mesh = "cavestuff_pebble.obj", - tiles = {"undergrowth_pebble.png"}, - paramtype = "light", + tiles = {"undergrowth_pebble.png"}, + paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1}, - selection_box = cbox, - collision_box = cbox, - on_place = function(itemstack, placer, pointed_thing) + groups = {cracky=3, stone=1, attached_node=1}, + selection_box = cbox, + collision_box = cbox, + on_place = function(itemstack, placer, pointed_thing) -- place a random pebble node local stack = ItemStack("cavestuff:pebble_"..math.random(1,2)) local ret = minetest.item_place(stack, placer, pointed_thing) return ItemStack("cavestuff:pebble_1 "..itemstack:get_count()-(1-ret:get_count())) end, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults(), }) minetest.register_node("cavestuff:pebble_2",{ drawtype = "mesh", mesh = "cavestuff_pebble.obj", - tiles = {"undergrowth_pebble.png"}, + tiles = {"undergrowth_pebble.png"}, drop = "cavestuff:pebble_1", - tiles = {"undergrowth_pebble.png"}, - paramtype = "light", + tiles = {"undergrowth_pebble.png"}, + paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1, not_in_creative_inventory=1}, + groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1}, selection_box = cbox, collision_box = cbox, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults(), }) minetest.register_node("cavestuff:desert_pebble_1",{ description = S("Desert Pebble"), drawtype = "mesh", mesh = "cavestuff_pebble.obj", - tiles = {"default_desert_stone.png"}, - paramtype = "light", + tiles = {"default_desert_stone.png"}, + paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1}, + groups = {cracky=3, stone=1, attached_node=1}, selection_box = cbox, collision_box = cbox, - on_place = function(itemstack, placer, pointed_thing) + on_place = function(itemstack, placer, pointed_thing) -- place a random pebble node local stack = ItemStack("cavestuff:desert_pebble_"..math.random(1,2)) local ret = minetest.item_place(stack, placer, pointed_thing) return ItemStack("cavestuff:desert_pebble_1 "..itemstack:get_count()-(1-ret:get_count())) end, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults(), }) minetest.register_node("cavestuff:desert_pebble_2",{ drawtype = "mesh", mesh = "cavestuff_pebble.obj", drop = "cavestuff:desert_pebble_1", - tiles = {"default_desert_stone.png"}, - paramtype = "light", + tiles = {"default_desert_stone.png"}, + paramtype = "light", paramtype2 = "facedir", - groups = {cracky=3, stone=1, not_in_creative_inventory=1}, + groups = {cracky=3, stone=1, attached_node=1, not_in_creative_inventory=1}, selection_box = cbox, collision_box = cbox, - sounds = default.node_sound_stone_defaults(), + sounds = default.node_sound_stone_defaults(), }) --Staclactites @@ -85,19 +85,34 @@ minetest.register_node("cavestuff:stalactite_1",{ node_box = { type = "fixed", fixed = { - {-0.187500,0.425000,-0.150003,0.162500,0.500000,0.162500}, - {-0.112500,0.162500,-0.100000,0.087500,0.475000,0.087500}, - {-0.062500,-0.275000,-0.062500,0.062500,0.500000,0.062500}, - {-0.037500,-0.837500,0.037500,0.037500,0.500000,-0.025000}, + {-0.187500,-0.425000,-0.150003,0.162500,-0.500000,0.162500}, + {-0.112500,-0.162500,-0.100000,0.087500,-0.475000,0.087500}, + {-0.062500,0.275000,-0.062500,0.062500,-0.500000,0.062500}, + {-0.037500,0.837500,0.037500,0.037500,-0.500000,-0.025000}, } }, - on_place = function(itemstack, placer, pointed_thing) - local pt = pointed_thing - if minetest.get_node(pt.under).name=="default:stone" - and minetest.get_node({x=pt.under.x, y=pt.under.y-1, z=pt.under.z}).name=="air" - and minetest.get_node({x=pt.under.x, y=pt.under.y-2, z=pt.under.z}).name=="air" then - minetest.swap_node({x=pt.under.x, y=pt.under.y-1, z=pt.under.z}, {name="cavestuff:stalactite_"..math.random(1,3)}) + local dir = vector.subtract(pointed_thing.above, pointed_thing.under) + local base = pointed_thing.under + local place = vector.add(base, dir) + local above = vector.add(place, dir) + + if not placer then return end + local playername = placer:get_player_name() + if minetest.is_protected(place, playername) + or minetest.is_protected(above, playername) then + minetest.record_protection_violation(place, playername) + return + end + + if minetest.get_node(base).name == "default:stone" + and minetest.get_node(place).name == "air" + and minetest.get_node(above).name == "air" + then + minetest.swap_node(place, { + name = "cavestuff:stalactite_"..math.random(1,3), + param2 = minetest.dir_to_wallmounted(vector.multiply(dir, -1)) + }) if not minetest.setting_getbool("creative_mode") then itemstack:take_item() end @@ -116,10 +131,10 @@ minetest.register_node("cavestuff:stalactite_2",{ node_box = { type = "fixed", fixed = { - {-0.187500,0.387500,-0.150003,0.162500,0.500000,0.162500}, - {-0.112500,0.112500,-0.100000,0.087500,0.475000,0.087500}, - {-0.062500,-0.675000,-0.062500,0.062500,0.500000,0.062500}, - {-0.037500,-0.975000,0.037500,0.037500,0.500000,-0.025000}, + {-0.187500,-0.387500,-0.150003,0.162500,-0.500000,0.162500}, + {-0.112500,-0.112500,-0.100000,0.087500,-0.475000,0.087500}, + {-0.062500,0.675000,-0.062500,0.062500,-0.500000,0.062500}, + {-0.037500,0.975000,0.037500,0.037500,-0.500000,-0.025000}, } }, }) @@ -132,14 +147,14 @@ minetest.register_node("cavestuff:stalactite_3",{ paramtype = "light", paramtype2 = "wallmounted", node_box = { - type = "fixed", - fixed = { - {-0.187500,0.387500,-0.150003,0.162500,0.500000,0.162500}, - {-0.112500,0.037500,-0.100000,0.087500,0.475000,0.087500}, - {-0.062500,-0.437500,-0.062500,0.062500,0.500000,0.062500}, - {-0.037500,-1.237500,0.037500,0.037500,0.500000,-0.025000}, - } - }, + type = "fixed", + fixed = { + {-0.187500,-0.387500,-0.150003,0.162500,-0.500000,0.162500}, + {-0.112500,-0.037500,-0.100000,0.087500,-0.475000,0.087500}, + {-0.062500,0.437500,-0.062500,0.062500,-0.500000,0.062500}, + {-0.037500,1.237500,0.037500,0.037500,-0.500000,-0.025000}, + } + }, }) --Stalagmites diff --git a/mods/plantlife_modpack/dryplants/juncus.lua b/mods/plantlife_modpack/dryplants/juncus.lua index c945dcfc..0bfd635b 100644 --- a/mods/plantlife_modpack/dryplants/juncus.lua +++ b/mods/plantlife_modpack/dryplants/juncus.lua @@ -92,7 +92,7 @@ minetest.register_node("dryplants:juncus_02", { -- GENERATE SMALL JUNCUS ----------------------------------------------------------------------------------------------- -- near water or swamp -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", --"default:desert_sand", @@ -113,7 +113,7 @@ biome_lib:register_generate_plant({ abstract_dryplants.grow_juncus ) -- at dunes/beach -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { --"default:dirt_with_grass", --"default:desert_sand", diff --git a/mods/plantlife_modpack/dryplants/meadowvariation.lua b/mods/plantlife_modpack/dryplants/meadowvariation.lua index 9a3c3bc0..d11d7da9 100644 --- a/mods/plantlife_modpack/dryplants/meadowvariation.lua +++ b/mods/plantlife_modpack/dryplants/meadowvariation.lua @@ -12,7 +12,7 @@ abstract_dryplants.grow_grass_variation = function(pos) minetest.swap_node(right_here, {name="dryplants:grass_short"}) end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", }, diff --git a/mods/plantlife_modpack/dryplants/moregrass.lua b/mods/plantlife_modpack/dryplants/moregrass.lua index b8d5f829..e953c270 100644 --- a/mods/plantlife_modpack/dryplants/moregrass.lua +++ b/mods/plantlife_modpack/dryplants/moregrass.lua @@ -7,26 +7,24 @@ -- Looked at code from: default ----------------------------------------------------------------------------------------------- -abstract_dryplants.grow_grass = function(pos) - local right_here = {x=pos.x, y=pos.y+1, z=pos.z} - local grass_size = math.random(1,5) - if minetest.get_node(right_here).name == "air" -- instead of check_air = true, - or minetest.get_node(right_here).name == "default:junglegrass" then - minetest.swap_node(right_here, {name="default:grass_"..grass_size}) - end -end - -biome_lib:register_generate_plant({ - surface = { - "default:dirt_with_grass", - "stoneage:grass_with_silex", - "sumpf:peat", - "sumpf:sumpf" +biome_lib.register_on_generate( + { + surface = { + "default:dirt_with_grass", + "stoneage:grass_with_silex", + "sumpf:peat", + "sumpf:sumpf" + }, + max_count = TALL_GRASS_PER_MAPBLOCK, + rarity = 101 - TALL_GRASS_RARITY, + min_elevation = 1, -- above sea level + plantlife_limit = -0.9, + check_air = true, }, - max_count = TALL_GRASS_PER_MAPBLOCK, - rarity = 101 - TALL_GRASS_RARITY, - min_elevation = 1, -- above sea level - plantlife_limit = -0.9, - }, - abstract_dryplants.grow_grass + { "default:grass_1", + "default:grass_2", + "default:grass_3", + "default:grass_4", + "default:grass_5" + } ) diff --git a/mods/plantlife_modpack/dryplants/reedmace.lua b/mods/plantlife_modpack/dryplants/reedmace.lua index 49a10224..0ab5a905 100644 --- a/mods/plantlife_modpack/dryplants/reedmace.lua +++ b/mods/plantlife_modpack/dryplants/reedmace.lua @@ -327,7 +327,7 @@ minetest.register_entity("dryplants:reedmace_water_entity",{ ----------------------------------------------------------------------------------------------- -- SPAWN REEDMACE ----------------------------------------------------------------------------------------------- ---[[biome_lib:spawn_on_surfaces({ +--[[biome_lib.register_active_spawner({ spawn_delay = 1200, spawn_plants = {"dryplants:reedmace_sapling"}, spawn_chance = 400, @@ -348,7 +348,7 @@ minetest.register_entity("dryplants:reedmace_water_entity",{ -- GENERATE REEDMACE ----------------------------------------------------------------------------------------------- -- near water or swamp -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "default:desert_sand", @@ -369,7 +369,7 @@ biome_lib:register_generate_plant({ abstract_dryplants.grow_reedmace ) -- in water -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt", "default:dirt_with_grass", @@ -392,7 +392,7 @@ biome_lib:register_generate_plant({ abstract_dryplants.grow_reedmace_water ) -- for oases & tropical beaches & tropical swamps -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:sand", "sumpf:sumpf" diff --git a/mods/plantlife_modpack/ferns/fern.lua b/mods/plantlife_modpack/ferns/fern.lua index 2c5278f4..f29e459d 100644 --- a/mods/plantlife_modpack/ferns/fern.lua +++ b/mods/plantlife_modpack/ferns/fern.lua @@ -87,7 +87,7 @@ end ----------------------------------------------------------------------------------------------- if abstract_ferns.config.lady_ferns_near_tree == true then - biome_lib:register_generate_plant({ -- near trees (woodlands) + biome_lib.register_on_generate({ -- near trees (woodlands) surface = { "default:dirt_with_grass", "default:mossycobble", @@ -116,7 +116,7 @@ if abstract_ferns.config.lady_ferns_near_tree == true then end if abstract_ferns.config.lady_ferns_near_rock == true then - biome_lib:register_generate_plant({ -- near stone (mountains) + biome_lib.register_on_generate({ -- near stone (mountains) surface = { "default:dirt_with_grass", "default:mossycobble", @@ -143,7 +143,7 @@ if abstract_ferns.config.lady_ferns_near_rock == true then end if abstract_ferns.config.lady_ferns_near_ores == true then -- this one causes a huge fps drop - biome_lib:register_generate_plant({ -- near ores (potential mining sites) + biome_lib.register_on_generate({ -- near ores (potential mining sites) surface = { "default:dirt_with_grass", "default:mossycobble", @@ -183,7 +183,7 @@ if abstract_ferns.config.lady_ferns_near_ores == true then -- this one causes a end if abstract_ferns.config.lady_ferns_in_groups == true then -- this one is meant as a replacement of Ferns_near_Ores - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "default:mossycobble", diff --git a/mods/plantlife_modpack/ferns/gianttreefern.lua b/mods/plantlife_modpack/ferns/gianttreefern.lua index 28feb6a8..ec155df2 100644 --- a/mods/plantlife_modpack/ferns/gianttreefern.lua +++ b/mods/plantlife_modpack/ferns/gianttreefern.lua @@ -295,7 +295,7 @@ minetest.register_abm({ -- in jungles if abstract_ferns.config.enable_giant_treeferns_in_jungle == true then - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "default:dirt_with_rainforest_litter", -- minetest >= 0.4.16 @@ -321,7 +321,7 @@ end -- for oases & tropical beaches if abstract_ferns.config.enable_giant_treeferns_in_oases == true then - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:sand"--, --"default:desert_sand" diff --git a/mods/plantlife_modpack/ferns/horsetail.lua b/mods/plantlife_modpack/ferns/horsetail.lua index b41f811d..3fefb045 100644 --- a/mods/plantlife_modpack/ferns/horsetail.lua +++ b/mods/plantlife_modpack/ferns/horsetail.lua @@ -75,7 +75,7 @@ create_nodes() -- Spawning ----------------------------------------------------------------------------------------------- if abstract_ferns.config.enable_horsetails_spawning == true then - biome_lib:spawn_on_surfaces({ + biome_lib.register_active_spawner({ spawn_delay = 1200, spawn_plants = node_names, spawn_chance = 400, @@ -104,7 +104,7 @@ end ----------------------------------------------------------------------------------------------- if abstract_ferns.config.enable_horsetails_on_grass == true then - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "default:dirt_with_coniferous_litter", -- minetest >= 0.5 @@ -137,7 +137,7 @@ if abstract_ferns.config.enable_horsetails_on_grass == true then end if abstract_ferns.config.enable_horsetails_on_stones == true then - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:gravel", -- roots go deep "default:mossycobble", diff --git a/mods/plantlife_modpack/ferns/treefern.lua b/mods/plantlife_modpack/ferns/treefern.lua index 7b5aafcf..361417c1 100644 --- a/mods/plantlife_modpack/ferns/treefern.lua +++ b/mods/plantlife_modpack/ferns/treefern.lua @@ -181,7 +181,7 @@ minetest.register_abm({ -- in jungles if abstract_ferns.config.enable_treeferns_in_jungle == true then - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "default:dirt_with_rainforest_litter", -- minetest >= 0.4.16 @@ -210,7 +210,7 @@ end -- for oases & tropical beaches if abstract_ferns.config.enable_treeferns_in_oases == true then - biome_lib:register_generate_plant({ + biome_lib.register_on_generate({ surface = { "default:sand"--, --"default:desert_sand" diff --git a/mods/plantlife_modpack/flowers_plus/init.lua b/mods/plantlife_modpack/flowers_plus/init.lua index 11393ef1..f1ad1d61 100644 --- a/mods/plantlife_modpack/flowers_plus/init.lua +++ b/mods/plantlife_modpack/flowers_plus/init.lua @@ -78,16 +78,16 @@ for i in ipairs(lilies_list) do local above_node = minetest.get_node(pt.above) local top_node = minetest.get_node(top_pos) - if biome_lib:get_nodedef_field(under_node.name, "buildable_to") then + if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then if under_node.name ~= "default:water_source" then place_pos = pt.under elseif top_node.name ~= "default:water_source" - and biome_lib:get_nodedef_field(top_node.name, "buildable_to") then + and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then place_pos = top_pos else return end - elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then + elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then place_pos = pt.above end @@ -178,18 +178,19 @@ for i in ipairs(algae_list) do local above_node = minetest.get_node(pt.above) local top_node = minetest.get_node(top_pos) - if biome_lib:get_nodedef_field(under_node.name, "buildable_to") then + if biome_lib.get_nodedef_field(under_node.name, "buildable_to") then if under_node.name ~= "default:water_source" then place_pos = pt.under elseif top_node.name ~= "default:water_source" - and biome_lib:get_nodedef_field(top_node.name, "buildable_to") then + and biome_lib.get_nodedef_field(top_node.name, "buildable_to") then place_pos = top_pos else return end - elseif biome_lib:get_nodedef_field(above_node.name, "buildable_to") then + elseif biome_lib.get_nodedef_field(above_node.name, "buildable_to") then place_pos = pt.above end + if not place_pos then return end -- something went wrong :P if not minetest.is_protected(place_pos, placer:get_player_name()) then @@ -243,7 +244,7 @@ minetest.register_node(":flowers:sunflower", { walkable = false, buildable_to = true, is_ground_content = true, - groups = { dig_immediate=3, flora=1, flammable=3 }, + groups = { dig_immediate=3, flora=1, flammable=3, attached_node=1 }, sounds = default.node_sound_leaves_defaults(), selection_box = box, collision_box = box, @@ -299,7 +300,7 @@ flowers_plus.grow_waterlily = function(pos) end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:water_source"}, max_count = lilies_max_count, rarity = lilies_rarity, @@ -321,7 +322,7 @@ flowers_plus.grow_seaweed = function(pos) minetest.swap_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)}) end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:water_source"}, max_count = seaweed_max_count, rarity = seaweed_rarity, @@ -338,7 +339,7 @@ biome_lib:register_generate_plant({ -- seaweed at beaches -- MM: not satisfied with it, but IMHO some beaches should have some algae -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:water_source"}, max_count = seaweed_max_count, rarity = seaweed_rarity, @@ -354,7 +355,7 @@ biome_lib:register_generate_plant({ }, flowers_plus.grow_seaweed ) -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:sand"}, max_count = seaweed_max_count*2, rarity = seaweed_rarity/2, @@ -371,7 +372,7 @@ biome_lib:register_generate_plant({ flowers_plus.grow_seaweed ) -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:dirt_with_grass"}, avoid_nodes = { "flowers:sunflower" }, max_count = sunflowers_max_count, @@ -386,7 +387,7 @@ biome_lib:register_generate_plant({ -- spawn ABM registrations -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = SPAWN_DELAY/2, spawn_plants = { "flowers:waterlily", @@ -408,7 +409,7 @@ biome_lib:spawn_on_surfaces({ random_facedir = {0,3} }) -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = SPAWN_DELAY*2, spawn_plants = {"flowers:seaweed"}, spawn_chance = SPAWN_CHANCE*2, @@ -421,7 +422,7 @@ biome_lib:spawn_on_surfaces({ facedir = 1 }) -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = SPAWN_DELAY*2, spawn_plants = {"flowers:seaweed"}, spawn_chance = SPAWN_CHANCE*2, @@ -435,7 +436,7 @@ biome_lib:spawn_on_surfaces({ facedir = 1 }) -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = SPAWN_DELAY*2, spawn_plants = {"flowers:seaweed"}, spawn_chance = SPAWN_CHANCE*2, @@ -449,7 +450,7 @@ biome_lib:spawn_on_surfaces({ facedir = 1 }) -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = SPAWN_DELAY*2, spawn_plants = {"flowers:sunflower"}, spawn_chance = SPAWN_CHANCE*2, diff --git a/mods/plantlife_modpack/molehills/init.lua b/mods/plantlife_modpack/molehills/init.lua index 2f53f40f..481c866c 100644 --- a/mods/plantlife_modpack/molehills/init.lua +++ b/mods/plantlife_modpack/molehills/init.lua @@ -62,7 +62,7 @@ abstract_molehills.place_molehill = function(pos) end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:dirt_with_grass"}, max_count = Molehills_Max_Count, rarity = Molehills_Rarity, diff --git a/mods/plantlife_modpack/poisonivy/init.lua b/mods/plantlife_modpack/poisonivy/init.lua index ae302a5a..0c914fa0 100644 --- a/mods/plantlife_modpack/poisonivy/init.lua +++ b/mods/plantlife_modpack/poisonivy/init.lua @@ -70,7 +70,7 @@ minetest.register_node('poisonivy:climbing', { buildable_to = true, }) -biome_lib:spawn_on_surfaces({ +biome_lib.register_active_spawner({ spawn_delay = SPAWN_DELAY, spawn_plants = {"poisonivy:seedling"}, avoid_radius = 10, @@ -83,7 +83,7 @@ biome_lib:spawn_on_surfaces({ verticals_list = walls_list }) -biome_lib:grow_plants({ +biome_lib.update_plant({ grow_delay = SPAWN_DELAY, grow_chance = GROW_CHANCE, grow_plant = "poisonivy:seedling", @@ -91,7 +91,7 @@ biome_lib:grow_plants({ grow_nodes = {"default:dirt_with_grass"} }) -biome_lib:grow_plants({ +biome_lib.update_plant({ grow_delay = GROW_DELAY, grow_chance = GROW_CHANCE*2, grow_plant = "poisonivy:climbing", diff --git a/mods/plantlife_modpack/trunks/generating.lua b/mods/plantlife_modpack/trunks/generating.lua index 699baf97..5decb7ca 100644 --- a/mods/plantlife_modpack/trunks/generating.lua +++ b/mods/plantlife_modpack/trunks/generating.lua @@ -4,28 +4,44 @@ -- TWiGS ----------------------------------------------------------------------------------------------- +local fakenode = { + name = "default:stone", -- could be anything that's guaranteed to exist at mapgen time, and isn't buildable_to + param1 = 0, + param2 = 0 +} + abstract_trunks.place_twig = function(pos) - local twig_size = math.random(1,27) + local twig_size = math.random(1,27) - local right_here = {x=pos.x , y=pos.y+1, z=pos.z } - local north = {x=pos.x , y=pos.y+1, z=pos.z+1} - local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1} - local east = {x=pos.x+1, y=pos.y+1, z=pos.z } - local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1} - local south = {x=pos.x , y=pos.y+1, z=pos.z-1} - local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1} - local west = {x=pos.x-1, y=pos.y+1, z=pos.z } - local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1} + local right_here = {x=pos.x , y=pos.y+1, z=pos.z } + local north = {x=pos.x , y=pos.y+1, z=pos.z+1} + local north_east = {x=pos.x+1, y=pos.y+1, z=pos.z+1} + local east = {x=pos.x+1, y=pos.y+1, z=pos.z } + local south_east = {x=pos.x+1, y=pos.y+1, z=pos.z-1} + local south = {x=pos.x , y=pos.y+1, z=pos.z-1} + local south_west = {x=pos.x-1, y=pos.y+1, z=pos.z-1} + local west = {x=pos.x-1, y=pos.y+1, z=pos.z } + local north_west = {x=pos.x-1, y=pos.y+1, z=pos.z+1} + + local node_here = minetest.get_node(right_here) + local node_north = minetest.get_node(north) + local node_n_e = minetest.get_node(north_east) + local node_east = minetest.get_node(east) + local node_s_e = minetest.get_node(south_east) + local node_south = minetest.get_node(south) + local node_s_w = minetest.get_node(south_west) + local node_west = minetest.get_node(west) + local node_n_w = minetest.get_node(north_west) + + node_north = minetest.registered_nodes[node_north.name] and node_north or fakenode + node_n_e = minetest.registered_nodes[node_n_e.name] and node_n_e or fakenode + node_east = minetest.registered_nodes[node_east.name] and node_east or fakenode + node_s_e = minetest.registered_nodes[node_s_e.name] and node_s_e or fakenode + node_south = minetest.registered_nodes[node_south.name] and node_south or fakenode + node_s_w = minetest.registered_nodes[node_s_w.name] and node_s_w or fakenode + node_west = minetest.registered_nodes[node_west.name] and node_west or fakenode + node_n_w = minetest.registered_nodes[node_n_w.name] and node_n_w or fakenode - local node_here = minetest.get_node(right_here) - local node_north = minetest.get_node(north) - local node_n_e = minetest.get_node(north_east) - local node_east = minetest.get_node(east) - local node_s_e = minetest.get_node(south_east) - local node_south = minetest.get_node(south) - local node_s_w = minetest.get_node(south_west) - local node_west = minetest.get_node(west) - local node_n_w = minetest.get_node(north_west) -- small twigs if twig_size <= 16 then minetest.swap_node(right_here, {name="trunks:twig_"..math.random(1,4), param2=math.random(0,3)}) @@ -153,7 +169,7 @@ abstract_trunks.place_twig = function(pos) end if Twigs_on_ground == true then -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:dirt_with_grass"}, max_count = Twigs_on_ground_Max_Count, rarity = Twigs_on_ground_Rarity, @@ -170,7 +186,7 @@ biome_lib:register_generate_plant({ end if Twigs_on_water == true then -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:water_source"}, max_count = Twigs_on_water_Max_Count, rarity = Twigs_on_water_Rarity, @@ -332,7 +348,7 @@ abstract_trunks.place_trunk = function(pos) end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:dirt_with_grass"}, max_count = Trunks_Max_Count, -- 320, rarity = Trunks_Rarity, -- 99, @@ -356,16 +372,17 @@ if Moss_on_ground == true then abstract_trunks.grow_moss_on_ground = function(pos) local on_ground = {x=pos.x, y=pos.y+1, z=pos.z} local moss_type = math.random(1,21) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3)}) + minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1}) else - minetest.swap_node(on_ground, {name="trunks:moss", param2=math.random(0,3)}) + minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1}) end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"default:dirt_with_grass"}, max_count = Moss_on_ground_Max_Count, rarity = Moss_on_ground_Rarity, @@ -406,50 +423,55 @@ abstract_trunks.grow_moss_on_trunk = function(pos) local node_under = minetest.get_node(undrneath) --if minetest.get_item_group(node_under.name, "tree") < 1 then - local moss_type = math.random(1,41) - if minetest.registered_nodes[node_here.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_here.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(on_ground, {name="trunks:moss_fungus", param2=math.random(0,3) --[[1]]}) + minetest.swap_node(on_ground, {name="trunks:moss_with_fungus_"..rot, param2=1}) elseif moss_type < 22 then - minetest.swap_node(on_ground, {name="trunks:moss", param2=math.random(0,3) --[[1]]}) + minetest.swap_node(on_ground, {name="trunks:moss_plain_"..rot, param2=1}) end end - local moss_type = math.random(1,31) -- cliche of more moss at north - if minetest.registered_nodes[node_north.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_north.name].buildable_to then + local moss_type = math.random(1,31) -- cliche of more moss at north + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_n, {name="trunks:moss_fungus", param2=math.random(4,7)}) -- 5,4,6,7 + minetest.swap_node(at_side_n, {name="trunks:moss_with_fungus_"..rot, param2=5}) elseif moss_type < 22 then - minetest.swap_node(at_side_n, {name="trunks:moss", param2=math.random(4,7)}) + minetest.swap_node(at_side_n, {name="trunks:moss_plain_"..rot, param2=5}) end end - local moss_type = math.random(1,41) - if minetest.registered_nodes[node_east.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_east.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_e, {name="trunks:moss_fungus", param2=math.random(12,15)}) + minetest.swap_node(at_side_e, {name="trunks:moss_with_fungus_"..rot, param2=3}) elseif moss_type < 22 then - minetest.swap_node(at_side_e, {name="trunks:moss", param2=math.random(12,15)}) + minetest.swap_node(at_side_e, {name="trunks:moss_plain_"..rot, param2=3}) end end - local moss_type = math.random(1,41) - if minetest.registered_nodes[node_south.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_south.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_s, {name="trunks:moss_fungus", param2=math.random(8,11)}) + minetest.swap_node(at_side_s, {name="trunks:moss_with_fungus_"..rot, param2=4}) elseif moss_type < 22 then - minetest.swap_node(at_side_s, {name="trunks:moss", param2=math.random(8,11)}) + minetest.swap_node(at_side_s, {name="trunks:moss_plain_"..rot, param2=4}) end end - local moss_type = math.random(1,41) - if minetest.registered_nodes[node_west.name].buildable_to then -- instead of check_air = true, + if minetest.registered_nodes[node_west.name].buildable_to then + local moss_type = math.random(1,41) + local rot = math.random(0,3) if moss_type == 1 then - minetest.swap_node(at_side_w, {name="trunks:moss_fungus", param2=math.random(16,19)}) + minetest.swap_node(at_side_w, {name="trunks:moss_with_fungus_"..rot, param2=2}) elseif moss_type < 22 then - minetest.swap_node(at_side_w, {name="trunks:moss", param2=math.random(16,19)}) + minetest.swap_node(at_side_w, {name="trunks:moss_plain_"..rot, param2=2}) end end --end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:tree", "default:jungletree", @@ -526,7 +548,7 @@ abstract_trunks.grow_roots = function(pos) end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = {"group:tree"}, max_count = 1000, rarity = 1, diff --git a/mods/plantlife_modpack/trunks/nodes.lua b/mods/plantlife_modpack/trunks/nodes.lua index f60281bd..10c1c6eb 100644 --- a/mods/plantlife_modpack/trunks/nodes.lua +++ b/mods/plantlife_modpack/trunks/nodes.lua @@ -65,42 +65,65 @@ end ----------------------------------------------------------------------------------------------- -- MoSS ----------------------------------------------------------------------------------------------- -local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32--[[<-flickers if smaller]], 1/2} -minetest.register_node("trunks:moss", { - description = S("Moss"), - drawtype = "nodebox",--"signlike", - tiles = {"trunks_moss.png"}, - inventory_image = "trunks_moss.png", - wield_image = "trunks_moss.png", - paramtype = "light", - paramtype2 = "facedir",--"wallmounted", - sunlight_propagates = true, - walkable = false, - node_box = {type = "fixed", fixed = flat_moss}, - selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"}, - groups = {snappy = 3, flammable = 3 }, - sounds = default.node_sound_leaves_defaults(), -}) +-- wall_top = {-0.4375, 0.4375, -0.3125, 0.4375, 0.5, 0.3125}, +-- wall_bottom = {-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125}, +-- wall_side = {-0.5, -0.3125, -0.4375, -0.4375, 0.3125, 0.4375}, ------------------------------------------------------------------------------------------------ --- MoSS & FuNGuS ------------------------------------------------------------------------------------------------ -minetest.register_node("trunks:moss_fungus", { - description = S("Moss with Fungus"), - drawtype = "nodebox",--"signlike", - tiles = {"trunks_moss_fungus.png"}, - inventory_image = "trunks_moss_fungus.png", - wield_image = "trunks_moss_fungus.png", - paramtype = "light", - paramtype2 = "facedir",--"wallmounted", - sunlight_propagates = true, - walkable = false, - node_box = {type = "fixed", fixed = flat_moss}, - selection_box = {type = "fixed", fixed = flat_stick},--{type = "wallmounted"}, - groups = {snappy = 3, flammable = 3 }, - sounds = default.node_sound_leaves_defaults(), -}) +-- was local flat_moss = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2} + + +local cbox = { + type = "wallmounted", + wall_top = {-1/2, 1/2, -1/2, 1/2, 15/32, 1/2}, + wall_bottom = {-1/2, -1/2, -1/2, 1/2, -15/32, 1/2}, + wall_side = {-1/2, -1/2, -1/2, -15/32, 1/2, 1/2} +} + +for r = 0, 3 do + local xform = "" + if r > 0 then xform = "^[transformR"..r*90 end + + minetest.register_node("trunks:moss_plain_"..r, { + description = S("Moss"), + drawtype = "nodebox", + tiles = {"trunks_moss.png"..xform}, + inventory_image = "trunks_moss.png", + wield_image = "trunks_moss.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + node_box = cbox, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r}, + sounds = default.node_sound_leaves_defaults(), + drop = "trunks:moss_plain_0", + }) + + ----------------------------------------------------------------------------------------------- + -- MoSS & FuNGuS + ----------------------------------------------------------------------------------------------- + minetest.register_node("trunks:moss_with_fungus_"..r, { + description = S("Moss with Fungus"), + drawtype = "nodebox", + tiles = {"trunks_moss_fungus.png"..xform}, + inventory_image = "trunks_moss_fungus.png", + wield_image = "trunks_moss_fungus.png", + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + node_box = cbox, + buildable_to = true, + groups = {snappy = 3, flammable = 3, attached_node=1, not_in_creative_inventory = r}, + sounds = default.node_sound_leaves_defaults(), + drop = "trunks:moss_with_fungus_0", + }) +end + +minetest.register_alias("trunks:moss_plain", "trunks:moss_plain_0") +minetest.register_alias("trunks:moss_with_fungus", "trunks:moss_with_fungus_0") ----------------------------------------------------------------------------------------------- -- TWiGS BLoCK @@ -361,7 +384,8 @@ for i in pairs(TRuNKS) do snappy=1, choppy=2, oddly_breakable_by_hand=1, - flammable=2--, + flammable=2, + attached_node = 1 --not_in_creative_inventory=1 -- atm in inv for testing }, --drop = "trunks:twig_1", -- not sure about this yet @@ -376,3 +400,26 @@ end end minetest.register_alias("trunks:pine_trunkroot", "trunks:pine_treeroot") + +-- convert moss to wallmounted mode so that attached_node works properly. + +local fdirtowall = { + [0] = 1, + [1] = 5, + [2] = 4, + [3] = 3, + [4] = 2, +} + +minetest.register_lbm({ + name = "trunks:convert_moss_wallmounted", + label = "Convert moss to wallmounted mode", + run_at_every_load = true, + nodenames = {"trunks:moss", "trunks:moss_fungus"}, + action = function(pos, node) + local basedir = math.floor(node.param2 / 4) + local rot = node.param2 % 4 + local newname = node.name == "trunks:moss_fungus" and "trunks:moss_with_fungus" or "trunks:moss_plain" + minetest.set_node(pos, {name = newname.."_"..rot, param2 = fdirtowall[basedir] }) + end +}) diff --git a/mods/plantlife_modpack/vines/init.lua b/mods/plantlife_modpack/vines/init.lua index cfb9833a..38c3901d 100644 --- a/mods/plantlife_modpack/vines/init.lua +++ b/mods/plantlife_modpack/vines/init.lua @@ -133,7 +133,7 @@ vines.register_vine = function( name, defs, biome ) end, }) - biome_lib:spawn_on_surfaces(biome) + biome_lib.register_active_spawner(biome) end -- ALIASES diff --git a/mods/plantlife_modpack/woodsoils/generating.lua b/mods/plantlife_modpack/woodsoils/generating.lua index a044a9b2..c250f2ac 100644 --- a/mods/plantlife_modpack/woodsoils/generating.lua +++ b/mods/plantlife_modpack/woodsoils/generating.lua @@ -73,7 +73,7 @@ abstract_woodsoils.place_soil = function(pos) end end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "group:tree", "ferns:fern_03", @@ -94,7 +94,7 @@ biome_lib:register_generate_plant({ "abstract_woodsoils.place_soil" ) -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "moretrees:apple_tree_sapling_ongen", "moretrees:beech_sapling_ongen", diff --git a/mods/plantlife_modpack/youngtrees/init.lua b/mods/plantlife_modpack/youngtrees/init.lua index 50d11ff1..61c285f4 100644 --- a/mods/plantlife_modpack/youngtrees/init.lua +++ b/mods/plantlife_modpack/youngtrees/init.lua @@ -40,7 +40,7 @@ minetest.register_node("youngtrees:youngtree2_middle",{ {-0.500000,0.125000,-0.500000,0.500000,0.500000,0.500000}, --NodeBox 3 } }, - groups = {snappy=3,flammable=2}, + groups = {snappy=3,flammable=2,attached_node=1}, sounds = default.node_sound_leaves_defaults(), drop = 'trunks:twig_1' }) @@ -58,7 +58,7 @@ minetest.register_node("youngtrees:youngtree_top", { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, - groups = {snappy=3,flammable=2}, + groups = {snappy=3,flammable=2,attached_node=1}, sounds = default.node_sound_leaves_defaults(), drop = 'trunks:twig_1' }) @@ -77,7 +77,7 @@ minetest.register_node("youngtrees:youngtree_middle", { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, - groups = {snappy=3,flammable=2}, + groups = {snappy=3,flammable=2,attached_node=1}, sounds = default.node_sound_leaves_defaults(), drop = 'trunks:twig_1' }) @@ -97,7 +97,7 @@ minetest.register_node("youngtrees:youngtree_bottom", { type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} }, - groups = {snappy=3,flammable=2}, + groups = {snappy=3,flammable=2,attached_node=1}, sounds = default.node_sound_leaves_defaults(), drop = 'trunks:twig_1' }) @@ -133,7 +133,7 @@ abstract_youngtrees.grow_youngtree_node = function(pos, height) end -biome_lib:register_generate_plant({ +biome_lib.register_on_generate({ surface = { "default:dirt_with_grass", "stoneage:grass_with_silex", diff --git a/mods/playerplus/README.md b/mods/playerplus/README.md index c4cfe60d..4bfdcbf5 100644 --- a/mods/playerplus/README.md +++ b/mods/playerplus/README.md @@ -20,6 +20,7 @@ https://forum.minetest.net/viewtopic.php?t=10090&p=153667 - 1.2 - Added POVA support, tweaked code slightly - 1.3 - Add setting under Advanced to enable older sneak glitch movement - 1.4 - Add minetest 5.0 check for knockback y_offset +- 1.5 - Use Minetext 5.x functions for proper player knockback API: @@ -27,7 +28,7 @@ Every second the mod checks which node the player is standing on, which node is at foot and head level and stores inside a global table to be used by mods: - playerplus[name].nod_stand -- playerplus[name].nod_foot +- playerplus[name].nod_feet - playerplus[name].nod_head diff --git a/mods/playerplus/init.lua b/mods/playerplus/init.lua index 7801e865..43eef596 100644 --- a/mods/playerplus/init.lua +++ b/mods/playerplus/init.lua @@ -49,7 +49,7 @@ minetest.register_globalstep(function(dtime) time = 0 -- define locals outside loop - local name, pos, ndef, def, nslow, nfast + local name, pos, ndef, def, nslow, nfast, prop -- get list of players local players = minetest.get_connected_players() @@ -66,8 +66,8 @@ if name and playerplus[name] then pos = player:get_pos() -- what is around me? - pos.y = pos.y - 0.1 -- standing on - playerplus[name].nod_stand = node_ok(pos) + playerplus[name].nod_stand = node_ok({ + x = pos.x, y = pos.y - 0.1, z = pos.z}) -- Does the node below me have an on_walk_over function set? ndef = minetest.registered_nodes[playerplus[name].nod_stand] @@ -75,13 +75,15 @@ if name and playerplus[name] then ndef.on_walk_over(pos, ndef, player) end - pos.y = pos.y + 1.5 -- head level - playerplus[name].nod_head = node_ok(pos) + prop = player:get_properties() - pos.y = pos.y - 1.2 -- feet level - playerplus[name].nod_feet = node_ok(pos) + -- node at eye level + playerplus[name].nod_head = node_ok({ + x = pos.x, y = pos.y + prop.eye_height, z = pos.z}) - pos.y = pos.y - 0.2 -- reset pos + -- node at foot level + playerplus[name].nod_feet = node_ok({ + x = pos.x, y = pos.y + 0.2, z = pos.z}) -- get player physics def = player:get_physics_override() @@ -164,7 +166,7 @@ if name and playerplus[name] then -- set player physics if not monoids and not pova_mod then - --player:set_physics_override(def.speed, def.jump, def.gravity) + player:set_physics_override({ speed = def.speed, jump = def.jump, @@ -247,29 +249,19 @@ minetest.register_privilege("no_knockback", { -- is player knock-back effect enabled? if minetest.settings:get_bool("player_knockback") == true then -minetest.register_entity("playerplus:temp", { - physical = true, - collisionbox = {-0.20, -1, -0.20, 0.20, 1, 0.20}, - visual_size = {x = 0, y = 0}, - visual = "sprite", - textures = {"trans.png"}, - stepheight = 0.6, - - on_step = function(self, dtime) - - self.timer = (self.timer or 0) + dtime - - if self.timer > 1 then - self.object:remove() - end - end -}) - - -- player knock-back function local punchy = function( player, hitter, time_from_last_punch, tool_capabilities, dir, damage) + if not dir then return end + + -- check if player has 'no_knockback' privelage + local privs = minetest.get_player_privs(player:get_player_name()) + + if privs["no_knockback"] then + return + end + local damage = 0 -- get tool damage @@ -289,7 +281,6 @@ local punchy = function( end damage = damage + (tool_capabilities.damage_groups[group] or 0) * tmp - end -- check for knockback value @@ -300,50 +291,16 @@ local punchy = function( end -- END tool damage --- print ("---", player:get_player_name(), damage) + local kb = math.min(32, damage * 2) - if not dir then return end +-- print ("---", player:get_player_name(), damage, kb) - -- check if player has 'no_knockback' privelage - local privs = minetest.get_player_privs(player:get_player_name()) - - if privs["no_knockback"] then - return - end - - local y_offset = mt50 and -10 or 0 - local vel = damage * 2 - local pos = player:get_pos() ; pos.y = pos.y + 1.0 - local ent = minetest.add_entity(pos, "playerplus:temp") - local obj = ent:get_luaentity() - local yaw = player:get_look_horizontal() or 0 ; yaw = -yaw * (180 / 3.14) -- pi - - if obj and not player:get_attach() then - - player:set_attach(ent, "", {x = 0, y = y_offset, z = 0}, {x = 0, y = yaw, z = 0}) - - ent:set_velocity({ - x = dir.x * vel, - y = -1, - z = dir.z * vel - }) - - ent:set_acceleration({ - x = dir.x * -1, - y = 0, - z = dir.z * -1 - }) - - minetest.after(0.25, function() - - player:set_detach() - - ent:remove() - end) - - else - ent:remove() - end + -- knock back player + player:add_velocity({ + x = dir.x * kb, + y = -1, + z = dir.z * kb + }) end minetest.register_on_punchplayer(punchy) diff --git a/mods/protector/admin.lua b/mods/protector/admin.lua index ad1afce2..2a4f1a53 100644 --- a/mods/protector/admin.lua +++ b/mods/protector/admin.lua @@ -69,7 +69,7 @@ minetest.register_chatcommand("protector_replace", { minetest.register_abm({ nodenames = {"protector:protect", "protector:protect2", "protector:protect_hidden"}, - interval = 8, + interval = 6, chance = 1, catch_up = false, action = function(pos, node) diff --git a/mods/protector/doors_chest.lua b/mods/protector/doors_chest.lua index 46a385a7..1d7819e2 100644 --- a/mods/protector/doors_chest.lua +++ b/mods/protector/doors_chest.lua @@ -77,7 +77,7 @@ function register_door(name, def) minetest.get_meta(pt2):set_int("right", 1) end - if not minetest.setting_getbool("creative_mode") then + if not minetest.settings:get_bool("creative_mode") then itemstack:take_item() end return itemstack @@ -150,6 +150,7 @@ function register_door(name, def) tiles = {tb[2], tb[2], tb[2], tb[2], tb[1], tb[1].."^[transformfx"}, paramtype = "light", paramtype2 = "facedir", + use_texture_alpha = "clip", is_ground_content = false, drop = name, drawtype = "nodebox", @@ -187,6 +188,7 @@ function register_door(name, def) tiles = {tt[2], tt[2], tt[2], tt[2], tt[1], tt[1].."^[transformfx"}, paramtype = "light", paramtype2 = "facedir", + use_texture_alpha = "clip", is_ground_content = false, drop = "", drawtype = "nodebox", @@ -224,6 +226,7 @@ function register_door(name, def) tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]}, paramtype = "light", paramtype2 = "facedir", + use_texture_alpha = "clip", is_ground_content = false, drop = name, drawtype = "nodebox", @@ -261,6 +264,7 @@ function register_door(name, def) tiles = {tt[2], tt[2], tt[2], tt[2], tt[1].."^[transformfx", tt[1]}, paramtype = "light", paramtype2 = "facedir", + use_texture_alpha = "clip", is_ground_content = false, drop = "", drawtype = "nodebox", @@ -404,6 +408,7 @@ function register_trapdoor(name, def) def.drawtype = "nodebox" def.paramtype = "light" def.paramtype2 = "facedir" + def.use_texture_alpha = "clip" def.is_ground_content = false local def_opened = table.copy(def) @@ -539,7 +544,7 @@ minetest.register_node("protector:chest", { local inv = meta:get_inventory() meta:set_string("infotext", S("Protected Chest")) - meta:set_string("name", "") + meta:set_string("name", S("Protected Chest")) inv:set_size("main", 8 * 4) end, @@ -570,7 +575,8 @@ minetest.register_node("protector:chest", { minetest.pos_to_string(pos)) end, - on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + on_metadata_inventory_move = function( + pos, from_list, from_index, to_list, to_index, count, player) minetest.log("action", player:get_player_name() .. " moves stuff inside protected chest at " .. @@ -595,7 +601,8 @@ minetest.register_node("protector:chest", { return stack:get_count() end, - allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + allow_metadata_inventory_move = function( + pos, from_list, from_index, to_list, to_index, count, player) if minetest.is_protected(pos, player:get_player_name()) then return 0 @@ -618,14 +625,17 @@ minetest.register_node("protector:chest", { local spos = pos.x .. "," .. pos.y .. "," ..pos.z local formspec = "size[8,9]" --- .. default.gui_bg --- .. default.gui_bg_img --- .. default.gui_slots .. "list[nodemeta:".. spos .. ";main;0,0.3;8,4;]" - .. "button[0,4.5;2,0.25;toup;" .. F(S("To Chest")) .. "]" - .. "field[2.3,4.8;4,0.25;chestname;;" + + .. "image_button[-0.01,4.26;1.05,0.8;protector_up_icon.png;protect_up;]" + .. "image_button[0.98,4.26;1.05,0.8;protector_down_icon.png;protect_down;]" + .. "tooltip[protect_up;" .. S("To Chest") .. "]" + .. "tooltip[protect_down;" .. S("To Inventory") .. "]" + + .. "field[2.3,4.8;4,0.25;protect_name;;" .. meta:get_string("name") .. "]" - .. "button[6,4.5;2,0.25;todn;" .. F(S("To Inventory")) .. "]" + .. "button[5.99,4.5;2.05,0.25;protect_rename;" .. S("Rename") .. "]" + .. "list[current_player;main;0,5;8,1;]" .. "list[current_player;main;0,6.08;8,3;8]" .. "listring[nodemeta:" .. spos .. ";main]" @@ -640,15 +650,39 @@ minetest.register_node("protector:chest", { on_blast = function() end, }) +-- Container transfer helper +local to_from = function(src, dst) + + local stack, item, leftover + local size = dst:get_size("main") + + for i = 1, size do + + stack = src:get_stack("main", i) + item = stack:get_name() + + if item ~= "" and dst:room_for_item("main", item) then + + leftover = dst:add_item("main", stack) + + if leftover and not leftover:is_empty() then + src:set_stack("main", i, leftover) + else + src:set_stack("main", i, nil) + end + end + end +end + -- Protected Chest formspec buttons minetest.register_on_player_receive_fields(function(player, formname, fields) - if string.sub(formname, 0, string.len("protector:chest_")) ~= "protector:chest_" then + if string.sub(formname, 0, 16) ~= "protector:chest_" then return end - local pos_s = string.sub(formname,string.len("protector:chest_") + 1) + local pos_s = string.sub(formname, 17) local pos = minetest.string_to_pos(pos_s) if minetest.is_protected(pos, player:get_player_name()) then @@ -658,53 +692,26 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local meta = minetest.get_meta(pos) ; if not meta then return end local chest_inv = meta:get_inventory() ; if not chest_inv then return end local player_inv = player:get_inventory() - local leftover - if fields.toup then + -- copy contents of player inventory to chest + if fields.protect_up then - -- copy contents of players inventory to chest - for i, v in ipairs(player_inv:get_list("main") or {}) do + to_from(player_inv, chest_inv) - if chest_inv:room_for_item("main", v) then + -- copy contents of chest to player inventory + elseif fields.protect_down then - leftover = chest_inv:add_item("main", v) + to_from(chest_inv, player_inv) - player_inv:remove_item("main", v) - - if leftover - and not leftover:is_empty() then - player_inv:add_item("main", v) - end - end - end - - elseif fields.todn then - - -- copy contents of chest to players inventory - for i, v in ipairs(chest_inv:get_list("main") or {}) do - - if player_inv:room_for_item("main", v) then - - leftover = player_inv:add_item("main", v) - - chest_inv:remove_item("main", v) - - if leftover - and not leftover:is_empty() then - chest_inv:add_item("main", v) - end - end - end - - elseif fields.chestname then + elseif fields.protect_name or fields.protect_rename then -- change chest infotext to display name - if fields.chestname ~= "" then + if fields.protect_name ~= "" then - meta:set_string("name", fields.chestname) - meta:set_string("infotext", - S("Protected Chest (@1)", fields.chestname)) + meta:set_string("name", fields.protect_name) + meta:set_string("infotext", fields.protect_name) else + meta:set_string("name", S("Protected Chest")) meta:set_string("infotext", S("Protected Chest")) end diff --git a/mods/protector/init.lua b/mods/protector/init.lua index d931f5f6..7044b740 100644 --- a/mods/protector/init.lua +++ b/mods/protector/init.lua @@ -5,7 +5,7 @@ default = default or { node_sound_wood_defaults = function(table) end, gui_bg = "", gui_bg_img = "", - gui_slots = "", + gui_slots = "" } -- Load support for intllib. @@ -177,10 +177,10 @@ local protector_formspec = function(meta) checkbox_faction = true end else - if factions.get_player_factions(meta:get_string("owner")) ~= nil then - if next(factions.get_player_faction(meta:get_string("owner"))) then - checkbox_faction = true - end + local player_factions = factions.get_player_factions(meta:get_string("owner")) + + if player_factions ~= nil and #player_factions >= 1 then + checkbox_faction = true end end end @@ -374,9 +374,9 @@ function minetest.is_protected(pos, digger) if protector_hurt > 0 and player:get_hp() > 0 then -- This delay fixes item duplication bug (thanks luk3yx) - minetest.after(0.1, function() + minetest.after(0.1, function(player) player:set_hp(player:get_hp() - protector_hurt) - end) + end, player) end -- flip player when protection violated @@ -578,6 +578,7 @@ minetest.register_node("protector:protect2", { inventory_image = "protector_logo.png", sounds = default.node_sound_stone_defaults(), groups = {dig_immediate = 2, unbreakable = 1}, + use_texture_alpha = "clip", paramtype = "light", paramtype2 = "wallmounted", legacy_wallmounted = true, @@ -650,15 +651,13 @@ minetest.register_node("protector:protect2", { -- recipes to switch between protectors minetest.register_craft({ - type = "shapeless", output = "protector:protect", - recipe = {"protector:protect2"} + recipe = {{"protector:protect2"}} }) minetest.register_craft({ - type = "shapeless", output = "protector:protect2", - recipe = {"protector:protect"} + recipe = {{"protector:protect"}} }) @@ -762,7 +761,7 @@ minetest.register_entity("protector:display", { local x = protector_radius minetest.register_node("protector:display_node", { tiles = {"protector_display.png"}, - use_texture_alpha = true, + use_texture_alpha = "clip", -- true, walkable = false, drawtype = "nodebox", node_box = { diff --git a/mods/protector/textures/license.txt b/mods/protector/textures/license.txt index 8798df4c..acf64235 100644 --- a/mods/protector/textures/license.txt +++ b/mods/protector/textures/license.txt @@ -28,3 +28,7 @@ following textures by TenPlus1 (CC BY-SA 3.0): protector_logo.png protector_display.png protector_overlay.png + +following textures by Kilbith (CC BY-SA 3.0): + protector_up_icon.png + protector_down_icon.png (both rotated) diff --git a/mods/protector/textures/protector_down_icon.png b/mods/protector/textures/protector_down_icon.png new file mode 100644 index 00000000..f1161a2f Binary files /dev/null and b/mods/protector/textures/protector_down_icon.png differ diff --git a/mods/protector/textures/protector_up_icon.png b/mods/protector/textures/protector_up_icon.png new file mode 100644 index 00000000..4c475929 Binary files /dev/null and b/mods/protector/textures/protector_up_icon.png differ diff --git a/mods/signs_lib/README.md b/mods/signs_lib/README.md index 7f8bb0a5..97c00625 100644 --- a/mods/signs_lib/README.md +++ b/mods/signs_lib/README.md @@ -22,7 +22,7 @@ That said, there are some basic text formatting options: Writing "^" followed by a letter "a" through "h" will produce double-wide versions of these arrows, in the same order. These wide arrows occupy 0x89 to 0x91 in the character set. -* A color may be specified in the sign text by using "#" followed by a single hexadcimal digit (0-9 or a-f). These colors come from the standard Linux/IRC/CGA color set, and are shown in the sign's formspec. Any color change will remain in effect until changed again, or until the next line break. Any number of color changes in any arbitrary arrangement is allowed. +* A color may be specified in the sign text by using "#" followed by a single hexadcimal digit (0-9 or a-f). These colors come from the standard Linux/IRC/CGA color set, and are shown in the sign's formspec. Any color change will remain in effect until changed again, or until the next line break. Any number of color changes in any arbitrary arrangement is allowed. To write "#" on a sign, write "##". * Most writable signs can display double-wide text by flipping a switch in the sign's formspec. diff --git a/mods/signs_lib/api.lua b/mods/signs_lib/api.lua index d2a06e2a..263f50b2 100644 --- a/mods/signs_lib/api.lua +++ b/mods/signs_lib/api.lua @@ -4,6 +4,8 @@ local S = signs_lib.gettext local function get_sign_formspec() end +signs_lib.glow_item = "basic_materials:energy_crystal_simple" + signs_lib.lbm_restore_nodes = {} signs_lib.old_fenceposts = {} signs_lib.old_fenceposts_replacement_signs = {} @@ -180,7 +182,7 @@ function signs_lib.delete_objects(pos) end end -function signs_lib.spawn_entity(pos, texture) +function signs_lib.spawn_entity(pos, texture, glow) local node = minetest.get_node(pos) local def = minetest.registered_items[node.name] if not def or not def.entity_info then return end @@ -229,6 +231,10 @@ function signs_lib.spawn_entity(pos, texture) end end + if glow ~= "" then + obj:set_properties( {glow = tonumber(glow * 5)} ) + end + if yaw then obj:set_rotation({x = pitch, y = yaw, z=0}) @@ -247,14 +253,15 @@ function signs_lib.spawn_entity(pos, texture) end end -function signs_lib.set_obj_text(pos, text) +function signs_lib.set_obj_text(pos, text, glow) local split = signs_lib.split_lines_and_words local text_ansi = Utf8ToAnsi(text) local n = minetest.registered_nodes[minetest.get_node(pos).name] signs_lib.delete_objects(pos) -- only create sign entity for actual text if text_ansi and text_ansi ~= "" then - signs_lib.spawn_entity(pos, signs_lib.make_sign_texture(split(text_ansi), pos) ) + signs_lib.spawn_entity(pos, + signs_lib.make_sign_texture(split(text_ansi), pos), glow) end end @@ -548,8 +555,9 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi end end local c = word:sub(i, i) - if c == "#" then - local cc = tonumber(word:sub(i+1, i+1), 16) + local c2 = word:sub(i+1, i+1) + if c == "#" and c2 ~= "#" then + local cc = tonumber(c2, 16) if cc then i = i + 1 cur_color = cc @@ -700,13 +708,19 @@ end function signs_lib.rightclick_sign(pos, node, player, itemstack, pointed_thing) - if not signs_lib.can_modify(pos, player) then return end + if not player or not signs_lib.can_modify(pos, player) then return end player:get_meta():set_string("signslib:pos", minetest.pos_to_string(pos)) minetest.show_formspec(player:get_player_name(), "signs_lib:sign", get_sign_formspec(pos, node.name)) end function signs_lib.destruct_sign(pos) + local meta = minetest.get_meta(pos) + local glow = meta:get_string("glow") + if glow ~= "" and not minetest.is_creative_enabled("") then + local num = tonumber(glow) + minetest.add_item(pos, ItemStack(signs_lib.glow_item .. " " .. num)) + end signs_lib.delete_objects(pos) end @@ -720,6 +734,30 @@ local function make_infotext(text) return table.concat(lines2, "\n") end +function signs_lib.glow(pos, node, puncher) + local name = puncher:get_player_name() + if minetest.is_protected(pos, name) then + return + end + local tool = puncher:get_wielded_item() + if tool:get_name() == signs_lib.glow_item then + local meta = minetest.get_meta(pos) + local glow = tonumber(meta:get_string("glow")) + if not glow then + glow = 1 + elseif glow < 3 then + glow = glow + 1 + else + return -- already at brightest level + end + if not minetest.is_creative_enabled(name) then + tool:take_item() + puncher:set_wielded_item(tool) + end + meta:set_string("glow", glow) + end +end + function signs_lib.update_sign(pos, fields) local meta = minetest.get_meta(pos) @@ -737,7 +775,9 @@ function signs_lib.update_sign(pos, fields) meta:set_string("text", text) meta:set_string("infotext", ownstr..make_infotext(text).." ") - signs_lib.set_obj_text(pos, text) + + local glow = meta:get_string("glow") + signs_lib.set_obj_text(pos, text, glow) end function signs_lib.can_modify(pos, player) @@ -902,6 +942,23 @@ function signs_lib.register_fence_with_sign() minetest.log("warning", "[signs_lib] ".."Attempt to call no longer used function signs_lib.register_fence_with_sign()") end +local use_glow = function(pos, node, puncher, pointed_thing) + if puncher then -- if e.g. a machine tries to punch; only a real person should change the lighting + signs_lib.glow(pos, node, puncher) + end + return signs_lib.update_sign(pos) +end + +local glow_drops = function(pos, oldnode, oldmetadata, digger) + if digger and minetest.is_creative_enabled(digger:get_player_name()) then + return + end + local glow = oldmetadata and oldmetadata.fields and oldmetadata.fields.glow + if glow then + minetest.add_item(pos, ItemStack(signs_lib.glow_item .. " " .. glow)) + end +end + function signs_lib.register_sign(name, raw_def) local def = table.copy(raw_def) @@ -917,9 +974,16 @@ function signs_lib.register_sign(name, raw_def) def.after_place_node = raw_def.after_place_node or signs_lib.after_place_node if raw_def.entity_info then + + if def.allow_glow ~= false then + def.on_punch = raw_def.on_punch or use_glow + def.after_dig_node = raw_def.after_dig_node or glow_drops + else + def.on_punch = raw_def.on_punch or signs_lib.update_sign + end + def.on_rightclick = raw_def.on_rightclick or signs_lib.rightclick_sign def.on_destruct = raw_def.on_destruct or signs_lib.destruct_sign - def.on_punch = raw_def.on_punch or signs_lib.update_sign def.number_of_lines = raw_def.number_of_lines or signs_lib.standard_lines def.horiz_scaling = raw_def.horiz_scaling or signs_lib.standard_hscale def.vert_scaling = raw_def.vert_scaling or signs_lib.standard_vscale @@ -1228,16 +1292,17 @@ function get_sign_formspec(pos, nodename) local formspec = { "size[6,4]", - "textarea[0,-0.3;6.5,3;text;;" .. minetest.formspec_escape(txt) .. "]", - "background[-0.5,-0.5;7,5;signs_lib_sign_bg.jpg]", - "button_exit[2,3.4;2,1;ok;" .. S("Write") .. "]" + "background[-0.5,-0.5;7,5;signs_lib_sign_bg.png]", + "image[0.1,2.4;7,1;signs_lib_sign_color_palette.png]", + "textarea[0.15,-0.2;6.3,2.8;text;;" .. minetest.formspec_escape(txt) .. "]", + "button_exit[3,3.4;2,1;ok;" .. S("Write") .. "]" } if minetest.registered_nodes[nodename].allow_widefont then local state = "off" if meta:get_int("widefont") == 1 then state = "on" end - formspec[5] = "label[0.5,3.4;Use wide font]" - formspec[6] = "image_button[0.6,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;" + formspec[#formspec+1] = "label[0.9,3.4;Use wide font]" + formspec[#formspec+1] = "image_button[1.1,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;" .. state .. ";;;false;signs_lib_switch_interm.png]" end diff --git a/mods/signs_lib/depends.txt b/mods/signs_lib/depends.txt deleted file mode 100644 index d3cb3790..00000000 --- a/mods/signs_lib/depends.txt +++ /dev/null @@ -1,7 +0,0 @@ -default -intllib? -screwdriver? -streetspoles? -streetlamps? -cottages? -prefab_redo? \ No newline at end of file diff --git a/mods/signs_lib/description.txt b/mods/signs_lib/description.txt deleted file mode 100644 index d157852b..00000000 --- a/mods/signs_lib/description.txt +++ /dev/null @@ -1 +0,0 @@ -Adds signs with readable text. diff --git a/mods/signs_lib/mod.conf b/mods/signs_lib/mod.conf index 2781b60b..82af3616 100644 --- a/mods/signs_lib/mod.conf +++ b/mods/signs_lib/mod.conf @@ -1,2 +1,6 @@ name = signs_lib -min_minetest_version = 5.2.0 +author = VanessaE +depends = default +optional_depends = intllib, screwdriver, streetspoles, streetlamps, cottages, prefab_redo +description = Adds signs with readable text. +min_minetest_version = 5.4.0 diff --git a/mods/signs_lib/standard_signs.lua b/mods/signs_lib/standard_signs.lua index 1513d730..8d7a9e78 100644 --- a/mods/signs_lib/standard_signs.lua +++ b/mods/signs_lib/standard_signs.lua @@ -14,7 +14,8 @@ signs_lib.register_sign("default:sign_wall_wood", { allow_widefont = true, allow_onpole = true, allow_onpole_horizontal = true, - allow_yard = true + allow_yard = true, + use_texture_alpha = "clip", }) signs_lib.register_sign("default:sign_wall_steel", { @@ -35,7 +36,8 @@ signs_lib.register_sign("default:sign_wall_steel", { allow_widefont = true, allow_onpole = true, allow_onpole_horizontal = true, - allow_yard = true + allow_yard = true, + use_texture_alpha = "clip", }) minetest.register_alias("signs:sign_hanging", "default:sign_wood_hanging") diff --git a/mods/signs_lib/textures/signs_lib_sign_bg.jpg b/mods/signs_lib/textures/signs_lib_sign_bg.jpg deleted file mode 100644 index 4b72268b..00000000 Binary files a/mods/signs_lib/textures/signs_lib_sign_bg.jpg and /dev/null differ diff --git a/mods/signs_lib/textures/signs_lib_sign_bg.png b/mods/signs_lib/textures/signs_lib_sign_bg.png new file mode 100644 index 00000000..4d7beb80 Binary files /dev/null and b/mods/signs_lib/textures/signs_lib_sign_bg.png differ diff --git a/mods/signs_lib/textures/signs_lib_sign_color_palette.png b/mods/signs_lib/textures/signs_lib_sign_color_palette.png new file mode 100644 index 00000000..ceec6fd6 Binary files /dev/null and b/mods/signs_lib/textures/signs_lib_sign_color_palette.png differ diff --git a/mods/skinsdb/api.lua b/mods/skinsdb/api.lua index 87765d1b..92e1a3f0 100644 --- a/mods/skinsdb/api.lua +++ b/mods/skinsdb/api.lua @@ -5,7 +5,7 @@ function skins.get_player_skin(player) local meta = player:get_meta() if meta:get("skinsdb:skin_key") then -- Move player data prior July 2018 to mod storage - storage:set_string(player:get_player_name(), player:get_string("skinsdb:skin_key")) + storage:set_string(player:get_player_name(), meta:get_string("skinsdb:skin_key")) meta:set_string("skinsdb:skin_key", "") end local skin = storage:get_string(player:get_player_name()) diff --git a/mods/skinsdb/formspecs.lua b/mods/skinsdb/formspecs.lua index 39d4a173..70a5dd86 100644 --- a/mods/skinsdb/formspecs.lua +++ b/mods/skinsdb/formspecs.lua @@ -1,4 +1,5 @@ local S = minetest.get_translator("skinsdb") +local ui = unified_inventory function skins.get_formspec_context(player) if player then @@ -11,7 +12,7 @@ function skins.get_formspec_context(player) end -- Show skin info -function skins.get_skin_info_formspec(skin) +function skins.get_skin_info_formspec(skin, perplayer_formspec) local texture = skin:get_texture() local m_name = skin:get_meta_string("name") local m_author = skin:get_meta_string("author") @@ -20,30 +21,82 @@ function skins.get_skin_info_formspec(skin) -- overview page local raw_size = m_format == "1.8" and "2,2" or "2,1" - local formspec = "image[0.8,.6;1,2;"..minetest.formspec_escape(skin:get_preview()).."]" + local lxoffs = 0.8 + local cxoffs = 2 + local rxoffs = 5.5 + + if type(perplayer_formspec) == "table" then -- we're using Unified Inventory + lxoffs = 1.5 + cxoffs = 3.75 + rxoffs = 7.5 + end + + local formspec = "image["..lxoffs..",.6;1,2;"..minetest.formspec_escape(skin:get_preview()).."]" if texture then - formspec = formspec.."label[6,.5;"..S("Raw texture")..":]" - .."image[6,1;"..raw_size..";"..texture.."]" + formspec = formspec.."label["..rxoffs..",.5;"..S("Raw texture")..":]" + .."image["..rxoffs..",1;"..raw_size..";"..texture.."]" end if m_name ~= "" then - formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(m_name).."]" + formspec = formspec.."label["..cxoffs..",.5;"..S("Name")..": "..minetest.formspec_escape(m_name).."]" end if m_author ~= "" then - formspec = formspec.."label[2,1;"..S("Author")..": "..minetest.formspec_escape(m_author).."]" + formspec = formspec.."label["..cxoffs..",1;"..S("Author")..": "..minetest.formspec_escape(m_author).."]" end if m_license ~= "" then - formspec = formspec.."label[2,1.5;"..S("License")..": "..minetest.formspec_escape(m_license).."]" + formspec = formspec.."label["..cxoffs..",1.5;"..S("License")..": "..minetest.formspec_escape(m_license).."]" end return formspec end -function skins.get_skin_selection_formspec(player, context, y_delta) +function skins.get_skin_selection_formspec(player, context, perplayer_formspec) context.skins_list = skins.get_skinlist_for_player(player:get_player_name()) context.total_pages = 1 + local xoffs = 0 + local yoffs = 4 + local xspc = 1 + local yspc = 2 + local skinwidth = 1 + local skinheight = 2 + local xscale = 1 + local btn_y = 8.15 + local drop_y = 8 + local btn_width = 1 + local droppos = 1 + local droplen = 6.25 + local btn_right = 7 + local maxdisp = 16 + + local ctrls_height = 0.5 + + if type(perplayer_formspec) == "table" then -- it's being used under Unified Inventory + xoffs = perplayer_formspec.std_inv_x + xspc = ui.imgscale + yspc = ui.imgscale*2 + skinwidth = ui.imgscale*0.9 + skinheight = ui.imgscale*1.9 + xscale = ui.imgscale + btn_width = ui.imgscale + droppos = xoffs + btn_width + 0.1 + droplen = ui.imgscale * 6 - 0.2 + btn_right = droppos + droplen + 0.1 + + if perplayer_formspec.pagecols == 4 then -- and we're in lite mode + yoffs = 1 + maxdisp = 8 + drop_y = yoffs + skinheight + 0.1 + else + yoffs = 0.2 + drop_y = yoffs + skinheight*2 + 0.2 + end + + btn_y = drop_y + + end + for i, skin in ipairs(context.skins_list ) do - local page = math.floor((i-1) / 16)+1 + local page = math.floor((i-1) / maxdisp)+1 skin:set_meta("inv_page", page) - skin:set_meta("inv_page_index", (i-1)%16+1) + skin:set_meta("inv_page_index", (i-1)%maxdisp+1) context.total_pages = page end context.skins_page = context.skins_page or skins.get_player_skin(player):get_meta("inv_page") or 1 @@ -51,22 +104,25 @@ function skins.get_skin_selection_formspec(player, context, y_delta) local page = context.skins_page local formspec = "" - for i = (page-1)*16+1, page*16 do + + for i = (page-1)*maxdisp+1, page*maxdisp do local skin = context.skins_list[i] if not skin then break end local index_p = skin:get_meta("inv_page_index") - local x = (index_p-1) % 8 + local x = ((index_p-1) % 8) * xspc + xoffs local y if index_p > 8 then - y = y_delta + 1.9 + y = yoffs + yspc else - y = y_delta + y = yoffs end - formspec = formspec.."image_button["..x..","..y..";1,2;".. - minetest.formspec_escape(skin:get_preview())..";skins_set$"..i..";]".. + formspec = formspec.. + string.format("image_button[%f,%f;%f,%f;%s;skins_set$%i;]", + x, y, skinwidth, skinheight, + minetest.formspec_escape(skin:get_preview()), i).. "tooltip[skins_set$"..i..";"..minetest.formspec_escape(skin:get_meta_string("name")).."]" end @@ -87,10 +143,13 @@ function skins.get_skin_selection_formspec(player, context, y_delta) if pg > 1 then page_list = page_list.."," end page_list = page_list..pagename end - formspec = formspec - .."button[0,"..(y_delta+4.0)..";1,.5;skins_page$"..page_prev..";<<]" - .."dropdown[0.9,"..(y_delta+3.88)..";6.5,.5;skins_selpg;"..page_list..";"..page.."]" - .."button[7,"..(y_delta+4.0)..";1,.5;skins_page$"..page_next..";>>]" + formspec = formspec.. + string.format("button[%f,%f;%f,%f;skins_page$%i;<<]", + xoffs, btn_y, btn_width, ctrls_height, page_prev).. + string.format("button[%f,%f;%f,%f;skins_page$%i;>>]", + btn_right, btn_y, btn_width, ctrls_height, page_next).. + string.format("dropdown[%f,%f;%f,%f;skins_selpg;%s;%i]", + droppos, drop_y, droplen, ctrls_height, page_list, page) end return formspec end diff --git a/mods/skinsdb/meta/character_1951.txt b/mods/skinsdb/meta/character_1951.txt new file mode 100644 index 00000000..fce585e2 --- /dev/null +++ b/mods/skinsdb/meta/character_1951.txt @@ -0,0 +1,3 @@ +hina_ichigo +???? +CC 0 (1.0) diff --git a/mods/skinsdb/meta/character_1952.txt b/mods/skinsdb/meta/character_1952.txt new file mode 100644 index 00000000..495be7d3 --- /dev/null +++ b/mods/skinsdb/meta/character_1952.txt @@ -0,0 +1,3 @@ +Lyza +Lyza +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1953.txt b/mods/skinsdb/meta/character_1953.txt new file mode 100644 index 00000000..ab6c4143 --- /dev/null +++ b/mods/skinsdb/meta/character_1953.txt @@ -0,0 +1,3 @@ +Toby +Toby1710/DiamondPlane +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1954.txt b/mods/skinsdb/meta/character_1954.txt new file mode 100644 index 00000000..7c5bd79a --- /dev/null +++ b/mods/skinsdb/meta/character_1954.txt @@ -0,0 +1,3 @@ +nothing lol +Blue +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1955.txt b/mods/skinsdb/meta/character_1955.txt new file mode 100644 index 00000000..6b0fba75 --- /dev/null +++ b/mods/skinsdb/meta/character_1955.txt @@ -0,0 +1,3 @@ +vanessa +nose +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1956.txt b/mods/skinsdb/meta/character_1956.txt new file mode 100644 index 00000000..a661a9de --- /dev/null +++ b/mods/skinsdb/meta/character_1956.txt @@ -0,0 +1,3 @@ +Dragon boi +LonelyCDDISK +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1957.txt b/mods/skinsdb/meta/character_1957.txt new file mode 100644 index 00000000..ede7b13a --- /dev/null +++ b/mods/skinsdb/meta/character_1957.txt @@ -0,0 +1,3 @@ +banshee1 +nelly +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1958.txt b/mods/skinsdb/meta/character_1958.txt new file mode 100644 index 00000000..b6703ddb --- /dev/null +++ b/mods/skinsdb/meta/character_1958.txt @@ -0,0 +1,3 @@ +banshee2 +TenPlus1 +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1959.txt b/mods/skinsdb/meta/character_1959.txt new file mode 100644 index 00000000..47288c06 --- /dev/null +++ b/mods/skinsdb/meta/character_1959.txt @@ -0,0 +1,3 @@ +wizard_lott +Gabo +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1960.txt b/mods/skinsdb/meta/character_1960.txt new file mode 100644 index 00000000..f12e9eb4 --- /dev/null +++ b/mods/skinsdb/meta/character_1960.txt @@ -0,0 +1,3 @@ +orc_lott +Gabo +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1961.txt b/mods/skinsdb/meta/character_1961.txt new file mode 100644 index 00000000..d1ed48a6 --- /dev/null +++ b/mods/skinsdb/meta/character_1961.txt @@ -0,0 +1,3 @@ +woman_lott +catninja +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1962.txt b/mods/skinsdb/meta/character_1962.txt new file mode 100644 index 00000000..78dd47ff --- /dev/null +++ b/mods/skinsdb/meta/character_1962.txt @@ -0,0 +1,3 @@ +man_lott +Gabo +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1963.txt b/mods/skinsdb/meta/character_1963.txt new file mode 100644 index 00000000..f61de9ba --- /dev/null +++ b/mods/skinsdb/meta/character_1963.txt @@ -0,0 +1,3 @@ +hobbitf_lott +catninja +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1964.txt b/mods/skinsdb/meta/character_1964.txt new file mode 100644 index 00000000..e09d5e21 --- /dev/null +++ b/mods/skinsdb/meta/character_1964.txt @@ -0,0 +1,3 @@ +hobbit_lott +Gabo +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1965.txt b/mods/skinsdb/meta/character_1965.txt new file mode 100644 index 00000000..be46c081 --- /dev/null +++ b/mods/skinsdb/meta/character_1965.txt @@ -0,0 +1,3 @@ +elff_lott +catninja +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1966.txt b/mods/skinsdb/meta/character_1966.txt new file mode 100644 index 00000000..7d76900b --- /dev/null +++ b/mods/skinsdb/meta/character_1966.txt @@ -0,0 +1,3 @@ +elfm_lott +Gabo +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1967.txt b/mods/skinsdb/meta/character_1967.txt new file mode 100644 index 00000000..6b731dd3 --- /dev/null +++ b/mods/skinsdb/meta/character_1967.txt @@ -0,0 +1,3 @@ +dwarf1_lott +catninja +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1968.txt b/mods/skinsdb/meta/character_1968.txt new file mode 100644 index 00000000..38678a18 --- /dev/null +++ b/mods/skinsdb/meta/character_1968.txt @@ -0,0 +1,3 @@ +dwarf2_lott +Gabo +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1969.txt b/mods/skinsdb/meta/character_1969.txt new file mode 100644 index 00000000..c1998d12 --- /dev/null +++ b/mods/skinsdb/meta/character_1969.txt @@ -0,0 +1,3 @@ +ghost +BlockMen +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1970.txt b/mods/skinsdb/meta/character_1970.txt new file mode 100644 index 00000000..8157be14 --- /dev/null +++ b/mods/skinsdb/meta/character_1970.txt @@ -0,0 +1,3 @@ +dwarf3 +Amaz +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1971.txt b/mods/skinsdb/meta/character_1971.txt new file mode 100644 index 00000000..45a7efe8 --- /dev/null +++ b/mods/skinsdb/meta/character_1971.txt @@ -0,0 +1,3 @@ +dwarf2 +Amaz +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1972.txt b/mods/skinsdb/meta/character_1972.txt new file mode 100644 index 00000000..f6b035ba --- /dev/null +++ b/mods/skinsdb/meta/character_1972.txt @@ -0,0 +1,3 @@ +dwarf1 +Amaz +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1973.txt b/mods/skinsdb/meta/character_1973.txt new file mode 100644 index 00000000..8ee44bac --- /dev/null +++ b/mods/skinsdb/meta/character_1973.txt @@ -0,0 +1,3 @@ +dwarf +fishyWET +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1974.txt b/mods/skinsdb/meta/character_1974.txt new file mode 100644 index 00000000..5e82eb1f --- /dev/null +++ b/mods/skinsdb/meta/character_1974.txt @@ -0,0 +1,3 @@ +wheat_farmer +Addi +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1975.txt b/mods/skinsdb/meta/character_1975.txt new file mode 100644 index 00000000..dc620edc --- /dev/null +++ b/mods/skinsdb/meta/character_1975.txt @@ -0,0 +1,3 @@ +tomat_farmer +Addi +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1976.txt b/mods/skinsdb/meta/character_1976.txt new file mode 100644 index 00000000..198cb464 --- /dev/null +++ b/mods/skinsdb/meta/character_1976.txt @@ -0,0 +1,3 @@ +cow-boy? +Jordach +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1977.txt b/mods/skinsdb/meta/character_1977.txt new file mode 100644 index 00000000..39f94ff6 --- /dev/null +++ b/mods/skinsdb/meta/character_1977.txt @@ -0,0 +1,3 @@ +snow_walker1 +Hamlet +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1978.txt b/mods/skinsdb/meta/character_1978.txt new file mode 100644 index 00000000..403d0049 --- /dev/null +++ b/mods/skinsdb/meta/character_1978.txt @@ -0,0 +1,3 @@ +snow_walker2 +Hamlet +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1979.txt b/mods/skinsdb/meta/character_1979.txt new file mode 100644 index 00000000..eddfc489 --- /dev/null +++ b/mods/skinsdb/meta/character_1979.txt @@ -0,0 +1,3 @@ +snow_walker3 +Hamlet +CC BY-NC-SA 4.0 diff --git a/mods/skinsdb/meta/character_1980.txt b/mods/skinsdb/meta/character_1980.txt new file mode 100644 index 00000000..1eb48f39 --- /dev/null +++ b/mods/skinsdb/meta/character_1980.txt @@ -0,0 +1,3 @@ +alt_tp_player +Kingoscargames +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1981.txt b/mods/skinsdb/meta/character_1981.txt new file mode 100644 index 00000000..fbfc888d --- /dev/null +++ b/mods/skinsdb/meta/character_1981.txt @@ -0,0 +1,3 @@ +steve_blue_diamond +Bambusman12 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1982.txt b/mods/skinsdb/meta/character_1982.txt new file mode 100644 index 00000000..9a1a73c9 --- /dev/null +++ b/mods/skinsdb/meta/character_1982.txt @@ -0,0 +1,3 @@ +isabella2 +Bonemouse +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_1983.txt b/mods/skinsdb/meta/character_1983.txt new file mode 100644 index 00000000..65ff4cb1 --- /dev/null +++ b/mods/skinsdb/meta/character_1983.txt @@ -0,0 +1,3 @@ +player_pixelperfection +XSSheep +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1984.txt b/mods/skinsdb/meta/character_1984.txt new file mode 100644 index 00000000..f3c94808 --- /dev/null +++ b/mods/skinsdb/meta/character_1984.txt @@ -0,0 +1,3 @@ +refi_player +kheftel +CC 0 (1.0) diff --git a/mods/skinsdb/meta/character_1985.txt b/mods/skinsdb/meta/character_1985.txt new file mode 100644 index 00000000..0c4f6825 --- /dev/null +++ b/mods/skinsdb/meta/character_1985.txt @@ -0,0 +1,3 @@ +uvlight_player +Avyukt More +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1986.txt b/mods/skinsdb/meta/character_1986.txt new file mode 100644 index 00000000..e28746da --- /dev/null +++ b/mods/skinsdb/meta/character_1986.txt @@ -0,0 +1,3 @@ +mcl_player +TenPlus +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1987.txt b/mods/skinsdb/meta/character_1987.txt new file mode 100644 index 00000000..6db9f686 --- /dev/null +++ b/mods/skinsdb/meta/character_1987.txt @@ -0,0 +1,3 @@ +mcl_player_beard +MirceaKitsune +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1988.txt b/mods/skinsdb/meta/character_1988.txt new file mode 100644 index 00000000..7e87c9f3 --- /dev/null +++ b/mods/skinsdb/meta/character_1988.txt @@ -0,0 +1,3 @@ +igor +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1989.txt b/mods/skinsdb/meta/character_1989.txt new file mode 100644 index 00000000..4b305af3 --- /dev/null +++ b/mods/skinsdb/meta/character_1989.txt @@ -0,0 +1,3 @@ +ogre +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1990.txt b/mods/skinsdb/meta/character_1990.txt new file mode 100644 index 00000000..e571dd87 --- /dev/null +++ b/mods/skinsdb/meta/character_1990.txt @@ -0,0 +1,3 @@ +green_monster +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1991.txt b/mods/skinsdb/meta/character_1991.txt new file mode 100644 index 00000000..9e428b0f --- /dev/null +++ b/mods/skinsdb/meta/character_1991.txt @@ -0,0 +1,3 @@ +skeleton_disguise +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1992.txt b/mods/skinsdb/meta/character_1992.txt new file mode 100644 index 00000000..ef807252 --- /dev/null +++ b/mods/skinsdb/meta/character_1992.txt @@ -0,0 +1,3 @@ +green_guy +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1993.txt b/mods/skinsdb/meta/character_1993.txt new file mode 100644 index 00000000..8a20defe --- /dev/null +++ b/mods/skinsdb/meta/character_1993.txt @@ -0,0 +1,3 @@ +ogre_orange +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1994.txt b/mods/skinsdb/meta/character_1994.txt new file mode 100644 index 00000000..ebd5e07e --- /dev/null +++ b/mods/skinsdb/meta/character_1994.txt @@ -0,0 +1,3 @@ +Ankou +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1995.txt b/mods/skinsdb/meta/character_1995.txt new file mode 100644 index 00000000..14746a56 --- /dev/null +++ b/mods/skinsdb/meta/character_1995.txt @@ -0,0 +1,3 @@ +Vampire +TenPlus1 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1996.txt b/mods/skinsdb/meta/character_1996.txt new file mode 100644 index 00000000..bef690a5 --- /dev/null +++ b/mods/skinsdb/meta/character_1996.txt @@ -0,0 +1,3 @@ +newplanet_player +Jordach +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1997.txt b/mods/skinsdb/meta/character_1997.txt new file mode 100644 index 00000000..94782fd0 --- /dev/null +++ b/mods/skinsdb/meta/character_1997.txt @@ -0,0 +1,3 @@ +exile_player +Dokimi +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_1998.txt b/mods/skinsdb/meta/character_1998.txt new file mode 100644 index 00000000..741179c9 --- /dev/null +++ b/mods/skinsdb/meta/character_1998.txt @@ -0,0 +1,3 @@ +priest? +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_1999.txt b/mods/skinsdb/meta/character_1999.txt new file mode 100644 index 00000000..83d55830 --- /dev/null +++ b/mods/skinsdb/meta/character_1999.txt @@ -0,0 +1,3 @@ +Farmer1 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2000.txt b/mods/skinsdb/meta/character_2000.txt new file mode 100644 index 00000000..5b6da644 --- /dev/null +++ b/mods/skinsdb/meta/character_2000.txt @@ -0,0 +1,3 @@ +Farmer2 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2001.txt b/mods/skinsdb/meta/character_2001.txt new file mode 100644 index 00000000..eebf92f3 --- /dev/null +++ b/mods/skinsdb/meta/character_2001.txt @@ -0,0 +1,3 @@ +Farmer3 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2002.txt b/mods/skinsdb/meta/character_2002.txt new file mode 100644 index 00000000..8662ea08 --- /dev/null +++ b/mods/skinsdb/meta/character_2002.txt @@ -0,0 +1,3 @@ +Farmer4 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2003.txt b/mods/skinsdb/meta/character_2003.txt new file mode 100644 index 00000000..4da95dab --- /dev/null +++ b/mods/skinsdb/meta/character_2003.txt @@ -0,0 +1,3 @@ +Farmer5 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2004.txt b/mods/skinsdb/meta/character_2004.txt new file mode 100644 index 00000000..f6b8cdb6 --- /dev/null +++ b/mods/skinsdb/meta/character_2004.txt @@ -0,0 +1,3 @@ +Farmer6 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2005.txt b/mods/skinsdb/meta/character_2005.txt new file mode 100644 index 00000000..50b89a12 --- /dev/null +++ b/mods/skinsdb/meta/character_2005.txt @@ -0,0 +1,3 @@ +Villager1 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2006.txt b/mods/skinsdb/meta/character_2006.txt new file mode 100644 index 00000000..28196f25 --- /dev/null +++ b/mods/skinsdb/meta/character_2006.txt @@ -0,0 +1,3 @@ +Villager2 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2007.txt b/mods/skinsdb/meta/character_2007.txt new file mode 100644 index 00000000..a5e9893b --- /dev/null +++ b/mods/skinsdb/meta/character_2007.txt @@ -0,0 +1,3 @@ +zombie +lucas +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2008.txt b/mods/skinsdb/meta/character_2008.txt new file mode 100644 index 00000000..94067f09 --- /dev/null +++ b/mods/skinsdb/meta/character_2008.txt @@ -0,0 +1,3 @@ +Villager3 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2009.txt b/mods/skinsdb/meta/character_2009.txt new file mode 100644 index 00000000..0d7c6bce --- /dev/null +++ b/mods/skinsdb/meta/character_2009.txt @@ -0,0 +1,3 @@ +Villager4 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2010.txt b/mods/skinsdb/meta/character_2010.txt new file mode 100644 index 00000000..3f1177cf --- /dev/null +++ b/mods/skinsdb/meta/character_2010.txt @@ -0,0 +1,3 @@ +Villager5 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2011.txt b/mods/skinsdb/meta/character_2011.txt new file mode 100644 index 00000000..554473f7 --- /dev/null +++ b/mods/skinsdb/meta/character_2011.txt @@ -0,0 +1,3 @@ +Villager6 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2012.txt b/mods/skinsdb/meta/character_2012.txt new file mode 100644 index 00000000..4a80afd6 --- /dev/null +++ b/mods/skinsdb/meta/character_2012.txt @@ -0,0 +1,3 @@ +Farmer7 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2013.txt b/mods/skinsdb/meta/character_2013.txt new file mode 100644 index 00000000..ae6a97fd --- /dev/null +++ b/mods/skinsdb/meta/character_2013.txt @@ -0,0 +1,3 @@ +Bartender +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2014.txt b/mods/skinsdb/meta/character_2014.txt new file mode 100644 index 00000000..73732bb5 --- /dev/null +++ b/mods/skinsdb/meta/character_2014.txt @@ -0,0 +1,3 @@ +Farmer8 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2015.txt b/mods/skinsdb/meta/character_2015.txt new file mode 100644 index 00000000..cbc98167 --- /dev/null +++ b/mods/skinsdb/meta/character_2015.txt @@ -0,0 +1,3 @@ +Crowned +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2016.txt b/mods/skinsdb/meta/character_2016.txt new file mode 100644 index 00000000..086d98db --- /dev/null +++ b/mods/skinsdb/meta/character_2016.txt @@ -0,0 +1,3 @@ +woman +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2017.txt b/mods/skinsdb/meta/character_2017.txt new file mode 100644 index 00000000..622be2bd --- /dev/null +++ b/mods/skinsdb/meta/character_2017.txt @@ -0,0 +1,3 @@ +Villager8 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2018.txt b/mods/skinsdb/meta/character_2018.txt new file mode 100644 index 00000000..2ac21a6d --- /dev/null +++ b/mods/skinsdb/meta/character_2018.txt @@ -0,0 +1,3 @@ +Crowned2 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2019.txt b/mods/skinsdb/meta/character_2019.txt new file mode 100644 index 00000000..9afd5894 --- /dev/null +++ b/mods/skinsdb/meta/character_2019.txt @@ -0,0 +1,3 @@ +Crowned3 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2020.txt b/mods/skinsdb/meta/character_2020.txt new file mode 100644 index 00000000..7b7e50f0 --- /dev/null +++ b/mods/skinsdb/meta/character_2020.txt @@ -0,0 +1,3 @@ +Crowned4 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2021.txt b/mods/skinsdb/meta/character_2021.txt new file mode 100644 index 00000000..fa3cab45 --- /dev/null +++ b/mods/skinsdb/meta/character_2021.txt @@ -0,0 +1,3 @@ +Villager9 +sdzen +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2022.txt b/mods/skinsdb/meta/character_2022.txt new file mode 100644 index 00000000..231af412 --- /dev/null +++ b/mods/skinsdb/meta/character_2022.txt @@ -0,0 +1,3 @@ +Aurora Mozilla +MT Aurora +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2023.txt b/mods/skinsdb/meta/character_2023.txt new file mode 100644 index 00000000..24738310 --- /dev/null +++ b/mods/skinsdb/meta/character_2023.txt @@ -0,0 +1,3 @@ +josegamestest_0 +Jose Anastácio +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2024.txt b/mods/skinsdb/meta/character_2024.txt new file mode 100644 index 00000000..6862044e --- /dev/null +++ b/mods/skinsdb/meta/character_2024.txt @@ -0,0 +1,3 @@ +The Gabinours +Gab888 +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2025.txt b/mods/skinsdb/meta/character_2025.txt new file mode 100644 index 00000000..a5d36829 --- /dev/null +++ b/mods/skinsdb/meta/character_2025.txt @@ -0,0 +1,3 @@ +UnlikelySleep's Skin +UnlikelySleep +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2026.txt b/mods/skinsdb/meta/character_2026.txt new file mode 100644 index 00000000..a5d36829 --- /dev/null +++ b/mods/skinsdb/meta/character_2026.txt @@ -0,0 +1,3 @@ +UnlikelySleep's Skin +UnlikelySleep +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2027.txt b/mods/skinsdb/meta/character_2027.txt new file mode 100644 index 00000000..3beba888 --- /dev/null +++ b/mods/skinsdb/meta/character_2027.txt @@ -0,0 +1,3 @@ +Survivour +SomebodyIUsedToKnow +CC 0 (1.0) diff --git a/mods/skinsdb/meta/character_2028.txt b/mods/skinsdb/meta/character_2028.txt new file mode 100644 index 00000000..8d5c2ea8 --- /dev/null +++ b/mods/skinsdb/meta/character_2028.txt @@ -0,0 +1,3 @@ +Skin Making Helper +Unknown +CC 0 (1.0) diff --git a/mods/skinsdb/meta/character_2029.txt b/mods/skinsdb/meta/character_2029.txt new file mode 100644 index 00000000..90ed3110 --- /dev/null +++ b/mods/skinsdb/meta/character_2029.txt @@ -0,0 +1,3 @@ +template +AntumDeluge +CC 0 (1.0) diff --git a/mods/skinsdb/meta/character_2030.txt b/mods/skinsdb/meta/character_2030.txt new file mode 100644 index 00000000..d00425bb --- /dev/null +++ b/mods/skinsdb/meta/character_2030.txt @@ -0,0 +1,3 @@ +character_RamonNudles2 +Sam_0 +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_2031.txt b/mods/skinsdb/meta/character_2031.txt new file mode 100644 index 00000000..e8272083 --- /dev/null +++ b/mods/skinsdb/meta/character_2031.txt @@ -0,0 +1,3 @@ +Iron Man MK. 7 +Jordach +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2032.txt b/mods/skinsdb/meta/character_2032.txt new file mode 100644 index 00000000..2cdf6122 --- /dev/null +++ b/mods/skinsdb/meta/character_2032.txt @@ -0,0 +1,3 @@ +character_mumbo_0 +Sam_0 +CC BY 4.0 diff --git a/mods/skinsdb/meta/character_2033.txt b/mods/skinsdb/meta/character_2033.txt new file mode 100644 index 00000000..6e73b4eb --- /dev/null +++ b/mods/skinsdb/meta/character_2033.txt @@ -0,0 +1,3 @@ +character_sam_v4 +Sam_0 +CC BY 4.0 diff --git a/mods/skinsdb/meta/character_2034.txt b/mods/skinsdb/meta/character_2034.txt new file mode 100644 index 00000000..47fdfc10 --- /dev/null +++ b/mods/skinsdb/meta/character_2034.txt @@ -0,0 +1,3 @@ +Petra Ral +ne4eburek +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2035.txt b/mods/skinsdb/meta/character_2035.txt new file mode 100644 index 00000000..ad183005 --- /dev/null +++ b/mods/skinsdb/meta/character_2035.txt @@ -0,0 +1,3 @@ +character_CTF_blue_knight +Sam_0 +CC BY 3.0 diff --git a/mods/skinsdb/meta/character_2036.txt b/mods/skinsdb/meta/character_2036.txt new file mode 100644 index 00000000..658dd047 --- /dev/null +++ b/mods/skinsdb/meta/character_2036.txt @@ -0,0 +1,3 @@ +character_CTF_red_knight +Sam_0 +CC BY 4.0 diff --git a/mods/skinsdb/meta/character_2037.txt b/mods/skinsdb/meta/character_2037.txt new file mode 100644 index 00000000..35083da8 --- /dev/null +++ b/mods/skinsdb/meta/character_2037.txt @@ -0,0 +1,3 @@ +character_CTF_red_medic +Sam_0 +CC BY 4.0 diff --git a/mods/skinsdb/meta/character_2038.txt b/mods/skinsdb/meta/character_2038.txt new file mode 100644 index 00000000..68acc591 --- /dev/null +++ b/mods/skinsdb/meta/character_2038.txt @@ -0,0 +1,3 @@ +My Skin +GroupNebula563 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2039.txt b/mods/skinsdb/meta/character_2039.txt new file mode 100644 index 00000000..f4ff700e --- /dev/null +++ b/mods/skinsdb/meta/character_2039.txt @@ -0,0 +1,3 @@ +Sunset E-Boy +Greenify +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2040.txt b/mods/skinsdb/meta/character_2040.txt new file mode 100644 index 00000000..27f2b458 --- /dev/null +++ b/mods/skinsdb/meta/character_2040.txt @@ -0,0 +1,3 @@ +Sunset E-Boy Skin +Greenify +CC BY-SA 4.0 diff --git a/mods/skinsdb/meta/character_2041.txt b/mods/skinsdb/meta/character_2041.txt new file mode 100644 index 00000000..75a71f1d --- /dev/null +++ b/mods/skinsdb/meta/character_2041.txt @@ -0,0 +1,3 @@ +Plagegeist +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2042.txt b/mods/skinsdb/meta/character_2042.txt new file mode 100644 index 00000000..fdaaaa9e --- /dev/null +++ b/mods/skinsdb/meta/character_2042.txt @@ -0,0 +1,3 @@ +FBI Agent +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2043.txt b/mods/skinsdb/meta/character_2043.txt new file mode 100644 index 00000000..6c982441 --- /dev/null +++ b/mods/skinsdb/meta/character_2043.txt @@ -0,0 +1,3 @@ +Cyber bot +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2044.txt b/mods/skinsdb/meta/character_2044.txt new file mode 100644 index 00000000..f5504685 --- /dev/null +++ b/mods/skinsdb/meta/character_2044.txt @@ -0,0 +1,3 @@ +The dead +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2045.txt b/mods/skinsdb/meta/character_2045.txt new file mode 100644 index 00000000..330f580f --- /dev/null +++ b/mods/skinsdb/meta/character_2045.txt @@ -0,0 +1,3 @@ +ICE Knight +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2046.txt b/mods/skinsdb/meta/character_2046.txt new file mode 100644 index 00000000..208fb590 --- /dev/null +++ b/mods/skinsdb/meta/character_2046.txt @@ -0,0 +1,3 @@ +Nothing +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2047.txt b/mods/skinsdb/meta/character_2047.txt new file mode 100644 index 00000000..d4aeb091 --- /dev/null +++ b/mods/skinsdb/meta/character_2047.txt @@ -0,0 +1,3 @@ +Endermann +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2048.txt b/mods/skinsdb/meta/character_2048.txt new file mode 100644 index 00000000..27ae4b04 --- /dev/null +++ b/mods/skinsdb/meta/character_2048.txt @@ -0,0 +1,3 @@ +Sandzombie +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2049.txt b/mods/skinsdb/meta/character_2049.txt new file mode 100644 index 00000000..29d15ac4 --- /dev/null +++ b/mods/skinsdb/meta/character_2049.txt @@ -0,0 +1,3 @@ +Nebel man +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2050.txt b/mods/skinsdb/meta/character_2050.txt new file mode 100644 index 00000000..531cd9b4 --- /dev/null +++ b/mods/skinsdb/meta/character_2050.txt @@ -0,0 +1,3 @@ +Cyber Huhn +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2051.txt b/mods/skinsdb/meta/character_2051.txt new file mode 100644 index 00000000..257482d2 --- /dev/null +++ b/mods/skinsdb/meta/character_2051.txt @@ -0,0 +1,3 @@ +Green glas +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2052.txt b/mods/skinsdb/meta/character_2052.txt new file mode 100644 index 00000000..7e2b4ad2 --- /dev/null +++ b/mods/skinsdb/meta/character_2052.txt @@ -0,0 +1,3 @@ +X Kostüm +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2053.txt b/mods/skinsdb/meta/character_2053.txt new file mode 100644 index 00000000..793760f4 --- /dev/null +++ b/mods/skinsdb/meta/character_2053.txt @@ -0,0 +1,3 @@ +Neon Knight +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2054.txt b/mods/skinsdb/meta/character_2054.txt new file mode 100644 index 00000000..931c6d8d --- /dev/null +++ b/mods/skinsdb/meta/character_2054.txt @@ -0,0 +1,3 @@ +Elf Woman +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2055.txt b/mods/skinsdb/meta/character_2055.txt new file mode 100644 index 00000000..6c0efc66 --- /dev/null +++ b/mods/skinsdb/meta/character_2055.txt @@ -0,0 +1,3 @@ +pacman +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2056.txt b/mods/skinsdb/meta/character_2056.txt new file mode 100644 index 00000000..0406f70e --- /dev/null +++ b/mods/skinsdb/meta/character_2056.txt @@ -0,0 +1,3 @@ +killer woman +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2057.txt b/mods/skinsdb/meta/character_2057.txt new file mode 100644 index 00000000..de8cfaa2 --- /dev/null +++ b/mods/skinsdb/meta/character_2057.txt @@ -0,0 +1,3 @@ +gohst +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2058.txt b/mods/skinsdb/meta/character_2058.txt new file mode 100644 index 00000000..e9204103 --- /dev/null +++ b/mods/skinsdb/meta/character_2058.txt @@ -0,0 +1,3 @@ +rainbow man +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2059.txt b/mods/skinsdb/meta/character_2059.txt new file mode 100644 index 00000000..32c38946 --- /dev/null +++ b/mods/skinsdb/meta/character_2059.txt @@ -0,0 +1,3 @@ +Green Gohst +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2060.txt b/mods/skinsdb/meta/character_2060.txt new file mode 100644 index 00000000..befaf946 --- /dev/null +++ b/mods/skinsdb/meta/character_2060.txt @@ -0,0 +1,3 @@ +rainbow gohst +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2061.txt b/mods/skinsdb/meta/character_2061.txt new file mode 100644 index 00000000..71ba4b3d --- /dev/null +++ b/mods/skinsdb/meta/character_2061.txt @@ -0,0 +1,3 @@ +Danger +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2062.txt b/mods/skinsdb/meta/character_2062.txt new file mode 100644 index 00000000..f2af952f --- /dev/null +++ b/mods/skinsdb/meta/character_2062.txt @@ -0,0 +1,3 @@ +Monster Boy +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2063.txt b/mods/skinsdb/meta/character_2063.txt new file mode 100644 index 00000000..27a9af6f --- /dev/null +++ b/mods/skinsdb/meta/character_2063.txt @@ -0,0 +1,3 @@ +Gohst sam +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2064.txt b/mods/skinsdb/meta/character_2064.txt new file mode 100644 index 00000000..18dc16c1 --- /dev/null +++ b/mods/skinsdb/meta/character_2064.txt @@ -0,0 +1,3 @@ +FBI +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2065.txt b/mods/skinsdb/meta/character_2065.txt new file mode 100644 index 00000000..59f927ea --- /dev/null +++ b/mods/skinsdb/meta/character_2065.txt @@ -0,0 +1,3 @@ +Endersam +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2066.txt b/mods/skinsdb/meta/character_2066.txt new file mode 100644 index 00000000..6b158200 --- /dev/null +++ b/mods/skinsdb/meta/character_2066.txt @@ -0,0 +1,3 @@ +Flaming +Flaming Strike +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2067.txt b/mods/skinsdb/meta/character_2067.txt new file mode 100644 index 00000000..45c02713 --- /dev/null +++ b/mods/skinsdb/meta/character_2067.txt @@ -0,0 +1,3 @@ +FBI Ninja +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2068.txt b/mods/skinsdb/meta/character_2068.txt new file mode 100644 index 00000000..a447720c --- /dev/null +++ b/mods/skinsdb/meta/character_2068.txt @@ -0,0 +1,3 @@ +euro 2021 -FR10- minetest footmod? free NC share modify ok +DcyD3 +CC BY-NC-SA 4.0 diff --git a/mods/skinsdb/meta/character_2069.txt b/mods/skinsdb/meta/character_2069.txt new file mode 100644 index 00000000..359ccf8f --- /dev/null +++ b/mods/skinsdb/meta/character_2069.txt @@ -0,0 +1,3 @@ +spider-man +DcyD3 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2070.txt b/mods/skinsdb/meta/character_2070.txt new file mode 100644 index 00000000..30e0d3d6 --- /dev/null +++ b/mods/skinsdb/meta/character_2070.txt @@ -0,0 +1,3 @@ +eye you ! +DcyD3 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2071.txt b/mods/skinsdb/meta/character_2071.txt new file mode 100644 index 00000000..82393490 --- /dev/null +++ b/mods/skinsdb/meta/character_2071.txt @@ -0,0 +1,3 @@ +Xbox 360 Skin Pack 1 +angel +CC BY 3.0 diff --git a/mods/skinsdb/meta/character_2072.txt b/mods/skinsdb/meta/character_2072.txt new file mode 100644 index 00000000..92146099 --- /dev/null +++ b/mods/skinsdb/meta/character_2072.txt @@ -0,0 +1,3 @@ +Irrlicht +Phill +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2073.txt b/mods/skinsdb/meta/character_2073.txt new file mode 100644 index 00000000..45a7198e --- /dev/null +++ b/mods/skinsdb/meta/character_2073.txt @@ -0,0 +1,3 @@ +kinie? 4minetest +DcyD3 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2074.txt b/mods/skinsdb/meta/character_2074.txt new file mode 100644 index 00000000..c795c7c7 --- /dev/null +++ b/mods/skinsdb/meta/character_2074.txt @@ -0,0 +1,3 @@ +barca 4fans ! thx +DcyD3 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2075.txt b/mods/skinsdb/meta/character_2075.txt new file mode 100644 index 00000000..66115b2c --- /dev/null +++ b/mods/skinsdb/meta/character_2075.txt @@ -0,0 +1,3 @@ +oh no no not me ! lool +DcyD3 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2076.txt b/mods/skinsdb/meta/character_2076.txt new file mode 100644 index 00000000..608bedc2 --- /dev/null +++ b/mods/skinsdb/meta/character_2076.txt @@ -0,0 +1,3 @@ +character_yellow_sam +sam_0 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2077.txt b/mods/skinsdb/meta/character_2077.txt new file mode 100644 index 00000000..84ac61e0 --- /dev/null +++ b/mods/skinsdb/meta/character_2077.txt @@ -0,0 +1,3 @@ +Steve Final Smash +GreninjaGamer230 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2078.txt b/mods/skinsdb/meta/character_2078.txt new file mode 100644 index 00000000..345bea2f --- /dev/null +++ b/mods/skinsdb/meta/character_2078.txt @@ -0,0 +1,3 @@ +Luigi poltergust +GreninjaGamer230 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2079.txt b/mods/skinsdb/meta/character_2079.txt new file mode 100644 index 00000000..11b2efff --- /dev/null +++ b/mods/skinsdb/meta/character_2079.txt @@ -0,0 +1,3 @@ +Iron Man Mk.50 +GreninjaGamer230 +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2080.txt b/mods/skinsdb/meta/character_2080.txt new file mode 100644 index 00000000..b3dad183 --- /dev/null +++ b/mods/skinsdb/meta/character_2080.txt @@ -0,0 +1,3 @@ +Shark Boy +GreninjaGamer230 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2081.txt b/mods/skinsdb/meta/character_2081.txt new file mode 100644 index 00000000..950d696d --- /dev/null +++ b/mods/skinsdb/meta/character_2081.txt @@ -0,0 +1,3 @@ +Steve in final smash phase +GreninjaGamer230 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2082.txt b/mods/skinsdb/meta/character_2082.txt new file mode 100644 index 00000000..124d91de --- /dev/null +++ b/mods/skinsdb/meta/character_2082.txt @@ -0,0 +1,3 @@ +Mario Mash-up pack (Wii U-Switch Pack) +GreninjaGamer230 +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2083.txt b/mods/skinsdb/meta/character_2083.txt new file mode 100644 index 00000000..1bf45197 --- /dev/null +++ b/mods/skinsdb/meta/character_2083.txt @@ -0,0 +1,3 @@ +Ash Greninja +GreninjaGamer230 +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2084.txt b/mods/skinsdb/meta/character_2084.txt new file mode 100644 index 00000000..79bbf4ec --- /dev/null +++ b/mods/skinsdb/meta/character_2084.txt @@ -0,0 +1,3 @@ +Lint BOTW +GreninjaGamer230 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2085.txt b/mods/skinsdb/meta/character_2085.txt new file mode 100644 index 00000000..15b9c104 --- /dev/null +++ b/mods/skinsdb/meta/character_2085.txt @@ -0,0 +1,3 @@ +Lloyd Ninjago +GreninjaGamer230 +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2086.txt b/mods/skinsdb/meta/character_2086.txt new file mode 100644 index 00000000..8f091818 --- /dev/null +++ b/mods/skinsdb/meta/character_2086.txt @@ -0,0 +1,3 @@ +MUD1 +MUD1 +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2087.txt b/mods/skinsdb/meta/character_2087.txt new file mode 100644 index 00000000..4d6f71a9 --- /dev/null +++ b/mods/skinsdb/meta/character_2087.txt @@ -0,0 +1,3 @@ +Gamingoont +Gamingoont +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2088.txt b/mods/skinsdb/meta/character_2088.txt new file mode 100644 index 00000000..081c090d --- /dev/null +++ b/mods/skinsdb/meta/character_2088.txt @@ -0,0 +1,3 @@ +rudzik8 +rudzik8 +CC BY 4.0 diff --git a/mods/skinsdb/meta/character_2089.txt b/mods/skinsdb/meta/character_2089.txt new file mode 100644 index 00000000..b2184521 --- /dev/null +++ b/mods/skinsdb/meta/character_2089.txt @@ -0,0 +1,3 @@ +Pharaoh Farao Faraon +Ezequiel Gustavo Martinez +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2090.txt b/mods/skinsdb/meta/character_2090.txt new file mode 100644 index 00000000..6fa03c69 --- /dev/null +++ b/mods/skinsdb/meta/character_2090.txt @@ -0,0 +1,3 @@ +Vlad +ElVladiskov-Meteorofbullshit +CC BY-NC-SA 3.0 diff --git a/mods/skinsdb/meta/character_2091.txt b/mods/skinsdb/meta/character_2091.txt new file mode 100644 index 00000000..8b053465 --- /dev/null +++ b/mods/skinsdb/meta/character_2091.txt @@ -0,0 +1,3 @@ +Sikera Junior +Ezequiel Gustavo Martinez +CC BY-SA 3.0 diff --git a/mods/skinsdb/mod.conf b/mods/skinsdb/mod.conf index 51ba162a..b79cd343 100644 --- a/mods/skinsdb/mod.conf +++ b/mods/skinsdb/mod.conf @@ -2,3 +2,4 @@ name = skinsdb description = Player skin mod, supporting unified_inventory, sfinv and smart_inventory depends = player_api optional_depends = unified_inventory,3d_armor,clothing,sfinv +min_minetest_version = 5.4.0 diff --git a/mods/skinsdb/textures/character_1951.png b/mods/skinsdb/textures/character_1951.png new file mode 100644 index 00000000..68cc5c77 Binary files /dev/null and b/mods/skinsdb/textures/character_1951.png differ diff --git a/mods/skinsdb/textures/character_1952.png b/mods/skinsdb/textures/character_1952.png new file mode 100644 index 00000000..15bb5b3d Binary files /dev/null and b/mods/skinsdb/textures/character_1952.png differ diff --git a/mods/skinsdb/textures/character_1953.png b/mods/skinsdb/textures/character_1953.png new file mode 100644 index 00000000..154f13b3 Binary files /dev/null and b/mods/skinsdb/textures/character_1953.png differ diff --git a/mods/skinsdb/textures/character_1954.png b/mods/skinsdb/textures/character_1954.png new file mode 100644 index 00000000..9c5f67f0 Binary files /dev/null and b/mods/skinsdb/textures/character_1954.png differ diff --git a/mods/skinsdb/textures/character_1955.png b/mods/skinsdb/textures/character_1955.png new file mode 100644 index 00000000..28f6896a Binary files /dev/null and b/mods/skinsdb/textures/character_1955.png differ diff --git a/mods/skinsdb/textures/character_1956.png b/mods/skinsdb/textures/character_1956.png new file mode 100644 index 00000000..391062d3 Binary files /dev/null and b/mods/skinsdb/textures/character_1956.png differ diff --git a/mods/skinsdb/textures/character_1957.png b/mods/skinsdb/textures/character_1957.png new file mode 100644 index 00000000..9f31621b Binary files /dev/null and b/mods/skinsdb/textures/character_1957.png differ diff --git a/mods/skinsdb/textures/character_1958.png b/mods/skinsdb/textures/character_1958.png new file mode 100644 index 00000000..4fb61aea Binary files /dev/null and b/mods/skinsdb/textures/character_1958.png differ diff --git a/mods/skinsdb/textures/character_1959.png b/mods/skinsdb/textures/character_1959.png new file mode 100644 index 00000000..016f83d7 Binary files /dev/null and b/mods/skinsdb/textures/character_1959.png differ diff --git a/mods/skinsdb/textures/character_1960.png b/mods/skinsdb/textures/character_1960.png new file mode 100644 index 00000000..8424d8a3 Binary files /dev/null and b/mods/skinsdb/textures/character_1960.png differ diff --git a/mods/skinsdb/textures/character_1961.png b/mods/skinsdb/textures/character_1961.png new file mode 100644 index 00000000..a0612020 Binary files /dev/null and b/mods/skinsdb/textures/character_1961.png differ diff --git a/mods/skinsdb/textures/character_1962.png b/mods/skinsdb/textures/character_1962.png new file mode 100644 index 00000000..129b2eea Binary files /dev/null and b/mods/skinsdb/textures/character_1962.png differ diff --git a/mods/skinsdb/textures/character_1963.png b/mods/skinsdb/textures/character_1963.png new file mode 100644 index 00000000..9a4db31a Binary files /dev/null and b/mods/skinsdb/textures/character_1963.png differ diff --git a/mods/skinsdb/textures/character_1964.png b/mods/skinsdb/textures/character_1964.png new file mode 100644 index 00000000..6cfaf088 Binary files /dev/null and b/mods/skinsdb/textures/character_1964.png differ diff --git a/mods/skinsdb/textures/character_1965.png b/mods/skinsdb/textures/character_1965.png new file mode 100644 index 00000000..e78d6cb1 Binary files /dev/null and b/mods/skinsdb/textures/character_1965.png differ diff --git a/mods/skinsdb/textures/character_1966.png b/mods/skinsdb/textures/character_1966.png new file mode 100644 index 00000000..e8fd6e13 Binary files /dev/null and b/mods/skinsdb/textures/character_1966.png differ diff --git a/mods/skinsdb/textures/character_1967.png b/mods/skinsdb/textures/character_1967.png new file mode 100644 index 00000000..807d0684 Binary files /dev/null and b/mods/skinsdb/textures/character_1967.png differ diff --git a/mods/skinsdb/textures/character_1968.png b/mods/skinsdb/textures/character_1968.png new file mode 100644 index 00000000..39761685 Binary files /dev/null and b/mods/skinsdb/textures/character_1968.png differ diff --git a/mods/skinsdb/textures/character_1969.png b/mods/skinsdb/textures/character_1969.png new file mode 100644 index 00000000..bb2e62d8 Binary files /dev/null and b/mods/skinsdb/textures/character_1969.png differ diff --git a/mods/skinsdb/textures/character_1970.png b/mods/skinsdb/textures/character_1970.png new file mode 100644 index 00000000..4c738946 Binary files /dev/null and b/mods/skinsdb/textures/character_1970.png differ diff --git a/mods/skinsdb/textures/character_1971.png b/mods/skinsdb/textures/character_1971.png new file mode 100644 index 00000000..9091a11b Binary files /dev/null and b/mods/skinsdb/textures/character_1971.png differ diff --git a/mods/skinsdb/textures/character_1972.png b/mods/skinsdb/textures/character_1972.png new file mode 100644 index 00000000..f9bc49cc Binary files /dev/null and b/mods/skinsdb/textures/character_1972.png differ diff --git a/mods/skinsdb/textures/character_1973.png b/mods/skinsdb/textures/character_1973.png new file mode 100644 index 00000000..bdfb86df Binary files /dev/null and b/mods/skinsdb/textures/character_1973.png differ diff --git a/mods/skinsdb/textures/character_1974.png b/mods/skinsdb/textures/character_1974.png new file mode 100644 index 00000000..3542765f Binary files /dev/null and b/mods/skinsdb/textures/character_1974.png differ diff --git a/mods/skinsdb/textures/character_1975.png b/mods/skinsdb/textures/character_1975.png new file mode 100644 index 00000000..8d6a4b6f Binary files /dev/null and b/mods/skinsdb/textures/character_1975.png differ diff --git a/mods/skinsdb/textures/character_1976.png b/mods/skinsdb/textures/character_1976.png new file mode 100644 index 00000000..139a8100 Binary files /dev/null and b/mods/skinsdb/textures/character_1976.png differ diff --git a/mods/skinsdb/textures/character_1977.png b/mods/skinsdb/textures/character_1977.png new file mode 100644 index 00000000..46d2168c Binary files /dev/null and b/mods/skinsdb/textures/character_1977.png differ diff --git a/mods/skinsdb/textures/character_1978.png b/mods/skinsdb/textures/character_1978.png new file mode 100644 index 00000000..6c143961 Binary files /dev/null and b/mods/skinsdb/textures/character_1978.png differ diff --git a/mods/skinsdb/textures/character_1979.png b/mods/skinsdb/textures/character_1979.png new file mode 100644 index 00000000..84f450ba Binary files /dev/null and b/mods/skinsdb/textures/character_1979.png differ diff --git a/mods/skinsdb/textures/character_1980.png b/mods/skinsdb/textures/character_1980.png new file mode 100644 index 00000000..27669f43 Binary files /dev/null and b/mods/skinsdb/textures/character_1980.png differ diff --git a/mods/skinsdb/textures/character_1981.png b/mods/skinsdb/textures/character_1981.png new file mode 100644 index 00000000..34194b76 Binary files /dev/null and b/mods/skinsdb/textures/character_1981.png differ diff --git a/mods/skinsdb/textures/character_1982.png b/mods/skinsdb/textures/character_1982.png new file mode 100644 index 00000000..fb5c5e5d Binary files /dev/null and b/mods/skinsdb/textures/character_1982.png differ diff --git a/mods/skinsdb/textures/character_1983.png b/mods/skinsdb/textures/character_1983.png new file mode 100644 index 00000000..bf4c3c44 Binary files /dev/null and b/mods/skinsdb/textures/character_1983.png differ diff --git a/mods/skinsdb/textures/character_1984.png b/mods/skinsdb/textures/character_1984.png new file mode 100644 index 00000000..6ee4869f Binary files /dev/null and b/mods/skinsdb/textures/character_1984.png differ diff --git a/mods/skinsdb/textures/character_1985.png b/mods/skinsdb/textures/character_1985.png new file mode 100644 index 00000000..5518c3b0 Binary files /dev/null and b/mods/skinsdb/textures/character_1985.png differ diff --git a/mods/skinsdb/textures/character_1986.png b/mods/skinsdb/textures/character_1986.png new file mode 100644 index 00000000..71f02471 Binary files /dev/null and b/mods/skinsdb/textures/character_1986.png differ diff --git a/mods/skinsdb/textures/character_1987.png b/mods/skinsdb/textures/character_1987.png new file mode 100644 index 00000000..16382f18 Binary files /dev/null and b/mods/skinsdb/textures/character_1987.png differ diff --git a/mods/skinsdb/textures/character_1988.png b/mods/skinsdb/textures/character_1988.png new file mode 100644 index 00000000..0d9f9c01 Binary files /dev/null and b/mods/skinsdb/textures/character_1988.png differ diff --git a/mods/skinsdb/textures/character_1989.png b/mods/skinsdb/textures/character_1989.png new file mode 100644 index 00000000..d5762d59 Binary files /dev/null and b/mods/skinsdb/textures/character_1989.png differ diff --git a/mods/skinsdb/textures/character_1990.png b/mods/skinsdb/textures/character_1990.png new file mode 100644 index 00000000..e9f71787 Binary files /dev/null and b/mods/skinsdb/textures/character_1990.png differ diff --git a/mods/skinsdb/textures/character_1991.png b/mods/skinsdb/textures/character_1991.png new file mode 100644 index 00000000..8897840f Binary files /dev/null and b/mods/skinsdb/textures/character_1991.png differ diff --git a/mods/skinsdb/textures/character_1992.png b/mods/skinsdb/textures/character_1992.png new file mode 100644 index 00000000..e88d1c73 Binary files /dev/null and b/mods/skinsdb/textures/character_1992.png differ diff --git a/mods/skinsdb/textures/character_1993.png b/mods/skinsdb/textures/character_1993.png new file mode 100644 index 00000000..ee1da89b Binary files /dev/null and b/mods/skinsdb/textures/character_1993.png differ diff --git a/mods/skinsdb/textures/character_1994.png b/mods/skinsdb/textures/character_1994.png new file mode 100644 index 00000000..8ff77800 Binary files /dev/null and b/mods/skinsdb/textures/character_1994.png differ diff --git a/mods/skinsdb/textures/character_1995.png b/mods/skinsdb/textures/character_1995.png new file mode 100644 index 00000000..b30259f6 Binary files /dev/null and b/mods/skinsdb/textures/character_1995.png differ diff --git a/mods/skinsdb/textures/character_1996.png b/mods/skinsdb/textures/character_1996.png new file mode 100644 index 00000000..0670a372 Binary files /dev/null and b/mods/skinsdb/textures/character_1996.png differ diff --git a/mods/skinsdb/textures/character_1997.png b/mods/skinsdb/textures/character_1997.png new file mode 100644 index 00000000..ab390721 Binary files /dev/null and b/mods/skinsdb/textures/character_1997.png differ diff --git a/mods/skinsdb/textures/character_1998.png b/mods/skinsdb/textures/character_1998.png new file mode 100644 index 00000000..4d3aa9c4 Binary files /dev/null and b/mods/skinsdb/textures/character_1998.png differ diff --git a/mods/skinsdb/textures/character_1999.png b/mods/skinsdb/textures/character_1999.png new file mode 100644 index 00000000..de67edd4 Binary files /dev/null and b/mods/skinsdb/textures/character_1999.png differ diff --git a/mods/skinsdb/textures/character_2000.png b/mods/skinsdb/textures/character_2000.png new file mode 100644 index 00000000..91ec6388 Binary files /dev/null and b/mods/skinsdb/textures/character_2000.png differ diff --git a/mods/skinsdb/textures/character_2001.png b/mods/skinsdb/textures/character_2001.png new file mode 100644 index 00000000..1927e216 Binary files /dev/null and b/mods/skinsdb/textures/character_2001.png differ diff --git a/mods/skinsdb/textures/character_2002.png b/mods/skinsdb/textures/character_2002.png new file mode 100644 index 00000000..2e777b72 Binary files /dev/null and b/mods/skinsdb/textures/character_2002.png differ diff --git a/mods/skinsdb/textures/character_2003.png b/mods/skinsdb/textures/character_2003.png new file mode 100644 index 00000000..961b94f9 Binary files /dev/null and b/mods/skinsdb/textures/character_2003.png differ diff --git a/mods/skinsdb/textures/character_2004.png b/mods/skinsdb/textures/character_2004.png new file mode 100644 index 00000000..ac2408ad Binary files /dev/null and b/mods/skinsdb/textures/character_2004.png differ diff --git a/mods/skinsdb/textures/character_2005.png b/mods/skinsdb/textures/character_2005.png new file mode 100644 index 00000000..82bffbff Binary files /dev/null and b/mods/skinsdb/textures/character_2005.png differ diff --git a/mods/skinsdb/textures/character_2006.png b/mods/skinsdb/textures/character_2006.png new file mode 100644 index 00000000..04821c84 Binary files /dev/null and b/mods/skinsdb/textures/character_2006.png differ diff --git a/mods/skinsdb/textures/character_2007.png b/mods/skinsdb/textures/character_2007.png new file mode 100644 index 00000000..67932acd Binary files /dev/null and b/mods/skinsdb/textures/character_2007.png differ diff --git a/mods/skinsdb/textures/character_2008.png b/mods/skinsdb/textures/character_2008.png new file mode 100644 index 00000000..95f4ff80 Binary files /dev/null and b/mods/skinsdb/textures/character_2008.png differ diff --git a/mods/skinsdb/textures/character_2009.png b/mods/skinsdb/textures/character_2009.png new file mode 100644 index 00000000..10e7db0f Binary files /dev/null and b/mods/skinsdb/textures/character_2009.png differ diff --git a/mods/skinsdb/textures/character_2010.png b/mods/skinsdb/textures/character_2010.png new file mode 100644 index 00000000..c3e25480 Binary files /dev/null and b/mods/skinsdb/textures/character_2010.png differ diff --git a/mods/skinsdb/textures/character_2011.png b/mods/skinsdb/textures/character_2011.png new file mode 100644 index 00000000..ddc5856e Binary files /dev/null and b/mods/skinsdb/textures/character_2011.png differ diff --git a/mods/skinsdb/textures/character_2012.png b/mods/skinsdb/textures/character_2012.png new file mode 100644 index 00000000..84f2a826 Binary files /dev/null and b/mods/skinsdb/textures/character_2012.png differ diff --git a/mods/skinsdb/textures/character_2013.png b/mods/skinsdb/textures/character_2013.png new file mode 100644 index 00000000..20d17e2b Binary files /dev/null and b/mods/skinsdb/textures/character_2013.png differ diff --git a/mods/skinsdb/textures/character_2014.png b/mods/skinsdb/textures/character_2014.png new file mode 100644 index 00000000..008490c6 Binary files /dev/null and b/mods/skinsdb/textures/character_2014.png differ diff --git a/mods/skinsdb/textures/character_2015.png b/mods/skinsdb/textures/character_2015.png new file mode 100644 index 00000000..e427131a Binary files /dev/null and b/mods/skinsdb/textures/character_2015.png differ diff --git a/mods/skinsdb/textures/character_2016.png b/mods/skinsdb/textures/character_2016.png new file mode 100644 index 00000000..00d50548 Binary files /dev/null and b/mods/skinsdb/textures/character_2016.png differ diff --git a/mods/skinsdb/textures/character_2017.png b/mods/skinsdb/textures/character_2017.png new file mode 100644 index 00000000..971549a7 Binary files /dev/null and b/mods/skinsdb/textures/character_2017.png differ diff --git a/mods/skinsdb/textures/character_2018.png b/mods/skinsdb/textures/character_2018.png new file mode 100644 index 00000000..3d73fb90 Binary files /dev/null and b/mods/skinsdb/textures/character_2018.png differ diff --git a/mods/skinsdb/textures/character_2019.png b/mods/skinsdb/textures/character_2019.png new file mode 100644 index 00000000..8eee68de Binary files /dev/null and b/mods/skinsdb/textures/character_2019.png differ diff --git a/mods/skinsdb/textures/character_2020.png b/mods/skinsdb/textures/character_2020.png new file mode 100644 index 00000000..fcadff76 Binary files /dev/null and b/mods/skinsdb/textures/character_2020.png differ diff --git a/mods/skinsdb/textures/character_2021.png b/mods/skinsdb/textures/character_2021.png new file mode 100644 index 00000000..2a1210b0 Binary files /dev/null and b/mods/skinsdb/textures/character_2021.png differ diff --git a/mods/skinsdb/textures/character_2022.png b/mods/skinsdb/textures/character_2022.png new file mode 100644 index 00000000..01806481 Binary files /dev/null and b/mods/skinsdb/textures/character_2022.png differ diff --git a/mods/skinsdb/textures/character_2023.png b/mods/skinsdb/textures/character_2023.png new file mode 100644 index 00000000..6676fdeb Binary files /dev/null and b/mods/skinsdb/textures/character_2023.png differ diff --git a/mods/skinsdb/textures/character_2024.png b/mods/skinsdb/textures/character_2024.png new file mode 100644 index 00000000..e31abd39 Binary files /dev/null and b/mods/skinsdb/textures/character_2024.png differ diff --git a/mods/skinsdb/textures/character_2025.png b/mods/skinsdb/textures/character_2025.png new file mode 100644 index 00000000..b2f78226 Binary files /dev/null and b/mods/skinsdb/textures/character_2025.png differ diff --git a/mods/skinsdb/textures/character_2026.png b/mods/skinsdb/textures/character_2026.png new file mode 100644 index 00000000..5f75049f Binary files /dev/null and b/mods/skinsdb/textures/character_2026.png differ diff --git a/mods/skinsdb/textures/character_2027.png b/mods/skinsdb/textures/character_2027.png new file mode 100644 index 00000000..ee089f14 Binary files /dev/null and b/mods/skinsdb/textures/character_2027.png differ diff --git a/mods/skinsdb/textures/character_2028.png b/mods/skinsdb/textures/character_2028.png new file mode 100644 index 00000000..9343d60d Binary files /dev/null and b/mods/skinsdb/textures/character_2028.png differ diff --git a/mods/skinsdb/textures/character_2029.png b/mods/skinsdb/textures/character_2029.png new file mode 100644 index 00000000..5191b1e4 Binary files /dev/null and b/mods/skinsdb/textures/character_2029.png differ diff --git a/mods/skinsdb/textures/character_2030.png b/mods/skinsdb/textures/character_2030.png new file mode 100644 index 00000000..351078c2 Binary files /dev/null and b/mods/skinsdb/textures/character_2030.png differ diff --git a/mods/skinsdb/textures/character_2031.png b/mods/skinsdb/textures/character_2031.png new file mode 100644 index 00000000..6914f12d Binary files /dev/null and b/mods/skinsdb/textures/character_2031.png differ diff --git a/mods/skinsdb/textures/character_2032.png b/mods/skinsdb/textures/character_2032.png new file mode 100644 index 00000000..a0f8ba67 Binary files /dev/null and b/mods/skinsdb/textures/character_2032.png differ diff --git a/mods/skinsdb/textures/character_2033.png b/mods/skinsdb/textures/character_2033.png new file mode 100644 index 00000000..77f0995d Binary files /dev/null and b/mods/skinsdb/textures/character_2033.png differ diff --git a/mods/skinsdb/textures/character_2034.png b/mods/skinsdb/textures/character_2034.png new file mode 100644 index 00000000..d6e99de8 Binary files /dev/null and b/mods/skinsdb/textures/character_2034.png differ diff --git a/mods/skinsdb/textures/character_2035.png b/mods/skinsdb/textures/character_2035.png new file mode 100644 index 00000000..c10f97db Binary files /dev/null and b/mods/skinsdb/textures/character_2035.png differ diff --git a/mods/skinsdb/textures/character_2036.png b/mods/skinsdb/textures/character_2036.png new file mode 100644 index 00000000..11d4561d Binary files /dev/null and b/mods/skinsdb/textures/character_2036.png differ diff --git a/mods/skinsdb/textures/character_2037.png b/mods/skinsdb/textures/character_2037.png new file mode 100644 index 00000000..77c59ac2 Binary files /dev/null and b/mods/skinsdb/textures/character_2037.png differ diff --git a/mods/skinsdb/textures/character_2038.png b/mods/skinsdb/textures/character_2038.png new file mode 100644 index 00000000..2b0561e9 Binary files /dev/null and b/mods/skinsdb/textures/character_2038.png differ diff --git a/mods/skinsdb/textures/character_2039.png b/mods/skinsdb/textures/character_2039.png new file mode 100644 index 00000000..872bca49 Binary files /dev/null and b/mods/skinsdb/textures/character_2039.png differ diff --git a/mods/skinsdb/textures/character_2040.png b/mods/skinsdb/textures/character_2040.png new file mode 100644 index 00000000..faa16d92 Binary files /dev/null and b/mods/skinsdb/textures/character_2040.png differ diff --git a/mods/skinsdb/textures/character_2041.png b/mods/skinsdb/textures/character_2041.png new file mode 100644 index 00000000..125ef3ab Binary files /dev/null and b/mods/skinsdb/textures/character_2041.png differ diff --git a/mods/skinsdb/textures/character_2042.png b/mods/skinsdb/textures/character_2042.png new file mode 100644 index 00000000..d635284b Binary files /dev/null and b/mods/skinsdb/textures/character_2042.png differ diff --git a/mods/skinsdb/textures/character_2043.png b/mods/skinsdb/textures/character_2043.png new file mode 100644 index 00000000..fbed1bf1 Binary files /dev/null and b/mods/skinsdb/textures/character_2043.png differ diff --git a/mods/skinsdb/textures/character_2044.png b/mods/skinsdb/textures/character_2044.png new file mode 100644 index 00000000..1f835275 Binary files /dev/null and b/mods/skinsdb/textures/character_2044.png differ diff --git a/mods/skinsdb/textures/character_2045.png b/mods/skinsdb/textures/character_2045.png new file mode 100644 index 00000000..196a18b6 Binary files /dev/null and b/mods/skinsdb/textures/character_2045.png differ diff --git a/mods/skinsdb/textures/character_2046.png b/mods/skinsdb/textures/character_2046.png new file mode 100644 index 00000000..df8f7d3f Binary files /dev/null and b/mods/skinsdb/textures/character_2046.png differ diff --git a/mods/skinsdb/textures/character_2047.png b/mods/skinsdb/textures/character_2047.png new file mode 100644 index 00000000..6631de70 Binary files /dev/null and b/mods/skinsdb/textures/character_2047.png differ diff --git a/mods/skinsdb/textures/character_2048.png b/mods/skinsdb/textures/character_2048.png new file mode 100644 index 00000000..5f0e05e6 Binary files /dev/null and b/mods/skinsdb/textures/character_2048.png differ diff --git a/mods/skinsdb/textures/character_2049.png b/mods/skinsdb/textures/character_2049.png new file mode 100644 index 00000000..3d6d97ac Binary files /dev/null and b/mods/skinsdb/textures/character_2049.png differ diff --git a/mods/skinsdb/textures/character_2050.png b/mods/skinsdb/textures/character_2050.png new file mode 100644 index 00000000..d121a0d3 Binary files /dev/null and b/mods/skinsdb/textures/character_2050.png differ diff --git a/mods/skinsdb/textures/character_2051.png b/mods/skinsdb/textures/character_2051.png new file mode 100644 index 00000000..b06c7d42 Binary files /dev/null and b/mods/skinsdb/textures/character_2051.png differ diff --git a/mods/skinsdb/textures/character_2052.png b/mods/skinsdb/textures/character_2052.png new file mode 100644 index 00000000..62303e21 Binary files /dev/null and b/mods/skinsdb/textures/character_2052.png differ diff --git a/mods/skinsdb/textures/character_2053.png b/mods/skinsdb/textures/character_2053.png new file mode 100644 index 00000000..bec28d57 Binary files /dev/null and b/mods/skinsdb/textures/character_2053.png differ diff --git a/mods/skinsdb/textures/character_2054.png b/mods/skinsdb/textures/character_2054.png new file mode 100644 index 00000000..396f5ff0 Binary files /dev/null and b/mods/skinsdb/textures/character_2054.png differ diff --git a/mods/skinsdb/textures/character_2055.png b/mods/skinsdb/textures/character_2055.png new file mode 100644 index 00000000..e32b85c6 Binary files /dev/null and b/mods/skinsdb/textures/character_2055.png differ diff --git a/mods/skinsdb/textures/character_2056.png b/mods/skinsdb/textures/character_2056.png new file mode 100644 index 00000000..846bde8a Binary files /dev/null and b/mods/skinsdb/textures/character_2056.png differ diff --git a/mods/skinsdb/textures/character_2057.png b/mods/skinsdb/textures/character_2057.png new file mode 100644 index 00000000..0d671e2b Binary files /dev/null and b/mods/skinsdb/textures/character_2057.png differ diff --git a/mods/skinsdb/textures/character_2058.png b/mods/skinsdb/textures/character_2058.png new file mode 100644 index 00000000..53c6a61e Binary files /dev/null and b/mods/skinsdb/textures/character_2058.png differ diff --git a/mods/skinsdb/textures/character_2059.png b/mods/skinsdb/textures/character_2059.png new file mode 100644 index 00000000..063d3324 Binary files /dev/null and b/mods/skinsdb/textures/character_2059.png differ diff --git a/mods/skinsdb/textures/character_2060.png b/mods/skinsdb/textures/character_2060.png new file mode 100644 index 00000000..97ce64ee Binary files /dev/null and b/mods/skinsdb/textures/character_2060.png differ diff --git a/mods/skinsdb/textures/character_2061.png b/mods/skinsdb/textures/character_2061.png new file mode 100644 index 00000000..5a968950 Binary files /dev/null and b/mods/skinsdb/textures/character_2061.png differ diff --git a/mods/skinsdb/textures/character_2062.png b/mods/skinsdb/textures/character_2062.png new file mode 100644 index 00000000..2c1d1f10 Binary files /dev/null and b/mods/skinsdb/textures/character_2062.png differ diff --git a/mods/skinsdb/textures/character_2063.png b/mods/skinsdb/textures/character_2063.png new file mode 100644 index 00000000..c380e8a3 Binary files /dev/null and b/mods/skinsdb/textures/character_2063.png differ diff --git a/mods/skinsdb/textures/character_2064.png b/mods/skinsdb/textures/character_2064.png new file mode 100644 index 00000000..c08d695d Binary files /dev/null and b/mods/skinsdb/textures/character_2064.png differ diff --git a/mods/skinsdb/textures/character_2065.png b/mods/skinsdb/textures/character_2065.png new file mode 100644 index 00000000..157d2fd6 Binary files /dev/null and b/mods/skinsdb/textures/character_2065.png differ diff --git a/mods/skinsdb/textures/character_2066.png b/mods/skinsdb/textures/character_2066.png new file mode 100644 index 00000000..2613c058 Binary files /dev/null and b/mods/skinsdb/textures/character_2066.png differ diff --git a/mods/skinsdb/textures/character_2067.png b/mods/skinsdb/textures/character_2067.png new file mode 100644 index 00000000..db113362 Binary files /dev/null and b/mods/skinsdb/textures/character_2067.png differ diff --git a/mods/skinsdb/textures/character_2068.png b/mods/skinsdb/textures/character_2068.png new file mode 100644 index 00000000..02088f5a Binary files /dev/null and b/mods/skinsdb/textures/character_2068.png differ diff --git a/mods/skinsdb/textures/character_2069.png b/mods/skinsdb/textures/character_2069.png new file mode 100644 index 00000000..4cd72044 Binary files /dev/null and b/mods/skinsdb/textures/character_2069.png differ diff --git a/mods/skinsdb/textures/character_2070.png b/mods/skinsdb/textures/character_2070.png new file mode 100644 index 00000000..daa47ae4 Binary files /dev/null and b/mods/skinsdb/textures/character_2070.png differ diff --git a/mods/skinsdb/textures/character_2071.png b/mods/skinsdb/textures/character_2071.png new file mode 100644 index 00000000..1b47e2da Binary files /dev/null and b/mods/skinsdb/textures/character_2071.png differ diff --git a/mods/skinsdb/textures/character_2072.png b/mods/skinsdb/textures/character_2072.png new file mode 100644 index 00000000..974f0b2a Binary files /dev/null and b/mods/skinsdb/textures/character_2072.png differ diff --git a/mods/skinsdb/textures/character_2073.png b/mods/skinsdb/textures/character_2073.png new file mode 100644 index 00000000..5089eabc Binary files /dev/null and b/mods/skinsdb/textures/character_2073.png differ diff --git a/mods/skinsdb/textures/character_2074.png b/mods/skinsdb/textures/character_2074.png new file mode 100644 index 00000000..c2ec2e46 Binary files /dev/null and b/mods/skinsdb/textures/character_2074.png differ diff --git a/mods/skinsdb/textures/character_2075.png b/mods/skinsdb/textures/character_2075.png new file mode 100644 index 00000000..56ae8b8e Binary files /dev/null and b/mods/skinsdb/textures/character_2075.png differ diff --git a/mods/skinsdb/textures/character_2076.png b/mods/skinsdb/textures/character_2076.png new file mode 100644 index 00000000..2e5b4d6f Binary files /dev/null and b/mods/skinsdb/textures/character_2076.png differ diff --git a/mods/skinsdb/textures/character_2077.png b/mods/skinsdb/textures/character_2077.png new file mode 100644 index 00000000..ddd22308 Binary files /dev/null and b/mods/skinsdb/textures/character_2077.png differ diff --git a/mods/skinsdb/textures/character_2078.png b/mods/skinsdb/textures/character_2078.png new file mode 100644 index 00000000..47806f56 Binary files /dev/null and b/mods/skinsdb/textures/character_2078.png differ diff --git a/mods/skinsdb/textures/character_2079.png b/mods/skinsdb/textures/character_2079.png new file mode 100644 index 00000000..c489a64c Binary files /dev/null and b/mods/skinsdb/textures/character_2079.png differ diff --git a/mods/skinsdb/textures/character_2080.png b/mods/skinsdb/textures/character_2080.png new file mode 100644 index 00000000..13f985f3 Binary files /dev/null and b/mods/skinsdb/textures/character_2080.png differ diff --git a/mods/skinsdb/textures/character_2081.png b/mods/skinsdb/textures/character_2081.png new file mode 100644 index 00000000..fe44d0bb Binary files /dev/null and b/mods/skinsdb/textures/character_2081.png differ diff --git a/mods/skinsdb/textures/character_2082.png b/mods/skinsdb/textures/character_2082.png new file mode 100644 index 00000000..57a1784a Binary files /dev/null and b/mods/skinsdb/textures/character_2082.png differ diff --git a/mods/skinsdb/textures/character_2083.png b/mods/skinsdb/textures/character_2083.png new file mode 100644 index 00000000..ac18b25c Binary files /dev/null and b/mods/skinsdb/textures/character_2083.png differ diff --git a/mods/skinsdb/textures/character_2084.png b/mods/skinsdb/textures/character_2084.png new file mode 100644 index 00000000..c0d08070 Binary files /dev/null and b/mods/skinsdb/textures/character_2084.png differ diff --git a/mods/skinsdb/textures/character_2085.png b/mods/skinsdb/textures/character_2085.png new file mode 100644 index 00000000..8e7ab32d Binary files /dev/null and b/mods/skinsdb/textures/character_2085.png differ diff --git a/mods/skinsdb/textures/character_2086.png b/mods/skinsdb/textures/character_2086.png new file mode 100644 index 00000000..750c87c9 Binary files /dev/null and b/mods/skinsdb/textures/character_2086.png differ diff --git a/mods/skinsdb/textures/character_2087.png b/mods/skinsdb/textures/character_2087.png new file mode 100644 index 00000000..e2a4b653 Binary files /dev/null and b/mods/skinsdb/textures/character_2087.png differ diff --git a/mods/skinsdb/textures/character_2088.png b/mods/skinsdb/textures/character_2088.png new file mode 100644 index 00000000..9421b2ea Binary files /dev/null and b/mods/skinsdb/textures/character_2088.png differ diff --git a/mods/skinsdb/textures/character_2089.png b/mods/skinsdb/textures/character_2089.png new file mode 100644 index 00000000..bfcd4813 Binary files /dev/null and b/mods/skinsdb/textures/character_2089.png differ diff --git a/mods/skinsdb/textures/character_2090.png b/mods/skinsdb/textures/character_2090.png new file mode 100644 index 00000000..c753bec7 Binary files /dev/null and b/mods/skinsdb/textures/character_2090.png differ diff --git a/mods/skinsdb/textures/character_2091.png b/mods/skinsdb/textures/character_2091.png new file mode 100644 index 00000000..bf723751 Binary files /dev/null and b/mods/skinsdb/textures/character_2091.png differ diff --git a/mods/skinsdb/textures/ui_misc_form.png b/mods/skinsdb/textures/ui_misc_form.png deleted file mode 100644 index 2a7edb9d..00000000 Binary files a/mods/skinsdb/textures/ui_misc_form.png and /dev/null differ diff --git a/mods/skinsdb/unified_inventory_page.lua b/mods/skinsdb/unified_inventory_page.lua index 3bf9575e..d39ee4f4 100644 --- a/mods/skinsdb/unified_inventory_page.lua +++ b/mods/skinsdb/unified_inventory_page.lua @@ -1,10 +1,13 @@ local S = minetest.get_translator("skinsdb") unified_inventory.register_page("skins", { - get_formspec = function(player) + get_formspec = function(player, perplayer_formspec) local skin = skins.get_player_skin(player) - local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]"..skins.get_skin_info_formspec(skin).. - "button[.75,3;6.5,.5;skins_page;"..S("Change").."]" + local boffs = (type(perplayer_formspec) == "table") and 2 or 0.75 + + local formspec = perplayer_formspec.standard_inv_bg.. + skins.get_skin_info_formspec(skin, perplayer_formspec).. + "button["..boffs..",3;6.5,.5;skins_page;"..S("Change").."]" return {formspec=formspec} end, }) @@ -15,16 +18,16 @@ unified_inventory.register_button("skins", { tooltip = S("Skins"), }) -local function get_formspec(player) +local function get_formspec(player, perplayer_formspec) local context = skins.get_formspec_context(player) - local formspec = "background[0.06,0.99;7.92,7.52;ui_misc_form.png]".. - skins.get_skin_selection_formspec(player, context, -0.2) + local formspec = perplayer_formspec.standard_inv_bg.. + skins.get_skin_selection_formspec(player, context, perplayer_formspec) return formspec end unified_inventory.register_page("skins_page", { - get_formspec = function(player) - return {formspec=get_formspec(player)} + get_formspec = function(player, perplayer_formspec) + return {formspec=get_formspec(player, perplayer_formspec)} end }) diff --git a/mods/stained_glass/init.lua b/mods/stained_glass/init.lua index 1de7b270..b3ffd4ec 100644 --- a/mods/stained_glass/init.lua +++ b/mods/stained_glass/init.lua @@ -52,7 +52,7 @@ minetest.register_node("stained_glass:stained_glass", { paramtype2 = "color", palette = "unifieddyes_palette_extended.png", sunlight_propagates = true, - use_texture_alpha = true, + use_texture_alpha = "blend", light_source = myglow, is_ground_content = true, walkable = true, @@ -78,7 +78,7 @@ minetest.register_node("stained_glass:stained_trap_glass", { paramtype2 = "color", palette = "unifieddyes_palette_extended.png", sunlight_propagates = true, - use_texture_alpha = true, + use_texture_alpha = "blend", light_source = myglow, is_ground_content = true, walkable = false, diff --git a/mods/stairs/stairs.lua b/mods/stairs/stairs.lua index b9f98c61..6be63e7c 100644 --- a/mods/stairs/stairs.lua +++ b/mods/stairs/stairs.lua @@ -497,8 +497,38 @@ stairs.register_all("bred2", "xanadu:red2", "Decorative baked red clay 2", stairs.stone) +stairs.register_all("compressed_cobble", "xanadu:compressed_cobble", + {cracky = 3, level = 2}, + {"compressed_cobble.png"}, + "Compressed Cobble", + stairs.stone) + +stairs.register_all("compressed_dirt", "xanadu:compressed_dirt", + {crumbly = 2}, + {"compressed_dirt.png"}, + "Compressed Dirt", + stairs.stone) + +stairs.register_slope("steelblock1", "xanadu:steelblock1", + {cracky = 1, level = 2}, + {"steel_block1.png"}, + "Decorative Steelblock 1", + stairs.steel) + +stairs.register_slab("steelblock3", "xanadu:steelblock3", + {cracky = 1, level = 2}, + {"steel_block3.png"}, + "Decorative Steelblock 3", + stairs.steel) + +stairs.register_slope("steelblock5", "xanadu:steelblock5", + {cracky = 1, level = 2}, + {"steel_block5.png"}, + "Decorative Steelblock 5", + stairs.steel) end + --= Castle Mod if minetest.get_modpath("castle") then diff --git a/mods/stamina/init.lua b/mods/stamina/init.lua index 8acc1575..ee39c090 100644 --- a/mods/stamina/init.lua +++ b/mods/stamina/init.lua @@ -1,5 +1,5 @@ -stamina = {players = {}} +stamina = {players = {}, mod = "redo"} STAMINA_TICK = tonumber(minetest.settings:get("stamina_tick")) or 800 -- time in seconds after that 1 stamina point is taken @@ -8,17 +8,18 @@ STAMINA_HEALTH_TICK = 4 -- time in seconds after player gets healed/damaged STAMINA_MOVE_TICK = 0.5 -- time in seconds after the movement is checked STAMINA_POISON_TICK = 1.25 -- time in seconds after player is poisoned -STAMINA_EXHAUST_DIG = 3 -- exhaustion increased this value after digged node +STAMINA_EXHAUST_DIG = 2 -- exhaustion increased this value after digged node STAMINA_EXHAUST_PLACE = 1 -- .. after digging node STAMINA_EXHAUST_MOVE = 1.5 -- .. if player movement detected STAMINA_EXHAUST_JUMP = 5 -- .. if jumping -STAMINA_EXHAUST_CRAFT = 20 -- .. if player crafts +STAMINA_EXHAUST_CRAFT = 2 -- .. if player crafts STAMINA_EXHAUST_PUNCH = 40 -- .. if player punches another player STAMINA_EXHAUST_LVL = 160 -- at what exhaustion player saturation gets lowered STAMINA_HEAL = 1 -- number of HP player gets healed after STAMINA_HEALTH_TICK STAMINA_HEAL_LVL = 5 -- lower level of saturation needed to get healed -STAMINA_STARVE = 1 -- number of HP player gets damaged by stamina after STAMINA_HEALTH_TICK +STAMINA_STARVE = 1 -- number of HP player gets damaged by stamina after + -- STAMINA_HEALTH_TICK STAMINA_STARVE_LVL = 3 -- level of staturation that causes starving STAMINA_VISUAL_MAX = 20 -- hud bar extends only to 20 @@ -204,6 +205,30 @@ local function set_sprinting(name, sprinting) end +local function head_particle(player, texture) + + local prop = player:get_properties() + local pos = player:get_pos() ; pos.y = pos.y + prop.eye_height -- mouth level + local dir = player:get_look_dir() + + + minetest.add_particlespawner({ + amount = 5, + time = 0.1, + minpos = pos, + maxpos = pos, + minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1}, + maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1}, + minacc = {x = 0, y = -5, z = 0}, + maxacc = {x = 0, y = -9, z = 0}, + minexptime = 1, + maxexptime = 1, + minsize = 1, + maxsize = 2, + texture = texture + }) +end + local function drunk_tick() for _,player in ipairs(minetest.get_connected_players()) do @@ -218,6 +243,9 @@ local function drunk_tick() local num = stamina.players[name].drunk if num and num > 0 and math.floor(num / 20) == num / 20 then + + head_particle(player, "bubble.png") + minetest.sound_play("stamina_burp", {to_player = name, gain = 0.7}, true) end @@ -381,6 +409,8 @@ local function poison_tick() local hp = player:get_hp() - 1 + head_particle(player, "stamina_poison_particle.png") + if hp > 0 then player:set_hp(hp, {poison = true}) end @@ -517,25 +547,9 @@ function stamina.eat(hp_change, replace_with_item, itemstack, user, pointed_thin minetest.sound_play(snd, {to_player = name, gain = 0.7}, true) -- particle effect when eating - local pos = user:get_pos() ; pos.y = pos.y + 1.5 -- mouth level local texture = minetest.registered_items[itemname].inventory_image - local dir = user:get_look_dir() - minetest.add_particlespawner({ - amount = 5, - time = 0.1, - minpos = pos, - maxpos = pos, - minvel = {x = dir.x - 1, y = dir.y, z = dir.z - 1}, - maxvel = {x = dir.x + 1, y = dir.y, z = dir.z + 1}, - minacc = {x = 0, y = -5, z = 0}, - maxacc = {x = 0, y = -9, z = 0}, - minexptime = 1, - maxexptime = 1, - minsize = 1, - maxsize = 2, - texture = texture - }) + head_particle(user, texture) -- if player drinks milk then stop poison and being drunk local item_name = itemstack:get_name() or "" @@ -559,8 +573,9 @@ function stamina.eat(hp_change, replace_with_item, itemstack, user, pointed_thin if inv:room_for_item("main", {name = replace_with_item}) then inv:add_item("main", replace_with_item) else - pos.y = math.floor(pos.y - 1.0) - core.add_item(pos, replace_with_item) + local pos = user:get_pos() + + if pos then core.add_item(pos, replace_with_item) end end end end @@ -601,8 +616,7 @@ and minetest.settings:get_bool("enable_stamina") ~= false then if get_int_attribute(player) then - level = math.min(get_int_attribute(player), - STAMINA_VISUAL_MAX) + level = math.min(get_int_attribute(player), STAMINA_VISUAL_MAX) else local meta = player:get_meta() @@ -620,7 +634,7 @@ and minetest.settings:get_bool("enable_stamina") ~= false then number = level, alignment = {x = -1, y = -1}, offset = {x = -266, y = -110}, - max = 0, + max = 0 }) stamina.players[name] = { @@ -628,7 +642,7 @@ and minetest.settings:get_bool("enable_stamina") ~= false then exhaustion = 0, poisoned = nil, drunk = nil, - sprint = nil, + sprint = nil } end) @@ -675,10 +689,49 @@ else stamina.players[player:get_player_name()] = { poisoned = nil, sprint = nil, drunk = nil, exhaustion = 0} end) - end -- clear when player leaves minetest.register_on_leaveplayer(function(player) stamina.players[player:get_player_name()] = nil end) + + +--lucky blocks (if damage and stamina active) +if minetest.get_modpath("lucky_block") +and minetest.settings:get_bool("enable_damage") +and minetest.settings:get_bool("enable_stamina") ~= false then + + local effect_me = function(pos, player, def) + + local green = minetest.get_color_escape_sequence("#bada55") + local name = player:get_player_name() + + if def.poison or def.drunk then + + player:hud_change(stamina.players[name].hud_id, + "text", "stamina_hud_poison.png") + end + + if def.poison and def.poison > 0 then + + stamina.players[name].poisoned = def.poison + + minetest.chat_send_player(name, + green .. "Seems you have been poisoned!") + + elseif def.drunk and def.drunk > 0 then + + stamina.players[name].drunk = def.drunk + + minetest.chat_send_player(name, + green .. "You seem a little tipsy!") + end + end + + lucky_block:add_blocks({ + {"cus", effect_me, {poison = 5} }, + {"cus", effect_me, {poison = 10} }, + {"cus", effect_me, {drunk = 30} }, + }) +end diff --git a/mods/stamina/mod.conf b/mods/stamina/mod.conf index fb091e75..0f96b0a2 100644 --- a/mods/stamina/mod.conf +++ b/mods/stamina/mod.conf @@ -1,4 +1,4 @@ name = stamina depends = default -optional_depends = 3d_armor, player_monoids, pova +optional_depends = 3d_armor, player_monoids, pova, lucky_block description = Adds stamina, hunger and drunk effects. diff --git a/mods/stamina/textures/stamina_poison_particle.png b/mods/stamina/textures/stamina_poison_particle.png new file mode 100644 index 00000000..d239e742 Binary files /dev/null and b/mods/stamina/textures/stamina_poison_particle.png differ diff --git a/mods/techpack/README.md b/mods/techpack/README.md index 5bff2a9a..4a3ab2aa 100644 --- a/mods/techpack/README.md +++ b/mods/techpack/README.md @@ -1,4 +1,4 @@ -# TechPack V2.05 +# TechPack V2.06 TechPack, a Mining, Crafting, & Farming Modpack for Minetest. @@ -27,6 +27,7 @@ TechPack is a collection of following Mods: **The moved/copied nodes will not have valid node numbers, which could lead to a server crash.** TechPack provides: + - lumber tubes to connect 2 nodes - a Pusher node to pull/push items through tubes - a Distributor node with 4 output channels to sort incoming items @@ -64,9 +65,11 @@ TechPack provides: - a Display node for text outputs of the Controller - Metal ladders, stairways, and bridges - Warehouse Boxes in steel, copper, and gold +- A chest cart for the mod minecart TechPack supports the following mods: + - Farming Redo (Harvester, Fermenter) - Ethereal (Harvester, Quarry, Fermenter) - Pipeworks (Gravel Sieve) @@ -75,12 +78,14 @@ TechPack supports the following mods: ### Configuration + The following can be changed in the minetest menu (Settings -> Advanced Settings -> Mods -> tubelib) or directly in 'minetest.conf' - Maximum number of Forceload Blocks per player - Enable Basalt Stone (and disable ore generation via Cobblestone generator) - Machine aging value to calculate the lifetime of machines Example for 'minetest.conf': + ```LUA tubelib_basalt_stone_enabled = false tubelib_max_num_forceload_blocks = 12 @@ -88,6 +93,7 @@ tubelib_machine_aging_value = 200 ``` Example for a v1 compatible 'minetest.conf': + ```LUA tubelib_basalt_stone_enabled = false tubelib_max_num_forceload_blocks = 0 @@ -96,24 +102,30 @@ tubelib_machine_aging_value = 999999 #### Maximum number of Forceload Blocks per player -Default value is 12. + +Default value is 12. I higher number allows to build larger farms and machines which keep loaded, but increases the server load, too. But the areas are only loaded when the player is online. To be able to use e.g. 12 forceloaded blocks per player, the pararamter 'max_forceloaded_blocks' in 'minetest.conf' has to be ajusted. + #### Enable Basalt Stone (and disable ore generation via Cobblestone generator) -The lava/water Cobblestone generator allows to produce infinite Cobblestone. By means of Quarry, + +The lava/water Cobblestone generator allows to produce infinite Cobblestone. By means of Quarry, Grinder, and Gravel Sieve it allows to infinite generate ores. This can be disabled by means of the setting parameter. If enabled, the Cobblestone generator generates Basalt instead, which only can be used for building purposes. + #### Machine aging value to calculate the lifetime of machines -Default value is 200. + +Default value is 200. This aging value is used to calculate the lifetime of machines before they go defect. The value 200 (default) results in a lifetime for standard machines of about 2000 - 8000 item processing cycles (~2-4 hours). ### License + Copyright (C) 2017-2021 Joachim Stolberg Code: Licensed under the GNU AGPL version 3 or later. See LICENSE.txt Textures: CC BY-SA 3.0 @@ -121,26 +133,33 @@ Textures: CC BY-SA 3.0 ## Credits + ### Contributors -- oversword (PR #43, #57, #58, #59, #60, #62, #68, #74, #76) +- oversword (PR #43, #57, #58, #59, #60, #62, #68, #74, #76, and many more) - afkplayer5000 (PR #70, #71) - andrenete (PR #37, #66) - fluxionary (PR #27, #28, #30, #31, #34, #54) - Arigatas (PR #51, #53) - realmicu (PR #6, #8, #12) - theFox6 (PR #3, #4) +- superfloh247 (PR #89, #88, #87) +- SciFurz (via forum) ### Dependencies -default, doors, intllib, basic_materials + +default, doors, intllib, basic_materials tubelib2 (![GitHub](https://github.com/joe7575/tubelib2)) Tubelib Color Lamps optional: unifieddyes SmartLine Controller optional: mail Gravelsieve optional: moreores, hopper, pipeworks tubelib_addons1 optional: unified_inventory +tubelib_addons13 optional: minecart + ### History + - 2018-03-18 V1.00 * Tubelib, tubelib_addons1, tubelib_addons2, smartline, and gravelsieve combined to one modpack. - 2018-03-24 V1.01 * Support for Ethereal added - 2018-03-27 V1.02 * Timer improvements for unloaded areas @@ -166,8 +185,11 @@ tubelib_addons1 optional: unified_inventory - 2019-04-23 V2.03 * Piston/WorldEdit/replacer detection added, farming and grinder recipes added - 2020-11-20 V2.04 * Switch to AGPL v3, adapt to minetest 5.3, add translation support, fix minor bugs - 2021-01-24 V2.05 * PR #74, #76: Implement checks for valid connection sides for many nodes +- 2021-06-06 V2.06 * PR #78 - #89, chest cart added + ## New in v2 (from players point of view) + - Almost all machines break after a certain amount of time (switch into the state 'defect') and have to be repaired. - A Repair Kit is available to repair defect machines. - A Forceload block (16x16x16) is added which keeps the corresponding area loaded and the machines operational as far as the player is logged in. @@ -178,6 +200,7 @@ tubelib_addons1 optional: unified_inventory ## New in v2 (from admins point of view) + - settingtypes introduced with the following settings: tubelib_max_num_forceload_blocks, tubelib_basalt_stone_enabled, tubelib_machine_aging_value - the new mods 'techpack_stairway' and 'techpack_warehouse' have to be enabled - TechPack depends now on the mod 'basic_materials' and 'tubelib2' (![GitHub](https://github.com/joe7575/tubelib2)) diff --git a/mods/techpack/gravelsieve/init.lua b/mods/techpack/gravelsieve/init.lua index 732b2a67..dd530a22 100644 --- a/mods/techpack/gravelsieve/init.lua +++ b/mods/techpack/gravelsieve/init.lua @@ -627,6 +627,10 @@ if minetest.global_exists("tubelib") then end end, + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_take = allow_metadata_inventory_take, + paramtype = "light", sounds = default.node_sound_wood_defaults(), paramtype2 = "facedir", diff --git a/mods/techpack/releasenotes.md b/mods/techpack/releasenotes.md index 7a5e424e..6df84b69 100644 --- a/mods/techpack/releasenotes.md +++ b/mods/techpack/releasenotes.md @@ -1,6 +1,22 @@ # Release Notes for ModPack TechPack [techpack] +## V2.06.00 (2021-06-06) + +### Additions +- Add chest cart for the mod minecart (optional) +- Add support for the mod "underch" (#88) + +### Removals + +### Changes +- Account for new red & yellow pepper varieties (#86) +- Pusher improvements (#84, #83) + +### Fixes +- Fix crash with "ethereal:strawberry" (#89) + + ## V2.05.00 (2021-01-24) ### Additions diff --git a/mods/techpack/techpack_warehouse/box_copper.lua b/mods/techpack/techpack_warehouse/box_copper.lua index d2f3e567..83f8077e 100644 --- a/mods/techpack/techpack_warehouse/box_copper.lua +++ b/mods/techpack/techpack_warehouse/box_copper.lua @@ -111,8 +111,8 @@ minetest.register_node(NODE_NAME.."_defect", { can_dig = function(pos) return wh.can_dig(Box, pos) end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - wh.after_dig_node(Box, pos, oldnode, oldmetadata, digger) + on_dig = function(pos, node, player) + wh.on_dig_node(Box, pos, node, player) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) return wh.allow_metadata_inventory_put(Box, pos, listname, index, stack, player) diff --git a/mods/techpack/techpack_warehouse/box_gold.lua b/mods/techpack/techpack_warehouse/box_gold.lua index 7d206b8d..742acce7 100644 --- a/mods/techpack/techpack_warehouse/box_gold.lua +++ b/mods/techpack/techpack_warehouse/box_gold.lua @@ -111,8 +111,8 @@ minetest.register_node(NODE_NAME.."_defect", { can_dig = function(pos) return wh.can_dig(Box, pos) end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - wh.after_dig_node(Box, pos, oldnode, oldmetadata, digger) + on_dig = function(pos, node, player) + wh.on_dig_node(Box, pos, node, player) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) return wh.allow_metadata_inventory_put(Box, pos, listname, index, stack, player) diff --git a/mods/techpack/techpack_warehouse/box_steel.lua b/mods/techpack/techpack_warehouse/box_steel.lua index 83655c69..c64fda8d 100644 --- a/mods/techpack/techpack_warehouse/box_steel.lua +++ b/mods/techpack/techpack_warehouse/box_steel.lua @@ -111,8 +111,8 @@ minetest.register_node(NODE_NAME.."_defect", { can_dig = function(pos) return wh.can_dig(Box, pos) end, - after_dig_node = function(pos, oldnode, oldmetadata, digger) - wh.after_dig_node(Box, pos, oldnode, oldmetadata, digger) + on_dig = function(pos, node, player) + wh.on_dig_node(Box, pos, node, player) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) return wh.allow_metadata_inventory_put(Box, pos, listname, index, stack, player) diff --git a/mods/techpack/tubelib/distributor.lua b/mods/techpack/tubelib/distributor.lua index 21ffefc3..de6223fb 100644 --- a/mods/techpack/tubelib/distributor.lua +++ b/mods/techpack/tubelib/distributor.lua @@ -316,7 +316,7 @@ local function on_receive_fields(pos, formname, fields, player) return end local meta = M(pos) - local filter = minetest.deserialize(meta:get_string("filter")) + local filter = minetest.deserialize(meta:get_string("filter")) or {false,false,false,false} if fields.filter1 ~= nil then filter[1] = fields.filter1 == "true" elseif fields.filter2 ~= nil then @@ -341,7 +341,7 @@ end local function change_filter_settings(pos, slot, val) local slots = {["red"] = 1, ["green"] = 2, ["blue"] = 3, ["yellow"] = 4} local meta = M(pos) - local filter = minetest.deserialize(meta:get_string("filter")) + local filter = minetest.deserialize(meta:get_string("filter")) or {false,false,false,false} local num = slots[slot] or 1 if num >= 1 and num <= 4 then filter[num] = val == "on" diff --git a/mods/techpack/tubelib/node_states.lua b/mods/techpack/tubelib/node_states.lua index 14b58d8b..2a3b445c 100644 --- a/mods/techpack/tubelib/node_states.lua +++ b/mods/techpack/tubelib/node_states.lua @@ -84,6 +84,7 @@ function NodeStates:new(attr) local o = { -- mandatory cycle_time = attr.cycle_time, -- for running state + first_cycle_time = attr.first_cycle_time, -- for first run, not required standby_ticks = attr.standby_ticks, -- for standby state has_item_meter = attr.has_item_meter, -- true/false -- optional @@ -175,9 +176,27 @@ function NodeStates:start(pos, meta, called_from_on_timer) if self.formspec_func then meta:set_string("formspec", self.formspec_func(self, pos, meta)) end - minetest.get_node_timer(pos):start(self.cycle_time) + local cycle_time = self.cycle_time + if self.first_cycle_time then + if meta:get_int("tubelib_first_run") == 1 then + meta:set_int("tubelib_first_run", 0) + cycle_time = self.cycle_time + else + meta:set_int("tubelib_first_run", 1) + cycle_time = self.first_cycle_time + end + end + minetest.get_node_timer(pos):start(cycle_time) return true end + if self.first_cycle_time and meta:get_int("tubelib_first_run") == 1 then + local cycle_time = self.cycle_time + local timer = minetest.get_node_timer(pos) + minetest.after(0, function () + timer:set(cycle_time, timer:get_elapsed()) + end) + meta:set_int("tubelib_first_run", 0) + end return false end diff --git a/mods/techpack/tubelib/pusher.lua b/mods/techpack/tubelib/pusher.lua index c39f2871..fb26b790 100644 --- a/mods/techpack/tubelib/pusher.lua +++ b/mods/techpack/tubelib/pusher.lua @@ -39,6 +39,7 @@ local M = minetest.get_meta local STANDBY_TICKS = 5 local COUNTDOWN_TICKS = 5 local CYCLE_TIME = 2 +local FIRST_CYCLE = 0.5 local State = tubelib.NodeStates:new({ node_name_passive = "tubelib:pusher", @@ -46,6 +47,7 @@ local State = tubelib.NodeStates:new({ node_name_defect = "tubelib:pusher_defect", infotext_name = S("Tubelib Pusher"), cycle_time = CYCLE_TIME, + first_cycle_time = FIRST_CYCLE, standby_ticks = STANDBY_TICKS, has_item_meter = true, aging_factor = 10, @@ -61,7 +63,9 @@ local function pushing(pos, meta) State:blocked(pos, meta) return end - State:keep_running(pos, meta, COUNTDOWN_TICKS) + if State.get_state(pos, meta) ~= tubelib.STOPPED then + State:keep_running(pos, meta, COUNTDOWN_TICKS) + end return end State:idle(pos, meta) diff --git a/mods/techpack/tubelib/textures/tubelib_cube.png b/mods/techpack/tubelib/textures/tubelib_cube.png index 767e9d46..9a17f06f 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_cube.png and b/mods/techpack/tubelib/textures/tubelib_cube.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_defect.png b/mods/techpack/tubelib/textures/tubelib_defect.png index 5cb0b7ce..152d5588 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_defect.png and b/mods/techpack/tubelib/textures/tubelib_defect.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_distributor_blue.png b/mods/techpack/tubelib/textures/tubelib_distributor_blue.png index f43e2b67..3bc6a14c 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_distributor_blue.png and b/mods/techpack/tubelib/textures/tubelib_distributor_blue.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_distributor_green.png b/mods/techpack/tubelib/textures/tubelib_distributor_green.png index 92e92769..934e212e 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_distributor_green.png and b/mods/techpack/tubelib/textures/tubelib_distributor_green.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_distributor_red.png b/mods/techpack/tubelib/textures/tubelib_distributor_red.png index 6ec1e03b..0911f7d5 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_distributor_red.png and b/mods/techpack/tubelib/textures/tubelib_distributor_red.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_distributor_yellow.png b/mods/techpack/tubelib/textures/tubelib_distributor_yellow.png index 0573c7d2..6cf1e027 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_distributor_yellow.png and b/mods/techpack/tubelib/textures/tubelib_distributor_yellow.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_end_wrench.png b/mods/techpack/tubelib/textures/tubelib_end_wrench.png index 60d23f56..a66c537b 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_end_wrench.png and b/mods/techpack/tubelib/textures/tubelib_end_wrench.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_forceload.png b/mods/techpack/tubelib/textures/tubelib_forceload.png index b45f8d25..68118deb 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_forceload.png and b/mods/techpack/tubelib/textures/tubelib_forceload.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_front.png b/mods/techpack/tubelib/textures/tubelib_front.png index d3f9b7ad..cc081bf4 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_front.png and b/mods/techpack/tubelib/textures/tubelib_front.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_inv_button_error.png b/mods/techpack/tubelib/textures/tubelib_inv_button_error.png index e4b0d1d6..c01e36a0 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_inv_button_error.png and b/mods/techpack/tubelib/textures/tubelib_inv_button_error.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_inv_button_on.png b/mods/techpack/tubelib/textures/tubelib_inv_button_on.png index a10aa506..0a38b6d3 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_inv_button_on.png and b/mods/techpack/tubelib/textures/tubelib_inv_button_on.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_inv_button_standby.png b/mods/techpack/tubelib/textures/tubelib_inv_button_standby.png index a13b2015..8e239899 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_inv_button_standby.png and b/mods/techpack/tubelib/textures/tubelib_inv_button_standby.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_inv_button_warning.png b/mods/techpack/tubelib/textures/tubelib_inv_button_warning.png index 33ec686b..385b6f9a 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_inv_button_warning.png and b/mods/techpack/tubelib/textures/tubelib_inv_button_warning.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_lamp.png b/mods/techpack/tubelib/textures/tubelib_lamp.png index e4c2b096..3526893b 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_lamp.png and b/mods/techpack/tubelib/textures/tubelib_lamp.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_pusher1.png b/mods/techpack/tubelib/textures/tubelib_pusher1.png index 296260a3..3fcea692 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_pusher1.png and b/mods/techpack/tubelib/textures/tubelib_pusher1.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_repairkit.png b/mods/techpack/tubelib/textures/tubelib_repairkit.png index 8215c464..35bba393 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_repairkit.png and b/mods/techpack/tubelib/textures/tubelib_repairkit.png differ diff --git a/mods/techpack/tubelib/textures/tubelib_wlanchip.png b/mods/techpack/tubelib/textures/tubelib_wlanchip.png index c4ddb933..9ebe01cd 100644 Binary files a/mods/techpack/tubelib/textures/tubelib_wlanchip.png and b/mods/techpack/tubelib/textures/tubelib_wlanchip.png differ diff --git a/mods/techpack/tubelib_addons1/grinder.lua b/mods/techpack/tubelib_addons1/grinder.lua index b3964817..8e1ce3d0 100644 --- a/mods/techpack/tubelib_addons1/grinder.lua +++ b/mods/techpack/tubelib_addons1/grinder.lua @@ -83,7 +83,7 @@ local function allow_metadata_inventory_take(pos, listname, index, stack, player end local function grinding(pos, meta, inv) - for _,stack in ipairs(inv:get_list("src")) do + for _,stack in ipairs(inv:get_list("src") or {}) do if not stack:is_empty() then local name = stack:get_name() if Recipes[name] then @@ -317,32 +317,92 @@ function tubelib.add_grinder_recipe(recipe) end end - -tubelib.add_grinder_recipe({input="default:cobble", output="default:gravel"}) -tubelib.add_grinder_recipe({input="default:desert_cobble", output="default:gravel"}) -tubelib.add_grinder_recipe({input="default:mossycobble", output="default:gravel"}) -tubelib.add_grinder_recipe({input="default:gravel", output="default:sand"}) -tubelib.add_grinder_recipe({input="gravelsieve:sieved_gravel", output="default:sand"}) -tubelib.add_grinder_recipe({input="default:coral_skeleton", output="default:silver_sand"}) -tubelib.add_grinder_recipe({input="tubelib:basalt_stone", output="default:silver_sand"}) - -if minetest.global_exists("skytest") then - tubelib.add_grinder_recipe({input="default:desert_sand", output="skytest:dust"}) - tubelib.add_grinder_recipe({input="default:silver_sand", output="skytest:dust"}) - tubelib.add_grinder_recipe({input="default:sand", output="skytest:dust"}) - tubelib.add_grinder_recipe({input="skytest:dust 12", output="skytest:powder"}) -else - tubelib.add_grinder_recipe({input="default:desert_sand", output="default:clay"}) - tubelib.add_grinder_recipe({input="default:silver_sand", output="default:clay"}) - tubelib.add_grinder_recipe({input="default:sand", output="default:clay"}) +for k,v in pairs({ + ["default:cobble"] = "default:gravel", + ["default:desert_cobble"] = "default:gravel", + ["default:mossycobble"] = "default:gravel", + ["default:gravel"] = "default:sand", + ["gravelsieve:sieved_gravel"] = "default:sand", + ["default:coral_skeleton"] = "default:silver_sand", + ["tubelib:basalt_stone"] = "default:silver_sand", + ["default:sandstone"] = "default:sand 4", + ["default:desert_sandstone"] = "default:desert_sand 4", + ["default:silver_sandstone"] = "default:silver_sand 4", + ["default:tree"] = "default:leaves 8", + ["default:jungletree"] = "default:jungleleaves 8", + ["default:pine_tree"] = "default:pine_needles 8", + ["default:acacia_tree"] = "default:acacia_leaves 8", + ["default:aspen_tree"] = "default:aspen_leaves 8"} +) do + tubelib.add_grinder_recipe({input=k, output=v}) end -tubelib.add_grinder_recipe({input="default:sandstone", output="default:sand 4"}) -tubelib.add_grinder_recipe({input="default:desert_sandstone", output="default:desert_sand 4"}) -tubelib.add_grinder_recipe({input="default:silver_sandstone", output="default:silver_sand 4"}) +if minetest.global_exists("skytest") then + temprec = { +["default:desert_sand"] = "skytest:dust", +["default:silver_sand"] = "skytest:dust", +["default:sand"] = "skytest:dust", +["skytest:dust 12"] = "skytest:powder"} +else + temprec = { +["default:desert_sand"] = "default:clay", +["default:silver_sand"] = "default:clay", +["default:sand"] = "default:clay"} +end + +for k,v in pairs(temprec) do tubelib.add_grinder_recipe({input=k, output=v}) end +temprec = nil + +if minetest.get_modpath("underch") then + for regnodename,v in pairs(minetest.registered_nodes) do + if string.find(regnodename, "underch:") then + if string.find(regnodename, "_cobble") and not string.find(regnodename, "_wall") then + print("tubelib.add_grinder_recipe: " .. regnodename) + tubelib.add_grinder_recipe({input=regnodename, output="default:gravel"}) + end + end + end +end + +--Ethereal trees +if minetest.get_modpath("ethereal") then + for k,v in pairs({ + ["ethereal:sakura_trunk"] = "ethereal:sakura_leaves 8", + ["ethereal:willow_trunk"] = "ethereal:willow_twig 8", + ["ethereal:redwood_trunk"] = "ethereal:redwood_leaves 8", + ["ethereal:frost_tree"] = "ethereal:frost_leaves 8", + ["ethereal:yellow_trunk"] = "ethereal:yellowleaves 8", + ["ethereal:palm_trunk"] = "ethereal:palmleaves 8", + ["ethereal:banana_trunk"] = "ethereal:bananaleaves 8", + ["ethereal:birch_trunk"] = "ethereal:birch_leaves 8", + ["ethereal:bamboo"] = "ethereal:bamboo_leaves 8", + ["ethereal:olive_trunk"] = "ethereal:olive_leaves 8"} + ) do tubelib.add_grinder_recipe({input=k, output=v}) end +end + +-- Cool Trees +for _,v in pairs({ + "baldcypress", + "bamboo", + "birch", + "cherrytree", + "chestnuttree", + "clementinetree", + "ebony", + "hollytree", + "larch", + "lemontree", + "mahogany", + "maple", + "oak", + "palm", + "plumtree", + "pomegranate", + "willow" + }) do + if minetest.get_modpath(v) then tubelib.add_grinder_recipe({input=v .. ":trunk", output=v .. ":leaves 8"}) end +end + +if minetest.get_modpath("jacaranda") then tubelib.add_grinder_recipe({input="jacaranda:trunk", output = "jacaranda:blossom_leaves 8"}) end + -tubelib.add_grinder_recipe({input="default:tree", output="default:leaves 8"}) -tubelib.add_grinder_recipe({input="default:jungletree", output="default:jungleleaves 8"}) -tubelib.add_grinder_recipe({input="default:pine_tree", output="default:pine_needles 8"}) -tubelib.add_grinder_recipe({input="default:acacia_tree", output="default:acacia_leaves 8"}) -tubelib.add_grinder_recipe({input="default:aspen_tree", output="default:aspen_leaves 8"}) diff --git a/mods/techpack/tubelib_addons1/harvester.lua b/mods/techpack/tubelib_addons1/harvester.lua index 4c98b9d3..e853576e 100644 --- a/mods/techpack/tubelib_addons1/harvester.lua +++ b/mods/techpack/tubelib_addons1/harvester.lua @@ -350,7 +350,7 @@ minetest.register_node("tubelib_addons1:harvester_base", { return false end local inv = M(pos):get_inventory() - return inv:is_empty("main") + return inv:is_empty("main") and inv:is_empty("fuel") end, on_dig = function(pos, node, player) @@ -410,7 +410,7 @@ minetest.register_node("tubelib_addons1:harvester_defect", { return false end local inv = M(pos):get_inventory() - return inv:is_empty("main") + return inv:is_empty("main") and inv:is_empty("fuel") end, after_dig_node = function(pos, oldnode, oldmetadata, digger) diff --git a/mods/techpack/tubelib_addons1/nodes.lua b/mods/techpack/tubelib_addons1/nodes.lua index 910c484a..b73c3ec7 100644 --- a/mods/techpack/tubelib_addons1/nodes.lua +++ b/mods/techpack/tubelib_addons1/nodes.lua @@ -57,6 +57,13 @@ tn("default:pine_tree", "default:pine_tree", "default:pine_sapling") tn("default:acacia_tree", "default:acacia_tree", "default:acacia_sapling") tn("default:jungletree", "default:jungletree", "default:junglesapling") +tn("default:bush_stem", "default:bush_stem", "default:bush_sapling") +tn("default:acacia_bush_stem", "default:acacia_bush_stem", "default:acacia_bush_sapling") +tn("default:pine_bush_stem", "default:pine_bush_stem", "default:pine_bush_sapling") + +fn("default:pine_bush_needles") +tubelib_addons1.FarmingNodes["default:pine_bush_needles"].leaves = true -- accepted as leaves + fn("default:leaves") fn("default:aspen_leaves") fn("default:pine_needles") @@ -110,13 +117,15 @@ if farming.mod == "redo" then fn('farming:onion_5', 'farming:onion 2', 'farming:onion_1') fn('farming:pea_5', 'farming:pea_pod 3', 'farming:pea_1') fn('farming:pepper_5', 'farming:pepper 2', 'farming:pepper_1') + fn('farming:pepper_6', 'farming:pepper_yellow 2','farming:pepper_1') + fn('farming:pepper_7', 'farming:pepper_red 2', 'farming:pepper_1') fn('farming:pineapple_8', 'farming:pineapple 1', 'farming:pineapple_1') end ------------------------------------------------------------------------------- -- Ethereal Farming ------------------------------------------------------------------------------- -fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry 1") +fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry_1") fn("ethereal:onion_5", "ethereal:wild_onion_plant 2", "ethereal:onion_1") @@ -252,6 +261,21 @@ gn("ethereal:illumishroom") gn("ethereal:illumishroom2") gn("ethereal:illumishroom3") +------------------------------------------------------------------------------- +-- underch Ground +------------------------------------------------------------------------------- + +if minetest.get_modpath("underch") then + for regnodename,v in pairs(minetest.registered_nodes) do + if string.find(regnodename, "underch:") then + if string.find(regnodename, "_cobble") and not string.find(regnodename, "_wall") then + gnname = string.gsub(regnodename, "_cobble", "") + print("tubelib_addons1.register_ground_node: " .. gnname) + gn(gnname, regnodename) + end + end + end +end ------------------------------------------------------------------------------- -- Registered flowers diff --git a/mods/techpack/tubelib_addons1/pusher_fast.lua b/mods/techpack/tubelib_addons1/pusher_fast.lua index bfcf2bb8..c3794440 100644 --- a/mods/techpack/tubelib_addons1/pusher_fast.lua +++ b/mods/techpack/tubelib_addons1/pusher_fast.lua @@ -39,6 +39,7 @@ local M = minetest.get_meta local STANDBY_TICKS = 5 local COUNTDOWN_TICKS = 5 local CYCLE_TIME = 1 +local FIRST_CYCLE = 0.5 local State = tubelib.NodeStates:new({ node_name_passive = "tubelib_addons1:pusher_fast", @@ -46,6 +47,7 @@ local State = tubelib.NodeStates:new({ node_name_defect = "tubelib_addons1:pusher_fast_defect", infotext_name = S("Fast Pusher"), cycle_time = CYCLE_TIME, + first_cycle_time = FIRST_CYCLE, standby_ticks = STANDBY_TICKS, has_item_meter = true, aging_factor = 30, @@ -61,7 +63,9 @@ local function pushing(pos, meta) State:blocked(pos, meta) return end - State:keep_running(pos, meta, COUNTDOWN_TICKS) + if State.get_state(pos, meta) ~= tubelib.STOPPED then + State:keep_running(pos, meta, COUNTDOWN_TICKS) + end return end State:idle(pos, meta) diff --git a/mods/techpack/tubelib_addons2/colorlamp.lua b/mods/techpack/tubelib_addons2/colorlamp.lua index fc2fa34f..8d594f16 100644 --- a/mods/techpack/tubelib_addons2/colorlamp.lua +++ b/mods/techpack/tubelib_addons2/colorlamp.lua @@ -124,6 +124,7 @@ for idx,color in ipairs(tColors) do paramtype = 'light', light_source = minetest.LIGHT_MAX, + sounds = default.node_sound_stone_defaults(), groups = {choppy=2, cracky=1, not_in_creative_inventory=1}, is_ground_content = false, drop = "tubelib_addons2:lamp" diff --git a/mods/techpack/tubelib_addons2/colorlamp_ud.lua b/mods/techpack/tubelib_addons2/colorlamp_ud.lua index 34bcdabd..0d2cc35a 100644 --- a/mods/techpack/tubelib_addons2/colorlamp_ud.lua +++ b/mods/techpack/tubelib_addons2/colorlamp_ud.lua @@ -71,6 +71,7 @@ minetest.register_node("tubelib_addons2:lamp_on", { paramtype = "light", paramtype2 = "color", palette = "unifieddyes_palette_extended.png", + sounds = default.node_sound_stone_defaults(), groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1}, on_construct = unifieddyes.on_construct, diff --git a/mods/techpack/tubelib_addons2/locale/template.txt b/mods/techpack/tubelib_addons2/locale/template.txt index 1228f9a4..1eecfc2d 100644 --- a/mods/techpack/tubelib_addons2/locale/template.txt +++ b/mods/techpack/tubelib_addons2/locale/template.txt @@ -1,6 +1,7 @@ # textdomain: tubelib_addons2 + ### accesscontrol.lua ### Access code (4 digits):= diff --git a/mods/techpack/tubelib_addons3/chest_cart.lua b/mods/techpack/tubelib_addons3/chest_cart.lua new file mode 100644 index 00000000..5332f3da --- /dev/null +++ b/mods/techpack/tubelib_addons3/chest_cart.lua @@ -0,0 +1,171 @@ +--[[ + + Tubelib Addons 3 + ================ + + Copyright (C) 2017-2020 Joachim Stolberg + + AGPL v3 + See LICENSE.txt for more information + + chest.lua + + A high performance chest + +]]-- + +-- Load support for I18n +local S = tubelib_addons3.S + +local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end +local S2P = minetest.string_to_pos +local M = minetest.get_meta + +local function on_rightclick(pos, node, clicker) + if clicker and clicker:is_player() then + if M(pos):get_int("userID") == 0 then + minecart.show_formspec(pos, clicker) + end + end +end + +local function formspec() + return "size[8,6]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[context;main;3,0;2,2;]".. + "list[current_player;main;0,2.3;8,4;]".. + "listring[context;main]".. + "listring[current_player;main]" +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + local owner = M(pos):get_string("owner") + if owner ~= "" and owner ~= player:get_player_name() then + return 0 + end + return stack:get_count() +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + local owner = M(pos):get_string("owner") + if owner ~= "" and owner ~= player:get_player_name() then + return 0 + end + return stack:get_count() +end + +minetest.register_node("tubelib_addons3:chest_cart", { + description = S("TA Chest Cart"), + tiles = { + -- up, down, right, left, back, front + "tubelib_addons3_chest_cart_top.png", + "tubelib_addons3_chest_cart_bottom.png", + "tubelib_addons3_chest_cart_side.png", + "tubelib_addons3_chest_cart_side.png", + "tubelib_addons3_chest_cart_front.png", + "tubelib_addons3_chest_cart_front.png", + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-7/16, 3/16, -7/16, 7/16, 8/16, 7/16}, + {-8/16, -8/16, -8/16, 8/16, 3/16, 8/16}, + }, + }, + paramtype2 = "facedir", + paramtype = "light", + use_texture_alpha = true, + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 2, crumbly = 2, choppy = 2}, + node_placement_prediction = "", + diggable = false, + + on_place = minecart.on_nodecart_place, + on_punch = minecart.on_nodecart_punch, + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_take = allow_metadata_inventory_take, + on_rightclick = on_rightclick, + + after_place_node = function(pos, placer) + local inv = M(pos):get_inventory() + inv:set_size('main', 4) + if placer and placer:is_player() then + minecart.show_formspec(pos, placer) + else + M(pos):set_string("formspec", formspec()) + end + end, + + set_cargo = function(pos, data) + local inv = M(pos):get_inventory() + for idx, stack in ipairs(data) do + inv:set_stack("main", idx, stack) + end + end, + + get_cargo = function(pos) + local inv = M(pos):get_inventory() + local data = {} + for idx = 1, 4 do + local stack = inv:get_stack("main", idx) + data[idx] = {name = stack:get_name(), count = stack:get_count()} + end + return data + end, + + has_cargo = function(pos) + local inv = minetest.get_meta(pos):get_inventory() + return not inv:is_empty("main") + end +}) + +minecart.register_cart_entity("tubelib_addons3:chest_cart_entity", "tubelib_addons3:chest_cart", "chest", { + initial_properties = { + physical = false, + collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + visual = "wielditem", + textures = {"tubelib_addons3:chest_cart"}, + visual_size = {x=0.66, y=0.66, z=0.66}, + static_save = false, + }, +}) + +tubelib.register_node("tubelib_addons3:chest_cart", {}, { + on_pull_stack = function(pos, side) + local meta = minetest.get_meta(pos) + return tubelib.get_stack(meta, "main") + end, + on_pull_item = function(pos, side) + local meta = minetest.get_meta(pos) + return tubelib.get_item(meta, "main") + end, + on_push_item = function(pos, side, item) + local meta = minetest.get_meta(pos) + return tubelib.put_item(meta, "main", item) + end, + on_unpull_item = function(pos, side, item) + local meta = minetest.get_meta(pos) + return tubelib.put_item(meta, "main", item) + end, + + on_recv_message = function(pos, topic, payload) + if topic == "state" then + local meta = minetest.get_meta(pos) + return tubelib.get_inv_state(meta, "main") + else + return "unsupported" + end + end, +}) + +minetest.register_craft({ + output = "tubelib_addons3:chest_cart", + recipe = { + {"default:junglewood", "default:chest_locked", "default:junglewood"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + }, +}) diff --git a/mods/techpack/tubelib_addons3/distributor.lua b/mods/techpack/tubelib_addons3/distributor.lua index ecf6ed75..c5af2a43 100644 --- a/mods/techpack/tubelib_addons3/distributor.lua +++ b/mods/techpack/tubelib_addons3/distributor.lua @@ -285,7 +285,7 @@ local function on_receive_fields(pos, formname, fields, player) return end local meta = M(pos) - local filter = minetest.deserialize(meta:get_string("filter")) + local filter = minetest.deserialize(meta:get_string("filter")) or {false,false,false,false} if fields.filter1 ~= nil then filter[1] = fields.filter1 == "true" elseif fields.filter2 ~= nil then @@ -310,7 +310,7 @@ end local function change_filter_settings(pos, slot, val) local slots = {["red"] = 1, ["green"] = 2, ["blue"] = 3, ["yellow"] = 4} local meta = M(pos) - local filter = minetest.deserialize(meta:get_string("filter")) + local filter = minetest.deserialize(meta:get_string("filter")) or {false,false,false,false} local num = slots[slot] or 1 if num >= 1 and num <= 4 then filter[num] = val == "on" diff --git a/mods/techpack/tubelib_addons3/init.lua b/mods/techpack/tubelib_addons3/init.lua index dd2becad..5f0d5a37 100644 --- a/mods/techpack/tubelib_addons3/init.lua +++ b/mods/techpack/tubelib_addons3/init.lua @@ -21,3 +21,7 @@ dofile(minetest.get_modpath("tubelib_addons3") .. '/distributor.lua') dofile(minetest.get_modpath("tubelib_addons3") .. '/pushing_chest.lua') dofile(minetest.get_modpath("tubelib_addons3") .. '/teleporter.lua') dofile(minetest.get_modpath("tubelib_addons3") .. '/funnel.lua') + +if minetest.global_exists("minecart") then + dofile(minetest.get_modpath("tubelib_addons3") .. '/chest_cart.lua') +end diff --git a/mods/techpack/tubelib_addons3/locale/template.txt b/mods/techpack/tubelib_addons3/locale/template.txt index c8b3db1d..dca4125e 100644 --- a/mods/techpack/tubelib_addons3/locale/template.txt +++ b/mods/techpack/tubelib_addons3/locale/template.txt @@ -7,6 +7,10 @@ HighPerf Chest= connected with= +### chest_cart.lua ### + +TA Chest Cart= + ### distributor.lua ### HighPerf Distributor= diff --git a/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr b/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr index 8395bc53..91373678 100644 --- a/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr +++ b/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr @@ -7,6 +7,10 @@ HighPerf Chest=HighPerf Kiste connected with=verbunden mit +### chest_cart.lua ### + +TA Chest Cart=TA Kistenwagen + ### distributor.lua ### HighPerf Distributor=HighPerf Verteiler @@ -21,7 +25,7 @@ HighPerf Pusher=HighPerf Schieber ### pushing_chest.lua ### -HighPerf Pushing Chest=HighPerf Shiebende Kiste +HighPerf Pushing Chest=HighPerf Schiebende Kiste ### teleporter.lua ### diff --git a/mods/techpack/tubelib_addons3/mod.conf b/mods/techpack/tubelib_addons3/mod.conf index cd725362..18f1527f 100644 --- a/mods/techpack/tubelib_addons3/mod.conf +++ b/mods/techpack/tubelib_addons3/mod.conf @@ -1,3 +1,4 @@ name=tubelib_addons3 description=Tubelib Extension with High Performance nodes -depends=tubelib,tubelib_addons1,default +depends=tubelib,tubelib_addons1,default +optional_depends=minecart diff --git a/mods/techpack/tubelib_addons3/pusher.lua b/mods/techpack/tubelib_addons3/pusher.lua index f6e2fbc6..bb6e9b10 100644 --- a/mods/techpack/tubelib_addons3/pusher.lua +++ b/mods/techpack/tubelib_addons3/pusher.lua @@ -24,6 +24,7 @@ local M = minetest.get_meta local STANDBY_TICKS = 5 local COUNTDOWN_TICKS = 5 local CYCLE_TIME = 2 +local FIRST_CYCLE = 0.5 local State = tubelib.NodeStates:new({ node_name_passive = "tubelib_addons3:pusher", @@ -31,6 +32,7 @@ local State = tubelib.NodeStates:new({ node_name_defect = "tubelib_addons3:pusher_defect", infotext_name = S("HighPerf Pusher"), cycle_time = CYCLE_TIME, + first_cycle_time = FIRST_CYCLE, standby_ticks = STANDBY_TICKS, has_item_meter = true, aging_factor = 50, @@ -46,7 +48,9 @@ local function pushing(pos, meta) State:blocked(pos, meta) return end - State:keep_running(pos, meta, COUNTDOWN_TICKS, 1) + if State.get_state(pos, meta) ~= tubelib.STOPPED then + State:keep_running(pos, meta, COUNTDOWN_TICKS, 1) + end return end State:idle(pos, meta) diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_bottom.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_bottom.png index 4369e368..93a17906 100644 Binary files a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_bottom.png and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_bottom.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_bottom.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_bottom.png new file mode 100644 index 00000000..7aa750fe Binary files /dev/null and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_bottom.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_front.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_front.png new file mode 100644 index 00000000..3bf8f769 Binary files /dev/null and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_front.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_side.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_side.png new file mode 100644 index 00000000..d04b4aad Binary files /dev/null and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_side.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_top.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_top.png new file mode 100644 index 00000000..646f9ecf Binary files /dev/null and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_cart_top.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_front.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_front.png index 782d5ef1..1a3e215d 100644 Binary files a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_front.png and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_chest_front.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_distributor_active.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_distributor_active.png index 9c22a464..cc0432ac 100644 Binary files a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_distributor_active.png and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_distributor_active.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_pusher_active.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_pusher_active.png index b6342a7c..b2c37972 100644 Binary files a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_pusher_active.png and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_pusher_active.png differ diff --git a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_teleporter.png b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_teleporter.png index 32901d1a..3f98a4ba 100644 Binary files a/mods/techpack/tubelib_addons3/textures/tubelib_addons3_teleporter.png and b/mods/techpack/tubelib_addons3/textures/tubelib_addons3_teleporter.png differ diff --git a/mods/ts_doors/init.lua b/mods/ts_doors/init.lua index 566ff86a..38b178ed 100755 --- a/mods/ts_doors/init.lua +++ b/mods/ts_doors/init.lua @@ -7,6 +7,21 @@ ts_doors.sounds = {} -- Used for localization local S = minetest.get_translator("ts_doors") +-- Get texture by node name +local T = function (node_name) + local def = minetest.registered_nodes[node_name] + if not (def and def.tiles) then + return "" + end + local tile = def.tiles[5] or def.tiles[4] or def.tiles[3] or def.tiles[2] or def.tiles[1] + if type(tile) == "string" then + return tile + elseif type(tile) == "table" and tile.name then + return tile.name + end + return "" +end + -- Use this to generate the translation template file. --[[ local oldS = S @@ -78,6 +93,9 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) if not sounds then sounds = {} end + if not texture then + texture = T(item) + end recipe = recipe or item ts_doors.registered_doors[item:gsub(":", "_")] = recipe register_door_alias("doors:ts_door_" .. item:gsub(":", "_"), "ts_doors:door_" .. item:gsub(":", "_")) @@ -193,65 +211,65 @@ function ts_doors.register_door(item, description, texture, sounds, recipe) }) end -ts_doors.register_door("default:aspen_wood", "Aspen", "default_aspen_wood.png", ts_doors.sounds.wood) -ts_doors.register_door("default:pine_wood", "Pine", "default_pine_wood.png", ts_doors.sounds.wood) -ts_doors.register_door("default:acacia_wood", "Acacia", "default_acacia_wood.png", ts_doors.sounds.wood) -ts_doors.register_door("default:wood", "Wooden", "default_wood.png", ts_doors.sounds.wood) -ts_doors.register_door("default:junglewood", "Jungle Wood", "default_junglewood.png", ts_doors.sounds.wood) +ts_doors.register_door("default:aspen_wood", "Aspen", nil, ts_doors.sounds.wood) +ts_doors.register_door("default:pine_wood", "Pine", nil, ts_doors.sounds.wood) +ts_doors.register_door("default:acacia_wood", "Acacia", nil, ts_doors.sounds.wood) +ts_doors.register_door("default:wood", "Wooden", nil, ts_doors.sounds.wood) +ts_doors.register_door("default:junglewood", "Jungle Wood", nil, ts_doors.sounds.wood) if minetest.get_modpath("moretrees") then - ts_doors.register_door("moretrees:apple_tree_planks", "Apple Tree", "moretrees_apple_tree_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:beech_planks", "Beech", "moretrees_beech_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:birch_planks", "Birch", "moretrees_birch_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:fir_planks", "Fir", "moretrees_fir_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:oak_planks", "Oak", "moretrees_oak_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:palm_planks", "Palm", "moretrees_palm_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:rubber_tree_planks", "Rubber Tree", "moretrees_rubber_tree_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:sequoia_planks", "Sequoia", "moretrees_sequoia_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:spruce_planks", "Spruce", "moretrees_spruce_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("moretrees:willow_planks", "Willow", "moretrees_willow_wood.png", ts_doors.sounds.wood) + ts_doors.register_door("moretrees:apple_tree_planks", "Apple Tree", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:beech_planks", "Beech", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:birch_planks", "Birch", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:fir_planks", "Fir", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:oak_planks", "Oak", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:palm_planks", "Palm", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:rubber_tree_planks", "Rubber Tree", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:sequoia_planks", "Sequoia", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:spruce_planks", "Spruce", nil, ts_doors.sounds.wood) + ts_doors.register_door("moretrees:willow_planks", "Willow", nil, ts_doors.sounds.wood) end if minetest.get_modpath("ethereal") then - ts_doors.register_door("ethereal:banana_wood", "Banana", "banana_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:birch_wood", "Birch", "moretrees_birch_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:frost_wood", "Frost", "frost_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:mushroom_trunk", "Mushroom", "mushroom_trunk.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:palm_wood", "Palm", "moretrees_palm_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:redwood_wood", "Redwood", "redwood_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:sakura_wood", "Sakura", "ethereal_sakura_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:scorched_tree", "Scorched", "scorched_tree.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:willow_wood", "Willow", "willow_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:yellow_wood", "Healing Tree", "yellow_wood.png", ts_doors.sounds.wood) - ts_doors.register_door("ethereal:crystal_block", "Crystal", "crystal_block.png", ts_doors.sounds.metal, "ethereal:crystal_ingot") + ts_doors.register_door("ethereal:banana_wood", "Banana", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:birch_wood", "Birch", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:frost_wood", "Frost", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:mushroom_trunk", "Mushroom", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:palm_wood", "Palm", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:redwood_wood", "Redwood", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:sakura_wood", "Sakura", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:scorched_tree", "Scorched", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:willow_wood", "Willow", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:yellow_wood", "Healing Tree", nil, ts_doors.sounds.wood) + ts_doors.register_door("ethereal:crystal_block", "Crystal", nil, ts_doors.sounds.metal, "ethereal:crystal_ingot") end -ts_doors.register_door("default:bronzeblock", "Bronze", "default_bronze_block.png", ts_doors.sounds.metal, "default:bronze_ingot") -ts_doors.register_door("default:copperblock", "Copper", "default_copper_block.png", ts_doors.sounds.metal, "default:copper_ingot") -ts_doors.register_door("default:diamondblock", "Diamond", "default_diamond_block.png", ts_doors.sounds.metal, "default:diamond") -ts_doors.register_door("default:goldblock", "Gold", "default_gold_block.png", ts_doors.sounds.metal, "default:gold_ingot") -ts_doors.register_door("default:steelblock", "Steel", minetest.registered_nodes["default:steelblock"].tiles[1], ts_doors.sounds.metal, "default:steel_ingot") +ts_doors.register_door("default:bronzeblock", "Bronze", nil, ts_doors.sounds.metal, "default:bronze_ingot") +ts_doors.register_door("default:copperblock", "Copper", nil, ts_doors.sounds.metal, "default:copper_ingot") +ts_doors.register_door("default:diamondblock", "Diamond", nil, ts_doors.sounds.metal, "default:diamond") +ts_doors.register_door("default:goldblock", "Gold", nil, ts_doors.sounds.metal, "default:gold_ingot") +ts_doors.register_door("default:steelblock", "Steel", nil, ts_doors.sounds.metal, "default:steel_ingot") if minetest.get_modpath("moreores") then - ts_doors.register_door("moreores:mithril_block", "Mithril", "moreores_mithril_block.png", ts_doors.sounds.metal, "moreores:mithril_ingot") - ts_doors.register_door("moreores:silver_block", "Silver", "moreores_silver_block.png", ts_doors.sounds.metal, "moreores:silver_ingot") - ts_doors.register_door("moreores:tin_block", "Tin", "moreores_tin_block.png", ts_doors.sounds.metal, "moreores:tin_ingot") + ts_doors.register_door("moreores:mithril_block", "Mithril", nil, ts_doors.sounds.metal, "moreores:mithril_ingot") + ts_doors.register_door("moreores:silver_block", "Silver", nil, ts_doors.sounds.metal, "moreores:silver_ingot") + ts_doors.register_door("moreores:tin_block", "Tin", nil, ts_doors.sounds.metal, "moreores:tin_ingot") end if minetest.get_modpath("technic") then - ts_doors.register_door("technic:carbon_steel_block", "Carbon Steel", "technic_carbon_steel_block.png", ts_doors.sounds.metal, "technic:carbon_steel_ingot") - ts_doors.register_door("technic:cast_iron_block", "Cast Iron", "technic_cast_iron_block.png", ts_doors.sounds.metal, "technic:cast_iron_ingot") - ts_doors.register_door("technic:chromium_block", "Chromium", "technic_chromium_block.png", ts_doors.sounds.metal, "technic:chromium_ingot") - ts_doors.register_door("technic:lead_block", "Lead", "technic_lead_block.png", ts_doors.sounds.metal, "technic:lead_ingot") - ts_doors.register_door("technic:stainless_steel_block", "Stainless Steel", "technic_stainless_steel_block.png", ts_doors.sounds.metal, "technic:stainless_steel_ingot") - ts_doors.register_door("technic:zinc_block", "Zinc", "technic_zinc_block.png", ts_doors.sounds.metal, "technic:zinc_ingot") - ts_doors.register_door("technic:blast_resistant_concrete", "Blast Resistant Concrete", "technic_blast_resistant_concrete_block.png", ts_doors.sounds.metal) + ts_doors.register_door("technic:carbon_steel_block", "Carbon Steel", nil, ts_doors.sounds.metal, "technic:carbon_steel_ingot") + ts_doors.register_door("technic:cast_iron_block", "Cast Iron", nil, ts_doors.sounds.metal, "technic:cast_iron_ingot") + ts_doors.register_door("technic:chromium_block", "Chromium", nil, ts_doors.sounds.metal, "technic:chromium_ingot") + ts_doors.register_door("technic:lead_block", "Lead", nil, ts_doors.sounds.metal, "technic:lead_ingot") + ts_doors.register_door("technic:stainless_steel_block", "Stainless Steel", nil, ts_doors.sounds.metal, "technic:stainless_steel_ingot") + ts_doors.register_door("technic:zinc_block", "Zinc", nil, ts_doors.sounds.metal, "technic:zinc_ingot") + ts_doors.register_door("technic:blast_resistant_concrete", "Blast Resistant Concrete", nil, ts_doors.sounds.metal) end if minetest.get_modpath("basic_materials") then - ts_doors.register_door("basic_materials:brass_block", "Brass", "basic_materials_brass_block.png", ts_doors.sounds.metal, "basic_materials:brass_ingot") - ts_doors.register_door("basic_materials:concrete_block", "Concrete", "basic_materials_concrete_block.png", ts_doors.sounds.metal) + ts_doors.register_door("basic_materials:brass_block", "Brass", nil, ts_doors.sounds.metal, "basic_materials:brass_ingot") + ts_doors.register_door("basic_materials:concrete_block", "Concrete", nil, ts_doors.sounds.metal) ts_doors.register_alias("technic:brass_block", "basic_materials:brass_block") ts_doors.register_alias("technic:concrete", "basic_materials:concrete_block") end diff --git a/mods/ts_furniture/init.lua b/mods/ts_furniture/init.lua index fc16b83a..748707bc 100755 --- a/mods/ts_furniture/init.lua +++ b/mods/ts_furniture/init.lua @@ -3,10 +3,26 @@ ts_furniture = {} -- If true, you can sit on chairs and benches, when right-click them. ts_furniture.enable_sitting = minetest.settings:get_bool("ts_furniture.enable_sitting", true) ts_furniture.globalstep = minetest.settings:get_bool("ts_furniture.globalstep", true) +ts_furniture.kneeling_bench = minetest.settings:get_bool("ts_furniture.kneeling_bench", false) -- Used for localization local S = minetest.get_translator("ts_furniture") +-- Get texture by node name +local T = function (node_name) + local def = minetest.registered_nodes[node_name] + if not (def and def.tiles) then + return "" + end + local tile = def.tiles[5] or def.tiles[4] or def.tiles[3] or def.tiles[2] or def.tiles[1] + if type(tile) == "string" then + return tile + elseif type(tile) == "table" and tile.name then + return tile.name + end + return "" +end + -- The following code is from "Get Comfortable [cozy]" (by everamzah; published under WTFPL) -- Thomas S. modified it, so that it can be used in this mod if ts_furniture.enable_sitting then @@ -147,12 +163,36 @@ local furnitures = { } } +if ts_furniture.kneeling_bench then + furnitures.kneeling_bench = { + description = "Kneeling Bench", + nodebox = { + { -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }, + { -0.4, -0.5, -0.2, -0.3, -0.3, 0.5 }, + { 0.3, -0.5, -0.2, 0.4, -0.3, 0.5 }, + { -0.5, -0.3, -0.2, 0.5, -0.2, 0.2}, + { -0.5, 0.4, 0.15, 0.5, 0.5, 0.55}, + }, + craft = function(recipe) + local bench_name = "ts_furniture:" .. recipe:gsub(":", "_") .. "_bench" + return { + { recipe, "" }, + { recipe, bench_name } + } + end + } +end + local ignore_groups = { ["wood"] = true, ["stone"] = true } function ts_furniture.register_furniture(recipe, description, tiles) + if not tiles then + tiles = T(recipe) + end + local recipe_def = minetest.registered_items[recipe] if not recipe_def then return @@ -196,34 +236,34 @@ function ts_furniture.register_furniture(recipe, description, tiles) end end -ts_furniture.register_furniture("default:aspen_wood", "Aspen", "default_aspen_wood.png") -ts_furniture.register_furniture("default:pine_wood", "Pine", "default_pine_wood.png") -ts_furniture.register_furniture("default:acacia_wood", "Acacia", "default_acacia_wood.png") -ts_furniture.register_furniture("default:wood", "Wooden", "default_wood.png") -ts_furniture.register_furniture("default:junglewood", "Jungle Wood", "default_junglewood.png") +ts_furniture.register_furniture("default:aspen_wood", "Aspen") +ts_furniture.register_furniture("default:pine_wood", "Pine") +ts_furniture.register_furniture("default:acacia_wood", "Acacia") +ts_furniture.register_furniture("default:wood", "Wooden") +ts_furniture.register_furniture("default:junglewood", "Jungle Wood") if (minetest.get_modpath("moretrees")) then - ts_furniture.register_furniture("moretrees:apple_tree_planks", "Apple Tree", "moretrees_apple_tree_wood.png") - ts_furniture.register_furniture("moretrees:beech_planks", "Beech", "moretrees_beech_wood.png") - ts_furniture.register_furniture("moretrees:birch_planks", "Birch", "moretrees_birch_wood.png") - ts_furniture.register_furniture("moretrees:fir_planks", "Fir", "moretrees_fir_wood.png") - ts_furniture.register_furniture("moretrees:oak_planks", "Oak", "moretrees_oak_wood.png") - ts_furniture.register_furniture("moretrees:palm_planks", "Palm", "moretrees_palm_wood.png") - ts_furniture.register_furniture("moretrees:rubber_tree_planks", "Rubber Tree", "moretrees_rubber_tree_wood.png") - ts_furniture.register_furniture("moretrees:sequoia_planks", "Sequoia", "moretrees_sequoia_wood.png") - ts_furniture.register_furniture("moretrees:spruce_planks", "Spruce", "moretrees_spruce_wood.png") - ts_furniture.register_furniture("moretrees:willow_planks", "Willow", "moretrees_willow_wood.png") + ts_furniture.register_furniture("moretrees:apple_tree_planks", "Apple Tree") + ts_furniture.register_furniture("moretrees:beech_planks", "Beech") + ts_furniture.register_furniture("moretrees:birch_planks", "Birch") + ts_furniture.register_furniture("moretrees:fir_planks", "Fir") + ts_furniture.register_furniture("moretrees:oak_planks", "Oak") + ts_furniture.register_furniture("moretrees:palm_planks", "Palm") + ts_furniture.register_furniture("moretrees:rubber_tree_planks", "Rubber Tree") + ts_furniture.register_furniture("moretrees:sequoia_planks", "Sequoia") + ts_furniture.register_furniture("moretrees:spruce_planks", "Spruce") + ts_furniture.register_furniture("moretrees:willow_planks", "Willow") end if minetest.get_modpath("ethereal") then - ts_furniture.register_furniture("ethereal:banana_wood", "Banana", "banana_wood.png") - ts_furniture.register_furniture("ethereal:birch_wood", "Birch", "moretrees_birch_wood.png") - ts_furniture.register_furniture("ethereal:frost_wood", "Frost", "frost_wood.png") - ts_furniture.register_furniture("ethereal:mushroom_trunk", "Mushroom", "mushroom_trunk.png") - ts_furniture.register_furniture("ethereal:palm_wood", "Palm", "moretrees_palm_wood.png") - ts_furniture.register_furniture("ethereal:redwood_wood", "Redwood", "redwood_wood.png") - ts_furniture.register_furniture("ethereal:sakura_wood", "Sakura", "ethereal_sakura_wood.png") - ts_furniture.register_furniture("ethereal:scorched_tree", "Scorched", "scorched_tree.png") - ts_furniture.register_furniture("ethereal:willow_wood", "Willow", "willow_wood.png") - ts_furniture.register_furniture("ethereal:yellow_wood", "Healing Tree", "yellow_wood.png") + ts_furniture.register_furniture("ethereal:banana_wood", "Banana") + ts_furniture.register_furniture("ethereal:birch_wood", "Birch") + ts_furniture.register_furniture("ethereal:frost_wood", "Frost") + ts_furniture.register_furniture("ethereal:mushroom_trunk", "Mushroom") + ts_furniture.register_furniture("ethereal:palm_wood", "Palm") + ts_furniture.register_furniture("ethereal:redwood_wood", "Redwood") + ts_furniture.register_furniture("ethereal:sakura_wood", "Sakura") + ts_furniture.register_furniture("ethereal:scorched_tree", "Scorched") + ts_furniture.register_furniture("ethereal:willow_wood", "Willow") + ts_furniture.register_furniture("ethereal:yellow_wood", "Healing Tree") end diff --git a/mods/ts_furniture/settingtypes.txt b/mods/ts_furniture/settingtypes.txt index 920f86cd..d5c40ed0 100644 --- a/mods/ts_furniture/settingtypes.txt +++ b/mods/ts_furniture/settingtypes.txt @@ -1,2 +1,3 @@ ts_furniture.enable_sitting (Enable sitting) bool true ts_furniture.globalstep (Enable globalstep) bool true +ts_furniture.kneeling_bench (Enable kneeling benches) bool false diff --git a/mods/tubelib2/README.md b/mods/tubelib2/README.md index e7c9c2c4..8403a595 100644 --- a/mods/tubelib2/README.md +++ b/mods/tubelib2/README.md @@ -88,5 +88,6 @@ Textures: CC0 - 2020-02-02 v1.8 * 'special nodes' as alternative to 'secondary nodes' introduced - 2020-05-31 v1.9 * Generator function 'get_tube_line' added, storage improvements - 2021-01-23 v2.0 * Add functions for easy & fast 'valid side' checking (PR #8) +- 2021-05-24 v2.1 * Add API functions 'register_on_tube_update2' diff --git a/mods/tubelib2/internal1.lua b/mods/tubelib2/internal1.lua index 5d7f5faf..daa2d2b5 100644 --- a/mods/tubelib2/internal1.lua +++ b/mods/tubelib2/internal1.lua @@ -33,7 +33,7 @@ local function get_pos(pos, dir) end local function fdir(self, player) - local pitch = player:get_look_pitch() + local pitch = player:get_look_vertical() if pitch > 1.0 and self.valid_dirs[6] then -- up? return 6 elseif pitch < -1.0 and self.valid_dirs[5] then -- down? @@ -102,8 +102,12 @@ function Tube:update_secondary_node(pos1, dir1, pos2, dir2) local node,_ = self:get_secondary_node(pos1) if node then local ndef = minetest.registered_nodes[node.name] or {} + -- New functions if ndef.tubelib2_on_update2 then ndef.tubelib2_on_update2(pos1, dir1, self, node) + elseif self.clbk_update_secondary_node2 then + self.clbk_update_secondary_node2(pos1, dir1, self, node) + -- Legacy functions elseif ndef.tubelib2_on_update then ndef.tubelib2_on_update(node, pos1, dir1, pos2, Turn180Deg[dir2]) elseif self.clbk_update_secondary_node then diff --git a/mods/tubelib2/internal2.lua b/mods/tubelib2/internal2.lua index ffef3c82..3367a216 100644 --- a/mods/tubelib2/internal2.lua +++ b/mods/tubelib2/internal2.lua @@ -163,11 +163,13 @@ function Tube:get_next_tube(pos, dir) local val = Param2ToDir[param2 % 32] or 0 local dir1, dir2 = math.floor(val / 10), val % 10 local num_conn = math.floor(param2 / 32) or 0 - if Turn180Deg[dir] == dir1 then + local odir = Turn180Deg[dir] + if odir == dir1 then return npos, dir2, num_conn - else + elseif odir == dir2 then return npos, dir1, num_conn end + return end return self:get_next_teleport_node(pos, dir) end diff --git a/mods/tubelib2/tube_api.lua b/mods/tubelib2/tube_api.lua index e9996e45..b7789b42 100644 --- a/mods/tubelib2/tube_api.lua +++ b/mods/tubelib2/tube_api.lua @@ -13,7 +13,7 @@ ]]-- -- Version for compatibility checks, see readme.md/history -tubelib2.version = 2.0 +tubelib2.version = 2.1 -- for lazy programmers local S = function(pos) if pos then return minetest.pos_to_string(pos) end end @@ -320,6 +320,12 @@ function Tube:register_on_tube_update(update_secondary_node) self.clbk_update_secondary_node = update_secondary_node end +-- Called for each connected node when the tube connection has been changed. +-- func(pos1, out_dir, self, node) +function Tube:register_on_tube_update2(update_secondary_node2) + self.clbk_update_secondary_node2 = update_secondary_node2 +end + function Tube:get_pos(pos, dir) return vector.add(pos, Dir6dToVector[dir or 0]) end diff --git a/mods/unified_inventory/.luacheckrc b/mods/unified_inventory/.luacheckrc index 9fb6a7c1..e6fec97d 100644 --- a/mods/unified_inventory/.luacheckrc +++ b/mods/unified_inventory/.luacheckrc @@ -14,6 +14,7 @@ read_globals = { "ItemStack", "datastorage", "hb", + "doors", } files["callbacks.lua"].ignore = { "player", "draw_lite_mode" } diff --git a/mods/unified_inventory/README.md b/mods/unified_inventory/README.md index 8c917ec4..5d23f79e 100644 --- a/mods/unified_inventory/README.md +++ b/mods/unified_inventory/README.md @@ -15,7 +15,8 @@ Unified Inventory replaces the default survival and creative inventory. * Recipe search function by ingredients * Up to four bags with up to 24 slots each * Home function to teleport - * Trash slot + * Trash slot and refill slot for creative + * Waypoints to keep track of important locations * Lite mode: reduces the item browser width * `minetest.conf` setting `unified_inventory_lite = true` * Mod API for modders: see [mod_api.txt](doc/mod_api.txt) @@ -24,7 +25,11 @@ Unified Inventory replaces the default survival and creative inventory. ## Requirements - * Minetest 5.0.0+ + * Minetest 5.4.0+ + * Mod `default` for category filters (contained in Minetest Game) + * Mod `farming` for craftable bags (contained in Minetest Game) + * For waypoint migration: `datastorage` + # Licenses @@ -96,4 +101,4 @@ Other files from Wikimedia Commons: RealBadAngel: (CC-BY-4.0) - * Everything else. \ No newline at end of file + * Everything else. diff --git a/mods/unified_inventory/api.lua b/mods/unified_inventory/api.lua index 81dd8f35..22788aed 100644 --- a/mods/unified_inventory/api.lua +++ b/mods/unified_inventory/api.lua @@ -1,5 +1,6 @@ local S = minetest.get_translator("unified_inventory") local F = minetest.formspec_escape +local ui = unified_inventory -- Create detached creative inventory after loading all mods minetest.after(0.01, function() @@ -8,12 +9,12 @@ minetest.after(0.01, function() if not rev_aliases[target] then rev_aliases[target] = {} end table.insert(rev_aliases[target], source) end - unified_inventory.items_list = {} + ui.items_list = {} for name, def in pairs(minetest.registered_items) do if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then - table.insert(unified_inventory.items_list, name) + table.insert(ui.items_list, name) local all_names = rev_aliases[name] or {} table.insert(all_names, name) for _, player_name in ipairs(all_names) do @@ -26,30 +27,30 @@ minetest.after(0.01, function() for _,chk in pairs(recipe.items) do local groupchk = string.find(chk, "group:") if (not groupchk and not minetest.registered_items[chk]) - or (groupchk and not unified_inventory.get_group_item(string.gsub(chk, "group:", "")).item) + or (groupchk and not ui.get_group_item(string.gsub(chk, "group:", "")).item) or minetest.get_item_group(chk, "not_in_craft_guide") ~= 0 then unknowns = true end end if not unknowns then - unified_inventory.register_craft(recipe) + ui.register_craft(recipe) end end end end end end - table.sort(unified_inventory.items_list) - unified_inventory.items_list_size = #unified_inventory.items_list - print("Unified Inventory. inventory size: "..unified_inventory.items_list_size) - for _, name in ipairs(unified_inventory.items_list) do + table.sort(ui.items_list) + ui.items_list_size = #ui.items_list + print("Unified Inventory. inventory size: "..ui.items_list_size) + for _, name in ipairs(ui.items_list) do local def = minetest.registered_items[name] -- Simple drops if type(def.drop) == "string" then local dstack = ItemStack(def.drop) if not dstack:is_empty() and dstack:get_name() ~= name then - unified_inventory.register_craft({ + ui.register_craft({ type = "digging", items = {name}, output = def.drop, @@ -115,7 +116,7 @@ minetest.after(0.01, function() end end for itemstring, count in pairs(drop_guaranteed) do - unified_inventory.register_craft({ + ui.register_craft({ type = "digging", items = {name}, output = itemstring .. " " .. count, @@ -123,7 +124,7 @@ minetest.after(0.01, function() }) end for itemstring, count in pairs(drop_maybe) do - unified_inventory.register_craft({ + ui.register_craft({ type = "digging_chance", items = {name}, output = itemstring .. " " .. count, @@ -132,22 +133,22 @@ minetest.after(0.01, function() end end end - for _, recipes in pairs(unified_inventory.crafts_for.recipe) do + for _, recipes in pairs(ui.crafts_for.recipe) do for _, recipe in ipairs(recipes) do local ingredient_items = {} for _, spec in pairs(recipe.items) do - local matches_spec = unified_inventory.canonical_item_spec_matcher(spec) - for _, name in ipairs(unified_inventory.items_list) do + local matches_spec = ui.canonical_item_spec_matcher(spec) + for _, name in ipairs(ui.items_list) do if matches_spec(name) then ingredient_items[name] = true end end end for name, _ in pairs(ingredient_items) do - if unified_inventory.crafts_for.usage[name] == nil then - unified_inventory.crafts_for.usage[name] = {} + if ui.crafts_for.usage[name] == nil then + ui.crafts_for.usage[name] = {} end - table.insert(unified_inventory.crafts_for.usage[name], recipe) + table.insert(ui.crafts_for.usage[name], recipe) end end end @@ -156,9 +157,9 @@ end) -- load_home local function load_home() - local input = io.open(unified_inventory.home_filename, "r") + local input = io.open(ui.home_filename, "r") if not input then - unified_inventory.home_pos = {} + ui.home_pos = {} return end while true do @@ -167,25 +168,31 @@ local function load_home() local y = input:read("*n") local z = input:read("*n") local name = input:read("*l") - unified_inventory.home_pos[name:sub(2)] = {x = x, y = y, z = z} + ui.home_pos[name:sub(2)] = {x = x, y = y, z = z} end io.close(input) end load_home() -function unified_inventory.set_home(player, pos) +function ui.set_home(player, pos) local player_name = player:get_player_name() - unified_inventory.home_pos[player_name] = vector.round(pos) + ui.home_pos[player_name] = vector.round(pos) + -- save the home data from the table to the file - local output = io.open(unified_inventory.home_filename, "w") - for k, v in pairs(unified_inventory.home_pos) do + local output = io.open(ui.home_filename, "w") + if not output then + minetest.log("warning", "[unified_inventory] Failed to save file: " + .. ui.home_filename) + return + end + for k, v in pairs(ui.home_pos) do output:write(v.x.." "..v.y.." "..v.z.." "..k.."\n") end io.close(output) end -function unified_inventory.go_home(player) - local pos = unified_inventory.home_pos[player:get_player_name()] +function ui.go_home(player) + local pos = ui.home_pos[player:get_player_name()] if pos then player:set_pos(pos) return true @@ -194,7 +201,7 @@ function unified_inventory.go_home(player) end -- register_craft -function unified_inventory.register_craft(options) +function ui.register_craft(options) if not options.output then return end @@ -205,10 +212,10 @@ function unified_inventory.register_craft(options) if options.type == "normal" and options.width == 0 then options = { type = "shapeless", items = options.items, output = options.output, width = 0 } end - if not unified_inventory.crafts_for.recipe[itemstack:get_name()] then - unified_inventory.crafts_for.recipe[itemstack:get_name()] = {} + if not ui.crafts_for.recipe[itemstack:get_name()] then + ui.crafts_for.recipe[itemstack:get_name()] = {} end - table.insert(unified_inventory.crafts_for.recipe[itemstack:get_name()],options) + table.insert(ui.crafts_for.recipe[itemstack:get_name()],options) end @@ -219,7 +226,7 @@ local craft_type_defaults = { } -function unified_inventory.craft_type_defaults(name, options) +function ui.craft_type_defaults(name, options) if not options.description then options.description = name end @@ -228,13 +235,13 @@ function unified_inventory.craft_type_defaults(name, options) end -function unified_inventory.register_craft_type(name, options) - unified_inventory.registered_craft_types[name] = - unified_inventory.craft_type_defaults(name, options) +function ui.register_craft_type(name, options) + ui.registered_craft_types[name] = + ui.craft_type_defaults(name, options) end -unified_inventory.register_craft_type("normal", { +ui.register_craft_type("normal", { description = F(S("Crafting")), icon = "ui_craftgrid_icon.png", width = 3, @@ -250,7 +257,7 @@ unified_inventory.register_craft_type("normal", { }) -unified_inventory.register_craft_type("shapeless", { +ui.register_craft_type("shapeless", { description = F(S("Mixing")), icon = "ui_craftgrid_icon.png", width = 3, @@ -265,7 +272,7 @@ unified_inventory.register_craft_type("shapeless", { }) -unified_inventory.register_craft_type("cooking", { +ui.register_craft_type("cooking", { description = F(S("Cooking")), icon = "default_furnace_front.png", width = 1, @@ -273,37 +280,60 @@ unified_inventory.register_craft_type("cooking", { }) -unified_inventory.register_craft_type("digging", { +ui.register_craft_type("digging", { description = F(S("Digging")), icon = "default_tool_steelpick.png", width = 1, height = 1, }) -unified_inventory.register_craft_type("digging_chance", { +ui.register_craft_type("digging_chance", { description = "Digging (by chance)", icon = "default_tool_steelpick.png^[transformFY.png", width = 1, height = 1, }) -function unified_inventory.register_page(name, def) - unified_inventory.pages[name] = def +function ui.register_page(name, def) + ui.pages[name] = def end -function unified_inventory.register_button(name, def) +function ui.register_button(name, def) if not def.action then def.action = function(player) - unified_inventory.set_inventory_formspec(player, name) + ui.set_inventory_formspec(player, name) end end def.name = name - table.insert(unified_inventory.buttons, def) + table.insert(ui.buttons, def) end - -function unified_inventory.is_creative(playername) +function ui.is_creative(playername) return minetest.check_player_privs(playername, {creative=true}) or minetest.settings:get_bool("creative_mode") end + +function ui.single_slot(xpos, ypos, bright) + return string.format("background9[%f,%f;%f,%f;ui_single_slot%s.png;false;16]", + xpos, ypos, ui.imgscale, ui.imgscale, (bright and "_bright" or "") ) +end + +function ui.make_trash_slot(xpos, ypos) + return + ui.single_slot(xpos, ypos).. + "image["..xpos..","..ypos..";1.25,1.25;ui_trash_slot_icon.png]".. + "list[detached:trash;main;"..(xpos + ui.list_img_offset)..","..(ypos + ui.list_img_offset)..";1,1;]" +end + +function ui.make_inv_img_grid(xpos, ypos, width, height, bright) + local tiled = {} + local n=1 + for y = 0, (height - 1) do + for x = 0, (width -1) do + tiled[n] = ui.single_slot(xpos + (ui.imgscale * x), ypos + (ui.imgscale * y), bright) + n = n + 1 + end + end + return table.concat(tiled) +end diff --git a/mods/unified_inventory/bags.lua b/mods/unified_inventory/bags.lua index c61c9829..14ac8758 100644 --- a/mods/unified_inventory/bags.lua +++ b/mods/unified_inventory/bags.lua @@ -7,27 +7,32 @@ License: GPLv3 local S = minetest.get_translator("unified_inventory") local F = minetest.formspec_escape +local ui = unified_inventory -unified_inventory.register_page("bags", { +ui.register_page("bags", { get_formspec = function(player) local player_name = player:get_player_name() return { formspec = table.concat({ - "background[0.06,0.99;7.92,7.52;ui_bags_main_form.png]", - "label[0,0;" .. F(S("Bags")) .. "]", - "button[0,2;2,0.5;bag1;" .. F(S("Bag @1", 1)) .. "]", - "button[2,2;2,0.5;bag2;" .. F(S("Bag @1", 2)) .. "]", - "button[4,2;2,0.5;bag3;" .. F(S("Bag @1", 3)) .. "]", - "button[6,2;2,0.5;bag4;" .. F(S("Bag @1", 4)) .. "]", + ui.style_full.standard_inv_bg, + ui.single_slot(0.925, 1.5), + ui.single_slot(3.425, 1.5), + ui.single_slot(5.925, 1.5), + ui.single_slot(8.425, 1.5), + "label["..ui.style_full.form_header_x..","..ui.style_full.form_header_y..";" .. F(S("Bags")) .. "]", + "button[0.6125,2.75;1.875,0.75;bag1;" .. F(S("Bag @1", 1)) .. "]", + "button[3.1125,2.75;1.875,0.75;bag2;" .. F(S("Bag @1", 2)) .. "]", + "button[5.6125,2.75;1.875,0.75;bag3;" .. F(S("Bag @1", 3)) .. "]", + "button[8.1125,2.75;1.875,0.75;bag4;" .. F(S("Bag @1", 4)) .. "]", "listcolors[#00000000;#00000000]", - "list[detached:" .. F(player_name) .. "_bags;bag1;0.5,1;1,1;]", - "list[detached:" .. F(player_name) .. "_bags;bag2;2.5,1;1,1;]", - "list[detached:" .. F(player_name) .. "_bags;bag3;4.5,1;1,1;]", - "list[detached:" .. F(player_name) .. "_bags;bag4;6.5,1;1,1;]" + "list[detached:" .. F(player_name) .. "_bags;bag1;1.075,1.65;1,1;]", + "list[detached:" .. F(player_name) .. "_bags;bag2;3.575,1.65;1,1;]", + "list[detached:" .. F(player_name) .. "_bags;bag3;6.075,1.65;1,1;]", + "list[detached:" .. F(player_name) .. "_bags;bag4;8.575,1.65;1,1;]" }) } end, }) -unified_inventory.register_button("bags", { +ui.register_button("bags", { type = "image", image = "ui_bags_icon.png", tooltip = S("Bags"), @@ -42,32 +47,31 @@ local function get_player_bag_stack(player, i) end for bag_i = 1, 4 do - unified_inventory.register_page("bag" .. bag_i, { + ui.register_page("bag" .. bag_i, { get_formspec = function(player) local stack = get_player_bag_stack(player, bag_i) local image = stack:get_definition().inventory_image - local fs = { - "image[7,0;1,1;" .. image .. "]", - "label[0,0;" .. F(S("Bag @1", bag_i)) .. "]", - "listcolors[#00000000;#00000000]", - "list[current_player;bag" .. bag_i .. "contents;0,1;8,3;]", - "listring[current_name;bag" .. bag_i .. "contents]", - "listring[current_player;main]" - } local slots = stack:get_definition().groups.bagslots - if slots == 8 then - fs[#fs + 1] = "background[0.06,0.99;7.92,7.52;ui_bags_sm_form.png]" - elseif slots == 16 then - fs[#fs + 1] = "background[0.06,0.99;7.92,7.52;ui_bags_med_form.png]" - elseif slots == 24 then - fs[#fs + 1] = "background[0.06,0.99;7.92,7.52;ui_bags_lg_form.png]" - end + + local formspec = { + ui.style_full.standard_inv_bg, + ui.make_inv_img_grid(0.3, 1.5, 8, slots/8), + "image[9.2,0.4;1,1;" .. image .. "]", + "label[0.3,0.65;" .. F(S("Bag @1", bag_i)) .. "]", + "listcolors[#00000000;#00000000]", + "listring[current_player;main]", + string.format("list[current_player;bag%icontents;%f,%f;8,3;]", + bag_i, 0.3 + ui.list_img_offset, 1.5 + ui.list_img_offset), + "listring[current_name;bag" .. bag_i .. "contents]", + } + local n = #formspec + 1 + local player_name = player:get_player_name() -- For if statement. - if unified_inventory.trash_enabled - or unified_inventory.is_creative(player_name) - or minetest.get_player_privs(player_name).give then - fs[#fs + 1] = "background[6.06,0;0.92,0.92;ui_bags_trash.png]" - .. "list[detached:trash;main;6,0.1;1,1;]" + if ui.trash_enabled + or ui.is_creative(player_name) + or minetest.get_player_privs(player_name).give then + formspec[n] = ui.make_trash_slot(7.8, 0.25) + n = n + 1 end local inv = player:get_inventory() for i = 1, 4 do @@ -84,11 +88,12 @@ for bag_i = 1, 4 do end local img = def.inventory_image local label = F(S("Bag @1", i)) .. "\n" .. used .. "/" .. size - fs[#fs + 1] = string.format("image_button[%i,0;1,1;%s;bag%i;%s]", - i + 1, img, i, label) + formspec[n] = string.format("image_button[%f,0.4;1,1;%s;bag%i;%s]", + (i + 1.35)*1.25, img, i, label) + n = n + 1 end end - return { formspec = table.concat(fs) } + return { formspec = table.concat(formspec) } end, }) end @@ -103,7 +108,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if not stack:get_definition().groups.bagslots then return end - unified_inventory.set_inventory_formspec(player, "bag" .. i) + ui.set_inventory_formspec(player, "bag" .. i) return end end @@ -132,7 +137,7 @@ end local function load_bags_metadata(player, bags_inv) local player_inv = player:get_inventory() local meta = player:get_meta() - local bags_meta = meta:get_string("unified_inventory:bags") + local bags_meta = meta:get("unified_inventory:bags") local bags = bags_meta and minetest.deserialize(bags_meta) or {} local dirty_meta = false if not bags_meta then diff --git a/mods/unified_inventory/callbacks.lua b/mods/unified_inventory/callbacks.lua index bc902375..1f43e398 100644 --- a/mods/unified_inventory/callbacks.lua +++ b/mods/unified_inventory/callbacks.lua @@ -19,6 +19,8 @@ minetest.register_on_joinplayer(function(player) unified_inventory.active_search_direction[player_name] = "nochange" unified_inventory.apply_filter(player, "", "nochange") unified_inventory.current_searchbox[player_name] = "" + unified_inventory.current_category[player_name] = "all" + unified_inventory.current_category_scroll[player_name] = 0 unified_inventory.alternate[player_name] = 1 unified_inventory.current_item[player_name] = nil unified_inventory.current_craft_direction[player_name] = "recipe" @@ -69,6 +71,41 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) unified_inventory.current_searchbox[player_name] = fields.searchbox end + + local clicked_category + for name, value in pairs(fields) do + local category_name = string.match(name, "^category_(.+)$") + if category_name then + clicked_category = category_name + break + end + end + + if clicked_category + and clicked_category ~= unified_inventory.current_category[player_name] then + unified_inventory.current_category[player_name] = clicked_category + unified_inventory.apply_filter(player, unified_inventory.current_searchbox[player_name], "nochange") + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + end + + if fields.next_category then + local scroll = math.min(#unified_inventory.category_list-ui_peruser.pagecols, unified_inventory.current_category_scroll[player_name] + 1) + if scroll ~= unified_inventory.current_category_scroll[player_name] then + unified_inventory.current_category_scroll[player_name] = scroll + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + end + end + if fields.prev_category then + local scroll = math.max(0, unified_inventory.current_category_scroll[player_name] - 1) + if scroll ~= unified_inventory.current_category_scroll[player_name] then + unified_inventory.current_category_scroll[player_name] = scroll + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + end + end + for i, def in pairs(unified_inventory.buttons) do if fields[def.name] then def.action(player) @@ -126,6 +163,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) clicked_item = unified_inventory.demangle_for_formspec(mangled_item) if string.sub(clicked_item, 1, 6) == "group:" then -- Change search filter to this group + unified_inventory.current_category[player_name] = "all" apply_new_filter(player, clicked_item, new_dir) return end diff --git a/mods/unified_inventory/category.lua b/mods/unified_inventory/category.lua new file mode 100644 index 00000000..d0fee5e6 --- /dev/null +++ b/mods/unified_inventory/category.lua @@ -0,0 +1,150 @@ +local S = minetest.get_translator("unified_inventory") + +unified_inventory.registered_categories = {} +unified_inventory.registered_category_items = {} +unified_inventory.category_list = {} + +local function char_to_sort_index(char_code) + if char_code <= 32 then + -- Command codes, no thanks + return 0 + end + if char_code <= 64 then + -- Sorts numbers, and some punctuation, after letters + return char_code + end + if char_code >= 158 then + -- Out of sortable range + return 0 + end + if char_code > 122 then + -- Avoids overlap with {, |, } and ~ + return char_code - 58 + end + if char_code > 96 then + -- Normalises lowercase with uppercase + return char_code - 96 + end + return char_code - 64 +end + +local function string_to_sort_index(str) + local max_chars = 5 + local power = 100 + local index = 0 + for i=1,math.min(#str, max_chars) do + index = index + (char_to_sort_index(string.byte(str, i))/(power^i)) + end + return index +end + +function update_category_list() + local category_list = {} + table.insert(category_list, { + name = "all", + label = S("All Items"), + symbol = "ui_category_all.png", + index = -2, + }) + table.insert(category_list, { + name = "uncategorized", + label = S("Misc. Items"), + symbol = "ui_category_none.png", + index = -1, + }) + for category, def in pairs(unified_inventory.registered_categories) do + table.insert(category_list, { + name = category, + label = def.label or category, + symbol = def.symbol, + index = def.index or -- sortby defined order + string_to_sort_index(category) -- or do a rudimentary alphabetical sort + }) + end + table.sort(category_list, function (a,b) + return a.index < b.index + end) + unified_inventory.category_list = category_list +end + +local function ensure_category_exists(category_name) + if not unified_inventory.registered_categories[category_name] then + unified_inventory.registered_categories[category_name] = { + symbol = "unknown_item.png", + label = category_name + } + end + if not unified_inventory.registered_category_items[category_name] then + unified_inventory.registered_category_items[category_name] = {} + end +end + +function unified_inventory.register_category(category_name, config) + ensure_category_exists(category_name) + config = config or {} + if config.symbol then + unified_inventory.set_category_symbol(category_name, config.symbol) + end + if config.label then + unified_inventory.set_category_label(category_name, config.label) + end + if config.index then + unified_inventory.set_category_index(category_name, config.index) + end + if config.items then + unified_inventory.add_category_items(category_name, config.items) + end + update_category_list() +end +function unified_inventory.set_category_symbol(category_name, symbol) + ensure_category_exists(category_name) + unified_inventory.registered_categories[category_name].symbol = symbol + update_category_list() +end +function unified_inventory.set_category_label(category_name, label) + ensure_category_exists(category_name) + unified_inventory.registered_categories[category_name].label = label + update_category_list() +end +function unified_inventory.set_category_index(category_name, index) + ensure_category_exists(category_name) + unified_inventory.registered_categories[category_name].index = index + update_category_list() +end +function unified_inventory.add_category_item(category_name, item) + ensure_category_exists(category_name) + unified_inventory.registered_category_items[category_name][item] = true +end +function unified_inventory.add_category_items(category_name, items) + for _,item in ipairs(items) do + unified_inventory.add_category_item(category_name, item) + end +end + +function unified_inventory.remove_category_item(category_name, item) + unified_inventory.registered_category_items[category_name][item] = nil +end +function unified_inventory.remove_category(category_name) + unified_inventory.registered_categories[category_name] = nil + unified_inventory.registered_category_items[category_name] = nil + update_category_list() +end + +function unified_inventory.find_category(item) + -- Returns the first category the item exists in + -- Best for checking if an item has any category at all + for category, items in pairs(unified_inventory.registered_category_items) do + if items[item] then return category end + end +end +function unified_inventory.find_categories(item) + -- Returns all the categories the item exists in + -- Best for listing all categories + local categories = {} + for category, items in pairs(unified_inventory.registered_category_items) do + if items[item] then + table.insert(categories, category) + end + end + return categories +end diff --git a/mods/unified_inventory/default-categories.lua b/mods/unified_inventory/default-categories.lua new file mode 100644 index 00000000..57d3e887 --- /dev/null +++ b/mods/unified_inventory/default-categories.lua @@ -0,0 +1,704 @@ +local S = minetest.get_translator("unified_inventory") + +unified_inventory.register_category('plants', { + symbol = "flowers:tulip", + label = S("Plant Life") +}) +unified_inventory.register_category('building', { + symbol = "default:brick", + label = S("Building Materials") +}) +unified_inventory.register_category('tools', { + symbol = "default:pick_diamond", + label = S("Tools") +}) +unified_inventory.register_category('minerals', { + symbol = "default:iron_lump", + label = S("Minerals and Metals") +}) +unified_inventory.register_category('environment', { + symbol = "default:dirt_with_grass", + label = S("Environment and Worldgen") +}) +unified_inventory.register_category('lighting', { + symbol = "default:torch", + label = S("Lighting") +}) + + +if unified_inventory.automatic_categorization then + minetest.register_on_mods_loaded(function() + + -- Add biome nodes to environment category + for _,def in pairs(minetest.registered_biomes) do + local env_nodes = { + def.node_riverbed, def.node_top, def.node_filler, def.node_dust, + } + for i,node in pairs(env_nodes) do + if node then + unified_inventory.add_category_item('environment', node) + end + end + end + + -- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment + for _,item in pairs(minetest.registered_ores) do + if item.ore_type == "scatter" then + local drop = minetest.registered_nodes[item.ore].drop + if drop and drop ~= "" then + unified_inventory.add_category_item('minerals', item.ore) + unified_inventory.add_category_item('minerals', drop) + else + unified_inventory.add_category_item('environment', item.ore) + end + else + unified_inventory.add_category_item('environment', item.ore) + end + end + + -- Add items by item definition + for name, def in pairs(minetest.registered_items) do + local group = def.groups or {} + if not group.not_in_creative_inventory then + if group.stair or + group.slab or + group.wall or + group.fence then + unified_inventory.add_category_item('building', name) + elseif group.flora or + group.flower or + group.seed or + group.leaves or + group.sapling or + group.tree then + unified_inventory.add_category_item('plants', name) + elseif def.type == 'tool' then + unified_inventory.add_category_item('tools', name) + elseif def.liquidtype == 'source' then + unified_inventory.add_category_item('environment', name) + elseif def.light_source and def.light_source > 0 then + unified_inventory.add_category_item('lighting', name) + elseif group.door or + minetest.global_exists("doors") and ( + doors.registered_doors and doors.registered_doors[name..'_a'] or + doors.registered_trapdoors and doors.registered_trapdoors[name] + ) then + unified_inventory.add_category_item('building', name) + end + end + end + end) +end + +-- [[ +unified_inventory.add_category_items('plants', { + "default:dry_grass_5", + "default:acacia_sapling", + "default:blueberry_bush_sapling", + "default:grass_2", + "default:pine_bush_stem", + "default:leaves", + "default:pine_needles", + "default:cactus", + "default:junglegrass", + "default:pine_sapling", + "default:sapling", + "default:bush_stem", + "default:dry_grass_2", + "default:fern_1", + "default:grass_3", + "default:marram_grass_1", + "default:pine_tree", + "default:dry_grass_3", + "default:dry_shrub", + "default:grass_4", + "default:marram_grass_2", + "default:jungleleaves", + "default:apple", + "default:tree", + "default:aspen_tree", + "default:bush_sapling", + "default:grass_5", + "default:blueberry_bush_leaves_with_berries", + "default:acacia_bush_sapling", + "default:grass_1", + "default:aspen_leaves", + "default:marram_grass_3", + "default:large_cactus_seedling", + "default:junglesapling", + "default:dry_grass_4", + "default:acacia_bush_stem", + "default:papyrus", + "default:pine_bush_needles", + "default:bush_leaves", + "default:fern_3", + "default:aspen_sapling", + "default:acacia_tree", + "default:apple_mark", + "default:acacia_leaves", + "default:jungletree", + "default:dry_grass_1", + "default:acacia_bush_leaves", + "default:emergent_jungle_sapling", + "default:fern_2", + "default:blueberries", + "default:sand_with_kelp", + "default:blueberry_bush_leaves", + "default:pine_bush_sapling", + + "farming:cotton", + "farming:cotton_1", + "farming:cotton_2", + "farming:cotton_3", + "farming:cotton_4", + "farming:cotton_5", + "farming:cotton_6", + "farming:cotton_7", + "farming:cotton_8", + "farming:cotton_wild", + "farming:seed_cotton", + "farming:seed_wheat", + "farming:straw", + "farming:wheat", + "farming:wheat_1", + "farming:wheat_2", + "farming:wheat_3", + "farming:wheat_4", + "farming:wheat_5", + "farming:wheat_6", + "farming:wheat_7", + "farming:wheat_8", + + "flowers:chrysanthemum_green", + "flowers:dandelion_white", + "flowers:dandelion_yellow", + "flowers:geranium", + "flowers:mushroom_brown", + "flowers:mushroom_red", + "flowers:rose", + "flowers:tulip", + "flowers:tulip_black", + "flowers:viola", + "flowers:waterlily", + "flowers:waterlily_waving", +}) + +unified_inventory.add_category_items('tools', { + "default:sword_diamond", + "default:axe_diamond", + "default:shovel_diamond", + "default:axe_steel", + "default:shovel_mese", + "default:sword_wood", + "default:pick_bronze", + "default:axe_stone", + "default:sword_stone", + "default:pick_stone", + "default:shovel_stone", + "default:sword_mese", + "default:shovel_bronze", + "default:sword_bronze", + "default:axe_bronze", + "default:shovel_steel", + "default:sword_steel", + "default:axe_mese", + "default:shovel_wood", + "default:pick_mese", + "default:axe_wood", + "default:pick_diamond", + "default:pick_wood", + "default:pick_steel", + + "farming:hoe_bronze", + "farming:hoe_diamond", + "farming:hoe_mese", + "farming:hoe_steel", + "farming:hoe_stone", + "farming:hoe_wood", + + "fire:flint_and_steel", + "map:mapping_kit", + "screwdriver:screwdriver", + + "fireflies:bug_net", + "bucket:bucket_empty", + + "binoculars:binoculars", + "default:skeleton_key", +}) + +unified_inventory.add_category_items('minerals', { + "default:stone_with_copper", + "default:stone_with_gold", + "default:stone_with_iron", + "default:copper_ingot", + "default:copper_lump", + "default:gold_lump", + "default:diamondblock", + "default:stone_with_diamond", + "default:stone_with_mese", + "default:steel_ingot", + "default:gold_ingot", + "default:iron_lump", + "default:tinblock", + "default:tin_lump", + "default:stone_with_tin", + "default:mese_crystal", + "default:diamond", + "default:bronze_ingot", + "default:mese", + "default:mese_crystal_fragment", + "default:copperblock", + "default:stone_with_coal", + "default:steelblock", + "default:tin_ingot", + "default:coalblock", + "default:coal_lump", + "default:bronzeblock", + "default:goldblock", + + "stairs:slab_bronzeblock", + "stairs:slab_copperblock", + "stairs:slab_steelblock", + "stairs:slab_tinblock", + "stairs:stair_bronzeblock", + "stairs:stair_copperblock", + "stairs:stair_inner_bronzeblock", + "stairs:stair_inner_copperblock", + "stairs:stair_inner_steelblock", + "stairs:stair_inner_tinblock", + "stairs:stair_outer_bronzeblock", + "stairs:stair_outer_copperblock", + "stairs:stair_outer_steelblock", + "stairs:stair_outer_tinblock", + "stairs:stair_steelblock", + "stairs:stair_tinblock", +}) + +unified_inventory.add_category_items('building', { + "default:fence_rail_aspen_wood", + "default:fence_rail_acacia_wood", + "default:fence_junglewood", + "default:fence_rail_junglewood", + "default:fence_aspen_wood", + "default:fence_pine_wood", + "default:fence_rail_wood", + "default:fence_rail_pine_wood", + "default:fence_acacia_wood", + "default:junglewood", + "default:acacia_wood", + "default:aspen_wood", + "default:fence_wood", + "default:pine_wood", + "default:silver_sandstone", + "default:desert_sandstone", + "default:sandstone_block", + "default:desert_sandstone_brick", + "default:stone_block", + "default:stonebrick", + "default:obsidian_glass", + "default:desert_sandstone_block", + "default:silver_sandstone_brick", + "default:brick", + "default:obsidianbrick", + "default:sandstonebrick", + "default:sandstone", + "default:desert_stone_block", + "default:silver_sandstone_block", + "default:wood", + "default:obsidian_block", + "default:glass", + "default:clay_brick", + "default:desert_stonebrick", + "default:desert_cobble", + "default:cobble", + "default:mossycobble", + + "doors:door_glass", + "doors:door_glass_a", + "doors:door_glass_b", + "doors:door_glass_c", + "doors:door_glass_d", + "doors:door_obsidian_glass", + "doors:door_obsidian_glass_a", + "doors:door_obsidian_glass_b", + "doors:door_obsidian_glass_c", + "doors:door_obsidian_glass_d", + "doors:door_steel", + "doors:door_steel_a", + "doors:door_steel_b", + "doors:door_steel_c", + "doors:door_steel_d", + "doors:door_wood", + "doors:door_wood_a", + "doors:door_wood_b", + "doors:door_wood_c", + "doors:door_wood_d", + "doors:gate_acacia_wood_closed", + "doors:gate_acacia_wood_open", + "doors:gate_aspen_wood_closed", + "doors:gate_aspen_wood_open", + "doors:gate_junglewood_closed", + "doors:gate_junglewood_open", + "doors:gate_pine_wood_closed", + "doors:gate_pine_wood_open", + "doors:gate_wood_closed", + "doors:gate_wood_open", + "doors:hidden", + "doors:trapdoor", + "doors:trapdoor_open", + "doors:trapdoor_steel", + "doors:trapdoor_steel_open", + + "stairs:slab_bronzeblock", + "stairs:slab_copperblock", + "stairs:slab_steelblock", + "stairs:slab_tinblock", + "stairs:stair_bronzeblock", + "stairs:stair_copperblock", + "stairs:stair_inner_bronzeblock", + "stairs:stair_inner_copperblock", + "stairs:stair_inner_steelblock", + "stairs:stair_inner_tinblock", + "stairs:stair_outer_bronzeblock", + "stairs:stair_outer_copperblock", + "stairs:stair_outer_steelblock", + "stairs:stair_outer_tinblock", + "stairs:stair_steelblock", + "stairs:stair_tinblock", + + "stairs:slab_acacia_wood", + "stairs:slab_aspen_wood", + "stairs:slab_brick", + "stairs:slab_cobble", + "stairs:slab_desert_cobble", + "stairs:slab_desert_sandstone", + "stairs:slab_desert_sandstone_block", + "stairs:slab_desert_sandstone_brick", + "stairs:slab_desert_stone", + "stairs:slab_desert_stone_block", + "stairs:slab_desert_stonebrick", + "stairs:slab_glass", + "stairs:slab_goldblock", + "stairs:slab_ice", + "stairs:slab_junglewood", + "stairs:slab_mossycobble", + "stairs:slab_obsidian", + "stairs:slab_obsidian_block", + "stairs:slab_obsidian_glass", + "stairs:slab_obsidianbrick", + "stairs:slab_pine_wood", + "stairs:slab_sandstone", + "stairs:slab_sandstone_block", + "stairs:slab_sandstonebrick", + "stairs:slab_silver_sandstone", + "stairs:slab_silver_sandstone_block", + "stairs:slab_silver_sandstone_brick", + "stairs:slab_snowblock", + "stairs:slab_stone", + "stairs:slab_stone_block", + "stairs:slab_stonebrick", + "stairs:slab_straw", + "stairs:slab_wood", + "stairs:stair_acacia_wood", + "stairs:stair_aspen_wood", + "stairs:stair_brick", + "stairs:stair_cobble", + "stairs:stair_desert_cobble", + "stairs:stair_desert_sandstone", + "stairs:stair_desert_sandstone_block", + "stairs:stair_desert_sandstone_brick", + "stairs:stair_desert_stone", + "stairs:stair_desert_stone_block", + "stairs:stair_desert_stonebrick", + "stairs:stair_glass", + "stairs:stair_goldblock", + "stairs:stair_ice", + "stairs:stair_inner_acacia_wood", + "stairs:stair_inner_aspen_wood", + "stairs:stair_inner_brick", + "stairs:stair_inner_cobble", + "stairs:stair_inner_desert_cobble", + "stairs:stair_inner_desert_sandstone", + "stairs:stair_inner_desert_sandstone_block", + "stairs:stair_inner_desert_sandstone_brick", + "stairs:stair_inner_desert_stone", + "stairs:stair_inner_desert_stone_block", + "stairs:stair_inner_desert_stonebrick", + "stairs:stair_inner_glass", + "stairs:stair_inner_goldblock", + "stairs:stair_inner_ice", + "stairs:stair_inner_junglewood", + "stairs:stair_inner_mossycobble", + "stairs:stair_inner_obsidian", + "stairs:stair_inner_obsidian_block", + "stairs:stair_inner_obsidian_glass", + "stairs:stair_inner_obsidianbrick", + "stairs:stair_inner_pine_wood", + "stairs:stair_inner_sandstone", + "stairs:stair_inner_sandstone_block", + "stairs:stair_inner_sandstonebrick", + "stairs:stair_inner_silver_sandstone", + "stairs:stair_inner_silver_sandstone_block", + "stairs:stair_inner_silver_sandstone_brick", + "stairs:stair_inner_snowblock", + "stairs:stair_inner_stone", + "stairs:stair_inner_stone_block", + "stairs:stair_inner_stonebrick", + "stairs:stair_inner_straw", + "stairs:stair_inner_wood", + "stairs:stair_junglewood", + "stairs:stair_mossycobble", + "stairs:stair_obsidian", + "stairs:stair_obsidian_block", + "stairs:stair_obsidian_glass", + "stairs:stair_obsidianbrick", + "stairs:stair_outer_acacia_wood", + "stairs:stair_outer_aspen_wood", + "stairs:stair_outer_brick", + "stairs:stair_outer_cobble", + "stairs:stair_outer_desert_cobble", + "stairs:stair_outer_desert_sandstone", + "stairs:stair_outer_desert_sandstone_block", + "stairs:stair_outer_desert_sandstone_brick", + "stairs:stair_outer_desert_stone", + "stairs:stair_outer_desert_stone_block", + "stairs:stair_outer_desert_stonebrick", + "stairs:stair_outer_glass", + "stairs:stair_outer_goldblock", + "stairs:stair_outer_ice", + "stairs:stair_outer_junglewood", + "stairs:stair_outer_mossycobble", + "stairs:stair_outer_obsidian", + "stairs:stair_outer_obsidian_block", + "stairs:stair_outer_obsidian_glass", + "stairs:stair_outer_obsidianbrick", + "stairs:stair_outer_pine_wood", + "stairs:stair_outer_sandstone", + "stairs:stair_outer_sandstone_block", + "stairs:stair_outer_sandstonebrick", + "stairs:stair_outer_silver_sandstone", + "stairs:stair_outer_silver_sandstone_block", + "stairs:stair_outer_silver_sandstone_brick", + "stairs:stair_outer_snowblock", + "stairs:stair_outer_stone", + "stairs:stair_outer_stone_block", + "stairs:stair_outer_stonebrick", + "stairs:stair_outer_straw", + "stairs:stair_outer_wood", + "stairs:stair_pine_wood", + "stairs:stair_sandstone", + "stairs:stair_sandstone_block", + "stairs:stair_sandstonebrick", + "stairs:stair_silver_sandstone", + "stairs:stair_silver_sandstone_block", + "stairs:stair_silver_sandstone_brick", + "stairs:stair_snowblock", + "stairs:stair_stone", + "stairs:stair_stone_block", + "stairs:stair_stonebrick", + "stairs:stair_straw", + "stairs:stair_wood", + + "xpanes:bar", + "xpanes:bar_flat", + "xpanes:door_steel_bar", + "xpanes:door_steel_bar_a", + "xpanes:door_steel_bar_b", + "xpanes:door_steel_bar_c", + "xpanes:door_steel_bar_d", + "xpanes:obsidian_pane", + "xpanes:obsidian_pane_flat", + "xpanes:pane", + "xpanes:pane_flat", + "xpanes:trapdoor_steel_bar", + "xpanes:trapdoor_steel_bar_open", + + "walls:cobble", + "walls:desertcobble", + "walls:mossycobble", +}) + +unified_inventory.add_category_items('environment', { + "air", + "default:cave_ice", + "default:dirt_with_rainforest_litter", + "default:gravel", + "default:dry_dirt_with_dry_grass", + "default:permafrost", + "default:desert_stone", + "default:ice", + "default:dry_dirt", + "default:obsidian", + "default:sand", + "default:river_water_source", + "default:dirt_with_snow", + "default:dirt_with_grass", + "default:water_flowing", + "default:dirt", + "default:desert_sand", + "default:permafrost_with_moss", + "default:dirt_with_coniferous_litter", + "default:water_source", + "default:dirt_with_dry_grass", + "default:river_water_flowing", + "default:stone", + "default:snow", + "default:lava_flowing", + "default:lava_source", + "default:permafrost_with_stones", + "default:dirt_with_grass_footsteps", + "default:silver_sand", + "default:snowblock", + "default:clay", + + "farming:desert_sand_soil", + "farming:desert_sand_soil_wet", + "farming:dry_soil", + "farming:dry_soil_wet", + "farming:soil", + "farming:soil_wet", +}) + +unified_inventory.add_category_items('lighting', { + "default:mese_post_light_junglewood", + "default:torch_ceiling", + "default:meselamp", + "default:torch", + "default:mese_post_light_acacia_wood", + "default:mese_post_light", + "default:torch_wall", + "default:mese_post_light_pine_wood", + "default:mese_post_light_aspen_wood" +}) +--]] + + +--[[ UNCATEGORISED + + "farming:string", + + "beds:bed_bottom", + "beds:bed_top", + "beds:fancy_bed_bottom", + "beds:fancy_bed_top", + "boats:boat", + "bones:bones", + + "bucket:bucket_lava", + "bucket:bucket_river_water", + "bucket:bucket_water", + + "butterflies:butterfly_red", + "butterflies:butterfly_violet", + "butterflies:butterfly_white", + "butterflies:hidden_butterfly_red", + "butterflies:hidden_butterfly_violet", + "butterflies:hidden_butterfly_white", + + "carts:brakerail", + "carts:cart", + "carts:powerrail", + "carts:rail", + + "default:book", + "default:book_written", + "default:bookshelf", + "default:chest", + "default:chest_locked", + "default:chest_locked_open", + "default:chest_open", + "default:clay_lump", + "default:cloud", + "default:coral_brown", + "default:coral_cyan", + "default:coral_green", + "default:coral_orange", + "default:coral_pink", + "default:coral_skeleton", + "default:flint", + "default:furnace", + "default:furnace_active", + "default:key", + "default:ladder_steel", + "default:ladder_wood", + "default:obsidian_shard", + "default:paper", + "default:sign_wall_steel", + "default:sign_wall_wood", + "default:stick", + + "fire:basic_flame", + "fire:permanent_flame", + "fireflies:firefly", + "fireflies:firefly_bottle", + "fireflies:hidden_firefly", + + "ignore", + "unknown", + + "tnt:boom", + "tnt:gunpowder", + "tnt:gunpowder_burning", + "tnt:tnt", + "tnt:tnt_burning", + "tnt:tnt_stick", + + "vessels:drinking_glass", + "vessels:glass_bottle", + "vessels:glass_fragments", + "vessels:shelf", + "vessels:steel_bottle", + + "dye:black", + "dye:blue", + "dye:brown", + "dye:cyan", + "dye:dark_green", + "dye:dark_grey", + "dye:green", + "dye:grey", + "dye:magenta", + "dye:orange", + "dye:pink", + "dye:red", + "dye:violet", + "dye:white", + "dye:yellow", + + "wool:black", + "wool:blue", + "wool:brown", + "wool:cyan", + "wool:dark_green", + "wool:dark_grey", + "wool:green", + "wool:grey", + "wool:magenta", + "wool:orange", + "wool:pink", + "wool:red", + "wool:violet", + "wool:white", + "wool:yellow", + + "unified_inventory:bag_large", + "unified_inventory:bag_medium", + "unified_inventory:bag_small", +--]] + +--[[ LIST UNCATEGORIZED AFTER LOAD +minetest.register_on_mods_loaded(function() + minetest.after(1, function ( ) + local l = {} + for name,_ in pairs(minetest.registered_items) do + if not unified_inventory.find_category(name) then + -- minetest.log("error", minetest.serialize(minetest.registered_items[name])) + table.insert(l, name) + end + end + table.sort(l) + minetest.log(table.concat(l, '",'.."\n"..'"')) + end) +end) +--]] \ No newline at end of file diff --git a/mods/unified_inventory/doc/mod_api.txt b/mods/unified_inventory/doc/mod_api.txt index c0be129b..ff527920 100644 --- a/mods/unified_inventory/doc/mod_api.txt +++ b/mods/unified_inventory/doc/mod_api.txt @@ -3,6 +3,14 @@ unified_inventory API This file provides information about the API of unified_inventory. +API revisions within unified_inventory can be checked using: + + (unified_inventory.version or 1) + +**Revision history** + +* Version `1`: Classic formspec layout (no real_coordinates) +* Version `2`: Force formspec version 4 (includes real_coordinates) Misc functions -------------- @@ -93,3 +101,72 @@ Register a non-standard craft recipe: -- ^ Same as `minetest.register_recipe` }) + +Categories +---------- + +Register a new category: + The config table (second argument) is optional, and all its members are optional + See the unified_inventory.set_category_* functions for more details on the members of the config table + + unified_inventory.register_category("category_name", { + symbol = "mod_name:item_name" or "texture.png", + label = "Human Readable Label", + index = 5, + items = { + "mod_name:item_name", + "another_mod:different_item" + } + }) + +Add / override the symbol for a category: + The category does not need to exist first + The symbol can be an item name or a texture image + If unset this will default to "default:stick" + + unified_inventory.set_category_symbol("category_name", "mod_name:item_name" or "texture.png") + +Add / override the human readable label for a category: + If unset this will default to the category name + + unified_inventory.set_category_label("category_name", "Human Readable Label") + +Add / override the sorting index of the category: + Must be a number, can also be negative (-5) or fractional (2.345) + This determines the position the category appears in the list of categories + The "all" meta-category has index -2, the "misc"/"uncategorized" meta-category has index -1, use a negative number smaller than these to make a category appear before these in the list + By default categories are sorted alphabetically with an index between 0.0101(AA) and 0.2626(ZZ) + + unified_inventory.set_category_index("category_name", 5) + +Add a single item to a category: + + unified_inventory.add_category_item("category_name", "mod_name:item_name") + +Add multiple items to a category: + + unified_inventory.add_category_items("category_name", { + "mod_name:item_name", + "another_mod:different_item" + }) + +Remove an item from a category: + + unified_inventory.remove_category_item("category_name", "mod_name:item_name") + +Remove a category entirely: + + unified_inventory.remove_category("category_name") + +Finding existing items in categories: + This will find the first category an item exists in + It should be used for checking if an item is catgorised + Returns "category_name" or nil + + unified_inventory.find_category("mod_name:item_name") + + + This will find all the categories an item exists in + Returns a number indexed table (list) of category names + + unified_inventory.find_categories("mod_name:item_name") diff --git a/mods/unified_inventory/init.lua b/mods/unified_inventory/init.lua index 1a80abbb..00a3fc54 100644 --- a/mods/unified_inventory/init.lua +++ b/mods/unified_inventory/init.lua @@ -1,4 +1,4 @@ --- Unified Inventory for Minetest >= 0.4.16 +-- Unified Inventory local modpath = minetest.get_modpath(minetest.get_current_modname()) local worldpath = minetest.get_worldpath() @@ -10,6 +10,8 @@ unified_inventory = { alternate = {}, current_page = {}, current_searchbox = {}, + current_category = {}, + current_category_scroll = {}, current_index = {}, current_item = {}, current_craft_direction = {}, @@ -33,20 +35,110 @@ unified_inventory = { -- "Lite" mode lite_mode = minetest.settings:get_bool("unified_inventory_lite"), + -- Items automatically added to categories based on item definitions + automatic_categorization = (minetest.settings:get_bool("unified_inventory_automatic_categorization") ~= false), + -- Trash enabled trash_enabled = (minetest.settings:get_bool("unified_inventory_trash") ~= false), - - pagecols = 8, - pagerows = 10, - page_y = 0, - formspec_y = 1, - main_button_x = 0, - main_button_y = 9, - craft_result_x = 0.3, - craft_result_y = 0.5, - form_header_y = 0 + imgscale = 1.25, + list_img_offset = 0.13, + standard_background = "background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", + version = 2 } +local ui = unified_inventory + +-- These tables establish position and layout for the two UI styles. +-- UI doesn't use formspec_[xy] anymore, but other mods may need them. + +ui.style_full = { + formspec_x = 1, + formspec_y = 1, + formw = 17.75, + formh = 12.25, + pagecols = 8, + pagerows = 9, + page_x = 10.75, + page_y = 2.30, + craft_x = 2.8, + craft_y = 1.15, + craftresult_x = 7.8, + craft_arrow_x = 6.55, + craft_guide_x = 3.3, + craft_guide_y = 1.15, + craft_guide_arrow_x = 7.05, + craft_guide_result_x = 8.3, + craft_guide_resultstr_x = 0.3, + craft_guide_resultstr_y = 0.6, + give_btn_x = 0.25, + main_button_x = 0.4, + main_button_y = 11.0, + page_buttons_x = 11.60, + page_buttons_y = 10.15, + searchwidth = 3.4, + form_header_x = 0.4, + form_header_y = 0.4, + btn_spc = 0.85, + btn_size = 0.75, + std_inv_x = 0.3, + std_inv_y = 5.75, +} + +ui.style_lite = { + formspec_x = 0.6, + formspec_y = 0.6, + formw = 14, + formh = 9.75, + pagecols = 4, + pagerows = 5, + page_x = 10.5, + page_y = 2.15, + craft_x = 2.6, + craft_y = 0.75, + craftresult_x = 5.75, + craft_arrow_x = 6.35, + craft_guide_x = 3.1, + craft_guide_y = 0.75, + craft_guide_arrow_x = 7.05, + craft_guide_result_x = 8.3, + craft_guide_resultstr_x = 0.15, + craft_guide_resultstr_y = 0.35, + give_btn_x = 0.15, + main_button_x = 10.5, + main_button_y = 8.15, + page_buttons_x = 10.5, + page_buttons_y = 6.15, + searchwidth = 1.6, + form_header_x = 0.2, + form_header_y = 0.2, + btn_spc = 0.8, + btn_size = 0.7, + std_inv_x = 0.1, + std_inv_y = 4.6, +} + +dofile(modpath.."/api.lua") + +for _, style in ipairs({ui.style_full, ui.style_lite}) do + style.items_per_page = style.pagecols * style.pagerows + style.standard_inv = string.format("list[current_player;main;%f,%f;8,4;]", + style.std_inv_x + ui.list_img_offset, style.std_inv_y + ui.list_img_offset) + + style.standard_inv_bg = ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y, 8, 1, true).. + ui.make_inv_img_grid(style.std_inv_x, style.std_inv_y + ui.imgscale, 8, 3) + + style.craft_grid = table.concat({ + ui.make_inv_img_grid(style.craft_x, style.craft_y, 3, 3), + ui.single_slot(style.craft_x + ui.imgscale*4, style.craft_y), -- the craft result slot + string.format("image[%f,%f;%f,%f;ui_crafting_arrow.png]", + style.craft_arrow_x, style.craft_y, ui.imgscale, ui.imgscale), + string.format("list[current_player;craft;%f,%f;3,3;]", + style.craft_x + ui.list_img_offset, style.craft_y + ui.list_img_offset), + string.format("list[current_player;craftpreview;%f,%f;1,1;]", + style.craftresult_x + ui.list_img_offset, style.craft_y + ui.list_img_offset) + }) +end + -- Disable default creative inventory local creative = rawget(_G, "creative") or rawget(_G, "creative_inventory") if creative then @@ -62,7 +154,8 @@ if sfinv then end dofile(modpath.."/group.lua") -dofile(modpath.."/api.lua") +dofile(modpath.."/category.lua") +dofile(modpath.."/default-categories.lua") dofile(modpath.."/internal.lua") dofile(modpath.."/callbacks.lua") dofile(modpath.."/match_craft.lua") @@ -73,7 +166,4 @@ if minetest.settings:get_bool("unified_inventory_bags") ~= false then end dofile(modpath.."/item_names.lua") - -if minetest.get_modpath("datastorage") then - dofile(modpath.."/waypoints.lua") -end +dofile(modpath.."/waypoints.lua") diff --git a/mods/unified_inventory/internal.lua b/mods/unified_inventory/internal.lua index eeab695d..cdf71edb 100644 --- a/mods/unified_inventory/internal.lua +++ b/mods/unified_inventory/internal.lua @@ -1,5 +1,6 @@ local S = minetest.get_translator("unified_inventory") local F = minetest.formspec_escape +local ui = unified_inventory -- This pair of encoding functions is used where variable text must go in -- button names, where the text might contain formspec metacharacters. @@ -9,78 +10,63 @@ local F = minetest.formspec_escape -- This is a game engine bug, and in the anticipation that it might be -- fixed some day we don't want to rely on it. So for safety we apply -- an encoding that avoids all formspec metacharacters. -function unified_inventory.mangle_for_formspec(str) + +function ui.mangle_for_formspec(str) return string.gsub(str, "([^A-Za-z0-9])", function (c) return string.format("_%d_", string.byte(c)) end) end -function unified_inventory.demangle_for_formspec(str) +function ui.demangle_for_formspec(str) return string.gsub(str, "_([0-9]+)_", function (v) return string.char(v) end) end -function unified_inventory.get_per_player_formspec(player_name) - local lite = unified_inventory.lite_mode and not minetest.check_player_privs(player_name, {ui_full=true}) - local ui = {} - ui.pagecols = unified_inventory.pagecols - ui.pagerows = unified_inventory.pagerows - ui.page_y = unified_inventory.page_y - ui.formspec_y = unified_inventory.formspec_y - ui.main_button_x = unified_inventory.main_button_x - ui.main_button_y = unified_inventory.main_button_y - ui.craft_result_x = unified_inventory.craft_result_x - ui.craft_result_y = unified_inventory.craft_result_y - ui.form_header_y = unified_inventory.form_header_y +function ui.get_per_player_formspec(player_name) + local draw_lite_mode = ui.lite_mode and not minetest.check_player_privs(player_name, {ui_full=true}) - if lite then - ui.pagecols = 4 - ui.pagerows = 6 - ui.page_y = 0.25 - ui.formspec_y = 0.47 - ui.main_button_x = 8.2 - ui.main_button_y = 6.5 - ui.craft_result_x = 2.8 - ui.craft_result_y = 3.4 - ui.form_header_y = -0.1 - end - - ui.items_per_page = ui.pagecols * ui.pagerows - return ui, lite + return table.copy(draw_lite_mode and ui.style_lite or ui.style_full), draw_lite_mode end -function unified_inventory.get_formspec(player, page) +local function formspec_button(ui_peruser, name, image, offset, pos, scale, label) + local element = 'image_button' + if minetest.registered_items[image] then + element = 'item_image_button' + elseif image:find(":", 1, true) then + image = "unknown_item.png" + end + local spc = (1-scale)*ui_peruser.btn_size/2 + local size = ui_peruser.btn_size*scale + return string.format("%s[%f,%f;%f,%f;%s;%s;]", element, + (offset.x or offset[1]) + ( ui_peruser.btn_spc * (pos.x or pos[1]) ) + spc, + (offset.y or offset[2]) + ( ui_peruser.btn_spc * (pos.y or pos[2]) ) + spc, + size, size, image, name) .. + string.format("tooltip[%s;%s]", name, F(label or name)) +end + +function ui.get_formspec(player, page) if not player then return "" end local player_name = player:get_player_name() - local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) + local ui_peruser,draw_lite_mode = ui.get_per_player_formspec(player_name) - unified_inventory.current_page[player_name] = page - local pagedef = unified_inventory.pages[page] + ui.current_page[player_name] = page + local pagedef = ui.pages[page] if not pagedef then return "" -- Invalid page name end local formspec = { - "size[14,10]", + "formspec_version[4]", + "size["..ui_peruser.formw..","..ui_peruser.formh.."]", pagedef.formspec_prepend and "" or "no_prepend[]", - "background[-0.19,-0.25;14.4,10.75;ui_form_bg.png]" -- Background + ui.standard_background } - local n = 4 - if draw_lite_mode then - formspec[1] = "size[11,7.7]" - formspec[3] = "background[-0.19,-0.2;11.4,8.4;ui_form_bg.png]" - end + local n = 5 - if unified_inventory.is_creative(player_name) - and page == "craft" then - formspec[n] = "background[0,"..(ui_peruser.formspec_y + 2)..";1,1;ui_single_slot.png]" - n = n+1 - end - - local perplayer_formspec = unified_inventory.get_per_player_formspec(player_name) + local perplayer_formspec = ui.get_per_player_formspec(player_name) local fsdata = pagedef.get_formspec(player, perplayer_formspec) formspec[n] = fsdata.formspec @@ -93,7 +79,7 @@ function unified_inventory.get_formspec(player, page) local filtered_inv_buttons = {} - for i, def in pairs(unified_inventory.buttons) do + for i, def in pairs(ui.buttons) do if not (draw_lite_mode and def.hide_lite) then table.insert(filtered_inv_buttons, def) end @@ -108,21 +94,20 @@ function unified_inventory.get_formspec(player, page) if def.type == "image" then if (def.condition == nil or def.condition(player) == true) then - formspec[n] = "image_button[" - formspec[n+1] = ( ui_peruser.main_button_x + 0.65 * (i - 1) - button_col * 0.65 * 4) - formspec[n+2] = ","..(ui_peruser.main_button_y + button_row * 0.7)..";0.8,0.8;" - formspec[n+3] = F(def.image)..";" - formspec[n+4] = F(def.name)..";]" - formspec[n+5] = "tooltip["..F(def.name) - formspec[n+6] = ";"..(def.tooltip or "").."]" - n = n+7 + formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s;]", + ui_peruser.main_button_x + ui_peruser.btn_spc * (i - 1) - button_col * ui_peruser.btn_spc * 4, + ui_peruser.main_button_y + button_row * ui_peruser.btn_spc, + ui_peruser.btn_size,ui_peruser.btn_size, + F(def.image), + F(def.name)) + formspec[n+1] = "tooltip["..F(def.name)..";"..(def.tooltip or "").."]" + n = n+2 else - formspec[n] = "image[" - formspec[n+1] = ( ui_peruser.main_button_x + 0.65 * (i - 1) - button_col * 0.65 * 4) - formspec[n+2] = ","..(ui_peruser.main_button_y + button_row * 0.7)..";0.8,0.8;" - formspec[n+3] = F(def.image).."^[colorize:#808080:alpha]" - n = n+4 - + formspec[n] = string.format("image[%f,%f;%f,%f;%s^[colorize:#808080:alpha]", + ui_peruser.main_button_x + ui_peruser.btn_spc * (i - 1) - button_col * ui_peruser.btn_spc * 4, + ui_peruser.main_button_y + button_row * ui_peruser.btn_spc, + ui_peruser.btn_size,ui_peruser.btn_size,def.image) + n = n+1 end end end @@ -130,7 +115,7 @@ function unified_inventory.get_formspec(player, page) if fsdata.draw_inventory ~= false then -- Player inventory formspec[n] = "listcolors[#00000000;#00000000]" - formspec[n+1] = "list[current_player;main;0,"..(ui_peruser.formspec_y + 3.5)..";8,4;]" + formspec[n+1] = ui_peruser.standard_inv n = n+2 end @@ -138,71 +123,94 @@ function unified_inventory.get_formspec(player, page) return table.concat(formspec, "") end - -- Controls to flip items pages - local start_x = 9.2 + -- Category filters - if not draw_lite_mode then - formspec[n] = - "image_button[" .. (start_x + 0.6 * 0) - .. ",9;.8,.8;ui_skip_backward_icon.png;start_list;]" - .. "tooltip[start_list;" .. F(S("First page")) .. "]" + local categories_pos = { ui_peruser.page_x, ui_peruser.page_y-ui_peruser.btn_spc-0.5 } + local categories_scroll_pos = { ui_peruser.page_x, ui_peruser.form_header_y-(draw_lite_mode and 0 or 0.2) } - .. "image_button[" .. (start_x + 0.6 * 1) - .. ",9;.8,.8;ui_doubleleft_icon.png;rewind3;]" - .. "tooltip[rewind3;" .. F(S("Back three pages")) .. "]" - .. "image_button[" .. (start_x + 0.6 * 2) - .. ",9;.8,.8;ui_left_icon.png;rewind1;]" - .. "tooltip[rewind1;" .. F(S("Back one page")) .. "]" + formspec[n] = string.format("background9[%f,%f;%f,%f;%s;false;3]", + ui_peruser.page_x-0.1, categories_scroll_pos[2], + (ui_peruser.btn_spc * ui_peruser.pagecols) + 0.13, 1.4+(draw_lite_mode and 0 or 0.2), + "ui_smallbg_9_sliced.png") + n = n + 1 - .. "image_button[" .. (start_x + 0.6 * 3) - .. ",9;.8,.8;ui_right_icon.png;forward1;]" - .. "tooltip[forward1;" .. F(S("Forward one page")) .. "]" - .. "image_button[" .. (start_x + 0.6 * 4) - .. ",9;.8,.8;ui_doubleright_icon.png;forward3;]" - .. "tooltip[forward3;" .. F(S("Forward three pages")) .. "]" + formspec[n] = string.format("label[%f,%f;%s]", ui_peruser.page_x, ui_peruser.form_header_y+(draw_lite_mode and 0.3 or 0.2), "Category:") + n = n + 1 - .. "image_button[" .. (start_x + 0.6 * 5) - .. ",9;.8,.8;ui_skip_forward_icon.png;end_list;]" - .. "tooltip[end_list;" .. F(S("Last page")) .. "]" - else - formspec[n] = - "image_button[" .. (8.2 + 0.65 * 0) - .. ",5.8;.8,.8;ui_skip_backward_icon.png;start_list;]" - .. "tooltip[start_list;" .. F(S("First page")) .. "]" - .. "image_button[" .. (8.2 + 0.65 * 1) - .. ",5.8;.8,.8;ui_left_icon.png;rewind1;]" - .. "tooltip[rewind1;" .. F(S("Back one page")) .. "]" - .. "image_button[" .. (8.2 + 0.65 * 2) - .. ",5.8;.8,.8;ui_right_icon.png;forward1;]" - .. "tooltip[forward1;" .. F(S("Forward one page")) .. "]" - .. "image_button[" .. (8.2 + 0.65 * 3) - .. ",5.8;.8,.8;ui_skip_forward_icon.png;end_list;]" - .. "tooltip[end_list;" .. F(S("Last page")) .. "]" + local scroll_offset = 0 + local category_count = #unified_inventory.category_list + if category_count > ui_peruser.pagecols then + scroll_offset = unified_inventory.current_category_scroll[player_name] + end + + for index, category in ipairs(unified_inventory.category_list) do + local column = index - scroll_offset + if column > 0 and column <= ui_peruser.pagecols then + local scale = 0.8 + if unified_inventory.current_category[player_name] == category.name then + scale = 1 + end + formspec[n] = formspec_button(ui_peruser, "category_"..category.name, category.symbol, categories_pos, {column-1, 0}, scale, category.label) + n = n + 1 + end + end + if category_count > ui_peruser.pagecols and scroll_offset > 0 then + -- prev + formspec[n] = formspec_button(ui_peruser, "prev_category", "ui_left_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 2, 0}, 0.8, S("Scroll categories left")) + n = n + 1 + end + if category_count > ui_peruser.pagecols and category_count - scroll_offset > ui_peruser.pagecols then + -- next + formspec[n] = formspec_button(ui_peruser, "next_category", "ui_right_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 1, 0}, 0.8, S("Scroll categories right")) + n = n + 1 end - n = n+1 -- Search box formspec[n] = "field_close_on_enter[searchbox;false]" - n = n+1 - if not draw_lite_mode then - formspec[n] = "field[9.5,8.325;3,1;searchbox;;" - .. F(unified_inventory.current_searchbox[player_name]) .. "]" - formspec[n+1] = "image_button[12.2,8.1;.8,.8;ui_search_icon.png;searchbutton;]" - .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" - formspec[n+2] = "image_button[12.9,8.1;.8,.8;ui_reset_icon.png;searchresetbutton;]" - .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" - .. "tooltip[searchresetbutton;" ..F(S("Reset search and display everything")) .. "]" - else - formspec[n] = "field[8.5,5.225;2.2,1;searchbox;;" - .. F(unified_inventory.current_searchbox[player_name]) .. "]" - formspec[n+1] = "image_button[10.3,5;.8,.8;ui_search_icon.png;searchbutton;]" - .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" - formspec[n+2] = "image_button[11,5;.8,.8;ui_reset_icon.png;searchresetbutton;]" - .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" - .. "tooltip[searchresetbutton;" ..F(S("Reset search and display everything")) .. "]" + formspec[n+1] = string.format("field[%f,%f;%f,%f;searchbox;;%s]", + ui_peruser.page_buttons_x, ui_peruser.page_buttons_y, + ui_peruser.searchwidth - 0.1, ui_peruser.btn_size, + F(ui.current_searchbox[player_name])) + formspec[n+2] = string.format("image_button[%f,%f;%f,%f;ui_search_icon.png;searchbutton;]", + ui_peruser.page_buttons_x + ui_peruser.searchwidth, ui_peruser.page_buttons_y, + ui_peruser.btn_size,ui_peruser.btn_size) + formspec[n+3] = "tooltip[searchbutton;" ..F(S("Search")) .. "]" + formspec[n+4] = string.format("image_button[%f,%f;%f,%f;ui_reset_icon.png;searchresetbutton;]", + ui_peruser.page_buttons_x + ui_peruser.searchwidth + ui_peruser.btn_spc, + ui_peruser.page_buttons_y, + ui_peruser.btn_size, ui_peruser.btn_size) + formspec[n+5] = "tooltip[searchresetbutton;"..F(S("Reset search and display everything")).."]" + + n = n + 6 + + -- Controls to flip items pages + + local btnlist = { + { "ui_skip_backward_icon.png", "start_list", S("First page") }, + { "ui_doubleleft_icon.png", "rewind3", S("Back three pages") }, + { "ui_left_icon.png", "rewind1", S("Back one page") }, + { "ui_right_icon.png", "forward1", S("Forward one page") }, + { "ui_doubleright_icon.png", "forward3", S("Forward three pages") }, + { "ui_skip_forward_icon.png", "end_list", S("Last page") }, + } + + if draw_lite_mode then + btnlist[5] = nil + btnlist[2] = nil + end + + local bn = 0 + for _, b in pairs(btnlist) do + formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s;]", + ui_peruser.page_buttons_x + ui_peruser.btn_spc*bn, + ui_peruser.page_buttons_y + ui_peruser.btn_spc, + ui_peruser.btn_size, ui_peruser.btn_size, + b[1],b[2]) + formspec[n+1] = "tooltip["..b[2]..";"..F(b[3]).."]" + bn = bn + 1 + n = n + 2 end - n = n+3 local no_matches = S("No matching items") if draw_lite_mode then @@ -210,23 +218,23 @@ function unified_inventory.get_formspec(player, page) end -- Items list - if #unified_inventory.filtered_items_list[player_name] == 0 then - formspec[n] = "label[8.2,"..ui_peruser.form_header_y..";" .. F(no_matches) .. "]" + if #ui.filtered_items_list[player_name] == 0 then + formspec[n] = "label["..ui_peruser.page_x..","..(ui_peruser.page_y+0.15)..";" .. F(no_matches) .. "]" else - local dir = unified_inventory.active_search_direction[player_name] - local list_index = unified_inventory.current_index[player_name] + local dir = ui.active_search_direction[player_name] + local list_index = ui.current_index[player_name] local page2 = math.floor(list_index / (ui_peruser.items_per_page) + 1) local pagemax = math.floor( - (#unified_inventory.filtered_items_list[player_name] - 1) + (#ui.filtered_items_list[player_name] - 1) / (ui_peruser.items_per_page) + 1) for y = 0, ui_peruser.pagerows - 1 do for x = 0, ui_peruser.pagecols - 1 do - local name = unified_inventory.filtered_items_list[player_name][list_index] + local name = ui.filtered_items_list[player_name][list_index] local item = minetest.registered_items[name] if item then -- Clicked on current item: Flip crafting direction - if name == unified_inventory.current_item[player_name] then - local cdir = unified_inventory.current_craft_direction[player_name] + if name == ui.current_item[player_name] then + local cdir = ui.current_craft_direction[player_name] if cdir == "recipe" then dir = "usage" elseif cdir == "usage" then @@ -234,13 +242,15 @@ function unified_inventory.get_formspec(player, page) end else -- Default: use active search direction by default - dir = unified_inventory.active_search_direction[player_name] + dir = ui.active_search_direction[player_name] end local button_name = "item_button_" .. dir .. "_" - .. unified_inventory.mangle_for_formspec(name) - formspec[n] = ("item_image_button[%f,%f;.81,.81;%s;%s;]"):format( - 8.2 + x * 0.7, ui_peruser.formspec_y + ui_peruser.page_y + y * 0.7, + .. ui.mangle_for_formspec(name) + formspec[n] = ("item_image_button[%f,%f;%f,%f;%s;%s;]"):format( + ui_peruser.page_x + x * ui_peruser.btn_spc, + ui_peruser.page_y + y * ui_peruser.btn_spc, + ui_peruser.btn_size, ui_peruser.btn_size, name, button_name ) formspec[n + 1] = ("tooltip[%s;%s \\[%s\\]]"):format( @@ -252,26 +262,36 @@ function unified_inventory.get_formspec(player, page) end end end - formspec[n] = "label[8.2,"..ui_peruser.form_header_y..";"..F(S("Page")) .. ": " - .. S("@1 of @2",page2,pagemax).."]" + formspec[n] = string.format("label[%f,%f;%s: %s]", + ui_peruser.page_buttons_x + ui_peruser.btn_spc * (draw_lite_mode and 1 or 2), + ui_peruser.page_buttons_y + 0.1 + ui_peruser.btn_spc * 2, + F(S("Page")), S("@1 of @2",page2,pagemax)) end n= n+1 - if unified_inventory.activefilter[player_name] ~= "" then - formspec[n] = "label[8.2,"..(ui_peruser.form_header_y + 0.4)..";" .. F(S("Filter")) .. ":]" - formspec[n+1] = "label[9.1,"..(ui_peruser.form_header_y + 0.4)..";"..F(unified_inventory.activefilter[player_name]).."]" + if ui.activefilter[player_name] ~= "" then + formspec[n] = string.format("label[%f,%f;%s: %s]", + ui_peruser.page_x, ui_peruser.page_y - 0.25, + F(S("Filter")), F(ui.activefilter[player_name])) end return table.concat(formspec, "") end -function unified_inventory.set_inventory_formspec(player, page) +function ui.set_inventory_formspec(player, page) if player then - player:set_inventory_formspec(unified_inventory.get_formspec(player, page)) + player:set_inventory_formspec(ui.get_formspec(player, page)) end end +local function valid_def(def) + return (not def.groups.not_in_creative_inventory + or def.groups.not_in_creative_inventory == 0) + and def.description + and def.description ~= "" +end + --apply filter to the inventory list (create filtered copy of full one) -function unified_inventory.apply_filter(player, filter, search_dir) +function ui.apply_filter(player, filter, search_dir) if not player then return false end @@ -300,26 +320,43 @@ function unified_inventory.apply_filter(player, filter, search_dir) or llocaldesc and string.find(llocaldesc, lfilter, 1, true) end end - unified_inventory.filtered_items_list[player_name]={} - for name, def in pairs(minetest.registered_items) do - if (not def.groups.not_in_creative_inventory - or def.groups.not_in_creative_inventory == 0) - and def.description - and def.description ~= "" - and ffilter(name, def) then - table.insert(unified_inventory.filtered_items_list[player_name], name) + ui.filtered_items_list[player_name]={} + local category = ui.current_category[player_name] or 'all' + if category == 'all' then + for name, def in pairs(minetest.registered_items) do + if valid_def(def) + and ffilter(name, def) then + table.insert(ui.filtered_items_list[player_name], name) + end + end + elseif category == 'uncategorized' then + for name, def in pairs(minetest.registered_items) do + if (not ui.find_category(name)) + and valid_def(def) + and ffilter(name, def) then + table.insert(ui.filtered_items_list[player_name], name) + end + end + else + for name,exists in pairs(ui.registered_category_items[category]) do + local def = minetest.registered_items[name] + if exists and def + and valid_def(def) + and ffilter(name, def) then + table.insert(ui.filtered_items_list[player_name], name) + end end end - table.sort(unified_inventory.filtered_items_list[player_name]) - unified_inventory.filtered_items_list_size[player_name] = #unified_inventory.filtered_items_list[player_name] - unified_inventory.current_index[player_name] = 1 - unified_inventory.activefilter[player_name] = filter - unified_inventory.active_search_direction[player_name] = search_dir - unified_inventory.set_inventory_formspec(player, - unified_inventory.current_page[player_name]) + table.sort(ui.filtered_items_list[player_name]) + ui.filtered_items_list_size[player_name] = #ui.filtered_items_list[player_name] + ui.current_index[player_name] = 1 + ui.activefilter[player_name] = filter + ui.active_search_direction[player_name] = search_dir + ui.set_inventory_formspec(player, + ui.current_page[player_name]) end -function unified_inventory.items_in_group(groups) +function ui.items_in_group(groups) local items = {} for name, item in pairs(minetest.registered_items) do for _, group in pairs(groups:split(',')) do @@ -331,7 +368,7 @@ function unified_inventory.items_in_group(groups) return items end -function unified_inventory.sort_inventory(inv) +function ui.sort_inventory(inv) local inlist = inv:get_list("main") local typecnt = {} local typekeys = {} diff --git a/mods/unified_inventory/locale/unified_inventory.template.tr b/mods/unified_inventory/locale/template.txt similarity index 73% rename from mods/unified_inventory/locale/unified_inventory.template.tr rename to mods/unified_inventory/locale/template.txt index 2ea4fcaf..fd931d88 100644 --- a/mods/unified_inventory/locale/unified_inventory.template.tr +++ b/mods/unified_inventory/locale/template.txt @@ -1,54 +1,52 @@ # textdomain: unified_inventory - -# waypoints.lua - -White= -Yellow= -Red= -Green= -Blue= -Waypoints= -Select Waypoint #@1= -Waypoint @1= -Set waypoint to current location= -Make waypoint @1= -invisible= -visible= -@1 display of waypoint coordinates= -Disable= -Enable= -Change color of waypoint display= -Edit waypoint name= -Waypoint active= -Waypoint inactive= -Finish editing= -World position= -Name= -HUD text color= - -# group.lua - +Mixing= +Cooking= +Digging= +Bags= +Bag @1= +Small Bag= +Medium Bag= +Large Bag= +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = - -# register.lua - +Scroll categories left= +Scroll categories right= +Search= +Reset search and display everything= +First page= +Back three pages= +Back one page= +Forward one page= +Forward three pages= +Last page= +No matching items= +No matches.= +Page= +@1 of @2= +Filter= Can use the creative inventory= Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid= Crafting Guide= Set home position= Home position set to: @1= -You don't have the \"home\" privilege!= +You don't have the "home" privilege!= Go home= Set time to day= -Set time to night= Time of day set to 6am= -Time of day set to 9pm= You don't have the settime privilege!= +Set time to night= +Time of day set to 9pm= Clear inventory= +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!= -This button has been disabled outside= -Crafting= Trash:= Refill:= Any item belonging to the @1 group= @@ -65,36 +63,28 @@ Show previous recipe= Show previous usage= @1 (@2)= Give me:= -This recipe is too@nlarge to be displayed.= +This recipe is too@@large to be displayed.= To craft grid:= All= - -# api.lua - -Mixing= -Cooking= -Digging= - -# internal.lua - -First page= -Back three pages= -Back one page= -Forward one page= -Forward three pages= -Last page= -Search= -Reset search and display everything= -No matching items= -No matches.= -Page= -@1 of @2= -Filter= - -# bags.lua - -Bags= -Bag @1= -Small Bag= -Medium Bag= -Large Bag= +Crafting= +White= +Yellow= +Red= +Green= +Blue= +Waypoints= +Select Waypoint #@1= +Waypoint @1= +Set waypoint to current location= +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= +Change color of waypoint display= +Edit waypoint name= +Waypoint active= +Waypoint inactive= +Finish editing= +World position= +Name= +HUD text color= diff --git a/mods/unified_inventory/locale/unified_inventory.de.tr b/mods/unified_inventory/locale/unified_inventory.de.tr index e2a05be1..474049c0 100644 --- a/mods/unified_inventory/locale/unified_inventory.de.tr +++ b/mods/unified_inventory/locale/unified_inventory.de.tr @@ -1,5 +1,4 @@ # textdomain: unified_inventory -Crafting=Fertigung Mixing=Mischen Cooking=Kochen Digging=Graben @@ -8,21 +7,32 @@ Bag @1=Tasche @1 Small Bag=Kleine Tasche Medium Bag=Mittelgroße Tasche Large Bag=Große Tasche +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = und +Scroll categories left= +Scroll categories right= +Search=Suchen +Reset search and display everything=Suche zurücksetzen und alles anzeigen First page=Erste Seite Back three pages=3 Seiten zurückblättern Back one page=1 Seite zurückblättern Forward one page=1 Seite vorblättern Forward three pages=3 Seiten vorblättern Last page=Letzte Seite -Search=Suchen -Reset search and display everything=Suche zurücksetzen und alles anzeigen No matching items=Keine passenden Gegenstände No matches.=Keine Treffer Page=Seite @1 of @2=@1 von @2 Filter=Filter Can use the creative inventory=Kann das Kreativinventar nutzen +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Zwingt Unified Inventory, im Vollmodus angezeigt zu werden, wenn der Minimalmodus global eingestellt ist Crafting Grid=Fertigungsraster Crafting Guide=Fertigungsführer Set home position=Heimatposition setzen @@ -35,6 +45,7 @@ You don't have the settime privilege!=Du hast das „settime“-Privileg nicht! Set time to night=Zur Nachtzeit wechseln Time of day set to 9pm=Tageszeit auf 21 Uhr gesetzt Clear inventory=Inventar leeren +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Inventar geleert! Trash:=Müll: Refill:=Nachfüllen: @@ -50,9 +61,12 @@ Show next recipe=Nächstes Rezept zeigen Show next usage=Nächste Verwendung zeigen Show previous recipe=Vorheriges Rezept zeigen Show previous usage=Vorherige Verwendung zeigen +@1 (@2)= Give me:=Gib mir: +This recipe is too@@large to be displayed.= To craft grid:=Ins Fertigungsraster: All=Alles +Crafting=Fertigung White=Weiß Yellow=Gelb Red=Rot @@ -62,12 +76,10 @@ Waypoints=Wegpunkte Select Waypoint #@1=Wegpunkt Nr. @1 auswählen Waypoint @1=Wegpunkt Nr. @1 Set waypoint to current location=Setze Wegpunkt zur derzeitigen Position -invisible=unsichtbar -visible=sichtbar -Make waypoint @1=Wegpunkt @1 machen -Disable=ausschalten -Enable=einschalten -@1 display of waypoint coordinates=Anzeige der Wegpunktkoordinaten @1 +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Farbe der Darstellung der Wegpunkte ändern Edit waypoint name=Name des Wegpunkts ändern Waypoint active=Wegpunkt aktiv @@ -76,4 +88,13 @@ Finish editing=Bearbeitung abschließen World position=Weltposition Name=Name HUD text color=HUD-Textfarbe -Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Zwingt Unified Inventory, im Vollmodus angezeigt zu werden, wenn der Minimalmodus global eingestellt ist + + +##### not used anymore ##### + +invisible=unsichtbar +visible=sichtbar +Make waypoint @1=Wegpunkt @1 machen +Disable=ausschalten +Enable=einschalten +@1 display of waypoint coordinates=Anzeige der Wegpunktkoordinaten @1 diff --git a/mods/unified_inventory/locale/unified_inventory.es.tr b/mods/unified_inventory/locale/unified_inventory.es.tr index 18b6c772..85a794ee 100644 --- a/mods/unified_inventory/locale/unified_inventory.es.tr +++ b/mods/unified_inventory/locale/unified_inventory.es.tr @@ -1,54 +1,57 @@ # textdomain: unified_inventory - -# waypoints.lua - -White=Blanco -Yellow=Amarillo -Red=Rojo -Green=Verde -Blue=Azul -Waypoints=Puntos -Select Waypoint #@1=Seleccionar Punto #@1 -Waypoint @1=Punto @1 -Set waypoint to current location=Establecer el punto a la ubicación actual -Make waypoint @1=Hacer punto @1 -invisible=invisible -visible=visible -@1 display of waypoint coordinates=Visualizar coordenadas del punto @1 -Disable=Deshabilitado -Enable=Habilitado -Change color of waypoint display=Cambiar el color del punto -Edit waypoint name=Editar nombre del punto -Waypoint active=Punto activo -Waypoint inactive=Punto inactivo -Finish editing=Terminar edición -World position=Posición en el mundo -Name=Nombre -HUD text color=Color del texto de la Interfaz - +# api.lua +Mixing=Mezclar +Cooking=Hornear +Digging=Recoger +# bags.lua +Bags=Bolsos +Bag @1=Bolso @1 +Small Bag=Bolso Pequeño +Medium Bag=Bolso Mediano +Large Bag=Bolso Grande +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= # group.lua - and = y - +Scroll categories left= +Scroll categories right= +Search=Buscar +Reset search and display everything=Limpiar la busqueda y mostrar todo +# internal.lua +First page=Primera página +Back three pages=Volver tres páginas +Back one page=Volver una página +Forward one page=Avanzar una página +Forward three pages=Avanzar tres páginas +Last page=Ultima Pagina +No matching items=No se encontraron elementos +No matches.=No hay resultados. +Page=Página +@1 of @2=@1 de @2 +Filter=Filtro # register.lua - Can use the creative inventory=Puede usar el inventario creativo Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Obliga al Inventario Unificado a mostrarse en modo Completo si el modo Simple está configurado globalmente Crafting Grid=Cuadricula de Elaboración Crafting Guide=Guía de Elaboración Set home position=Establecer posición de la casa Home position set to: @1=Posición de la casa cambiada a: @1 -You don't have the \"home\" privilege!=¡No tienes el privilegio \"home\"! +You don't have the "home" privilege!= Go home=Ir a casa Set time to day=Cambiar a dia -Set time to night=Cambiar a noche Time of day set to 6am=Hora del día cambiada a 6 AM -Time of day set to 9pm=Hora del día cambiada a 9 PM You don't have the settime privilege!=¡No tienes el privilegio "settime"! +Set time to night=Cambiar a noche +Time of day set to 9pm=Hora del día cambiada a 9 PM Clear inventory=Limpiar inventario +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=¡Inventario limpio! -This button has been disabled outside=Este botón ha sido deshabilitado -Crafting=Elaboración Trash:=Basura: Refill:=Rellenar: Any item belonging to the @1 group=Cualquier elemento que pertenezca al grupo @1 @@ -65,36 +68,41 @@ Show previous recipe=Mostrar la receta anterior Show previous usage=Mostrar el uso anterior @1 (@2)=@1 (@2) Give me:=Dame: -This recipe is too@nlarge to be displayed.=Esta receta es demasiado@ngrande para ser mostrada. +This recipe is too@@large to be displayed.= To craft grid:=Construir: All=Todos +Crafting=Elaboración +White=Blanco +Yellow=Amarillo +Red=Rojo +Green=Verde +Blue=Azul +Waypoints=Puntos +Select Waypoint #@1=Seleccionar Punto #@1 +Waypoint @1=Punto @1 +Set waypoint to current location=Establecer el punto a la ubicación actual +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= +Change color of waypoint display=Cambiar el color del punto +Edit waypoint name=Editar nombre del punto +Waypoint active=Punto activo +Waypoint inactive=Punto inactivo +Finish editing=Terminar edición +World position=Posición en el mundo +Name=Nombre +HUD text color=Color del texto de la Interfaz -# api.lua -Mixing=Mezclar -Cooking=Hornear -Digging=Recoger +##### not used anymore ##### -# internal.lua - -First page=Primera página -Back three pages=Volver tres páginas -Back one page=Volver una página -Forward one page=Avanzar una página -Forward three pages=Avanzar tres páginas -Last page=Ultima Pagina -Search=Buscar -Reset search and display everything=Limpiar la busqueda y mostrar todo -No matching items=No se encontraron elementos -No matches.=No hay resultados. -Page=Página -@1 of @2=@1 de @2 -Filter=Filtro - -# bags.lua - -Bags=Bolsos -Bag @1=Bolso @1 -Small Bag=Bolso Pequeño -Medium Bag=Bolso Mediano -Large Bag=Bolso Grande +Make waypoint @1=Hacer punto @1 +invisible=invisible +visible=visible +@1 display of waypoint coordinates=Visualizar coordenadas del punto @1 +Disable=Deshabilitado +Enable=Habilitado +You don't have the \"home\" privilege!=¡No tienes el privilegio \"home\"! +This button has been disabled outside=Este botón ha sido deshabilitado +This recipe is too@nlarge to be displayed.=Esta receta es demasiado@ngrande para ser mostrada. diff --git a/mods/unified_inventory/locale/unified_inventory.fr.tr b/mods/unified_inventory/locale/unified_inventory.fr.tr index 5367ddb0..96d8c3f5 100644 --- a/mods/unified_inventory/locale/unified_inventory.fr.tr +++ b/mods/unified_inventory/locale/unified_inventory.fr.tr @@ -1,5 +1,5 @@ # textdomain: unified_inventory -Crafting=Création +Mixing= Cooking=Cuisson Digging=Creuser Bags=Sacs @@ -7,35 +7,66 @@ Bag @1=Sac @1 Small Bag=Petit sac Medium Bag=Sac moyen Large Bag=Grand sac +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = et +Scroll categories left= +Scroll categories right= +Search=Rechercher +Reset search and display everything= First page=1ère page Back three pages=3 pages en arrière Back one page=Page précédente Forward one page=Page suivante Forward three pages=3 pages en avant Last page=Dernière page -Search=Rechercher No matching items=Aucun élément correspondant No matches.=Aucun match Page=Page @1 of @2=@1 de @2 Filter=Filtre Can use the creative inventory=Vous pouvez utiliser l'inventaire créatif +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=Grille de création Crafting Guide=Guide de création Set home position=Position dans le monde Home position set to: @1=Position de votre base fixée à: @1 You don't have the "home" privilege!=Vous n'avez pas le privilège "home"! +Go home= +Set time to day= Time of day set to 6am=Heure fixée à 6h You don't have the settime privilege!=Vous n'avez pas le privilège "settime"! +Set time to night= Time of day set to 9pm=Heure fixée à 21h +Clear inventory= +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Inventaire vidé ! Trash:=Poubelle : Refill:=Remplir : +Any item belonging to the @1 group= +Any item belonging to the groups @1= Recipe @1 of @2=Recette @1 de @2 +Usage @1 of @2= +No recipes= +No usages= Result=Résultat +Ingredient= +Show next recipe= +Show next usage= +Show previous recipe= +Show previous usage= +@1 (@2)= +Give me:= +This recipe is too@@large to be displayed.= To craft grid:=Sur de création: All=Tout +Crafting=Création White=Blanc Yellow=Jaune Red=Rouge @@ -45,8 +76,10 @@ Waypoints=Point de passage Select Waypoint #@1=Choisir un point de passage #@1 Waypoint @1=Point de passage @1 Set waypoint to current location=Marquer un point de passage à la position actuelle -Make waypoint @1=Rendre @1 le point de passage -@1 display of waypoint coordinates=@1 montrer les coordonnées des points de passages +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Changer la couleur du point de passage Edit waypoint name=Editer le nom du point de passage Waypoint active=Point de passage actif @@ -55,3 +88,9 @@ Finish editing=Terminer l'édition World position=Position dans le monde Name=Nom HUD text color=Couleur de texte du HUD + + +##### not used anymore ##### + +Make waypoint @1=Rendre @1 le point de passage +@1 display of waypoint coordinates=@1 montrer les coordonnées des points de passages diff --git a/mods/unified_inventory/locale/unified_inventory.it.tr b/mods/unified_inventory/locale/unified_inventory.it.tr index 1bf76601..c30d9e08 100644 --- a/mods/unified_inventory/locale/unified_inventory.it.tr +++ b/mods/unified_inventory/locale/unified_inventory.it.tr @@ -1,5 +1,4 @@ # textdomain: unified_inventory -Crafting=Assemblaggio Mixing=Unione Cooking=Cottura Digging=Scavo @@ -8,21 +7,32 @@ Bag @1=Borsa @1 Small Bag=Borsa piccola Medium Bag=Borsa media Large Bag=Borsa grande +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = e +Scroll categories left= +Scroll categories right= +Search=Cerca +Reset search and display everything=Azzera la ricerca e mostra tutto First page=Prima pagina Back three pages=Indietro di tre pagine Back one page=Indietro di una pagina Forward one page=Avanti di una pagina Forward three pages=Avanti di tre pagine Last page=Ultima pagina -Search=Cerca -Reset search and display everything=Azzera la ricerca e mostra tutto No matching items=Nessun oggetto corrispondente No matches.=Nessuna corrispondenza. Page=Pagina @1 of @2=@1 di @2 Filter=Filtro Can use the creative inventory=Può usare l'inventario creativo +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Forza la visualizzazione di Unified Inventory in modalità completa se è configurata globalmente la visualizzazione semplice Crafting Grid=Griglia di assemblaggio Crafting Guide=Guida di assemblaggio Set home position=Imposta la residenza @@ -35,6 +45,7 @@ You don't have the settime privilege!=Non hai il privilegio "time"! Set time to night=Imposta l'orario sulla notte Time of day set to 9pm=Orario impostato sulle 9am Clear inventory=Ripulisci l'inventario +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Inventario ripulito! Trash:=Butta: Refill:=Riempi: @@ -50,9 +61,12 @@ Show next recipe=Mostra la prossima ricetta Show next usage=Mostra il prossimo utilizzo Show previous recipe=Mostra la ricetta precedente Show previous usage=Mostra l'utilizzo precedente +@1 (@2)= Give me:=Dammi: +This recipe is too@@large to be displayed.= To craft grid:=Alla griglia di assemblaggio: All=Tutto +Crafting=Assemblaggio White=Bianco Yellow=Giallo Red=Rosso @@ -62,12 +76,10 @@ Waypoints=Tappe Select Waypoint #@1=Seleziona tappa n°@1 Waypoint @1=Tappa @1 Set waypoint to current location=Imposta tappa alla posizione attuale -invisible=invisibile -visible=visibile -Make waypoint @1=Crea tappa @1 -Disable=Disabilita -Enable=Abilita -@1 display of waypoint coordinates=@1 la visualizzazione delle coordinate della tappa +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Modifica il colore della visualizzazione della tappa Edit waypoint name=Modifica il nome della tappa Waypoint active=Tappa attiva @@ -76,4 +88,13 @@ Finish editing=Termina la modifica World position=Posizione del mondo Name=Nome HUD text color=Colore del testo del visore -Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally=Forza la visualizzazione di Unified Inventory in modalità completa se è configurata globalmente la visualizzazione semplice + + +##### not used anymore ##### + +invisible=invisibile +visible=visibile +Make waypoint @1=Crea tappa @1 +Disable=Disabilita +Enable=Abilita +@1 display of waypoint coordinates=@1 la visualizzazione delle coordinate della tappa diff --git a/mods/unified_inventory/locale/unified_inventory.ms.tr b/mods/unified_inventory/locale/unified_inventory.ms.tr index 25fc853f..be4eb5e3 100644 --- a/mods/unified_inventory/locale/unified_inventory.ms.tr +++ b/mods/unified_inventory/locale/unified_inventory.ms.tr @@ -1,5 +1,4 @@ # textdomain: unified_inventory -Crafting=Pertukangan Mixing=Pencampuran Cooking=Pemasakan Digging=Penggalian @@ -8,21 +7,32 @@ Bag @1=Beg @1 Small Bag=Beg Kecil Medium Bag=Beg Sederhana Large Bag=Beg Besar +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = dan +Scroll categories left= +Scroll categories right= +Search=Cari +Reset search and display everything=Set semula carian dan tunjukkan semua benda First page=Halaman pertama Back three pages=Tiga halaman sebelumnya Back one page=Halaman sebelumnya Forward one page=Halaman seterusnya Forward three pages=Tiga halaman seterusnya Last page=Halaman terakhir -Search=Cari -Reset search and display everything=Set semula carian dan tunjukkan semua benda No matching items=Tiada item sepadan No matches.=Tiada padanan. Page=Halaman @1 of @2=@1 drpd @2 Filter=Tapis Can use the creative inventory=Boleh guna inventori kreatif +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=Grid Pertukangan Crafting Guide=Panduan Pertukangan Set home position=Tetapkan kedudukan rumah @@ -35,6 +45,7 @@ You don't have the settime privilege!=Anda tidak ada keistimewaan settime! Set time to night=Tetapkan masa jadi malam Time of day set to 9pm=Masa ditetapkan ke 9 malam Clear inventory=Kosongkan inventori +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Inventori dikosongkan! Trash:=Buang: Refill:=Isi balik: @@ -52,7 +63,10 @@ Show previous recipe=Tunjuk resipi sebelumnya Show previous usage=Tunjuk kegunaan sebelumnya @1 (@2)=@1 (@2) Give me:=Beri saya: +This recipe is too@@large to be displayed.= To craft grid:=Ke grid pertukangan: +All= +Crafting=Pertukangan White=Putih Yellow=Kuning Red=Merah @@ -62,12 +76,10 @@ Waypoints=Titik Arah Select Waypoint #@1=Pilih Titik Arah #@1 Waypoint @1=Titik Arah @1 Set waypoint to current location=Tetapkan titik arah ke lokasi semasa -invisible=Sembunyikan -visible=Paparkan -Make waypoint @1=@1 titik arah -Disable=Sembunyikan -Enable=Paparkan -@1 display of waypoint coordinates=@1 koordinat untuk titik arah +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Tukar warna paparan titik arah Edit waypoint name=Edit nama titik arah Waypoint active=Titik arah aktif @@ -76,3 +88,13 @@ Finish editing=Selesai edit World position=Kedudukan dunia Name=Nama HUD text color=Warna tulisan HUD + + +##### not used anymore ##### + +invisible=Sembunyikan +visible=Paparkan +Make waypoint @1=@1 titik arah +Disable=Sembunyikan +Enable=Paparkan +@1 display of waypoint coordinates=@1 koordinat untuk titik arah diff --git a/mods/unified_inventory/locale/unified_inventory.pl.tr b/mods/unified_inventory/locale/unified_inventory.pl.tr index 19121d8d..69d39e37 100644 --- a/mods/unified_inventory/locale/unified_inventory.pl.tr +++ b/mods/unified_inventory/locale/unified_inventory.pl.tr @@ -1,22 +1,40 @@ # textdomain: unified_inventory +Mixing= +Cooking= +Digging= Bags=Plecaki Bag @1=Plecak @1 Small Bag=Maly plecak Medium Bag=Sredni plecak Large Bag=Duzy plecak +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = i +Scroll categories left= +Scroll categories right= +Search=Szukaj +Reset search and display everything= First page=Pierwsza strona Back three pages=3 strony w tyl Back one page=1 strona w tyl Forward one page=1 strona do przodu Forward three pages=3 strony do przodu Last page=Ostatnia strona -Search=Szukaj No matching items=Brak pasujacych przedmiotow No matches.=Brak wyników Page=Strona @1 of @2=@1 z @2 Filter=Filtr +Can use the creative inventory= +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= +Crafting Grid= +Crafting Guide= Set home position=Ustaw pozycję wyjściową Home position set to: @1=Pozycja domowa ustawiona na: @1 You don't have the "home" privilege!=Nie masz uprawnien do zmiany czasu "home"! @@ -27,17 +45,28 @@ You don't have the settime privilege!=Nie masz uprawnien do zmiany czasu "settim Set time to night=Ustaw czas na noc Time of day set to 9pm=Czas ustawiony na 21:00 Clear inventory=Wyczyść zapasy +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Zapasy zostały wyczyszczone! Trash:=Smietnik: Refill:=Uzupelnianie: +Any item belonging to the @1 group= +Any item belonging to the groups @1= Recipe @1 of @2=Recepta @1 z @2 Usage @1 of @2=Użycie @1 z @2 No recipes=Brak recepty No usages=Bez użycia Result=Wynik Ingredient=Składnik +Show next recipe= +Show next usage= +Show previous recipe= +Show previous usage= +@1 (@2)= Give me:=Daj mi: +This recipe is too@@large to be displayed.= +To craft grid:= All=Wszystko +Crafting= White=Bialy Yellow=Zolty Red=Czerwony @@ -47,10 +76,10 @@ Waypoints=Punkty orientacyjne Select Waypoint #@1=Wybierz punkt #@1 Waypoint @1=Punkty orientacyjne @1 Set waypoint to current location=Ustaw punkt orientacyjny na biezacej pozycji -invisible=niewidzialny -visible=widomy -Make waypoint @1=Robić punkt @1 -@1 display of waypoint coordinates=@1 koordynatow punktu +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Zmien kolor punktu Edit waypoint name=Edytuj nazwe punktu Waypoint active=Punkt wlaczony @@ -59,3 +88,11 @@ Finish editing=Zakoncz edycje World position=Pozycja Name=Nazwa HUD text color=Kolor tekstu HUD + + +##### not used anymore ##### + +invisible=niewidzialny +visible=widomy +Make waypoint @1=Robić punkt @1 +@1 display of waypoint coordinates=@1 koordynatow punktu diff --git a/mods/unified_inventory/locale/unified_inventory.pt.tr b/mods/unified_inventory/locale/unified_inventory.pt.tr index 3b0b902f..5fedbc05 100644 --- a/mods/unified_inventory/locale/unified_inventory.pt.tr +++ b/mods/unified_inventory/locale/unified_inventory.pt.tr @@ -1,5 +1,4 @@ # textdomain: unified_inventory -Crafting=Artesanato Mixing=Muistura Cooking=Cozimento Digging=Escavação @@ -8,21 +7,32 @@ Bag @1=Bolsa @1 Small Bag=Bolsa Pequena Medium Bag=Bolsa Média Large Bag=Bolsa Grande +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = e +Scroll categories left= +Scroll categories right= +Search=Pesquisar +Reset search and display everything=Redefinir pesquisa e exibir tudo First page=Primeira Página Back three pages=Voltar 3 Páginas Back one page=Voltar 1 Página Forward one page=Avançar 1 Página Forward three pages=Avançar 3 Páginas Last page=Ultima Página -Search=Pesquisar -Reset search and display everything=Redefinir pesquisa e exibir tudo No matching items=Nenhum item correspondente No matches.=Sem correspondências Page=Página @1 of @2=@1 de @2 Filter=Filtro Can use the creative inventory=Pode usar o inventário do criativo +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=Grade de Artesanato Crafting Guide=Guia de Artesanato Set home position=Definir posição de casa @@ -35,6 +45,7 @@ You don't have the settime privilege!=Você não tem o privilégio de "settime"! Set time to night=Definir turno para noite Time of day set to 9pm=Hora do dia ajustada para 21h Clear inventory=Limpar Inventário +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Inventário Apagado! Trash:=Lixo: Refill:=Recarga: @@ -50,9 +61,12 @@ Show next recipe=Exibir Próxima Receita Show next usage=Mostrar Próxima Utilização Show previous recipe=Exibir Receita Anterior Show previous usage=Exibir Utilização Anterior +@1 (@2)= Give me:=Gerado: +This recipe is too@@large to be displayed.= To craft grid:=Para Grade de Artesanato All=MAX +Crafting=Artesanato White=Branco Yellow=Amarelo Red=Vermelho @@ -62,10 +76,10 @@ Waypoints=Apontador de Direção Select Waypoint #@1=Seleção de Apontador de Direção #@1 Waypoint @1=Apontador de Direção @1 Set waypoint to current location=Configurar localização atual do Apontador de Direção -invisible=invisível -visible=visível -Make waypoint @1=Fazer Apontador de Direção @1 -@1 display of waypoint coordinates=@1 exibição de coordenadas de Fazer Apontador de Direção +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Mudar cor exibida do Apontador de Direção Edit waypoint name=Editar Nome de Apontador de Direção Waypoint active=Apontador de Direção Ativo @@ -74,3 +88,11 @@ Finish editing=Edição Finalizada World position=Posição Mundial Name=Nome HUD text color=Cor de HUD + + +##### not used anymore ##### + +invisible=invisível +visible=visível +Make waypoint @1=Fazer Apontador de Direção @1 +@1 display of waypoint coordinates=@1 exibição de coordenadas de Fazer Apontador de Direção diff --git a/mods/unified_inventory/locale/unified_inventory.ru.tr b/mods/unified_inventory/locale/unified_inventory.ru.tr index f2a23007..2e3489c2 100644 --- a/mods/unified_inventory/locale/unified_inventory.ru.tr +++ b/mods/unified_inventory/locale/unified_inventory.ru.tr @@ -1,5 +1,4 @@ # textdomain: unified_inventory -Crafting=Крафт Mixing=Мешать Cooking=Варить Digging=Копать @@ -8,21 +7,32 @@ Bag @1=Сумка @1 Small Bag=Малая сумка Medium Bag=Средняя сумка Large Bag=Большая сумка +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = и +Scroll categories left= +Scroll categories right= +Search=Поиск +Reset search and display everything=Сброс поиска, показать всё First page=Первая страница Back three pages=3 страницы назад Back one page=1 страницу назад Forward one page=1 страницу вперёд Forward three pages=3 страницы вперёд Last page=Последняя страница -Search=Поиск -Reset search and display everything=Сброс поиска, показать всё No matching items=Нет подходящих элементов No matches.=Ничего не найдено Page=Страница @1 of @2=@1 из @2 Filter=Фильтр Can use the creative inventory=Можно использовать инвентарь творческого режима +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=Решетка крафта Crafting Guide=Книга рецептов Set home position=Установить позицию дома @@ -35,6 +45,7 @@ You don't have the settime privilege!=Вам не разрешено устан Set time to night=Ночь Time of day set to 9pm=Установлено время 9 вечера Clear inventory=Очистить инвентарь +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Инвентарь очищен! Trash:=Мусор: Refill:=Наполнить: @@ -50,9 +61,12 @@ Show next recipe=Следующий рецепт Show next usage=Следующее использование Show previous recipe=Прошлый рецепт Show previous usage=Прошлая страница +@1 (@2)= Give me:=Дай мне: +This recipe is too@@large to be displayed.= To craft grid:=На решeтку крафта: All=Все +Crafting=Крафт White=Белый Yellow=Желтый Red=Красный @@ -62,12 +76,10 @@ Waypoints=Путевые точки Select Waypoint #@1=Выбрать путевую точку №@1 Waypoint @1=Путевая точка @1 Set waypoint to current location=Установить путевую точку по текущей позиции -invisible=невидимой -visible=видимой -Make waypoint @1=Сделать путевую точку @1 -Disable=Выключить -Enable=Включить -@1 display of waypoint coordinates=@1 показ координат путевых точек +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Поменять цвет путевой точки Edit waypoint name=Переименовать путевую точку Waypoint active=Путевая точка включена @@ -76,3 +88,13 @@ Finish editing=Закончить редакцию World position=Позиция мира Name=Имя HUD text color=Цвет текста HUDа + + +##### not used anymore ##### + +invisible=невидимой +visible=видимой +Make waypoint @1=Сделать путевую точку @1 +Disable=Выключить +Enable=Включить +@1 display of waypoint coordinates=@1 показ координат путевых точек diff --git a/mods/unified_inventory/locale/unified_inventory.tr.tr b/mods/unified_inventory/locale/unified_inventory.tr.tr index 93246cc1..b4e15b8a 100644 --- a/mods/unified_inventory/locale/unified_inventory.tr.tr +++ b/mods/unified_inventory/locale/unified_inventory.tr.tr @@ -1,5 +1,4 @@ # textdomain: unified_inventory -Crafting=Üretim Mixing=Karıştırma Cooking=Pişirme Digging=Kazma @@ -8,20 +7,32 @@ Bag @1=@1. Çanta Small Bag=Küçük Çanta Medium Bag=Çanta Large Bag=Büyük Çanta +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = ve +Scroll categories left= +Scroll categories right= +Search=Ara +Reset search and display everything= First page=İlk Sayfa Back three pages=3 Sayfa Gerile Back one page=Geri Forward one page=İleri Forward three pages=3 Sayfa İlerile Last page=Son Sayfa -Search=Ara No matching items=Eşleşme yok No matches.=Eşleşme yok Page=Sayfa @1 of @2=@1 dan @2 Filter=Süzgeç Can use the creative inventory=Yaratıcı envanteri kullanabilir +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=Üretim tablosu Crafting Guide=Kılavuz Set home position=Set ev pozisyon @@ -33,19 +44,29 @@ Time of day set to 6am=Saat 06:00 olarak ayarlandı You don't have the settime privilege!="settime" yetkiniz yok! Set time to night=Geceye zaman ayarla Time of day set to 9pm=Saat 19:00 olarak ayarlandı -msgid ""=Yaratıcı modu dışında iken bu tuş kullanılamaz. +Clear inventory= +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= Inventory cleared!=Envanter temizlendi! Trash:=Çöp Refill:=Doldur +Any item belonging to the @1 group= +Any item belonging to the groups @1= Recipe @1 of @2=@1 dan @2 tarifi Usage @1 of @2=Kullanım @1/@2 No recipes=Tarifi yok No usages=Kullanım yok Result=Çıktı Ingredient=Bileşen +Show next recipe= +Show next usage= +Show previous recipe= +Show previous usage= +@1 (@2)= Give me:=Ver bana: +This recipe is too@@large to be displayed.= To craft grid:=Üretim tablosuna kopyala All=Tümü +Crafting=Üretim White=Beyaz Yellow=Sarı Red=Kırmızı @@ -55,10 +76,10 @@ Waypoints=Konum Noktaları Select Waypoint #@1=#@1 konum noktası seç Waypoint @1=@1 Konum Noktaları Set waypoint to current location=Bulunduğun noktayı işaretle -invisible=görünmez -visible=görünür -Make waypoint @1=Yol noktası @1 -@1 display of waypoint coordinates=Yol noktası koordinatlarının görüntülenmesini @1 +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=Konum Gösterge Rengi Edit waypoint name=Konum Noktasını Düzenle Waypoint active=Konum Etkin @@ -67,3 +88,12 @@ Finish editing=Düzenleme bitti World position=Dünya konumu Name=İsim HUD text color=Metin rengi + + +##### not used anymore ##### + +msgid ""=Yaratıcı modu dışında iken bu tuş kullanılamaz. +invisible=görünmez +visible=görünür +Make waypoint @1=Yol noktası @1 +@1 display of waypoint coordinates=Yol noktası koordinatlarının görüntülenmesini @1 diff --git a/mods/unified_inventory/locale/unified_inventory.zh_CN.tr b/mods/unified_inventory/locale/unified_inventory.zh_CN.tr index 30e15e37..595a492d 100644 --- a/mods/unified_inventory/locale/unified_inventory.zh_CN.tr +++ b/mods/unified_inventory/locale/unified_inventory.zh_CN.tr @@ -1,8 +1,4 @@ # textdomain: unified_inventory -# traslation by: IFRFSX(BingFengFSX) -#Email: IFRFSX@Protonmail.com - -Crafting=合成 Mixing=混合 Cooking=烹饪 Digging=挖出 @@ -11,20 +7,32 @@ Bag @1=背包@1 Small Bag=小背包 Medium Bag=中背包 Large Bag=大背包 +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = 和 +Scroll categories left= +Scroll categories right= +Search=搜索 +Reset search and display everything=重置搜索并显示所有物品 First page=第一页 Back three pages=后退三页 Back one page=后退一页 Forward one page=前进一页 Forward three pages=前进三页 Last page=最后一页 -Search=搜索 No matching items=没有匹配物品 No matches.=没有匹配 Page=页面 @1 of @2=第@1页,共@2页 Filter=过滤器 Can use the creative inventory=可以使用创造背包 +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=合成表 Crafting Guide=合成指南 Set home position=设置家的位置 @@ -36,21 +44,29 @@ Time of day set to 6am=时间设置到早晨6点 You don't have the settime privilege!=你没有“settime”权限! Set time to night=设置时间到晚上 Time of day set to 9pm=时间设置到晚上9点 - -Inventory cleared!=清空背包 Clear inventory=清空背包 - +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= +Inventory cleared!=清空背包 Trash:=丢弃: Refill:=填满: +Any item belonging to the @1 group=属于@1组的任何项目 +Any item belonging to the groups @1=属于组@1的任何项目 Recipe @1 of @2=第@1配方,共@2个 Usage @1 of @2=第@1用法,共@2个 No recipes=没有配方 No usages=没有用法 Result=结果 Ingredient=原料 +Show next recipe= +Show next usage= +Show previous recipe= +Show previous usage= +@1 (@2)= Give me:=给予: +This recipe is too@@large to be displayed.= To craft grid:=填充物品到合成表 All=全部 +Crafting=合成 White=白 Yellow=黄 Red=红 @@ -60,10 +76,10 @@ Waypoints=航路点 Select Waypoint #@1=查询航路点 #@1 Waypoint @1=航路点 @1 Set waypoint to current location=将航路点设置到当前位置 -invisible=不可见的 -visible=可见的 -Make waypoint @1=设置航路点 @1 -@1 display of waypoint coordinates=显示航路点@1坐标 +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=改变航路点显示的颜色 Edit waypoint name=编辑航路点名称 Waypoint active=航路点已激活 @@ -73,7 +89,10 @@ World position=世界位置 Name=名称 HUD text color=HUD文本颜色 -Reset search and display everything=重置搜索并显示所有物品 -Any item belonging to the @1 group=属于@1组的任何项目 -Any item belonging to the groups @1=属于组@1的任何项目 +##### not used anymore ##### + +invisible=不可见的 +visible=可见的 +Make waypoint @1=设置航路点 @1 +@1 display of waypoint coordinates=显示航路点@1坐标 diff --git a/mods/unified_inventory/locale/unified_inventory.zh_TW.tr b/mods/unified_inventory/locale/unified_inventory.zh_TW.tr index 3e8d1a17..f41190ce 100644 --- a/mods/unified_inventory/locale/unified_inventory.zh_TW.tr +++ b/mods/unified_inventory/locale/unified_inventory.zh_TW.tr @@ -1,8 +1,4 @@ # textdomain: unified_inventory -# traslation by: IFRFSX(BingFengFSX) -#Email: IFRFSX@Protonmail.com - -Crafting=合成 Mixing=混合 Cooking=烹飪 Digging=挖出 @@ -11,20 +7,32 @@ Bag @1=揹包@1 Small Bag=小揹包 Medium Bag=中揹包 Large Bag=大揹包 +All Items= +Misc. Items= +Plant Life= +Building Materials= +Tools= +Minerals and Metals= +Environment and Worldgen= +Lighting= and = 和 +Scroll categories left= +Scroll categories right= +Search=搜索 +Reset search and display everything=重置搜索並顯示所有物品 First page=第一頁 Back three pages=後退三頁 Back one page=後退一頁 Forward one page=前進一頁 Forward three pages=前進三頁 Last page=最後一頁 -Search=搜索 No matching items=沒有匹配物品 No matches.=沒有匹配 Page=頁面 @1 of @2=第@1頁,共@2頁 Filter=過濾器 Can use the creative inventory=可以使用創造揹包 +Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally= Crafting Grid=合成表 Crafting Guide=合成指南 Set home position=設置家的位置 @@ -36,21 +44,29 @@ Time of day set to 6am=時間設置到早晨6點 You don't have the settime privilege!=你沒有“settime”權限! Set time to night=設置時間到晚上 Time of day set to 9pm=時間設置到晚上9點 - -Inventory cleared!=清空揹包 Clear inventory=清空揹包 - +This button has been disabled outside of creative mode to prevent accidental inventory trashing.@nUse the trash slot instead.= +Inventory cleared!=清空揹包 Trash:=丟棄: Refill:=填滿: +Any item belonging to the @1 group=屬於@1組的任何項目 +Any item belonging to the groups @1=屬於組@1的任何項目 Recipe @1 of @2=第@1配方,共@2個 Usage @1 of @2=第@1用法,共@2個 No recipes=沒有配方 No usages=沒有用法 Result=結果 Ingredient=原料 +Show next recipe= +Show next usage= +Show previous recipe= +Show previous usage= +@1 (@2)= Give me:=給予: +This recipe is too@@large to be displayed.= To craft grid:=填充物品到合成表 All=全部 +Crafting=合成 White=白 Yellow=黃 Red=紅 @@ -60,10 +76,10 @@ Waypoints=航路點 Select Waypoint #@1=查詢航路點 #@1 Waypoint @1=航路點 @1 Set waypoint to current location=將航路點設置到當前位置 -invisible=不可見的 -visible=可見的 -Make waypoint @1=設置航路點 @1 -@1 display of waypoint coordinates=顯示航路點@1座標 +Hide waypoint= +Show waypoint= +Hide coordinates= +Show coordinates= Change color of waypoint display=改變航路點顯示的顏色 Edit waypoint name=編輯航路點名稱 Waypoint active=航路點已激活 @@ -73,7 +89,10 @@ World position=世界位置 Name=名稱 HUD text color=HUD文本顏色 -Reset search and display everything=重置搜索並顯示所有物品 -Any item belonging to the @1 group=屬於@1組的任何項目 -Any item belonging to the groups @1=屬於組@1的任何項目 +##### not used anymore ##### + +invisible=不可見的 +visible=可見的 +Make waypoint @1=設置航路點 @1 +@1 display of waypoint coordinates=顯示航路點@1座標 diff --git a/mods/unified_inventory/mod.conf b/mods/unified_inventory/mod.conf index bca70ca6..3d27d299 100644 --- a/mods/unified_inventory/mod.conf +++ b/mods/unified_inventory/mod.conf @@ -1,7 +1,8 @@ name = unified_inventory -depends = default -optional_depends = creative, sfinv, datastorage, farming + +optional_depends = default, creative, sfinv, datastorage, farming description = """ Unified Inventory replaces the default survival and creative inventory. It adds a nicer interface and a number of features, such as a crafting guide. """ +min_minetest_version = 5.4.0 diff --git a/mods/unified_inventory/register.lua b/mods/unified_inventory/register.lua index 017e4afd..3cb5f59e 100644 --- a/mods/unified_inventory/register.lua +++ b/mods/unified_inventory/register.lua @@ -1,6 +1,7 @@ local S = minetest.get_translator("unified_inventory") local NS = function(s) return s end local F = minetest.formspec_escape +local ui = unified_inventory minetest.register_privilege("creative", { description = S("Can use the creative inventory"), @@ -12,10 +13,9 @@ minetest.register_privilege("ui_full", { give_to_singleplayer = false, }) - local trash = minetest.create_detached_inventory("trash", { --allow_put = function(inv, listname, index, stack, player) - -- if unified_inventory.is_creative(player:get_player_name()) then + -- if ui.is_creative(player:get_player_name()) then -- return stack:get_count() -- else -- return 0 @@ -29,19 +29,19 @@ local trash = minetest.create_detached_inventory("trash", { }) trash:set_size("main", 1) -unified_inventory.register_button("craft", { +ui.register_button("craft", { type = "image", image = "ui_craft_icon.png", tooltip = S("Crafting Grid") }) -unified_inventory.register_button("craftguide", { +ui.register_button("craftguide", { type = "image", image = "ui_craftguide_icon.png", tooltip = S("Crafting Guide") }) -unified_inventory.register_button("home_gui_set", { +ui.register_button("home_gui_set", { type = "image", image = "ui_sethome_icon.png", tooltip = S("Set home position"), @@ -49,8 +49,8 @@ unified_inventory.register_button("home_gui_set", { action = function(player) local player_name = player:get_player_name() if minetest.check_player_privs(player_name, {home=true}) then - unified_inventory.set_home(player, player:get_pos()) - local home = unified_inventory.home_pos[player_name] + ui.set_home(player, player:get_pos()) + local home = ui.home_pos[player_name] if home ~= nil then minetest.sound_play("dingdong", {to_player=player_name, gain = 1.0}) @@ -60,7 +60,7 @@ unified_inventory.register_button("home_gui_set", { else minetest.chat_send_player(player_name, S("You don't have the \"home\" privilege!")) - unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + ui.set_inventory_formspec(player, ui.current_page[player_name]) end end, condition = function(player) @@ -68,7 +68,7 @@ unified_inventory.register_button("home_gui_set", { end, }) -unified_inventory.register_button("home_gui_go", { +ui.register_button("home_gui_go", { type = "image", image = "ui_gohome_icon.png", tooltip = S("Go home"), @@ -76,13 +76,13 @@ unified_inventory.register_button("home_gui_go", { action = function(player) local player_name = player:get_player_name() if minetest.check_player_privs(player_name, {home=true}) then - if unified_inventory.go_home(player) then + if ui.go_home(player) then minetest.sound_play("teleport", {to_player = player_name}) end else minetest.chat_send_player(player_name, S("You don't have the \"home\" privilege!")) - unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + ui.set_inventory_formspec(player, ui.current_page[player_name]) end end, condition = function(player) @@ -90,7 +90,7 @@ unified_inventory.register_button("home_gui_go", { end, }) -unified_inventory.register_button("misc_set_day", { +ui.register_button("misc_set_day", { type = "image", image = "ui_sun_icon.png", tooltip = S("Set time to day"), @@ -106,7 +106,7 @@ unified_inventory.register_button("misc_set_day", { else minetest.chat_send_player(player_name, S("You don't have the settime privilege!")) - unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + ui.set_inventory_formspec(player, ui.current_page[player_name]) end end, condition = function(player) @@ -114,7 +114,7 @@ unified_inventory.register_button("misc_set_day", { end, }) -unified_inventory.register_button("misc_set_night", { +ui.register_button("misc_set_night", { type = "image", image = "ui_moon_icon.png", tooltip = S("Set time to night"), @@ -130,7 +130,7 @@ unified_inventory.register_button("misc_set_night", { else minetest.chat_send_player(player_name, S("You don't have the settime privilege!")) - unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + ui.set_inventory_formspec(player, ui.current_page[player_name]) end end, condition = function(player) @@ -138,19 +138,19 @@ unified_inventory.register_button("misc_set_night", { end, }) -unified_inventory.register_button("clear_inv", { +ui.register_button("clear_inv", { type = "image", image = "ui_trash_icon.png", tooltip = S("Clear inventory"), action = function(player) local player_name = player:get_player_name() - if not unified_inventory.is_creative(player_name) then + if not ui.is_creative(player_name) then minetest.chat_send_player(player_name, S("This button has been disabled outside" .." of creative mode to prevent" .." accidental inventory trashing." .."\nUse the trash slot instead.")) - unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + ui.set_inventory_formspec(player, ui.current_page[player_name]) return end player:get_inventory():set_list("main", {}) @@ -159,35 +159,42 @@ unified_inventory.register_button("clear_inv", { {to_player=player_name, gain = 1.0}) end, condition = function(player) - return unified_inventory.is_creative(player:get_player_name()) + return ui.is_creative(player:get_player_name()) end, }) -unified_inventory.register_page("craft", { +ui.register_page("craft", { get_formspec = function(player, perplayer_formspec) - local formspecy = perplayer_formspec.formspec_y - local formheadery = perplayer_formspec.form_header_y + local formheaderx = perplayer_formspec.form_header_x + local formheadery = perplayer_formspec.form_header_y + local craftx = perplayer_formspec.craft_x + local crafty = perplayer_formspec.craft_y local player_name = player:get_player_name() - local formspec = "background[2,"..formspecy..";6,3;ui_crafting_form.png]" - formspec = formspec.."background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]" - formspec = formspec.."label[0,"..formheadery..";" ..F(S("Crafting")).."]" - formspec = formspec.."listcolors[#00000000;#00000000]" - formspec = formspec.."list[current_player;craftpreview;6,"..formspecy..";1,1;]" - formspec = formspec.."list[current_player;craft;2,"..formspecy..";3,3;]" - if unified_inventory.trash_enabled or unified_inventory.is_creative(player_name) or minetest.get_player_privs(player_name).give then - formspec = formspec.."label[7,"..(formspecy + 1.5)..";" .. F(S("Trash:")) .. "]" - formspec = formspec.."background[7,"..(formspecy + 2)..";1,1;ui_single_slot.png]" - formspec = formspec.."list[detached:trash;main;7,"..(formspecy + 2)..";1,1;]" + local formspec = { + perplayer_formspec.standard_inv_bg, + perplayer_formspec.craft_grid, + "label["..formheaderx..","..formheadery..";" ..F(S("Crafting")).."]", + "listcolors[#00000000;#00000000]", + "listring[current_name;craft]", + "listring[current_player;main]" + } + local n=#formspec+1 + + if ui.trash_enabled or ui.is_creative(player_name) or minetest.get_player_privs(player_name).give then + formspec[n] = string.format("label[%f,%f;%s]", craftx + 6.45, crafty + 2.4, F(S("Trash:"))) + formspec[n+1] = ui.make_trash_slot(craftx + 6.25, crafty + 2.5) + n=n + 2 end - formspec = formspec.."listring[current_name;craft]" - formspec = formspec.."listring[current_player;main]" - if unified_inventory.is_creative(player_name) then - formspec = formspec.."label[0,"..(formspecy + 1.5)..";" .. F(S("Refill:")) .. "]" - formspec = formspec.."list[detached:"..F(player_name).."refill;main;0,"..(formspecy +2)..";1,1;]" + + if ui.is_creative(player_name) then + formspec[n] = ui.single_slot(craftx - 2.5, crafty + 2.5) + formspec[n+1] = string.format("label[%f,%f;%s]", craftx - 2.3, crafty + 2.4,F(S("Refill:"))) + formspec[n+2] = string.format("list[detached:%srefill;main;%f,%f;1,1;]", + F(player_name), craftx - 2.5 + ui.list_img_offset, crafty + 2.5 + ui.list_img_offset) end - return {formspec=formspec} + return {formspec=table.concat(formspec)} end, }) @@ -206,18 +213,18 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) local selectitem = name if name:sub(1, 6) == "group:" then local group_name = name:sub(7) - local group_item = unified_inventory.get_group_item(group_name) + local group_item = ui.get_group_item(group_name) show_is_group = not group_item.sole displayitem = group_item.item or "unknown" selectitem = group_item.sole and displayitem or name end local label = show_is_group and "G" or "" - local buttonname = F(buttonname_prefix..unified_inventory.mangle_for_formspec(selectitem)) + local buttonname = F(buttonname_prefix..ui.mangle_for_formspec(selectitem)) local button = string.format("item_image_button[%f,%f;%f,%f;%s;%s;%s]", x, y, w, h, F(displayitem), buttonname, label) if show_is_group then - local groupstring, andcount = unified_inventory.extract_groupnames(name) + local groupstring, andcount = ui.extract_groupnames(name) local grouptip if andcount == 1 then grouptip = S("Any item belonging to the @1 group", groupstring) @@ -257,26 +264,33 @@ local other_dir = { usage = "recipe", } -unified_inventory.register_page("craftguide", { +ui.register_page("craftguide", { get_formspec = function(player, perplayer_formspec) - local formspecy = perplayer_formspec.formspec_y - local formheadery = perplayer_formspec.form_header_y - local craftresultx = perplayer_formspec.craft_result_x - local craftresulty = perplayer_formspec.craft_result_y + local craftguidex = perplayer_formspec.craft_guide_x + local craftguidey = perplayer_formspec.craft_guide_y + local craftguidearrowx = perplayer_formspec.craft_guide_arrow_x + local craftguideresultx = perplayer_formspec.craft_guide_result_x + local formheaderx = perplayer_formspec.form_header_x + local formheadery = perplayer_formspec.form_header_y + local give_x = perplayer_formspec.give_btn_x local player_name = player:get_player_name() local player_privs = minetest.get_player_privs(player_name) - local fs = { - "background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]", - "label[0,"..formheadery..";" .. F(S("Crafting Guide")) .. "]", + + local formspec = { + perplayer_formspec.standard_inv_bg, + "label["..formheaderx..","..formheadery..";" .. F(S("Crafting Guide")) .. "]", "listcolors[#00000000;#00000000]" } - local item_name = unified_inventory.current_item[player_name] + + local item_name = ui.current_item[player_name] if not item_name then - return { formspec = table.concat(fs) } + return { formspec = table.concat(formspec) } end + local n = 4 + local item_name_shown if minetest.registered_items[item_name] and minetest.registered_items[item_name].description then @@ -286,51 +300,60 @@ unified_inventory.register_page("craftguide", { item_name_shown = item_name end - local dir = unified_inventory.current_craft_direction[player_name] + local dir = ui.current_craft_direction[player_name] local rdir = dir == "recipe" and "usage" or "recipe" - local crafts = unified_inventory.crafts_for[dir][item_name] - local alternate = unified_inventory.alternate[player_name] + local crafts = ui.crafts_for[dir][item_name] + local alternate = ui.alternate[player_name] local alternates, craft if crafts and #crafts > 0 then alternates = #crafts craft = crafts[alternate] end - local has_give = player_privs.give or unified_inventory.is_creative(player_name) + local has_give = player_privs.give or ui.is_creative(player_name) - fs[#fs + 1] = "background[0.5,"..(formspecy + 0.2)..";8,3;ui_craftguide_form.png]" - fs[#fs + 1] = string.format("textarea[%f,%f;10,1;;%s: %s;]", - craftresultx, craftresulty, F(role_text[dir]), item_name_shown) - fs[#fs + 1] = stack_image_button(0, formspecy, 1.1, 1.1, - "item_button_" .. rdir .. "_", ItemStack(item_name)) + formspec[n] = string.format("image[%f,%f;%f,%f;ui_crafting_arrow.png]", + craftguidearrowx, craftguidey, ui.imgscale, ui.imgscale) + + formspec[n+1] = string.format("textarea[%f,%f;10,1;;%s: %s;]", + perplayer_formspec.craft_guide_resultstr_x, perplayer_formspec.craft_guide_resultstr_y, + F(role_text[dir]), item_name_shown) + n = n + 2 + + local giveme_form = table.concat({ + "label[".. (give_x+0.1)..",".. (craftguidey + 2.7) .. ";" .. F(S("Give me:")) .. "]", + "button["..(give_x)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_1;1]", + "button["..(give_x+0.8)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_10;10]", + "button["..(give_x+1.6)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_99;99]" + }) if not craft then -- No craft recipes available for this item. - fs[#fs + 1] = "label[5.5,"..(formspecy + 2.35)..";" - .. F(no_recipe_text[dir]) .. "]" - local no_pos = dir == "recipe" and 4.5 or 6.5 - local item_pos = dir == "recipe" and 6.5 or 4.5 - fs[#fs + 1] = "image["..no_pos..","..formspecy..";1.1,1.1;ui_no.png]" - fs[#fs + 1] = stack_image_button(item_pos, formspecy, 1.1, 1.1, + formspec[n] = string.format("label[%f,%f;%s]", craftguidex+2.5, craftguidey+1.5, F(no_recipe_text[dir])) + local no_pos = dir == "recipe" and (craftguidex+2.5) or craftguideresultx + local item_pos = dir == "recipe" and craftguideresultx or (craftguidex+2.5) + formspec[n+1] = "image["..no_pos..","..craftguidey..";1.2,1.2;ui_no.png]" + formspec[n+2] = stack_image_button(item_pos, craftguidey, 1.2, 1.2, "item_button_" .. other_dir[dir] .. "_", ItemStack(item_name)) if has_give then - fs[#fs + 1] = "label[0," .. (formspecy + 2.10) .. ";" .. F(S("Give me:")) .. "]" - .. "button[0, " .. (formspecy + 2.7) .. ";0.6,0.5;craftguide_giveme_1;1]" - .. "button[0.6," .. (formspecy + 2.7) .. ";0.7,0.5;craftguide_giveme_10;10]" - .. "button[1.3," .. (formspecy + 2.7) .. ";0.8,0.5;craftguide_giveme_99;99]" + formspec[n+3] = giveme_form end - return { formspec = table.concat(fs) } + return { formspec = table.concat(formspec) } + else + formspec[n] = stack_image_button(craftguideresultx, craftguidey, 1.2, 1.2, + "item_button_" .. rdir .. "_", ItemStack(craft.output)) + n = n + 1 end - local craft_type = unified_inventory.registered_craft_types[craft.type] or - unified_inventory.craft_type_defaults(craft.type, {}) + local craft_type = ui.registered_craft_types[craft.type] or + ui.craft_type_defaults(craft.type, {}) if craft_type.icon then - fs[#fs + 1] = string.format("image[%f,%f;%f,%f;%s]", - 5.7, (formspecy + 0.05), 0.5, 0.5, craft_type.icon) + formspec[n] = string.format("image[%f,%f;%f,%f;%s]", + craftguidearrowx+0.35, craftguidey, 0.5, 0.5, craft_type.icon) + n = n + 1 end - fs[#fs + 1] = "label[5.5,"..(formspecy + 1)..";" .. F(craft_type.description).."]" - fs[#fs + 1] = stack_image_button(6.5, formspecy, 1.1, 1.1, - "item_button_usage_", ItemStack(craft.output)) + formspec[n] = string.format("label[%f,%f;%s]", craftguidearrowx + 0.15, craftguidey + 1.4, F(craft_type.description)) + n = n + 1 local display_size = craft_type.dynamic_display_size and craft_type.dynamic_display_size(craft) @@ -341,11 +364,12 @@ unified_inventory.register_page("craftguide", { -- This keeps recipes aligned to the right, -- so that they're close to the arrow. - local xoffset = 5.5 + local xoffset = craftguidex+3.75 + local bspc = 1.25 -- Offset factor for crafting grids with side length > 4 local of = (3/math.max(3, math.max(display_size.width, display_size.height))) local od = 0 - -- Minimum grid size at which size optimazation measures kick in + -- Minimum grid size at which size optimization measures kick in local mini_craft_size = 6 if display_size.width >= mini_craft_size then od = math.max(1, display_size.width - 2) @@ -354,12 +378,12 @@ unified_inventory.register_page("craftguide", { -- Size modifier factor local sf = math.min(1, of * (1.05 + 0.05*od)) -- Button size - local bsize_h = 1.1 * sf - local bsize_w = bsize_h - if display_size.width >= mini_craft_size then - bsize_w = 1.175 * sf + local bsize = 1.2 * sf + + if display_size.width >= mini_craft_size then -- it's not a normal 3x3 grid + bsize = 0.8 * sf end - if (bsize_h > 0.35 and display_size.width) then + if (bsize > 0.35 and display_size.width) then for y = 1, display_size.height do for x = 1, display_size.width do local item @@ -369,48 +393,53 @@ unified_inventory.register_page("craftguide", { -- Flipped x, used to build formspec buttons from right to left local fx = display_size.width - (x-1) -- x offset, y offset - local xof = (fx-1) * of + of - local yof = (y-1) * of + 1 + local xof = ((fx-1) * of + of) * bspc + local yof = ((y-1) * of + 1) * bspc if item then - fs[#fs + 1] = stack_image_button( - xoffset - xof, formspecy - 1 + yof, bsize_w, bsize_h, + formspec[n] = stack_image_button( + xoffset - xof, craftguidey - 1.25 + yof, bsize, bsize, "item_button_recipe_", ItemStack(item)) else -- Fake buttons just to make grid - fs[#fs + 1] = string.format("image_button[%f,%f;%f,%f;ui_blank_image.png;;]", - xoffset - xof, formspecy - 1 + yof, bsize_w, bsize_h) + formspec[n] = string.format("image_button[%f,%f;%f,%f;ui_blank_image.png;;]", + xoffset - xof, craftguidey - 1.25 + yof, bsize, bsize) end + n = n + 1 end end else -- Error - fs[#fs + 1] = string.format("label[2,%f;%s]", - formspecy, F(S("This recipe is too@nlarge to be displayed."))) + formspec[n] = string.format("label[2,%f;%s]", + craftguidey, F(S("This recipe is too@nlarge to be displayed."))) + n = n + 1 end if craft_type.uses_crafting_grid and display_size.width <= 3 then - fs[#fs + 1] = "label[0," .. (formspecy + 0.9) .. ";" .. F(S("To craft grid:")) .. "]" - .. "button[0, " .. (formspecy + 1.5) .. ";0.6,0.5;craftguide_craft_1;1]" - .. "button[0.6," .. (formspecy + 1.5) .. ";0.7,0.5;craftguide_craft_10;10]" - .. "button[1.3," .. (formspecy + 1.5) .. ";0.8,0.5;craftguide_craft_max;" .. F(S("All")) .. "]" + formspec[n] = "label["..(give_x+0.1)..",".. (craftguidey + 1.7) .. ";" .. F(S("To craft grid:")) .. "]" + formspec[n+1] = "button[".. (give_x)..",".. (craftguidey + 1.9) .. ";0.75,0.5;craftguide_craft_1;1]" + formspec[n+2] = "button[".. (give_x+0.8)..",".. (craftguidey + 1.9) .. ";0.75,0.5;craftguide_craft_10;10]" + formspec[n+3] = "button[".. (give_x+1.6)..",".. (craftguidey + 1.9) .. ";0.75,0.5;craftguide_craft_max;" .. F(S("All")) .. "]" + n = n + 4 end + if has_give then - fs[#fs + 1] = "label[0," .. (formspecy + 2.1) .. ";" .. F(S("Give me:")) .. "]" - .. "button[0, " .. (formspecy + 2.7) .. ";0.6,0.5;craftguide_giveme_1;1]" - .. "button[0.6," .. (formspecy + 2.7) .. ";0.7,0.5;craftguide_giveme_10;10]" - .. "button[1.3," .. (formspecy + 2.7) .. ";0.8,0.5;craftguide_giveme_99;99]" + formspec[n] = giveme_form + n = n + 1 end if alternates and alternates > 1 then - fs[#fs + 1] = "label[5.5," .. (formspecy + 1.6) .. ";" - .. F(S(recipe_text[dir], alternate, alternates)) .. "]" - .. "image_button[5.5," .. (formspecy + 2) .. ";1,1;ui_left_icon.png;alternate_prev;]" - .. "image_button[6.5," .. (formspecy + 2) .. ";1,1;ui_right_icon.png;alternate;]" - .. "tooltip[alternate_prev;" .. F(prev_alt_text[dir]) .. "]" - .. "tooltip[alternate;" .. F(next_alt_text[dir]) .. "]" + formspec[n] = string.format("label[%f,%f;%s]", + craftguidex+4, craftguidey + 2.3, F(S(recipe_text[dir], alternate, alternates))) + formspec[n+1] = string.format("image_button[%f,%f;1.1,1.1;ui_left_icon.png;alternate_prev;]", + craftguidearrowx+0.2, craftguidey + 2.6) + formspec[n+2] = string.format("image_button[%f,%f;1.1,1.1;ui_right_icon.png;alternate;]", + craftguidearrowx+1.35, craftguidey + 2.6) + formspec[n+3] = "tooltip[alternate_prev;" .. F(prev_alt_text[dir]) .. "]" + formspec[n+4] = "tooltip[alternate;" .. F(next_alt_text[dir]) .. "]" end - return { formspec = table.concat(fs) } + + return { formspec = table.concat(formspec) } end, }) @@ -418,7 +447,7 @@ local function craftguide_giveme(player, formname, fields) local player_name = player:get_player_name() local player_privs = minetest.get_player_privs(player_name) if not player_privs.give and - not unified_inventory.is_creative(player_name) then + not ui.is_creative(player_name) then minetest.log("action", "[unified_inventory] Denied give action to player " .. player_name) return @@ -433,7 +462,7 @@ local function craftguide_giveme(player, formname, fields) amount = tonumber(amount) or 0 if amount == 0 then return end - local output = unified_inventory.current_item[player_name] + local output = ui.current_item[player_name] if (not output) or (output == "") then return end local player_inv = player:get_inventory() @@ -454,21 +483,21 @@ local function craftguide_craft(player, formname, fields) local player_name = player:get_player_name() - local output = unified_inventory.current_item[player_name] or "" + local output = ui.current_item[player_name] or "" if output == "" then return end - local crafts = unified_inventory.crafts_for[ - unified_inventory.current_craft_direction[player_name]][output] or {} + local crafts = ui.crafts_for[ + ui.current_craft_direction[player_name]][output] or {} if #crafts == 0 then return end - local alternate = unified_inventory.alternate[player_name] + local alternate = ui.alternate[player_name] local craft = crafts[alternate] if craft.width > 3 then return end - unified_inventory.craftguide_match_craft(player, "main", "craft", craft, amount) + ui.craftguide_match_craft(player, "main", "craft", craft, amount) - unified_inventory.set_inventory_formspec(player, "craft") + ui.set_inventory_formspec(player, "craft") end minetest.register_on_player_receive_fields(function(player, formname, fields) diff --git a/mods/unified_inventory/settingtypes.txt b/mods/unified_inventory/settingtypes.txt index 910989fd..27768ac2 100644 --- a/mods/unified_inventory/settingtypes.txt +++ b/mods/unified_inventory/settingtypes.txt @@ -9,3 +9,6 @@ unified_inventory_bags (Enable bags) bool true #If enabled, the trash slot can be used by those without both creative #and the give privilege. unified_inventory_trash (Enable trash) bool true + + +unified_inventory_automatic_categorization (Items automatically added to categories) bool true \ No newline at end of file diff --git a/mods/unified_inventory/textures/ui_bags_lg_form.png b/mods/unified_inventory/textures/ui_bags_lg_form.png deleted file mode 100644 index 24dab308..00000000 Binary files a/mods/unified_inventory/textures/ui_bags_lg_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_bags_main_form.png b/mods/unified_inventory/textures/ui_bags_main_form.png deleted file mode 100644 index 8c168d29..00000000 Binary files a/mods/unified_inventory/textures/ui_bags_main_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_bags_med_form.png b/mods/unified_inventory/textures/ui_bags_med_form.png deleted file mode 100644 index 27a1591c..00000000 Binary files a/mods/unified_inventory/textures/ui_bags_med_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_bags_sm_form.png b/mods/unified_inventory/textures/ui_bags_sm_form.png deleted file mode 100644 index 6234eb88..00000000 Binary files a/mods/unified_inventory/textures/ui_bags_sm_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_bags_trash.png b/mods/unified_inventory/textures/ui_bags_trash.png deleted file mode 100644 index 0bc11c56..00000000 Binary files a/mods/unified_inventory/textures/ui_bags_trash.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_category_all.png b/mods/unified_inventory/textures/ui_category_all.png new file mode 100644 index 00000000..0af7a537 Binary files /dev/null and b/mods/unified_inventory/textures/ui_category_all.png differ diff --git a/mods/unified_inventory/textures/ui_category_none.png b/mods/unified_inventory/textures/ui_category_none.png new file mode 100644 index 00000000..8976fb0e Binary files /dev/null and b/mods/unified_inventory/textures/ui_category_none.png differ diff --git a/mods/unified_inventory/textures/ui_craftguide_form.png b/mods/unified_inventory/textures/ui_craftguide_form.png deleted file mode 100644 index d9be53f7..00000000 Binary files a/mods/unified_inventory/textures/ui_craftguide_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_crafting_arrow.png b/mods/unified_inventory/textures/ui_crafting_arrow.png new file mode 100644 index 00000000..6901c588 Binary files /dev/null and b/mods/unified_inventory/textures/ui_crafting_arrow.png differ diff --git a/mods/unified_inventory/textures/ui_crafting_form.png b/mods/unified_inventory/textures/ui_crafting_form.png deleted file mode 100644 index 90432879..00000000 Binary files a/mods/unified_inventory/textures/ui_crafting_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_form_bg.png b/mods/unified_inventory/textures/ui_form_bg.png deleted file mode 100644 index d973b34a..00000000 Binary files a/mods/unified_inventory/textures/ui_form_bg.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_formbg_9_sliced.png b/mods/unified_inventory/textures/ui_formbg_9_sliced.png new file mode 100644 index 00000000..0b8463ca Binary files /dev/null and b/mods/unified_inventory/textures/ui_formbg_9_sliced.png differ diff --git a/mods/unified_inventory/textures/ui_main_inventory.png b/mods/unified_inventory/textures/ui_main_inventory.png deleted file mode 100644 index b7860cad..00000000 Binary files a/mods/unified_inventory/textures/ui_main_inventory.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_misc_form.png b/mods/unified_inventory/textures/ui_misc_form.png deleted file mode 100644 index 2d6ad018..00000000 Binary files a/mods/unified_inventory/textures/ui_misc_form.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_single_slot.png b/mods/unified_inventory/textures/ui_single_slot.png index 63da98d9..2451623c 100644 Binary files a/mods/unified_inventory/textures/ui_single_slot.png and b/mods/unified_inventory/textures/ui_single_slot.png differ diff --git a/mods/unified_inventory/textures/ui_single_slot_bright.png b/mods/unified_inventory/textures/ui_single_slot_bright.png new file mode 100644 index 00000000..c66365c9 Binary files /dev/null and b/mods/unified_inventory/textures/ui_single_slot_bright.png differ diff --git a/mods/unified_inventory/textures/ui_smallbg_9_sliced.png b/mods/unified_inventory/textures/ui_smallbg_9_sliced.png new file mode 100644 index 00000000..865e0c96 Binary files /dev/null and b/mods/unified_inventory/textures/ui_smallbg_9_sliced.png differ diff --git a/mods/unified_inventory/textures/ui_trash_slot_icon.png b/mods/unified_inventory/textures/ui_trash_slot_icon.png new file mode 100644 index 00000000..5fc4de1d Binary files /dev/null and b/mods/unified_inventory/textures/ui_trash_slot_icon.png differ diff --git a/mods/unified_inventory/textures/ui_xyz_off_icon.png b/mods/unified_inventory/textures/ui_xyz_off_icon.png deleted file mode 100644 index 3c1836eb..00000000 Binary files a/mods/unified_inventory/textures/ui_xyz_off_icon.png and /dev/null differ diff --git a/mods/unified_inventory/textures/ui_xyz_on_icon.png b/mods/unified_inventory/textures/ui_xyz_on_icon.png deleted file mode 100644 index 003ea633..00000000 Binary files a/mods/unified_inventory/textures/ui_xyz_on_icon.png and /dev/null differ diff --git a/mods/unified_inventory/waypoints.lua b/mods/unified_inventory/waypoints.lua index e23ef4b2..08fce388 100644 --- a/mods/unified_inventory/waypoints.lua +++ b/mods/unified_inventory/waypoints.lua @@ -1,5 +1,7 @@ local S = minetest.get_translator("unified_inventory") local F = minetest.formspec_escape +local ui = unified_inventory +local COUNT = 5 local hud_colors = { {"#FFFFFF", 0xFFFFFF, S("White")}, @@ -9,107 +11,199 @@ local hud_colors = { {"#2c4df1", 0x2c4df1, S("Blue")}, } -local hud_colors_max = #hud_colors +-- Storage compatibility code --- Stores temporary player data (persists until player leaves) +--[[ +Stores temporary player data (persists until player leaves) + [player_name] = { + [] = { + edit = , + hud = , + }, + [] = { ... }, + ... + } +]] local waypoints_temp = {} -unified_inventory.register_page("waypoints", { +--[[ +Datastorage format (per-player): + { + selected = , + [] = { + name = + world_pos = , + color = <"hud_colors" index>, + active = , + display_pos = , + }, + [] = { ... }, + ... + } +Player metadata format: + { + selected = , + -- Cannot mix integer/string keys in JSON + data = { + [] = { same as above }, + ... + } + } +]] + +local function set_waypoint_data(player, waypoints) + local meta = player:get_meta() + if not next(waypoints.data or {}) then + -- Empty data. Do not save anything, or delete + meta:set_string("ui_waypoints", "") + else + meta:set_string("ui_waypoints", minetest.write_json(waypoints)) + end +end + +local function migrate_datastorage(player, waypoints) + -- Copy values from old table + local new_data = { + selected = waypoints.selected, + data = {} + } + for i = 1, COUNT do + new_data.data[i] = waypoints[i] + end + + set_waypoint_data(player, new_data) + + -- Delete values, but keep one entry so that it's saved by datastorage + for k, _ in pairs(waypoints) do + waypoints[k] = nil + end + waypoints[1] = 1 +end + +local have_datastorage = minetest.get_modpath("datastorage") ~= nil +local function get_waypoint_data(player) + local player_name = player:get_player_name() + + -- Migration step + if have_datastorage then + local waypoints = datastorage.get(player_name, "waypoints") + if waypoints.selected then + migrate_datastorage(player, waypoints) + minetest.log("action", "[unified_inventory] " .. + "Migrated waypoints of player: " .. player_name) + end + end + + -- Get directly from metadata + local waypoints = player:get_meta():get("ui_waypoints") + waypoints = waypoints and minetest.parse_json(waypoints) or {} + waypoints.data = waypoints.data or {} + + return waypoints +end + +ui.register_page("waypoints", { get_formspec = function(player) local player_name = player:get_player_name() + local wp_info_x = ui.style_full.form_header_x + 1.25 + local wp_info_y = ui.style_full.form_header_y + 0.5 + local wp_bottom_row = ui.style_full.std_inv_y - 1 + local wp_buttons_rj = ui.style_full.std_inv_x + 10.1 - ui.style_full.btn_spc + local wp_edit_w = ui.style_full.btn_spc * 4 - 0.1 - -- build a "fake" temp entry if the server took too long - -- during sign-on and returned an empty entry - if not waypoints_temp[player_name] then waypoints_temp[player_name] = {hud = 1} end + local waypoints = get_waypoint_data(player) + local sel = waypoints.selected or 1 - local waypoints = datastorage.get(player_name, "waypoints") - local formspec = "background[0,4.5;8,4;ui_main_inventory.png]" .. - "image[0,0;1,1;ui_waypoints_icon.png]" .. - "label[1,0;" .. F(S("Waypoints")) .. "]" + local formspec = { + ui.style_full.standard_inv_bg, + string.format("label[%f,%f;%s]", + ui.style_full.form_header_x, ui.style_full.form_header_y, F(S("Waypoints"))), + "image["..wp_info_x..","..wp_info_y..";1,1;ui_waypoints_icon.png]" + } + local n=4 -- Tabs buttons: - for i = 1, 5, 1 do - formspec = formspec .. - "image_button[0.0," .. 0.2 + i * 0.7 .. ";.8,.8;" .. - (i == waypoints.selected and "ui_blue_icon_background.png^" or "") .. - "ui_" .. i .. "_icon.png;" .. - "select_waypoint" .. i .. ";]" .. - "tooltip[select_waypoint" .. i .. ";" - .. S("Select Waypoint #@1", i).."]" + for i = 1, COUNT do + local sw="select_waypoint"..i + formspec[n] = string.format("image_button[%f,%f;%f,%f;%sui_%i_icon.png;%s;]", + ui.style_full.main_button_x, wp_bottom_row - (5-i) * ui.style_full.btn_spc, + ui.style_full.btn_size, ui.style_full.btn_size, + (i == sel) and "ui_blue_icon_background.png^" or "", + i, sw) + formspec[n+1] = "tooltip["..sw..";"..S("Select Waypoint #@1", i).."]" + n = n + 2 end - local i = waypoints.selected or 1 - local waypoint = waypoints[i] or {} - local temp = waypoints_temp[player_name][i] or {} - local default_name = S("Waypoint @1", i) + local waypoint = waypoints.data[sel] or {} + local temp = waypoints_temp[player_name][sel] or {} + local default_name = S("Waypoint @1", sel) -- Main buttons: - formspec = formspec .. - "image_button[4.5,3.7;.8,.8;".. - "ui_waypoint_set_icon.png;".. - "set_waypoint"..i..";]".. - "tooltip[set_waypoint" .. i .. ";" - .. F(S("Set waypoint to current location")).."]" + local btnlist = { + set_waypoint = { + "ui_waypoint_set_icon.png", + S("Set waypoint to current location") + }, + toggle_waypoint = { + waypoint.active and "ui_on_icon.png" or "ui_off_icon.png", + waypoint.active and S("Hide waypoint") or S("Show waypoint") + }, + toggle_display_pos = { + waypoint.display_pos and "ui_green_icon_background.png^ui_xyz_icon.png" or "ui_red_icon_background.png^ui_xyz_icon.png^(ui_no.png^[transformR90)", + waypoint.display_pos and S("Hide coordinates") or S("Show coordinates") + }, + toggle_color = { + "ui_circular_arrows_icon.png", + S("Change color of waypoint display") + }, + rename_waypoint = { + "ui_pencil_icon.png", + S("Edit waypoint name") + } + } - formspec = formspec .. - "image_button[5.2,3.7;.8,.8;".. - (waypoint.active and "ui_on_icon.png" or "ui_off_icon.png")..";".. - "toggle_waypoint"..i..";]".. - "tooltip[toggle_waypoint" .. i .. ";" - .. F(S("Make waypoint @1", - waypoint.active and S("invisible") or S("visible"))).."]" - - formspec = formspec .. - "image_button[5.9,3.7;.8,.8;".. - (waypoint.display_pos and "ui_green_icon_background.png" or "ui_red_icon_background.png").."^ui_xyz_icon.png;".. - "toggle_display_pos" .. i .. ";]".. - "tooltip[toggle_display_pos" .. i .. ";" - .. F(S("@1 display of waypoint coordinates", - waypoint.display_pos and S("Disable") or S("Enable"))) .."]" - - formspec = formspec .. - "image_button[6.6,3.7;.8,.8;".. - "ui_circular_arrows_icon.png;".. - "toggle_color"..i..";]".. - "tooltip[toggle_color" .. i .. ";" - .. F(S("Change color of waypoint display")).."]" - - formspec = formspec .. - "image_button[7.3,3.7;.8,.8;".. - "ui_pencil_icon.png;".. - "rename_waypoint"..i..";]".. - "tooltip[rename_waypoint" .. i .. ";" - .. F(S("Edit waypoint name")).."]" + local x = 4 + for name, def in pairs(btnlist) do + formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s%i;]", + wp_buttons_rj - ui.style_full.btn_spc * x, wp_bottom_row, + ui.style_full.btn_size, ui.style_full.btn_size, + def[1], name, sel) + formspec[n+1] = "tooltip["..name..sel..";"..F(def[2]).."]" + x = x - 1 + n = n + 2 + end -- Waypoint's info: - if waypoint.active then - formspec = formspec .. "label[1,0.8;"..F(S("Waypoint active")).."]" - else - formspec = formspec .. "label[1,0.8;"..F(S("Waypoint inactive")).."]" - end + formspec[n] = ("label[%f,%f;%s]"):format( + wp_info_x, wp_info_y + 1.1, + F(waypoint.active and S("Waypoint active") or S("Waypoint inactive")) + ) + n = n + 1 if temp.edit then - formspec = formspec .. - "field[1.3,3.2;6,.8;rename_box" .. i .. ";;" - ..(waypoint.name or default_name).."]" .. - "image_button[7.3,2.9;.8,.8;".. - "ui_ok_icon.png;".. - "confirm_rename"..i.. ";]".. - "tooltip[confirm_rename" .. i .. ";" - .. F(S("Finish editing")).."]" + formspec[n] = string.format("field[%f,%f;%f,%f;rename_box%i;;%s]", + wp_buttons_rj - wp_edit_w - 0.1, wp_bottom_row - ui.style_full.btn_spc, + wp_edit_w, ui.style_full.btn_size, sel, (waypoint.name or default_name)) + formspec[n+1] = string.format("image_button[%f,%f;%f,%f;ui_ok_icon.png;confirm_rename%i;]", + wp_buttons_rj, wp_bottom_row - ui.style_full.btn_spc, + ui.style_full.btn_size, ui.style_full.btn_size, sel) + formspec[n+2] = "tooltip[confirm_rename"..sel..";"..F(S("Finish editing")).."]" + n = n + 3 end - formspec = formspec .. "label[1,1.3;"..F(S("World position"))..": " .. - minetest.pos_to_string(waypoint.world_pos or vector.new()) .. "]" .. - "label[1,1.8;"..F(S("Name"))..": ".. (waypoint.name or default_name) .. "]" .. - "label[1,2.3;"..F(S("HUD text color"))..": " .. - hud_colors[waypoint.color or 1][3] .. "]" + formspec[n] = string.format("label[%f,%f;%s: %s]", + wp_info_x, wp_info_y+1.6, F(S("World position")), + minetest.pos_to_string(waypoint.world_pos or vector.new())) + formspec[n+1] = string.format("label[%f,%f;%s: %s]", + wp_info_x, wp_info_y+2.10, F(S("Name")), (waypoint.name or default_name)) + formspec[n+2] = string.format("label[%f,%f;%s: %s]", + wp_info_x, wp_info_y+2.60, F(S("HUD text color")), hud_colors[waypoint.color or 1][3]) - return {formspec=formspec} + return {formspec=table.concat(formspec)} end, }) -unified_inventory.register_button("waypoints", { +ui.register_button("waypoints", { type = "image", image = "ui_waypoints_icon.png", tooltip = S("Waypoints"), @@ -117,10 +211,12 @@ unified_inventory.register_button("waypoints", { }) local function update_hud(player, waypoints, temp, i) - local waypoint = waypoints[i] + local waypoint = waypoints.data[i] if not waypoint then return end + temp[i] = temp[i] or {} temp = temp[i] + local pos = waypoint.world_pos or vector.new() local name if waypoint.display_pos then @@ -129,10 +225,13 @@ local function update_hud(player, waypoints, temp, i) name = name..", "..waypoint.name end else - name = waypoint.name or "Waypoint "..i + name = waypoint.name or S("Waypoint @1", i) end + + -- Perform HUD updates if temp.hud then player:hud_remove(temp.hud) + temp.hud = nil end if waypoint.active then temp.hud = player:hud_add({ @@ -142,8 +241,6 @@ local function update_hud(player, waypoints, temp, i) text = "m", world_pos = pos }) - else - temp.hud = nil end end @@ -155,9 +252,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local need_update_hud = false local hit = false - local waypoints = datastorage.get(player_name, "waypoints") + local waypoints = get_waypoint_data(player) local temp = waypoints_temp[player_name] - for i = 1, 5, 1 do + for i = 1, COUNT do + local waypoint = waypoints.data[i] or {} + if fields["select_waypoint"..i] then hit = true waypoints.selected = i @@ -166,20 +265,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields["toggle_waypoint"..i] then hit = true - waypoints[i] = waypoints[i] or {} - waypoints[i].active = not (waypoints[i].active) + waypoint.active = not (waypoint.active) need_update_hud = true update_formspec = true end if fields["set_waypoint"..i] then hit = true - local pos = player:get_pos() - pos.x = math.floor(pos.x) - pos.y = math.floor(pos.y) - pos.z = math.floor(pos.z) - waypoints[i] = waypoints[i] or {} - waypoints[i].world_pos = pos + local pos = vector.round(player:get_pos()) + waypoint.world_pos = pos need_update_hud = true update_formspec = true end @@ -193,39 +287,45 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields["toggle_display_pos"..i] then hit = true - waypoints[i] = waypoints[i] or {} - waypoints[i].display_pos = not waypoints[i].display_pos + waypoint.display_pos = not waypoint.display_pos need_update_hud = true update_formspec = true end if fields["toggle_color"..i] then hit = true - waypoints[i] = waypoints[i] or {} - local color = waypoints[i].color or 1 + local color = waypoint.color or 0 color = color + 1 - if color > hud_colors_max then + if color > #hud_colors then color = 1 end - waypoints[i].color = color + waypoint.color = color need_update_hud = true update_formspec = true end if fields["confirm_rename"..i] then hit = true - waypoints[i] = waypoints[i] or {} + temp[i] = temp[i] or {} temp[i].edit = false - waypoints[i].name = fields["rename_box"..i] + waypoint.name = fields["rename_box"..i] need_update_hud = true update_formspec = true end + + if hit then + -- Save first + waypoints.data[i] = waypoint + set_waypoint_data(player, waypoints) + end + -- Update after if need_update_hud then update_hud(player, waypoints, temp, i) end if update_formspec then - unified_inventory.set_inventory_formspec(player, "waypoints") + ui.set_inventory_formspec(player, "waypoints") end + if hit then return end end end) @@ -233,11 +333,11 @@ end) minetest.register_on_joinplayer(function(player) local player_name = player:get_player_name() - local waypoints = datastorage.get(player_name, "waypoints") - local temp = {} - waypoints_temp[player_name] = temp - for i = 1, 5 do - update_hud(player, waypoints, temp, i) + local waypoints = get_waypoint_data(player) + + waypoints_temp[player_name] = {} + for i = 1, COUNT do + update_hud(player, waypoints, waypoints_temp[player_name], i) end end) diff --git a/mods/unifieddyes/airbrush.lua b/mods/unifieddyes/airbrush.lua new file mode 100644 index 00000000..262ca24a --- /dev/null +++ b/mods/unifieddyes/airbrush.lua @@ -0,0 +1,503 @@ +-- This file supplies all the code related to the airbrush + +local S = minetest.get_translator("unifieddyes") + +function unifieddyes.on_airbrush(itemstack, player, pointed_thing) + local player_name = player:get_player_name() + local painting_with = nil + + if unifieddyes.player_current_dye[player_name] then + painting_with = unifieddyes.player_current_dye[player_name] + end + + if not painting_with then + minetest.chat_send_player(player_name, "*** You need to set a color first.") + minetest.chat_send_player(player_name, "*** Right-click any random node to open the color selector,") + minetest.chat_send_player(player_name, "*** or shift+right-click a colorized node to use its color.") + minetest.chat_send_player(player_name, "*** Be sure to click \"Accept\", or the color you select will be ignored.") + return + end + + local pos = minetest.get_pointed_thing_position(pointed_thing) + if not pos then + local look_angle = player:get_look_vertical() + if look_angle > -1.55 then + minetest.chat_send_player(player_name, "*** No node selected") + else + local hexcolor = unifieddyes.get_color_from_dye_name(painting_with) + if hexcolor then + local r = tonumber(string.sub(hexcolor,1,2),16) + local g = tonumber(string.sub(hexcolor,3,4),16) + local b = tonumber(string.sub(hexcolor,5,6),16) + player:set_sky({r=r,g=g,b=b,a=255},"plain") + end + end + return + end + + local node = minetest.get_node(pos) + local def = minetest.registered_items[node.name] + if not def then return end + + if minetest.is_protected(pos, player_name) then + minetest.chat_send_player(player_name, "*** Sorry, someone else owns that node.") + return + end + + if not (def.groups and def.groups.ud_param2_colorable and def.groups.ud_param2_colorable > 0) then + minetest.chat_send_player(player_name, "*** That node can't be colored.") + return + end + + local palette = nil + local fdir = 0 + if not def or not def.palette then + minetest.chat_send_player(player_name, "*** That node can't be colored -- it's either undefined or has no palette.") + return + elseif def.palette == "unifieddyes_palette_extended.png" then + palette = "extended" + elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then + palette = "wallmounted" + fdir = node.param2 % 8 + elseif def.palette ~= "unifieddyes_palette_extended.png" + and def.palette ~= "unifieddyes_palette_colorwallmounted.png" + and string.find(def.palette, "unifieddyes_palette_") then + palette = "split" + fdir = node.param2 % 32 + else + minetest.chat_send_player(player_name, "*** That node can't be colored -- it has an invalid color mode.") + return + end + + local idx, hue = unifieddyes.getpaletteidx(painting_with, palette) + local inv = player:get_inventory() + if (not creative or not creative.is_enabled_for(player_name)) and not inv:contains_item("main", painting_with) then + local suff = "" + if not idx then + suff = " Besides, "..string.sub(painting_with, 5).." can't be applied to that node." + end + minetest.chat_send_player(player_name, "*** You're in survival mode, and you're out of "..string.sub(painting_with, 5).."."..suff) + return + end + + if not idx then + minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.") + return + end + + local oldidx = node.param2 - fdir + local name = def.airbrush_replacement_node or node.name + + if palette == "split" then + + local modname = string.sub(name, 1, string.find(name, ":")-1) + local nodename2 = string.sub(name, string.find(name, ":")+1) + local oldcolor = "snozzberry" + local newcolor = "razzberry" -- intentionally misspelled ;-) + + if def.ud_color_start and def.ud_color_end then + oldcolor = string.sub(node.name, def.ud_color_start, def.ud_color_end) + newcolor = string.sub(painting_with, 5) + else + if hue ~= 0 then + newcolor = unifieddyes.HUES_EXTENDED[hue][1] + else + newcolor = "grey" + end + + if def.airbrush_replacement_node then + oldcolor = "grey" + else + local s = string.sub(def.palette, 21) + oldcolor = string.sub(s, 1, string.find(s, "s.png")-1) + end + end + + name = modname..":"..string.gsub(nodename2, oldcolor, newcolor) + + if not minetest.registered_items[name] then + minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.") + return + end + elseif idx == oldidx then + return + end + minetest.swap_node(pos, {name = name, param2 = fdir + idx}) + if not creative or not creative.is_enabled_for(player_name) then + inv:remove_item("main", painting_with) + return + end +end + +local hps = 0.6 -- horizontal position scale +local vps = 1.3 -- vertical position scale +local vs = 0.1 -- vertical shift/offset + +local color_button_size = ";0.75,0.75;" +local color_square_size = ";0.69,0.69;" + +function unifieddyes.make_readable_color(color) + -- is this a low saturation color? + local has_low_saturtation = string.find(color, "s50"); + + -- remove _s50 tag, we care about that later again + local s = string.gsub(color, "_s50", "") + + -- replace underscores with spaces to make it look nicer + local s = string.gsub(s, "_", " ") + + -- capitalize words, you know, looks nicer ;) + s = string.gsub(s, "(%l)(%w*)", function(a,b) return string.upper(a)..b end) + + -- add the word dye, this is what the translations expect + s = s.." Dye" + + -- if it is a low sat color, append an appropriate string + if has_low_saturtation then + s = s.." (low saturation)" + end + + return s +end + +function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) + + local dye = "dye:"..colorname + + local overlay = "" + local colorize = minetest.formspec_escape("^[colorize:#"..hexcolor..":255") + + if not creative and inv:contains_item("main", dye) then + overlay = "^unifieddyes_onhand_overlay.png" + end + + local unavail_overlay = "" + if not showall and not unifieddyes.palette_has_color[nodepalette.."_"..colorname] + or (explist and not explist[colorname]) then + if overlay == "" then + unavail_overlay = "^unifieddyes_unavailable_overlay.png" + else + unavail_overlay = "^unifieddyes_onhand_unavailable_overlay.png" + end + end + + local tooltip = "tooltip["..colorname..";".. + S(unifieddyes.make_readable_color(colorname)).. + "\n(dye:"..colorname..")]" + + if dye == painting_with then + overlay = "^unifieddyes_select_overlay.png" + selindic = "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]"..tooltip + end + + local form + if unavail_overlay == "" then + form = "image_button[".. + (hp*hps)..","..(v2*vps+vs).. + color_button_size.. + "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay..";".. + colorname..";]".. + tooltip + else + form = "image[".. + (hp*hps)..","..(v2*vps+vs).. + color_square_size.. + "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]".. + tooltip + end + + return form, selindic +end + +function unifieddyes.show_airbrush_form(player) + if not player then return end + + local t = {} + + local player_name = player:get_player_name() + local painting_with = unifieddyes.player_selected_dye[player_name] or unifieddyes.player_current_dye[player_name] + local creative = creative and creative.is_enabled_for(player_name) + local inv = player:get_inventory() + local nodepalette = "extended" + local showall = unifieddyes.player_showall[player_name] + + t[1] = "size[14.5,8.5]label[7,-0.3;"..S("Select a color:").."]" + local selindic = "unifieddyes_select_overlay.png^unifieddyes_question.png]" + + local last_right_click = unifieddyes.player_last_right_clicked[player_name] + if last_right_click then + if not last_right_click.def then + last_right_click.def = {} + last_right_click.undef = true + elseif last_right_click.def.palette then + if last_right_click.def.palette == "unifieddyes_palette_colorwallmounted.png" then + nodepalette = "wallmounted" + elseif last_right_click.def.palette == "unifieddyes_palette_extended.png" then + t[#t+1] = "label[0.5,8.25;"..S("(Right-clicked a node that supports all 256 colors, showing them all)").."]" + showall = true + elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" + and last_right_click.def.palette ~= "unifieddyes_palette_colorwallmounted.png" + and string.find(last_right_click.def.palette, "unifieddyes_palette_") then + nodepalette = "split" + end + end + end + + if last_right_click.undef then + t[#t+1] = "label[0.5,8.25;"..S("(Right-clicked an undefined node, showing all colors)").."]" + elseif not last_right_click.def.groups + or not last_right_click.def.groups.ud_param2_colorable + or not last_right_click.def.palette + or not string.find(last_right_click.def.palette, "unifieddyes_palette_") then + t[#t+1] = "label[0.5,8.25;"..S("(Right-clicked a node not supported by the Airbrush, showing all colors)").."]" + end + + local explist = last_right_click.def.explist + + for v = 0, 6 do + local val = unifieddyes.VALS_EXTENDED[v+1] + + local sat = "" + local v2=(v/2) + + for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do + local hue = h[1] + local hp=hi-1 + + local r = h[2] + local g = h[3] + local b = h[4] + + local factor = 40 + if v > 3 then + factor = 75 + v2 = (v-2) + end + + local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) + local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) + local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) + + local hexcolor = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2) + local f + f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) + t[#t+1] = f + end + + if v > 3 then + sat = "_s50" + v2 = (v-1.5) + + for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do + local hue = h[1] + local hp=hi-1 + + local r = h[2] + local g = h[3] + local b = h[4] + + local factor = 75 + + local pr = 0.299 + local pg = 0.587 + local pb = 0.114 + + local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) + local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) + local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) + + local p = math.sqrt(r2*r2*pr + g2*g2*pg + b2*b2*pb) + local r3 = math.floor(p+(r2-p)*0.5) + local g3 = math.floor(p+(g2-p)*0.5) + local b3 = math.floor(p+(b2-p)*0.5) + + local hexcolor = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3) + local f + f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) + t[#t+1] = f + end + end + end + + local v2=5 + for y = 0, 15 do + + local hp=15-y + + local hexgrey = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17) + local grey = "grey_"..y + + if y == 0 then grey = "black" + elseif y == 4 then grey = "dark_grey" + elseif y == 8 then grey = "grey" + elseif y == 11 then grey = "light_grey" + elseif y == 15 then grey = "white" + end + + local f + f, selindic = unifieddyes.make_colored_square(hexgrey, grey, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) + t[#t+1] = f + + end + + if not creative then + t[#t+1] = "image[10," + t[#t+1] = (vps*5.55+vs) + t[#t+1] = color_button_size + t[#t+1] = "unifieddyes_onhand_overlay.png]label[10.7," + t[#t+1] = (vps*5.51+vs) + t[#t+1] = ";"..S("Dyes").."]" + t[#t+1] = "label[10.7," + t[#t+1] = (vps*5.67+vs) + t[#t+1] = ";on hand]" + + end + + t[#t+1] = "image[10," + t[#t+1] = (vps*5+vs) + t[#t+1] = color_button_size + t[#t+1] = selindic + + if painting_with then + t[#t+1] = "label[10.7," + t[#t+1] = (vps*4.90+vs) + t[#t+1] = ";"..S("Your selection:").."]" + t[#t+1] = "label[10.7," + t[#t+1] = (vps*5.07+vs) + t[#t+1] = ";" + t[#t+1] = S(unifieddyes.make_readable_color(string.sub(painting_with, 5))) + t[#t+1] = "]label[10.7," + t[#t+1] = (vps*5.24+vs) + t[#t+1] = ";(" + t[#t+1] = painting_with + t[#t+1] = ")]" + else + t[#t+1] = "label[10.7," + t[#t+1] = (vps*5.07+vs) + t[#t+1] = ";"..S("Your selection").."]" + end + + t[#t+1] = "button_exit[10.5,8;2,1;cancel;"..S("Cancel").."]button_exit[12.5,8;2,1;accept;"..S("Accept").."]" + + + if last_right_click and last_right_click.def and nodepalette ~= "extended" then + if showall then + t[#t+1] = "button[0,8;2,1;show_avail;"..S("Show Available").."]" + t[#t+1] = "label[2,8.25;"..S("(Currently showing all 256 colors)").."]" + else + t[#t+1] = "button[0,8;2,1;show_all;"..S("Show All Colors").."]" + t[#t+1] = "label[2,8.25;"..S("(Currently only showing what the right-clicked node can use)").."]" + end + end + + minetest.show_formspec(player_name, "unifieddyes:dye_select_form", table.concat(t)) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + + if formname == "unifieddyes:dye_select_form" then + + local player_name = player:get_player_name() + local nodepalette = "extended" + local showall = unifieddyes.player_showall[player_name] + + local last_right_click = unifieddyes.player_last_right_clicked[player_name] + if last_right_click and last_right_click.def then + if last_right_click.def.palette then + if last_right_click.def.palette == "unifieddyes_palette_colorwallmounted.png" then + nodepalette = "wallmounted" + elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" then + nodepalette = "split" + end + end + end + + if fields.show_all then + unifieddyes.player_showall[player_name] = true + unifieddyes.show_airbrush_form(player) + return + elseif fields.show_avail then + unifieddyes.player_showall[player_name] = false + unifieddyes.show_airbrush_form(player) + return + elseif fields.quit then + if fields.accept then + local dye = unifieddyes.player_selected_dye[player_name] + if not dye then + minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but no color was selected!") + return + elseif not showall + and not unifieddyes.palette_has_color[nodepalette.."_"..string.sub(dye, 5)] then + minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but the selected color can't be used on the") + minetest.chat_send_player(player_name, "*** node that was right-clicked (and \"Show All\" wasn't in effect).") + if unifieddyes.player_current_dye[player_name] then + minetest.chat_send_player(player_name, "*** Ignoring it and sticking with "..string.sub(unifieddyes.player_current_dye[player_name], 5)..".") + else + minetest.chat_send_player(player_name, "*** Ignoring it.") + end + return + else + unifieddyes.player_current_dye[player_name] = dye + unifieddyes.player_selected_dye[player_name] = nil + minetest.chat_send_player(player_name, "*** Selected "..string.sub(dye, 5).." for the airbrush.") + return + end + else -- assume "Cancel" or Esc. + unifieddyes.player_selected_dye[player_name] = nil + return + end + else + local s1 = string.sub(minetest.serialize(fields), 11) + local s3 = string.sub(s1,1, string.find(s1, '"')-1) + + local inv = player:get_inventory() + local creative = creative and creative.is_enabled_for(player_name) + local dye = "dye:"..s3 + + if (showall or unifieddyes.palette_has_color[nodepalette.."_"..s3]) and + (minetest.registered_items[dye] and (creative or inv:contains_item("main", dye))) then + unifieddyes.player_selected_dye[player_name] = dye + unifieddyes.show_airbrush_form(player) + end + end + end +end) + +minetest.register_tool("unifieddyes:airbrush", { + description = S("Dye Airbrush"), + inventory_image = "unifieddyes_airbrush.png", + use_texture_alpha = true, + tool_capabilities = { + full_punch_interval=0.1, + }, + range = 12, + on_use = unifieddyes.on_airbrush, + on_place = function(itemstack, placer, pointed_thing) + local keys = placer:get_player_control() + local player_name = placer:get_player_name() + local pos = minetest.get_pointed_thing_position(pointed_thing) + local node + local def + + if pos then node = minetest.get_node(pos) end + if node then def = minetest.registered_items[node.name] end + + unifieddyes.player_last_right_clicked[player_name] = {pos = pos, node = node, def = def} + + if not keys.aux1 then + unifieddyes.show_airbrush_form(placer) + elseif keys.aux1 then + if not pos or not def then return end + local newcolor = unifieddyes.color_to_name(node.param2, def) + + if newcolor and string.find(def.paramtype2, "color") then + minetest.chat_send_player(player_name, "*** Switching to "..newcolor.." for the airbrush, to match that node.") + unifieddyes.player_current_dye[player_name] = "dye:"..newcolor + else + minetest.chat_send_player(player_name, "*** That node is uncolored.") + end + elseif def.on_rightclick then + return def.on_rightclick(pos, node, placer, itemstack, pointed_thing) + end + end +}) diff --git a/mods/unifieddyes/aliases.lua b/mods/unifieddyes/aliases.lua new file mode 100644 index 00000000..785eb588 --- /dev/null +++ b/mods/unifieddyes/aliases.lua @@ -0,0 +1,23 @@ +minetest.register_alias("dye:light_red", "dye:pink") +minetest.register_alias("dye:medium_orange", "dye:brown") + +minetest.register_alias("unifieddyes:black", "dye:black") +minetest.register_alias("unifieddyes:dark_grey", "dye:dark_grey") +minetest.register_alias("unifieddyes:grey", "dye:grey") +minetest.register_alias("unifieddyes:light_grey", "dye:light_grey") +minetest.register_alias("unifieddyes:white", "dye:white") + +minetest.register_alias("unifieddyes:grey_0", "dye:black") +minetest.register_alias("unifieddyes:grey_4", "dye:dark_grey") +minetest.register_alias("unifieddyes:grey_8", "dye:grey") +minetest.register_alias("unifieddyes:grey_11", "dye:light_grey") +minetest.register_alias("unifieddyes:grey_15", "dye:white") + +minetest.register_alias("unifieddyes:white_paint", "dye:white") +minetest.register_alias("unifieddyes:titanium_dioxide", "dye:white") +minetest.register_alias("unifieddyes:lightgrey_paint", "dye:light_grey") +minetest.register_alias("unifieddyes:grey_paint", "dye:grey") +minetest.register_alias("unifieddyes:darkgrey_paint", "dye:dark_grey") +minetest.register_alias("unifieddyes:carbon_black", "dye:black") + +minetest.register_alias("unifieddyes:brown", "dye:brown") diff --git a/mods/unifieddyes/api.lua b/mods/unifieddyes/api.lua new file mode 100644 index 00000000..8b4eb14f --- /dev/null +++ b/mods/unifieddyes/api.lua @@ -0,0 +1,494 @@ +-- This file supplies the majority of Unified Dyes' API + +local S = minetest.get_translator("unifieddyes") + +unifieddyes.player_current_dye = {} +unifieddyes.player_selected_dye = {} +unifieddyes.player_last_right_clicked = {} +unifieddyes.palette_has_color = {} +unifieddyes.player_showall = {} + +-- if a node with a palette is placed in the world, +-- but the itemstack used to place it has no palette_index (color byte), +-- create something appropriate to make it officially white. + +minetest.register_on_placenode( + function(pos, newnode, placer, oldnode, itemstack, pointed_thing) + local def = minetest.registered_items[newnode.name] + + if not def + or not def.palette + or def.after_place_node + or not placer then + return false + end + + local param2 + if not string.find(itemstack:to_string(), "palette_index") then + if def.palette == "unifieddyes_palette_extended.png" + and def.paramtype2 == "color" then + param2 = 240 + elseif def.palette == "unifieddyes_palette_colorwallmounted.png" + and def.paramtype2 == "colorwallmounted" then + param2 = newnode.param2 % 8 + elseif string.find(def.palette, "unifieddyes_palette_") + and def.paramtype2 == "colorfacedir" then -- it's a split palette + param2 = newnode.param2 % 32 + end + + if param2 then + minetest.swap_node(pos, {name = newnode.name, param2 = param2}) + end + end + + if def.palette ~= "" then + minetest.get_meta(pos):set_int("palette_index", param2 or 240) + end + end +) + +-- The complementary function: strip-off the color if the node being dug is still white/neutral + +local function move_item(item, pos, inv, digger, fix_color) + if not (digger and digger:is_player()) then return end + local creative = creative_mode or minetest.check_player_privs(digger, "creative") + item = unifieddyes.fix_bad_color_info(item, fix_color) + if inv:room_for_item("main", item) + and (not creative or not inv:contains_item("main", item, true)) then + inv:add_item("main", item) + elseif not creative then + minetest.item_drop(ItemStack(item), digger, pos) + end + minetest.remove_node(pos) +end + +function unifieddyes.on_dig(pos, node, digger) + if not digger then return end + local playername = digger:get_player_name() + if minetest.is_protected(pos, playername) then + minetest.record_protection_violation(pos, playername) + return + end + + local oldparam2 = minetest.get_node(pos).param2 + local def = minetest.registered_items[node.name] + local fix_color + + if def.paramtype2 == "color" and oldparam2 == 240 and def.palette == "unifieddyes_palette_extended.png" then + fix_color = 240 + elseif def.paramtype2 == "color" and oldparam2 == 0 and def.palette == "unifieddyes_palette_extended.png" then + fix_color = 0 + elseif def.paramtype2 == "colorwallmounted" and math.floor(oldparam2 / 8) == 0 and def.palette == "unifieddyes_palette_colorwallmounted.png" then + fix_color = 0 + elseif def.paramtype2 == "colorfacedir" and math.floor(oldparam2 / 32) == 0 and string.find(def.palette, "unifieddyes_palette_") then + fix_color = 0 + end + + local inv = digger:get_inventory() + if fix_color then + move_item(node.name, pos, inv, digger, fix_color) + else + return minetest.node_dig(pos, node, digger) + end +end + +-- just stubs to keep old mods from crashing when expecting auto-coloring +-- or getting back the dye on dig. + +function unifieddyes.recolor_on_place(foo) +end + +function unifieddyes.after_dig_node(foo) +end + +-- This helper function creates multiple copies of the passed node, +-- for the split palette - one per hue, plus grey - and assigns +-- proper palettes and other attributes + +function unifieddyes.generate_split_palette_nodes(name, def, drop) + for _, color in ipairs(unifieddyes.HUES_WITH_GREY) do + local def2 = table.copy(def) + local desc_color = string.gsub(string.upper(string.sub(color, 1, 1))..string.sub(color, 2), "_", " ") + if string.sub(def2.description, -1) == ")" then + def2.description = string.sub(def2.description, 1, -2)..", "..desc_color.." shades)" + else + def2.description = def2.description.."("..desc_color.." shades)" + end + def2.palette = "unifieddyes_palette_"..color.."s.png" + def2.paramtype2 = "colorfacedir" + def2.groups.ud_param2_colorable = 1 + + if drop then + def2.drop = { + items = { + {items = {drop.."_"..color}, inherit_color = true }, + } + } + end + + minetest.register_node(":"..name.."_"..color, def2) + end +end + +-- This helper function creates a colored itemstack + +function unifieddyes.fix_bad_color_info(item, paletteidx) + local stack=minetest.itemstring_with_color(item, paletteidx) + return string.gsub(stack, "u0001color", "u0001palette_index") +end + +function unifieddyes.make_colored_itemstack(item, palette, color) + local paletteidx = unifieddyes.getpaletteidx(color, palette) + return unifieddyes.fix_bad_color_info(item, paletteidx), paletteidx +end + +-- these helper functions register all of the recipes needed to create colored +-- nodes with any of the dyes supported by that node's palette. + +local function register_c(craft, h, sat, val) + local hue = (type(h) == "table") and h[1] or h + local color = "" + if val then + if craft.palette == "wallmounted" then + color = val..hue..sat + else + color = val..hue..sat + end + else + color = hue -- if val is nil, then it's grey. + end + + local dye = "dye:"..color + local recipe = minetest.serialize(craft.recipe) + recipe = string.gsub(recipe, "MAIN_DYE", dye) + recipe = string.gsub(recipe, "NEUTRAL_NODE", craft.neutral_node) + local newrecipe = minetest.deserialize(recipe) + + local coutput = craft.output or "" + local output = coutput + if craft.output_prefix then + if craft.palette ~= "split" then + output = craft.output_prefix..color..craft.output_suffix..coutput + else + if hue == "white" or hue == "black" or string.find(hue, "grey") then + output = craft.output_prefix.."grey"..craft.output_suffix..coutput + elseif hue == "pink" then + dye = "dye:light_red" + output = craft.output_prefix.."red"..craft.output_suffix..coutput + else + output = craft.output_prefix..hue..craft.output_suffix..coutput + end + end + end + + local colored_itemstack = + unifieddyes.make_colored_itemstack(output, craft.palette, dye) + + minetest.register_craft({ + output = colored_itemstack, + type = craft.type, + recipe = newrecipe + }) + +end + +function unifieddyes.register_color_craft(craft) + local hues_table = unifieddyes.HUES_EXTENDED + local sats_table = unifieddyes.SATS + local vals_table = unifieddyes.VALS_SPLIT + local greys_table = unifieddyes.GREYS + + if craft.palette == "wallmounted" then + register_c(craft, "green", "", "light_") + register_c(craft, "blue", "", "light_") + hues_table = unifieddyes.HUES_WALLMOUNTED + sats_table = {""} + vals_table = unifieddyes.VALS + elseif craft.palette == "extended" then + vals_table = unifieddyes.VALS_EXTENDED + greys_table = unifieddyes.GREYS_EXTENDED + end + + for _, hue in ipairs(hues_table) do + for _, val in ipairs(vals_table) do + for _, sat in ipairs(sats_table) do + + if sat == "_s50" and val ~= "" and val ~= "medium_" and val ~= "dark_" then break end + register_c(craft, hue, sat, val) + + end + end + end + + for _, grey in ipairs(greys_table) do + register_c(craft, grey) + end + + register_c(craft, "pink") + +end + +-- code borrowed from homedecor +-- call this function to reset the rotation of a "wallmounted" object on place + +function unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) + local node = minetest.get_node(pos) + local colorbits = node.param2 - (node.param2 % 8) + + local yaw = placer:get_look_horizontal() + local dir = minetest.yaw_to_dir(yaw) -- -1.5) + local pitch = placer:get_look_vertical() + + local fdir = minetest.dir_to_wallmounted(dir) + + if pitch < -(math.pi/8) then + fdir = 0 + elseif pitch > math.pi/8 then + fdir = 1 + end + minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits }) +end + +-- use this when you have a "wallmounted" node that should never be oriented +-- to floor or ceiling... + +function unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) + local node = minetest.get_node(pos) + local colorbits = node.param2 - (node.param2 % 8) + local yaw = placer:get_look_horizontal() + local dir = minetest.yaw_to_dir(yaw+1.5) + local fdir = minetest.dir_to_wallmounted(dir) + + minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits }) +end + +-- ... and use this one to force that kind of node off of floor/ceiling +-- orientation after the screwdriver rotates it. + +function unifieddyes.fix_after_screwdriver_nsew(pos, node, user, mode, new_param2) + local new_fdir = new_param2 % 8 + local color = new_param2 - new_fdir + if new_fdir < 2 then + new_fdir = 2 + minetest.swap_node(pos, { name = node.name, param2 = new_fdir + color }) + return true + end +end + +function unifieddyes.is_buildable_to(placer_name, ...) + for _, pos in ipairs({...}) do + local node = minetest.get_node_or_nil(pos) + local def = node and minetest.registered_nodes[node.name] + if not (def and def.buildable_to) or minetest.is_protected(pos, placer_name) then + return false + end + end + return true +end + +function unifieddyes.get_hsv(name) -- expects a node/item name + local hue = "" + local a,b + for _, i in ipairs(unifieddyes.HUES_EXTENDED) do + a,b = string.find(name, "_"..i[1]) + if a then + hue = i[1] + break + end + end + + if string.find(name, "_light_grey") then hue = "light_grey" + elseif string.find(name, "_lightgrey") then hue = "light_grey" + elseif string.find(name, "_dark_grey") then hue = "dark_grey" + elseif string.find(name, "_darkgrey") then hue = "dark_grey" + elseif string.find(name, "_grey") then hue = "grey" + elseif string.find(name, "_white") then hue = "white" + elseif string.find(name, "_black") then hue = "black" + end + + local sat = "" + if string.find(name, "_s50") then sat = "_s50" end + + local val = "" + if string.find(name, "dark_") then val = "dark_" end + if string.find(name, "medium_") then val = "medium_" end + if string.find(name, "light_") then val = "light_" end + + return hue, sat, val +end + +-- code partially borrowed from cheapie's plasticbox mod + +-- in the function below, color is just a color string, while +-- palette_type can be: +-- +-- "extended" = 256 color palette +-- "split" = 200 color palette split into pieces for colorfacedir +-- "wallmounted" = 32-color abridged palette + +function unifieddyes.getpaletteidx(color, palette_type) + + local origcolor = color + + if string.sub(color,1,4) == "dye:" then + color = string.sub(color,5,-1) + elseif string.sub(color,1,12) == "unifieddyes:" then + color = string.sub(color,13,-1) + else + return + end + + if palette_type == "wallmounted" then + if unifieddyes.gpidx_grayscale_wallmounted[color] then + return (unifieddyes.gpidx_grayscale_wallmounted[color] * 8), 0 + end + elseif palette_type == "split" then + if unifieddyes.gpidx_grayscale[color] then + return (unifieddyes.gpidx_grayscale[color] * 32), 0 + end + elseif palette_type == "extended" then + if unifieddyes.gpidx_grayscale_extended[color] then + return unifieddyes.gpidx_grayscale_extended[color]+240, 0 + end + end + + local shade = "" -- assume full + if string.sub(color,1,6) == "faint_" then + shade = "faint" + color = string.sub(color,7,-1) + elseif string.sub(color,1,7) == "pastel_" then + shade = "pastel" + color = string.sub(color,8,-1) + elseif string.sub(color,1,6) == "light_" then + shade = "light" + color = string.sub(color,7,-1) + elseif string.sub(color,1,7) == "bright_" then + shade = "bright" + color = string.sub(color,8,-1) + elseif string.sub(color,1,7) == "medium_" then + shade = "medium" + color = string.sub(color,8,-1) + elseif string.sub(color,1,5) == "dark_" then + shade = "dark" + color = string.sub(color,6,-1) + end + if string.sub(color,-4,-1) == "_s50" then + shade = shade.."s50" + color = string.sub(color,1,-5) + end + + if palette_type == "wallmounted" then + if color == "green" and shade == "light" then return 48,3 + elseif color == "brown" then return 17,1 + elseif color == "pink" then return 56,7 + elseif color == "blue" and shade == "light" then return 40,5 + elseif unifieddyes.gpidx_hues_wallmounted[color] and unifieddyes.gpidx_shades_wallmounted[shade] then + return (unifieddyes.gpidx_shades_wallmounted[shade] * 64 + unifieddyes.gpidx_hues_wallmounted[color] * 8), unifieddyes.gpidx_hues_wallmounted[color] + end + else + if color == "brown" then + color = "orange" + shade = "medium" + elseif color == "pink" then + color = "red" + shade = "light" + end + if palette_type == "split" then -- it's colorfacedir + if unifieddyes.gpidx_hues_extended[color] and unifieddyes.gpidx_shades_split[shade] then + return (unifieddyes.gpidx_shades_split[shade] * 32), unifieddyes.gpidx_hues_extended[color]+1 + end + elseif palette_type == "extended" then + if unifieddyes.gpidx_hues_extended[color] and unifieddyes.gpidx_shades_extended[shade] then + return (unifieddyes.gpidx_hues_extended[color] + unifieddyes.gpidx_shades_extended[shade]*24), unifieddyes.gpidx_hues_extended[color] + end + end + end +end + +function unifieddyes.get_color_from_dye_name(name) + if name == "dye:black" then + return "000000" + elseif name == "dye:white" then + return "ffffff" + end + local item = minetest.registered_items[name] + if not item then return end + local inv_image = item.inventory_image + if not inv_image then return end + return string.match(inv_image,"colorize:#(......):200") +end + +-- get a node's dye color based on its palette and param2 + +function unifieddyes.color_to_name(param2, def) + if not param2 or not def or not def.palette then return end + + if def.palette == "unifieddyes_palette_extended.png" then + local color = param2 + + local v = 0 + local s = 1 + if color < 24 then v = 1 + elseif color > 23 and color < 48 then v = 2 + elseif color > 47 and color < 72 then v = 3 + elseif color > 71 and color < 96 then v = 4 + elseif color > 95 and color < 120 then v = 5 + elseif color > 119 and color < 144 then v = 5 s = 2 + elseif color > 143 and color < 168 then v = 6 + elseif color > 167 and color < 192 then v = 6 s = 2 + elseif color > 191 and color < 216 then v = 7 + elseif color > 215 and color < 240 then v = 7 s = 2 + end + + if color > 239 then + if color == 240 then return "white" + elseif color == 244 then return "light_grey" + elseif color == 247 then return "grey" + elseif color == 251 then return "dark_grey" + elseif color == 255 then return "black" + else return "grey_"..15-(color-240) + end + else + local h = color - math.floor(color/24)*24 + return unifieddyes.VALS_EXTENDED[v]..unifieddyes.HUES_EXTENDED[h+1][1]..unifieddyes.SATS[s] + end + + elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then + local color = math.floor(param2 / 8) + if color == 0 then return "white" + elseif color == 1 then return "light_grey" + elseif color == 2 then return "grey" + elseif color == 3 then return "dark_grey" + elseif color == 4 then return "black" + elseif color == 5 then return "light_blue" + elseif color == 6 then return "light_green" + elseif color == 7 then return "pink" + end + local v = math.floor(color/8) + local h = color - v * 8 + return unifieddyes.VALS[v]..unifieddyes.HUES_WALLMOUNTED[h+1] + + elseif string.find(def.palette, "unifieddyes_palette") then -- it's the split palette + -- palette names in this mode are always "unifieddyes_palette_COLORs.png" + + local s = string.sub(def.palette, 21) + local color = string.sub(s, 1, string.find(s, "s.png")-1) + + local v = math.floor(param2/32) + if color ~= "grey" then + if v == 0 then return "faint_"..color + elseif v == 1 then return color + elseif v == 2 then return color.."_s50" + elseif v == 3 then return "light_"..color + elseif v == 4 then return "medium_"..color + elseif v == 5 then return "medium_"..color.."_s50" + elseif v == 6 then return "dark_"..color + elseif v == 7 then return "dark_"..color.."_s50" + end + else + if v > 0 and v < 6 then return unifieddyes.GREYS[v] + else return "white" + end + end + end +end diff --git a/mods/unifieddyes/color-tables.lua b/mods/unifieddyes/color-tables.lua new file mode 100644 index 00000000..12eaa325 --- /dev/null +++ b/mods/unifieddyes/color-tables.lua @@ -0,0 +1,237 @@ + +-- the names of the various colors here came from http://www.procato.com/rgb+index/ + +unifieddyes.HUES_EXTENDED = { + { "red", 0xff, 0x00, 0x00 }, + { "vermilion", 0xff, 0x40, 0x00 }, + { "orange", 0xff, 0x80, 0x00 }, + { "amber", 0xff, 0xbf, 0x00 }, + { "yellow", 0xff, 0xff, 0x00 }, + { "lime", 0xbf, 0xff, 0x00 }, + { "chartreuse", 0x80, 0xff, 0x00 }, + { "harlequin", 0x40, 0xff, 0x00 }, + { "green", 0x00, 0xff, 0x00 }, + { "malachite", 0x00, 0xff, 0x40 }, + { "spring", 0x00, 0xff, 0x80 }, + { "turquoise", 0x00, 0xff, 0xbf }, + { "cyan", 0x00, 0xff, 0xff }, + { "cerulean", 0x00, 0xbf, 0xff }, + { "azure", 0x00, 0x80, 0xff }, + { "sapphire", 0x00, 0x40, 0xff }, + { "blue", 0x00, 0x00, 0xff }, + { "indigo", 0x40, 0x00, 0xff }, + { "violet", 0x80, 0x00, 0xff }, + { "mulberry", 0xbf, 0x00, 0xff }, + { "magenta", 0xff, 0x00, 0xff }, + { "fuchsia", 0xff, 0x00, 0xbf }, + { "rose", 0xff, 0x00, 0x80 }, + { "crimson", 0xff, 0x00, 0x40 } +} + +unifieddyes.HUES_WITH_GREY = {} + +for _,i in ipairs(unifieddyes.HUES_EXTENDED) do + table.insert(unifieddyes.HUES_WITH_GREY, i[1]) +end +table.insert(unifieddyes.HUES_WITH_GREY, "grey") + +unifieddyes.HUES_WALLMOUNTED = { + "red", + "orange", + "yellow", + "green", + "cyan", + "blue", + "violet", + "magenta" +} + +unifieddyes.SATS = { + "", + "_s50" +} + +unifieddyes.VALS = { + "", + "medium_", + "dark_" +} + +unifieddyes.VALS_SPLIT = { + "faint_", + "light_", + "", + "medium_", + "dark_" +} + +unifieddyes.VALS_EXTENDED = { + "faint_", + "pastel_", + "light_", + "bright_", + "", + "medium_", + "dark_" +} + +unifieddyes.GREYS = { + "white", + "light_grey", + "grey", + "dark_grey", + "black" +} + +unifieddyes.GREYS_EXTENDED = table.copy(unifieddyes.GREYS) + +for i = 1, 14 do + if i ~= 0 and i ~= 4 and i ~= 8 and i ~= 11 and i ~= 15 then + table.insert(unifieddyes.GREYS_EXTENDED, "grey_"..i) + end +end + +local default_dyes = { + "black", + "blue", + "brown", + "cyan", + "dark_green", + "dark_grey", + "green", + "grey", + "magenta", + "orange", + "pink", + "red", + "violet", + "white", + "yellow" +} + +-- reverse lookups for getpaletteidx() + +unifieddyes.gpidx_aliases = { + ["pink"] = "light_red", + ["brown"] = "medium_orange", + ["azure"] = "light_blue" +} + +unifieddyes.gpidx_grayscale = { + ["white"] = 1, + ["light_grey"] = 2, + ["grey"] = 3, + ["dark_grey"] = 4, + ["black"] = 5, +} + +unifieddyes.gpidx_grayscale_extended = { + ["white"] = 0, + ["grey_14"] = 1, + ["grey_13"] = 2, + ["grey_12"] = 3, + ["light_grey"] = 4, + ["grey_11"] = 4, + ["grey_10"] = 5, + ["grey_9"] = 6, + ["grey_8"] = 7, + ["grey"] = 7, + ["grey_7"] = 8, + ["grey_6"] = 9, + ["grey_5"] = 10, + ["grey_4"] = 11, + ["dark_grey"] = 11, + ["grey_3"] = 12, + ["grey_2"] = 13, + ["grey_1"] = 14, + ["black"] = 15, +} + +unifieddyes.gpidx_grayscale_wallmounted = { + ["white"] = 0, + ["light_grey"] = 1, + ["grey"] = 2, + ["dark_grey"] = 3, + ["black"] = 4, +} + +unifieddyes.gpidx_hues_extended = { + ["red"] = 0, + ["vermilion"] = 1, + ["orange"] = 2, + ["amber"] = 3, + ["yellow"] = 4, + ["lime"] = 5, + ["chartreuse"] = 6, + ["harlequin"] = 7, + ["green"] = 8, + ["malachite"] = 9, + ["spring"] = 10, + ["aqua"] = 10, + ["turquoise"] = 11, + ["cyan"] = 12, + ["cerulean"] = 13, + ["azure"] = 14, + ["skyblue"] = 14, + ["sapphire"] = 15, + ["blue"] = 16, + ["indigo"] = 17, + ["violet"] = 18, + ["mulberry"] = 19, + ["magenta"] = 20, + ["fuchsia"] = 21, + ["rose"] = 22, + ["redviolet"] = 22, + ["crimson"] = 23, +} + +unifieddyes.gpidx_hues_wallmounted = { + ["red"] = 0, + ["orange"] = 1, + ["yellow"] = 2, + ["green"] = 3, + ["cyan"] = 4, + ["blue"] = 5, + ["violet"] = 6, + ["magenta"] = 7 +} + +unifieddyes.gpidx_shades = { + [""] = 1, + ["s50"] = 2, + ["light"] = 3, + ["medium"] = 4, + ["mediums50"] = 5, + ["dark"] = 6, + ["darks50"] = 7, +} + +unifieddyes.gpidx_shades_split = { + ["faint"] = 0, + [""] = 1, + ["s50"] = 2, + ["light"] = 3, + ["medium"] = 4, + ["mediums50"] = 5, + ["dark"] = 6, + ["darks50"] = 7, +} + +unifieddyes.gpidx_shades_extended = { + ["faint"] = 0, + ["pastel"] = 1, + ["light"] = 2, + ["bright"] = 3, + [""] = 4, + ["s50"] = 5, + ["medium"] = 6, + ["mediums50"] = 7, + ["dark"] = 8, + ["darks50"] = 9 +} + +unifieddyes.gpidx_shades_wallmounted = { + [""] = 1, + ["medium"] = 2, + ["dark"] = 3 +} diff --git a/mods/unifieddyes/dyes-crafting.lua b/mods/unifieddyes/dyes-crafting.lua new file mode 100644 index 00000000..2c11c41b --- /dev/null +++ b/mods/unifieddyes/dyes-crafting.lua @@ -0,0 +1,309 @@ +-- crafting! + +-- Generate all dyes that are not part of the default minetest_game dyes mod + +local S = minetest.get_translator("unifieddyes") + +for _, h in ipairs(unifieddyes.HUES_EXTENDED) do + local hue = h[1] + local r = h[2] + local g = h[3] + local b = h[4] + + for v = 0, 6 do + local val = unifieddyes.VALS_EXTENDED[v+1] + + local factor = 40 + if v > 3 then factor = 75 end + + local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) + local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) + local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) + + -- full-sat color + + local desc = hue:gsub("%a", string.upper, 1).." Dye" + + if val ~= "" then + desc = val:sub(1, -2):gsub("%a", string.upper, 1) .." "..desc + end + + local color = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2) + if minetest.registered_items["dye:"..val..hue] then + minetest.override_item("dye:"..val..hue, { + inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", + }) + else + if (val..hue) ~= "medium_orange" + and (val..hue) ~= "light_red" then + minetest.register_craftitem(":dye:"..val..hue, { + description = S(desc), + inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", + groups = { dye=1, not_in_creative_inventory=1 }, + }) + end + end + minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue) + + if v > 3 then -- also register the low-sat version + + local pr = 0.299 + local pg = 0.587 + local pb = 0.114 + + local p = math.sqrt(r2*r2*pr + g2*g2*pg + b2*b2*pb) + local r3 = math.floor(p+(r2-p)*0.5) + local g3 = math.floor(p+(g2-p)*0.5) + local b3 = math.floor(p+(b2-p)*0.5) + + local color = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3) + + minetest.register_craftitem(":dye:"..val..hue.."_s50", { + description = S(desc.." (low saturation)"), + inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", + groups = { dye=1, not_in_creative_inventory=1 }, + }) + minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50") + end + end +end + +-- register the greyscales too :P + +for y = 1, 14 do -- colors 0 and 15 are black and white, default dyes + + if y ~= 4 and y ~= 8 and y~= 11 then -- don't register the three greys, they're done separately. + + local rgb = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17) + local name = "grey_"..y + local desc = "Grey Dye #"..y + + minetest.register_craftitem(":dye:"..name, { + description = S(desc), + inventory_image = "unifieddyes_dye.png^[colorize:#"..rgb..":200", + groups = { dye=1, not_in_creative_inventory=1 }, + }) + minetest.register_alias("unifieddyes:"..name, "dye:"..name) + end +end + +minetest.override_item("dye:grey", { + inventory_image = "unifieddyes_dye.png^[colorize:#888888:200", +}) + +minetest.override_item("dye:dark_grey", { + inventory_image = "unifieddyes_dye.png^[colorize:#444444:200", +}) + +minetest.register_craftitem(":dye:light_grey", { + description = S("Light grey Dye"), + inventory_image = "unifieddyes_dye.png^[colorize:#cccccc:200", + groups = { dye=1, not_in_creative_inventory=1 }, +}) + +-- build a table of color <-> palette associations to reduce the need for +-- realtime lookups with getpaletteidx() + +for _, palette in ipairs({"extended", "split", "wallmounted"}) do + local palette2 = palette + + for i in ipairs(unifieddyes.SATS) do + local sat = (palette == "wallmounted") and "" or unifieddyes.SATS[i] + for _, hue in ipairs(unifieddyes.HUES_EXTENDED) do + for _, val in ipairs(unifieddyes.VALS_EXTENDED) do + local color = val..hue[1]..sat + if unifieddyes.getpaletteidx("dye:"..color, palette2) then + unifieddyes.palette_has_color[palette.."_"..color] = true + end + end + end + end + + for y = 0, 15 do + local grey = "grey_"..y + + if y == 0 then grey = "black" + elseif y == 4 then grey = "dark_grey" + elseif y == 8 then grey = "grey" + elseif y == 11 then grey = "light_grey" + elseif y == 15 then grey = "white" + end + if unifieddyes.getpaletteidx("dye:"..grey, palette2) then + unifieddyes.palette_has_color[palette.."_"..grey] = true + end + end +end + +unifieddyes.palette_has_color["wallmounted_light_red"] = true + +unifieddyes.base_color_crafts = { + { "red", "flowers:rose", nil, nil, nil, nil, 4 }, + { "vermilion", "dye:red", "dye:orange", nil, nil, nil, 3 }, + { "orange", "flowers:tulip", nil, nil, nil, nil, 4 }, + { "orange", "dye:red", "dye:yellow", nil, nil, nil, 2 }, + { "amber", "dye:orange", "dye:yellow", nil, nil, nil, 2 }, + { "yellow", "flowers:dandelion_yellow", nil, nil, nil, nil, 4 }, + { "lime", "dye:yellow", "dye:chartreuse", nil, nil, nil, 2 }, + { "lime", "dye:yellow", "dye:yellow", "dye:green", nil, nil, 3 }, + { "chartreuse", "dye:yellow", "dye:green", nil, nil, nil, 2 }, + { "harlequin", "dye:chartreuse", "dye:green", nil, nil, nil, 2 }, + { "harlequin", "dye:yellow", "dye:green", "dye:green", nil, nil, 3 }, + { "green", "default:cactus", nil, nil, nil, nil, 4 }, + { "green", "dye:yellow", "dye:blue", nil, nil, nil, 2 }, + { "malachite", "dye:green", "dye:spring", nil, nil, nil, 2 }, + { "malachite", "dye:green", "dye:green", "dye:cyan", nil, nil, 3 }, + { "malachite", "dye:green", "dye:green", "dye:green", "dye:blue", nil, 4 }, + { "spring", "dye:green", "dye:cyan", nil, nil, nil, 2 }, + { "spring", "dye:green", "dye:green", "dye:blue", nil, nil, 3 }, + { "turquoise", "dye:spring", "dye:cyan", nil, nil, nil, 2 }, + { "turquoise", "dye:green", "dye:cyan", "dye:cyan", nil, nil, 3 }, + { "turquoise", "dye:green", "dye:green", "dye:green", "dye:blue", "dye:blue", 5 }, + { "cyan", "dye:green", "dye:blue", nil, nil, nil, 2 }, + { "cerulean", "dye:cyan", "dye:azure", nil, nil, nil, 2 }, + { "cerulean", "dye:cyan", "dye:cyan", "dye:blue", nil, nil, 3 }, + { "cerulean", "dye:green", "dye:green", "dye:blue", "dye:blue", "dye:blue", 5 }, + { "azure", "dye:cyan", "dye:blue", nil, nil, nil, 2 }, + { "azure", "dye:green", "dye:blue", "dye:blue", nil, nil, 3 }, + { "sapphire", "dye:azure", "dye:blue", nil, nil, nil, 2 }, + { "sapphire", "dye:cyan", "dye:blue", "dye:blue", nil, nil, 3 }, + { "sapphire", "dye:green", "dye:blue", "dye:blue", "dye:blue", nil, 4 }, + { "blue", "flowers:geranium", nil, nil, nil, nil, 4 }, + { "indigo", "dye:blue", "dye:violet", nil, nil, nil, 2 }, + { "violet", "flowers:viola", nil, nil, nil, nil, 4 }, + { "violet", "dye:blue", "dye:magenta", nil, nil, nil, 2 }, + { "mulberry", "dye:violet", "dye:magenta", nil, nil, nil, 2 }, + { "mulberry", "dye:violet", "dye:blue", "dye:red", nil, nil, 3 }, + { "magenta", "dye:blue", "dye:red", nil, nil, nil, 2 }, + { "fuchsia", "dye:magenta", "dye:rose", nil, nil, nil, 2 }, + { "fuchsia", "dye:blue", "dye:red", "dye:rose", nil, nil, 3 }, + { "fuchsia", "dye:red", "dye:violet", nil, nil, nil, 2 }, + { "rose", "dye:magenta", "dye:red", nil, nil, nil, 2 }, + { "rose", "dye:red", "dye:red", "dye:blue", nil, nil, 3 }, + { "crimson", "dye:rose", "dye:red", nil, nil, nil, 2 }, + { "crimson", "dye:magenta", "dye:red", "dye:red", nil, nil, 3 }, + { "crimson", "dye:red", "dye:red", "dye:red", "dye:blue", nil, 4 }, + + { "black", "default:coal_lump", nil, nil, nil, nil, 4 }, + { "white", "flowers:dandelion_white", nil, nil, nil, nil, 4 }, +} + +unifieddyes.shade_crafts = { + { "faint_", "", "dye:white", "dye:white", "dye:white", 4 }, + { "pastel_", "", "dye:white", "dye:white", nil, 3 }, + { "light_", "", "dye:white", nil, nil, 2 }, + { "bright_", "", "color", "dye:white", nil, 3 }, + { "", "_s50", "dye:light_grey", nil, nil, 2 }, + { "", "_s50", "dye:black", "dye:white", "dye:white", 3 }, + { "medium_", "", "dye:black", nil, nil, 2 }, + { "medium_", "_s50", "dye:grey", nil, nil, 2 }, + { "medium_", "_s50", "dye:black", "dye:white", nil, 3 }, + { "dark_", "", "dye:black", "dye:black", nil, 3 }, + { "dark_", "_s50", "dye:dark_grey", nil, nil, 2 }, + { "dark_", "_s50", "dye:black", "dye:black", "dye:white", 4 }, +} + +for _,i in ipairs(unifieddyes.base_color_crafts) do + local color = i[1] + local yield = i[7] + + minetest.register_craft( { + type = "shapeless", + output = "dye:"..color.." "..yield, + recipe = { + i[2], + i[3], + i[4], + i[5], + i[6], + }, + }) + + for _,j in ipairs(unifieddyes.shade_crafts) do + local firstdye = j[3] + if firstdye == "color" then firstdye = "dye:"..color end + + -- ignore black, white, anything containing the word "grey" + + if color ~= "black" and color ~= "white" and not string.find(color, "grey") then + + minetest.register_craft( { + type = "shapeless", + output = "dye:"..j[1]..color..j[2].." "..j[6], + recipe = { + "dye:"..color, + firstdye, + j[4], + j[5] + }, + }) + end + end +end + +-- greys + +unifieddyes.greymixes = { + { 1, "dye:black", "dye:black", "dye:black", "dye:dark_grey", 4 }, + { 2, "dye:black", "dye:black", "dye:dark_grey", nil, 3 }, + { 3, "dye:black", "dye:dark_grey", nil, nil, 2 }, + { 4, "dye:white", "dye:black", "dye:black", nil, 3 }, + { 5, "dye:dark_grey", "dye:dark_grey", "dye:grey", nil, 3 }, + { 6, "dye:dark_grey", "dye:grey", nil, nil, 2 }, + { 7, "dye:dark_grey", "dye:grey", "dye:grey", nil, 3 }, + { 8, "dye:white", "dye:black", nil, nil, 2 }, + { 9, "dye:grey", "dye:grey", "dye:light_grey", nil, 3 }, + { 10, "dye:grey", "dye:light_grey", "dye:light_grey", nil, 3 }, + { 11, "dye:white", "dye:white", "dye:black", nil, 3 }, + { 12, "dye:light_grey", "dye:light_grey", "dye:white", nil, 3 }, + { 13, "dye:light_grey", "dye:white", nil, nil, 2 }, + { 14, "dye:white", "dye:white", "dye:light_grey", nil, 3 }, +} + +for _, i in ipairs(unifieddyes.greymixes) do + local shade = i[1] + local dye1 = i[2] + local dye2 = i[3] + local dye3 = i[4] + local dye4 = i[5] + local yield = i[6] + local color = "grey_"..shade + if shade == 4 then + color = "dark_grey" + elseif shade == 8 then + color = "grey" + elseif shade == 11 then + color = "light_grey" + end + + minetest.register_craft( { + type = "shapeless", + output = "dye:"..color.." "..yield, + recipe = { + dye1, + dye2, + dye3, + dye4, + }, + }) +end + +-- other crafts +-- we can't make dark orange anymore because brown/medium orange conflicts + +minetest.register_craft( { + type = "shapeless", + output = "dye:dark_orange", + recipe = { + "dye:brown", + "dye:brown" + }, +}) + +minetest.register_craft( { + output = "unifieddyes:airbrush", + recipe = { + { "basic_materials:brass_ingot", "", "basic_materials:plastic_sheet" }, + { "", "default:steel_ingot", "" }, + { "", "", "default:steel_ingot" } + }, +}) diff --git a/mods/unifieddyes/init.lua b/mods/unifieddyes/init.lua index dcebc786..a8e5092b 100644 --- a/mods/unifieddyes/init.lua +++ b/mods/unifieddyes/init.lua @@ -2,12 +2,12 @@ Unified Dyes -This mod provides an extension to the Minetest 0.4.x dye system +This mod provides an extension to the Minetest dye system ============================================================================== -Copyright (C) 2012-2013, Vanessa Ezekowitz -Email: vanessaezekowitz@gmail.com +Copyright (C) 2012-2013, Vanessa Dannenberg +Email: vanessa.e.dannenberg@gmail.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,1562 +34,12 @@ unifieddyes = {} local creative_mode = minetest.settings:get_bool("creative_mode") local S = minetest.get_translator("unifieddyes") +local modpath=minetest.get_modpath(minetest.get_current_modname()) --- the names of the various colors here came from http://www.procato.com/rgb+index/ - -unifieddyes.HUES_EXTENDED = { - { "red", 0xff, 0x00, 0x00 }, - { "vermilion", 0xff, 0x40, 0x00 }, - { "orange", 0xff, 0x80, 0x00 }, - { "amber", 0xff, 0xbf, 0x00 }, - { "yellow", 0xff, 0xff, 0x00 }, - { "lime", 0xbf, 0xff, 0x00 }, - { "chartreuse", 0x80, 0xff, 0x00 }, - { "harlequin", 0x40, 0xff, 0x00 }, - { "green", 0x00, 0xff, 0x00 }, - { "malachite", 0x00, 0xff, 0x40 }, - { "spring", 0x00, 0xff, 0x80 }, - { "turquoise", 0x00, 0xff, 0xbf }, - { "cyan", 0x00, 0xff, 0xff }, - { "cerulean", 0x00, 0xbf, 0xff }, - { "azure", 0x00, 0x80, 0xff }, - { "sapphire", 0x00, 0x40, 0xff }, - { "blue", 0x00, 0x00, 0xff }, - { "indigo", 0x40, 0x00, 0xff }, - { "violet", 0x80, 0x00, 0xff }, - { "mulberry", 0xbf, 0x00, 0xff }, - { "magenta", 0xff, 0x00, 0xff }, - { "fuchsia", 0xff, 0x00, 0xbf }, - { "rose", 0xff, 0x00, 0x80 }, - { "crimson", 0xff, 0x00, 0x40 } -} - -unifieddyes.HUES_WITH_GREY = {} - -for _,i in ipairs(unifieddyes.HUES_EXTENDED) do - table.insert(unifieddyes.HUES_WITH_GREY, i[1]) -end -table.insert(unifieddyes.HUES_WITH_GREY, "grey") - -unifieddyes.HUES_WALLMOUNTED = { - "red", - "orange", - "yellow", - "green", - "cyan", - "blue", - "violet", - "magenta" -} - -unifieddyes.SATS = { - "", - "_s50" -} - -unifieddyes.VALS = { - "", - "medium_", - "dark_" -} - -unifieddyes.VALS_SPLIT = { - "faint_", - "light_", - "", - "medium_", - "dark_" -} - -unifieddyes.VALS_EXTENDED = { - "faint_", - "pastel_", - "light_", - "bright_", - "", - "medium_", - "dark_" -} - -unifieddyes.GREYS = { - "white", - "light_grey", - "grey", - "dark_grey", - "black" -} - -unifieddyes.GREYS_EXTENDED = table.copy(unifieddyes.GREYS) - -for i = 1, 14 do - if i ~= 0 and i ~= 4 and i ~= 8 and i ~= 11 and i ~= 15 then - table.insert(unifieddyes.GREYS_EXTENDED, "grey_"..i) - end -end - -local default_dyes = { - "black", - "blue", - "brown", - "cyan", - "dark_green", - "dark_grey", - "green", - "grey", - "magenta", - "orange", - "pink", - "red", - "violet", - "white", - "yellow" -} - -unifieddyes.player_current_dye = {} -unifieddyes.player_selected_dye = {} -unifieddyes.player_last_right_clicked = {} -unifieddyes.palette_has_color = {} -unifieddyes.player_showall = {} - --- if a node with a palette is placed in the world, --- but the itemstack used to place it has no palette_index (color byte), --- create something appropriate to make it officially white. - -minetest.register_on_placenode( - function(pos, newnode, placer, oldnode, itemstack, pointed_thing) - local def = minetest.registered_items[newnode.name] - - if not def - or not def.palette - or def.after_place_node - or not placer then - return false - end - - local param2 - if not string.find(itemstack:to_string(), "palette_index") then - if def.palette == "unifieddyes_palette_extended.png" - and def.paramtype2 == "color" then - param2 = 240 - elseif def.palette == "unifieddyes_palette_colorwallmounted.png" - and def.paramtype2 == "colorwallmounted" then - param2 = newnode.param2 % 8 - elseif string.find(def.palette, "unifieddyes_palette_") - and def.paramtype2 == "colorfacedir" then -- it's a split palette - param2 = newnode.param2 % 32 - end - - if param2 then - minetest.swap_node(pos, {name = newnode.name, param2 = param2}) - end - end - - if def.palette ~= "" then - minetest.get_meta(pos):set_int("palette_index", param2 or 240) - end - end -) - --- The complementary function: strip-off the color if the node being dug is still white/neutral - -local function move_item(item, pos, inv, digger, fix_color) - if not (digger and digger:is_player()) then return end - local creative = creative_mode or minetest.check_player_privs(digger, "creative") - item = unifieddyes.fix_bad_color_info(item, fix_color) - if inv:room_for_item("main", item) - and (not creative or not inv:contains_item("main", item, true)) then - inv:add_item("main", item) - elseif not creative then - minetest.item_drop(ItemStack(item), digger, pos) - end - minetest.remove_node(pos) -end - -function unifieddyes.on_dig(pos, node, digger) - if not digger then return end - local playername = digger:get_player_name() - if minetest.is_protected(pos, playername) then - minetest.record_protection_violation(pos, playername) - return - end - - local oldparam2 = minetest.get_node(pos).param2 - local def = minetest.registered_items[node.name] - local fix_color - - if def.paramtype2 == "color" and oldparam2 == 240 and def.palette == "unifieddyes_palette_extended.png" then - fix_color = 240 - elseif def.paramtype2 == "color" and oldparam2 == 0 and def.palette == "unifieddyes_palette_extended.png" then - fix_color = 0 - elseif def.paramtype2 == "colorwallmounted" and math.floor(oldparam2 / 8) == 0 and def.palette == "unifieddyes_palette_colorwallmounted.png" then - fix_color = 0 - elseif def.paramtype2 == "colorfacedir" and math.floor(oldparam2 / 32) == 0 and string.find(def.palette, "unifieddyes_palette_") then - fix_color = 0 - end - - local inv = digger:get_inventory() - if fix_color then - move_item(node.name, pos, inv, digger, fix_color) - else - return minetest.node_dig(pos, node, digger) - end -end - --- just stubs to keep old mods from crashing when expecting auto-coloring --- or getting back the dye on dig. - -function unifieddyes.recolor_on_place(foo) -end - -function unifieddyes.after_dig_node(foo) -end - --- This helper function creates multiple copies of the passed node, --- for the split palette - one per hue, plus grey - and assigns --- proper palettes and other attributes - -function unifieddyes.generate_split_palette_nodes(name, def, drop) - for _, color in ipairs(unifieddyes.HUES_WITH_GREY) do - local def2 = table.copy(def) - local desc_color = string.gsub(string.upper(string.sub(color, 1, 1))..string.sub(color, 2), "_", " ") - if string.sub(def2.description, -1) == ")" then - def2.description = string.sub(def2.description, 1, -2)..", "..desc_color.." shades)" - else - def2.description = def2.description.."("..desc_color.." shades)" - end - def2.palette = "unifieddyes_palette_"..color.."s.png" - def2.paramtype2 = "colorfacedir" - def2.groups.ud_param2_colorable = 1 - - if drop then - def2.drop = { - items = { - {items = {drop.."_"..color}, inherit_color = true }, - } - } - end - - minetest.register_node(":"..name.."_"..color, def2) - end -end - --- This helper function creates a colored itemstack - -function unifieddyes.fix_bad_color_info(item, paletteidx) - local stack=minetest.itemstring_with_color(item, paletteidx) - return string.gsub(stack, "u0001color", "u0001palette_index") -end - -function unifieddyes.make_colored_itemstack(item, palette, color) - local paletteidx = unifieddyes.getpaletteidx(color, palette) - return unifieddyes.fix_bad_color_info(item, paletteidx), paletteidx -end - --- these helper functions register all of the recipes needed to create colored --- nodes with any of the dyes supported by that node's palette. - -local function register_c(craft, h, sat, val) - local hue = (type(h) == "table") and h[1] or h - local color = "" - if val then - if craft.palette == "wallmounted" then - color = val..hue..sat - else - color = val..hue..sat - end - else - color = hue -- if val is nil, then it's grey. - end - - local dye = "dye:"..color - local recipe = minetest.serialize(craft.recipe) - recipe = string.gsub(recipe, "MAIN_DYE", dye) - recipe = string.gsub(recipe, "NEUTRAL_NODE", craft.neutral_node) - local newrecipe = minetest.deserialize(recipe) - - local coutput = craft.output or "" - local output = coutput - if craft.output_prefix then - if craft.palette ~= "split" then - output = craft.output_prefix..color..craft.output_suffix..coutput - else - if hue == "white" or hue == "black" or string.find(hue, "grey") then - output = craft.output_prefix.."grey"..craft.output_suffix..coutput - elseif hue == "pink" then - dye = "dye:light_red" - output = craft.output_prefix.."red"..craft.output_suffix..coutput - else - output = craft.output_prefix..hue..craft.output_suffix..coutput - end - end - end - - local colored_itemstack = - unifieddyes.make_colored_itemstack(output, craft.palette, dye) - - minetest.register_craft({ - output = colored_itemstack, - type = craft.type, - recipe = newrecipe - }) - -end - -function unifieddyes.register_color_craft(craft) - local hues_table = unifieddyes.HUES_EXTENDED - local sats_table = unifieddyes.SATS - local vals_table = unifieddyes.VALS_SPLIT - local greys_table = unifieddyes.GREYS - - if craft.palette == "wallmounted" then - register_c(craft, "green", "", "light_") - register_c(craft, "blue", "", "light_") - hues_table = unifieddyes.HUES_WALLMOUNTED - sats_table = {""} - vals_table = unifieddyes.VALS - elseif craft.palette == "extended" then - vals_table = unifieddyes.VALS_EXTENDED - greys_table = unifieddyes.GREYS_EXTENDED - end - - for _, hue in ipairs(hues_table) do - for _, val in ipairs(vals_table) do - for _, sat in ipairs(sats_table) do - - if sat == "_s50" and val ~= "" and val ~= "medium_" and val ~= "dark_" then break end - register_c(craft, hue, sat, val) - - end - end - end - - for _, grey in ipairs(greys_table) do - register_c(craft, grey) - end - - register_c(craft, "pink") - -end - --- code borrowed from homedecor --- call this function to reset the rotation of a "wallmounted" object on place - -function unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) - local node = minetest.get_node(pos) - local colorbits = node.param2 - (node.param2 % 8) - - local yaw = placer:get_look_horizontal() - local dir = minetest.yaw_to_dir(yaw) -- -1.5) - local pitch = placer:get_look_vertical() - - local fdir = minetest.dir_to_wallmounted(dir) - - if pitch < -(math.pi/8) then - fdir = 0 - elseif pitch > math.pi/8 then - fdir = 1 - end - minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits }) -end - --- use this when you have a "wallmounted" node that should never be oriented --- to floor or ceiling... - -function unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) - local node = minetest.get_node(pos) - local colorbits = node.param2 - (node.param2 % 8) - local yaw = placer:get_look_horizontal() - local dir = minetest.yaw_to_dir(yaw+1.5) - local fdir = minetest.dir_to_wallmounted(dir) - - minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits }) -end - --- ... and use this one to force that kind of node off of floor/ceiling --- orientation after the screwdriver rotates it. - -function unifieddyes.fix_after_screwdriver_nsew(pos, node, user, mode, new_param2) - local new_fdir = new_param2 % 8 - local color = new_param2 - new_fdir - if new_fdir < 2 then - new_fdir = 2 - minetest.swap_node(pos, { name = node.name, param2 = new_fdir + color }) - return true - end -end - -function unifieddyes.is_buildable_to(placer_name, ...) - for _, pos in ipairs({...}) do - local node = minetest.get_node_or_nil(pos) - local def = node and minetest.registered_nodes[node.name] - if not (def and def.buildable_to) or minetest.is_protected(pos, placer_name) then - return false - end - end - return true -end - -function unifieddyes.get_hsv(name) -- expects a node/item name - local hue = "" - local a,b - for _, i in ipairs(unifieddyes.HUES_EXTENDED) do - a,b = string.find(name, "_"..i[1]) - if a then - hue = i[1] - break - end - end - - if string.find(name, "_light_grey") then hue = "light_grey" - elseif string.find(name, "_lightgrey") then hue = "light_grey" - elseif string.find(name, "_dark_grey") then hue = "dark_grey" - elseif string.find(name, "_darkgrey") then hue = "dark_grey" - elseif string.find(name, "_grey") then hue = "grey" - elseif string.find(name, "_white") then hue = "white" - elseif string.find(name, "_black") then hue = "black" - end - - local sat = "" - if string.find(name, "_s50") then sat = "_s50" end - - local val = "" - if string.find(name, "dark_") then val = "dark_" end - if string.find(name, "medium_") then val = "medium_" end - if string.find(name, "light_") then val = "light_" end - - return hue, sat, val -end - --- code partially borrowed from cheapie's plasticbox mod - --- in the function below, color is just a color string, while --- palette_type can be: --- --- "extended" = 256 color palette --- "split" = 200 color palette split into pieces for colorfacedir --- "wallmounted" = 32-color abridged palette - - -function unifieddyes.getpaletteidx(color, palette_type) - - local origcolor = color - local aliases = { - ["pink"] = "light_red", - ["brown"] = "medium_orange", - ["azure"] = "light_blue" - } - - local grayscale = { - ["white"] = 1, - ["light_grey"] = 2, - ["grey"] = 3, - ["dark_grey"] = 4, - ["black"] = 5, - } - - local grayscale_extended = { - ["white"] = 0, - ["grey_14"] = 1, - ["grey_13"] = 2, - ["grey_12"] = 3, - ["light_grey"] = 4, - ["grey_11"] = 4, - ["grey_10"] = 5, - ["grey_9"] = 6, - ["grey_8"] = 7, - ["grey"] = 7, - ["grey_7"] = 8, - ["grey_6"] = 9, - ["grey_5"] = 10, - ["grey_4"] = 11, - ["dark_grey"] = 11, - ["grey_3"] = 12, - ["grey_2"] = 13, - ["grey_1"] = 14, - ["black"] = 15, - } - - local grayscale_wallmounted = { - ["white"] = 0, - ["light_grey"] = 1, - ["grey"] = 2, - ["dark_grey"] = 3, - ["black"] = 4, - } - - local hues_extended = { - ["red"] = 0, - ["vermilion"] = 1, - ["orange"] = 2, - ["amber"] = 3, - ["yellow"] = 4, - ["lime"] = 5, - ["chartreuse"] = 6, - ["harlequin"] = 7, - ["green"] = 8, - ["malachite"] = 9, - ["spring"] = 10, - ["aqua"] = 10, - ["turquoise"] = 11, - ["cyan"] = 12, - ["cerulean"] = 13, - ["azure"] = 14, - ["skyblue"] = 14, - ["sapphire"] = 15, - ["blue"] = 16, - ["indigo"] = 17, - ["violet"] = 18, - ["mulberry"] = 19, - ["magenta"] = 20, - ["fuchsia"] = 21, - ["rose"] = 22, - ["redviolet"] = 22, - ["crimson"] = 23, - } - - local hues_wallmounted = { - ["red"] = 0, - ["orange"] = 1, - ["yellow"] = 2, - ["green"] = 3, - ["cyan"] = 4, - ["blue"] = 5, - ["violet"] = 6, - ["magenta"] = 7 - } - - local shades = { - [""] = 1, - ["s50"] = 2, - ["light"] = 3, - ["medium"] = 4, - ["mediums50"] = 5, - ["dark"] = 6, - ["darks50"] = 7, - } - - local shades_split = { - ["faint"] = 0, - [""] = 1, - ["s50"] = 2, - ["light"] = 3, - ["medium"] = 4, - ["mediums50"] = 5, - ["dark"] = 6, - ["darks50"] = 7, - } - - local shades_extended = { - ["faint"] = 0, - ["pastel"] = 1, - ["light"] = 2, - ["bright"] = 3, - [""] = 4, - ["s50"] = 5, - ["medium"] = 6, - ["mediums50"] = 7, - ["dark"] = 8, - ["darks50"] = 9 - } - - local shades_wallmounted = { - [""] = 1, - ["medium"] = 2, - ["dark"] = 3 - } - - if string.sub(color,1,4) == "dye:" then - color = string.sub(color,5,-1) - elseif string.sub(color,1,12) == "unifieddyes:" then - color = string.sub(color,13,-1) - else - return - end - - if palette_type == "wallmounted" then - if grayscale_wallmounted[color] then - return (grayscale_wallmounted[color] * 8), 0 - end - elseif palette_type == "split" then - if grayscale[color] then - return (grayscale[color] * 32), 0 - end - elseif palette_type == "extended" then - if grayscale_extended[color] then - return grayscale_extended[color]+240, 0 - end - end - - local shade = "" -- assume full - if string.sub(color,1,6) == "faint_" then - shade = "faint" - color = string.sub(color,7,-1) - elseif string.sub(color,1,7) == "pastel_" then - shade = "pastel" - color = string.sub(color,8,-1) - elseif string.sub(color,1,6) == "light_" then - shade = "light" - color = string.sub(color,7,-1) - elseif string.sub(color,1,7) == "bright_" then - shade = "bright" - color = string.sub(color,8,-1) - elseif string.sub(color,1,7) == "medium_" then - shade = "medium" - color = string.sub(color,8,-1) - elseif string.sub(color,1,5) == "dark_" then - shade = "dark" - color = string.sub(color,6,-1) - end - if string.sub(color,-4,-1) == "_s50" then - shade = shade.."s50" - color = string.sub(color,1,-5) - end - - if palette_type == "wallmounted" then - if color == "green" and shade == "light" then return 48,3 - elseif color == "brown" then return 17,1 - elseif color == "pink" then return 56,7 - elseif color == "blue" and shade == "light" then return 40,5 - elseif hues_wallmounted[color] and shades_wallmounted[shade] then - return (shades_wallmounted[shade] * 64 + hues_wallmounted[color] * 8), hues_wallmounted[color] - end - else - if color == "brown" then - color = "orange" - shade = "medium" - elseif color == "pink" then - color = "red" - shade = "light" - end - if palette_type == "split" then -- it's colorfacedir - if hues_extended[color] and shades_split[shade] then - return (shades_split[shade] * 32), hues_extended[color]+1 - end - elseif palette_type == "extended" then - if hues_extended[color] and shades_extended[shade] then - return (hues_extended[color] + shades_extended[shade]*24), hues_extended[color] - end - end - end -end - -function unifieddyes.get_color_from_dye_name(name) - if name == "dye:black" then - return "000000" - elseif name == "dye:white" then - return "ffffff" - end - local item = minetest.registered_items[name] - if not item then return end - local inv_image = item.inventory_image - if not inv_image then return end - return string.match(inv_image,"colorize:#(......):200") -end - --- punch-to-recolor using the airbrush - -function unifieddyes.on_airbrush(itemstack, player, pointed_thing) - local player_name = player:get_player_name() - local painting_with = nil - - if unifieddyes.player_current_dye[player_name] then - painting_with = unifieddyes.player_current_dye[player_name] - end - - if not painting_with then - minetest.chat_send_player(player_name, "*** You need to set a color first.") - minetest.chat_send_player(player_name, "*** Right-click any random node to open the color selector,") - minetest.chat_send_player(player_name, "*** or shift+right-click a colorized node to use its color.") - minetest.chat_send_player(player_name, "*** Be sure to click \"Accept\", or the color you select will be ignored.") - return - end - - local pos = minetest.get_pointed_thing_position(pointed_thing) - if not pos then - local look_angle = player:get_look_vertical() - if look_angle > -1.55 then - minetest.chat_send_player(player_name, "*** No node selected") - else - local hexcolor = unifieddyes.get_color_from_dye_name(painting_with) - if hexcolor then - local r = tonumber(string.sub(hexcolor,1,2),16) - local g = tonumber(string.sub(hexcolor,3,4),16) - local b = tonumber(string.sub(hexcolor,5,6),16) - player:set_sky({r=r,g=g,b=b,a=255},"plain") - end - end - return - end - - local node = minetest.get_node(pos) - local def = minetest.registered_items[node.name] - if not def then return end - - if minetest.is_protected(pos, player_name) then - minetest.chat_send_player(player_name, "*** Sorry, someone else owns that node.") - return - end - - if not (def.groups and def.groups.ud_param2_colorable and def.groups.ud_param2_colorable > 0) then - minetest.chat_send_player(player_name, "*** That node can't be colored.") - return - end - - local palette = nil - local fdir = 0 - if not def or not def.palette then - minetest.chat_send_player(player_name, "*** That node can't be colored -- it's either undefined or has no palette.") - return - elseif def.palette == "unifieddyes_palette_extended.png" then - palette = "extended" - elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then - palette = "wallmounted" - fdir = node.param2 % 8 - elseif def.palette ~= "unifieddyes_palette_extended.png" - and def.palette ~= "unifieddyes_palette_colorwallmounted.png" - and string.find(def.palette, "unifieddyes_palette_") then - palette = "split" - fdir = node.param2 % 32 - else - minetest.chat_send_player(player_name, "*** That node can't be colored -- it has an invalid color mode.") - return - end - - local idx, hue = unifieddyes.getpaletteidx(painting_with, palette) - local inv = player:get_inventory() - if (not creative or not creative.is_enabled_for(player_name)) and not inv:contains_item("main", painting_with) then - local suff = "" - if not idx then - suff = " Besides, "..string.sub(painting_with, 5).." can't be applied to that node." - end - minetest.chat_send_player(player_name, "*** You're in survival mode, and you're out of "..string.sub(painting_with, 5).."."..suff) - return - end - - if not idx then - minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.") - return - end - - local oldidx = node.param2 - fdir - local name = def.airbrush_replacement_node or node.name - - if palette == "split" then - - local modname = string.sub(name, 1, string.find(name, ":")-1) - local nodename2 = string.sub(name, string.find(name, ":")+1) - local oldcolor = "snozzberry" - local newcolor = "razzberry" -- intentionally misspelled ;-) - - if def.ud_color_start and def.ud_color_end then - oldcolor = string.sub(node.name, def.ud_color_start, def.ud_color_end) - newcolor = string.sub(painting_with, 5) - else - if hue ~= 0 then - newcolor = unifieddyes.HUES_EXTENDED[hue][1] - else - newcolor = "grey" - end - - if def.airbrush_replacement_node then - oldcolor = "grey" - else - local s = string.sub(def.palette, 21) - oldcolor = string.sub(s, 1, string.find(s, "s.png")-1) - end - end - - name = modname..":"..string.gsub(nodename2, oldcolor, newcolor) - - if not minetest.registered_items[name] then - minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.") - return - end - elseif idx == oldidx then - return - end - minetest.swap_node(pos, {name = name, param2 = fdir + idx}) - if not creative or not creative.is_enabled_for(player_name) then - inv:remove_item("main", painting_with) - return - end -end - --- get a node's dye color based on its palette and param2 - -function unifieddyes.color_to_name(param2, def) - if not param2 or not def or not def.palette then return end - - if def.palette == "unifieddyes_palette_extended.png" then - local color = param2 - - local v = 0 - local s = 1 - if color < 24 then v = 1 - elseif color > 23 and color < 48 then v = 2 - elseif color > 47 and color < 72 then v = 3 - elseif color > 71 and color < 96 then v = 4 - elseif color > 95 and color < 120 then v = 5 - elseif color > 119 and color < 144 then v = 5 s = 2 - elseif color > 143 and color < 168 then v = 6 - elseif color > 167 and color < 192 then v = 6 s = 2 - elseif color > 191 and color < 216 then v = 7 - elseif color > 215 and color < 240 then v = 7 s = 2 - end - - if color > 239 then - if color == 240 then return "white" - elseif color == 244 then return "light_grey" - elseif color == 247 then return "grey" - elseif color == 251 then return "dark_grey" - elseif color == 255 then return "black" - else return "grey_"..15-(color-240) - end - else - local h = color - math.floor(color/24)*24 - return unifieddyes.VALS_EXTENDED[v]..unifieddyes.HUES_EXTENDED[h+1][1]..unifieddyes.SATS[s] - end - - elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then - local color = math.floor(param2 / 8) - if color == 0 then return "white" - elseif color == 1 then return "light_grey" - elseif color == 2 then return "grey" - elseif color == 3 then return "dark_grey" - elseif color == 4 then return "black" - elseif color == 5 then return "light_blue" - elseif color == 6 then return "light_green" - elseif color == 7 then return "pink" - end - local v = math.floor(color/8) - local h = color - v * 8 - return unifieddyes.VALS[v]..unifieddyes.HUES_WALLMOUNTED[h+1] - - elseif string.find(def.palette, "unifieddyes_palette") then -- it's the split palette - -- palette names in this mode are always "unifieddyes_palette_COLORs.png" - - local s = string.sub(def.palette, 21) - local color = string.sub(s, 1, string.find(s, "s.png")-1) - - local v = math.floor(param2/32) - if color ~= "grey" then - if v == 0 then return "faint_"..color - elseif v == 1 then return color - elseif v == 2 then return color.."_s50" - elseif v == 3 then return "light_"..color - elseif v == 4 then return "medium_"..color - elseif v == 5 then return "medium_"..color.."_s50" - elseif v == 6 then return "dark_"..color - elseif v == 7 then return "dark_"..color.."_s50" - end - else - if v > 0 and v < 6 then return unifieddyes.GREYS[v] - else return "white" - end - end - end -end - -local hps = 0.6 -- horizontal position scale -local vps = 1.3 -- vertical position scale -local vs = 0.1 -- vertical shift/offset - -local color_button_size = ";0.75,0.75;" -local color_square_size = ";0.69,0.69;" - -function unifieddyes.make_readable_color(color) - -- is this a low saturation color? - local has_low_saturtation = string.find(color, "s50"); - - -- remove _s50 tag, we care about that later again - local s = string.gsub(color, "_s50", "") - - -- replace underscores with spaces to make it look nicer - local s = string.gsub(s, "_", " ") - - -- capitalize words, you know, looks nicer ;) - s = string.gsub(s, "(%l)(%w*)", function(a,b) return string.upper(a)..b end) - - -- add the word dye, this is what the translations expect - s = s.." Dye" - - -- if it is a low sat color, append an appropriate string - if has_low_saturtation then - s = s.." (low saturation)" - end - - return s -end - -function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) - - local dye = "dye:"..colorname - - local overlay = "" - local colorize = minetest.formspec_escape("^[colorize:#"..hexcolor..":255") - - if not creative and inv:contains_item("main", dye) then - overlay = "^unifieddyes_onhand_overlay.png" - end - - local unavail_overlay = "" - if not showall and not unifieddyes.palette_has_color[nodepalette.."_"..colorname] - or (explist and not explist[colorname]) then - if overlay == "" then - unavail_overlay = "^unifieddyes_unavailable_overlay.png" - else - unavail_overlay = "^unifieddyes_onhand_unavailable_overlay.png" - end - end - - local tooltip = "tooltip["..colorname..";".. - S(unifieddyes.make_readable_color(colorname)).. - "\n(dye:"..colorname..")]" - - if dye == painting_with then - overlay = "^unifieddyes_select_overlay.png" - selindic = "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]"..tooltip - end - - local form - if unavail_overlay == "" then - form = "image_button[".. - (hp*hps)..","..(v2*vps+vs).. - color_button_size.. - "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay..";".. - colorname..";]".. - tooltip - else - form = "image[".. - (hp*hps)..","..(v2*vps+vs).. - color_square_size.. - "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]".. - tooltip - end - - return form, selindic -end - -function unifieddyes.show_airbrush_form(player) - if not player then return end - - local t = {} - - local player_name = player:get_player_name() - local painting_with = unifieddyes.player_selected_dye[player_name] or unifieddyes.player_current_dye[player_name] - local creative = creative and creative.is_enabled_for(player_name) - local inv = player:get_inventory() - local nodepalette = "extended" - local showall = unifieddyes.player_showall[player_name] - - t[1] = "size[14.5,8.5]label[7,-0.3;"..S("Select a color:").."]" - local selindic = "unifieddyes_select_overlay.png^unifieddyes_question.png]" - - local last_right_click = unifieddyes.player_last_right_clicked[player_name] - if last_right_click then - if last_right_click.def and last_right_click.def.palette then - if last_right_click.def.palette == "unifieddyes_palette_colorwallmounted.png" then - nodepalette = "wallmounted" - elseif last_right_click.def.palette == "unifieddyes_palette_extended.png" then - t[#t+1] = "label[0.5,8.25;"..S("(Right-clicked a node that supports all 256 colors, showing them all)").."]" - showall = true - elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" - and last_right_click.def.palette ~= "unifieddyes_palette_colorwallmounted.png" - and string.find(last_right_click.def.palette, "unifieddyes_palette_") then - nodepalette = "split" - end - end - end - - if not last_right_click.def.groups - or not last_right_click.def.groups.ud_param2_colorable - or not last_right_click.def.palette - or not string.find(last_right_click.def.palette, "unifieddyes_palette_") then - t[#t+1] = "label[0.5,8.25;"..S("(Right-clicked a node not supported by the Airbrush, showing all colors)").."]" - end - - local explist = last_right_click.def.explist - - for v = 0, 6 do - local val = unifieddyes.VALS_EXTENDED[v+1] - - local sat = "" - local v2=(v/2) - - for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do - local hue = h[1] - local hp=hi-1 - - local r = h[2] - local g = h[3] - local b = h[4] - - local factor = 40 - if v > 3 then - factor = 75 - v2 = (v-2) - end - - local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) - local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) - local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) - - local hexcolor = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2) - local f - f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) - t[#t+1] = f - end - - if v > 3 then - sat = "_s50" - v2 = (v-1.5) - - for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do - local hue = h[1] - local hp=hi-1 - - local r = h[2] - local g = h[3] - local b = h[4] - - local factor = 75 - - local pr = 0.299 - local pg = 0.587 - local pb = 0.114 - - local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) - local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) - local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) - - local p = math.sqrt(r2*r2*pr + g2*g2*pg + b2*b2*pb) - local r3 = math.floor(p+(r2-p)*0.5) - local g3 = math.floor(p+(g2-p)*0.5) - local b3 = math.floor(p+(b2-p)*0.5) - - local hexcolor = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3) - local f - f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) - t[#t+1] = f - end - end - end - - local v2=5 - for y = 0, 15 do - - local hp=15-y - - local hexgrey = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17) - local grey = "grey_"..y - - if y == 0 then grey = "black" - elseif y == 4 then grey = "dark_grey" - elseif y == 8 then grey = "grey" - elseif y == 11 then grey = "light_grey" - elseif y == 15 then grey = "white" - end - - local f - f, selindic = unifieddyes.make_colored_square(hexgrey, grey, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist) - t[#t+1] = f - - end - - if not creative then - t[#t+1] = "image[10," - t[#t+1] = (vps*5.55+vs) - t[#t+1] = color_button_size - t[#t+1] = "unifieddyes_onhand_overlay.png]label[10.7," - t[#t+1] = (vps*5.51+vs) - t[#t+1] = ";"..S("Dyes").."]" - t[#t+1] = "label[10.7," - t[#t+1] = (vps*5.67+vs) - t[#t+1] = ";on hand]" - - end - - t[#t+1] = "image[10," - t[#t+1] = (vps*5+vs) - t[#t+1] = color_button_size - t[#t+1] = selindic - - if painting_with then - t[#t+1] = "label[10.7," - t[#t+1] = (vps*4.90+vs) - t[#t+1] = ";"..S("Your selection:").."]" - t[#t+1] = "label[10.7," - t[#t+1] = (vps*5.07+vs) - t[#t+1] = ";" - t[#t+1] = S(unifieddyes.make_readable_color(string.sub(painting_with, 5))) - t[#t+1] = "]label[10.7," - t[#t+1] = (vps*5.24+vs) - t[#t+1] = ";(" - t[#t+1] = painting_with - t[#t+1] = ")]" - else - t[#t+1] = "label[10.7," - t[#t+1] = (vps*5.07+vs) - t[#t+1] = ";"..S("Your selection").."]" - end - - t[#t+1] = "button_exit[10.5,8;2,1;cancel;"..S("Cancel").."]button_exit[12.5,8;2,1;accept;"..S("Accept").."]" - - - if last_right_click and last_right_click.def and nodepalette ~= "extended" then - if showall then - t[#t+1] = "button[0,8;2,1;show_avail;"..S("Show Available").."]" - t[#t+1] = "label[2,8.25;"..S("(Currently showing all 256 colors)").."]" - else - t[#t+1] = "button[0,8;2,1;show_all;"..S("Show All Colors").."]" - t[#t+1] = "label[2,8.25;"..S("(Currently only showing what the right-clicked node can use)").."]" - end - end - - minetest.show_formspec(player_name, "unifieddyes:dye_select_form", table.concat(t)) -end - -minetest.register_tool("unifieddyes:airbrush", { - description = S("Dye Airbrush"), - inventory_image = "unifieddyes_airbrush.png", - use_texture_alpha = true, - tool_capabilities = { - full_punch_interval=0.1, - }, - range = 12, - on_use = unifieddyes.on_airbrush, - on_place = function(itemstack, placer, pointed_thing) - local keys = placer:get_player_control() - local player_name = placer:get_player_name() - local pos = minetest.get_pointed_thing_position(pointed_thing) - local node - local def - - if pos then node = minetest.get_node(pos) end - if node then def = minetest.registered_items[node.name] end - - unifieddyes.player_last_right_clicked[player_name] = {pos = pos, node = node, def = def} - - if (not keys.sneak) and def.on_rightclick then - return def.on_rightclick(pos, node, placer, itemstack, pointed_thing) - elseif not keys.sneak then - unifieddyes.show_airbrush_form(placer) - elseif keys.sneak then - if not pos or not def then return end - local newcolor = unifieddyes.color_to_name(node.param2, def) - - if not newcolor then - minetest.chat_send_player(player_name, "*** That node is uncolored.") - return - end - minetest.chat_send_player(player_name, "*** Switching to "..newcolor.." for the airbrush, to match that node.") - unifieddyes.player_current_dye[player_name] = "dye:"..newcolor - end - end -}) - -minetest.register_craft( { - output = "unifieddyes:airbrush", - recipe = { - { "basic_materials:brass_ingot", "", "basic_materials:plastic_sheet" }, - { "", "default:steel_ingot", "" }, - { "", "", "default:steel_ingot" } - }, -}) - -minetest.register_on_player_receive_fields(function(player, formname, fields) - - if formname == "unifieddyes:dye_select_form" then - - local player_name = player:get_player_name() - local nodepalette = "extended" - local showall = unifieddyes.player_showall[player_name] - - local last_right_click = unifieddyes.player_last_right_clicked[player_name] - if last_right_click and last_right_click.def then - if last_right_click.def.palette then - if last_right_click.def.palette == "unifieddyes_palette_colorwallmounted.png" then - nodepalette = "wallmounted" - elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" then - nodepalette = "split" - end - end - end - - if fields.show_all then - unifieddyes.player_showall[player_name] = true - unifieddyes.show_airbrush_form(player) - return - elseif fields.show_avail then - unifieddyes.player_showall[player_name] = false - unifieddyes.show_airbrush_form(player) - return - elseif fields.quit then - if fields.accept then - local dye = unifieddyes.player_selected_dye[player_name] - if not dye then - minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but no color was selected!") - return - elseif not showall - and not unifieddyes.palette_has_color[nodepalette.."_"..string.sub(dye, 5)] then - minetest.chat_send_player(player_name, "*** Clicked \"Accept\", but the selected color can't be used on the") - minetest.chat_send_player(player_name, "*** node that was right-clicked (and \"Show All\" wasn't in effect).") - if unifieddyes.player_current_dye[player_name] then - minetest.chat_send_player(player_name, "*** Ignoring it and sticking with "..string.sub(unifieddyes.player_current_dye[player_name], 5)..".") - else - minetest.chat_send_player(player_name, "*** Ignoring it.") - end - return - else - unifieddyes.player_current_dye[player_name] = dye - unifieddyes.player_selected_dye[player_name] = nil - minetest.chat_send_player(player_name, "*** Selected "..string.sub(dye, 5).." for the airbrush.") - return - end - else -- assume "Cancel" or Esc. - unifieddyes.player_selected_dye[player_name] = nil - return - end - else - local s1 = string.sub(minetest.serialize(fields), 11) - local s3 = string.sub(s1,1, string.find(s1, '"')-1) - - local inv = player:get_inventory() - local creative = creative and creative.is_enabled_for(player_name) - local dye = "dye:"..s3 - - if (showall or unifieddyes.palette_has_color[nodepalette.."_"..s3]) and - (minetest.registered_items[dye] and (creative or inv:contains_item("main", dye))) then - unifieddyes.player_selected_dye[player_name] = dye - unifieddyes.show_airbrush_form(player) - end - end - end -end) - --- Generate all dyes that are not part of the default minetest_game dyes mod - -for _, h in ipairs(unifieddyes.HUES_EXTENDED) do - local hue = h[1] - local r = h[2] - local g = h[3] - local b = h[4] - - for v = 0, 6 do - local val = unifieddyes.VALS_EXTENDED[v+1] - - local factor = 40 - if v > 3 then factor = 75 end - - local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) - local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) - local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) - - -- full-sat color - - local desc = hue:gsub("%a", string.upper, 1).." Dye" - - if val ~= "" then - desc = val:sub(1, -2):gsub("%a", string.upper, 1) .." "..desc - end - - local color = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2) - if minetest.registered_items["dye:"..val..hue] then - minetest.override_item("dye:"..val..hue, { - inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", - }) - else - if (val..hue) ~= "medium_orange" - and (val..hue) ~= "light_red" then - minetest.register_craftitem(":dye:"..val..hue, { - description = S(desc), - inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", - groups = { dye=1, not_in_creative_inventory=1 }, - }) - end - end - minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue) - - if v > 3 then -- also register the low-sat version - - local pr = 0.299 - local pg = 0.587 - local pb = 0.114 - - local p = math.sqrt(r2*r2*pr + g2*g2*pg + b2*b2*pb) - local r3 = math.floor(p+(r2-p)*0.5) - local g3 = math.floor(p+(g2-p)*0.5) - local b3 = math.floor(p+(b2-p)*0.5) - - local color = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3) - - minetest.register_craftitem(":dye:"..val..hue.."_s50", { - description = S(desc.." (low saturation)"), - inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", - groups = { dye=1, not_in_creative_inventory=1 }, - }) - minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50") - end - end -end - --- register the greyscales too :P - -for y = 1, 14 do -- colors 0 and 15 are black and white, default dyes - - if y ~= 4 and y ~= 8 and y~= 11 then -- don't register the three greys, they're done separately. - - local rgb = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17) - local name = "grey_"..y - local desc = "Grey Dye #"..y - - minetest.register_craftitem(":dye:"..name, { - description = S(desc), - inventory_image = "unifieddyes_dye.png^[colorize:#"..rgb..":200", - groups = { dye=1, not_in_creative_inventory=1 }, - }) - minetest.register_alias("unifieddyes:"..name, "dye:"..name) - end -end - -minetest.override_item("dye:grey", { - inventory_image = "unifieddyes_dye.png^[colorize:#888888:200", -}) - -minetest.override_item("dye:dark_grey", { - inventory_image = "unifieddyes_dye.png^[colorize:#444444:200", -}) - -minetest.register_craftitem(":dye:light_grey", { - description = S("Light grey Dye"), - inventory_image = "unifieddyes_dye.png^[colorize:#cccccc:200", - groups = { dye=1, not_in_creative_inventory=1 }, -}) - --- build a table of color <-> palette associations to reduce the need for --- realtime lookups with getpaletteidx() - -for _, palette in ipairs({"extended", "split", "wallmounted"}) do - local palette2 = palette - - for i in ipairs(unifieddyes.SATS) do - local sat = (palette == "wallmounted") and "" or unifieddyes.SATS[i] - for _, hue in ipairs(unifieddyes.HUES_EXTENDED) do - for _, val in ipairs(unifieddyes.VALS_EXTENDED) do - local color = val..hue[1]..sat - if unifieddyes.getpaletteidx("dye:"..color, palette2) then - unifieddyes.palette_has_color[palette.."_"..color] = true - end - end - end - end - - for y = 0, 15 do - local grey = "grey_"..y - - if y == 0 then grey = "black" - elseif y == 4 then grey = "dark_grey" - elseif y == 8 then grey = "grey" - elseif y == 11 then grey = "light_grey" - elseif y == 15 then grey = "white" - end - if unifieddyes.getpaletteidx("dye:"..grey, palette2) then - unifieddyes.palette_has_color[palette.."_"..grey] = true - end - end -end - -unifieddyes.palette_has_color["wallmounted_light_red"] = true - --- crafting! - -unifieddyes.base_color_crafts = { - { "red", "flowers:rose", nil, nil, nil, nil, 4 }, - { "vermilion", "dye:red", "dye:orange", nil, nil, nil, 3 }, - { "orange", "flowers:tulip", nil, nil, nil, nil, 4 }, - { "orange", "dye:red", "dye:yellow", nil, nil, nil, 2 }, - { "amber", "dye:orange", "dye:yellow", nil, nil, nil, 2 }, - { "yellow", "flowers:dandelion_yellow", nil, nil, nil, nil, 4 }, - { "lime", "dye:yellow", "dye:chartreuse", nil, nil, nil, 2 }, - { "lime", "dye:yellow", "dye:yellow", "dye:green", nil, nil, 3 }, - { "chartreuse", "dye:yellow", "dye:green", nil, nil, nil, 2 }, - { "harlequin", "dye:chartreuse", "dye:green", nil, nil, nil, 2 }, - { "harlequin", "dye:yellow", "dye:green", "dye:green", nil, nil, 3 }, - { "green", "default:cactus", nil, nil, nil, nil, 4 }, - { "green", "dye:yellow", "dye:blue", nil, nil, nil, 2 }, - { "malachite", "dye:green", "dye:spring", nil, nil, nil, 2 }, - { "malachite", "dye:green", "dye:green", "dye:cyan", nil, nil, 3 }, - { "malachite", "dye:green", "dye:green", "dye:green", "dye:blue", nil, 4 }, - { "spring", "dye:green", "dye:cyan", nil, nil, nil, 2 }, - { "spring", "dye:green", "dye:green", "dye:blue", nil, nil, 3 }, - { "turquoise", "dye:spring", "dye:cyan", nil, nil, nil, 2 }, - { "turquoise", "dye:green", "dye:cyan", "dye:cyan", nil, nil, 3 }, - { "turquoise", "dye:green", "dye:green", "dye:green", "dye:blue", "dye:blue", 5 }, - { "cyan", "dye:green", "dye:blue", nil, nil, nil, 2 }, - { "cerulean", "dye:cyan", "dye:azure", nil, nil, nil, 2 }, - { "cerulean", "dye:cyan", "dye:cyan", "dye:blue", nil, nil, 3 }, - { "cerulean", "dye:green", "dye:green", "dye:blue", "dye:blue", "dye:blue", 5 }, - { "azure", "dye:cyan", "dye:blue", nil, nil, nil, 2 }, - { "azure", "dye:green", "dye:blue", "dye:blue", nil, nil, 3 }, - { "sapphire", "dye:azure", "dye:blue", nil, nil, nil, 2 }, - { "sapphire", "dye:cyan", "dye:blue", "dye:blue", nil, nil, 3 }, - { "sapphire", "dye:green", "dye:blue", "dye:blue", "dye:blue", nil, 4 }, - { "blue", "flowers:geranium", nil, nil, nil, nil, 4 }, - { "indigo", "dye:blue", "dye:violet", nil, nil, nil, 2 }, - { "violet", "flowers:viola", nil, nil, nil, nil, 4 }, - { "violet", "dye:blue", "dye:magenta", nil, nil, nil, 2 }, - { "mulberry", "dye:violet", "dye:magenta", nil, nil, nil, 2 }, - { "mulberry", "dye:violet", "dye:blue", "dye:red", nil, nil, 3 }, - { "magenta", "dye:blue", "dye:red", nil, nil, nil, 2 }, - { "fuchsia", "dye:magenta", "dye:rose", nil, nil, nil, 2 }, - { "fuchsia", "dye:blue", "dye:red", "dye:rose", nil, nil, 3 }, - { "fuchsia", "dye:red", "dye:violet", nil, nil, nil, 2 }, - { "rose", "dye:magenta", "dye:red", nil, nil, nil, 2 }, - { "rose", "dye:red", "dye:red", "dye:blue", nil, nil, 3 }, - { "crimson", "dye:rose", "dye:red", nil, nil, nil, 2 }, - { "crimson", "dye:magenta", "dye:red", "dye:red", nil, nil, 3 }, - { "crimson", "dye:red", "dye:red", "dye:red", "dye:blue", nil, 4 }, - - { "black", "default:coal_lump", nil, nil, nil, nil, 4 }, - { "white", "flowers:dandelion_white", nil, nil, nil, nil, 4 }, -} - -unifieddyes.shade_crafts = { - { "faint_", "", "dye:white", "dye:white", "dye:white", 4 }, - { "pastel_", "", "dye:white", "dye:white", nil, 3 }, - { "light_", "", "dye:white", nil, nil, 2 }, - { "bright_", "", "color", "dye:white", nil, 3 }, - { "", "_s50", "dye:light_grey", nil, nil, 2 }, - { "", "_s50", "dye:black", "dye:white", "dye:white", 3 }, - { "medium_", "", "dye:black", nil, nil, 2 }, - { "medium_", "_s50", "dye:grey", nil, nil, 2 }, - { "medium_", "_s50", "dye:black", "dye:white", nil, 3 }, - { "dark_", "", "dye:black", "dye:black", nil, 3 }, - { "dark_", "_s50", "dye:dark_grey", nil, nil, 2 }, - { "dark_", "_s50", "dye:black", "dye:black", "dye:white", 4 }, -} - -for _,i in ipairs(unifieddyes.base_color_crafts) do - local color = i[1] - local yield = i[7] - - minetest.register_craft( { - type = "shapeless", - output = "dye:"..color.." "..yield, - recipe = { - i[2], - i[3], - i[4], - i[5], - i[6], - }, - }) - - for _,j in ipairs(unifieddyes.shade_crafts) do - local firstdye = j[3] - if firstdye == "color" then firstdye = "dye:"..color end - - -- ignore black, white, anything containing the word "grey" - - if color ~= "black" and color ~= "white" and not string.find(color, "grey") then - - minetest.register_craft( { - type = "shapeless", - output = "dye:"..j[1]..color..j[2].." "..j[6], - recipe = { - "dye:"..color, - firstdye, - j[4], - j[5] - }, - }) - end - end -end - --- greys - -unifieddyes.greymixes = { - { 1, "dye:black", "dye:black", "dye:black", "dye:dark_grey", 4 }, - { 2, "dye:black", "dye:black", "dye:dark_grey", nil, 3 }, - { 3, "dye:black", "dye:dark_grey", nil, nil, 2 }, - { 4, "dye:white", "dye:black", "dye:black", nil, 3 }, - { 5, "dye:dark_grey", "dye:dark_grey", "dye:grey", nil, 3 }, - { 6, "dye:dark_grey", "dye:grey", nil, nil, 2 }, - { 7, "dye:dark_grey", "dye:grey", "dye:grey", nil, 3 }, - { 8, "dye:white", "dye:black", nil, nil, 2 }, - { 9, "dye:grey", "dye:grey", "dye:light_grey", nil, 3 }, - { 10, "dye:grey", "dye:light_grey", "dye:light_grey", nil, 3 }, - { 11, "dye:white", "dye:white", "dye:black", nil, 3 }, - { 12, "dye:light_grey", "dye:light_grey", "dye:white", nil, 3 }, - { 13, "dye:light_grey", "dye:white", nil, nil, 2 }, - { 14, "dye:white", "dye:white", "dye:light_grey", nil, 3 }, -} - -for _, i in ipairs(unifieddyes.greymixes) do - local shade = i[1] - local dye1 = i[2] - local dye2 = i[3] - local dye3 = i[4] - local dye4 = i[5] - local yield = i[6] - local color = "grey_"..shade - if shade == 4 then - color = "dark_grey" - elseif shade == 8 then - color = "grey" - elseif shade == 11 then - color = "light_grey" - end - - minetest.register_craft( { - type = "shapeless", - output = "dye:"..color.." "..yield, - recipe = { - dye1, - dye2, - dye3, - dye4, - }, - }) -end - --- we can't make dark orange anymore because brown/medium orange conflicts - -minetest.register_craft( { - type = "shapeless", - output = "dye:dark_orange", - recipe = { - "dye:brown", - "dye:brown" - }, -}) - --- aliases - -minetest.register_alias("dye:light_red", "dye:pink") -minetest.register_alias("dye:medium_orange", "dye:brown") - -minetest.register_alias("unifieddyes:black", "dye:black") -minetest.register_alias("unifieddyes:dark_grey", "dye:dark_grey") -minetest.register_alias("unifieddyes:grey", "dye:grey") -minetest.register_alias("unifieddyes:light_grey", "dye:light_grey") -minetest.register_alias("unifieddyes:white", "dye:white") - -minetest.register_alias("unifieddyes:grey_0", "dye:black") -minetest.register_alias("unifieddyes:grey_4", "dye:dark_grey") -minetest.register_alias("unifieddyes:grey_8", "dye:grey") -minetest.register_alias("unifieddyes:grey_11", "dye:light_grey") -minetest.register_alias("unifieddyes:grey_15", "dye:white") - -minetest.register_alias("unifieddyes:white_paint", "dye:white") -minetest.register_alias("unifieddyes:titanium_dioxide", "dye:white") -minetest.register_alias("unifieddyes:lightgrey_paint", "dye:light_grey") -minetest.register_alias("unifieddyes:grey_paint", "dye:grey") -minetest.register_alias("unifieddyes:darkgrey_paint", "dye:dark_grey") -minetest.register_alias("unifieddyes:carbon_black", "dye:black") - -minetest.register_alias("unifieddyes:brown", "dye:brown") +dofile(modpath.."/color-tables.lua") +dofile(modpath.."/api.lua") +dofile(modpath.."/airbrush.lua") +dofile(modpath.."/dyes-crafting.lua") +dofile(modpath.."/aliases.lua") print(S("[UnifiedDyes] Loaded!")) - diff --git a/mods/vehicle_mash/framework.lua b/mods/vehicle_mash/framework.lua index 38be829b..062ef496 100644 --- a/mods/vehicle_mash/framework.lua +++ b/mods/vehicle_mash/framework.lua @@ -7,8 +7,8 @@ function vehicle_mash.register_vehicle(name, def) terrain_type = def.terrain_type, collisionbox = def.collisionbox, can_fly = def.can_fly, - can_go_down = def.can_go_down, - can_go_up = def.can_go_up, + can_go_down = def.can_go_down, -- Applies only when `can_fly` is enabled + can_go_up = def.can_go_up, -- Applies only when `can_fly` is enabled player_rotation = def.player_rotation, driver_attach_at = def.driver_attach_at, driver_eye_offset = def.driver_eye_offset, @@ -33,8 +33,12 @@ function vehicle_mash.register_vehicle(name, def) tiles = def.tiles, visual_size = def.visual_size, stepheight = def.stepheight, + max_speed_forward = def.max_speed_forward, max_speed_reverse = def.max_speed_reverse, + max_speed_upwards = def.max_speed_upwards, -- Applies only when `can_fly` is enabled + max_speed_downwards = def.max_speed_downwards, -- Applies only when `can_fly` is enabled + accel = def.accel, braking = def.braking, turn_spd = def.turn_speed, diff --git a/mods/vehicle_mash/template.lua b/mods/vehicle_mash/template.lua index 4e8023d6..1cc8cf66 100644 --- a/mods/vehicle_mash/template.lua +++ b/mods/vehicle_mash/template.lua @@ -1,16 +1,30 @@ local name = "car_template" -- mod name of vehicle local definition = { + terrain_type = 1, -- 0 = air, 1 = land, 2 = liquid, 3 = land + liquid description = "Template car", -- name as seen in inventory collisionbox = {0, 0, 0, 0, 0, 0}, -- back, bottom, starboard, front, top, port onplace_position_adj = 0, -- adjust placement position up/down - is_boat = false, -- does vehicle travel on water? + enable_crash = true, -- whether to destroy the vehicle when going too fast and crashes with a block or not + can_fly = false, -- if enabled, the specified vehicle will be able to fly around + can_go_down = false, -- applies only when `can_fly` is enabled + can_go_up = false, -- applies only when `can_fly` is enabled player_rotation = {x=0,y=0,z=0}, -- rotate player so they sit facing the correct direction driver_attach_at = {x=0,y=0,z=0}, -- attach the driver at driver_eye_offset = {x=0, y=0, z=0}, -- offset for first person driver view - number_of_passengers = 0, -- testing: 0 for none, do not increase at this time! - passenger_attach_at = {x=0,y=0,z=0}, -- attach the passenger, if applicable, at - passenger_eye_offset = {x=0, y=0, z=0}, -- offset for first person passenger view + number_of_passengers = 0, -- maximum number of passengers. Can have 3 passengers maximum + passenger_attach_at = {x=0,y=0,z=0}, -- attach the 1st passenger, if applicable, at the specified positions + passenger_eye_offset = {x=0, y=0, z=0}, -- offset for the 1st passenger in first-person view + passenger_detach_pos_offset = {x=0,y=0,z=0}, -- offset for the 1st passenger when they leave the vehicle + + passenger2_attach_at = {x=0,y=0,z=0}, -- attach the 2nd passenger, if applicable, at the specified positions + passenger2_eye_offset = {x=0,y=0,z=0}, -- offset for the 2nd passenger in first-person view + passenger2_detach_pos_offset = {x=0,y=0,z=0}, -- offset for the 2nd passenger when they leave the vehicle + + passenger3_attach_at = {x=0,y=0,z=0}, -- attach the 3rd passenger, if applicable, at the specified positions + passenger3_eye_offset = {x=0,y=0,z=0}, -- offset for the 3rd passenger in first-person view + passenger3_detach_pos_offset = {x=0,y=0,z=0}, -- offset for the 3rd passenger when they leave the vehicle + inventory_image = "filename.png", -- image to use in inventory wield_image = "filename.png", -- image to use in hand wield_scale = {x=1, y=1, z=1}, -- @@ -21,10 +35,12 @@ local definition = { stepheight = 0, -- what can the vehicle climb over?, 0.6 = climb slabs, 1.1 = climb nodes max_speed_forward = 10, -- vehicle maximum forward speed max_speed_reverse = 5, -- vehicle maximum reverse speed + max_speed_upwards = 5, -- vehicle maximum upwards speed (applies only if `can_fly` is enabled) + max_speed_downwards = 3.5, -- vehicle maximum downwards speed (applies only if `can_fly` is enabled) accel = 1, -- how fast vehicle accelerates braking = 2, -- how fast can the vehicle stop turn_speed = 2, -- how quick can the vehicle turn - drop_on_destroy = "", -- what gets dropped when vehicle is destroyed + drop_on_destroy = {""}, -- what gets dropped when vehicle is destroyed recipe = {} -- crafting recipe } diff --git a/mods/wine/init.lua b/mods/wine/init.lua index a31882ad..7467c788 100644 --- a/mods/wine/init.lua +++ b/mods/wine/init.lua @@ -66,6 +66,7 @@ local ferment = { {"farming:grapes", "wine:glass_wine"}, {"farming:barley", "wine:glass_beer"}, {"mobs:honey", "wine:glass_mead"}, + {"xdecor:honey", "wine:glass_mead"}, -- for when xdcecor is installed {"default:apple", "wine:glass_cider"}, {"default:papyrus", "wine:glass_rum"}, {"wine:blue_agave", "wine:glass_tequila"}, @@ -210,9 +211,9 @@ for n = 1, #beverages do }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = glass .. " 9", - recipe = {"wine:bottle_" .. name}, + recipe = {{"wine:bottle_" .. name}} }) end end @@ -238,10 +239,10 @@ and farming.mod and (farming.mod == "undo" or farming.mod == "redo") then }) minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "wine:glass_champagne_raw", recipe = { - "wine:glass_wine", "farming:sugar" + {"wine:glass_wine", "farming:sugar"} } }) end @@ -331,9 +332,9 @@ minetest.register_node("wine:blue_agave", { -- blue agave into cyan dye minetest.register_craft( { - type = "shapeless", +-- type = "shapeless", output = "dye:cyan 4", - recipe = {"wine:blue_agave"} + recipe = {{"wine:blue_agave"}} }) -- blue agave as fuel @@ -395,11 +396,11 @@ if minetest.get_modpath("farming") and farming.mod and (farming.mod == "redo" or farming.mod == "undo") then minetest.register_craft({ - type = "shapeless", +-- type = "shapeless", output = "wine:glass_mint", recipe = { - "wine:glass_bourbon", "farming:sugar", "farming:mint_leaf", - "farming:mint_leaf", "farming:mint_leaf" + {"farming:mint_leaf", "farming:mint_leaf", "farming:mint_leaf"}, + {"wine:glass_bourbon", "farming:sugar", ""} } }) end diff --git a/mods/wine/license.txt b/mods/wine/license.txt index 49512073..365aad5c 100644 --- a/mods/wine/license.txt +++ b/mods/wine/license.txt @@ -30,15 +30,17 @@ RiverKpocc @ deviantart.com wine_wheat_beer_glass.png Textures by Darkstalker (cc-by-3.0 license) - wine_beer_bottle.png - wine_wheat_beer_bottle.png - wine_sake_bottle.png - wine_cider.bottle.png - wine_mead_bottle.png wine_mint_bottle.png wine_mint_glass.png +Textures by Darkstalker and edited by Felfa (cc-by-3.0 license) + wine_beer_bottle.png + wine_wheat_beer_bottle.png + wine_cider.bottle.png + wine_mead_bottle.png + Textures by Felfa (CC0) wine_champagne*.png wine_coffee*.png wine_brandy*.png + wine_sake_bottle.png diff --git a/mods/wine/textures/wine_beer_bottle.png b/mods/wine/textures/wine_beer_bottle.png index 565e0261..3438bf49 100644 Binary files a/mods/wine/textures/wine_beer_bottle.png and b/mods/wine/textures/wine_beer_bottle.png differ diff --git a/mods/wine/textures/wine_cider_bottle.png b/mods/wine/textures/wine_cider_bottle.png index 16067748..b79a361f 100644 Binary files a/mods/wine/textures/wine_cider_bottle.png and b/mods/wine/textures/wine_cider_bottle.png differ diff --git a/mods/wine/textures/wine_mead_bottle.png b/mods/wine/textures/wine_mead_bottle.png index 0d81b5b0..d4f153ae 100644 Binary files a/mods/wine/textures/wine_mead_bottle.png and b/mods/wine/textures/wine_mead_bottle.png differ diff --git a/mods/wine/textures/wine_sake_bottle.png b/mods/wine/textures/wine_sake_bottle.png index 883457a8..a069dc7f 100644 Binary files a/mods/wine/textures/wine_sake_bottle.png and b/mods/wine/textures/wine_sake_bottle.png differ diff --git a/mods/wine/textures/wine_wheat_beer_bottle.png b/mods/wine/textures/wine_wheat_beer_bottle.png index ab2d14b8..de8a7db3 100644 Binary files a/mods/wine/textures/wine_wheat_beer_bottle.png and b/mods/wine/textures/wine_wheat_beer_bottle.png differ diff --git a/mods/xdecor/.luacheckrc b/mods/xdecor/.luacheckrc index c89cac7c..8cdd8c35 100644 --- a/mods/xdecor/.luacheckrc +++ b/mods/xdecor/.luacheckrc @@ -1,4 +1,3 @@ -unused_args = false allow_defined_top = true read_globals = { diff --git a/mods/xdecor/LICENSE b/mods/xdecor/LICENSE index 8b744c6d..938b40ef 100644 --- a/mods/xdecor/LICENSE +++ b/mods/xdecor/LICENSE @@ -1,15 +1,17 @@ ┌──────────────────────────────────────────────────────────────────────┐ -│ Copyright (c) 2015-2017 kilbith │ -│ │ -│ Code: BSD │ -│ Textures: WTFPL (credits: Gambit, kilbith, Cisoun) │ -│ Sounds: │ +│ Copyright (c) 2015-2021 kilbith │ +│ │ +│ Code: BSD │ +│ Textures: WTFPL (credits: Gambit, kilbith, Cisoun) │ +│ Textures (radio, speaker, hanging candle, rooster) by │ +│ gigomaf (CC BY-NC 3.0) │ +│ Sounds: │ │ - xdecor_boiling_water.ogg - by Audionautics - CC BY-SA │ -│ freesound.org/people/Audionautics/sounds/133901/ │ +│ freesound.org/people/Audionautics/sounds/133901/ │ │ - xdecor_enchanting.ogg - by Timbre - CC BY-SA-NC │ │ freesound.org/people/Timbre/sounds/221683/ │ -│ - xdecor_bouncy.ogg - by Blender Foundation - CC BY 3.0 │ -│ opengameart.org/content/funny-comic-cartoon-bounce-sound │ +│ - xdecor_bouncy.ogg - by Blender Foundation - CC BY 3.0 │ +│ opengameart.org/content/funny-comic-cartoon-bounce-sound │ └──────────────────────────────────────────────────────────────────────┘ diff --git a/mods/xdecor/README.md b/mods/xdecor/README.md index 3c08ac57..05340a2d 100644 --- a/mods/xdecor/README.md +++ b/mods/xdecor/README.md @@ -1,16 +1,17 @@ ## X-Decor ## -##### A decoration mod meant to be simple and well-featured. ##### -##### It adds a bunch of cute cubes, various mechanisms and stuff for [cutting](https://forum.minetest.net/viewtopic.php?f=11&t=14085), [enchanting](https://forum.minetest.net/viewtopic.php?f=11&t=14087), cooking, etc. ##### -##### This mod is a lightweight alternative to Home Decor and More Blocks all together. ##### +[![ContentDB](https://content.minetest.net/packages/jp/xdecor/shields/downloads/)](https://content.minetest.net/packages/jp/xdecor/) + +A decoration mod meant to be simple and well-featured. +It adds a bunch of cute cubes, various mechanisms and stuff for [cutting](https://forum.minetest.net/viewtopic.php?f=11&t=14085), [enchanting](https://forum.minetest.net/viewtopic.php?f=11&t=14087), cooking, etc. +This mod is a lightweight alternative to HomeDecor and MoreBlocks. + +### Requirements ### +This mod requires at least version 5.1 of Minetest. ### Credits ### -##### Special thanks to Gambit for the textures from the PixelBOX pack for Minetest. ##### - -##### Thanks to all contributors that keep this mod alive. ##### +Special thanks to Gambit for the textures from the PixelBOX pack for Minetest. +Thanks to all contributors who keep this mod alive. ![Preview](http://i.imgur.com/AVoyCQy.png) - -### Requirements ### -This mod requires at least version 5.0.0 of minetest. diff --git a/mods/xdecor/handlers/helpers.lua b/mods/xdecor/handlers/helpers.lua index c80d9aee..dc14b244 100644 --- a/mods/xdecor/handlers/helpers.lua +++ b/mods/xdecor/handlers/helpers.lua @@ -52,7 +52,7 @@ function xdecor.stairs_valid_def(def) not (def.groups.not_cuttable == 1) and not def.groups.wool and (def.tiles and type(def.tiles[1]) == "string" and not - def.tiles[1]:find("default_mineral")) and + def.tiles[1]:find("default_mineral")) and not def.mesecons and def.description and def.description ~= "" and diff --git a/mods/xdecor/mod.conf b/mods/xdecor/mod.conf index 0d492e0c..62a4a4da 100644 --- a/mods/xdecor/mod.conf +++ b/mods/xdecor/mod.conf @@ -2,4 +2,4 @@ name = xdecor description = A decoration mod meant to be simple and well-featured. depends = default, bucket, doors, farming, stairs, xpanes optional_depends = fire, oresplus, moreblocks, mesecons -min_minetest_version = 5.0.0 +min_minetest_version = 5.1.0 diff --git a/mods/xdecor/src/chess.lua b/mods/xdecor/src/chess.lua index 515e31b6..d9db38ea 100644 --- a/mods/xdecor/src/chess.lua +++ b/mods/xdecor/src/chess.lua @@ -1015,18 +1015,16 @@ function realchess.move(pos, from_list, from_index, to_list, to_index, _, player if from_y < to_y then -- Goes down -- Ensure that no piece disturbs the way - for i = 1, dx - 1 do - if inv:get_stack( - from_list, xy_to_index(from_x, from_y + i)):get_name() ~= "" then + for i = from_y + 1, to_y - 1 do + if inv:get_stack(from_list, xy_to_index(from_x, i)):get_name() ~= "" then return 0 end end else -- Goes up -- Ensure that no piece disturbs the way - for i = 1, dx - 1 do - if inv:get_stack( - from_list, xy_to_index(from_x, from_y - i)):get_name() ~= "" then + for i = to_y + 1, from_y - 1 do + if inv:get_stack(from_list, xy_to_index(from_x, i)):get_name() ~= "" then return 0 end end @@ -1035,9 +1033,8 @@ function realchess.move(pos, from_list, from_index, to_list, to_index, _, player if from_y == to_y then -- Goes right -- Ensure that no piece disturbs the way - for i = 1, dx - 1 do - if inv:get_stack( - from_list, xy_to_index(from_x + i, from_y)):get_name() ~= "" then + for i = from_x + 1, to_x - 1 do + if inv:get_stack(from_list, xy_to_index(i, from_y)):get_name() ~= "" then return 0 end end @@ -1064,9 +1061,8 @@ function realchess.move(pos, from_list, from_index, to_list, to_index, _, player if from_y == to_y then -- Goes left -- Ensure that no piece disturbs the way and destination cell does - for i = 1, dx - 1 do - if inv:get_stack( - from_list, xy_to_index(from_x - i, from_y)):get_name() ~= "" then + for i = to_x + 1, from_x - 1 do + if inv:get_stack(from_list, xy_to_index(i, from_y)):get_name() ~= "" then return 0 end end diff --git a/mods/xdecor/src/enchanting.lua b/mods/xdecor/src/enchanting.lua index 2abb07bd..0cfd192f 100644 --- a/mods/xdecor/src/enchanting.lua +++ b/mods/xdecor/src/enchanting.lua @@ -65,12 +65,15 @@ local enchant_buttons = { function enchanting.formspec(pos, num) local meta = minetest.get_meta(pos) - local formspec = [[ size[9,9;] + local formspec = [[ + size[9,8.6;] + no_prepend[] bgcolor[#080808BB;true] - background[0,0;9,9;ench_ui.png] + listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] + background9[0,0;9,9;ench_ui.png;6] list[context;tool;0.9,2.9;1,1;] list[context;mese;2,2.9;1,1;] - list[current_player;main;0.5,4.5;8,4;] + list[current_player;main;0.55,4.5;8,4;] listring[current_player;main] listring[context;tool] listring[current_player;main] @@ -80,7 +83,7 @@ function enchanting.formspec(pos, num) .."tooltip[sharp;"..FS("Your weapon inflicts more damages").."]" .."tooltip[durable;"..FS("Your tool last longer").."]" .."tooltip[fast;"..FS("Your tool digs faster").."]" - ..default.gui_slots .. default.get_hotbar_bg(0.5,4.5) + ..default.gui_slots .. default.get_hotbar_bg(0.55, 4.5) formspec = formspec .. (enchant_buttons[num] or "") meta:set_string("formspec", formspec) diff --git a/mods/xdecor/src/mechanisms.lua b/mods/xdecor/src/mechanisms.lua index 328f503d..c6e8cd0e 100644 --- a/mods/xdecor/src/mechanisms.lua +++ b/mods/xdecor/src/mechanisms.lua @@ -1,6 +1,6 @@ -- Thanks to sofar for helping with that code. -minetest.setting_set("nodetimer_interval", 0.1) +minetest.settings:set("nodetimer_interval", 0.1) local plate = {} screwdriver = screwdriver or {} diff --git a/mods/xdecor/src/nodes.lua b/mods/xdecor/src/nodes.lua index fae8abab..f4dd20c2 100644 --- a/mods/xdecor/src/nodes.lua +++ b/mods/xdecor/src/nodes.lua @@ -143,7 +143,7 @@ xdecor.register("candle", { animation = {type="vertical_frames", length = 1.5} }, { - name = "xdecor_candle_floor.png", + name = "xdecor_candle_hanging.png", animation = {type="vertical_frames", length = 1.5} }, { @@ -153,7 +153,7 @@ xdecor.register("candle", { }, selection_box = { type = "wallmounted", - wall_top = {-0.25, -0.5, -0.25, 0.25, 0.1, 0.25}, + wall_top = {-0.25, -0.3, -0.25, 0.25, 0.5, 0.25}, wall_bottom = {-0.25, -0.5, -0.25, 0.25, 0.1, 0.25}, wall_side = {-0.5, -0.35, -0.15, -0.15, 0.4, 0.15} } @@ -397,6 +397,15 @@ xdecor.register("ivy", { sounds = default.node_sound_leaves_defaults() }) +xdecor.register("rooster", { + description = S("Rooster"), + drawtype = "torchlike", + inventory_image = "xdecor_rooster.png", + walkable = false, + groups = {snappy = 3, attached_node = 1}, + tiles = {"xdecor_rooster.png"}, +}) + xdecor.register("lantern", { description = S("Lantern"), light_source = 13, @@ -418,6 +427,7 @@ xdecor.register("lantern", { local xdecor_lightbox = { iron = S("Iron Light Box"), wooden = S("Wooden Light Box"), + wooden2 = S("Wooden Light Box 2"), } for l, desc in pairs(xdecor_lightbox) do @@ -609,3 +619,19 @@ xdecor.register("woodframed_glass", { groups = {cracky = 2, oddly_breakable_by_hand = 1}, sounds = default.node_sound_glass_defaults() }) + +for _, v in ipairs({"radio", "speaker"}) do + xdecor.register(v, { + description = v:gsub("^%l", string.upper), + on_rotate = screwdriver.rotate_simple, + tiles = { + "xdecor_" .. v .. "_top.png", + "xdecor_" .. v .. "_side.png", + "xdecor_" .. v .. "_side.png", + "xdecor_" .. v .. "_side.png", + "xdecor_" .. v .. "_back.png", + "xdecor_" .. v .. "_front.png", + }, + groups = {cracky = 2, not_cuttable = 1}, + }) +end diff --git a/mods/xdecor/src/recipes.lua b/mods/xdecor/src/recipes.lua index ec51ee00..10fd33a2 100644 --- a/mods/xdecor/src/recipes.lua +++ b/mods/xdecor/src/recipes.lua @@ -180,6 +180,30 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "xdecor:radio", + type = "shapeless", + recipe = {"xdecor:speaker", "xdecor:speaker"} +}) + +minetest.register_craft({ + output = "xdecor:rooster", + recipe = { + {"default:gold_ingot", "", "default:gold_ingot"}, + {"", "default:gold_ingot", ""}, + {"default:gold_ingot", "", "default:gold_ingot"} + } +}) + +minetest.register_craft({ + output = "xdecor:speaker", + recipe = { + {"default:gold_ingot", "default:copper_ingot", "default:gold_ingot"}, + {"default:copper_ingot", "", "default:copper_ingot"}, + {"default:gold_ingot", "default:copper_ingot", "default:gold_ingot"} + } +}) + minetest.register_craft({ output = "xdecor:stone_tile 2", recipe = { @@ -267,3 +291,9 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = "xdecor:wooden2_lightbox", + type = "shapeless", + recipe = {"xdecor:wooden_lightbox"}, +}) + diff --git a/mods/xdecor/src/workbench.lua b/mods/xdecor/src/workbench.lua index e73e4f36..b2252dd5 100644 --- a/mods/xdecor/src/workbench.lua +++ b/mods/xdecor/src/workbench.lua @@ -1,37 +1,19 @@ local workbench = {} -WB = {} +local nodes = {} + screwdriver = screwdriver or {} local min, ceil = math.min, math.ceil -local registered_nodes = minetest.registered_nodes local S = minetest.get_translator("xdecor") local FS = function(...) return minetest.formspec_escape(S(...)) end -- Nodes allowed to be cut -- Only the regular, solid blocks without metas or explosivity can be cut -local nodes = {} -for node, def in pairs(registered_nodes) do +for node, def in pairs(minetest.registered_nodes) do if xdecor.stairs_valid_def(def) then nodes[#nodes + 1] = node end end --- Optionally, you can register custom cuttable nodes in the workbench -WB.custom_nodes_register = { - -- "default:leaves", -} - -setmetatable(nodes, { - __concat = function(t1, t2) - for i = 1, #t2 do - t1[#t1 + 1] = t2[i] - end - - return t1 - end -}) - -nodes = nodes .. WB.custom_nodes_register - -- Nodeboxes definitions workbench.defs = { -- Name YieldX YZ WH L @@ -54,8 +36,15 @@ workbench.defs = { local repairable_tools = {"pick", "axe", "shovel", "sword", "hoe", "armor", "shield"} +local custom_repairable = {} +function xdecor:register_repairable(item) + custom_repairable[item] = true +end + -- Tools allowed to be repaired function workbench:repairable(stack) + if custom_repairable[stack] then return true end + for _, t in ipairs(repairable_tools) do if stack:find(t) then return true @@ -63,6 +52,11 @@ function workbench:repairable(stack) end end +-- method to allow other mods to check if an item is repairable +function xdecor:is_repairable(stack) + return workbench:repairable(stack) +end + function workbench:get_output(inv, input, name) local output = {} for i = 1, #self.defs do @@ -83,7 +77,7 @@ local main_fs = "label[0.9,1.23;"..FS("Cut").."]" box[-0.05,2;2.05,0.9;#555555] ]] .."button[0,0;2,1;craft;"..FS("Crafting").."]" .."button[2,0;2,1;storage;"..FS("Storage").."]" - ..[[ image[3,1;1,1;gui_furnace_arrow_bg.png^[transformR270] + ..[[ image[3,1;1,1;gui_arrow.png] image[0,1;1,1;worktable_saw.png] image[0,2;1,1;worktable_anvil.png] image[3,2;1,1;hammer_layout.png] @@ -187,7 +181,7 @@ function workbench.allow_put(pos, listname, index, stack, player) local stackname = stack:get_name() if (listname == "tool" and stack:get_wear() > 0 and workbench:repairable(stackname)) or - (listname == "input" and registered_nodes[stackname .. "_cube"]) or + (listname == "input" and minetest.registered_nodes[stackname .. "_cube"]) or (listname == "hammer" and stackname == "xdecor:hammer") or listname == "storage" then return stack:get_count() @@ -232,7 +226,7 @@ function workbench.on_take(pos, listname, index, stack, player) local stackname = stack:get_name() if listname == "input" then - if stackname == inputname and registered_nodes[inputname .. "_cube"] then + if stackname == inputname and minetest.registered_nodes[inputname .. "_cube"] then workbench:get_output(inv, input, stackname) else inv:set_list("forms", {}) @@ -278,7 +272,7 @@ for _, d in ipairs(workbench.defs) do for i = 1, #nodes do local node = nodes[i] local mod_name, item_name = node:match("^(.-):(.*)") - local def = registered_nodes[node] + local def = minetest.registered_nodes[node] if item_name and d[3] then local groups = {} @@ -302,7 +296,7 @@ for i = 1, #nodes do end --TODO: Translation support for Stairs/Slab - if not registered_nodes["stairs:slab_" .. item_name] then + if not minetest.registered_nodes["stairs:slab_" .. item_name] then stairs.register_stair_and_slab(item_name, node, groups, tiles, def.description .. " Stair", def.description .. " Slab", def.sounds) diff --git a/mods/xdecor/textures/gui_arrow.png b/mods/xdecor/textures/gui_arrow.png new file mode 100644 index 00000000..df1bbdb4 Binary files /dev/null and b/mods/xdecor/textures/gui_arrow.png differ diff --git a/mods/xdecor/textures/xdecor_candle_hanging.png b/mods/xdecor/textures/xdecor_candle_hanging.png new file mode 100644 index 00000000..b8595a7e Binary files /dev/null and b/mods/xdecor/textures/xdecor_candle_hanging.png differ diff --git a/mods/xdecor/textures/xdecor_radio_back.png b/mods/xdecor/textures/xdecor_radio_back.png new file mode 100644 index 00000000..35ee768f Binary files /dev/null and b/mods/xdecor/textures/xdecor_radio_back.png differ diff --git a/mods/xdecor/textures/xdecor_radio_front.png b/mods/xdecor/textures/xdecor_radio_front.png new file mode 100644 index 00000000..6300aa81 Binary files /dev/null and b/mods/xdecor/textures/xdecor_radio_front.png differ diff --git a/mods/xdecor/textures/xdecor_radio_side.png b/mods/xdecor/textures/xdecor_radio_side.png new file mode 100644 index 00000000..cf607406 Binary files /dev/null and b/mods/xdecor/textures/xdecor_radio_side.png differ diff --git a/mods/xdecor/textures/xdecor_radio_top.png b/mods/xdecor/textures/xdecor_radio_top.png new file mode 100644 index 00000000..fe5f88a9 Binary files /dev/null and b/mods/xdecor/textures/xdecor_radio_top.png differ diff --git a/mods/xdecor/textures/xdecor_rooster.png b/mods/xdecor/textures/xdecor_rooster.png new file mode 100644 index 00000000..b68a173e Binary files /dev/null and b/mods/xdecor/textures/xdecor_rooster.png differ diff --git a/mods/xdecor/textures/xdecor_speaker_back.png b/mods/xdecor/textures/xdecor_speaker_back.png new file mode 100644 index 00000000..7b28936c Binary files /dev/null and b/mods/xdecor/textures/xdecor_speaker_back.png differ diff --git a/mods/xdecor/textures/xdecor_speaker_front.png b/mods/xdecor/textures/xdecor_speaker_front.png new file mode 100644 index 00000000..b19b8352 Binary files /dev/null and b/mods/xdecor/textures/xdecor_speaker_front.png differ diff --git a/mods/xdecor/textures/xdecor_speaker_side.png b/mods/xdecor/textures/xdecor_speaker_side.png new file mode 100644 index 00000000..7b28936c Binary files /dev/null and b/mods/xdecor/textures/xdecor_speaker_side.png differ diff --git a/mods/xdecor/textures/xdecor_speaker_top.png b/mods/xdecor/textures/xdecor_speaker_top.png new file mode 100644 index 00000000..b45f3f14 Binary files /dev/null and b/mods/xdecor/textures/xdecor_speaker_top.png differ diff --git a/mods/xdecor/textures/xdecor_wooden2_lightbox.png b/mods/xdecor/textures/xdecor_wooden2_lightbox.png new file mode 100644 index 00000000..a53ad96a Binary files /dev/null and b/mods/xdecor/textures/xdecor_wooden2_lightbox.png differ